{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Bookmarklets",
  "language": "",
  "home_page_url": "https://bookmarklet.one/",
  "feed_url": "https://bookmarklet.one/feed/feed.json",
  "description": "Discover a curated directory of 50+ lightweight, zero-install browser bookmarklets for SEO, web development, productivity, and design. Drag, drop, and automate in one click.",
  "author": {
    "name": "Amit Yadav",
    "url": "author/url"
  },
  "items": [{
      "id": "https://bookmarklet.one/best-bookmarklets-for-developers/",
      "url": "https://bookmarklet.one/best-bookmarklets-for-developers/",
      "title": "Best Bookmarklets for Developers",
      "content_html": "<p>Bookmarklets are tiny JavaScript snippets saved as browser bookmarks. No extensions, no installs, one click to run. Here are 63 of the best for developers, organized by category.</p>\n<h2 id=\"seo-bookmarklets\" tabindex=\"-1\">SEO Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/best-bookmarklets-for-developers/#seo-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<p>These tools help you audit and optimize pages for search engines.</p>\n<ul>\n<li><a href=\"https://bookmarklet.one/bm/check-amp-version/\">Check AMP Version</a> - Verify if a page uses AMP</li>\n<li><a href=\"https://bookmarklet.one/bm/check-broken-links/\">Check Broken Links</a> - Find dead links on any page</li>\n<li><a href=\"https://bookmarklet.one/bm/check-canonical-tags/\">Check Canonical Tags</a> - Verify canonical URL implementation</li>\n<li><a href=\"https://bookmarklet.one/bm/check-hreflang-tags/\">Check Hreflang Tags</a> - Validate international targeting tags</li>\n<li><a href=\"https://bookmarklet.one/bm/check-image-optimization/\">Check Image Optimization</a> - Audit image sizes and alt text</li>\n<li><a href=\"https://bookmarklet.one/bm/check-indexing-status/\">Check Indexing Status</a> - Quick Google index check</li>\n<li><a href=\"https://bookmarklet.one/bm/check-meta-description/\">Check Meta Description</a> - View and analyze meta descriptions</li>\n<li><a href=\"https://bookmarklet.one/bm/check-mobile-viewport/\">Check Mobile Viewport</a> - Verify mobile-friendly setup</li>\n<li><a href=\"https://bookmarklet.one/bm/check-og-tags/\">Check Open Graph Tags</a> - Inspect social sharing metadata</li>\n<li><a href=\"https://bookmarklet.one/bm/check-page-speed/\">Check Page Speed</a> - Redirect to PageSpeed Insights</li>\n<li><a href=\"https://bookmarklet.one/bm/check-ssl-certificate/\">Check SSL Certificate</a> - View SSL certificate details</li>\n<li><a href=\"https://bookmarklet.one/bm/check-structured-data/\">Check Structured Data</a> - Validate schema markup</li>\n<li><a href=\"https://bookmarklet.one/bm/check-twitter-cards/\">Check Twitter Cards</a> - Verify Twitter card metadata</li>\n<li><a href=\"https://bookmarklet.one/bm/check-xml-sitemap/\">Check XML Sitemap</a> - View the sitemap</li>\n<li><a href=\"https://bookmarklet.one/bm/convert-links-to-hrefs/\">Convert Links to Hrefs</a> - Convert text URLs to clickable links</li>\n<li><a href=\"https://bookmarklet.one/bm/google-site-search/\">Google Site Search</a> - Search within a specific domain</li>\n<li><a href=\"https://bookmarklet.one/bm/google-trends-checker/\">Google Trends Checker</a> - Check search trend data</li>\n<li><a href=\"https://bookmarklet.one/bm/highlight-headings/\">Highlight Headings</a> - Color-code H1 through H6 tags</li>\n<li><a href=\"https://bookmarklet.one/bm/heading-hierarchy-map/\">Heading Hierarchy Map</a> - Visual tree of page heading structure</li>\n<li><a href=\"https://bookmarklet.one/bm/keyword-density-analyzer/\">Keyword Density Analyzer</a> - Count keyword frequency</li>\n<li><a href=\"https://bookmarklet.one/bm/moz-da-checker/\">Moz DA Checker</a> - Look up domain authority</li>\n<li><a href=\"https://bookmarklet.one/bm/readability-checker/\">Readability Checker</a> - Score content readability</li>\n<li><a href=\"https://bookmarklet.one/bm/robots-txt-checker/\">Robots.txt Checker</a> - View robots.txt rules</li>\n<li><a href=\"https://bookmarklet.one/bm/schema-markup-validator/\">Schema Markup Validator</a> - Validate structured data</li>\n<li><a href=\"https://bookmarklet.one/bm/seo-keyword-highlighter/\">SEO Keyword Highlighter</a> - Highlight keywords on the page</li>\n</ul>\n<h2 id=\"web-development-bookmarklets\" tabindex=\"-1\">Web Development Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/best-bookmarklets-for-developers/#web-development-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<p>Tools for debugging, inspecting, and testing web pages.</p>\n<ul>\n<li><a href=\"https://bookmarklet.one/bm/clear-local-storage/\">Clear Local Storage</a> - Wipe localStorage for the domain</li>\n<li><a href=\"https://bookmarklet.one/bm/clear-session-storage/\">Clear Session Storage</a> - Wipe sessionStorage for the domain</li>\n<li><a href=\"https://bookmarklet.one/bm/cookie-inspector/\">Cookie Inspector</a> - View all cookies for the page</li>\n<li><a href=\"https://bookmarklet.one/bm/css-class-inspector/\">CSS Class Inspector</a> - Show CSS classes on elements</li>\n<li><a href=\"https://bookmarklet.one/bm/css-grid-overlay/\">CSS Grid Overlay</a> - Display a grid overlay on the page</li>\n<li><a href=\"https://bookmarklet.one/bm/element-counter/\">Element Counter</a> - Count elements by tag type</li>\n<li><a href=\"https://bookmarklet.one/bm/event-listener-viewer/\">Event Listener Viewer</a> - See attached event listeners</li>\n<li><a href=\"https://bookmarklet.one/bm/extract-stylesheets/\">Extract Stylesheets</a> - List all linked stylesheets</li>\n<li><a href=\"https://bookmarklet.one/bm/font-inspector/\">Font Inspector</a> - Identify fonts used on the page</li>\n<li><a href=\"https://bookmarklet.one/bm/local-storage-explorer/\">Local Storage Explorer</a> - Browse localStorage contents</li>\n<li><a href=\"https://bookmarklet.one/bm/remove-colors/\">Remove Colors</a> - Strip all colors for accessibility testing</li>\n<li><a href=\"https://bookmarklet.one/bm/remove-stylesheets/\">Remove Stylesheets</a> - Strip CSS to view raw HTML</li>\n<li><a href=\"https://bookmarklet.one/bm/toggle-element-visibility/\">Toggle Element Visibility</a> - Show/hide hidden elements</li>\n<li><a href=\"https://bookmarklet.one/bm/unused-css-detector/\">Unused CSS Detector</a> - Find unused CSS rules</li>\n<li><a href=\"https://bookmarklet.one/bm/live-webpage-editor/\">Live Webpage Editor</a> - Edit page content directly in browser</li>\n</ul>\n<h2 id=\"design-bookmarklets\" tabindex=\"-1\">Design Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/best-bookmarklets-for-developers/#design-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<p>Quick design inspection and color tools.</p>\n<ul>\n<li><a href=\"https://bookmarklet.one/bm/color-palette-extractor/\">Color Palette Extractor</a> - Extract dominant colors from a page</li>\n<li><a href=\"https://bookmarklet.one/bm/color-picker/\">Color Picker</a> - Pick any color on screen</li>\n<li><a href=\"https://bookmarklet.one/bm/dark-mode-toggle/\">Dark Mode Toggle</a> - Force dark mode on any website</li>\n</ul>\n<h2 id=\"productivity-bookmarklets\" tabindex=\"-1\">Productivity Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/best-bookmarklets-for-developers/#productivity-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<p>Speed up your daily workflow.</p>\n<ul>\n<li><a href=\"https://bookmarklet.one/bm/add-to-feedly/\">Add to Feedly</a> - Subscribe to a feed in Feedly</li>\n<li><a href=\"https://bookmarklet.one/bm/ai-summarizer/\">AI Summarizer</a> - Extract key points from any article</li>\n<li><a href=\"https://bookmarklet.one/bm/markdown-link-copier/\">Markdown Link Copier</a> - Copy page as Markdown link</li>\n<li><a href=\"https://bookmarklet.one/bm/open-in-daily-dev/\">Open in daily.dev</a> - Open page in daily.dev</li>\n<li><a href=\"https://bookmarklet.one/bm/post-to-hackernews/\">Post to Hacker News</a> - Submit page to HN</li>\n<li><a href=\"https://bookmarklet.one/bm/quick-rich-texteditor/\">Quick Rich Text Editor</a> - Turn any textarea into a rich editor</li>\n<li><a href=\"https://bookmarklet.one/bm/read-aloud-tts/\">Read Aloud (TTS)</a> - Listen to page content via text-to-speech</li>\n<li><a href=\"https://bookmarklet.one/bm/remove-embed-iframe/\">Remove Embed iframe</a> - Strip iframes from the page</li>\n<li><a href=\"https://bookmarklet.one/bm/remove-images/\">Remove Images</a> - Remove all images for faster loading</li>\n<li><a href=\"https://bookmarklet.one/bm/sticky-header-killer/\">Sticky Header Killer</a> - Remove fixed headers and nav bars</li>\n<li><a href=\"https://bookmarklet.one/bm/word-counter/\">Word Counter</a> - Count words in selected text</li>\n</ul>\n<h2 id=\"privacy-bookmarklets\" tabindex=\"-1\">Privacy Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/best-bookmarklets-for-developers/#privacy-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<p>Control your data and cookies.</p>\n<ul>\n<li><a href=\"https://bookmarklet.one/bm/delete-cookies/\">Delete Cookies</a> - Clear all cookies for the domain</li>\n</ul>\n<h2 id=\"fun-bookmarklets\" tabindex=\"-1\">Fun Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/best-bookmarklets-for-developers/#fun-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li><a href=\"https://bookmarklet.one/bm/enable-right-click/\">Enable Right Click</a> - Re-enable right-click on pages that block it</li>\n<li><a href=\"https://bookmarklet.one/bm/highlight-links/\">Highlight Links</a> - Highlight all links on the page</li>\n<li><a href=\"https://bookmarklet.one/bm/let-it-snow/\">Let it Snow</a> - Make it snow on any webpage</li>\n<li><a href=\"https://bookmarklet.one/bm/quick-google-translate-webpage/\">Quick Google Translate</a> - Translate the page with Google</li>\n<li><a href=\"https://bookmarklet.one/bm/quick-note/\">Quick Note</a> - Jot down a quick note</li>\n<li><a href=\"https://bookmarklet.one/bm/quick-online-note/\">Quick Online Note</a> - Floating notepad on any page</li>\n<li><a href=\"https://bookmarklet.one/bm/url-qr-code/\">URL to QR Code</a> - Generate a QR code for the current URL</li>\n<li><a href=\"https://bookmarklet.one/bm/wayback-search/\">Wayback Machine Search</a> - View archived versions of the page</li>\n</ul>\n<h2 id=\"how-to-use-bookmarklets\" tabindex=\"-1\">How to Use Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/best-bookmarklets-for-developers/#how-to-use-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<p>Drag any button to your bookmarks bar. Click it on any webpage to run. That's it.</p>\n<p>Bookmarklets work in all modern browsers: Chrome, Firefox, Safari, and Edge. No installation required, no permissions needed, no data collected.</p>\n<p>Looking to build your own? Check our <a href=\"https://bookmarklet.one/bookmarklet-maker/\">Bookmarklet Maker</a> to create custom bookmarklets from JavaScript code.</p>\n",
      "date_published": "2024-03-25T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/heading-hierarchy-map-bookmarklet/",
      "url": "https://bookmarklet.one/heading-hierarchy-map-bookmarklet/",
      "title": "Heading Hierarchy Map Bookmarklet",
      "content_html": "<p>Heading structure matters for SEO and accessibility, but it's hard to see in the browser. The <strong>Heading Hierarchy Map</strong> bookmarklet shows it as a visual tree.</p>\n<p>One click generates a diagram of every heading on the page, color-coded by level from H1 (red) to H6 (purple). Click any heading in the tree to jump to it on the page.</p>\n<h2 id=\"what-it-shows\" tabindex=\"-1\">What It Shows <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/heading-hierarchy-map-bookmarklet/#what-it-shows\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li>Color-coded heading levels</li>\n<li>Nesting relationships via indentation</li>\n<li>Child and leaf node badges</li>\n<li>Total heading count</li>\n<li>Click-to-navigate from the diagram</li>\n</ul>\n<h2 id=\"why-it-matters\" tabindex=\"-1\">Why It Matters <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/heading-hierarchy-map-bookmarklet/#why-it-matters\" aria-hidden=\"true\">#</a></h2>\n<p><strong>SEO</strong>: Search engines use headings to understand content hierarchy. One H1 per page, proper nesting, no skipped levels.</p>\n<p><strong>Accessibility</strong>: Screen readers use headings for navigation. Broken structure breaks the experience.</p>\n<p><strong>Content quality</strong>: Good headings reflect organized thinking. They make content scannable.</p>\n<h2 id=\"when-to-use-it\" tabindex=\"-1\">When to Use It <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/heading-hierarchy-map-bookmarklet/#when-to-use-it\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li>SEO audits of competitor pages</li>\n<li>Accessibility reviews</li>\n<li>Content planning and restructuring</li>\n<li>Verifying CMS-generated heading markup</li>\n</ul>\n<div class=\"my-6\">Drag me to bookmark bar: 👉🏻 <a class=\"border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition px-3 py-1 text-gray-700 inline-block\" role=\"button\" href=\"javascript:!function()%7Btry%7Bif(window._hhMapPanel)return%20window._hhMapPanel.remove()%2Cvoid(window._hhMapPanel%3Dnull)%3Bconst%20e%3Ddocument.querySelectorAll(%22h1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%22)%3Bif(0%3D%3D%3De.length)return%20void%20alert(%22No%20headings%20found%20on%20this%20page.%22)%3Blet%20n%3D%7Blevel%3A0%2Cchildren%3A%5B%5D%2Ctext%3A%22Page%22%2Cid%3A%22root%22%7D%3B%5B%5D.push(n)%3Bconst%20t%3D%5Bn%5D%3Be.forEach(((e%2Cn)%3D%3E%7Bconst%20i%3DparseInt(e.tagName%5B1%5D)%2Cl%3D%7Blevel%3Ai%2Cchildren%3A%5B%5D%2Ctext%3Ae.textContent.trim().substring(0%2C80)%2Ctag%3Ae.tagName%2CoriginalEl%3Ae%2Cid%3A%22h%22%2Bn%7D%3Bfor(%3Bt.length%3E1%26%26t%5Bt.length-1%5D.level%3E%3Di%3B)t.pop()%3Bt%5Bt.length-1%5D.children.push(l)%2Ct.push(l)%7D))%3Bconst%20i%3D%7B1%3A%22%23ef4444%22%2C2%3A%22%23f97316%22%2C3%3A%22%23eab308%22%2C4%3A%22%2322c55e%22%2C5%3A%22%233b82f6%22%2C6%3A%22%238b5cf6%22%7D%2Cl%3D%7B1%3A%22%23fef2f2%22%2C2%3A%22%23fff7ed%22%2C3%3A%22%23fefce8%22%2C4%3A%22%23f0fdf4%22%2C5%3A%22%23eff6ff%22%2C6%3A%22%23f5f3ff%22%7D%3Bconst%20o%3Ddocument.createElement(%22div%22)%3Bo.id%3D%22hh-map-panel%22%2Cwindow._hhMapPanel%3Do%2Co.style.cssText%3D%22position%3Afixed%3Btop%3A50%25%3Bleft%3A50%25%3Btransform%3Atranslate(-50%25%2C-50%25)%3Bwidth%3A560px%3Bmax-height%3A80vh%3Bbackground%3A%23fff%3Bborder-radius%3A16px%3Bbox-shadow%3A0%2012px%2048px%20rgba(0%2C0%2C0%2C0.2)%3Bz-index%3A999999%3Bfont-family%3Asystem-ui%2C-apple-system%2Csans-serif%3Boverflow%3Ahidden%3Bdisplay%3Aflex%3Bflex-direction%3Acolumn%3B%22%3Bconst%20a%3DObject.entries(i).map(((%5Be%2Cn%5D)%3D%3E%60%3Cdiv%20style%3D%22display%3Aflex%3Balign-items%3Acenter%3Bgap%3A4px%3Bfont-size%3A11px%3B%22%3E%3Cdiv%20style%3D%22width%3A10px%3Bheight%3A10px%3Bborder-radius%3A2px%3Bbackground%3A%24%7Bn%7D%3B%22%3E%3C%2Fdiv%3EH%24%7Be%7D%3C%2Fdiv%3E%60)).join(%22%22)%3Bo.innerHTML%3D%60%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A16px%2020px%3Bbackground%3Alinear-gradient(135deg%2C%231e293b%2C%23334155)%3Bcolor%3A%23fff%3Bdisplay%3Aflex%3Bjustify-content%3Aspace-between%3Balign-items%3Acenter%3Bflex-shrink%3A0%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A16px%3Bfont-weight%3A700%3B%22%3E%F0%9F%97%BA%EF%B8%8F%20Heading%20Hierarchy%20Map%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A12px%3Bopacity%3A0.7%3Bmargin-top%3A2px%3B%22%3EVisual%20tree%20structure%20of%20page%20headings%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22hhm-close%22%20style%3D%22background%3Anone%3Bborder%3Anone%3Bcolor%3A%23fff%3Bfont-size%3A20px%3Bcursor%3Apointer%3Bopacity%3A0.8%3B%22%3E%E2%9C%95%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A10px%2020px%3Bborder-bottom%3A1px%20solid%20%23e5e7eb%3Bdisplay%3Aflex%3Bgap%3A12px%3Balign-items%3Acenter%3Bflex-shrink%3A0%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%24%7Ba%7D%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22flex%3A1%3B%22%3E%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A11px%3Bcolor%3A%239ca3af%3B%22%3EClick%20heading%20to%20jump%20to%20it%3C%2Fspan%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22overflow-y%3Aauto%3Bflex%3A1%3Bpadding%3A16px%2020px%3Bmax-height%3A60vh%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%24%7Bfunction%20n(t%2Co)%7Bif(0%3D%3D%3Dt.level)%7Blet%20i%3D%60%3Cdiv%20style%3D%22padding%3A8px%2012px%3Bbackground%3A%231e293b%3Bcolor%3A%23fff%3Bborder-radius%3A8px%3Bfont-size%3A14px%3Bfont-weight%3A600%3Bdisplay%3Ainline-flex%3Balign-items%3Acenter%3Bgap%3A8px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22background%3A%236366f1%3Bwidth%3A24px%3Bheight%3A24px%3Bborder-radius%3A50%25%3Bdisplay%3Aflex%3Balign-items%3Acenter%3Bjustify-content%3Acenter%3Bfont-size%3A11px%3B%22%3E%F0%9F%93%84%3C%2Fspan%3E%5Cn%20%20%20%20%20%20%20%20%20%20%24%7Bt.text%7D%20%3Cspan%20style%3D%22font-size%3A11px%3Bopacity%3A0.6%3Bfont-weight%3A400%3B%22%3E%24%7Be.length%7D%20headings%3C%2Fspan%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%60%3Breturn%20t.children.length%3E0%26%26(i%2B%3D'%3Cdiv%20style%3D%22margin-left%3A24px%3Bmargin-top%3A4px%3Bpadding-left%3A20px%3Bborder-left%3A2px%20solid%20%23334155%3B%22%3E'%2Ct.children.forEach((e%3D%3E%7Bi%2B%3Dn(e%2C1)%7D))%2Ci%2B%3D%22%3C%2Fdiv%3E%22)%2Ci%7Dconst%20a%3Di%5Bt.level%5D%7C%7C%22%236b7280%22%2Cr%3Dl%5Bt.level%5D%7C%7C%22%23f9fafb%22%2Cs%3Dt.children.length%3E0%3F%60%3Cspan%20style%3D%22font-size%3A10px%3Bbackground%3A%24%7Ba%7D%3Bcolor%3A%23fff%3Bpadding%3A1px%206px%3Bborder-radius%3A10px%3Bmargin-left%3A4px%3B%22%3E%24%7Bt.children.length%7D%20child%24%7Bt.children.length%3E1%3F%22ren%22%3A%22%22%7D%3C%2Fspan%3E%60%3A%22%22%2Cd%3D0%3D%3D%3Dt.children.length%3F'%3Cspan%20style%3D%22font-size%3A10px%3Bbackground%3A%239ca3af%3Bcolor%3A%23fff%3Bpadding%3A1px%206px%3Bborder-radius%3A10px%3Bmargin-left%3A4px%3B%22%3Eleaf%3C%2Fspan%3E'%3A%22%22%3Blet%20p%3D%60%3Cdiv%20style%3D%22margin-top%3A4px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22hh-map-item%22%20data-id%3D%22%24%7Bt.id%7D%22%20style%3D%22padding%3A6px%2010px%3Bbackground%3A%24%7Br%7D%3Bborder-left%3A3px%20solid%20%24%7Ba%7D%3Bborder-radius%3A0%206px%206px%200%3Bfont-size%3A13px%3Bcolor%3A%23374151%3Bcursor%3Apointer%3Bdisplay%3Aflex%3Balign-items%3Acenter%3Bjustify-content%3Aspace-between%3Btransition%3Aall%200.15s%3B%22%20onmouseover%3D%22this.style.transform%3D'translateX(2px)'%22%20onmouseout%3D%22this.style.transform%3D'none'%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22display%3Aflex%3Balign-items%3Acenter%3Bgap%3A6px%3Bmin-width%3A0%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A10px%3Bfont-weight%3A700%3Bcolor%3A%24%7Ba%7D%3Bmin-width%3A22px%3B%22%3E%24%7Bt.tag%7D%3C%2Fspan%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22white-space%3Anowrap%3Boverflow%3Ahidden%3Btext-overflow%3Aellipsis%3B%22%3E%24%7Bt.text%7D%3C%2Fspan%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22display%3Aflex%3Balign-items%3Acenter%3Bgap%3A4px%3Bflex-shrink%3A0%3Bmargin-left%3A8px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%24%7Bs%7D%24%7Bd%7D%5Cn%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%60%3Breturn%20t.children.length%3E0%26%26(p%2B%3D%60%3Cdiv%20style%3D%22margin-left%3A16px%3Bpadding-left%3A12px%3Bborder-left%3A1px%20dashed%20%24%7Ba%7D40%3B%22%3E%60%2Ct.children.forEach((e%3D%3E%7Bp%2B%3Dn(e%2Co%2B1)%7D))%2Cp%2B%3D%22%3C%2Fdiv%3E%22)%2Cp%2B%3D%22%3C%2Fdiv%3E%22%2Cp%7D(n%2C0)%7D%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%60%2Cdocument.body.appendChild(o)%2Co.querySelector(%22%23hhm-close%22).addEventListener(%22click%22%2C(function()%7Bo.remove()%2Cwindow._hhMapPanel%3Dnull%7D))%2Co.querySelectorAll(%22.hh-map-item%22).forEach((n%3D%3E%7Bn.addEventListener(%22click%22%2C(function()%7Bconst%20n%3Dthis.dataset.id%3Bif(%22root%22%3D%3D%3Dn)return%3Bconst%20t%3DparseInt(n.substring(1))%2Ci%3De%5Bt%5D%3Bi%26%26(i.scrollIntoView(%7Bbehavior%3A%22smooth%22%2Cblock%3A%22center%22%7D)%2Ci.style.transition%3D%22background%200.3s%22%2Ci.style.background%3D%22%23fef08a%22%2CsetTimeout((()%3D%3E%7Bi.style.background%3D%22%22%7D)%2C2e3))%7D))%7D))%7Dcatch(e)%7Balert(%22Error%3A%20%22%2Be.message)%7D%7D()%3B\" rel=\"nofollow noopener noreferrer\" title=\"Heading Map Bookmarklet\" onclick=\"event.preventDefault(); alert('Drag this button to your bookmark bar')\">Heading Map</a></div>\n<blockquote>\n<p>📖 <a href=\"https://bookmarklet.one/bm/heading-hierarchy-map/\">Full documentation</a></p>\n</blockquote>\n",
      "date_published": "2024-03-20T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/ai-summarizer-bookmarklet/",
      "url": "https://bookmarklet.one/ai-summarizer-bookmarklet/",
      "title": "AI Summarizer Bookmarklet",
      "content_html": "<p>Too much content, too little time. The <strong>AI Summarizer</strong> bookmarklet extracts the most important sentences from any webpage in seconds.</p>\n<p>It uses extractive summarization, meaning it only selects sentences already in the article. No hallucinated text, no external servers, no API keys.</p>\n<h2 id=\"how-it-works\" tabindex=\"-1\">How It Works <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/ai-summarizer-bookmarklet/#how-it-works\" aria-hidden=\"true\">#</a></h2>\n<ol>\n<li>Sentence extraction breaks text into individual units</li>\n<li>Word frequency analysis ranks sentences by importance</li>\n<li>Position scoring boosts earlier sentences slightly</li>\n<li>Top results become your summary</li>\n</ol>\n<h2 id=\"what-the-panel-shows\" tabindex=\"-1\">What the Panel Shows <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/ai-summarizer-bookmarklet/#what-the-panel-shows\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li>Word count and estimated read time</li>\n<li>Condensed summary with key sentences</li>\n<li>Top 3 highlighted sentences</li>\n<li>One-click copy for summary or full output in Markdown</li>\n</ul>\n<h2 id=\"best-results\" tabindex=\"-1\">Best Results <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/ai-summarizer-bookmarklet/#best-results\" aria-hidden=\"true\">#</a></h2>\n<p>Works best on articles with 500+ words and clear paragraph structure. Shorter content may return most of the original text.</p>\n<p>Everything runs locally in your browser. Nothing leaves your machine.</p>\n<div class=\"my-6\">Drag me to bookmark bar: 👉🏻 <a class=\"border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition px-3 py-1 text-gray-700 inline-block\" role=\"button\" href=\"javascript:!function()%7Btry%7Bif(window._aiSumPanel)return%20window._aiSumPanel.remove()%2Cvoid(window._aiSumPanel%3Dnull)%3Bconst%20t%3Dnew%20Set(%5B%22the%22%2C%22a%22%2C%22an%22%2C%22and%22%2C%22or%22%2C%22but%22%2C%22in%22%2C%22on%22%2C%22at%22%2C%22to%22%2C%22for%22%2C%22of%22%2C%22with%22%2C%22by%22%2C%22is%22%2C%22are%22%2C%22was%22%2C%22were%22%2C%22be%22%2C%22been%22%2C%22being%22%2C%22have%22%2C%22has%22%2C%22had%22%2C%22do%22%2C%22does%22%2C%22did%22%2C%22will%22%2C%22would%22%2C%22could%22%2C%22should%22%2C%22may%22%2C%22might%22%2C%22shall%22%2C%22can%22%2C%22this%22%2C%22that%22%2C%22these%22%2C%22those%22%2C%22it%22%2C%22its%22%2C%22i%22%2C%22we%22%2C%22you%22%2C%22he%22%2C%22she%22%2C%22they%22%2C%22me%22%2C%22him%22%2C%22her%22%2C%22us%22%2C%22them%22%2C%22my%22%2C%22your%22%2C%22his%22%2C%22our%22%2C%22their%22%2C%22what%22%2C%22which%22%2C%22who%22%2C%22whom%22%2C%22when%22%2C%22where%22%2C%22how%22%2C%22why%22%2C%22not%22%2C%22no%22%2C%22nor%22%2C%22so%22%2C%22if%22%2C%22then%22%2C%22than%22%2C%22too%22%2C%22very%22%2C%22just%22%2C%22about%22%2C%22also%22%2C%22more%22%2C%22most%22%2C%22other%22%2C%22some%22%2C%22such%22%2C%22only%22%2C%22own%22%2C%22same%22%2C%22than%22%5D)%3Bfunction%20e(e)%7Bconst%20n%3De.replace(%2F%5Cn%2B%2Fg%2C%22%20%22).split(%2F(%3F%3C%3D%5B.!%3F%5D)%5Cs%2B%2F).filter((e%3D%3Ee.trim().length%3E20))%2Co%3D%7B%7D%3Breturn(e.toLowerCase().match(%2F%5Cb%5Ba-z%5D%7B3%2C%7D%5Cb%2Fg)%7C%7C%5B%5D).forEach((e%3D%3E%7Bt.has(e)%7C%7C(o%5Be%5D%3D(o%5Be%5D%7C%7C0)%2B1)%7D))%2Cn.map(((e%2Ct)%3D%3E%7Bconst%20i%3De.toLowerCase().match(%2F%5Cb%5Ba-z%5D%7B3%2C%7D%5Cb%2Fg)%7C%7C%5B%5D%2Cr%3Di.reduce(((e%2Ct)%3D%3Ee%2B(o%5Bt%5D%7C%7C0))%2C0)%2FMath.max(i.length%2C1)%2Cs%3Dt%3C.3*n.length%3F1.3%3A1%3Breturn%7Bsentence%3Ae.trim()%2Cscore%3Ar*s%2Cindex%3At%7D%7D))%7Dconst%20n%3Dfunction()%7Bconst%20e%3Ddocument.querySelector('article%2Cmain%2C%5Brole%3D%22main%22%5D%2C.content%2C.post-content%2C.entry-content%2C.article-body')%3Bif(e)return%20e.innerText%3Bconst%20t%3Ddocument.querySelectorAll(%22p%22)%3Breturn%20t.length%3E3%3FArray.from(t).map((e%3D%3Ee.innerText)).join(%22%5Cn%5Cn%22)%3Adocument.body.innerText%7D()%2Co%3DMath.max(3%2CMath.min(10%2CMath.floor(.15*n.split(%2F(%3F%3C%3D%5B.!%3F%5D)%5Cs%2B%2F).length)))%2Ci%3Dfunction(t%2Cn)%7Bconst%20o%3De(t)%3Breturn%20o.length%3C%3Dn%3Fo.map((e%3D%3Ee.sentence)).join(%22%20%22)%3A(o.sort(((e%2Ct)%3D%3Et.score-e.score))%2Co.slice(0%2Cn).sort(((e%2Ct)%3D%3Ee.index-t.index)).map((e%3D%3Ee.sentence)).join(%22%20%22))%7D(n%2Co)%2Cr%3Dfunction(t%2Cn)%7Bconst%20o%3De(t)%3Breturn%20o.length%3C%3Dn%3Fo.map((e%3D%3Ee.sentence))%3A(o.sort(((e%2Ct)%3D%3Et.score-e.score))%2Co.slice(0%2Cn).sort(((e%2Ct)%3D%3Ee.index-t.index)).map((e%3D%3Ee.sentence)))%7D(n%2C3)%2Cs%3Dn.split(%2F%5Cs%2B%2F).length%2Ca%3DMath.ceil(s%2F200)%2Cd%3Ddocument.createElement(%22div%22)%3Bd.id%3D%22ai-sum-panel%22%2Cwindow._aiSumPanel%3Dd%2Cd.style.cssText%3D%22position%3Afixed%3Btop%3A50%25%3Bleft%3A50%25%3Btransform%3Atranslate(-50%25%2C-50%25)%3Bwidth%3A520px%3Bmax-height%3A80vh%3Bbackground%3A%23fafafa%3Bborder-radius%3A16px%3Bbox-shadow%3A0%2012px%2048px%20rgba(0%2C0%2C0%2C0.2)%3Bz-index%3A999999%3Bfont-family%3Asystem-ui%2C-apple-system%2Csans-serif%3Boverflow%3Ahidden%3Bdisplay%3Aflex%3Bflex-direction%3Acolumn%3B%22%3Bconst%20l%3Dr.map((e%3D%3E%60%3Cdiv%20style%3D%22padding%3A10px%2014px%3Bbackground%3A%23fff%3Bborder-left%3A3px%20solid%20%236366f1%3Bborder-radius%3A0%208px%208px%200%3Bmargin-bottom%3A8px%3Bfont-size%3A13px%3Bcolor%3A%23374151%3Bline-height%3A1.5%3B%22%3E%24%7Be%7D%3C%2Fdiv%3E%60)).join(%22%22)%3Bd.innerHTML%3D%60%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A18px%2020px%3Bbackground%3Alinear-gradient(135deg%2C%234f46e5%2C%237c3aed)%3Bcolor%3A%23fff%3Bdisplay%3Aflex%3Bjustify-content%3Aspace-between%3Balign-items%3Acenter%3Bflex-shrink%3A0%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A16px%3Bfont-weight%3A700%3B%22%3E%E2%9C%A8%20AI%20Summarizer%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A12px%3Bopacity%3A0.8%3Bmargin-top%3A2px%3B%22%3EExtractive%20summarization%20%E2%80%94%20no%20API%20needed%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22ais-close%22%20style%3D%22background%3Anone%3Bborder%3Anone%3Bcolor%3A%23fff%3Bfont-size%3A20px%3Bcursor%3Apointer%3Bopacity%3A0.8%3B%22%3E%E2%9C%95%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A16px%2020px%3Bdisplay%3Aflex%3Bgap%3A16px%3Bborder-bottom%3A1px%20solid%20%23e5e7eb%3Bflex-shrink%3A0%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22text-align%3Acenter%3Bflex%3A1%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A22px%3Bfont-weight%3A700%3Bcolor%3A%234f46e5%3B%22%3E%24%7Bs.toLocaleString()%7D%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A11px%3Bcolor%3A%239ca3af%3Btext-transform%3Auppercase%3B%22%3EWords%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22text-align%3Acenter%3Bflex%3A1%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A22px%3Bfont-weight%3A700%3Bcolor%3A%234f46e5%3B%22%3E%24%7Ba%7Dm%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A11px%3Bcolor%3A%239ca3af%3Btext-transform%3Auppercase%3B%22%3ERead%20Time%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22text-align%3Acenter%3Bflex%3A1%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A22px%3Bfont-weight%3A700%3Bcolor%3A%234f46e5%3B%22%3E%24%7Bo%7D%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A11px%3Bcolor%3A%239ca3af%3Btext-transform%3Auppercase%3B%22%3EKey%20Points%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22overflow-y%3Aauto%3Bflex%3A1%3Bpadding%3A16px%2020px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22margin-bottom%3A20px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A13px%3Bfont-weight%3A700%3Bcolor%3A%23374151%3Bmargin-bottom%3A10px%3Btext-transform%3Auppercase%3Bletter-spacing%3A0.5px%3B%22%3E%F0%9F%93%9D%20Summary%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A14px%3Bcolor%3A%234b5563%3Bline-height%3A1.7%3Bpadding%3A14px%3Bbackground%3A%23fff%3Bborder-radius%3A10px%3Bbox-shadow%3A0%201px%203px%20rgba(0%2C0%2C0%2C0.06)%3B%22%3E%24%7Bi%7D%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A13px%3Bfont-weight%3A700%3Bcolor%3A%23374151%3Bmargin-bottom%3A10px%3Btext-transform%3Auppercase%3Bletter-spacing%3A0.5px%3B%22%3E%F0%9F%94%91%20Key%20Highlights%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%20%20%24%7Bl%7D%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A12px%2020px%3Bborder-top%3A1px%20solid%20%23e5e7eb%3Bdisplay%3Aflex%3Bgap%3A8px%3Bflex-shrink%3A0%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22ais-copy%22%20style%3D%22flex%3A1%3Bpadding%3A10px%3Bborder%3Anone%3Bborder-radius%3A8px%3Bbackground%3A%234f46e5%3Bcolor%3A%23fff%3Bfont-size%3A13px%3Bfont-weight%3A600%3Bcursor%3Apointer%3B%22%3E%F0%9F%93%8B%20Copy%20Summary%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22ais-copy-full%22%20style%3D%22flex%3A1%3Bpadding%3A10px%3Bborder%3Anone%3Bborder-radius%3A8px%3Bbackground%3A%23fff%3Bcolor%3A%23374151%3Bfont-size%3A13px%3Bborder%3A1px%20solid%20%23e5e7eb%3Bcursor%3Apointer%3B%22%3E%F0%9F%93%84%20Copy%20Full%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%60%2Cdocument.body.appendChild(d)%2Cd.querySelector(%22%23ais-close%22).addEventListener(%22click%22%2C(function()%7Bd.remove()%2Cwindow._aiSumPanel%3Dnull%7D))%2Cd.querySelector(%22%23ais-copy%22).addEventListener(%22click%22%2C(function()%7Bnavigator.clipboard.writeText(i).then((()%3D%3E%7Bthis.textContent%3D%22%E2%9C%93%20Copied!%22%2CsetTimeout((()%3D%3E%7Bthis.textContent%3D%22%F0%9F%93%8B%20Copy%20Summary%22%7D)%2C1500)%7D))%7D))%2Cd.querySelector(%22%23ais-copy-full%22).addEventListener(%22click%22%2C(function()%7Bconst%20e%3D%22%23%23%20Summary%5Cn%5Cn%22%2Bi%2B%22%5Cn%5Cn%23%23%20Key%20Highlights%5Cn%5Cn%22%2Br.map((e%3D%3E%22%3E%20%22%2Be)).join(%22%5Cn%5Cn%22)%3Bnavigator.clipboard.writeText(e).then((()%3D%3E%7Bthis.textContent%3D%22%E2%9C%93%20Copied!%22%2CsetTimeout((()%3D%3E%7Bthis.textContent%3D%22%F0%9F%93%84%20Copy%20Full%22%7D)%2C1500)%7D))%7D))%7Dcatch(c)%7Balert(%22Error%3A%20%22%2Bc.message)%7D%7D()%3B\" rel=\"nofollow noopener noreferrer\" title=\"Summarize Bookmarklet\" onclick=\"event.preventDefault(); alert('Drag this button to your bookmark bar')\">Summarize</a></div>\n<blockquote>\n<p>📖 <a href=\"https://bookmarklet.one/bm/ai-summarizer/\">Full documentation</a></p>\n</blockquote>\n",
      "date_published": "2024-03-19T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/read-aloud-tts-bookmarklet/",
      "url": "https://bookmarklet.one/read-aloud-tts-bookmarklet/",
      "title": "Read Aloud TTS Bookmarklet",
      "content_html": "<p>Some people absorb information better by listening. The <strong>Read Aloud TTS</strong> bookmarklet turns any webpage into audio using your browser's built-in speech synthesis.</p>\n<p>No extensions, no API keys, no data sent anywhere. Just click and listen.</p>\n<h2 id=\"what-you-get\" tabindex=\"-1\">What You Get <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/read-aloud-tts-bookmarklet/#what-you-get\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li>Voice selector from all installed system voices</li>\n<li>Speed control from 0.5x to 3x</li>\n<li>Pitch adjustment from 0.5 to 2.0</li>\n<li>Play, pause, and stop controls</li>\n</ul>\n<h2 id=\"smart-content-detection\" tabindex=\"-1\">Smart Content Detection <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/read-aloud-tts-bookmarklet/#smart-content-detection\" aria-hidden=\"true\">#</a></h2>\n<p>The bookmarklet doesn't read everything on the page. It finds <code>&lt;article&gt;</code>, <code>&lt;main&gt;</code>, or content containers and focuses on the actual text. Navigation, ads, and sidebars get skipped.</p>\n<h2 id=\"selective-reading\" tabindex=\"-1\">Selective Reading <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/read-aloud-tts-bookmarklet/#selective-reading\" aria-hidden=\"true\">#</a></h2>\n<p>Highlight any text before clicking Play, and it reads only your selection. Useful for proofreading, testing how a passage sounds, or learning pronunciation.</p>\n<h2 id=\"browser-support\" tabindex=\"-1\">Browser Support <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/read-aloud-tts-bookmarklet/#browser-support\" aria-hidden=\"true\">#</a></h2>\n<p>Works in Chrome, Edge, Safari, and Firefox. Chrome on desktop offers the most voices.</p>\n<div class=\"my-6\">Drag me to bookmark bar: 👉🏻 <a class=\"border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition px-3 py-1 text-gray-700 inline-block\" role=\"button\" href=\"javascript:!function()%7Btry%7Bif(window._ttsPanel)return%20window._ttsPanel.remove()%2Cvoid(window._ttsPanel%3Dnull)%3Bconst%20e%3Dwindow.speechSynthesis%3Blet%20n%3D!1%2Co%3D!1%2Cr%3Dnull%2Ci%3D%5B%5D%3Bconst%20s%3Ddocument.createElement(%22div%22)%3Bs.id%3D%22tts-panel%22%2Cwindow._ttsPanel%3Ds%2Cs.style.cssText%3D%22position%3Afixed%3Bbottom%3A20px%3Bright%3A20px%3Bwidth%3A360px%3Bbackground%3A%231a1a2e%3Bcolor%3A%23e0e0e0%3Bborder-radius%3A16px%3Bbox-shadow%3A0%208px%2032px%20rgba(0%2C0%2C0%2C0.4)%3Bz-index%3A999999%3Bfont-family%3Asystem-ui%2C-apple-system%2Csans-serif%3Boverflow%3Ahidden%3B%22%3Bconst%20a%3Dfunction()%7Bi%3De.getVoices()%3Bconst%20t%3Ds.querySelector(%22%23tts-voice%22)%3Bt.innerHTML%3D%22%22%3B%5B...i.filter((t%3D%3Et.lang.startsWith(%22en%22)))%2C...i.filter((t%3D%3E!t.lang.startsWith(%22en%22)))%5D.forEach(((e%2Cn)%3D%3E%7Bconst%20o%3Ddocument.createElement(%22option%22)%3Bo.value%3Dn%2Co.textContent%3De.name%2B%22%20(%22%2Be.lang%2B%22)%22%2Ct.appendChild(o)%7D))%7D%3Bs.innerHTML%3D'%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A16px%2016px%2012px%3Bbackground%3Alinear-gradient(135deg%2C%2316213e%2C%230f3460)%3Bdisplay%3Aflex%3Bjustify-content%3Aspace-between%3Balign-items%3Acenter%3Bborder-radius%3A16px%2016px%200%200%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A15px%3Bfont-weight%3A600%3B%22%3E%F0%9F%94%8A%20Read%20Aloud%3C%2Fspan%3E%5Cn%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22tts-close%22%20style%3D%22background%3Anone%3Bborder%3Anone%3Bcolor%3A%23aaa%3Bfont-size%3A18px%3Bcursor%3Apointer%3Bpadding%3A2px%206px%3Bborder-radius%3A4px%3B%22%3E%E2%9C%95%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A16px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22margin-bottom%3A12px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Clabel%20style%3D%22font-size%3A11px%3Bcolor%3A%23888%3Btext-transform%3Auppercase%3Bletter-spacing%3A0.5px%3B%22%3EVoice%3C%2Flabel%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cselect%20id%3D%22tts-voice%22%20style%3D%22width%3A100%25%3Bmargin-top%3A4px%3Bpadding%3A8px%2010px%3Bborder-radius%3A8px%3Bborder%3A1px%20solid%20%23333%3Bbackground%3A%2316213e%3Bcolor%3A%23e0e0e0%3Bfont-size%3A13px%3B%22%3E%3C%2Fselect%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22margin-bottom%3A12px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Clabel%20style%3D%22font-size%3A11px%3Bcolor%3A%23888%3Btext-transform%3Auppercase%3Bletter-spacing%3A0.5px%3B%22%3ESpeed%3A%20%3Cspan%20id%3D%22tts-rate-val%22%3E1.0%3C%2Fspan%3Ex%3C%2Flabel%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cinput%20id%3D%22tts-rate%22%20type%3D%22range%22%20min%3D%220.5%22%20max%3D%223%22%20step%3D%220.1%22%20value%3D%221%22%20style%3D%22width%3A100%25%3Bmargin-top%3A4px%3Baccent-color%3A%23e94560%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22margin-bottom%3A12px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Clabel%20style%3D%22font-size%3A11px%3Bcolor%3A%23888%3Btext-transform%3Auppercase%3Bletter-spacing%3A0.5px%3B%22%3EPitch%3A%20%3Cspan%20id%3D%22tts-pitch-val%22%3E1.0%3C%2Fspan%3E%3C%2Flabel%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cinput%20id%3D%22tts-pitch%22%20type%3D%22range%22%20min%3D%220.5%22%20max%3D%222%22%20step%3D%220.1%22%20value%3D%221%22%20style%3D%22width%3A100%25%3Bmargin-top%3A4px%3Baccent-color%3A%23e94560%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22display%3Aflex%3Bgap%3A8px%3Bmargin-bottom%3A12px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22tts-play%22%20style%3D%22flex%3A1%3Bpadding%3A10px%3Bborder%3Anone%3Bborder-radius%3A8px%3Bbackground%3A%23e94560%3Bcolor%3A%23fff%3Bfont-size%3A14px%3Bfont-weight%3A600%3Bcursor%3Apointer%3B%22%3E%E2%96%B6%20Play%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22tts-pause%22%20style%3D%22flex%3A1%3Bpadding%3A10px%3Bborder%3Anone%3Bborder-radius%3A8px%3Bbackground%3A%23333%3Bcolor%3A%23e0e0e0%3Bfont-size%3A14px%3Bcursor%3Apointer%3B%22%20disabled%3E%E2%8F%B8%20Pause%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22tts-stop%22%20style%3D%22flex%3A1%3Bpadding%3A10px%3Bborder%3Anone%3Bborder-radius%3A8px%3Bbackground%3A%23333%3Bcolor%3A%23e0e0e0%3Bfont-size%3A14px%3Bcursor%3Apointer%3B%22%20disabled%3E%E2%8F%B9%20Stop%3C%2Fbutton%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22tts-progress%22%20style%3D%22width%3A100%25%3Bheight%3A4px%3Bbackground%3A%23333%3Bborder-radius%3A2px%3Boverflow%3Ahidden%3Bmargin-bottom%3A8px%3B%22%3E%5Cn%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22tts-bar%22%20style%3D%22width%3A0%25%3Bheight%3A100%25%3Bbackground%3A%23e94560%3Btransition%3Awidth%200.3s%3B%22%3E%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22tts-status%22%20style%3D%22font-size%3A12px%3Bcolor%3A%23888%3Btext-align%3Acenter%3B%22%3EReady%20to%20read%3C%2Fdiv%3E%5Cn%20%20%20%20%20%20%3C%2Fdiv%3E'%2Cdocument.body.appendChild(s)%2Ca()%2Cvoid%200!%3D%3De.onvoiceschanged%26%26(e.onvoiceschanged%3Da)%3Bconst%20d%3Ds.querySelector(%22%23tts-rate%22)%2Cl%3Ds.querySelector(%22%23tts-pitch%22)%3Bfunction%20t()%7Bs.querySelector(%22%23tts-play%22).disabled%3Dn%26%26!o%2Cs.querySelector(%22%23tts-pause%22).disabled%3D!n%26%26!o%2Cs.querySelector(%22%23tts-stop%22).disabled%3D!n%26%26!o%2Cs.querySelector(%22%23tts-play%22).textContent%3Do%3F%22%E2%96%B6%20Resume%22%3A%22%E2%96%B6%20Play%22%7Dd.addEventListener(%22input%22%2C(function()%7Bs.querySelector(%22%23tts-rate-val%22).textContent%3Dthis.value%7D))%2Cl.addEventListener(%22input%22%2C(function()%7Bs.querySelector(%22%23tts-pitch-val%22).textContent%3Dthis.value%7D))%2Cs.querySelector(%22%23tts-close%22).addEventListener(%22click%22%2C(function()%7Be.cancel()%2Cs.remove()%2Cwindow._ttsPanel%3Dnull%7D))%2Cs.querySelector(%22%23tts-play%22).addEventListener(%22click%22%2C(function()%7Bif(o)return%20e.resume()%2Co%3D!1%2Cn%3D!0%2Cvoid%20t()%3Be.cancel()%3Bconst%20a%3Dfunction()%7Bconst%20t%3Dwindow.getSelection().toString().trim()%3Bif(t)return%20t%3Bconst%20e%3Ddocument.querySelector('article%2Cmain%2C%5Brole%3D%22main%22%5D%2C.content%2C.post-content%2C.entry-content')%3Breturn%20e%3Fe.innerText%3Adocument.body.innerText%7D()%3Bif(!a)return%20void(s.querySelector(%22%23tts-status%22).textContent%3D%22No%20text%20found%22)%3Bconst%20c%3DparseInt(s.querySelector(%22%23tts-voice%22).value)%7C%7C0%3Br%3Dnew%20SpeechSynthesisUtterance(a)%2Ci%5Bc%5D%26%26(r.voice%3Di%5Bc%5D)%2Cr.rate%3DparseFloat(d.value)%2Cr.pitch%3DparseFloat(l.value)%2Cr.onend%3Dfunction()%7Bn%3D!1%2Co%3D!1%2Ct()%2Cs.querySelector(%22%23tts-bar%22).style.width%3D%22100%25%22%2Cs.querySelector(%22%23tts-status%22).textContent%3D%22Finished%22%7D%2Cr.onerror%3Dfunction()%7Bn%3D!1%2Co%3D!1%2Ct()%2Cs.querySelector(%22%23tts-status%22).textContent%3D%22Error%20occurred%22%7D%2Ce.speak(r)%2Cn%3D!0%2Co%3D!1%2Cs.querySelector(%22%23tts-status%22).textContent%3D%22Reading...%22%2Cs.querySelector(%22%23tts-bar%22).style.width%3D%220%25%22%2Ct()%7D))%2Cs.querySelector(%22%23tts-pause%22).addEventListener(%22click%22%2C(function()%7Bn%26%26!o%26%26(e.pause()%2Co%3D!0%2Cn%3D!1%2Ct())%7D))%2Cs.querySelector(%22%23tts-stop%22).addEventListener(%22click%22%2C(function()%7Be.cancel()%2Cn%3D!1%2Co%3D!1%2Ct()%2Cs.querySelector(%22%23tts-bar%22).style.width%3D%220%25%22%2Cs.querySelector(%22%23tts-status%22).textContent%3D%22Stopped%22%7D))%7Dcatch(c)%7Balert(%22Error%3A%20%22%2Bc.message)%7D%7D()%3B\" rel=\"nofollow noopener noreferrer\" title=\"Read Aloud Bookmarklet\" onclick=\"event.preventDefault(); alert('Drag this button to your bookmark bar')\">Read Aloud</a></div>\n<blockquote>\n<p>📖 <a href=\"https://bookmarklet.one/bm/read-aloud-tts/\">Full documentation</a></p>\n</blockquote>\n",
      "date_published": "2024-03-18T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/markdown-link-copier-bookmarklet/",
      "url": "https://bookmarklet.one/markdown-link-copier-bookmarklet/",
      "title": "Markdown Link Copier Bookmarklet",
      "content_html": "<p>Writing Markdown links by hand is tedious. The <strong>Markdown Link Copier</strong> bookmarklet does it in one click.</p>\n<p>It reads the page title and URL, formats them as <code>[title](url)</code>, and copies the result to your clipboard. Ready to paste into GitHub, Obsidian, docs, or anywhere.</p>\n<h2 id=\"where-it-helps\" tabindex=\"-1\">Where It Helps <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/markdown-link-copier-bookmarklet/#where-it-helps\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li><strong>GitHub</strong> issues, PRs, and READMEs</li>\n<li><strong>Documentation</strong> sites and wikis</li>\n<li><strong>Note-taking</strong> in Obsidian, Notion, Logseq</li>\n<li><strong>Chat</strong> in Slack and Discord</li>\n<li><strong>Blogging</strong> with Hugo, Jekyll, Eleventy</li>\n</ul>\n<h2 id=\"how-it-works\" tabindex=\"-1\">How It Works <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/markdown-link-copier-bookmarklet/#how-it-works\" aria-hidden=\"true\">#</a></h2>\n<ol>\n<li>Click the bookmarklet</li>\n<li>It reads <code>&lt;title&gt;</code> and the current URL</li>\n<li>Formats as <code>[title](url)</code></li>\n<li>Copies to clipboard</li>\n</ol>\n<p>One click, no configuration.</p>\n<div class=\"my-6\">Drag me to bookmark bar: 👉🏻 <a class=\"border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition px-3 py-1 text-gray-700 inline-block\" role=\"button\" href=\"javascript:!function()%7Bconst%20t%3D%22%5B%22%2B(document.title.trim()%7C%7C%22Untitled%20Page%22)%2B%22%5D(%22%2Bwindow.location.href%2B%22)%22%3Bfunction%20e(t)%7Bconst%20e%3Ddocument.createElement(%22textarea%22)%3Be.value%3Dt%2Ce.style.position%3D%22fixed%22%2Ce.style.opacity%3D%220%22%2Cdocument.body.appendChild(e)%2Ce.select()%3Btry%7Bdocument.execCommand(%22copy%22)%2Calert(%22Markdown%20link%20copied!%5Cn%5Cn%22%2Bt)%7Dcatch(e)%7Balert(%22Failed%20to%20copy.%20Here%20is%20your%20link%3A%5Cn%5Cn%22%2Bt)%7Ddocument.body.removeChild(e)%7Dnavigator.clipboard%26%26navigator.clipboard.writeText%3Fnavigator.clipboard.writeText(t).then((function()%7Balert(%22Markdown%20link%20copied!%5Cn%5Cn%22%2Bt)%7D)).catch((function()%7Be(t)%7D))%3Ae(t)%7D()%3B\" rel=\"nofollow noopener noreferrer\" title=\"Copy Link Bookmarklet\" onclick=\"event.preventDefault(); alert('Drag this button to your bookmark bar')\">Copy Link</a></div>\n<blockquote>\n<p>📖 <a href=\"https://bookmarklet.one/bm/markdown-link-copier/\">Full documentation</a></p>\n</blockquote>\n",
      "date_published": "2024-03-17T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/sticky-header-killer-bookmarklet/",
      "url": "https://bookmarklet.one/sticky-header-killer-bookmarklet/",
      "title": "Sticky Header Killer Bookmarklet",
      "content_html": "<p>Sticky headers eat up screen space. The <strong>Sticky Header Killer</strong> bookmarklet removes them all with one click.</p>\n<p>It finds every element using <code>position: fixed</code> or <code>position: sticky</code> and resets them. Navigation bars, cookie banners, chat widgets, promotional bars, all gone. Refresh to restore.</p>\n<h2 id=\"the-problem\" tabindex=\"-1\">The Problem <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/sticky-header-killer-bookmarklet/#the-problem\" aria-hidden=\"true\">#</a></h2>\n<p>Fixed headers take 60-120px of vertical space on every screen. On mobile, that's painful. They cause layout shifts, block content, and pull attention away from what you're reading.</p>\n<h2 id=\"what-it-targets\" tabindex=\"-1\">What It Targets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/sticky-header-killer-bookmarklet/#what-it-targets\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li>Fixed navigation bars</li>\n<li>Sticky headers and footers</li>\n<li>Cookie consent banners</li>\n<li>Chat widgets and popups</li>\n<li>Floating action buttons</li>\n</ul>\n<div class=\"my-6\">Drag me to bookmark bar: 👉🏻 <a class=\"border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition px-3 py-1 text-gray-700 inline-block\" role=\"button\" href=\"javascript:!function()%7Blet%20t%3D0%3Bconst%20e%3Ddocument.querySelectorAll(%22*%22)%3Bfor(const%20o%20of%20e)%7Bconst%20e%3Dwindow.getComputedStyle(o).position%3Bif(%22fixed%22%3D%3D%3De%7C%7C%22sticky%22%3D%3D%3De)%7Bconst%20e%3Do.tagName.toLowerCase()%2Ci%3Do.closest('header%2C%20nav%2C%20%5Brole%3D%22navigation%22%5D')%7C%7C%22header%22%3D%3D%3De%7C%7C%22nav%22%3D%3D%3De%2Cn%3Do.offsetHeight%3C.5*window.innerHeight%3B(i%7C%7Cn%26%26o.getBoundingClientRect().top%3C%3D10)%26%26(o.style.setProperty(%22position%22%2C%22static%22%2C%22important%22)%2Co.style.setProperty(%22top%22%2C%22auto%22%2C%22important%22)%2Co.style.setProperty(%22z-index%22%2C%22auto%22%2C%22important%22)%2Ct%2B%2B)%7D%7Dt%3E0%3Falert(t%2B%22%20sticky%2Ffixed%20header%22%2B(1!%3D%3Dt%3F%22s%22%3A%22%22)%2B%22%20removed!%22)%3Aalert(%22No%20sticky%20headers%20found%20on%20this%20page.%22)%7D()%3B\" rel=\"nofollow noopener noreferrer\" title=\"Kill Sticky Bookmarklet\" onclick=\"event.preventDefault(); alert('Drag this button to your bookmark bar')\">Kill Sticky</a></div>\n<blockquote>\n<p>📖 <a href=\"https://bookmarklet.one/bm/sticky-header-killer/\">Full documentation</a></p>\n</blockquote>\n",
      "date_published": "2024-03-16T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/dark-mode-toggle-bookmarklet/",
      "url": "https://bookmarklet.one/dark-mode-toggle-bookmarklet/",
      "title": "Dark Mode Toggle Bookmarklet",
      "content_html": "<p>Not every website offers dark mode. The <strong>Dark Mode Toggle</strong> bookmarklet fixes that with a single click.</p>\n<p>It injects a CSS overlay that inverts backgrounds to dark tones and text to light. Click once to activate, click again to turn off. No settings, no accounts.</p>\n<h2 id=\"why-dark-mode-matters\" tabindex=\"-1\">Why Dark Mode Matters <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/dark-mode-toggle-bookmarklet/#why-dark-mode-matters\" aria-hidden=\"true\">#</a></h2>\n<p>Dark mode reduces eye strain in low-light environments and saves battery on OLED screens. But many sites still don't offer it natively. This bookmarklet fills that gap universally.</p>\n<h2 id=\"how-it-works\" tabindex=\"-1\">How It Works <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/dark-mode-toggle-bookmarklet/#how-it-works\" aria-hidden=\"true\">#</a></h2>\n<p>The bookmarklet scans the page and injects a dark color scheme. It preserves readability while cutting glare. Works on any webpage regardless of the site's own theme support.</p>\n<h2 id=\"when-to-use-it\" tabindex=\"-1\">When to Use It <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/dark-mode-toggle-bookmarklet/#when-to-use-it\" aria-hidden=\"true\">#</a></h2>\n<ul>\n<li>Late-night browsing sessions</li>\n<li>Sites without native dark mode</li>\n<li>Testing dark mode on your own projects</li>\n<li>Reducing eye strain during long reads</li>\n</ul>\n<div class=\"my-6\">Drag me to bookmark bar: 👉🏻 <a class=\"border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition px-3 py-1 text-gray-700 inline-block\" role=\"button\" href=\"javascript:!function()%7Bconst%20t%3D%22codebuff-dark-mode-css%22%2Co%3Ddocument.getElementById(t)%3Bif(o)return%20o.remove()%2Cdocument.body.classList.remove(%22codebuff-dark-active%22)%2Cvoid%20alert(%22Dark%20mode%20OFF%20%E2%80%94%20original%20styles%20restored.%22)%3Bconst%20e%3Ddocument.createElement(%22style%22)%3Be.id%3Dt%2Ce.textContent%3D%22%5Cn%5Ct%5Ct*%2C%20*%3A%3Abefore%2C%20*%3A%3Aafter%20%7B%5Cn%5Ct%5Ct%5Ctbackground-color%3A%20%231a1a2e%20!important%3B%5Cn%5Ct%5Ct%5Ctcolor%3A%20%23e0e0e0%20!important%3B%5Cn%5Ct%5Ct%5Ctborder-color%3A%20%23333%20!important%3B%5Cn%5Ct%5Ct%5Ctbox-shadow%3A%20none%20!important%3B%5Cn%5Ct%5Ct%5Cttext-shadow%3A%20none%20!important%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5Ctimg%2C%20video%2C%20svg%2C%20canvas%2C%20iframe%20%7B%5Cn%5Ct%5Ct%5Ctopacity%3A%200.85%3B%5Cn%5Ct%5Ct%5Ctfilter%3A%20brightness(0.9)%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%5Cta%20%7B%20color%3A%20%236db3f2%20!important%3B%20%7D%5Cn%5Ct%5Cta%3Ahover%20%7B%20color%3A%20%239dd3ff%20!important%3B%20%7D%5Cn%5Ct%5Ctinput%2C%20textarea%2C%20select%2C%20button%20%7B%5Cn%5Ct%5Ct%5Ctbackground-color%3A%20%232a2a3e%20!important%3B%5Cn%5Ct%5Ct%5Ctcolor%3A%20%23e0e0e0%20!important%3B%5Cn%5Ct%5Ct%5Ctborder-color%3A%20%23555%20!important%3B%5Cn%5Ct%5Ct%7D%5Cn%5Ct%3A%3A-webkit-scrollbar%20%7B%20background%3A%20%231a1a2e%3B%20%7D%5Cn%5Ct%3A%3A-webkit-scrollbar-thumb%20%7B%20background%3A%20%23444%3B%20border-radius%3A%204px%3B%20%7D%5Cn%5Ct%22%2Cdocument.head.appendChild(e)%2Cdocument.body.classList.add(%22codebuff-dark-active%22)%2Calert(%22Dark%20mode%20ON%20%E2%80%94%20click%20again%20to%20toggle%20off.%22)%7D()%3B\" rel=\"nofollow noopener noreferrer\" title=\"Dark Mode Bookmarklet\" onclick=\"event.preventDefault(); alert('Drag this button to your bookmark bar')\">Dark Mode</a></div>\n<blockquote>\n<p>📖 <a href=\"https://bookmarklet.one/bm/dark-mode-toggle/\">Full documentation</a></p>\n</blockquote>\n",
      "date_published": "2024-03-15T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/bookmarklet-maker/",
      "url": "https://bookmarklet.one/bookmarklet-maker/",
      "title": "Bookmarklet Maker",
      "content_html": "<p>Bookmarklet Maker is a powerful tool that enables you to create your own custom bookmarklets, allowing you to enhance your productivity and streamline your workflow.</p>\n<script src=\"https://bookmarklet.one/js/alpine.min.js?v=202609020845\" defer=\"\"></script>\n<script>\n  window.bmdata=function(){return{bm_txt:\"alert(location.hostname)\",bm_label:\"Bookmarklet\",generated_bm:\" \",show_bm:!0,toggle_bm:function(){this.show_bm=!this.show_bm},generate_bm(){return\"javascript:(()=>{\"+encodeURIComponent(this.bm_txt)+\"})();\"}}};\n</script>\n<!-- <script>\nfunction bmdata(){\n  return {\n    bm_txt: 'alert(location.hostname)',\n    bm_label: 'label',\n    generated_bm: ' ',\n    generate_bm(){\n      return \"javascript:(()=>{\"+this.bm_txt+\"})();\"\n    }\n  }\n}\n</script> -->\n<section class=\"space-y-4 my-6 p-2\" x-data=\"bmdata\">\n<div>\n<label for=\"code\" class=\"font-bold\">Your JavaScript code</label>\n<textarea name=\"code\" id=\"code\" title=\"Enter JS code\" cols=\"30\" rows=\"5\" class=\"w-full border-2 p-4 border-gray-700\" x-model=\"bm_txt\" 2x-on:input=\"show_bm=false\"></textarea>\n</div>\n<div class=\"flex justify-center items-center min-h-[200px]\">\n<button class=\"px-8 py-2 border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition font-heading tracking-wider text-gray-700\" @click=\"toggle_bm\" x-show=\"!show_bm\"> Generate Bookmarklet </button>\n<div x-show=\"show_bm\" x-transition=\"\" class=\"space-y-6 w-full\">\n<div>\n<label for=\"bm_label\" class=\"font-bold\">Bookmarklet Name</label>\n<input x-model=\"bm_label\" title=\"Enter Bookmarkelet Name\" class=\"w-full px-4 py-2 border-2 border-gray-700\" id=\"bm_label\" maxlength=\"30\" />\n</div>\n<pre class=\"language-js\" x-text=\"generate_bm\" title=\"JS code encodeURIComponent\">\n</pre>\n<p>\nDrag me to bookmark bar: 👉🏻\n<a class=\"border-gray-700 border-2 shadow-gray-700 shadow-custom hover:shadow-none transition px-3 py-1 text-gray-700 \" x-text=\"bm_label\" :href=\"generate_bm\"></a>\n</p>\n</div>\n</div>\n</section>\n<p>By leveraging the power of basic JavaScript, you can transform your bookmarks from simple shortcuts to powerful and versatile tools that can help you accomplish a wide variety of tasks with ease.</p>\n<p>With Bookmarklet Maker, you can avoid cluttering your browser with unnecessary extensions, and instead create lightweight and effective solutions that work seamlessly with your existing workflow.</p>\n<p>Whether you're looking to automate repetitive tasks, simplify your browsing experience, or just boost your productivity, Bookmarklet Maker is a must-have tool for anyone looking to get the most out of their browser.</p>\n<h2 class=\"text-3xl font-bold\" id=\"benefits-of-bookmarklets\" tabindex=\"-1\">Benefits of Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/bookmarklet-maker/#benefits-of-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<ul class=\"list-disc list-inside space-y-2\">\n<li><strong>Easy to Use</strong>: Bookmarklets are incredibly easy to use, and can be created in just a few minutes.</li>\n<li><strong>Versatile</strong>: Bookmarklets can be used to automate a wide variety of tasks, including everything from simple form-filling to complex data analysis.</li>\n<li><strong>Lightweight</strong>: Bookmarklets are lightweight and don't require any additional software to run, making them ideal for users who want to keep their browser as lean as possible.</li>\n</ul>\n<h2 class=\"text-3xl font-bold\" id=\"bookmarklet-examples\" tabindex=\"-1\">Bookmarklet Examples <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/bookmarklet-maker/#bookmarklet-examples\" aria-hidden=\"true\">#</a></h2>\n<p>Some examples of bookmarklets that you can create with Bookmarklet Maker:</p>\n<h3 id=\"qr-code-generator\" tabindex=\"-1\">QR Code Generator <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/bookmarklet-maker/#qr-code-generator\" aria-hidden=\"true\">#</a></h3>\n<pre class=\"language-js my-6\"><code class=\"language-js\">javascript:!function(){var e=\"https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=\"+encodeURIComponent(window.location.href);open(e,\"w\",\"location=no,status=yes,menubar=no,scrollbars=no,resizable=yes,width=500,height=500,modal=yes,dependent=yes\")}();</code></pre>\n<h3 id=\"search-in-google-site-all\" tabindex=\"-1\">Search in Google Site:All <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/bookmarklet-maker/#search-in-google-site-all\" aria-hidden=\"true\">#</a></h3>\n<pre class=\"language-js my-6\"><code class=\"language-js\">javascript:location=\"http://www.google.com/search?num=100&q=site:\"+escape(location.hostname);</code></pre>\n<h3 id=\"enable-right-click\" tabindex=\"-1\">Enable Right Click <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/bookmarklet-maker/#enable-right-click\" aria-hidden=\"true\">#</a></h3>\n<pre class=\"language-js my-6\"><code class=\"language-js\">javascript:document.oncontextmenu=null;</code></pre>\n<h3 id=\"quick-note\" tabindex=\"-1\">Quick Note <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/bookmarklet-maker/#quick-note\" aria-hidden=\"true\">#</a></h3>\n<pre class=\"language-js my-6\"><code class=\"language-js\">javascript:!function(){let e=window.open(\"about:blank\",\"_blank\");e?(e.document.write(\"Enter your note here.\"),e.document.title=\"Quick Note\",e.document.documentElement.setAttribute(\"contenteditable\",\"\"),e.document.close()):alert(\"Please allow popups for this site to use the Quick Note feature\")}();</code></pre>\n",
      "date_published": "2023-03-31T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/create-bookmarklet/",
      "url": "https://bookmarklet.one/create-bookmarklet/",
      "title": "How to Create Bookmarklets",
      "content_html": "<p><a href=\"https://bookmarklet.one/what-are-bookmarklets/\">Bookmarklets</a> are very usefull and timesaving piece of javascript code and that you can use.</p>\n<p>first let's see how a bookmarklets look like.</p>\n<h2 class=\"font-bold text-2xl\" id=\"create-bookmarklet\" tabindex=\"-1\">Create Bookmarklet <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/create-bookmarklet/#create-bookmarklet\" aria-hidden=\"true\">#</a></h2>\n<p>Before starting to create bookmarklets few things you should keep mind,</p>\n<ul class=\"list-decimal list-inside\">\n<li>All bookmarkelts must start with <strong>javascript:</strong> keyword,</li>\n<li>Do not use comments inside bookarklets, there is big chance your bookmarklet will fail to run,</li>\n</ul>\n<p><mark>One Liner Bookmarklets</mark></p>\n<p>if JavaScript code is simple then you can write that in one line and your custom bookmarklet is ready.</p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token literal-property property\">javascript</span><span class=\"token operator\">:</span><span class=\"token function\">alert</span><span class=\"token punctuation\">(</span>location<span class=\"token punctuation\">.</span>href<span class=\"token punctuation\">)</span></code></pre>\n<p>This type of bookmarklet is good if you want to extract some basic information from page where you don't need to keep track of any value.</p>\n<p><strong>Example:</strong></p>\n<ul class=\"list-disc list-inside\">\n<li>Quickly check all indexed page of current website,</li>\n<li>Enable right-click,</li>\n<li>Show hidden fields,</li>\n<li>Remove any element from page,</li>\n</ul>\n<p><mark>Bookmarklets that require more than one line</mark></p>\n<p>If your code is a bit complex and needs more space then use the wrap your function like following IIF IEF <strong>JavaScript immediately invoked function</strong> <sup><a href=\"https://developer.mozilla.org/en-US/docs/Glossary/IIFE\" rel=\"noopener noreferrer\" target=\"_blank\">[ref]</a></sup></p>\n<div class=\"grid md:grid-cols-3 gap-2 group\">\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token comment\">/* variation 1 */</span><br /><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span><br /> <span class=\"token comment\">/* function logic here */</span><br /><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token comment\">/* variation 2 */</span><br /><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span><span class=\"token punctuation\">{</span><br /> <span class=\"token comment\">/* function logic here */</span><br /><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token comment\">/* variation 3 */</span><br /><span class=\"token punctuation\">(</span><span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span><span class=\"token punctuation\">{</span><br /> <span class=\"token comment\">/* function logic here */</span><br /><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n</div>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token literal-property property\">javascript</span><span class=\"token operator\">:</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span><span class=\"token punctuation\">{</span><br />  <span class=\"token function\">alert</span><span class=\"token punctuation\">(</span>location<span class=\"token punctuation\">.</span>href<span class=\"token punctuation\">)</span><br /><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre>\n<p><strong>Example:</strong></p>\n<ul class=\"list-disc list-inside\">\n<li>Generate QR code,</li>\n<li>Make it Snow on page,</li>\n<li>Extract or remove any element from page</li>\n</ul>\n<hr />\n<p>Now you can easily convert JavaScript code to Bookmarklets,</p>\n<p>If you find it little bit difficult to make bookmarklet then you can take help of <a href=\"https://bookmarklet.one/bookmarklet-maker/\">bookmarklet maker tools</a>.</p>\n<p>By doing so not extra script always loads on everypage, script will run only when you run it.</p>\n",
      "date_published": "2023-01-25T00:00:00Z"
    },{
      "id": "https://bookmarklet.one/what-are-bookmarklets/",
      "url": "https://bookmarklet.one/what-are-bookmarklets/",
      "title": "What are Bookmarklets",
      "content_html": "<div class=\"alert\">\n<p><strong>Bookmarklets are small peice of JavaScript code that is stored as bookmarks in browser. Bookmarklets help in automating repetitive task, access hidden information from page.</strong></p>\n</div>\n<p>Simple bookmarklets look like this</p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token literal-property property\">javascript</span><span class=\"token operator\">:</span><span class=\"token function\">alert</span><span class=\"token punctuation\">(</span>location<span class=\"token punctuation\">.</span>href<span class=\"token punctuation\">)</span></code></pre>\n<p>Just copy the above code and save it as bookmark,</p>\n<p>Once bookmark is saved you can click on it run on any webpage.</p>\n<div class=\"alert bg-blue-200\">\n                  <div class=\"icon\">\n                    <img width=\"22\" height=\"22\" class=\"keep-original\" src=\"https://bookmarklet.one/icons/info.svg\" alt=\"info icon\" />\n                  </div><p>Bookmarklets have <strong>javascript:</strong> prefix,</p>\n</div><p>Wihtout <strong>javascript:</strong> prefix any JavaScript code saved as bookmark will not run in browser.</p>\n<h2 class=\"text-3xl font-bold\" id=\"pros-of-using-bookmarklets\" tabindex=\"-1\">Pros of using Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/what-are-bookmarklets/#pros-of-using-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<ul class=\"list-disc list-inside\">\n<li>No need to install any Chrome extension for simple things,</li>\n<li>No code is auto inserted into any page unless you decide,</li>\n<li>You can write your own helpfull bookmarklets on your own, (like quickly adding ling to feedly, pocket or sending link through pushbullet)</li>\n</ul>\n<h2 class=\"text-3xl font-bold\" id=\"cons-of-using-bookmarklets\" tabindex=\"-1\">Cons of using Bookmarklets <a class=\"hidden text-gray-300 font-semibold ml-1\" href=\"https://bookmarklet.one/what-are-bookmarklets/#cons-of-using-bookmarklets\" aria-hidden=\"true\">#</a></h2>\n<ul class=\"list-disc list-inside\">\n<li>Bookmarklets do not run automatically or trigger on schedule,</li>\n<li>List of website that offer Bookmarklets are limited</li>\n</ul>\n<p>If you want to create your bookmarklet then here is full post about <a href=\"https://bookmarklet.one/create-bookmarklet/\">How to create your own Bookmarklet</a></p>\n",
      "date_published": "2023-01-24T00:00:00Z"
    }
  ]
}
