@bobfrankston/rmfmail 1.2.276 → 1.2.278
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.commitmsg +26 -23
- package/bin/build-tinymce.js +27 -0
- package/client/app.bundle.js +108 -0
- package/client/app.bundle.js.map +4 -4
- package/client/app.js +65 -0
- package/client/app.js.map +1 -1
- package/client/app.ts +59 -0
- package/client/compose/compose.bundle.js +90 -2
- package/client/compose/compose.bundle.js.map +4 -4
- package/client/compose/compose.js +26 -1
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +22 -1
- package/client/compose/editor.js +12 -1
- package/client/compose/editor.js.map +1 -1
- package/client/compose/editor.ts +17 -2
- package/client/index.html +1 -0
- package/client/lib/rmf-tiny.js +3 -0
- package/client/lib/tinymce/CHANGELOG.md +47 -0
- package/client/lib/tinymce/composer.json +1 -1
- package/client/lib/tinymce/icons/default/icons.js +13 -0
- package/client/lib/tinymce/icons/default/icons.min.js +1 -1
- package/client/lib/tinymce/langs/ar-SA.js +440 -0
- package/client/lib/tinymce/langs/ar.js +441 -0
- package/client/lib/tinymce/langs/az.js +440 -0
- package/client/lib/tinymce/langs/be.js +440 -0
- package/client/lib/tinymce/langs/bg-BG.js +440 -0
- package/client/lib/tinymce/langs/bn-BD.js +440 -0
- package/client/lib/tinymce/langs/bs.js +440 -0
- package/client/lib/tinymce/langs/ca.js +440 -0
- package/client/lib/tinymce/langs/cs.js +440 -0
- package/client/lib/tinymce/langs/cy.js +440 -0
- package/client/lib/tinymce/langs/da.js +440 -0
- package/client/lib/tinymce/langs/de.js +440 -0
- package/client/lib/tinymce/langs/el.js +440 -0
- package/client/lib/tinymce/langs/eo.js +440 -0
- package/client/lib/tinymce/langs/es-MX.js +440 -0
- package/client/lib/tinymce/langs/es.js +440 -0
- package/client/lib/tinymce/langs/et.js +440 -0
- package/client/lib/tinymce/langs/eu.js +440 -0
- package/client/lib/tinymce/langs/fa.js +441 -0
- package/client/lib/tinymce/langs/fi.js +440 -0
- package/client/lib/tinymce/langs/fr-FR.js +440 -0
- package/client/lib/tinymce/langs/gl.js +440 -0
- package/client/lib/tinymce/langs/he-IL.js +440 -0
- package/client/lib/tinymce/langs/hr.js +440 -0
- package/client/lib/tinymce/langs/hu-HU.js +440 -0
- package/client/lib/tinymce/langs/hy.js +440 -0
- package/client/lib/tinymce/langs/id.js +440 -0
- package/client/lib/tinymce/langs/index.json +63 -0
- package/client/lib/tinymce/langs/is-IS.js +440 -0
- package/client/lib/tinymce/langs/it.js +440 -0
- package/client/lib/tinymce/langs/ja.js +440 -0
- package/client/lib/tinymce/langs/ka-GE.js +440 -0
- package/client/lib/tinymce/langs/kab.js +440 -0
- package/client/lib/tinymce/langs/kk.js +440 -0
- package/client/lib/tinymce/langs/ko-KR.js +440 -0
- package/client/lib/tinymce/langs/lt.js +440 -0
- package/client/lib/tinymce/langs/lv.js +440 -0
- package/client/lib/tinymce/langs/nb-NO.js +440 -0
- package/client/lib/tinymce/langs/ne.js +440 -0
- package/client/lib/tinymce/langs/nl-BE.js +440 -0
- package/client/lib/tinymce/langs/nl.js +440 -0
- package/client/lib/tinymce/langs/oc.js +440 -0
- package/client/lib/tinymce/langs/pl.js +440 -0
- package/client/lib/tinymce/langs/pt-BR.js +440 -0
- package/client/lib/tinymce/langs/pt-PT.js +440 -0
- package/client/lib/tinymce/langs/ro.js +440 -0
- package/client/lib/tinymce/langs/ru.js +440 -0
- package/client/lib/tinymce/langs/sk.js +440 -0
- package/client/lib/tinymce/langs/sl-SI.js +440 -0
- package/client/lib/tinymce/langs/sr.js +440 -0
- package/client/lib/tinymce/langs/sv-SE.js +440 -0
- package/client/lib/tinymce/langs/ta.js +440 -0
- package/client/lib/tinymce/langs/tg.js +440 -0
- package/client/lib/tinymce/langs/th-TH.js +440 -0
- package/client/lib/tinymce/langs/tr.js +440 -0
- package/client/lib/tinymce/langs/ug.js +440 -0
- package/client/lib/tinymce/langs/uk.js +440 -0
- package/client/lib/tinymce/langs/vi.js +440 -0
- package/client/lib/tinymce/langs/zh-CN.js +440 -0
- package/client/lib/tinymce/langs/zh-HK.js +440 -0
- package/client/lib/tinymce/langs/zh-MO.js +440 -0
- package/client/lib/tinymce/langs/zh-TW.js +440 -0
- package/client/lib/tinymce/models/dom/model.js +1 -1
- package/client/lib/tinymce/package.json +1 -1
- package/client/lib/tinymce/plugins/accordion/plugin.js +1 -1
- package/client/lib/tinymce/plugins/advlist/plugin.js +1 -1
- package/client/lib/tinymce/plugins/anchor/plugin.js +1 -1
- package/client/lib/tinymce/plugins/autolink/plugin.js +1 -1
- package/client/lib/tinymce/plugins/autolink/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/autoresize/plugin.js +1 -1
- package/client/lib/tinymce/plugins/autosave/plugin.js +1 -1
- package/client/lib/tinymce/plugins/autosave/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/charmap/plugin.js +1 -1
- package/client/lib/tinymce/plugins/code/plugin.js +1 -1
- package/client/lib/tinymce/plugins/codesample/plugin.js +2 -2
- package/client/lib/tinymce/plugins/codesample/plugin.min.js +2 -2
- package/client/lib/tinymce/plugins/directionality/plugin.js +1 -1
- package/client/lib/tinymce/plugins/emoticons/plugin.js +5 -11
- package/client/lib/tinymce/plugins/emoticons/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/fullscreen/plugin.js +1 -1
- package/client/lib/tinymce/plugins/help/plugin.js +1 -1
- package/client/lib/tinymce/plugins/help/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/image/plugin.js +15 -28
- package/client/lib/tinymce/plugins/image/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/importcss/plugin.js +1 -1
- package/client/lib/tinymce/plugins/insertdatetime/plugin.js +1 -1
- package/client/lib/tinymce/plugins/link/plugin.js +3 -2
- package/client/lib/tinymce/plugins/link/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/lists/plugin.js +1 -1
- package/client/lib/tinymce/plugins/media/plugin.js +1 -1
- package/client/lib/tinymce/plugins/nonbreaking/plugin.js +1 -1
- package/client/lib/tinymce/plugins/pagebreak/plugin.js +1 -1
- package/client/lib/tinymce/plugins/preview/plugin.js +12 -2
- package/client/lib/tinymce/plugins/preview/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/quickbars/plugin.js +1 -1
- package/client/lib/tinymce/plugins/save/plugin.js +1 -1
- package/client/lib/tinymce/plugins/searchreplace/plugin.js +1 -1
- package/client/lib/tinymce/plugins/table/plugin.js +5 -3
- package/client/lib/tinymce/plugins/table/plugin.min.js +1 -1
- package/client/lib/tinymce/plugins/visualblocks/plugin.js +1 -1
- package/client/lib/tinymce/plugins/visualchars/plugin.js +1 -1
- package/client/lib/tinymce/plugins/wordcount/plugin.js +1 -1
- package/client/lib/tinymce/skins/content/dark/content.css +3 -0
- package/client/lib/tinymce/skins/content/dark/content.js +1 -1
- package/client/lib/tinymce/skins/content/dark/content.min.css +1 -1
- package/client/lib/tinymce/skins/ui/oxide/content.css +53 -42
- package/client/lib/tinymce/skins/ui/oxide/content.inline.css +53 -42
- package/client/lib/tinymce/skins/ui/oxide/content.inline.js +1 -1
- package/client/lib/tinymce/skins/ui/oxide/content.inline.min.css +1 -1
- package/client/lib/tinymce/skins/ui/oxide/content.inline.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide/content.inline.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide/content.js +1 -1
- package/client/lib/tinymce/skins/ui/oxide/content.min.css +1 -1
- package/client/lib/tinymce/skins/ui/oxide/content.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide/content.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide/skin.css +94 -22
- package/client/lib/tinymce/skins/ui/oxide/skin.js +1 -1
- package/client/lib/tinymce/skins/ui/oxide/skin.min.css +1 -1
- package/client/lib/tinymce/skins/ui/oxide/skin.min.ts +8 -3
- package/client/lib/tinymce/skins/ui/oxide/skin.ts +8 -3
- package/client/lib/tinymce/skins/ui/oxide-dark/content.css +53 -42
- package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.css +53 -42
- package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.js +1 -1
- package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.min.css +1 -1
- package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide-dark/content.inline.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide-dark/content.js +1 -1
- package/client/lib/tinymce/skins/ui/oxide-dark/content.min.css +1 -1
- package/client/lib/tinymce/skins/ui/oxide-dark/content.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide-dark/content.ts +2 -2
- package/client/lib/tinymce/skins/ui/oxide-dark/skin.css +94 -22
- package/client/lib/tinymce/skins/ui/oxide-dark/skin.js +1 -1
- package/client/lib/tinymce/skins/ui/oxide-dark/skin.min.css +1 -1
- package/client/lib/tinymce/skins/ui/oxide-dark/skin.min.ts +8 -3
- package/client/lib/tinymce/skins/ui/oxide-dark/skin.ts +8 -3
- package/client/lib/tinymce/skins/ui/tinymce-5/content.css +53 -42
- package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.css +53 -42
- package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.js +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.min.css +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5/content.inline.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5/content.js +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5/content.min.css +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5/content.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5/content.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5/skin.css +94 -22
- package/client/lib/tinymce/skins/ui/tinymce-5/skin.js +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5/skin.min.css +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5/skin.min.ts +8 -3
- package/client/lib/tinymce/skins/ui/tinymce-5/skin.ts +8 -3
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.css +53 -42
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.css +53 -42
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.js +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.inline.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.js +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.min.css +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.min.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/content.ts +2 -2
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.css +94 -22
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.js +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.min.css +1 -1
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.min.ts +8 -3
- package/client/lib/tinymce/skins/ui/tinymce-5-dark/skin.ts +8 -3
- package/client/lib/tinymce/themes/silver/theme.js +1602 -579
- package/client/lib/tinymce/themes/silver/theme.min.js +3 -3
- package/client/lib/tinymce/tinymce.js +1410 -294
- package/client/lib/tinymce/tinymce.min.js +5 -5
- package/client/lib/tinymce-langs.js +96 -0
- package/client/lib/tinymce-langs.js.map +1 -0
- package/client/lib/tinymce-langs.ts +99 -0
- package/docs/editor.md +29 -3
- package/docs/preferences.md +2 -1
- package/npmchanges.md +63 -0
- package/package.json +11 -8
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-59216 → node_modules.npmglobalize-stash-65048}/.package-lock.json +0 -0
package/.commitmsg
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
TinyMCE 8.6.0 → 8.8.2
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
`previewKey` (app.ts re-dispatches it), and installPreviewControls ALSO attached
|
|
6
|
-
a contentDocument listener that re-dispatched a synthetic keydown of its own.
|
|
7
|
-
The srcdoc document is same-origin, so both are live. One Ctrl+F therefore ran
|
|
8
|
-
openCompose("forward") twice and opened two compose popouts — the second never
|
|
9
|
-
finished loading and sat blank and "(Not Responding)" until it was killed (Bob
|
|
10
|
-
2026-08-23, "Compose: Fwd: FirstCare Slide Deck (Not Responding)"; the log shows
|
|
11
|
-
openCompose-entry mode=forward twice in the same millisecond, two popoutCompose
|
|
12
|
-
windows, and the loaded one exiting while the blank duplicate survived). Ctrl+D
|
|
13
|
-
and Ctrl+P doubled the same way.
|
|
3
|
+
Routine maintenance releases — no security advisories, no breaking changes
|
|
4
|
+
(all within major 8). Four of the fixes land on paths mailx actually uses:
|
|
14
5
|
|
|
15
|
-
The
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
- The menubar could wrap onto multiple rows on narrow viewports or at high
|
|
7
|
+
browser zoom, leaving little or no visible editable area (8.8.1). Same class
|
|
8
|
+
of failure as the v1.2.264 "body must fill the iframe" bug, and compose is
|
|
9
|
+
routinely used zoomed.
|
|
10
|
+
- CSS custom property names and colour values in a style attribute were
|
|
11
|
+
lowercased when parsed (8.7.0) — that is quoted mail passing through a
|
|
12
|
+
reply/forward.
|
|
13
|
+
- Copying or dragging in an image didn't set width/height on the tag (8.7.0),
|
|
14
|
+
which the inline-image → cid path then had to carry.
|
|
15
|
+
- The link plugin threw a querySelectorAll syntax error on anchors containing
|
|
16
|
+
semicolons (8.8.0). Mail bodies are full of odd links.
|
|
19
17
|
|
|
20
|
-
Also:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
Also: undo not restoring the selection, deleting a newline in a list item
|
|
19
|
+
eating the item, and the emoticons dialog's 300-item cap (we load that plugin).
|
|
20
|
+
|
|
21
|
+
Verified before publishing: all 17 plugins we request still exist in 8.8.2, the
|
|
22
|
+
dom model is unchanged, and the package still ships no langs/ directory — the
|
|
23
|
+
61 packs added in 1.2.277 come from tinymce-i18n and are copied after the tree,
|
|
24
|
+
so the re-copy keeps them (62 files present, manifest included).
|
|
25
|
+
|
|
26
|
+
The spec moves from ^8.5.0 to ^8.8.2. The old floor already permitted 8.8.2;
|
|
27
|
+
the tree had simply drifted at 8.6.0 with nothing to notice it, which is what
|
|
28
|
+
prompted this. Raising the floor makes the intent explicit rather than leaving
|
|
29
|
+
a fresh install free to resolve lower.
|
package/bin/build-tinymce.js
CHANGED
|
@@ -10,6 +10,13 @@ import path from "node:path";
|
|
|
10
10
|
const root = path.resolve(import.meta.dirname, "..");
|
|
11
11
|
const src = path.join(root, "node_modules", "tinymce");
|
|
12
12
|
const dst = path.join(root, "client", "lib", "tinymce");
|
|
13
|
+
// UI translations. The tinymce package itself ships NO langs/ directory —
|
|
14
|
+
// the packs are a separate community package, one file per language, each
|
|
15
|
+
// a plain `tinymce.addI18n("de", {...})` call. TinyMCE resolves them
|
|
16
|
+
// itself as `<baseURL>/langs/<code>.js`, so dropping them beside the
|
|
17
|
+
// script is the whole integration (Claude Code 2026-08-23).
|
|
18
|
+
const langSrc = path.join(root, "node_modules", "tinymce-i18n", "langs8");
|
|
19
|
+
const langDst = path.join(dst, "langs");
|
|
13
20
|
|
|
14
21
|
if (!fs.existsSync(src)) {
|
|
15
22
|
console.error(`build-tinymce: source not found at ${src} — run npm install first`);
|
|
@@ -32,6 +39,26 @@ function copyTree(s, d) {
|
|
|
32
39
|
fs.rmSync(dst, { recursive: true, force: true });
|
|
33
40
|
copyTree(src, dst);
|
|
34
41
|
|
|
42
|
+
// Language packs. Only the one language in force is ever fetched at
|
|
43
|
+
// runtime, so shipping every pack costs disk and nothing else. The manifest
|
|
44
|
+
// is what the client resolves "auto" against — the copied files ARE the list
|
|
45
|
+
// of what can be offered, so nothing hardcodes a second copy of it.
|
|
46
|
+
let langs = [];
|
|
47
|
+
if (fs.existsSync(langSrc)) {
|
|
48
|
+
fs.mkdirSync(langDst, { recursive: true });
|
|
49
|
+
for (const name of fs.readdirSync(langSrc)) {
|
|
50
|
+
if (!name.endsWith(".js")) continue;
|
|
51
|
+
fs.copyFileSync(path.join(langSrc, name), path.join(langDst, name));
|
|
52
|
+
langs.push(name.slice(0, -3));
|
|
53
|
+
}
|
|
54
|
+
langs.sort();
|
|
55
|
+
fs.writeFileSync(path.join(langDst, "index.json"), JSON.stringify(langs, null, 2) + "\n");
|
|
56
|
+
console.log(`build-tinymce: copied ${langs.length} language packs → client/lib/tinymce/langs/`);
|
|
57
|
+
} else {
|
|
58
|
+
// Never silently ship an editor whose language menu is empty.
|
|
59
|
+
console.error(`build-tinymce: WARNING no language packs at ${langSrc} — run npm install; the editor will be English-only`);
|
|
60
|
+
}
|
|
61
|
+
|
|
35
62
|
let count = 0, bytes = 0;
|
|
36
63
|
function tally(p) {
|
|
37
64
|
const st = fs.statSync(p);
|
package/client/app.bundle.js
CHANGED
|
@@ -7937,6 +7937,67 @@ whatever it finds.</p>
|
|
|
7937
7937
|
}
|
|
7938
7938
|
});
|
|
7939
7939
|
|
|
7940
|
+
// client/lib/tinymce-langs.js
|
|
7941
|
+
var tinymce_langs_exports = {};
|
|
7942
|
+
__export(tinymce_langs_exports, {
|
|
7943
|
+
LANGUAGE_AUTO: () => LANGUAGE_AUTO,
|
|
7944
|
+
LANGUAGE_ENGLISH: () => LANGUAGE_ENGLISH,
|
|
7945
|
+
availableLanguages: () => availableLanguages,
|
|
7946
|
+
langManifestUrl: () => langManifestUrl,
|
|
7947
|
+
languageLabel: () => languageLabel,
|
|
7948
|
+
resolveLanguage: () => resolveLanguage
|
|
7949
|
+
});
|
|
7950
|
+
function langManifestUrl(tinymceScriptUrl) {
|
|
7951
|
+
return new URL("langs/index.json", new URL(tinymceScriptUrl, location.href)).href;
|
|
7952
|
+
}
|
|
7953
|
+
async function availableLanguages(tinymceScriptUrl) {
|
|
7954
|
+
try {
|
|
7955
|
+
const r = await fetch(langManifestUrl(tinymceScriptUrl));
|
|
7956
|
+
if (!r.ok)
|
|
7957
|
+
return [];
|
|
7958
|
+
const list = await r.json();
|
|
7959
|
+
return Array.isArray(list) ? list.filter((x) => typeof x === "string") : [];
|
|
7960
|
+
} catch {
|
|
7961
|
+
return [];
|
|
7962
|
+
}
|
|
7963
|
+
}
|
|
7964
|
+
function resolveLanguage(setting, available, preferred = navigator.languages || [navigator.language]) {
|
|
7965
|
+
const byLower = new Map(available.map((code) => [code.toLowerCase(), code]));
|
|
7966
|
+
if (setting && setting !== LANGUAGE_AUTO) {
|
|
7967
|
+
if (setting === LANGUAGE_ENGLISH)
|
|
7968
|
+
return LANGUAGE_ENGLISH;
|
|
7969
|
+
return byLower.get(setting.toLowerCase()) || LANGUAGE_ENGLISH;
|
|
7970
|
+
}
|
|
7971
|
+
for (const tag of preferred) {
|
|
7972
|
+
if (!tag)
|
|
7973
|
+
continue;
|
|
7974
|
+
const lower = tag.toLowerCase();
|
|
7975
|
+
const base = lower.split("-")[0];
|
|
7976
|
+
if (base === LANGUAGE_ENGLISH)
|
|
7977
|
+
return LANGUAGE_ENGLISH;
|
|
7978
|
+
const hit = byLower.get(lower) || byLower.get(base) || available.find((code) => code.toLowerCase().split("-")[0] === base);
|
|
7979
|
+
if (hit)
|
|
7980
|
+
return hit;
|
|
7981
|
+
}
|
|
7982
|
+
return LANGUAGE_ENGLISH;
|
|
7983
|
+
}
|
|
7984
|
+
function languageLabel(code) {
|
|
7985
|
+
try {
|
|
7986
|
+
const names = new Intl.DisplayNames(navigator.languages || void 0, { type: "language" });
|
|
7987
|
+
return names.of(code) || code;
|
|
7988
|
+
} catch {
|
|
7989
|
+
return code;
|
|
7990
|
+
}
|
|
7991
|
+
}
|
|
7992
|
+
var LANGUAGE_AUTO, LANGUAGE_ENGLISH;
|
|
7993
|
+
var init_tinymce_langs = __esm({
|
|
7994
|
+
"client/lib/tinymce-langs.js"() {
|
|
7995
|
+
"use strict";
|
|
7996
|
+
LANGUAGE_AUTO = "auto";
|
|
7997
|
+
LANGUAGE_ENGLISH = "en";
|
|
7998
|
+
}
|
|
7999
|
+
});
|
|
8000
|
+
|
|
7940
8001
|
// client/components/folder-tree.js
|
|
7941
8002
|
init_api_client();
|
|
7942
8003
|
init_context_menu();
|
|
@@ -13475,6 +13536,53 @@ document.getElementById("opt-compose-font-size")?.addEventListener("change", (e)
|
|
|
13475
13536
|
}).catch(() => {
|
|
13476
13537
|
});
|
|
13477
13538
|
});
|
|
13539
|
+
var optEditorLanguage = document.getElementById("opt-editor-language");
|
|
13540
|
+
if (optEditorLanguage) {
|
|
13541
|
+
(async () => {
|
|
13542
|
+
const scriptUrl = localStorage.getItem("mailx-tinymce-cdn") || "lib/tinymce/tinymce.min.js";
|
|
13543
|
+
const { availableLanguages: availableLanguages2, resolveLanguage: resolveLanguage2, languageLabel: languageLabel2, LANGUAGE_AUTO: LANGUAGE_AUTO2, LANGUAGE_ENGLISH: LANGUAGE_ENGLISH2 } = await Promise.resolve().then(() => (init_tinymce_langs(), tinymce_langs_exports));
|
|
13544
|
+
const available = await availableLanguages2(scriptUrl);
|
|
13545
|
+
const autoPick = resolveLanguage2(LANGUAGE_AUTO2, available);
|
|
13546
|
+
const add = (value, text) => {
|
|
13547
|
+
const o = document.createElement("option");
|
|
13548
|
+
o.value = value;
|
|
13549
|
+
o.textContent = text;
|
|
13550
|
+
optEditorLanguage.appendChild(o);
|
|
13551
|
+
};
|
|
13552
|
+
add(LANGUAGE_AUTO2, `Auto \u2014 ${languageLabel2(autoPick)}`);
|
|
13553
|
+
add(LANGUAGE_ENGLISH2, languageLabel2(LANGUAGE_ENGLISH2));
|
|
13554
|
+
for (const code of [...available].sort((a, b) => languageLabel2(a).localeCompare(languageLabel2(b)))) {
|
|
13555
|
+
add(code, `${languageLabel2(code)} (${code})`);
|
|
13556
|
+
}
|
|
13557
|
+
if (!available.length) {
|
|
13558
|
+
optEditorLanguage.disabled = true;
|
|
13559
|
+
optEditorLanguage.title = "No language packs found next to tinymce.min.js \u2014 English only";
|
|
13560
|
+
}
|
|
13561
|
+
let current = LANGUAGE_AUTO2;
|
|
13562
|
+
try {
|
|
13563
|
+
current = localStorage.getItem("mailx-editor-language") || LANGUAGE_AUTO2;
|
|
13564
|
+
} catch {
|
|
13565
|
+
}
|
|
13566
|
+
try {
|
|
13567
|
+
const settings = await getSettings();
|
|
13568
|
+
if (typeof settings?.ui?.editorLanguage === "string" && settings.ui.editorLanguage) current = settings.ui.editorLanguage;
|
|
13569
|
+
} catch {
|
|
13570
|
+
}
|
|
13571
|
+
optEditorLanguage.value = current;
|
|
13572
|
+
if (!optEditorLanguage.value) optEditorLanguage.value = LANGUAGE_AUTO2;
|
|
13573
|
+
})().catch((e) => console.error("[settings] editor-language menu failed:", e?.message || e));
|
|
13574
|
+
optEditorLanguage.addEventListener("change", () => {
|
|
13575
|
+
const value = optEditorLanguage.value;
|
|
13576
|
+
try {
|
|
13577
|
+
localStorage.setItem("mailx-editor-language", value);
|
|
13578
|
+
} catch {
|
|
13579
|
+
}
|
|
13580
|
+
getSettings().then((settings) => {
|
|
13581
|
+
settings.ui = { ...settings.ui, editorLanguage: value };
|
|
13582
|
+
saveSettings(settings);
|
|
13583
|
+
}).catch((e) => console.error("[settings] editor language save failed:", e?.message || e));
|
|
13584
|
+
});
|
|
13585
|
+
}
|
|
13478
13586
|
function saveEditorSetting(editor) {
|
|
13479
13587
|
try {
|
|
13480
13588
|
localStorage.setItem("mailx-editor-type", editor);
|