mirror of
https://github.com/arfct/itty-bitty.git
synced 2026-03-11 08:54:33 +00:00
Add legacy code
This commit is contained in:
parent
77f79f8ea9
commit
e6204f6959
10 changed files with 279 additions and 4 deletions
|
|
@ -1,9 +1,7 @@
|
|||
#! /bin/bash
|
||||
cd docs
|
||||
cd docs/legacy
|
||||
terser data.js > data-min.js
|
||||
|
||||
cd index.src
|
||||
terser index.js > index-min.js
|
||||
uglifycss index.css > index-min.css
|
||||
|
||||
awk '$1 == "@include"{system("cat " $2); next} 1' index.html > ../index.html
|
||||
awk '$1 == "@include"{system("cat " $2); next} 1' index.src.html > index.html
|
||||
|
|
|
|||
18
docs/legacy.html
Normal file
18
docs/legacy.html
Normal file
File diff suppressed because one or more lines are too long
1
docs/legacy/data-min.js
vendored
Normal file
1
docs/legacy/data-min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
var BASE64_MARKER=";base64,";var LZMA64_MARKER=";bxze64,";function compressDataURI(dataURI,callback){var base64Index=dataURI.indexOf(BASE64_MARKER);var base64=dataURI.substring(base64Index+BASE64_MARKER.length);stringToZip(base64ToByteArray(base64),(function(result){callback(dataURI.substring(0,base64Index)+LZMA64_MARKER+result)}))}function base64ToByteArray(base64){var raw=window.atob(base64);var rawLength=raw.length;var array=new Uint8Array(new ArrayBuffer(rawLength));for(i=0;i<rawLength;i++){array[i]=raw.charCodeAt(i)}return array}function stringToZip(string,callback){LZMA.compress(string,9,(function(result,error){if(error)console.error(error);var base64String=btoa(String.fromCharCode.apply(null,new Uint8Array(result)));return callback(base64String)}))}function decompressDataURI(dataURI,preamble,callback){var base64Index=dataURI.indexOf(LZMA64_MARKER);if(base64Index>0){var base64=dataURI.substring(base64Index+LZMA64_MARKER.length);zipToString(base64,(function(result){stringToData(result,(function(data){if(!data)return callback(undefined);callback(dataURI.substring(0,base64Index)+BASE64_MARKER+(preamble||"")+data.split(",")[1])}))}))}else{callback(dataURI)}}function zipToString(data,callback){var array=base64ToByteArray(data);LZMA.decompress(array,(function(result,error){if(!(typeof result==="string"))result=new Uint8Array(result);if(error)console.error(error);callback(result)}))}function stringToData(string,callback){if(!string.length)return callback("");var a=new FileReader;a.onload=function(e){callback(e.target.result.replace())};a.readAsDataURL(new Blob([string],{encoding:"UTF-8",type:"text/html;charset=UTF-8"}))}function dataToString(data,callback){var blob=dataURItoBlob(data);var reader=new FileReader;reader.onload=function(e){callback(reader.result)};reader.readAsText(blob)}function dataURItoBlob(dataURI){var byteString=atob(dataURI.split(",")[1]);var mimeString=dataURI.split(",")[0].split(":")[1].split(";")[0];var arrayBuffer=new ArrayBuffer(byteString.length);var _ia=new Uint8Array(arrayBuffer);for(var i=0;i<byteString.length;i++){_ia[i]=byteString.charCodeAt(i)}var dataView=new DataView(arrayBuffer);var blob=new Blob([dataView.buffer],{type:mimeString});return blob}
|
||||
79
docs/legacy/data.js
Normal file
79
docs/legacy/data.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
var BASE64_MARKER = ';base64,';
|
||||
var LZMA64_MARKER = ';bxze64,';
|
||||
|
||||
function compressDataURI(dataURI, callback) {
|
||||
var base64Index = dataURI.indexOf(BASE64_MARKER);
|
||||
var base64 = dataURI.substring(base64Index + BASE64_MARKER.length);
|
||||
stringToZip(base64ToByteArray(base64), function(result) {
|
||||
callback(dataURI.substring(0, base64Index) + LZMA64_MARKER + result)
|
||||
})
|
||||
}
|
||||
|
||||
function base64ToByteArray(base64) {
|
||||
var raw = window.atob(base64);
|
||||
var rawLength = raw.length;
|
||||
var array = new Uint8Array(new ArrayBuffer(rawLength));
|
||||
for(i = 0; i < rawLength; i++) {
|
||||
array[i] = raw.charCodeAt(i);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
function stringToZip(string, callback) {
|
||||
LZMA.compress(string, 9, function(result, error) {
|
||||
if (error) console.error(error);
|
||||
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(result)));
|
||||
return callback(base64String);
|
||||
});
|
||||
}
|
||||
|
||||
function decompressDataURI(dataURI, preamble, callback) {
|
||||
var base64Index = dataURI.indexOf(LZMA64_MARKER);
|
||||
if (base64Index > 0) {
|
||||
var base64 = dataURI.substring(base64Index + LZMA64_MARKER.length);
|
||||
zipToString(base64, function(result) {
|
||||
stringToData(result, function(data) {
|
||||
if (!data) return callback(undefined);
|
||||
callback(dataURI.substring(0, base64Index) + BASE64_MARKER + (preamble || '') + data.split(',')[1])
|
||||
})
|
||||
})
|
||||
} else {
|
||||
callback(dataURI)
|
||||
}
|
||||
}
|
||||
|
||||
function zipToString(data, callback) {
|
||||
var array = base64ToByteArray(data);
|
||||
LZMA.decompress(array, function(result, error) {
|
||||
if (!(typeof result === 'string')) result = new Uint8Array(result)
|
||||
if (error) console.error(error);
|
||||
callback(result);
|
||||
});
|
||||
}
|
||||
|
||||
function stringToData(string, callback) {
|
||||
if (!string.length) return callback("");
|
||||
var a = new FileReader();
|
||||
a.onload = function(e) { callback(e.target.result.replace()) }
|
||||
a.readAsDataURL(new Blob([string], {encoding:"UTF-8",type:"text/html;charset=UTF-8"}));
|
||||
}
|
||||
|
||||
function dataToString(data, callback) {
|
||||
var blob = dataURItoBlob(data)
|
||||
var reader = new FileReader();
|
||||
reader.onload = function(e) { callback(reader.result) }
|
||||
reader.readAsText(blob);
|
||||
}
|
||||
|
||||
function dataURItoBlob(dataURI) {
|
||||
var byteString = atob(dataURI.split(',')[1]);
|
||||
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
||||
var arrayBuffer = new ArrayBuffer(byteString.length);
|
||||
var _ia = new Uint8Array(arrayBuffer);
|
||||
for (var i = 0; i < byteString.length; i++) {
|
||||
_ia[i] = byteString.charCodeAt(i);
|
||||
}
|
||||
var dataView = new DataView(arrayBuffer);
|
||||
var blob = new Blob([dataView.buffer], { type: mimeString });
|
||||
return blob;
|
||||
}
|
||||
1
docs/legacy/index-min.css
vendored
Normal file
1
docs/legacy/index-min.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
body{font-family:sans-serif}#iframe{border:0;position:absolute;top:0;left:0;width:100%;height:100%}#edit{font-family:monospace;font-weight:bold;color:rgba(0,0,0,0.54);position:absolute;z-index:100;position:absolute;top:.85em;right:1em;display:none}#edit:not(:hover){text-decoration:none}#warning{position:absolute;border-radius:4px;background-color:#feecc2;padding:1em;font-size:16px;width:20em;z-index:100;top:10vh;left:50vw;margin-left:-10em}#warning:empty{display:none}body.toasting #iframe,body.toasting #edit{opacity:.5;pointer-events:none}body.toasting #toast{box-sizing:border-box;background-color:#feecc2;border-radius:4px;font-size:13px;left:50%;top:10px;margin-left:-160px;padding:1em;position:absolute;max-width:320px;z-index:101}body:not(.toasting) #toast,body.toasting #warning{display:none}
|
||||
1
docs/legacy/index-min.js
vendored
Normal file
1
docs/legacy/index-min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
var HEAD_TAGS="PGJhc2UgdGFyZ2V0PSJfdG9wIj4K";var HEAD_TAGS_EXTENDED="PG1ldGEgY2hhcnNldD0idXRmLTgiPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiPjxiYXNlIHRhcmdldD0iX3RvcCI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj5ib2R5e21hcmdpbjowIGF1dG87cGFkZGluZzoxMnZtaW4gMTB2bWluO21heC13aWR0aDozNWVtO2xpbmUtaGVpZ2h0OjEuNWVtO2ZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxzYW5zLXNlcmlmO3dvcmQtd3JhcDogYnJlYWstd29yZDt9PC9zdHlsZT4g";function dismiss(){if(document.getElementById("never").checked)window.localStorage.setItem("toasted",true);document.body.classList.remove("toasting")}window.onhashchange=window.onload=function(){var hash=window.location.hash.substring(1);if(hash.length<3){location.href="/edit"}else{var iframe=document.getElementById("iframe");var link=document.getElementById("edit");var preamble=undefined;var slashIndex=hash.indexOf("/");var title=hash.substring(0,slashIndex);document.title=title.length?decodeURIComponent(title.replace(/_/g," ")):location.hostname;hash=hash.substring(slashIndex+1);var editable=hash.charAt(0)=="?";if(editable){hash=hash.substring(1)}if(hash.indexOf("data:")!=0){var colon=hash.indexOf(":");if(colon>0&&colon<15){document.body.classList.remove("toasting");return window.location.replace(hash)}var compressed=true;preamble=HEAD_TAGS_EXTENDED;hash="data:text/html;charset=utf-8;"+(compressed?"bxze64,":"base64,")+hash}else if(hash.indexOf("data:text/html;")==0){preamble=HEAD_TAGS}else if(hash.indexOf("data:text/plain;")==0){preamble=HEAD_TAGS_EXTENDED}link.onclick=function(){location.href="/edit"+location.hash};var isIE=navigator.userAgent.match(/rv:11/);var isEdge=navigator.userAgent.match(/Edge\//);if((isEdge||isIE)&&location.href.length==2083){document.getElementById("warning").innerHTML='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>'}decompressDataURI(hash,preamble,(function(hash){if(!hash)return;iframe.sandbox="allow-scripts allow-downloads allow-forms allow-top-navigation allow-popups allow-modals allow-popups-to-escape-sandbox";if(!isIE){if(hash)iframe.src=hash}else{dataToString(hash,(function(content){var doc=iframe.contentWindow.document;doc.open();doc.write(content);doc.close()}))}}));var link=document.getElementById("edit");link.href="/edit"+location.hash;link.style.display=editable?"block":"none"}};
|
||||
62
docs/legacy/index.css
Normal file
62
docs/legacy/index.css
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
body {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
#iframe {
|
||||
border: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#edit {
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
color: rgba(0, 0, 0, 0.54);
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
position: absolute;
|
||||
top: 0.85em;
|
||||
right: 1em;
|
||||
display: none;
|
||||
}
|
||||
#edit:not(:hover) {
|
||||
text-decoration: none;
|
||||
}
|
||||
#warning {
|
||||
position: absolute;
|
||||
border-radius: 4px;
|
||||
background-color: #feecc2;
|
||||
padding: 1em;
|
||||
font-size: 16px;
|
||||
width: 20em;
|
||||
z-index: 100;
|
||||
top: 10vh;
|
||||
left: 50vw;
|
||||
margin-left: -10em;
|
||||
}
|
||||
#warning:empty {
|
||||
display: none;
|
||||
}
|
||||
body.toasting #iframe,
|
||||
body.toasting #edit {
|
||||
opacity: 0.5;
|
||||
pointer-events: none;
|
||||
}
|
||||
body.toasting #toast {
|
||||
box-sizing: border-box;
|
||||
background-color: #feecc2;
|
||||
border-radius: 4px;
|
||||
font-size: 13px;
|
||||
left: 50%;
|
||||
top: 10px;
|
||||
margin-left: -160px;
|
||||
padding: 1em;
|
||||
position: absolute;
|
||||
max-width: 320px;
|
||||
z-index: 101;
|
||||
}
|
||||
body:not(.toasting) #toast,
|
||||
body.toasting #warning {
|
||||
display: none;
|
||||
}
|
||||
18
docs/legacy/index.html
Normal file
18
docs/legacy/index.html
Normal file
File diff suppressed because one or more lines are too long
78
docs/legacy/index.js
Normal file
78
docs/legacy/index.js
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
var HEAD_TAGS = "PGJhc2UgdGFyZ2V0PSJfdG9wIj4K";
|
||||
var HEAD_TAGS_EXTENDED =
|
||||
"PG1ldGEgY2hhcnNldD0idXRmLTgiPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiPjxiYXNlIHRhcmdldD0iX3RvcCI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj5ib2R5e21hcmdpbjowIGF1dG87cGFkZGluZzoxMnZtaW4gMTB2bWluO21heC13aWR0aDozNWVtO2xpbmUtaGVpZ2h0OjEuNWVtO2ZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxzYW5zLXNlcmlmO3dvcmQtd3JhcDogYnJlYWstd29yZDt9PC9zdHlsZT4g";
|
||||
|
||||
function dismiss() {
|
||||
if (document.getElementById("never").checked) window.localStorage.setItem('toasted', true);
|
||||
document.body.classList.remove("toasting")
|
||||
}
|
||||
|
||||
window.onhashchange = window.onload = function() {
|
||||
var hash = window.location.hash.substring(1);
|
||||
if (hash.length < 3) {
|
||||
location.href = "/edit";
|
||||
} else {
|
||||
// if (!window.localStorage.getItem('toasted')) document.body.classList.add("toasting");
|
||||
|
||||
var iframe = document.getElementById("iframe");
|
||||
var link = document.getElementById("edit");
|
||||
var preamble = undefined;
|
||||
|
||||
var slashIndex = hash.indexOf("/");
|
||||
var title = hash.substring(0, slashIndex);
|
||||
document.title = title.length
|
||||
? decodeURIComponent(title.replace(/_/g, " "))
|
||||
: location.hostname;
|
||||
|
||||
hash = hash.substring(slashIndex + 1);
|
||||
var editable = hash.charAt(0) == "?";
|
||||
if (editable) {
|
||||
hash = hash.substring(1);
|
||||
}
|
||||
if (hash.indexOf("data:") != 0) {
|
||||
var colon = hash.indexOf(":");
|
||||
if ( colon > 0 && colon < 15) {
|
||||
document.body.classList.remove("toasting");
|
||||
return window.location.replace(hash);
|
||||
}
|
||||
var compressed = true;
|
||||
preamble = HEAD_TAGS_EXTENDED;
|
||||
hash =
|
||||
"data:text/html;charset=utf-8;" +
|
||||
(compressed ? "bxze64," : "base64,") +
|
||||
hash;
|
||||
} else if (hash.indexOf("data:text/html;") == 0) {
|
||||
preamble = HEAD_TAGS;
|
||||
} else if (hash.indexOf("data:text/plain;") == 0) {
|
||||
preamble = HEAD_TAGS_EXTENDED;
|
||||
}
|
||||
link.onclick = function() {
|
||||
location.href = "/edit" + location.hash;
|
||||
};
|
||||
|
||||
var isIE = navigator.userAgent.match(/rv:11/);
|
||||
var isEdge = navigator.userAgent.match(/Edge\//);
|
||||
if ((isEdge || isIE) && location.href.length == 2083) {
|
||||
document.getElementById("warning").innerHTML =
|
||||
'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>';
|
||||
}
|
||||
decompressDataURI(hash, preamble, function(hash) {
|
||||
if (!hash) return;
|
||||
iframe.sandbox =
|
||||
"allow-scripts allow-downloads allow-forms allow-top-navigation allow-popups allow-modals allow-popups-to-escape-sandbox";
|
||||
if (!isIE) {
|
||||
if (hash) iframe.src = hash;
|
||||
} else {
|
||||
dataToString(hash, function(content) {
|
||||
var doc = iframe.contentWindow.document;
|
||||
doc.open();
|
||||
doc.write(content);
|
||||
doc.close();
|
||||
});
|
||||
}
|
||||
});
|
||||
var link = document.getElementById("edit");
|
||||
link.href = "/edit" + location.hash;
|
||||
link.style.display = editable ? "block" : "none";
|
||||
}
|
||||
};
|
||||
19
docs/legacy/index.src.html
Normal file
19
docs/legacy/index.src.html
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html><html x-manifest="manifest.appcache"><meta name="viewport" content="width=device-width, viewport-fit=cover"><meta name="description" content="itty bitty things can be conveyed in a link.">
|
||||
<script type="text/javascript">
|
||||
@include ../js/lzma/lzma-d-min.js
|
||||
|
||||
@include data-min.js
|
||||
@include index-min.js
|
||||
</script>
|
||||
<style type="text/css">
|
||||
@include index-min.css
|
||||
</style>
|
||||
<noscript>To use itty.bitty, please enable JavaScript.</noscript>
|
||||
<div id="toast">itty.bitty is experimental technology that renders linked content from outside sources. <a href="http://toast.bitty.site" target="_blank">Learn more</a>.
|
||||
<br><br>This content is only as trustworthy as its source, and it should be treated with the caution
|
||||
you would show any insecure web page.
|
||||
<br><br><button onclick="dismiss()">I understand</button> <input id="never" type="checkbox"><label for="never">Never show this</label></div>
|
||||
<iframe id="iframe"></iframe>
|
||||
<div id="warning"></div>
|
||||
<a id="edit">edit</a>
|
||||
</html>
|
||||
Loading…
Reference in a new issue