| 1 |
- !function(){"use strict";const e=33554432,t="data-sf-nesting-track-id",o=globalThis.singlefileBootstrap,n=new Map;let a,r,s,i,d,c,l,u,m,f,h,v,E,y;async function g(){if(document.documentElement.dataset&&void 0!==document.documentElement.dataset.sfz){const e=await p();document.querySelectorAll("#sfz-error-message").forEach(e=>e.remove()),function(e){document.dispatchEvent(new CustomEvent("single-file-bootstrap",{detail:{data:e}}))}(e)}else if(document.body&&1==document.body.childNodes.length&&"PRE"==document.body.childNodes[0].tagName&&/<html[^>]* data-sfz[^>]*>/i.test(document.body.childNodes[0].textContent)){const e=(new DOMParser).parseFromString(document.body.childNodes[0].textContent,"text/html");document.replaceChild(e.documentElement,document.documentElement),document.querySelectorAll("script").forEach(e=>{const t=document.createElement("script");t.textContent=e.textContent,e.parentElement.replaceChild(t,e)}),await g()}}function p(){return new Promise((e,t)=>{const o=new XMLHttpRequest;o.open("GET",location.href),o.send(),o.responseType="arraybuffer",o.onload=()=>e(new Uint8Array(o.response)),o.onerror=()=>{const o=document.getElementById("sfz-error-message");o&&o.remove();const a=n.size;n.set(a,{resolve:e,reject:t}),browser.runtime.sendMessage({method:"singlefile.fetch",requestId:a,url:location.href})}})}async function b(e){return d&&"content.autosave"==e.method?(async function(e){r=e.options,"complete"!=document.readyState&&await new Promise(e=>globalThis.addEventListener("load",e));await w(),r.autoSaveRepeat&&setTimeout(()=>{d&&!l&&(u=!1,r.autoSaveDelay=0,b(e))},1e3*r.autoSaveRepeatDelay)}(e),{}):"content.maybeInit"==e.method?(S(),{}):"content.init"==e.method?(r=e.options,d=e.autoSaveEnabled,T(),{}):"content.openEditor"==e.method?(O(document)?D(document):T(),{}):"singlefile.fetchResponse"==e.method?await async function(e){const t=n.get(e.requestId);if(t)return e.error?(t.reject(new Error(e.error)),n.delete(e.requestId)):(e.truncated&&(t.array?t.array=t.array.concat(e.array):(t.array=e.array,n.set(e.requestId,t)),e.finished&&(e.array=t.array)),e.truncated&&!e.finished||(t.resolve(e.array),n.delete(e.requestId))),{}}(e):void 0}function S(){const e=document.querySelector("singlefile-infobar");e&&e.remove(),m==location.href||o.pageInfo.processing||(u=!1,m=location.href,browser.runtime.sendMessage({method:"tabs.init",savedPageDetected:O(document)}).catch(()=>{}),browser.runtime.sendMessage({method:"ui.processInit"}).catch(()=>{}))}async function w(){const e=o.helper;if((!l||c)&&!u)if(l=!0,r.autoSaveDelay&&!c)await new Promise(e=>c=setTimeout(e,1e3*r.autoSaveDelay)),await w();else{const t=globalThis[e.WAIT_FOR_USERSCRIPT_PROPERTY_NAME];let n,a=[];c=null,!r.removeFrames&&globalThis.frames&&globalThis.frames.length&&(a=await o.processors.frameTree.getAsync(r)),n=a&&a.sessionId,r.userScriptEnabled&&t&&await t(e.ON_BEFORE_CAPTURE_EVENT_NAME);const s=e.preProcessDoc(document,globalThis,r);C(s,a),n&&o.processors.frameTree.cleanup(n),e.postProcessDoc(document,s.markedElements,s.invalidElements),r.userScriptEnabled&&t&&await t(e.ON_AFTER_CAPTURE_EVENT_NAME),u=!0,l=!1}}function T(){d&&r&&(r.autoSaveUnload||r.autoSaveLoadOrUnload||r.autoSaveDiscard||r.autoSaveRemove)?a||(globalThis.addEventListener("unload",R),document.addEventListener("visibilitychange",A),a=!0):(globalThis.removeEventListener("unload",R),document.removeEventListener("visibilitychange",A),a=!1)}function A(){"hidden"==document.visibilityState&&r.autoSaveDiscard&&I({autoSaveDiscard:r.autoSaveDiscard})}function R(){!u&&(r.autoSaveUnload||r.autoSaveLoadOrUnload||r.autoSaveRemove)&&I({autoSaveUnload:r.autoSaveUnload,autoSaveRemove:r.autoSaveRemove})}function I({autoSaveUnload:e,autoSaveDiscard:t,autoSaveRemove:n}){const a=o.helper,s=globalThis[a.WAIT_FOR_USERSCRIPT_PROPERTY_NAME];let i=[];!r.removeFrames&&globalThis.frames&&globalThis.frames.length&&(i=o.processors.frameTree.getSync(r)),r.userScriptEnabled&&s&&s(a.ON_BEFORE_CAPTURE_EVENT_NAME);C(a.preProcessDoc(document,globalThis,r),i,{autoSaveUnload:e,autoSaveDiscard:t,autoSaveRemove:n})}function C(e,t,{autoSaveUnload:n,autoSaveDiscard:a,autoSaveRemove:d}={}){const c=o.helper,l=o.pageInfo.visitDate.getTime();browser.runtime.sendMessage({method:"autosave.save",tabId:s,tabIndex:i,taskId:r.taskId,content:c.serialize(document),canvases:e.canvases,fonts:e.fonts,stylesheets:e.stylesheets,images:e.images,posters:e.posters,usedFonts:e.usedFonts,shadowRoots:e.shadowRoots,videos:e.videos,referrer:e.referrer,adoptedStyleSheets:e.adoptedStyleSheets,worklets:e.worklets,frames:t,url:location.href,visitDate:l,autoSaveUnload:n,autoSaveDiscard:a,autoSaveRemove:d})}async function D(n){let a;h?a=await p():(P(n),function(e){s(e.body);const o=function(e,t){const o=(new DOMParser).parseFromString(e,"text/html");o.head||o.documentElement.insertBefore(o.createElement("HEAD"),o.body);let n=o.querySelector("base");n&&n.getAttribute("href")||(n&&n.remove(),n=o.createElement("base"),n.setAttribute("href",t),o.head.insertBefore(n,o.head.firstChild));return o}(function(e){const t=e.doctype;let o="";t&&(o="<!DOCTYPE "+t.nodeName,t.publicId?(o+=' PUBLIC "'+t.publicId+'"',t.systemId&&(o+=' "'+t.systemId+'"')):t.systemId&&(o+=' SYSTEM "'+t.systemId+'"'),t.internalSubset&&(o+=" ["+t.internalSubset+"]"),o+="> ");return o+e.documentElement.outerHTML}(e)),n=i(e.body),a=i(o.body),r=new Set;function s(e,o=0,n=""){const a=n?`${n}.${o+1}`:`${o+1}`;e.setAttribute(t,a),Array.from(e.children).forEach((e,t)=>s(e,t,a))}function i(e){const o={};return n(e),o;function n(e){if(e.getAttribute){const a=e.getAttribute(t);a&&(o[a]=e),Array.from(e.children).forEach(n)}}}function d(e,o){const n=e.getAttribute(t);n&&!o.has(n)&&e.removeAttribute(t),Array.from(e.children).forEach(e=>d(e,o))}Object.keys(n).forEach(o=>{if(o in a){if((n[o].parentElement?.getAttribute(t)||null)!==(a[o]?.parentElement?.getAttribute(t)||null)){let a=n[o];for(;a&&a!==e.body;){const e=a.getAttribute(t);e&&r.add(e),a=a.parentElement}}}}),d(e.body,r)}(n),a=o.helper.serialize(n));for(let t=0;t*e<a.length;t++){const o={method:"editor.open",filename:decodeURIComponent(location.href.match(/^.*\/(.*)$/)[1]),compressContent:h,extractDataFromPageTags:v,insertTextBody:E,insertMetaCSP:y,selfExtractingArchive:h};o.truncated=a.length>e,o.truncated?(o.finished=(t+1)*e>a.length,a instanceof Uint8Array?o.content=Array.from(a.subarray(t*e,(t+1)*e)):o.content=a.substring(t*e,(t+1)*e)):(o.embeddedImage=await M(a),o.content=a instanceof Uint8Array?Array.from(a):a),await browser.runtime.sendMessage(o)}}async function M(e){if(137==e[0]&&80==e[1]&&78==e[2]&&71==e[3]){let t=new Blob([new Uint8Array(e)],{type:"image/png"});const o=URL.createObjectURL(t),n=new Image;n.src=o,await new Promise((e,t)=>{n.onload=e,n.onerror=t});const a=new OffscreenCanvas(n.width,n.height);a.getContext("2d").drawImage(n,0,0),t=await a.convertToBlob({type:"image/png"});const r=await t.arrayBuffer();return Array.from(new Uint8Array(r))}}function O(e){if(void 0===f){const t=o.helper,n=e.documentElement.firstChild;h=e.documentElement.dataset&&""==e.documentElement.dataset.sfz,v=Boolean(e.querySelector("sfz-extra-data")),E=Boolean(e.querySelector("body > main[hidden]")),y=Boolean(e.querySelector("meta[http-equiv=content-security-policy]")),f=h||n.nodeType==Node.COMMENT_NODE&&(n.textContent.includes(t.COMMENT_HEADER)||n.textContent.includes(t.COMMENT_HEADER_LEGACY))}return f}function P(e){e.querySelectorAll("*").forEach(e=>{const t=o.helper.getShadowRoot(e);if(t){P(t);const o=document.createElement("template");o.setAttribute("shadowrootmode","open"),Array.from(t.childNodes).forEach(e=>o.appendChild(e)),e.appendChild(o)}})}o.pageInfo={visitDate:new Date},browser.runtime.sendMessage({method:"bootstrap.init"}).then(e=>{r=e.optionsAutoSave;const t=e.options;s=e.tabId,i=e.tabIndex,d=e.autoSaveEnabled,t&&t.autoOpenEditor&&O(document)?"loading"==document.readyState?document.addEventListener("DOMContentLoaded",()=>D(document)):D(document):"loading"==document.readyState?document.addEventListener("DOMContentLoaded",T):T()}),browser.runtime.onMessage.addListener(e=>{if(d&&"content.autosave"==e.method||"content.maybeInit"==e.method||"content.init"==e.method||"content.openEditor"==e.method||"singlefile.fetchResponse"==e.method)return b(e)}),document.addEventListener("DOMContentLoaded",S,!1),globalThis.window==globalThis.top&&location&&location.href&&(location.href.startsWith("file://")||location.href.startsWith("content://"))&&("loading"==document.readyState?document.addEventListener("DOMContentLoaded",g,!1):g())}();
|