Latest revision as of 15:17, 30 October 2017

/** * Any JavaScript here will be loaded for all users on every page load. **/functiongetQuerystring(key){// TODO: Replace with mw.util.getParamValue() everywhere, and removekey=key.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');varregex=newRegExp('[\\?&]'+key+'=([a-zA-Z0-9\.\_\-]*)');varqs=regex.exec(window.location.search);returnqs==null?'':qs[1];}functioncheckPaymentOutages(){/* Check against the scheduled payment method outages * in global variable "outages" (loaded cross-wiki from meta) * and hide the relevant button for any which are ongoing. */// var outages = outages || []; // don't die if it hasn't loaded...varnow=newDate();for(vari=outages.length-1;i>=0;i--){if(now>outages[i]['start']){if(now<outages[i]['end']){if((typeofoutages[i]['country']==='undefined')||(outages[i]['country']==country)){$('.paymentmethod-'+outages[i]['method']).hide();}}}}}functionadjustHPC(){/* Adjust amounts based on highest previous contribution (hpc) or most recent contribution (mrc) parameter. Used for emails. TODO: split data out? */// Look for 'hpc' parameter, then 'mrc'. If neither, then bail out.varhpc=parseFloat(mw.util.getParamValue('hpc'));if(isNaN(hpc)){hpc=parseFloat(mw.util.getParamValue('mrc'));if(isNaN(hpc)){return;}}varhpcSet=mw.util.getParamValue('hpcSet');varcurrency=$("input[name='currency_code']").val();varlanguage=mw.config.get('wgUserLanguage');varradioAmountsData={'USD':{'default':[[0,[5,10,20,25,35,50,100]],[5,[10,15,20,35,50,100,150]],[10,[15,20,25,35,50,100,150]],[15,[20,25,35,50,75,100,250]],[20,[25,35,50,75,100,150,250]],[25,[30,40,50,75,100,150,250]],[35,[25,50,75,100,200,250,300]],[75,[25,50,75,100,200,300,500]],[100,[25,50,100,150,250,500,1000]],[150,[50,100,150,200,350,500,1000]],[200,[100,150,200,300,400,500,1000]],[500,[100,250,500,750,1000,1500,2000]],[1000,[500,1000,2000,2500,3000,4000,5000]]],'low2016':[[0,[3,5,10,20,30,50,100]],[5,[5,10,20,35,50,100,150]],[10,[10,15,20,35,50,100,150]],[15,[15,20,25,35,50,100,150]],[20,[20,25,35,50,75,100,150]],[25,[25,35,50,75,100,150,250]],[35,[25,50,75,100,200,250,300]],[75,[25,50,75,100,200,300,500]],[100,[25,50,100,150,250,500,1000]],[150,[50,100,150,200,350,500,1000]],[200,[100,150,200,300,400,500,1000]],[500,[100,250,500,750,1000,1500,2000]],[1000,[500,1000,2000,2500,3000,4000,5000]]]},'BRL':[[0,[15,25,50,75,100,150,300]],[5,[25,35,50,75,100,200,300]],[10,[30,50,75,100,150,300,500]],[15,[50,75,100,150,225,300,500]],[20,[50,100,150,225,300,400,500]],[25,[75,125,200,250,300,400,500]],[35,[100,150,225,300,500,750,1000]],[75,[100,150,225,300,500,1000,1500]],[100,[100,150,300,500,1000,1500,3000]],[150,[250,500,750,1000,1500,3000,5000]],[200,[500,1000,2000,3000,4000,5000,10000]],[500,[1000,2500,5000,7500,10000,12500,15000]],[1000,[1000,2500,5000,7500,10000,12500,15000]]],'JPY':[[0,[500,1000,2000,2500,4000,5000,10000]],[5,[1000,1500,2500,4000,5000,10000,15000]],[10,[1500,2000,3000,4000,5000,10000,15000]],[15,[2000,2500,3500,5000,7500,10000,25000]],[20,[2500,3500,5000,7500,10000,15000,25000]],[25,[3000,4000,5000,7500,10000,15000,25000]],[35,[2500,5000,7500,10000,20000,30000,50000]],[75,[2500,5000,7500,10000,20000,50000,100000]],[100,[5000,10000,15000,20000,35000,50000,100000]],[500,[10000,25000,50000,75000,100000,150000,200000]]],'SEK':[[0,[20,50,100,200,300,500,1000]],[3,[30,50,100,200,300,500,1000]],[5,[50,100,150,200,300,500,1000]],[23,[50,100,200,300,500,750,1000]]]};radioAmountsData.AUD=radioAmountsData.USD;radioAmountsData.CAD=radioAmountsData.USD;radioAmountsData.GBP=radioAmountsData.USD;radioAmountsData.NZD=radioAmountsData.USD;radioAmountsData.EUR=radioAmountsData.USD;varappealAmountsData={'USD':[[0,[5,10,20]],[10,[10,20,50]],[20,[20,30,50]],[35,[20,30,50]],[50,[20,50,100]],[75,[50,75,100]],[100,[75,100,150]],[150,[75,100,200]],[200,[100,200,300]]],'JPY':[[0,[300,500,1000]],[3,[500,1000,1500]],[5,[1000,1500,2000]],[10,[1500,2000,5000]],[20,[2000,3000,5000]],[50,[2000,5000,10000]],[100,[5000,10000,15000]]],'SEK':[[0,[20,50,100]],[3,[30,50,100]],[5,[50,100,150]],[15,[100,150,200]],[23,[100,200,300]],[38,[100,200,500]],[75,[100,500,750]],[112,[100,500,1000]]]};appealAmountsData.AUD=appealAmountsData.USD;appealAmountsData.CAD=appealAmountsData.USD;appealAmountsData.GBP=appealAmountsData.USD;appealAmountsData.NZD=appealAmountsData.USD;appealAmountsData.EUR=appealAmountsData.USD;varformats={"USD":"$\t","EUR":{"en":"€\t","cy":"€\t","ga":"€\t","mt":"€\t","nl":"€ \t","lv":"€ \t","tr":"€ \t","default":"\t €"},"AUD":"$\t","CAD":{"fr":"\t $","default":"$\t"},"GBP":"£\t","NZD":"$\t","JPY":"¥\t","SEK":"\t kr","BRL":"R$\t"};varformat=formats[currency][language]||formats[currency]["default"]||formats[currency]||'\t';// Radio button amountsvarradioAmounts=pickAmountArray(radioAmountsData,currency,hpc,hpcSet);if(radioAmounts.length){// Change buttonsfor(varj=0;j<radioAmounts.length;j++){var$radio=$("#input_amount_"+j);var$label=$("label[for='input_amount_"+j+"']");$radio.val(radioAmounts[j]);$label.text(format.replace('\t',radioAmounts[j]));}}// Appeal amountsvarappealAmounts=pickAmountArray(appealAmountsData,currency,hpc,hpcSet);if(appealAmounts.length){// Build stringvarappealAmountString='';for(vark=0;k<appealAmounts.length;k++){appealAmountString+=format.replace('\t',appealAmounts[k])+', ';}appealAmountString=appealAmountString.trim();$('.consider-amounts').html(appealAmountString);}}functionpickAmountArray(data,currency,hpc,hpcSet){/** * Choose the amounts for radio buttons / appeal based on hpc * @param {Object} data * @param {String} currency * @param {Number} hpc * @param {String} hpcSet * @return {Array} Array of amounts (as numbers) */varset,amounts;if(!(currencyindata)){return[];}if($.isArray(data[currency])){// No variant setsset=data[currency];}else{// We need to go deeper. Check the variants.if(hpcSetindata[currency]){set=data[currency][hpcSet];}else{set=data[currency]['default'];}}// Find correct amount array for this hpcfor(vari=0;i<set.length;i++){if(set[i][0]>hpc){break;}amounts=set[i][1];}returnamounts;}functionpreSelect(){/* Check for a 'preSelect' url parameter, and select that option. If there isn't an option, add it to the "Other" box and select that */varpreSelectAmount=mw.util.getParamValue('preSelect');if(preSelectAmount>0){$preSelectOption=$('input[name="amount"][value="'+preSelectAmount+'"]');if($preSelectOption.length){// Select existing input$preSelectOption.prop('checked',true);}else{$('#input_amount_other_box').val(preSelectAmount);$('#input_amount_other').prop('checked',true);}}}/* Form functions */functionclearOther(box){document.getElementById("input_amount_other").checked=true;box.value="";}functionselectOther(){document.getElementById("input_amount_other").checked=true;}functionresetOther(box){box.value="</html>{{int:donate_interface-other}}<html>";}functionselectAmount(){$('#input_amount_other_box').val('');$('input[name="amountGiven"]').val('');}/* End form functions */$(document).ready(function(){mw.loader.using(['mediawiki.util']).done(function(){// Block typing symbols in input field, otherwise Safari allows them and then chokes// https://phabricator.wikimedia.org/T118741, https://phabricator.wikimedia.org/T173431varamountOtherInput=document.getElementById('input_amount_other_box');if(amountOtherInput){amountOtherInput.onkeypress=function(e){// Allow special keys in Firefoxif((e.code=='ArrowLeft')||(e.code=='ArrowRight')||(e.code=='ArrowUp')||(e.code=='ArrowDown')||(e.code=='Delete')||(e.code=='Backspace')){return;}varchr=String.fromCharCode(e.which);if("0123456789., ".indexOf(chr)===-1){returnfalse;}};}// Disable submitting form with Enter key$('form[name="paypalcontribution"]').on('keypress',function(e){varcode=(e.keyCode?e.keyCode:e.which);if(code==13){e.preventDefault();};});// But allow Enter on buttons$('.payment-method-button').keyup(function(e){if(event.keyCode===13){e.target.click();}});if(document.paypalcontribution){document.paypalcontribution.utm_medium.value=mw.util.getParamValue('utm_medium');document.paypalcontribution.utm_campaign.value=mw.util.getParamValue('utm_campaign');document.paypalcontribution.utm_key.value=mw.util.getParamValue('utm_key');// Strip protocol to stop firewall throwing fitsdocument.paypalcontribution.referrer.value=document.referrer.replace(/https?:\/\//i,"");// hide frequency options in India, where we can only handle one-time donationsif(document.paypalcontribution.country.value==='IN'){$("#frequency_onetime").prop('checked',true);$(".frequency-options").hide();$("#cancel-monthly").hide();}}// Disable logo link$("#p-logo a").attr("href","#");$("#p-logo a").attr("title","");// This is 1 by default, make it 0$('#searchInput').attr('tabindex',0);$(".input_amount_other").click(function(){$("#input_amount_other_box").focus();});// Allow preselecting monthlyif(mw.util.getParamValue('monthly')){$('#frequency_monthly').click();}try{adjustHPC();preSelect();// Make sure to do this *after* other fiddling with values}finally{$('.consider-amounts').show();$('#actual-form').show();$('#actual-form-loading').hide();}// Load list of payment outages from meta, and hide any which are current$.getScript('//meta.wikimedia.org/w/index.php?'+$.param({title:'MediaWiki:FR2013/Resources/PaymentOutages.js',action:'raw',ctype:'text/javascript'}),function(){setTimeout(checkPaymentOutages(),250);// allow time for script to have _executed_ (not just loaded)});});});$(document).ready(function(){/* HACK to run certain inline scripts when document ready (e.g. so jquery is avaliable) TODO: Make suitable for multiple scripts. Or figure out a better way to do this. */if(typeofinlineScriptWhenReady!=='undefined'){inlineScriptWhenReady();}});