forked from FOSS/BangleApps
commit
d7aa786a6d
|
@ -11,3 +11,4 @@
|
||||||
0.11: Use ClockFace.is12Hour
|
0.11: Use ClockFace.is12Hour
|
||||||
0.12: Add settings to hide date,widgets
|
0.12: Add settings to hide date,widgets
|
||||||
0.13: Add font setting
|
0.13: Add font setting
|
||||||
|
0.14: Use ClockFace_menu.addItems
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "barclock",
|
"id": "barclock",
|
||||||
"name": "Bar Clock",
|
"name": "Bar Clock",
|
||||||
"version": "0.13",
|
"version": "0.14",
|
||||||
"description": "A simple digital clock showing seconds as a bar",
|
"description": "A simple digital clock showing seconds as a bar",
|
||||||
"icon": "clock-bar.png",
|
"icon": "clock-bar.png",
|
||||||
"screenshots": [{"url":"screenshot.png"},{"url":"screenshot_pm.png"}],
|
"screenshots": [{"url":"screenshot.png"},{"url":"screenshot_pm.png"}],
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
(function(back) {
|
(function(back) {
|
||||||
let s = require('Storage').readJSON("barclock.settings.json", true) || {};
|
let s = require("Storage").readJSON("barclock.settings.json", true) || {};
|
||||||
|
|
||||||
function saver(key) {
|
function save(key, value) {
|
||||||
return value => {
|
|
||||||
s[key] = value;
|
s[key] = value;
|
||||||
require('Storage').writeJSON("barclock.settings.json", s);
|
require("Storage").writeJSON("barclock.settings.json", s);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const fonts = [/*LANG*/"Bitmap",/*LANG*/"Vector"];
|
const fonts = [/*LANG*/"Bitmap",/*LANG*/"Vector"];
|
||||||
const menu = {
|
let menu = {
|
||||||
"": {"title": /*LANG*/"Bar Clock"},
|
"": {"title": /*LANG*/"Bar Clock"},
|
||||||
/*LANG*/"< Back": back,
|
/*LANG*/"< Back": back,
|
||||||
/*LANG*/"Show date": require("ClockFace_menu").showDate(s.showDate, saver('showDate')),
|
|
||||||
/*LANG*/"Load widgets": require("ClockFace_menu").loadWidgets(s.loadWidgets, saver('loadWidgets')),
|
|
||||||
/*LANG*/"Font": {
|
/*LANG*/"Font": {
|
||||||
value: s.font|0,
|
value: s.font|0,
|
||||||
min:0,max:1,wrap:true,
|
min: 0, max: 1, wrap: true,
|
||||||
format:v=>fonts[v],
|
format: v => fonts[v],
|
||||||
onchange:saver('font'),
|
onchange: v => save("font", v),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
require("ClockFace_menu").addItems(menu, save, {
|
||||||
|
showDate: s.showDate,
|
||||||
|
loadWidgets: s.loadWidgets,
|
||||||
|
});
|
||||||
|
|
||||||
E.showMenu(menu);
|
E.showMenu(menu);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
0.01: New clock
|
0.01: New clock
|
||||||
0.02: Use ClockFace library, add settings
|
0.02: Use ClockFace library, add settings
|
||||||
|
0.03: Use ClockFace_menu.addSettingsFile
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "cogclock",
|
"id": "cogclock",
|
||||||
"name": "Cog Clock",
|
"name": "Cog Clock",
|
||||||
"version": "0.02",
|
"version": "0.03",
|
||||||
"description": "A cross-shaped clock inside a cog",
|
"description": "A cross-shaped clock inside a cog",
|
||||||
"icon": "icon.png",
|
"icon": "icon.png",
|
||||||
"screenshots": [{"url":"screenshot.png"}],
|
"screenshots": [{"url":"screenshot.png"}],
|
||||||
|
|
|
@ -1,19 +1,10 @@
|
||||||
(function(back) {
|
(function(back) {
|
||||||
let s = require('Storage').readJSON("cogclock.settings.json", true) || {};
|
let menu = {
|
||||||
|
|
||||||
function saver(key) {
|
|
||||||
return value => {
|
|
||||||
s[key] = value;
|
|
||||||
require('Storage').writeJSON("cogclock.settings.json", s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const menu = {
|
|
||||||
"": {"title": /*LANG*/"Cog Clock"},
|
"": {"title": /*LANG*/"Cog Clock"},
|
||||||
/*LANG*/"< Back": back,
|
/*LANG*/"< Back": back,
|
||||||
/*LANG*/"Show date": require("ClockFace_menu").showDate(s.showDate, saver('showDate')),
|
|
||||||
/*LANG*/"Load widgets": require("ClockFace_menu").loadWidgets(s.loadWidgets, saver('loadWidgets')),
|
|
||||||
};
|
};
|
||||||
|
require("ClockFace_menu").addSettingsFile(menu, "cogclock.settings.json", [
|
||||||
|
"showDate", "loadWidgets"
|
||||||
|
]);
|
||||||
E.showMenu(menu);
|
E.showMenu(menu);
|
||||||
});
|
});
|
||||||
|
|
|
@ -175,3 +175,41 @@ Bangle.on('step', function(steps) {
|
||||||
});
|
});
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
ClockFace_menu
|
||||||
|
==============
|
||||||
|
If your clock comes with a settings menu, you can use this library to easily add
|
||||||
|
some common options:
|
||||||
|
|
||||||
|
```js
|
||||||
|
|
||||||
|
let settings = require("Storage").readJSON("<appid>.settings.json", true)||{};
|
||||||
|
function save(key, value) {
|
||||||
|
settings[key] = value;
|
||||||
|
require("Storage").writeJSON("<appid>.settings.json", settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
let menu = {
|
||||||
|
"": {"title": /*LANG*/"<clock name> Settings"},
|
||||||
|
};
|
||||||
|
require("ClockFace_menu").addItems(menu, save, {
|
||||||
|
showDate: settings.showDate,
|
||||||
|
loadWidgets: settings.loadWidgets,
|
||||||
|
});
|
||||||
|
E.showMenu(menu);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Or even simpler, if you just want to use a basic settings file:
|
||||||
|
```js
|
||||||
|
let menu = {
|
||||||
|
"": {"title": /*LANG*/"<clock name> Settings"},
|
||||||
|
/*LANG*/"< Back": back,
|
||||||
|
};
|
||||||
|
require("ClockFace_menu").addSettingsFile(menu, "<appid>.settings.json", [
|
||||||
|
"showDate", "loadWidgets"
|
||||||
|
]);
|
||||||
|
E.showMenu(menu);
|
||||||
|
|
||||||
|
```
|
|
@ -1,10 +1,48 @@
|
||||||
// boolean options, which default to true
|
/**
|
||||||
exports.showDate =
|
* Add setting items to a menu
|
||||||
exports.loadWidgets =
|
*
|
||||||
function(value, callback) {
|
* @param {object} menu Menu to add items to
|
||||||
if (value === undefined) value = true;
|
* @param {function} callback Callback when value changes
|
||||||
return {
|
* @param {object} items Menu items to add, with their current value
|
||||||
|
*/
|
||||||
|
exports.addItems = function(menu, callback, items) {
|
||||||
|
Object.keys(items).forEach(key => {
|
||||||
|
let value = items[key];
|
||||||
|
const label = {
|
||||||
|
showDate:/*LANG*/"Show date",
|
||||||
|
loadWidgets:/*LANG*/"Load widgets",
|
||||||
|
}[key];
|
||||||
|
switch(key) {
|
||||||
|
case "showDate":
|
||||||
|
case "loadWidgets":
|
||||||
|
// boolean options, which default to true
|
||||||
|
if (value===undefined) value = true;
|
||||||
|
menu[label] = {
|
||||||
value: !!value,
|
value: !!value,
|
||||||
onchange: v=>callback(v),
|
onchange: v => callback(key, v),
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a basic settings menu for app, reading/writing to settings file
|
||||||
|
*
|
||||||
|
* @param {object} menu Menu to add settings to
|
||||||
|
* @param {string} settingsFile File to read/write settings to/from
|
||||||
|
* @param {string[]} items List of settings to add
|
||||||
|
*/
|
||||||
|
exports.addSettingsFile = function(menu, settingsFile, items) {
|
||||||
|
let s = require("Storage").readJSON(settingsFile, true) || {};
|
||||||
|
|
||||||
|
function save(key, value) {
|
||||||
|
s[key] = value;
|
||||||
|
require("Storage").writeJSON(settingsFile, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
let toAdd = {};
|
||||||
|
items.forEach(function(key) {
|
||||||
|
toAdd[key] = s[key];
|
||||||
|
});
|
||||||
|
exports.addItems(menu, save, toAdd);
|
||||||
|
};
|
Loading…
Reference in New Issue