2021-08-04 22:01:03 +02:00
|
|
|
<!--
|
|
|
|
Copyright: Ankitects Pty Ltd and contributors
|
|
|
|
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
-->
|
|
|
|
<script lang="ts">
|
2021-08-07 20:48:02 +02:00
|
|
|
import { tick } from "svelte";
|
|
|
|
|
2021-08-06 04:59:33 +02:00
|
|
|
import WithDropdown from "components/WithDropdown.svelte";
|
2021-08-07 20:48:02 +02:00
|
|
|
import ButtonToolbar from "components/ButtonToolbar.svelte";
|
2021-08-06 16:52:34 +02:00
|
|
|
import DropdownMenu from "components/DropdownMenu.svelte";
|
2021-08-06 04:59:33 +02:00
|
|
|
import Item from "components/Item.svelte";
|
|
|
|
|
2021-08-05 23:34:26 +02:00
|
|
|
import HandleSelection from "./HandleSelection.svelte";
|
2021-08-05 23:45:45 +02:00
|
|
|
import HandleBackground from "./HandleBackground.svelte";
|
|
|
|
import HandleControl from "./HandleControl.svelte";
|
2021-08-06 00:59:52 +02:00
|
|
|
import MathjaxHandleInlineBlock from "./MathjaxHandleInlineBlock.svelte";
|
2021-08-06 16:52:34 +02:00
|
|
|
import MathjaxHandleEditor from "./MathjaxHandleEditor.svelte";
|
2021-08-05 23:34:26 +02:00
|
|
|
|
|
|
|
export let activeImage: HTMLImageElement | null = null;
|
|
|
|
export let container: HTMLElement;
|
2021-08-06 00:59:52 +02:00
|
|
|
export let isRtl: boolean;
|
|
|
|
|
2021-08-07 01:30:26 +02:00
|
|
|
const resizeObserver = new ResizeObserver(() => {
|
|
|
|
if (activeImage) {
|
|
|
|
updateSelection();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
resizeObserver.observe(container);
|
|
|
|
|
2021-08-06 00:59:52 +02:00
|
|
|
let updateSelection: () => void;
|
2021-08-07 19:44:06 +02:00
|
|
|
let title: string;
|
2021-08-06 17:40:27 +02:00
|
|
|
|
|
|
|
function onUpdate(event: CustomEvent) {
|
|
|
|
activeImage!.parentElement!.dataset.mathjax = event.detail.mathjax;
|
2021-08-07 19:44:06 +02:00
|
|
|
setTimeout(() => {
|
|
|
|
updateSelection();
|
|
|
|
title = activeImage!.title;
|
|
|
|
});
|
2021-08-06 17:40:27 +02:00
|
|
|
}
|
2021-08-04 22:01:03 +02:00
|
|
|
</script>
|
2021-08-05 23:34:26 +02:00
|
|
|
|
2021-08-06 04:59:33 +02:00
|
|
|
<WithDropdown
|
|
|
|
placement="bottom"
|
|
|
|
autoOpen={true}
|
|
|
|
autoClose={false}
|
|
|
|
let:createDropdown
|
|
|
|
let:dropdownObject
|
|
|
|
>
|
|
|
|
{#if activeImage}
|
|
|
|
<HandleSelection
|
|
|
|
image={activeImage}
|
|
|
|
{container}
|
|
|
|
offsetX={2}
|
|
|
|
offsetY={2}
|
|
|
|
bind:updateSelection
|
|
|
|
on:mount={(event) => createDropdown(event.detail.selection)}
|
2021-08-06 00:59:52 +02:00
|
|
|
>
|
2021-08-07 19:44:06 +02:00
|
|
|
<HandleBackground {title} />
|
2021-08-06 04:59:33 +02:00
|
|
|
|
|
|
|
<HandleControl offsetX={1} offsetY={1} />
|
|
|
|
</HandleSelection>
|
|
|
|
|
2021-08-07 02:25:16 +02:00
|
|
|
<DropdownMenu>
|
|
|
|
<MathjaxHandleEditor
|
|
|
|
initialValue={activeImage.parentElement?.dataset.mathjax ?? ""}
|
|
|
|
on:update={(event) => {
|
|
|
|
onUpdate(event);
|
|
|
|
setTimeout(dropdownObject.update);
|
|
|
|
}}
|
|
|
|
/>
|
2021-08-07 20:48:02 +02:00
|
|
|
<div class="margin-x">
|
|
|
|
<ButtonToolbar>
|
|
|
|
<Item>
|
|
|
|
<MathjaxHandleInlineBlock
|
|
|
|
{activeImage}
|
|
|
|
{isRtl}
|
|
|
|
on:click={async () => {
|
|
|
|
await tick();
|
|
|
|
updateSelection();
|
|
|
|
dropdownObject.update();
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
</Item>
|
|
|
|
</ButtonToolbar>
|
|
|
|
<div />
|
|
|
|
</div></DropdownMenu
|
|
|
|
>
|
2021-08-06 04:59:33 +02:00
|
|
|
{/if}
|
|
|
|
</WithDropdown>
|
2021-08-07 20:48:02 +02:00
|
|
|
|
|
|
|
<style lang="scss">
|
|
|
|
.margin-x {
|
|
|
|
margin: 0 0.125rem;
|
|
|
|
}
|
|
|
|
</style>
|