15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var blankClockImage; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var blankClockAnim1Image; 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var blankClockAnim2Image; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var animationTimer; 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var currentClockImage; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var port; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateEnabledStatus(alarm) { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var enabled = $('a' + alarm + '_on').checked; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a' + alarm + '_tt').disabled = !enabled; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a' + alarm + '_ampm').disabled = !enabled; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var valid = true; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var tt = $('a' + alarm + '_tt').value; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var ampm = $('a' + alarm + '_ampm').selectedIndex; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parseTime(tt, ampm); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } catch (x) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) valid = false; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (valid) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a' + alarm + '_wrap').removeAttribute('aria-invalid'); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a' + alarm + '_wrap').setAttribute('aria-invalid', 'true'); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enabled) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a' + alarm + '_wrap').classList.remove('disabled'); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a' + alarm + '_wrap').classList.add('disabled'); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function loadAllImages() { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var loadCount = 0; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var img = new Image(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) img.onload = function() { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blankClockImage = img; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) currentClockImage = blankClockImage; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drawClock(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) img.src = 'blank-clock-150.png'; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These will finish loading before they're needed, no need 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for an onload handler. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blankClockAnim1Image = new Image(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blankClockAnim1Image.src = 'blank-clock-ring1-150.png'; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blankClockAnim2Image = new Image(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blankClockAnim2Image.src = 'blank-clock-ring2-150.png'; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function drawClock(hh, mm, ss) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hh == undefined || mm == undefined) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var d = new Date(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hh = d.getHours(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mm = d.getMinutes(); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ss = d.getSeconds() + 0.001 * d.getMilliseconds(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!currentClockImage) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadAllImages(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var ctx = $('clock').getContext('2d'); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.drawImage(currentClockImage, 0, 0); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the hour by the fraction of the minute 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hh = (hh % 12) + (mm / 60); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the minute by the fraction of the second 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mm += (ss / 60); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hourAngle = Math.PI * hh / 6; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hourX = Math.sin(hourAngle); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hourY = -Math.cos(hourAngle); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var minAngle = Math.PI * mm / 30; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var minX = Math.sin(minAngle); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var minY = -Math.cos(minAngle); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var secAngle = Math.PI * ss / 30; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var secX = Math.sin(secAngle); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var secY = -Math.cos(secAngle); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cx = 75; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cy = 77; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineWidth = 5; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.strokeStyle = '#ffffff'; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.globalAlpha = 0.5; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.beginPath(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.moveTo(cx - 4 * hourX, cy - 4 * hourY); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineTo(cx + 20 * hourX, cy + 20 * hourY); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.stroke(); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.beginPath(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.moveTo(cx - 8 * minX, cy - 8 * minY); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineTo(cx + 35 * minX, cy + 33 * minY); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.stroke(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineWidth = 3; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.strokeStyle = '#696969'; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.globalAlpha = 1.0; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.beginPath(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.moveTo(cx - 4 * hourX, cy - 4 * hourY); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineTo(cx + 20 * hourX, cy + 20 * hourY); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.stroke(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.beginPath(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.moveTo(cx - 8 * minX, cy - 8 * minY); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineTo(cx + 35 * minX, cy + 33 * minY); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.stroke(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineWidth = 1; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.strokeStyle = '#990000'; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.globalAlpha = 1.0; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.beginPath(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.moveTo(cx - 4 * secX, cy - 4 * secY); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.lineTo(cx + 40 * secX, cy + 40 * secY); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctx.stroke(); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateCurrentTime() { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var now = new Date(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hh = now.getHours(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var mm = now.getMinutes(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var ss = now.getSeconds(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var str = ''; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hh % 12 == 0) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += '12'; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += (hh % 12); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += ':'; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mm >= 10) { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += mm; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += '0' + mm; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += ':'; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ss >= 10) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += ss; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += '0' + ss; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hh >= 12) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += " PM"; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str += " AM"; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('current_time').innerText = str; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Override from common.js 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.stopAlarmAnimation = function() { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.clearTimeout(animationTimer); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) currentClockImage = blankClockImage; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drawClock(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isAnimating = false; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Override from common.js 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.displayAlarmAnimation = function() { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isAnimating = true; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rings = 100; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function ring() { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rings == 0) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stopAlarmAnimation(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) currentClockImage = (rings % 2 == 0)? 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blankClockAnim1Image: 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blankClockAnim2Image; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drawClock(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rings--; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) animationTimer = window.setTimeout(ring, 50); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ring(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function addOutlineStyleListeners() { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.addEventListener('click', function(evt) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.body.classList.add('nooutline'); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, true); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.addEventListener('keydown', function(evt) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.body.classList.remove('nooutline'); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, true); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function load() { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try { 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) port = chrome.runtime.connect(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) port.onMessage.addListener(function(msg) { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (msg.cmd == 'anim') { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) displayAlarmAnimation(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } catch (e) { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addOutlineStyleListeners(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stopAll(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drawClock(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setInterval(drawClock, 100); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateCurrentTime(); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setInterval(updateCurrentTime, 250); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function updateTime(timeElement) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!parseTime(timeElement.value)) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timeElement.valueAsNumber = 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timeElement.valueAsNumber % (12 * 60 * 60 * 1000); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timeElement.valueAsNumber < (1 * 60 * 60 * 1000)) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timeElement.valueAsNumber += (12 * 60 * 60 * 1000); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('clock').addEventListener('click', function(evt) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isPlaying || isSpeaking || isAnimating) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stopAll(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ringAlarmWithCurrentTime(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('clock').addEventListener('keydown', function(evt) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.keyCode == 13 || evt.keyCode == 32) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isPlaying || isSpeaking || isAnimating) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stopAll(); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ringAlarmWithCurrentTime(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alarm 1 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var a1_tt = localStorage['a1_tt'] || DEFAULT_A1_TT; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_tt').value = a1_tt; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_tt').addEventListener('input', function(evt) { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(1); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!updateTime($('a1_tt'))) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a1_tt'] = $('a1_tt').value; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(1); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_tt').addEventListener('change', function(evt) { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ($('a1_tt').value.length == 4 && 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parseTime('0' + $('a1_tt').value)) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_tt').value = '0' + $('a1_tt').value; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!updateTime($('a1_tt'))) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a1_tt'] = $('a1_tt').value; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(1); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var a1_on = (localStorage['a1_on'] == 'true'); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_on').checked = a1_on; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_on').addEventListener('change', function(evt) { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.setTimeout(function() { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a1_on'] = $('a1_on').checked; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(1); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 0); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var a1_ampm = localStorage['a1_ampm'] || DEFAULT_A1_AMPM; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_ampm').selectedIndex = a1_ampm; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a1_ampm').addEventListener('change', function(evt) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a1_ampm'] = $('a1_ampm').selectedIndex; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(1); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alarm 2 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var a2_tt = localStorage['a2_tt'] || DEFAULT_A2_TT; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_tt').value = a2_tt; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_tt').addEventListener('input', function(evt) { 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(2); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!updateTime($('a2_tt'))) { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a2_tt'] = $('a2_tt').value; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(2); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_tt').addEventListener('change', function(evt) { 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ($('a2_tt').value.length == 4 && 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parseTime('0' + $('a2_tt').value)) { 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_tt').value = '0' + $('a2_tt').value; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!updateTime($('a2_tt'))) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a2_tt'] = $('a2_tt').value; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(2); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var a2_on = (localStorage['a2_on'] == 'true'); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_on').checked = a2_on; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_on').addEventListener('change', function(evt) { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.setTimeout(function() { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a2_on'] = $('a2_on').checked; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(2); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 0); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var a2_ampm = localStorage['a2_ampm'] || DEFAULT_A2_AMPM; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_ampm').selectedIndex = a2_ampm; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('a2_ampm').addEventListener('change', function(evt) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['a2_ampm'] = $('a2_ampm').selectedIndex; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEnabledStatus(2); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Phrase 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var phrase = localStorage['phrase'] || DEFAULT_PHRASE; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('phrase').value = phrase; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('phrase').addEventListener('change', function(evt) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['phrase'] = $('phrase').value; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Speech parameters 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rateElement = $('rate'); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var volumeElement = $('volume'); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rate = localStorage['rate'] || DEFAULT_RATE; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var volume = localStorage['volume'] || DEFAULT_VOLUME; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rateElement.value = rate; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volumeElement.value = volume; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function listener(evt) { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rate = rateElement.value; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['rate'] = rate; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volume = volumeElement.value; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['volume'] = volume; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rateElement.addEventListener('keyup', listener, false); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volumeElement.addEventListener('keyup', listener, false); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rateElement.addEventListener('mouseup', listener, false); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volumeElement.addEventListener('mouseup', listener, false); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var sound = $('sound'); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var currentSound = localStorage['sound'] || DEFAULT_SOUND; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < sound.options.length; i++) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sound.options[i].value == currentSound) { 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sound.selectedIndex = i; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['sound'] = sound.options[sound.selectedIndex].value; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sound.addEventListener('change', function() { 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['sound'] = sound.options[sound.selectedIndex].value; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var playSoundButton = $('playsound'); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) playSoundButton.addEventListener('click', function(evt) { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) playSound(false); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var playSpeechButton = $('playspeech'); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) playSpeechButton.addEventListener('click', function(evt) { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) speakPhraseWithCurrentTime(); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var voice = $('voice'); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var voiceArray = []; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chrome && chrome.tts) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tts.getVoices(function(va) { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceArray = va; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < voiceArray.length; i++) { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var opt = document.createElement('option'); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var name = voiceArray[i].voiceName; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name == localStorage['voice']) { 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.setAttribute('selected', ''); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.setAttribute('value', name); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.innerText = voiceArray[i].voiceName; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voice.appendChild(opt); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voice.addEventListener('change', function() { 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var i = voice.selectedIndex; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['voice'] = voiceArray[i].voiceName; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', load); 404