mirror of https://github.com/espruino/BangleApps
* Added code to handle Settings
* Added espruinotools.js for pretokenisationpull/363/head
parent
b7e4476d4d
commit
0c08e16151
|
@ -10,3 +10,5 @@ Changed for individual apps are listed in `apps/appname/ChangeLog`
|
||||||
* Add `Favourite` functionality
|
* Add `Favourite` functionality
|
||||||
* Version number now clickable even when you're at the latest version (fix #291)
|
* Version number now clickable even when you're at the latest version (fix #291)
|
||||||
* Rewrite 'getInstalledApps' to minimize RAM usage
|
* Rewrite 'getInstalledApps' to minimize RAM usage
|
||||||
|
* Added code to handle Settings
|
||||||
|
* Added espruinotools.js for pretokenisation
|
||||||
|
|
|
@ -138,6 +138,14 @@
|
||||||
<button class="btn" id="removeall">Remove all Apps</button>
|
<button class="btn" id="removeall">Remove all Apps</button>
|
||||||
<button class="btn" id="installdefault">Install default apps</button>
|
<button class="btn" id="installdefault">Install default apps</button>
|
||||||
<button class="btn" id="installfavourite">Install favourite apps</button></p>
|
<button class="btn" id="installfavourite">Install favourite apps</button></p>
|
||||||
|
<h3>Settings</h3>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-switch">
|
||||||
|
<input type="checkbox" id="settings-pretokenise">
|
||||||
|
<i class="form-icon"></i> Pretokenise apps before upload (smaller, faster apps)
|
||||||
|
</label>
|
||||||
|
<button class="btn" id="defaultsettings">Default settings</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ var AppInfo = {
|
||||||
if (storageFile.url.endsWith(".js") && !storageFile.url.endsWith(".min.js")) { // if original file ends in '.js'...
|
if (storageFile.url.endsWith(".js") && !storageFile.url.endsWith(".min.js")) { // if original file ends in '.js'...
|
||||||
return Espruino.transform(content, {
|
return Espruino.transform(content, {
|
||||||
SET_TIME_ON_WRITE : false,
|
SET_TIME_ON_WRITE : false,
|
||||||
PRETOKENISE : true,
|
PRETOKENISE : SETTINGS.pretokenise,
|
||||||
//MINIFICATION_LEVEL : "ESPRIMA", // disable due to https://github.com/espruino/BangleApps/pull/355#issuecomment-620124162
|
//MINIFICATION_LEVEL : "ESPRIMA", // disable due to https://github.com/espruino/BangleApps/pull/355#issuecomment-620124162
|
||||||
builtinModules : "Flash,Storage,heatshrink,tensorflow,locale"
|
builtinModules : "Flash,Storage,heatshrink,tensorflow,locale"
|
||||||
});
|
});
|
||||||
|
|
27479
js/espruinotools.js
27479
js/espruinotools.js
File diff suppressed because one or more lines are too long
68
js/index.js
68
js/index.js
|
@ -1,7 +1,11 @@
|
||||||
var appJSON = []; // List of apps and info from apps.json
|
var appJSON = []; // List of apps and info from apps.json
|
||||||
var appsInstalled = []; // list of app JSON
|
var appsInstalled = []; // list of app JSON
|
||||||
var files = []; // list of files on Bangle
|
var files = []; // list of files on Bangle
|
||||||
const FAVOURITE = "favouriteapps.json";
|
var DEFAULTSETTINGS = {
|
||||||
|
pretokenise : true,
|
||||||
|
favourites : ["boot","launch","setting"]
|
||||||
|
};
|
||||||
|
var SETTINGS = JSON.parse(JSON.stringify(DEFAULTSETTINGS)); // clone
|
||||||
|
|
||||||
httpGet("apps.json").then(apps=>{
|
httpGet("apps.json").then(apps=>{
|
||||||
try {
|
try {
|
||||||
|
@ -143,23 +147,18 @@ function handleAppInterface(app) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAppFavourites() {
|
|
||||||
var f = localStorage.getItem(FAVOURITE);
|
|
||||||
return (f === null) ? ["boot","launch","setting"] : JSON.parse(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
function changeAppFavourite(favourite, app) {
|
function changeAppFavourite(favourite, app) {
|
||||||
var favourites = getAppFavourites();
|
var favourites = SETTINGS.favourites;
|
||||||
if (favourite) {
|
if (favourite) {
|
||||||
favourites = favourites.concat([app.id]);
|
SETTINGS.favourites = SETTINGS.favourites.concat([app.id]);
|
||||||
} else {
|
} else {
|
||||||
if ([ "boot","setting"].includes(app.id)) {
|
if ([ "boot","setting"].includes(app.id)) {
|
||||||
showToast(app.name + ' is required, can\'t remove it' , 'warning');
|
showToast(app.name + ' is required, can\'t remove it' , 'warning');
|
||||||
}else {
|
}else {
|
||||||
favourites = favourites.filter(e => e != app.id);
|
SETTINGS.favourites = SETTINGS.favourites.filter(e => e != app.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
localStorage.setItem(FAVOURITE, JSON.stringify(favourites));
|
saveSettings();
|
||||||
refreshLibrary();
|
refreshLibrary();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +191,7 @@ function refreshFilter(){
|
||||||
function refreshLibrary() {
|
function refreshLibrary() {
|
||||||
var panelbody = document.querySelector("#librarycontainer .panel-body");
|
var panelbody = document.querySelector("#librarycontainer .panel-body");
|
||||||
var visibleApps = appJSON;
|
var visibleApps = appJSON;
|
||||||
var favourites = getAppFavourites();
|
var favourites = SETTINGS.favourites;
|
||||||
|
|
||||||
if (activeFilter) {
|
if (activeFilter) {
|
||||||
if ( activeFilter == "favourites" ) {
|
if ( activeFilter == "favourites" ) {
|
||||||
|
@ -590,6 +589,49 @@ if (window.location.host=="banglejs.com") {
|
||||||
'This is not the official Bangle.js App Loader - you can try the <a href="https://banglejs.com/apps/">Official Version</a> here.';
|
'This is not the official Bangle.js App Loader - you can try the <a href="https://banglejs.com/apps/">Official Version</a> here.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Settings
|
||||||
|
var SETTINGS_HOOKS = {}; // stuff to get called when a setting is loaded
|
||||||
|
/// Load settings and update controls
|
||||||
|
function loadSettings() {
|
||||||
|
var j = localStorage.getItem("settings");
|
||||||
|
if (typeof j != "string") return;
|
||||||
|
try {
|
||||||
|
var s = JSON.parse(j);
|
||||||
|
Object.keys(s).forEach( k => {
|
||||||
|
SETTINGS[k]=s[k];
|
||||||
|
if (SETTINGS_HOOKS[k]) SETTINGS_HOOKS[k]();
|
||||||
|
} );
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Invalid settings");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// Save settings
|
||||||
|
function saveSettings() {
|
||||||
|
localStorage.setItem("settings", JSON.stringify(SETTINGS));
|
||||||
|
console.log("Changed settings", SETTINGS);
|
||||||
|
}
|
||||||
|
// Link in settings DOM elements
|
||||||
|
function settingsCheckbox(id, name) {
|
||||||
|
var setting = document.getElementById(id);
|
||||||
|
function update() {
|
||||||
|
setting.checked = SETTINGS[name];
|
||||||
|
}
|
||||||
|
SETTINGS_HOOKS[name] = update;
|
||||||
|
setting.addEventListener('click', function() {
|
||||||
|
SETTINGS[name] = setting.checked;
|
||||||
|
saveSettings();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
settingsCheckbox("settings-pretokenise", "pretokenise");
|
||||||
|
loadSettings();
|
||||||
|
|
||||||
|
document.getElementById("defaultsettings").addEventListener("click",event=>{
|
||||||
|
SETTINGS = JSON.parse(JSON.stringify(DEFAULTSETTINGS)); // clone
|
||||||
|
saveSettings();
|
||||||
|
loadSettings(); // update all settings
|
||||||
|
refreshLibrary(); // favourites were in settings
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById("settime").addEventListener("click",event=>{
|
document.getElementById("settime").addEventListener("click",event=>{
|
||||||
Comms.setTime().then(()=>{
|
Comms.setTime().then(()=>{
|
||||||
showToast("Time set successfully","success");
|
showToast("Time set successfully","success");
|
||||||
|
@ -620,9 +662,9 @@ document.getElementById("installdefault").addEventListener("click",event=>{
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Install all favoutrie apps in one go
|
// Install all favourite apps in one go
|
||||||
document.getElementById("installfavourite").addEventListener("click",event=>{
|
document.getElementById("installfavourite").addEventListener("click",event=>{
|
||||||
var favApps = getAppFavourites();
|
var favApps = SETTINGS.favourites;
|
||||||
installMultipleApps(favApps, "favourite").catch(err=>{
|
installMultipleApps(favApps, "favourite").catch(err=>{
|
||||||
Progress.hide({sticky:true});
|
Progress.hide({sticky:true});
|
||||||
showToast("App Install failed, "+err,"error");
|
showToast("App Install failed, "+err,"error");
|
||||||
|
|
Loading…
Reference in New Issue