Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

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

Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

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

Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

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

Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

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

Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

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

Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

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

Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

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

Latest commit

History

445 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Entity Footnotes - a KOReader user patch for xray.koplugin

PlatformLicenseStatus

A KOReader user patch that adds Entity Footnotes to ultimatejimmy/xray.koplugin: it underlines AI-identified characters, historical figures, locations, and terms directly in the reading text, and shows the AI-written description in a tap-to-reveal popup - the same in-text interaction the plugin already has for unit conversions. Scanning runs as a chunked, non-blocking background task so page turns stay responsive.

See ultimatejimmy/xray.koplugin#100 for the full background: this started as a PR against the plugin itself, but the maintainer preferred it ship as an optional user patch rather than a permanent part of the plugin, since the scan has to re-run every time the AI finds new entities (not just once at book open), and that's more than they want to guarantee UX for on all e-ink devices. This patch takes that route: it doesn't fork or modify xray.koplugin at all, it just monkey-patches the plugin's class table at runtime, the same technique xray.koplugin already uses internally for its own unit-converter underline/tap handling.

All credit for X-Ray itself goes to ultimatejimmy - this repo only adds the one patch file.

Requirements

  • KOReader
  • xray.koplugin installed and set up (API key configured, at least one character/location/term fetched for the book you're reading)

Install

  1. Download 2-xray-entity-footnotes.lua from the latest release.
  2. Copy it into koreader/patches/2-xray-entity-footnotes.lua.
  3. Restart KOReader.
  4. Open a book, tap the X-Ray menu, and look for Entity Footnotes to enable it, pick categories, or trigger a manual rescan.

Since this is a patch, not a plugin, it updates independently of xray.koplugin. Updating xray.koplugin itself (through its own built-in updater or manually) won't touch or remove this file, and updating this patch never touches xray.koplugin.

Updating

Replace koreader/patches/2-xray-entity-footnotes.lua with the newest version from Releases and restart KOReader. Watch this repo (Watch -> Custom -> Releases) on GitHub to get notified when a new version is out.

Known limitations

  • English-only. As an external patch it can't add entries to xray.koplugin's own localization files, so menu/notification text falls back to English regardless of your KOReader language.
  • Scanning is chunked to avoid blocking input, but on slower e-ink devices with very large entity lists it can still be briefly perceptible.
  • Matching is case-sensitive (a name only matches its original capitalization) to avoid false positives from common words or names that are substrings of unrelated words (e.g. "black" the color vs. "Black" the character, or "han" inside "than"). As a trade-off, occurrences in ALL-CAPS text (some chapter headers or title pages) won't be underlined.

About

KOReader X-Ray plugin community patch: adds Entity Footnotes (in-text underlines + tap popups for AI-identified characters, locations, historical figures, terms). Fork of ultimatejimmy/xray.koplugin.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages