MediaWiki:Common.js: Difference between revisions

From Donate
Jump to navigation Jump to search
Content deleted Content added
Pgehres (WMF) (talk | contribs)
m formatting
Line 6: Line 6:
// Helper function to get querystring parameters as a JS object
// Helper function to get querystring parameters as a JS object
// Located here as MediaWiki messes up the ampersand when included inline using rawHTML
// Located here as MediaWiki messes up the ampersand when included inline using rawHTML
// TODO: Replace with mw.Uri or mw.util.getParamValue() everywhere, and remove
var ret={};
var ret={};
if ( url.indexOf( '?' ) === -1 ) {
if ( url.indexOf( '?' ) === -1 ) {
Line 19: Line 20:
return ret;
return ret;
}
}


function getQuerystring( key ) {
// TODO: Replace with mw.util.getParamValue() everywhere, and remove
key = key.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' );
var regex = new RegExp( '[\\?&]' + key + '=([a-zA-Z0-9\.\_\-]*)' );
var qs = regex.exec( window.location.search );
return qs == null ? '' : qs[1];
}

function checkPaymentOutages() {
/* 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...
var now = new Date();

for (var i = outages.length - 1; i >= 0; i--) {
if ( now > outages[i]['start'] ) {
if ( now < outages[i]['end'] ) {

if ( (typeof outages[i]['country'] === 'undefined') || (outages[i]['country'] == country) ) {
$('.paymentmethod-' + outages[i]['method']).hide();
}

}
}
}
}

function adjustHPC() {
/* 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.
var hpc = parseFloat( mw.util.getParamValue('hpc') );
if( isNaN(hpc) ) {
hpc = parseFloat( mw.util.getParamValue('mrc') );
if( isNaN(hpc) ) {
return;
}
}

var hpcSet = mw.util.getParamValue('hpcSet');

var currency = $("input[name='currency_code']").val();

var radioAmountsData = {
'USD' : {
'default' : [ // Control - low bottom ask
[ 0, [ 5, 10, 20, 25, 35, 50, 100 ] ],
[ 10, [ 10, 20, 25, 35, 50, 100, 150 ] ],
[ 20, [ 20, 25, 35, 50, 75, 100, 250 ] ],
[ 35, [ 20, 35, 50, 100, 150, 200, 250 ] ],
[ 50, [ 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 ] ]
],
'v2' : [ // High ask, more groups on low end
[ 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 ] ],
[ 50, [ 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 ] ]
],
'v3' : [ // Med ask for lowest # in string
[ 0, [ 5, 10, 20, 25, 35, 50, 100 ] ],
[ 10, [ 15, 20, 25, 35, 50, 100, 150 ] ],
[ 20, [ 25, 35, 50, 75, 100, 150, 250 ] ],
[ 35, [ 25, 40, 50, 100, 150, 200, 250 ] ],
[ 50, [ 35, 50, 75, 125, 200, 250, 300 ] ],
[ 75, [ 35, 50, 75, 100, 200, 300, 500 ] ],
[ 100, [ 50, 75, 100, 150, 250, 500, 1000 ] ],
[ 150, [ 100, 150, 200, 250, 350, 500, 1000 ] ],
[ 200, [ 150, 200, 250, 300, 400, 500, 1000 ] ],
[ 500, [ 250, 500, 750, 1000, 1500, 2000, 2500 ] ],
[ 1000, [ 1000, 2000, 2500, 3000, 3500, 4000, 5000 ] ]
]
},
'EUR' : [
[ 0, [ 3, 5, 10, 20, 30, 50, 100] ],
[ 4, [ 5, 10, 15, 20, 30, 50, 100] ],
[ 27, [ 5, 10, 20, 30, 50, 100, 150] ],
[ 136, [ 5, 10, 20, 50, 100, 150, 200] ]
],
'JPY' : [
[ 0, [ 700, 1000, 2000, 3000, 4000, 5000, 10000 ] ],
[ 5, [ 1000, 1500, 2500, 4000, 5000, 10000, 15000 ] ],
[ 10, [ 1500, 2000, 3000, 4000, 5000, 10000, 15000 ] ],
[ 15, [ 2000, 3000, 4000, 5000, 10000, 12500, 25000 ] ],
[ 20, [ 3000, 4000, 5000, 10000, 12500, 15000, 25000 ] ],
[ 25, [ 4000, 5000, 7500, 10000, 12500, 15000, 25000 ] ],
[ 35, [ 5000, 7500, 10000, 12500, 25000, 30000, 35000 ] ],
[ 75, [ 5000, 7500, 10000, 12500, 25000, 35000, 50000 ] ],
[ 100, [ 5000, 7500, 12500, 20000, 30000, 50000, 100000 ] ],
[ 500, [ 10000, 25000, 50000, 100000, 125000, 150000, 250000 ] ]
],
'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; // TODO: change this
radioAmountsData.NZD = radioAmountsData.USD;

var appealAmountsData = {
'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 ] ]
],
'EUR' : [
[ 0, [ 3, 5, 10 ] ],
[ 4, [ 5, 10, 20 ] ],
[ 7, [ 10, 20, 50 ] ],
[ 14, [ 15, 20, 50 ] ],
[ 20, [ 20, 50, 100 ] ],
[ 40, [ 30, 50, 100 ] ],
[ 68, [ 50, 100, 150 ] ]
],
'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;

var formats = {
'USD' : '$\t',
'AUD' : '$\t',
'CAD' : '$\t',
'EUR' : '€\t',
'GBP' : '£\t',
'NZD' : '$\t',
'JPY' : '¥\t',
'SEK' : '\t kr'
};
var format = formats[currency] || '\t';

// Radio button amounts
var radioAmounts = pickAmountArray( radioAmountsData, currency, hpc, hpcSet );
if ( radioAmounts.length ) {
// Change buttons
for (var j = 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 amounts
var appealAmounts = pickAmountArray( appealAmountsData, currency, hpc, hpcSet );
if ( appealAmounts.length ) {
// Build string
var appealAmountString = '';
for( var k = 0; k < appealAmounts.length; k++ ) {
appealAmountString += format.replace('\t', appealAmounts[k]) + ', ';
}
appealAmountString = appealAmountString.trim();

$('.consider-amounts').html(appealAmountString);
}

}

function pickAmountArray( 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)
*/

var set, amounts;

if ( !(currency in data) ) {
return [];
}

if ( $.isArray(data[currency]) ) {
// No variant sets
set = data[currency];
} else {
// We need to go deeper. Check the variants.
if ( hpcSet in data[currency] ) {
set = data[currency][hpcSet];
} else {
set = data[currency]['default'];
}
}

// Find correct amount array for this hpc
for (var i = 0; i < set.length; i++) {
if ( set[i][0] > hpc ) {
break;
}
amounts = set[i][1];
}

return amounts;

}

