// ==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/loader@2x.gif" 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'
};