Forvo Audio in the Memrise Level Editor

Adds a column to the Memrise level/database editor with buttons to check for Forvo audio

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Forvo Audio in the Memrise Level Editor
// @namespace    https://greasyfork.org/users/5238-carpiediem
// @version      0.7
// @description  Adds a column to the Memrise level/database editor with buttons to check for Forvo audio
// @author       carpiediem
// @match        http://www.memrise.com/course/*/*/edit/*
// @require      https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant        GM_xmlhttpRequest
// @run-at       document-end
// ==/UserScript==

// This script will not work until you enter your own Forvo.com API key
// To get an API key follow these steps:
//   1. If you don't have a Forvo account already, browse to http://www.forvo.com/signup/ and sign up.
//   2. Check your email & click the link to verify your account.
//   3. Browse to http://api.forvo.com/login/ and log in.
//   4. Click on the "Plans & Pricing" tab and click the button for the Free Plan. <http://api.forvo.com/plans-and-pricing/>.
//   5. Check the box to accept the license terms and click on the "Choose plan for free" button.
//   6. Click on the "Your account" tab. <http://api.forvo.com/account/>
//   7. Copy the API key (a string of letters and numbers) on the right side of the screen.
//   8. Paste the key in the line of code below.  Replace the Xs, but keep the quotes.
forvoApiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXX';



//======DO NOT EDIT BELOW THIS LINE======

$('.container-main').css('width','1200px');
$('#levels').after('<div class="pull-left"><a href="http://www.forvo.com/" title="Pronunciations by Forvo"><img src="http://api.forvo.com/byforvo.gif" width="120" height="40" alt="Pronunciations by Forvo" style="border:0"></a></div>');
var firefoxTooltip = (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) ? '  Right-click is broken in Firefox.  You\'ll need to middle click to save the MP3 file."' : '';