function adjustOtherVal() {
// prefill other amount box if param provided
var otherVal = mw.util.getParamValue( 'otherVal' );
if( isNaN( parseFloat( otherVal ) ) ) {
return;
}
otherVal = parseFloat( otherVal );
$("#input_amount_other").attr( 'checked', true );
$("#input_amount_other_box").val( otherVal );
}


$(document).ready(function() {

// 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)
});

// Disable submitting form with return key
$( 'form[name="paypalcontribution"]' ).bind( 'keypress', function(e) {
var code = ( e.keyCode ? e.keyCode : e.which );
if ( code == 13 ) return false;
});

// Disable logo link
$("#p-logo a").attr("href", "#");
$("#p-logo a").attr("title", "");

// Monthly
if( mw.util.getParamValue('monthly') ) {
$('#frequency_monthly').click();
}

adjustHPC();
adjustOtherVal();

});

Revision as of 21:10, 12 August 2015

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

function parseParams( url ) {
    // Helper function to get querystring parameters as a JS object
    // Located here as MediaWiki messes up the ampersand when included inline using rawHTML
    // TODO: Replace with mw.Uri or mw.util.getParamValue() everywhere, and remove
    var ret={};
    if ( url.indexOf( '?' ) === -1 ) {
        return ret; 
    }
    var s = url.split( '?' ).slice( 1 ).join();
    var t = s.split( '&' );
    for ( var i = 0; i < t.length; ++i ) {
        var z = t[ i ].split( '=' );
        z.push( null );
        ret[ z[ 0 ] ] = z[ 1 ];
    }
    return ret;
}


