Merge branch 'espruino:master' into master

master
Peer David 2022-02-11 15:32:07 +01:00 committed by GitHub
commit eebec3b832
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 153 additions and 131 deletions

2
apps/ac_ac/ChangeLog.txt Normal file
View File

@ -0,0 +1,2 @@
0.01: initial release
1.00: first official release (also fixes bug in Customizer)

View File

@ -321,7 +321,7 @@
function chosenClockHands () { function chosenClockHands () {
switch (ClockHands) { switch (ClockHands) {
case 'simple': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-simpled-clock-hands/main/ClockHands.js')" case 'simple': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-simple-clock-hands/main/ClockHands.js')"
case 'rounded': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-rounded-clock-hands/main/ClockHands.js')" case 'rounded': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-rounded-clock-hands/main/ClockHands.js')"
case 'hollow': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-hollow-clock-hands/main/ClockHands.js')" case 'hollow': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-hollow-clock-hands/main/ClockHands.js')"
case 'custom': return "require('" + ClockHandsURL + "')" case 'custom': return "require('" + ClockHandsURL + "')"

View File

@ -1,7 +1,7 @@
{ "id": "ac_ac", { "id": "ac_ac",
"name": "A Configurable Analog Clock", "name": "A Configurable Analog Clock",
"shortName":"Configurable Clock", "shortName":"Configurable Clock",
"version":"0.03", "version":"1.00",
"description": "AC-AC, a highly customizable analog clock with several clock faces, hands and complications to choose from", "description": "AC-AC, a highly customizable analog clock with several clock faces, hands and complications to choose from",
"icon": "app-icon.png", "icon": "app-icon.png",
"type": "clock", "type": "clock",

View File

@ -10,6 +10,9 @@
<select id="languages" class="form-select"> <select id="languages" class="form-select">
</select> </select>
</div> </div>
<div class="form-group">
<input id="translations" type="checkbox" /> <label for="translations">Add common language translations like "Yes", "No", "On", "Off"<br/><i>(Not recommended. For translations use the option under <code>More...</code> in the app loader.</i></label>
</div>
<p>Then click <button id="upload" class="btn btn-primary">Upload</button></p> <p>Then click <button id="upload" class="btn btn-primary">Upload</button></p>
<script src="../../core/lib/customize.js"></script> <script src="../../core/lib/customize.js"></script>
@ -106,12 +109,18 @@ exports = { name : "en_GB", currencySym:"£",
const lang = languageSelector.options[languageSelector.selectedIndex].value; const lang = languageSelector.options[languageSelector.selectedIndex].value;
console.log(`Language ${lang}`); console.log(`Language ${lang}`);
const translations = document.getElementById('translations').checked;
console.log(`Translations: ${translations}`);
const locale = locales[lang]; const locale = locales[lang];
if (!locale) { if (!locale) {
alert(`Language ${lang} not found!`); alert(`Language ${lang} not found!`);
return; return;
} }
if (!translations)
locale.trans = null;
const codePageName = "ISO8859-1"; const codePageName = "ISO8859-1";
if (locale.codePage) if (locale.codePage)
codePageName = locale.codePage; codePageName = locale.codePage;

View File

@ -1,2 +1,3 @@
0.01: New App! 0.01: New App!
0.02: Change color from red->yellow to ease readability (fix #710) 0.02: Change color from red->yellow to ease readability (fix #710)
0.03: Color/positioning change to allow it to work with Bangle.js 1 (although not pretty)

View File

@ -17,7 +17,7 @@
<li>Go to <a href="https://umap.openstreetmap.fr/en/">https://umap.openstreetmap.fr/en/</a></li> <li>Go to <a href="https://umap.openstreetmap.fr/en/">https://umap.openstreetmap.fr/en/</a></li>
<li>Create a map</li> <li>Create a map</li>
<li>Draw a polyline (right hand side)</li> <li>Draw a polyline (right hand side)</li>
<li>Embed and share (leb>ft hand side)</li> <li>Embed and share (left hand side)</li>
<li>Download data as KML</li> <li>Download data as KML</li>
</ul> </ul>
@ -104,21 +104,23 @@ document.getElementById('fileLoader').addEventListener('change', handleFileSelec
document.getElementById("upload").addEventListener("click", function() { document.getElementById("upload").addEventListener("click", function() {
var app = `${js} var app = `${js}
var gcoords = new Uint8Array(coords.length); var gcoords = new Uint8Array(coords.length);
var coordDistance = new Uint16Array(coords.length/2); var coordDistance = new Uint16Array(coords.length/2);
var colHL = g.theme.dark ? "#FF0" : "#00F";
var W = g.getWidth(), H = g.getHeight();
var PT_DISTANCE = 30; // distance to a point before we consider it complete var PT_DISTANCE = 30; // distance to a point before we consider it complete
function toScr(p) { function toScr(p) {
return { return {
x : 10 + (p.x-min.x)*100/(max.x-min.x), x : 10 + (p.x-min.x)*100/(max.x-min.x),
y : 230 - (p.y-min.y)*100/(max.y-min.y) y : H - 10 - (p.y-min.y)*100/(max.y-min.y)
}; };
} }
var last; var last;
var totalDistance = 0; var totalDistance = 0;
for (var i=0;i<coords.length;i+=2) { for (var i=0;i<coords.length;i+=2) {
var c = {x:coords[i],y:coords[i+1]}; var c = {x:coords[i],y:coords[i+1]};
var s = toScr(c); var s = toScr(c);
gcoords[i ] = s.x; gcoords[i ] = s.x;
@ -130,61 +132,64 @@ for (var i=0;i<coords.length;i+=2) {
coordDistance[i/2] = totalDistance; coordDistance[i/2] = totalDistance;
} }
last = c; last = c;
} }
var fix, lastFix; var fix, lastFix;
var nextPtIdx = 0; // 2x the number of points var nextPtIdx = 0; // 2x the number of points
var nextPt = {x:coords[nextPtIdx], y:coords[nextPtIdx+1]}; var nextPt = {x:coords[nextPtIdx], y:coords[nextPtIdx+1]};
var nextAngle = 0; var nextAngle = 0;
var nextDist = 0; var nextDist = 0;
var currentDist = 0; var currentDist = 0;
function drawMap() { function drawMap() {
g.clearRect(0,0,239,120); var R = W*180/240;
var L = W*50/240;
g.clearRect(0,0,W,H/2);
g.setFontAlign(0,0); g.setFontAlign(0,0);
g.setColor(1,1,0); g.setColor(colHL);
g.setFontVector(40); g.setFontVector(40);
g.drawString((currentDist===undefined)?"?":(Math.round(currentDist)+"m"), 160, 30); g.drawString((currentDist===undefined)?"?":(Math.round(currentDist)+"m"), R, 30);
g.setColor(1,1,1); g.setColor(g.theme.fg);
g.setFont("6x8",2); g.setFont("6x8",2);
g.drawString(Math.round(totalDistance)+"m", 160, 70); g.drawString(Math.round(totalDistance)+"m", R, 70);
g.drawString((nextPtIdx/2)+"/"+coordDistance.length, 50, 20); g.drawString((nextPtIdx/2)+"/"+coordDistance.length, L, 20);
if (!fix.fix) { if (!fix.fix) {
g.setColor(1,1,0); g.setColor(colHL);
g.drawString("No GPS", 50, 50); g.drawString("No GPS", L, 50);
g.setFont("6x8",1); g.setFont("6x8",1);
g.drawString(fix.satellites+" Sats", 50, 70); g.drawString(fix.satellites+" Sats", L, 70);
} }
if (lastFix && lastFix.fix) { if (lastFix && lastFix.fix) {
g.setColor(0,0,0); g.setColor(g.theme.bg);
g.drawCircle(lastFix.s.x,lastFix.s.y,10); g.drawCircle(lastFix.s.x,lastFix.s.y,10);
} }
var c1 = g.toColor(1,1,0); var c1 = g.toColor(colHL);
var c2 = g.toColor(0.7,0.7,0.7); var c2 = g.toColor("#888");
for (var i=0;i<gcoords.length;i+=2) for (var i=0;i<gcoords.length;i+=2)
g.setColor((i<=nextPtIdx) ? c1 : c2).fillRect(gcoords[i]-2,gcoords[i+1]-2,gcoords[i]+2,gcoords[i+1]+2); g.setColor((i<=nextPtIdx) ? c1 : c2).fillRect(gcoords[i]-2,gcoords[i+1]-2,gcoords[i]+2,gcoords[i+1]+2);
g.setColor(1,1,0); // first part of path g.setColor(colHL); // first part of path
g.drawPoly(new Uint8Array(gcoords.buffer, 0, nextPtIdx+2)); g.drawPoly(new Uint8Array(gcoords.buffer, 0, nextPtIdx+2));
g.setColor(1,1,1); // remaining part of path g.setColor(g.theme.fg); // remaining part of path
g.drawPoly(new Uint8Array(gcoords.buffer, nextPtIdx)); g.drawPoly(new Uint8Array(gcoords.buffer, nextPtIdx));
if (fix && fix.fix) { if (fix && fix.fix) {
g.setColor(1,1,0); g.setColor(colHL);
g.drawCircle(fix.s.x,fix.s.y,10); g.drawCircle(fix.s.x,fix.s.y,10);
} }
lastFix = fix; lastFix = fix;
} }
function getNextPtInfo() { function getNextPtInfo() {
var dx = nextPt.x - fix.p.x; var dx = nextPt.x - fix.p.x;
var dy = nextPt.y - fix.p.y; var dy = nextPt.y - fix.p.y;
nextAngle = Math.atan2(dx,dy)*180/Math.PI; nextAngle = Math.atan2(dx,dy)*180/Math.PI;
nextDist = Math.sqrt(dx*dx+dy*dy)*coordScale; nextDist = Math.sqrt(dx*dx+dy*dy)*coordScale;
} }
function onGPS(f) { function onGPS(f) {
fix = f; fix = f;
fix.p = Bangle.project(fix); fix.p = Bangle.project(fix);
fix.s = toScr(fix.p); fix.s = toScr(fix.p);
@ -208,9 +213,9 @@ function onGPS(f) {
if (!Bangle.isLCDOn()) return; if (!Bangle.isLCDOn()) return;
drawMap(); drawMap();
} }
function arrow(r,c) { function arrow(r,c) {
r=r*Math.PI/180; r=r*Math.PI/180;
var p = Math.PI*3/4; var p = Math.PI*3/4;
g.setColor(c); g.setColor(c);
@ -220,25 +225,25 @@ function arrow(r,c) {
180-10*Math.sin(r), 180+10*Math.cos(r), 180-10*Math.sin(r), 180+10*Math.cos(r),
180+20*Math.sin(r+-p), 180-20*Math.cos(r-p), 180+20*Math.sin(r+-p), 180-20*Math.cos(r-p),
]); ]);
} }
function onCompass(m) { function onCompass(m) {
if (!Bangle.isLCDOn()) return; if (!Bangle.isLCDOn()) return;
arrow(oldHeading,0); arrow(oldHeading,g.theme.bg);
var heading = m.heading + nextAngle; var heading = m.heading + nextAngle;
arrow(heading,0xF800); arrow(heading,"#f00");
oldHeading = heading; oldHeading = heading;
} }
// draw the heading // draw the heading
var oldHeading = 0; var oldHeading = 0;
Bangle.on('GPS', onGPS); Bangle.on('GPS', onGPS);
Bangle.on('mag', onCompass); Bangle.on('mag', onCompass);
Bangle.setGPSPower(1); Bangle.setGPSPower(1);
Bangle.setCompassPower(1); Bangle.setCompassPower(1);
g.clear(); g.clear();
`; `;
sendCustomizedApp({ sendCustomizedApp({

View File

@ -1,11 +1,11 @@
{ {
"id": "route", "id": "route",
"name": "Route Viewer", "name": "Route Viewer",
"version": "0.02", "version": "0.03",
"description": "Upload a KML file of a route, and have your watch display a map with how far around it you are", "description": "Upload a KML file of a route, and have your watch display a map with how far around it you are",
"icon": "app.png", "icon": "app.png",
"tags": "", "tags": "",
"supports": ["BANGLEJS"], "supports": ["BANGLEJS","BANGLEJS2"],
"custom": "custom.html", "custom": "custom.html",
"storage": [ "storage": [
{"name":"route.app.js"}, {"name":"route.app.js"},

View File

@ -188,7 +188,7 @@ function showBLEMenu() {
}, },
/*LANG*/'HID': { /*LANG*/'HID': {
value: Math.max(0,0 | hidV.indexOf(settings.HID)), value: Math.max(0,0 | hidV.indexOf(settings.HID)),
min: 0, max: 3, min: 0, max: hidN.length-1,
format: v => hidN[v], format: v => hidN[v],
onchange: v => { onchange: v => {
settings.HID = hidV[v]; settings.HID = hidV[v];

View File

@ -1 +1,2 @@
0.01: New App! 0.01: New App!
0.02: Fix crash on start

View File

@ -90,7 +90,10 @@ if (global.sleeplog.enabled) {
var storage = require("Storage"); var storage = require("Storage");
// read previous logfile // read previous logfile
var log = JSON.parse(atob(storage.read(this.logfile))); var logContent = storage.read(this.logfile) || "";
// parse previous logfile
var log = JSON.parse(logContent.length > 0 ? atob(logContent) : "[]") ;
// remove last state if it was unknown and is less then 10min ago // remove last state if it was unknown and is less then 10min ago
if (log.length > 0 && log[0][1] === 0 && if (log.length > 0 && log[0][1] === 0 &&

View File

@ -2,7 +2,7 @@
"id":"sleeplog", "id":"sleeplog",
"name":"Sleep Log", "name":"Sleep Log",
"shortName": "SleepLog", "shortName": "SleepLog",
"version": "0.01", "version": "0.02",
"description": "Log and view your sleeping habits. This app derived from SleepPhaseAlarm and uses also the principe of Estimation of Stationary Sleep-segments (ESS).", "description": "Log and view your sleeping habits. This app derived from SleepPhaseAlarm and uses also the principe of Estimation of Stationary Sleep-segments (ESS).",
"icon": "app.png", "icon": "app.png",
"type": "app", "type": "app",

View File

@ -144,7 +144,7 @@
<div class="form-group"> <div class="form-group">
<select class="form-select form-inline" id="settings-lang" style="width: 10em"> <select class="form-select form-inline" id="settings-lang" style="width: 10em">
<option value="">None (English)</option> <option value="">None (English)</option>
</select>&nbsp;&nbsp;<span>Translations (<a href="https://github.com/espruino/BangleApps/issues/1311" target="_blank">BETA - more info</a>)</span> </select>&nbsp;&nbsp;<span>Translations (<a href="https://github.com/espruino/BangleApps/issues/1311" target="_blank">BETA - more info</a>). Any apps that are uploaded to Bangle.js after changing this will have any text automatically translated.</span>
</div> </div>
<button class="btn" id="defaultsettings">Default settings</button> <button class="btn" id="defaultsettings">Default settings</button>
</div> </div>

View File

@ -10,11 +10,11 @@
{"code":"nl_NL","name":"Dutch","url":"nl_NL.json"}, {"code":"nl_NL","name":"Dutch","url":"nl_NL.json"},
{"code":"sv_SE","name":"Swedish","url":"sv_SE.json"}, {"code":"sv_SE","name":"Swedish","url":"sv_SE.json"},
{"code":"tr_TR","name":"Turkish","url":"tr_TR.json"}, {"code":"tr_TR","name":"Turkish","url":"tr_TR.json"},
{"code":"ru_RU","name":"Russian","url":"ru_RU.json"}, {"code":"ru_RU","name":"Russian","url":"ru_RU.json", "disabled":"Characters not in ISO Latin codepage"},
{"code":"pt_PT","name":"Portuguese","url":"pt_PT.json"}, {"code":"pt_PT","name":"Portuguese","url":"pt_PT.json"},
{"code":"bg_BG","name":"Bulgarian","url":"bg_BG.json"}, {"code":"bg_BG","name":"Bulgarian","url":"bg_BG.json", "disabled":"Characters not in ISO Latin codepage"},
{"code":"da_DA","name":"Danish","url":"da_DA.json"}, {"code":"da_DA","name":"Danish","url":"da_DA.json"},
{"code":"el_EL","name":"Greek","url":"el_EL.json"}, {"code":"el_EL","name":"Greek","url":"el_EL.json", "disabled":"Characters not in ISO Latin codepage"},
{"code":"et_ET","name":"Estonian","url":"et_ET.json"}, {"code":"et_ET","name":"Estonian","url":"et_ET.json"},
{"code":"lt_LT","name":"Lithuanian","url":"lt_LT.json"}, {"code":"lt_LT","name":"Lithuanian","url":"lt_LT.json"},
{"code":"lv_LV","name":"Latvian","url":"lv_LV.json"}, {"code":"lv_LV","name":"Latvian","url":"lv_LV.json"},

View File

@ -179,6 +179,7 @@ window.addEventListener('load', (event) => {
} catch(e) { } catch(e) {
console.error("lang/index.json Corrupted", e); console.error("lang/index.json Corrupted", e);
} }
languages = languages.filter( l=> l.disabled===undefined );
function reloadLanguage() { function reloadLanguage() {
LANGUAGE = undefined; LANGUAGE = undefined;