From 86c90c81ca15c9a186fa1ca861a89adf51f8badd Mon Sep 17 00:00:00 2001 From: hughbarney Date: Fri, 17 Dec 2021 21:57:26 +0000 Subject: [PATCH 001/105] 93dub: fix issue with light theme so that this dark does not end up with a white strip at the top --- apps.json | 2 +- apps/93dub/ChangeLog | 1 + apps/93dub/app.js | 8 +++++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 4a333cdbd..2179e766b 100644 --- a/apps.json +++ b/apps.json @@ -4620,7 +4620,7 @@ "shortName":"93 Dub", "icon": "93dub.png", "screenshots": [{"url":"screenshot.png"}], - "version":"0.05", + "version":"0.06", "description": "Fan recreation of orviwan's 91 Dub app for the Pebble smartwatch. Uses assets from his 91-Dub-v2.0 repo", "tags": "clock", "type": "clock", diff --git a/apps/93dub/ChangeLog b/apps/93dub/ChangeLog index c1b2588bb..1c18ca59b 100644 --- a/apps/93dub/ChangeLog +++ b/apps/93dub/ChangeLog @@ -3,3 +3,4 @@ 0.03: Code style cleanup 0.04: Set 00:00 to 12:00 for 12 hour time 0.05: Display time, even on Thursday +0.06: Fix light theme issue, where widgets would end up on a light strip diff --git a/apps/93dub/app.js b/apps/93dub/app.js index 1b0f69a94..f970eec5d 100644 --- a/apps/93dub/app.js +++ b/apps/93dub/app.js @@ -122,7 +122,13 @@ function draw(){ queueDraw(); } - +/** + * This watch is mostly dark, it does not make sense to respect the + * light theme as you end up with a white strip at the top for the + * widgets and black watch. So set the colours to the dark theme. + * + */ +g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(); draw(); //the following section is also from waveclk From d75940b9e617595c0a20d89474876a7e5cb2abdb Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Fri, 17 Dec 2021 22:57:09 +0100 Subject: [PATCH 002/105] Ported cprassist to Banglejs2 --- apps.json | 4 ++-- apps/cprassist/ChangeLog | 1 + apps/cprassist/cprassist.js | 17 +++++++++-------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/apps.json b/apps.json index 8b4e86d52..4f966bbdd 100644 --- a/apps.json +++ b/apps.json @@ -2970,11 +2970,11 @@ { "id": "cprassist", "name": "CPR Assist", - "version": "0.01", + "version": "0.02", "description": "Provides assistance while performing a CPR", "icon": "cprassist-icon.png", "tags": "tool,firstaid", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS", "BANGLEJS2"], "readme": "README.md", "allow_emulator": true, "screenshots": [{"url":"bangle1-CPR-assist-screenshot.png"}], diff --git a/apps/cprassist/ChangeLog b/apps/cprassist/ChangeLog index 5560f00bc..529010aa8 100644 --- a/apps/cprassist/ChangeLog +++ b/apps/cprassist/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Ported to Banglejs2 diff --git a/apps/cprassist/cprassist.js b/apps/cprassist/cprassist.js index 862ae54d6..3e34ea171 100644 --- a/apps/cprassist/cprassist.js +++ b/apps/cprassist/cprassist.js @@ -35,23 +35,24 @@ function provideFeedback() { } function drawHeart() { - g.fillCircle(40, 92, 12); - g.fillCircle(60, 92, 12); - g.fillPoly([29, 98, 50, 120, 71, 98]); + var lowestPoint = g.getHeight()*3/5; + g.fillCircle(40, lowestPoint-29, 12); + g.fillCircle(60, lowestPoint-29, 12); + g.fillPoly([29, lowestPoint-22, 50, lowestPoint, 71, lowestPoint-22]); } function updateScreen() { const colors = [0xFFFF, 0x9492]; - g.reset().clearRect(0, 50, 250, 150); + g.reset().clearRect(0, 0, 250, g.getHeight()*5/6); if (counter > 0) { g.setFont("Vector", 40).setFontAlign(0, 0); g.setColor(colors[counter%2]); drawHeart(); - g.drawString(counter + "", g.getWidth()/2, 100); + g.drawString(counter, 120, g.getHeight()*3/5-20); } else { g.setFont("Vector", 20).setFontAlign(0, 0); - g.drawString("RESCUE", g.getWidth()/2, 70); - g.drawString("BREATHS", g.getWidth()/2, 120); + g.drawString("RESCUE", g.getWidth()/2, g.getHeight()/3); + g.drawString("BREATHS", g.getWidth()/2, g.getHeight()*3/5); } } @@ -73,7 +74,7 @@ function tick() { interval = setInterval(tick, 60000/setting('compression_rpm')); g.clear(1).setFont("6x8"); -g.drawString(setting('compression_count') + ' / ' + setting('breath_count'), 30, 200); +g.drawString(setting('compression_count') + ' / ' + setting('breath_count'), 30, g.getHeight()*5/6); Bangle.loadWidgets(); Bangle.drawWidgets(); From d241cebeb04178e08edd993d7208f04166471a04 Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Fri, 17 Dec 2021 23:23:13 +0100 Subject: [PATCH 003/105] cpassist: work with different bgcolors --- apps/cprassist/cprassist.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/cprassist/cprassist.js b/apps/cprassist/cprassist.js index 3e34ea171..ee5b06131 100644 --- a/apps/cprassist/cprassist.js +++ b/apps/cprassist/cprassist.js @@ -42,7 +42,7 @@ function drawHeart() { } function updateScreen() { - const colors = [0xFFFF, 0x9492]; + const colors = [0xFFFF-g.getBgColor(), 0x9492]; g.reset().clearRect(0, 0, 250, g.getHeight()*5/6); if (counter > 0) { g.setFont("Vector", 40).setFontAlign(0, 0); From c5303ef657c7b788da37cd952230573406794d7a Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Sat, 18 Dec 2021 01:00:22 +0100 Subject: [PATCH 004/105] Don't blank widgets --- apps.json | 2 +- apps/cprassist/cprassist.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 4f966bbdd..64abacef2 100644 --- a/apps.json +++ b/apps.json @@ -2970,7 +2970,7 @@ { "id": "cprassist", "name": "CPR Assist", - "version": "0.02", + "version": "0.02-rc1", "description": "Provides assistance while performing a CPR", "icon": "cprassist-icon.png", "tags": "tool,firstaid", diff --git a/apps/cprassist/cprassist.js b/apps/cprassist/cprassist.js index ee5b06131..128ae7407 100644 --- a/apps/cprassist/cprassist.js +++ b/apps/cprassist/cprassist.js @@ -43,7 +43,7 @@ function drawHeart() { function updateScreen() { const colors = [0xFFFF-g.getBgColor(), 0x9492]; - g.reset().clearRect(0, 0, 250, g.getHeight()*5/6); + g.reset().clearRect(0, 24, g.getWidth(), g.getHeight()*5/6); if (counter > 0) { g.setFont("Vector", 40).setFontAlign(0, 0); g.setColor(colors[counter%2]); From e95a8a0fdb68896682492ad9d337869aef259c1d Mon Sep 17 00:00:00 2001 From: numerist Date: Fri, 17 Dec 2021 22:27:33 -0500 Subject: [PATCH 005/105] Create doztime2.app.js --- apps/doztime2.app.js | 243 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 apps/doztime2.app.js diff --git a/apps/doztime2.app.js b/apps/doztime2.app.js new file mode 100644 index 000000000..f1866c9fc --- /dev/null +++ b/apps/doztime2.app.js @@ -0,0 +1,243 @@ +// Positioning values for graphics buffers +const g_height = 80; // total graphics height +const g_x_off = 0; // position from left was 16, then 8 here +const g_y_off = (184 - g_height)/2; // vertical center for graphics region was 240 +const g_width = 240 - 2 * g_x_off; // total graphics width +const g_height_d = 28; // height of date region was 32 +const g_y_off_d = 0; // y position of date region within graphics region +const spacing = 0; // space between date and time in graphics region +const g_y_off_t = g_y_off_d + g_height_d + spacing; // y position of time within graphics region +const g_height_t = 44; // height of time region was 48 + +// Other vars +const A1 = [30,30,30,30,31,31,31,31,31,31,30,30]; +const B1 = [30,30,30,30,30,31,31,31,31,31,30,30]; +const B2 = [30,30,30,30,31,31,31,31,31,30,30,30]; +const timeColour = "#000000"; +const dateColours = ["#ff0000","#ffa500","#ffff00","#00b800","#0000ff","#ff00ff","#ff0080"]; +const calen10 = {"size":26,"pt0":[18-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for usual calendar line ft w 32, 32-g, step 20 +const calen7 = {"size":26,"pt0":[48-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for S-day calendar line ft w 32, 62-g, step 20 +const time5 = {"size":42,"pt0":[39-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for lull time line ft w 48, 64-g, step 30 +const time6 = {"size":42,"pt0":[26-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for twinkling time line ft w 48, 48-g, step 30 +const baseYear = 11584; +const baseDate = Date(2020,11,21); // month values run from 0 to 11 +let accum = new Date(baseDate.getTime()); +let sequence = []; +let timeActiveUntil; +let addTimeDigit = false; +let dateFormat = false; +let lastX = 999999999; +let res = {}; +//var last_time_log = 0; + +var drawtime_timeout; + +// Date and time graphics buffers +var dateColour = "#ffffff"; // override later +var timeColour2 = timeColour; +var g_d = Graphics.createArrayBuffer(g_width,g_height_d,1,{'msb':true}); +var g_t = Graphics.createArrayBuffer(g_width,g_height_t,1,{'msb':true}); +// Set screen mode and function to write graphics buffers +//Bangle.setLCDMode(); +g.clear(); // start with blank screen +g.flip = function() +{ + g.setBgColor(0.5,0.5,0.5); + g.setColor(dateColour); + g.drawImage( + { + width:g_width, + height:g_height_d, + buffer:g_d.buffer + }, g_x_off, g_y_off + g_y_off_d); + g.setColor(timeColour2); + g.drawImage( + { + width:g_width, + height:g_height_t, + buffer:g_t.buffer + }, g_x_off, g_y_off + g_y_off_t); +}; + +setWatch(function(){ modeTime(); }, BTN, {repeat:true} ); //was BTN1 +setWatch(function(){ Bangle.showLauncher(); }, BTN, { repeat: false, edge: "falling" }); //was BTN2 +//setWatch(function(){ modeWeather(); }, BTN3, {repeat:true}); +//setWatch(function(){ toggleTimeDigits(); }, BTN4, {repeat:true}); +//setWatch(function(){ toggleDateFormat(); }, BTN5, {repeat:true}); + +Bangle.on('touch', function(button, xy) { //from Gordon Williams + if (button==1) toggleTimeDigits(); + if (button==2) toggleDateFormat(); +}); + +function buildSequence(targ){ + for(let i=0;i n > dt)-1; + let year = baseYear+parseInt(index/12); + let month = index % 12; + let day = parseInt((dt-sequence[index])/86400000); + let colour = dateColours[day % 6]; + if(day==30){ colour=dateColours[6]; } + return({"year":year,"month":month,"day":day,"colour":colour}); +} +function toggleTimeDigits(){ + addTimeDigit = !addTimeDigit; + modeTime(); +} +function toggleDateFormat(){ + dateFormat = !dateFormat; + modeTime(); +} +function formatDate(res,dateFormat){ + let yyyy = res.year.toString(12); + calenDef = calen10; + if(!dateFormat){ //ordinal format + let mm = ("0"+(res.month+1).toString(12)).substr(-2); + let dd = ("0"+(res.day+1).toString(12)).substr(-2); + if(res.day==30){ + calenDef = calen7; + let m = ((res.month+1).toString(12)).substr(-2); + return(yyyy+"-"+"S"+m); // ordinal format + } + return(yyyy+"-"+mm+"-"+dd); + } + let m = res.month.toString(12); // cardinal format + let w = parseInt(res.day/6); + let d = res.day%6; + //return(yyyy+"-"+res.month+"-"+w+"-"+d); + return(yyyy+"-"+m+"-"+w+"-"+d); +} + +function writeDozTime(text,def){ + let pts = def.pts; + let x=def.pt0[0]; + let y=def.pt0[1]; + g_t.clear(); + g_t.setFont("Vector",def.size); + for(let i in text){ + if(text[i]=="a"){ g_t.setFontAlign(0,0,2); g_t.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s new + else if(text[i]=="b"){ g_t.setFontAlign(0,0,2); g_t.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s new + else{ g_t.setFontAlign(0,0,0); g_t.drawString(text[i],x,y); } + x = x+def.step[0]; + y = y+def.step[1]; + } +} +function writeDozDate(text,def,colour){ + + dateColour = colour; + let pts = def.pts; + let x=def.pt0[0]; + let y=def.pt0[1]; + g_d.clear(); + g_d.setFont("Vector",def.size); + for(let i in text){ + if(text[i]=="a"){ g_d.setFontAlign(0,0,2); g_d.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s new + else if(text[i]=="b"){ g_d.setFontAlign(0,0,2); g_d.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s new + else{ g_d.setFontAlign(0,0,0); g_d.drawString(text[i],x,y); } + x = x+def.step[0]; + y = y+def.step[1]; + } +} + +// Functions for time mode +function drawTime() +{ + let dt = new Date(); + let date = ""; + let timeDef; + let x = 0; + dt.setDate(dt.getDate()); + if(addTimeDigit){ + x = + 10368*dt.getHours()+172.8*dt.getMinutes()+2.88*dt.getSeconds()+0.00288*dt.getMilliseconds(); + let msg = "00000"+Math.floor(x).toString(12); + let time = msg.substr(-5,3)+"."+msg.substr(-2); + let wait = 347*(1-(x%1)); + timeDef = time6; + } else { + x = + 864*dt.getHours()+14.4*dt.getMinutes()+0.24*dt.getSeconds()+0.00024*dt.getMilliseconds(); + let msg = "0000"+Math.floor(x).toString(12); + let time = msg.substr(-4,3)+"."+msg.substr(-1); + let wait = 4167*(1-(x%1)); + timeDef = time5; + } + if(lastX > x){ res = getDate(dt); } // calculate date once at start-up and once when turning over to a new day + date = formatDate(res,dateFormat); + if(dt2200)) { + } else { + // We have a GPS time. Set time + setTime(g.time.getTime()/1000); + } + }); + Bangle.setGPSPower(1,"time"); + setTimeout(fixTime, 10*60*1000); // every 10 minutes +} +// Start time fixing with GPS on next 10 minute interval +setTimeout(fixTime, ((60-(new Date()).getMinutes()) % 10) * 60 * 1000); From b2a4ede70aff4818435333ec5ae84a9cbf2c3139 Mon Sep 17 00:00:00 2001 From: numerist Date: Fri, 17 Dec 2021 22:43:14 -0500 Subject: [PATCH 006/105] Create app2-icon.js --- app2-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 app2-icon.js diff --git a/app2-icon.js b/app2-icon.js new file mode 100644 index 000000000..19e81c45d --- /dev/null +++ b/app2-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("lEowggdkUiCKIADCJcCkUjmYACmUikAlKB4ImDAoQSJkYhBFAQECAQI5HBQU//4AC+YUCHowzBCQfzAYYKCEw8vEgYqD+QoGgQbBHAYADCwIoBCYkiEwhPEBAIoBHgY6BExHyHwQhBFAQ6BkYTHDgcyHgcCHRZlDCYQsBTYg6GDAJQDPoI6LAAIPBCYRiHHQhkDCYRiHHQhkCCYKKBCYzzBA4yMBCYTVEGYITEBYITZHY5PHUAJjITIJjHRZINBIYoTDWZAoFWYbbJFALbHgUyX4oPDXIcjMQITBmZkHFYszCYZkJMQoTCKAQ8IHQZOCHgYoKkQ6DHgYoEcIgmBHQg8CFAIPCCYfzBQQSEFAbrFCQImHFAQUCkczmYECAQISGHoYzBAAQFCCRA9BEwYoDHI4pFAAgRLCooRPABg=")) From 028d23654927aaf24ffbad4b51b32b5bf18eab52 Mon Sep 17 00:00:00 2001 From: numerist Date: Fri, 17 Dec 2021 22:48:54 -0500 Subject: [PATCH 007/105] Update apps.json --- apps.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 3e0ab4181..1c8f1fff8 100644 --- a/apps.json +++ b/apps.json @@ -3194,4 +3194,19 @@ {"name":"doztime.img","url":"app-icon.js","evaluate":true} ] } -] \ No newline at end of file +] +}, +{ "id": "doztime2", + "name": "Dozenal Time 2", + "shortName":"Dozenal Time 2", + "icon": "app.png", + "version":"0.01", + "description": "A dozenal Holocene calendar and dozenal diurnal clock for Bangle.js2", + "tags": "clock", + "type":"clock" + "storage": [ + {"name":"doztime2.app.js","url":"app.js"}, + {"name":"doztime2.img","url":"app2-icon.js","evaluate":true} + ] +} +] From 8a898a7054f57f3846d5182fbe374cebaa3987cf Mon Sep 17 00:00:00 2001 From: numerist Date: Fri, 17 Dec 2021 23:25:09 -0500 Subject: [PATCH 008/105] Delete doztime2.app.js --- apps/doztime2.app.js | 243 ------------------------------------------- 1 file changed, 243 deletions(-) delete mode 100644 apps/doztime2.app.js diff --git a/apps/doztime2.app.js b/apps/doztime2.app.js deleted file mode 100644 index f1866c9fc..000000000 --- a/apps/doztime2.app.js +++ /dev/null @@ -1,243 +0,0 @@ -// Positioning values for graphics buffers -const g_height = 80; // total graphics height -const g_x_off = 0; // position from left was 16, then 8 here -const g_y_off = (184 - g_height)/2; // vertical center for graphics region was 240 -const g_width = 240 - 2 * g_x_off; // total graphics width -const g_height_d = 28; // height of date region was 32 -const g_y_off_d = 0; // y position of date region within graphics region -const spacing = 0; // space between date and time in graphics region -const g_y_off_t = g_y_off_d + g_height_d + spacing; // y position of time within graphics region -const g_height_t = 44; // height of time region was 48 - -// Other vars -const A1 = [30,30,30,30,31,31,31,31,31,31,30,30]; -const B1 = [30,30,30,30,30,31,31,31,31,31,30,30]; -const B2 = [30,30,30,30,31,31,31,31,31,30,30,30]; -const timeColour = "#000000"; -const dateColours = ["#ff0000","#ffa500","#ffff00","#00b800","#0000ff","#ff00ff","#ff0080"]; -const calen10 = {"size":26,"pt0":[18-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for usual calendar line ft w 32, 32-g, step 20 -const calen7 = {"size":26,"pt0":[48-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for S-day calendar line ft w 32, 62-g, step 20 -const time5 = {"size":42,"pt0":[39-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for lull time line ft w 48, 64-g, step 30 -const time6 = {"size":42,"pt0":[26-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for twinkling time line ft w 48, 48-g, step 30 -const baseYear = 11584; -const baseDate = Date(2020,11,21); // month values run from 0 to 11 -let accum = new Date(baseDate.getTime()); -let sequence = []; -let timeActiveUntil; -let addTimeDigit = false; -let dateFormat = false; -let lastX = 999999999; -let res = {}; -//var last_time_log = 0; - -var drawtime_timeout; - -// Date and time graphics buffers -var dateColour = "#ffffff"; // override later -var timeColour2 = timeColour; -var g_d = Graphics.createArrayBuffer(g_width,g_height_d,1,{'msb':true}); -var g_t = Graphics.createArrayBuffer(g_width,g_height_t,1,{'msb':true}); -// Set screen mode and function to write graphics buffers -//Bangle.setLCDMode(); -g.clear(); // start with blank screen -g.flip = function() -{ - g.setBgColor(0.5,0.5,0.5); - g.setColor(dateColour); - g.drawImage( - { - width:g_width, - height:g_height_d, - buffer:g_d.buffer - }, g_x_off, g_y_off + g_y_off_d); - g.setColor(timeColour2); - g.drawImage( - { - width:g_width, - height:g_height_t, - buffer:g_t.buffer - }, g_x_off, g_y_off + g_y_off_t); -}; - -setWatch(function(){ modeTime(); }, BTN, {repeat:true} ); //was BTN1 -setWatch(function(){ Bangle.showLauncher(); }, BTN, { repeat: false, edge: "falling" }); //was BTN2 -//setWatch(function(){ modeWeather(); }, BTN3, {repeat:true}); -//setWatch(function(){ toggleTimeDigits(); }, BTN4, {repeat:true}); -//setWatch(function(){ toggleDateFormat(); }, BTN5, {repeat:true}); - -Bangle.on('touch', function(button, xy) { //from Gordon Williams - if (button==1) toggleTimeDigits(); - if (button==2) toggleDateFormat(); -}); - -function buildSequence(targ){ - for(let i=0;i n > dt)-1; - let year = baseYear+parseInt(index/12); - let month = index % 12; - let day = parseInt((dt-sequence[index])/86400000); - let colour = dateColours[day % 6]; - if(day==30){ colour=dateColours[6]; } - return({"year":year,"month":month,"day":day,"colour":colour}); -} -function toggleTimeDigits(){ - addTimeDigit = !addTimeDigit; - modeTime(); -} -function toggleDateFormat(){ - dateFormat = !dateFormat; - modeTime(); -} -function formatDate(res,dateFormat){ - let yyyy = res.year.toString(12); - calenDef = calen10; - if(!dateFormat){ //ordinal format - let mm = ("0"+(res.month+1).toString(12)).substr(-2); - let dd = ("0"+(res.day+1).toString(12)).substr(-2); - if(res.day==30){ - calenDef = calen7; - let m = ((res.month+1).toString(12)).substr(-2); - return(yyyy+"-"+"S"+m); // ordinal format - } - return(yyyy+"-"+mm+"-"+dd); - } - let m = res.month.toString(12); // cardinal format - let w = parseInt(res.day/6); - let d = res.day%6; - //return(yyyy+"-"+res.month+"-"+w+"-"+d); - return(yyyy+"-"+m+"-"+w+"-"+d); -} - -function writeDozTime(text,def){ - let pts = def.pts; - let x=def.pt0[0]; - let y=def.pt0[1]; - g_t.clear(); - g_t.setFont("Vector",def.size); - for(let i in text){ - if(text[i]=="a"){ g_t.setFontAlign(0,0,2); g_t.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s new - else if(text[i]=="b"){ g_t.setFontAlign(0,0,2); g_t.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s new - else{ g_t.setFontAlign(0,0,0); g_t.drawString(text[i],x,y); } - x = x+def.step[0]; - y = y+def.step[1]; - } -} -function writeDozDate(text,def,colour){ - - dateColour = colour; - let pts = def.pts; - let x=def.pt0[0]; - let y=def.pt0[1]; - g_d.clear(); - g_d.setFont("Vector",def.size); - for(let i in text){ - if(text[i]=="a"){ g_d.setFontAlign(0,0,2); g_d.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s new - else if(text[i]=="b"){ g_d.setFontAlign(0,0,2); g_d.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s new - else{ g_d.setFontAlign(0,0,0); g_d.drawString(text[i],x,y); } - x = x+def.step[0]; - y = y+def.step[1]; - } -} - -// Functions for time mode -function drawTime() -{ - let dt = new Date(); - let date = ""; - let timeDef; - let x = 0; - dt.setDate(dt.getDate()); - if(addTimeDigit){ - x = - 10368*dt.getHours()+172.8*dt.getMinutes()+2.88*dt.getSeconds()+0.00288*dt.getMilliseconds(); - let msg = "00000"+Math.floor(x).toString(12); - let time = msg.substr(-5,3)+"."+msg.substr(-2); - let wait = 347*(1-(x%1)); - timeDef = time6; - } else { - x = - 864*dt.getHours()+14.4*dt.getMinutes()+0.24*dt.getSeconds()+0.00024*dt.getMilliseconds(); - let msg = "0000"+Math.floor(x).toString(12); - let time = msg.substr(-4,3)+"."+msg.substr(-1); - let wait = 4167*(1-(x%1)); - timeDef = time5; - } - if(lastX > x){ res = getDate(dt); } // calculate date once at start-up and once when turning over to a new day - date = formatDate(res,dateFormat); - if(dt2200)) { - } else { - // We have a GPS time. Set time - setTime(g.time.getTime()/1000); - } - }); - Bangle.setGPSPower(1,"time"); - setTimeout(fixTime, 10*60*1000); // every 10 minutes -} -// Start time fixing with GPS on next 10 minute interval -setTimeout(fixTime, ((60-(new Date()).getMinutes()) % 10) * 60 * 1000); From d689849f256decbfde076d74f7c51988b11a8d60 Mon Sep 17 00:00:00 2001 From: numerist Date: Fri, 17 Dec 2021 23:26:17 -0500 Subject: [PATCH 009/105] Update apps.json --- apps.json | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/apps.json b/apps.json index 1c8f1fff8..df7c28af6 100644 --- a/apps.json +++ b/apps.json @@ -3195,18 +3195,3 @@ ] } ] -}, -{ "id": "doztime2", - "name": "Dozenal Time 2", - "shortName":"Dozenal Time 2", - "icon": "app.png", - "version":"0.01", - "description": "A dozenal Holocene calendar and dozenal diurnal clock for Bangle.js2", - "tags": "clock", - "type":"clock" - "storage": [ - {"name":"doztime2.app.js","url":"app.js"}, - {"name":"doztime2.img","url":"app2-icon.js","evaluate":true} - ] -} -] From 514bd0e92c1de30b999390beb6dc615e9fcad047 Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 18:59:52 -0500 Subject: [PATCH 010/105] Delete app2-icon.js --- app2-icon.js | 1 - 1 file changed, 1 deletion(-) delete mode 100644 app2-icon.js diff --git a/app2-icon.js b/app2-icon.js deleted file mode 100644 index 19e81c45d..000000000 --- a/app2-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("lEowggdkUiCKIADCJcCkUjmYACmUikAlKB4ImDAoQSJkYhBFAQECAQI5HBQU//4AC+YUCHowzBCQfzAYYKCEw8vEgYqD+QoGgQbBHAYADCwIoBCYkiEwhPEBAIoBHgY6BExHyHwQhBFAQ6BkYTHDgcyHgcCHRZlDCYQsBTYg6GDAJQDPoI6LAAIPBCYRiHHQhkDCYRiHHQhkCCYKKBCYzzBA4yMBCYTVEGYITEBYITZHY5PHUAJjITIJjHRZINBIYoTDWZAoFWYbbJFALbHgUyX4oPDXIcjMQITBmZkHFYszCYZkJMQoTCKAQ8IHQZOCHgYoKkQ6DHgYoEcIgmBHQg8CFAIPCCYfzBQQSEFAbrFCQImHFAQUCkczmYECAQISGHoYzBAAQFCCRA9BEwYoDHI4pFAAgRLCooRPABg=")) From 6e720393f657e9d5d29de4925381ddb5c1155839 Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 19:02:15 -0500 Subject: [PATCH 011/105] Create doztime2.app.js --- apps/doztime2.app.js | 244 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 apps/doztime2.app.js diff --git a/apps/doztime2.app.js b/apps/doztime2.app.js new file mode 100644 index 000000000..855ec9aaf --- /dev/null +++ b/apps/doztime2.app.js @@ -0,0 +1,244 @@ +// Positioning values for graphics buffers +const g_height = 80; // total graphics height +const g_x_off = 0; // position from left was 16, then 8 here +const g_y_off = (184 - g_height)/2; // vertical center for graphics region was 240 +const g_width = 240 - 2 * g_x_off; // total graphics width +const g_height_d = 28; // height of date region was 32 +const g_y_off_d = 0; // y position of date region within graphics region +const spacing = 0; // space between date and time in graphics region +const g_y_off_t = g_y_off_d + g_height_d + spacing; // y position of time within graphics region +const g_height_t = 44; // height of time region was 48 + +// Other vars +const A1 = [30,30,30,30,31,31,31,31,31,31,30,30]; +const B1 = [30,30,30,30,30,31,31,31,31,31,30,30]; +const B2 = [30,30,30,30,31,31,31,31,31,30,30,30]; +const timeColour = "#ffffff"; +const dateColours = ["#ff0000","#ffa500","#ffff00","#00b800","#8383ff","#ff00ff","#ff0080"]; //blue was 0000ff +const calen10 = {"size":26,"pt0":[18-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for usual calendar line ft w 32, 32-g, step 20 +const calen7 = {"size":26,"pt0":[48-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for S-day calendar line ft w 32, 62-g, step 20 +const time5 = {"size":42,"pt0":[39-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for lull time line ft w 48, 64-g, step 30 +const time6 = {"size":42,"pt0":[26-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for twinkling time line ft w 48, 48-g, step 30 +const baseYear = 11584; +const baseDate = Date(2020,11,21); // month values run from 0 to 11 +let accum = new Date(baseDate.getTime()); +let sequence = []; +let timeActiveUntil; +let addTimeDigit = false; +let dateFormat = false; +let lastX = 999999999; +let res = {}; +//var last_time_log = 0; + +var drawtime_timeout; + +// Date and time graphics buffers +var dateColour = "#ffffff"; // override later +var timeColour2 = timeColour; +var g_d = Graphics.createArrayBuffer(g_width,g_height_d,1,{'msb':true}); +var g_t = Graphics.createArrayBuffer(g_width,g_height_t,1,{'msb':true}); +// Set screen mode and function to write graphics buffers +//Bangle.setLCDMode(); +g.clear(); // start with blank screen +g.flip = function() +{ + g.setBgColor(0,0,0); + g.setColor(dateColour); + g.drawImage( + { + width:g_width, + height:g_height_d, + buffer:g_d.buffer + }, g_x_off, g_y_off + g_y_off_d); + g.setColor(timeColour2); + g.drawImage( + { + width:g_width, + height:g_height_t, + buffer:g_t.buffer + }, g_x_off, g_y_off + g_y_off_t); +}; + +setWatch(function(){ modeTime(); }, BTN, {repeat:true} ); //was BTN1 +setWatch(function(){ Bangle.showLauncher(); }, BTN, { repeat: false, edge: "falling" }); //was BTN2 +//setWatch(function(){ modeWeather(); }, BTN3, {repeat:true}); +//setWatch(function(){ toggleTimeDigits(); }, BTN4, {repeat:true}); +//setWatch(function(){ toggleDateFormat(); }, BTN5, {repeat:true}); + +Bangle.on('touch', function(button, xy) { //from Gordon Williams + if (button==1) toggleTimeDigits(); + if (button==2) toggleDateFormat(); +}); + +function buildSequence(targ){ + for(let i=0;i n > dt)-1; + let year = baseYear+parseInt(index/12); + let month = index % 12; + let day = parseInt((dt-sequence[index])/86400000); + let colour = dateColours[day % 6]; + if(day==30){ colour=dateColours[6]; } + return({"year":year,"month":month,"day":day,"colour":colour}); +} +function toggleTimeDigits(){ + addTimeDigit = !addTimeDigit; + modeTime(); +} +function toggleDateFormat(){ + dateFormat = !dateFormat; + modeTime(); +} +function formatDate(res,dateFormat){ + let yyyy = res.year.toString(12); + calenDef = calen10; + if(!dateFormat){ //ordinal format + let mm = ("0"+(res.month+1).toString(12)).substr(-2); + let dd = ("0"+(res.day+1).toString(12)).substr(-2); + if(res.day==30){ + calenDef = calen7; + let m = ((res.month+1).toString(12)).substr(-2); + return(yyyy+"-"+"S"+m); // ordinal format + } + return(yyyy+"-"+mm+"-"+dd); + } + let m = res.month.toString(12); // cardinal format + let w = parseInt(res.day/6); + let d = res.day%6; + //return(yyyy+"-"+res.month+"-"+w+"-"+d); + return(yyyy+"-"+m+"-"+w+"-"+d); +} + +function writeDozTime(text,def){ + let pts = def.pts; + let x=def.pt0[0]; + let y=def.pt0[1]; + g_t.clear(); + g_t.setFont("Vector",def.size); + for(let i in text){ + if(text[i]=="a"){ g_t.setFontAlign(0,0,2); g_t.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s are new + else if(text[i]=="b"){ g_t.setFontAlign(0,0,2); g_t.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s are new + else{ g_t.setFontAlign(0,0,0); g_t.drawString(text[i],x,y); } + x = x+def.step[0]; + y = y+def.step[1]; + } +} +function writeDozDate(text,def,colour){ + + dateColour = colour; + let pts = def.pts; + let x=def.pt0[0]; + let y=def.pt0[1]; + g_d.clear(); + g_d.setFont("Vector",def.size); + for(let i in text){ + if(text[i]=="a"){ g_d.setFontAlign(0,0,2); g_d.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s new + else if(text[i]=="b"){ g_d.setFontAlign(0,0,2); g_d.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s new + else{ g_d.setFontAlign(0,0,0); g_d.drawString(text[i],x,y); } + x = x+def.step[0]; + y = y+def.step[1]; + } +} + +// Functions for time mode +function drawTime() +{ + let dt = new Date(); + let date = ""; + let timeDef; + let x = 0; + dt.setDate(dt.getDate()); + if(addTimeDigit){ + x = + 10368*dt.getHours()+172.8*dt.getMinutes()+2.88*dt.getSeconds()+0.00288*dt.getMilliseconds(); + let msg = "00000"+Math.floor(x).toString(12); + let time = msg.substr(-5,3)+"."+msg.substr(-2); + let wait = 347*(1-(x%1)); + timeDef = time6; + } else { + x = + 864*dt.getHours()+14.4*dt.getMinutes()+0.24*dt.getSeconds()+0.00024*dt.getMilliseconds(); + let msg = "0000"+Math.floor(x).toString(12); + let time = msg.substr(-4,3)+"."+msg.substr(-1); + let wait = 4167*(1-(x%1)); + timeDef = time5; + } + if(lastX > x){ res = getDate(dt); } // calculate date once at start-up and once when turning over to a new day + date = formatDate(res,dateFormat); + if(dt2200)) { + } else { + // We have a GPS time. Set time + setTime(g.time.getTime()/1000); + } + }); + Bangle.setGPSPower(1,"time"); + setTimeout(fixTime, 10*60*1000); // every 10 minutes +} +// Start time fixing with GPS on next 10 minute interval +setTimeout(fixTime, ((60-(new Date()).getMinutes()) % 10) * 60 * 1000); From eba6ef6524bec5db94d077882a1bb3666f2dd169 Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 19:05:18 -0500 Subject: [PATCH 012/105] Create app.js --- apps/doztime2/app.js | 244 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 apps/doztime2/app.js diff --git a/apps/doztime2/app.js b/apps/doztime2/app.js new file mode 100644 index 000000000..855ec9aaf --- /dev/null +++ b/apps/doztime2/app.js @@ -0,0 +1,244 @@ +// Positioning values for graphics buffers +const g_height = 80; // total graphics height +const g_x_off = 0; // position from left was 16, then 8 here +const g_y_off = (184 - g_height)/2; // vertical center for graphics region was 240 +const g_width = 240 - 2 * g_x_off; // total graphics width +const g_height_d = 28; // height of date region was 32 +const g_y_off_d = 0; // y position of date region within graphics region +const spacing = 0; // space between date and time in graphics region +const g_y_off_t = g_y_off_d + g_height_d + spacing; // y position of time within graphics region +const g_height_t = 44; // height of time region was 48 + +// Other vars +const A1 = [30,30,30,30,31,31,31,31,31,31,30,30]; +const B1 = [30,30,30,30,30,31,31,31,31,31,30,30]; +const B2 = [30,30,30,30,31,31,31,31,31,30,30,30]; +const timeColour = "#ffffff"; +const dateColours = ["#ff0000","#ffa500","#ffff00","#00b800","#8383ff","#ff00ff","#ff0080"]; //blue was 0000ff +const calen10 = {"size":26,"pt0":[18-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for usual calendar line ft w 32, 32-g, step 20 +const calen7 = {"size":26,"pt0":[48-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for S-day calendar line ft w 32, 62-g, step 20 +const time5 = {"size":42,"pt0":[39-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for lull time line ft w 48, 64-g, step 30 +const time6 = {"size":42,"pt0":[26-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for twinkling time line ft w 48, 48-g, step 30 +const baseYear = 11584; +const baseDate = Date(2020,11,21); // month values run from 0 to 11 +let accum = new Date(baseDate.getTime()); +let sequence = []; +let timeActiveUntil; +let addTimeDigit = false; +let dateFormat = false; +let lastX = 999999999; +let res = {}; +//var last_time_log = 0; + +var drawtime_timeout; + +// Date and time graphics buffers +var dateColour = "#ffffff"; // override later +var timeColour2 = timeColour; +var g_d = Graphics.createArrayBuffer(g_width,g_height_d,1,{'msb':true}); +var g_t = Graphics.createArrayBuffer(g_width,g_height_t,1,{'msb':true}); +// Set screen mode and function to write graphics buffers +//Bangle.setLCDMode(); +g.clear(); // start with blank screen +g.flip = function() +{ + g.setBgColor(0,0,0); + g.setColor(dateColour); + g.drawImage( + { + width:g_width, + height:g_height_d, + buffer:g_d.buffer + }, g_x_off, g_y_off + g_y_off_d); + g.setColor(timeColour2); + g.drawImage( + { + width:g_width, + height:g_height_t, + buffer:g_t.buffer + }, g_x_off, g_y_off + g_y_off_t); +}; + +setWatch(function(){ modeTime(); }, BTN, {repeat:true} ); //was BTN1 +setWatch(function(){ Bangle.showLauncher(); }, BTN, { repeat: false, edge: "falling" }); //was BTN2 +//setWatch(function(){ modeWeather(); }, BTN3, {repeat:true}); +//setWatch(function(){ toggleTimeDigits(); }, BTN4, {repeat:true}); +//setWatch(function(){ toggleDateFormat(); }, BTN5, {repeat:true}); + +Bangle.on('touch', function(button, xy) { //from Gordon Williams + if (button==1) toggleTimeDigits(); + if (button==2) toggleDateFormat(); +}); + +function buildSequence(targ){ + for(let i=0;i n > dt)-1; + let year = baseYear+parseInt(index/12); + let month = index % 12; + let day = parseInt((dt-sequence[index])/86400000); + let colour = dateColours[day % 6]; + if(day==30){ colour=dateColours[6]; } + return({"year":year,"month":month,"day":day,"colour":colour}); +} +function toggleTimeDigits(){ + addTimeDigit = !addTimeDigit; + modeTime(); +} +function toggleDateFormat(){ + dateFormat = !dateFormat; + modeTime(); +} +function formatDate(res,dateFormat){ + let yyyy = res.year.toString(12); + calenDef = calen10; + if(!dateFormat){ //ordinal format + let mm = ("0"+(res.month+1).toString(12)).substr(-2); + let dd = ("0"+(res.day+1).toString(12)).substr(-2); + if(res.day==30){ + calenDef = calen7; + let m = ((res.month+1).toString(12)).substr(-2); + return(yyyy+"-"+"S"+m); // ordinal format + } + return(yyyy+"-"+mm+"-"+dd); + } + let m = res.month.toString(12); // cardinal format + let w = parseInt(res.day/6); + let d = res.day%6; + //return(yyyy+"-"+res.month+"-"+w+"-"+d); + return(yyyy+"-"+m+"-"+w+"-"+d); +} + +function writeDozTime(text,def){ + let pts = def.pts; + let x=def.pt0[0]; + let y=def.pt0[1]; + g_t.clear(); + g_t.setFont("Vector",def.size); + for(let i in text){ + if(text[i]=="a"){ g_t.setFontAlign(0,0,2); g_t.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s are new + else if(text[i]=="b"){ g_t.setFontAlign(0,0,2); g_t.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s are new + else{ g_t.setFontAlign(0,0,0); g_t.drawString(text[i],x,y); } + x = x+def.step[0]; + y = y+def.step[1]; + } +} +function writeDozDate(text,def,colour){ + + dateColour = colour; + let pts = def.pts; + let x=def.pt0[0]; + let y=def.pt0[1]; + g_d.clear(); + g_d.setFont("Vector",def.size); + for(let i in text){ + if(text[i]=="a"){ g_d.setFontAlign(0,0,2); g_d.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s new + else if(text[i]=="b"){ g_d.setFontAlign(0,0,2); g_d.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s new + else{ g_d.setFontAlign(0,0,0); g_d.drawString(text[i],x,y); } + x = x+def.step[0]; + y = y+def.step[1]; + } +} + +// Functions for time mode +function drawTime() +{ + let dt = new Date(); + let date = ""; + let timeDef; + let x = 0; + dt.setDate(dt.getDate()); + if(addTimeDigit){ + x = + 10368*dt.getHours()+172.8*dt.getMinutes()+2.88*dt.getSeconds()+0.00288*dt.getMilliseconds(); + let msg = "00000"+Math.floor(x).toString(12); + let time = msg.substr(-5,3)+"."+msg.substr(-2); + let wait = 347*(1-(x%1)); + timeDef = time6; + } else { + x = + 864*dt.getHours()+14.4*dt.getMinutes()+0.24*dt.getSeconds()+0.00024*dt.getMilliseconds(); + let msg = "0000"+Math.floor(x).toString(12); + let time = msg.substr(-4,3)+"."+msg.substr(-1); + let wait = 4167*(1-(x%1)); + timeDef = time5; + } + if(lastX > x){ res = getDate(dt); } // calculate date once at start-up and once when turning over to a new day + date = formatDate(res,dateFormat); + if(dt2200)) { + } else { + // We have a GPS time. Set time + setTime(g.time.getTime()/1000); + } + }); + Bangle.setGPSPower(1,"time"); + setTimeout(fixTime, 10*60*1000); // every 10 minutes +} +// Start time fixing with GPS on next 10 minute interval +setTimeout(fixTime, ((60-(new Date()).getMinutes()) % 10) * 60 * 1000); From 3e7ac2a2491b80daaaf86f24664fb2f0da45b5c7 Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 19:07:58 -0500 Subject: [PATCH 013/105] Add files via upload --- apps/doztime2/app.png | Bin 0 -> 2500 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/doztime2/app.png diff --git a/apps/doztime2/app.png b/apps/doztime2/app.png new file mode 100644 index 0000000000000000000000000000000000000000..363537a58cf0ba55de061d555c4501f34d53279e GIT binary patch literal 2500 zcmV;#2|MxUxKLUMAqh<|nF-|;LRvx^$2fKdl30=* zTf&MZTh`URdw2W65B!j0C#D_#-|pSB=l<^Qo;|w<_>POrrE`5lbD2r36_OB@93%w5 zHPSQyK_ZYuha%`FJDyo}=Kls*_vo&2L6yx^!X_@nLVyTWQw+P!CdpKxfB>_YrRQ=y zryD9D2q99t5WESDZQK3ay6*o8V0}Y#858_TB4IO?sVMRJRBy2tg@uKXBq?tn&N))4 zG?K|A;=Kve;ubg;FIfzYd!Jw1^Q{5aJ-+7w0552&s#H`|sD7UhTyP|lN%Z%ppl37C z^&E000|01>3{A7a;V6LHQv{F43yBcK;|X*|It{~MhJf|R?x$~kaZZ4@HNNeT4B7-D z)`!Dk5)1|iV+_$q4Dm!9mStfeV0;NyJ%6R>U260jdr2CI|g@w z4I5U@$MUKYcnfV~eKNWM04T7jWAFOXIu0H0#r6+QB9+M@5C|X?3SwYj5MQ(%H!O=C zA+oV*XXE<*Sp(kI__l*G`F%x}YinvRQzc14dwT~=J&U_;x&*72g(1_4>n@`kIQmr= z0HF4wzywGDFd4@?hdS}vdtXA;?5M1&1hXt0YiZ3HX6`>~CUZl+k<7cgC4)9mN^5Is zFH<=eXlZGIOBLAi%WH7kig{DuX7ksIETQh2`PlM{Yv52gT8 zA9kCHit=LIczFO{oJ!)v$u5+Ym%-z4(|EkMs`9#@b$5L9*Uu*m*7%3|hUPLN$P1xx zn7EuSoai_Kw?n~WcU}&=CZA)>hE-rwr@#TgKMx+o!Oz>^un(_ShbH6kyDx{=rK0_K zJDg4@f}xNEB5kQ_*i|wuAQSvaRa2BuFhC;F7;@PmJbBNRaM)&sn@(RRQ`ouh09Idr zHG-wz8+&ipWc+616)^NHB9R!vp&(RMQ2_cxUckCXca;+fn=2|RRK^&(yJNWPrb|%b zaa=H*5CU7b?}M+{jn&s*HKo1O>%g5qycpfxT`&v-72&W(K<=w=XfB%qD5$cT%2fD$ zK13tKTgmEW;R}WXfPEhw##fOu*tFqCkm;1=4ggratO9PQhFGi%e!mY?rosf4sa$Zx6LD-`O$97>CaBR5}eoleI(PT`fe_G2(J1dqEAH(z(fjD5!Y zFDouUHanauZJH(-IX(0Zpb##Z$`k-hX2EGwX3VXV_3F<3=uZy<0CG8V#;Kj^Uk0-* z0DvsZ6d*2Onp`XeoUmysve_*D-O_PR`^o+@Ivd+78Dkb827r+%CJ?c#u5$pe*=*?P8ya&mTU9Td zhd=!KJ^;XucR$8UuQvk#uBy58oRFjH>C3=AlB@Nc&WRwAF+fg8yOA?g&N&>80<@k^ z&KfMA>TkIg0A>X_s$-|m!tN-5WpNleQza7b7z0!U{e;0nI-Q2wQ-t>R9`vPk6whHV zJRiuul#bJ9QmCvfLpqfLAYdBOL11JJ?s#U^8A*~(^z|j-@pwTg#i6#|3x*rj`kSxC z4a=9{RbPb9xp=8F(rL)D zjPgJ^UfcgAdXhtPhMZ2_eHr}iy)O|61fePlIy)nV;Nr#cm--1CwZ+hA7|e*qx$x<2j6*iO=7%l z-Yiqsu=jOYq3f0|sZ}}WIQ~T&+)f2gY`PMq-uzd9+2-!Z_mScv+t;3q0`T1;p0RVp7_?BBRwOOX}(nX7^RF}(%&dwOR zy1L+TY1r_C1z28Hg5shXN*^g5pC0eUn;)DUj@Cc`;cyTG>5yK5^U{PtidB!xpk7>0pptP5W!;;<}^`DI0@p65YnaRHq6k>XL-L{DD^$4;Nc z=`$%%D#7RTBN!Tv)@US(Xe`DB$KTVMnAJ&YUBjOHK%_0IDytRY3f1rT zfeV3TGKo|wh3rrU*{lwe4WH)}nZj Date: Sat, 18 Dec 2021 19:12:14 -0500 Subject: [PATCH 014/105] Create app-icon.js --- apps/doztime2/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/doztime2/app-icon.js diff --git a/apps/doztime2/app-icon.js b/apps/doztime2/app-icon.js new file mode 100644 index 000000000..6154ac923 --- /dev/null +++ b/apps/doztime2/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("lEoxH+AHNYAAQjirwAEFbYkExIAGFTIkEJYoFDFQhMTDIODEQeI1gACxAJDwYpBKSAmDCoNe1nXABGsBwQoQHgRMBJQIhGFoxUBCoYoLGoImDJJBVIFAZRLJwQmJAA+CFwQoCKBSIDEyGsq+zKIijCEzfXq6tFFBR1CrDCGABOBwLMGXQInIOqmtZZGJE4p2CrDhIOpARI1hGCFAgnBA4J1XAAYfDOyzrFPBzQCYp2zOpLJDEASeFryeM1ldq9dB5ggCKATGF1gqJEwInKC4TIGE9R3PFIIQLO4zHSXQIoLY4xQBAwNeE5woMDoKYBE4gIBrAnPFBYfDE4rIDFCOzTwzGFPCwfCOxxQDwdYZJ5XJrGDJwx4DKCYAE2ZOCE44obExZ5EFComNE4KEBFBWsYQ50CC4IbBE5JQDFATMGE4+IJoTEIKJBhDrxJHFoYOCCQQmNFAo8CAoOIJwIABJQIJCwYmSPYgpBe4QABEQQACBYYlSKQgqEAAouDEyoqIKYokZFZIjgADI")) From a82c24c969495a349b251b22d923d857e664a14b Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 19:19:47 -0500 Subject: [PATCH 015/105] Update apps.json --- apps.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps.json b/apps.json index df7c28af6..16b82ba38 100644 --- a/apps.json +++ b/apps.json @@ -3195,3 +3195,20 @@ ] } ] +}, +{ "id":"doztime2", + "name":"Dozenal Time 2", + "shortName":"Dozenal 2", + "icon":"app.png", + "version":"0.01", + "description":"A dozenal Holocene calendar and dozenal diurnal clock for Bangle.js 2", + "tags":"clock", + "type":"clock", + "allow_emulator":true, + "readme": "README.md", + "storage": [ + {"name":"doztime2.app.js","url":"app.js"}, + {"name":"doztime2.img","url":"app-icon.js","evaluate":true} + ] +} +] From 2d5e2dd180fbfcf924e260d148a456ad7187079d Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 19:26:21 -0500 Subject: [PATCH 016/105] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 16b82ba38..556cecc50 100644 --- a/apps.json +++ b/apps.json @@ -3198,7 +3198,7 @@ }, { "id":"doztime2", "name":"Dozenal Time 2", - "shortName":"Dozenal 2", + "shortName":"Dozenal Time 2", "icon":"app.png", "version":"0.01", "description":"A dozenal Holocene calendar and dozenal diurnal clock for Bangle.js 2", From 3e3d7599c5ce5d2e2334fad2a39d4b800dbda95b Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 19:48:41 -0500 Subject: [PATCH 017/105] Update apps.json --- apps.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps.json b/apps.json index 556cecc50..d694e82ed 100644 --- a/apps.json +++ b/apps.json @@ -3205,7 +3205,6 @@ "tags":"clock", "type":"clock", "allow_emulator":true, - "readme": "README.md", "storage": [ {"name":"doztime2.app.js","url":"app.js"}, {"name":"doztime2.img","url":"app-icon.js","evaluate":true} From 0673803d1b42f48241d9fb56a5efba6645119923 Mon Sep 17 00:00:00 2001 From: numerist Date: Sat, 18 Dec 2021 23:10:00 -0500 Subject: [PATCH 018/105] Update app.js --- apps/doztime2/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/doztime2/app.js b/apps/doztime2/app.js index 855ec9aaf..a0ddfd4d0 100644 --- a/apps/doztime2/app.js +++ b/apps/doztime2/app.js @@ -14,7 +14,7 @@ const A1 = [30,30,30,30,31,31,31,31,31,31,30,30]; const B1 = [30,30,30,30,30,31,31,31,31,31,30,30]; const B2 = [30,30,30,30,31,31,31,31,31,30,30,30]; const timeColour = "#ffffff"; -const dateColours = ["#ff0000","#ffa500","#ffff00","#00b800","#8383ff","#ff00ff","#ff0080"]; //blue was 0000ff +const dateColours = ["#ff0000","#ff8000","#ffff00","#00ff00","#0080ff","#ff00ff","#ffffff"]; const calen10 = {"size":26,"pt0":[18-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for usual calendar line ft w 32, 32-g, step 20 const calen7 = {"size":26,"pt0":[48-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for S-day calendar line ft w 32, 62-g, step 20 const time5 = {"size":42,"pt0":[39-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for lull time line ft w 48, 64-g, step 30 From 9189be084c9381bd6842585ce84e65aa49a5b1ab Mon Sep 17 00:00:00 2001 From: numerist Date: Sun, 19 Dec 2021 10:11:30 -0500 Subject: [PATCH 019/105] Update app.js --- apps/doztime2/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/doztime2/app.js b/apps/doztime2/app.js index a0ddfd4d0..f57fc386c 100644 --- a/apps/doztime2/app.js +++ b/apps/doztime2/app.js @@ -17,8 +17,8 @@ const timeColour = "#ffffff"; const dateColours = ["#ff0000","#ff8000","#ffff00","#00ff00","#0080ff","#ff00ff","#ffffff"]; const calen10 = {"size":26,"pt0":[18-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for usual calendar line ft w 32, 32-g, step 20 const calen7 = {"size":26,"pt0":[48-g_x_off,16],"step":[16,0],"dx":-4.5,"dy":-4.5}; // positioning for S-day calendar line ft w 32, 62-g, step 20 -const time5 = {"size":42,"pt0":[39-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for lull time line ft w 48, 64-g, step 30 -const time6 = {"size":42,"pt0":[26-g_x_off,24],"step":[26,0],"dx":-6.5,"dy":-6.5}; // positioning for twinkling time line ft w 48, 48-g, step 30 +const time5 = {"size":36,"pt0":[46-g_x_off,24],"step":[22,0],"dx":-6.5,"dy":-6.5}; // positioning for lull time line ft w 48, 64-g, step 30 +const time6 = {"size":36,"pt0":[36-g_x_off,24],"step":[22,0],"dx":-6.5,"dy":-6.5}; // positioning for twinkling time line ft w 48, 48-g, step 30 const baseYear = 11584; const baseDate = Date(2020,11,21); // month values run from 0 to 11 let accum = new Date(baseDate.getTime()); From dd9520d1862f68573114c941787c9dc8d5de530b Mon Sep 17 00:00:00 2001 From: numerist Date: Sun, 19 Dec 2021 15:04:17 -0500 Subject: [PATCH 020/105] Update app.js --- apps/doztime2/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/doztime2/app.js b/apps/doztime2/app.js index f57fc386c..ac67954d3 100644 --- a/apps/doztime2/app.js +++ b/apps/doztime2/app.js @@ -134,8 +134,8 @@ function writeDozTime(text,def){ g_t.clear(); g_t.setFont("Vector",def.size); for(let i in text){ - if(text[i]=="a"){ g_t.setFontAlign(0,0,2); g_t.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s are new - else if(text[i]=="b"){ g_t.setFontAlign(0,0,2); g_t.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s are new + if(text[i]=="a"){ g_t.setFontAlign(0,0,2); g_t.drawString("2",x+2+def.dx,y+1+def.dy); } //+1s are new + else if(text[i]=="b"){ g_t.setFontAlign(0,0,2); g_t.drawString("3",x+2+def.dx,y+1+def.dy); } //+1s are new else{ g_t.setFontAlign(0,0,0); g_t.drawString(text[i],x,y); } x = x+def.step[0]; y = y+def.step[1]; From 200f9e19b58c6691b8ba5cffe4a61c9ee7fedaeb Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sun, 19 Dec 2021 21:09:00 +0000 Subject: [PATCH 021/105] Pastel: added weather, change to queueDraw() update once per minute --- apps/pastel/pastel.app.js | 139 +++++++++++++++++++++++++++------ apps/pastel/pastel.settings.js | 13 ++- 2 files changed, 124 insertions(+), 28 deletions(-) diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index aa4f6abf8..e0c7df831 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -1,10 +1,22 @@ var SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); require("f_latosmall").add(Graphics); +const storage = require('Storage'); +const locale = require("locale"); const SETTINGS_FILE = "pastel.json"; const LOCATION_FILE = "mylocation.json"; let settings; let location; +// cloud, sun, partSun, snow, rain, storm, error +// create 1 bit, max contrast, brightness set to 85 +var cloudIcon = require("heatshrink").decompress(atob("kEggIfcj+AAYM/8ADBuFwAYPAmADCCAMBwEf8ADBhFwg4aBnEPAYMYjAVBhgDDDoQDHCYc4jwDB+EP///FYIDBMTgA==")); +var sunIcon = require("heatshrink").decompress(atob("kEggILIgOAAZkDAYPAgeBwPAgIFBBgPhw4TBp/yAYMcnADBnEcAYMwhgDBsEGgE/AYP8AYYLDCYgbDEYYrD8fHIwI7CIYZLDL54AHA==")); +var sunPartIcon = require("heatshrink").decompress(atob("kEggIHEmADJjEwsEAjkw8EAh0B4EAg35wEAgP+CYMDwv8AYMDBAP2g8HgH+g0DBYMMgPwAYX8gOMEwMG3kAg8OvgSBjg2BgcYGQIcBAY5CBg0Av//HAM///4MYgNBEIMOCoUMDoUAnBwGkEA")); +var snowIcon = require("heatshrink").decompress(atob("kEggITQj/AAYM98ADBsEwAYPAjADCj+AgOAj/gAYMIuEHwEAjEPAYQVChk4AYQhCAYcYBYQTDnEPgEB+EH///IAQACE4IAB8EICIPghwDB4EeBYNAjgDBg8EAYQYCg4bCgZuFA==")); +var rainIcon = require("heatshrink").decompress(atob("kEggIPMh+AAYM/8ADBuFwAYPgmADB4EbAYOAj/ggOAhnwg4aBnAeCjEcCIMMjADCDoQDHjAPCnAXCuEP///8EDAYJECAAXBwkAgPDhwDBwUMgEEhkggEOjFgFgMQLYQAOA==")); +var errIcon = require("heatshrink").decompress(atob("kEggILIgOAAYsD4ADBg/gAYMGsADBhkwAYsYjADCjgDBmEMAYNxxwDBsOGAYPBwYDEgOBwOAgYDB4EDHYPAgwDBsADDhgDBFIcwjAHBjE4AYMcmADBhhNCKIcG/4AGOw4A==")); + + function loadSettings() { settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; settings.grid = settings.grid||false; @@ -93,6 +105,50 @@ function prevInfo() { } } + +/** +Choose weather icon to display based on condition. +Based on function from the Bangle weather app so it should handle all of the conditions +sent from gadget bridge. +*/ +function chooseIcon(condition) { + condition = condition.toLowerCase(); + if (condition.includes("thunderstorm")) return stormIcon; + if (condition.includes("freezing")||condition.includes("snow")|| + condition.includes("sleet")) { + return snowIcon; + } + if (condition.includes("drizzle")|| + condition.includes("shower")) { + return rainIcon; + } + if (condition.includes("rain")) return rainIcon; + if (condition.includes("clear")) return sunIcon; + if (condition.includes("few clouds")) return partSunIcon; + if (condition.includes("scattered clouds")) return cloudIcon; + if (condition.includes("clouds")) return cloudIcon; + if (condition.includes("mist") || + condition.includes("smoke") || + condition.includes("haze") || + condition.includes("sand") || + condition.includes("dust") || + condition.includes("fog") || + condition.includes("ash") || + condition.includes("squalls") || + condition.includes("tornado")) { + return cloudIcon; + } + return cloudIcon; +} + +/** +Get weather stored in json file by weather app. +*/ +function getWeather() { + let jsonWeather = storage.readJSON('weather.json'); + return jsonWeather; +} + var mm_prev = "xx"; function draw() { @@ -114,7 +170,25 @@ function draw() { var h = g.getHeight(); var x = (g.getWidth()/2); var y = (g.getHeight()/3); - + + var weatherJson = getWeather(); + var w_temp; + var w_icon; + var w_wind; + + if (settings.weather && weatherJson && weatherJson.weather) { + var currentWeather = weatherJson.weather; + const temp = locale.temp(currentWeather.temp-273.15).match(/^(\D*\d*)(.*)$/); + w_temp = temp[1] + " " + temp[2]; + w_icon = chooseIcon(currentWeather.txt); + const wind = locale.speed(currentWeather.wind).match(/^(\D*\d*)(.*)$/); + w_wind = wind[1] + " " + wind[2] + " " + (currentWeather.wrose||'').toUpperCase(); + } else { + w_temp = "Err"; + w_wind = "???"; + w_icon = errIcon; + } + g.reset(); if (process.env.HWVERSION == 1) { @@ -139,6 +213,18 @@ function draw() { g.setColor(g.theme.fg); + // draw weather line + if (settings.weather) { + g.drawImage(w_icon, (w/2) - 40, 24); + g.setFontLatoSmall(); + g.setFontAlign(-1,0); // left aligned + if (drawCount % 2 == 0) + g.drawString(w_temp, (w/2) + 6, 24 + ((y - 24)/2)); + else + g.drawString( (w_wind.split(' ').slice(0, 2).join(' ')), (w/2) + 6, 24 + ((y - 24)/2)); + // display first 2 words of the wind string eg '4 mph' + } + if (settings.font == "Architect") g.setFontArchitect(); else if (settings.font == "GochiHand") @@ -161,36 +247,39 @@ function draw() { // for the colon g.setFontAlign(0,-1); // centre aligned - - if (d.getSeconds()&1) { - g.drawString(":", x,y); - } else { - // on bangle 1, we are not using clearRect(), hide : by printing over it in reverse color - if (process.env.HWVERSION == 1) { - g.setColor(g.theme.bg); - g.drawString(":", x,y); - g.setColor(g.theme.fg); - } - } - + g.drawString(":", x,y); g.setFontLatoSmall(); g.setFontAlign(0, -1); g.drawString((infoData[infoMode].calc()), w/2, h - 24 - 24); - if (drawCount % 3600 == 0) + // recalc sunrise / sunset every hour + if (drawCount % 60 == 0) updateSunRiseSunSet(new Date(), location.lat, location.lon); drawCount++; + queueDraw(); } -// Only update when display turns on -if (process.env.BOARD!="SMAQ3") // hack for Q3 which is always-on -Bangle.on('lcdPower', function(on) { - if (secondInterval) - clearInterval(secondInterval); - secondInterval = undefined; - if (on) - secondInterval = setInterval(draw, 1000); - draw(); +// timeout used to update every minute +var drawTimeout; + +// schedule a draw for the next minute +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + nextInfo(); + draw(); + }, 60000 - (Date.now() % 60000)); +} + +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } }); Bangle.setUI("clockupdown", btn=> { @@ -204,8 +293,6 @@ loadFonts(); loadLocation(); g.clear(); -var secondInterval = setInterval(draw, 1000); -draw(); - Bangle.loadWidgets(); Bangle.drawWidgets(); +draw(); diff --git a/apps/pastel/pastel.settings.js b/apps/pastel/pastel.settings.js index fad36964d..bf83fa7c2 100644 --- a/apps/pastel/pastel.settings.js +++ b/apps/pastel/pastel.settings.js @@ -4,6 +4,7 @@ // initialize with default settings... let s = { 'grid': false, + 'weather': false, 'font': "Lato" } @@ -39,8 +40,16 @@ value: s.grid, format: () => (s.grid ? 'Yes' : 'No'), onchange: () => { - s.grid = !s.grid - save() + s.grid = !s.grid; + save(); + }, + }, + 'Show Weather': { + value: s.weather, + format: () => (s.weather ? 'Yes' : 'No'), + onchange: () => { + s.weather = !s.weather; + save(); }, } }) From 9d180064f54ca3e5decebca46e990a50c9b88661 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sun, 19 Dec 2021 22:25:18 +0000 Subject: [PATCH 022/105] Pastel: added dependancy on weather, fix issues on a B1, extend support to B1 for Pebble and Widbata --- apps.json | 8 ++++---- apps/pastel/ChangeLog | 1 + apps/pastel/pastel.app.js | 16 ++-------------- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/apps.json b/apps.json index 909c4793a..214b8b350 100644 --- a/apps.json +++ b/apps.json @@ -4210,10 +4210,10 @@ "id": "pastel", "name": "Pastel Clock", "shortName": "Pastel", - "version": "0.09", + "version": "0.10", "description": "A Configurable clock with custom fonts and background. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times", "icon": "pastel.png", - "dependencies": {"mylocation":"app", "widpedom":"app"}, + "dependencies": {"mylocation":"app", "widpedom":"app","weather":"app"}, "screenshots": [{"url":"screenshot_pastel.png"}], "type": "clock", "tags": "clock", @@ -4733,7 +4733,7 @@ "screenshots": [{"url":"pebble_screenshot.png"}], "type": "clock", "tags": "clock", - "supports": ["BANGLEJS2"], + "supports": ["BANGLEJS", "BANGLEJS2"], "storage": [ {"name":"pebble.app.js","url":"pebble.app.js"}, {"name":"pebble.settings.js","url":"pebble.settings.js"}, @@ -4767,7 +4767,7 @@ "screenshots": [{"url":"screenshot_widbata_1.png"}], "version":"0.01", "type": "widget", - "supports": ["BANGLEJS2"], + "supports": ["BANGLEJS", "BANGLEJS2"], "readme": "README.md", "description": "Shows the current battery level status in the top right using the clocks colour theme", "tags": "widget,battery", diff --git a/apps/pastel/ChangeLog b/apps/pastel/ChangeLog index afeb305c5..627531f03 100644 --- a/apps/pastel/ChangeLog +++ b/apps/pastel/ChangeLog @@ -7,3 +7,4 @@ 0.07: Added info line that cycles on BTN1/BTN3 (or vitual buttons on a bangle 2) 0.08: Added dependancy on MyLocation 0.09: Added dependancy on Pedometer Widget +0.10: Added Weather line, fixed issues on a Bangle 1, update every minute diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index e0c7df831..db60a2738 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -149,8 +149,6 @@ function getWeather() { return jsonWeather; } -var mm_prev = "xx"; - function draw() { var d = new Date(); var da = d.toString().split(" "); @@ -190,18 +188,8 @@ function draw() { } g.reset(); - - if (process.env.HWVERSION == 1) { - // avoid flicker on a bangle 1 by comparing with previous minute - if (mm_prev != mm) { - mm_prev = mm; - g.clearRect(0, 30, w, h - 24); - } - } else { - // on a b2 safe to just clear anyway as there is no flicker - g.clearRect(0, 30, w, h - 24); - } - + g.clearRect(0, 30, w, h - 24); + // draw a grid like graph paper if (settings.grid && process.env.HWVERSION !=1) { g.setColor("#0f0"); From 6e48dc66f1576a690c54f143b52ae31e053fdd5a Mon Sep 17 00:00:00 2001 From: numerist Date: Sun, 19 Dec 2021 20:47:47 -0500 Subject: [PATCH 023/105] Update app.js --- apps/doztime2/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/doztime2/app.js b/apps/doztime2/app.js index ac67954d3..313ad9e48 100644 --- a/apps/doztime2/app.js +++ b/apps/doztime2/app.js @@ -150,8 +150,8 @@ function writeDozDate(text,def,colour){ g_d.clear(); g_d.setFont("Vector",def.size); for(let i in text){ - if(text[i]=="a"){ g_d.setFontAlign(0,0,2); g_d.drawString("2",x+1+def.dx,y+1+def.dy); } //+1s new - else if(text[i]=="b"){ g_d.setFontAlign(0,0,2); g_d.drawString("3",x+1+def.dx,y+1+def.dy); } //+1s new + if(text[i]=="a"){ g_d.setFontAlign(0,0,2); g_d.drawString("2",x+2+def.dx,y+1+def.dy); } //+1s new + else if(text[i]=="b"){ g_d.setFontAlign(0,0,2); g_d.drawString("3",x+2+def.dx,y+1+def.dy); } //+1s new else{ g_d.setFontAlign(0,0,0); g_d.drawString(text[i],x,y); } x = x+def.step[0]; y = y+def.step[1]; From 1f48b21540706dad021ff6706d0b9d6393afaa94 Mon Sep 17 00:00:00 2001 From: numerist Date: Mon, 20 Dec 2021 11:05:36 -0500 Subject: [PATCH 024/105] Update apps.json --- apps.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps.json b/apps.json index 7cc91cae5..d099146ea 100644 --- a/apps.json +++ b/apps.json @@ -4716,8 +4716,6 @@ {"name":"doztime.app.js","url":"app.js"}, {"name":"doztime.img","url":"app-icon.js","evaluate":true} ] -} -] }, { "id":"doztime2", "name":"Dozenal Time 2", @@ -4732,7 +4730,7 @@ {"name":"doztime2.app.js","url":"app.js"}, {"name":"doztime2.img","url":"app-icon.js","evaluate":true} ] -} +}, { "id": "mylocation", "name": "My Location", "shortName":"My Location", From 3ceef9afd5a38054f60f70a9d23bb26035479a35 Mon Sep 17 00:00:00 2001 From: numerist Date: Mon, 20 Dec 2021 15:42:36 -0500 Subject: [PATCH 025/105] Update apps.json --- apps.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps.json b/apps.json index d099146ea..5dc306a6f 100644 --- a/apps.json +++ b/apps.json @@ -4710,6 +4710,7 @@ "description":"A dozenal Holocene calendar and dozenal diurnal clock", "tags":"clock", "type":"clock", + "supports":["BANGLEJS"], "allow_emulator":true, "readme": "README.md", "storage": [ @@ -4725,6 +4726,7 @@ "description":"A dozenal Holocene calendar and dozenal diurnal clock for Bangle.js 2", "tags":"clock", "type":"clock", + "supports":["BANGLEJS2"], "allow_emulator":true, "storage": [ {"name":"doztime2.app.js","url":"app.js"}, From d0eb56597670be1db6905d66a436cbbe84d4153d Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Fri, 24 Dec 2021 12:31:00 +0100 Subject: [PATCH 026/105] grocery: Prepare porting to BJS2 --- apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index e5e9f8f02..261c9aeb7 100644 --- a/apps.json +++ b/apps.json @@ -1749,8 +1749,9 @@ "icon": "grocery.png", "type": "app", "tags": "tool,outdoors,shopping,list", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS", "BANGLEJS2"], "custom": "grocery.html", + "allow_emulator": true, "storage": [ {"name":"grocery.app.js","url":"app.js"}, {"name":"grocery.img","url":"grocery-icon.js","evaluate":true} From 165d1f7b999079aaf98d18ab09b5abdc681f68db Mon Sep 17 00:00:00 2001 From: hughbarney Date: Fri, 24 Dec 2021 12:44:06 +0000 Subject: [PATCH 027/105] Pastel: updated README and screenshots --- apps.json | 4 +-- apps/pastel/README.md | 46 ++++++++++++++++++++++++------ apps/pastel/screenshot_pastel.png | Bin 4014 -> 2993 bytes apps/pastel/weather_icons.png | Bin 0 -> 1506 bytes 4 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 apps/pastel/weather_icons.png diff --git a/apps.json b/apps.json index 214b8b350..a3f2788ee 100644 --- a/apps.json +++ b/apps.json @@ -4214,9 +4214,9 @@ "description": "A Configurable clock with custom fonts and background. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times", "icon": "pastel.png", "dependencies": {"mylocation":"app", "widpedom":"app","weather":"app"}, - "screenshots": [{"url":"screenshot_pastel.png"}], + "screenshots": [{"url":"screenshot_pastel.png"}, {"url":"weather_icons.png"}], "type": "clock", - "tags": "clock", + "tags": "clock, weather, tool", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ diff --git a/apps/pastel/README.md b/apps/pastel/README.md index 66ae0e189..7dbfbe9a1 100644 --- a/apps/pastel/README.md +++ b/apps/pastel/README.md @@ -1,45 +1,73 @@ # Pastel Clock - *a configurable clock with custom fonts and background. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times* + *a configurable clock with custom fonts, background and optional weather icons. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times* * Designed specifically for Bangle 1 and Bangle 2 * A choice of 7 different custom fonts * Supports the Light and Dark themes -* Has a settings menu, change font, enable/disable the grid +* Has a settings menu, change font, enable/disable the grid, weather icons * On Bangle 1 use BTN1,BTN3 to cycle through the info display (Date, ID, Batt %, Ram % etc) * On Bangle 2 touch the top right/top left to cycle through the info display (Date, ID, Batt %, Ram % etc) * Uses mylocation.json from MyLocation app to calculate sunrise and sunset times for your location * Uses pedometer widget to get latest step count +* Use the wesather widget to get weather status * Dependant apps are installed when Pastel installs I came up with the name Pastel due to the shade of the grid background. Written by: [Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) -## Lato + +## Weather Support + + +![](screenshot_pastel.png) + +Pastel installs the weather app and weather widget. You may want to +hide the weather widget display, this can be done through the weather +widget settings. You should first get the weather app working. If +the weather App is not working, then it is not going to work for +Pastel. + +The following weather icons are supported. + +![](weather_icons.png) + +Mostly cloudy, Sunny, Mostly Sunny, Snow, Rain. + +The triangle icon shows there is a problem connecting to GadgetBridge and the weather service. +You should follow the setup and trouble shooting guide for the Weather App. + +If you find the weather / gadgetbridge service unreliable you can +disable weather updates to pastel through the settings app. + + +## Fonts + +### Lato ![](screenshot_lato.png) -## Architect +### Architect ![](screenshot_architect.png) -## Gochihand +### Gochihand ![](screenshot_gochihand.png) -## Monoton +### Monoton ![](screenshot_monoton.png) -## Elite +### Elite ![](screenshot_elite.png) -## Cabin Sketch +### Cabin Sketch ![](screenshot_cabinsketch.png) -## Orbitron +### Orbitron ![](screenshot_orbitron.png) diff --git a/apps/pastel/screenshot_pastel.png b/apps/pastel/screenshot_pastel.png index d489f19143b598f426b309b2e07904b222d1108f..c792ada8d932feabe3eba3feed17b61de7ed87c5 100644 GIT binary patch literal 2993 zcmc(h={M938^?dY8H}YwOxZ>vnLA}4TXtiRrA!#x43$s{*#~7*vW~cwB14v2s~KW$ zWSgFlijj4!6Oy4ZOm=eT@%#tRInRsdI_J7R=X}rkyt!U|)6O~D?iZC41pr{by&W36 z$EyFVu+ZM6)y)w007hVKtpF-hVIBa)g6+|kuCW9jWh{KgP#n$L-R)%~Lto+C&!eZ0 z=U6cN+oS~{`6&{|9+~=n-J9Jhb63Cff-S=Q3Z^#ih@h~RrLfy1m#ePFHX07{P-0vO z-`KZf%)mlMbBNMQa@M2gjgvocIEL^0>BZQap(*_+~53-rYL{kHFOs{_S4`az~iYxtCRqun#fkz^Y)JtaKFV;q$3ia%f7a}Mgyq=n2rAt>Q*tNZ#b~`%4nCF?<^7G*A12GyXkUNSnH*0moe8ceS!Le zQInz>DKr#Kc=1cw=IW7!H*bah3~omW#Oi!izPDnkRf?sc%*{LNPorXJt$K)I9pl2r zR`;tjrhH_@>bV!)ceuqaexg+mZu`F#Vn6q8xO^+`M|R{SXXy|AhV94Ek>rZjK)IOT zt&kn7(^rPQKu8n)rehJ1n^Xx`Vt9{zm=V#E{jcI6!K&5D#!AYyf&_U|j;4C$vY={r z-DbA$RQ_PgneL$#7Q|0Pcs}A){Sa4g%MMV1ZRB#ON{?V3I-8_@_`u|Y&5NRi0(rB) zdf>Yn3ZPle+IptR_QObZMuA3_A{EYhDC9Bb_SaaYK<Qta==mabf%kc? zM(}4a;SeE0tXVhn3zZyxg~ZA$8nHoIkW^g#Gg;C~44QopS!IusCv-Z3MI|O#<(v-5 zJqp8Rzo7($`N4e=--HE)!|tYM{w#n9Y@+5HZrp_k7+TqM#5#eHor2YILn{!XP@;UP zsR96RImLx2lvo%u@>^#^;C}6ewe<0u{foTN9#aa=kda5z3dm@==V6Quax!2B4ha)L+TL)vNPC=nh}|h?7EgO#X`pGq=v9sv zdozAjvZ}PpcKy@K3vSmDa2@b(X5jOUR#Ivwwa*pb!I_kmB9{VmyZy)Rz9e0Od%R7Yj@tD{7M2A1z09W4 z#qb~E3xYhRW9az49NmingT-(b_wxcDGbb+;hQ=*R&ot9jgGKp9?qWs3~C-rs5G_xqLSdM%2|^%pmJUv9o>F+1sL{rHLkvGcP@8(ARt zu9d|Q>9p>I9PFd^t415^%VNE`P^K*n@lE;bs>2fo&C z&-idg)S(3K>t{wvlEJ!DgPBr8UMHPOU16BXhv+{q+OfR5R|p%@P5IyM+KlM{w(>HF z95u8Gw;G;28S> zlME1jhPoOyfAohej;oRAx}vvehfSH)Pw5MpiK-)*PGUOHetNf ze<1&*cwv6wAd(w}Y#aHh9>sPv3po($3R`D0UqAJrc_Stl-hSCeaoL@o6G^(x`E_AS zYo2vWDw@3KId1obFuYMU4%;_0wHDz~kW8l-mhw|&aPLjDO(V9l_yKyTRUqHE>H)vH zVSs3ojfNbS{d`^uLX$p%A}kA$RjMT#dXQ?m4D7TVhzUNGTsG^Ks4m;kXlFD&sEX$d zt}Mo7Fk3^Wa&g6}1om4WAkcC_5+x;YO!G=&&(zNX#2_+Tds!qlakGZWC^-LIQZWgg zu4Z`*zohLo+9<}5G*dR)d&^*&N=BZARhwlXvHJoQQdJ&W{z#YhF8~v&UbI+|#LT@f z=p!&aIP1&3ehVJ^9+NsRBD-(vEQRSp=*(^T{^G%bhI6PQsmfKpb=>0jyQJ zlbb+2c@QP0%0S(`ejW~nT#D+p5(#ti9dorIjd|c}&OvjN#-&y9cm zUVGXvTx|twf&QSzXAL>5EH*rGr`&XaUL&5ceVY0>DbONrNtnY-TpVu9g4wZEZBs|a zV*_7vI{oA5EV=tf3ci0#Vs2J4=ZA+Dv$?rZ~=SU%Z6o2hr z@aQt;wDKNx8x*aPLW`mO-M3dz6@zt*XH)U6_+R-ef0pR_o PiUamG&Sh$~K5uQkuL!te52-`kE&MoXgQ+6$%% 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 diff --git a/apps/pastel/weather_icons.png b/apps/pastel/weather_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..59d4f007f51ed9a607e3765edbf0c5fb525ee619 GIT binary patch literal 1506 zcmb7E`#;kQ0Nr;sn-Nx_&08uZ2}!19=CQehqGb_RM-ELDNc`9@cz2 zn4J^tmbFJdmv~6ttTcAR-0#08;QE}Ecc%y8N^ezi8vSyRRYCekHZD+eV?Qqfh37`r z1}S{fb<|Nu?eN`4we>lSvQ&y)Ip+~9?>ac^Y%0gaoa?>a9d@X=0U;8wH1D1_1mx zcD`##=gN7X{gxI|bMBDJ>5JC{%`d9cTX^y|`ImgWRKV7CAmjcZ23@k@GJsL1Ck3v3 zIb?sH-6;_*JTrXTd+u37A(BcT$Fo3@--_=^prRvw?S>NC;{z|)3JT?Jp^BBo!FaR) z8g$YhJ)G&PnP#aa$c{2RxLoqsj!F1hpgSISpM`=W3*QzCa#$V(vopO17t+$hPPUTx zNUQBhnD2C|Joi>F3yV5&TWTP9d2NDaX3q})60veR1<$TpgIQ3ds2GYFn--K20fzaT z*T+bf`X&?hm0D>xq_P5AHGh0pR&5Pjt&GdPL5ku!Db#RY#_grsx>`ggO2$e{x4isB z3kZ#xYlvrv!2>WBGGsz?eOQ7acp4LYhjrDNz3Cx<5jsYyc4iTjt`ZwFk2Cwp0a3aJ z_lEm8<*@dY4$A4)gEm~V?hMPR!{=-P!<`Fx6*mC(8II(#H|INWb#xj#Vv3WA(;_Mm zvCG=aqo0_%C|L!Rts1vk!`FQf@)hVn3mfK`&U?SQ+z z3ny&6AA&~RojcdD7L38y{Ym!dgpE@ydk#5uw^5=yN=q(%ay!`%dEQ*hIdFT9ni!Q) zrDkIrv0-DZxDvS*GZGnoz3BMF`*=e|@PwO|Q3J1&YUW}>HA@|_pLsZ=2$p%!hQT4% zorGefaU82OLDc0D!z$iBHoik0cwn^nsuNY=`nLP*YS#1DPZ)OV080V8GLp_&zd1p2-ouq(65%cB;arr`x1h8dPZKiwDJSHES>lN+WiYxY> zc63qWCnsHuG&jY?42KY+aV{x3+H`Pa9P~Xk`qxpve&M?5F)R^Yx0s; zQy5Ml&1-vi%*qiP0>JrV$%9jSGhPQgX^fdxcVK|xm04QKf2>6TrZAno04D>?uXK1L z&8`s4T0KIqgOK`Uruh!%Myguu{ErlMzC>ej z+oPJ*Kvk`ey$B10{|fgRhm@wd-r>6MgRO7oO-;KH!me;M@`E+KHUPgnu@>tAv8wuMv0zM(l`Z=b=dnNgclvheqyc}C zo-#Le$*(I~emXZ%LCWftQ55mh;xC)+9cM>2Ml-fd=4e>AP(dO4?UQC?gPlL>Kmmy1 z035ZpZk)AsGo9QtpZ*Oxwdy#A!2{eB#n6S&{}(-dM6aI-QY|w0@4G>s?mlj9_^_;h E0d)$;RR910 literal 0 HcmV?d00001 From 39adcc7fa6a5c399361b8ebfd347d4d5c558b815 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Fri, 24 Dec 2021 13:00:31 +0000 Subject: [PATCH 028/105] Pastel: updated README and screenshots --- apps.json | 2 +- apps/pastel/README.md | 12 +++++++++++- apps/pastel/screenshot_grid.png | Bin 0 -> 3921 bytes 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 apps/pastel/screenshot_grid.png diff --git a/apps.json b/apps.json index a3f2788ee..8a0d86b97 100644 --- a/apps.json +++ b/apps.json @@ -4211,7 +4211,7 @@ "name": "Pastel Clock", "shortName": "Pastel", "version": "0.10", - "description": "A Configurable clock with custom fonts and background. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times", + "description": "A Configurable clock with custom fonts, background and weather display. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times", "icon": "pastel.png", "dependencies": {"mylocation":"app", "widpedom":"app","weather":"app"}, "screenshots": [{"url":"screenshot_pastel.png"}, {"url":"weather_icons.png"}], diff --git a/apps/pastel/README.md b/apps/pastel/README.md index 7dbfbe9a1..b396386af 100644 --- a/apps/pastel/README.md +++ b/apps/pastel/README.md @@ -8,10 +8,13 @@ * Has a settings menu, change font, enable/disable the grid, weather icons * On Bangle 1 use BTN1,BTN3 to cycle through the info display (Date, ID, Batt %, Ram % etc) * On Bangle 2 touch the top right/top left to cycle through the info display (Date, ID, Batt %, Ram % etc) +* The information display will cycle on each screen update * Uses mylocation.json from MyLocation app to calculate sunrise and sunset times for your location * Uses pedometer widget to get latest step count -* Use the wesather widget to get weather status +* Use the weather widget to get weather status * Dependant apps are installed when Pastel installs +* The screen is updated every minute to save battery power +* The weather display will display temperature and wind speed on alternate screen refreshes I came up with the name Pastel due to the shade of the grid background. @@ -71,3 +74,10 @@ disable weather updates to pastel through the settings app. ### Orbitron ![](screenshot_orbitron.png) +### The Grid + +Setting the grid on provides a graph paper style background to the App. +The grid is not supported on a Bangle 1 due to flicker issues. + +![](screenshot_grid.png) + diff --git a/apps/pastel/screenshot_grid.png b/apps/pastel/screenshot_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..7b993353b533d4ceab374d6cd7272133aa740597 GIT binary patch literal 3921 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 Date: Sun, 26 Dec 2021 17:14:08 +0100 Subject: [PATCH 029/105] Initial release of presentor app. --- apps/presentor/app.js | 277 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 apps/presentor/app.js diff --git a/apps/presentor/app.js b/apps/presentor/app.js new file mode 100644 index 000000000..d9b032bd0 --- /dev/null +++ b/apps/presentor/app.js @@ -0,0 +1,277 @@ +// Presentor by 7kasper +// Licensed under MIT. +// Version 2.1 + +const MouseReport = new Uint8Array([ + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x02, // USAGE (Mouse) + 0xa1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x05, // USAGE_MAXIMUM (Button 5) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x95, 0x05, // REPORT_COUNT (5) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x03, // REPORT_SIZE (3) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x09, 0x38, // USAGE (Wheel) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x03, // REPORT_COUNT (3) + 0x81, 0x06, // INPUT (Data,Var,Rel) + 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) + 0x0a, 0x38, 0x02, // USAGE (AC Pan) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x06, // INPUT (Data,Var,Rel) + 0xc0, // END_COLLECTION + 0xc0, // END_COLLECTION + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xa1, 0x01, // COLLECTION (Application) + 0x85, 0x02, // REPORT_ID (2) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated)) + 0x29, 0x73, // USAGE_MAXIMUM (Keyboard F24) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x73, // LOGICAL_MAXIMUM (115) + 0x95, 0x05, // REPORT_COUNT (5) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0 // END_COLLECTION +]); + +const MouseButton = { + NONE : 0, + LEFT : 1, + RIGHT : 2, + MIDDLE : 4, + BACK : 8, + FORWARD: 16 +}; + +const kb = require("ble_hid_keyboard"); + +function drawMain() { + g.clear(); + E.showMessage('Presentor'); +} + +let HIDenabled = true; +let lastx = 0; +let lasty = 0; +let timeoutId = -1; +let holding = false; +let timeoutHolding = -1; + +let homeRoll = 0; +let homePitch = 0; + +let trackPadMode = false; + +let mCal = 0; + +let clearToSend = true; +let mttl = 0; +let cttl = 0; + +NRF.setServices(undefined, { hid : MouseReport }); +NRF.on('HID', function() { + HIDenabled = true; +}); + +function moveMouse(x,y,b,wheel,hwheel,callback) { + if (!HIDenabled) return; + if (!b) b = 0; + if (!wheel) wheel = 0; + if (!hwheel) hwheel = 0; + NRF.sendHIDReport([1,b,x,y,wheel,hwheel,0,0], function() { + if (callback) callback(); + }); +} + +function getSign(x) { + return ((x > 0) - (x < 0)) || +x; +} + +function scroll(wheel,hwheel,callback) { + moveMouse(0,0,0,wheel,hwheel,callback); +} + +// Single click a certain button (immidiatly release). +function clickMouse(b, callback) { + if (!HIDenabled) return; + NRF.sendHIDReport([1,b,0,0,0,0,0,0], function() { + NRF.sendHIDReport([1,0,0,0,0,0,0,0], function() { + if (callback) callback(); + }); + }); +} + +function pressKey(keyCode, modifiers, callback) { + if (!HIDenabled) return; + if (!modifiers) modifiers = 0; + NRF.sendHIDReport([2, modifiers,0,keyCode,0,0,0,0], function() { + NRF.sendHIDReport([2,0,0,0,0,0,0,0], function() { + if (callback) callback(); + }); + }); +} + +function handleAcc(acc) { + let rRoll = acc.y * -50; + let rPitch = acc.x * -100; + if (mCal > 10) { + //console.log("x: " + (rRoll - homeRoll) + " y:" + (rPitch - homePitch)); + moveMouse(acc.y * -50 - homeRoll, acc.x * -100 - homePitch); + } else { + //console.log("homeroll: " +homeRoll +"homepitch: " + homePitch); + homeRoll = rRoll * 0.7 + homeRoll * 0.3; + homePitch = rPitch * 0.7 + homePitch * 0.3; + mCal = mCal + 1; + } +} +Bangle.on('lock', function(on) { + if (on && holding) { + Bangle.setLocked(false); + Bangle.setLCDPower(1); + } +}); + +function startHolding() { + pressKey(kb.KEY.F10); + holding = true; + Bangle.buzz(); + E.showMessage('Holding'); + Bangle.on('accel', handleAcc); + Bangle.setLCDPower(1); +} +function stopHolding() { + clearTimeout(timeoutId); + if (holding) { + pressKey(kb.KEY.F10); + homePitch = 0; + homeRoll = 0; + holding = false; + mCal = 0; + Bangle.removeListener('accel', handleAcc); + Bangle.buzz(); + drawMain(); + } else { + timeoutId = setTimeout(drawMain, 1000); + } + clearTimeout(timeoutHolding); + timeoutHolding = -1; +} + +Bangle.on('drag', function(e) { + if (cttl == 0) { cttl = getTime(); } + if (trackPadMode) { + if (lastx + lasty == 0) { + lastx = e.x; + lasty = e.y; + mttl = getTime(); + } + if (clearToSend) { + clearToSend = false; + let difX = e.x - lastx, difY = e.y - lasty; + let dT = getTime() - mttl; + let vX = difX / dT, vY = difY / dT; + //let qX = getSign(difX) * Math.pow(Math.abs(difX), 1.2); + //let qY = getSign(difY) * Math.pow(Math.abs(difY), 1.2); + let qX = difX + 0.02 * vX, qY = difY + 0.02 * vY; + moveMouse(qX, qY, 0, 0, 0, function() { + setTimeout(function() {clearToSend = true;}, 50); + }); + lastx = e.x; + lasty = e.y; + mttl = getTime(); + console.log("Dx: " + (qX) + " Dy: " + (qY)); + } + if (!e.b) { + // short press + if (getTime() - cttl < 0.2) { + clickMouse(MouseButton.LEFT); + console.log("click left"); + } + // longer press in center + else if (getTime() - cttl < 0.6 && e.x > g.getWidth()/4 && e.x < 3 * g.getWidth()/4 && e.y > g.getHeight() / 4 && e.y < 3 * g.getHeight() / 4) { + clickMouse(MouseButton.RIGHT); + console.log("click right"); + } + cttl = 0; + lastx = 0; + lasty = 0; + } + } else { + if(!e.b){ + Bangle.buzz(100); + if(lasty > 40){ + E.showMessage('down'); + scroll(0,1); + } else if(lasty < -40){ + E.showMessage(kb.KEY.A); + pressKey(kb.KEY.A); + } else if(lastx > 40){ + E.showMessage('right'); + //kb.tap(kb.KEY.RIGHT, 0); + scroll(-1); + } else if(lastx < -40){ + E.showMessage('left'); + //kb.tap(kb.KEY.LEFT, 0); + scroll(1); + } else if(lastx==0 && lasty==0 && holding == false){ + E.showMessage('press'); + clickMouse(MouseButton.LEFT); + } + stopHolding(); + lastx = 0; + lasty = 0; + } else{ + lastx = lastx + e.dx; + lasty = lasty + e.dy; + if (timeoutHolding == -1) { + timeoutHolding = setTimeout(startHolding, 500); + } + } + } +}); + + +function onBtn() { + if (trackPadMode) { + trackPadMode = false; + stopHolding(); + drawMain(); + } else { + clearToSend = true; + trackPadMode = true; + E.showMessage('Mouse'); + } + Bangle.buzz(); +} +setWatch(onBtn, (process.env.HWVERSION==2) ? BTN1 : BTN2, {repeat: true}); + +drawMain(); From 5f5b32eb148af5d44c15247576c010d5ea2691cc Mon Sep 17 00:00:00 2001 From: 7kasper <7kasper@users.noreply.github.com> Date: Sun, 26 Dec 2021 17:28:22 +0100 Subject: [PATCH 030/105] Add app image. --- apps/presentor/app.png | Bin 0 -> 2208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/presentor/app.png diff --git a/apps/presentor/app.png b/apps/presentor/app.png new file mode 100644 index 0000000000000000000000000000000000000000..d29cf7be6f4ce71b2de84afbb97cc8c3085dc3bb GIT binary patch literal 2208 zcmV;R2w(S!P)VL{@Xy-X{om%s;f+QiB#6t8QqDST47r zc@(s*wfJf0zFqH4?{~@U!1NgUv~?mLYi+BnkM2^*pic;~r=q6rR6N%9;ko@TnH^ZU z`CgyT@He9w5%7^AvTq!1*>h^DeQje?qkvb0(2pEzY5vR9_m|8L4BvaJs^}T3LQst0 zdrHeE!qJ9E@v5s14t2Ms6S3ADaQl@iL=bL+C0PD9jJ*qW7?kG>x^76~BTq^i=Tbgcm4b>Vl z-Mfms?sfz5?%Hdc?#kD{eczw|+fkmlL2KTTj`@$(TYp{*AeSYcLW|(qMED+9q7+)w z_`p^ncs=6F8YMo5vXGaMUm7Dex0ct`cPC=4AJ=WWKTxu~;osqC{Y@1s8^+^3t;cC^ z*YSqvKf|_vyWy%0@mTBL)9vkUc};yrz`gNU>$8h4U`^u#Tcyx%M0{Bz7Ey+HM%2q+YOHW3>24w}o)@(S@OS{I)kq-D2Os(8T#|xHyBjcO|>7prt;~OPBl$^Hp=4eE@&N?4)68(8A(aTGlEgu0YC~tk>8-$ zrzs1}T)(lDq9?AhO6Z?-w(NRwuHRfR0n_14kDvZ=Nx>O8N8k4I&p33sb^9LCm zA7fcy=A4C!xL^V6wlv)gycY3ijgU2&^MfgY&l}*c4{gDef>;03%?m9Z45YGLQRL;m z8^2ED#%df_air%Id){ixIro^Y=^1n~uI8G2*NzK1#JS)N%VgMwrt3Fi8Ir#pIL?c2 zw)5NSa^BpqoO^Vdov*a=_R&5}LsGY@imI}robwm?1>umiOvEqpG0a;)E_l;2$vB#f zquI1Nf~z#owj5(;^fJCv5+pP>M5D~`Gb_uUy+_Z^<@NaU{*KaUjdmAQKt6Z?M`?l{ z6R%~^Ka#{%ny-btlWpk~0JWB;cQ}dTDjZkw#^IA>b07}en!yR>xLQBCU;@@OKCl&d zE#jLA4`2w%M8?5!6_Mh}mHoudOtyJE033HAQsl)nB#H49XpJ$AWW-kVCY-EN;?Ayp z%|{kQKp_>@XMrUJZQZA_49WMuRl{Skem=1?_{+i^)do*xJpAa|bpRYXK0tB6kER?fZ&;yW7MyXaNi9Z0r+zu>r>jN2AkLpqfzc<@kCAwyvrc05k7dNqmhFSjo?Jb?V{{Xf_Ow?3IQ z`c5Z3IN2;I+XkSs-(fVB-^+ynHmCBo;=|L8t9mKq-N7|wh|Tnu=a#WBxE#KnS#IV`^r5f>943aDALiMZJCP+-x` zB_fUYqQk>^{JFdSn)|DyM;tN?ak(X2k<1#77HnV4B2`G7*V}OU)xY!?1(H7mQSJ)y iO4q-h?p`dgLgW8Yi`ZcrY`y>h0000 Date: Sun, 26 Dec 2021 17:31:16 +0100 Subject: [PATCH 031/105] Add app icon file. --- apps/presentor/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/presentor/app-icon.js diff --git a/apps/presentor/app-icon.js b/apps/presentor/app-icon.js new file mode 100644 index 000000000..76939d548 --- /dev/null +++ b/apps/presentor/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4ASlgADGmIxwLV4wqGQowfWZQwjKw4wJF7ghBmVWmQlELYoweFwYABGAwrHF7IuFGAwrIF7AuHMJADGF0AwHAYovWFxaSHADQuDEgIADYZYucAQOB1fQ1eBmQwiFwlX6AAE1gqBGD6MEmQqBwIICwIGB0rDeWYksFAIuBz+fvQHC6D0dcQssEwIuB4fC4V0M4VXF7YuFDYLqBlnDF4WeHAYugL5N6L4I4BF0IvB0vQvdQGAJeBY4YucmQxEAgJgBvYOBdwYQDFzUzmZ/EllXFIKKBAYVXBwSMaller7fFAoKSBAAOBFQK7dPoJfFEoYADRjgmEeIzFFdUQAOdUIumdRLtDAAIufdRQKCr8zCQjqmE4NeF4YudWxpqCFyovBK5LqiF6DqdR6D0BdTYwJGg5sBdTQwKEAIwHdTQwMSpQueYaAufGBouiGBYukGBIumGA4uoGAouqGAYABF1QAl")) From 1bac672658ea5b37a6220729a1bf429768893657 Mon Sep 17 00:00:00 2001 From: 7kasper <7kasper@users.noreply.github.com> Date: Sun, 26 Dec 2021 17:35:12 +0100 Subject: [PATCH 032/105] Create ChangeLog --- apps/presentor/ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 apps/presentor/ChangeLog diff --git a/apps/presentor/ChangeLog b/apps/presentor/ChangeLog new file mode 100644 index 000000000..a7d747684 --- /dev/null +++ b/apps/presentor/ChangeLog @@ -0,0 +1,6 @@ +0.1: Start of app. +0.5: BLE keyboard functionality. +1.0: BLE mouse functionality to scroll back/forward. +1.5: Added accelerator style mouse. +2.0: Added touchpad style mouse. +2.1: Initial internal git(hub) release. Added icon and such. From 6a25e7901fd1e9a90359fb30bc3b1f9baedebcfa Mon Sep 17 00:00:00 2001 From: 7kasper <7kasper@users.noreply.github.com> Date: Sun, 26 Dec 2021 17:57:56 +0100 Subject: [PATCH 033/105] Add presentor to the banglejs app repository. --- apps.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps.json b/apps.json index e5e9f8f02..e4e53470d 100644 --- a/apps.json +++ b/apps.json @@ -5062,5 +5062,22 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] + }, + { + "id": "presentor", + "name": "Presentor", + "version": "2.1", + "description": "Use your Bangle to present!", + "icon": "app.png", + "type": "app", + "tags": "tool,outdoors", + "interface": "interface.html", + "readme":"README.md", + "supports": ["BANGLEJS", "BANGLEJS2"], + "allow_emulator": true, + "storage": [ + {"name":"presentor.app.js","url":"app.js"}, + {"name":"presentor.img","url":"app-icon.js","evaluate":true} + ] } ] From 3b4cfe038d305974e4333ff6a940acd05bb5b2d1 Mon Sep 17 00:00:00 2001 From: 7kasper <7kasper@users.noreply.github.com> Date: Sun, 26 Dec 2021 18:03:55 +0100 Subject: [PATCH 034/105] Changed outdoor to bluetooth catagory >.< --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index e4e53470d..97cd97e4d 100644 --- a/apps.json +++ b/apps.json @@ -5070,7 +5070,7 @@ "description": "Use your Bangle to present!", "icon": "app.png", "type": "app", - "tags": "tool,outdoors", + "tags": "tool,bluetooth", "interface": "interface.html", "readme":"README.md", "supports": ["BANGLEJS", "BANGLEJS2"], From efd6e531c5023a645331ab9f72eb22b6f7e8b2d7 Mon Sep 17 00:00:00 2001 From: 7kasper <7kasper@users.noreply.github.com> Date: Sun, 26 Dec 2021 23:29:31 +0100 Subject: [PATCH 035/105] Test gestures on BS2.. :F --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 97cd97e4d..317b809dd 100644 --- a/apps.json +++ b/apps.json @@ -1324,7 +1324,7 @@ "icon": "gesture.png", "type": "app", "tags": "gesture,ai", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS", "BANGLEJS2"], "storage": [ {"name":"gesture.app.js","url":"gesture.js"}, {"name":".tfnames","url":"gesture-tfnames.js","evaluate":true}, From c6f43446906e873a226a93e766cdcd8999d30a41 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Fri, 31 Dec 2021 22:14:24 +0000 Subject: [PATCH 036/105] Pebble: foxed icon to 48x48 --- apps.json | 2 +- apps/pebble/ChangeLog | 1 + apps/pebble/pebble.icon.js | 2 +- apps/pebble/pebble.png | Bin 1213 -> 1365 bytes 4 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 8a0d86b97..f78098b3a 100644 --- a/apps.json +++ b/apps.json @@ -4725,7 +4725,7 @@ "id": "pebble", "name": "Pebble Clock", "shortName": "Pebble", - "version": "0.06", + "version": "0.07", "description": "A pebble style clock to keep the rebellion going", "dependencies": {"widpedom":"app"}, "readme": "README.md", diff --git a/apps/pebble/ChangeLog b/apps/pebble/ChangeLog index d92be5e9c..0cba5a2b2 100644 --- a/apps/pebble/ChangeLog +++ b/apps/pebble/ChangeLog @@ -4,3 +4,4 @@ 0.04: Fix widget hiding code (fix #1046) 0.05: Fix typo in settings - Purple 0.06: Added dependancy on Pedometer Widget +0.07: Fixed icon and ong file to 48x48 diff --git a/apps/pebble/pebble.icon.js b/apps/pebble/pebble.icon.js index ecd7feb7f..1c1166156 100644 --- a/apps/pebble/pebble.icon.js +++ b/apps/pebble/pebble.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("oFAwgNKiIAIFqofegIf/DAUzAAMyAwUQD60T/4ACD7Q/cPxIf/YCofcDhYiSXYYfuUZgf/D/4f/D6USkUgD/4fuogAID6vtDw/UD6vu6geF73kb6vuEAtN9wfYMIneD7JADDwIfaIAJdBD7YgBHwQfbAAgfkf6Qf/D/4feogAID6oAND/4f/iAdJD/4f/D/4fUDxYABD74iODiAftTZgfnYYczAAMyD7UT/4ACH/S+bD8DAKD9Y=")) +require("heatshrink").decompress(atob("mEw4UA///ssp4XthFCBwUBqoABqAaGBZcFBZdX1W1qgLHrwLKqv/6oLJAAILHioLJn5qBAAYLEBQoLeHQQABv4LjGAgLYq2qAAOlBbBHFBdPAKcQLdWcb7jAAoLcn4LKgEVHQVUBQsAgoLLq//6oLIr2q2oXJBZQvCqALGgILTA=")) diff --git a/apps/pebble/pebble.png b/apps/pebble/pebble.png index 10f5adb56b224f3e4d037c4d195fbd9efc81b959..368e08750d5ede99497d54b310fe9b91e03d9c10 100644 GIT binary patch literal 1365 zcmV-b1*-aqP)Px)4@pEpRA@upn$J%oWf;f5@65Ech+x zv{2{Lr1SoGKJW9q@AEwGGXxf&j*gBFO6h${sg)5nRaJf3O2^bb#OfezZEaUYQ5<26 zhgpeNqlqU<|a5!MM+tXy)-`__( z9#8#$LlA_fU@-V^J`k4nfTAcL1GvSlA&<$o1wnW%7!2OaV+?Bo$g<3Zznss+0AlfY z{JrJnjL8}`p4TwIc*HA2YF(Z&`TV|N3A zz$du?84BR>cxDJ8uUk3qa}k8M36YTEp zVrM5|vZwa&)vv9sO$dJk(C_#AZ`$UZ?XIgKO%tB)k~ zeOsM?$OPbWxe^*+jQ#2LdS5(s4KNT?RZs-3hq1m%@Nml*fG*HbV6|8N+4QG#d;Sbsoppz&lSeLBj3C!9cC9YdJ} zgjOVc_*FUp_XC8G&!(rRuMH0mI|MRySs0P!{IVQ$id*?;AX)$vDvuA$b@u1 zkaUa|#*v-02h4zE(?HQ2+5ZCIsS1i;M#9*O7@ow(6eEcYp%ok6|03NF6iov>l&Ekr zd~>M?YqU0q$(nx@?Wa7n*j z*EFq$Qd)@X_31z$&}T~Wqeg}RnFecZZM`K3LTMB@G65)x@)3aBW^T8$tmZbQ^wp)M zrTe+8cxqcq8c-DFO#r+!bgan7E0wm?91_5}EAq9pv^*zC(r>9{)}f&xw70jXm02ey zCNMfWn!0$4s;a({&*~>qSE~akin0peS-pR@Lign4Bp$&|E$>&@`<(6bhZ)rv|btUl9c1rWOBiEEs&!V)H@V+` XI5?_a++oDw00000NkvXXu0mjfkw}hY literal 1213 zcmV;u1Va0XP)POM$%3@Whhhyn@nYhxDeg-e<-cZ zYFr2k?%buN)IY$D3u)c7&`lO@rMoJkr~#QIf+Nxtsa1-};Ey=&+{^zdH@zOnM{mX zvjtWIh=|(&%XQtCm^E8qH2}cN%z6O8ZE6bK^H45MbUEA#JEV9`wMn*=ov6V^% zySuwkO0~5~DF?#<%d&1sDYbW0Hk-xj>T1XM!^1;VDwVeD28LA&YzBCqmmwl;+y4GO zgb;{C^xd7DoZ$HQ*iU*PlgY#ig+iSt(^m8u_dq(G-UG14rPmA*y;>|5zciuESp-cK zzzd8G0~P~16+jM57D5&SEX%sZrKQ7UAq-RlmX?-oDy4Ra==sOnq?EQ&YLqXv|L}5|Ola!1|954-`%Wb(F@@^;gu`v9KmHh$=b zz?A|0PN3hg)_~-=MDC3mBG9he1EGlU<1aQo_~dDZ%=}?Bz_u0A^B$@-pn9+O6{;nG zYf}<`Kd>0H)5AUs5CP97fT*MJ>ls1HVDZr?Fg>Z@^Z2lhdcFPy5q)~`|M@n#Ym7~U z@i=f}MB(%|LZi#=!uS}FOsYUTu4=XV)%yDS`#mKI!$r`xf!P^_vHy8YA_Oo!r7#)r z!*gJK77zlsHtGN2E=(GYo6bbfrL6?V#{kEEG$bCJKfoG|15-%_#@%gTE_Ep!jRH5W zKPrx~n8GvTm)X0XOWzAv5#aiC_;mso1HT!XnVETOb91x#hsS?5Ha6yc10G}G4G==a z0W_D;`+?$l(-}Oj4Cr?P{buM5U@d|Tm+;LG`eQJ?aQA2PHJY`D-~SMJ@1qG$N#hLt z5V$g+-wE`afj8jn?CfJ9#B)u53qj%sekt5&H16ecxu1HCANV^UEJJTVs3G8Y_SYob z=a51f;5ZH($KlGQF9aO|PtK#9bBHKZPJs*{qGFiNOdzGa6DB^;5D-GVDW%+j=2&bW z4obR2luslQ`(eacDoQGqdX0!a=g{)uPN`Hf^6CuNH258Wo{y_`LBW(Tivi_w`7Z!> zIka>rrJig9&iR&6s|Cxlj2XbW7bpP8>Kf+e=CHQ52Fud_-hX;}itX)f?MqVtJlnQI zRr*e_8K9IZ_^r}bR#vdQyxcMV;NU>}(iDKQsrQ8d-aFu;5Vn2IdwY9OO8KrDkB*Ky zy)$y0J8xG=4+z` b5C9$mizYm;5j?(%00000NkvXXu0mjfggZkP From 0516b13669b272d9e48169e17b996e05ad4a85ec Mon Sep 17 00:00:00 2001 From: hughbarney Date: Fri, 31 Dec 2021 22:29:02 +0000 Subject: [PATCH 037/105] Rebble: fixed icon to 48x48 --- apps.json | 2 +- apps/rebble/ChangeLog | 1 + apps/rebble/README.md | 1 + apps/rebble/rebble.icon.js | 2 +- apps/rebble/rebble.png | Bin 4570 -> 4067 bytes 5 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index f78098b3a..e4f280a0b 100644 --- a/apps.json +++ b/apps.json @@ -4879,7 +4879,7 @@ "id": "rebble", "name": "Rebble Clock", "shortName": "Rebble", - "version": "0.03", + "version": "0.04", "description": "A Pebble style clock, with configurable background, three sidebars including steps, day, date, sunrise, sunset, long live the rebellion", "readme": "README.md", "icon": "rebble.png", diff --git a/apps/rebble/ChangeLog b/apps/rebble/ChangeLog index 16e65d4f9..b9c26b4e3 100644 --- a/apps/rebble/ChangeLog +++ b/apps/rebble/ChangeLog @@ -1,3 +1,4 @@ 0.01: First release 0.02: Fix typo to Purple 0.03: Added dependancy on Pedometer Widget +0.04: Fixed icon and png to 48x48 pixels diff --git a/apps/rebble/README.md b/apps/rebble/README.md index 712fa4e9b..0ecb51d7a 100644 --- a/apps/rebble/README.md +++ b/apps/rebble/README.md @@ -11,6 +11,7 @@ * Uses pedometer widget to get latest step count * Dependant apps are installed when Rebble installs * Uses the whole screen, widgets are made invisible but still run in the background +* The icon is James Dean - 'Rebel Without a Cause' ![](screenshot_rebble.png) ![](screenshot_rebble2.png) diff --git a/apps/rebble/rebble.icon.js b/apps/rebble/rebble.icon.js index 4c898974e..3fc45b820 100644 --- a/apps/rebble/rebble.icon.js +++ b/apps/rebble/rebble.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("oFA4X/AAIHBw3Aiv3HmE/HQQAF/gPEnWqAAOpy2VqoFB3gPIBoIABtQPJ1PVqv1q3qB5OlrNVEIQPK2tlBwOptQPIyvdH4VtrQPI3tbqtdB4OaB5FVH4NV0pgBB5F13//MIIPJ1O2TgWV/o/I1fbB4WpqoPI1NvB4REBJ5APD/wPBD5JOBB4WVqwPH0oPE0oPJ/NX//6AoNVF5HZq3pq2qSYIPI6tX+pNBB5Ol6v6B4IABH5P7//b1oPBN5GlLwPr9IPK1IPC/SvK1QPCOAIPL6te//5B5lW/5ABL5APB/wPB3IPJ1Y/C/yuBF5APC9X+yo/K34LB3QPBtQPJ//23SPB1QPI3eVs2qJwIPJ1flqyeBtQPJtZPBLwIPKzf/1ROCB5OWAQJOBB5QsBAAQGBf5FlB5tVvoPMNQO9B4daB5O+B4aPIqtX35tBB5M1qtbB4i/HB4WvOAjvGB4IpBIQIADB46aBB4t8B49VB54AFB6zrB1Wm1RTBywPI0oPCeQOaB4+ltOlq2V02VqwPOrQPIF5w/PFQIvPB71pH4uqX8g")) +require("heatshrink").decompress(atob("mEw4X/AoOG4EV+/I+dVAAVUCgcFBIYABpIJBgcFoIKEqkQgEH6EH0ILEqAhCgkBqEVBYdAhUBBoU9GAlAlw5CgERgILDIocEgEGoALDlEHwEAlkUg8EBYfAFwVA+BgEqmQjWrBgMQhgvDqmA9Wq1WsNoMALweDBQIAB4E8BYdTpwLD/kA4AXDjwKC1f/IAILDnQLC1//4ALEHQQLCKgILDFwYLB6EATgVABYe///MNgdA3kQEoILGqCNBlfQh//4NAPAVQ+YLBQYM/ocABYfAiEqgE0g6DBF4eAlFrYQZHDoOu1Xo8lgBYtCKIOo9aOBAAJrCBYWv9X/+gXEqSZC/f//4LHz/6DQIjEBYOhgG6BY1a1WggDCB3ojErYTBoEOa4QLF1X9jWrXwILGKYOvBYtfKYX+17iBHYdX1WQgf/34LBUwQLB1cLWIJqCBYdV9W+1+//oLBWQVVqnuD4M/KQoAB/+kBYJGBCwYLCI4P/DQILFnwLCEQ1Vp+q/46CBYtDXgJ1FAAVwfI4ABqAUCBY8A9gLIqEA9ALEKYYLB9YLERwQ=")) diff --git a/apps/rebble/rebble.png b/apps/rebble/rebble.png index 69653015cfec75e34382125a56c258c7e9074f5b..acfd37400804494014976eea6bf456b1bdc2fcf6 100644 GIT binary patch literal 4067 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 Voil!`qIv)T002ovPDHLkV1j)J*pL7K literal 4570 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 Date: Fri, 31 Dec 2021 22:52:28 +0000 Subject: [PATCH 038/105] GPStouch: enhanced icon image, it was a but wishy washy --- apps.json | 2 +- apps/gpstouch/Changelog | 1 + apps/gpstouch/gpstouch.icon.js | 2 +- apps/gpstouch/gpstouch.png | Bin 1571 -> 1443 bytes 4 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index e4f280a0b..b4364166e 100644 --- a/apps.json +++ b/apps.json @@ -4382,7 +4382,7 @@ { "id": "gpstouch", "name": "GPS Touch", - "version": "0.01", + "version": "0.02", "description": "A touch based GPS watch, shows OS map reference", "icon": "gpstouch.png", "screenshots": [{"url":"screenshot4.png"},{"url":"screenshot2.png"},{"url":"screenshot3.png"},{"url":"screenshot1.png"}], diff --git a/apps/gpstouch/Changelog b/apps/gpstouch/Changelog index 7f837e50e..e4a0bdfe8 100644 --- a/apps/gpstouch/Changelog +++ b/apps/gpstouch/Changelog @@ -1 +1,2 @@ 0.01: First version +0.02: Enchanced contrast of icon image diff --git a/apps/gpstouch/gpstouch.icon.js b/apps/gpstouch/gpstouch.icon.js index c4cf85676..3e05da0ff 100644 --- a/apps/gpstouch/gpstouch.icon.js +++ b/apps/gpstouch/gpstouch.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEw4UA///j+EAYO/uYDB//wCYcPBA4AFh/ABZMDBbkX6gLIgtX6tQBY9VBYNVBY0BBYdABYsFqoACEgQLDitVtWpqtUBYtVq2q1WVGAQLErQLB0oLFHQNqBYIkBHgMDIwYKBAAJIDIweqz/2BYJtDBYI6Bv/9HgILHYwILGh4gBBYWfbooLF6AjPBYW//wLGL4Wv/RfGNZaDIBYibEBYizIBYjLDBYzXBd4TXCBZ60BBYRqEBZpUBBYRSFJAQLCA4b7BHgQLFgYLGIwYLEgoLBHQYLEgILBHQYLEgALBAoYLFi/UBZMHBZUD6ALKApQAFBbHwBZMP/4ABBwgIDA=")) +require("heatshrink").decompress(atob("mEw4UA///iADCn+EqoAWqAuJgoLcn/8BZENGwNwBY/VBYNXBY0DJ4fABYoiCEggLDmtX1Wq6tcBYvVrQLB0owCBYdVtQLB1NVBYg6BBQIABHgQLCgIuCGAVABYcNqwtBGIOVJAILFyoCCBY5eBBdo7IgIIB1t6BYJfENZaDB9QKB1aDFBYKbEBYizBrwLB2qnFdwSmCX401cYdUBZTjGfYgHCBZB2BBYhUBAARSBBYhICAAIGCBYkVBQJSCBYpICIwQLFHgQ6CBYo8CHQQLFHgQFDBYsVQIQLHgo6DBY0BHQYLGgY6DBYwAFBbCjDACY")) diff --git a/apps/gpstouch/gpstouch.png b/apps/gpstouch/gpstouch.png index c411356ae69347a83882fe195782df211aa629e9..a40419a3f15ca9a07e80397db537ca307fba02a1 100644 GIT binary patch delta 1425 zcmV;C1#bGI45JH>B!3BTNLh0L01m_e01m_fl`9S#000G5Nkl93g^E$p2PSi7 zxZt%9rL|&hEGG71Olz$eL1GIPvv^sXozsUg>dwq&XJ$8*^nZgu=0E@C`M(OF%@B{P98T4;p&=mZhtW(#d98x}3iK?pH7q# ziN@0iCNxwpdnsoQr&`(IWfG6K8YWE0e7<`xg@2ZlXRL0IaOlJt+`FI3uuYuku2wd< z7SPkvJJV__D$0ER<9at*_N24sXxZJ1D_!0F<^X_XvbW4FFV_MB0lJsVCm6_`t|$<2 zQ|qofRvrWlA0GJ4YP)|w^LfhTQdF-Wnl(qw`k|OIxwPLL05EJ=;Idm@Ugp5BR>QSx znSakk!64SYxiD*jwW}8)7|eVFSFbv{4v2s@tKs5ByVI-lXXDiOE3jtc$Vaw!J{*Z} zTi?JdFWA@2jt+YcB6mwD;9(inG@P>9E?ok;yMb}zGVL!u{~Q*~E5o);w*Ua+o*A97 z{`cYLO`x;WUdu3W)-^A;j-e1;V3rv#JbxV4kw^fkl--|*P&#%DO2>|IB>&(6kVu$0 zo&>Y}(=gClZ~+f-$ZDvs*U{YUEFv3HDd6BiVBI?VjugOQce_y&UIpxCmbT=zwL13g z1Fm1souI1=*t-{~t8*j|rO@bwkf%ev5OgILQzrl{v5wW(n}nL0B&JUXCQUN8&VPV; z2I%TC=S*#_GjRZ5mOltV=e=<9b1Na4Wu*|h;|AL4pyB~>uK}LV#E}S{2XM@5TrM!n z^WiX#c#ZRQs86Ty0kiZlZF55@Z1i(S*i9*#a zXp1Qvro&3%y=>$0xD-Orr-iIp@E%ztLVMzIDXey8`B6Abp7%N~5LE-w>}FP*`*O$Q z>Jz0@f!nxd?z~z|xv*)|KPQP0*txUFSM#EOn7j+xrLB!32COGiWi{{a60|De66lK=n(*hxe|RA_7!JOvVz*38;=4<&H5LVRE7i!wE@)hpWulvKu;xEMTMGS7!-*xS1GdF+PWqH zWMt@9fSV%xV1F1K_Il;lRORe<0ZJ+H`*{N>Hw-36Y&~rc-Ex6krC2C}-|tuTfY zVCqyDJ^B&7QgHJoT)YT%bjfX}Bi;4>gAwr#=$ShEJ^ z&+ifc2qKV^0}B>FX(_l8KlPc0!QSp1reV!lVdR3nB_eoZ?JgHAUL5(C%|Zm0EP?Uk6E^$IaA>H@AVJe<0|Aw< z6v5s$U5Anq7&FDfA%F)r$N#l)Xawm>^ zXn%7$Ar$JQz5S7&rb(_@U8W0gIOKs+40J3k*K$|rpbM?x=a@^WQd~y znBCjf-X6IVJ#dZ7CL?_?ZT}?BpP4=w*SPE`TYEdCrRk)lMVYUd)n%m*T#hwdzaD+< z)OA+9xiBfgsuhdS_2@fr?OHL`;oEdC*?{%IT{%Cw1@$^tOu3pZ| z&rgr@zj!g8L&V$=3KkwAP2;3tMBD1?p}84Gjf%FvIC~m%XXVn|atDA>BZftd|2?>M z3oa#?0~iKpOzSf1SXLuwwDL8ZpLZNtn5g~izaI!}ZPbj{lBND6P*JFPg27hPG z>aw~XsE#$NAj*U#60ovLk!t3iJ#Xbf>k4G$RS=!l^ z*b2NtlHwa1BR_!F*2r5qGt+dMfPYmnme<5yubcypSdBA*b8a_>tp?dz)Q7`-09fd@ zeM2eM+u0+sRe;YYe<;Prc4CuYpVuq#b8Qo_y)TrNg%?t?&EBGEyl*$yb^+_wNl4Rp z7wE9d(T&w*Wpc}IuvSo787wNV7k4FyJ2`nnvzNDbEGJmLvBHutJ z*;O!U65B=i)@qzmTuMu0z1_S9GD#Hq{XQQkE|zdt7t4W03t@M3ou!*LNn3yOr{sXc z=aauQjb*?+6YgQd;O#A2q#+f#Q+7gARwloR@D32}!*%V}t#T|?c~g4C?hRGq%ec01E&B07*qoM6N<$ Ef*6AFy8r+H From 9f1e978822d5f4321ba9414114de89993f987b99 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Fri, 31 Dec 2021 23:02:01 +0000 Subject: [PATCH 039/105] MyLocation: enhanced icon image, it was a but wishy washy --- apps.json | 2 +- apps/mylocation/ChangeLog | 1 + apps/mylocation/mylocation.icon.js | 2 +- apps/mylocation/mylocation.png | Bin 1909 -> 1664 bytes 4 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index b4364166e..427b86fbb 100644 --- a/apps.json +++ b/apps.json @@ -4708,7 +4708,7 @@ "icon": "mylocation.png", "type": "app", "screenshots": [{"url":"screenshot_1.png"}], - "version":"0.01", + "version":"0.02", "description": "Sets and stores the lat and long of your preferred City or it can be set from the GPS. mylocation.json can be used by other apps that need your main location lat and lon. See README", "readme": "README.md", "tags": "tool,utility", diff --git a/apps/mylocation/ChangeLog b/apps/mylocation/ChangeLog index 7b83706bf..653f859ae 100644 --- a/apps/mylocation/ChangeLog +++ b/apps/mylocation/ChangeLog @@ -1 +1,2 @@ 0.01: First release +0.02: Enhanced icon, make it bolder diff --git a/apps/mylocation/mylocation.icon.js b/apps/mylocation/mylocation.icon.js index bfb38d5ac..b79f5875f 100644 --- a/apps/mylocation/mylocation.icon.js +++ b/apps/mylocation/mylocation.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEw4UA///t/7j/P3/vB4cBqtVoAbHBQIABBQ0FBYdQBYsVBYdUERIkGHIQADHoguEGAwuEGAwKFBZg8DHQw8EBYNf/1Vq3/8oLDIwNf/Wpv//0oLG9Wq3/qBYJUCBYuqBaBqBBYW+BepHEBbybCBYP+BYSnErYLDyoLFAANq/r8Ga5T7MBZZUBAAhSCfhA6DBZhIGBQg8FHQg8GHQgwGFwowFBQwwDFwwLMlS7Bqta1AKEn2q1K1C1WgBYf/1WqBYIDB1QKCgYLC0taBYoXB/QICBY0//7vBAAQ8EEgIABCwwME9QVEA")) +require("heatshrink").decompress(atob("mEw4UA///gH4AYPO/QPDgNVqtADY/1BYNfBQ0PBQIAB+ALFmoLDrgLF6oLDq4KEgYKDBYPABYcNBYlVuAuIGAwuEAANUBYYKFHgg6Bq4ZCr4DBHgQLBvWq2te1WlBYZGBBYOr1Wq1qSDBYNqBIILDKgQLLgoLHqBqDBfJHLBZBrOgKPCBYiPCU4NaBYe1WYrABBQLCCfgYGCrwVBa4kAirvKNgIAErgLDKgIAEKQQ8EAAY6DBZhIDIww8GHQg8GHQgwGFwowEFwx5EOog8GHQ0AlWpBYNq1AKFWIILBAYOgBYbICytWAgQKCgTgDcwYXGAAgvGAAY8EEgYWGBgoVEA==")) diff --git a/apps/mylocation/mylocation.png b/apps/mylocation/mylocation.png index 7148990a42a1c8858d933d2a4cb35b80123a5505..038ee177e660e3bf643c74bbaa5f549b382fd5f8 100644 GIT binary patch delta 1647 zcmV-#29Wvn4uB1iB!3BTNLh0L01m_e01m_fl`9S#000IuNkl@VZEXpa*ivG=AYh3x2EhdI$|X`njXdCkmyi%brALOq-o4Du%-;ukg_-Hj?soenCx4qgm;d>F=bV`{=KxU> zIlo*-0ELuxR;`Lwzbqo?qRLbx3I`Bpdl!!UcuS2d_jwTr)B|3TIi3CCGK6J-oK6mG z#y3ca--H5@54UpwKuw*BA^$9Od*7gnWE(o^wK;w6Z6`!27i>UU1 z{>bE)kn3(Ab^D0AeMFsJjqbU9)N<-FbshYPf(2y{wF#8%BhR@eaw>uPQlOt$97>yu5M8vGXu7?`#+-sO2sI@ScUD(nLvHc=0KT?p&u4w&*^3B8z43-{GN;z(YG>Ds$RCf0gl-s=_{7fH=t?07;}Uz zgC&HH7;{W6#<}&f^$i5Ib5jZvme>`&Tzvy`Q_oB(i&cq|4;?pJ^on#1u+5u;*jaTm z(tmz=j)OfeqKl7V(FJz&sH#_D{59I$S7lUWb9YVLkPH}86L~zHZr3jy4o)3S|Z0PMw9^*^5BW0ODQuz{>%>j=^-y@c}<(xb7nPRtwUuU&T|$ zegL=k3w;hz^1-kDV#sMG5~V{{4j}&0T7T+1R8KelxJG}s2dL?`OdcrauqDl!J!jYC@E1rrbbYakUkuknctT0Ip^Sa*Iz`YGXxt((g!%E1t6W z06<%cQc0Blor0xvgSHgu9$KPrBEMuFiBeA#;rnT8>B5-6kDACUT1}!PM*&_Yv1nyX z;YUs6N*hU(!oPMGC5`eNA5IJWsDBAj+7W?)&!!drs+*E7-I1RkEI-g_6@I9^?%3tq zfkjRCC@~TSOQ(&dcK?&aaXC!GQes#F;Qnq&gsihCk^b@ekm9%x|BCk4R*(PIZXw_= z2K>qM>hTvIPiTvpfhMB3S$*2qc7c7+?bQ;80tUA`M94aG66v3qo9H@JkAGXMa`X=h zW4Z)JwJ&Da8W>}y*GZ;PTtw+KNZ0KGO9cSWpo(6%XF|@5*i}uC~2s$c9vt>sm+8QsS zZROg~;Q@eAP7*JhPN`|Mn}2=5)hTiO37(DhsuIvMq+&3jK_!#MM6mVu0}PNKNwx+) z7NmpcwWVgy#H3MMduWASpd;}D%Y1+jz97LXYw#-sStXE}A!||?@T0~lj>Q>?x6LYs zJS;8l;Bq03-)*-)Zt&hObD1x)u;vlTxeoIqr#MiC7FpK z9V5fKv}q-ZN4NSm&#`5Uv4xC776+v8982UFY>a_p02l)sk~O&c)qVgfz=i{s$=F#a@%Xstf=C002ovPDHLkV1l2V6!8E6 delta 1894 zcmV-s2buVQ4fPI?B!32COGiWi{{a60|De66lK=n*DoI2^RA_AsG@S#b$cuP-3VG$dGK&`PKY(kne zs5N3l1xZZX*iyvOh*i1M%Pza@_3XLLnR%an*kyOm?wr{(=YK4T{U;}9=6x>j|3B}% zGtc{uFh$VRFTVr&05N+hmOTqw5{SsKRq^~hp6S9jhcVu7mJ0i>}op)z!;xQ{&^&`R#GVw zH9WEaeQfJ>B!3g{l8DW&jG%%sfDUzMTOa}57Thk3yHXzC@XsiGA_>sPw%$c!{Y%&( zSKW0XlOOtbi^Jr{bs4iE9)o1v(9g1lOup}vDcmDZtoy^13(!>CeN1cEGdeNH8WqwR z7|cM?t2E^>1A)2(v@}612F57u9m{3=Q->=GuZaBPPk*nZq3#g2ZA~y{bI{ulo*#|) z1ST>x8Zie3GUpMqOm=L(FlpFi4!WVOnd!-PVotKeU=+H0hXh<6yhl2ItGt-XhdE8W zqT|uvygq@v@569!-`IrL&=BU8#Mqm{9LkP>rnX(rwB#|yR0DMN zKrRoK#fA0jh|g#Oz*nU>SRntwM>L&1Mf0goadO#`eC`!jFnH59D1Pw^Sks%ZV>U9J zw*OB@S-9`za#UQ5&Xe6+x`T{PS!tI1qU42>$$t%z2MP=3kB|pQ=anAUMi(und(mRV z7+O9)PRobKFmvbPee)(_Gnx?~K1@36D!HN|S5(~V7IWpn{S!nFBaT@20KbkVz;V7k za%>d(M#~j{+-=jB^-&!?SIeSj(PB=tUQ5!kSUh92Ov)9N&a{tbv?PbILn;!{`^pIj zoPPtFN;MI4MsLpaVCbaPvX)X5eWiWCn?Sw-EYnmf@L~r~Vo9zkxqZ@sLmL@=Ia4xH z5s;v}@TDL_nWvE4IC7YG!H-xTl!5D2#~uKYuLd;-3s4!YG_zB4^#LN+%44D064V?l zz>@gLv0JRA+slq%0mh8h2>+J?ly+d~$$wMjtebL()fv1pVZ6WL_XDVL{Nn$U!JAveQlhfaa_0~HSmVYck z9hX94mEa8syO5`@w;MZOz{%&Bb?kjCuk6b*N8Y?zmS$N2fUbSy1>nIj zpRp)RZz0{fke)9uV&L;vBO)xE83Tc0cR$XX2WdQeigXk8A+i zs_A_SuwHg<-WKLC`J%q##516Wri@bM_#-pp+b46XY+vZ7kIu)_zXP*srd1hwu>7xw zE#@y_@(}=J`&0ix`2m%$U21`%`amV*p+W%wvTO5x;F+pvRoszmlU-Y0tAEtJVgUej zoOl?OHzJd&6v6>!#2$?n5)t~7jV(CVUx90)#!iAy@yv30uB|spP_z*MVt<`HyXCjFaHvVZ@lI{{+lJJE%-nhVqQ++De(u$y>wkXW z$bYrI77me~LPyT$uU5-iBZd_!EC*TvP^I;q{meO9(N`flm)ywtTkjZKYoAv5i@?O2{@t}o851ACmgxICu{06g)+CiDy;|iGv|YF5f`t&fq%2NuL)i#jN&k& z+m_Cczak=`b1XDVhw2<1)Q=O6v;cGu`t;>P@~Lvw+pjbG*!zLzuCFcS+^Rb#BR?je z>>Ko*d%v|%%6?`FoddZ(^YkV108L4YfX{rR5aHZyt2w{wPKphUBh79@Bj;AF=G<+o zD<=;ix~9Q)?+SGZGk>1!FW%7{v){1Cd|LGtdNV$Q1rxsOqDp*V00i8|rf9@RleF8m zSrIlTCe3=LS63z+-Bahtf^q!F6_u=O$a{+G>s0Q6c>=#TmiO?o`St$_bFBEXobD{% z;>7Hq#T{;TET&slX{Z98uXqMLqxi%Bc~>b^wn3H#4hy{IiC_21@&)z(t|X|cO`9{S zb@ce(wJo_>M7|;xtrj%fmegB9Tm(x15hUXpItKg!zz4~Ic7a|%rBjd-ia9C5@zV?9 gAKfbw`P1kB0CUi}Aa6C17XSbN07*qoM6N<$f-G^U(f|Me From 54475bf5e6123ca4c5983556948400c45b65e8f0 Mon Sep 17 00:00:00 2001 From: 7kasper <7kasper@users.noreply.github.com> Date: Sat, 1 Jan 2022 16:27:31 +0100 Subject: [PATCH 040/105] Create template.html --- apps/presentor/template.html | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 apps/presentor/template.html diff --git a/apps/presentor/template.html b/apps/presentor/template.html new file mode 100644 index 000000000..e3a5f71ef --- /dev/null +++ b/apps/presentor/template.html @@ -0,0 +1,73 @@ + + + + + + + +
+ + + + + + + From cfcf7908decd1cd661749bd6836b6414cc3c7bac Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 20:00:08 +0100 Subject: [PATCH 041/105] Create basic UI for adding subjects. --- apps/presentor/template.html | 281 ++++++++++++++++++++++++++++------- 1 file changed, 225 insertions(+), 56 deletions(-) diff --git a/apps/presentor/template.html b/apps/presentor/template.html index e3a5f71ef..2b0ddc1ec 100644 --- a/apps/presentor/template.html +++ b/apps/presentor/template.html @@ -2,71 +2,240 @@ + + -
- - +
+

