diff --git a/ts/editable/mathjax-component.ts b/ts/editable/mathjax-component.ts index b5db2ffbd..cb4af2b74 100644 --- a/ts/editable/mathjax-component.ts +++ b/ts/editable/mathjax-component.ts @@ -80,6 +80,7 @@ export const Mathjax: DecoratedElementConstructor = class Mathjax disconnect: () => void = () => { /* noop */ }; + component?: Mathjax_svelte; constructor() { super(); @@ -100,13 +101,14 @@ export const Mathjax: DecoratedElementConstructor = class Mathjax attributeChangedCallback(_name: string, _old: string, newValue: string): void { this.block = newValue !== "false"; + this.component?.$set({ block: this.block }); } decorate(): void { const mathjax = (this.dataset.mathjax = this.innerText); this.innerHTML = ""; - new Mathjax_svelte({ + this.component = new Mathjax_svelte({ target: this, props: { mathjax, block: this.block }, }); @@ -116,6 +118,9 @@ export const Mathjax: DecoratedElementConstructor = class Mathjax this.innerHTML = this.dataset.mathjax ?? ""; delete this.dataset.mathjax; + this.component?.$destroy(); + this.component = undefined; + if (this.block) { this.setAttribute("block", "true"); } else { diff --git a/ts/editor/BUILD.bazel b/ts/editor/BUILD.bazel index a358c6358..58091e799 100644 --- a/ts/editor/BUILD.bazel +++ b/ts/editor/BUILD.bazel @@ -119,6 +119,10 @@ copy_mdi_icons( "image-size-select-large.svg", "image-size-select-actual.svg", + # mathjax handle + "format-wrap-square.svg", + "format-wrap-top-bottom.svg", + # tag editor "tag-outline.svg", "tag.svg", diff --git a/ts/editor/MathjaxHandle.svelte b/ts/editor/MathjaxHandle.svelte index 9a0873b95..1e75cf1cc 100644 --- a/ts/editor/MathjaxHandle.svelte +++ b/ts/editor/MathjaxHandle.svelte @@ -6,15 +6,43 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import HandleSelection from "./HandleSelection.svelte"; import HandleBackground from "./HandleBackground.svelte"; import HandleControl from "./HandleControl.svelte"; + import MathjaxHandleInlineBlock from "./MathjaxHandleInlineBlock.svelte"; export let activeImage: HTMLImageElement | null = null; export let container: HTMLElement; + export let isRtl: boolean; + + let updateSelection: () => void; - + {#if activeImage} - +
+ +
+ + {/if}
+ + diff --git a/ts/editor/MathjaxHandleInlineBlock.svelte b/ts/editor/MathjaxHandleInlineBlock.svelte new file mode 100644 index 000000000..e0a3c176b --- /dev/null +++ b/ts/editor/MathjaxHandleInlineBlock.svelte @@ -0,0 +1,38 @@ + + + + + + mathjaxElement.setAttribute("block", "false")} + >{@html inlineIcon} + + + + mathjaxElement.setAttribute("block", "true")} + >{@html blockIcon} + + diff --git a/ts/editor/icons.ts b/ts/editor/icons.ts index 7386dcb2c..a29daecd6 100644 --- a/ts/editor/icons.ts +++ b/ts/editor/icons.ts @@ -46,3 +46,6 @@ export { default as floatRightIcon } from "./format-float-right.svg"; export { default as sizeActual } from "./image-size-select-actual.svg"; export { default as sizeMinimized } from "./image-size-select-large.svg"; + +export { default as inlineIcon } from "./format-wrap-square.svg"; +export { default as blockIcon } from "./format-wrap-top-bottom.svg";