From 770d28e6ba9fe70a90fa00c53c962264beaa172a Mon Sep 17 00:00:00 2001 From: flashback2k14 Date: Thu, 30 Apr 2020 13:22:06 +0200 Subject: [PATCH 01/38] initial commit --- apps.json | 2272 +++++++++++++++++++++++++++----------- apps/timer/ChangeLog | 1 + apps/timer/timer-icon.js | 5 + apps/timer/timer.app.js | 46 + apps/timer/timer.png | Bin 0 -> 2140 bytes 5 files changed, 1704 insertions(+), 620 deletions(-) create mode 100644 apps/timer/ChangeLog create mode 100644 apps/timer/timer-icon.js create mode 100644 apps/timer/timer.app.js create mode 100644 apps/timer/timer.png diff --git a/apps.json b/apps.json index 4754437846..4f74eb0c31 100644 --- a/apps.json +++ b/apps.json @@ -1,920 +1,1568 @@ [ - { "id": "boot", + { + "id": "boot", "name": "Bootloader", "icon": "bootloader.png", - "version":"0.15", + "version": "0.15", "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings", "tags": "tool,system", - "type":"bootloader", + "type": "bootloader", "storage": [ - {"name":".boot0","url":"boot0.js"}, - {"name":".bootcde","url":"bootloader.js"} + { + "name": ".boot0", + "url": "boot0.js" + }, + { + "name": ".bootcde", + "url": "bootloader.js" + } ], - "sortorder" : -10 + "sortorder": -10 }, - { "id": "moonphase", + { + "id": "moonphase", "name": "Moonphase", "icon": "app.png", - "version":"0.02", + "version": "0.02", "description": "Shows current moon phase. Now with GPS function.", "tags": "", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"moonphase.app.js","url":"app.js"}, - {"name":"moonphase.img","url":"app-icon.js","evaluate":true} + { + "name": "moonphase.app.js", + "url": "app.js" + }, + { + "name": "moonphase.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "daysl", + { + "id": "daysl", "name": "Days left", "icon": "app.png", - "version":"0.03", + "version": "0.03", "description": "Shows you the days left until a certain date. Date can be set with a settings app and is written to a file.", "tags": "", - "allow_emulator":false, + "allow_emulator": false, "storage": [ - {"name":"daysl.app.js","url":"app.js"}, - {"name":"daysl.img","url":"app-icon.js","evaluate":true}, - {"name":"daysl.wid.js","url":"widget.js"} + { + "name": "daysl.app.js", + "url": "app.js" + }, + { + "name": "daysl.img", + "url": "app-icon.js", + "evaluate": true + }, + { + "name": "daysl.wid.js", + "url": "widget.js" + } ] }, - { "id": "launch", + { + "id": "launch", "name": "Default Launcher", - "shortName":"Launcher", + "shortName": "Launcher", "icon": "app.png", - "version":"0.02", + "version": "0.02", "description": "This is needed by Bangle.js to display a menu allowing you to choose your own applications. You can replace this with a customised launcher.", "tags": "tool,system,launcher", - "type":"launch", + "type": "launch", "storage": [ - {"name":"launch.app.js","url":"app.js"} + { + "name": "launch.app.js", + "url": "app.js" + } ], - "sortorder" : -10 + "sortorder": -10 }, - { "id": "about", + { + "id": "about", "name": "About", "icon": "app.png", - "version":"0.05", + "version": "0.05", "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers", "tags": "tool,system", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"about.app.js","url":"app.js"}, - {"name":"about.img","url":"app-icon.js","evaluate":true} + { + "name": "about.app.js", + "url": "app.js" + }, + { + "name": "about.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "locale", + { + "id": "locale", "name": "Languages", "icon": "locale.png", - "version":"0.06", + "version": "0.06", "description": "Translations for different countries", "tags": "tool,system,locale,translate", "type": "locale", - "custom":"locale.html", + "custom": "locale.html", "storage": [ - {"name":"locale"} + { + "name": "locale" + } ], - "sortorder" : -10 + "sortorder": -10 }, - { "id": "welcome", + { + "id": "welcome", "name": "Welcome", "icon": "app.png", - "version":"0.08", + "version": "0.08", "description": "Appears at first boot and explains how to use Bangle.js", "tags": "start,welcome", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"welcome.boot.js","url":"boot.js"}, - {"name":"welcome.app.js","url":"app.js"}, - {"name":"welcome.settings.js","url":"settings.js"}, - {"name":"welcome.img","url":"app-icon.js","evaluate":true} + { + "name": "welcome.boot.js", + "url": "boot.js" + }, + { + "name": "welcome.app.js", + "url": "app.js" + }, + { + "name": "welcome.settings.js", + "url": "settings.js" + }, + { + "name": "welcome.img", + "url": "app-icon.js", + "evaluate": true + } ], "data": [ - {"name":"welcome.json"} + { + "name": "welcome.json" + } ] }, - { "id": "gbridge", + { + "id": "gbridge", "name": "Gadgetbridge", "icon": "app.png", - "version":"0.10", + "version": "0.10", "description": "The default notification handler for Gadgetbridge notifications from Android", "tags": "tool,system,android,widget", - "type":"widget", + "type": "widget", "storage": [ - {"name":"gbridge.settings.js","url":"settings.js"}, - {"name":"gbridge.img","url":"app-icon.js","evaluate":true}, - {"name":"gbridge.wid.js","url":"widget.js"} + { + "name": "gbridge.settings.js", + "url": "settings.js" + }, + { + "name": "gbridge.img", + "url": "app-icon.js", + "evaluate": true + }, + { + "name": "gbridge.wid.js", + "url": "widget.js" + } ] }, - { "id": "mclock", + { + "id": "mclock", "name": "Morphing Clock", "icon": "clock-morphing.png", - "version":"0.04", + "version": "0.04", "description": "7 segment clock that morphs between minutes and hours", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"mclock.app.js","url":"clock-morphing.js"}, - {"name":"mclock.img","url":"clock-morphing-icon.js","evaluate":true} + { + "name": "mclock.app.js", + "url": "clock-morphing.js" + }, + { + "name": "mclock.img", + "url": "clock-morphing-icon.js", + "evaluate": true + } ], - "sortorder" : -9 + "sortorder": -9 }, - { "id": "setting", + { + "id": "setting", "name": "Settings", "icon": "settings.png", - "version":"0.19", + "version": "0.19", "description": "A menu for setting up Bangle.js", "tags": "tool,system", "readme": "README.md", "storage": [ - {"name":"setting.app.js","url":"settings.js"}, - {"name":"setting.boot.js","url":"boot.js"}, - {"name":"setting.img","url":"settings-icon.js","evaluate":true} + { + "name": "setting.app.js", + "url": "settings.js" + }, + { + "name": "setting.boot.js", + "url": "boot.js" + }, + { + "name": "setting.img", + "url": "settings-icon.js", + "evaluate": true + } ], - "sortorder" : -2 + "sortorder": -2 }, - { "id": "alarm", + { + "id": "alarm", "name": "Default Alarm", - "shortName":"Alarms", + "shortName": "Alarms", "icon": "app.png", - "version":"0.07", + "version": "0.07", "description": "Set and respond to alarms", "tags": "tool,alarm,widget", "storage": [ - {"name":"alarm.app.js","url":"app.js"}, - {"name":"alarm.boot.js","url":"boot.js"}, - {"name":"alarm.js","url":"alarm.js"}, - {"name":"alarm.img","url":"app-icon.js","evaluate":true}, - {"name":"alarm.wid.js","url":"widget.js"} + { + "name": "alarm.app.js", + "url": "app.js" + }, + { + "name": "alarm.boot.js", + "url": "boot.js" + }, + { + "name": "alarm.js", + "url": "alarm.js" + }, + { + "name": "alarm.img", + "url": "app-icon.js", + "evaluate": true + }, + { + "name": "alarm.wid.js", + "url": "widget.js" + } ], "data": [ - {"name":"alarm.json"} + { + "name": "alarm.json" + } ] }, - { "id": "wclock", + { + "id": "wclock", "name": "Word Clock", "icon": "clock-word.png", - "version":"0.02", + "version": "0.02", "description": "Display Time as Text", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"wclock.app.js","url":"clock-word.js"}, - {"name":"wclock.img","url":"clock-word-icon.js","evaluate":true} + { + "name": "wclock.app.js", + "url": "clock-word.js" + }, + { + "name": "wclock.img", + "url": "clock-word-icon.js", + "evaluate": true + } ] }, - { "id": "impwclock", + { + "id": "impwclock", "name": "Imprecise Word Clock", "icon": "clock-impword.png", - "version":"0.01", + "version": "0.01", "description": "Imprecise word clock for vacations, weekends, and those who never need accurate time.", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"impwclock.app.js","url":"clock-impword.js"}, - {"name":"impwclock.img","url":"clock-impword-icon.js","evaluate":true} + { + "name": "impwclock.app.js", + "url": "clock-impword.js" + }, + { + "name": "impwclock.img", + "url": "clock-impword-icon.js", + "evaluate": true + } ] }, - { "id": "aclock", + { + "id": "aclock", "name": "Analog Clock", "icon": "clock-analog.png", "version": "0.12", "description": "An Analog Clock", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"aclock.app.js","url":"clock-analog.js"}, - {"name":"aclock.img","url":"clock-analog-icon.js","evaluate":true} + { + "name": "aclock.app.js", + "url": "clock-analog.js" + }, + { + "name": "aclock.img", + "url": "clock-analog-icon.js", + "evaluate": true + } ] }, - { "id": "clock2x3", + { + "id": "clock2x3", "name": "2x3 Pixel Clock", "icon": "clock2x3.png", - "version":"0.04", + "version": "0.04", "description": "This is a simple clock using minimalist 2x3 pixel numerical digits", "tags": "clock", "type": "clock", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"clock2x3.app.js","url":"clock2x3-app.js"}, - {"name":"clock2x3.img","url":"clock2x3-icon.js","evaluate":true} + { + "name": "clock2x3.app.js", + "url": "clock2x3-app.js" + }, + { + "name": "clock2x3.img", + "url": "clock2x3-icon.js", + "evaluate": true + } ] }, - { "id": "trex", + { + "id": "trex", "name": "T-Rex", "icon": "trex.png", - "version":"0.01", + "version": "0.01", "description": "T-Rex game in the style of Chrome's offline game", "tags": "game", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"trex.app.js","url":"trex.js"}, - {"name":"trex.img","url":"trex-icon.js","evaluate":true} + { + "name": "trex.app.js", + "url": "trex.js" + }, + { + "name": "trex.img", + "url": "trex-icon.js", + "evaluate": true + } ] }, - { "id": "astroid", + { + "id": "astroid", "name": "Asteroids!", "icon": "asteroids.png", - "version":"0.01", + "version": "0.01", "description": "Retro asteroids game", "tags": "game", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"astroid.app.js","url":"asteroids.js"}, - {"name":"astroid.img","url":"asteroids-icon.js","evaluate":true} + { + "name": "astroid.app.js", + "url": "asteroids.js" + }, + { + "name": "astroid.img", + "url": "asteroids-icon.js", + "evaluate": true + } ] }, - { "id": "clickms", + { + "id": "clickms", "name": "Click Master", "icon": "click-master.png", - "version":"0.01", + "version": "0.01", "description": "Get several friends to start the game, then compete to see who can press BTN1 the most!", "tags": "game", "storage": [ - {"name":"clickms.app.js","url":"click-master.js"}, - {"name":"clickms.img","url":"click-master-icon.js","evaluate":true} + { + "name": "clickms.app.js", + "url": "click-master.js" + }, + { + "name": "clickms.img", + "url": "click-master-icon.js", + "evaluate": true + } ] }, - { "id": "horsey", + { + "id": "horsey", "name": "Horse Race!", "icon": "horse-race.png", - "version":"0.01", + "version": "0.01", "description": "Get several friends to start the game, then compete to see who can press BTN1 the most!", "tags": "game", "storage": [ - {"name":"horsey.app.js","url":"horse-race.js"}, - {"name":"horsey.img","url":"horse-race-icon.js","evaluate":true} + { + "name": "horsey.app.js", + "url": "horse-race.js" + }, + { + "name": "horsey.img", + "url": "horse-race-icon.js", + "evaluate": true + } ] }, - { "id": "compass", + { + "id": "compass", "name": "Compass", "icon": "compass.png", - "version":"0.02", + "version": "0.02", "description": "Simple compass that points North", "tags": "tool,outdoors", "storage": [ - {"name":"compass.app.js","url":"compass.js"}, - {"name":"compass.img","url":"compass-icon.js","evaluate":true} + { + "name": "compass.app.js", + "url": "compass.js" + }, + { + "name": "compass.img", + "url": "compass-icon.js", + "evaluate": true + } ] }, - { "id": "gpstime", + { + "id": "gpstime", "name": "GPS Time", "icon": "gpstime.png", - "version":"0.03", + "version": "0.03", "description": "Update the Bangle.js's clock based on the time from the GPS receiver", "tags": "tool,gps", "storage": [ - {"name":"gpstime.app.js","url":"gpstime.js"}, - {"name":"gpstime.img","url":"gpstime-icon.js","evaluate":true} + { + "name": "gpstime.app.js", + "url": "gpstime.js" + }, + { + "name": "gpstime.img", + "url": "gpstime-icon.js", + "evaluate": true + } ] }, - { "id": "openloc", + { + "id": "openloc", "name": "Open Location / Plus Codes", "shortName": "Open Location", "icon": "app.png", - "version":"0.01", + "version": "0.01", "description": "Convert your current GPS location to a series of characters", "tags": "tool,outdoors,gps", "storage": [ - {"name":"openloc.app.js","url":"app.js"}, - {"name":"openloc.img","url":"app-icon.js","evaluate":true} + { + "name": "openloc.app.js", + "url": "app.js" + }, + { + "name": "openloc.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "speedo", + { + "id": "speedo", "name": "Speedo", "icon": "speedo.png", - "version":"0.01", + "version": "0.01", "description": "Show the current speed according to the GPS", "tags": "tool,outdoors,gps", "storage": [ - {"name":"speedo.app.js","url":"speedo.js"}, - {"name":"speedo.img","url":"speedo-icon.js","evaluate":true} + { + "name": "speedo.app.js", + "url": "speedo.js" + }, + { + "name": "speedo.img", + "url": "speedo-icon.js", + "evaluate": true + } ] }, - { "id": "gpsrec", + { + "id": "gpsrec", "name": "GPS Recorder", "icon": "app.png", - "version":"0.08", + "version": "0.08", "interface": "interface.html", "description": "Application that allows you to record a GPS track. Can run in background", "tags": "tool,outdoors,gps,widget", "storage": [ - {"name":"gpsrec.app.js","url":"app.js"}, - {"name":"gpsrec.img","url":"app-icon.js","evaluate":true}, - {"name":"gpsrec.wid.js","url":"widget.js"} + { + "name": "gpsrec.app.js", + "url": "app.js" + }, + { + "name": "gpsrec.img", + "url": "app-icon.js", + "evaluate": true + }, + { + "name": "gpsrec.wid.js", + "url": "widget.js" + } ], "data": [ - {"name":"gpsrec.json"}, - {"wildcard":".gpsrc?","storageFile": true} + { + "name": "gpsrec.json" + }, + { + "wildcard": ".gpsrc?", + "storageFile": true + } ] }, - { "id": "gpsnav", + { + "id": "gpsnav", "name": "GPS Navigation", "icon": "icon.png", - "version":"0.01", + "version": "0.01", "description": "Displays GPS Course and Speed, + Directions to waypoint and waypoint recording", "tags": "tool,outdoors,gps", "readme": "README.md", "storage": [ - {"name":"gpsnav.app.js","url":"app.js"}, - {"name":"waypoints.json","url":"waypoints.json","evaluate":false}, - {"name":"gpsnav.img","url":"app-icon.js","evaluate":true} + { + "name": "gpsnav.app.js", + "url": "app.js" + }, + { + "name": "waypoints.json", + "url": "waypoints.json", + "evaluate": false + }, + { + "name": "gpsnav.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "heart", + { + "id": "heart", "name": "Heart Rate Recorder", "icon": "app.png", - "version":"0.02", + "version": "0.02", "interface": "interface.html", "description": "Application that allows you to record your heart rate. Can run in background", "tags": "tool,health,widget", "storage": [ - {"name":"heart.app.js","url":"app.js"}, - {"name":"heart.img","url":"app-icon.js","evaluate":true}, - {"name":"heart.wid.js","url":"widget.js"} + { + "name": "heart.app.js", + "url": "app.js" + }, + { + "name": "heart.img", + "url": "app-icon.js", + "evaluate": true + }, + { + "name": "heart.wid.js", + "url": "widget.js" + } ], "data": [ - {"name":"heart.json"}, - {"wildcard":".heart?","storageFile": true} + { + "name": "heart.json" + }, + { + "wildcard": ".heart?", + "storageFile": true + } ] }, - { "id": "slevel", + { + "id": "slevel", "name": "Spirit Level", "icon": "spiritlevel.png", - "version":"0.01", + "version": "0.01", "description": "Show the current angle of the watch, so you can use it to make sure something is absolutely flat", "tags": "tool", "storage": [ - {"name":"slevel.app.js","url":"spiritlevel.js"}, - {"name":"slevel.img","url":"spiritlevel-icon.js","evaluate":true} + { + "name": "slevel.app.js", + "url": "spiritlevel.js" + }, + { + "name": "slevel.img", + "url": "spiritlevel-icon.js", + "evaluate": true + } ] }, - { "id": "files", + { + "id": "files", "name": "App Manager", "icon": "files.png", - "version":"0.03", + "version": "0.03", "description": "Show currently installed apps, free space, and allow their deletion from the watch", "tags": "tool,system,files", "storage": [ - {"name":"files.app.js","url":"files.js"}, - {"name":"files.img","url":"files-icon.js","evaluate":true} + { + "name": "files.app.js", + "url": "files.js" + }, + { + "name": "files.img", + "url": "files-icon.js", + "evaluate": true + } ] }, - { "id": "weather", + { + "id": "weather", "name": "Weather", "icon": "icon.png", - "version":"0.01", + "version": "0.01", "description": "Show Gadgetbridge weather report", "readme": "readme.md", "tags": "widget,outdoors", "storage": [ - {"name":"weather.app.js","url":"app.js"}, - {"name":"weather.wid.js","url":"widget.js"}, - {"name":"weather","url":"lib.js"}, - {"name":"weather.img","url":"icon.js","evaluate":true} - ], - "data": [ - {"name": "weather.json"} - ] - }, - { "id": "widbat", + { + "name": "weather.app.js", + "url": "app.js" + }, + { + "name": "weather.wid.js", + "url": "widget.js" + }, + { + "name": "weather", + "url": "lib.js" + }, + { + "name": "weather.img", + "url": "icon.js", + "evaluate": true + } + ], + "data": [ + { + "name": "weather.json" + } + ] + }, + { + "id": "widbat", "name": "Battery Level Widget", "icon": "widget.png", - "version":"0.05", + "version": "0.05", "description": "Show the current battery level and charging status in the top right of the clock", "tags": "widget,battery", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widbat.wid.js","url":"widget.js"} + { + "name": "widbat.wid.js", + "url": "widget.js" + } ] }, - { "id": "widbatpc", + { + "id": "widbatpc", "name": "Battery Level Widget (with percentage)", "shortName": "Battery Widget", "icon": "widget.png", - "version":"0.11", + "version": "0.11", "description": "Show the current battery level and charging status in the top right of the clock, with charge percentage", "tags": "widget,battery", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widbatpc.wid.js","url":"widget.js"}, - {"name":"widbatpc.settings.js","url":"settings.js"} + { + "name": "widbatpc.wid.js", + "url": "widget.js" + }, + { + "name": "widbatpc.settings.js", + "url": "settings.js" + } ], "data": [ - {"name":"widbatpc.json"} + { + "name": "widbatpc.json" + } ] }, - { "id": "widbt", + { + "id": "widbt", "name": "Bluetooth Widget", "icon": "widget.png", - "version":"0.04", + "version": "0.04", "description": "Show the current Bluetooth connection status in the top right of the clock", "tags": "widget,bluetooth", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widbt.wid.js","url":"widget.js"} + { + "name": "widbt.wid.js", + "url": "widget.js" + } ] }, - { "id": "widram", + { + "id": "widram", "name": "RAM Widget", - "shortName":"RAM Widget", + "shortName": "RAM Widget", "icon": "widget.png", - "version":"0.01", + "version": "0.01", "description": "Display your Bangle's available RAM percentage in a widget", "tags": "widget", "type": "widget", "storage": [ - {"name":"widram.wid.js","url":"widget.js"} + { + "name": "widram.wid.js", + "url": "widget.js" + } ] }, - { "id": "hrm", + { + "id": "hrm", "name": "Heart Rate Monitor", "icon": "heartrate.png", - "version":"0.01", + "version": "0.01", "description": "Measure your current heart rate", "tags": "health", "storage": [ - {"name":"hrm.app.js","url":"heartrate.js"}, - {"name":"hrm.img","url":"heartrate-icon.js","evaluate":true} + { + "name": "hrm.app.js", + "url": "heartrate.js" + }, + { + "name": "hrm.img", + "url": "heartrate-icon.js", + "evaluate": true + } ] }, - { "id": "widhrm", + { + "id": "widhrm", "name": "Simple Heart Rate widget", "icon": "widget.png", - "version":"0.03", + "version": "0.03", "description": "When the screen is on, the widget turns on the heart rate monitor and displays the current heart rate (or last known in grey). For this to work well you'll need at least a 15 second LCD Timeout.", "tags": "health,widget", "type": "widget", "storage": [ - {"name":"widhrm.wid.js","url":"widget.js"} + { + "name": "widhrm.wid.js", + "url": "widget.js" + } ] }, - { "id": "stetho", + { + "id": "stetho", "name": "Stethoscope", "icon": "stetho.png", - "version":"0.01", + "version": "0.01", "description": "Hear your heart rate", "tags": "health", "storage": [ - {"name":"stetho.app.js","url":"stetho.js"}, - {"name":"stetho.img","url":"stetho-icon.js","evaluate":true} + { + "name": "stetho.app.js", + "url": "stetho.js" + }, + { + "name": "stetho.img", + "url": "stetho-icon.js", + "evaluate": true + } ] }, - { "id": "swatch", + { + "id": "swatch", "name": "Stopwatch", "icon": "stopwatch.png", - "version":"0.07", + "version": "0.07", "interface": "interface.html", "description": "Simple stopwatch with Lap Time logging to a JSON file", "tags": "health", - "allow_emulator":true, + "allow_emulator": true, "readme": "README.md", "storage": [ - {"name":"swatch.app.js","url":"stopwatch.js"}, - {"name":"swatch.img","url":"stopwatch-icon.js","evaluate":true} + { + "name": "swatch.app.js", + "url": "stopwatch.js" + }, + { + "name": "swatch.img", + "url": "stopwatch-icon.js", + "evaluate": true + } ] }, - { "id": "hidmsic", + { + "id": "hidmsic", "name": "Bluetooth Music Controls", "shortName": "Music Control", "icon": "hid-music.png", - "version":"0.02", + "version": "0.02", "description": "Enable HID in settings, pair with your phone, then use this app to control music from your watch!", "tags": "bluetooth", "storage": [ - {"name":"hidmsic.app.js","url":"hid-music.js"}, - {"name":"hidmsic.img","url":"hid-music-icon.js","evaluate":true} + { + "name": "hidmsic.app.js", + "url": "hid-music.js" + }, + { + "name": "hidmsic.img", + "url": "hid-music-icon.js", + "evaluate": true + } ] }, - { "id": "hidkbd", + { + "id": "hidkbd", "name": "Bluetooth Keyboard", "shortName": "Bluetooth Kbd", "icon": "hid-keyboard.png", - "version":"0.02", + "version": "0.02", "description": "Enable HID in settings, pair with your phone/PC, then use this app to control other apps", "tags": "bluetooth", "storage": [ - {"name":"hidkbd.app.js","url":"hid-keyboard.js"}, - {"name":"hidkbd.img","url":"hid-keyboard-icon.js","evaluate":true} + { + "name": "hidkbd.app.js", + "url": "hid-keyboard.js" + }, + { + "name": "hidkbd.img", + "url": "hid-keyboard-icon.js", + "evaluate": true + } ] }, - { "id": "hidbkbd", + { + "id": "hidbkbd", "name": "Binary Bluetooth Keyboard", "shortName": "Binary BT Kbd", "icon": "hid-binary-keyboard.png", - "version":"0.02", + "version": "0.02", "description": "Enable HID in settings, pair with your phone/PC, then type messages using the onscreen keyboard by tapping repeatedly on the key you want", "tags": "bluetooth", "storage": [ - {"name":"hidbkbd.app.js","url":"hid-binary-keyboard.js"}, - {"name":"hidbkbd.img","url":"hid-binary-keyboard-icon.js","evaluate":true} + { + "name": "hidbkbd.app.js", + "url": "hid-binary-keyboard.js" + }, + { + "name": "hidbkbd.img", + "url": "hid-binary-keyboard-icon.js", + "evaluate": true + } ] }, - { "id": "animals", + { + "id": "animals", "name": "Animals Game", "icon": "animals.png", - "version":"0.01", + "version": "0.01", "description": "Simple toddler's game - displays a different number of animals each time the screen is pressed", "tags": "game", "storage": [ - {"name":"animals.app.js","url":"animals.js"}, - {"name":"animals.img","url":"animals-icon.js","evaluate":true}, - {"name":"animals-snake.img","url":"animals-snake.js","evaluate":true}, - {"name":"animals-duck.img","url":"animals-duck.js","evaluate":true}, - {"name":"animals-swan.img","url":"animals-swan.js","evaluate":true}, - {"name":"animals-fox.img","url":"animals-fox.js","evaluate":true}, - {"name":"animals-camel.img","url":"animals-camel.js","evaluate":true}, - {"name":"animals-pig.img","url":"animals-pig.js","evaluate":true}, - {"name":"animals-sheep.img","url":"animals-sheep.js","evaluate":true}, - {"name":"animals-mouse.img","url":"animals-mouse.js","evaluate":true} + { + "name": "animals.app.js", + "url": "animals.js" + }, + { + "name": "animals.img", + "url": "animals-icon.js", + "evaluate": true + }, + { + "name": "animals-snake.img", + "url": "animals-snake.js", + "evaluate": true + }, + { + "name": "animals-duck.img", + "url": "animals-duck.js", + "evaluate": true + }, + { + "name": "animals-swan.img", + "url": "animals-swan.js", + "evaluate": true + }, + { + "name": "animals-fox.img", + "url": "animals-fox.js", + "evaluate": true + }, + { + "name": "animals-camel.img", + "url": "animals-camel.js", + "evaluate": true + }, + { + "name": "animals-pig.img", + "url": "animals-pig.js", + "evaluate": true + }, + { + "name": "animals-sheep.img", + "url": "animals-sheep.js", + "evaluate": true + }, + { + "name": "animals-mouse.img", + "url": "animals-mouse.js", + "evaluate": true + } ] }, - { "id": "qrcode", + { + "id": "qrcode", "name": "Custom QR Code", "icon": "qrcode.png", - "version":"0.01", + "version": "0.01", "description": "Use this to upload a customised QR code to Bangle.js", "tags": "", "custom": "qrcode.html", "storage": [ - {"name":"qrcode.app.js"}, - {"name":"qrcode.img"} + { + "name": "qrcode.app.js" + }, + { + "name": "qrcode.img" + } ] }, - { "id": "beer", + { + "id": "beer", "name": "Beer Compass", "icon": "beercompass.png", - "version":"0.01", + "version": "0.01", "description": "Uploads all the pubs in an area onto your watch, so it can always point you at the nearest one", "tags": "", "custom": "beercompass.html", "storage": [ - {"name":"beer.app.js"}, - {"name":"beer.img"} + { + "name": "beer.app.js" + }, + { + "name": "beer.img" + } ] }, - { "id": "route", + { + "id": "route", "name": "Route Viewer", "icon": "route.png", - "version":"0.01", + "version": "0.01", "description": "Upload a KML file of a route, and have your watch display a map with how far around it you are", "tags": "", "custom": "route.html", "storage": [ - {"name":"route.app.js"}, - {"name":"route.img"} + { + "name": "route.app.js" + }, + { + "name": "route.img" + } ] }, { "id": "ncstart", "name": "NCEU Startup", "icon": "start.png", - "version":"0.05", + "version": "0.05", "description": "NodeConfEU 2019 'First Start' Sequence", "tags": "start,welcome", "storage": [ - {"name":"ncstart.app.js","url":"start.js"}, - {"name":"ncstart.boot.js","url":"boot.js"}, - {"name":"ncstart.settings.js","url":"settings.js"}, - {"name":"ncstart.img","url":"start-icon.js","evaluate":true}, - {"name":"nc-bangle.img","url":"start-bangle.js","evaluate":true}, - {"name":"nc-nceu.img","url":"start-nceu.js","evaluate":true}, - {"name":"nc-nfr.img","url":"start-nfr.js","evaluate":true}, - {"name":"nc-nodew.img","url":"start-nodew.js","evaluate":true}, - {"name":"nc-tf.img","url":"start-tf.js","evaluate":true} + { + "name": "ncstart.app.js", + "url": "start.js" + }, + { + "name": "ncstart.boot.js", + "url": "boot.js" + }, + { + "name": "ncstart.settings.js", + "url": "settings.js" + }, + { + "name": "ncstart.img", + "url": "start-icon.js", + "evaluate": true + }, + { + "name": "nc-bangle.img", + "url": "start-bangle.js", + "evaluate": true + }, + { + "name": "nc-nceu.img", + "url": "start-nceu.js", + "evaluate": true + }, + { + "name": "nc-nfr.img", + "url": "start-nfr.js", + "evaluate": true + }, + { + "name": "nc-nodew.img", + "url": "start-nodew.js", + "evaluate": true + }, + { + "name": "nc-tf.img", + "url": "start-tf.js", + "evaluate": true + } ], "data": [ - {"name":"ncstart.json"} + { + "name": "ncstart.json" + } ] }, - { "id": "ncfrun", + { + "id": "ncfrun", "name": "NCEU 5K Fun Run", "icon": "nceu-funrun.png", - "version":"0.01", + "version": "0.01", "description": "Display a map of the NodeConf EU 2019 5K Fun Run route and your location on it", "tags": "health", "storage": [ - {"name":"ncfrun.app.js","url":"nceu-funrun.js"}, - {"name":"ncfrun.img","url":"nceu-funrun-icon.js","evaluate":true} + { + "name": "ncfrun.app.js", + "url": "nceu-funrun.js" + }, + { + "name": "ncfrun.img", + "url": "nceu-funrun-icon.js", + "evaluate": true + } ] }, - { "id": "widnceu", + { + "id": "widnceu", "name": "NCEU Logo Widget", "icon": "widget.png", - "version":"0.02", + "version": "0.02", "description": "Show the NodeConf EU logo in the top left", "tags": "widget", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widnceu.wid.js","url":"widget.js"} + { + "name": "widnceu.wid.js", + "url": "widget.js" + } ] }, - { "id": "sclock", + { + "id": "sclock", "name": "Simple Clock", "icon": "clock-simple.png", - "version":"0.04", + "version": "0.04", "description": "A Simple Digital Clock", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"sclock.app.js","url":"clock-simple.js"}, - {"name":"sclock.img","url":"clock-simple-icon.js","evaluate":true} + { + "name": "sclock.app.js", + "url": "clock-simple.js" + }, + { + "name": "sclock.img", + "url": "clock-simple-icon.js", + "evaluate": true + } ] }, - { "id": "dclock", + { + "id": "dclock", "name": "Dev Clock", "icon": "clock-dev.png", - "version":"0.09", + "version": "0.09", "description": "A Digital Clock including timestamp (tst), beats(@), days in current month (dm) and days since new moon (l)", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"dclock.app.js","url":"clock-dev.js"}, - {"name":"dclock.img","url":"clock-dev-icon.js","evaluate":true} + { + "name": "dclock.app.js", + "url": "clock-dev.js" + }, + { + "name": "dclock.img", + "url": "clock-dev-icon.js", + "evaluate": true + } ] }, - { "id": "gesture", + { + "id": "gesture", "name": "Gesture Test", "icon": "gesture.png", - "version":"0.01", + "version": "0.01", "description": "BETA! Uploads a basic Tensorflow Gesture model, and then outputs each gesture as a message", "tags": "gesture,ai", - "type":"app", + "type": "app", "storage": [ - {"name":"gesture.app.js","url":"gesture.js"}, - {"name":".tfnames","url":"gesture-tfnames.js","evaluate":true}, - {"name":".tfmodel","url":"gesture-tfmodel.js","evaluate":true}, - {"name":"gesture.img","url":"gesture-icon.js","evaluate":true} + { + "name": "gesture.app.js", + "url": "gesture.js" + }, + { + "name": ".tfnames", + "url": "gesture-tfnames.js", + "evaluate": true + }, + { + "name": ".tfmodel", + "url": "gesture-tfmodel.js", + "evaluate": true + }, + { + "name": "gesture.img", + "url": "gesture-icon.js", + "evaluate": true + } ] }, - { "id": "pparrot", + { + "id": "pparrot", "name": "Party Parrot", "icon": "party-parrot.png", - "version":"0.01", + "version": "0.01", "description": "Party with a parrot on your wrist", "tags": "party,parrot,lol", - "type":"app", - "allow_emulator":true, + "type": "app", + "allow_emulator": true, "storage": [ - {"name":"pparrot.app.js","url":"party-parrot.js"}, - {"name":"pparrot.img","url":"party-parrot-icon.js","evaluate":true} + { + "name": "pparrot.app.js", + "url": "party-parrot.js" + }, + { + "name": "pparrot.img", + "url": "party-parrot-icon.js", + "evaluate": true + } ] }, - { "id": "hrings", + { + "id": "hrings", "name": "Hypno Rings", "icon": "hypno-rings.png", - "version":"0.01", + "version": "0.01", "description": "Experiment with trippy rings, press buttons for change", "tags": "rings,hypnosis,psychadelic", - "type":"app", - "allow_emulator":true, + "type": "app", + "allow_emulator": true, "storage": [ - {"name":"hrings.app.js","url":"hypno-rings.js"}, - {"name":"hrings.img","url":"hypno-rings-icon.js","evaluate":true} + { + "name": "hrings.app.js", + "url": "hypno-rings.js" + }, + { + "name": "hrings.img", + "url": "hypno-rings-icon.js", + "evaluate": true + } ] }, - { "id": "morse", + { + "id": "morse", "name": "Morse Code", "icon": "morse-code.png", - "version":"0.01", + "version": "0.01", "description": "Learn morse code by hearing/seeing/feeling the code. Tap to toggle buzz!", "tags": "morse,sound,visual,input", - "type":"app", + "type": "app", "storage": [ - {"name":"morse.app.js","url":"morse-code.js"}, - {"name":"morse.img","url":"morse-code-icon.js","evaluate":true} + { + "name": "morse.app.js", + "url": "morse-code.js" + }, + { + "name": "morse.img", + "url": "morse-code-icon.js", + "evaluate": true + } ] }, { "id": "blescan", "name": "BLE Scanner", "icon": "blescan.png", - "version":"0.01", + "version": "0.01", "description": "Scan for advertising BLE devices", - "tags" : "bluetooth", - "storage" : [ - {"name":"blescan.app.js","url":"blescan.js"}, - {"name":"blescan.img","url":"blescan-icon.js", "evaluate":true} - ] - }, - { "id": "mmonday", - "name": "Manic Monday Tone", - "icon": "manic-monday-icon.png", - "version":"0.02", - "description": "The Bangles make a comeback", - "tags": "sound", - "storage": [ - {"name":"mmonday.app.js","url":"manic-monday.js"}, - {"name":"mmonday.img","url":"manic-monday-icon.js","evaluate":true} - ] - }, - { "id": "jbells", + "tags": "bluetooth", + "storage": [ + { + "name": "blescan.app.js", + "url": "blescan.js" + }, + { + "name": "blescan.img", + "url": "blescan-icon.js", + "evaluate": true + } + ] + }, + { + "id": "mmonday", + "name": "Manic Monday Tone", + "icon": "manic-monday-icon.png", + "version": "0.02", + "description": "The Bangles make a comeback", + "tags": "sound", + "storage": [ + { + "name": "mmonday.app.js", + "url": "manic-monday.js" + }, + { + "name": "mmonday.img", + "url": "manic-monday-icon.js", + "evaluate": true + } + ] + }, + { + "id": "jbells", "name": "Jingle Bells", "icon": "jbells.png", - "version":"0.01", + "version": "0.01", "description": "Play Jingle Bells", "tags": "sound", - "type":"app", + "type": "app", "storage": [ - {"name":"jbells.app.js","url":"jbells.js"}, - {"name":"jbells.img","url":"jbells-icon.js","evaluate":true} + { + "name": "jbells.app.js", + "url": "jbells.js" + }, + { + "name": "jbells.img", + "url": "jbells-icon.js", + "evaluate": true + } ] }, - { "id": "scolor", + { + "id": "scolor", "name": "Show Color", "icon": "show-color.png", - "version":"0.01", + "version": "0.01", "description": "Display all available Colors and Names", "tags": "tool", - "type":"app", - "allow_emulator":true, + "type": "app", + "allow_emulator": true, "storage": [ - {"name":"scolor.app.js","url":"show-color.js"}, - {"name":"scolor.img","url":"show-color-icon.js","evaluate":true} + { + "name": "scolor.app.js", + "url": "show-color.js" + }, + { + "name": "scolor.img", + "url": "show-color-icon.js", + "evaluate": true + } ] }, - { "id": "miclock", + { + "id": "miclock", "name": "Mixed Clock", "icon": "clock-mixed.png", - "version":"0.04", + "version": "0.04", "description": "A mix of analog and digital Clock", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"miclock.app.js","url":"clock-mixed.js"}, - {"name":"miclock.img","url":"clock-mixed-icon.js","evaluate":true} + { + "name": "miclock.app.js", + "url": "clock-mixed.js" + }, + { + "name": "miclock.img", + "url": "clock-mixed-icon.js", + "evaluate": true + } ] }, - { "id": "bclock", + { + "id": "bclock", "name": "Binary Clock", "icon": "clock-binary.png", - "version":"0.02", + "version": "0.02", "description": "A simple binary clock watch face", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"bclock.app.js","url":"clock-binary.js"}, - {"name":"bclock.img","url":"clock-binary-icon.js","evaluate":true} + { + "name": "bclock.app.js", + "url": "clock-binary.js" + }, + { + "name": "bclock.img", + "url": "clock-binary-icon.js", + "evaluate": true + } ] }, - { "id": "clotris", + { + "id": "clotris", "name": "Clock-Tris", "icon": "clock-tris.png", - "version":"0.01", + "version": "0.01", "description": "A fully functional clone of a classic game of falling blocks", "tags": "game", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"clotris.app.js","url":"clock-tris.js"}, - {"name":"clotris.img","url":"clock-tris-icon.js","evaluate":true}, - {"name":".trishig","url":"clock-tris-high"} + { + "name": "clotris.app.js", + "url": "clock-tris.js" + }, + { + "name": "clotris.img", + "url": "clock-tris-icon.js", + "evaluate": true + }, + { + "name": ".trishig", + "url": "clock-tris-high" + } ] }, - { "id": "flappy", + { + "id": "flappy", "name": "Flappy Bird", "icon": "app.png", - "version":"0.03", + "version": "0.03", "description": "A Flappy Bird game clone", "tags": "game", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"flappy.app.js","url":"app.js"}, - {"name":"flappy.img","url":"app-icon.js","evaluate":true} + { + "name": "flappy.app.js", + "url": "app.js" + }, + { + "name": "flappy.img", + "url": "app-icon.js", + "evaluate": true + } ] }, { "id": "gpsinfo", "name": "GPS Info", "icon": "gps-info.png", - "version":"0.03", + "version": "0.03", "description": "An application that displays information about altitude, lat/lon, satellites and time", "tags": "gps", "type": "app", "storage": [ - {"name":"gpsinfo.app.js","url": "gps-info.js"}, - {"name":"gpsinfo.img","url": "gps-info-icon.js","evaluate": true} + { + "name": "gpsinfo.app.js", + "url": "gps-info.js" + }, + { + "name": "gpsinfo.img", + "url": "gps-info-icon.js", + "evaluate": true + } ] }, { "id": "pomodo", - "name":"Pomodoro", - "icon":"pomodoro.png", - "version":"0.01", + "name": "Pomodoro", + "icon": "pomodoro.png", + "version": "0.01", "description": "A simple pomodoro timer.", "tags": "pomodoro,cooking,tools", "type": "app", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"pomodo.app.js","url": "pomodoro.js"}, - {"name":"pomodo.img","url": "pomodoro-icon.js","evaluate": true} + { + "name": "pomodo.app.js", + "url": "pomodoro.js" + }, + { + "name": "pomodo.img", + "url": "pomodoro-icon.js", + "evaluate": true + } ] }, - { "id": "blobclk", + { + "id": "blobclk", "name": "Large Digit Blob Clock", - "shortName" : "Blob Clock", + "shortName": "Blob Clock", "icon": "clock-blob.png", - "version":"0.03", + "version": "0.03", "description": "A clock with big digits", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"blobclk.app.js","url":"clock-blob.js"}, - {"name":"blobclk.img","url":"clock-blob-icon.js","evaluate":true} + { + "name": "blobclk.app.js", + "url": "clock-blob.js" + }, + { + "name": "blobclk.img", + "url": "clock-blob-icon.js", + "evaluate": true + } ] }, - { "id": "boldclk", + { + "id": "boldclk", "name": "Bold Clock", "icon": "bold_clock.png", - "version":"0.02", + "version": "0.02", "description": "Simple, readable and practical clock", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"boldclk.app.js","url":"bold_clock.js"}, - {"name":"boldclk.img","url":"bold_clock-icon.js","evaluate":true} + { + "name": "boldclk.app.js", + "url": "bold_clock.js" + }, + { + "name": "boldclk.img", + "url": "bold_clock-icon.js", + "evaluate": true + } ] }, - { "id": "widclk", + { + "id": "widclk", "name": "Digital clock widget", "icon": "widget.png", - "version":"0.04", + "version": "0.04", "description": "A simple digital clock widget", "tags": "widget,clock", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widclk.wid.js","url":"widget.js"} + { + "name": "widclk.wid.js", + "url": "widget.js" + } ] }, - { "id": "widpedom", + { + "id": "widpedom", "name": "Pedometer widget", "icon": "widget.png", - "version":"0.10", + "version": "0.10", "description": "Daily pedometer widget", "tags": "widget", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widpedom.wid.js","url":"widget.js"}, - {"name":"widpedom.settings.js","url":"settings.js"} + { + "name": "widpedom.wid.js", + "url": "widget.js" + }, + { + "name": "widpedom.settings.js", + "url": "settings.js" + } ] }, - { "id": "berlinc", + { + "id": "berlinc", "name": "Berlin Clock", "icon": "berlin-clock.png", - "version":"0.02", + "version": "0.02", "description": "Berlin Clock (see https://en.wikipedia.org/wiki/Mengenlehreuhr)", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"berlinc.app.js","url":"berlin-clock.js"}, - {"name":"berlinc.img","url":"berlin-clock-icon.js","evaluate":true} + { + "name": "berlinc.app.js", + "url": "berlin-clock.js" + }, + { + "name": "berlinc.img", + "url": "berlin-clock-icon.js", + "evaluate": true + } ] }, - { "id": "ctrclk", + { + "id": "ctrclk", "name": "Centerclock", "icon": "app.png", - "version":"0.02", + "version": "0.02", "description": "Watch-centered digital 24h clock with date in dd.mm.yyyy format.", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"ctrclk.app.js","url":"app.js"}, - {"name":"ctrclk.img","url":"app-icon.js","evaluate":true} + { + "name": "ctrclk.app.js", + "url": "app.js" + }, + { + "name": "ctrclk.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "demoapp", + { + "id": "demoapp", "name": "Demo Loop", "icon": "app.png", - "version":"0.01", + "version": "0.01", "description": "Simple demo app - displays Bangle.js, JS logo, graphics, and Bangle.js information", "tags": "", - "type":"app", - "allow_emulator":true, + "type": "app", + "allow_emulator": true, "storage": [ - {"name":"demoapp.app.js","url":"app.js"}, - {"name":"demoapp.img","url":"app-icon.js","evaluate":true} + { + "name": "demoapp.app.js", + "url": "app.js" + }, + { + "name": "demoapp.img", + "url": "app-icon.js", + "evaluate": true + } ], - "sortorder" : -9 + "sortorder": -9 }, - { "id": "flagrse", + { + "id": "flagrse", "name": "Espruino Flag Raiser", "icon": "app.png", - "version":"0.01", + "version": "0.01", "description": "App to send a command to another Espruino to cause it to raise a flag", "tags": "", "storage": [ - {"name":"flagrse.app.js","url":"app.js"}, - {"name":"flagrse.img","url":"app-icon.js","evaluate":true} + { + "name": "flagrse.app.js", + "url": "app.js" + }, + { + "name": "flagrse.img", + "url": "app-icon.js", + "evaluate": true + } ] }, { @@ -924,202 +1572,344 @@ "version": "0.03", "description": "Pipboy themed clock", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"pipboy.app.js","url":"app.js"}, - {"name":"pipboy.img","url":"app-icon.js","evaluate":true} + { + "name": "pipboy.app.js", + "url": "app.js" + }, + { + "name": "pipboy.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "torch", + { + "id": "torch", "name": "Torch", - "shortName":"Torch", + "shortName": "Torch", "icon": "app.png", - "version":"0.02", + "version": "0.02", "description": "Turns screen white to help you see in the dark. Select from the launcher or press BTN1,BTN3,BTN1,BTN3 quickly to start when in any app that shows widgets", "tags": "tool,torch", "storage": [ - {"name":"torch.app.js","url":"app.js"}, - {"name":"torch.wid.js","url":"widget.js"}, - {"name":"torch.img","url":"app-icon.js","evaluate":true} + { + "name": "torch.app.js", + "url": "app.js" + }, + { + "name": "torch.wid.js", + "url": "widget.js" + }, + { + "name": "torch.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "wohrm", + { + "id": "wohrm", "name": "Workout HRM", "icon": "app.png", - "version":"0.07", + "version": "0.07", "readme": "README.md", "description": "Workout heart rate monitor notifies you with a buzz if your heart rate goes above or below the set limits.", "tags": "hrm,workout", "type": "app", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"wohrm.app.js","url":"app.js"}, - {"name":"wohrm.img","url":"app-icon.js","evaluate":true} + { + "name": "wohrm.app.js", + "url": "app.js" + }, + { + "name": "wohrm.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "widid", + { + "id": "widid", "name": "Bluetooth ID Widget", "icon": "widget.png", - "version":"0.02", + "version": "0.02", "description": "Display the last two tuple of your Bangle.js MAC address in the widget section. This is useful for figuring out which Bangle.js to connect to if you have more than one Bangle.js!", "tags": "widget,address,mac", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widid.wid.js","url":"widget.js"} + { + "name": "widid.wid.js", + "url": "widget.js" + } ] }, { "id": "grocery", "name": "Grocery", "icon": "grocery.png", - "version":"0.01", + "version": "0.01", "description": "Simple grocery list - Display a list of product and track if you already put them in your cart.", "tags": "tool,outdoors", "type": "app", - "custom":"grocery.html", + "custom": "grocery.html", "storage": [ - {"name":"grocery"}, - {"name":"grocery.app.js"}, - {"name":"grocery.img","url":"grocery-icon.js","evaluate":true} + { + "name": "grocery" + }, + { + "name": "grocery.app.js" + }, + { + "name": "grocery.img", + "url": "grocery-icon.js", + "evaluate": true + } ] }, - { "id": "marioclock", + { + "id": "marioclock", "name": "Mario Clock", "icon": "marioclock.png", - "version":"0.12", + "version": "0.12", "description": "Animated retro Mario clock, with Gameboy style 8-bit grey-scale graphics.", "tags": "clock,mario,retro", "type": "clock", - "allow_emulator":true, + "allow_emulator": true, "readme": "README.md", "storage": [ - {"name":"marioclock.app.js","url":"marioclock-app.js"}, - {"name":"marioclock.img","url":"marioclock-icon.js","evaluate":true} + { + "name": "marioclock.app.js", + "url": "marioclock-app.js" + }, + { + "name": "marioclock.img", + "url": "marioclock-icon.js", + "evaluate": true + } ] }, - { "id": "cliock", + { + "id": "cliock", "name": "Commandline-Clock", - "shortName":"CLI-Clock", + "shortName": "CLI-Clock", "icon": "app.png", - "version":"0.07", + "version": "0.07", "description": "Simple CLI-Styled Clock", "tags": "clock,cli,command,bash,shell", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"cliock.app.js","url":"app.js"}, - {"name":"cliock.img","url":"app-icon.js","evaluate":true} + { + "name": "cliock.app.js", + "url": "app.js" + }, + { + "name": "cliock.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "widver", + { + "id": "widver", "name": "Firmware Version Widget", "icon": "widget.png", - "version":"0.01", + "version": "0.01", "description": "Display the version of the installed firmware in the top widget section.", "tags": "widget,tool,system", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widver.wid.js","url":"widget.js"} + { + "name": "widver.wid.js", + "url": "widget.js" + } ] }, - { "id": "barclock", + { + "id": "barclock", "name": "Bar Clock", "icon": "clock-bar.png", - "version":"0.05", + "version": "0.05", "description": "A simple digital clock showing seconds as a bar", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"barclock.app.js","url":"clock-bar.js"}, - {"name":"barclock.img","url":"clock-bar-icon.js","evaluate":true} + { + "name": "barclock.app.js", + "url": "clock-bar.js" + }, + { + "name": "barclock.img", + "url": "clock-bar-icon.js", + "evaluate": true + } ] }, - { "id": "dotclock", + { + "id": "dotclock", "name": "Dot Clock", "icon": "clock-dot.png", - "version":"0.01", + "version": "0.01", "description": "A Minimal Dot Analog Clock", "tags": "clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"dotclock.app.js","url":"clock-dot.js"}, - {"name":"dotclock.img","url":"clock-dot-icon.js","evaluate":true} + { + "name": "dotclock.app.js", + "url": "clock-dot.js" + }, + { + "name": "dotclock.img", + "url": "clock-dot-icon.js", + "evaluate": true + } ] }, - { "id": "widtbat", + { + "id": "widtbat", "name": "Tiny Battery Widget", "icon": "widget.png", - "version":"0.01", + "version": "0.01", "description": "Tiny blueish battery widget, vibs and changes level color when charging", "tags": "widget,tool,system", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widtbat.wid.js","url":"widget.js"} + { + "name": "widtbat.wid.js", + "url": "widget.js" + } ] }, - { "id": "chrono", + { + "id": "chrono", "name": "Chrono", - "shortName":"Chrono", + "shortName": "Chrono", "icon": "chrono.png", - "version":"0.01", + "version": "0.01", "description": "Single click BTN1 to add 5 minutes. Single click BTN2 to add 30 seconds. Single click BTN3 to add 5 seconds. Tap to pause or play to timer. Double click BTN1 to reset. When timer finishes the watch vibrates.", "tags": "Tools", "storage": [ - {"name":"chrono.app.js","url":"chrono.js"}, - {"name":"chrono.img","url":"chrono-icon.js","evaluate":true} + { + "name": "chrono.app.js", + "url": "chrono.js" + }, + { + "name": "chrono.img", + "url": "chrono-icon.js", + "evaluate": true + } + ] + }, + { + "id": "astrocalc", + "name": "Astrocalc", + "icon": "astrocalc.png", + "version": "0.02", + "description": "Calculates interesting information on the sun and moon cycles for the current day based on your location.", + "tags": "app,sun,moon,cycles,tool,outdoors", + "allow_emulator": true, + "storage": [ + { + "name": "astrocalc.app.js", + "url": "astrocalc-app.js" + }, + { + "name": "suncalc.js", + "url": "suncalc.js" + }, + { + "name": "astrocalc.img", + "url": "astrocalc-icon.js", + "evaluate": true + }, + { + "name": "first-quarter.img", + "url": "first-quarter-icon.js", + "evaluate": true + }, + { + "name": "last-quarter.img", + "url": "last-quarter-icon.js", + "evaluate": true + }, + { + "name": "waning-crescent.img", + "url": "waning-crescent-icon.js", + "evaluate": true + }, + { + "name": "waning-gibbous.img", + "url": "waning-gibbous-icon.js", + "evaluate": true + }, + { + "name": "full.img", + "url": "full-icon.js", + "evaluate": true + }, + { + "name": "new.img", + "url": "new-icon.js", + "evaluate": true + }, + { + "name": "waxing-gibbous.img", + "url": "waxing-gibbous-icon.js", + "evaluate": true + }, + { + "name": "waxing-crescent.img", + "url": "waxing-crescent-icon.js", + "evaluate": true + } ] }, - { "id": "astrocalc", - "name": "Astrocalc", - "icon": "astrocalc.png", - "version":"0.02", - "description": "Calculates interesting information on the sun and moon cycles for the current day based on your location.", - "tags": "app,sun,moon,cycles,tool,outdoors", - "allow_emulator":true, - "storage": [ - {"name":"astrocalc.app.js","url":"astrocalc-app.js"}, - {"name":"suncalc.js","url":"suncalc.js"}, - {"name":"astrocalc.img","url":"astrocalc-icon.js","evaluate":true}, - {"name":"first-quarter.img","url":"first-quarter-icon.js","evaluate":true}, - {"name":"last-quarter.img","url":"last-quarter-icon.js","evaluate":true}, - {"name":"waning-crescent.img","url":"waning-crescent-icon.js","evaluate":true}, - {"name":"waning-gibbous.img","url":"waning-gibbous-icon.js","evaluate":true}, - {"name":"full.img","url":"full-icon.js","evaluate":true}, - {"name":"new.img","url":"new-icon.js","evaluate":true}, - {"name":"waxing-gibbous.img","url":"waxing-gibbous-icon.js","evaluate":true}, - {"name":"waxing-crescent.img","url":"waxing-crescent-icon.js","evaluate":true} - ] - }, - { "id": "widhwt", + { + "id": "widhwt", "name": "Hand Wash Timer", "icon": "widget.png", - "version":"0.01", + "version": "0.01", "description": "Swipe your wrist over the watch face to start your personal Bangle.js hand wash timer for 35 sec. Start washing after the short buzz and stop after the long buzz.", "tags": "widget,tool", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widhwt.wid.js","url":"widget.js"} + { + "name": "widhwt.wid.js", + "url": "widget.js" + } ] }, - { "id": "toucher", + { + "id": "toucher", "name": "Touch Launcher", - "shortName":"Toucher", + "shortName": "Toucher", "icon": "app.png", - "version":"0.06", + "version": "0.06", "description": "Touch enable left to right launcher.", "tags": "tool,system,launcher", - "type":"launch", + "type": "launch", "data": [ - {"name":"toucher.json"} + { + "name": "toucher.json" + } ], "storage": [ - {"name":"toucher.app.js","url":"app.js"}, - {"name":"toucher.settings.js","url":"settings.js"} + { + "name": "toucher.app.js", + "url": "app.js" + }, + { + "name": "toucher.settings.js", + "url": "settings.js" + } ], - "sortorder" : -10 + "sortorder": -10 }, { "id": "balltastic", @@ -1130,9 +1920,16 @@ "tags": "game,fun", "type": "app", "storage": [ - {"name":"balltastic.app.js","url":"app.js"}, - {"name":"balltastic.img","url":"app-icon.js","evaluate":true} - ] + { + "name": "balltastic.app.js", + "url": "app.js" + }, + { + "name": "balltastic.img", + "url": "app-icon.js", + "evaluate": true + } + ] }, { "id": "rpgdice", @@ -1144,22 +1941,34 @@ "type": "app", "allow_emulator": true, "storage": [ - {"name":"rpgdice.app.js","url": "app.js"}, - {"name":"rpgdice.img","url": "app-icon.js","evaluate":true} + { + "name": "rpgdice.app.js", + "url": "app.js" + }, + { + "name": "rpgdice.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "widmp", + { + "id": "widmp", "name": "Moon Phase Widget", "icon": "widget.png", - "version":"0.01", + "version": "0.01", "description": "Display the current moon phase in blueish for the northern hemisphere in eight phases", "tags": "widget,tools", - "type":"widget", + "type": "widget", "storage": [ - {"name":"widmp.wid.js","url":"widget.js"} + { + "name": "widmp.wid.js", + "url": "widget.js" + } ] }, - { "id": "minionclk", + { + "id": "minionclk", "name": "Minion clock", "icon": "minionclk.png", "version": "0.02", @@ -1168,171 +1977,286 @@ "type": "clock", "allow_emulator": true, "storage": [ - {"name":"minionclk.app.js","url":"app.js"}, - {"name":"minionclk.img","url":"app-icon.js","evaluate":true} + { + "name": "minionclk.app.js", + "url": "app.js" + }, + { + "name": "minionclk.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "openstmap", + { + "id": "openstmap", "name": "OpenStreetMap", - "shortName":"OpenStMap", + "shortName": "OpenStMap", "icon": "app.png", - "version":"0.02", + "version": "0.02", "description": "[BETA] Loads map tiles from OpenStreetMap onto your Bangle.js and displays a map of where you are", "tags": "outdoors,gps", "custom": "custom.html", "storage": [ - {"name":"openstmap.app.js","url":"app.js"}, - {"name":"openstmap.img","url":"app-icon.js","evaluate":true} + { + "name": "openstmap.app.js", + "url": "app.js" + }, + { + "name": "openstmap.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "activepedom", + { + "id": "activepedom", "name": "Active Pedometer", - "shortName":"Active Pedometer", + "shortName": "Active Pedometer", "icon": "app.png", - "version":"0.04", + "version": "0.04", "description": "Pedometer that filters out arm movement and displays a step goal progress. Steps are saved to a daily file and can be viewed as graph.", "tags": "outdoors,widget", - "readme": "README.md", + "readme": "README.md", "storage": [ - {"name":"activepedom.wid.js","url":"widget.js"}, - {"name":"activepedom.settings.js","url":"settings.js"}, - {"name":"activepedom.img","url":"app-icon.js","evaluate":true}, - {"name":"activepedom.app.js","url":"app.js"} + { + "name": "activepedom.wid.js", + "url": "widget.js" + }, + { + "name": "activepedom.settings.js", + "url": "settings.js" + }, + { + "name": "activepedom.img", + "url": "app-icon.js", + "evaluate": true + }, + { + "name": "activepedom.app.js", + "url": "app.js" + } ] }, - { "id": "chronowid", + { + "id": "chronowid", "name": "Chrono Widget", - "shortName":"Chrono Widget", + "shortName": "Chrono Widget", "icon": "app.png", - "version":"0.03", + "version": "0.03", "description": "Chronometer (timer) which runs as widget.", "tags": "tools,widget", - "readme": "README.md", + "readme": "README.md", "storage": [ - {"name":"chronowid.wid.js","url":"widget.js"}, - {"name":"chronowid.app.js","url":"app.js"}, - {"name":"chronowid.img","url":"app-icon.js","evaluate":true} + { + "name": "chronowid.wid.js", + "url": "widget.js" + }, + { + "name": "chronowid.app.js", + "url": "app.js" + }, + { + "name": "chronowid.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "tabata", + { + "id": "tabata", "name": "Tabata", "shortName": "Tabata - Control High-Intensity Interval Training", "icon": "tabata.png", - "version":"0.01", + "version": "0.01", "description": "Control high-intensity interval training (according to tabata: https://en.wikipedia.org/wiki/Tabata_method).", "tags": "workout,health", "storage": [ - {"name":"tabata.app.js","url":"tabata.js"}, - {"name":"tabata.img","url":"tabata-icon.js","evaluate":true} + { + "name": "tabata.app.js", + "url": "tabata.js" + }, + { + "name": "tabata.img", + "url": "tabata-icon.js", + "evaluate": true + } ] }, - { "id": "custom", + { + "id": "custom", "name": "Custom Boot Code ", "icon": "custom.png", - "version":"0.01", + "version": "0.01", "description": "Add code you want to run at boot time", "tags": "tool,system", "type": "bootloader", - "custom":"custom.html", + "custom": "custom.html", "storage": [ - {"name":"custom"} + { + "name": "custom" + } ] }, - { "id": "devstopwatch", - "name": "Dev Stopwatch", - "shortName":"Dev Stopwatch", - "icon": "app.png", - "version":"0.01", - "description": "Stopwatch with 5 laps supported (cyclically replaced)", - "tags": "stopwatch, chrono, timer, chronometer", - "allow_emulator":true, - "storage": [ - {"name":"devstopwatch.app.js","url":"app.js"}, - {"name":"devstopwatch.img","url":"app-icon.js","evaluate":true} - ] + { + "id": "devstopwatch", + "name": "Dev Stopwatch", + "shortName": "Dev Stopwatch", + "icon": "app.png", + "version": "0.01", + "description": "Stopwatch with 5 laps supported (cyclically replaced)", + "tags": "stopwatch, chrono, timer, chronometer", + "allow_emulator": true, + "storage": [ + { + "name": "devstopwatch.app.js", + "url": "app.js" + }, + { + "name": "devstopwatch.img", + "url": "app-icon.js", + "evaluate": true + } + ] }, - { "id": "batchart", + { + "id": "batchart", "name": "Battery Chart", - "shortName":"Battery Chart", + "shortName": "Battery Chart", "icon": "app.png", - "version":"0.09", + "version": "0.09", "readme": "README.md", "description": "A widget and an app for recording and visualizing battery percentage over time.", "tags": "app,widget,battery,time,record,chart,tool", "storage": [ - {"name":"batchart.wid.js","url":"widget.js"}, - {"name":"batchart.app.js","url":"app.js"}, - {"name":"batchart.img","url":"app-icon.js","evaluate":true} + { + "name": "batchart.wid.js", + "url": "widget.js" + }, + { + "name": "batchart.app.js", + "url": "app.js" + }, + { + "name": "batchart.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "nato", + { + "id": "nato", "name": "NATO Alphabet", - "shortName" : "NATOAlphabet", + "shortName": "NATOAlphabet", "icon": "nato.png", - "version":"0.01", + "version": "0.01", "type": "app", "description": "Learn the NATO Phonetic alphabet plus some numbers.", "tags": "app,learn,visual", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"nato.app.js","url":"nato.js"}, - {"name":"nato.img","url":"nato-icon.js","evaluate":true} + { + "name": "nato.app.js", + "url": "nato.js" + }, + { + "name": "nato.img", + "url": "nato-icon.js", + "evaluate": true + } ] }, - { "id": "numerals", + { + "id": "numerals", "name": "Numerals Clock", "shortName": "Numerals Clock", "icon": "numerals.png", - "version":"0.04", + "version": "0.04", "description": "A simple big numerals clock", "tags": "numerals,clock", - "type":"clock", - "allow_emulator":true, + "type": "clock", + "allow_emulator": true, "storage": [ - {"name":"numerals.app.js","url":"numerals.app.js"}, - {"name":"numerals.img","url":"numerals-icon.js","evaluate":true}, - {"name":"numerals.settings.js","url":"numerals.settings.js"} + { + "name": "numerals.app.js", + "url": "numerals.app.js" + }, + { + "name": "numerals.img", + "url": "numerals-icon.js", + "evaluate": true + }, + { + "name": "numerals.settings.js", + "url": "numerals.settings.js" + } ], - "data":[ - {"name":"numerals.json"} + "data": [ + { + "name": "numerals.json" + } ] }, - { "id": "bledetect", + { + "id": "bledetect", "name": "BLE Detector", - "shortName":"BLE Detector", + "shortName": "BLE Detector", "icon": "bledetect.png", - "version":"0.02", + "version": "0.02", "description": "Detect BLE devices and show some informations.", "tags": "app,bluetooth,tool", "readme": "README.md", "storage": [ - {"name":"bledetect.app.js","url":"bledetect.js"}, - {"name":"bledetect.img","url":"bledetect-icon.js","evaluate":true} + { + "name": "bledetect.app.js", + "url": "bledetect.js" + }, + { + "name": "bledetect.img", + "url": "bledetect-icon.js", + "evaluate": true + } ] }, - { "id": "snake", + { + "id": "snake", "name": "Snake", - "shortName":"Snake", + "shortName": "Snake", "icon": "snake.png", - "version":"0.02", + "version": "0.02", "description": "The classic snake game. Eat apples and don't bite your tail.", "tags": "game,fun", "readme": "README.md", "storage": [ - {"name":"snake.app.js","url":"snake.js"}, - {"name":"snake.img","url":"snake-icon.js","evaluate":true} + { + "name": "snake.app.js", + "url": "snake.js" + }, + { + "name": "snake.img", + "url": "snake-icon.js", + "evaluate": true + } ] }, - { "id": "calculator", + { + "id": "calculator", "name": "Calculator", - "shortName":"Calculator", + "shortName": "Calculator", "icon": "calculator.png", - "version":"0.02", + "version": "0.02", "description": "Basic calculator reminiscent of MacOs's one. Handy for small calculus.", "tags": "app,tool", "storage": [ - {"name":"calculator.app.js","url":"app.js"}, - {"name":"calculator.img","url":"calculator-icon.js","evaluate":true} + { + "name": "calculator.app.js", + "url": "app.js" + }, + { + "name": "calculator.img", + "url": "calculator-icon.js", + "evaluate": true + } ] }, { @@ -1361,7 +2285,7 @@ "id": "buffgym", "name": "BuffGym", "icon": "buffgym.png", - "version":"0.02", + "version": "0.02", "description": "BuffGym is the famous 5x5 workout program for the BangleJS", "tags": "tool,outdoors,gym,exercise", "type": "app", @@ -1369,14 +2293,39 @@ "allow_emulator": false, "readme": "README.md", "storage": [ - {"name":"buffgym.app.js", "url": "buffgym.app.js"}, - {"name":"buffgym-set.js","url":"buffgym-set.js"}, - {"name":"buffgym-exercise.js","url":"buffgym-exercise.js"}, - {"name":"buffgym-workout.js","url":"buffgym-workout.js"}, - {"name":"buffgym-workout-a.json","url":"buffgym-workout-a.json"}, - {"name":"buffgym-workout-b.json","url":"buffgym-workout-b.json"}, - {"name":"buffgym-workout-index.json","url":"buffgym-workout-index.json"}, - {"name":"buffgym.img","url":"buffgym-icon.js","evaluate":true} + { + "name": "buffgym.app.js", + "url": "buffgym.app.js" + }, + { + "name": "buffgym-set.js", + "url": "buffgym-set.js" + }, + { + "name": "buffgym-exercise.js", + "url": "buffgym-exercise.js" + }, + { + "name": "buffgym-workout.js", + "url": "buffgym-workout.js" + }, + { + "name": "buffgym-workout-a.json", + "url": "buffgym-workout-a.json" + }, + { + "name": "buffgym-workout-b.json", + "url": "buffgym-workout-b.json" + }, + { + "name": "buffgym-workout-index.json", + "url": "buffgym-workout-index.json" + }, + { + "name": "buffgym.img", + "url": "buffgym-icon.js", + "evaluate": true + } ] }, { @@ -1421,71 +2370,108 @@ } ] }, - { "id": "blackjack", + { + "id": "blackjack", "name": "Black Jack game", - "shortName":"Black Jack game", + "shortName": "Black Jack game", "icon": "blackjack.png", - "version":"0.01", + "version": "0.01", "description": "Simple implementation of card game Black Jack", "tags": "game", - "allow_emulator":true, + "allow_emulator": true, "storage": [ - {"name":"blackjack.app.js","url":"blackjack.app.js"}, - {"name":"blackjack.img","url":"blackjack-icon.js","evaluate":true} + { + "name": "blackjack.app.js", + "url": "blackjack.app.js" + }, + { + "name": "blackjack.img", + "url": "blackjack-icon.js", + "evaluate": true + } ] }, - { "id": "hidcam", + { + "id": "hidcam", "name": "Camera shutter", - "shortName":"Cam shutter", + "shortName": "Cam shutter", "icon": "app.png", - "version":"0.03", + "version": "0.03", "description": "Enable HID, connect to your phone, start your camera and trigger the shot on your Bangle", "readme": "README.md", "tags": "bluetooth,tool", "storage": [ - {"name":"hidcam.app.js","url":"app.js"}, - {"name":"hidcam.img","url":"app-icon.js","evaluate":true} + { + "name": "hidcam.app.js", + "url": "app.js" + }, + { + "name": "hidcam.img", + "url": "app-icon.js", + "evaluate": true + } ] }, { "id": "rclock", "name": "Round clock with seconds, minutes and date", - "shortName":"Round Clock", + "shortName": "Round Clock", "icon": "app.png", - "version":"0.01", + "version": "0.01", "description": "Designed round clock with ticks for minutes and seconds", "tags": "clock", "type": "clock", "storage": [ - {"name":"rclock.app.js","url":"rclock.app.js"}, - {"name":"rclock.img","url":"app-icon.js","evaluate":true} + { + "name": "rclock.app.js", + "url": "rclock.app.js" + }, + { + "name": "rclock.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "hamloc", + { + "id": "hamloc", "name": "QTH Locator / Maidenhead Locator System", "shortName": "QTH Locator", "icon": "app.png", - "version":"0.01", + "version": "0.01", "description": "Convert your current GPS location to the Maidenhead locator system used by HAM amateur radio operators", "tags": "tool,outdoors,gps", "storage": [ - {"name":"hamloc.app.js","url":"app.js"}, - {"name":"hamloc.img","url":"app-icon.js","evaluate":true} + { + "name": "hamloc.app.js", + "url": "app.js" + }, + { + "name": "hamloc.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "osmpoi", + { + "id": "osmpoi", "name": "POI Compass", "icon": "app.png", - "version":"0.02", + "version": "0.02", "description": "Uploads all the points of interest in an area onto your watch, same as Beer Compass with more p.o.i.", "tags": "tool,outdoors,gps", "custom": "osmpoi.html", "storage": [ - {"name":"osmpoi.app.js"}, - {"name":"osmpoi.img"} + { + "name": "osmpoi.app.js" + }, + { + "name": "osmpoi.img" + } ] }, - { "id": "pong", + { + "id": "pong", "name": "Pong", "shortName": "Pong", "icon": "pong.png", @@ -1496,11 +2482,19 @@ "allow_emulator": true, "readme": "README.md", "storage": [ - {"name":"pong.app.js","url":"app.js"}, - {"name":"pong.img","url":"app-icon.js","evaluate":true} + { + "name": "pong.app.js", + "url": "app.js" + }, + { + "name": "pong.img", + "url": "app-icon.js", + "evaluate": true + } ] }, - { "id": "ballmaze", + { + "id": "ballmaze", "name": "Ball Maze", "icon": "icon.png", "version": "0.01", @@ -1509,11 +2503,20 @@ "tags": "game", "type": "app", "storage": [ - {"name": "ballmaze.app.js","url":"app.js"}, - {"name": "ballmaze.img","url":"icon.js","evaluate": true} + { + "name": "ballmaze.app.js", + "url": "app.js" + }, + { + "name": "ballmaze.img", + "url": "icon.js", + "evaluate": true + } ], "data": [ - {"name": "ballmaze.json"} + { + "name": "ballmaze.json" + } ] }, { @@ -1537,16 +2540,45 @@ } ] }, - { "id": "hidjoystick", + { + "id": "hidjoystick", "name": "Bluetooth Joystick", "shortName": "Joystick", "icon": "app.png", - "version":"0.01", + "version": "0.01", "description": "Emulates a 2 axis/5 button Joystick using the accelerometer as stick input and buttons 1-3, touch left as button 4 and touch right as button 5.", "tags": "bluetooth", "storage": [ - {"name":"hidjoystick.app.js","url":"app.js"}, - {"name":"hidjoystick.img","url":"app-icon.js","evaluate":true} + { + "name": "hidjoystick.app.js", + "url": "app.js" + }, + { + "name": "hidjoystick.img", + "url": "app-icon.js", + "evaluate": true + } + ] + }, + { + "id": "timer", + "name": "My Timer App", + "shortName": "My Timer", + "icon": "timer.png", + "version": "0.01", + "description": "This is a description of my awesome timer app", + "allow_emulator": true, + "tags": "tool", + "storage": [ + { + "name": "timer.app.js", + "url": "timer.app.js" + }, + { + "name": "timer.img", + "url": "timer-icon.js", + "evaluate": true + } ] } -] +] \ No newline at end of file diff --git a/apps/timer/ChangeLog b/apps/timer/ChangeLog new file mode 100644 index 0000000000..3dfc4c8696 --- /dev/null +++ b/apps/timer/ChangeLog @@ -0,0 +1 @@ +0.01: initial commit \ No newline at end of file diff --git a/apps/timer/timer-icon.js b/apps/timer/timer-icon.js new file mode 100644 index 0000000000..b760044e2c --- /dev/null +++ b/apps/timer/timer-icon.js @@ -0,0 +1,5 @@ +require('heatshrink').decompress( + atob( + 'mEwxH+AClhCyoAYsIwuF4IwtF4Qxqw2GF4mG1YsqAAeF1eyAAIteFhAvHGLZbKR4guEGDItGwooBAweH6/X6wwGGKpVHE4PXGgWsAwQACGDIuFFoYvCw3WFwpjIFyuG2QkFRYQAJFwerwwvTwwmLGBeHDYQuoNwQcDFxlbCIWFRgwAJlb0HJohePdQoAKq0AlYJG1YfDRr+sgEAL4wABwxgNLy1WBZBgDF5uFLzYABwqQMBgWHdiBeKSByODJZReHBxaQMF4eyLznX2QvPLqBeM6/WcQYvZldbrYvN64jDF7rRNF7qPDGBqPPd54xDGBTvQPpowQ1YvLGAeHF54wDlYMIwwvPwovQGAIuJ6+FdxSQF1YwRABKONF4mGF7aONMEBeDRxQvFsOyFy+yP4gvL/1bSLXWRp7CdFwgvUCgKSS2QuUGAz0RdQguSGA+G1gtMLgguUeYoACwuH1aWE2QsBwpDGFyhiIAB2GFzAwUFrQxRLbYzOworBFkgA/AH4AuA==' + ) +); diff --git a/apps/timer/timer.app.js b/apps/timer/timer.app.js new file mode 100644 index 0000000000..c5ad76d0fe --- /dev/null +++ b/apps/timer/timer.app.js @@ -0,0 +1,46 @@ +var counter = 31; +var interval; + +function outOfTime() { + if (interval) { + return; + } + + E.showMessage('Out of Time', 'My Timer'); + Bangle.buzz(); + Bangle.beep(200, 4000) + .then(() => new Promise((resolve) => setTimeout(resolve, 200))) + .then(() => Bangle.beep(200, 3000)); + setTimeout(outOfTime, 10000); +} + +function countDown() { + counter--; + + if (counter <= 0) { + clearInterval(interval); + interval = undefined; + setWatch(startTimer, BTN2); + outOfTime(); + return; + } + + g.clear(); + + g.setFontAlign(0, 0); + g.setFont('6x8', 8); + + g.drawString(counter, g.getWidth() / 2, g.getHeight() / 2); + + g.flip(); +} + +function startTimer() { + counter = 31; + countDown(); + if (!interval) { + interval = setInterval(countDown, 1000); + } +} + +startTimer(); diff --git a/apps/timer/timer.png b/apps/timer/timer.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9524948a567971a1dc493bbb1c29888c995634 GIT binary patch literal 2140 zcmV-i2&4CjP)6&{%64Q$@gr z#x&EJV#m~WD(Msx&~+SPOr6Z6Gc;2s(@rBr-P&p=D+y+xYIFjIs0C6&OsQZLEg)aZ zE_Xlf+aH1T-rc+G2k_75-#Pa==RMEvd*6?9fki;o2OHjhz4^OK79+POB#V@Hm(uR+ zs6O}Hszu80#$pKo0n!P_wO5-9%NJ`5U=an(KuHMohsB&y)IuaNnM|}JrEAx;eX`VM zw`AU%=v(T^2~$L{1*tnO8N!oWDUNGRj?C|%D2ki!*z*!#`ofqsK0flhp~-=#t@cUU zAD@v(k(c~^q{ZX`AOoNz#~Bx0mlTyd7-|h62{_qxIAwg|-s!ueH?v&C8E~9XfE&{Q z>S>AmV6rZIEZACt7SPa9dF;Q#U;K)7Oa=A+Xq8cT=CLy9R589N_bEd5r0Dbi9!%bV z1(cXd=;z|1KfgWNvs&!Al$IkYaut#zvv9uWJ;Afp@f)!@V>bv~usJ4Rb&P={E?+~v zlM*pdK~beX2|)`m{_|Od%OYtcz;@4PN~s0~DLb$xsR(jL1pufvZ*+@#e&rtICcYqu z;RuIGb_k=>ci`e2A|sMB^u%;oa&qCczuFjogc4H;?X--X0I-ekrzH&5B>eyz(_V#a zrf@!@)QQ-ca{w`6$zIPSlmy|57=+377@Ho%nC&hI2#-N+cWD%jgqTYF{S$r#q$?l1 zO+1QM$uuaaSBr3E^qj>73n#~7aIzPy%Zh9LAEWEe1pvT`n5T~Y zIPd7MeZ~0{P-!mEF+}zy0C%Noxeh-o`2B(xKMN@gpN6*t&HqE?&GSKBh#Dyk#$fmOPx<)6OZ$gUR93 zzH*8Rc;lmWv7qo%zHfbM84`6XL#uoSH8nLbo6R_KskT|8U0dT*8YIy{{v%Ex%8Zi3%`%za{2a2LlTU$FPw=nHhgefB3wu?A1$&S4v zTC1nSXf#SduuG6|#mkT}%FrsG!NG$E!LlrN?%au-9P!m_7Bt0RZPJSZ-~I7hPn(Fz z>%8S9z>#w)7eL~yEoW57O4uB7;Q-Lx-HnEZ21un+96o$FpqMpDMS^A6YM)?S9o=P~ zJh3UXfp4TmukpK{`@{bI`{8oAP+ne+)YQ~~V&sep@w#+@&*rlH(39sSKmsb4Z!g!+ zxsUk8<;$00Hk+YVt5H=|6;$kUz3{!Yvg4Va94`R`62UL9f^2%9Sh7Xf&v(s0cboxI%dJw%I4; zo*c2WP#E8kGof8&ckkYfAJwLV5Q0DM`xi7CP0%?s%1D9ji9Y6>{V(A0pymNP25C&xaq{2CyuP;^JbowzdWodv{z=3RJSNVNZ^i01l*sZ}$yf53XVn zWMpKZxw#p7y&g834M&e24JhtE9%HNI;hmlwu_+|@d3yiX4!g_m)zmLCGc(cB(t=H! zHsRE%Q-1l=4hsfGx&=NZtv>0=^AaHae0>K1_vEuXZMc5BIi#XJk(rr^^XJb)tJV7D zUL80K2lsHwt7ICd!BTj_lP7i>fv^ue^u&~gp zizd1caEzl4-*(IZ02X!>SNi_C&~^I6$35@C!j8Ianqr_)MeG&hiVCRt-Y0_;sCvHd z($|gXf6y&PUr_W8wW0miKLoxwZR(BEY~u|vzR#VQre)Ot<=zBboD+>5)ff$NUkC)l zQ@3&Ydaa;qr(l+FdR5#uUok!f7@z-e0u=Xi;9CF=mJo%K!G$I*GG1qr&xp;h{9)CPs# zp*FmKbw8$f^Bw>aBQmc2B>(Nwxnlhu=6Y?B6%=rW@0+rZ;ZJR^(Kbw0k96?nJY$^ z=#;TgNYx-9u(D$qw%*2_u`kg#d;|R>U4l*OVKEdEBGRvEwNd${D~;ZS`3RWBn;&f0 zP66)%SeO@J1`1{gw@kn4x4WLIsSGAAq)$x7GtX*W41I`zl!Mm*3k5XAAWoZlL$8Y4 zHrHz73-kKO_r^!-VrhqT4*^~Qua^`ER5Fb-TAkRYQAOW SY&F&Z0000 Date: Thu, 30 Apr 2020 13:27:43 +0200 Subject: [PATCH 02/38] add demo readme --- apps.json | 1 + apps/timer/ChangeLog | 2 +- apps/timer/README.md | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 apps/timer/README.md diff --git a/apps.json b/apps.json index 4f74eb0c31..acad966bce 100644 --- a/apps.json +++ b/apps.json @@ -2569,6 +2569,7 @@ "description": "This is a description of my awesome timer app", "allow_emulator": true, "tags": "tool", + "readme": "README.md", "storage": [ { "name": "timer.app.js", diff --git a/apps/timer/ChangeLog b/apps/timer/ChangeLog index 3dfc4c8696..2286a7f70e 100644 --- a/apps/timer/ChangeLog +++ b/apps/timer/ChangeLog @@ -1 +1 @@ -0.01: initial commit \ No newline at end of file +0.01: New App! \ No newline at end of file diff --git a/apps/timer/README.md b/apps/timer/README.md new file mode 100644 index 0000000000..fadb1d8e4e --- /dev/null +++ b/apps/timer/README.md @@ -0,0 +1,3 @@ +# My Timer + +- install => profit! From 2f921394ec18c54869b87595f9f4f698fcceeccc Mon Sep 17 00:00:00 2001 From: flashback2k14 Date: Thu, 30 Apr 2020 14:00:33 +0200 Subject: [PATCH 03/38] add timer custom test --- apps.json | 3 ++- apps/timer/ChangeLog | 3 ++- apps/timer/timer-custom.html | 39 ++++++++++++++++++++++++++++++++++++ apps/timer/timer.app.js | 8 +++++++- 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 apps/timer/timer-custom.html diff --git a/apps.json b/apps.json index acad966bce..08035724ff 100644 --- a/apps.json +++ b/apps.json @@ -2565,11 +2565,12 @@ "name": "My Timer App", "shortName": "My Timer", "icon": "timer.png", - "version": "0.01", + "version": "0.02", "description": "This is a description of my awesome timer app", "allow_emulator": true, "tags": "tool", "readme": "README.md", + "custom": "timer-custom.html", "storage": [ { "name": "timer.app.js", diff --git a/apps/timer/ChangeLog b/apps/timer/ChangeLog index 2286a7f70e..012570d763 100644 --- a/apps/timer/ChangeLog +++ b/apps/timer/ChangeLog @@ -1 +1,2 @@ -0.01: New App! \ No newline at end of file +0.01: New App! +0.02: add custom html \ No newline at end of file diff --git a/apps/timer/timer-custom.html b/apps/timer/timer-custom.html new file mode 100644 index 0000000000..9c67271191 --- /dev/null +++ b/apps/timer/timer-custom.html @@ -0,0 +1,39 @@ + + + + + + + +

+ + + +

+ + + + + \ No newline at end of file diff --git a/apps/timer/timer.app.js b/apps/timer/timer.app.js index c5ad76d0fe..8473047089 100644 --- a/apps/timer/timer.app.js +++ b/apps/timer/timer.app.js @@ -6,7 +6,13 @@ function outOfTime() { return; } - E.showMessage('Out of Time', 'My Timer'); + const data = require('Storage').readJSON('timer.data', true); + if (data) { + E.showMessage('Out of Time', `My Timer: ${data.txtTest1}, ${data.txtTest2}`); + } else { + E.showMessage('Out of Time', 'My Timer'); + } + Bangle.buzz(); Bangle.beep(200, 4000) .then(() => new Promise((resolve) => setTimeout(resolve, 200))) From 0516051295845a50906d650fd4003bc408f0822c Mon Sep 17 00:00:00 2001 From: flashback2k14 Date: Thu, 30 Apr 2020 14:02:29 +0200 Subject: [PATCH 04/38] bugfix custom page --- apps/timer/timer-custom.html | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/timer/timer-custom.html b/apps/timer/timer-custom.html index 9c67271191..8a5e6119ee 100644 --- a/apps/timer/timer-custom.html +++ b/apps/timer/timer-custom.html @@ -30,7 +30,6 @@ evaluate: true } ] - } }); }); From 8a00aced80a86dda872a2e28b1ce44def3fdc4dc Mon Sep 17 00:00:00 2001 From: flashback2k14 Date: Thu, 30 Apr 2020 14:15:33 +0200 Subject: [PATCH 05/38] trying to write to storage for custom page --- apps/timer/timer-custom.html | 34 ++++++++------- lib/interface.js | 85 ++++++++++++++++++++---------------- 2 files changed, 65 insertions(+), 54 deletions(-) diff --git a/apps/timer/timer-custom.html b/apps/timer/timer-custom.html index 8a5e6119ee..8f4e2072c3 100644 --- a/apps/timer/timer-custom.html +++ b/apps/timer/timer-custom.html @@ -11,26 +11,28 @@

+ diff --git a/lib/interface.js b/lib/interface.js index 7e8be4fd95..02a0218b45 100644 --- a/lib/interface.js +++ b/lib/interface.js @@ -19,37 +19,42 @@ Util.eraseStorageFile(filename,callback) Util.showModal(title) Util.hideModal() */ -var __id = 0, __idlookup = []; +var __id = 0, + __idlookup = []; var Puck = { - eval : function(data,callback) { + eval: function (data, callback) { __id++; __idlookup[__id] = callback; - window.postMessage({type:"eval",data:data,id:__id}); - },write : function(data,callback) { + window.postMessage({ type: 'eval', data: data, id: __id }); + }, + write: function (data, callback) { __id++; __idlookup[__id] = callback; - window.postMessage({type:"write",data:data,id:__id}); - } + window.postMessage({ type: 'write', data: data, id: __id }); + }, }; var Util = { - readStorageFile : function(filename,callback) { + readStorageFile: function (filename, callback) { __id++; __idlookup[__id] = callback; - window.postMessage({type:"readstoragefile",data:filename,id:__id}); + window.postMessage({ type: 'readstoragefile', data: filename, id: __id }); + }, + eraseStorageFile: function (filename, callback) { + Puck.write(`\x10require("Storage").open(${JSON.stringify(filename)},"r").erase()\n`, callback); }, - eraseStorageFile : function(filename,callback) { - Puck.write(`\x10require("Storage").open(${JSON.stringify(filename)},"r").erase()\n`,callback); + eraseStorage: function (filename, callback) { + Puck.write(`\x10require("Storage").erase(${JSON.stringify(filename)})\n`, callback); }, - eraseStorage : function(filename,callback) { - Puck.write(`\x10require("Storage").erase(${JSON.stringify(filename)})\n`,callback); + writeJsonToStorageFile: function (filename, data, callback) { + Puck.write(`\x10require("Storage").writeJSON(${JSON.stringify(filename)}, ${data});\n`, callback); }, - showModal : function(title) { + showModal: function (title) { if (!Util.domModal) { Util.domModal = document.createElement('div'); - Util.domModal.id = "status-modal"; - Util.domModal.classList.add("modal"); - Util.domModal.classList.add("active"); + Util.domModal.id = 'status-modal'; + Util.domModal.classList.add('modal'); + Util.domModal.classList.add('active'); Util.domModal.innerHTML = `