Index: chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/common.js |
=================================================================== |
--- chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/common.js (revision 0) |
+++ chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/common.js (revision 0) |
@@ -0,0 +1,173 @@ |
+var DEFAULT_A1_TT = '09:30'; |
+var DEFAULT_A1_AMPM = 0; |
+var DEFAULT_A2_TT = '03:30'; |
+var DEFAULT_A2_AMPM = 1; |
+var DEFAULT_RATE = 1.0; |
+var DEFAULT_VOLUME = 1.0; |
+var DEFAULT_PHRASE = 'It\'s $TIME, so get up!'; |
+var DEFAULT_SOUND = 'ringing'; |
+ |
+var audio = null; |
+ |
+var isPlaying = false; |
+var isSpeaking = false; |
+var isAnimating = false; |
+ |
+// Overridden in popup.js but not in background.js. |
+window.displayAlarmAnimation = function() { |
+}; |
+ |
+// Overridden in popup.js but not in background.js. |
+window.stopAlarmAnimation = function() { |
+}; |
+ |
+// Overridden in background.js but not in popup.js. |
+window.flashIcon = function() { |
+}; |
+ |
+// Overridden in background.js but not in popup.js. |
+window.stopFlashingIcon = function() { |
+}; |
+ |
+function $(id) { |
+ return document.getElementById(id); |
+} |
+ |
+function parseTime(timeString, ampm) { |
+ var time = timeString.match(/^(\d\d):(\d\d)$/); |
+ if (!time) { |
+ throw 'Cannot parse: ' + timeString; |
+ } |
+ |
+ var hours = parseInt(time[1], 10); |
+ if (hours == 12 && ampm == 0) { |
+ hours = 0; |
+ } else { |
+ hours += (hours < 12 && ampm == 1)? 12 : 0; |
+ } |
+ var minutes = parseInt(time[2], 10) || 0; |
+ |
+ return [hours, minutes]; |
+} |
+ |
+function stopAll() { |
+ if (audio) { |
+ audio.pause(); |
+ isPlaying = false; |
+ } |
+ try { |
+ chrome.tts.stop(); |
+ isSpeaking = false; |
+ } catch (e) { |
+ } |
+ window.stopAlarmAnimation(); |
+ window.stopFlashingIcon(); |
+} |
+ |
+function playSound(duckAudio) { |
+ if (audio) { |
+ audio.pause(); |
+ document.body.removeChild(audio); |
+ audio = null; |
+ } |
+ |
+ var currentSound = localStorage['sound'] || DEFAULT_SOUND; |
+ if (currentSound == 'none') { |
+ return; |
+ } |
+ |
+ audio = document.createElement('audio'); |
+ audio.addEventListener('ended', function(evt) { |
+ isPlaying = false; |
+ }); |
+ document.body.appendChild(audio); |
+ audio.autoplay = true; |
+ |
+ var src = 'audio/' + currentSound + '.ogg'; |
+ var volume = parseFloat(localStorage['volume']) || DEFAULT_VOLUME; |
+ audio.volume = volume; |
+ audio.src = src; |
+ isPlaying = true; |
+ |
+ if (duckAudio) { |
+ for (var i = 0; i < 10; i++) { |
+ (function(i) { |
+ window.setTimeout(function() { |
+ var duckedVolume = volume * (1.0 - 0.07 * (i + 1)); |
+ audio.volume = duckedVolume; |
+ }, 1800 + 50 * i); |
+ })(i); |
+ } |
+ } |
+} |
+ |
+function getTimeString(hh, mm) { |
+ var ampm = hh >= 12 ? 'P M' : 'A M'; |
+ hh = (hh % 12); |
+ if (hh == 0) |
+ hh = 12; |
+ if (mm == 0) |
+ mm = 'o\'clock'; |
+ else if (mm < 10) |
+ mm = 'O ' + mm; |
+ |
+ return hh + ' ' + mm + ' ' + ampm; |
+} |
+ |
+function speak(text) { |
+ var rate = parseFloat(localStorage['rate']) || DEFAULT_RATE; |
+ var pitch = 1.0; |
+ var volume = parseFloat(localStorage['volume']) || DEFAULT_VOLUME; |
+ var voice = localStorage['voice']; |
+ chrome.tts.speak( |
+ text, |
+ {voiceName: voice, |
+ rate: rate, |
+ pitch: pitch, |
+ volume: volume, |
+ onEvent: function(evt) { |
+ if (evt.type == 'end') { |
+ isSpeaking = false; |
+ } |
+ } |
+ }); |
+} |
+ |
+function speakPhraseWithTimeString(timeString) { |
+ var phraseTemplate = localStorage['phrase'] || DEFAULT_PHRASE; |
+ var utterance = phraseTemplate.replace(/\$TIME/g, timeString); |
+ speak(utterance); |
+} |
+ |
+function speakPhraseWithCurrentTime() { |
+ var d = new Date(); |
+ speakPhraseWithTimeString(getTimeString(d.getHours(), d.getMinutes())); |
+} |
+ |
+function ringAlarm(alarmHours, alarmMinutes) { |
+ window.displayAlarmAnimation(); |
+ window.flashIcon(); |
+ |
+ var phraseTemplate = localStorage['phrase'] || DEFAULT_PHRASE; |
+ var currentSound = localStorage['sound'] || DEFAULT_SOUND; |
+ |
+ if (phraseTemplate == '') { |
+ playSound(false); |
+ } else if (currentSound == 'none') { |
+ speakPhraseWithTimeString(getTimeString(alarmHours, alarmMinutes)); |
+ } else { |
+ chrome.tts.stop(); |
+ playSound(true); |
+ isSpeaking = true; |
+ window.setTimeout(function() { |
+ if (isSpeaking) { |
+ speakPhraseWithTimeString(getTimeString(alarmHours, alarmMinutes)); |
+ } |
+ }, 2000); |
+ } |
+} |
+ |
+function ringAlarmWithCurrentTime() { |
+ var d = new Date(); |
+ ringAlarm(d.getHours(), d.getMinutes()); |
+} |
Property changes on: chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/common.js |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |