Display Mathjax handle when clicking mathjax

This commit is contained in:
Henrik Giesel 2021-08-05 23:34:26 +02:00
parent 922461ea47
commit a37460dbbe
3 changed files with 47 additions and 16 deletions

View file

@ -17,9 +17,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import { onDestroy } from "svelte"; import { onDestroy } from "svelte";
export let activeImage: HTMLImageElement | null = null;
export let container: HTMLElement; export let container: HTMLElement;
export let sheet: CSSStyleSheet; export let sheet: CSSStyleSheet;
export let activeImage: HTMLImageElement | null = null;
export let isRtl: boolean = false; export let isRtl: boolean = false;
$: naturalWidth = activeImage?.naturalWidth; $: naturalWidth = activeImage?.naturalWidth;

View file

@ -3,5 +3,15 @@ Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
--> -->
<script lang="ts"> <script lang="ts">
export let activeMathjax: HTMLImageElement | null = null; import HandleBackground from "./HandleBackground.svelte";
import HandleSelection from "./HandleSelection.svelte";
export let activeImage: HTMLImageElement | null = null;
export let container: HTMLElement;
</script> </script>
<HandleSelection {container} {activeImage}>
{#if activeImage}
<HandleBackground />
{/if}
</HandleSelection>

View file

@ -7,6 +7,7 @@
*/ */
import ImageHandle from "./ImageHandle.svelte"; import ImageHandle from "./ImageHandle.svelte";
import MathjaxHandle from "./MathjaxHandle.svelte";
import type { EditableContainer } from "editable/editable-container"; import type { EditableContainer } from "editable/editable-container";
import type { Editable } from "editable/editable"; import type { Editable } from "editable/editable";
@ -25,6 +26,7 @@ function onCutOrCopy(): void {
export class EditingArea extends HTMLDivElement { export class EditingArea extends HTMLDivElement {
imageHandle: Promise<ImageHandle>; imageHandle: Promise<ImageHandle>;
mathjaxHandle: MathjaxHandle;
editableContainer: EditableContainer; editableContainer: EditableContainer;
editable: Editable; editable: Editable;
codable: Codable; codable: Codable;
@ -42,6 +44,9 @@ export class EditingArea extends HTMLDivElement {
imageStyle.id = "imageHandleStyle"; imageStyle.id = "imageHandleStyle";
this.editable = document.createElement("anki-editable") as Editable; this.editable = document.createElement("anki-editable") as Editable;
this.editableContainer.shadowRoot!.appendChild(imageStyle);
this.editableContainer.shadowRoot!.appendChild(this.editable);
this.appendChild(this.editableContainer);
const context = new Map(); const context = new Map();
context.set( context.set(
@ -68,9 +73,14 @@ export class EditingArea extends HTMLDivElement {
) )
); );
this.editableContainer.shadowRoot!.appendChild(imageStyle); this.mathjaxHandle = new MathjaxHandle({
this.editableContainer.shadowRoot!.appendChild(this.editable); target: this,
this.appendChild(this.editableContainer); anchor: this.editableContainer,
props: {
container: this.editable,
},
context,
} as any);
this.codable = document.createElement("textarea", { this.codable = document.createElement("textarea", {
is: "anki-codable", is: "anki-codable",
@ -197,7 +207,7 @@ export class EditingArea extends HTMLDivElement {
} }
onBlur(event: FocusEvent): void { onBlur(event: FocusEvent): void {
this.resetImageHandle(); this.resetHandles();
onBlur(event); onBlur(event);
} }
@ -206,33 +216,44 @@ export class EditingArea extends HTMLDivElement {
} }
onKey(event: KeyboardEvent): void { onKey(event: KeyboardEvent): void {
this.resetImageHandle(); this.resetHandles();
onKey(event); onKey(event);
} }
onPaste(event: ClipboardEvent): void { onPaste(event: ClipboardEvent): void {
this.resetImageHandle(); this.resetHandles();
this.activeInput.onPaste(event); this.activeInput.onPaste(event);
} }
resetImageHandle(): void { resetHandles(): void {
this.imageHandle.then((imageHandle) => this.imageHandle.then((imageHandle) =>
(imageHandle as any).$set({ (imageHandle as any).$set({
activeImage: null, activeImage: null,
}) })
); );
(this.mathjaxHandle as any).$set({
activeImage: null,
});
} }
showHandles(event: MouseEvent): void { showHandles(event: MouseEvent): void {
if (event.target instanceof HTMLImageElement && !event.target.dataset.anki) { if (event.target instanceof HTMLImageElement) {
if (!event.target.dataset.anki) {
this.imageHandle.then((imageHandle) => this.imageHandle.then((imageHandle) =>
(imageHandle as any).$set({ (imageHandle as any).$set({
activeImage: event.target, activeImage: event.target,
isRtl: this.isRightToLeft(), isRtl: this.isRightToLeft(),
}) })
); );
} else if (event.target.dataset.anki === "mathjax") {
(this.mathjaxHandle as any).$set({
activeImage: event.target,
isRtl: this.isRightToLeft(),
});
}
} else { } else {
this.resetImageHandle(); this.resetHandles();
} }
} }
@ -243,7 +264,7 @@ export class EditingArea extends HTMLDivElement {
this.fieldHTML = this.codable.teardown(); this.fieldHTML = this.codable.teardown();
this.editable.hidden = false; this.editable.hidden = false;
} else { } else {
this.resetImageHandle(); this.resetHandles();
this.editable.hidden = true; this.editable.hidden = true;
this.codable.setup(this.editable.fieldHTML); this.codable.setup(this.editable.fieldHTML);
} }