1
0
Fork 0

score: fix code style (indent by 2 spaces)

master
Mika Dede 2021-09-27 23:04:22 +02:00
parent 1983c37a81
commit 506918e772
No known key found for this signature in database
GPG Key ID: 546586DC38D45BBD
2 changed files with 393 additions and 393 deletions

View File

@ -21,93 +21,93 @@ let w = g.getWidth();
let h = g.getHeight(); let h = g.getHeight();
function setupInputWatchers() { function setupInputWatchers() {
if (global.BTN4) { if (global.BTN4) {
setWatch(() => handleInput(2), BTN2, { repeat: true }); setWatch(() => handleInput(2), BTN2, { repeat: true });
setWatch(() => handleInput(3), BTN1, { repeat: true }); setWatch(() => handleInput(3), BTN1, { repeat: true });
setWatch(() => handleInput(4), BTN3, { repeat: true }); setWatch(() => handleInput(4), BTN3, { repeat: true });
} else {
setWatch(() => handleInput(2), BTN, { repeat: true });
}
Bangle.on('touch', (b, e) => {
if (b) {
if (b === 1) {
handleInput(0);
} else {
handleInput(1);
}
} else { } else {
setWatch(() => handleInput(2), BTN, { repeat: true }); if (e.x < w/2) {
handleInput(0);
} else {
handleInput(1);
}
} }
Bangle.on('touch', (b, e) => { });
if (b) {
if (b === 1) {
handleInput(0);
} else {
handleInput(1);
}
} else {
if (e.x < w/2) {
handleInput(0);
} else {
handleInput(1);
}
}
});
} }
function setupMatch() { function setupMatch() {
scores = []; scores = [];
for (let s = 0; s < sets(); s++) { for (let s = 0; s < sets(); s++) {
scores.push([0,0,null,0,0]);
}
scores.push([0,0,null,0,0]); scores.push([0,0,null,0,0]);
}
scores.push([0,0,null,0,0]);
if (settings.enableTennisScoring) { if (settings.enableTennisScoring) {
tScores = [0,0]; tScores = [0,0];
} else { } else {
tScores = null; tScores = null;
} }
scores[0][2] = getTime(); scores[0][2] = getTime();
cSet = 0; cSet = 0;
firstShownSet = 0 - Math.floor(setsPerPage() / 2); firstShownSet = 0 - Math.floor(setsPerPage() / 2);
correctionMode = false; correctionMode = false;
} }
function showSettingsMenu() { function showSettingsMenu() {
settingsMenuOpened = getTime(); settingsMenuOpened = getTime();
settingsMenu(function (s, reset) { settingsMenu(function (s, reset) {
E.showMenu(); E.showMenu();
settings = s; settings = s;
if (reset) { if (reset) {
setupMatch(); setupMatch();
} else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) { } else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) {
correctionMode = !correctionMode; correctionMode = !correctionMode;
} }
settingsMenuOpened = null; settingsMenuOpened = null;
draw(); draw();
}); });
} }
function maxScore() { function maxScore() {
return Math.max(settings.maxScore, settings.winScore); return Math.max(settings.maxScore, settings.winScore);
} }
function tiebreakMaxScore() { function tiebreakMaxScore() {
return Math.max(settings.maxScoreTiebreakMaxScore, settings.maxScoreTiebreakWinScore); return Math.max(settings.maxScoreTiebreakMaxScore, settings.maxScoreTiebreakWinScore);
} }
function setsPerPage() { function setsPerPage() {
return Math.min(settings.setsPerPage, sets()); return Math.min(settings.setsPerPage, sets());
} }
function sets() { function sets() {
return settings.winSets * 2 - 1; return settings.winSets * 2 - 1;
} }
function currentSet() { function currentSet() {
return matchEnded() ? cSet - 1 : cSet; return matchEnded() ? cSet - 1 : cSet;
} }
function shouldTiebreak() { function shouldTiebreak() {
return settings.enableMaxScoreTiebreak && return settings.enableMaxScoreTiebreak &&
scores[cSet][0] + scores[cSet][1] === (maxScore() - 1) * 2; scores[cSet][0] + scores[cSet][1] === (maxScore() - 1) * 2;
} }
function formatNumber(num, length) { function formatNumber(num, length) {
@ -115,285 +115,285 @@ function formatNumber(num, length) {
} }
function formatDuration(duration) { function formatDuration(duration) {
let durS = Math.floor(duration); let durS = Math.floor(duration);
let durM = Math.floor(durS / 60); let durM = Math.floor(durS / 60);
let durH = Math.floor(durM / 60); let durH = Math.floor(durM / 60);
durS = durS - durM * 60; durS = durS - durM * 60;
durM = durM - durH * 60; durM = durM - durH * 60;
durS = formatNumber(durS); durS = formatNumber(durS);
durM = formatNumber(durM); durM = formatNumber(durM);
durH = formatNumber(durH); durH = formatNumber(durH);
let dur = null; let dur = null;
if (durH > 0) { if (durH > 0) {
dur = durH + ':' + durM; dur = durH + ':' + durM;
} else { } else {
dur = durM + ':' + durS; dur = durM + ':' + durS;
} }
return dur; return dur;
} }
function tiebreakWon(set, player) { function tiebreakWon(set, player) {
let pScore = scores[set][3+player]; let pScore = scores[set][3+player];
let p2Score = scores[set][3+~~!player]; let p2Score = scores[set][3+~~!player];
let winScoreReached = pScore >= settings.maxScoreTiebreakWinScore; let winScoreReached = pScore >= settings.maxScoreTiebreakWinScore;
let isTwoAhead = !settings.maxScoreTiebreakEnableTwoAhead || pScore - p2Score >= 2; let isTwoAhead = !settings.maxScoreTiebreakEnableTwoAhead || pScore - p2Score >= 2;
let reachedMaxScore = settings.maxScoreTiebreakEnableMaxScore && pScore >= tiebreakMaxScore(); let reachedMaxScore = settings.maxScoreTiebreakEnableMaxScore && pScore >= tiebreakMaxScore();
return reachedMaxScore || (winScoreReached && isTwoAhead); return reachedMaxScore || (winScoreReached && isTwoAhead);
} }
function setWon(set, player) { function setWon(set, player) {
let pScore = scores[set][player]; let pScore = scores[set][player];
let p2Score = scores[set][~~!player]; let p2Score = scores[set][~~!player];
let winScoreReached = pScore >= settings.winScore; let winScoreReached = pScore >= settings.winScore;
let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2;
let tiebreakW = tiebreakWon(set, player); let tiebreakW = tiebreakWon(set, player);
let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore(); let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore();
return ( return (
(settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) || (settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) ||
(winScoreReached && isTwoAhead) (winScoreReached && isTwoAhead)
); );
} }
function setEnded(set) { function setEnded(set) {
return setWon(set, 0) || setWon(set, 1); return setWon(set, 0) || setWon(set, 1);
} }
function setsWon(player) { function setsWon(player) {
return Array(sets()).fill(0).map((_, s) => ~~setWon(s, player)).reduce((a,v) => a+v, 0); return Array(sets()).fill(0).map((_, s) => ~~setWon(s, player)).reduce((a,v) => a+v, 0);
} }
function matchWon(player) { function matchWon(player) {
return setsWon(player) >= settings.winSets; return setsWon(player) >= settings.winSets;
} }
function matchEnded() { function matchEnded() {
return matchWon(0) || matchWon(1); return matchWon(0) || matchWon(1);
} }
function matchScore(player) { function matchScore(player) {
return scores.reduce((acc, val) => acc += val[player], 0); return scores.reduce((acc, val) => acc += val[player], 0);
} }
function score(player) { function score(player) {
let setFirstShownSet = function () { let setFirstShownSet = function () {
firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); firstShownSet = currentSet() - Math.floor(setsPerPage() / 2);
}; };
let updateCurrentSet = function (val) { let updateCurrentSet = function (val) {
cSet += val; cSet += val;
setFirstShownSet(); setFirstShownSet();
}; };
if (!matchEnded() || correctionMode) { if (!matchEnded() || correctionMode) {
setFirstShownSet(); setFirstShownSet();
}
if (correctionMode) {
if (
scores[cSet][0] === 0 && scores[cSet][1] === 0 &&
scores[cSet][3] === 0 && scores[cSet][4] === 0 &&
cSet > 0
) {
updateCurrentSet(-1);
} }
if (correctionMode) { if (scores[cSet][3] > 0 || scores[cSet][4] > 0) {
if ( if (scores[cSet][3+player] > 0) {
scores[cSet][0] === 0 && scores[cSet][1] === 0 && scores[cSet][3+player]--;
scores[cSet][3] === 0 && scores[cSet][4] === 0 && }
cSet > 0 } else if (scores[cSet][player] > 0) {
) { if (tScores[player] === 0 && tScores[~~!player] === 0) {
updateCurrentSet(-1); scores[cSet][player]--;
} } else {
tScores[player] = 0;
tScores[~~!player] = 0;
}
}
} else {
if (matchEnded()) return;
if (scores[cSet][3] > 0 || scores[cSet][4] > 0) { if (shouldTiebreak()) {
if (scores[cSet][3+player] > 0) { scores[cSet][3+player]++;
scores[cSet][3+player]--; } else if (settings.enableTennisScoring) {
} if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD
} else if (scores[cSet][player] > 0) { tScores[~~!player]--;
if (tScores[player] === 0 && tScores[~~!player] === 0) { } else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40
scores[cSet][player]--; tScores[0] = 4;
} else { tScores[1] = 4;
tScores[player] = 0; } else if (tScores[player] === 3 || tScores[player] === 5) { // 40 / AD
tScores[~~!player] = 0; tScores[0] = 0;
} tScores[1] = 0;
} scores[cSet][player]++;
} else {
tScores[player]++;
}
} else { } else {
if (matchEnded()) return; scores[cSet][player]++;
if (shouldTiebreak()) {
scores[cSet][3+player]++;
} else if (settings.enableTennisScoring) {
if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD
tScores[~~!player]--;
} else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40
tScores[0] = 4;
tScores[1] = 4;
} else if (tScores[player] === 3 || tScores[player] === 5) { // 40 / AD
tScores[0] = 0;
tScores[1] = 0;
scores[cSet][player]++;
} else {
tScores[player]++;
}
} else {
scores[cSet][player]++;
}
if (setEnded(cSet) && cSet < sets()) {
if (shouldTiebreak()) {
scores[cSet][player]++;
}
updateCurrentSet(1);
scores[cSet][2] = getTime();
}
if (matchEnded()) {
firstShownSet = 0;
}
} }
if (setEnded(cSet) && cSet < sets()) {
if (shouldTiebreak()) {
scores[cSet][player]++;
}
updateCurrentSet(1);
scores[cSet][2] = getTime();
}
if (matchEnded()) {
firstShownSet = 0;
}
}
} }
function handleInput(button) { function handleInput(button) {
if (settingsMenuOpened) { if (settingsMenuOpened) {
return;
}
switch (button) {
case 0:
case 1:
score(button);
break;
case 2:
showSettingsMenu();
return; return;
} case 3:
case 4:
let hLimit = currentSet();
let lLimit = 1 - setsPerPage();
let val = (button * 2 - 7);
firstShownSet += val;
if (firstShownSet > hLimit) firstShownSet = hLimit;
if (firstShownSet < lLimit) firstShownSet = lLimit;
break;
}
switch (button) { draw();
case 0:
case 1:
score(button);
break;
case 2:
showSettingsMenu();
return;
case 3:
case 4:
let hLimit = currentSet();
let lLimit = 1 - setsPerPage();
let val = (button * 2 - 7);
firstShownSet += val;
if (firstShownSet > hLimit) firstShownSet = hLimit;
if (firstShownSet < lLimit) firstShownSet = lLimit;
break;
}
draw();
} }
function draw() { function draw() {
g.setFontAlign(0,0); g.setFontAlign(0,0);
g.clear(); g.clear();
for (let p = 0; p < 2; p++) {
if (matchWon(p)) {
g.setFontAlign(0,0);
g.setFont('Teletext10x18Ascii',1);
g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15);
} else if (matchEnded()) {
g.setFontAlign(0,-1);
let dur1 = formatDuration(scores[cSet][2] - scores[0][2]);
g.setFont('5x9Numeric7Seg',1);
g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10);
g.setFont('Teletext5x9Ascii',1);
g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12);
}
g.setFontAlign(p === 0 ? -1 : 1,1);
g.setFont('7x11Numeric7Seg',2);
g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5);
if (!settings.enableTennisScoring) {
g.setFontAlign(p === 0 ? 1 : -1,1);
g.setFont('7x11Numeric7Seg',2);
g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5);
}
}
g.setFontAlign(0,0);
if (correctionMode) {
g.setFont('Teletext10x18Ascii',1);
g.drawString("R", w/2, h-10);
}
let lastShownSet = Math.min(
sets(),
currentSet() + 1,
firstShownSet+setsPerPage()
);
let setsOnCurrentPage = Math.min(
sets(),
setsPerPage()
);
for (let set = firstShownSet; set < lastShownSet; set++) {
if (set < 0) continue;
let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5;
g.setFontAlign(1,0);
g.setFont('7x11Numeric7Seg',1);
g.drawString(set+1, 40, y-10);
if (scores[set+1][2] != null) {
let dur2 = formatDuration(scores[set+1][2] - scores[set][2]);
g.drawString(dur2, 40, y+10);
}
for (let p = 0; p < 2; p++) { for (let p = 0; p < 2; p++) {
if (matchWon(p)) { if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) {
g.setFontAlign(0,0); let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4;
g.setFont('Teletext10x18Ascii',1); let smallNumX = p === 0 ? w/2-2 : w/2+3;
g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15);
} else if (matchEnded()) {
g.setFontAlign(0,-1);
let dur1 = formatDuration(scores[cSet][2] - scores[0][2]);
g.setFont('5x9Numeric7Seg',1);
g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10);
g.setFont('Teletext5x9Ascii',1);
g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12);
if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) {
g.setFontAlign(0,0);
g.setFont('7x11Numeric7Seg',3);
g.drawString(
formatNumber(tennisScores[tScores[p]]),
bigNumX,
y
);
} else if (shouldTiebreak() && set === cSet) {
g.setFontAlign(0,0);
g.setFont('7x11Numeric7Seg',3);
g.drawString(
formatNumber(scores[set][3+p], 3),
bigNumX,
y
);
} else {
g.setFontAlign(0,0);
g.setFont('7x11Numeric7Seg',3);
g.drawString(
formatNumber(scores[set][p]),
bigNumX,
y
);
} }
g.setFontAlign(p === 0 ? -1 : 1,1); if ((shouldTiebreak() || settings.enableTennisScoring) && set === cSet) {
g.setFont('7x11Numeric7Seg',2); g.setFontAlign(p === 0 ? 1 : -1,0);
g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5); g.setFont('7x11Numeric7Seg',1);
g.drawString(
if (!settings.enableTennisScoring) { formatNumber(scores[set][p]),
g.setFontAlign(p === 0 ? 1 : -1,1); smallNumX,
g.setFont('7x11Numeric7Seg',2); y
g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5); );
} else if ((scores[set][3] !== 0 || scores[set][4] !== 0) && set !== cSet) {
g.setFontAlign(p === 0 ? 1 : -1,0);
g.setFont('7x11Numeric7Seg',1);
g.drawString(
formatNumber(scores[set][3+p], 3),
smallNumX,
y
);
} }
}
} }
g.setFontAlign(0,0); }
if (correctionMode) { // draw separator
g.setFont('Teletext10x18Ascii',1); g.drawLine(w/2,20,w/2,h-25);
g.drawString("R", w/2, h-10);
}
let lastShownSet = Math.min( g.flip();
sets(),
currentSet() + 1,
firstShownSet+setsPerPage()
);
let setsOnCurrentPage = Math.min(
sets(),
setsPerPage()
);
for (let set = firstShownSet; set < lastShownSet; set++) {
if (set < 0) continue;
let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5;
g.setFontAlign(1,0);
g.setFont('7x11Numeric7Seg',1);
g.drawString(set+1, 40, y-10);
if (scores[set+1][2] != null) {
let dur2 = formatDuration(scores[set+1][2] - scores[set][2]);
g.drawString(dur2, 40, y+10);
}
for (let p = 0; p < 2; p++) {
if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) {
let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4;
let smallNumX = p === 0 ? w/2-2 : w/2+3;
if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) {
g.setFontAlign(0,0);
g.setFont('7x11Numeric7Seg',3);
g.drawString(
formatNumber(tennisScores[tScores[p]]),
bigNumX,
y
);
} else if (shouldTiebreak() && set === cSet) {
g.setFontAlign(0,0);
g.setFont('7x11Numeric7Seg',3);
g.drawString(
formatNumber(scores[set][3+p], 3),
bigNumX,
y
);
} else {
g.setFontAlign(0,0);
g.setFont('7x11Numeric7Seg',3);
g.drawString(
formatNumber(scores[set][p]),
bigNumX,
y
);
}
if ((shouldTiebreak() || settings.enableTennisScoring) && set === cSet) {
g.setFontAlign(p === 0 ? 1 : -1,0);
g.setFont('7x11Numeric7Seg',1);
g.drawString(
formatNumber(scores[set][p]),
smallNumX,
y
);
} else if ((scores[set][3] !== 0 || scores[set][4] !== 0) && set !== cSet) {
g.setFontAlign(p === 0 ? 1 : -1,0);
g.setFont('7x11Numeric7Seg',1);
g.drawString(
formatNumber(scores[set][3+p], 3),
smallNumX,
y
);
}
}
}
}
// draw separator
g.drawLine(w/2,20,w/2,h-25);
g.flip();
} }
setupInputWatchers(); setupInputWatchers();

