mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
Make HandleSelection perfectly size when first activating
This commit is contained in:
parent
06d1ec6af4
commit
51c0cedaf5
2 changed files with 26 additions and 23 deletions
|
@ -3,7 +3,7 @@ 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">
|
||||||
import { onMount, onDestroy, getContext } from "svelte";
|
import { onMount, onDestroy, getContext, tick } from "svelte";
|
||||||
import { nightModeKey } from "components/context-keys";
|
import { nightModeKey } from "components/context-keys";
|
||||||
import { convertMathjax } from "./mathjax";
|
import { convertMathjax } from "./mathjax";
|
||||||
|
|
||||||
|
@ -26,8 +26,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
|
|
||||||
let image: HTMLImageElement;
|
let image: HTMLImageElement;
|
||||||
|
|
||||||
const observer = new ResizeObserver(() => {
|
const observer = new ResizeObserver(async () => {
|
||||||
imageHeight = image.getBoundingClientRect().height;
|
imageHeight = image.getBoundingClientRect().height;
|
||||||
|
await tick();
|
||||||
setTimeout(() => image.dispatchEvent(new Event("resize")));
|
setTimeout(() => image.dispatchEvent(new Event("resize")));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,27 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
|
|
||||||
let dropdownApi: any;
|
let dropdownApi: any;
|
||||||
|
|
||||||
|
let removeEventListener: () => void = () => {
|
||||||
|
/* noop */
|
||||||
|
};
|
||||||
|
|
||||||
|
function onImageResize(): void {
|
||||||
|
if (activeImage) {
|
||||||
|
errorMessage = activeImage.title;
|
||||||
|
updateSelection().then(() => dropdownApi.update());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$: if (activeImage) {
|
||||||
|
activeImage.addEventListener("resize", onImageResize);
|
||||||
|
|
||||||
|
const lastImage = activeImage;
|
||||||
|
removeEventListener = () =>
|
||||||
|
lastImage.removeEventListener("resize", onImageResize);
|
||||||
|
} else {
|
||||||
|
removeEventListener();
|
||||||
|
}
|
||||||
|
|
||||||
const resizeObserver = new ResizeObserver(async () => {
|
const resizeObserver = new ResizeObserver(async () => {
|
||||||
if (activeImage) {
|
if (activeImage) {
|
||||||
await updateSelection();
|
await updateSelection();
|
||||||
|
@ -36,24 +57,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
return image.closest("anki-mathjax")! as HTMLElement;
|
return image.closest("anki-mathjax")! as HTMLElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
const onImageResize = (resolve: () => void) => (): void => {
|
function onEditorUpdate(event: CustomEvent): void {
|
||||||
errorMessage = activeImage!.title;
|
|
||||||
updateSelection().then(resolve);
|
|
||||||
};
|
|
||||||
|
|
||||||
function onEditorUpdate(event: CustomEvent): Promise<void> {
|
|
||||||
let selectionResolve: (value: void) => void;
|
|
||||||
const afterSelectionUpdate = new Promise((resolve: (value: void) => void) => {
|
|
||||||
selectionResolve = resolve;
|
|
||||||
});
|
|
||||||
|
|
||||||
const imageResize = onImageResize(selectionResolve!);
|
|
||||||
|
|
||||||
activeImage!.addEventListener("resize", imageResize, { once: true });
|
|
||||||
/* this updates the image in Mathjax.svelte */
|
/* this updates the image in Mathjax.svelte */
|
||||||
getComponent(activeImage!).dataset.mathjax = event.detail.mathjax;
|
getComponent(activeImage!).dataset.mathjax = event.detail.mathjax;
|
||||||
|
|
||||||
return afterSelectionUpdate;
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -63,7 +69,6 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
autoClose={false}
|
autoClose={false}
|
||||||
distance={4}
|
distance={4}
|
||||||
let:createDropdown
|
let:createDropdown
|
||||||
let:dropdownObject
|
|
||||||
>
|
>
|
||||||
{#if activeImage}
|
{#if activeImage}
|
||||||
<HandleSelection
|
<HandleSelection
|
||||||
|
@ -80,10 +85,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<MathjaxHandleEditor
|
<MathjaxHandleEditor
|
||||||
initialValue={getComponent(activeImage).dataset.mathjax ?? ""}
|
initialValue={getComponent(activeImage).dataset.mathjax ?? ""}
|
||||||
on:update={async (event) => {
|
on:update={onEditorUpdate}
|
||||||
await onEditorUpdate(event);
|
|
||||||
dropdownObject.update();
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
<div class="margin-x">
|
<div class="margin-x">
|
||||||
<ButtonToolbar>
|
<ButtonToolbar>
|
||||||
|
|
Loading…
Reference in a new issue