@bobfrankston/rmfmail 1.0.634 → 1.0.640
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/TODO.md +3 -1
- package/client/app.js +22 -0
- package/client/app.js.map +1 -1
- package/client/app.ts +15 -0
- package/client/components/alarms.js +17 -7
- package/client/components/alarms.js.map +1 -1
- package/client/components/alarms.ts +17 -6
- package/client/compose/compose.js +13 -15
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +16 -8
- package/client/compose/editor.js +36 -3
- package/client/compose/editor.js.map +1 -1
- package/client/compose/editor.ts +40 -3
- package/client/index.html +19 -15
- package/client/styles/components.css +14 -0
- package/docs/prod-android.md +55 -69
- package/docs/rmf-tiny.md +156 -0
- package/package.json +4 -1
package/client/compose/editor.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Editor abstraction — wraps Quill
|
|
3
|
-
* The compose window loads this module and calls
|
|
2
|
+
* Editor abstraction — wraps Quill / tiptap / TinyMCE behind a common
|
|
3
|
+
* interface. The compose window loads this module and calls
|
|
4
|
+
* createEditor() based on the user's setting.
|
|
4
5
|
*/
|
|
6
|
+
import { createTinyMceEditor as createTinyMceImpl } from "@bobfrankston/rmf-tiny";
|
|
5
7
|
/** URL-ish test: accepts http(s)://, mailto:, tel:, and bare domains with a dot. */
|
|
6
8
|
function looksLikeUrl(s) {
|
|
7
9
|
const t = s.trim();
|
|
@@ -649,11 +651,42 @@ async function createTiptapEditor(container) {
|
|
|
649
651
|
}
|
|
650
652
|
};
|
|
651
653
|
}
|
|
652
|
-
// ── Factory ──
|
|
653
654
|
export async function createEditor(container, type) {
|
|
654
655
|
if (type === "tiptap") {
|
|
655
656
|
return createTiptapEditor(container);
|
|
656
657
|
}
|
|
658
|
+
if (type === "tinymce") {
|
|
659
|
+
return createTinyMceEditor(container);
|
|
660
|
+
}
|
|
657
661
|
return createQuillEditor(container);
|
|
658
662
|
}
|
|
663
|
+
/** Default jsDelivr URL — works without an API key. Users can override
|
|
664
|
+
* in Settings if they want Tiny Cloud or a self-hosted bundle. */
|
|
665
|
+
const DEFAULT_TINYMCE_CDN = "https://cdn.jsdelivr.net/npm/tinymce@6/tinymce.min.js";
|
|
666
|
+
/** TinyMCE branch — uses the rmf-tiny adapter (statically imported at the
|
|
667
|
+
* top of this file). rmfmail itself ships no TinyMCE bytes; the bundle
|
|
668
|
+
* loads at runtime from cdnUrl. Falls back to Quill with a status-bar
|
|
669
|
+
* hint when the CDN load itself fails so compose stays usable. */
|
|
670
|
+
async function createTinyMceEditor(container) {
|
|
671
|
+
const status = document.getElementById("status-sync");
|
|
672
|
+
let cdnUrl = DEFAULT_TINYMCE_CDN;
|
|
673
|
+
let apiKey;
|
|
674
|
+
try {
|
|
675
|
+
cdnUrl = localStorage.getItem("mailx-tinymce-cdn") || DEFAULT_TINYMCE_CDN;
|
|
676
|
+
apiKey = localStorage.getItem("mailx-tinymce-apikey") || undefined;
|
|
677
|
+
}
|
|
678
|
+
catch { /* private mode — use defaults */ }
|
|
679
|
+
try {
|
|
680
|
+
const ed = await createTinyMceImpl(container, { cdnUrl, apiKey });
|
|
681
|
+
return ed;
|
|
682
|
+
}
|
|
683
|
+
catch (e) {
|
|
684
|
+
if (status) {
|
|
685
|
+
status.textContent = `TinyMCE load failed: ${e?.message || e} — falling back to Quill`;
|
|
686
|
+
status.style.color = "oklch(0.65 0.2 25)";
|
|
687
|
+
}
|
|
688
|
+
console.error("[editor] tinymce load failed, falling back:", e?.message || e);
|
|
689
|
+
return createQuillEditor(container);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
659
692
|
//# sourceMappingURL=editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["editor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["editor.ts"],"names":[],"mappings":"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"}
|
package/client/compose/editor.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Editor abstraction — wraps Quill
|
|
3
|
-
* The compose window loads this module and calls
|
|
2
|
+
* Editor abstraction — wraps Quill / tiptap / TinyMCE behind a common
|
|
3
|
+
* interface. The compose window loads this module and calls
|
|
4
|
+
* createEditor() based on the user's setting.
|
|
4
5
|
*/
|
|
5
6
|
|
|
7
|
+
import { createTinyMceEditor as createTinyMceImpl } from "@bobfrankston/rmf-tiny";
|
|
8
|
+
|
|
6
9
|
export interface MailxEditor {
|
|
7
10
|
setHtml(html: string): void;
|
|
8
11
|
getHtml(): string;
|
|
@@ -613,9 +616,43 @@ async function createTiptapEditor(container: HTMLElement): Promise<MailxEditor>
|
|
|
613
616
|
|
|
614
617
|
// ── Factory ──
|
|
615
618
|
|
|
616
|
-
export
|
|
619
|
+
export type EditorType = "quill" | "tiptap" | "tinymce";
|
|
620
|
+
|
|
621
|
+
export async function createEditor(container: HTMLElement, type: EditorType): Promise<MailxEditor> {
|
|
617
622
|
if (type === "tiptap") {
|
|
618
623
|
return createTiptapEditor(container);
|
|
619
624
|
}
|
|
625
|
+
if (type === "tinymce") {
|
|
626
|
+
return createTinyMceEditor(container);
|
|
627
|
+
}
|
|
620
628
|
return createQuillEditor(container);
|
|
621
629
|
}
|
|
630
|
+
|
|
631
|
+
/** Default jsDelivr URL — works without an API key. Users can override
|
|
632
|
+
* in Settings if they want Tiny Cloud or a self-hosted bundle. */
|
|
633
|
+
const DEFAULT_TINYMCE_CDN = "https://cdn.jsdelivr.net/npm/tinymce@6/tinymce.min.js";
|
|
634
|
+
|
|
635
|
+
/** TinyMCE branch — uses the rmf-tiny adapter (statically imported at the
|
|
636
|
+
* top of this file). rmfmail itself ships no TinyMCE bytes; the bundle
|
|
637
|
+
* loads at runtime from cdnUrl. Falls back to Quill with a status-bar
|
|
638
|
+
* hint when the CDN load itself fails so compose stays usable. */
|
|
639
|
+
async function createTinyMceEditor(container: HTMLElement): Promise<MailxEditor> {
|
|
640
|
+
const status = document.getElementById("status-sync");
|
|
641
|
+
let cdnUrl = DEFAULT_TINYMCE_CDN;
|
|
642
|
+
let apiKey: string | undefined;
|
|
643
|
+
try {
|
|
644
|
+
cdnUrl = localStorage.getItem("mailx-tinymce-cdn") || DEFAULT_TINYMCE_CDN;
|
|
645
|
+
apiKey = localStorage.getItem("mailx-tinymce-apikey") || undefined;
|
|
646
|
+
} catch { /* private mode — use defaults */ }
|
|
647
|
+
try {
|
|
648
|
+
const ed = await createTinyMceImpl(container, { cdnUrl, apiKey });
|
|
649
|
+
return ed as unknown as MailxEditor;
|
|
650
|
+
} catch (e: any) {
|
|
651
|
+
if (status) {
|
|
652
|
+
status.textContent = `TinyMCE load failed: ${e?.message || e} — falling back to Quill`;
|
|
653
|
+
status.style.color = "oklch(0.65 0.2 25)";
|
|
654
|
+
}
|
|
655
|
+
console.error("[editor] tinymce load failed, falling back:", e?.message || e);
|
|
656
|
+
return createQuillEditor(container);
|
|
657
|
+
}
|
|
658
|
+
}
|
package/client/index.html
CHANGED
|
@@ -56,23 +56,25 @@
|
|
|
56
56
|
include because nothing else imports those specifiers on the
|
|
57
57
|
desktop side. Single HTML for both shells; CSS handles narrow vs
|
|
58
58
|
wide layout, runtime detect handles bootstrap, no html fork. -->
|
|
59
|
+
<!-- TODO: regenerate via importgen once it scans dynamic `await import()`
|
|
60
|
+
calls (currently it only follows static imports, so it drops every
|
|
61
|
+
@bobfrankston/* entry our index.html and editor.ts dynamic-import).
|
|
62
|
+
Until then this map is hand-restored (entries from prior importgen run
|
|
63
|
+
+ the @bobfrankston ones it missed). See programming.md for the rule. -->
|
|
64
|
+
<!-- Generated by importgen 0.1.35 on May 10, 2026, 1:18:07 AM EDT -->
|
|
59
65
|
<script type="importmap">
|
|
60
66
|
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"@bobfrankston/mailx-sync/": "../node_modules/@bobfrankston/mailx-sync/",
|
|
73
|
-
"sql.js": "../packages/mailx-store-web/sql-wasm-esm.js"
|
|
74
|
-
}
|
|
75
|
-
}
|
|
67
|
+
"imports": {
|
|
68
|
+
"quill": "../node_modules/quill/quill.js",
|
|
69
|
+
"eventemitter3": "../node_modules/eventemitter3/index.mjs",
|
|
70
|
+
"lodash-es": "../node_modules/lodash-es/lodash.js",
|
|
71
|
+
"parchment": "../node_modules/parchment/dist/parchment.js",
|
|
72
|
+
"quill-delta": "../node_modules/quill-delta/dist/Delta.js",
|
|
73
|
+
"fast-diff": "../node_modules/fast-diff/diff.js",
|
|
74
|
+
"lodash.clonedeep": "../node_modules/lodash.clonedeep/index.js",
|
|
75
|
+
"lodash.isequal": "../node_modules/lodash.isequal/index.js"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
76
78
|
</script>
|
|
77
79
|
<!-- Early error handlers — ship problems to logit when running in
|
|
78
80
|
a context that can reach the network (Android shell). msger
|
|
@@ -169,6 +171,8 @@
|
|
|
169
171
|
<span class="tb-menu-label">Editor</span>
|
|
170
172
|
<label class="tb-menu-item"><input type="radio" name="opt-editor" value="quill" id="opt-editor-quill" checked> Quill</label>
|
|
171
173
|
<label class="tb-menu-item"><input type="radio" name="opt-editor" value="tiptap" id="opt-editor-tiptap"> tiptap</label>
|
|
174
|
+
<label class="tb-menu-item" title="Best Word-paste fidelity. TinyMCE itself is fetched at runtime from the CDN URL below."><input type="radio" name="opt-editor" value="tinymce" id="opt-editor-tinymce"> TinyMCE</label>
|
|
175
|
+
<label class="tb-menu-item tb-menu-subitem" title="TinyMCE CDN URL. Default (jsDelivr) needs no API key. Override for Tiny Cloud or self-hosted."><input type="text" id="opt-tinymce-cdn" placeholder="https://cdn.jsdelivr.net/npm/tinymce@6/tinymce.min.js" style="width:90%;font-size:0.85em"></label>
|
|
172
176
|
<hr class="tb-menu-sep">
|
|
173
177
|
<span class="tb-menu-label" title="Which app the compose 'Edit in Word' button hands the body off to. Auto = Word first, then LibreOffice, then OS default.">External editor</span>
|
|
174
178
|
<label class="tb-menu-item"><input type="radio" name="opt-extedit" value="auto" id="opt-extedit-auto" checked> Auto (Word → LibreOffice → default)</label>
|
|
@@ -2186,3 +2186,17 @@ body.calendar-sidebar-on .calendar-sidebar { display: flex; }
|
|
|
2186
2186
|
transition: transform 200ms ease-out;
|
|
2187
2187
|
}
|
|
2188
2188
|
.ml-body { position: relative; overflow-anchor: none; }
|
|
2189
|
+
|
|
2190
|
+
/* Quill snow theme zeros out paragraph margins, so a Word paste with
|
|
2191
|
+
distinct paragraphs LOOKS like line breaks while composing — even
|
|
2192
|
+
though q.root.innerHTML has proper <p> tags and the recipient
|
|
2193
|
+
renders them with their own UA defaults. Restore visual spacing in
|
|
2194
|
+
the editor body so the sender sees the paragraphs they pasted.
|
|
2195
|
+
:first-child / :last-child trim the outer margin so the editor
|
|
2196
|
+
doesn't get phantom whitespace at the boundaries. */
|
|
2197
|
+
.ql-editor p {
|
|
2198
|
+
margin: 0 0 0.6em 0;
|
|
2199
|
+
}
|
|
2200
|
+
.ql-editor p:last-child {
|
|
2201
|
+
margin-bottom: 0;
|
|
2202
|
+
}
|
package/docs/prod-android.md
CHANGED
|
@@ -1,102 +1,88 @@
|
|
|
1
1
|
# prod / dev release workflow — Android (MAUI APK)
|
|
2
2
|
|
|
3
|
-
Status: design only.
|
|
3
|
+
Status: design only. Same intent as `prod.md` (npm side); the APK is a complete, self-contained binary so the unit of promotion is a *file*, not a dependency or dist-tag.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Simpler approach (Bob 2026-05-09)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
No separate MAUI project. Same source tree produces both flavors; the difference is purely in the OUTPUT filename, and "what's currently prod" is decided by which file lives at the canonical prod URL.
|
|
8
8
|
|
|
9
|
-
Today
|
|
9
|
+
### Today
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
```
|
|
11
|
+
- One build target: `mailx-maui.apk` at `https://rmf39.aaz.lt/mailx/mailx-maui.apk`.
|
|
12
|
+
- `versions.json` carries the version string; updater compares to running.
|
|
13
|
+
- Every build overwrites the single APK. No history, no channels.
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
### Phase 1 — start producing dev.apk too
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
While there's no formal "production release" yet, every build produces:
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
- `rmfmaildev.apk` (or `dev.apk`) — the just-built, latest dev tip. Updater on dev devices points here.
|
|
20
|
+
- `mailx-maui.apk` — unchanged for now (current production behavior). Updater on prod devices points here.
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
The build script writes both. Same APK contents initially — the dual output is just renamed copies. Devices on different channels read different filenames.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
### Phase 2 — once a release is declared
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
https://rmf39.aaz.lt/mailx/dev/manifest.json
|
|
28
|
-
https://rmf39.aaz.lt/mailx/dev/mailx-maui-1.0.NNN.apk
|
|
29
|
-
https://rmf39.aaz.lt/mailx/prod/manifest.json
|
|
30
|
-
https://rmf39.aaz.lt/mailx/prod/mailx-maui-1.0.MMM.apk
|
|
31
|
-
```
|
|
26
|
+
Build outputs:
|
|
32
27
|
|
|
33
|
-
`
|
|
28
|
+
- `rmfmaildev.apk` — every build. Always the freshest.
|
|
29
|
+
- `rmfmail-<version>.apk` — versioned filename, never overwritten. One file per build.
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
{ "version": "1.0.NNN", "apk": "mailx-maui-1.0.NNN.apk", "released": "2026-05-09T17:00:00Z", "minDesktop": "1.0.500" }
|
|
37
|
-
```
|
|
31
|
+
"Promoting" a known-good dev build to production = `cp rmfmail-1.0.NNN.apk rmfmail.apk` (or web-server-side: update a redirect / symlink / manifest pointer at `rmfmail.apk` to name the chosen versioned file).
|
|
38
32
|
|
|
39
|
-
The
|
|
33
|
+
The canonical URLs:
|
|
40
34
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- Read version from `package.json` (already does).
|
|
48
|
-
- Build APK, copy to `download/apks/mailx-maui-<version>.apk` (versioned filename, never overwritten).
|
|
49
|
-
- Update local `download/dev/manifest.json` to point at the new APK.
|
|
50
|
-
- Sync `download/dev/` to the rmf39.aaz.lt webroot.
|
|
51
|
-
|
|
52
|
-
The dev channel always tracks the most recent build.
|
|
53
|
-
|
|
54
|
-
### 2. `prod-android.cmd` — promote dev → prod
|
|
55
|
-
|
|
56
|
-
Mirror of `prod.cmd`. Reads `download/dev/manifest.json`, copies it to `download/prod/manifest.json`, syncs prod/ to webroot. No new APK file uploaded — the prod-channel manifest now points at the same APK that's already in `dev/` (or copy it under `prod/` for symmetry; cheap).
|
|
35
|
+
```
|
|
36
|
+
https://rmf39.aaz.lt/mailx/rmfmail.apk ← prod pointer (chosen versioned APK)
|
|
37
|
+
https://rmf39.aaz.lt/mailx/rmfmaildev.apk ← latest dev build
|
|
38
|
+
https://rmf39.aaz.lt/mailx/rmfmail-1.0.NNN.apk ← every released version, immutable
|
|
39
|
+
```
|
|
57
40
|
|
|
58
|
-
|
|
41
|
+
Roll back = re-point `rmfmail.apk` to a prior versioned APK.
|
|
59
42
|
|
|
60
|
-
|
|
43
|
+
## What changes from the current build
|
|
61
44
|
|
|
62
|
-
|
|
45
|
+
`build-apk.cmd` / `build-apk.ts`:
|
|
63
46
|
|
|
64
|
-
-
|
|
65
|
-
-
|
|
47
|
+
- Read version from `package.json` (already does).
|
|
48
|
+
- Build APK once.
|
|
49
|
+
- Phase 1: write to `rmfmaildev.apk` AND `mailx-maui.apk` (mirror).
|
|
50
|
+
- Phase 2: write to `rmfmail-<version>.apk` (versioned, never overwritten) AND `rmfmaildev.apk` (latest dev mirror).
|
|
51
|
+
- Sync to web root.
|
|
66
52
|
|
|
67
|
-
|
|
53
|
+
Promotion script (`prod-android.ps1`?) — Phase 2 only:
|
|
68
54
|
|
|
69
|
-
|
|
55
|
+
- Take a version arg (or default to current dev build).
|
|
56
|
+
- Copy / point `rmfmail.apk` at that version's APK.
|
|
57
|
+
- Update `versions.json` so the updater on prod devices sees a newer version available.
|
|
70
58
|
|
|
71
|
-
|
|
59
|
+
`AppUpdater.cs` — channel awareness:
|
|
72
60
|
|
|
73
|
-
|
|
61
|
+
- Reads from configurable URL based on channel setting.
|
|
62
|
+
- Default: prod URL (`rmfmail.apk` / corresponding `versions.json`).
|
|
63
|
+
- Dev mode: dev URL.
|
|
64
|
+
- Channel toggle in Settings (or build-time constant in a separate flavor — but per Bob's preference, NO separate MAUI project; channel is a runtime setting).
|
|
74
65
|
|
|
75
|
-
|
|
76
|
-
2. Daily testing on the dev phone/tablet.
|
|
77
|
-
3. `prod-android.cmd` — copies the current dev manifest to prod. Devices on prod-channel pick up the new build on next poll.
|
|
78
|
-
4. Rolling back prod: re-run `prod-android.cmd <specific-version>` (need a version arg to override "current dev").
|
|
66
|
+
## What this does NOT need
|
|
79
67
|
|
|
80
|
-
|
|
68
|
+
- **No separate MAUI project**. The APK is the same binary regardless of which channel it serves; users with the dev URL configured get latest builds, users with the prod URL get whatever was last promoted. Source tree is single.
|
|
69
|
+
- **No dist-tag analog**. The "tag" is just the filename / URL the updater polls.
|
|
70
|
+
- **No flavor build**. Same package id, same signing key, same APK bytes — just two distribution endpoints (or, with Phase 2, two distinct files referenced from the manifests).
|
|
81
71
|
|
|
82
|
-
|
|
83
|
-
- **Force-update / minimum-version** — manifest already supports a `minDesktop` field; an Android equivalent (`minSupported`: refuse to run older client) can refuse to run a stale APK after a breaking server change. Not needed today; cheap to add later.
|
|
84
|
-
- **APK signing** — same key for dev and prod, otherwise users can't upgrade between them without uninstall. (Different package id flavor build IS a separate app and can have a separate key — but that's the coexistence model anyway.)
|
|
85
|
-
- **`download/apks/mailx-maui.apk` (current single filename)** — keep as-is for back-compat until devices move off it; or symlink it to the current prod APK.
|
|
72
|
+
## Coexistence on a single device
|
|
86
73
|
|
|
87
|
-
|
|
74
|
+
Single MAUI project means a single Android package id. Two builds CAN'T be installed side-by-side without diverging package ids (Android refuses). If side-by-side becomes a real need later, reintroduce the separate-MAUI-project idea — but that's the orthogonal "I want both versions on the same phone" design, not the prod/dev release flow.
|
|
88
75
|
|
|
89
|
-
|
|
90
|
-
- `prod-android.cmd` — manifest copy + sync. ~10 lines.
|
|
91
|
-
- `AppUpdater.cs` channel awareness + Settings toggle UI — ~50 lines including the storage pref.
|
|
92
|
-
- Webroot layout setup on rmf39.aaz.lt — one-time directory creation.
|
|
93
|
-
- Test cycle: build dev, verify prod APK on phone unchanged. Promote, verify next poll picks up new prod APK.
|
|
76
|
+
## Order
|
|
94
77
|
|
|
95
|
-
|
|
78
|
+
1. **Phase 1 first**: build script outputs `rmfmaildev.apk` alongside today's `mailx-maui.apk`. Zero behavior change for prod users; dev users (on the dev channel) get latest. ~10 lines in `build-apk.ts`.
|
|
79
|
+
2. **AppUpdater channel toggle**: Settings checkbox + persisted preference + URL switch. ~50 lines.
|
|
80
|
+
3. **Phase 2 when ready**: switch to versioned filenames + `rmfmail.apk` pointer + promotion script. Done when there's a real first "production release" to designate.
|
|
96
81
|
|
|
97
|
-
##
|
|
82
|
+
## Effort
|
|
98
83
|
|
|
99
|
-
|
|
100
|
-
|
|
84
|
+
- Phase 1: ~30 minutes (build script + manifest output).
|
|
85
|
+
- AppUpdater channel: ~1 hour (Settings UI + storage + URL plumbing).
|
|
86
|
+
- Phase 2: ~1 hour when activated (promotion script + versioned filenames + pointer mechanism on web root).
|
|
101
87
|
|
|
102
|
-
|
|
88
|
+
Total ~2.5 hours wall-clock when fully wired. Phase 1 alone gets you the "always-have-a-fresh-dev-build" benefit without any commitment to the formal release flow.
|
package/docs/rmf-tiny.md
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# `rmf-tiny` — optional TinyMCE editor adapter for rmfmail
|
|
2
|
+
|
|
3
|
+
Status: design only. Not implemented.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Let users who want Thunderbird-class paste fidelity opt into TinyMCE without baking it into rmfmail itself. Bob 2026-05-09 verified: pasted a Word document into Thunderbird, tiptap, Quill, and TinyMCE — only TinyMCE preserved the formatting (boxed monospace block with borders, paragraph spacing, font preservation). Nothing else came close.
|
|
8
|
+
|
|
9
|
+
The license catch — TinyMCE is GPLv2 — means rmfmail (MIT) can't bundle it. The arms-length pattern is the resolution: rmfmail ships **no** TinyMCE bytes; a separate `rmf-tiny` package the user installs themselves provides the adapter + pulls in TinyMCE via npm.
|
|
10
|
+
|
|
11
|
+
## Shape
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
@bobfrankston/rmfmail ← MIT, ships no TinyMCE
|
|
15
|
+
client/compose/editor.ts ← MailxEditor interface + factory
|
|
16
|
+
gains a "tinymce" branch that
|
|
17
|
+
dynamically imports rmf-tiny
|
|
18
|
+
|
|
19
|
+
@bobfrankston/rmf-tiny ← MIT (the adapter glue is original code)
|
|
20
|
+
package.json ← peerDependency: tinymce
|
|
21
|
+
src/adapter.ts ← implements MailxEditor against TinyMCE
|
|
22
|
+
README.md ← install instructions
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
User opts in:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
npm install -g @bobfrankston/rmf-tiny tinymce
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
(Two packages explicit — keeps the licensing posture clean. rmf-tiny is just the adapter; tinymce comes from Tiny's own npm publication, not bundled with anything rmfmail-related.)
|
|
32
|
+
|
|
33
|
+
In rmfmail Settings → Compose → Editor: the dropdown grows a "TinyMCE (requires rmf-tiny)" option. If selected and the import fails, surface a status-bar error pointing at the install command.
|
|
34
|
+
|
|
35
|
+
## Why a separate package, not a flag inside rmfmail
|
|
36
|
+
|
|
37
|
+
- rmfmail's git history and npm tarball never contain TinyMCE → distribution layer is clean.
|
|
38
|
+
- rmf-tiny is small (~200 lines of adapter glue + a thin install README) and can be MIT — no GPL infection because it imports TinyMCE at runtime via the same kind of dynamic boundary npm packages always use. Combination at user's machine is fully GPL-permitted.
|
|
39
|
+
- Other editors can follow the same pattern (`rmf-ckeditor`, `rmf-prosemirror-pro`) without polluting rmfmail.
|
|
40
|
+
|
|
41
|
+
## Why call it `rmf-tiny`
|
|
42
|
+
|
|
43
|
+
Short, distinguishable from the upstream package, namespaces under your scope (`@bobfrankston/rmf-tiny`), and "tiny" is the upstream's own brand so the connection is obvious. Other naming options:
|
|
44
|
+
- `@bobfrankston/mailx-tinymce-adapter` (verbose, descriptive)
|
|
45
|
+
- `@bobfrankston/rmftiny` (no hyphen, matches rmfmail style)
|
|
46
|
+
|
|
47
|
+
`rmf-tiny` is fine; pick the form that scans cleanest in the install line.
|
|
48
|
+
|
|
49
|
+
## Files
|
|
50
|
+
|
|
51
|
+
### `rmf-tiny/package.json`
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"name": "@bobfrankston/rmf-tiny",
|
|
56
|
+
"version": "0.1.0",
|
|
57
|
+
"description": "TinyMCE editor adapter for rmfmail. Bring-your-own TinyMCE.",
|
|
58
|
+
"type": "module",
|
|
59
|
+
"main": "src/adapter.js",
|
|
60
|
+
"license": "MIT",
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"tinymce": ">=6"
|
|
63
|
+
},
|
|
64
|
+
"peerDependenciesMeta": {
|
|
65
|
+
"tinymce": { "optional": false }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`peerDependencies` puts the install responsibility on the user — `npm install @bobfrankston/rmf-tiny` warns that `tinymce` must also be installed; rmf-tiny does not vendor or bundle TinyMCE.
|
|
71
|
+
|
|
72
|
+
### `rmf-tiny/src/adapter.ts`
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
// MIT-licensed adapter glue. Imports the user-installed TinyMCE at
|
|
76
|
+
// runtime; doesn't redistribute any TinyMCE bytes. Implements the same
|
|
77
|
+
// `MailxEditor` interface rmfmail's createEditor factory expects, so
|
|
78
|
+
// the host code path is identical.
|
|
79
|
+
import type { Editor as TinyEditor } from "tinymce";
|
|
80
|
+
|
|
81
|
+
export interface MailxEditor {
|
|
82
|
+
setHtml(html: string): void;
|
|
83
|
+
getHtml(): string;
|
|
84
|
+
getText(): string;
|
|
85
|
+
focus(): void;
|
|
86
|
+
setCursor(pos: number): void;
|
|
87
|
+
root: HTMLElement;
|
|
88
|
+
// …other methods rmfmail's interface requires
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export async function createTinyMceEditor(container: HTMLElement): Promise<MailxEditor> {
|
|
92
|
+
// Dynamic import — fails clearly if the user hasn't installed tinymce.
|
|
93
|
+
const tinymce = (await import("tinymce")).default;
|
|
94
|
+
// Plus the plugins TinyMCE's paste-from-Word handler needs:
|
|
95
|
+
await Promise.all([
|
|
96
|
+
import("tinymce/themes/silver"),
|
|
97
|
+
import("tinymce/icons/default"),
|
|
98
|
+
import("tinymce/plugins/paste"),
|
|
99
|
+
import("tinymce/plugins/lists"),
|
|
100
|
+
import("tinymce/plugins/link"),
|
|
101
|
+
import("tinymce/plugins/table"),
|
|
102
|
+
import("tinymce/plugins/code"),
|
|
103
|
+
]);
|
|
104
|
+
// ... initialize tinymce against `container`, return MailxEditor shim.
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The actual init/wire-up is the work — wrapping TinyMCE's API in our `MailxEditor` shape, hooking paste events, setHtml/getHtml round-tripping, etc. Maybe ~200 lines.
|
|
109
|
+
|
|
110
|
+
### rmfmail-side change to `editor.ts`
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
export async function createEditor(
|
|
114
|
+
container: HTMLElement,
|
|
115
|
+
type: "quill" | "tiptap" | "tinymce"
|
|
116
|
+
): Promise<MailxEditor> {
|
|
117
|
+
if (type === "tinymce") {
|
|
118
|
+
try {
|
|
119
|
+
const m = await import("@bobfrankston/rmf-tiny");
|
|
120
|
+
return m.createTinyMceEditor(container);
|
|
121
|
+
} catch (e: any) {
|
|
122
|
+
const status = document.getElementById("status-sync");
|
|
123
|
+
if (status) status.textContent = `TinyMCE editor not available — install: npm install -g @bobfrankston/rmf-tiny tinymce`;
|
|
124
|
+
return createQuillEditor(container); // fall back so compose still works
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (type === "tiptap") return createTiptapEditor(container);
|
|
128
|
+
return createQuillEditor(container);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Settings panel adds the "TinyMCE" option in the editor dropdown.
|
|
133
|
+
|
|
134
|
+
## Effort
|
|
135
|
+
|
|
136
|
+
- `rmf-tiny` package skeleton (package.json, README, basic adapter shell): ~30 minutes.
|
|
137
|
+
- Adapter wiring (init, setHtml/getHtml, paste handling, toolbar config): ~3 hours including testing the Word-paste case.
|
|
138
|
+
- rmfmail-side factory branch + Settings dropdown option: ~30 minutes.
|
|
139
|
+
- Documentation for users (README in rmf-tiny + Settings tooltip): ~30 minutes.
|
|
140
|
+
|
|
141
|
+
About half a day total.
|
|
142
|
+
|
|
143
|
+
## Order
|
|
144
|
+
|
|
145
|
+
1. Build `rmf-tiny` against your local TinyMCE install. Verify the Word-paste case actually works through your adapter.
|
|
146
|
+
2. Add the factory branch and Settings option to rmfmail.
|
|
147
|
+
3. Publish `rmf-tiny` to npm.
|
|
148
|
+
4. Document the opt-in install command in rmfmail's Settings tooltip and `README.md`.
|
|
149
|
+
|
|
150
|
+
Don't publish the adapter until the Word-paste case actually works end-to-end through the adapter — TinyMCE direct is one thing, our adapter possibly mangles it differently.
|
|
151
|
+
|
|
152
|
+
## Caveats
|
|
153
|
+
|
|
154
|
+
- The adapter must not re-implement parts of TinyMCE — it's a thin wrapper. Re-implementing parts of GPL code in MIT is the legal trap; staying purely in adapter / interface territory is safe.
|
|
155
|
+
- TinyMCE's bundle is large (~1MB minified). Users opting in pay that cost on the first compose-window load. Fine for opt-in; would be unacceptable as a default.
|
|
156
|
+
- `rmf-tiny` major version should track TinyMCE's major version (rmf-tiny@7.x for tinymce@7.x) so peerDependency mismatches are obvious.
|