mirror of
https://github.com/arfct/itty-bitty.git
synced 2026-03-11 08:54:33 +00:00
don't add to history when framed / previewed
This commit is contained in:
parent
327fd3f25b
commit
a47e125f6e
1 changed files with 49 additions and 57 deletions
106
docs/index.js
106
docs/index.js
|
|
@ -2,21 +2,13 @@
|
|||
|
||||
window.bitty = bitty;
|
||||
|
||||
const HEAD_TAGS = () => btoa('<base target="_top">\n');
|
||||
const HEAD_TAGS_EXTENDED = () => btoa(`<meta charset="utf-8"><meta name="viewport" content="width=device-width"><base target="_top"><style type="text/css">body{margin:0 auto;padding:12vmin 10vmin;max-width:35em;line-height:1.5em;font-family:-apple-system,BlinkMacSystemFont,sans-serif;word-wrap:break-word;}@media(prefers-color-scheme: dark){body{color:white;background-color:#111;}}</style> `);
|
||||
|
||||
// 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() {
|
||||
// `<div id="toast">
|
||||
|
|
@ -26,6 +18,10 @@
|
|||
// <br><br><button onclick="dismiss()">I understand</button> <input id="never" type="checkbox"><label for="never">Never show this</label>
|
||||
// </div>`
|
||||
}
|
||||
// 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).<br>Larger sites may require a different browser.<br><a href="http://reference.bitty.site">Learn more</a>';
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue