mirror of https://github.com/espruino/BangleApps
feat: new app Golf Score
parent
6b2f8e98d3
commit
24d66cb4a0
14
apps.json
14
apps.json
|
@ -54,6 +54,20 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{ "id": "golfscore",
|
||||||
|
"name": "Golf Score",
|
||||||
|
"shortName":"golfscore",
|
||||||
|
"version":"0.01",
|
||||||
|
"description": "keeps track of strokes during a golf game",
|
||||||
|
"icon": "app.png",
|
||||||
|
"tags": "outdoors",
|
||||||
|
"supports" : ["BANGLEJS2"],
|
||||||
|
"readme": "README.md",
|
||||||
|
"storage": [
|
||||||
|
{"name":"golfscore.app.js","url":"app.js"},
|
||||||
|
{"name":"golfscore.img","url":"app-icon.js","evaluate":true}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "messages",
|
"id": "messages",
|
||||||
"name": "Messages",
|
"name": "Messages",
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
0.01: New App!
|
|
@ -0,0 +1,25 @@
|
||||||
|
# App Name
|
||||||
|
|
||||||
|
Describe the app...
|
||||||
|
|
||||||
|
Add screen shots (if possible) to the app folder and link then into this file with 
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Describe how to use it
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Name the function
|
||||||
|
|
||||||
|
## Controls
|
||||||
|
|
||||||
|
Name the buttons and what they are used for
|
||||||
|
|
||||||
|
## Requests
|
||||||
|
|
||||||
|
Name who should be contacted for support/update requests
|
||||||
|
|
||||||
|
## Creator
|
||||||
|
|
||||||
|
Your name
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("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"))
|
|
@ -0,0 +1,62 @@
|
||||||
|
const menu = require("graphical_menu");
|
||||||
|
|
||||||
|
let holes_count = 18;
|
||||||
|
let course = new Array(holes_count).fill(0);
|
||||||
|
let total_strokes = 0;
|
||||||
|
|
||||||
|
const mainmenu = {
|
||||||
|
"": {
|
||||||
|
"title": "-- Golf --"
|
||||||
|
},
|
||||||
|
"Holes": {
|
||||||
|
value: holes_count,
|
||||||
|
min: 1, max: 20, step: 1, wrap: true,
|
||||||
|
onchange: v => { holes_count = v; add_holes(); }
|
||||||
|
},
|
||||||
|
"Total Strokes": {
|
||||||
|
value: total_strokes,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function updateTotalStrokes() {
|
||||||
|
total_strokes = course.reduce((acc, strokes) => acc + strokes, 0);
|
||||||
|
mainmenu["Total Strokes"].value = total_strokes;
|
||||||
|
}
|
||||||
|
|
||||||
|
function inc_hole(i) { return function (v) { course[i] = v; updateTotalStrokes(); }; }
|
||||||
|
|
||||||
|
function add_holes() {
|
||||||
|
for (let j = 0; j < 100; j++) {
|
||||||
|
delete mainmenu["Hole - " + (j + 1)];
|
||||||
|
}
|
||||||
|
for (let i = 0; i < holes_count; i++) {
|
||||||
|
course[i] = 0;
|
||||||
|
mainmenu["Hole - " + (i + 1)] = hole_menu(i);
|
||||||
|
}
|
||||||
|
E.showMenu(mainmenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
function hole_menu(i) {
|
||||||
|
return function () {
|
||||||
|
E.showMenu(submenu(i));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function submenu(i) {
|
||||||
|
return {
|
||||||
|
"": {
|
||||||
|
"title": `-- Hole ${i + 1}--`
|
||||||
|
},
|
||||||
|
"strokes:": {
|
||||||
|
value: course[i],
|
||||||
|
min: 1, max: 20, step: 1, wrap: true,
|
||||||
|
onchange: inc_hole(i)
|
||||||
|
},
|
||||||
|
"Next hole": hole_menu(i + 1),
|
||||||
|
"< Back": function () { E.showMenu(mainmenu); },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
g.clear();
|
||||||
|
add_holes();
|
||||||
|
E.showMenu(mainmenu);
|
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
|
@ -1,3 +1,4 @@
|
||||||
0.01: New App!
|
0.01: New App!
|
||||||
0.02: using TS and rollup to bundle
|
0.02: using TS and rollup to bundle
|
||||||
0.03: bug fixes and support bangle 1
|
0.03: bug fixes and support bangle 1
|
||||||
|
0.04: don't allow date to change & docs
|
Loading…
Reference in New Issue