From a47e125f6e54ab2a336b12f36e80aaed03821964 Mon Sep 17 00:00:00 2001 From: Nicholas Jitkoff Date: Thu, 30 Jun 2022 07:25:05 -0700 Subject: [PATCH] don't add to history when framed / previewed --- docs/index.js | 106 +++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 57 deletions(-) diff --git a/docs/index.js b/docs/index.js index 7104349..2a5cccf 100644 --- a/docs/index.js +++ b/docs/index.js @@ -2,21 +2,13 @@ window.bitty = bitty; - const HEAD_TAGS = () => btoa('\n'); - const HEAD_TAGS_EXTENDED = () => btoa(` `); - // if ('serviceWorker' in navigator) { // navigator.serviceWorker // .register('/worker.js') // .then(function() { console.debug("Service Worker Registered"); }); // } - function dismiss() { - if (document.getElementById("never").checked) window.localStorage.setItem('toasted', true); - document.body.classList.remove("toasting") - } - - const isIframed = window.self !== window.top; + const isFramed = window.self !== window.top; function addToast() { // `
@@ -26,6 +18,10 @@ //

//
` } + // function dismiss() { + // if (document.getElementById("never").checked) window.localStorage.setItem('toasted', true); + // document.body.classList.remove("toasting") + // } function showLoader(state) { let loader = document.getElementById("loader"); @@ -35,16 +31,11 @@ loader = document.createElement("div"); loader.id = "loader"; document.body.appendChild(loader); - } - - setTimeout(() => document.body.classList.toggle("loading", true), 1) - - } else { - document.body.classList.toggle("loading", false) - if (loader) { - setTimeout(() => loader?.parentElement.removeChild(loader), 500) - } + } + } else if (loader) { + setTimeout(() => loader?.parentElement?.removeChild(loader), 500) } + setTimeout(() => document.body.classList.toggle("loading", state), 1) } window.showLoader = showLoader; @@ -164,8 +155,13 @@ async function renderContent() { showLoader(true) + var fragment = window.location.hash.substring(1); + if (fragment.length < 3) { + return location.href = "/edit"; + } + if (window.location.search) { // Redirect search to path (coming out of server opengraph forwarding) window.history.replaceState(null, null, window.location.search.substring(1) + "#" + fragment); } @@ -174,8 +170,17 @@ var isEdge = navigator.userAgent.match(/Edge\//); var isWatch = (window.outerWidth < 200); - if (fragment.length < 3) { - return location.href = "/edit"; + let bittyInfo = bitty.parseBittyURL(location); + let durl = new bitty.DataURL(bittyInfo.hashData); + + if (durl.params.compress) { + console.log("Compressing URL", durl); + delete durl.params.compress; + durl.compress(bitty.GZIP_MARKER).then(arg => { + window.history.replaceState(null, null, "/#/" + arg.href); + renderContent(); + }) + return; } // if (!window.localStorage.getItem('toasted')) document.body.classList.add("toasting"); @@ -216,20 +221,22 @@ } if (fragment.startsWith("data:")) { - let info = bitty.infoForDataURL(fragment); - renderer = info.params?.render ? {script:info.params.render, sandbox:"hash"} : renderers[info.mediatype]; - type = "data:" + info.mediaType; + renderer = durl.params?.render ? {script:durl.params.render, sandbox:"hash"} : renderers[durl.mediatype]; + console.log("mod", durl.mediatype) + type = "data:" + durl.mediaype; + if (durl.mediatype == "text/html") { + dataPrefix = bitty.HEAD_TAGS(); + } else if (durl.mediatype == "text/plain" || durl.mediatype == undefined) { - if (info.mediatype == "text/html") { - dataPrefix = HEAD_TAGS(); - } else if (info.mediatype == "text/plain" || info.mediatype == undefined) { - dataPrefix = HEAD_TAGS_EXTENDED(); - fragment = fragment.replace("text/plain", "text/html"); + dataPrefix = bitty.HEAD_TAGS_EXTENDED(); + durl.mediatype = "text/html"; + // fragment = fragment.replace("text/plain,", "text/html").replace(",", "text/html"); + renderMode = "data"; - } else if (info.type == "text") { - } else if (info.type == "image") { - } else if (info.type == undefined) { + } else if (durl.type == "text") { + } else if (durl.type == "image") { + } else if (durl.type == undefined) { } else if (!renderer) { console.log("unknown type, rendering as download") renderMode = "download"; @@ -256,9 +263,9 @@ } var compressed = true; - dataPrefix = HEAD_TAGS_EXTENDED(); + dataPrefix = bitty.HEAD_TAGS_EXTENDED(); let encoding = !compressed ? "base64," : (fragment.startsWith("XQA") ? bitty.LZMA_MARKER : bitty.GZIP_MARKER); - fragment = "data:text/html;charset=utf-8;format=" + encoding + ";base64," + fragment; + durl = new bitty.DataURL(`data:text/html;charset=utf-8;format=${encoding};base64,${fragment}`); } @@ -268,18 +275,6 @@ 'Edge only supports shorter URLs (maximum 2083 bytes).
Larger sites may require a different browser.
Learn more'; } - let durl = new bitty.DataURL(fragment); - - if (durl.params.compress) { - console.log("Compressing URL", durl); - delete durl.params.compress; - durl.compress(bitty.GZIP_MARKER).then(arg => { - window.history.replaceState(null, null, "/#/" + arg.href); - renderContent(); - }) - return; - } - await durl.decompress(); durl.dataPrefix = dataPrefix; @@ -329,7 +324,7 @@ } let recordHistory = true - if (!isIframed && recordHistory) recordToHistory(durl); + if (!isFramed && recordHistory) recordToHistory(durl); }; @@ -398,7 +393,6 @@ async function recordToHistory() { let location = window.location; let fragment = location.hash; - fragment = fragment.substring(fragment.indexOf("/") + 1); // var slashIndex = fragment.indexOf("/"); // var title = fragment.substring(0, slashIndex) || info.title; @@ -410,19 +404,17 @@ async function recordToHistory() { if (!metadata.title) { let dom = await (await durl.decompress()).parseDom(); - for (let el of dom.getElementsByTagName('script')) { el.parentNode.removeChild(el) } - - metadata.title = dom.title; - metadata.description = dom.body?.innerText.trim(); - if (!metadata.title.length) { - metadata.title = (dom.body?.children[0]?.innerText.trim())?.split("\n").pop(); + if (dom) { + for (let el of dom.getElementsByTagName('script')) { el.parentNode.removeChild(el) } + metadata.title = dom.title; + metadata.description = dom.body?.innerText.trim(); + if (!metadata.title.length) { + metadata.title = (dom.body?.children[0]?.innerText.trim())?.split("\n").pop(); + } + metadata.description = metadata.description?.replace(metadata.title, "").trim(); } - metadata.description = metadata.description?.replace(metadata.title, "").trim(); - - console.log("Extracting metadata from content", metadata); - }