From 3277b02dfb73a7727f1e00078befc648699ee6dd Mon Sep 17 00:00:00 2001 From: SethBurkart123 Date: Thu, 27 Feb 2025 17:20:27 +1100 Subject: [PATCH] feat: kofi + update dompurify function --- src/SEQTA.ts | 11 +++++++++++ src/resources/kofi.png | Bin 0 -> 3946 bytes src/seqta/utils/stringToHTML.ts | 14 +++++++++++--- 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/resources/kofi.png diff --git a/src/SEQTA.ts b/src/SEQTA.ts index 2df60db7..d2e2a438 100644 --- a/src/SEQTA.ts +++ b/src/SEQTA.ts @@ -32,6 +32,7 @@ import LogoLightOutline from '@/resources/icons/betterseqta-light-outline.png' import icon48 from '@/resources/icons/icon-48.png?base64' import assessmentsicon from '@/seqta/icons/assessmentsIcon' import coursesicon from '@/seqta/icons/coursesIcon' +import kofi from '@/resources/kofi.png' // Stylesheets import iframeCSS from '@/css/iframe.scss?raw' @@ -337,6 +338,10 @@ export function OpenWhatsNewPopup() { `, ).firstChild + const kofi_url = browser.runtime.getURL(kofi) + + console.log(kofi_url) + let footer = stringToHTML( /* html */ `
@@ -358,6 +363,12 @@ export function OpenWhatsNewPopup() {
+ +
+ + Buy Me a Coffee at ko-fi.com + +
`).firstChild diff --git a/src/resources/kofi.png b/src/resources/kofi.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ed4045e60b3e831ddae2da9168a3c6af2bb010 GIT binary patch literal 3946 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 Ef?s>bumAu6 literal 0 HcmV?d00001 diff --git a/src/seqta/utils/stringToHTML.ts b/src/seqta/utils/stringToHTML.ts index 37449f60..0c1a8d7d 100644 --- a/src/seqta/utils/stringToHTML.ts +++ b/src/seqta/utils/stringToHTML.ts @@ -1,12 +1,20 @@ import DOMPurify from 'dompurify'; export default function stringToHTML(str: string, styles = false) { - var parser = new DOMParser(); - str = DOMPurify.sanitize(str, { ADD_ATTR: ['onclick'] }); - var doc = parser.parseFromString(str, 'text/html'); + const parser = new DOMParser(); + + + str = DOMPurify.sanitize(str, { + ADD_ATTR: ['onclick'], + ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|chrome-extension):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i + }); + + const doc = parser.parseFromString(str, 'text/html'); + if (styles) { doc.body.style.cssText = 'height: auto; overflow: scroll; margin: 0px; background: var(--background-primary);'; } + return doc.body; } \ No newline at end of file