if (window.location.host=="banglejs.com") { document.getElementById("apploaderlinks").innerHTML = 'This is the official Bangle.js App Loader - you can also try the Development Version for the most recent apps.'; } else if (window.location.host=="espruino.github.io") { document.title += " [Development]"; document.getElementById("apploaderlinks").innerHTML = 'This is the development Bangle.js App Loader - you can also try the Official Version for stable apps.'; } else { document.title += " [Unofficial]"; document.getElementById("apploaderlinks").innerHTML = 'This is not the official Bangle.js App Loader - you can try the Official Version here.'; } var RECOMMENDED_VERSION = "2v10"; // could check http://www.espruino.com/json/BANGLEJS.json for this // We're only interested in Bangles DEVICEINFO = DEVICEINFO.filter(x=>x.id.startsWith("BANGLEJS")); // Set up source code URL (function() { let username = "espruino"; let githubMatch = window.location.href.match(/\/(\w+)\.github\.io/); if (githubMatch) username = githubMatch[1]; Const.APP_SOURCECODE_URL = `https://github.com/${username}/BangleApps/tree/master/apps`; })(); // When a device is found, filter the apps accordingly function onFoundDeviceInfo(deviceId, deviceVersion) { if (deviceId != "BANGLEJS" && deviceId != "BANGLEJS2") { showToast(`You're using ${deviceId}, not a Bangle.js. Did you want espruino.com/apps instead?` ,"warning", 20000); } else if (versionLess(deviceVersion, RECOMMENDED_VERSION)) { showToast(`You're using an old Bangle.js firmware (${deviceVersion}). You can update with the instructions here` ,"warning", 20000); } if (deviceId == "BANGLEJS") { Const.MESSAGE_RELOAD = 'Hold BTN3\nto reload'; } if (deviceId == "BANGLEJS2") { Const.MESSAGE_RELOAD = 'Hold button\nto reload'; } // check against features shown? filterAppsForDevice(deviceId); /* if we'd saved a device ID but this device is different, ensure we ask again next time */ var savedDeviceId = getSavedDeviceId(); if (savedDeviceId!==undefined && savedDeviceId!=deviceId) setSavedDeviceId(undefined); } var originalAppJSON = undefined; function filterAppsForDevice(deviceId) { if (originalAppJSON===undefined) originalAppJSON = appJSON; var device = DEVICEINFO.find(d=>d.id==deviceId); // set the device dropdown document.querySelector(".devicetype-nav span").innerText = device ? device.name : "All apps"; if (!device) { if (deviceId!==undefined) showToast(`Device ID ${deviceId} not recognised. Some apps may not work`, "warning"); appJSON = originalAppJSON; } else { // Now filter apps appJSON = originalAppJSON.filter(app => { var supported = ["BANGLEJS"]; if (!app.supports) { console.log(`App ${app.id} doesn't include a 'supports' field - ignoring`); return false; } if (app.supports.includes(deviceId)) return true; //console.log(`Dropping ${app.id} because ${deviceId} is not in supported list ${app.supports.join(",")}`); return false; }); } refreshLibrary(); } // If 'remember' was checked in the window below, this is the device function getSavedDeviceId() { let deviceId = localStorage.getItem("deviceId"); if (("string"==typeof deviceId) && DEVICEINFO.find(d=>d.id == deviceId)) return deviceId; return undefined; } function setSavedDeviceId(deviceId) { localStorage.setItem("deviceId", deviceId); } // At boot, show a window to choose which type of device you have... window.addEventListener('load', (event) => { let deviceId = getSavedDeviceId() if (deviceId !== undefined) return filterAppsForDevice(deviceId); var html = `
${DEVICEINFO.map(d=>`
${d.name}
${d.name}
`).join("\n")}
`; showPrompt("Which Bangle.js?",html,{},false); htmlToArray(document.querySelectorAll(".devicechooser")).forEach(button => { button.addEventListener("click",event => { let rememberDevice = document.getElementById("remember_device").checked; let button = event.currentTarget; let deviceId = button.getAttribute("deviceid"); hidePrompt(); console.log("Chosen device", deviceId); setSavedDeviceId(rememberDevice ? deviceId : undefined); filterAppsForDevice(deviceId); }); }); }); window.addEventListener('load', (event) => { // Hook onto device chooser dropdown htmlToArray(document.querySelectorAll(".devicetype-nav .menu-item")).forEach(button => { button.addEventListener("click", event => { var a = event.target; var deviceId = a.getAttribute("dt")||undefined; filterAppsForDevice(deviceId); // also sets the device dropdown setSavedDeviceId(undefined); // ask at startup next time document.querySelector(".devicetype-nav span").innerText = a.innerText; }); }); // Button to install all default apps in one go document.getElementById("installdefault").addEventListener("click",event=>{ getInstalledApps().then(() => { if (device.id == "BANGLEJS") return httpGet("defaultapps_banglejs.json"); if (device.id == "BANGLEJS2") return httpGet("defaultapps_banglejs2.json"); throw new Error("Unknown device "+device.id); }).then(json=>{ return installMultipleApps(JSON.parse(json), "default"); }).catch(err=>{ Progress.hide({sticky:true}); showToast("App Install failed, "+err,"error"); }); }); }); function onAppJSONLoaded() { return new Promise(resolve => { httpGet("screenshots.json").then(screenshotJSON=>{ var screenshots = []; try { screenshots = JSON.parse(screenshotJSON); } catch(e) { console.error("Screenshot JSON Corrupted", e); } screenshots.forEach(s => { var app = appJSON.find(a=>a.id==s.id); if (!app) return; if (!app.screenshots) app.screenshots = []; app.screenshots.push({url:s.url}); }) }).catch(err=>{ console.log("No screenshots.json found"); resolve(); }); }); }