var appJSON = []; // List of apps and info from apps.json var appsInstalled = []; // list of app IDs httpGet("apps.json").then(apps=>{ try { appJSON = JSON.parse(apps); } catch(e) { console.log(e); showToast("App List Corrupted","error"); } appJSON.sort(appSorter); refreshLibrary(); }); // Status // =========================================== Top Navigation function showToast(message, type) { // toast-primary, toast-success, toast-warning or toast-error var style = "toast-primary"; if (type=="success") style = "toast-success"; else if (type=="error") style = "toast-error"; else if (type!==undefined) console.log("showToast: unknown toast "+type); var toastcontainer = document.getElementById("toastcontainer"); var msgDiv = htmlElement(`
`); msgDiv.innerHTML = message; toastcontainer.append(msgDiv); setTimeout(function() { msgDiv.remove(); }, 5000); } function showPrompt(title, text) { return new Promise((resolve,reject) => { var modal = htmlElement(``); document.body.append(modal); htmlToArray(modal.getElementsByTagName("button")).forEach(button => { button.addEventListener("click",event => { event.preventDefault(); var isYes = event.target.getAttribute("isyes")=="1"; if (isYes) resolve(); else reject(); modal.remove(); }); }); }); } function handleCustomApp(app) { return new Promise((resolve,reject) => { var modal = htmlElement(``); document.body.append(modal); htmlToArray(modal.getElementsByTagName("a")).forEach(button => { button.addEventListener("click",event => { event.preventDefault(); modal.remove(); reject("Window closed"); }); }); var iframe = modal.getElementsByTagName("iframe")[0]; iframe.contentWindow.addEventListener("message", function(event) { var app = event.data; console.log("Received custom app", app); modal.remove(); Comms.uploadApp(app).then(resolve,reject); }, false); }); } // =========================================== Top Navigation function showTab(tabname) { htmlToArray(document.querySelectorAll("#tab-navigate .tab-item")).forEach(tab => { tab.classList.remove("active"); }); htmlToArray(document.querySelectorAll(".bangle-tab")).forEach(tab => { tab.style.display = "none"; }); document.getElementById("tab-"+tabname).classList.add("active"); document.getElementById(tabname).style.display = "inherit"; } // =========================================== Library function refreshLibrary() { var panelbody = document.querySelector("#librarycontainer .panel-body"); panelbody.innerHTML = appJSON.map((app,idx) => { var icon = "icon-upload"; if (app.custom) icon = "icon-menu"; if (appsInstalled.includes(app.id)) icon = "icon-delete"; return `${escapeHtml(app.name)}
${escapeHtml(app.description)}
${escapeHtml(app.name)}
${escapeHtml(app.description)}