MediaWiki:Resources/2015/landingpage.js: Difference between revisions

From Donate
Jump to navigation Jump to search
Content deleted Content added
only block Enter on actual form (not editing form)
allow monthly to be set with url param
Line 208: Line 208:
var code = ( e.keyCode ? e.keyCode : e.which );
var code = ( e.keyCode ? e.keyCode : e.which );
if ( code == 13 ) return false;
if ( code == 13 ) return false;
} );
});


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

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


adjustHPC();
adjustHPC();

Revision as of 18:38, 26 January 2015

function getQuerystring( key ) {
  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() {
    // Highest previous contribution adjustments (for emails)
    var hpc = mw.util.getParamValue( 'hpc' );
    if( isNaN( parseFloat( hpc ) ) ){
        // go ahead and try mrc as well
        hpc = getQuerystring( 'mrc' );
        if( isNaN( parseFloat( hpc ) ) ){
            return;
        }
    }
    hpc = parseFloat( hpc );

    var asks = {
        'USD' : {
            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 : [20, 35, 50, 100, 150, 200, 250],
            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 : [50, 100, 200, 300, 400, 500, 1000]
        },
        '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 : [300, 500, 1000, 2000, 3000, 5000, 10000],
            3 : [500, 1000, 1500, 2000, 3000, 5000, 10000],
            5 : [1000, 1500, 2000, 3000, 5000, 10000, 15000]
        },
        '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]
        }
    };
    asks.AUD = asks.USD;
    asks.CAD = asks.USD;
    asks.GBP = asks.USD;
    asks.NZD = asks.USD;

    var appealasks = {
        '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]
        }
    };
    appealasks.AUD = appealasks.USD;
    appealasks.CAD = appealasks.USD;
    appealasks.GBP = appealasks.USD;
    appealasks.NZD = appealasks.USD;

    var symbols = {
        'USD' : '$\t',
        'AUD' : '$\t',
        'CAD' : '$\t',
        'EUR' : '€\t',
        'GBP' : '£\t',
        'NZD' : '$\t',
        'JPY' : '¥\t',
        'SEK' : '\t kr'
    };

    var ask = null;
    var symbol = '';

    var currency = $("input[name='currency_code']").val();
    if( currency in symbols ){
        symbol = symbols[currency];
    }
    if( currency in asks ){
        if( asks[currency].length < 1 ){
            return;
        }
        for( var prev in asks[currency] ){
            // this assumes that JS returns keys in sorted order, most do
            if( prev > hpc ){
                break;
            }
            ask = asks[currency][prev];
        }
        if( ask != null ){
            for( var j = 0; j < ask.length; j++ ){
                var radio = $("#input_amount_" + j);
                var label = $("label[for='input_amount_" + j + "']");
                if( radio != null ){
                    if( label != null ){
                        // I know an && could be used here, but they are getting escaped
                        radio.val( ask[j] );
                        label.text( symbol.replace('\t', ask[j]) );
                    }
                }
            }
        }
    }
    if( currency in appealasks ){
        if( appealasks[currency].length < 1 ){
            return;
        }
        for( var prev in appealasks[currency] ){
            // this assumes that JS returns keys in sorted order, most do
            if( prev > hpc ){
                break;
            }
            appealask = appealasks[currency][prev];
        }
        var considerAmountString = "";
        for( var k = 0; k < appealask.length; k++ ) {
            considerAmountString += symbol.replace('\t', appealask[k]) + ', ';
        }
        considerAmountString = considerAmountString.trim();
        $('.consider-amounts').html(considerAmountString);
    }
}

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();

});