Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

bookmarklets

Tools for the browser.

Install and run locally

  1. git clone https://github.com/jsnmrs/bookmarklets.git && cd bookmarklets
  2. npm ci
  3. npm start

Adding a bookmarklet

Use the scaffolding script to create the required files:

npm run new -- --name "My Bookmarklet" --author "Your Name" --description "What it does" --tags "accessibility"

This creates:

  • bookmarklets/my-bookmarklet.js with metadata template
  • bookmarklets/my-bookmarklet.html test page stub

Then edit the generated files and run npm start to test locally.

Manual setup

Alternatively, create files manually:

  1. Create a JS file in bookmarklets/ with a JSDoc metadata block:
    /** * @bookmarklet My Bookmarklet Name * @description What the bookmarklet does * @author Your Name * @authorUrl https://example.com * @tags accessibility, utility * @pageTest true */(function(){// Your bookmarklet code here})();
  2. Optionally create a test HTML page in bookmarklets/ with the same base name (no frontmatter needed)
  3. Run npm start to lint JS, build data files, and generate the static site

Metadata fields

FieldRequiredDescription
@bookmarkletYesDisplay name of the bookmarklet
@descriptionYesBrief description of what it does
@authorNoOriginal author's name
@authorUrlNoLink to author or source
@tagsNoComma-separated list of tags
@auditingNoSet to true for auditing favorites
@pageTestNotrue, false, or self for test page behavior

Related web tools

Content Security Policy (CSP) issues

via ANDI - Accessibility Testing Tool - Install

If after pressing the ANDI favelet button, ANDI does not launch after a few seconds, it could be due to the page telling the browser to enforce a Content Security Policy directive. To determine if this is the issue, open the browser's Developer Tools (F12) and attempt to launch ANDI. If the Dev Tools console shows an error message that says "Refused to load the script…because it violates the following Content Security Policy directive" then this is the issue.

If the user desires to use ANDI immediately, Content Security Policy (CSP) can be disabled. Note: It is the user's decision to disable CSP and the user's responsibility to re-enable CSP when testing with ANDI has concluded. If users decide not to disable CSP, and ANDI cannot be launched, it is recommended to use other accessibility testing procedures.

Chrome

  1. Install the Disable Content-Security-Policy extension from the Chrome Web Store
  2. Select the Disable Content-Security-Policy extension button in the Chrome browser toolbar to disable CSP
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable CSP

Firefox

  1. In the address bar, enter about:config
  2. Under Preference Name, select security.csp.enable to disable it
  3. Navigate to the test page, launch ANDI
  4. When done testing with ANDI, re-enable the security.csp.enable

About

Tools for the browser.

Topics

Resources

Contributing

Stars

3 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages