Widget:Pinyin chart scripts

<script> var audioEndedListener = function() {

   var $audioDiv = $('.pinyin-table-audio-container');
   if ($audioDiv.children().length>1) {
       $audioDiv.children().get(1).play();
   }
   $(this).remove();
   if ($audioDiv.children().length>1) {
       $audioDiv.children().get(1).pause();
       $audioDiv.children().get(1).load();
   } else {
       $('.playing-audio').removeClass('playing-audio');
   }

}; var audioCanPlayListener = function() {

   if (this===$('.pinyin-table-audio-container audio:last-child').get(0)) {
       console.log('Removing loading-audio class');
       $('.pinyin-table').removeClass('loading-audio');
   }

};

/* Add tone marks */ var vowelAddTone = function(vowel,number) {

   var tones = ['āēīōūǖ',
                'áéíóúǘ',
                'ǎěǐǒǔǚ',
                'àèìòùǜ'][number-1]
   return tones['aeiouü'.indexOf(vowel)]

}; var syllableAddTone = function(syllable,number) {

   if (syllable.indexOf("a")!==-1) {
       return syllable.substr(0,syllable.indexOf("a")) + vowelAddTone('a',number) + syllable.substr(syllable.indexOf("a")+1,syllable.length);
   } else if (syllable.indexOf("e")!==-1) {
       return syllable.substr(0,syllable.indexOf("e")) + vowelAddTone('e',number) + syllable.substr(syllable.indexOf("e")+1,syllable.length);
   } else if (syllable.indexOf("ou")!==-1) {
       return syllable.substr(0,syllable.indexOf("o")) + vowelAddTone('e',number) + syllable.substr(syllable.indexOf("o")+1,syllable.length);
   } else {
       var vowels = 'aeiouü';
       var vowelCount = 0
       for (var i=0; i<syllable.length; i++) {
           if (vowels.indexOf(syllable[i])!==-1) {
               vowelCount++;
           }
       }
       if (vowelCount===1) {
           for (var i=0; i<vowels.length; i++) {
               if (syllable.indexOf(vowels[i])!==-1) {
                   return syllable.substr(0,syllable.indexOf(vowels[i])) + vowelAddTone(syllable[syllable.indexOf(vowels[i])],number) + syllable.substr(syllable.indexOf(vowels[i])+1,syllable.length);
               }
           }
       } else {
           var first_vowel_index = 1000;
           for (var i=0; i<vowels.length; i++) {
               if (syllable.indexOf(vowels[i])!==-1 && syllable.indexOf(vowels[i])<first_vowel_index) {
                   first_vowel_index = syllable.indexOf(vowels[i])
               }
           }
           return syllable.substr(0,first_vowel_index+1) + vowelAddTone(syllable[first_vowel_index+1],number) + syllable.substr(first_vowel_index+2,syllable.length);
       }
   }

};

/*pinyin table scripts*/ $(document).ready( function() {

   $('.table-link').hide();
   $('.table-ipa').hide();
   $('.table-zhuyin').hide();
   $('.table-wade-giles').hide();
   $('.col-placeholder').hide();
   $('#pinyin-chart-settings .additional-settings').hide();
   //Toggle additional settings
   $('#pinyin-chart-settings #additional-settings-collapse').click( function(e) {
       e.preventDefault();
       if ($(this).text()==="Show more Settings") {
           $(this).text("Show less Settings");
           $('#pinyin-chart-settings .additional-settings').slideDown();
       } else {
           $(this).text("Show more Settings");
           $('#pinyin-chart-settings .additional-settings').slideUp();
       }
   });
   //highlight row and col of hovered cell
   $('#pinyin-table td').hover( function() {
       if ($(this).children('div.table-pinyin').length && $('input[name="chart-mode"]:checked').val()==="audio") {
           $(this).addClass('table-extra-highlight');
           $(this).siblings().addClass('table-highlight');
           var rowIndex = $(this).prevAll().length+1;
           $('#pinyin-table tr :nth-child('+rowIndex+')').addClass('table-highlight');
       };
   }, function() {
       $(this).removeClass('table-extra-highlight')
       $('.table-highlight').removeClass('table-highlight');
   }).click( function() {
       if ($(this).children('div.table-pinyin').length && $('input[name="chart-mode"]:checked').val()==="audio") {
           var tones=$('input[name=\'tone\']:checked').val();
           var $audioDiv = $('.pinyin-table-audio-container');
           $audioDiv.empty();
           for (var i=0; i<tones.length; i++) {
               var sound_url = "http://resources.allsetlearning.com/pronwiki/resources/pinyin-audio/" + $(this).attr('id') + tones[i] + ".mp3"
               if (sound_url.indexOf('.C3.BC')!==-1) {
                   sound_url = sound_url.substr(0,sound_url.indexOf('.C3.BC'))+'u%CC%88'+sound_url.substr(sound_url.indexOf('.C3.BC')+6,sound_url.length);
               };
               $audioDiv.append("<audio src=\"" + sound_url + "\" type=\"audio/mpeg\"></audio>");
               console.log(sound_url,0);
           };
           for (var i=0; i<$audioDiv.children().length; i++) {
               $audioDiv.children().get(i).addEventListener("ended",audioEndedListener);
               $audioDiv.children().get(i).addEventListener("canplay",audioCanPlayListener);
           };
           $audioDiv.children().get(0).pause();
           $audioDiv.children().get(0).load();
           $('.pinyin-table').addClass('loading-audio');
           $('.playing-audio').removeClass('playing-audio');
           $(this).addClass('playing-audio');
           $audioDiv.children().get(0).play();
           if ($audioDiv.children().length>1) {
               $audioDiv.children().get(1).pause();
               $audioDiv.children().get(1).load();
           };
       };
   });
   //collapse column groups
   $('th.col-a, th.col-e, th.col-o, th.col-i, th.col-u, th.col-v').hover( function() {
       if ($(this).hasClass('col-a')) { var thClass='col-a'; } else
       if ($(this).hasClass('col-e')) { var thClass='col-e'; } else
       if ($(this).hasClass('col-o')) { var thClass='col-o'; } else
       if ($(this).hasClass('col-i')) { var thClass='col-i'; } else
       if ($(this).hasClass('col-u')) { var thClass='col-u'; } else
       if ($(this).hasClass('col-v')) { var thClass='col-v'; };
       $('th.'+thClass).addClass('table-selected');
   }, function() {
       $('.table-selected').removeClass('table-selected');
   }).click( function() {
       if ($(this).hasClass('col-a')) { var thClass='col-a'; } else
       if ($(this).hasClass('col-e')) { var thClass='col-e'; } else
       if ($(this).hasClass('col-o')) { var thClass='col-o'; } else
       if ($(this).hasClass('col-i')) { var thClass='col-i'; } else
       if ($(this).hasClass('col-u')) { var thClass='col-u'; } else
       if ($(this).hasClass('col-v')) { var thClass='col-v'; };
       if ($(this).hasClass('col-placeholder')) {
           $('#pinyin-table .'+thClass).show();
           $('#pinyin-table .'+thClass+'.col-placeholder').hide();
       } else {
           $('#pinyin-table .'+thClass).hide();
           $('#pinyin-table .'+thClass+'.col-placeholder').show();
       };
   });
   //change text size
   $('div#pinyin-chart-settings div.additional-settings input[name="text-size"]').click( function() {
       var new_size = $('input[name="text-size"]:checked').val();
       console.log('Changing table size to '+new_size);
       $('.pinyin-table').removeClass('small').removeClass('medium').removeClass('large');
       $('.pinyin-table').addClass(new_size);
   });


   //change chart mode
   $('div#pinyin-chart-settings div.additional-settings input[name="chart-mode"]').click( function() {
       var new_mode = $('input[name="chart-mode"]:checked').val();
       if (new_mode==="link") {
           $('.table-pinyin').hide();
           $('.table-link').show();
       } else {
           $('.table-pinyin').show();
           $('.table-link').hide();
       }
   });
   //toggle showing ipa, zhuyin, wade-giles
   $('#table-toggle-ipa').click( function() {
       if ($(this).prop('checked')) {
           $('.table-ipa').show();
       } else {
           $('.table-ipa').hide();
       }
   });
   $('#table-toggle-zhuyin').click( function() {
       if ($(this).prop('checked')) {
           $('.table-zhuyin').show();
       } else {
           $('.table-zhuyin').hide();
       }
   });
   $('#table-toggle-wade-giles').click( function() {
       if ($(this).prop('checked')) {
           $('.table-wade-giles').show();
       } else {
           $('.table-wade-giles').hide();
       }
   });

}); </script>