2026-08-08 18:05:03 +02:00
2026-08-08 17:09:43 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00
2026-08-08 18:05:03 +02:00

Glagolify

Glagolify is a dependency-free Firefox WebExtension that converts modern Russian Cyrillic page text to Glagolitic and restores the exact source text when switched off.

Install in Firefox

Requires Firefox 142 or newer.

  1. Open about:debugging#/runtime/this-firefox.
  2. Choose Load Temporary Add-on….
  3. Select this directory's manifest.json.

Temporary add-ons remain installed until Firefox restarts. For permanent local use, package and sign the extension through Mozilla Add-ons.

Use

  1. Open a normal web page.
  2. Select the Glagolify toolbar icon.
  3. Choose Round or Angular letter shapes.
  4. Press Enable Glagolitic. Press Restore Cyrillic to undo it.

The popup keeps one action button and a two-choice letter-style selector. The selected style is stored as a global extension preference and updates every enabled tab immediately. The background script separately owns one absolute enabled/disabled state per tab, broadcasts it to every frame, and supplies both state and style to frames created or navigated later. Tab state lasts across navigation and is discarded when the tab closes. Firefox internal pages (about:, browser UI), extension pages, and other protected pages cannot be modified; the popup reports that restriction.

Glagolify updates existing text and watches for text nodes that are inserted or changed later. It leaves script, style, noscript, template, textarea, select, option, effective contenteditable regions, and documents in designMode untouched. Visible form labels, validation messages, and button text are converted, while text controls and selectable options are not. Textual DOM hidden by HTML, CSS, or aria-hidden is converted proactively so it is already Glagolitic if revealed. The implementation only changes text-node data and a reversible inline font fallback; it does not replace or wrap page elements. Disconnected nodes are restored and released after each mutation batch, while nodes moved and reconnected in the same batch keep their state.

Open shadow roots present when Glagolify is enabled are handled, including nested roots. Open roots under hosts added later are discovered through the host's DOM mutation. An open shadow root attached later to an already-connected, otherwise unchanged host may not be detected. Closed shadow roots are inaccessible to extensions and cannot be converted.

Transliteration conventions

The converter has an explicit, case-preserving mapping for all 33 letters of the modern Russian alphabet (66 uppercase/lowercase entries). Punctuation, whitespace, digits, Latin text, Cyrillic characters outside that mapping, and already-Glagolitic text remain unchanged. Letters shared by Russian and another Cyrillic alphabet are converted because their code points are the same.

The mapping uses dedicated Glagolitic letters for Ё (Yo), Й (I), Щ (Shta), and Ю (Yu). Modern Russian letters without exact historical one-to-one equivalents use these conventions:

  • Ь → Yeri ( / )
  • Ъ → Yeru ( / )
  • Ы → the Yeru + Izhe digraph (ⰟⰉ / ⱏⰹ)
  • Е and Э → Yestu ( / )
  • Я → Yati ( / )

Bundled fonts

Glagolify bundles two OFL-licensed fonts so converted characters remain legible and the popup can switch between historical letter shapes:

  • Round: Noto Sans Glagolitic Regular, the standard rounded Unicode Glagolitic design. Its license is fonts/OFL.txt.
  • Angular: Shafarik Regular with OpenType Stylistic Set 3 (ss03), which Shafarik defines as Croatian Angular or Square Glagolitic. Its license is fonts/Shafarik-OFL.txt.

The selected font is inserted before each affected element's existing computed font family, so non-Glagolitic characters continue to use the page's own typography. If the page genuinely changes an affected element's inline font-family while Glagolify is enabled, the extension retains that latest page-owned declaration, reapplies the selected Glagolitic fallback, and restores the latest page value when switched off.

Automated checks

No install or build step is required. With Node.js available, run:

npm test

The test suite validates the complete 66-entry mapping, mixed-content preservation, case, already-Glagolitic behavior, authoritative per-tab/background frame inheritance, and persisted round/angular font selection using Node's built-in test runner.

S
Description
No description provided
Readme
624 KiB
2026-08-08 21:04:02 +02:00
Languages
JavaScript 83.2%
CSS 12.6%
HTML 4.2%