mirror of
https://github.com/open-webui/open-webui
synced 2025-01-31 06:49:03 +00:00
refac
This commit is contained in:
parent
9025e9dbb1
commit
4f47053e93
@ -18,6 +18,8 @@
|
||||
{@const html = DOMPurify.sanitize(token.text)}
|
||||
{#if html && html.includes('<video')}
|
||||
{@html html}
|
||||
{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
|
||||
{@html `${token.text}`}
|
||||
{:else}
|
||||
{token.text}
|
||||
{/if}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import DOMPurify from 'dompurify';
|
||||
import { onMount } from 'svelte';
|
||||
import type { Token } from 'marked';
|
||||
import { marked, type Token } from 'marked';
|
||||
import { revertSanitizedResponseContent, unescapeHtml } from '$lib/utils';
|
||||
|
||||
import CodeBlock from '$lib/components/chat/Messages/CodeBlock.svelte';
|
||||
@ -96,6 +96,8 @@
|
||||
{@const html = DOMPurify.sanitize(token.text)}
|
||||
{#if html && html.includes('<video')}
|
||||
{@html html}
|
||||
{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
|
||||
{@html `${token.text}`}
|
||||
{:else}
|
||||
{token.text}
|
||||
{/if}
|
||||
|
@ -75,16 +75,13 @@
|
||||
let tokens;
|
||||
|
||||
import 'katex/dist/katex.min.css';
|
||||
|
||||
import markedKatex from '$lib/utils/marked/katex-extension';
|
||||
import markedToken from '$lib/utils/marked/token-extension';
|
||||
|
||||
const options = {
|
||||
throwOnError: false
|
||||
};
|
||||
|
||||
marked.use(markedKatex(options));
|
||||
marked.use(markedToken({ WEBUI_BASE_URL }));
|
||||
|
||||
$: (async () => {
|
||||
if (message?.content) {
|
||||
|
@ -27,6 +27,7 @@ export const replaceTokens = (content, char, user) => {
|
||||
const charToken = /{{char}}/gi;
|
||||
const userToken = /{{user}}/gi;
|
||||
const videoIdToken = /{{VIDEO_FILE_ID_([a-f0-9-]+)}}/gi; // Regex to capture the video ID
|
||||
const htmlIdToken = /{{HTML_FILE_ID_([a-f0-9-]+)}}/gi; // Regex to capture the HTML ID
|
||||
|
||||
// Replace {{char}} if char is provided
|
||||
if (char !== undefined && char !== null) {
|
||||
@ -44,6 +45,12 @@ export const replaceTokens = (content, char, user) => {
|
||||
return `<video src="${videoUrl}" controls></video>`;
|
||||
});
|
||||
|
||||
// Replace HTML ID tags with corresponding HTML content
|
||||
content = content.replace(htmlIdToken, (match, fileId) => {
|
||||
const htmlUrl = `${WEBUI_BASE_URL}/api/v1/files/${fileId}/content`;
|
||||
return `<iframe src="${htmlUrl}" width="100%" frameborder="0" onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';"></iframe>`;
|
||||
});
|
||||
|
||||
return content;
|
||||
};
|
||||
|
||||
|
@ -1,57 +0,0 @@
|
||||
export default function (options = {}) {
|
||||
return {
|
||||
extensions: [inlineIframeToken(options), blockIframeToken(options)]
|
||||
};
|
||||
}
|
||||
|
||||
const inlineIframeToken = (options = {}) => {
|
||||
const WEBUI_BASE_URL = options.WEBUI_BASE_URL || '';
|
||||
const htmlIdToken = /{{HTML_FILE_ID_([a-f0-9-]+)}}/gi; // Regex to capture the HTML ID
|
||||
function tokenizer(src) {
|
||||
const match = htmlIdToken.exec(src);
|
||||
if (match) {
|
||||
return {
|
||||
type: 'iframe',
|
||||
raw: match[0],
|
||||
fileId: match[1]
|
||||
};
|
||||
}
|
||||
}
|
||||
function renderer(token) {
|
||||
const htmlUrl = `${WEBUI_BASE_URL}/api/v1/files/${token.fileId}/content`;
|
||||
const iframeElement = `<iframe src="${htmlUrl}" width="100%" frameborder="0" onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';"></iframe>`;
|
||||
return iframeElement;
|
||||
}
|
||||
return {
|
||||
name: 'iframe',
|
||||
level: 'inline',
|
||||
tokenizer,
|
||||
renderer
|
||||
};
|
||||
};
|
||||
|
||||
const blockIframeToken = (options = {}) => {
|
||||
const WEBUI_BASE_URL = options.WEBUI_BASE_URL || '';
|
||||
const htmlIdToken = /{{HTML_FILE_ID_([a-f0-9-]+)}}/gi; // Regex to capture the HTML ID
|
||||
function tokenizer(src) {
|
||||
const match = htmlIdToken.exec(src);
|
||||
if (match) {
|
||||
return {
|
||||
type: 'iframe',
|
||||
raw: match[0],
|
||||
fileId: match[1]
|
||||
};
|
||||
}
|
||||
}
|
||||
function renderer(token) {
|
||||
const htmlUrl = `${WEBUI_BASE_URL}/api/v1/files/${token.fileId}/content`;
|
||||
const iframeElement = `<iframe src="${htmlUrl}" width="100%" frameborder="0" onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';"></iframe>`;
|
||||
return iframeElement;
|
||||
}
|
||||
return {
|
||||
name: 'iframe',
|
||||
level: 'block',
|
||||
tokenizer,
|
||||
renderer
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue
Block a user