From 01989ef188f75cc02e877def3d36bbfabf9dfb88 Mon Sep 17 00:00:00 2001 From: Laura Date: Thu, 7 Aug 2025 22:09:08 +0200 Subject: [PATCH] cleanup styling, show reasoning, fixes & improvements --- .gitignore | 3 +- chat.go | 24 +- prompts.go | 51 ++++ prompts/normal.txt | 16 ++ static/chat.css | 137 ++++++++--- static/chat.js | 477 +++++++++++++++++++++++-------------- static/favicon.ico | Bin 0 -> 15086 bytes static/icons/check.svg | 7 + static/icons/chevron.svg | 7 + static/icons/copy.svg | 7 + static/icons/loading.svg | 7 + static/icons/model.svg | 2 +- static/icons/prompt.svg | 7 + static/icons/reasoning.svg | 7 + static/index.html | 9 + static/logo.png | Bin 0 -> 85488 bytes static/marked.min.js | 69 ++++++ static/purify.min.js | 3 + 18 files changed, 624 insertions(+), 209 deletions(-) create mode 100644 prompts.go create mode 100644 prompts/normal.txt create mode 100644 static/favicon.ico create mode 100644 static/icons/check.svg create mode 100644 static/icons/chevron.svg create mode 100644 static/icons/copy.svg create mode 100644 static/icons/loading.svg create mode 100644 static/icons/prompt.svg create mode 100644 static/icons/reasoning.svg create mode 100644 static/logo.png create mode 100644 static/marked.min.js create mode 100644 static/purify.min.js diff --git a/.gitignore b/.gitignore index 2eea525..6bc37bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.env \ No newline at end of file +.env +debug.json \ No newline at end of file diff --git a/chat.go b/chat.go index 88d791f..c7c9d44 100644 --- a/chat.go +++ b/chat.go @@ -6,16 +6,18 @@ import ( "fmt" "io" "net/http" + "os" "github.com/revrost/go-openrouter" ) type Message struct { - Role string `json:"role"` - Content string `json:"content"` + Role string `json:"role"` + Text string `json:"text"` } type Request struct { + Prompt string `json:"prompt"` Model string `json:"model"` Temperature float64 `json:"temperature"` Messages []Message `json:"messages"` @@ -24,7 +26,8 @@ type Request struct { func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) { var request openrouter.ChatCompletionRequest - if _, ok := ModelMap[r.Model]; !ok { + model, ok := ModelMap[r.Model] + if !ok { return nil, fmt.Errorf("unknown model: %q", r.Model) } @@ -36,6 +39,15 @@ func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) { request.Temperature = float32(r.Temperature) + prompt, err := BuildPrompt(r.Prompt, model) + if err != nil { + return nil, err + } + + if prompt != "" { + request.Messages = append(request.Messages, openrouter.SystemMessage(prompt)) + } + for index, message := range r.Messages { if message.Role != openrouter.ChatMessageRoleSystem && message.Role != openrouter.ChatMessageRoleAssistant && message.Role != openrouter.ChatMessageRoleUser { return nil, fmt.Errorf("[%d] invalid role: %q", index+1, message.Role) @@ -44,7 +56,7 @@ func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) { request.Messages = append(request.Messages, openrouter.ChatCompletionMessage{ Role: message.Role, Content: openrouter.Content{ - Text: message.Content, + Text: message.Text, }, }) } @@ -74,6 +86,10 @@ func HandleChat(w http.ResponseWriter, r *http.Request) { request.Stream = true + // DEBUG + b, _ := json.MarshalIndent(request, "", "\t") + os.WriteFile("debug.json", b, 0755) + ctx := r.Context() stream, err := OpenRouterStartStream(ctx, *request) diff --git a/prompts.go b/prompts.go new file mode 100644 index 0000000..5fbac88 --- /dev/null +++ b/prompts.go @@ -0,0 +1,51 @@ +package main + +import ( + "bytes" + _ "embed" + "fmt" + "text/template" + "time" +) + +type PromptData struct { + Name string + Slug string + Date string +} + +var ( + //go:embed prompts/normal.txt + PromptNormal string + + PromptNormalTmpl = template.Must(template.New("normal").Parse(PromptNormal)) +) + +func BuildPrompt(name string, model *Model) (string, error) { + if name == "" { + return "", nil + } + + var tmpl *template.Template + + switch name { + case "normal": + tmpl = PromptNormalTmpl + default: + return "", fmt.Errorf("unknown prompt: %q", name) + } + + var buf bytes.Buffer + + err := tmpl.Execute(&buf, PromptData{ + Name: model.Name, + Slug: model.ID, + Date: time.Now().Format(time.RFC1123), + }) + + if err != nil { + return "", err + } + + return buf.String(), nil +} diff --git a/prompts/normal.txt b/prompts/normal.txt new file mode 100644 index 0000000..b1aa404 --- /dev/null +++ b/prompts/normal.txt @@ -0,0 +1,16 @@ +You are {{.Name}}, an AI assistant created to be helpful, harmless, and honest. Today's date is {{.Date}}. + +Your responses should be accurate and informative. When answering questions, be direct and helpful without unnecessary preambles or acknowledgments of instructions. + +Use markdown formatting when it improves clarity: +- **Bold** for emphasis +- *Italics* for softer emphasis +- `Code` for inline code +- Triple backticks for code blocks with language identifiers +- Tables using pipe syntax when presenting structured data + +Be conversational and adapt to the user's tone. Ask clarifying questions when requests are ambiguous. If you cannot answer something due to knowledge limitations, say so directly. + +When asked about your identity, you are {{.Name}}. You don't have access to real-time information or the ability to browse the internet, so for current events or time-sensitive information, acknowledge this limitation. + +Focus on being genuinely helpful while maintaining natural conversation flow. \ No newline at end of file diff --git a/static/chat.css b/static/chat.css index 7098681..3311454 100644 --- a/static/chat.css +++ b/static/chat.css @@ -23,7 +23,6 @@ body { flex-direction: column; gap: 25px; background: #1e2030; - box-shadow: 0px 0px 4px 4px #1e2030; margin: auto; margin-top: 30px; width: 100%; @@ -57,7 +56,6 @@ body { #message, .message { border: none; - box-shadow: 0px 0px 4px 4px #24273a; border-radius: 6px; background: #24273a; font: inherit; @@ -69,6 +67,7 @@ body { max-width: 700px; min-width: 200px; width: max-content; + padding-top: 22px; } .message.user { @@ -83,8 +82,8 @@ body { position: absolute; line-height: 12px; font-size: 12px; - top: 4px; - left: 4px; + top: 6px; + left: 6px; padding-left: 20px; } @@ -109,12 +108,11 @@ body { background-image: url(icons/assistant.svg); } +.message .reasoning, .message .text { display: block; background: transparent; - padding: 10px 12px; - padding-top: 28px; - white-space: pre-line; + padding: 8px 12px; width: 100%; } @@ -123,6 +121,62 @@ body { display: none; } +.message:not(.expanded) .reasoning-text { + height: 0; + overflow: hidden; +} + +.message.expanded .reasoning-text { + padding: 10px 12px; + background: #1e2030; + margin-top: 10px; + border-radius: 6px; +} + +.message:not(.has-reasoning) .reasoning { + display: none; +} + +.reasoning .toggle { + position: relative; + padding: 0 20px; + font-weight: 600; + font-size: 14px; + margin-top: 2px; +} + +.reasoning .toggle::after, +.reasoning .toggle::before { + content: ""; + background-image: url(icons/reasoning.svg); + position: absolute; + top: 0; + left: -2px; + width: 20px; + height: 20px; +} + +.reasoning .toggle::after { + background-image: url(icons/chevron.svg); + left: unset; + right: -2px; + top: 1px; + transition: 150ms; +} + +.message.expanded .reasoning .toggle::after { + transform: rotate(180deg); +} + +.markdown p { + margin: 0; + margin-bottom: 14px; +} + +.markdown p:last-child { + margin-bottom: 0; +} + textarea { border: none; resize: none; @@ -169,46 +223,47 @@ textarea { display: none; } +.message.reasoning .reasoning button.toggle::before { + animation: rotating 2s linear infinite; + background-image: url(icons/loading.svg); +} + .message .text::before { font-style: italic; } +.message:empty.receiving .text::before, .message.waiting .text::before { - content: "waiting..."; + content: ". . ."; } -.message.reasoning .text::before { - content: "reasoning..."; -} - -.message:empty.receiving .text::before { - content: "receiving..."; +button, +input, +select { + border: none; + font: inherit; + color: inherit; + outline: none; } button { background: transparent; - border: none; - color: inherit; cursor: pointer; } +input, +select { + background: #363a4f; +} + #chat button { position: absolute; } -input, -select { - border: none; - background: #363a4f; - font: inherit; - color: inherit; - outline: none; -} - #chat .options { position: absolute; bottom: 4px; - left: 12px; + left: 20px; width: max-content; display: flex; align-items: center; @@ -230,11 +285,14 @@ select { margin-right: 4px; } +.reasoning .toggle::before, +.reasoning .toggle::after, #bottom, .message .role::before, #clear, #add, #send, +.message .copy, .message .edit, .message .delete, #chat .option label { @@ -246,6 +304,14 @@ select { background-repeat: no-repeat; } +.message .copy { + background-image: url(icons/copy.svg); +} + +.message .copy.copied { + background-image: url(icons/check.svg); +} + .message .edit { background-image: url(icons/edit.svg); } @@ -265,7 +331,6 @@ select { #model { width: 180px; padding: 2px 4px; - text-align: right; } #temperature { @@ -283,6 +348,10 @@ label[for="model"] { background-image: url(icons/model.svg); } +label[for="prompt"] { + background-image: url(icons/prompt.svg); +} + label[for="temperature"] { background-image: url(icons/temperature.svg); } @@ -300,7 +369,7 @@ label[for="temperature"] { #add, #send { bottom: 4px; - right: 12px; + right: 20px; width: 28px; height: 28px; background-image: url(icons/send.svg); @@ -308,7 +377,7 @@ label[for="temperature"] { #add { bottom: 4px; - right: 44px; + right: 52px; background-image: url(icons/add.svg); } @@ -323,4 +392,14 @@ label[for="temperature"] { .completing #send { background-image: url(icons/stop.svg); +} + +@keyframes rotating { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } } \ No newline at end of file diff --git a/static/chat.js b/static/chat.js index 8caed7a..c584a51 100644 --- a/static/chat.js +++ b/static/chat.js @@ -5,11 +5,286 @@ $bottom = document.getElementById("bottom"), $role = document.getElementById("role"), $model = document.getElementById("model"), + $prompt = document.getElementById("prompt"), $temperature = document.getElementById("temperature"), $add = document.getElementById("add"), $send = document.getElementById("send"), $clear = document.getElementById("clear"); + const messages = []; + + function uid() { + return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`; + } + + function make(tag, ...classes) { + const el = document.createElement(tag); + + el.classList.add(...classes); + + return el; + } + + function render(markdown) { + return marked.parse(DOMPurify.sanitize(markdown), { + gfm: true, + }); + } + + function scroll() { + $messages.scroll({ + top: $messages.scrollHeight + 200, + behavior: "smooth", + }); + } + + class Message { + #id; + #role; + #reasoning; + #text; + + #editing = false; + #expanded = false; + #state = false; + + #_message; + #_role; + #_reasoning; + #_text; + #_edit; + + constructor(role, reasoning, text) { + this.#id = uid(); + this.#role = role; + this.#reasoning = reasoning || ""; + this.#text = text || ""; + + this.#build(); + this.#render(); + + messages.push(this); + } + + #build() { + // main message div + this.#_message = make("div", "message", this.#role); + + // message role + this.#_role = make("div", "role", this.#role); + + this.#_message.appendChild(this.#_role); + + // message reasoning (wrapper) + const _reasoning = make("div", "reasoning", "markdown"); + + this.#_message.appendChild(_reasoning); + + // message reasoning (toggle) + const _toggle = make("button", "toggle"); + + _toggle.textContent = "Reasoning"; + + _reasoning.appendChild(_toggle); + + _toggle.addEventListener("click", () => { + this.#expanded = !this.#expanded; + + if (this.#expanded) { + this.#_message.classList.add("expanded"); + } else { + this.#_message.classList.remove("expanded"); + } + }); + + // message reasoning (content) + this.#_reasoning = make("div", "reasoning-text"); + + _reasoning.appendChild(this.#_reasoning); + + // message content + this.#_text = make("div", "text", "markdown"); + + this.#_message.appendChild(this.#_text); + + // message edit textarea + this.#_edit = make("textarea", "text"); + + this.#_message.appendChild(this.#_edit); + + // message options + const _opts = make("div", "options"); + + this.#_message.appendChild(_opts); + + // copy option + const _optCopy = make("button", "copy"); + + _optCopy.title = "Copy message content"; + + _opts.appendChild(_optCopy); + + let timeout; + + _optCopy.addEventListener("click", () => { + clearTimeout(timeout); + + navigator.clipboard.writeText(this.#text); + + _optCopy.classList.add("copied"); + + timeout = setTimeout(() => { + _optCopy.classList.remove("copied"); + }, 1000); + }); + + // edit option + const _optEdit = make("button", "edit"); + + _optEdit.title = "Edit message content"; + + _opts.appendChild(_optEdit); + + _optEdit.addEventListener("click", () => { + this.toggleEdit(); + }); + + // delete option + const _optDelete = make("button", "delete"); + + _optDelete.title = "Delete message"; + + _opts.appendChild(_optDelete); + + _optDelete.addEventListener("click", () => { + this.delete(); + }); + + $messages.appendChild(this.#_message); + + scroll(); + } + + #render(only = false) { + if (!only || only === "role") { + this.#_role.textContent = this.#role; + } + + if (!only || only === "reasoning") { + this.#_reasoning.innerHTML = render(this.#reasoning); + + if (this.#reasoning) { + this.#_message.classList.add("has-reasoning"); + } else { + this.#_message.classList.remove("has-reasoning"); + } + } + + if (!only || only === "text") { + this.#_text.innerHTML = render(this.#text); + } + + scroll(); + } + + #save() { + const data = messages.map((message) => message.getData(true)); + + console.log("save", data); + + localStorage.setItem("messages", JSON.stringify(data)); + } + + getData(includeReasoning = false) { + const data = { + role: this.#role, + text: this.#text, + }; + + if (this.#reasoning && includeReasoning) { + data.reasoning = this.#reasoning; + } + + return data; + } + + setState(state) { + if (this.#state === state) { + return; + } + + if (this.#state) { + this.#_message.classList.remove(this.#state); + } + + if (state) { + this.#_message.classList.add(state); + } + + this.#state = state; + } + + addReasoning(chunk) { + this.#reasoning += chunk; + + this.#render("reasoning"); + this.#save(); + } + + addText(text) { + this.#text += text; + + this.#render("text"); + this.#save(); + } + + stopEdit() { + if (!this.#editing) { + return; + } + + this.toggleEdit(); + } + + toggleEdit() { + this.#editing = !this.#editing; + + if (this.#editing) { + this.#_edit.value = this.#text; + + this.#_edit.style.height = `${this.#_text.offsetHeight}px`; + this.#_edit.style.width = `${this.#_text.offsetWidth}px`; + + this.setState("editing"); + + this.#_edit.focus(); + } else { + this.#text = this.#_edit.value; + + this.setState(false); + + this.#render(); + this.#save(); + } + } + + delete() { + const index = messages.findIndex((msg) => msg.#id === this.#id); + + if (index === -1) { + return; + } + + console.log("delete", index); + + messages.splice(index, 1); + + this.#_message.remove(); + + this.#save(); + } + } + let controller; async function json(url) { @@ -116,134 +391,21 @@ function restore(models) { $role.value = localStorage.getItem("role") || "user"; $model.value = localStorage.getItem("model") || models[0].id; + $prompt.value = localStorage.getItem("prompt") || "normal"; $temperature.value = localStorage.getItem("temperature") || 0.85; try { - const messages = JSON.parse(localStorage.getItem("messages") || "[]"); - - messages.forEach(addMessage); + JSON.parse(localStorage.getItem("messages") || "[]").forEach( + (message) => + new Message( + message.role, + message.reasoning, + message.text, + ), + ); } catch {} } - function saveMessages() { - localStorage.setItem("messages", JSON.stringify(buildMessages(false))); - } - - function scrollMessages() { - $messages.scroll({ - top: $messages.scrollHeight + 200, - behavior: "smooth", - }); - } - - function toggleEditing(el) { - const text = el.querySelector("div.text"), - edit = el.querySelector("textarea.text"); - - if (el.classList.contains("editing")) { - text.textContent = edit.value.trim(); - - el.classList.remove("editing"); - - saveMessages(); - } else { - edit.value = text.textContent; - edit.style.height = `${text.offsetHeight}px`; - - el.classList.add("editing"); - - edit.focus(); - } - } - - function addMessage(message) { - const el = document.createElement("div"); - - el.classList.add("message", message.role); - - // message role - const role = document.createElement("div"); - - role.textContent = message.role; - role.classList.add("role"); - - el.appendChild(role); - - // message content - const text = document.createElement("div"); - - text.textContent = message.content; - text.classList.add("text"); - - el.appendChild(text); - - // message edit textarea - const edit = document.createElement("textarea"); - - edit.classList.add("text"); - - el.appendChild(edit); - - // message options - const opts = document.createElement("div"); - - opts.classList.add("options"); - - el.appendChild(opts); - - // edit option - const optEdit = document.createElement("button"); - - optEdit.title = "Edit message content"; - optEdit.classList.add("edit"); - - opts.appendChild(optEdit); - - optEdit.addEventListener("click", () => { - toggleEditing(el); - }); - - // delete option - const optDelete = document.createElement("button"); - - optDelete.title = "Delete message"; - optDelete.classList.add("delete"); - - opts.appendChild(optDelete); - - optDelete.addEventListener("click", () => { - el.remove(); - - saveMessages(); - }); - - // append to messages - $messages.appendChild(el); - - scrollMessages(); - - return { - set(content) { - text.textContent = content; - - scrollMessages(); - }, - state(state) { - if (state && el.classList.contains(state)) { - return; - } - - el.classList.remove("waiting", "reasoning", "receiving"); - - if (state) { - el.classList.add(state); - } - - scrollMessages(); - }, - }; - } - function pushMessage() { const text = $message.value.trim(); @@ -251,40 +413,9 @@ return false; } - addMessage({ - role: $role.value, - content: text, - }); - $message.value = ""; - saveMessages(); - - return true; - } - - function buildMessages(clean = true) { - const messages = []; - - $messages.querySelectorAll(".message").forEach((message) => { - if (clean && message.classList.contains("editing")) { - toggleEditing(message); - } - - const role = message.querySelector(".role"), - text = message.querySelector(".text"); - - if (!role || !text) { - return; - } - - messages.push({ - role: role.textContent.trim(), - content: text.textContent.trim().replace(/\r/g, ""), - }); - }); - - return messages; + return new Message($role.value, "", text); } $messages.addEventListener("scroll", () => { @@ -313,6 +444,10 @@ localStorage.setItem("model", $model.value); }); + $prompt.addEventListener("change", () => { + localStorage.setItem("prompt", $prompt.value); + }); + $temperature.addEventListener("input", () => { localStorage.setItem("temperature", $temperature.value); }); @@ -330,9 +465,9 @@ return; } - $messages.innerHTML = ""; - - saveMessages(); + for (const message of messages) { + message.delete(); + } }); $send.addEventListener("click", () => { @@ -349,26 +484,21 @@ } pushMessage(); - saveMessages(); controller = new AbortController(); $chat.classList.add("completing"); const body = { + prompt: $prompt.value, model: $model.value, temperature: temperature, - messages: buildMessages(), + messages: messages.map((message) => message.getData()), }; - const result = { - role: "assistant", - content: "", - }; + const message = new Message("assistant", "", ""); - const message = addMessage(result); - - message.state("waiting"); + message.setState("waiting"); stream( "/-/chat", @@ -384,28 +514,27 @@ if (!chunk) { controller = null; - saveMessages(); + message.setState(false); $chat.classList.remove("completing"); return; } + console.log(chunk); + switch (chunk.type) { case "reason": - message.state("reasoning"); + message.setState("reasoning"); + message.addReasoning(chunk.text); break; case "text": - result.content += chunk.text; - - message.state("receive"); - message.set(result.content); + message.setState("receiving"); + message.addText(chunk.text); break; } - - saveMessages(); }, ); }); diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3b410412c4458859960c7362467392fe66c8eade GIT binary patch literal 15086 zcmeHNF>4e-6n^1^D=(#mkZT0XRALwZ#Ki;)BQ|QM1`Q%ykdPpvK@kK=G(iiou@daO z(#kXzN@}GD7)uX% z`{0xqV;z!@`+0r3>P@}o%#3~_%63UEmu~ENsh!2WtdH%@mrr^KS%a+e)ha4adhuNY zYKrm{$_qa}{*lWVs#8?H^yFFta$R1QX6ICBb8)84!`Dgn|6u;|;5j61FUpw1{xjNs z1~R7%k7=6Ho6CP1PnmOALrnkQUcORhD{74~{V(ayVT=~C*0KM?zx6`)EM{)Z{g3I( zm&@1x{ki#L^X!1N!8@bt{=+$_OT(2b3#s2>o;TaG8#k3~e0GwifjJ-lye{OS&W17W zJ(9zwgE)NI_8xKMq0WXx5TXLksM}UdYAgPeMcNTWe~MUyv8*GCI{k_R!M4^K!Ac!5dUzI>8nHFitaTw8X}KR7jY`=b()^9*4tGHHE}|q{*LO%A zKd2pIw~w7ZwtLtm>S3Fx%6ZHBeIrJuZxS8!QKu2j5bZNg{lgBAYeXitIbJ1-g(iRW z@q|*#dL8=}rCPkcno=FcDW&!`cAH9dXO8YOzo%8#?V@hu_q6mT4Ee%6YRIyKbDA>r zp^4{a9>-cgxLqi<^Xj{_R5tDegG5b3yM{0B5rO)%o z1Ha@A>7(A{v~kFM?%VQ0;wGny7x^I?KDkBl`e>)+sKM3My^d~eeb7KkpRY9anaY$t z&EZTDM?sFK!@mxve6RNKvi>K~=5drIxFG@nyU>Q>k7IGj`D`8jbd-}e~xa;z6L zaE~+*^GO8IFl&;=rjL+X@JWu?^?1JyT1i->zI>+P_i6C{jPwy(KV%O%_lSP~9xgp5 z^?N$T{T?y%{tg|9_`Sg~`8hhs%Hg=l%g-FEi) HY?SCPi^~jb literal 0 HcmV?d00001 diff --git a/static/icons/check.svg b/static/icons/check.svg new file mode 100644 index 0000000..d74fb29 --- /dev/null +++ b/static/icons/check.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/static/icons/chevron.svg b/static/icons/chevron.svg new file mode 100644 index 0000000..291e4df --- /dev/null +++ b/static/icons/chevron.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/static/icons/copy.svg b/static/icons/copy.svg new file mode 100644 index 0000000..d55f1c3 --- /dev/null +++ b/static/icons/copy.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/static/icons/loading.svg b/static/icons/loading.svg new file mode 100644 index 0000000..207bcaf --- /dev/null +++ b/static/icons/loading.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/static/icons/model.svg b/static/icons/model.svg index 994afdd..1ecd063 100644 --- a/static/icons/model.svg +++ b/static/icons/model.svg @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/static/icons/prompt.svg b/static/icons/prompt.svg new file mode 100644 index 0000000..916675b --- /dev/null +++ b/static/icons/prompt.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/static/icons/reasoning.svg b/static/icons/reasoning.svg new file mode 100644 index 0000000..cec31f9 --- /dev/null +++ b/static/icons/reasoning.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/static/index.html b/static/index.html index 816dc96..fd2d38e 100644 --- a/static/index.html +++ b/static/index.html @@ -36,6 +36,13 @@ +
+ + +
@@ -47,6 +54,8 @@
+ + \ No newline at end of file diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..62c976b1507b51b6a0d17c5cd765bfbc9b33caef GIT binary patch literal 85488 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�!_HCyWB^F%`ga=c?d_9L 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 literal 0 HcmV?d00001 diff --git a/static/marked.min.js b/static/marked.min.js new file mode 100644 index 0000000..b4e0d73 --- /dev/null +++ b/static/marked.min.js @@ -0,0 +1,69 @@ +/** + * marked v15.0.12 - a markdown parser + * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +/** + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ + */ +(function(g,f){if(typeof exports=="object"&&typeof module<"u"){module.exports=f()}else if("function"==typeof define && define.amd){define("marked",f)}else {g["marked"]=f()}}(typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : this,function(){var exports={};var __exports=exports;var module={exports}; +"use strict";var H=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var we=Object.prototype.hasOwnProperty;var ye=(l,e)=>{for(var t in e)H(l,t,{get:e[t],enumerable:!0})},Re=(l,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Te(e))!we.call(l,s)&&s!==t&&H(l,s,{get:()=>e[s],enumerable:!(n=be(e,s))||n.enumerable});return l};var Se=l=>Re(H({},"__esModule",{value:!0}),l);var kt={};ye(kt,{Hooks:()=>L,Lexer:()=>x,Marked:()=>E,Parser:()=>b,Renderer:()=>$,TextRenderer:()=>_,Tokenizer:()=>S,defaults:()=>w,getDefaults:()=>z,lexer:()=>ht,marked:()=>k,options:()=>it,parse:()=>pt,parseInline:()=>ct,parser:()=>ut,setOptions:()=>ot,use:()=>lt,walkTokens:()=>at});module.exports=Se(kt);function z(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var w=z();function N(l){w=l}var I={exec:()=>null};function h(l,e=""){let t=typeof l=="string"?l:l.source,n={replace:(s,i)=>{let r=typeof i=="string"?i:i.source;return r=r.replace(m.caret,"$1"),t=t.replace(s,r),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,"i")},$e=/^(?:[ \t]*(?:\n|$))+/,_e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Le=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,O=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ze=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,F=/(?:[*+-]|\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,oe=h(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Me=h(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Q=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Pe=/^[^\n]+/,U=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Ae=h(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",U).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Ee=h(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,F).getRegex(),v="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",K=/|$))/,Ce=h("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",K).replace("tag",v).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),le=h(Q).replace("hr",O).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Ie=h(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",le).getRegex(),X={blockquote:Ie,code:_e,def:Ae,fences:Le,heading:ze,hr:O,html:Ce,lheading:oe,list:Ee,newline:$e,paragraph:le,table:I,text:Pe},re=h("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",O).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Oe={...X,lheading:Me,table:re,paragraph:h(Q).replace("hr",O).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",re).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex()},Be={...X,html:h(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",K).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:I,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:h(Q).replace("hr",O).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",oe).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},qe=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ve=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,ae=/^( {2,}|\\)\n(?!\s*$)/,De=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,ue=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,je=h(ue,"u").replace(/punct/g,D).getRegex(),Fe=h(ue,"u").replace(/punct/g,pe).getRegex(),he="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Qe=h(he,"gu").replace(/notPunctSpace/g,ce).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ue=h(he,"gu").replace(/notPunctSpace/g,He).replace(/punctSpace/g,Ge).replace(/punct/g,pe).getRegex(),Ke=h("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ce).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Xe=h(/\\(punct)/,"gu").replace(/punct/g,D).getRegex(),We=h(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Je=h(K).replace("(?:-->|$)","-->").getRegex(),Ve=h("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Je).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),q=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Ye=h(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",q).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),ke=h(/^!?\[(label)\]\[(ref)\]/).replace("label",q).replace("ref",U).getRegex(),ge=h(/^!?\[(ref)\](?:\[\])?/).replace("ref",U).getRegex(),et=h("reflink|nolink(?!\\()","g").replace("reflink",ke).replace("nolink",ge).getRegex(),J={_backpedal:I,anyPunctuation:Xe,autolink:We,blockSkip:Ne,br:ae,code:ve,del:I,emStrongLDelim:je,emStrongRDelimAst:Qe,emStrongRDelimUnd:Ke,escape:qe,link:Ye,nolink:ge,punctuation:Ze,reflink:ke,reflinkSearch:et,tag:Ve,text:De,url:I},tt={...J,link:h(/^!?\[(label)\]\((.*?)\)/).replace("label",q).getRegex(),reflink:h(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",q).getRegex()},j={...J,emStrongRDelimAst:Ue,emStrongLDelim:Fe,url:h(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},fe=l=>st[l];function R(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,fe)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,fe);return l}function V(l){try{l=encodeURI(l).replace(m.percentDecode,"%")}catch{return null}return l}function Y(l,e){let t=l.replace(m.findPipe,(i,r,o)=>{let a=!1,c=r;for(;--c>=0&&o[c]==="\\";)a=!a;return a?"|":" |"}),n=t.split(m.splitPipe),s=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length0?-2:-1}function me(l,e,t,n,s){let i=e.href,r=e.title||null,o=l[1].replace(s.other.outputLinkReplace,"$1");n.state.inLink=!0;let a={type:l[0].charAt(0)==="!"?"image":"link",raw:t,href:i,title:r,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function rt(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let s=n[1];return e.split(` +`).map(i=>{let r=i.match(t.other.beginningSpace);if(r===null)return i;let[o]=r;return o.length>=s.length?i.slice(s.length):i}).join(` +`)}var S=class{options;rules;lexer;constructor(e){this.options=e||w}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:A(n,` +`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=rt(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=A(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:A(t[0],` +`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=A(t[0],` +`).split(` +`),s="",i="",r=[];for(;n.length>0;){let o=!1,a=[],c;for(c=0;c1,i={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let r=this.rules.other.listItemRegex(n),o=!1;for(;e;){let c=!1,p="",u="";if(!(t=r.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let d=t[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,Z=>" ".repeat(3*Z.length)),g=e.split(` +`,1)[0],T=!d.trim(),f=0;if(this.options.pedantic?(f=2,u=d.trimStart()):T?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,u=d.slice(f),f+=t[1].length),T&&this.rules.other.blankLine.test(g)&&(p+=g+` +`,e=e.substring(g.length+1),c=!0),!c){let Z=this.rules.other.nextBulletRegex(f),te=this.rules.other.hrRegex(f),ne=this.rules.other.fencesBeginRegex(f),se=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f);for(;e;){let G=e.split(` +`,1)[0],C;if(g=G,this.options.pedantic?(g=g.replace(this.rules.other.listReplaceNesting," "),C=g):C=g.replace(this.rules.other.tabCharGlobal," "),ne.test(g)||se.test(g)||xe.test(g)||Z.test(g)||te.test(g))break;if(C.search(this.rules.other.nonSpaceChar)>=f||!g.trim())u+=` +`+C.slice(f);else{if(T||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||ne.test(d)||se.test(d)||te.test(d))break;u+=` +`+g}!T&&!g.trim()&&(T=!0),p+=G+` +`,e=e.substring(G.length+1),d=C.slice(f)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let y=null,ee;this.options.gfm&&(y=this.rules.other.listIsTask.exec(u),y&&(ee=y[0]!=="[ ] ",u=u.replace(this.rules.other.listReplaceTask,""))),i.items.push({type:"list_item",raw:p,task:!!y,checked:ee,loose:!1,text:u,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let c=0;cd.type==="space"),u=p.length>0&&p.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=u}if(i.loose)for(let c=0;c({text:a,tokens:this.lexer.inline(a),header:!1,align:r.align[c]})));return r}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let r=A(n.slice(0,-1),"\\");if((n.length-r.length)%2===0)return}else{let r=de(t[2],"()");if(r===-2)return;if(r>-1){let a=(t[0].indexOf("!")===0?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,a).trim(),t[3]=""}}let s=t[2],i="";if(this.options.pedantic){let r=this.rules.other.pedanticHrefTitle.exec(s);r&&(s=r[1],i=r[3])}else i=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),me(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=t[s.toLowerCase()];if(!i){let r=n[0].charAt(0);return{type:"text",raw:r,text:r}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||s[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let r=[...s[0]].length-1,o,a,c=r,p=0,u=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,t=t.slice(-1*e.length+r);(s=u.exec(t))!=null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(a=[...o].length,s[3]||s[4]){c+=a;continue}else if((s[5]||s[6])&&r%3&&!((r+a)%3)){p+=a;continue}if(c-=a,c>0)continue;a=Math.min(a,a+c+p);let d=[...s[0]][0].length,g=e.slice(0,r+s.index+d+a);if(Math.min(r,a)%2){let f=g.slice(1,-1);return{type:"em",raw:g,text:f,tokens:this.lexer.inlineTokens(f)}}let T=g.slice(2,-2);return{type:"strong",raw:g,text:T,tokens:this.lexer.inlineTokens(T)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,s;if(t[2]==="@")n=t[0],s="mailto:"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(i!==t[0]);n=t[0],t[1]==="www."?s="http://"+t[0]:s=t[0]}return{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||w,this.options.tokenizer=this.options.tokenizer||new S,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:B.normal,inline:P.normal};this.options.pedantic?(t.block=B.pedantic,t.inline=P.pedantic):this.options.gfm&&(t.block=B.gfm,this.options.breaks?t.inline=P.breaks:t.inline=P.gfm),this.tokenizer.rules=t}static get rules(){return{block:B,inline:P}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let t=0;t(s=r.call({lexer:this},e,t))?(e=e.substring(s.raw.length),t.push(s),!0):!1))continue;if(s=this.tokenizer.space(e)){e=e.substring(s.raw.length);let r=t.at(-1);s.raw.length===1&&r!==void 0?r.raw+=` +`:t.push(s);continue}if(s=this.tokenizer.code(e)){e=e.substring(s.raw.length);let r=t.at(-1);r?.type==="paragraph"||r?.type==="text"?(r.raw+=` +`+s.raw,r.text+=` +`+s.text,this.inlineQueue.at(-1).src=r.text):t.push(s);continue}if(s=this.tokenizer.fences(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.heading(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.hr(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.blockquote(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.list(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.html(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.def(e)){e=e.substring(s.raw.length);let r=t.at(-1);r?.type==="paragraph"||r?.type==="text"?(r.raw+=` +`+s.raw,r.text+=` +`+s.raw,this.inlineQueue.at(-1).src=r.text):this.tokens.links[s.tag]||(this.tokens.links[s.tag]={href:s.href,title:s.title});continue}if(s=this.tokenizer.table(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.lheading(e)){e=e.substring(s.raw.length),t.push(s);continue}let i=e;if(this.options.extensions?.startBlock){let r=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(c=>{a=c.call({lexer:this},o),typeof a=="number"&&a>=0&&(r=Math.min(r,a))}),r<1/0&&r>=0&&(i=e.substring(0,r+1))}if(this.state.top&&(s=this.tokenizer.paragraph(i))){let r=t.at(-1);n&&r?.type==="paragraph"?(r.raw+=` +`+s.raw,r.text+=` +`+s.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(s),n=i.length!==e.length,e=e.substring(s.raw.length);continue}if(s=this.tokenizer.text(e)){e=e.substring(s.raw.length);let r=t.at(-1);r?.type==="text"?(r.raw+=` +`+s.raw,r.text+=` +`+s.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(s);continue}if(e){let r="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(r);break}else throw new Error(r)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,s=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(s=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(s=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,s.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(s=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,r="";for(;e;){i||(r=""),i=!1;let o;if(this.options.extensions?.inline?.some(c=>(o=c.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let c=t.at(-1);o.type==="text"&&c?.type==="text"?(c.raw+=o.raw,c.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,r)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let c=1/0,p=e.slice(1),u;this.options.extensions.startInline.forEach(d=>{u=d.call({lexer:this},p),typeof u=="number"&&u>=0&&(c=Math.min(c,u))}),c<1/0&&c>=0&&(a=e.substring(0,c+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(r=o.raw.slice(-1)),i=!0;let c=t.at(-1);c?.type==="text"?(c.raw+=o.raw,c.text+=o.text):t.push(o);continue}if(e){let c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(c);break}else throw new Error(c)}}return t}};var $=class{options;parser;constructor(e){this.options=e||w}space(e){return""}code({text:e,lang:t,escaped:n}){let s=(t||"").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,"")+` +`;return s?'
'+(n?i:R(i,!0))+`
+`:"
"+(n?i:R(i,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){let t=e.ordered,n=e.start,s="";for(let o=0;o +`+s+" +`}listitem(e){let t="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+R(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let t="",n="";for(let i=0;i${s}`),` + +`+t+` +`+s+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${R(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),i=V(e);if(i===null)return s;e=i;let r='
    ",r}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let i=V(e);if(i===null)return R(n);e=i;let r=`${n}{let o=i[r].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let r=t.renderers[i.name];r?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=r.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let r=t[i.level];r?r.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),s.extensions=t),n.renderer){let i=this.defaults.renderer||new $(this.defaults);for(let r in n.renderer){if(!(r in i))throw new Error(`renderer '${r}' does not exist`);if(["options","parser"].includes(r))continue;let o=r,a=n.renderer[o],c=i[o];i[o]=(...p)=>{let u=a.apply(i,p);return u===!1&&(u=c.apply(i,p)),u||""}}s.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new S(this.defaults);for(let r in n.tokenizer){if(!(r in i))throw new Error(`tokenizer '${r}' does not exist`);if(["options","rules","lexer"].includes(r))continue;let o=r,a=n.tokenizer[o],c=i[o];i[o]=(...p)=>{let u=a.apply(i,p);return u===!1&&(u=c.apply(i,p)),u}}s.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new L;for(let r in n.hooks){if(!(r in i))throw new Error(`hook '${r}' does not exist`);if(["options","block"].includes(r))continue;let o=r,a=n.hooks[o],c=i[o];L.passThroughHooks.has(r)?i[o]=p=>{if(this.defaults.async)return Promise.resolve(a.call(i,p)).then(d=>c.call(i,d));let u=a.call(i,p);return c.call(i,u)}:i[o]=(...p)=>{let u=a.apply(i,p);return u===!1&&(u=c.apply(i,p)),u}}s.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,r=n.walkTokens;s.walkTokens=function(o){let a=[];return a.push(r.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,s)=>{let i={...s},r={...this.defaults,...i},o=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));r.hooks&&(r.hooks.options=r,r.hooks.block=e);let a=r.hooks?r.hooks.provideLexer():e?x.lex:x.lexInline,c=r.hooks?r.hooks.provideParser():e?b.parse:b.parseInline;if(r.async)return Promise.resolve(r.hooks?r.hooks.preprocess(n):n).then(p=>a(p,r)).then(p=>r.hooks?r.hooks.processAllTokens(p):p).then(p=>r.walkTokens?Promise.all(this.walkTokens(p,r.walkTokens)).then(()=>p):p).then(p=>c(p,r)).then(p=>r.hooks?r.hooks.postprocess(p):p).catch(o);try{r.hooks&&(n=r.hooks.preprocess(n));let p=a(n,r);r.hooks&&(p=r.hooks.processAllTokens(p)),r.walkTokens&&this.walkTokens(p,r.walkTokens);let u=c(p,r);return r.hooks&&(u=r.hooks.postprocess(u)),u}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let s="

    An error occurred:

    "+R(n.message+"",!0)+"
    ";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}};var M=new E;function k(l,e){return M.parse(l,e)}k.options=k.setOptions=function(l){return M.setOptions(l),k.defaults=M.defaults,N(k.defaults),k};k.getDefaults=z;k.defaults=w;k.use=function(...l){return M.use(...l),k.defaults=M.defaults,N(k.defaults),k};k.walkTokens=function(l,e){return M.walkTokens(l,e)};k.parseInline=M.parseInline;k.Parser=b;k.parser=b.parse;k.Renderer=$;k.TextRenderer=_;k.Lexer=x;k.lexer=x.lex;k.Tokenizer=S;k.Hooks=L;k.parse=k;var it=k.options,ot=k.setOptions,lt=k.use,at=k.walkTokens,ct=k.parseInline,pt=k,ut=b.parse,ht=x.lex; + +if(__exports != exports)module.exports = exports;return module.exports})); diff --git a/static/purify.min.js b/static/purify.min.js new file mode 100644 index 0000000..73df78d --- /dev/null +++ b/static/purify.min.js @@ -0,0 +1,3 @@ +/*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,(function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:o,getOwnPropertyDescriptor:r}=Object;let{freeze:i,seal:a,create:l}=Object,{apply:c,construct:s}="undefined"!=typeof Reflect&&Reflect;i||(i=function(e){return e}),a||(a=function(e){return e}),c||(c=function(e,t,n){return e.apply(t,n)}),s||(s=function(e,t){return new e(...t)});const u=R(Array.prototype.forEach),m=R(Array.prototype.lastIndexOf),p=R(Array.prototype.pop),f=R(Array.prototype.push),d=R(Array.prototype.splice),h=R(String.prototype.toLowerCase),g=R(String.prototype.toString),T=R(String.prototype.match),y=R(String.prototype.replace),E=R(String.prototype.indexOf),A=R(String.prototype.trim),_=R(Object.prototype.hasOwnProperty),S=R(RegExp.prototype.test),b=(N=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),r=1;r2&&void 0!==arguments[2]?arguments[2]:h;t&&t(e,null);let i=o.length;for(;i--;){let t=o[i];if("string"==typeof t){const e=r(t);e!==t&&(n(o)||(o[i]=e),t=e)}e[t]=!0}return e}function O(e){for(let t=0;t/gm),G=a(/\$\{[\w\W]*/gm),Y=a(/^data-[\-\w.\u00B7-\uFFFF]+$/),j=a(/^aria-[\-\w]+$/),X=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),q=a(/^(?:\w+script|data):/i),$=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),K=a(/^html$/i),V=a(/^[a-z][.\w]*(-[.\w]+)+$/i);var Z=Object.freeze({__proto__:null,ARIA_ATTR:j,ATTR_WHITESPACE:$,CUSTOM_ELEMENT:V,DATA_ATTR:Y,DOCTYPE_NAME:K,ERB_EXPR:W,IS_ALLOWED_URI:X,IS_SCRIPT_OR_DATA:q,MUSTACHE_EXPR:B,TMPLIT_EXPR:G});const J=1,Q=3,ee=7,te=8,ne=9,oe=function(){return"undefined"==typeof window?null:window};var re=function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:oe();const o=e=>t(e);if(o.version="3.2.6",o.removed=[],!n||!n.document||n.document.nodeType!==ne||!n.Element)return o.isSupported=!1,o;let{document:r}=n;const a=r,c=a.currentScript,{DocumentFragment:s,HTMLTemplateElement:N,Node:R,Element:O,NodeFilter:B,NamedNodeMap:W=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:G,DOMParser:Y,trustedTypes:j}=n,q=O.prototype,$=v(q,"cloneNode"),V=v(q,"remove"),re=v(q,"nextSibling"),ie=v(q,"childNodes"),ae=v(q,"parentNode");if("function"==typeof N){const e=r.createElement("template");e.content&&e.content.ownerDocument&&(r=e.content.ownerDocument)}let le,ce="";const{implementation:se,createNodeIterator:ue,createDocumentFragment:me,getElementsByTagName:pe}=r,{importNode:fe}=a;let de={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};o.isSupported="function"==typeof e&&"function"==typeof ae&&se&&void 0!==se.createHTMLDocument;const{MUSTACHE_EXPR:he,ERB_EXPR:ge,TMPLIT_EXPR:Te,DATA_ATTR:ye,ARIA_ATTR:Ee,IS_SCRIPT_OR_DATA:Ae,ATTR_WHITESPACE:_e,CUSTOM_ELEMENT:Se}=Z;let{IS_ALLOWED_URI:be}=Z,Ne=null;const Re=w({},[...L,...C,...x,...M,...U]);let we=null;const Oe=w({},[...z,...P,...H,...F]);let De=Object.seal(l(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,Le=null,Ce=!0,xe=!0,Ie=!1,Me=!0,ke=!1,Ue=!0,ze=!1,Pe=!1,He=!1,Fe=!1,Be=!1,We=!1,Ge=!0,Ye=!1,je=!0,Xe=!1,qe={},$e=null;const Ke=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Ve=null;const Ze=w({},["audio","video","img","source","image","track"]);let Je=null;const Qe=w({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),et="http://www.w3.org/1998/Math/MathML",tt="http://www.w3.org/2000/svg",nt="http://www.w3.org/1999/xhtml";let ot=nt,rt=!1,it=null;const at=w({},[et,tt,nt],g);let lt=w({},["mi","mo","mn","ms","mtext"]),ct=w({},["annotation-xml"]);const st=w({},["title","style","font","a","script"]);let ut=null;const mt=["application/xhtml+xml","text/html"];let pt=null,ft=null;const dt=r.createElement("form"),ht=function(e){return e instanceof RegExp||e instanceof Function},gt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ft||ft!==e){if(e&&"object"==typeof e||(e={}),e=D(e),ut=-1===mt.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,pt="application/xhtml+xml"===ut?g:h,Ne=_(e,"ALLOWED_TAGS")?w({},e.ALLOWED_TAGS,pt):Re,we=_(e,"ALLOWED_ATTR")?w({},e.ALLOWED_ATTR,pt):Oe,it=_(e,"ALLOWED_NAMESPACES")?w({},e.ALLOWED_NAMESPACES,g):at,Je=_(e,"ADD_URI_SAFE_ATTR")?w(D(Qe),e.ADD_URI_SAFE_ATTR,pt):Qe,Ve=_(e,"ADD_DATA_URI_TAGS")?w(D(Ze),e.ADD_DATA_URI_TAGS,pt):Ze,$e=_(e,"FORBID_CONTENTS")?w({},e.FORBID_CONTENTS,pt):Ke,ve=_(e,"FORBID_TAGS")?w({},e.FORBID_TAGS,pt):D({}),Le=_(e,"FORBID_ATTR")?w({},e.FORBID_ATTR,pt):D({}),qe=!!_(e,"USE_PROFILES")&&e.USE_PROFILES,Ce=!1!==e.ALLOW_ARIA_ATTR,xe=!1!==e.ALLOW_DATA_ATTR,Ie=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Me=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,ke=e.SAFE_FOR_TEMPLATES||!1,Ue=!1!==e.SAFE_FOR_XML,ze=e.WHOLE_DOCUMENT||!1,Fe=e.RETURN_DOM||!1,Be=e.RETURN_DOM_FRAGMENT||!1,We=e.RETURN_TRUSTED_TYPE||!1,He=e.FORCE_BODY||!1,Ge=!1!==e.SANITIZE_DOM,Ye=e.SANITIZE_NAMED_PROPS||!1,je=!1!==e.KEEP_CONTENT,Xe=e.IN_PLACE||!1,be=e.ALLOWED_URI_REGEXP||X,ot=e.NAMESPACE||nt,lt=e.MATHML_TEXT_INTEGRATION_POINTS||lt,ct=e.HTML_INTEGRATION_POINTS||ct,De=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&ht(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(De.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&ht(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(De.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(De.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ke&&(xe=!1),Be&&(Fe=!0),qe&&(Ne=w({},U),we=[],!0===qe.html&&(w(Ne,L),w(we,z)),!0===qe.svg&&(w(Ne,C),w(we,P),w(we,F)),!0===qe.svgFilters&&(w(Ne,x),w(we,P),w(we,F)),!0===qe.mathMl&&(w(Ne,M),w(we,H),w(we,F))),e.ADD_TAGS&&(Ne===Re&&(Ne=D(Ne)),w(Ne,e.ADD_TAGS,pt)),e.ADD_ATTR&&(we===Oe&&(we=D(we)),w(we,e.ADD_ATTR,pt)),e.ADD_URI_SAFE_ATTR&&w(Je,e.ADD_URI_SAFE_ATTR,pt),e.FORBID_CONTENTS&&($e===Ke&&($e=D($e)),w($e,e.FORBID_CONTENTS,pt)),je&&(Ne["#text"]=!0),ze&&w(Ne,["html","head","body"]),Ne.table&&(w(Ne,["tbody"]),delete ve.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');le=e.TRUSTED_TYPES_POLICY,ce=le.createHTML("")}else void 0===le&&(le=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const o="data-tt-policy-suffix";t&&t.hasAttribute(o)&&(n=t.getAttribute(o));const r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+r+" could not be created."),null}}(j,c)),null!==le&&"string"==typeof ce&&(ce=le.createHTML(""));i&&i(e),ft=e}},Tt=w({},[...C,...x,...I]),yt=w({},[...M,...k]),Et=function(e){f(o.removed,{element:e});try{ae(e).removeChild(e)}catch(t){V(e)}},At=function(e,t){try{f(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){f(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e)if(Fe||Be)try{Et(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},_t=function(e){let t=null,n=null;if(He)e=""+e;else{const t=T(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===ut&&ot===nt&&(e=''+e+"");const o=le?le.createHTML(e):e;if(ot===nt)try{t=(new Y).parseFromString(o,ut)}catch(e){}if(!t||!t.documentElement){t=se.createDocument(ot,"template",null);try{t.documentElement.innerHTML=rt?ce:o}catch(e){}}const i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),ot===nt?pe.call(t,ze?"html":"body")[0]:ze?t.documentElement:i},St=function(e){return ue.call(e.ownerDocument||e,e,B.SHOW_ELEMENT|B.SHOW_COMMENT|B.SHOW_TEXT|B.SHOW_PROCESSING_INSTRUCTION|B.SHOW_CDATA_SECTION,null)},bt=function(e){return e instanceof G&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof W)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},Nt=function(e){return"function"==typeof R&&e instanceof R};function Rt(e,t,n){u(e,(e=>{e.call(o,t,n,ft)}))}const wt=function(e){let t=null;if(Rt(de.beforeSanitizeElements,e,null),bt(e))return Et(e),!0;const n=pt(e.nodeName);if(Rt(de.uponSanitizeElement,e,{tagName:n,allowedTags:Ne}),Ue&&e.hasChildNodes()&&!Nt(e.firstElementChild)&&S(/<[/\w!]/g,e.innerHTML)&&S(/<[/\w!]/g,e.textContent))return Et(e),!0;if(e.nodeType===ee)return Et(e),!0;if(Ue&&e.nodeType===te&&S(/<[/\w]/g,e.data))return Et(e),!0;if(!Ne[n]||ve[n]){if(!ve[n]&&Dt(n)){if(De.tagNameCheck instanceof RegExp&&S(De.tagNameCheck,n))return!1;if(De.tagNameCheck instanceof Function&&De.tagNameCheck(n))return!1}if(je&&!$e[n]){const t=ae(e)||e.parentNode,n=ie(e)||e.childNodes;if(n&&t){for(let o=n.length-1;o>=0;--o){const r=$(n[o],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,re(e))}}}return Et(e),!0}return e instanceof O&&!function(e){let t=ae(e);t&&t.tagName||(t={namespaceURI:ot,tagName:"template"});const n=h(e.tagName),o=h(t.tagName);return!!it[e.namespaceURI]&&(e.namespaceURI===tt?t.namespaceURI===nt?"svg"===n:t.namespaceURI===et?"svg"===n&&("annotation-xml"===o||lt[o]):Boolean(Tt[n]):e.namespaceURI===et?t.namespaceURI===nt?"math"===n:t.namespaceURI===tt?"math"===n&&ct[o]:Boolean(yt[n]):e.namespaceURI===nt?!(t.namespaceURI===tt&&!ct[o])&&!(t.namespaceURI===et&&!lt[o])&&!yt[n]&&(st[n]||!Tt[n]):!("application/xhtml+xml"!==ut||!it[e.namespaceURI]))}(e)?(Et(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!S(/<\/no(script|embed|frames)/i,e.innerHTML)?(ke&&e.nodeType===Q&&(t=e.textContent,u([he,ge,Te],(e=>{t=y(t,e," ")})),e.textContent!==t&&(f(o.removed,{element:e.cloneNode()}),e.textContent=t)),Rt(de.afterSanitizeElements,e,null),!1):(Et(e),!0)},Ot=function(e,t,n){if(Ge&&("id"===t||"name"===t)&&(n in r||n in dt))return!1;if(xe&&!Le[t]&&S(ye,t));else if(Ce&&S(Ee,t));else if(!we[t]||Le[t]){if(!(Dt(e)&&(De.tagNameCheck instanceof RegExp&&S(De.tagNameCheck,e)||De.tagNameCheck instanceof Function&&De.tagNameCheck(e))&&(De.attributeNameCheck instanceof RegExp&&S(De.attributeNameCheck,t)||De.attributeNameCheck instanceof Function&&De.attributeNameCheck(t))||"is"===t&&De.allowCustomizedBuiltInElements&&(De.tagNameCheck instanceof RegExp&&S(De.tagNameCheck,n)||De.tagNameCheck instanceof Function&&De.tagNameCheck(n))))return!1}else if(Je[t]);else if(S(be,y(n,_e,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==E(n,"data:")||!Ve[e]){if(Ie&&!S(Ae,y(n,_e,"")));else if(n)return!1}else;return!0},Dt=function(e){return"annotation-xml"!==e&&T(e,Se)},vt=function(e){Rt(de.beforeSanitizeAttributes,e,null);const{attributes:t}=e;if(!t||bt(e))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:we,forceKeepAttr:void 0};let r=t.length;for(;r--;){const i=t[r],{name:a,namespaceURI:l,value:c}=i,s=pt(a),m=c;let f="value"===a?m:A(m);if(n.attrName=s,n.attrValue=f,n.keepAttr=!0,n.forceKeepAttr=void 0,Rt(de.uponSanitizeAttribute,e,n),f=n.attrValue,!Ye||"id"!==s&&"name"!==s||(At(a,e),f="user-content-"+f),Ue&&S(/((--!?|])>)|<\/(style|title)/i,f)){At(a,e);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){At(a,e);continue}if(!Me&&S(/\/>/i,f)){At(a,e);continue}ke&&u([he,ge,Te],(e=>{f=y(f,e," ")}));const d=pt(e.nodeName);if(Ot(d,s,f)){if(le&&"object"==typeof j&&"function"==typeof j.getAttributeType)if(l);else switch(j.getAttributeType(d,s)){case"TrustedHTML":f=le.createHTML(f);break;case"TrustedScriptURL":f=le.createScriptURL(f)}if(f!==m)try{l?e.setAttributeNS(l,a,f):e.setAttribute(a,f),bt(e)?Et(e):p(o.removed)}catch(t){At(a,e)}}else At(a,e)}Rt(de.afterSanitizeAttributes,e,null)},Lt=function e(t){let n=null;const o=St(t);for(Rt(de.beforeSanitizeShadowDOM,t,null);n=o.nextNode();)Rt(de.uponSanitizeShadowNode,n,null),wt(n),vt(n),n.content instanceof s&&e(n.content);Rt(de.afterSanitizeShadowDOM,t,null)};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,i=null,l=null;if(rt=!e,rt&&(e="\x3c!--\x3e"),"string"!=typeof e&&!Nt(e)){if("function"!=typeof e.toString)throw b("toString is not a function");if("string"!=typeof(e=e.toString()))throw b("dirty is not a string, aborting")}if(!o.isSupported)return e;if(Pe||gt(t),o.removed=[],"string"==typeof e&&(Xe=!1),Xe){if(e.nodeName){const t=pt(e.nodeName);if(!Ne[t]||ve[t])throw b("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof R)n=_t("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),r.nodeType===J&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r);else{if(!Fe&&!ke&&!ze&&-1===e.indexOf("<"))return le&&We?le.createHTML(e):e;if(n=_t(e),!n)return Fe?null:We?ce:""}n&&He&&Et(n.firstChild);const c=St(Xe?e:n);for(;i=c.nextNode();)wt(i),vt(i),i.content instanceof s&&Lt(i.content);if(Xe)return e;if(Fe){if(Be)for(l=me.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(we.shadowroot||we.shadowrootmode)&&(l=fe.call(a,l,!0)),l}let m=ze?n.outerHTML:n.innerHTML;return ze&&Ne["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&S(K,n.ownerDocument.doctype.name)&&(m="\n"+m),ke&&u([he,ge,Te],(e=>{m=y(m,e," ")})),le&&We?le.createHTML(m):m},o.setConfig=function(){gt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Pe=!0},o.clearConfig=function(){ft=null,Pe=!1},o.isValidAttribute=function(e,t,n){ft||gt({});const o=pt(e),r=pt(t);return Ot(o,r,n)},o.addHook=function(e,t){"function"==typeof t&&f(de[e],t)},o.removeHook=function(e,t){if(void 0!==t){const n=m(de[e],t);return-1===n?void 0:d(de[e],n,1)[0]}return p(de[e])},o.removeHooks=function(e){de[e]=[]},o.removeAllHooks=function(){de={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},o}();return re})); +//# sourceMappingURL=purify.min.js.map