Difference between revisions of "MediaWiki:Common.js"

m (Updated to work with new chart settings)
Line 64: Line 64:
 
/*pinyin table scripts*/
 
/*pinyin table scripts*/
 
$(document).ready( function() {
 
$(document).ready( function() {
    console.log('2015-01-22-14:56');
+
 
 
     $('.table-link').hide();
 
     $('.table-link').hide();
 
     $('.table-ipa').hide();
 
     $('.table-ipa').hide();
Line 71: Line 71:
 
     $('.col-placeholder').hide();
 
     $('.col-placeholder').hide();
  
     $('#pinyin-chart-settings .additional-settings').children().hide();
+
     //$('#pinyin-chart-settings .additional-settings').children().hide();
  
 
     //Toggle additional settings
 
     //Toggle additional settings
Line 86: Line 86:
 
     //highlight row and col of hovered cell
 
     //highlight row and col of hovered cell
 
     $('#pinyin-table td').hover( function() {
 
     $('#pinyin-table td').hover( function() {
         if ($(this).children('div.table-pinyin').length && ! $('#table-toggle-links').prop('checked')) {
+
         if ($(this).children('div.table-pinyin').length && $('input[name="chart-mode"]:checked').val()==="audio") {
 
             $(this).addClass('table-extra-highlight');
 
             $(this).addClass('table-extra-highlight');
 
             $(this).siblings().addClass('table-highlight');
 
             $(this).siblings().addClass('table-highlight');
Line 161: Line 161:
  
  
     //toggle link mode
+
     //change chart mode
     $('#table-toggle-links').click( function() {
+
     $('div#pinyin-chart-settings div.additional-settings input[name="chart-mode"]').click( function() {
         if ($(this).prop('checked')) {
+
         var new_mode = $('input[name="chart-mode"]:checked').val();
 +
        if (new_mode==="link") {
 
             $('.table-pinyin').hide();
 
             $('.table-pinyin').hide();
 
             $('.table-link').show();
 
             $('.table-link').show();

Revision as of 02:56, 23 January 2015

/* Any JavaScript here will be loaded for all users on every page load. */

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').children().hide();

    //Toggle additional settings
    $('#pinyin-chart-settings .additional-settings-label').hover( function() {
        $(this).css('background-color','rgba(0,0,0,0.15)');
        $(this).css('cursor','pointer');
    }, function () {
        $(this).css('background-color','#F5F5F5');
        $(this).css('cursor','initial');
    }).click( function() {
        $('#pinyin-chart-settings .additional-settings').children().slideToggle();
    });

    //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 && ! $('#table-toggle-links').prop('checked')) {
            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();
        }
    });
});