forked from FOSS/BangleApps
105 lines
2.8 KiB
JavaScript
105 lines
2.8 KiB
JavaScript
(function(back) {
|
|
let teletextColors = ["#000", "#f00", "#0f0", "#ff0", "#00f", "#f0f", "#0ff", "#fff"];
|
|
let teletextColorNames = ["Black", "Red", "Green", "Yellow", "Blue", "Magenta", "Cyan", "White"];
|
|
|
|
// Load and set default settings
|
|
let appSettings = Object.assign({
|
|
color: teletextColors[6],
|
|
theme: 'light',
|
|
}, require('Storage').readJSON("shadowclk.json", true) || {});
|
|
|
|
// Save settings to storage
|
|
function writeSettings() {
|
|
require('Storage').writeJSON("shadowclk.json", appSettings);
|
|
}
|
|
|
|
// Colors from 'Light BW' and 'Dark BW' themes
|
|
function createThemeColors(mode) {
|
|
let cl = x => g.setColor(x).getColor();
|
|
return mode ? {
|
|
fg: cl("#fff"),
|
|
bg: cl("#000"),
|
|
fg2: cl("#fff"),
|
|
bg2: cl("#004"),
|
|
fgH: cl("#fff"),
|
|
bgH: cl("#00f"),
|
|
dark: true
|
|
} : {
|
|
fg: cl("#000"),
|
|
bg: cl("#fff"),
|
|
fg2: cl("#000"),
|
|
bg2: cl("#cff"),
|
|
fgH: cl("#000"),
|
|
bgH: cl("#0ff"),
|
|
dark: false
|
|
};
|
|
}
|
|
|
|
// Switch theme and save to storage
|
|
function switchTheme(mode) {
|
|
if (mode === g.theme.dark) return;
|
|
let s = require('Storage').readJSON("setting.json", 1) || {};
|
|
s.theme = createThemeColors(mode);
|
|
require('Storage').writeJSON("setting.json", s);
|
|
updateTheme(mode);
|
|
}
|
|
|
|
// Update the current menu with the new theme
|
|
function updateTheme(mode) {
|
|
let newTheme = createThemeColors(mode);
|
|
g.theme = newTheme;
|
|
appSettings.theme = mode ? 'dark' : 'light';
|
|
writeSettings();
|
|
delete g.reset;
|
|
g._reset = g.reset;
|
|
g.reset = function(n) {
|
|
return g._reset().setColor(newTheme.fg).setBgColor(newTheme.bg);
|
|
};
|
|
g.clear = function(n) {
|
|
if (n) g.reset();
|
|
return g.clearRect(0, 0, g.getWidth(), g.getHeight());
|
|
};
|
|
g.clear(1);
|
|
Bangle.drawWidgets();
|
|
showMenu();
|
|
}
|
|
|
|
// Read the current system theme
|
|
function getCurrentTheme() {
|
|
let s = require('Storage').readJSON("setting.json", 1) || {};
|
|
if (!s.theme) {
|
|
return appSettings.theme; // fallback to appSettings.theme (light or dark)
|
|
}
|
|
return s.theme.dark ? 'dark' : 'light';
|
|
}
|
|
|
|
function showMenu() {
|
|
appSettings.theme = getCurrentTheme();
|
|
E.showMenu({
|
|
"": {
|
|
"title": "Shadow Clock"
|
|
},
|
|
"< Back": () => back(),
|
|
'Theme:': {
|
|
value: (appSettings.theme === 'dark'),
|
|
format: v => v ? "Dark" : "Light",
|
|
onchange: v => {
|
|
switchTheme(v);
|
|
}
|
|
},
|
|
'Color:': {
|
|
value: teletextColors.indexOf(appSettings.color),
|
|
min: 0,
|
|
max: 7,
|
|
onchange: v => {
|
|
appSettings.color = teletextColors[v];
|
|
writeSettings();
|
|
},
|
|
format: v => teletextColorNames[v]
|
|
}
|
|
});
|
|
}
|
|
// Initially show the menu
|
|
showMenu();
|
|
});
|