Presentor

+
+
+
+
+
+
#
+
Subject
+
Time
+
Notes
+
+
Loading...
+
+
+
+
+ + +
From aec3df87450e68418f7064002115f31cfec95def Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 20:11:25 +0100 Subject: [PATCH 042/105] Hehe oops --- apps/presentor/{template.html => interface.html} | 8 ++++++++ 1 file changed, 8 insertions(+) rename apps/presentor/{template.html => interface.html} (97%) diff --git a/apps/presentor/template.html b/apps/presentor/interface.html similarity index 97% rename from apps/presentor/template.html rename to apps/presentor/interface.html index 2b0ddc1ec..a3c0fd890 100644 --- a/apps/presentor/template.html +++ b/apps/presentor/interface.html @@ -72,6 +72,14 @@ } .icon-cross { color: #e85600; + cursor: pointer; + transition: transform 0.2s ease-in-out; + } + .icon-cross:hover { + transform: scale(1.1); + } + .draghandle { + cursor: grab; } From b82b65198b3912d79393840c884026ed88a478bb Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 20:18:19 +0100 Subject: [PATCH 043/105] Add actual watch interface --- apps/presentor/interface.html | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index a3c0fd890..ac748a9f9 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -135,7 +135,12 @@ } function save() { - cmpStr = getJSON(); + let savestr = getJSON(); + Util.showModal('Saving...'); + Puck.write(`\x10require('Storage').writeJSON(${JSON.stringify('presentor.json')},${savestr})\n`,()=>{ + Util.hideModal(); + }); + cmpStr = savestr; } function loadJSON(str) { @@ -146,6 +151,14 @@ } } + function load() { + Util.showModal('Loading...'); + Puck.eval(`require('Storage').readJSON(${JSON.stringify('presentor.json')})`,data => { + Util.hideModal(); + loadJSON(data); + }); + } + function addFormPPart(partData = {}) { let part = document.createElement('div'); part.classList.add('ppartrow'); @@ -241,8 +254,9 @@ document.getElementById('loader').style.display = 'none'; // load from watch first. - let qq = `[{"subject":"Hello","minutes":55,"seconds":4,"notes":""},{"subject":"dsfafds","minutes":4,"seconds":33,"notes":"fdasdfsafasfsd"},{"subject":"dsadsf","minutes":0,"seconds":4,"notes":""},{"subject":"sdasf","minutes":0,"seconds":0,"notes":""}]`; - loadJSON(qq); + // let qq = `[{"subject":"Hello","minutes":55,"seconds":4,"notes":""},{"subject":"dsfafds","minutes":4,"seconds":33,"notes":"fdasdfsafasfsd"},{"subject":"dsadsf","minutes":0,"seconds":4,"notes":""},{"subject":"sdasf","minutes":0,"seconds":0,"notes":""}]`; + // loadJSON(qq); + load(); addFormPPart(); // load empty element on startup From 02c432124f78745b6f1920b258af789223cc9b8e Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 20:22:13 +0100 Subject: [PATCH 044/105] Bit more spacing for the drag thing. --- apps/presentor/interface.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index ac748a9f9..aefbdf2c2 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -49,7 +49,7 @@ width: 45%; } .pp-order { - width: calc(50% / 14); + width: calc(100% / 14); display: flex; justify-content: space-between; align-items: center; @@ -65,7 +65,7 @@ width: calc(200% / 14); } .pp-notes { - width: calc(800% / 14); + width: calc(750% / 14); } input { height: 1.5rem; From ce6d4d76fdc1f83035e1e457793a2ddd4c6c2b1a Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 20:23:43 +0100 Subject: [PATCH 045/105] Add readme --- apps/presentor/README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 apps/presentor/README.md diff --git a/apps/presentor/README.md b/apps/presentor/README.md new file mode 100644 index 000000000..8b22eb228 --- /dev/null +++ b/apps/presentor/README.md @@ -0,0 +1,2 @@ +# Presentor +Use your Bangle to present! From aa55094e227082dc9aebdbcaeca27ded82516a96 Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 21:46:40 +0100 Subject: [PATCH 046/105] rrr --- apps/presentor/interface.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index aefbdf2c2..ed265e2f6 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -49,7 +49,7 @@ width: 45%; } .pp-order { - width: calc(100% / 14); + width: calc(150% / 14); display: flex; justify-content: space-between; align-items: center; @@ -65,7 +65,7 @@ width: calc(200% / 14); } .pp-notes { - width: calc(750% / 14); + width: calc(700% / 14); } input { height: 1.5rem; @@ -253,11 +253,15 @@ document.getElementById('loader').style.display = 'none'; + function onInit() { + load(); + addFormPPart(); // add empty element on startup + } // load from watch first. // let qq = `[{"subject":"Hello","minutes":55,"seconds":4,"notes":""},{"subject":"dsfafds","minutes":4,"seconds":33,"notes":"fdasdfsafasfsd"},{"subject":"dsadsf","minutes":0,"seconds":4,"notes":""},{"subject":"sdasf","minutes":0,"seconds":0,"notes":""}]`; // loadJSON(qq); - load(); - addFormPPart(); // load empty element on startup + + From 6eed1b5760f303b8b76117cc0d72236dd50c9888 Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 21:59:58 +0100 Subject: [PATCH 047/105] No double json parse >.< --- apps/presentor/interface.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index ed265e2f6..9b79221d3 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -153,7 +153,7 @@ function load() { Util.showModal('Loading...'); - Puck.eval(`require('Storage').readJSON(${JSON.stringify('presentor.json')})`,data => { + Puck.eval(`require('Storage').read(${JSON.stringify('presentor.json')})`,data => { Util.hideModal(); loadJSON(data); }); From d3a2bb4375aa938946280077a071ca17ebdda894 Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 22:06:17 +0100 Subject: [PATCH 048/105] Fix the empty element being loaded in wrongly. --- apps/presentor/interface.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index 9b79221d3..82bb85f57 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -149,6 +149,7 @@ for (let i = 0; i < jparts.length; i++) { addFormPPart(jparts[i]); } + addFormPPart(); // add empty element on startup } function load() { @@ -255,7 +256,6 @@ function onInit() { load(); - addFormPPart(); // add empty element on startup } // load from watch first. // let qq = `[{"subject":"Hello","minutes":55,"seconds":4,"notes":""},{"subject":"dsfafds","minutes":4,"seconds":33,"notes":"fdasdfsafasfsd"},{"subject":"dsadsf","minutes":0,"seconds":4,"notes":""},{"subject":"sdasf","minutes":0,"seconds":0,"notes":""}]`; From b279d3bf69ef3d1a27d0f9720129b0588ac6a560 Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 22:07:45 +0100 Subject: [PATCH 049/105] Bit more time for timer. --- apps/presentor/interface.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index 82bb85f57..460102388 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -59,10 +59,10 @@ padding-right: 0.25rem; } .pp-subject { - width: calc(350% / 14); + width: calc(300% / 14); } .pp-timer { - width: calc(200% / 14); + width: calc(250% / 14); } .pp-notes { width: calc(700% / 14); From c1fdac99929285a603078e67ef1c381a8625de7e Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 22:28:30 +0100 Subject: [PATCH 050/105] Futureproof the settings format. --- apps.json | 5 +++-- apps/presentor/ChangeLog | 1 + apps/presentor/interface.html | 12 +++++++++--- apps/presentor/settings.json | 17 +++++++++++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 apps/presentor/settings.json diff --git a/apps.json b/apps.json index 317b809dd..74a24d290 100644 --- a/apps.json +++ b/apps.json @@ -5066,7 +5066,7 @@ { "id": "presentor", "name": "Presentor", - "version": "2.1", + "version": "2.2", "description": "Use your Bangle to present!", "icon": "app.png", "type": "app", @@ -5077,7 +5077,8 @@ "allow_emulator": true, "storage": [ {"name":"presentor.app.js","url":"app.js"}, - {"name":"presentor.img","url":"app-icon.js","evaluate":true} + {"name":"presentor.img","url":"app-icon.js","evaluate":true}, + {"name":"presentor.json","url":"settings.json"} ] } ] diff --git a/apps/presentor/ChangeLog b/apps/presentor/ChangeLog index a7d747684..2e3409855 100644 --- a/apps/presentor/ChangeLog +++ b/apps/presentor/ChangeLog @@ -4,3 +4,4 @@ 1.5: Added accelerator style mouse. 2.0: Added touchpad style mouse. 2.1: Initial internal git(hub) release. Added icon and such. +2.2: Begin work on presentation parts. diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index 460102388..1af0041fb 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -119,7 +119,11 @@ } function getJSON() { - let ret = []; + let ret = { + pparts: [], + sversion: 2.2 + } + let jparts = []; let pparts = subber.children; for (let i = 0; i < pparts.length; i++) { let rpart = {}; @@ -129,8 +133,9 @@ rpart.minutes = ppart.getElementsByClassName('pp-timer')[0].children[0].value | 0; rpart.seconds = ppart.getElementsByClassName('pp-timer')[0].children[2].value | 0; rpart.notes = ppart.getElementsByClassName('pp-notes')[0].value; - ret.push(rpart); + jparts.push(rpart); } + ret.pparts = jparts; return JSON.stringify(ret); } @@ -145,7 +150,8 @@ function loadJSON(str) { cmpStr = str; - let jparts = JSON.parse(str); + let settings = JSON.parse(str); + let jparts = settings.pparts; for (let i = 0; i < jparts.length; i++) { addFormPPart(jparts[i]); } diff --git a/apps/presentor/settings.json b/apps/presentor/settings.json new file mode 100644 index 000000000..7e8d29876 --- /dev/null +++ b/apps/presentor/settings.json @@ -0,0 +1,17 @@ +{ + "pparts": [ + { + "subject":"#1", + "minutes":10, + "seconds":0, + "notes":"This is a note." + }, + { + "subject":"#2", + "minutes":2, + "seconds":50, + "notes":"Change in the app!" + } + ], + "sversion": 2.2 +} \ No newline at end of file From b5ae5c291ee0d1fc62adcd47f3b75a4721c33e4a Mon Sep 17 00:00:00 2001 From: 7kasper Date: Sat, 1 Jan 2022 22:35:48 +0100 Subject: [PATCH 051/105] Add small credits on the page. --- apps/presentor/interface.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/apps/presentor/interface.html b/apps/presentor/interface.html index 1af0041fb..377703898 100644 --- a/apps/presentor/interface.html +++ b/apps/presentor/interface.html @@ -1,6 +1,9 @@ + + + @@ -81,6 +84,13 @@ .draghandle { cursor: grab; } + footer { + display: inline-block; + width: 100%; + text-align: center; + font-size: 0.6rem; + color: grey; + } @@ -104,6 +114,7 @@ +