{"id":16195510,"url":"https://github.com/medmunds/rate-the-docs","last_synced_at":"2025-09-18T17:31:41.161Z","repository":{"id":42210685,"uuid":"145260973","full_name":"medmunds/rate-the-docs","owner":"medmunds","description":"Feedback widget for Read the Docs documentation","archived":false,"fork":false,"pushed_at":"2023-01-06T01:47:02.000Z","size":775,"stargazers_count":5,"open_issues_count":8,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-31T13:51:28.585Z","etag":null,"topics":["feedback-collection","readthedocs","sphinx-doc"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/medmunds.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-19T00:11:06.000Z","updated_at":"2022-12-25T08:08:01.000Z","dependencies_parsed_at":"2023-02-05T02:01:21.785Z","dependency_job_id":null,"html_url":"https://github.com/medmunds/rate-the-docs","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/medmunds/rate-the-docs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/medmunds%2Frate-the-docs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/medmunds%2Frate-the-docs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/medmunds%2Frate-the-docs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/medmunds%2Frate-the-docs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/medmunds","download_url":"https://codeload.github.com/medmunds/rate-the-docs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/medmunds%2Frate-the-docs/sbom","scorecard":{"id":634493,"data":{"date":"2025-08-11","repo":{"name":"github.com/medmunds/rate-the-docs","commit":"356404e71af831a61532ad5d4621e2e9fb1d79aa"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.8,"checks":[{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/17 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.1.1 not signed: https://api.github.com/repos/medmunds/rate-the-docs/releases/16601035","Warn: release artifact v0.1.0 not signed: https://api.github.com/repos/medmunds/rate-the-docs/releases/12468819","Warn: release artifact v0.1.1 does not have provenance: https://api.github.com/repos/medmunds/rate-the-docs/releases/16601035","Warn: release artifact v0.1.0 does not have provenance: https://api.github.com/repos/medmunds/rate-the-docs/releases/12468819"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'main'","Warn: could not determine whether codeowners review is allowed","Warn: no status checks found to merge onto branch 'main'","Warn: PRs are not required to make changes on branch 'main'; or we don't have data to detect it.If you think it might be the latter, make sure to run Scorecard with a PAT or use Repo Rules (that are always public) instead of Branch Protection settings"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"25 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-pfq8-rq6v-vf5m","Warn: Project is vulnerable to: GHSA-7r28-3m3f-r2pr","Warn: Project is vulnerable to: GHSA-r8j5-h5cx-65gg","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-qrpm-p2h7-hrv2","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-hwj9-h5mp-3pm3","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T08:44:59.730Z","repository_id":42210685,"created_at":"2025-08-21T08:44:59.730Z","updated_at":"2025-08-21T08:44:59.730Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275804681,"owners_count":25531731,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-18T02:00:09.552Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feedback-collection","readthedocs","sphinx-doc"],"created_at":"2024-10-10T08:28:26.838Z","updated_at":"2025-09-18T17:31:40.883Z","avatar_url":"https://github.com/medmunds.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rate the Docs\n\n*Rate the Docs* helps documentation authors collect feedback. It's designed \nto work easily with *[Read the Docs][]*-hosted projects, and can be adapted \nfor other sites.\n\nIt adds a simple question to the bottom of each docs page:\n\n![Is this page helpful? Yes/No](_readme/rating.png)\n\nReaders who indicate the page isn't helpful are prompted for additional\nfeedback:\n\n![Sorry… how could we improve this page?](_readme/suggestion.png)\n\nBy default, feedback is recorded using Google Analytics events. This enables\nreporting on the least and most helpful pages, and allows segmenting \"page \nhelpfulness\" reports by other data GA already collects.\n\nYou can supply your own feedback collection API if you don't want to use \nGoogle Analytics.\n\n\n## Basic installation\n\nThis is the simplest installation:\n\n* for Sphinx docs projects hosted on *Read the Docs*\n* loading the latest *Rate the Docs* code from the [Unpkg CDN][]\n* using Google Analytics to record feedback \n\n(Other configuration options are described [below](#advanced-installation).)\n\n1. If you haven't already, [enable Google Analytics][rtd-ga-config] for your \n   *Read the Docs* project, in the RTD project admin page under \"Advanced.\"\n   \n2. Make sure the *Rate the Docs* \"contact us\" link will go somewhere useful. \n   If you already have a docs page at `/contact`, great, you're all set.\n   \n   If not, set up a [page redirect][rtd-page-redirect] in the RTD project \n   admin under \"Redirects.\" You'll want to redirect from `/contact` to \n   whatever your docs contact page is (like say, `/support/help.html`; you \n   shouldn't need to include any `/en/latest` language or version prefixes).\n\n3. Edit your `docs/conf.py` to tell Sphinx to load the *Rate the Docs* code:\n\n    ```python\n    # docs/conf.py\n    # ... if you already have a setup() function, just add to it;\n    # otherwise define setup() toward the end of conf.py:\n    def setup(app):\n        app.add_javascript(\"https://unpkg.com/rate-the-docs\")\n        # ... (any other setup you already had)\n    ``` \n\nNow publish your docs, and you should see a feedback widget at the bottom\nright.\n\n\n## Google Analytics reporting\n\n*Rate the Docs* feedback will appear in Google Analytics under Behavior \u003e \nEvents, with the category RateTheDocs. \n\nYou may want to define some custom Google Analytics reports:\n\n*Pages by average helpfulness*\n\n* Primary dimension: Page\n* Filter: Event Action = Helpful Vote\n* Sort: Avg. Value descending (or ascending)\n\n*Most-downvoted pages*\n\n* Primary dimension: Page\n* Filter: Event Action = Helpful Vote; Event Label = No \n  (or Yes for most-upvoted pages)\n* Sort: Unique Events descending\n\nTip: check unique events (rather than total events) to discount the same\nuser repeatedly voting on the same page during a single session.\n\n*Suggestions*\n\n* Dimensions: Page, Event Label, Date\n* Filter: Event Action = Suggestion\n* Sort: Date descending\n\nThe event label contains the suggestion text.\n\n\n\n## Advanced installation\n\n### Code loading options\n\nIf you're not comfortable loading the latest *Rate the Docs* code (which might \nchange over time), you can pin a specific version:\n\n```python\n# docs/conf.py\ndef setup(app):\n    # pin to version @0.1.0\n    app.add_javascript(\"https://unpkg.com/rate-the-docs@0.1.0\")\n``` \n\nor you can copy the rate-the-docs.min.js file into your `docs/_static` directory \nand serve it yourself:\n\n```python\n# docs/conf.py\ndef setup(app):\n    app.add_javascript(\"rate-the-docs.min.js\")\n``` \n\n### Custom contact link\n\nRather than setting up a `/contact` redirect in *Read the Docs,* you can use\na JavaScript global variable to change the \"contact us\" link.\n\nYou'll need to add some custom JavaScript code to your Sphinx project. An\neasy way to do this is to create a JS file in your Sphinx `docs/_static` dir:\n\n```javascript\n// docs/_static/my-project-config.js\nwindow.RATETHEDOCS_OPTIONS = {\n  contactLink: \"/support/options\"\n};\n``` \n\n... and then edit your `docs/conf.py` to tell Sphinx to load the new JS file:\n\n```python\n# docs/conf.py\n# ...\ndef setup(app):\n    app.add_javascript(\"my-project-config.js\")  # \u003c-- add this\n    app.add_javascript(\"https://unpkg.com/rate-the-docs\")\n    # ...\n``` \n\nThe `contactLink` can be any valid HTML `\u003ca href\u003e`, like \n`\"https://docs.example.com/support#contact\"` \nor `\"mailto:support@example.com\"`. \nRelative links are resolved relative to your docs pages.\n\n(You can also set up `RATETHEDOCS_OPTIONS` in a `\u003cscript\u003e` tag in a custom\nSphinx template, or in any other custom JS file you're loading.)\n\n\n### Custom feedback recording\n\nIf you don't want to use Google Analytics, you can supply your own feedback\nrecording functions in the JavaScript global variable `RATETHEDOCS_OPTIONS`:\n\n```javascript\nwindow.RATETHEDOCS_OPTIONS = {\n  // ... other options ... ,\n  recording: {\n    init: function() { /* ...; */ return true; },\n    recordUpVote: function() { /* ... */ },\n    recordDownVote: function() { /* ... */ },\n    recordSuggestion: function(text) { /* ... */ }\n  }\n};\n``` \n\nThe `recording.init()` function must return `true` if *Rate the Docs* should\nbe enabled; otherwise, the feedback widget will not appear. (The default\nimplementation disables the widget if the user's browser has do-not-track\nset or if Google Analytics can't be loaded.)\n\n\n### Non-*Read the Docs* use\n\nIf you want to use *Rate the Docs* somewhere other than *Read the Docs*,\nyou'll need to ensure that your docs site has:\n\n* A page layout roughly similar to that provided by [sphinx-rtd-theme][]\n  (or you may need to override the positioning from *Rate the Docs'* CSS)\n* [Wyrm][] base CSS styles or similar, plus its CSS class `.sr-only` and \n  button styling classes `.btn`, `.btn-info`, `.btn-neutral` and `.btn-link`)\n* [Font Awesome 4.7][]\n\n(sphinx-rtd-theme includes all of these, and for simplicity and code size \n*Rate the Docs* just assumes they're there.)\n \n\n## Development\n\nTo build *Rate the Docs,* use yarn (or npm):\n\n```shell\nyarn install --dev\nyarn build\n```\n\n*Rate the Docs* targets modern browsers, and specifically doesn't attempt to\nbe compatible with any version of Internet Explorer (other than quietly\nnot loading in IE).\n\n\n[Font Awesome 4.7]: https://fontawesome.com/v4.7.0/\n[Read the Docs]: https://readthedocs.org/\n[rtd-ga-config]: https://docs.readthedocs.io/en/latest/guides/google-analytics.html\n[rtd-page-redirect]: https://docs.readthedocs.io/en/latest/user-defined-redirects.html#page-redirects\n[sphinx-rtd-theme]: https://sphinx-rtd-theme.readthedocs.io/en/latest/\n[Unpkg CDN]: https://unpkg.com/\n[Wyrm]: https://wyrmsass.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmedmunds%2Frate-the-docs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmedmunds%2Frate-the-docs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmedmunds%2Frate-the-docs/lists"}