mirror of https://github.com/espruino/BangleApps
score: add configuration preset functionality
parent
506918e772
commit
9f73450b83
|
@ -3565,6 +3565,7 @@
|
|||
"storage": [
|
||||
{"name":"score.app.js","url":"score.app.js"},
|
||||
{"name":"score.settings.js","url":"score.settings.js"},
|
||||
{"name":"score.presets.json","url":"score.presets.json"},
|
||||
{"name":"score.img","url":"score.app-icon.js","evaluate":true}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ In this mode any score increments will be decrements. To move back a set, reduce
|
|||
# Settings
|
||||
| Setting | Description |
|
||||
|------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `Presets` | Enable a preset for one of the configured sports |
|
||||
| `Sets to win` | How many sets a player has to win before the match is won (Maximum sets: this*2-1) |
|
||||
| `Sets per page` | How many sets should be shown in the app. Further sets will be available by scrolling (ignored if higher than `Sets to win`) |
|
||||
| `Score to win` | What score ends a given set |
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
{}
|
|
@ -1,20 +1,4 @@
|
|||
(function (back, ret) {
|
||||
|
||||
const fileName = 'score.json'
|
||||
let settings = require('Storage').readJSON(fileName, 1) || {};
|
||||
const offon = ['No', 'Yes'];
|
||||
|
||||
let changed = false;
|
||||
|
||||
function save(key, value) {
|
||||
changed = true;
|
||||
settings[key] = value;
|
||||
if (key === 'winScore' && settings.maxScore < value) {
|
||||
settings.maxScore = value;
|
||||
}
|
||||
require('Storage').writeJSON(fileName, settings);
|
||||
}
|
||||
|
||||
function fillSettingsWithDefaults(settings) {
|
||||
if (settings.winSets == null) {
|
||||
settings.winSets = 1;
|
||||
}
|
||||
|
@ -53,76 +37,132 @@
|
|||
settings.maxScoreTiebreakMaxScore = 15;
|
||||
}
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
(function (back, ret) {
|
||||
|
||||
const fileName = 'score.json';
|
||||
let settings = require('Storage').readJSON(fileName, 1) || {};
|
||||
const offon = ['No', 'Yes'];
|
||||
|
||||
let presetsFileName = 'score.presets.json';
|
||||
let presets = require('Storage').readJSON(presetsFileName);
|
||||
let presetNames = Object.keys(presets);
|
||||
|
||||
let changed = false;
|
||||
|
||||
function save(settings) {
|
||||
require('Storage').writeJSON(fileName, settings);
|
||||
}
|
||||
|
||||
function setAndSave(key, value) {
|
||||
changed = true;
|
||||
settings[key] = value;
|
||||
if (key === 'winScore' && settings.maxScore < value) {
|
||||
settings.maxScore = value;
|
||||
}
|
||||
save(settings);
|
||||
}
|
||||
|
||||
settings = fillSettingsWithDefaults(settings);
|
||||
|
||||
if (ret) {
|
||||
return settings;
|
||||
}
|
||||
|
||||
const appMenu = {};
|
||||
appMenu[''] = {'title': 'Score Settings'},
|
||||
appMenu['< Back'] = function () { back(settings, changed); };
|
||||
if (reset) {
|
||||
appMenu['Reset match'] = function () { back(settings, true); };
|
||||
}
|
||||
appMenu['Sets to win'] = {
|
||||
value: settings.winSets,
|
||||
min:1,
|
||||
onchange: m => save('winSets', m)
|
||||
};
|
||||
appMenu['Sets per page'] = {
|
||||
value: settings.setsPerPage,
|
||||
min:1,
|
||||
max:5,
|
||||
onchange: m => save('setsPerPage', m)
|
||||
};
|
||||
appMenu['Score to win'] = {
|
||||
value: settings.winScore,
|
||||
min:1,
|
||||
onchange: m => save('winScore', m)
|
||||
};
|
||||
appMenu['2-point lead'] = {
|
||||
value: settings.enableTwoAhead,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => save('enableTwoAhead', m)
|
||||
};
|
||||
appMenu['Maximum score?'] = {
|
||||
value: settings.enableMaxScore,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => save('enableMaxScore', m)
|
||||
};
|
||||
appMenu['Maximum score'] = {
|
||||
value: settings.maxScore,
|
||||
min: 1,
|
||||
onchange: m => save('maxScore', m)
|
||||
};
|
||||
appMenu['Tennis scoring'] = {
|
||||
value: settings.enableTennisScoring,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => save('enableTennisScoring', m)
|
||||
};
|
||||
appMenu['TB sets?'] = {
|
||||
value: settings.enableMaxScoreTiebreak,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => save('enableMaxScoreTiebreak', m)
|
||||
}
|
||||
appMenu['TB Score to win'] = {
|
||||
value: settings.maxScoreTiebreakWinScore,
|
||||
onchange: m => save('maxScoreTiebreakWinScore', m)
|
||||
}
|
||||
appMenu['TB 2-point lead'] = {
|
||||
value: settings.maxScoreTiebreakEnableTwoAhead,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => save('maxScoreTiebreakEnableTwoAhead', m)
|
||||
}
|
||||
appMenu['TB max score?'] = {
|
||||
value: settings.maxScoreTiebreakEnableMaxScore,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => save('maxScoreTiebreakEnableMaxScore', m)
|
||||
}
|
||||
appMenu['TB max score'] = {
|
||||
value: settings.maxScoreTiebreakMaxScore,
|
||||
onchange: m => save('maxScoreTiebreakMaxScore', m)
|
||||
}
|
||||
const presetMenu = function () {
|
||||
let ret = function () { E.showMenu(appMenu()); };
|
||||
let m = {
|
||||
'': {'title': 'Score Presets'},
|
||||
'< Back': ret,
|
||||
};
|
||||
for (let i = 0; i < presetNames.length; i++) {
|
||||
m[presetNames[i]] = (function (i) {
|
||||
return function() {
|
||||
changed = true;
|
||||
settings = fillSettingsWithDefaults(presets[presetNames[i]]);
|
||||
save(settings);
|
||||
ret();
|
||||
};
|
||||
})(i);
|
||||
}
|
||||
|
||||
E.showMenu(appMenu)
|
||||
return m;
|
||||
};
|
||||
|
||||
})
|
||||
const appMenu = function () {
|
||||
let m = {};
|
||||
|
||||
m[''] = {'title': 'Score Settings'};
|
||||
m['< Back'] = function () { back(settings, changed); };
|
||||
if (reset) {
|
||||
m['Reset match'] = function () { back(settings, true); };
|
||||
}
|
||||
m['Presets'] = function () { E.showMenu(presetMenu()); };
|
||||
m['Sets to win'] = {
|
||||
value: settings.winSets,
|
||||
min:1,
|
||||
onchange: m => setAndSave('winSets', m),
|
||||
};
|
||||
m['Sets per page'] = {
|
||||
value: settings.setsPerPage,
|
||||
min:1,
|
||||
max:5,
|
||||
onchange: m => setAndSave('setsPerPage', m),
|
||||
};
|
||||
m['Score to win'] = {
|
||||
value: settings.winScore,
|
||||
min:1,
|
||||
onchange: m => setAndSave('winScore', m),
|
||||
};
|
||||
m['2-point lead'] = {
|
||||
value: settings.enableTwoAhead,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => setAndSave('enableTwoAhead', m),
|
||||
};
|
||||
m['Maximum score?'] = {
|
||||
value: settings.enableMaxScore,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => setAndSave('enableMaxScore', m),
|
||||
};
|
||||
m['Maximum score'] = {
|
||||
value: settings.maxScore,
|
||||
min: 1,
|
||||
onchange: m => setAndSave('maxScore', m),
|
||||
};
|
||||
m['Tennis scoring'] = {
|
||||
value: settings.enableTennisScoring,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => setAndSave('enableTennisScoring', m),
|
||||
};
|
||||
m['TB sets?'] = {
|
||||
value: settings.enableMaxScoreTiebreak,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => setAndSave('enableMaxScoreTiebreak', m),
|
||||
};
|
||||
m['TB Score to win'] = {
|
||||
value: settings.maxScoreTiebreakWinScore,
|
||||
onchange: m => setAndSave('maxScoreTiebreakWinScore', m),
|
||||
};
|
||||
m['TB 2-point lead'] = {
|
||||
value: settings.maxScoreTiebreakEnableTwoAhead,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => setAndSave('maxScoreTiebreakEnableTwoAhead', m),
|
||||
};
|
||||
m['TB max score?'] = {
|
||||
value: settings.maxScoreTiebreakEnableMaxScore,
|
||||
format: m => offon[~~m],
|
||||
onchange: m => setAndSave('maxScoreTiebreakEnableMaxScore', m),
|
||||
};
|
||||
m['TB max score'] = {
|
||||
value: settings.maxScoreTiebreakMaxScore,
|
||||
onchange: m => setAndSave('maxScoreTiebreakMaxScore', m),
|
||||
};
|
||||
|
||||
return m;
|
||||
};
|
||||
|
||||
E.showMenu(appMenu());
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue