var appJSON = []; // List of apps and info from apps.json var appsInstalled = []; // list of app JSON var files = []; // list of files on Bangle httpGet("apps.json").then(apps=>{ try { appJSON = JSON.parse(apps); } catch(e) { console.log(e); showToast("App List Corrupted","error"); } appJSON.sort(appSorter); refreshLibrary(); refreshFilter(); }); // =========================================== Top Navigation function showChangeLog(appid) { var app = appNameToApp(appid); function show(contents) { showPrompt(app.name+" Change Log",contents,{ok:true}).catch(()=>{});; } httpGet(`apps/${appid}/ChangeLog`). then(show).catch(()=>show("No Change Log available")); } function showReadme(appid) { var app = appNameToApp(appid); var appPath = `apps/${appid}/`; var markedOptions = { baseUrl : appPath }; function show(contents) { if (!contents) return; showPrompt(app.name + " Documentation", marked(contents, markedOptions), {ok: true}, false).catch(() => {}); } httpGet(appPath+app.readme).then(show).catch(()=>show("Failed to load README.")); } function handleCustomApp(appTemplate) { // Pops up an IFRAME that allows an app to be customised if (!appTemplate.custom) throw new Error("App doesn't have custom HTML"); return new Promise((resolve,reject) => { var modal = htmlElement(`