View File

@ -1,128 +1,128 @@
(function (back, ret) { (function (back, ret) {
const fileName = 'score.json' const fileName = 'score.json'
let settings = require('Storage').readJSON(fileName, 1) || {}; let settings = require('Storage').readJSON(fileName, 1) || {};
const offon = ['No', 'Yes']; const offon = ['No', 'Yes'];
let changed = false; let changed = false;
function save(key, value) { function save(key, value) {
changed = true; changed = true;
settings[key] = value; settings[key] = value;
if (key === 'winScore' && settings.maxScore < value) { if (key === 'winScore' && settings.maxScore < value) {
settings.maxScore = value; settings.maxScore = value;
}
require('Storage').writeJSON(fileName, settings);
} }
require('Storage').writeJSON(fileName, settings);
}
if (settings.winSets == null) { if (settings.winSets == null) {
settings.winSets = 1; settings.winSets = 1;
} }
if (settings.setsPerPage == null) { if (settings.setsPerPage == null) {
settings.setsPerPage = 5; settings.setsPerPage = 5;
} }
if (settings.winScore == null) { if (settings.winScore == null) {
settings.winScore = 21; settings.winScore = 21;
} }
if (settings.enableTwoAhead == null) { if (settings.enableTwoAhead == null) {
settings.enableTwoAhead = true; settings.enableTwoAhead = true;
} }
if (settings.enableMaxScore == null) { if (settings.enableMaxScore == null) {
settings.enableMaxScore = true; settings.enableMaxScore = true;
} }
if (settings.maxScore == null) { if (settings.maxScore == null) {
settings.maxScore = 30; settings.maxScore = 30;
} }
if (settings.enableTennisScoring == null) { if (settings.enableTennisScoring == null) {
settings.enableTennisScoring = false; settings.enableTennisScoring = false;
} }
if (settings.enableMaxScoreTiebreak == null) { if (settings.enableMaxScoreTiebreak == null) {
settings.enableMaxScoreTiebreak = false; settings.enableMaxScoreTiebreak = false;
} }
if (settings.maxScoreTiebreakWinScore == null) { if (settings.maxScoreTiebreakWinScore == null) {
settings.maxScoreTiebreakWinScore = 6; settings.maxScoreTiebreakWinScore = 6;
} }
if (settings.maxScoreTiebreakEnableTwoAhead == null) { if (settings.maxScoreTiebreakEnableTwoAhead == null) {
settings.maxScoreTiebreakEnableTwoAhead = true; settings.maxScoreTiebreakEnableTwoAhead = true;
} }
if (settings.maxScoreTiebreakEnableMaxScore == null) { if (settings.maxScoreTiebreakEnableMaxScore == null) {
settings.maxScoreTiebreakEnableMaxScore = false; settings.maxScoreTiebreakEnableMaxScore = false;
} }
if (settings.maxScoreTiebreakMaxScore == null) { if (settings.maxScoreTiebreakMaxScore == null) {
settings.maxScoreTiebreakMaxScore = 15; settings.maxScoreTiebreakMaxScore = 15;
} }
if (ret) { if (ret) {
return settings; return settings;
} }
const appMenu = {}; const appMenu = {};
appMenu[''] = {'title': 'Score Settings'}, appMenu[''] = {'title': 'Score Settings'},
appMenu['< Back'] = function () { back(settings, changed); }; appMenu['< Back'] = function () { back(settings, changed); };
if (reset) { if (reset) {
appMenu['Reset match'] = function () { back(settings, true); }; appMenu['Reset match'] = function () { back(settings, true); };
} }
appMenu['Sets to win'] = { appMenu['Sets to win'] = {
value: settings.winSets, value: settings.winSets,
min:1, min:1,
onchange: m => save('winSets', m) onchange: m => save('winSets', m)
}; };
appMenu['Sets per page'] = { appMenu['Sets per page'] = {
value: settings.setsPerPage, value: settings.setsPerPage,
min:1, min:1,
max:5, max:5,
onchange: m => save('setsPerPage', m) onchange: m => save('setsPerPage', m)
}; };
appMenu['Score to win'] = { appMenu['Score to win'] = {
value: settings.winScore, value: settings.winScore,
min:1, min:1,
onchange: m => save('winScore', m) onchange: m => save('winScore', m)
}; };
appMenu['2-point lead'] = { appMenu['2-point lead'] = {
value: settings.enableTwoAhead, value: settings.enableTwoAhead,
format: m => offon[~~m], format: m => offon[~~m],
onchange: m => save('enableTwoAhead', m) onchange: m => save('enableTwoAhead', m)
}; };
appMenu['Maximum score?'] = { appMenu['Maximum score?'] = {
value: settings.enableMaxScore, value: settings.enableMaxScore,
format: m => offon[~~m], format: m => offon[~~m],
onchange: m => save('enableMaxScore', m) onchange: m => save('enableMaxScore', m)
}; };
appMenu['Maximum score'] = { appMenu['Maximum score'] = {
value: settings.maxScore, value: settings.maxScore,
min: 1, min: 1,
onchange: m => save('maxScore', m) onchange: m => save('maxScore', m)
}; };
appMenu['Tennis scoring'] = { appMenu['Tennis scoring'] = {
value: settings.enableTennisScoring, value: settings.enableTennisScoring,
format: m => offon[~~m], format: m => offon[~~m],
onchange: m => save('enableTennisScoring', m) onchange: m => save('enableTennisScoring', m)
}; };
appMenu['TB sets?'] = { appMenu['TB sets?'] = {
value: settings.enableMaxScoreTiebreak, value: settings.enableMaxScoreTiebreak,
format: m => offon[~~m], format: m => offon[~~m],
onchange: m => save('enableMaxScoreTiebreak', m) onchange: m => save('enableMaxScoreTiebreak', m)
} }
appMenu['TB Score to win'] = { appMenu['TB Score to win'] = {
value: settings.maxScoreTiebreakWinScore, value: settings.maxScoreTiebreakWinScore,
onchange: m => save('maxScoreTiebreakWinScore', m) onchange: m => save('maxScoreTiebreakWinScore', m)
} }
appMenu['TB 2-point lead'] = { appMenu['TB 2-point lead'] = {
value: settings.maxScoreTiebreakEnableTwoAhead, value: settings.maxScoreTiebreakEnableTwoAhead,
format: m => offon[~~m], format: m => offon[~~m],
onchange: m => save('maxScoreTiebreakEnableTwoAhead', m) onchange: m => save('maxScoreTiebreakEnableTwoAhead', m)
} }
appMenu['TB max score?'] = { appMenu['TB max score?'] = {
value: settings.maxScoreTiebreakEnableMaxScore, value: settings.maxScoreTiebreakEnableMaxScore,
format: m => offon[~~m], format: m => offon[~~m],
onchange: m => save('maxScoreTiebreakEnableMaxScore', m) onchange: m => save('maxScoreTiebreakEnableMaxScore', m)
} }
appMenu['TB max score'] = { appMenu['TB max score'] = {
value: settings.maxScoreTiebreakMaxScore, value: settings.maxScoreTiebreakMaxScore,
onchange: m => save('maxScoreTiebreakMaxScore', m) onchange: m => save('maxScoreTiebreakMaxScore', m)
} }
E.showMenu(appMenu) E.showMenu(appMenu)
}) })