mirror of
https://github.com/open-webui/open-webui
synced 2025-06-23 02:16:52 +00:00
refac
This commit is contained in:
parent
b7aeb432ed
commit
fa92abce31
@ -18,6 +18,8 @@
|
|||||||
export let floatingButtons = true;
|
export let floatingButtons = true;
|
||||||
|
|
||||||
export let onSourceClick = () => {};
|
export let onSourceClick = () => {};
|
||||||
|
export let onTaskClick = () => {};
|
||||||
|
|
||||||
export let onAddMessages = () => {};
|
export let onAddMessages = () => {};
|
||||||
|
|
||||||
let contentContainerElement;
|
let contentContainerElement;
|
||||||
@ -141,6 +143,7 @@
|
|||||||
return acc.filter((item, index) => acc.indexOf(item) === index);
|
return acc.filter((item, index) => acc.indexOf(item) === index);
|
||||||
}, [])}
|
}, [])}
|
||||||
{onSourceClick}
|
{onSourceClick}
|
||||||
|
{onTaskClick}
|
||||||
on:update={(e) => {
|
on:update={(e) => {
|
||||||
dispatch('update', e.detail);
|
dispatch('update', e.detail);
|
||||||
}}
|
}}
|
||||||
|
@ -17,7 +17,9 @@
|
|||||||
export let save = false;
|
export let save = false;
|
||||||
|
|
||||||
export let sourceIds = [];
|
export let sourceIds = [];
|
||||||
|
|
||||||
export let onSourceClick = () => {};
|
export let onSourceClick = () => {};
|
||||||
|
export let onTaskClick = () => {};
|
||||||
|
|
||||||
let tokens = [];
|
let tokens = [];
|
||||||
|
|
||||||
@ -45,6 +47,7 @@
|
|||||||
{tokens}
|
{tokens}
|
||||||
{id}
|
{id}
|
||||||
{save}
|
{save}
|
||||||
|
{onTaskClick}
|
||||||
{onSourceClick}
|
{onSourceClick}
|
||||||
on:update={(e) => {
|
on:update={(e) => {
|
||||||
dispatch('update', e.detail);
|
dispatch('update', e.detail);
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
export let attributes = {};
|
export let attributes = {};
|
||||||
|
|
||||||
export let save = false;
|
export let save = false;
|
||||||
|
|
||||||
|
export let onTaskClick: Function = () => {};
|
||||||
export let onSourceClick: Function = () => {};
|
export let onSourceClick: Function = () => {};
|
||||||
|
|
||||||
const headerComponent = (depth: number) => {
|
const headerComponent = (depth: number) => {
|
||||||
@ -168,17 +170,37 @@
|
|||||||
</div>
|
</div>
|
||||||
{:else if token.type === 'blockquote'}
|
{:else if token.type === 'blockquote'}
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<svelte:self id={`${id}-${tokenIdx}`} tokens={token.tokens} />
|
<svelte:self id={`${id}-${tokenIdx}`} tokens={token.tokens} {onTaskClick} {onSourceClick} />
|
||||||
</blockquote>
|
</blockquote>
|
||||||
{:else if token.type === 'list'}
|
{:else if token.type === 'list'}
|
||||||
{#if token.ordered}
|
{#if token.ordered}
|
||||||
<ol start={token.start || 1}>
|
<ol start={token.start || 1}>
|
||||||
{#each token.items as item, itemIdx}
|
{#each token.items as item, itemIdx}
|
||||||
<li>
|
<li>
|
||||||
|
{#if item?.task}
|
||||||
|
<input
|
||||||
|
class=" translate-y-[1px] -translate-x-1"
|
||||||
|
type="checkbox"
|
||||||
|
checked={item.checked}
|
||||||
|
on:change={(e) => {
|
||||||
|
onTaskClick({
|
||||||
|
id: id,
|
||||||
|
token: token,
|
||||||
|
tokenIdx: tokenIdx,
|
||||||
|
item: item,
|
||||||
|
itemIdx: itemIdx,
|
||||||
|
checked: e.target.checked
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<svelte:self
|
<svelte:self
|
||||||
id={`${id}-${tokenIdx}-${itemIdx}`}
|
id={`${id}-${tokenIdx}-${itemIdx}`}
|
||||||
tokens={item.tokens}
|
tokens={item.tokens}
|
||||||
top={token.loose}
|
top={token.loose}
|
||||||
|
{onTaskClick}
|
||||||
|
{onSourceClick}
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
@ -187,15 +209,40 @@
|
|||||||
<ul>
|
<ul>
|
||||||
{#each token.items as item, itemIdx}
|
{#each token.items as item, itemIdx}
|
||||||
<li>
|
<li>
|
||||||
|
{#if item?.task}
|
||||||
|
<input
|
||||||
|
class=" translate-y-[1px] -translate-x-1"
|
||||||
|
type="checkbox"
|
||||||
|
checked={item.checked}
|
||||||
|
on:change={(e) => {
|
||||||
|
onTaskClick({
|
||||||
|
id: id,
|
||||||
|
token: token,
|
||||||
|
tokenIdx: tokenIdx,
|
||||||
|
item: item,
|
||||||
|
itemIdx: itemIdx,
|
||||||
|
checked: e.target.checked
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<svelte:self
|
<svelte:self
|
||||||
id={`${id}-${tokenIdx}-${itemIdx}`}
|
id={`${id}-${tokenIdx}-${itemIdx}`}
|
||||||
tokens={item.tokens}
|
tokens={item.tokens}
|
||||||
top={token.loose}
|
top={token.loose}
|
||||||
|
{onTaskClick}
|
||||||
|
{onSourceClick}
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</ul>
|
||||||
{/if}
|
{/if}
|
||||||
|
{:else if token.type === 'list_item'}
|
||||||
|
{JSON.stringify(token)}
|
||||||
|
<p>
|
||||||
|
<MarkdownInlineTokens id={`${id}-${tokenIdx}-li`} tokens={token.tokens} {onSourceClick} />
|
||||||
|
</p>
|
||||||
{:else if token.type === 'details'}
|
{:else if token.type === 'details'}
|
||||||
<Collapsible title={token.summary} attributes={token?.attributes} className="w-full space-y-1">
|
<Collapsible title={token.summary} attributes={token?.attributes} className="w-full space-y-1">
|
||||||
<div class=" mb-1.5" slot="content">
|
<div class=" mb-1.5" slot="content">
|
||||||
@ -203,6 +250,8 @@
|
|||||||
id={`${id}-${tokenIdx}-d`}
|
id={`${id}-${tokenIdx}-d`}
|
||||||
tokens={marked.lexer(token.text)}
|
tokens={marked.lexer(token.text)}
|
||||||
attributes={token?.attributes}
|
attributes={token?.attributes}
|
||||||
|
{onTaskClick}
|
||||||
|
{onSourceClick}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Collapsible>
|
</Collapsible>
|
||||||
|
@ -716,6 +716,9 @@
|
|||||||
floatingButtons={message?.done}
|
floatingButtons={message?.done}
|
||||||
save={!readOnly}
|
save={!readOnly}
|
||||||
{model}
|
{model}
|
||||||
|
onTaskClick={async (e) => {
|
||||||
|
console.log(e);
|
||||||
|
}}
|
||||||
onSourceClick={async (e) => {
|
onSourceClick={async (e) => {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
let sourceButton = document.getElementById(`source-${e}`);
|
let sourceButton = document.getElementById(`source-${e}`);
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
export let value = '';
|
export let value = '';
|
||||||
export let id = '';
|
export let id = '';
|
||||||
|
|
||||||
|
export let raw = false;
|
||||||
|
|
||||||
export let preserveBreaks = false;
|
export let preserveBreaks = false;
|
||||||
export let generateAutoCompletion: Function = async () => null;
|
export let generateAutoCompletion: Function = async () => null;
|
||||||
export let autocomplete = false;
|
export let autocomplete = false;
|
||||||
@ -137,6 +139,9 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let content = value;
|
||||||
|
|
||||||
|
if (!raw) {
|
||||||
async function tryParse(value, attempts = 3, interval = 100) {
|
async function tryParse(value, attempts = 3, interval = 100) {
|
||||||
try {
|
try {
|
||||||
// Try parsing the value
|
// Try parsing the value
|
||||||
@ -155,7 +160,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Usage example
|
// Usage example
|
||||||
let content = await tryParse(value);
|
content = await tryParse(value);
|
||||||
|
}
|
||||||
|
|
||||||
editor = new Editor({
|
editor = new Editor({
|
||||||
element: element,
|
element: element,
|
||||||
@ -191,6 +197,8 @@
|
|||||||
onTransaction: () => {
|
onTransaction: () => {
|
||||||
// force re-render so `editor.isActive` works as expected
|
// force re-render so `editor.isActive` works as expected
|
||||||
editor = editor;
|
editor = editor;
|
||||||
|
|
||||||
|
if (!raw) {
|
||||||
let newValue = turndownService
|
let newValue = turndownService
|
||||||
.turndown(
|
.turndown(
|
||||||
editor
|
editor
|
||||||
@ -214,6 +222,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
value = editor.getHTML();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
editorProps: {
|
editorProps: {
|
||||||
attributes: { id },
|
attributes: { id },
|
||||||
@ -340,7 +351,9 @@
|
|||||||
// Update the editor content if the external `value` changes
|
// Update the editor content if the external `value` changes
|
||||||
$: if (
|
$: if (
|
||||||
editor &&
|
editor &&
|
||||||
value !==
|
(raw
|
||||||
|
? value !== editor.getHTML()
|
||||||
|
: value !==
|
||||||
turndownService
|
turndownService
|
||||||
.turndown(
|
.turndown(
|
||||||
(preserveBreaks
|
(preserveBreaks
|
||||||
@ -348,13 +361,20 @@
|
|||||||
: editor.getHTML()
|
: editor.getHTML()
|
||||||
).replace(/ {2,}/g, (m) => m.replace(/ /g, '\u00a0'))
|
).replace(/ {2,}/g, (m) => m.replace(/ /g, '\u00a0'))
|
||||||
)
|
)
|
||||||
.replace(/\u00a0/g, ' ')
|
.replace(/\u00a0/g, ' '))
|
||||||
) {
|
) {
|
||||||
editor.commands.setContent(
|
if (raw) {
|
||||||
|
editor.commands.setContent(value);
|
||||||
|
} else {
|
||||||
|
preserveBreaks
|
||||||
|
? editor.commands.setContent(value)
|
||||||
|
: editor.commands.setContent(
|
||||||
marked.parse(value.replaceAll(`\n<br/>`, `<br/>`), {
|
marked.parse(value.replaceAll(`\n<br/>`, `<br/>`), {
|
||||||
breaks: false
|
breaks: false
|
||||||
})
|
})
|
||||||
); // Update editor content
|
); // Update editor content
|
||||||
|
}
|
||||||
|
|
||||||
selectTemplate();
|
selectTemplate();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
Loading…
Reference in New Issue
Block a user