update readme
Release unsigned Firefox extension / Package and attach unsigned XPI (release) Failing after 1m17s
Release unsigned Firefox extension / Package and attach unsigned XPI (release) Failing after 1m17s
This commit is contained in:
@@ -1,71 +1,22 @@
|
|||||||
# Glagolify
|
# 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.
|
Glagolify is a small Firefox extension that turns Russian Cyrillic text on webpages into Glagolitic. Switch it off and the original text comes back—no reload required.
|
||||||
|
|
||||||
## Install in Firefox
|
Choose from four letter styles: **Round**, **Angular Sans**, **Historical Angular**, and **Missal Angular**. Glagolify also handles text added after a page loads while leaving text fields and editors alone.
|
||||||
|
|
||||||
Requires Firefox 142 or newer.
|
## Install
|
||||||
|
|
||||||
1. Open `about:debugging#/runtime/this-firefox`.
|
Glagolify requires Firefox 142 or newer.
|
||||||
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.
|
1. Download the latest `.xpi` from [Releases](https://git.krtss.de/StanPonomarev/glagolify/releases).
|
||||||
|
2. Open `about:debugging#/runtime/this-firefox` in Firefox.
|
||||||
|
3. Select **Load Temporary Add-on…**.
|
||||||
|
4. Choose the downloaded `.xpi` file.
|
||||||
|
|
||||||
|
Release builds are currently unsigned, so regular Firefox installs them temporarily and removes them when Firefox restarts.
|
||||||
|
|
||||||
## Use
|
## Use
|
||||||
|
|
||||||
1. Open a normal web page.
|
Open a webpage, click the Glagolify toolbar icon, choose a style, and select **Enable Glagolitic**. Select **Restore Cyrillic** when you want the original text back.
|
||||||
2. Select the Glagolify toolbar icon.
|
|
||||||
3. Choose **Round**, **Angular Sans**, **Historical Angular**, or **Missal Angular** letter shapes.
|
|
||||||
4. Press **Enable Glagolitic**. Press **Restore Cyrillic** to undo it.
|
|
||||||
|
|
||||||
The popup keeps one action button and a four-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 transliterates letters; it does not translate language. Firefox settings pages, browser UI, and other protected pages cannot be changed.
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
The four selectable styles use two OFL-licensed typefaces:
|
|
||||||
|
|
||||||
- **Round:** [Shafarik Regular](https://github.com/slavonic/Shafarik)'s standard Unicode Glagolitic glyphs. Its documentation identifies this character set as Round Glagolitic (`Okrugla glagoljica`), modeled on Bulgarian manuscript handwriting from the late 10th through early 12th centuries.
|
|
||||||
- **Angular Sans:** [Noto Sans Glagolitic Regular](https://github.com/google/fonts/tree/main/ofl/notosansglagolitic), a modern sans design with angular letter construction.
|
|
||||||
- **Historical Angular:** Shafarik's OpenType Stylistic Set 3 (`ss03`), identified in its documentation as Croatian Angular or Square Glagolitic.
|
|
||||||
- **Missal Angular:** Shafarik's OpenType Stylistic Set 4 (`ss04`), modeled on Glagolitic used in 15th- and 16th-century printed missals from Kosinj and Venice.
|
|
||||||
|
|
||||||
Shafarik's license is `fonts/Shafarik-OFL.txt`; Noto Sans Glagolitic's license is `fonts/OFL.txt`. The three Shafarik faces use the CSS `size-adjust` font descriptor at 115% to compensate for the typeface's small lowercase Glagolitic body. Noto Sans Glagolitic retains its native metrics.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
## Release pipeline
|
|
||||||
|
|
||||||
Publishing a Gitea release runs `.gitea/workflows/release.yml`. The workflow checks out the release tag, runs the tests, builds an unsigned XPI, verifies its SHA-256 checksum, and attaches both files to that release using Gitea's built-in job token.
|
|
||||||
|
|
||||||
Use a Mozilla-compatible numeric tag such as `1.2.3` or `v1.2.3`. A leading `v` is removed. The resulting release assets are `glagolify-1.2.3.xpi` and `glagolify-1.2.3.xpi.sha256`. The release tag overrides `package.json` without modifying the tagged source; the packaged `manifest.json` receives the normalized release version. Draft releases do not run the pipeline until they are published.
|
|
||||||
|
|
||||||
The repository or owner Actions settings must allow the job token to write releases. No personal access token or signing credential is required. The XPI is unsigned and therefore intended for Mozilla submission, temporary installation, or Firefox configurations that explicitly permit unsigned extensions.
|
|
||||||
|
|
||||||
To reproduce the archive locally with the version from `package.json`, run `npm run package`. Override it with `npm run package -- --version v1.2.3`. Packaging includes only extension runtime files and writes the archive and checksum under `dist/`.
|
|
||||||
|
|
||||||
## Automated checks
|
|
||||||
|
|
||||||
No install or build step is required. With Node.js available, run:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
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 four-style font selection using Node's built-in test runner.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user