mirror of
https://github.com/jzillmann/pdf-to-markdown.git
synced 2025-02-07 21:39:13 +01:00
Transformer Selection
This commit is contained in:
parent
1f247a8a3b
commit
ad5fbfd15d
@ -1,9 +1,3 @@
|
|||||||
/**
|
|
||||||
* Executes the given callback once an outside click is recognized.
|
|
||||||
* If the 'opening' click triggers the callback right away, try using 'on:click|stopPropagation'.
|
|
||||||
* @param node
|
|
||||||
* @param param1
|
|
||||||
*/
|
|
||||||
export function clickOutside(node: HTMLElement, { enabled: initialEnabled, cb }) {
|
export function clickOutside(node: HTMLElement, { enabled: initialEnabled, cb }) {
|
||||||
const handleOutsideClick = ({ target }) => {
|
const handleOutsideClick = ({ target }) => {
|
||||||
if (!node.contains(target)) {
|
if (!node.contains(target)) {
|
||||||
|
@ -11,12 +11,14 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<span on:click|stopPropagation={toogle}>
|
<span use:clickOutside={{ enabled: opened, cb: () => opened.set(false) }}>
|
||||||
<slot name="trigger" />
|
<span on:click={toogle}>
|
||||||
</span>
|
<slot name="trigger" />
|
||||||
|
|
||||||
{#if $opened}
|
|
||||||
<span use:clickOutside={{ enabled: opened, cb: () => opened.set(false) }}>
|
|
||||||
<slot name="content" />
|
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
|
||||||
|
{#if $opened}
|
||||||
|
<span>
|
||||||
|
<slot name="content" />
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</span>
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
import Popup from '../components/Popup.svelte';
|
import Popup from '../components/Popup.svelte';
|
||||||
import PageSelectionPopup from './PageSelectionPopup.svelte';
|
import PageSelectionPopup from './PageSelectionPopup.svelte';
|
||||||
import ItemTable from './ItemTable.svelte';
|
import ItemTable from './ItemTable.svelte';
|
||||||
|
import TransformerSelectionPopup from './TransformerSelectionPopup.svelte';
|
||||||
|
|
||||||
export let debug: Debugger;
|
export let debug: Debugger;
|
||||||
|
|
||||||
@ -70,7 +71,19 @@
|
|||||||
<span on:click={() => canNext && currentStage++}>
|
<span on:click={() => canNext && currentStage++}>
|
||||||
<ArrowRight size="1x" class={canNext ? 'hover:text-green-700 cursor-pointer' : 'opacity-50'} />
|
<ArrowRight size="1x" class={canNext ? 'hover:text-green-700 cursor-pointer' : 'opacity-50'} />
|
||||||
</span>
|
</span>
|
||||||
<div class="cursor-pointer hover:underline">{stageNames[currentStage]}</div>
|
<span>
|
||||||
|
<Popup>
|
||||||
|
<span slot="trigger">
|
||||||
|
<div class="cursor-pointer hover:underline">{stageNames[currentStage]}</div>
|
||||||
|
</span>
|
||||||
|
<span slot="content">
|
||||||
|
<TransformerSelectionPopup
|
||||||
|
{stageNames}
|
||||||
|
{currentStage}
|
||||||
|
on:selectTransformer={(e) => (currentStage = e.detail)} />
|
||||||
|
</span>
|
||||||
|
</Popup>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { createEventDispatcher } from 'svelte';
|
|
||||||
import { getContext } from 'svelte';
|
import { getContext } from 'svelte';
|
||||||
|
import { createEventDispatcher } from 'svelte';
|
||||||
import { Collection } from 'svelte-hero-icons';
|
import { Collection } from 'svelte-hero-icons';
|
||||||
import type { Writable } from 'svelte/store';
|
import type { Writable } from 'svelte/store';
|
||||||
|
|
||||||
|
45
ui/src/debug/TransformerSelectionPopup.svelte
Normal file
45
ui/src/debug/TransformerSelectionPopup.svelte
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<script>
|
||||||
|
import { slide } from 'svelte/transition';
|
||||||
|
import { getContext } from 'svelte';
|
||||||
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
|
||||||
|
import type { Writable } from 'svelte/store';
|
||||||
|
|
||||||
|
export let stageNames: string[];
|
||||||
|
export let currentStage: number;
|
||||||
|
|
||||||
|
const popupOpened: Writable<boolean> = getContext('popupOpened');
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
|
function selectTransformer(index: number) {
|
||||||
|
popupOpened.set(false);
|
||||||
|
dispatch('selectTransformer', index);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="absolute -mt-6 p-2 bg-gray-200 shadow-lg rounded-sm overflow-auto max-h-96" transition:slide>
|
||||||
|
{#each stageNames as stageName, idx}
|
||||||
|
<div
|
||||||
|
on:click={() => selectTransformer(idx)}
|
||||||
|
class="px-2 "
|
||||||
|
class:selected={idx == currentStage}
|
||||||
|
class:selectable={idx != currentStage}>
|
||||||
|
{stageName}
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.selected {
|
||||||
|
@apply cursor-default;
|
||||||
|
@apply bg-gray-300;
|
||||||
|
/* @apply underline; */
|
||||||
|
}
|
||||||
|
.selectable {
|
||||||
|
@apply cursor-pointer;
|
||||||
|
}
|
||||||
|
.selectable:hover {
|
||||||
|
@apply bg-gray-400;
|
||||||
|
@apply text-green-700;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user