function getQuerystring( key ) {
	// TODO: Replace with mw.util.getParamValue() everywhere, and remove
  key = key.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' );
  var regex = new RegExp( '[\\?&]' + key + '=([a-zA-Z0-9\.\_\-]*)' );
  var qs = regex.exec( window.location.search );
  return qs == null ? '' : qs[1];
}

function checkPaymentOutages() {
    /*  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...
    var now = new Date();

    for (var i = outages.length - 1; i >= 0; i--) {
        if ( now > outages[i]['start'] ) {
            if ( now < outages[i]['end'] ) {

                if ( (typeof outages[i]['country'] === 'undefined') || (outages[i]['country'] == country) ) {
                    $('.paymentmethod-' + outages[i]['method']).hide();
                }

            }
        }
    }
}

function adjustHPC() {
    /* 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.
    var hpc = parseFloat( mw.util.getParamValue('hpc') );
    if( isNaN(hpc) ) {
        hpc = parseFloat( mw.util.getParamValue('mrc') );
        if( isNaN(hpc) ) {
            return;
        }
    }

    var hpcSet = mw.util.getParamValue('hpcSet');

    var currency = $("input[name='currency_code']").val();

    var radioAmountsData = {
        'USD' : {
            'default' : [ // Control - low bottom ask
                [    0, [   5,   10,   20,   25,   35,   50,  100 ] ],
                [   10, [  10,   20,   25,   35,   50,  100,  150 ] ],
                [   20, [  20,   25,   35,   50,   75,  100,  250 ] ],
                [   35, [  20,   35,   50,  100,  150,  200,  250 ] ],
                [   50, [  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 ] ]
            ],
            'v2' : [      // High ask, more groups on low end
                [    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 ] ],
                [   50, [  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 ] ]
            ],
            'v3' : [      // Med ask for lowest # in string
                [    0, [    5,   10,   20,   25,   35,   50,  100 ] ],
                [   10, [   15,   20,   25,   35,   50,  100,  150 ] ],
                [   20, [   25,   35,   50,   75,  100,  150,  250 ] ],
                [   35, [   25,   40,   50,  100,  150,  200,  250 ] ],
                [   50, [   35,   50,   75,  125,  200,  250,  300 ] ],
                [   75, [   35,   50,   75,  100,  200,  300,  500 ] ],
                [  100, [   50,   75,  100,  150,  250,  500, 1000 ] ],
                [  150, [  100,  150,  200,  250,  350,  500, 1000 ] ],
                [  200, [  150,  200,  250,  300,  400,  500, 1000 ] ],
                [  500, [  250,  500,  750, 1000, 1500, 2000, 2500 ] ],
                [ 1000, [ 1000, 2000, 2500, 3000, 3500, 4000, 5000 ] ]
            ]
        },
        'EUR' : [
            [   0, [ 3,  5, 10, 20,  30,  50, 100] ],
            [   4, [ 5, 10, 15, 20,  30,  50, 100] ],
            [  27, [ 5, 10, 20, 30,  50, 100, 150] ],
            [ 136, [ 5, 10, 20, 50, 100, 150, 200] ]
        ],
        'JPY' : [
            [   0, [   700,  1000,  2000,   3000,   4000,   5000,  10000 ] ],
            [   5, [  1000,  1500,  2500,   4000,   5000,  10000,  15000 ] ],
            [  10, [  1500,  2000,  3000,   4000,   5000,  10000,  15000 ] ],
            [  15, [  2000,  3000,  4000,   5000,  10000,  12500,  25000 ] ],
            [  20, [  3000,  4000,  5000,  10000,  12500,  15000,  25000 ] ],
            [  25, [  4000,  5000,  7500,  10000,  12500,  15000,  25000 ] ],
            [  35, [  5000,  7500, 10000,  12500,  25000,  30000,  35000 ] ],
            [  75, [  5000,  7500, 10000,  12500,  25000,  35000,  50000 ] ],
            [ 100, [  5000,  7500, 12500,  20000,  30000,  50000, 100000 ] ],
            [ 500, [ 10000, 25000, 50000, 100000, 125000, 150000, 250000 ] ]
        ],
        '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; // TODO: change this
    radioAmountsData.NZD = radioAmountsData.USD;

    var appealAmountsData = {
        '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 ] ]
        ],
        'EUR' : [
            [   0, [  3,   5,  10 ] ],
            [   4, [  5,  10,  20 ] ],
            [   7, [ 10,  20,  50 ] ],
            [  14, [ 15,  20,  50 ] ],
            [  20, [ 20,  50, 100 ] ],
            [  40, [ 30,  50, 100 ] ],
            [  68, [ 50, 100, 150 ] ]
        ],
        '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;

    var formats = {
        'USD' : '$\t',
        'AUD' : '$\t',
        'CAD' : '$\t',
        'EUR' : '€\t',
        'GBP' : '£\t',
        'NZD' : '$\t',
        'JPY' : '¥\t',
        'SEK' : '\t kr'
    };
    var format = formats[currency] || '\t';

    // Radio button amounts
    var radioAmounts = pickAmountArray( radioAmountsData, currency, hpc, hpcSet );
    if ( radioAmounts.length ) {
        // Change buttons
        for (var j = 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 amounts
    var appealAmounts = pickAmountArray( appealAmountsData, currency, hpc, hpcSet );
    if ( appealAmounts.length ) {
        // Build string
        var appealAmountString = '';
        for( var k = 0; k < appealAmounts.length; k++ ) {
            appealAmountString += format.replace('\t', appealAmounts[k]) + ', ';
        }
        appealAmountString = appealAmountString.trim();

        $('.consider-amounts').html(appealAmountString);
    }

}

function pickAmountArray( 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)
     */

    var set, amounts;

    if ( !(currency in data) ) {
        return [];
    }

    if ( $.isArray(data[currency]) ) {
        // No variant sets
        set = data[currency];
    } else {
        // We need to go deeper. Check the variants.
        if ( hpcSet in data[currency] ) {
            set = data[currency][hpcSet];
        } else {
            set = data[currency]['default'];
        }
    }

    // Find correct amount array for this hpc
    for (var i = 0; i < set.length; i++) {
        if ( set[i][0] > hpc ) {
            break;
        }
        amounts = set[i][1];
    }

    return amounts;

}

function adjustOtherVal() {
    // prefill other amount box if param provided
    var otherVal = mw.util.getParamValue( 'otherVal' );
    if( isNaN( parseFloat( otherVal ) ) ) {
        return;
    }
    otherVal = parseFloat( otherVal );
    $("#input_amount_other").attr( 'checked', true );
    $("#input_amount_other_box").val( otherVal );
}


$(document).ready(function() {

    // 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)
        });

    // Disable submitting form with return key
    $( 'form[name="paypalcontribution"]' ).bind( 'keypress', function(e) {
      var code = ( e.keyCode ? e.keyCode : e.which );
      if ( code == 13 ) return false;
    });

    // Disable logo link
    $("#p-logo a").attr("href", "#");
    $("#p-logo a").attr("title", "");

    // Monthly
    if( mw.util.getParamValue('monthly') ) {
        $('#frequency_monthly').click();
    }

    adjustHPC();
    adjustOtherVal();

});