diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 6fad7a9d..eed9e561 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "RisuAI", - "version": "1.23.2" + "version": "1.23.3" }, "tauri": { "allowlist": { diff --git a/src/lib/Others/GithubStars.svelte b/src/lib/Others/GithubStars.svelte index b0733308..9130ded3 100644 --- a/src/lib/Others/GithubStars.svelte +++ b/src/lib/Others/GithubStars.svelte @@ -1,4 +1,5 @@ @@ -16,9 +17,14 @@ {/if} - { + { openURL("https://www.patreon.com/RisuAI") }}> - + + + { + openURL("mailto:amasio1234@proton.me") + }}> + \ No newline at end of file diff --git a/src/lib/UI/Hub.svelte b/src/lib/UI/Hub.svelte index 40c31273..20568073 100644 --- a/src/lib/UI/Hub.svelte +++ b/src/lib/UI/Hub.svelte @@ -2,13 +2,15 @@ import { downloadRisuHub, getRisuHub, hubURL } from "src/ts/characterCards"; import { ArrowLeft, ArrowRight, DownloadIcon, FlagIcon, MenuIcon, SearchIcon, XIcon } from "lucide-svelte"; import { alertConfirm, alertInput, alertNormal } from "src/ts/alert"; + import { parseMarkdownSafe } from "src/ts/parser"; let openedData:null|{ name:string desc: string download: number, id: string, - img: string + img: string, + tags: string[] } = null let charas:{ @@ -53,32 +55,34 @@ - {#each charas as chara} - { - openedData = chara - }}> - - - - {chara.name} - {chara.desc} - - {#each chara.tags as tag, i} - {#if i < 4} - {tag} - {:else if i === 4} - ... - {/if} - {/each} + {#key charas} + {#each charas as chara} + { + openedData = chara + }}> + + + + {chara.name} + {chara.desc} + + {#each chara.tags as tag, i} + {#if i < 4} + {tag} + {:else if i === 4} + ... + {/if} + {/each} + - - - {/each} + + {/each} + {/key} - - { + + { if(page > 0){ page -= 1 getHub() @@ -105,12 +109,21 @@ openedData = null }}> - - + + {openedData.name} + - {openedData.name} + + {#await parseMarkdownSafe(openedData.desc) then msg} + {@html msg} + {/await} + + + + {#each openedData.tags as tag, i} + {tag} + {/each} - {openedData.desc} { diff --git a/src/ts/parser.ts b/src/ts/parser.ts index c45c295a..c21e1fb4 100644 --- a/src/ts/parser.ts +++ b/src/ts/parser.ts @@ -10,6 +10,12 @@ const convertor = new showdown.Converter({ tables: true }) +const safeConvertor = new showdown.Converter({ + simpleLineBreaks: true, + strikethrough: true, + tables: true, + backslashEscapesHTMLTags: true +}) DOMPurify.addHook("uponSanitizeElement", (node: HTMLElement, data) => { if (data.tagName === "iframe") { @@ -38,6 +44,12 @@ export async function ParseMarkdown(data:string, char:(character | groupChat) = }) } +export function parseMarkdownSafe(data:string) { + return DOMPurify.sanitize(safeConvertor.makeHtml(data), { + FORBID_TAGS: ["a", "style"] + }) +} + export async function hasher(data:Uint8Array){ return Buffer.from(await crypto.subtle.digest("SHA-256", data)).toString('hex'); } \ No newline at end of file diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index b952b24d..9384b390 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -8,7 +8,7 @@ import { defaultAutoSuggestPrompt, defaultJailbreak, defaultMainPrompt } from '. export const DataBase = writable({} as any as Database) export const loadedStore = writable(false) -export let appVer = '1.23.2' +export let appVer = '1.23.3' export function setDatabase(data:Database){ if(checkNullish(data.characters)){ diff --git a/version.json b/version.json index e4510f04..75bb7d98 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"1.23.2"} \ No newline at end of file +{"version":"1.23.3"} \ No newline at end of file