diff --git a/build/configure/src/web.rs b/build/configure/src/web.rs index 1371d48f0..b897340fd 100644 --- a/build/configure/src/web.rs +++ b/build/configure/src/web.rs @@ -355,23 +355,16 @@ fn build_and_check_editor(build: &mut Build) -> Result<()> { glob!("ts/{editable,editor}/**") ]; - let mut build_editor_page = |name: &str, entrypoint: &str| -> Result<()> { - let stem = format!("ts/editor/{name}"); - build.add_action( - "ts:editor", - EsbuildScript { - script: inputs!["ts/bundle_svelte.mjs"], - entrypoint: inputs![format!("ts/editor/{entrypoint}.ts")], - output_stem: &stem, - deps: editor_deps.clone(), - extra_exts: &["css"], - }, - ) - }; - - build_editor_page("browser_editor", "index_browser")?; - build_editor_page("reviewer_editor", "index_reviewer")?; - build_editor_page("note_creator", "index_creator")?; + build.add_action( + "ts:editor", + EsbuildScript { + script: "ts/bundle_svelte.mjs".into(), + entrypoint: "ts/editor/index.ts".into(), + output_stem: "ts/editor/editor", + deps: editor_deps.clone(), + extra_exts: &["css"], + }, + )?; let group = "ts/editor"; build.add_action( diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 886137bef..34f2cac35 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -147,23 +147,24 @@ class Editor: def setupWeb(self) -> None: if self.editorMode == EditorMode.ADD_CARDS: - file = "note_creator" + mode = "add" elif self.editorMode == EditorMode.BROWSER: - file = "browser_editor" + mode = "browse" else: - file = "reviewer_editor" + mode = "review" # then load page self.web.stdHtml( "", - css=[f"css/{file}.css"], + css=["css/editor.css"], js=[ "js/mathjax.js", - f"js/{file}.js", + "js/editor.js", ], context=self, default_css=False, ) + self.web.eval(f"setupEditor('{mode}')") self.web.show() lefttopbtns: list[str] = [] diff --git a/ts/editor/base.ts b/ts/editor/base.ts index a97d3b3af..80fd82283 100644 --- a/ts/editor/base.ts +++ b/ts/editor/base.ts @@ -4,11 +4,25 @@ /** * Code that is shared among all entry points in /ts/editor */ + import "./legacy.scss"; import "./editor-base.scss"; import "@tslib/runtime-require"; import "../sveltelib/export-runtime"; +import { setupI18n } from "@tslib/i18n"; +import { uiResolve } from "@tslib/ui"; + +import * as contextKeys from "../components/context-keys"; +import IconButton from "../components/IconButton.svelte"; +import LabelButton from "../components/LabelButton.svelte"; +import WithContext from "../components/WithContext.svelte"; +import WithState from "../components/WithState.svelte"; +import BrowserEditor from "./BrowserEditor.svelte"; +import NoteCreator from "./NoteCreator.svelte"; +import * as editorContextKeys from "./NoteEditor.svelte"; +import ReviewerEditor from "./ReviewerEditor.svelte"; + declare global { interface Selection { addRange(r: Range): void; @@ -26,13 +40,6 @@ export const editorModules = [ ModuleName.BROWSING, ]; -import * as contextKeys from "../components/context-keys"; -import IconButton from "../components/IconButton.svelte"; -import LabelButton from "../components/LabelButton.svelte"; -import WithContext from "../components/WithContext.svelte"; -import WithState from "../components/WithState.svelte"; -import * as editorContextKeys from "./NoteEditor.svelte"; - export const components = { IconButton, LabelButton, @@ -42,3 +49,46 @@ export const components = { }; export { editorToolbar } from "./editor-toolbar"; + +async function setupBrowserEditor(): Promise { + await setupI18n({ modules: editorModules }); + + new BrowserEditor({ + target: document.body, + props: { uiResolve }, + }); +} + +async function setupNoteCreator(): Promise { + await setupI18n({ modules: editorModules }); + + new NoteCreator({ + target: document.body, + props: { uiResolve }, + }); +} + +async function setupReviewerEditor(): Promise { + await setupI18n({ modules: editorModules }); + + new ReviewerEditor({ + target: document.body, + props: { uiResolve }, + }); +} + +export function setupEditor(mode: "add" | "browse" | "review") { + switch (mode) { + case "add": + setupNoteCreator(); + break; + case "browse": + setupBrowserEditor(); + break; + case "review": + setupReviewerEditor(); + break; + default: + alert("unexpected editor type"); + } +} diff --git a/ts/editor/index.ts b/ts/editor/index.ts new file mode 100644 index 000000000..bd8fc9029 --- /dev/null +++ b/ts/editor/index.ts @@ -0,0 +1,8 @@ +// Copyright: Ankitects Pty Ltd and contributors +// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html + +import { globalExport } from "@tslib/globals"; + +import * as base from "./base"; + +globalExport(base); diff --git a/ts/editor/index_browser.ts b/ts/editor/index_browser.ts deleted file mode 100644 index 09ee6d80f..000000000 --- a/ts/editor/index_browser.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright: Ankitects Pty Ltd and contributors -// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -import { globalExport } from "@tslib/globals"; -import { setupI18n } from "@tslib/i18n"; -import { uiResolve } from "@tslib/ui"; - -import { editorModules } from "./base"; -import BrowserEditor from "./BrowserEditor.svelte"; - -async function setupBrowserEditor(): Promise { - await setupI18n({ modules: editorModules }); - - new BrowserEditor({ - target: document.body, - props: { uiResolve }, - }); -} - -setupBrowserEditor(); - -import * as base from "./base"; - -globalExport(base); diff --git a/ts/editor/index_creator.ts b/ts/editor/index_creator.ts deleted file mode 100644 index df7b4ed9e..000000000 --- a/ts/editor/index_creator.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright: Ankitects Pty Ltd and contributors -// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -import { globalExport } from "@tslib/globals"; -import { setupI18n } from "@tslib/i18n"; -import { uiResolve } from "@tslib/ui"; - -import { editorModules } from "./base"; -import NoteCreator from "./NoteCreator.svelte"; - -async function setupNoteCreator(): Promise { - await setupI18n({ modules: editorModules }); - - new NoteCreator({ - target: document.body, - props: { uiResolve }, - }); -} - -setupNoteCreator(); - -import * as base from "./base"; - -globalExport(base); diff --git a/ts/editor/index_reviewer.ts b/ts/editor/index_reviewer.ts deleted file mode 100644 index e900c426f..000000000 --- a/ts/editor/index_reviewer.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright: Ankitects Pty Ltd and contributors -// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -import { globalExport } from "@tslib/globals"; -import { setupI18n } from "@tslib/i18n"; -import { uiResolve } from "@tslib/ui"; - -import { editorModules } from "./base"; -import ReviewerEditor from "./ReviewerEditor.svelte"; - -async function setupReviewerEditor(): Promise { - await setupI18n({ modules: editorModules }); - - new ReviewerEditor({ - target: document.body, - props: { uiResolve }, - }); -} - -setupReviewerEditor(); - -import * as base from "./base"; - -globalExport(base);