From e95a8a0fdb68896682492ad9d337869aef259c1d Mon Sep 17 00:00:00 2001 From: numerist Date: Fri, 17 Dec 2021 22:27:33 -0500 Subject: [PATCH 01/73] 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 02/73] 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 03/73] 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 04/73] 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 05/73] 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 06/73] 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 07/73] 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 08/73] 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 09/73] 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 10/73] 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 11/73] 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 12/73] 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 13/73] 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 14/73] 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 15/73] 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 16/73] 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 6e48dc66f1576a690c54f143b52ae31e053fdd5a Mon Sep 17 00:00:00 2001 From: numerist Date: Sun, 19 Dec 2021 20:47:47 -0500 Subject: [PATCH 17/73] 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 18/73] 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 19/73] 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 d03749ed92fd10fa690a7e79c6a5da857a826297 Mon Sep 17 00:00:00 2001 From: 7kasper <7kasper@users.noreply.github.com> Date: Sun, 26 Dec 2021 17:14:08 +0100 Subject: [PATCH 20/73] 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 21/73] 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 22/73] 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 23/73] 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 24/73] 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 25/73] 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 26/73] 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 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 27/73] 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 28/73] 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 29/73] 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 30/73] 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 31/73] 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 32/73] 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 33/73] 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 34/73] 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 35/73] 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 36/73] 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 37/73] 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 38/73] 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 @@ +