diff --git a/goodtube.js b/goodtube.js index 9372c92..d46aced 100644 --- a/goodtube.js +++ b/goodtube.js @@ -1,13 +1,15 @@ +/* Imports +------------------------------------------------------------------------------------------ */ +// https://www.npmjs.com/package/dompurify +import DOMPurify from 'DOMPurify'; + + (function () { 'use strict'; /* Setup the CSP (content security policy) ------------------------------------------------------------------------------------------ */ - // Include DOM Purify (https://github.com/cure53/DOMPurify/blob/main/dist/purify.min.js) - // We're placing this inline this because fetching it from an external repo which don't have control over is likely unreliable in the long term - var Xt = Object.defineProperty; var c = (r, o) => Xt(r, "name", { value: o, configurable: !0 }); var { entries: gt, setPrototypeOf: ft, isFrozen: jt, getPrototypeOf: Vt, getOwnPropertyDescriptor: $t } = Object, { freeze: R, seal: b, create: ve } = Object, { apply: ke, construct: Ue } = typeof Reflect < "u" && Reflect; R || (R = c(function (o) { return o }, "freeze")); b || (b = c(function (o) { return o }, "seal")); ke || (ke = c(function (o, l) { for (var a = arguments.length, f = new Array(a > 2 ? a - 2 : 0), y = 2; y < a; y++)f[y - 2] = arguments[y]; return o.apply(l, f) }, "apply")); Ue || (Ue = c(function (o) { for (var l = arguments.length, a = new Array(l > 1 ? l - 1 : 0), f = 1; f < l; f++)a[f - 1] = arguments[f]; return new o(...a) }, "construct")); var fe = O(Array.prototype.forEach), qt = O(Array.prototype.lastIndexOf), ut = O(Array.prototype.pop), K = O(Array.prototype.push), Kt = O(Array.prototype.splice), me = O(String.prototype.toLowerCase), Ie = O(String.prototype.toString), Ce = O(String.prototype.match), Z = O(String.prototype.replace), Zt = O(String.prototype.indexOf), Jt = O(String.prototype.trim), D = O(Object.prototype.hasOwnProperty), S = O(RegExp.prototype.test), J = Qt(TypeError); function O(r) { return function (o) { o instanceof RegExp && (o.lastIndex = 0); for (var l = arguments.length, a = new Array(l > 1 ? l - 1 : 0), f = 1; f < l; f++)a[f - 1] = arguments[f]; return ke(r, o, a) } } c(O, "unapply"); function Qt(r) { return function () { for (var o = arguments.length, l = new Array(o), a = 0; a < o; a++)l[a] = arguments[a]; return Ue(r, l) } } c(Qt, "unconstruct"); function s(r, o) { let l = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : me; ft && ft(r, null); let a = o.length; for (; a--;) { let f = o[a]; if (typeof f == "string") { let y = l(f); y !== f && (jt(o) || (o[a] = y), f = y) } r[f] = !0 } return r } c(s, "addToSet"); function en(r) { for (let o = 0; o < r.length; o++)D(r, o) || (r[o] = null); return r } c(en, "cleanArray"); function w(r) { let o = ve(null); for (let [l, a] of gt(r)) D(r, l) && (Array.isArray(a) ? o[l] = en(a) : a && typeof a == "object" && a.constructor === Object ? o[l] = w(a) : o[l] = a); return o } c(w, "clone"); function Q(r, o) { for (; r !== null;) { let a = $t(r, o); if (a) { if (a.get) return O(a.get); if (typeof a.value == "function") return O(a.value) } r = Vt(r) } function l() { return null } return c(l, "fallbackValue"), l } c(Q, "lookupGetter"); var mt = R(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "search", "section", "select", "shadow", "slot", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]), Me = R(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "enterkeyhint", "exportparts", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "inputmode", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "part", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]), we = R(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]), tn = R(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]), xe = R(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]), nn = R(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]), pt = R(["#text"]), dt = R(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "exportparts", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inert", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "part", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "slot", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]), Pe = R(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "mask-type", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]), Tt = R(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]), ue = R(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]), on = b(/\{\{[\w\W]*|[\w\W]*\}\}/gm), an = b(/<%[\w\W]*|[\w\W]*%>/gm), rn = b(/\$\{[\w\W]*/gm), sn = b(/^data-[\-\w.\u00B7-\uFFFF]+$/), ln = b(/^aria-[\-\w]+$/), ht = b(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i), cn = b(/^(?:\w+script|data):/i), fn = b(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g), At = b(/^html$/i), un = b(/^[a-z][.\w]*(-[.\w]+)+$/i), Et = Object.freeze({ __proto__: null, ARIA_ATTR: ln, ATTR_WHITESPACE: fn, CUSTOM_ELEMENT: un, DATA_ATTR: sn, DOCTYPE_NAME: At, ERB_EXPR: an, IS_ALLOWED_URI: ht, IS_SCRIPT_OR_DATA: cn, MUSTACHE_EXPR: on, TMPLIT_EXPR: rn }), ee = { element: 1, attribute: 2, text: 3, cdataSection: 4, entityReference: 5, entityNode: 6, progressingInstruction: 7, comment: 8, document: 9, documentType: 10, documentFragment: 11, notation: 12 }, mn = c(function () { return typeof window > "u" ? null : window }, "getGlobal"), pn = c(function (o, l) { if (typeof o != "object" || typeof o.createPolicy != "function") return null; let a = null, f = "data-tt-policy-suffix"; l && l.hasAttribute(f) && (a = l.getAttribute(f)); let y = "dompurify" + (a ? "#" + a : ""); try { return o.createPolicy(y, { createHTML(v) { return v }, createScriptURL(v) { return v } }) } catch { return console.warn("TrustedTypes policy " + y + " could not be created."), null } }, "_createTrustedTypesPolicy"), _t = c(function () { return { afterSanitizeAttributes: [], afterSanitizeElements: [], afterSanitizeShadowDOM: [], beforeSanitizeAttributes: [], beforeSanitizeElements: [], beforeSanitizeShadowDOM: [], uponSanitizeAttribute: [], uponSanitizeElement: [], uponSanitizeShadowNode: [] } }, "_createHooksMap"); function St() { let r = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : mn(), o = c(i => St(i), "DOMPurify"); if (o.version = "3.3.0", o.removed = [], !r || !r.document || r.document.nodeType !== ee.document || !r.Element) return o.isSupported = !1, o; let { document: l } = r, a = l, f = a.currentScript, { DocumentFragment: y, HTMLTemplateElement: v, Node: pe, Element: Fe, NodeFilter: Y, NamedNodeMap: Rt = r.NamedNodeMap || r.MozNamedAttrMap, HTMLFormElement: Ot, DOMParser: yt, trustedTypes: te } = r, X = Fe.prototype, Lt = Q(X, "cloneNode"), bt = Q(X, "remove"), Dt = Q(X, "nextSibling"), Nt = Q(X, "childNodes"), ne = Q(X, "parentNode"); if (typeof v == "function") { let i = l.createElement("template"); i.content && i.content.ownerDocument && (l = i.content.ownerDocument) } let h, j = "", { implementation: de, createNodeIterator: It, createDocumentFragment: Ct, getElementsByTagName: Mt } = l, { importNode: wt } = a, A = _t(); o.isSupported = typeof gt == "function" && typeof ne == "function" && de && de.createHTMLDocument !== void 0; let { MUSTACHE_EXPR: Te, ERB_EXPR: Ee, TMPLIT_EXPR: _e, DATA_ATTR: xt, ARIA_ATTR: Pt, IS_SCRIPT_OR_DATA: vt, ATTR_WHITESPACE: He, CUSTOM_ELEMENT: kt } = Et, { IS_ALLOWED_URI: ze } = Et, d = null, Ge = s({}, [...mt, ...Me, ...we, ...xe, ...pt]), E = null, We = s({}, [...dt, ...Pe, ...Tt, ...ue]), m = Object.seal(ve(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 } })), V = null, ge = null, k = Object.seal(ve(null, { tagCheck: { writable: !0, configurable: !1, enumerable: !0, value: null }, attributeCheck: { writable: !0, configurable: !1, enumerable: !0, value: null } })), Be = !0, he = !0, Ye = !1, Xe = !0, U = !1, oe = !0, x = !1, Ae = !1, Se = !1, F = !1, ie = !1, ae = !1, je = !0, Ve = !1, Ut = "user-content-", Re = !0, $ = !1, H = {}, z = null, $e = s({}, ["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"]), qe = null, Ke = s({}, ["audio", "video", "img", "source", "image", "track"]), Oe = null, Ze = s({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]), re = "http://www.w3.org/1998/Math/MathML", se = "http://www.w3.org/2000/svg", I = "http://www.w3.org/1999/xhtml", G = I, ye = !1, Le = null, Ft = s({}, [re, se, I], Ie), le = s({}, ["mi", "mo", "mn", "ms", "mtext"]), ce = s({}, ["annotation-xml"]), Ht = s({}, ["title", "style", "font", "a", "script"]), q = null, zt = ["application/xhtml+xml", "text/html"], Gt = "text/html", T = null, W = null, Wt = l.createElement("form"), Je = c(function (e) { return e instanceof RegExp || e instanceof Function }, "isRegexOrFunction"), be = c(function () { let e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; if (!(W && W === e)) { if ((!e || typeof e != "object") && (e = {}), e = w(e), q = zt.indexOf(e.PARSER_MEDIA_TYPE) === -1 ? Gt : e.PARSER_MEDIA_TYPE, T = q === "application/xhtml+xml" ? Ie : me, d = D(e, "ALLOWED_TAGS") ? s({}, e.ALLOWED_TAGS, T) : Ge, E = D(e, "ALLOWED_ATTR") ? s({}, e.ALLOWED_ATTR, T) : We, Le = D(e, "ALLOWED_NAMESPACES") ? s({}, e.ALLOWED_NAMESPACES, Ie) : Ft, Oe = D(e, "ADD_URI_SAFE_ATTR") ? s(w(Ze), e.ADD_URI_SAFE_ATTR, T) : Ze, qe = D(e, "ADD_DATA_URI_TAGS") ? s(w(Ke), e.ADD_DATA_URI_TAGS, T) : Ke, z = D(e, "FORBID_CONTENTS") ? s({}, e.FORBID_CONTENTS, T) : $e, V = D(e, "FORBID_TAGS") ? s({}, e.FORBID_TAGS, T) : w({}), ge = D(e, "FORBID_ATTR") ? s({}, e.FORBID_ATTR, T) : w({}), H = D(e, "USE_PROFILES") ? e.USE_PROFILES : !1, Be = e.ALLOW_ARIA_ATTR !== !1, he = e.ALLOW_DATA_ATTR !== !1, Ye = e.ALLOW_UNKNOWN_PROTOCOLS || !1, Xe = e.ALLOW_SELF_CLOSE_IN_ATTR !== !1, U = e.SAFE_FOR_TEMPLATES || !1, oe = e.SAFE_FOR_XML !== !1, x = e.WHOLE_DOCUMENT || !1, F = e.RETURN_DOM || !1, ie = e.RETURN_DOM_FRAGMENT || !1, ae = e.RETURN_TRUSTED_TYPE || !1, Se = e.FORCE_BODY || !1, je = e.SANITIZE_DOM !== !1, Ve = e.SANITIZE_NAMED_PROPS || !1, Re = e.KEEP_CONTENT !== !1, $ = e.IN_PLACE || !1, ze = e.ALLOWED_URI_REGEXP || ht, G = e.NAMESPACE || I, le = e.MATHML_TEXT_INTEGRATION_POINTS || le, ce = e.HTML_INTEGRATION_POINTS || ce, m = e.CUSTOM_ELEMENT_HANDLING || {}, e.CUSTOM_ELEMENT_HANDLING && Je(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && (m.tagNameCheck = e.CUSTOM_ELEMENT_HANDLING.tagNameCheck), e.CUSTOM_ELEMENT_HANDLING && Je(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && (m.attributeNameCheck = e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), e.CUSTOM_ELEMENT_HANDLING && typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements == "boolean" && (m.allowCustomizedBuiltInElements = e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), U && (he = !1), ie && (F = !0), H && (d = s({}, pt), E = [], H.html === !0 && (s(d, mt), s(E, dt)), H.svg === !0 && (s(d, Me), s(E, Pe), s(E, ue)), H.svgFilters === !0 && (s(d, we), s(E, Pe), s(E, ue)), H.mathMl === !0 && (s(d, xe), s(E, Tt), s(E, ue))), e.ADD_TAGS && (typeof e.ADD_TAGS == "function" ? k.tagCheck = e.ADD_TAGS : (d === Ge && (d = w(d)), s(d, e.ADD_TAGS, T))), e.ADD_ATTR && (typeof e.ADD_ATTR == "function" ? k.attributeCheck = e.ADD_ATTR : (E === We && (E = w(E)), s(E, e.ADD_ATTR, T))), e.ADD_URI_SAFE_ATTR && s(Oe, e.ADD_URI_SAFE_ATTR, T), e.FORBID_CONTENTS && (z === $e && (z = w(z)), s(z, e.FORBID_CONTENTS, T)), Re && (d["#text"] = !0), x && s(d, ["html", "head", "body"]), d.table && (s(d, ["tbody"]), delete V.tbody), e.TRUSTED_TYPES_POLICY) { if (typeof e.TRUSTED_TYPES_POLICY.createHTML != "function") throw J('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); if (typeof e.TRUSTED_TYPES_POLICY.createScriptURL != "function") throw J('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); h = e.TRUSTED_TYPES_POLICY, j = h.createHTML("") } else h === void 0 && (h = pn(te, f)), h !== null && typeof j == "string" && (j = h.createHTML("")); R && R(e), W = e } }, "_parseConfig"), Qe = s({}, [...Me, ...we, ...tn]), et = s({}, [...xe, ...nn]), Bt = c(function (e) { let t = ne(e); (!t || !t.tagName) && (t = { namespaceURI: G, tagName: "template" }); let n = me(e.tagName), u = me(t.tagName); return Le[e.namespaceURI] ? e.namespaceURI === se ? t.namespaceURI === I ? n === "svg" : t.namespaceURI === re ? n === "svg" && (u === "annotation-xml" || le[u]) : !!Qe[n] : e.namespaceURI === re ? t.namespaceURI === I ? n === "math" : t.namespaceURI === se ? n === "math" && ce[u] : !!et[n] : e.namespaceURI === I ? t.namespaceURI === se && !ce[u] || t.namespaceURI === re && !le[u] ? !1 : !et[n] && (Ht[n] || !Qe[n]) : !!(q === "application/xhtml+xml" && Le[e.namespaceURI]) : !1 }, "_checkValidNamespace"), N = c(function (e) { K(o.removed, { element: e }); try { ne(e).removeChild(e) } catch { bt(e) } }, "_forceRemove"), P = c(function (e, t) { try { K(o.removed, { attribute: t.getAttributeNode(e), from: t }) } catch { K(o.removed, { attribute: null, from: t }) } if (t.removeAttribute(e), e === "is") if (F || ie) try { N(t) } catch {} else try { t.setAttribute(e, "") } catch {} }, "_removeAttribute"), tt = c(function (e) { let t = null, n = null; if (Se) e = "" + e; else { let p = Ce(e, /^[\r\n\t ]+/); n = p && p[0] } q === "application/xhtml+xml" && G === I && (e = '' + e + ""); let u = h ? h.createHTML(e) : e; if (G === I) try { t = new yt().parseFromString(u, q) } catch {} if (!t || !t.documentElement) { t = de.createDocument(G, "template", null); try { t.documentElement.innerHTML = ye ? j : u } catch {} } let g = t.body || t.documentElement; return e && n && g.insertBefore(l.createTextNode(n), g.childNodes[0] || null), G === I ? Mt.call(t, x ? "html" : "body")[0] : x ? t.documentElement : g }, "_initDocument"), nt = c(function (e) { return It.call(e.ownerDocument || e, e, Y.SHOW_ELEMENT | Y.SHOW_COMMENT | Y.SHOW_TEXT | Y.SHOW_PROCESSING_INSTRUCTION | Y.SHOW_CDATA_SECTION, null) }, "_createNodeIterator"), De = c(function (e) { return e instanceof Ot && (typeof e.nodeName != "string" || typeof e.textContent != "string" || typeof e.removeChild != "function" || !(e.attributes instanceof Rt) || typeof e.removeAttribute != "function" || typeof e.setAttribute != "function" || typeof e.namespaceURI != "string" || typeof e.insertBefore != "function" || typeof e.hasChildNodes != "function") }, "_isClobbered"), ot = c(function (e) { return typeof pe == "function" && e instanceof pe }, "_isNode"); function C(i, e, t) { fe(i, n => { n.call(o, e, t, W) }) } c(C, "_executeHooks"); let it = c(function (e) { let t = null; if (C(A.beforeSanitizeElements, e, null), De(e)) return N(e), !0; let n = T(e.nodeName); if (C(A.uponSanitizeElement, e, { tagName: n, allowedTags: d }), oe && e.hasChildNodes() && !ot(e.firstElementChild) && S(/<[/\w!]/g, e.innerHTML) && S(/<[/\w!]/g, e.textContent) || e.nodeType === ee.progressingInstruction || oe && e.nodeType === ee.comment && S(/<[/\w]/g, e.data)) return N(e), !0; if (!(k.tagCheck instanceof Function && k.tagCheck(n)) && (!d[n] || V[n])) { if (!V[n] && rt(n) && (m.tagNameCheck instanceof RegExp && S(m.tagNameCheck, n) || m.tagNameCheck instanceof Function && m.tagNameCheck(n))) return !1; if (Re && !z[n]) { let u = ne(e) || e.parentNode, g = Nt(e) || e.childNodes; if (g && u) { let p = g.length; for (let L = p - 1; L >= 0; --L) { let M = Lt(g[L], !0); M.__removalCount = (e.__removalCount || 0) + 1, u.insertBefore(M, Dt(e)) } } } return N(e), !0 } return e instanceof Fe && !Bt(e) || (n === "noscript" || n === "noembed" || n === "noframes") && S(/<\/no(script|embed|frames)/i, e.innerHTML) ? (N(e), !0) : (U && e.nodeType === ee.text && (t = e.textContent, fe([Te, Ee, _e], u => { t = Z(t, u, " ") }), e.textContent !== t && (K(o.removed, { element: e.cloneNode() }), e.textContent = t)), C(A.afterSanitizeElements, e, null), !1) }, "_sanitizeElements"), at = c(function (e, t, n) { if (je && (t === "id" || t === "name") && (n in l || n in Wt)) return !1; if (!(he && !ge[t] && S(xt, t))) { if (!(Be && S(Pt, t))) { if (!(k.attributeCheck instanceof Function && k.attributeCheck(t, e))) { if (!E[t] || ge[t]) { if (!(rt(e) && (m.tagNameCheck instanceof RegExp && S(m.tagNameCheck, e) || m.tagNameCheck instanceof Function && m.tagNameCheck(e)) && (m.attributeNameCheck instanceof RegExp && S(m.attributeNameCheck, t) || m.attributeNameCheck instanceof Function && m.attributeNameCheck(t, e)) || t === "is" && m.allowCustomizedBuiltInElements && (m.tagNameCheck instanceof RegExp && S(m.tagNameCheck, n) || m.tagNameCheck instanceof Function && m.tagNameCheck(n)))) return !1 } else if (!Oe[t]) { if (!S(ze, Z(n, He, ""))) { if (!((t === "src" || t === "xlink:href" || t === "href") && e !== "script" && Zt(n, "data:") === 0 && qe[e])) { if (!(Ye && !S(vt, Z(n, He, "")))) { if (n) return !1 } } } } } } } return !0 }, "_isValidAttribute"), rt = c(function (e) { return e !== "annotation-xml" && Ce(e, kt) }, "_isBasicCustomElement"), st = c(function (e) { C(A.beforeSanitizeAttributes, e, null); let { attributes: t } = e; if (!t || De(e)) return; let n = { attrName: "", attrValue: "", keepAttr: !0, allowedAttributes: E, forceKeepAttr: void 0 }, u = t.length; for (; u--;) { let g = t[u], { name: p, namespaceURI: L, value: M } = g, B = T(p), Ne = M, _ = p === "value" ? Ne : Jt(Ne); if (n.attrName = B, n.attrValue = _, n.keepAttr = !0, n.forceKeepAttr = void 0, C(A.uponSanitizeAttribute, e, n), _ = n.attrValue, Ve && (B === "id" || B === "name") && (P(p, e), _ = Ut + _), oe && S(/((--!?|])>)|<\/(style|title|textarea)/i, _)) { P(p, e); continue } if (B === "attributename" && Ce(_, "href")) { P(p, e); continue } if (n.forceKeepAttr) continue; if (!n.keepAttr) { P(p, e); continue } if (!Xe && S(/\/>/i, _)) { P(p, e); continue } U && fe([Te, Ee, _e], ct => { _ = Z(_, ct, " ") }); let lt = T(e.nodeName); if (!at(lt, B, _)) { P(p, e); continue } if (h && typeof te == "object" && typeof te.getAttributeType == "function" && !L) switch (te.getAttributeType(lt, B)) { case "TrustedHTML": { _ = h.createHTML(_); break } case "TrustedScriptURL": { _ = h.createScriptURL(_); break } }if (_ !== Ne) try { L ? e.setAttributeNS(L, p, _) : e.setAttribute(p, _), De(e) ? N(e) : ut(o.removed) } catch { P(p, e) } } C(A.afterSanitizeAttributes, e, null) }, "_sanitizeAttributes"), Yt = c(function i(e) { let t = null, n = nt(e); for (C(A.beforeSanitizeShadowDOM, e, null); t = n.nextNode();)C(A.uponSanitizeShadowNode, t, null), it(t), st(t), t.content instanceof y && i(t.content); C(A.afterSanitizeShadowDOM, e, null) }, "_sanitizeShadowDOM"); return o.sanitize = function (i) { let e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, t = null, n = null, u = null, g = null; if (ye = !i, ye && (i = ""), typeof i != "string" && !ot(i)) if (typeof i.toString == "function") { if (i = i.toString(), typeof i != "string") throw J("dirty is not a string, aborting") } else throw J("toString is not a function"); if (!o.isSupported) return i; if (Ae || be(e), o.removed = [], typeof i == "string" && ($ = !1), $) { if (i.nodeName) { let M = T(i.nodeName); if (!d[M] || V[M]) throw J("root node is forbidden and cannot be sanitized in-place") } } else if (i instanceof pe) t = tt(""), n = t.ownerDocument.importNode(i, !0), n.nodeType === ee.element && n.nodeName === "BODY" || n.nodeName === "HTML" ? t = n : t.appendChild(n); else { if (!F && !U && !x && i.indexOf("<") === -1) return h && ae ? h.createHTML(i) : i; if (t = tt(i), !t) return F ? null : ae ? j : "" } t && Se && N(t.firstChild); let p = nt($ ? i : t); for (; u = p.nextNode();)it(u), st(u), u.content instanceof y && Yt(u.content); if ($) return i; if (F) { if (ie) for (g = Ct.call(t.ownerDocument); t.firstChild;)g.appendChild(t.firstChild); else g = t; return (E.shadowroot || E.shadowrootmode) && (g = wt.call(a, g, !0)), g } let L = x ? t.outerHTML : t.innerHTML; return x && d["!doctype"] && t.ownerDocument && t.ownerDocument.doctype && t.ownerDocument.doctype.name && S(At, t.ownerDocument.doctype.name) && (L = "` + L), U && fe([Te, Ee, _e], M => { L = Z(L, M, " ") }), h && ae ? h.createHTML(L) : L }, o.setConfig = function () { let i = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; be(i), Ae = !0 }, o.clearConfig = function () { W = null, Ae = !1 }, o.isValidAttribute = function (i, e, t) { W || be({}); let n = T(i), u = T(e); return at(n, u, t) }, o.addHook = function (i, e) { typeof e == "function" && K(A[i], e) }, o.removeHook = function (i, e) { if (e !== void 0) { let t = qt(A[i], e); return t === -1 ? void 0 : Kt(A[i], t, 1)[0] } return ut(A[i]) }, o.removeHooks = function (i) { A[i] = [] }, o.removeAllHooks = function () { A = _t() }, o } c(St, "createDOMPurify"); var DOMPurify = St(); - // Create a custom CSP policy (using DOM Purify for added security) let goodTube_csp = false; if (window.trustedTypes && window.trustedTypes.createPolicy && DOMPurify) { diff --git a/goodtube.min.js b/goodtube.min.js index b573d33..d9702e3 100644 --- a/goodtube.min.js +++ b/goodtube.min.js @@ -1,8 +1,9 @@ -(()=>{var un=Object.defineProperty;var a=(wt,f)=>un(wt,"name",{value:f,configurable:!0});(function(){"use strict";var wt=Object.defineProperty,f=a((e,t)=>wt(e,"name",{value:t,configurable:!0}),"c"),{entries:mo,setPrototypeOf:go,isFrozen:ji,getPrototypeOf:qi,getOwnPropertyDescriptor:Wi}=Object,{freeze:R,seal:V,create:At}=Object,{apply:Et,construct:St}=typeof Reflect<"u"&&Reflect;R||(R=f(function(e){return e},"freeze")),V||(V=f(function(e){return e},"seal")),Et||(Et=f(function(e,t){for(var i=arguments.length,n=new Array(i>2?i-2:0),s=2;s1?t-1:0),n=1;n1?i-1:0),s=1;s2&&arguments[2]!==void 0?arguments[2]:je;go&&go(e,null);let n=t.length;for(;n--;){let s=t[n];if(typeof s=="string"){let c=i(s);c!==s&&(ji(t)||(t[n]=c),s=c)}e[s]=!0}return e}a(p,"s"),f(p,"addToSet");function _o(e){for(let t=0;t/gm),ia=V(/\$\{[\w\W]*/gm),aa=V(/^data-[\-\w.\u00B7-\uFFFF]+$/),na=V(/^aria-[\-\w]+$/),ko=V(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ra=V(/^(?:\w+script|data):/i),da=V(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),wo=V(/^html$/i),la=V(/^[a-z][.\w]*(-[.\w]+)+$/i),Ao=Object.freeze({__proto__:null,ARIA_ATTR:na,ATTR_WHITESPACE:da,CUSTOM_ELEMENT:la,DATA_ATTR:aa,DOCTYPE_NAME:wo,ERB_EXPR:oa,IS_ALLOWED_URI:ko,IS_SCRIPT_OR_DATA:ra,MUSTACHE_EXPR:ta,TMPLIT_EXPR:ia}),Ne={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},sa=f(function(){return typeof window>"u"?null:window},"getGlobal"),ua=f(function(e,t){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let i=null,n="data-tt-policy-suffix";t&&t.hasAttribute(n)&&(i=t.getAttribute(n));let s="dompurify"+(i?"#"+i:"");try{return e.createPolicy(s,{createHTML(c){return c},createScriptURL(c){return c}})}catch{return console.warn("TrustedTypes policy "+s+" could not be created."),null}},"_createTrustedTypesPolicy"),Eo=f(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");function Nt(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:sa(),t=f(o=>Nt(o),"DOMPurify");if(t.version="3.3.0",t.removed=[],!e||!e.document||e.document.nodeType!==Ne.document||!e.Element)return t.isSupported=!1,t;let{document:i}=e,n=i,s=n.currentScript,{DocumentFragment:c,HTMLTemplateElement:g,Node:w,Element:x,NodeFilter:A,NamedNodeMap:oe=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:Fe,DOMParser:z,trustedTypes:ce}=e,ie=x.prototype,pt=ge(ie,"cloneNode"),Ue=ge(ie,"remove"),ft=ge(ie,"nextSibling"),H=ge(ie,"childNodes"),Y=ge(ie,"parentNode");if(typeof g=="function"){let o=i.createElement("template");o.content&&o.content.ownerDocument&&(i=o.content.ownerDocument)}let h,B="",{implementation:ke,createNodeIterator:mt,createDocumentFragment:gt,getElementsByTagName:bt}=i,{importNode:Za}=n,O=Eo();t.isSupported=typeof mo=="function"&&typeof Y=="function"&&ke&&ke.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:$t,ERB_EXPR:eo,TMPLIT_EXPR:to,DATA_ATTR:Ka,ARIA_ATTR:Ja,IS_SCRIPT_OR_DATA:Xa,ATTR_WHITESPACE:vi,CUSTOM_ELEMENT:$a}=Ao,{IS_ALLOWED_URI:ki}=Ao,E=null,wi=p({},[...ho,...Dt,...Mt,...Ct,...To]),L=null,Ai=p({},[...xo,...Rt,...vo,...qe]),v=Object.seal(At(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}})),He=null,oo=null,we=Object.seal(At(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),Ei=!0,io=!0,Si=!1,Ii=!0,Ae=!1,yt=!0,pe=!1,ao=!1,no=!1,Ee=!1,_t=!1,ht=!1,Li=!0,Di=!1,en="user-content-",ro=!0,Ye=!1,Se={},Ie=null,Mi=p({},["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"]),Ci=null,Ri=p({},["audio","video","img","source","image","track"]),lo=null,Ni=p({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Tt="http://www.w3.org/1998/Math/MathML",xt="http://www.w3.org/2000/svg",$="http://www.w3.org/1999/xhtml",Le=$,so=!1,uo=null,tn=p({},[Tt,xt,$],It),vt=p({},["mi","mo","mn","ms","mtext"]),kt=p({},["annotation-xml"]),on=p({},["title","style","font","a","script"]),Ge=null,an=["application/xhtml+xml","text/html"],nn="text/html",S=null,De=null,rn=i.createElement("form"),Oi=f(function(o){return o instanceof RegExp||o instanceof Function},"isRegexOrFunction"),co=f(function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(De&&De===o)){if((!o||typeof o!="object")&&(o={}),o=q(o),Ge=an.indexOf(o.PARSER_MEDIA_TYPE)===-1?nn:o.PARSER_MEDIA_TYPE,S=Ge==="application/xhtml+xml"?It:je,E=G(o,"ALLOWED_TAGS")?p({},o.ALLOWED_TAGS,S):wi,L=G(o,"ALLOWED_ATTR")?p({},o.ALLOWED_ATTR,S):Ai,uo=G(o,"ALLOWED_NAMESPACES")?p({},o.ALLOWED_NAMESPACES,It):tn,lo=G(o,"ADD_URI_SAFE_ATTR")?p(q(Ni),o.ADD_URI_SAFE_ATTR,S):Ni,Ci=G(o,"ADD_DATA_URI_TAGS")?p(q(Ri),o.ADD_DATA_URI_TAGS,S):Ri,Ie=G(o,"FORBID_CONTENTS")?p({},o.FORBID_CONTENTS,S):Mi,He=G(o,"FORBID_TAGS")?p({},o.FORBID_TAGS,S):q({}),oo=G(o,"FORBID_ATTR")?p({},o.FORBID_ATTR,S):q({}),Se=G(o,"USE_PROFILES")?o.USE_PROFILES:!1,Ei=o.ALLOW_ARIA_ATTR!==!1,io=o.ALLOW_DATA_ATTR!==!1,Si=o.ALLOW_UNKNOWN_PROTOCOLS||!1,Ii=o.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ae=o.SAFE_FOR_TEMPLATES||!1,yt=o.SAFE_FOR_XML!==!1,pe=o.WHOLE_DOCUMENT||!1,Ee=o.RETURN_DOM||!1,_t=o.RETURN_DOM_FRAGMENT||!1,ht=o.RETURN_TRUSTED_TYPE||!1,no=o.FORCE_BODY||!1,Li=o.SANITIZE_DOM!==!1,Di=o.SANITIZE_NAMED_PROPS||!1,ro=o.KEEP_CONTENT!==!1,Ye=o.IN_PLACE||!1,ki=o.ALLOWED_URI_REGEXP||ko,Le=o.NAMESPACE||$,vt=o.MATHML_TEXT_INTEGRATION_POINTS||vt,kt=o.HTML_INTEGRATION_POINTS||kt,v=o.CUSTOM_ELEMENT_HANDLING||{},o.CUSTOM_ELEMENT_HANDLING&&Oi(o.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(v.tagNameCheck=o.CUSTOM_ELEMENT_HANDLING.tagNameCheck),o.CUSTOM_ELEMENT_HANDLING&&Oi(o.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(v.attributeNameCheck=o.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),o.CUSTOM_ELEMENT_HANDLING&&typeof o.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(v.allowCustomizedBuiltInElements=o.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ae&&(io=!1),_t&&(Ee=!0),Se&&(E=p({},To),L=[],Se.html===!0&&(p(E,ho),p(L,xo)),Se.svg===!0&&(p(E,Dt),p(L,Rt),p(L,qe)),Se.svgFilters===!0&&(p(E,Mt),p(L,Rt),p(L,qe)),Se.mathMl===!0&&(p(E,Ct),p(L,vo),p(L,qe))),o.ADD_TAGS&&(typeof o.ADD_TAGS=="function"?we.tagCheck=o.ADD_TAGS:(E===wi&&(E=q(E)),p(E,o.ADD_TAGS,S))),o.ADD_ATTR&&(typeof o.ADD_ATTR=="function"?we.attributeCheck=o.ADD_ATTR:(L===Ai&&(L=q(L)),p(L,o.ADD_ATTR,S))),o.ADD_URI_SAFE_ATTR&&p(lo,o.ADD_URI_SAFE_ATTR,S),o.FORBID_CONTENTS&&(Ie===Mi&&(Ie=q(Ie)),p(Ie,o.FORBID_CONTENTS,S)),ro&&(E["#text"]=!0),pe&&p(E,["html","head","body"]),E.table&&(p(E,["tbody"]),delete He.tbody),o.TRUSTED_TYPES_POLICY){if(typeof o.TRUSTED_TYPES_POLICY.createHTML!="function")throw Re('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof o.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Re('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');h=o.TRUSTED_TYPES_POLICY,B=h.createHTML("")}else h===void 0&&(h=ua(ce,s)),h!==null&&typeof B=="string"&&(B=h.createHTML(""));R&&R(o),De=o}},"_parseConfig"),Bi=p({},[...Dt,...Mt,...$i]),Pi=p({},[...Ct,...ea]),dn=f(function(o){let d=Y(o);(!d||!d.tagName)&&(d={namespaceURI:Le,tagName:"template"});let r=je(o.tagName),y=je(d.tagName);return uo[o.namespaceURI]?o.namespaceURI===xt?d.namespaceURI===$?r==="svg":d.namespaceURI===Tt?r==="svg"&&(y==="annotation-xml"||vt[y]):!!Bi[r]:o.namespaceURI===Tt?d.namespaceURI===$?r==="math":d.namespaceURI===xt?r==="math"&&kt[y]:!!Pi[r]:o.namespaceURI===$?d.namespaceURI===xt&&!kt[y]||d.namespaceURI===Tt&&!vt[y]?!1:!Pi[r]&&(on[r]||!Bi[r]):!!(Ge==="application/xhtml+xml"&&uo[o.namespaceURI]):!1},"_checkValidNamespace"),fe=f(function(o){Me(t.removed,{element:o});try{Y(o).removeChild(o)}catch{Ue(o)}},"_forceRemove"),me=f(function(o,d){try{Me(t.removed,{attribute:d.getAttributeNode(o),from:d})}catch{Me(t.removed,{attribute:null,from:d})}if(d.removeAttribute(o),o==="is")if(Ee||_t)try{fe(d)}catch{}else try{d.setAttribute(o,"")}catch{}},"_removeAttribute"),zi=f(function(o){let d=null,r=null;if(no)o=""+o;else{let T=Lt(o,/^[\r\n\t ]+/);r=T&&T[0]}Ge==="application/xhtml+xml"&&Le===$&&(o=''+o+"");let y=h?h.createHTML(o):o;if(Le===$)try{d=new z().parseFromString(y,Ge)}catch{}if(!d||!d.documentElement){d=ke.createDocument(Le,"template",null);try{d.documentElement.innerHTML=so?B:y}catch{}}let D=d.body||d.documentElement;return o&&r&&D.insertBefore(i.createTextNode(r),D.childNodes[0]||null),Le===$?bt.call(d,pe?"html":"body")[0]:pe?d.documentElement:D},"_initDocument"),Vi=f(function(o){return mt.call(o.ownerDocument||o,o,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT|A.SHOW_PROCESSING_INSTRUCTION|A.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),po=f(function(o){return o instanceof Fe&&(typeof o.nodeName!="string"||typeof o.textContent!="string"||typeof o.removeChild!="function"||!(o.attributes instanceof oe)||typeof o.removeAttribute!="function"||typeof o.setAttribute!="function"||typeof o.namespaceURI!="string"||typeof o.insertBefore!="function"||typeof o.hasChildNodes!="function")},"_isClobbered"),Fi=f(function(o){return typeof w=="function"&&o instanceof w},"_isNode");function J(o,d,r){Qe(o,y=>{y.call(t,d,r,De)})}a(J,"C"),f(J,"_executeHooks");let Ui=f(function(o){let d=null;if(J(O.beforeSanitizeElements,o,null),po(o))return fe(o),!0;let r=S(o.nodeName);if(J(O.uponSanitizeElement,o,{tagName:r,allowedTags:E}),yt&&o.hasChildNodes()&&!Fi(o.firstElementChild)&&N(/<[/\w!]/g,o.innerHTML)&&N(/<[/\w!]/g,o.textContent)||o.nodeType===Ne.progressingInstruction||yt&&o.nodeType===Ne.comment&&N(/<[/\w]/g,o.data))return fe(o),!0;if(!(we.tagCheck instanceof Function&&we.tagCheck(r))&&(!E[r]||He[r])){if(!He[r]&&Yi(r)&&(v.tagNameCheck instanceof RegExp&&N(v.tagNameCheck,r)||v.tagNameCheck instanceof Function&&v.tagNameCheck(r)))return!1;if(ro&&!Ie[r]){let y=Y(o)||o.parentNode,D=H(o)||o.childNodes;if(D&&y){let T=D.length;for(let ee=T-1;ee>=0;--ee){let Q=pt(D[ee],!0);Q.__removalCount=(o.__removalCount||0)+1,y.insertBefore(Q,ft(o))}}}return fe(o),!0}return o instanceof x&&!dn(o)||(r==="noscript"||r==="noembed"||r==="noframes")&&N(/<\/no(script|embed|frames)/i,o.innerHTML)?(fe(o),!0):(Ae&&o.nodeType===Ne.text&&(d=o.textContent,Qe([$t,eo,to],y=>{d=Ce(d,y," ")}),o.textContent!==d&&(Me(t.removed,{element:o.cloneNode()}),o.textContent=d)),J(O.afterSanitizeElements,o,null),!1)},"_sanitizeElements"),Hi=f(function(o,d,r){if(Li&&(d==="id"||d==="name")&&(r in i||r in rn))return!1;if(!(io&&!oo[d]&&N(Ka,d))&&!(Ei&&N(Ja,d))&&!(we.attributeCheck instanceof Function&&we.attributeCheck(d,o))){if(!L[d]||oo[d]){if(!(Yi(o)&&(v.tagNameCheck instanceof RegExp&&N(v.tagNameCheck,o)||v.tagNameCheck instanceof Function&&v.tagNameCheck(o))&&(v.attributeNameCheck instanceof RegExp&&N(v.attributeNameCheck,d)||v.attributeNameCheck instanceof Function&&v.attributeNameCheck(d,o))||d==="is"&&v.allowCustomizedBuiltInElements&&(v.tagNameCheck instanceof RegExp&&N(v.tagNameCheck,r)||v.tagNameCheck instanceof Function&&v.tagNameCheck(r))))return!1}else if(!lo[d]&&!N(ki,Ce(r,vi,""))&&!((d==="src"||d==="xlink:href"||d==="href")&&o!=="script"&&Ji(r,"data:")===0&&Ci[o])&&!(Si&&!N(Xa,Ce(r,vi,"")))&&r)return!1}return!0},"_isValidAttribute"),Yi=f(function(o){return o!=="annotation-xml"&&Lt(o,$a)},"_isBasicCustomElement"),Gi=f(function(o){J(O.beforeSanitizeAttributes,o,null);let{attributes:d}=o;if(!d||po(o))return;let r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:L,forceKeepAttr:void 0},y=d.length;for(;y--;){let D=d[y],{name:T,namespaceURI:ee,value:Q}=D,j=S(T),fo=Q,M=T==="value"?fo:Xi(fo);if(r.attrName=j,r.attrValue=M,r.keepAttr=!0,r.forceKeepAttr=void 0,J(O.uponSanitizeAttribute,o,r),M=r.attrValue,Di&&(j==="id"||j==="name")&&(me(T,o),M=en+M),yt&&N(/((--!?|])>)|<\/(style|title|textarea)/i,M)){me(T,o);continue}if(j==="attributename"&&Lt(M,"href")){me(T,o);continue}if(r.forceKeepAttr)continue;if(!r.keepAttr){me(T,o);continue}if(!Ii&&N(/\/>/i,M)){me(T,o);continue}Ae&&Qe([$t,eo,to],sn=>{M=Ce(M,sn," ")});let Qi=S(o.nodeName);if(!Hi(Qi,j,M)){me(T,o);continue}if(h&&typeof ce=="object"&&typeof ce.getAttributeType=="function"&&!ee)switch(ce.getAttributeType(Qi,j)){case"TrustedHTML":{M=h.createHTML(M);break}case"TrustedScriptURL":{M=h.createScriptURL(M);break}}if(M!==fo)try{ee?o.setAttributeNS(ee,T,M):o.setAttribute(T,M),po(o)?fe(o):bo(t.removed)}catch{me(T,o)}}J(O.afterSanitizeAttributes,o,null)},"_sanitizeAttributes"),ln=f(a(function o(d){let r=null,y=Vi(d);for(J(O.beforeSanitizeShadowDOM,d,null);r=y.nextNode();)J(O.uponSanitizeShadowNode,r,null),Ui(r),Gi(r),r.content instanceof c&&o(r.content);J(O.afterSanitizeShadowDOM,d,null)},"i"),"_sanitizeShadowDOM");return t.sanitize=function(o){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=null,y=null,D=null,T=null;if(so=!o,so&&(o=""),typeof o!="string"&&!Fi(o))if(typeof o.toString=="function"){if(o=o.toString(),typeof o!="string")throw Re("dirty is not a string, aborting")}else throw Re("toString is not a function");if(!t.isSupported)return o;if(ao||co(d),t.removed=[],typeof o=="string"&&(Ye=!1),Ye){if(o.nodeName){let j=S(o.nodeName);if(!E[j]||He[j])throw Re("root node is forbidden and cannot be sanitized in-place")}}else if(o instanceof w)r=zi(""),y=r.ownerDocument.importNode(o,!0),y.nodeType===Ne.element&&y.nodeName==="BODY"||y.nodeName==="HTML"?r=y:r.appendChild(y);else{if(!Ee&&!Ae&&!pe&&o.indexOf("<")===-1)return h&&ht?h.createHTML(o):o;if(r=zi(o),!r)return Ee?null:ht?B:""}r&&no&&fe(r.firstChild);let ee=Vi(Ye?o:r);for(;D=ee.nextNode();)Ui(D),Gi(D),D.content instanceof c&&ln(D.content);if(Ye)return o;if(Ee){if(_t)for(T=gt.call(r.ownerDocument);r.firstChild;)T.appendChild(r.firstChild);else T=r;return(L.shadowroot||L.shadowrootmode)&&(T=Za.call(n,T,!0)),T}let Q=pe?r.outerHTML:r.innerHTML;return pe&&E["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&N(wo,r.ownerDocument.doctype.name)&&(Q=""+Q),Ae&&Qe([$t,eo,to],j=>{Q=Ce(Q,j," ")}),h&&ht?h.createHTML(Q):Q},t.setConfig=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};co(o),ao=!0},t.clearConfig=function(){De=null,ao=!1},t.isValidAttribute=function(o,d,r){De||co({});let y=S(o),D=S(d);return Hi(y,D,r)},t.addHook=function(o,d){typeof d=="function"&&Me(O[o],d)},t.removeHook=function(o,d){if(d!==void 0){let r=Zi(O[o],d);return r===-1?void 0:Ki(O[o],r,1)[0]}return bo(O[o])},t.removeHooks=function(o){O[o]=[]},t.removeAllHooks=function(){O=Eo()},t}a(Nt,"St"),f(Nt,"createDOMPurify");var So=Nt();let Oe=!1;window.trustedTypes&&window.trustedTypes.createPolicy&&So&&(Oe=window.trustedTypes.createPolicy("GoodTubePolicy",{createHTML:a(e=>So.sanitize(e,{RETURN_TRUSTED_TYPE:!1}),"createHTML")}));function Io(){let e={};if(document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g,function(){function t(i){return decodeURIComponent(i.split("+").join(" "))}a(t,"decode"),e[t(arguments[1])]=t(arguments[2])}),U()&&typeof e.v>"u"){let t="";window.location.href.indexOf("/watch/")!==-1?t="/watch/":t="/live/";let i=window.location.href.split(t);if(i.length===2){let n=i[1].split("?");e.v=n[n.length-1]}}return e}a(Io,"goodTube_helper_setupGetParams");function m(e,t,i=399){e=e+"_new",document.cookie=e+"="+encodeURIComponent(t)+";SameSite=Lax;path=/;max-age="+i*24*60*60}a(m,"goodTube_helper_setCookie");function F(e){e=e+"_new";let t=document.cookie.split(";");for(let i=0;i{var{entries:Wo,setPrototypeOf:Bo,isFrozen:ni,getPrototypeOf:ai,getOwnPropertyDescriptor:ri}=Object,{freeze:H,seal:K,create:co}=Object,{apply:fo,construct:po}=typeof Reflect<"u"&&Reflect;H||(H=function(s){return s});K||(K=function(s){return s});fo||(fo=function(s,a){for(var c=arguments.length,b=new Array(c>2?c-2:0),B=2;B1?a-1:0),b=1;b1?a-1:0),b=1;b2&&arguments[2]!==void 0?arguments[2]:Ht;Bo&&Bo(p,null);let c=s.length;for(;c--;){let b=s[c];if(typeof b=="string"){let B=a(b);B!==b&&(ni(s)||(s[c]=B),b=B)}p[b]=!0}return p}function fi(p){for(let s=0;s/gm),yi=K(/\$\{[\w\W]*/gm),_i=K(/^data-[\-\w.\u00B7-\uFFFF]+$/),Ti=K(/^aria-[\-\w]+$/),Qo=K(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),hi=K(/^(?:\w+script|data):/i),xi=K(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),jo=K(/^html$/i),vi=K(/^[a-z][.\w]*(-[.\w]+)+$/i),Yo=Object.freeze({__proto__:null,ARIA_ATTR:Ti,ATTR_WHITESPACE:xi,CUSTOM_ELEMENT:vi,DATA_ATTR:_i,DOCTYPE_NAME:jo,ERB_EXPR:bi,IS_ALLOWED_URI:Qo,IS_SCRIPT_OR_DATA:hi,MUSTACHE_EXPR:gi,TMPLIT_EXPR:yi}),vt={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Ai=function(){return typeof window>"u"?null:window},Ei=function(s,a){if(typeof s!="object"||typeof s.createPolicy!="function")return null;let c=null,b="data-tt-policy-suffix";a&&a.hasAttribute(b)&&(c=a.getAttribute(b));let B="dompurify"+(c?"#"+c:"");try{return s.createPolicy(B,{createHTML(F){return F},createScriptURL(F){return F}})}catch{return console.warn("TrustedTypes policy "+B+" could not be created."),null}},Go=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function qo(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ai(),s=u=>qo(u);if(s.version="3.3.0",s.removed=[],!p||!p.document||p.document.nodeType!==vt.document||!p.Element)return s.isSupported=!1,s;let{document:a}=p,c=a,b=c.currentScript,{DocumentFragment:B,HTMLTemplateElement:F,Node:ye,Element:V,NodeFilter:re,NamedNodeMap:Fe=p.NamedNodeMap||p.MozNamedAttrMap,HTMLFormElement:Yt,DOMParser:le,trustedTypes:R}=p,r=V.prototype,f=xt(r,"cloneNode"),we=xt(r,"remove"),at=xt(r,"nextSibling"),At=xt(r,"childNodes"),ke=xt(r,"parentNode");if(typeof F=="function"){let u=a.createElement("template");u.content&&u.content.ownerDocument&&(a=u.content.ownerDocument)}let C,_e="",{implementation:Ue,createNodeIterator:rt,createDocumentFragment:se,getElementsByTagName:Ve}=a,{importNode:v}=c,D=Go();s.isSupported=typeof Wo=="function"&&typeof ke=="function"&&Ue&&Ue.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:te,ERB_EXPR:de,TMPLIT_EXPR:ue,DATA_ATTR:ze,ARIA_ATTR:He,IS_SCRIPT_OR_DATA:Ye,ATTR_WHITESPACE:Te,CUSTOM_ELEMENT:Ge}=Yo,{IS_ALLOWED_URI:j}=Yo,E=null,S=g({},[...Uo,...ro,...lo,...so,...Vo]),M=null,Et=g({},[...zo,...uo,...Ho,...zt]),I=Object.seal(co(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}})),oe=null,Se=null,he=Object.seal(co(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),wt=!0,lt=!0,kt=!1,st=!0,ce=!1,xe=!0,fe=!1,We=!1,Ie=!1,pe=!1,Le=!1,me=!1,Qe=!0,De=!1,St="user-content-",dt=!0,ie=!1,J={},ve=null,ut=g({},["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"]),ct=null,It=g({},["audio","video","img","source","image","track"]),ft=null,Lt=g({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),je="http://www.w3.org/1998/Math/MathML",qe="http://www.w3.org/2000/svg",q="http://www.w3.org/1999/xhtml",ge=q,Ze=!1,Me=null,Ke=g({},[je,qe,q],no),Re=g({},["mi","mo","mn","ms","mtext"]),Ce=g({},["annotation-xml"]),Gt=g({},["title","style","font","a","script"]),Oe=null,Wt=["application/xhtml+xml","text/html"],Qt="text/html",A=null,Ae=null,jt=a.createElement("form"),pt=function(t){return t instanceof RegExp||t instanceof Function},Je=function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Ae&&Ae===t)){if((!t||typeof t!="object")&&(t={}),t=be(t),Oe=Wt.indexOf(t.PARSER_MEDIA_TYPE)===-1?Qt:t.PARSER_MEDIA_TYPE,A=Oe==="application/xhtml+xml"?no:Ht,E=ee(t,"ALLOWED_TAGS")?g({},t.ALLOWED_TAGS,A):S,M=ee(t,"ALLOWED_ATTR")?g({},t.ALLOWED_ATTR,A):Et,Me=ee(t,"ALLOWED_NAMESPACES")?g({},t.ALLOWED_NAMESPACES,no):Ke,ft=ee(t,"ADD_URI_SAFE_ATTR")?g(be(Lt),t.ADD_URI_SAFE_ATTR,A):Lt,ct=ee(t,"ADD_DATA_URI_TAGS")?g(be(It),t.ADD_DATA_URI_TAGS,A):It,ve=ee(t,"FORBID_CONTENTS")?g({},t.FORBID_CONTENTS,A):ut,oe=ee(t,"FORBID_TAGS")?g({},t.FORBID_TAGS,A):be({}),Se=ee(t,"FORBID_ATTR")?g({},t.FORBID_ATTR,A):be({}),J=ee(t,"USE_PROFILES")?t.USE_PROFILES:!1,wt=t.ALLOW_ARIA_ATTR!==!1,lt=t.ALLOW_DATA_ATTR!==!1,kt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,st=t.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ce=t.SAFE_FOR_TEMPLATES||!1,xe=t.SAFE_FOR_XML!==!1,fe=t.WHOLE_DOCUMENT||!1,pe=t.RETURN_DOM||!1,Le=t.RETURN_DOM_FRAGMENT||!1,me=t.RETURN_TRUSTED_TYPE||!1,Ie=t.FORCE_BODY||!1,Qe=t.SANITIZE_DOM!==!1,De=t.SANITIZE_NAMED_PROPS||!1,dt=t.KEEP_CONTENT!==!1,ie=t.IN_PLACE||!1,j=t.ALLOWED_URI_REGEXP||Qo,ge=t.NAMESPACE||q,Re=t.MATHML_TEXT_INTEGRATION_POINTS||Re,Ce=t.HTML_INTEGRATION_POINTS||Ce,I=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(I.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(I.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(I.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ce&&(lt=!1),Le&&(pe=!0),J&&(E=g({},Vo),M=[],J.html===!0&&(g(E,Uo),g(M,zo)),J.svg===!0&&(g(E,ro),g(M,uo),g(M,zt)),J.svgFilters===!0&&(g(E,lo),g(M,uo),g(M,zt)),J.mathMl===!0&&(g(E,so),g(M,Ho),g(M,zt))),t.ADD_TAGS&&(typeof t.ADD_TAGS=="function"?he.tagCheck=t.ADD_TAGS:(E===S&&(E=be(E)),g(E,t.ADD_TAGS,A))),t.ADD_ATTR&&(typeof t.ADD_ATTR=="function"?he.attributeCheck=t.ADD_ATTR:(M===Et&&(M=be(M)),g(M,t.ADD_ATTR,A))),t.ADD_URI_SAFE_ATTR&&g(ft,t.ADD_URI_SAFE_ATTR,A),t.FORBID_CONTENTS&&(ve===ut&&(ve=be(ve)),g(ve,t.FORBID_CONTENTS,A)),dt&&(E["#text"]=!0),fe&&g(E,["html","head","body"]),E.table&&(g(E,["tbody"]),delete oe.tbody),t.TRUSTED_TYPES_POLICY){if(typeof t.TRUSTED_TYPES_POLICY.createHTML!="function")throw ht('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof t.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw ht('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');C=t.TRUSTED_TYPES_POLICY,_e=C.createHTML("")}else C===void 0&&(C=Ei(R,b)),C!==null&&typeof _e=="string"&&(_e=C.createHTML(""));H&&H(t),Ae=t}},mt=g({},[...ro,...lo,...pi]),gt=g({},[...so,...mi]),Dt=function(t){let n=ke(t);(!n||!n.tagName)&&(n={namespaceURI:ge,tagName:"template"});let l=Ht(t.tagName),x=Ht(n.tagName);return Me[t.namespaceURI]?t.namespaceURI===qe?n.namespaceURI===q?l==="svg":n.namespaceURI===je?l==="svg"&&(x==="annotation-xml"||Re[x]):!!mt[l]:t.namespaceURI===je?n.namespaceURI===q?l==="math":n.namespaceURI===qe?l==="math"&&Ce[x]:!!gt[l]:t.namespaceURI===q?n.namespaceURI===qe&&!Ce[x]||n.namespaceURI===je&&!Re[x]?!1:!gt[l]&&(Gt[l]||!mt[l]):!!(Oe==="application/xhtml+xml"&&Me[t.namespaceURI]):!1},G=function(t){_t(s.removed,{element:t});try{ke(t).removeChild(t)}catch{we(t)}},ne=function(t,n){try{_t(s.removed,{attribute:n.getAttributeNode(t),from:n})}catch{_t(s.removed,{attribute:null,from:n})}if(n.removeAttribute(t),t==="is")if(pe||Le)try{G(n)}catch{}else try{n.setAttribute(t,"")}catch{}},bt=function(t){let n=null,l=null;if(Ie)t=""+t;else{let _=ao(t,/^[\r\n\t ]+/);l=_&&_[0]}Oe==="application/xhtml+xml"&&ge===q&&(t=''+t+"");let x=C?C.createHTML(t):t;if(ge===q)try{n=new le().parseFromString(x,Oe)}catch{}if(!n||!n.documentElement){n=Ue.createDocument(ge,"template",null);try{n.documentElement.innerHTML=Ze?_e:x}catch{}}let O=n.body||n.documentElement;return t&&l&&O.insertBefore(a.createTextNode(l),O.childNodes[0]||null),ge===q?Ve.call(n,fe?"html":"body")[0]:fe?n.documentElement:O},yt=function(t){return rt.call(t.ownerDocument||t,t,re.SHOW_ELEMENT|re.SHOW_COMMENT|re.SHOW_TEXT|re.SHOW_PROCESSING_INSTRUCTION|re.SHOW_CDATA_SECTION,null)},Xe=function(t){return t instanceof Yt&&(typeof t.nodeName!="string"||typeof t.textContent!="string"||typeof t.removeChild!="function"||!(t.attributes instanceof Fe)||typeof t.removeAttribute!="function"||typeof t.setAttribute!="function"||typeof t.namespaceURI!="string"||typeof t.insertBefore!="function"||typeof t.hasChildNodes!="function")},Ne=function(t){return typeof ye=="function"&&t instanceof ye};function Z(u,t,n){Vt(u,l=>{l.call(s,t,n,Ae)})}let Mt=function(t){let n=null;if(Z(D.beforeSanitizeElements,t,null),Xe(t))return G(t),!0;let l=A(t.nodeName);if(Z(D.uponSanitizeElement,t,{tagName:l,allowedTags:E}),xe&&t.hasChildNodes()&&!Ne(t.firstElementChild)&&z(/<[/\w!]/g,t.innerHTML)&&z(/<[/\w!]/g,t.textContent)||t.nodeType===vt.progressingInstruction||xe&&t.nodeType===vt.comment&&z(/<[/\w]/g,t.data))return G(t),!0;if(!(he.tagCheck instanceof Function&&he.tagCheck(l))&&(!E[l]||oe[l])){if(!oe[l]&&Ct(l)&&(I.tagNameCheck instanceof RegExp&&z(I.tagNameCheck,l)||I.tagNameCheck instanceof Function&&I.tagNameCheck(l)))return!1;if(dt&&!ve[l]){let x=ke(t)||t.parentNode,O=At(t)||t.childNodes;if(O&&x){let _=O.length;for(let w=_-1;w>=0;--w){let P=f(O[w],!0);P.__removalCount=(t.__removalCount||0)+1,x.insertBefore(P,at(t))}}}return G(t),!0}return t instanceof V&&!Dt(t)||(l==="noscript"||l==="noembed"||l==="noframes")&&z(/<\/no(script|embed|frames)/i,t.innerHTML)?(G(t),!0):(ce&&t.nodeType===vt.text&&(n=t.textContent,Vt([te,de,ue],x=>{n=Tt(n,x," ")}),t.textContent!==n&&(_t(s.removed,{element:t.cloneNode()}),t.textContent=n)),Z(D.afterSanitizeElements,t,null),!1)},Rt=function(t,n,l){if(Qe&&(n==="id"||n==="name")&&(l in a||l in jt))return!1;if(!(lt&&!Se[n]&&z(ze,n))){if(!(wt&&z(He,n))){if(!(he.attributeCheck instanceof Function&&he.attributeCheck(n,t))){if(!M[n]||Se[n]){if(!(Ct(t)&&(I.tagNameCheck instanceof RegExp&&z(I.tagNameCheck,t)||I.tagNameCheck instanceof Function&&I.tagNameCheck(t))&&(I.attributeNameCheck instanceof RegExp&&z(I.attributeNameCheck,n)||I.attributeNameCheck instanceof Function&&I.attributeNameCheck(n,t))||n==="is"&&I.allowCustomizedBuiltInElements&&(I.tagNameCheck instanceof RegExp&&z(I.tagNameCheck,l)||I.tagNameCheck instanceof Function&&I.tagNameCheck(l))))return!1}else if(!ft[n]){if(!z(j,Tt(l,Te,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&t!=="script"&&di(l,"data:")===0&&ct[t])){if(!(kt&&!z(Ye,Tt(l,Te,"")))){if(l)return!1}}}}}}}return!0},Ct=function(t){return t!=="annotation-xml"&&ao(t,Ge)},Ot=function(t){Z(D.beforeSanitizeAttributes,t,null);let{attributes:n}=t;if(!n||Xe(t))return;let l={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:M,forceKeepAttr:void 0},x=n.length;for(;x--;){let O=n[x],{name:_,namespaceURI:w,value:P}=O,W=A(_),X=P,k=_==="value"?X:ui(X);if(l.attrName=W,l.attrValue=k,l.keepAttr=!0,l.forceKeepAttr=void 0,Z(D.uponSanitizeAttribute,t,l),k=l.attrValue,De&&(W==="id"||W==="name")&&(ne(_,t),k=St+k),xe&&z(/((--!?|])>)|<\/(style|title|textarea)/i,k)){ne(_,t);continue}if(W==="attributename"&&ao(k,"href")){ne(_,t);continue}if(l.forceKeepAttr)continue;if(!l.keepAttr){ne(_,t);continue}if(!st&&z(/\/>/i,k)){ne(_,t);continue}ce&&Vt([te,de,ue],L=>{k=Tt(k,L," ")});let y=A(t.nodeName);if(!Rt(y,W,k)){ne(_,t);continue}if(C&&typeof R=="object"&&typeof R.getAttributeType=="function"&&!w)switch(R.getAttributeType(y,W)){case"TrustedHTML":{k=C.createHTML(k);break}case"TrustedScriptURL":{k=C.createScriptURL(k);break}}if(k!==X)try{w?t.setAttributeNS(w,_,k):t.setAttribute(_,k),Xe(t)?G(t):Fo(s.removed)}catch{ne(_,t)}}Z(D.afterSanitizeAttributes,t,null)},Nt=function u(t){let n=null,l=yt(t);for(Z(D.beforeSanitizeShadowDOM,t,null);n=l.nextNode();)Z(D.uponSanitizeShadowNode,n,null),Mt(n),Ot(n),n.content instanceof B&&u(n.content);Z(D.afterSanitizeShadowDOM,t,null)};return s.sanitize=function(u){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,l=null,x=null,O=null;if(Ze=!u,Ze&&(u=""),typeof u!="string"&&!Ne(u))if(typeof u.toString=="function"){if(u=u.toString(),typeof u!="string")throw ht("dirty is not a string, aborting")}else throw ht("toString is not a function");if(!s.isSupported)return u;if(We||Je(t),s.removed=[],typeof u=="string"&&(ie=!1),ie){if(u.nodeName){let P=A(u.nodeName);if(!E[P]||oe[P])throw ht("root node is forbidden and cannot be sanitized in-place")}}else if(u instanceof ye)n=bt(""),l=n.ownerDocument.importNode(u,!0),l.nodeType===vt.element&&l.nodeName==="BODY"||l.nodeName==="HTML"?n=l:n.appendChild(l);else{if(!pe&&!ce&&!fe&&u.indexOf("<")===-1)return C&&me?C.createHTML(u):u;if(n=bt(u),!n)return pe?null:me?_e:""}n&&Ie&&G(n.firstChild);let _=yt(ie?u:n);for(;x=_.nextNode();)Mt(x),Ot(x),x.content instanceof B&&Nt(x.content);if(ie)return u;if(pe){if(Le)for(O=se.call(n.ownerDocument);n.firstChild;)O.appendChild(n.firstChild);else O=n;return(M.shadowroot||M.shadowrootmode)&&(O=v.call(c,O,!0)),O}let w=fe?n.outerHTML:n.innerHTML;return fe&&E["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&z(jo,n.ownerDocument.doctype.name)&&(w=" +`+w),ce&&Vt([te,de,ue],P=>{w=Tt(w,P," ")}),C&&me?C.createHTML(w):w},s.setConfig=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Je(u),We=!0},s.clearConfig=function(){Ae=null,We=!1},s.isValidAttribute=function(u,t,n){Ae||Je({});let l=A(u),x=A(t);return Rt(l,x,n)},s.addHook=function(u,t){typeof t=="function"&&_t(D[u],t)},s.removeHook=function(u,t){if(t!==void 0){let n=li(D[u],t);return n===-1?void 0:si(D[u],n,1)[0]}return Fo(D[u])},s.removeHooks=function(u){D[u]=[]},s.removeAllHooks=function(){D=Go()},s}var mo=qo();(function(){"use strict";let p=!1;window.trustedTypes&&window.trustedTypes.createPolicy&&mo&&(p=window.trustedTypes.createPolicy("GoodTubePolicy",{createHTML:e=>mo.sanitize(e,{RETURN_TRUSTED_TYPE:!1})}));function s(){let e={};if(document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g,function(){function o(i){return decodeURIComponent(i.split("+").join(" "))}e[o(arguments[1])]=o(arguments[2])}),V()&&typeof e.v>"u"){let o="";window.location.href.indexOf("/watch/")!==-1?o="/watch/":o="/live/";let i=window.location.href.split(o);if(i.length===2){let d=i[1].split("?");e.v=d[d.length-1]}}return e}function a(e,o,i=399){e=e+"_new",document.cookie=e+"="+encodeURIComponent(o)+";SameSite=Lax;path=/;max-age="+i*24*60*60}function c(e){e=e+"_new";let o=document.cookie.split(";");for(let i=0;i .pivot-shorts), ytd-rich-section-renderer, grid-shelf-view-model { display: none !important; } - `,console.log("[GoodTube] Shorts removed")),Je==="true"&&(e+=` + `,console.log("[GoodTube] Shorts removed")),ze==="true"&&(e+=` /* Hide suggested videos */ ytd-watch-flexy #secondary #related { display: none !important; @@ -96,21 +97,21 @@ ytd-watch-flexy #secondary:not(:has(ytd-playlist-panel-video-renderer)) { display: none !important; } - `,console.log("[GoodTube] Suggested videos removed")),Xe==="true"&&(e+=` + `,console.log("[GoodTube] Suggested videos removed")),He==="true"&&(e+=` ytd-item-section-renderer.ytd-comments, #comments-button, #shorts-panel-container ytd-engagement-panel-section-list-renderer { display: none !important; } - `,console.log("[GoodTube] Comments removed")),$e==="true"&&(e+=` + `,console.log("[GoodTube] Comments removed")),Ye==="true"&&(e+=` ytd-expandable-metadata-renderer[has-video-summary] { display: none !important; } - `,console.log("[GoodTube] AI summaries removed"));let t=document.createElement("style");t.textContent=e,document.head.appendChild(t)}a(fa,"goodTube_youtube_hidePageElements");function ma(){if(be==="true")return;window.location.href.indexOf("/shorts")!==-1&&!Mo&&(window.location.href="https://youtube.com",Mo=!0),document.querySelectorAll("a:not(.goodTube_hidden)").forEach(i=>{i.href.indexOf("shorts/")!==-1&&(X(i),X(i.closest("ytd-video-renderer")),X(i.closest("ytd-compact-video-renderer")),X(i.closest("ytd-rich-grid-media")))}),document.querySelectorAll("yt-chip-cloud-chip-renderer:not(.goodTube_hidden):not(.goodTube_checked), yt-tab-shape:not(.goodTube_hidden):not(.goodTube_checked), ytd-guide-entry-renderer:not(.goodTube_checked)").forEach(i=>{i.innerHTML.toLowerCase().indexOf("shorts")!==-1&&X(i),i.classList.add("goodTube_checked")})}a(ma,"goodTube_youtube_hideShortsRealTime");function ga(){document.querySelectorAll("#description a, ytd-comments .yt-core-attributed-string a, ytm-expandable-video-description-body-renderer a, .comment-content a").forEach(t=>{!t.classList.contains("goodTube_timestampLink")&&t.getAttribute("href")&&t.getAttribute("href").indexOf(k.v)!==-1&&(t.classList.add("goodTube_timestampLink"),t.addEventListener("click",function(){let i=0,n=t.getAttribute("href").split("t=");typeof n[1]<"u"&&(i=parseFloat(n[1].replace("s",""))),Vo(i)}))})}a(ga,"goodTube_youtube_timestampLinks");let tt=setTimeout(()=>{},0);function Vt(){if(be==="true"&&window.location.href.indexOf("/shorts")!==-1||!U()){clearTimeout(tt),tt=setTimeout(Vt,100);return}document.querySelectorAll("video").forEach(t=>{_?!t.paused&&!t.closest("#movie_player")&&(t.muted=!0,t.volume=0,t.pause()):!t.paused&&(!Bt||!t.closest("#movie_player"))&&(t.muted=!0,t.volume=0,!Ot()||!t.closest("#movie_player")?(t.pause(),t.playbackRate=ye):(t.play(),t.playbackRate=2))}),clearTimeout(tt),tt=setTimeout(Vt,100)}a(Vt,"goodTube_youtube_pauseMuteVideos");function ba(){if(Do)return;let e=document.querySelector("#movie_player .ytp-autonav-toggle-button");e&&(e.getAttribute("aria-checked")==="true"&&W(e),Do=!0)}a(ba,"goodTube_youtube_turnOffAutoplay");function ya(){document.querySelectorAll("yt-confirm-dialog-renderer").forEach(t=>{if(t.innerHTML.indexOf("Video paused. Continue watching?")!==-1){let i=t.querySelector("#confirm-button");i&&W(i)}})}a(ya,"goodTube_youtube_removeAreYouStillWatchingPopup");function _a(e,t){if(!e||!t)return;let i=document.querySelector("ytd-watch-flexy");i&&U()&&!_&&(i.style.setProperty("--ytd-watch-flexy-width-ratio",e),i.style.setProperty("--ytd-watch-flexy-height-ratio",t))}a(_a,"goodTube_youtube_setAspectRatio");function ha(){let e=document.querySelector("ytd-watch-flexy");e&&(e.style.removeProperty("--ytd-watch-flexy-width-ratio"),e.style.removeProperty("--ytd-watch-flexy-height-ratio"))}a(ha,"goodTube_youtube_unsetAspectRatio");let No=setTimeout(()=>{},0);function Oo(){l=document.getElementById("movie_player");let e=!1;if(l&&typeof l.getVideoData=="function"&&(e=l.getVideoData()),!e){clearTimeout(No),No=setTimeout(Oo,100);return}let t="transparent";et==="true"&&(t="#000000");let i=document.createElement("style");i.textContent=` + `,console.log("[GoodTube] AI summaries removed"));let o=document.createElement("style");o.textContent=e,document.head.appendChild(o)}function Et(){if(te==="true")return;window.location.href.indexOf("/shorts")!==-1&&!C&&(window.location.href="https://youtube.com",C=!0),document.querySelectorAll("a:not(.goodTube_hidden)").forEach(i=>{i.href.indexOf("shorts/")!==-1&&(F(i),F(i.closest("ytd-video-renderer")),F(i.closest("ytd-compact-video-renderer")),F(i.closest("ytd-rich-grid-media")))}),document.querySelectorAll("yt-chip-cloud-chip-renderer:not(.goodTube_hidden):not(.goodTube_checked), yt-tab-shape:not(.goodTube_hidden):not(.goodTube_checked), ytd-guide-entry-renderer:not(.goodTube_checked)").forEach(i=>{i.innerHTML.toLowerCase().indexOf("shorts")!==-1&&F(i),i.classList.add("goodTube_checked")})}function I(){document.querySelectorAll("#description a, ytd-comments .yt-core-attributed-string a, ytm-expandable-video-description-body-renderer a, .comment-content a").forEach(o=>{!o.classList.contains("goodTube_timestampLink")&&o.getAttribute("href")&&o.getAttribute("href").indexOf(S.v)!==-1&&(o.classList.add("goodTube_timestampLink"),o.addEventListener("click",function(){let i=0,d=o.getAttribute("href").split("t=");typeof d[1]<"u"&&(i=parseFloat(d[1].replace("s",""))),St(i)}))})}let oe=setTimeout(()=>{},0);function Se(){if(te==="true"&&window.location.href.indexOf("/shorts")!==-1||!V()){clearTimeout(oe),oe=setTimeout(Se,100);return}document.querySelectorAll("video").forEach(o=>{v?!o.paused&&!o.closest("#movie_player")&&(o.muted=!0,o.volume=0,o.pause()):!o.paused&&(!at||!o.closest("#movie_player"))&&(o.muted=!0,o.volume=0,!re()||!o.closest("#movie_player")?(o.pause(),o.playbackRate=E):(o.play(),o.playbackRate=2))}),clearTimeout(oe),oe=setTimeout(Se,100)}function he(){if(ke)return;let e=document.querySelector("#movie_player .ytp-autonav-toggle-button");e&&(e.getAttribute("aria-checked")==="true"&&b(e),ke=!0)}function wt(){document.querySelectorAll("yt-confirm-dialog-renderer").forEach(o=>{if(o.innerHTML.indexOf("Video paused. Continue watching?")!==-1){let i=o.querySelector("#confirm-button");i&&b(i)}})}function lt(e,o){if(!e||!o)return;let i=document.querySelector("ytd-watch-flexy");i&&V()&&!v&&(i.style.setProperty("--ytd-watch-flexy-width-ratio",e),i.style.setProperty("--ytd-watch-flexy-height-ratio",o))}function kt(){let e=document.querySelector("ytd-watch-flexy");e&&(e.style.removeProperty("--ytd-watch-flexy-width-ratio"),e.style.removeProperty("--ytd-watch-flexy-height-ratio"))}let st=setTimeout(()=>{},0);function ce(){r=document.getElementById("movie_player");let e=!1;if(r&&typeof r.getVideoData=="function"&&(e=r.getVideoData()),!e){clearTimeout(st),st=setTimeout(ce,100);return}let o="transparent";Ge==="true"&&(o="#000000");let i=document.createElement("style");i.textContent=` /* Player wrapper */ #goodTube_playerWrapper { border-radius: 12px; - background: `+t+`; + background: `+o+`; position: absolute; top: 0; left: 0; @@ -134,7 +135,7 @@ max-width: calc(177.77777778vh - var(--ytd-watch-flexy-masthead-height) * 1.7777777778 - var(--ytd-margin-6x) * 1.7777777778 - var(--ytd-watch-flexy-space-below-player) * 1.7777777778) !important; min-width: calc(var(--ytd-watch-flexy-min-player-height) * 1.7777777778) !important; } - `,document.head.appendChild(i);let n=document.createElement("div");n.id="goodTube_playerWrapper",n.classList.add("goodTube_hidden"),document.body.appendChild(n);let s=document.createElement("iframe");s.src="https://en.wikipedia.org/wiki/Fuck?goodTubeProxy=1",s.setAttribute("width","100%"),s.setAttribute("height","100%"),s.setAttribute("frameborder","0"),s.setAttribute("scrolling","yes"),s.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"),s.setAttribute("referrerpolicy","strict-origin-when-cross-origin"),s.setAttribute("allowfullscreen",!0),s.style.display="none",n.appendChild(s),ae=n,P=s,jo(),setInterval(jo,100)}a(Oo,"goodTube_player_init");let Ft=!1;function Ta(){if(_)Ft||(it(!0),Ft=!0);else{Ft=!1;let e=document.querySelector("#player.ytd-watch-flexy");if((!e||e.offsetHeight<=0)&&(e=document.querySelector("#ytd-player")),(!e||e.offsetHeight<=0)&&(e=document.querySelector(".player-size")),(!e||e.offsetHeight<=0)&&(e=document.querySelector(".html5-video-player")),e&&e.offsetHeight>0){let t=e.getBoundingClientRect();ae.style.top=t.top+window.scrollY+"px",ae.style.left=t.left+window.scrollX+"px",ae.style.width=e.offsetWidth+"px",ae.style.height=e.offsetHeight+"px",We(ae)}}}a(Ta,"goodTube_player_positionAndSize");let Bo=setTimeout(()=>{},0);function Ut(){l=document.getElementById("movie_player"),typeof l.getPlaylist=="function"&&typeof l.getPlaylistIndex=="function"&&(ne=l.getPlaylist(),Ke=l.getPlaylistIndex(),ne||(clearTimeout(Bo),Bo=setTimeout(Ut,100)))}a(Ut,"goodTube_player_populatePlaylistInfo");let Po=setTimeout(()=>{},0);function zo(){if(re="",xa(),!Ro){clearTimeout(Po),Po=setTimeout(zo,100);return}let e=0;Ve==="false"&&typeof k.t<"u"&&(e=parseFloat(k.t.replace("s","")));let t="false";if(typeof k.i<"u"||typeof k.index<"u"||typeof k.list<"u"?(t="true",Ut()):(ne=!1,Ke=0),Co){U()||it();let i="";e>0&&(i="&start="+e),P.contentWindow.postMessage("goodTube_src_https://www.youtube.com/embed/"+k.v+"?goodTubeEmbed=1&autoplay=1&goodTube_playlist="+t+"&goodTube_autoplay="+Z+"&goodTube_playbackSpeed="+ye+"&goodTube_hideInfoCards="+Pe+"&goodTube_hideEndScreen="+ze+i,"*"),Co=!1}else P.contentWindow.postMessage("goodTube_load_"+k.v+"|||"+e+"|||"+t,"*");Ve==="false"&&Ht(),nt()}a(zo,"goodTube_player_load");let ot=setTimeout(()=>{},0);function Ht(){if(!Pt){clearTimeout(ot),ot=setTimeout(Ht,100);return}l=document.getElementById("movie_player");let e=!1,t=!1;if(l&&typeof l.getVideoData=="function"&&typeof l.getCurrentTime=="function"&&(e=l.getVideoData(),t=e.video_id),!e||!t||t!==k.v){clearTimeout(ot),ot=setTimeout(Ht,100);return}let i=Math.floor(l.getCurrentTime());i>=10&&Vo(i,t)}a(Ht,"goodTube_player_syncStartingTime");function it(e=!1){Be||(e?(l=document.getElementById("movie_player"),l&&typeof l.stopVideo=="function"&&l.stopVideo()):P.contentWindow.postMessage("goodTube_stopVideo","*")),X(ae)}a(it,"goodTube_player_clear");function Vo(e,t=""){P.contentWindow.postMessage("goodTube_skipTo_"+e+"|||"+t,"*")}a(Vo,"goodTube_player_skipTo");function xa(){P.contentWindow.postMessage("goodTube_pause","*")}a(xa,"goodTube_player_pause");let at=setTimeout(()=>{},0);function nt(){if(!zt||!Pt){clearTimeout(at),at=setTimeout(nt,100);return}if(!_)P.contentWindow.postMessage("goodTube_play|||"+k.v,"*");else{l=document.getElementById("movie_player");let e=!1;if(l&&typeof l.getVideoData=="function"&&(e=l.getVideoData()),!e||k.v!==e.video_id){clearTimeout(at),at=setTimeout(nt,100);return}let t=document.querySelector("#movie_player video");if(t&&t.currentTime>=t.duration)return;l&&typeof l.playVideo=="function"&&setTimeout(()=>{l.playVideo()},100)}}a(nt,"goodTube_player_play");function va(){document.addEventListener("keydown",Fo,!0),document.addEventListener("keyup",Fo,!0)}a(va,"goodTube_shortcuts_init");function Fo(e){if(!U()||_)return;let t=[{key:">",code:!1,ctrl:!1,shift:!0,alt:!1},{key:"<",code:!1,ctrl:!1,shift:!0,alt:!1},{key:",",code:!1,ctrl:!1,shift:!1,alt:!1},{key:".",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"arrowleft",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"arrowright",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"j",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"l",code:!1,ctrl:!1,shift:!1,alt:!1},{key:" ",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"k",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"m",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"f",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"c",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"o",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"w",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"=",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"-",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"w",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"a",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"s",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"d",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"[",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"]",code:!1,ctrl:!1,shift:!1,alt:!1},{key:!1,code:"numpadadd",ctrl:!1,shift:!1,alt:!1},{key:!1,code:"numpadsubtract",ctrl:!1,shift:!1,alt:!1},{key:"0",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"1",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"2",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"3",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"4",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"5",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"6",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"7",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"8",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"9",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"i",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"arrowleft",code:!1,ctrl:!0,shift:!1,alt:!1},{key:"arrowright",code:!1,ctrl:!0,shift:!1,alt:!1}],i=e.key.toLowerCase(),n=e.code.toLowerCase(),s=e.ctrlKey;e.metaKey&&(s=e.metaKey);let c=e.shiftKey,g=e.altKey,w=!1;if(t.forEach(x=>{(i===x.key||n===x.code)&&s===x.ctrl&&c===x.shift&&g===x.alt&&(w=!0)}),w){let x=e.srcElement,A=!1,oe=!1;x&&(typeof x.nodeName<"u"&&(A=x.nodeName.toLowerCase()),typeof x.getAttribute<"u"&&(oe=x.getAttribute("id"))),(!x||A.indexOf("input")===-1&&A.indexOf("label")===-1&&A.indexOf("select")===-1&&A.indexOf("textarea")===-1&&A.indexOf("fieldset")===-1&&A.indexOf("legend")===-1&&A.indexOf("datalist")===-1&&A.indexOf("output")===-1&&A.indexOf("option")===-1&&A.indexOf("optgroup")===-1&&oe!=="contenteditable-root")&&(e.preventDefault(),e.stopImmediatePropagation(),P.contentWindow.postMessage("goodTube_shortcut_"+e.type+"_"+e.key+"_"+e.keyCode+"_"+e.ctrlKey+"_"+e.metaKey+"_"+e.shiftKey+"_"+e.altKey,"*"))}}a(Fo,"goodTube_shortcuts_keypress");function Uo(e=!1){l=document.getElementById("movie_player"),l&&typeof l.nextVideo=="function"&&l.nextVideo(),console.log("[GoodTube] Playing next video...")}a(Uo,"goodTube_nav_next");function ka(){l=document.getElementById("movie_player"),l&&typeof l.previousVideo=="function"&&l.previousVideo(),console.log("[GoodTube] Playing previous video...")}a(ka,"goodTube_nav_prev");function wa(){Ut(),(Z==="true"||ne&&Ke{},0);function Go(e=!1){e||(window.top===window.self&&(console.log(` + `,document.head.appendChild(i);let d=document.createElement("div");d.id="goodTube_playerWrapper",d.classList.add("goodTube_hidden"),document.body.appendChild(d);let m=document.createElement("iframe");m.src="https://en.wikipedia.org/wiki/Fuck?goodTubeProxy=1",m.setAttribute("width","100%"),m.setAttribute("height","100%"),m.setAttribute("frameborder","0"),m.setAttribute("scrolling","yes"),m.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"),m.setAttribute("referrerpolicy","strict-origin-when-cross-origin"),m.setAttribute("allowfullscreen",!0),m.style.display="none",d.appendChild(m),le=d,R=m,Ce(),setInterval(Ce,100)}let xe=!1;function fe(){if(v)xe||(De(!0),xe=!0);else{xe=!1;let e=document.querySelector("#player.ytd-watch-flexy");if((!e||e.offsetHeight<=0)&&(e=document.querySelector("#ytd-player")),(!e||e.offsetHeight<=0)&&(e=document.querySelector(".player-size")),(!e||e.offsetHeight<=0)&&(e=document.querySelector(".html5-video-player")),e&&e.offsetHeight>0){let o=e.getBoundingClientRect();le.style.top=o.top+window.scrollY+"px",le.style.left=o.left+window.scrollX+"px",le.style.width=e.offsetWidth+"px",le.style.height=e.offsetHeight+"px",ye(le)}}}let We=setTimeout(()=>{},0);function Ie(){r=document.getElementById("movie_player"),typeof r.getPlaylist=="function"&&typeof r.getPlaylistIndex=="function"&&(se=r.getPlaylist(),Ve=r.getPlaylistIndex(),se||(clearTimeout(We),We=setTimeout(Ie,100)))}let pe=setTimeout(()=>{},0);function Le(){if(A="",dt(),!Ue){clearTimeout(pe),pe=setTimeout(Le,100);return}let e=0;Te==="false"&&typeof S.t<"u"&&(e=parseFloat(S.t.replace("s","")));let o="false";if(typeof S.i<"u"||typeof S.index<"u"||typeof S.list<"u"?(o="true",Ie()):(se=!1,Ve=0),_e){V()||De();let i="";e>0&&(i="&start="+e),R.contentWindow.postMessage("goodTube_src_https://www.youtube.com/embed/"+S.v+"?goodTubeEmbed=1&autoplay=1&goodTube_playlist="+o+"&goodTube_autoplay="+j+"&goodTube_playbackSpeed="+E+"&goodTube_hideInfoCards="+de+"&goodTube_hideEndScreen="+ue+i,"*"),_e=!1}else R.contentWindow.postMessage("goodTube_load_"+S.v+"|||"+e+"|||"+o,"*");Te==="false"&&Qe(),J()}let me=setTimeout(()=>{},0);function Qe(){if(!rt){clearTimeout(me),me=setTimeout(Qe,100);return}r=document.getElementById("movie_player");let e=!1,o=!1;if(r&&typeof r.getVideoData=="function"&&typeof r.getCurrentTime=="function"&&(e=r.getVideoData(),o=e.video_id),!e||!o||o!==S.v){clearTimeout(me),me=setTimeout(Qe,100);return}let i=Math.floor(r.getCurrentTime());i>=10&&St(i,o)}function De(e=!1){we||(e?(r=document.getElementById("movie_player"),r&&typeof r.stopVideo=="function"&&r.stopVideo()):R.contentWindow.postMessage("goodTube_stopVideo","*")),F(le)}function St(e,o=""){R.contentWindow.postMessage("goodTube_skipTo_"+e+"|||"+o,"*")}function dt(){R.contentWindow.postMessage("goodTube_pause","*")}let ie=setTimeout(()=>{},0);function J(){if(!D||!rt){clearTimeout(ie),ie=setTimeout(J,100);return}if(!v)R.contentWindow.postMessage("goodTube_play|||"+S.v,"*");else{r=document.getElementById("movie_player");let e=!1;if(r&&typeof r.getVideoData=="function"&&(e=r.getVideoData()),!e||S.v!==e.video_id){clearTimeout(ie),ie=setTimeout(J,100);return}let o=document.querySelector("#movie_player video");if(o&&o.currentTime>=o.duration)return;r&&typeof r.playVideo=="function"&&setTimeout(()=>{r.playVideo()},100)}}function ve(){document.addEventListener("keydown",ut,!0),document.addEventListener("keyup",ut,!0)}function ut(e){if(!V()||v)return;let o=[{key:">",code:!1,ctrl:!1,shift:!0,alt:!1},{key:"<",code:!1,ctrl:!1,shift:!0,alt:!1},{key:",",code:!1,ctrl:!1,shift:!1,alt:!1},{key:".",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"arrowleft",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"arrowright",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"j",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"l",code:!1,ctrl:!1,shift:!1,alt:!1},{key:" ",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"k",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"m",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"f",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"c",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"o",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"w",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"=",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"-",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"w",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"a",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"s",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"d",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"[",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"]",code:!1,ctrl:!1,shift:!1,alt:!1},{key:!1,code:"numpadadd",ctrl:!1,shift:!1,alt:!1},{key:!1,code:"numpadsubtract",ctrl:!1,shift:!1,alt:!1},{key:"0",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"1",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"2",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"3",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"4",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"5",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"6",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"7",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"8",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"9",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"i",code:!1,ctrl:!1,shift:!1,alt:!1},{key:"arrowleft",code:!1,ctrl:!0,shift:!1,alt:!1},{key:"arrowright",code:!1,ctrl:!0,shift:!1,alt:!1}],i=e.key.toLowerCase(),d=e.code.toLowerCase(),m=e.ctrlKey;e.metaKey&&(m=e.metaKey);let h=e.shiftKey,T=e.altKey,U=!1;if(o.forEach(N=>{(i===N.key||d===N.code)&&m===N.ctrl&&h===N.shift&&T===N.alt&&(U=!0)}),U){let N=e.srcElement,Q=!1,nt=!1;N&&(typeof N.nodeName<"u"&&(Q=N.nodeName.toLowerCase()),typeof N.getAttribute<"u"&&(nt=N.getAttribute("id"))),(!N||Q.indexOf("input")===-1&&Q.indexOf("label")===-1&&Q.indexOf("select")===-1&&Q.indexOf("textarea")===-1&&Q.indexOf("fieldset")===-1&&Q.indexOf("legend")===-1&&Q.indexOf("datalist")===-1&&Q.indexOf("output")===-1&&Q.indexOf("option")===-1&&Q.indexOf("optgroup")===-1&&nt!=="contenteditable-root")&&(e.preventDefault(),e.stopImmediatePropagation(),R.contentWindow.postMessage("goodTube_shortcut_"+e.type+"_"+e.key+"_"+e.keyCode+"_"+e.ctrlKey+"_"+e.metaKey+"_"+e.shiftKey+"_"+e.altKey,"*"))}}function ct(e=!1){r=document.getElementById("movie_player"),r&&typeof r.nextVideo=="function"&&r.nextVideo(),console.log("[GoodTube] Playing next video...")}function It(){r=document.getElementById("movie_player"),r&&typeof r.previousVideo=="function"&&r.previousVideo(),console.log("[GoodTube] Playing previous video...")}function ft(){Ie(),(j==="true"||se&&Ve{},0);function Ze(e=!1){e||(window.top===window.self&&(console.log(` ================================================== ______ ________ __ / ____/___ ____ ____/ /_ __/_ __/ /_ ___ @@ -142,7 +143,7 @@ / /_/ / /_/ / /_/ / /_/ / / / / /_/ / /_/ / __/ \\____/\\____/\\____/\\____/ /_/ \\____/_____/\\___/ -==================================================`),console.log("[GoodTube] Initiating...")),window.addEventListener("message",Qo),Vt(),document.addEventListener("DOMContentLoaded",Yt),(document.readyState==="interactive"||document.readyState==="complete")&&Yt()),!document.body||!document.head?(clearTimeout(Yo),Yo=setTimeout(()=>{Go(!0)},1)):Yt()}a(Go,"goodTube_init");function Yt(){Ho||(Ho=!0,La(),ca(),fa(),Oo(),Da(),Ea(),va(),Ia())}a(Yt,"goodTube_init_domReady");let rt=setTimeout(()=>{},0);function Qo(e){if(typeof e.data=="string"){if(!document.body||!document.head?(clearTimeout(rt),rt=setTimeout(()=>{Qo(e)},100)):e.data==="goodTube_proxyIframe_loaded"?Ro=!0:e.data==="goodTube_playerIframe_loaded"&&(Pt=!0,P.style.display="block"),e.data.indexOf("goodTube_pip_")!==-1)e.data.replace("goodTube_pip_","")==="true"?Be=!0:(Be=!1,typeof k.v>"u"&&it());else if(e.data.indexOf("goodTube_playbackSpeed_")!==-1)m("goodTube_playbackSpeed",e.data.replace("goodTube_playbackSpeed_","")),ye=e.data.replace("goodTube_playbackSpeed_","");else if(e.data==="goodTube_prevVideo")ka();else if(e.data==="goodTube_nextVideo")Uo();else if(e.data==="goodTube_videoEnded")wa();else if(e.data==="goodTube_theater"&&!document.fullscreenElement){let t=document.querySelector(".ytp-size-button");t&&W(t)}else if(e.data==="goodTube_autoplay_false")m("goodTube_autoplay","false"),Z="false";else if(e.data==="goodTube_autoplay_true")m("goodTube_autoplay","true"),Z="true";else if(e.data.indexOf("goodTube_syncMainPlayer_")!==-1&&U()&&!_){let t=parseFloat(e.data.replace("goodTube_syncMainPlayer_","")),i=document.querySelector("#movie_player video");if(l=document.getElementById("movie_player"),!l||typeof l.seekTo!="function"||typeof l.playVideo!="function"||typeof l.mute!="function"||typeof l.setVolume!="function")return;i&&Math.floor(i.currentTime)!==Math.floor(t)&&!Ot()&&(Bt=!0,l.playVideo(),l.seekTo(t-.5),l.mute(),l.setVolume(0),i.volume=0,i.muted=!0,clearTimeout(rt),rt=setTimeout(()=>{Bt=!1},1e3))}else if(e.data==="goodTube_fallback_enable")_=!0,document.body&&!document.body.classList.contains("goodTube_fallback")&&document.body.classList.add("goodTube_fallback"),ha(),Ko(),nt(),document.fullscreenElement&&(document.exitFullscreen(),window.setTimeout(()=>{let t=document.querySelector(".ytp-fullscreen-button");t&&W(t)},100));else if(e.data==="goodTube_fallback_disable")_=!1,document.body&&document.body.classList.contains("goodTube_fallback")&&document.body.classList.remove("goodTube_fallback"),document.fullscreenElement&&(document.exitFullscreen(),window.setTimeout(()=>{P.contentWindow.postMessage("goodTube_fullscreen","*")},100));else if(e.data.indexOf("goodTube_syncAspectRatio_")!==-1){let t=e.data.replace("goodTube_syncAspectRatio_","").split("_");_a(t[0],t[1])}}}a(Qo,"goodTube_receiveMessage");function jo(){let e=Lo;e&&(e=e.split("#")[0],e=e.split("index=")[0]);let t=window.location.href;t&&(t=t.split("#")[0],t=t.split("index=")[0]),e!==t&&(k=Io(),U()?(zo(),Sa()):it(),Lo=window.location.href),U()&&(Aa(),ga(),_||ba(),ya(),Ta(),Ma()),ma()}a(jo,"goodTube_actions");function Ia(){let e=document.createElement("div");document.body.appendChild(e);let t=" checked";be==="true"&&(t="");let i="";Pe==="true"&&(i=" checked");let n="";ze==="true"&&(n=" checked");let s="";Je==="true"&&(s=" checked");let c="";Xe==="true"&&(c=" checked");let g="";$e==="true"&&(g=" checked");let w="";Ve==="true"&&(w=" checked");let x="";et==="true"&&(x=" checked"),Ze(e,` +==================================================`),console.log("[GoodTube] Initiating...")),window.addEventListener("message",Re),Se(),document.addEventListener("DOMContentLoaded",Me),(document.readyState==="interactive"||document.readyState==="complete")&&Me()),!document.body||!document.head?(clearTimeout(ge),ge=setTimeout(()=>{Ze(!0)},1)):Me()}function Me(){q||(q=!0,Oe(),B(),M(),ce(),Wt(),je(),ve(),Gt())}let Ke=setTimeout(()=>{},0);function Re(e){if(typeof e.data=="string"){if(!document.body||!document.head?(clearTimeout(Ke),Ke=setTimeout(()=>{Re(e)},100)):e.data==="goodTube_proxyIframe_loaded"?Ue=!0:e.data==="goodTube_playerIframe_loaded"&&(rt=!0,R.style.display="block"),e.data.indexOf("goodTube_pip_")!==-1)e.data.replace("goodTube_pip_","")==="true"?we=!0:(we=!1,typeof S.v>"u"&&De());else if(e.data.indexOf("goodTube_playbackSpeed_")!==-1)a("goodTube_playbackSpeed",e.data.replace("goodTube_playbackSpeed_","")),E=e.data.replace("goodTube_playbackSpeed_","");else if(e.data==="goodTube_prevVideo")It();else if(e.data==="goodTube_nextVideo")ct();else if(e.data==="goodTube_videoEnded")ft();else if(e.data==="goodTube_theater"&&!document.fullscreenElement){let o=document.querySelector(".ytp-size-button");o&&b(o)}else if(e.data==="goodTube_autoplay_false")a("goodTube_autoplay","false"),j="false";else if(e.data==="goodTube_autoplay_true")a("goodTube_autoplay","true"),j="true";else if(e.data.indexOf("goodTube_syncMainPlayer_")!==-1&&V()&&!v){let o=parseFloat(e.data.replace("goodTube_syncMainPlayer_","")),i=document.querySelector("#movie_player video");if(r=document.getElementById("movie_player"),!r||typeof r.seekTo!="function"||typeof r.playVideo!="function"||typeof r.mute!="function"||typeof r.setVolume!="function")return;i&&Math.floor(i.currentTime)!==Math.floor(o)&&!re()&&(at=!0,r.playVideo(),r.seekTo(o-.5),r.mute(),r.setVolume(0),i.volume=0,i.muted=!0,clearTimeout(Ke),Ke=setTimeout(()=>{at=!1},1e3))}else if(e.data==="goodTube_fallback_enable")v=!0,document.body&&!document.body.classList.contains("goodTube_fallback")&&document.body.classList.add("goodTube_fallback"),kt(),gt(),J(),document.fullscreenElement&&(document.exitFullscreen(),window.setTimeout(()=>{let o=document.querySelector(".ytp-fullscreen-button");o&&b(o)},100));else if(e.data==="goodTube_fallback_disable")v=!1,document.body&&document.body.classList.contains("goodTube_fallback")&&document.body.classList.remove("goodTube_fallback"),document.fullscreenElement&&(document.exitFullscreen(),window.setTimeout(()=>{R.contentWindow.postMessage("goodTube_fullscreen","*")},100));else if(e.data.indexOf("goodTube_syncAspectRatio_")!==-1){let o=e.data.replace("goodTube_syncAspectRatio_","").split("_");lt(o[0],o[1])}}}function Ce(){let e=At;e&&(e=e.split("#")[0],e=e.split("index=")[0]);let o=window.location.href;o&&(o=o.split("#")[0],o=o.split("index=")[0]),e!==o&&(S=s(),V()?(Le(),qe()):De(),At=window.location.href),V()&&(Lt(),I(),v||he(),wt(),fe(),Qt()),Et()}function Gt(){let e=document.createElement("div");document.body.appendChild(e);let o=" checked";te==="true"&&(o="");let i="";de==="true"&&(i=" checked");let d="";ue==="true"&&(d=" checked");let m="";ze==="true"&&(m=" checked");let h="";He==="true"&&(h=" checked");let T="";Ye==="true"&&(T=" checked");let U="";Te==="true"&&(U=" checked");let N="";Ge==="true"&&(N=" checked"),Fe(e,` @@ -163,7 +164,7 @@
- +
@@ -173,32 +174,32 @@
- +
- +
- +
- +
- +
- +
@@ -266,7 +267,7 @@ - `);let A=document.createElement("style");A.textContent=` + `);let Q=document.createElement("style");Q.textContent=` /* Menu button ---------------------------------------------------------------------------------------------------- */ .goodTube_menuButton { @@ -592,7 +593,7 @@ margin-bottom: 16px; height: 128px; } - `,document.head.appendChild(A);let oe=document.querySelector(".goodTube_menuButton"),Fe=document.querySelector(".goodTube_menuClose");Fe&&Fe.addEventListener("click",()=>{oe.remove(),Fe.remove()});let z=document.querySelector(".goodTube_modal"),ce=document.querySelector(".goodTube_modal .goodTube_modal_overlay"),ie=document.querySelector(".goodTube_modal .goodTube_modal_closeButton");oe&&oe.addEventListener("click",()=>{if(z){let H=document.querySelector(".goodTube_report");H&&(H.style.display="block");let Y=document.querySelector(".goodTube_successText");Y&&(Y.style.display="none");let h=document.querySelector(".goodTube_reportEmail");h&&(h.value="");let B=document.querySelector(".goodTube_reportText");B&&(B.value=""),z.classList.add("visible")}}),ce&&ce.addEventListener("click",()=>{z&&z.classList.contains("visible")&&z.classList.remove("visible")}),ie&&ie.addEventListener("click",()=>{z&&z.classList.contains("visible")&&z.classList.remove("visible")}),document.addEventListener("keydown",H=>{H.key.toLowerCase()==="escape"&&z&&z.classList.contains("visible")&&z.classList.remove("visible")});let pt=document.getElementById("goodTube_button_saveSettings");pt&&pt.addEventListener("click",()=>{let H=document.querySelector(".goodTube_option_shorts");H&&(H.checked?m("goodTube_shorts","false"):m("goodTube_shorts","true"));let Y=document.querySelector(".goodTube_option_hideInfoCards");Y&&(Y.checked?m("goodTube_hideInfoCards","true"):m("goodTube_hideInfoCards","false"));let h=document.querySelector(".goodTube_option_hideEndScreen");h&&(h.checked?m("goodTube_hideEndScreen","true"):m("goodTube_hideEndScreen","false"));let B=document.querySelector(".goodTube_option_hideSuggestedVideos");B&&(B.checked?m("goodTube_hideSuggestedVideos","true"):m("goodTube_hideSuggestedVideos","false"));let ke=document.querySelector(".goodTube_option_hideComments");ke&&(ke.checked?m("goodTube_hideComments","true"):m("goodTube_hideComments","false"));let mt=document.querySelector(".goodTube_option_hideAiSummaries");mt&&(mt.checked?m("goodTube_hideAiSummaries","true"):m("goodTube_hideAiSummaries","false"));let gt=document.querySelector(".goodTube_option_alwaysStart");gt&&(gt.checked?m("goodTube_alwaysStart","true"):m("goodTube_alwaysStart","false"));let bt=document.querySelector(".goodTube_option_blackBackground");bt&&(bt.checked?m("goodTube_blackBackground","true"):m("goodTube_blackBackground","false")),window.location.href=window.location.href});let Ue=document.querySelector(".goodTube_report"),ft=document.querySelector(".goodTube_successText");Ue&&ft&&Ue.addEventListener("submit",H=>{H.preventDefault(),H.stopImmediatePropagation();let Y={email:document.querySelector(".goodTube_reportEmail")?.value,message:document.querySelector(".goodTube_reportText")?.value},h={method:"POST",body:JSON.stringify(Y),headers:{"Content-Type":"application/json; charset=UTF-8"},referrerPolicy:"no-referrer"};fetch("https://jamenlyndon.com/_other/stats/mail.php",h).then(B=>B.text()).then(B=>{Ue.style.display="none",ft.style.display="block"})})}a(Ia,"goodTube_menu");function La(){window.addEventListener("focus",()=>{zt=!0}),window.addEventListener("blur",()=>{zt=!1})}a(La,"goodTube_checkTabFocus");function Da(){let e=document.createElement("style"),t=` + `,document.head.appendChild(Q);let nt=document.querySelector(".goodTube_menuButton"),oo=document.querySelector(".goodTube_menuClose");oo&&oo.addEventListener("click",()=>{nt.remove(),oo.remove()});let $=document.querySelector(".goodTube_modal"),Lo=document.querySelector(".goodTube_modal .goodTube_modal_overlay"),Do=document.querySelector(".goodTube_modal .goodTube_modal_closeButton");nt&&nt.addEventListener("click",()=>{if($){let ae=document.querySelector(".goodTube_report");ae&&(ae.style.display="block");let Pe=document.querySelector(".goodTube_successText");Pe&&(Pe.style.display="none");let Be=document.querySelector(".goodTube_reportEmail");Be&&(Be.value="");let Ee=document.querySelector(".goodTube_reportText");Ee&&(Ee.value=""),$.classList.add("visible")}}),Lo&&Lo.addEventListener("click",()=>{$&&$.classList.contains("visible")&&$.classList.remove("visible")}),Do&&Do.addEventListener("click",()=>{$&&$.classList.contains("visible")&&$.classList.remove("visible")}),document.addEventListener("keydown",ae=>{ae.key.toLowerCase()==="escape"&&$&&$.classList.contains("visible")&&$.classList.remove("visible")});let Mo=document.getElementById("goodTube_button_saveSettings");Mo&&Mo.addEventListener("click",()=>{let ae=document.querySelector(".goodTube_option_shorts");ae&&(ae.checked?a("goodTube_shorts","false"):a("goodTube_shorts","true"));let Pe=document.querySelector(".goodTube_option_hideInfoCards");Pe&&(Pe.checked?a("goodTube_hideInfoCards","true"):a("goodTube_hideInfoCards","false"));let Be=document.querySelector(".goodTube_option_hideEndScreen");Be&&(Be.checked?a("goodTube_hideEndScreen","true"):a("goodTube_hideEndScreen","false"));let Ee=document.querySelector(".goodTube_option_hideSuggestedVideos");Ee&&(Ee.checked?a("goodTube_hideSuggestedVideos","true"):a("goodTube_hideSuggestedVideos","false"));let Co=document.querySelector(".goodTube_option_hideComments");Co&&(Co.checked?a("goodTube_hideComments","true"):a("goodTube_hideComments","false"));let Oo=document.querySelector(".goodTube_option_hideAiSummaries");Oo&&(Oo.checked?a("goodTube_hideAiSummaries","true"):a("goodTube_hideAiSummaries","false"));let No=document.querySelector(".goodTube_option_alwaysStart");No&&(No.checked?a("goodTube_alwaysStart","true"):a("goodTube_alwaysStart","false"));let Po=document.querySelector(".goodTube_option_blackBackground");Po&&(Po.checked?a("goodTube_blackBackground","true"):a("goodTube_blackBackground","false")),window.location.href=window.location.href});let io=document.querySelector(".goodTube_report"),Ro=document.querySelector(".goodTube_successText");io&&Ro&&io.addEventListener("submit",ae=>{ae.preventDefault(),ae.stopImmediatePropagation();let Pe={email:document.querySelector(".goodTube_reportEmail")?.value,message:document.querySelector(".goodTube_reportText")?.value},Be={method:"POST",body:JSON.stringify(Pe),headers:{"Content-Type":"application/json; charset=UTF-8"},referrerPolicy:"no-referrer"};fetch("https://jamenlyndon.com/_other/stats/mail.php",Be).then(Ee=>Ee.text()).then(Ee=>{io.style.display="none",Ro.style.display="block"})})}function Oe(){window.addEventListener("focus",()=>{D=!0}),window.addEventListener("blur",()=>{D=!1})}function Wt(){let e=document.createElement("style"),o=` .ytp-skip-ad-button { bottom: 48px !important; right: 32px !important; @@ -661,20 +662,20 @@ } } } - `;navigator.userAgent.toLowerCase().indexOf("firefox")===-1&&(t+=` + `;navigator.userAgent.toLowerCase().indexOf("firefox")===-1&&(o+=` .ytp-pip-button { display: inline-block !important; } - `),Pe==="true"&&(t+=` + `),de==="true"&&(o+=` .ytp-ce-covering-overlay, .ytp-ce-element { display: none !important; } - `),ze==="true"&&(t+=` + `),ue==="true"&&(o+=` .ytp-videowall-still { display: none !important; } - `),e.textContent=t,document.head.appendChild(e);function i(n){if(!U()||re!=="enabled"||n.ctrlKey||n.altKey||n.metaKey)return;let s=n.key.toLowerCase(),c=n.srcElement,g=!1,w=!1;c&&(typeof c.nodeName<"u"&&(g=c.nodeName.toLowerCase()),typeof c.getAttribute<"u"&&(w=c.getAttribute("id"))),(!c||g.indexOf("input")===-1&&g.indexOf("label")===-1&&g.indexOf("select")===-1&&g.indexOf("textarea")===-1&&g.indexOf("fieldset")===-1&&g.indexOf("legend")===-1&&g.indexOf("datalist")===-1&&g.indexOf("output")===-1&&g.indexOf("option")===-1&&g.indexOf("optgroup")===-1&&w!=="contenteditable-root")&&(s===" "||s==="k"||s==="m"||s==="i")&&(n.preventDefault(),n.stopImmediatePropagation())}a(i,"disableShortcuts"),document.addEventListener("keydown",i,!0),document.addEventListener("keypress",i,!0),document.addEventListener("keyup",i,!0),Wo()}a(Da,"goodTube_hideAndMuteAdsFallback_init");function Ma(){_&&U()?Ot()?Ca():Ra():re=""}a(Ma,"goodTube_hideAndMuteAdsFallback_check");let re="";function Ca(){let e=document.getElementById("goodTube_hideMuteAdsOverlay");if(re==="enabled"&&e)return;let t=document.querySelector("#movie_player video");t&&(t.playbackRate=2,t.muted=!0,t.volume=0,X(t));let i=document.querySelector(".ytp-chrome-bottom");i&&X(i);let n=document.getElementById("movie_player");n&&(n.style.pointerEvents="none");let s=document.querySelector(".ytp-caption-window-container");if(n&&X(s),!e){let c=document.createElement("div");c.setAttribute("id","goodTube_hideMuteAdsOverlay"),Ze(c,` + `),e.textContent=o,document.head.appendChild(e);function i(d){if(!V()||A!=="enabled"||d.ctrlKey||d.altKey||d.metaKey)return;let m=d.key.toLowerCase(),h=d.srcElement,T=!1,U=!1;h&&(typeof h.nodeName<"u"&&(T=h.nodeName.toLowerCase()),typeof h.getAttribute<"u"&&(U=h.getAttribute("id"))),(!h||T.indexOf("input")===-1&&T.indexOf("label")===-1&&T.indexOf("select")===-1&&T.indexOf("textarea")===-1&&T.indexOf("fieldset")===-1&&T.indexOf("legend")===-1&&T.indexOf("datalist")===-1&&T.indexOf("output")===-1&&T.indexOf("option")===-1&&T.indexOf("optgroup")===-1&&U!=="contenteditable-root")&&(m===" "||m==="k"||m==="m"||m==="i")&&(d.preventDefault(),d.stopImmediatePropagation())}document.addEventListener("keydown",i,!0),document.addEventListener("keypress",i,!0),document.addEventListener("keyup",i,!0),Je()}function Qt(){v&&V()?re()?Ae():jt():A=""}let A="";function Ae(){let e=document.getElementById("goodTube_hideMuteAdsOverlay");if(A==="enabled"&&e)return;let o=document.querySelector("#movie_player video");o&&(o.playbackRate=2,o.muted=!0,o.volume=0,F(o));let i=document.querySelector(".ytp-chrome-bottom");i&&F(i);let d=document.getElementById("movie_player");d&&(d.style.pointerEvents="none");let m=document.querySelector(".ytp-caption-window-container");if(d&&F(m),!e){let h=document.createElement("div");h.setAttribute("id","goodTube_hideMuteAdsOverlay"),Fe(h,`
@@ -682,7 +683,7 @@
Hang tight. Click the skip button if it appears to speed things up.
- `);let g=document.querySelector(".ytp-ad-player-overlay-layout");g&&g.prepend(c)}Gt(!0),re="enabled"}a(Ca,"goodTube_hideAndMuteAdsFallback_enable");function Ra(){if(re==="disabled")return;let e=document.querySelector("#movie_player video");e&&(e.playbackRate=ye,l=document.getElementById("movie_player"),l&&typeof l.unMute=="function"&&typeof l.setVolume=="function"&&typeof l.getVolume=="function"&&(e.volume<=0||e.muted||l.getVolume()===0)&&(e.muted=!1,e.volume=1,l.unMute(),l.setVolume(100)),We(e));let t=document.querySelector(".ytp-chrome-bottom");t&&We(t);let i=document.getElementById("movie_player");i&&(i.style.pointerEvents="auto");let n=document.querySelector(".ytp-caption-window-container");i&&We(n);let s=document.getElementById("goodTube_hideMuteAdsOverlay");s&&s.remove(),Gt(),re="disabled"}a(Ra,"goodTube_hideAndMuteAdsFallback_disable");let qo=setTimeout(()=>{},0);function Wo(){let e=document.querySelector("#movie_player .ytp-autonav-toggle-button");e?e.addEventListener("click",()=>{let t="true";e.getAttribute("aria-checked")==="true"&&(t="false"),m("goodTube_autoplay",t),P.contentWindow.postMessage("goodTube_autoplay_"+t,"*")}):(clearTimeout(qo),qo=setTimeout(Wo,100))}a(Wo,"goodTube_hideAndMuteAdsFallback_autoPlay_init");let Zo=setTimeout(()=>{},0);function Ko(){let e=document.querySelector("#movie_player .ytp-autonav-toggle-button");e&&e.checkVisibility()?e.getAttribute("aria-checked")!==Z&&W(e):(clearTimeout(Zo),Zo=setTimeout(Ko,100))}a(Ko,"goodTube_hideAndMuteAdsFallback_syncAutoplay");let Jo=setTimeout(()=>{},0);function Gt(e=!1){if(!(!_||!U())&&(l=document.getElementById("movie_player"),l&&typeof l.playVideo=="function"&&typeof l.mute=="function"&&typeof l.setVolume=="function")){let t=document.querySelector("#movie_player video");if(l.playVideo(),e&&(l.mute(),l.setVolume(0)),t){e&&(t.muted=!0,t.volume=0);let i=t.currentTime;clearTimeout(Jo),Jo=setTimeout(()=>{t.currentTime===i&&Gt()},100)}}}a(Gt,"goodTube_hideAndMuteAdsFallback_play");let Xo=!1,$o=setTimeout(()=>{},0);function ei(e=!1){e||(window.addEventListener("message",st),document.addEventListener("DOMContentLoaded",dt),(document.readyState==="interactive"||document.readyState==="complete")&&dt()),!document.body||!document.head?(clearTimeout($o),$o=setTimeout(()=>{ei(!0)},1)):dt()}a(ei,"goodTube_iframe_init");let ti=setTimeout(()=>{},0);function dt(){u=document.getElementById("movie_player");let e=!1;if(u&&typeof u.getVideoData=="function"&&(e=u.getVideoData()),!e){clearTimeout(ti),ti=setTimeout(dt,1);return}Xo||(Xo=!0,Pa(),ni(),di(),Va(),xe(),Ya(),setInterval(_i,5e3),Oa(),oi(),setInterval(oi,100),window.top.postMessage("goodTube_playerIframe_loaded","*"))}a(dt,"goodTube_iframe_init_domReady");function oi(){Na(),Ha(),Ba(),Ga(),k.goodTube_playlist!=="undefined"&&k.goodTube_playlist==="true"&&ii(),Qa()}a(oi,"goodTube_iframe_actions");function Na(){document.querySelector(".ytp-error")?_||(_=!0,window.top.postMessage("goodTube_fallback_enable","*"),xe(),clearTimeout(ut)):_&&(_=!1,window.top.postMessage("goodTube_fallback_disable","*"),xe(),clearTimeout(ut))}a(Na,"goodTube_iframe_hideMuteAdsFallback");function Oa(){typeof k.goodTube_playbackSpeed<"u"&&u&&typeof u.setPlaybackRate=="function"&&u.setPlaybackRate(parseFloat(k.goodTube_playbackSpeed)),setInterval(()=>{u&&typeof u.getPlaybackRate=="function"&&window.top.postMessage("goodTube_playbackSpeed_"+u.getPlaybackRate(),"*")},100)}a(Oa,"goodTube_iframe_playbackSpeed");function Ba(){document.querySelectorAll(".ytp-videowall-still:not(.goodTube_fixed), .ytp-ce-covering-overlay:not(.goodTube_fixed)").forEach(t=>{t.addEventListener("click",i=>{i.preventDefault(),i.stopImmediatePropagation(),window.top.location.href=t.href},!0),t.addEventListener("mousedown",i=>{i.button===0&&(i.preventDefault(),i.stopImmediatePropagation())},!0),t.addEventListener("mouseup",i=>{i.button===0&&(i.preventDefault(),i.stopImmediatePropagation())},!0),t.addEventListener("touchstart",i=>{i.preventDefault(),i.stopImmediatePropagation()},!0),t.addEventListener("touchend",i=>{i.preventDefault(),i.stopImmediatePropagation()},!0),t.classList.add("goodTube_fixed")})}a(Ba,"goodTube_iframe_fixLinks");function Pa(){let e=document.createElement("style"),t=` + `);let T=document.querySelector(".ytp-ad-player-overlay-layout");T&&T.prepend(h)}G(!0),A="enabled"}function jt(){if(A==="disabled")return;let e=document.querySelector("#movie_player video");e&&(e.playbackRate=E,r=document.getElementById("movie_player"),r&&typeof r.unMute=="function"&&typeof r.setVolume=="function"&&typeof r.getVolume=="function"&&(e.volume<=0||e.muted||r.getVolume()===0)&&(e.muted=!1,e.volume=1,r.unMute(),r.setVolume(100)),ye(e));let o=document.querySelector(".ytp-chrome-bottom");o&&ye(o);let i=document.getElementById("movie_player");i&&(i.style.pointerEvents="auto");let d=document.querySelector(".ytp-caption-window-container");i&&ye(d);let m=document.getElementById("goodTube_hideMuteAdsOverlay");m&&m.remove(),G(),A="disabled"}let pt=setTimeout(()=>{},0);function Je(){let e=document.querySelector("#movie_player .ytp-autonav-toggle-button");e?e.addEventListener("click",()=>{let o="true";e.getAttribute("aria-checked")==="true"&&(o="false"),a("goodTube_autoplay",o),R.contentWindow.postMessage("goodTube_autoplay_"+o,"*")}):(clearTimeout(pt),pt=setTimeout(Je,100))}let mt=setTimeout(()=>{},0);function gt(){let e=document.querySelector("#movie_player .ytp-autonav-toggle-button");e&&e.checkVisibility()?e.getAttribute("aria-checked")!==j&&b(e):(clearTimeout(mt),mt=setTimeout(gt,100))}let Dt=setTimeout(()=>{},0);function G(e=!1){if(!(!v||!V())&&(r=document.getElementById("movie_player"),r&&typeof r.playVideo=="function"&&typeof r.mute=="function"&&typeof r.setVolume=="function")){let o=document.querySelector("#movie_player video");if(r.playVideo(),e&&(r.mute(),r.setVolume(0)),o){e&&(o.muted=!0,o.volume=0);let i=o.currentTime;clearTimeout(Dt),Dt=setTimeout(()=>{o.currentTime===i&&G()},100)}}}let ne=!1,bt=setTimeout(()=>{},0);function yt(e=!1){e||(window.addEventListener("message",Bt),document.addEventListener("DOMContentLoaded",Ne),(document.readyState==="interactive"||document.readyState==="complete")&&Ne()),!document.body||!document.head?(clearTimeout(bt),bt=setTimeout(()=>{yt(!0)},1)):Ne()}let Xe=setTimeout(()=>{},0);function Ne(){f=document.getElementById("movie_player");let e=!1;if(f&&typeof f.getVideoData=="function"&&(e=f.getVideoData()),!e){clearTimeout(Xe),Xe=setTimeout(Ne,1);return}ne||(ne=!0,Ot(),n(),x(),O(),ot(),Xo(),setInterval(wo,5e3),Rt(),Z(),setInterval(Z,100),window.top.postMessage("goodTube_playerIframe_loaded","*"))}function Z(){Mt(),Jo(),Ct(),$o(),S.goodTube_playlist!=="undefined"&&S.goodTube_playlist==="true"&&Nt(),ei()}function Mt(){document.querySelector(".ytp-error")?v||(v=!0,window.top.postMessage("goodTube_fallback_enable","*"),ot(),clearTimeout(Ft)):v&&(v=!1,window.top.postMessage("goodTube_fallback_disable","*"),ot(),clearTimeout(Ft))}function Rt(){typeof S.goodTube_playbackSpeed<"u"&&f&&typeof f.setPlaybackRate=="function"&&f.setPlaybackRate(parseFloat(S.goodTube_playbackSpeed)),setInterval(()=>{f&&typeof f.getPlaybackRate=="function"&&window.top.postMessage("goodTube_playbackSpeed_"+f.getPlaybackRate(),"*")},100)}function Ct(){document.querySelectorAll(".ytp-videowall-still:not(.goodTube_fixed), .ytp-ce-covering-overlay:not(.goodTube_fixed)").forEach(o=>{o.addEventListener("click",i=>{i.preventDefault(),i.stopImmediatePropagation(),window.top.location.href=o.href},!0),o.addEventListener("mousedown",i=>{i.button===0&&(i.preventDefault(),i.stopImmediatePropagation())},!0),o.addEventListener("mouseup",i=>{i.button===0&&(i.preventDefault(),i.stopImmediatePropagation())},!0),o.addEventListener("touchstart",i=>{i.preventDefault(),i.stopImmediatePropagation()},!0),o.addEventListener("touchend",i=>{i.preventDefault(),i.stopImmediatePropagation()},!0),o.classList.add("goodTube_fixed")})}function Ot(){let e=document.createElement("style"),o=` /* Hide unwanted stuff */ .ytp-gradient-top, .ytp-show-cards-title, @@ -808,22 +809,22 @@ .html5-video-player { background: transparent !important; } - `;navigator.userAgent.toLowerCase().indexOf("firefox")===-1&&(t+=` + `;navigator.userAgent.toLowerCase().indexOf("firefox")===-1&&(o+=` .ytp-pip-button { display: inline-block !important; } - `),k.goodTube_hideInfoCards==="true"&&(t+=` + `),S.goodTube_hideInfoCards==="true"&&(o+=` .ytp-ce-covering-overlay, .ytp-ce-element { display: none !important; } - `),k.goodTube_hideEndScreen==="true"&&(t+=` + `),S.goodTube_hideEndScreen==="true"&&(o+=` .ytp-videowall-still { display: none !important; } - `),e.textContent=t,document.head.appendChild(e)}a(Pa,"goodTube_iframe_style");function ii(){let e=document.querySelector(".ytp-prev-button");e&&!e.classList.contains("goodTube_visible")&&e.classList.add("goodTube_visible")}a(ii,"goodTube_iframe_enablePrevButton");function za(){let e=document.querySelector(".ytp-prev-button");e&&e.classList.contains("goodTube_visible")&&e.classList.remove("goodTube_visible")}a(za,"goodTube_iframe_disablePrevButton");let ai=setTimeout(()=>{},0);function ni(){if(!document.querySelector(".ytp-play-button")){clearTimeout(ai),ai=setTimeout(ni,100);return}let t=document.querySelector(".ytp-prev-button");t&&t.addEventListener("click",function(){window.top.postMessage("goodTube_prevVideo","*")});let i=document.querySelector(".ytp-next-button");i&&i.addEventListener("click",function(){window.top.postMessage("goodTube_nextVideo","*")});let n=document.querySelector(".ytp-size-button");n&&(n.setAttribute("data-tooltip-target-id","ytp-size-button"),n.setAttribute("data-title-no-tooltip","Theater mode (t)"),n.setAttribute("aria-label","Theater mode (t)"),n.setAttribute("title","Theater mode (t)"),n.setAttribute("data-tooltip-title","Theater mode (t)"),Ze(n,` + `),e.textContent=o,document.head.appendChild(e)}function Nt(){let e=document.querySelector(".ytp-prev-button");e&&!e.classList.contains("goodTube_visible")&&e.classList.add("goodTube_visible")}function u(){let e=document.querySelector(".ytp-prev-button");e&&e.classList.contains("goodTube_visible")&&e.classList.remove("goodTube_visible")}let t=setTimeout(()=>{},0);function n(){if(!document.querySelector(".ytp-play-button")){clearTimeout(t),t=setTimeout(n,100);return}let o=document.querySelector(".ytp-prev-button");o&&o.addEventListener("click",function(){window.top.postMessage("goodTube_prevVideo","*")});let i=document.querySelector(".ytp-next-button");i&&i.addEventListener("click",function(){window.top.postMessage("goodTube_nextVideo","*")});let d=document.querySelector(".ytp-size-button");d&&(d.setAttribute("data-tooltip-target-id","ytp-size-button"),d.setAttribute("data-title-no-tooltip","Theater mode (t)"),d.setAttribute("aria-label","Theater mode (t)"),d.setAttribute("title","Theater mode (t)"),d.setAttribute("data-tooltip-title","Theater mode (t)"),Fe(d,` - `),n.addEventListener("click",function(){window.top.postMessage("goodTube_theater","*")}));let s=document.querySelector(".ytp-subtitles-button");if(s){pa(s,"beforebegin",'');let c=document.querySelector("#goodTube_autoplayButton");c&&c.addEventListener("click",function(){let g=c.querySelector(".ytp-autonav-toggle-button");g.getAttribute("aria-checked")==="true"?(g.setAttribute("aria-checked","false"),window.top.postMessage("goodTube_autoplay_false","*")):(g.setAttribute("aria-checked","true"),window.top.postMessage("goodTube_autoplay_true","*"))})}}a(ni,"goodTube_iframe_addCustomButtons");let ri=setTimeout(()=>{},0);function di(){let e=document.querySelector("#movie_player video");if(!e){clearTimeout(ri),ri=setTimeout(di,100);return}e.addEventListener("ended",function(){_i(!0),window.top.postMessage("goodTube_videoEnded","*")})}a(di,"goodTube_iframe_addCustomEvents");function Va(){document.addEventListener("keydown",function(e){if(e.ctrlKey||e.altKey||e.metaKey||_)return;let t=e.key.toLowerCase();if(t==="t"&&window.top.postMessage("goodTube_theater","*"),t==="i"){let i=document.querySelector(".ytp-pip-button");i&&W(i)}else t==="p"&&e.shiftKey?window.top.postMessage("goodTube_prevVideo","*"):t==="n"&&e.shiftKey&&window.top.postMessage("goodTube_nextVideo","*")})}a(Va,"goodTube_iframe_addKeyboardShortcuts");let te=setTimeout(()=>{},0),K=!1,de=-1,le=!1,se=!1,ue=!1,b=document.querySelector("video"),I=document.querySelector(".goodTube_doubleSpeed");function Qt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(_)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),K)||le)return;le=!0,de=u.getPlaybackRate(),clearTimeout(te),te=setTimeout(()=>{u.setPlaybackRate(2),u.playVideo(),I.style.display="block",K=!0},1e3)}}a(Qt,"goodTube_iframe_supportDoubleSpeed_keydown");function jt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(_)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;e.preventDefault(),e.stopImmediatePropagation()}}a(jt,"goodTube_iframe_supportDoubleSpeed_keypress");function qt(e){let t=e.key.toLowerCase();if(t===" "||t==="k"){if(_)return;if(se){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;clearTimeout(te),K?(u.setPlaybackRate(de),I.style.display="none",K=!1):(b=document.querySelector("video"),ue=!0,W(b),ue=!1),le=!1,e.preventDefault(),e.stopImmediatePropagation()}}a(qt,"goodTube_iframe_supportDoubleSpeed_keyup");function _e(e){if(e.button===0&&!ue&&!_){if(le){e.preventDefault(),e.stopImmediatePropagation();return}se=!0,e.preventDefault(),e.stopImmediatePropagation(),de=u.getPlaybackRate(),clearTimeout(te),te=setTimeout(()=>{u.setPlaybackRate(2),u.playVideo(),I.style.display="block",K=!0},1e3)}}a(_e,"goodTube_iframe_supportDoubleSpeed_mouseDownTouchStart");function Wt(e){ue||_||(e.preventDefault(),e.stopImmediatePropagation())}a(Wt,"goodTube_iframe_supportDoubleSpeed_click");function he(e){if(e.button===0&&!ue&&!_){if(le){e.preventDefault(),e.stopImmediatePropagation();return}clearTimeout(te),K?(u.setPlaybackRate(de),I.style.display="none",K=!1):(b=document.querySelector("video"),ue=!0,W(b),ue=!1,setTimeout(b.focus())),se=!1,e.preventDefault(),e.stopImmediatePropagation()}}a(he,"goodTube_iframe_supportDoubleSpeed_mouseUpTouchEnd");function Te(e){if(!_){if(le){e.preventDefault(),e.stopImmediatePropagation();return}e.preventDefault(),e.stopImmediatePropagation(),clearTimeout(te),K&&(u.setPlaybackRate(de),I.style.display="none",K=!1),se=!1}}a(Te,"goodTube_iframe_supportDoubleSpeed_mouseOutTouchCancel");let lt=setTimeout(()=>{},0);function xe(){if(clearTimeout(te),K=!1,le=!1,se=!1,b=document.querySelector("video"),I=document.querySelector(".goodTube_doubleSpeed"),_){document.removeEventListener("keydown",Qt,!0),document.removeEventListener("keypress",jt,!0),document.removeEventListener("keyup",qt,!0),b&&(b.removeEventListener("mousedown",_e,!0),b.removeEventListener("touchstart",_e,!0),b.removeEventListener("click",Wt,!0),b.removeEventListener("mouseup",he,!0),b.removeEventListener("touchend",he,!0),b.removeEventListener("mouseout",Te,!0),b.removeEventListener("touchcancel",Te,!0)),I&&(I.style.display="none");return}if(!b){clearTimeout(lt),lt=setTimeout(xe,100);return}if(u=document.getElementById("movie_player"),!u||typeof u.getPlaybackRate!="function"||typeof u.setPlaybackRate!="function"||typeof u.playVideo!="function"){clearTimeout(lt),lt=setTimeout(xe,100);return}if(de=u.getPlaybackRate(),u.setPlaybackRate(de),I)I.style.display="none";else{I=document.createElement("div"),I.classList.add("goodTube_doubleSpeed"),I.style.position="relative",I.style.zIndex="999",I.style.display="none",Ze(I,` + `),d.addEventListener("click",function(){window.top.postMessage("goodTube_theater","*")}));let m=document.querySelector(".ytp-subtitles-button");if(m){Yt(m,"beforebegin",'');let h=document.querySelector("#goodTube_autoplayButton");h&&h.addEventListener("click",function(){let T=h.querySelector(".ytp-autonav-toggle-button");T.getAttribute("aria-checked")==="true"?(T.setAttribute("aria-checked","false"),window.top.postMessage("goodTube_autoplay_false","*")):(T.setAttribute("aria-checked","true"),window.top.postMessage("goodTube_autoplay_true","*"))})}}let l=setTimeout(()=>{},0);function x(){let e=document.querySelector("#movie_player video");if(!e){clearTimeout(l),l=setTimeout(x,100);return}e.addEventListener("ended",function(){wo(!0),window.top.postMessage("goodTube_videoEnded","*")})}function O(){document.addEventListener("keydown",function(e){if(e.ctrlKey||e.altKey||e.metaKey||v)return;let o=e.key.toLowerCase();if(o==="t"&&window.top.postMessage("goodTube_theater","*"),o==="i"){let i=document.querySelector(".ytp-pip-button");i&&b(i)}else o==="p"&&e.shiftKey?window.top.postMessage("goodTube_prevVideo","*"):o==="n"&&e.shiftKey&&window.top.postMessage("goodTube_nextVideo","*")})}let _=setTimeout(()=>{},0),w=!1,P=-1,W=!1,X=!1,k=!1,y=document.querySelector("video"),L=document.querySelector(".goodTube_doubleSpeed");function qt(e){let o=e.key.toLowerCase();if(o===" "||o==="k"){if(v)return;if(X){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),w)||W)return;W=!0,P=f.getPlaybackRate(),clearTimeout(_),_=setTimeout(()=>{f.setPlaybackRate(2),f.playVideo(),L.style.display="block",w=!0},1e3)}}function Zt(e){let o=e.key.toLowerCase();if(o===" "||o==="k"){if(v)return;if(X){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;e.preventDefault(),e.stopImmediatePropagation()}}function Kt(e){let o=e.key.toLowerCase();if(o===" "||o==="k"){if(v)return;if(X){e.preventDefault(),e.stopImmediatePropagation();return}if(e.ctrlKey||e.altKey||e.metaKey)return;clearTimeout(_),w?(f.setPlaybackRate(P),L.style.display="none",w=!1):(y=document.querySelector("video"),k=!0,b(y),k=!1),W=!1,e.preventDefault(),e.stopImmediatePropagation()}}function $e(e){if(e.button===0&&!k&&!v){if(W){e.preventDefault(),e.stopImmediatePropagation();return}X=!0,e.preventDefault(),e.stopImmediatePropagation(),P=f.getPlaybackRate(),clearTimeout(_),_=setTimeout(()=>{f.setPlaybackRate(2),f.playVideo(),L.style.display="block",w=!0},1e3)}}function Jt(e){k||v||(e.preventDefault(),e.stopImmediatePropagation())}function et(e){if(e.button===0&&!k&&!v){if(W){e.preventDefault(),e.stopImmediatePropagation();return}clearTimeout(_),w?(f.setPlaybackRate(P),L.style.display="none",w=!1):(y=document.querySelector("video"),k=!0,b(y),k=!1,setTimeout(y.focus())),X=!1,e.preventDefault(),e.stopImmediatePropagation()}}function tt(e){if(!v){if(W){e.preventDefault(),e.stopImmediatePropagation();return}e.preventDefault(),e.stopImmediatePropagation(),clearTimeout(_),w&&(f.setPlaybackRate(P),L.style.display="none",w=!1),X=!1}}let Pt=setTimeout(()=>{},0);function ot(){if(clearTimeout(_),w=!1,W=!1,X=!1,y=document.querySelector("video"),L=document.querySelector(".goodTube_doubleSpeed"),v){document.removeEventListener("keydown",qt,!0),document.removeEventListener("keypress",Zt,!0),document.removeEventListener("keyup",Kt,!0),y&&(y.removeEventListener("mousedown",$e,!0),y.removeEventListener("touchstart",$e,!0),y.removeEventListener("click",Jt,!0),y.removeEventListener("mouseup",et,!0),y.removeEventListener("touchend",et,!0),y.removeEventListener("mouseout",tt,!0),y.removeEventListener("touchcancel",tt,!0)),L&&(L.style.display="none");return}if(!y){clearTimeout(Pt),Pt=setTimeout(ot,100);return}if(f=document.getElementById("movie_player"),!f||typeof f.getPlaybackRate!="function"||typeof f.setPlaybackRate!="function"||typeof f.playVideo!="function"){clearTimeout(Pt),Pt=setTimeout(ot,100);return}if(P=f.getPlaybackRate(),f.setPlaybackRate(P),L)L.style.display="none";else{L=document.createElement("div"),L.classList.add("goodTube_doubleSpeed"),L.style.position="relative",L.style.zIndex="999",L.style.display="none",Fe(L,`
2x
@@ -834,7 +835,7 @@
- `);let e=document.querySelector(".html5-video-player");e&&e.appendChild(I)}document.removeEventListener("keydown",Qt,!0),document.addEventListener("keydown",Qt,!0),document.removeEventListener("keypress",jt,!0),document.addEventListener("keypress",jt,!0),document.removeEventListener("keyup",qt,!0),document.addEventListener("keyup",qt,!0),b.removeEventListener("mousedown",_e,!0),b.addEventListener("mousedown",_e,!0),b.removeEventListener("touchstart",_e,!0),b.addEventListener("touchstart",_e,!0),b.removeEventListener("click",Wt,!0),b.addEventListener("click",Wt,!0),b.removeEventListener("mouseup",he,!0),b.addEventListener("mouseup",he,!0),b.removeEventListener("touchend",he,!0),b.addEventListener("touchend",he,!0),b.removeEventListener("mouseout",Te,!0),b.addEventListener("mouseout",Te,!0),b.removeEventListener("touchcancel",Te,!0),b.addEventListener("touchcancel",Te,!0)}a(xe,"goodTube_iframe_supportDoubleSpeed_init");function Fa(e,t){u=document.getElementById("movie_player"),u&&typeof u.loadVideoById=="function"&&typeof u.getVideoData=="function"&&(u.loadVideoById({videoId:e,startSeconds:t}),xe())}a(Fa,"goodTube_iframe_loadVideo");let ve=setTimeout(()=>{},0);function st(e){if(typeof e.data!="string")return;if(!document.body||!document.head){clearTimeout(ve),ve=setTimeout(()=>{st(e)},100);return}u=document.getElementById("movie_player");let t=!1;if(u&&typeof u.getVideoData=="function"&&(t=u.getVideoData()),!t){clearTimeout(ve),ve=setTimeout(()=>{st(e)},100);return}if(e.data.indexOf("goodTube_load_")!==-1){let i=e.data.replace("goodTube_load_","").split("|||"),n=i[0],s=parseFloat(i[1]);i[2]==="true"?ii():za(),Fa(n,s)}else if(e.data==="goodTube_stopVideo")Kt(),mi();else if(e.data.indexOf("goodTube_skipTo_")!==-1){let i=e.data.replace("goodTube_skipTo_","").split("|||"),n=parseFloat(i[0]),s=i[1];if(s!==""&&t.video_id!==s){clearTimeout(ve),ve=setTimeout(()=>{st(e)},100);return}ci(n)}else if(e.data==="goodTube_pause")Kt();else if(e.data.indexOf("goodTube_play|||")!==-1)yi(e.data.replace("goodTube_play|||",""));else if(e.data==="goodTube_endScreen_show")document.body&&document.body.classList.contains("goodTube_hideEndScreen")&&document.body.classList.remove("goodTube_hideEndScreen");else if(e.data==="goodTube_endScreen_hide")document.body&&!document.body.classList.contains("goodTube_hideEndScreen")&&document.body.classList.add("goodTube_hideEndScreen");else if(e.data.indexOf("goodTube_shortcut_")!==-1){let i=document.querySelector("video");if(i){let n=e.data.replace("goodTube_shortcut_","").split("_"),s=n[0],c={bubbles:!0,key:n[1],keyCode:n[2],ctrlKey:n[3]==="true",metaKey:n[4]==="true",shiftKey:n[5]==="true",altKey:n[6]==="true"};i.dispatchEvent(new KeyboardEvent(s,c))}}else e.data==="goodTube_fullscreen"?li():e.data==="goodTube_autoplay_true"?(m("goodTube_autoplay","true"),Z="true",Zt("true")):e.data==="goodTube_autoplay_false"&&(m("goodTube_autoplay","false"),Z="false",Zt("false"))}a(st,"goodTube_iframe_receiveMessage");let ut=setTimeout(()=>{},0);function li(){let e=document.querySelector(".ytp-fullscreen-button");e?W(e):(clearTimeout(ut),ut=setTimeout(li,100))}a(li,"goodTube_iframe_fullscreen");let si=setTimeout(()=>{},0);function Zt(e){let t=document.querySelector("#goodTube_autoplayButton");t?t.querySelector(".ytp-autonav-toggle-button").getAttribute("aria-checked")!==e&&W(t):(clearTimeout(si),si=setTimeout(()=>{Zt(e)},100))}a(Zt,"goodTube_iframe_setAutoplay");let ui=setTimeout(()=>{},0);function ci(e){let t=document.querySelector("video");t?t.currentTime=parseFloat(e):(clearTimeout(ui),ui=setTimeout(()=>{ci(e)},100))}a(ci,"goodTube_iframe_skipTo");let pi=setTimeout(()=>{},0);function Kt(){let e=document.querySelector("video");e?e.pause():(clearTimeout(pi),pi=setTimeout(Kt,100))}a(Kt,"goodTube_iframe_pause");let fi=setTimeout(()=>{},0);function mi(){let e=document.querySelector("video");e?e.muted=!0:(clearTimeout(fi),fi=setTimeout(mi,100))}a(mi,"goodTube_iframe_mute");let gi=setTimeout(()=>{},0);function Ua(){let e=document.querySelector("video");e?e.muted=!1:(clearTimeout(gi),gi=setTimeout(Ua,100))}a(Ua,"goodTube_iframe_unmute");let bi=setTimeout(()=>{},0);function yi(e){u=document.getElementById("movie_player");let t=!1;if(u&&typeof u.getVideoData=="function"&&(t=u.getVideoData()),!t||e!==t.video_id){clearTimeout(bi),bi=setTimeout(()=>{yi(e)},100);return}let i=document.querySelector("#movie_player video");i&&i.currentTime>=i.duration||u&&typeof u.playVideo=="function"&&u.playVideo()}a(yi,"goodTube_iframe_play");function Ha(){let e=document.querySelector(".ytp-fullscreen-button");e&&(e.setAttribute("aria-disabled","false"),document.querySelector(".ytp-fullscreen")?e.setAttribute("title","Exit full screen (f)"):e.setAttribute("title","Full screen (f)"))}a(Ha,"goodTube_iframe_fixFullScreenButton");function _i(e=!1){let t=document.querySelector("video");if(t){let i=t.currentTime;e&&(i=t.duration),window.top.postMessage("goodTube_syncMainPlayer_"+i,"*")}}a(_i,"goodTube_iframe_syncMainPlayer");function Ya(){addEventListener("leavepictureinpicture",e=>{Be=!1,window.top.postMessage("goodTube_pip_false","*")}),addEventListener("enterpictureinpicture",e=>{Be=!0,window.top.postMessage("goodTube_pip_true","*")})}a(Ya,"goodTube_iframe_pip");function Ga(){"mediaSession"in navigator&&(navigator.mediaSession.setActionHandler("nexttrack",()=>{window.top.postMessage("goodTube_nextVideo","*")}),navigator.mediaSession.setActionHandler("previoustrack",()=>{window.top.postMessage("goodTube_prevVideo","*")}))}a(Ga,"goodTube_iframe_enablePipButtons");function Qa(){let e=document.querySelector("video");if(e){let n=function(g,w){return w==0?g:n(w,g%w)},s=function(g,w){var x=n(g,w);return[g/x,w/x]};a(n,"gcd"),a(s,"calculateAspectRatio");let t=e.videoWidth,i=e.videoHeight,c=s(t,i);c.length===2&&!isNaN(c[0])&&!isNaN(c[1])&&window.top.postMessage("goodTube_syncAspectRatio_"+c[0]+"_"+c[1],"*")}}a(Qa,"goodTube_iframe_syncAspectRatio");let hi=!1,Ti=setTimeout(()=>{},0);function xi(){window.addEventListener("message",Xt),document.addEventListener("DOMContentLoaded",Jt),(document.readyState==="interactive"||document.readyState==="complete")&&Jt(),!document.body||!document.head?(clearTimeout(Ti),Ti=setTimeout(xi,1)):Jt()}a(xi,"goodTube_proxyIframe_init");function Jt(){hi||(hi=!0,ja(),qa(),window.top.postMessage("goodTube_proxyIframe_loaded","*"))}a(Jt,"goodTube_proxyIframe_init_domReady");function ja(){let e=document.createElement("style");e.textContent=` + `);let e=document.querySelector(".html5-video-player");e&&e.appendChild(L)}document.removeEventListener("keydown",qt,!0),document.addEventListener("keydown",qt,!0),document.removeEventListener("keypress",Zt,!0),document.addEventListener("keypress",Zt,!0),document.removeEventListener("keyup",Kt,!0),document.addEventListener("keyup",Kt,!0),y.removeEventListener("mousedown",$e,!0),y.addEventListener("mousedown",$e,!0),y.removeEventListener("touchstart",$e,!0),y.addEventListener("touchstart",$e,!0),y.removeEventListener("click",Jt,!0),y.addEventListener("click",Jt,!0),y.removeEventListener("mouseup",et,!0),y.addEventListener("mouseup",et,!0),y.removeEventListener("touchend",et,!0),y.addEventListener("touchend",et,!0),y.removeEventListener("mouseout",tt,!0),y.addEventListener("mouseout",tt,!0),y.removeEventListener("touchcancel",tt,!0),y.addEventListener("touchcancel",tt,!0)}function Zo(e,o){f=document.getElementById("movie_player"),f&&typeof f.loadVideoById=="function"&&typeof f.getVideoData=="function"&&(f.loadVideoById({videoId:e,startSeconds:o}),ot())}let it=setTimeout(()=>{},0);function Bt(e){if(typeof e.data!="string")return;if(!document.body||!document.head){clearTimeout(it),it=setTimeout(()=>{Bt(e)},100);return}f=document.getElementById("movie_player");let o=!1;if(f&&typeof f.getVideoData=="function"&&(o=f.getVideoData()),!o){clearTimeout(it),it=setTimeout(()=>{Bt(e)},100);return}if(e.data.indexOf("goodTube_load_")!==-1){let i=e.data.replace("goodTube_load_","").split("|||"),d=i[0],m=parseFloat(i[1]);i[2]==="true"?Nt():u(),Zo(d,m)}else if(e.data==="goodTube_stopVideo")$t(),xo();else if(e.data.indexOf("goodTube_skipTo_")!==-1){let i=e.data.replace("goodTube_skipTo_","").split("|||"),d=parseFloat(i[0]),m=i[1];if(m!==""&&o.video_id!==m){clearTimeout(it),it=setTimeout(()=>{Bt(e)},100);return}_o(d)}else if(e.data==="goodTube_pause")$t();else if(e.data.indexOf("goodTube_play|||")!==-1)Eo(e.data.replace("goodTube_play|||",""));else if(e.data==="goodTube_endScreen_show")document.body&&document.body.classList.contains("goodTube_hideEndScreen")&&document.body.classList.remove("goodTube_hideEndScreen");else if(e.data==="goodTube_endScreen_hide")document.body&&!document.body.classList.contains("goodTube_hideEndScreen")&&document.body.classList.add("goodTube_hideEndScreen");else if(e.data.indexOf("goodTube_shortcut_")!==-1){let i=document.querySelector("video");if(i){let d=e.data.replace("goodTube_shortcut_","").split("_"),m=d[0],h={bubbles:!0,key:d[1],keyCode:d[2],ctrlKey:d[3]==="true",metaKey:d[4]==="true",shiftKey:d[5]==="true",altKey:d[6]==="true"};i.dispatchEvent(new KeyboardEvent(m,h))}}else e.data==="goodTube_fullscreen"?go():e.data==="goodTube_autoplay_true"?(a("goodTube_autoplay","true"),j="true",Xt("true")):e.data==="goodTube_autoplay_false"&&(a("goodTube_autoplay","false"),j="false",Xt("false"))}let Ft=setTimeout(()=>{},0);function go(){let e=document.querySelector(".ytp-fullscreen-button");e?b(e):(clearTimeout(Ft),Ft=setTimeout(go,100))}let bo=setTimeout(()=>{},0);function Xt(e){let o=document.querySelector("#goodTube_autoplayButton");o?o.querySelector(".ytp-autonav-toggle-button").getAttribute("aria-checked")!==e&&b(o):(clearTimeout(bo),bo=setTimeout(()=>{Xt(e)},100))}let yo=setTimeout(()=>{},0);function _o(e){let o=document.querySelector("video");o?o.currentTime=parseFloat(e):(clearTimeout(yo),yo=setTimeout(()=>{_o(e)},100))}let To=setTimeout(()=>{},0);function $t(){let e=document.querySelector("video");e?e.pause():(clearTimeout(To),To=setTimeout($t,100))}let ho=setTimeout(()=>{},0);function xo(){let e=document.querySelector("video");e?e.muted=!0:(clearTimeout(ho),ho=setTimeout(xo,100))}let vo=setTimeout(()=>{},0);function Ko(){let e=document.querySelector("video");e?e.muted=!1:(clearTimeout(vo),vo=setTimeout(Ko,100))}let Ao=setTimeout(()=>{},0);function Eo(e){f=document.getElementById("movie_player");let o=!1;if(f&&typeof f.getVideoData=="function"&&(o=f.getVideoData()),!o||e!==o.video_id){clearTimeout(Ao),Ao=setTimeout(()=>{Eo(e)},100);return}let i=document.querySelector("#movie_player video");i&&i.currentTime>=i.duration||f&&typeof f.playVideo=="function"&&f.playVideo()}function Jo(){let e=document.querySelector(".ytp-fullscreen-button");e&&(e.setAttribute("aria-disabled","false"),document.querySelector(".ytp-fullscreen")?e.setAttribute("title","Exit full screen (f)"):e.setAttribute("title","Full screen (f)"))}function wo(e=!1){let o=document.querySelector("video");if(o){let i=o.currentTime;e&&(i=o.duration),window.top.postMessage("goodTube_syncMainPlayer_"+i,"*")}}function Xo(){addEventListener("leavepictureinpicture",e=>{we=!1,window.top.postMessage("goodTube_pip_false","*")}),addEventListener("enterpictureinpicture",e=>{we=!0,window.top.postMessage("goodTube_pip_true","*")})}function $o(){"mediaSession"in navigator&&(navigator.mediaSession.setActionHandler("nexttrack",()=>{window.top.postMessage("goodTube_nextVideo","*")}),navigator.mediaSession.setActionHandler("previoustrack",()=>{window.top.postMessage("goodTube_prevVideo","*")}))}function ei(){let e=document.querySelector("video");if(e){let d=function(T,U){return U==0?T:d(U,T%U)},m=function(T,U){var N=d(T,U);return[T/N,U/N]},o=e.videoWidth,i=e.videoHeight,h=m(o,i);h.length===2&&!isNaN(h[0])&&!isNaN(h[1])&&window.top.postMessage("goodTube_syncAspectRatio_"+h[0]+"_"+h[1],"*")}}let ko=!1,So=setTimeout(()=>{},0);function Io(){window.addEventListener("message",to),document.addEventListener("DOMContentLoaded",eo),(document.readyState==="interactive"||document.readyState==="complete")&&eo(),!document.body||!document.head?(clearTimeout(So),So=setTimeout(Io,1)):eo()}function eo(){ko||(ko=!0,ti(),oi(),window.top.postMessage("goodTube_proxyIframe_loaded","*"))}function ti(){let e=document.createElement("style");e.textContent=` /* Hide the page */ body *:not(#goodTube_youtube_iframe) { display: none !important; @@ -856,4 +857,9 @@ right: 0; z-index: 99999; } - `,document.head.appendChild(e)}a(ja,"goodTube_proxyIframe_style");function qa(){let e=document.createElement("iframe");e.src="",e.setAttribute("width","100%"),e.setAttribute("height","100%"),e.setAttribute("frameborder","0"),e.setAttribute("scrolling","yes"),e.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"),e.setAttribute("referrerpolicy","strict-origin-when-cross-origin"),e.setAttribute("allowfullscreen",!0),e.setAttribute("id","goodTube_youtube_iframe"),document.body.appendChild(e)}a(qa,"goodTube_proxyIframe_addYoutubeIframe");let ct=setTimeout(()=>{},0);function Xt(e){if(typeof e.data!="string")return;(!document.body||!document.head)&&(clearTimeout(ct),ct=setTimeout(()=>{Xt(e)},100));let t=document.getElementById("goodTube_youtube_iframe");t?e.data.indexOf("goodTube_src_")!==-1?t.src===""||t.src.indexOf("?goodTubeProxy=1")!==-1?t.src=e.data.replace("goodTube_src_",""):t.contentWindow.location.replace(e.data.replace("goodTube_src_","")):t.contentWindow.postMessage(e.data,"*"):(clearTimeout(ct),ct=setTimeout(()=>{Xt(e)},100))}a(Xt,"goodTube_proxyIframe_receiveMessage");function Wa(){window.top===window.self&&window.location.href.indexOf("youtube")!==-1?Go():window.location.href.indexOf("?goodTubeProxy=1")!==-1?xi():window.location.href.indexOf("?goodTubeEmbed=1")!==-1&&ei()}a(Wa,"goodTube_start"),Wa()})();})(); + `,document.head.appendChild(e)}function oi(){let e=document.createElement("iframe");e.src="",e.setAttribute("width","100%"),e.setAttribute("height","100%"),e.setAttribute("frameborder","0"),e.setAttribute("scrolling","yes"),e.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"),e.setAttribute("referrerpolicy","strict-origin-when-cross-origin"),e.setAttribute("allowfullscreen",!0),e.setAttribute("id","goodTube_youtube_iframe"),document.body.appendChild(e)}let Ut=setTimeout(()=>{},0);function to(e){if(typeof e.data!="string")return;(!document.body||!document.head)&&(clearTimeout(Ut),Ut=setTimeout(()=>{to(e)},100));let o=document.getElementById("goodTube_youtube_iframe");o?e.data.indexOf("goodTube_src_")!==-1?o.src===""||o.src.indexOf("?goodTubeProxy=1")!==-1?o.src=e.data.replace("goodTube_src_",""):o.contentWindow.location.replace(e.data.replace("goodTube_src_","")):o.contentWindow.postMessage(e.data,"*"):(clearTimeout(Ut),Ut=setTimeout(()=>{to(e)},100))}function ii(){window.top===window.self&&window.location.href.indexOf("youtube")!==-1?Ze():window.location.href.indexOf("?goodTubeProxy=1")!==-1?Io():window.location.href.indexOf("?goodTubeEmbed=1")!==-1&&yt()}ii()})();})(); +/*! Bundled license information: + +dompurify/dist/purify.es.mjs: + (*! @license DOMPurify 3.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.0/LICENSE *) +*/ diff --git a/package.json b/package.json index 91d320e..dc0cc78 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,9 @@ { "scripts": { - "watch": "esbuild ./goodtube.js --bundle --outfile=./goodtube.min.js --bundle --watch --keep-names --minify" + "watch": "esbuild ./goodtube.js --bundle --outfile=./goodtube.min.js --bundle --watch --minify" }, "devDependencies": { + "dompurify": "^3.3.0", "esbuild": "^0.26.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53aa982..5a53d40 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: devDependencies: + dompurify: + specifier: ^3.3.0 + version: 3.3.0 esbuild: specifier: ^0.26.0 version: 0.26.0 @@ -170,6 +173,12 @@ packages: cpu: [x64] os: [win32] + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + dompurify@3.3.0: + resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} + esbuild@0.26.0: resolution: {integrity: sha512-3Hq7jri+tRrVWha+ZeIVhl4qJRha/XjRNSopvTsOaCvfPHrflTYTcUFcEjMKdxofsXXsdc4zjg5NOTnL4Gl57Q==} engines: {node: '>=18'} @@ -255,6 +264,13 @@ snapshots: '@esbuild/win32-x64@0.26.0': optional: true + '@types/trusted-types@2.0.7': + optional: true + + dompurify@3.3.0: + optionalDependencies: + '@types/trusted-types': 2.0.7 + esbuild@0.26.0: optionalDependencies: '@esbuild/aix-ppc64': 0.26.0