* Added code to handle Settings

* Added espruinotools.js for pretokenisation
pull/363/head
Gordon Williams 2020-04-29 09:20:18 +01:00
parent b7e4476d4d
commit 0c08e16151
5 changed files with 557 additions and 27002 deletions

View File

@ -10,3 +10,5 @@ Changed for individual apps are listed in `apps/appname/ChangeLog`
* Add `Favourite` functionality
* Version number now clickable even when you're at the latest version (fix #291)
* Rewrite 'getInstalledApps' to minimize RAM usage
* Added code to handle Settings
* Added espruinotools.js for pretokenisation

View File

@ -138,6 +138,14 @@
<button class="btn" id="removeall">Remove all Apps</button>
<button class="btn" id="installdefault">Install default apps</button>
<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>

View File

@ -14,7 +14,7 @@ var AppInfo = {
if (storageFile.url.endsWith(".js") && !storageFile.url.endsWith(".min.js")) { // if original file ends in '.js'...
return Espruino.transform(content, {
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
builtinModules : "Flash,Storage,heatshrink,tensorflow,locale"
});

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,11 @@
var appJSON = []; // List of apps and info from apps.json
var appsInstalled = []; // list of app JSON
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=>{
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) {
var favourites = getAppFavourites();
var favourites = SETTINGS.favourites;
if (favourite) {
favourites = favourites.concat([app.id]);
SETTINGS.favourites = SETTINGS.favourites.concat([app.id]);
} else {
if ([ "boot","setting"].includes(app.id)) {
showToast(app.name + ' is required, can\'t remove it' , 'warning');
}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();
}
@ -192,7 +191,7 @@ function refreshFilter(){
function refreshLibrary() {
var panelbody = document.querySelector("#librarycontainer .panel-body");
var visibleApps = appJSON;
var favourites = getAppFavourites();
var favourites = SETTINGS.favourites;
if (activeFilter) {
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.';
}
// 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=>{
Comms.setTime().then(()=>{
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=>{
var favApps = getAppFavourites();
var favApps = SETTINGS.favourites;
installMultipleApps(favApps, "favourite").catch(err=>{
Progress.hide({sticky:true});
showToast("App Install failed, "+err,"error");