Skip to content

Commit c1142e6

Browse files
Merge pull request #8 from WesleyBranton/Version-1.6
Version 1.6
2 parents e3fd907 + 830ffec commit c1142e6

File tree

6 files changed

+124
-89
lines changed

6 files changed

+124
-89
lines changed

README.md

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,34 @@ To develop and test the extension, you need to open the "about:debugging" page i
1818
Further documentation about developing Firefox extensions can be found [here](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension).
1919

2020
## Release Notes
21+
### Version 1.6
22+
**[NEW]** Added ability to adjust chime volume (issue #6)
23+
**[FIXED]** Improved invalid alarm detection to reset an alarm that's set too far into the future (issue #7)
24+
2125
### Version 1.5
22-
* **[NEW]** Chime can now be stopped (issue #3)
23-
* **[NEW]** Added toolbar icon
24-
* **[FIXED]** Issue with chime not activating (issue #4)
25-
* **[FIXED]** Various code optimizations to improve performance
26+
**[NEW]** Chime can now be stopped (issue #3)
27+
**[NEW]** Added toolbar icon
28+
**[FIXED]** Issue with chime not activating (issue #4)
29+
**[FIXED]** Various code optimizations to improve performance
2630

2731
### Version 1.4
28-
* **[NEW]** Added "Fix Timing" button to the add-on options
29-
* **[FIXED]** Removed unnecessary developer code
32+
**[NEW]** Added "Fix Timing" button to the add-on options
33+
**[FIXED]** Removed unnecessary developer code
3034

3135
### Version 1.3.1
32-
* **[FIXED]** Chime is no longer 1 hour behind
36+
**[FIXED]** Chime is no longer 1 hour behind
3337

3438
### Version 1.3
35-
* **[NEW]** Changed to the more stable and reliable Javascript Alarm API
36-
* **[FIXED]** Repaired issues with add-on not working after a period of time
39+
**[NEW]** Changed to the more stable and reliable Javascript Alarm API
40+
**[FIXED]** Repaired issues with add-on not working after a period of time
3741

3842
### Version 1.2.1
39-
* **[FIXED]** Removed unnecessary developer testing code
43+
**[FIXED]** Removed unnecessary developer testing code
4044

4145
### Version 1.2
42-
* **[FIXED]** Default settings not loading on first install
43-
* **[FIXED]** Timing system not firing when computer is put in sleep mode
44-
* **[FIXED]** Improved timing system reliability
46+
**[FIXED]** Default settings not loading on first install
47+
**[FIXED]** Timing system not firing when computer is put in sleep mode
48+
**[FIXED]** Improved timing system reliability
4549

4650
### Version 1.1
47-
* **[NEW]** Added audio sample button to the add-on options
51+
**[NEW]** Added audio sample button to the add-on options

firefox/background.js

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,26 @@
55
// Get chime from settings on startup
66
async function firstLoad() {
77
var setting = await browser.storage.local.get('chime');
8-
chimeName = setting.chime;
9-
load();
10-
}
11-
12-
// Set default
13-
function handleInstalled(details) {
14-
if (details.reason == 'install') {
8+
if (setting.chime) {
9+
chimeName = setting.chime;
10+
} else {
11+
chimeName = 'default';
1512
browser.storage.local.set({
1613
chime: 'default'
1714
});
1815
}
16+
17+
setting = await browser.storage.local.get('volume');
18+
if (setting.volume) {
19+
chimeVolume = setting.volume;
20+
} else {
21+
chimeVolume = 1;
22+
browser.storage.local.set({
23+
'volume': 1
24+
});
25+
}
26+
27+
load();
1928
}
2029

2130
// Create alarm
@@ -40,7 +49,7 @@ async function alarmCheck() {
4049
var alarmTime = alarm.scheduledTime;
4150
var currentTime = new Date().getTime();
4251

43-
if (alarmTime < currentTime) {
52+
if (alarmTime < currentTime || (alarmTime - currentTime) > 3600000) {
4453
listenMessage('reload');
4554
}
4655
}
@@ -60,6 +69,7 @@ function hourTrigger(alarmInfo) {
6069
audio.addEventListener('ended', audioEnded);
6170
audio.addEventListener('pause', audioEnded);
6271
audio.addEventListener('play', audioStarted);
72+
audio.volume = chimeVolume;
6373
audio.play();
6474
}
6575

@@ -95,9 +105,14 @@ function storageChange(changes) {
95105
if (changes.chime) {
96106
chimeName = changes.chime.newValue;
97107
}
108+
109+
if (changes.volume) {
110+
chimeVolume = changes.volume.newValue;
111+
audio.volume = chimeVolume;
112+
}
98113
}
99114

100-
var chimeName, audio;
115+
var chimeName, chimeVolume, audio;
101116
firstLoad();
102117
browser.runtime.onInstalled.addListener(handleInstalled);
103118
browser.alarms.onAlarm.addListener(hourTrigger);

firefox/manifest.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"manifest_version": 2,
33
"name": "Grandfather Fox",
4-
"version": "1.5",
4+
"version": "1.6",
55
"description": "Turn Firefox into a grandfather clock that plays a tune at the top of each hour!",
66

77
"icons": {
@@ -16,7 +16,8 @@
1616
},
1717

1818
"options_ui": {
19-
"page": "options/options.html"
19+
"page": "options/options.html",
20+
"browser_style": false
2021
},
2122

2223
"browser_action": {

firefox/options/options.html

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,37 +9,27 @@
99
<link rel="stylesheet" href="theme.css">
1010
</head>
1111
<body>
12-
<form>
13-
<fieldset>
14-
<legend>Add-on Settings</legend>
15-
<label>Chime Noise: </label>
16-
<select id="chimeNoise">
17-
<option value="tower">Clock Tower</option>
18-
<option value="cuckoo">Cuckoo Clock</option>
19-
<option value="default" selected>Grandfather Clock (Default)</option>
20-
<option value="multibeep">Multiple Beeps</option>
21-
<option value="singlebeep">Single Beep</option>
22-
</select>
23-
<button id="sample" type="button">Sample Audio</button>
24-
</fieldset><br>
25-
Do you notice the chimes playing too early or too late? Do they not play at all? Did you recently change your computer's time settings? Press the <i>Fix Timing</i> button to fix issues with the timing function.<br>
26-
<button id="reload" type="button">Fix Timing</button>
27-
<audio id="tower">
28-
<source src="../audio/tower/3.ogg" type="audio/ogg">
29-
</audio>
30-
<audio id="cuckoo">
31-
<source src="../audio/cuckoo/3.ogg" type="audio/ogg">
32-
</audio>
33-
<audio id="default">
34-
<source src="../audio/default/3.ogg" type="audio/ogg">
35-
</audio>
36-
<audio id="multibeep">
37-
<source src="../audio/multibeep/3.ogg" type="audio/ogg">
38-
</audio>
39-
<audio id="singlebeep">
40-
<source src="../audio/singlebeep/3.ogg" type="audio/ogg">
41-
</audio>
42-
</form>
12+
<fieldset>
13+
<legend>Add-on Settings</legend>
14+
<label for="chimeVolume">Chime Volume: </label>
15+
<label id="volumeOutput">100%</label>
16+
<button id="volumeSave" class="hide">Save</button>
17+
<br>
18+
<input type="range" min="1" max="100" value="100" id="chimeVolume">
19+
<br>
20+
<label for="chimeNoise">Chime Noise: </label>
21+
<br>
22+
<select id="chimeNoise">
23+
<option value="tower">Clock Tower</option>
24+
<option value="cuckoo">Cuckoo Clock</option>
25+
<option value="default" selected>Grandfather Clock (Default)</option>
26+
<option value="multibeep">Multiple Beeps</option>
27+
<option value="singlebeep">Single Beep</option>
28+
</select>
29+
<button id="sample">Sample Audio</button>
30+
</fieldset><br>
31+
Do you notice the chimes playing too early or too late? Do they not play at all? Did you recently change your computer's time settings? Press the <i>Fix Timing</i> button to fix issues with the timing function.<br>
32+
<button id="reload" type="button">Fix Timing</button>
4333
<script src="options.js"></script>
4434
</body>
4535
</html>

firefox/options/options.js

Lines changed: 50 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,68 @@
22
* License, v. 2.0. If a copy of the MPL was not distributed with this
33
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
44

5-
// Save options
6-
function saveOptions() {
7-
var setting = document.getElementById('chimeNoise').value;
8-
browser.storage.local.set({'chime': setting});
5+
// Save chime option
6+
function saveChime() {
7+
browser.storage.local.set({
8+
'chime': chimeNoise.value
9+
});
910
}
1011

11-
// Load options from storage
12-
function restoreOptions() {
13-
browser.storage.local.get('chime', (res) => {
14-
var setting = document.getElementById('chimeNoise');
15-
setting.value = res.chime;
12+
// Save volume option
13+
function saveVolume() {
14+
volumeSave.className = "hide";
15+
chimeVolume = volumeSlider.value / 100;
16+
audio.volume = chimeVolume;
17+
browser.storage.local.set({
18+
'volume': chimeVolume
1619
});
1720
}
1821

22+
// Load options from storage
23+
async function restoreOptions() {
24+
var setting = await browser.storage.local.get('chime');
25+
chimeNoise.value = setting.chime;
26+
27+
setting = await browser.storage.local.get('volume');
28+
chimeVolume = setting.volume;
29+
volumeSlider.value = chimeVolume * 100;
30+
updateVolumeOutput();
31+
}
32+
1933
// Play audio sample
2034
function playAudio() {
21-
var sound = document.getElementById('tower');
22-
sound.pause();
23-
sound.currentTime = 0;
24-
sound = document.getElementById('cuckoo');
25-
sound.pause();
26-
sound.currentTime = 0;
27-
sound = document.getElementById('default');
28-
sound.pause();
29-
sound.currentTime = 0;
30-
sound = document.getElementById('multibeep');
31-
sound.pause();
32-
sound.currentTime = 0;
33-
sound = document.getElementById('singlebeep');
34-
sound.pause();
35-
sound.currentTime = 0;
36-
37-
var audioType = document.getElementById('chimeNoise').value;
38-
var x = document.getElementById(audioType);
39-
x.play();
35+
audio.pause();
36+
var audioType = chimeNoise.value;
37+
audio = new Audio('../audio/' + audioType + '/3.ogg');
38+
audio.volume = chimeVolume;
39+
audio.play();
4040
}
4141

4242
// Reload the alarm
4343
function reload() {
4444
chrome.runtime.sendMessage('reload');
4545
}
4646

47+
// Update volume output number
48+
function updateVolumeOutput() {
49+
volumeOutput.textContent = volumeSlider.value + '%';
50+
51+
if (volumeSlider.value / 100 != chimeVolume) {
52+
volumeSave.className = "";
53+
} else {
54+
volumeSave.className = "hide";
55+
}
56+
}
57+
58+
var chimeNoise = document.getElementById('chimeNoise');
59+
var volumeOutput = document.getElementById('volumeOutput');
60+
var volumeSlider = document.getElementById('chimeVolume');
61+
var volumeSave = document.getElementById('volumeSave');
62+
var audio = new Audio();
63+
var chimeVolume = 1;
4764
restoreOptions();
48-
document.getElementsByTagName('form')[0].addEventListener('change', saveOptions);
49-
document.getElementById('sample').addEventListener('click',playAudio);
50-
document.getElementById('reload').addEventListener('click',reload);
65+
document.getElementById('sample').addEventListener('click', playAudio);
66+
document.getElementById('reload').addEventListener('click', reload);
67+
volumeSlider.addEventListener('input', updateVolumeOutput);
68+
chimeNoise.addEventListener('change', saveChime);
69+
volumeSave.addEventListener('click', saveVolume);

firefox/options/theme.css

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,22 @@
33
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
44

55
fieldset {
6-
border: 2px solid #0996F8;
6+
border: 2px solid #963;
77
border-radius: 5px;
88
}
99

1010
legend {
11-
background: #0996F8;
11+
background: #963;
1212
color: white;
1313
border-radius: 3px;
14+
padding: 10px 15px;
15+
font-weight: bold;
1416
}
1517

1618
#reload {
1719
float: right;
20+
}
21+
22+
.hide {
23+
display: none !important;
1824
}

0 commit comments

Comments
 (0)