154 lines
4.3 KiB
TypeScript
154 lines
4.3 KiB
TypeScript
|
// Exported to main.rs
|
||
|
function loadFromDb() {
|
||
|
const dbReq = window.indexedDB.open("omegaupload", 1);
|
||
|
dbReq.onsuccess = (evt) => {
|
||
|
const db = (evt.target as IDBRequest).result;
|
||
|
const obj_store = db
|
||
|
.transaction("decrypted data", "readonly")
|
||
|
.objectStore("decrypted data")
|
||
|
.get(window.location.pathname);
|
||
|
obj_store.onsuccess = (evt) => {
|
||
|
const data = (evt.target as IDBRequest).result;
|
||
|
switch (data.type) {
|
||
|
case "string":
|
||
|
createStringPasteUi(data);
|
||
|
break;
|
||
|
case "blob":
|
||
|
createBlobPasteUi(data);
|
||
|
break;
|
||
|
case "image":
|
||
|
createImagePasteUi(data);
|
||
|
break;
|
||
|
default:
|
||
|
createBrokenStateUi();
|
||
|
break;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
obj_store.onerror = (evt) => {
|
||
|
console.log("err");
|
||
|
console.log(evt);
|
||
|
};
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function createStringPasteUi(data) {
|
||
|
let bodyEle = document.getElementsByTagName("body")[0];
|
||
|
bodyEle.textContent = '';
|
||
|
|
||
|
let mainEle = document.createElement("main");
|
||
|
let preEle = document.createElement("pre");
|
||
|
preEle.classList.add("paste");
|
||
|
|
||
|
let headerEle = document.createElement("header");
|
||
|
headerEle.classList.add("unselectable");
|
||
|
headerEle.textContent = data.expiration;
|
||
|
preEle.appendChild(headerEle);
|
||
|
|
||
|
preEle.appendChild(document.createElement("hr"));
|
||
|
|
||
|
let codeEle = document.createElement("code");
|
||
|
codeEle.textContent = data.data;
|
||
|
preEle.appendChild(codeEle);
|
||
|
|
||
|
mainEle.appendChild(preEle);
|
||
|
bodyEle.appendChild(mainEle);
|
||
|
|
||
|
hljs.highlightAll();
|
||
|
hljs.initLineNumbersOnLoad();
|
||
|
}
|
||
|
|
||
|
function createImagePasteUi(data) {
|
||
|
let bodyEle = document.getElementsByTagName("body")[0];
|
||
|
bodyEle.textContent = '';
|
||
|
|
||
|
let mainEle = document.createElement("main");
|
||
|
mainEle.classList.add("hljs");
|
||
|
mainEle.classList.add("centered");
|
||
|
mainEle.classList.add("fullscreen");
|
||
|
|
||
|
const downloadLink = URL.createObjectURL(data.data);
|
||
|
|
||
|
let expirationEle = document.createElement("p");
|
||
|
expirationEle.textContent = data.expiration;
|
||
|
mainEle.appendChild(expirationEle);
|
||
|
|
||
|
let imgEle = document.createElement("img");
|
||
|
imgEle.src = downloadLink;
|
||
|
mainEle.appendChild(imgEle);
|
||
|
|
||
|
|
||
|
let downloadEle = document.createElement("a");
|
||
|
downloadEle.href = downloadLink;
|
||
|
downloadEle.download = window.location.pathname;
|
||
|
downloadEle.classList.add("hljs-meta");
|
||
|
downloadEle.textContent = data.button;
|
||
|
mainEle.appendChild(downloadEle);
|
||
|
|
||
|
|
||
|
bodyEle.appendChild(mainEle);
|
||
|
}
|
||
|
|
||
|
function createBlobPasteUi(data) {
|
||
|
let bodyEle = document.getElementsByTagName("body")[0];
|
||
|
bodyEle.textContent = '';
|
||
|
|
||
|
let mainEle = document.createElement("main");
|
||
|
mainEle.classList.add("hljs");
|
||
|
mainEle.classList.add("centered");
|
||
|
mainEle.classList.add("fullscreen");
|
||
|
|
||
|
let divEle = document.createElement("div");
|
||
|
divEle.classList.add("centered");
|
||
|
|
||
|
let expirationEle = document.createElement("p");
|
||
|
expirationEle.textContent = data.expiration;
|
||
|
divEle.appendChild(expirationEle);
|
||
|
|
||
|
let downloadEle = document.createElement("a");
|
||
|
downloadEle.href = URL.createObjectURL(data.data);
|
||
|
downloadEle.download = window.location.pathname;
|
||
|
downloadEle.classList.add("hljs-meta");
|
||
|
downloadEle.textContent = "Download binary file.";
|
||
|
divEle.appendChild(downloadEle);
|
||
|
|
||
|
|
||
|
mainEle.appendChild(divEle);
|
||
|
|
||
|
let displayAnywayEle = document.createElement("p");
|
||
|
displayAnywayEle.classList.add("display-anyways");
|
||
|
displayAnywayEle.classList.add("hljs-comment");
|
||
|
displayAnywayEle.textContent = "Display anyways?";
|
||
|
displayAnywayEle.onclick = () => {
|
||
|
data.data.text().then(text => {
|
||
|
data.data = text;
|
||
|
createStringPasteUi(data);
|
||
|
})
|
||
|
};
|
||
|
mainEle.appendChild(displayAnywayEle);
|
||
|
bodyEle.appendChild(mainEle);
|
||
|
}
|
||
|
|
||
|
// Exported to main.rs
|
||
|
function createNotFoundUi() {
|
||
|
let body = document.getElementsByTagName("body")[0];
|
||
|
body.textContent = '';
|
||
|
body.appendChild(createGenericError("Either the paste has been burned or one never existed."));
|
||
|
}
|
||
|
|
||
|
function createBrokenStateUi() {
|
||
|
let body = document.getElementsByTagName("body")[0];
|
||
|
body.textContent = '';
|
||
|
body.appendChild(createGenericError("Something went wrong. Try clearing local data."));
|
||
|
}
|
||
|
|
||
|
function createGenericError(message) {
|
||
|
let mainEle = document.createElement("main");
|
||
|
mainEle.classList.add("hljs");
|
||
|
mainEle.classList.add("centered");
|
||
|
mainEle.classList.add("fullscreen");
|
||
|
mainEle.textContent = message;
|
||
|
return mainEle;
|
||
|
}
|
||
|
|
||
|
window.addEventListener("hashchange", () => location.reload());
|