Plugin Directory

Changeset 2185279


Ignore:
Timestamp:
11/03/2019 07:42:03 PM (6 years ago)
Author:
ken107
Message:

voice list changes with api key

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sitespeaker-widget/trunk/main.js

    r2154353 r2185279  
    11(function($) {
    2   var allVoices, bootstrap, selectedLang, selectedVoice, testAudio = document.createElement("AUDIO");
     2  var allVoices, bootstrap, apiKey, selectedLang, selectedVoice, testAudio = document.createElement("AUDIO");
    33  $(onDomReady);
    44 
    55  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);
    1510    $("#sitespeaker_key").change(function() {
    16       updateCode();
     11      apiKey = this.value;
     12      loadVoices().then(update);
    1713    })
    1814    $("#sitespeaker_lang").change(function() {
    1915      selectedLang = this.value;
    20       selectedVoice = "";
    21       updateVoices();
    22       updateCode();
     16      update();
    2317    })
    2418    $("#sitespeaker_voice").change(function() {
    2519      selectedVoice = this.value;
    26       updateCode();
     20      update();
    2721    })
    2822    $("#sitespeaker_test").click(function() {
     
    3731
    3832  function loadVoices() {
     33    if (!apiKey) {
     34      allVoices = [];
     35      return;
     36    }
    3937    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      })
    4153    })
    4254  }
     
    4456  function loadBootstrap() {
    4557    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      })
    4762    })
    4863  }
    4964
    50   function updateLanguages() {
     65  function update() {
    5166    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");
    5270    languages.forEach(function(lang) {
    5371      $("<option>").val(lang)
     
    5674    })
    5775    $("#sitespeaker_lang").val(selectedLang);
    58   }
    5976
    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 = "";
    6279    $("#sitespeaker_voice").empty();
    6380    $("<option>").val("").appendTo("#sitespeaker_voice");
     
    6885    })
    6986    $("#sitespeaker_voice").val(selectedVoice);
    70   }
    7187
    72   function updateCode() {
    7388    var apiKey = $("#sitespeaker_key").val();
    7489    if (apiKey && selectedLang && selectedVoice) {
Note: See TracChangeset for help on using the changeset viewer.