function addColumn(tableElement) {
    $(tableElement).find('th').eq(4).after('<th class="column"><span class="txt">Other Audio</span></th>');
    $(tableElement).find('tr').each(function(){
        var word = $(this).find('td').eq(1).find('.text').text();
        $(this).find('td').eq(4).after('<td><div class="btn-group forvo-check" data-word="' + word + '"><button class="btn btn-mini dropdown-toggle" data-toggle="dropdown" style="overflow:hidden;">Check Forvo<i class="ico ico-s ico-arr-down"></i></button><div class="dropdown-menu audios"><img src="https://d107cgb5lgj7br.cloudfront.net/img/icons/[email protected]" style="width:30px;" /></div></div></td>');
    });
    
    $('.forvo-check .dropdown-menu').css({'min-width':'30px', padding:'5px'});
    
    $('.forvo-check').click(function(){
      if ( $('.pool-name').size() )
        var languageCode = forvoCodes[ $('.pool-name').text().trim() ];
      else
        var languageCode = forvoCodes[ $('.add-level .dropdown-menu a:first').text().trim() ];
        
      if (languageCode=="haw")
        var word = encodeURI( $(this).attr("data-word").replace("he ","").replace(/[ʻ']/,"%60") );
      else
        var word = encodeURI( $(this).attr("data-word") );
      
      //console.log("API request to: http://apifree.forvo.com/action/word-pronunciations/format/json/word/" + word + "/language/" + languageCode + "/order/rate-desc/limit/4/key/" + forvoApiKey + "/");
      GM_xmlhttpRequest({
        method: "GET",
        url: "http://apifree.forvo.com/action/word-pronunciations/format/json/word/" + word + "/language/" + languageCode + "/order/rate-desc/limit/4/key/" + forvoApiKey + "/",
        onload: function(response) {
          var data = $.parseJSON(response.responseText);
          popupHTML = '';
            for (i in data.items) popupHTML += '<p style="margin:0px"><a style="display:inline-block; height:30px; width:30px; background-image:url(\'http://cdn.images.autosport.com/plus/icon_downloadmp30.png\')" href="' + decodeURI(data.items[i].pathmp3) + '" title="Save this file, listen to verify that it\'s good, then upload to Memrise.' + firefoxTooltip + '"></a></p>';
          if (popupHTML=='') popupHTML = '<a href="http://www.forvo.com/word/' + encodeURI( $('.forvo-check.open').attr("data-word") ) + '/" target="_blank">nothing</a>';
          $('.forvo-check.open .dropdown-menu').html(popupHTML);
        }
      });
    });
}



if (forvoApiKey == 'XXXXXXXXXXXXXXXXXXXXXXXXX') {
    console.log('You need to enter your own API key from Forvo.com');
} else {
    // Trigger insertion on tables loaded with the rest of the document (database editor)
    addColumn( $('table.pool-things') );
    
    // Trigger insertion on tables loaded with AJAX (level editor)
    document.addEventListener("DOMNodeInserted", function(e) {
        if (e.relatedNode.className == "level-things table") addColumn(e.relatedNode);
    }, true);
}

var forvoCodes = {
    'Afrikaans':'af',
    'Ainu':false,
    'Akan-Twi':'ak',
    'Albanian':'sq',
    'Algonquian languages':false,
    'Amharic':'am',
    'Ancient Greek':'grc',
    'Anglo-Saxon':false,
    'Arabic':'ar',
    'Arabic Alphabet':'ar',
    'Aramaic':false,
    'Azerbaijani':'az',
    'Basque':'eu',
    'Belarusian':'be',
    'Bengali':'bn',
    'Bosnian':'bs',
    'Breton':'br',
    'Bulgarian':'bg',
    'Burmese':'my',
    'Cantonese':'yue',
    'Cantonese Jyutping':'yue',
    'Catalan':'ca',
    'Cherokee':'chr',
    'Chinese':'zh',
    'Citizen Potawatomi':false,
    'Classical Quranic Arabic':'ar',
    'Coptic':false,
    'Cornish':'kw',
    'Creek':'mus',
    'Croatian':'hr',
    'Czech':'cs',
    'Danish':'da',
    'Dovahzul':false,
    'Dutch':'nl',
    'Eastern Armenian':'hy',
    'Egyptian (Ancient)':false,
    'Egyptian Arabic':'ar',
    'English':'en',
    'Esperanto':'eo',
    'Estonian':'et',
    'Faroese':'fo',
    'Farsi':'fa',
    'Finnish':'fi',
    'Flemish':'vls',
    'French':'fr',
    'Georgian':'ka',
    'German':'de',
    'Greek':'el',
    'Greenlandic':false,
    'Guarani':'gn',
    'Gujarati':'gu',
    'Gulf Khaliji Arabic':'ar',
    'Hakka':'hak',
    'Hausa':'ha',
    'Hawaiian':'haw',
    'Hebrew':'he',
    'Hindi':'hi',
    'Hungarian':'hu',
    'Icelandic':'is',
    'Indonesian':'ind',
    'Inuktitut':'iu',
    'Iraqi Arabic':'ar',
    'Irish':'ga',
    'Italian':'it',
    'Japanese':'ja',
    'Kanji':'ja',
    'Kaonde':false,
    'Khmer':'km',
    'Kinyarwanda':'rw',
    'Klingon':'tlh',
    'Korean':'ko',
    'Kurdish':'ku',
    'Kyrgyz':'ky',
    'Ladin':false,
    'Lakota':'lkt',
    'Latin':'la',
    'Latvian':'lv',
    'Laz':'lzz',
    'Levantine Arabic':'ar',
    'Lingala':'ln',
    'Lithuanian':'lt',
    'Lojban':'lmo',
    'Lu Mien':'hmn',
    'Luganda':'lg',
    'Lule Sami':'fi',
    'Luxembourgish':'lb',
    'Macedonian':'mk',
    'Malay':'ms',
    'Mandarin':'zh',
    'Mandarin Spoken Only':'zh',
    'Mandarin Traditional':'zh',
    'Mandinka':false,
    'Maori':'mi',
    'Marathi':'mr',
    'Marshallese':'mh',
    'Modern Standard Arabic - roman alph':false,
    'Mongolian':'mn',
    'Nahuatl languages':'nah',
    "Na'vi":false,
    'Nepali':'ne',
    'Ningbo Dialect':'wuu',
    'North African Maghrebi Arabic':'ar',
    'Northern Sami':'se',
    'Norwegian':'no',
    'Nyanja':false,
    'Occitan':'oc',
    'Ossetic':'os',
    'Pali':'pi',
    'Pashto':'ps',
    'Persian':'fa',
    'Polish':'pl',
    'Portuguese (Brazil)':'pt',
    'Portuguese (European)':'pt',
    'Punjabi':'pa',
    'Quechua':'qu',
    'Romaji':'ja',
    'Romanian':'ro',
    'Russian':'ru',
    'Sanskrit':'sa',
    'Scots':'sco',
    'Scottish Gaelic':'gd',
    'Serbian':'sr',
    'Sinhala':'si',
    'Slovak':'sk',
    'Slovenian':'sl',
    'Small German Dialects':'nds',
    'Somali':'so',
    'Soninke':false,
    'Southern Sami':'fi',
    'Spanish':'es',
    'Swahili':'sw',
    'Swedish':'sv',
    'Swiss German':'gsw',
    'Tagalog':'tl',
    'Taishanese':'yue',
    'Tamang':'ne',
    'Tamil':'ta',
    'Telugu':'te',
    'Thai':'th',
    'Tibetan':'bo',
    'Toki Pona':'x-tp',
    'Turkish':'tr',
    'Ukrainian':'uk',
    'Ume Sami':'fi',
    'Urdu':'ur',
    'Vietnamese':'vi',
    'Welsh':'cy',
    'Western Armenian':'hy',
    'Wolof':'wo',
    'Xhosa':'xh',
    'Yiddish':'yi',
    'Zulu':'zu'
};