First commit
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1 @@
|
||||||
|
0.1: New App! Need to work out locale
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Exact Words
|
||||||
|
|
||||||
|
This is a clock for expressing the time in exact words. Each minute of
|
||||||
|
the day has a different phrase.
|
||||||
|
|
||||||
|
Ranging form "Twelve" to "Coming up to midnight" to "A little after
|
||||||
|
twenty-five past four in the early hours"
|
||||||
|
|
||||||
|
Screenshots best demonstrate
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## To Do
|
||||||
|
|
||||||
|
Add localisation.
|
||||||
|
|
||||||
|
|
||||||
|
## Requests
|
||||||
|
|
||||||
|
Written by: [Brendan Sleight](https://github.com/bmsleight/) For support and discussion please post in the Bangle JS Forum
|
||||||
|
|
||||||
|
|
||||||
|
## Creator
|
||||||
|
|
||||||
|
[Brendan Sleight](https://github.com/bmsleight/)
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEwwJC/AH4A/AH4AgA=="))
|
|
@ -0,0 +1,226 @@
|
||||||
|
// timeout used to update every minute
|
||||||
|
var drawTimeout;
|
||||||
|
|
||||||
|
// https://www.espruino.com/Bangle.js+Locale
|
||||||
|
|
||||||
|
// schedule a draw for the next minute
|
||||||
|
function queueDraw() {
|
||||||
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
|
drawTimeout = setTimeout(function() {
|
||||||
|
drawTimeout = undefined;
|
||||||
|
draw();
|
||||||
|
}, 60000 - (Date.now() % 60000));
|
||||||
|
}
|
||||||
|
|
||||||
|
function wordsFromTime(h, m)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Tests
|
||||||
|
/*
|
||||||
|
// Example 12:00 = Twelve
|
||||||
|
// h = 12;
|
||||||
|
// m = 0;
|
||||||
|
// Example 23:58 = Coming up to midnight
|
||||||
|
// h = 23;
|
||||||
|
// m = 58;
|
||||||
|
// Example 12:15 = Quarter past twelve
|
||||||
|
// h = 12;
|
||||||
|
// m = 15;
|
||||||
|
// Example 04:16 = Just gone quarter past four
|
||||||
|
// h = 16;
|
||||||
|
// m = 16;
|
||||||
|
// Example 01:00 = One at night
|
||||||
|
// h = 1;
|
||||||
|
// m = 0;
|
||||||
|
// Example 17:01 = Just gone five in the afternoon
|
||||||
|
// h = 17;
|
||||||
|
// m = 1;
|
||||||
|
// Example 05:25 = Twenty-five past five in the early hours
|
||||||
|
// h = 23;
|
||||||
|
// m = 33;
|
||||||
|
// Example 22:33 = coming up to eleven at night
|
||||||
|
// max
|
||||||
|
//words = "a little after twenty-five past four in the early hours";
|
||||||
|
// h = 04;
|
||||||
|
// m = 27;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
const HOUR_WORD_ARRAY = [
|
||||||
|
"midnight", "one", "two", "three", "four", "five", "six", "seven",
|
||||||
|
"eight", "nine", "ten", "eleven", "twelve", "one", "two", "three",
|
||||||
|
"four", "five", "six", "seven", "eight", "nine", "ten", "eleven",
|
||||||
|
"midnight"];
|
||||||
|
const PART_DAY_WORD_ARRAY = ["",
|
||||||
|
" at night",
|
||||||
|
" in the early hours",
|
||||||
|
" in the early hours",
|
||||||
|
" in the early hours",
|
||||||
|
" in the early hours",
|
||||||
|
" in the morning",
|
||||||
|
" in the morning",
|
||||||
|
" in the morning",
|
||||||
|
" in the morning",
|
||||||
|
" in the morning",
|
||||||
|
" in the morning",
|
||||||
|
"",
|
||||||
|
" in the afternoon",
|
||||||
|
" in the afternoon",
|
||||||
|
" in the afternoon",
|
||||||
|
" in the afternoon",
|
||||||
|
" in the afternoon",
|
||||||
|
" in the evening",
|
||||||
|
" in the evening",
|
||||||
|
" in the evening",
|
||||||
|
" in the evening",
|
||||||
|
" at night",
|
||||||
|
" at night",
|
||||||
|
""];
|
||||||
|
const MINUTES_ROUGH_ARRAY = ["",
|
||||||
|
"five past ",
|
||||||
|
"ten past ",
|
||||||
|
"quarter past ",
|
||||||
|
"twenty past ",
|
||||||
|
"twenty-five past ",
|
||||||
|
"half past ",
|
||||||
|
"twenty-five to ",
|
||||||
|
"twenty to ",
|
||||||
|
"quarter to ",
|
||||||
|
"ten to ",
|
||||||
|
"five to ",
|
||||||
|
""];
|
||||||
|
const MINUTES_ACCURATE_ARRAY = ["", "just gone ", "a little after ", "coming up to ", "almost "];
|
||||||
|
|
||||||
|
var hourAdjusted = h;
|
||||||
|
var words = " ", hourWord = " ", partDayWord = " ", minutesRough = " ", minutesAccurate = " ", days = " ";
|
||||||
|
|
||||||
|
// At 33 past the hours we start referign to the next hour
|
||||||
|
if (m > 32) {
|
||||||
|
hourAdjusted = (h+ 1) % 24;
|
||||||
|
} else {
|
||||||
|
hourAdjusted = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
hourWord = HOUR_WORD_ARRAY[hourAdjusted];
|
||||||
|
partDayWord = PART_DAY_WORD_ARRAY[Math.round(hourAdjusted)];
|
||||||
|
minutesRough = MINUTES_ROUGH_ARRAY[Math.round((m + 0 ) / 5)];
|
||||||
|
minutesAccurate = MINUTES_ACCURATE_ARRAY[m % 5];
|
||||||
|
|
||||||
|
words = minutesAccurate + minutesRough + hourWord + partDayWord;
|
||||||
|
words = words.charAt(0).toUpperCase() + words.slice(1);
|
||||||
|
return words;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wordsFromDayMonth(day, date, month)
|
||||||
|
{
|
||||||
|
// Tests
|
||||||
|
|
||||||
|
// Example 12:00 = Twelve
|
||||||
|
// New Year's Day
|
||||||
|
// date = 1;
|
||||||
|
// month = 0;
|
||||||
|
// on the Ides of March
|
||||||
|
// date = 15;
|
||||||
|
// month = 2;
|
||||||
|
// , ERROR C Nonsense in BASIC
|
||||||
|
// date = 1;
|
||||||
|
// month = 3;
|
||||||
|
// - O'Canada
|
||||||
|
// date = 1;
|
||||||
|
// month = 6;
|
||||||
|
// - on Halloween
|
||||||
|
// date = 31;
|
||||||
|
// month = 9;
|
||||||
|
// - Christmas Eve
|
||||||
|
// date = 24;
|
||||||
|
// month = 11;
|
||||||
|
// - Christmas Day
|
||||||
|
// date = 25;
|
||||||
|
// month = 11;
|
||||||
|
// - Boxing day
|
||||||
|
// date = 26;
|
||||||
|
// month = 11;
|
||||||
|
// New Year's eve
|
||||||
|
// date = 31;
|
||||||
|
// month = 11;
|
||||||
|
// longest
|
||||||
|
// date = 29;
|
||||||
|
// month = 10;
|
||||||
|
|
||||||
|
|
||||||
|
const DAY_WORD_ARRAY = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
||||||
|
const DATE_WORD_ARRAY = ["zero", "first", "second", "third", "fourth", "fifth", "sixth", "seventh","eighth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth","sixteenth", "seventeenth", "eighteenth", "nineteenth", "twentieth", "twenty-first", "twenty-second", "twenty-third","twenty-fourth", "twenty-fifth", "twenty-sixth", "twenty-seventh", "twenty-eighth", "twenty-ninth", "thirtieth", "thirty-first"];
|
||||||
|
const MONTH_WORD_ARRAY = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
||||||
|
var words = " ";
|
||||||
|
words = DAY_WORD_ARRAY[day] + ", " + DATE_WORD_ARRAY[date] + " of " + MONTH_WORD_ARRAY[month];
|
||||||
|
if ((date == 1) && (month == 0)) {
|
||||||
|
words = "New Year's Day";
|
||||||
|
} else if ((date == 15) && (month == 2)) {
|
||||||
|
words = DAY_WORD_ARRAY[day] + " on the Ides of March";
|
||||||
|
} else if ((date == 1) && (month == 3)) {
|
||||||
|
words = DAY_WORD_ARRAY[day] + ", ERROR C Nonsense in BASIC";
|
||||||
|
} else if ((date == 1) && (month == 6)) {
|
||||||
|
words = DAY_WORD_ARRAY[day] + " - O'Canada";
|
||||||
|
} else if ((date == 31) && (month == 9)) {
|
||||||
|
words = DAY_WORD_ARRAY[day] + " - on Halloween";
|
||||||
|
} else if ((date == 24) && (month == 11)) {
|
||||||
|
words = "Christmas Eve";
|
||||||
|
} else if ((date == 25) && (month == 11)) {
|
||||||
|
words = "Christmas Day";
|
||||||
|
} else if ((date == 26) && (month == 11)) {
|
||||||
|
words = "Boxing Day";
|
||||||
|
} else if ((date == 31) && (month == 11)) {
|
||||||
|
words = "New Year's eve";
|
||||||
|
}
|
||||||
|
return words;
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
var x = g.getWidth()/2;
|
||||||
|
var y = g.getHeight()/2;
|
||||||
|
g.reset();
|
||||||
|
|
||||||
|
var d = new Date();
|
||||||
|
var h = d.getHours();
|
||||||
|
var m = d.getMinutes();
|
||||||
|
var day = d.getDay();
|
||||||
|
var date = d.getDate();
|
||||||
|
var month = d.getMonth();
|
||||||
|
|
||||||
|
var timeStr = wordsFromTime(h,m);
|
||||||
|
var dateStr = wordsFromDayMonth(day, date, month);
|
||||||
|
|
||||||
|
// draw time
|
||||||
|
// TO DO: Set Theme
|
||||||
|
g.setBgColor("#000000");
|
||||||
|
g.setColor("#ffffff");
|
||||||
|
g.clear();
|
||||||
|
g.setFontAlign(0,0).setFont("Vector",24);
|
||||||
|
g.drawString(g.wrapString(timeStr, g.getWidth()).join("\n"),x,y-24*0);
|
||||||
|
// draw date
|
||||||
|
|
||||||
|
g.setFontAlign(0,0).setFont("Vector",12);
|
||||||
|
g.drawString(g.wrapString(dateStr, g.getWidth()).join("\n"),x,y+12*6);
|
||||||
|
// queue draw in one minute
|
||||||
|
queueDraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear the screen once/, at startup
|
||||||
|
g.clear();
|
||||||
|
// draw immediately at first, queue update
|
||||||
|
draw();
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show launcher when middle button pressed
|
||||||
|
Bangle.setUI("clock");
|
||||||
|
// Load widgets
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,10 @@
|
||||||
|
{ "id": "exactwords",
|
||||||
|
"name": "Exect Words Clock",
|
||||||
|
"shortName":"Exect Words",
|
||||||
|
"version":"0.1",
|
||||||
|
"description": "Each minute of the day has a different phrase. ",
|
||||||
|
"icon": "app.png",
|
||||||
|
"tags": "clock",
|
||||||
|
"supports" : ["BANGLEJS2"],
|
||||||
|
"readme": "README.md"
|
||||||
|
}
|