Changeset 2185279
- Timestamp:
- 11/03/2019 07:42:03 PM (6 years ago)
- File:
-
- 1 edited
-
sitespeaker-widget/trunk/main.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sitespeaker-widget/trunk/main.js
r2154353 r2185279 1 1 (function($) { 2 var allVoices, bootstrap, selectedLang, selectedVoice, testAudio = document.createElement("AUDIO");2 var allVoices, bootstrap, apiKey, selectedLang, selectedVoice, testAudio = document.createElement("AUDIO"); 3 3 $(onDomReady); 4 4 5 5 function onDomReady() { 6 Promise.all([loadVoices(), loadBootstrap()]) 7 .then(function(res) { 8 allVoices = res[0]; 9 bootstrap = res[1]; 10 selectedLang = $("#sitespeaker_lang").data("value") || "en-US"; 11 selectedVoice = $("#sitespeaker_voice").data("value") || ""; 12 updateLanguages(); 13 updateVoices(); 14 }) 6 apiKey = $("#sitespeaker_key").val() || ""; 7 selectedLang = $("#sitespeaker_lang").data("value") || "en-US"; 8 selectedVoice = $("#sitespeaker_voice").data("value") || ""; 9 Promise.all([loadVoices(), loadBootstrap()]).then(update); 15 10 $("#sitespeaker_key").change(function() { 16 updateCode(); 11 apiKey = this.value; 12 loadVoices().then(update); 17 13 }) 18 14 $("#sitespeaker_lang").change(function() { 19 15 selectedLang = this.value; 20 selectedVoice = ""; 21 updateVoices(); 22 updateCode(); 16 update(); 23 17 }) 24 18 $("#sitespeaker_voice").change(function() { 25 19 selectedVoice = this.value; 26 update Code();20 update(); 27 21 }) 28 22 $("#sitespeaker_test").click(function() { … … 37 31 38 32 function loadVoices() { 33 if (!apiKey) { 34 allVoices = []; 35 return; 36 } 39 37 return new Promise(function(fulfill) { 40 $.get("https://ws.sitespeaker.com/list-voices", fulfill); 38 $.post({ 39 url: "https://ws.sitespeaker.com/list-voices", 40 data: JSON.stringify({key: apiKey}), 41 contentType: "application/json", 42 dataType: "json", 43 success: function(res) { 44 allVoices = res; 45 fulfill(); 46 }, 47 error: function() { 48 alert("Failed to load voice list, possibly invalid API key"); 49 allVoices = []; 50 fulfill(); 51 } 52 }) 41 53 }) 42 54 } … … 44 56 function loadBootstrap() { 45 57 return new Promise(function(fulfill) { 46 $.get("https://assets.sitespeaker.com/embed/js/bootstrap.min.js", fulfill); 58 $.get("https://assets.sitespeaker.com/embed/js/bootstrap.min.js", function(res) { 59 bootstrap = res; 60 fulfill(); 61 }) 47 62 }) 48 63 } 49 64 50 function update Languages() {65 function update() { 51 66 var languages = Array.from(new Set(allVoices.map(function(voice) {return voice.lang}))).sort(); 67 if (selectedLang && languages.indexOf(selectedLang) == -1) selectedLang = ""; 68 $("#sitespeaker_lang").empty(); 69 $("<option>").val("").appendTo("#sitespeaker_lang"); 52 70 languages.forEach(function(lang) { 53 71 $("<option>").val(lang) … … 56 74 }) 57 75 $("#sitespeaker_lang").val(selectedLang); 58 }59 76 60 function updateVoices() {61 var voices = allVoices.filter(function(voice) {return voice.lang == selectedLang});77 var voices = allVoices.filter(function(voice) {return voice.lang == selectedLang}).sort(function(a,b) {return a.desc.localeCompare(b.desc)}); 78 if (selectedVoice && !voices.some(function(voice) {return voice.name == selectedVoice})) selectedVoice = ""; 62 79 $("#sitespeaker_voice").empty(); 63 80 $("<option>").val("").appendTo("#sitespeaker_voice"); … … 68 85 }) 69 86 $("#sitespeaker_voice").val(selectedVoice); 70 }71 87 72 function updateCode() {73 88 var apiKey = $("#sitespeaker_key").val(); 74 89 if (apiKey && selectedLang && selectedVoice) {
Note: See TracChangeset
for help on using the changeset viewer.