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)function load() { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedElement = document.getElementById('selected'); 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var sel = window.getSelection(); 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sel.removeAllRanges(); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var range = document.createRange(); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) range.selectNode(selectedElement); 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sel.addRange(range); 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rateElement = document.getElementById('rate'); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pitchElement = document.getElementById('pitch'); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var volumeElement = document.getElementById('volume'); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rate = localStorage['rate'] || 1.0; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pitch = localStorage['pitch'] || 1.0; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var volume = localStorage['volume'] || 1.0; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rateElement.value = rate; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitchElement.value = pitch; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volumeElement.value = volume; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function listener(evt) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rate = rateElement.value; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['rate'] = rate; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitch = pitchElement.value; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['pitch'] = pitch; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volume = volumeElement.value; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['volume'] = volume; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rateElement.addEventListener('keyup', listener, false); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitchElement.addEventListener('keyup', listener, false); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volumeElement.addEventListener('keyup', listener, false); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rateElement.addEventListener('mouseup', listener, false); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitchElement.addEventListener('mouseup', listener, false); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volumeElement.addEventListener('mouseup', listener, false); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var defaultsButton = document.getElementById('defaults'); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) defaultsButton.addEventListener('click', function(evt) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rate = 1.0; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitch = 1.0; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volume = 1.0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['rate'] = rate; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['pitch'] = pitch; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['volume'] = volume; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rateElement.value = rate; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitchElement.value = pitch; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volumeElement.value = volume; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var voice = document.getElementById('voice'); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var voiceArray = []; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tts.getVoices(function(va) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voiceArray = va; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < voiceArray.length; i++) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var opt = document.createElement('option'); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var name = voiceArray[i].voiceName; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name == localStorage['voice']) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.setAttribute('selected', ''); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.setAttribute('value', name); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt.innerText = voiceArray[i].voiceName; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voice.appendChild(opt); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) voice.addEventListener('change', function() { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var i = voice.selectedIndex; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['voice'] = voiceArray[i].voiceName; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, false); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var defaultKeyString = getDefaultKeyString(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var keyString = localStorage['speakKey']; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (keyString == undefined) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyString = defaultKeyString; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var testButton = document.getElementById('test'); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testButton.addEventListener('click', function(evt) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.tts.speak( 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Testing speech synthesis', 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {voiceName: localStorage['voice'], 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rate: parseFloat(rate), 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pitch: parseFloat(pitch), 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volume: parseFloat(volume)}); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hotKeyElement = document.getElementById('hotkey'); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hotKeyElement.value = keyString; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hotKeyElement.addEventListener('keydown', function(evt) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (evt.keyCode) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 27: // Escape 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.preventDefault(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hotKeyElement.blur(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 8: // Backspace 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 46: // Delete 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.preventDefault(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hotKeyElement.value = ''; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['speakKey'] = ''; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendKeyToAllTabs(''); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.speakKeyStr = ''; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 9: // Tab 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 16: // Shift 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 17: // Control 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 18: // Alt/Option 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 91: // Meta/Command 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.preventDefault(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var keyStr = keyEventToString(evt); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (keyStr) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hotKeyElement.value = keyStr; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localStorage['speakKey'] = keyStr; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendKeyToAllTabs(keyStr); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the key used by the content script running in the options page. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.speakKeyStr = keyStr; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.stopPropagation(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) evt.preventDefault(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, true); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', load); 131