From 9fb2492a1ca1916db9a541e4d836f4d564adab1a Mon Sep 17 00:00:00 2001 From: fncolon Date: Wed, 23 Feb 2022 23:26:02 +0700 Subject: [PATCH 1/6] Add buddy alarm --- desktop/apps/desktop.alarm/desktop.alarm.html | 38 +++++ desktop/apps/desktop.alarm/desktop.alarm.js | 144 ++++++++++++++++++ index.html | 14 +- 3 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 desktop/apps/desktop.alarm/desktop.alarm.html create mode 100644 desktop/apps/desktop.alarm/desktop.alarm.js diff --git a/desktop/apps/desktop.alarm/desktop.alarm.html b/desktop/apps/desktop.alarm/desktop.alarm.html new file mode 100644 index 0000000..17633ae --- /dev/null +++ b/desktop/apps/desktop.alarm/desktop.alarm.html @@ -0,0 +1,38 @@ +
+
+
+ + + + + + +
+
+
+
+
+
+

+ + + + + + +

+ + +

+
+
+
+
+
+
Build: v4.20.69
+
+ +
diff --git a/desktop/apps/desktop.alarm/desktop.alarm.js b/desktop/apps/desktop.alarm/desktop.alarm.js new file mode 100644 index 0000000..fe8f631 --- /dev/null +++ b/desktop/apps/desktop.alarm/desktop.alarm.js @@ -0,0 +1,144 @@ +desktop.alarm = {}; +desktop.alarm.label = "Alarm"; + +desktop.alarm.load = function loadDesktopLogin(params, next) { + desktop.loadRemoteAssets( + [ + "alarm", // this loads the sibling desktop.alarm.html file into
+ ], + function (err) { + // if user clicks on top right menu, focus on alarm form + $(".alarmLink").on("click", function () { + $("#window_alarm").show(); + }); + + // set our variables + var time, + alarm, + currentH, + currentM, + activeAlarm = false, + sound = new Audio( + "https://freesound.org/data/previews/316/316847_4939433-lq.mp3" + ); + + /* + audio sound source: https://freesound.org/people/SieuAmThanh/sounds/397787/ +*/ + + // loop alarm + sound.loop = true; + + // define a function to display the current time + function displayTime() { + var now = new Date(); + time = now.toLocaleTimeString(); + clock.textContent = time; + // time = "1:00:00 AM"; + // watch for alarm + if (time === alarm) { + sound.play(); + + // show snooze button + snooze.className = ""; + } + setTimeout(displayTime, 1000); + } + displayTime(); + + // add option values relative towards time + function addMinSecVals(id) { + var select = id; + var min = 59; + + for (i = 0; i <= min; i++) { + // defined as new Option(text, value) + select.options[select.options.length] = new Option( + i < 10 ? "0" + i : i, + i < 10 ? "0" + i : i + ); + } + } + function addHours(id) { + var select = id; + var hour = 12; + + for (i = 1; i <= hour; i++) { + // defined as new Option(text, value) + select.options[select.options.length] = new Option( + i < 10 ? "0" + i : i, + i + ); + } + } + addMinSecVals(minutes); + addMinSecVals(seconds); + addHours(hours); + + // set and clear alarm + startstop.onclick = function () { + // set the alarm + if (activeAlarm === false) { + hours.disabled = true; + minutes.disabled = true; + seconds.disabled = true; + ampm.disabled = true; + + alarm = + hours.value + + ":" + + minutes.value + + ":" + + seconds.value + + " " + + ampm.value; + this.textContent = "Clear Alarm"; + activeAlarm = true; + } else { + // clear the alarm + hours.disabled = false; + minutes.disabled = false; + seconds.disabled = false; + ampm.disabled = false; + + sound.pause(); + alarm = "00:00:00 AM"; + this.textContent = "Set Alarm"; + + // hide snooze button + snooze.className = "hide"; + activeAlarm = false; + } + }; + + // snooze for 5 minutes + snooze.onclick = function () { + if (activeAlarm === true) { + // grab the current hour and minute + currentH = time.substr(0, time.length - 9); + currentM = time.substr(currentH.length + 1, time.length - 8); + + if (currentM >= "55") { + minutes.value = "00"; + hours.value = parseInt(currentH) + 1; + } else { + if (parseInt(currentM) + 5 <= 9) { + minutes.value = "0" + parseInt(currentM + 5); + } else { + minutes.value = parseInt(currentM) + 5; + } + } + + // hide snooze button + snooze.className = "hide"; + + // now reset alarm + startstop.click(); + startstop.click(); + } else { + return false; + } + }; + } + ); +}; diff --git a/index.html b/index.html index f8a5cea..f13f8c9 100755 --- a/index.html +++ b/index.html @@ -127,7 +127,18 @@ - + + + +
+ + + + +
+ + - - + + - - - + + + - - - - + + + + - -
-
- - \ No newline at end of file + +
+ + From 2af99ce3aee928b6088f93a1f5b50bbbc0e0ff2d Mon Sep 17 00:00:00 2001 From: fncolon Date: Thu, 17 Mar 2022 12:41:35 +0700 Subject: [PATCH 3/6] meta: ignore .vscode --- .gitignore | 3 ++- .vscode/settings.json | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 496ee2c..e16deed 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.DS_Store \ No newline at end of file +.DS_Store +/.vscode \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 6b665aa..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "liveServer.settings.port": 5501 -} From 9889ce653212ab9e721e0cf97722f25dbeff67a3 Mon Sep 17 00:00:00 2001 From: fncolon Date: Thu, 17 Mar 2022 12:45:15 +0700 Subject: [PATCH 4/6] meta: delete alarm.css --- desktop/apps/desktop.alarm/desktop.alarm.js | 2 + desktop/assets/css/alarm.css | 69 --------------------- 2 files changed, 2 insertions(+), 69 deletions(-) delete mode 100644 desktop/assets/css/alarm.css diff --git a/desktop/apps/desktop.alarm/desktop.alarm.js b/desktop/apps/desktop.alarm/desktop.alarm.js index 4619dba..63bbb2c 100644 --- a/desktop/apps/desktop.alarm/desktop.alarm.js +++ b/desktop/apps/desktop.alarm/desktop.alarm.js @@ -38,6 +38,8 @@ desktop.app.alarm.load = function loadDesktopLogin() { if (time === alarm) { sound.play(); + desktop.app.wallpaper.drawSolid("red"); + // show snooze button snooze.className = ""; } diff --git a/desktop/assets/css/alarm.css b/desktop/assets/css/alarm.css deleted file mode 100644 index 8281ae6..0000000 --- a/desktop/assets/css/alarm.css +++ /dev/null @@ -1,69 +0,0 @@ -#helper_seconds { - height: 44px; - border: none; - overflow: hidden; -} -#helper_seconds::-moz-focus-inner { - border: 0; -} -#helper_seconds:focus { - outline: none; -} -#helper_seconds option { - width: 40px; - font-size: 1.2em; - padding: 10px 0; - text-align: center; - margin-right: 20px; - display: inline-block; - cursor: pointer; - border-radius: 5px; -} - -#helper_minutes { - height: 44px; - border: none; - overflow: hidden; -} -#helper_minutes::-moz-focus-inner { - border: 0; -} -#helper_minutes:focus { - outline: none; -} -#helper_minutes option { - width: 40px; - font-size: 1.2em; - padding: 10px 0; - text-align: center; - margin-right: 20px; - display: inline-block; - cursor: pointer; - border-radius: 5px; -} - -#helper_hours { - height: 44px; - border: none; - overflow: hidden; -} -#helper_hours::-moz-focus-inner { - border: 0; -} -#helper_hours:focus { - outline: none; -} -#helper_hours option { - width: 40px; - font-size: 1.2em; - padding: 10px 0; - text-align: center; - margin-right: 20px; - display: inline-block; - cursor: pointer; - border-radius: 5px; -} - -#snooze.hide { - display: none; -} \ No newline at end of file From 131ebbcd025d7b50dd5e1ba5ab5f78ef248384a6 Mon Sep 17 00:00:00 2001 From: fncolon Date: Thu, 17 Mar 2022 12:46:53 +0700 Subject: [PATCH 5/6] delete drawSolid --- desktop/apps/desktop.alarm/desktop.alarm.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/desktop/apps/desktop.alarm/desktop.alarm.js b/desktop/apps/desktop.alarm/desktop.alarm.js index 63bbb2c..4619dba 100644 --- a/desktop/apps/desktop.alarm/desktop.alarm.js +++ b/desktop/apps/desktop.alarm/desktop.alarm.js @@ -38,8 +38,6 @@ desktop.app.alarm.load = function loadDesktopLogin() { if (time === alarm) { sound.play(); - desktop.app.wallpaper.drawSolid("red"); - // show snooze button snooze.className = ""; } From 963faaed352b7c895632b647b32e1628070120f2 Mon Sep 17 00:00:00 2001 From: fncolon Date: Thu, 17 Mar 2022 13:43:34 +0700 Subject: [PATCH 6/6] integrate desktop play for buddies E.128191219 conventions --- desktop/apps/desktop.alarm/desktop.alarm.html | 1 - desktop/apps/desktop.alarm/desktop.alarm.js | 58 ++++-------------- desktop/assets/audio/alarm.mp3 | Bin 0 -> 17568 bytes 3 files changed, 13 insertions(+), 46 deletions(-) create mode 100644 desktop/assets/audio/alarm.mp3 diff --git a/desktop/apps/desktop.alarm/desktop.alarm.html b/desktop/apps/desktop.alarm/desktop.alarm.html index 17633ae..c910dbb 100644 --- a/desktop/apps/desktop.alarm/desktop.alarm.html +++ b/desktop/apps/desktop.alarm/desktop.alarm.html @@ -24,7 +24,6 @@

-

diff --git a/desktop/apps/desktop.alarm/desktop.alarm.js b/desktop/apps/desktop.alarm/desktop.alarm.js index 4619dba..37d1ef9 100644 --- a/desktop/apps/desktop.alarm/desktop.alarm.js +++ b/desktop/apps/desktop.alarm/desktop.alarm.js @@ -6,7 +6,7 @@ desktop.app.alarm.load = function loadDesktopLogin() { [ "alarm", // this loads the sibling desktop.app.alarm.html file into
], - function (err) { + function () { // if user clicks on top right menu, focus on alarm form $(".alarmLink").on("click", function () { $("#window_alarm").show(); @@ -15,18 +15,17 @@ desktop.app.alarm.load = function loadDesktopLogin() { // set our variables var time, alarm, - currentH, - currentM, activeAlarm = false, - sound = new Audio( - "https://freesound.org/data/previews/316/316847_4939433-lq.mp3" - ); + buddyStop = false; /* audio sound source: https://freesound.org/people/SieuAmThanh/sounds/397787/ */ - // loop alarm - sound.loop = true; + function loopAlarm () { + if(buddyStop === false) { + return desktop.play("alarm.mp3", false, loopAlarm); + } + } // define a function to display the current time function displayTime() { @@ -36,10 +35,9 @@ desktop.app.alarm.load = function loadDesktopLogin() { // time = "1:00:00 AM"; // watch for alarm if (time === alarm) { - sound.play(); - - // show snooze button - snooze.className = ""; + desktop.play( + "alarm.mp3" + , false, loopAlarm); } setTimeout(displayTime, 1000); } @@ -93,6 +91,7 @@ desktop.app.alarm.load = function loadDesktopLogin() { ampm.value; this.textContent = "Clear Alarm"; activeAlarm = true; + buddyStop = false; } else { // clear the alarm hours.disabled = false; @@ -101,41 +100,10 @@ desktop.app.alarm.load = function loadDesktopLogin() { ampm.disabled = false; sound.pause(); - alarm = "00:00:00 AM"; + alarm = "01:00:00 AM"; this.textContent = "Set Alarm"; - - // hide snooze button - snooze.className = "hide"; activeAlarm = false; - } - }; - - // snooze for 5 minutes - snooze.onclick = function () { - if (activeAlarm === true) { - // grab the current hour and minute - currentH = time.substr(0, time.length - 9); - currentM = time.substr(currentH.length + 1, time.length - 8); - - if (currentM >= "55") { - minutes.value = "00"; - hours.value = parseInt(currentH) + 1; - } else { - if (parseInt(currentM) + 5 <= 9) { - minutes.value = "0" + parseInt(currentM + 5); - } else { - minutes.value = parseInt(currentM) + 5; - } - } - - // hide snooze button - snooze.className = "hide"; - - // now reset alarm - startstop.click(); - startstop.click(); - } else { - return false; + buddyStop = true; } }; } diff --git a/desktop/assets/audio/alarm.mp3 b/desktop/assets/audio/alarm.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c01476f926ee7ed327371327a441aa487e53f4a5 GIT binary patch literal 17568 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 literal 0 HcmV?d00001