MediaWiki:Centralnotice-template-B1920 120302 en6C m p1 lg txt cnt
<style>
- mw-mf-page-center {
background-color: #fff;
}
.banner-container {
max-width: none;
}
/* Resets */ .frb * {
margin: 0; padding: 0;
}
/* Box-sizing */ .frb, .frb *, .frb *:before, .frb *:after, .frb-nag {
-moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
}
.frb input[type="radio"], .frb input[type="text"], .frb input[type="email"] {
appearance: none; -webkit-appearance: none; -moz-appearance: none;
}
.frb input[type="radio"]:focus, .frb input[type="text"]:focus, .frb-radio:focus + .frb-label, .frb-submit:focus, .frb-rml-email:focus, .frb-submit-rml:focus, .frb-label:focus {
outline: 0;
}
.frb-ptf-checkbox, .frb input[type="radio"], .frb-visually-hidden {
position: absolute; overflow: hidden; clip: rect(0 0 0 0); margin: -1px; height: 1px; width: 1px; border: 0; padding: 0;
}
/* Font sizes and line heights */ .frb-options, .frb-footer {
font-size: 12px;
}
.frb-footer {
line-height: 1.5;
}
.frb, .frb input, .frb-form button {
font-size: 17px; line-height: 1;
}
.frb-ptf {
font-size: 16px;
}
.frb-message, .frb-ptf, .frb-error {
line-height: 1.3529411765; /*23px @17px*/
}
/* Styles */ /* Hide banner when Wikipedia site search is enabled */ .overlay-enabled .frb {
display: none !important;
}
.frb-main {
background-color: #fff;
}
.frb-top {
font-family: -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Lato', 'Helvetica', 'Arial', sans-serif;
}
.frb-footer {
display: none; margin: 0 14px; padding-top: 20px; padding-bottom: 20px; color: #54595d;
}
.frb-footer a {
color: #54595d; text-decoration: underline;
}
.frb-footer a:hover {
color: #000;
}
.frb-separator {
display: block; border: none; margin-top: 16px; height: 1px; background-color: #eaecf0; /*same border as #page-actions*/
}
.frb-header-inside, .frb-conversation, .frb-footer, .frb-separator {
margin-left: 16px; margin-right: 16px;
}
@media screen and (min-width: 720px) {
.frb-header-inside, .frb-conversation, .frb-footer, .frb-separator { max-width: 993px; margin-left: 53.6px; margin-right: 53.6px; }
}
@media screen and (min-width: 1000px) {
.frb-header-inside, .frb-conversation, .frb-footer, .frb-separator { margin-left: auto; margin-right: auto; }
}
.frb-message {
position: relative; clear: both; margin-bottom: 12px; padding: 10px 18px; background-color: #313131; color: #FFF; border-radius: 1.5em; font-size: 16px; line-height: 1.5; /* 24px @16px */
}
.frb-message.frb-cta {
color: #ad0000;
}
@media all and (min-width: 720px) {
.frb-message { padding: 12px 20px; font-size: 17px; line-height: 1.5294117647; /*26px @17px*/ }
}
.frb-greeting {
display: block; padding-bottom: 17px;
}
.frb-message--typing {
max-width: 82px; padding: 6px 20px 8px;
}
.is-hidden {
display: none;
}
/* Typing indicator */ @keyframes blink {
50% { fill: #a2a9b1; }
} .type-indicator__circle {
fill: #c8ccd1;
} .type-indicator__circle {
animation: 1s blink infinite;
} .type-indicator__circle:nth-child(2) {
animation-delay: 250ms;
} .type-indicator__circle:nth-child(3) {
animation-delay: 500ms;
}
.form-monthly .no-monthly {
opacity: 0.4 !important;
}
.form-monthly .no-monthly .frb-label {
cursor: default;
}
/* 4px tweak to visually align buttons with chat bubbles*/ .frb-buttons-wrapper {
display: table; margin: 0 0 0 -4px; width: calc(100% + 8px);
}
.frb-button {
display: table; float: left; padding: 4px; cursor: pointer;
}
body.rtl .frb-button {
float: right;
}
.frb-payment-options {
display: table; table-layout: fixed;
}
body .frb-methods .frb-button {
display: table-cell; float: none; vertical-align: top;
}
.frb-button-table {
display: table; width: 100%;
}
.frb-frequency .frb-button {
width: 50%;
}
- frb-frequency-monthly:disabled + label {
opacity: 0.4 !important; cursor: default;
}
.frb-amounts .frb-button {
width: 33.333333333%;
}
.frb-payment-options .frb-button {
width: 100%;
}
.frb-payment-options .frb-button:first-child:nth-last-child(4), .frb-payment-options .frb-button:first-child:nth-last-child(4) ~ .frb-button {
float: left; width: 50%;
}
/* Other amount field */ .frb-other-txt, .frb-other-input {
line-height: 1; text-align: left;
}
.frb-other-txt {
font-size: 14px; display: block; text-align: center; margin-bottom: 2px;
}
@media all and (min-width: 375px) {
.frb-other-txt { font-size: 16px; }
}
@media all and (min-width: 720px) {
.frb-other-txt { font-size: inherit; }
}
.frb-other-input {
width: 100% !important; border: none; text-align: center !important; font-weight: bold; color: #36c; box-shadow: 0 2px 0 0 #36c; text-align: right; border-radius: 0; /* Needed for iOS */
}
.frb-button--other .frb-label {
padding: 2px 8px 4px;
}
.frb-radio:checked + .frb-label .frb-other-input {
color: #fff; box-shadow: 0 2px 0 0 #fff;
}
.frb-label, .frb-submit {
padding: 3px 6px 5px; line-height: 1; /* 19px @19px */
}
.frb-label {
display: table-cell; /* To vertical align content */ vertical-align: middle; width: 100%; height: 54px; color: #36c; background-color: #f8f9fa; border-radius: 10px; border: 1px solid #a2a9b1; text-align: center; cursor: pointer; transition: all 0.2s ease; font-weight: bold;
}
.frb-label:hover, .frb-rml-email:hover, .frb-submit-rml:hover {
background-color: #eaf3ff;
}
.frb-radio:checked + .frb-label {
background-color: #2a4b8d; border-color: #2a4b8d; color: #fff; font-weight: bold;
}
.frb-radio:checked + .frb-label .frb-logo-payments--paypal path, .frb-radio:checked + .frb-label .frb-logo-payments--amazon path {
fill: #fff;
}
.frb-ptf-checkbox:focus + .frb-ptf-label .frb-ptf-img {
box-shadow: inset 0 0 0 2px #36c;
}
.frb-radio:focus:checked + .frb-label, .frb-button--is-focused .frb-label, .frb-ptf-checkbox:focus:checked + .frb-ptf-label .frb-ptf-img {
border-color: #2a4b8d; box-shadow: inset 0 0 0 1px #2a4b8d, inset 0 0 0 3px #fff;
}
.frb-submit:focus {
box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 3px #fff;
}
.frb-ptf-checkbox:focus + .frb-ptf-label .frb-ptf-img {
border-radius: 5px;
}
.frb-radio:focus + .frb-label, .frb-label:focus, .frb-submit-rml:focus, .frb-rml-email:focus, .frb-submit {
border-color: #36c;
}
.frb-radio:focus + .frb-label, .frb-label:focus, .frb-rml-email:focus, .frb-submit-rml:focus {
box-shadow: inset 0 0 0 1px #36c;
}
.frb-logo-payments {
float: left; width: 100%; height: 100%; max-height: 34px; margin-top: -3px; /* Visual tweak */
}
.frb-logo-payments--paypal {
margin-top: -3px; /* Visual tweak */ margin-left: 1px;
}
.frb-logo-payments--paypal-usd {
margin-top: 3px; /* Visual tweak */
}
.frb-form fieldset legend {
width: 100%; margin-bottom: 8px;
}
.frb-form fieldset {
margin-top: 20px;
}
.frb-form fieldset.frb-haserror .error-highlight {
color: #ff4f4f; font-weight: bold;
}
.frb-submit {
height: 64px; display: inline-block; cursor: pointer; margin: 12px 0 8px; width: 100%; background-color: #36c; border: 1px solid #36c; border-radius: 10px; color: #fff; font-weight: bold; text-transform: uppercase; transition: background-color 0.2s ease;
}
.frb-submit:hover {
background-color: #447ff5; border-color: #447ff5;
}
.frb-submit-amount {
display: none;
}
.frb-submit-label-monthly {
display: none;
}
.frb-submit-label-now {
display: inline;
}
.form-monthly .frb-submit-label-monthly {
display: inline;
}
.form-monthly .frb-submit-label-now {
display: none;
}
.frb-icon-lock {
margin-bottom: -2px; margin-right: 2px;
}
.frb-icon-lock path {
fill: #fff;
}
/* Remind me later (RML) */ .frb-options {
margin: 0 4px; text-align: center; color: #000; font-weight: bold; text-transform: uppercase;
}
.frb-rml-link {
display: block; margin: 8px auto 0 auto; padding: 16px; color: #36c; transition: color 0.2s ease; font-size: 14px; line-height: 1.1428571429; /*16px @14px*/ font-weight: bold; text-transform: uppercase;
}
.frb-rml-link:hover {
text-decoration: underline;
}
.frb-rml-disabled .js-rml {
display: none;
}
.frb-rml-email, .frb-submit-rml {
height: 54px; padding: 16px 18px;
}
.frb-rml-email {
margin: 4px 0 0 0; width: 100%; color: #000; background-color: #f8f9fa; border-radius: 10px; border: 1px solid #a2a9b1; box-shadow: none; transition: background-color 0.2s ease; cursor: pointer; font-weight: normal;
}
.frb-rml-email.frb-haserror {
border-color: #d33; box-shadow: inset 0 0 0 1px #d33;
}
.frb-submit-rml {
display: block; margin: 8px auto; min-width: 200px; cursor: pointer; color: #36c; background-color: #f8f9fa; border-radius: 10px; border: 1px solid #a2a9b1; transition: background-color 0.2s ease; cursor: pointer;
}
/* -- Credit card logos -- */
/* Countries with 4 card types */ .frb-cc-logo-wrapper {
display: block; margin: 0 auto; width: 70px; font-size: 0; /* Remove spacing between icons */
}
.frb-pm-cc svg {
width: 30px; margin: 2px; display: none;
}
/* Countries with 3 card types */ .frb-cctypes-vma .frb-cc-logo-wrapper {
width: 100%;
} .frb-cctypes-vma svg {
width: 30%; max-height: 34px;
}
.frb-cctypes-vmad .frb-cc-logo-wrapper, .frb-cctypes-vmaj .frb-cc-logo-wrapper, .frb-cctypes-vma .frb-cc-logo-wrapper, .frb-cctypes-vm .frb-cc-logo-wrapper {
display: block;
}
.frb-cctypes-vmad .frb-pm-cc-label, .frb-cctypes-vmaj .frb-pm-cc-label, .frb-cctypes-vma .frb-pm-cc-label, .frb-cctypes-vm .frb-pm-cc-label {
display: none;
}
.frb-cctypes-vmad .frb-cc-logo-visa, .frb-cctypes-vmad .frb-cc-logo-mastercard, .frb-cctypes-vmad .frb-cc-logo-amex, .frb-cctypes-vmad .frb-cc-logo-discover,
.frb-cctypes-vmaj .frb-cc-logo-visa, .frb-cctypes-vmaj .frb-cc-logo-mastercard, .frb-cctypes-vmaj .frb-cc-logo-amex, .frb-cctypes-vmaj .frb-cc-logo-jcb,
.frb-cctypes-vma .frb-cc-logo-visa, .frb-cctypes-vma .frb-cc-logo-mastercard, .frb-cctypes-vma .frb-cc-logo-amex,
.frb-cctypes-vm .frb-cc-logo-visa, .frb-cctypes-vm .frb-cc-logo-mastercard {
display: inline-block;
}
/* -- Pay the fee -- */ .frb-ptf {
margin: 12px 0 0px -2px;
}
.frb-ptf-checkbox + .frb-ptf-label .frb-ptf-img {
display: inline-block; margin-bottom: -4px; width: 32px; height: 32px; background-image: url('https://upload.wikimedia.org/wikipedia/donate/b/b7/Frb-checkbox-ooui.png'); background-size: 64px; background-repeat: no-repeat; background-position: 0 0;
}
.frb-ptf-checkbox:checked + .frb-ptf-label .frb-ptf-img {
background-position: -32px 0;
}
.frb-ptf-label {
display: table; cursor: pointer;
}
.frb-ptf-cell {
display: table-cell; vertical-align: middle;
}
.frb-ptf-cell:first-child {
padding-left: 2px;
}
body.rtl .frb-ptf-cell:first-child {
padding-left: 8px;
}
.frb-ptf-cell:nth-child(2) {
padding-left: 14px;
}
/* --- Header --- */
.frb-header {
top: 0; z-index: 999; width: 100%; overflow: hidden; background-color: #fff;
}
/* The sticky class is added to the toolbar with JS when it reaches its scroll position */ .frb-header--sticky {
position: fixed; top: 0; left: 0; border-bottom: 1px solid #c8ccd1; box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
}
.frb-header-inside {
display: flex; margin: 0 auto; padding: 0 8px; /*padding needed to make focus outlines visible at edges*/ width: 100%; min-height: 42px; height: 1px; /*needed for FF*/
}
.frb-header-action {
flex: 1 0 0; margin: 10px 0; text-align: center; font-size: 12px; line-height: 1; font-weight: normal; color: #36c; border-right: 1px solid #a2a9b1;
} .frb-header-action:hover {
text-decoration: underline;
}
@media all and (min-width: 375px) {
.frb-header-action { font-size: 14px; }
}
.frb-header-action:last-child {
border-right: none;
}
.frb-header-action--donate {
font-weight: bold;
}
.frb-header-action:hover span {
text-decoration: underline;
}
/* Error messages */ .frb-error {
display: none; margin: 8px 0; color: #d33; font-size: 15px; font-weight: 500;
}
/* Opt-in */ .frb-optin .frb-button {
width: 50%;
}
.frb-message--optin {
margin-top: 8px;
}
.frb-optin-no-prompt__yes {
display: none;
}
.frb-optin-no-prompt__no {
display: block;
}
.frb-optin-no-prompt.is-positive .frb-optin-no-prompt__yes {
display: block;
}
.frb-optin-no-prompt.is-positive .frb-optin-no-prompt__no {
display: none;
}
.frb-optin-legal {
margin-top: 10px; font-size: 14px; line-height: 1.3; font-weight: normal; color: #54595d;
} .frb-optin-legal a {
color: #54595d; text-decoration: underline;
} .frb-optin-legal a:hover {
color: #000; text-decoration: underline;
}
.frb-cta {
margin-top: 8px; background-color: #ffc9c9; color: #b32424;
}
/* UPSELL */
.frb-upsell, .frb-monthly-diff-amt .frb-amt-monthly, .frb-upsell-ty {
width: calc(100% + 8px) !important; transition: background-color 0.5s ease; padding: 10px 4px; text-align: center;
}
.frb-upsell { padding-top: 40px; }
.frb-monthly-diff-amt .frb-amt-monthly {
display: block; padding: 0 4px 10px 4px;
}
.frb-upsell-cta, .frb-upsell-ty {
font-size: 17px; line-height: 1.3; font-weight: bold; text-align: center;
}
.frb-upsell-color, .frb-monthly-diff-amt .frb-amt-monthly label {
display: block; font-size: 15px; line-height: 1.3; font-weight: normal; padding: 0 5%; margin: .5em 0;
}
.frb .frb-monthly-diff-amt-link {
display: block; font-size: 15px; line-height: 1.3; color: #36c; margin: 8px auto; padding: 12px; text-align: center; cursor: pointer; font-weight: bold;
} .frb .frb-monthly-diff-amt-link:hover {
text-decoration: underline;
}
.frb-back-step, .frb-back {
display: none; position: absolute; margin-top: 10px; cursor: pointer;
}
.frb-monthly-diff-amt { display: none; }
- frb-amt-monthly-other-input {
position: relative; width: 30%; height: 54px; padding: 16px 18px; text-align: center; font-size: 18px; color: #000; background-color: #f8f9fa; border-radius: 10px; border: 1px solid #a2a9b1; box-shadow: none; transition: background-color 0.2s ease; cursor: pointer; font-weight: normal;
}
- frb-amt-monthly-other-input:hover {
background-color: #eaf3ff;
}
/* Overlay */ .frb-mask {
display: none; position: absolute; z-index: 1000; top: 0; left: 0; width: 100%; height: 100%; background-color: black; opacity: 0.8; touch-action: none;
}
.frb-step-upsell {
position: fixed; z-index: 1001; top: 0; left: 0; right: 0; width: 90%; max-width: 800px; margin: 5% auto; padding: 5%; color: #000; background: #fff;
} </style>
<script> var frb = frb || {};
frb.show = function() {
$('.banner-container').insertBefore('#content'); $('.frb').css('display', 'block'); $('.frb').addClass('frb-country-' + mw.centralNotice.data.country);
};
frb.toggleMonthly = function(monthly) {
// TODO: why is this so complicated? if( monthly.type === 'checkbox' ) { monthly = monthly.checked; } if ( monthly ) { $('#frb-frequency-monthly').prop("checked", true); $('#frb-monthly-checkbox').prop("checked", true); $('#frb-form').addClass('form-monthly'); $('.no-monthly input[type=radio]').attr('disabled', true); $('#frb-form').addClass('form-monthly'); if( $( '.form-monthly .no-monthly input[type=radio]' ).is(':checked') ) { $('.form-monthly .no-monthly input[type=radio]').removeAttr('checked'); frb.setMethod({}); } } else { $('#frb-frequency-onetime').prop("checked", true); $('#frb-monthly-checkbox').prop("checked", false); $('#frb-form').removeClass('form-monthly'); $('.no-monthly input[type=radio]').attr('disabled', false); $('.no-monthly').prop('disabled', false); }
};
frb.amounts = frb.amounts || {};
// Hard minimum amounts that can be given frb.amounts.minimums = {
/* From https://github.com/wikimedia/wikimedia-fundraising-SmashPig/blob/master/PaymentData/ReferenceData/CurrencyRates.php */ 'ADF' : 5.65, 'ADP' : 143, 'AED' : 3.67, 'AFA' : 73, 'AFN' : 73, 'ALL' : 109, 'AMD' : 477, 'ANG' : 1.79, 'AOA' : 278, 'AON' : 278, 'ATS' : 12, 'AUD' : 1.39, 'AWG' : 1.78, 'AZM' : 8486, 'AZN' : 1.7, 'BAM' : 1.69, 'BBD' : 2, 'BDT' : 83, 'BEF' : 35, 'BGL' : 1.69, 'BGN' : 1.69, 'BHD' : 0.38, 'BIF' : 1748, 'BMD' : 1, 'BND' : 1.38, 'BOB' : 6.8, 'BRL' : 4.15, 'BSD' : 1, 'BTN' : 72, 'BWP' : 11, 'BYR' : 21035, 'BZD' : 1.98, 'CAD' : 1.32, 'CDF' : 1573, 'CHF' : 0.98, 'CNY' : 6.83, 'CRC' : 572, 'CUC' : 1, 'CUP' : 25, 'CVE' : 95, 'CYP' : 0.51, 'CZK' : 22, 'DEM' : 1.69, 'DJF' : 178, 'DKK' : 6.42, 'DOP' : 50, 'DZD' : 118, 'ECS' : 24094, 'EEK' : 13, 'EGP' : 18, 'ESP' : 143, 'ETB' : 27, 'EUR' : 0.87, 'FIM' : 5.12, 'FJD' : 2.1, 'FKP' : 0.78, 'FRF' : 5.65, 'GBP' : 0.78, 'GEL' : 2.52, 'GHC' : 47467, 'GHS' : 4.75, 'GIP' : 0.78, 'GMD' : 48, 'GNF' : 8983, 'GRD' : 294, 'GTQ' : 7.5, 'GYD' : 204, 'HKD' : 7.85, 'HNL' : 24, 'HRK' : 6.4, 'HTG' : 68, 'HUF' : 282, 'IDR' : 14966, 'IEP' : 0.68, 'ILS' : 3.61, 'INR' : 108, 'IQD' : 1178, 'IRR' : 42000, 'ISK' : 109, 'ITL' : 1669, 'JMD' : 136, 'JOD' : 0.71, 'JPY' : 112, 'KES' : 100, 'KGS' : 69, 'KHR' : 4025, 'KMF' : 424, 'KPW' : 135, 'KRW' : 1120, 'KWD' : 0.31, 'KYD' : 0.84, 'KZT' : 369, 'LAK' : 8393, 'LBP' : 1508, 'LKR' : 162, 'LRD' : 154, 'LSL' : 15, 'LTL' : 2.98, 'LUF' : 35, 'LVL' : 0.61, 'LYD' : 1.37, 'MAD' : 9.39, 'MDL' : 17, 'MGA' : 3311, 'MGF' : 9150, 'MKD' : 53, 'MMK' : 1529, 'MNT' : 2460, 'MOP' : 8.08, 'MRO' : 357, 'MTL' : 0.37, 'MUR' : 33, 'MVR' : 15, 'MWK' : 717, 'MYR' : 4.15, 'MZM' : 59754, 'MZN' : 60, 'NAD' : 15, 'NGN' : 359, 'NIO' : 32, 'NLG' : 1.9, 'NOK' : 8.4, 'NPR' : 114, 'NZD' : 1.52, 'OMR' : 0.39, 'PAB' : 1, 'PEN' : 3.3, 'PGK' : 3.26, 'PHP' : 54, 'PKR' : 123, 'PLN' : 3.72, 'PTE' : 173, 'PYG' : 5763, 'QAR' : 3.57, 'ROL' : 39889, 'RON' : 3.99, 'RSD' : 101, 'RUB' : 68, 'RWF' : 862, 'SAR' : 3.75, 'SBD' : 7.6, 'SCR' : 13, 'SDD' : 1795, 'SDG' : 18, 'SDP' : 2261, 'SEK' : 9.08, 'SGD' : 1.38, 'SHP' : 0.78, 'SIT' : 207, 'SKK' : 26, 'SLL' : 8430, 'SOS' : 542, 'SRD' : 7.41, 'SRG' : 7408, 'STD' : 21070, 'SVC' : 8.75, 'SYP' : 215, 'SZL' : 15, 'THB' : 33, 'TJS' : 9.36, 'TMM' : 17050, 'TMT' : 3.41, 'TND' : 2.76, 'TOP' : 2.29, 'TRL' : 6629223, 'TRY' : 6.63, 'TTD' : 6.64, 'TWD' : 31, 'TZS' : 2281, 'UAH' : 28, 'UGX' : 3749, 'USD' : 1, 'UZS' : 7780, 'VEB' : 6050841136, 'VEF' : 6050841, 'VND' : 23150, 'VUV' : 111, 'WST' : 2.64, 'XAF' : 565, 'XCD' : 2.7, 'XOF' : 565, 'XPF' : 103, 'YER' : 250, 'YUN' : 101, 'ZAR' : 15, 'ZMK' : 5176, 'ZWD' : 373, /* Astropay currencies have higher minimums - 1.50 USD */ 'ARS' : 58.5, 'BRL' : 6.23, 'CLP' : 1035, 'COP' : 4640, 'MXN' : 28.5
};
frb.amounts.options7 = {
// Big English 'USD' : [2.75, 5, 10, 20, 30, 50, 100], 'CAD' : [2.75, 5, 10, 20, 30, 50, 100], 'AUD' : [2.75, 5, 10, 20, 30, 50, 100], 'NZD' : [2.75, 5, 10, 20, 30, 50, 100], 'GBP' : [2, 5, 10, 20, 30, 50, 100], 'EUR' : { 'default' : [2, 5, 10, 20, 30, 50, 100] }, // Others 'DKK' : [20, 100, 150, 200, 300, 500, 1000], 'HUF' : [500, 1000, 2000, 4000, 5000, 7000, 10000], 'ILS' : [10, 50, 100, 200, 300, 500, 1000], 'INR' : [150, 300, 500, 1000, 1500, 3000, 5000], 'JPY' : [300, 1000, 1500, 2000, 3000, 5000, 10000], 'MYR' : [10, 30, 50, 100, 200, 300, 500], 'NOK' : [20, 100, 150, 200, 500, 750, 1000], 'PLN' : [10, 20, 50, 100, 200, 300, 500], 'RON' : [10, 50, 75, 100, 200, 300, 500], 'SEK' : [30, 50, 100, 200, 300, 500, 1000], 'UAH' : [50, 75, 150, 300, 500, 750, 1000], 'ZAR' : [30, 50, 100, 200, 300, 500, 1000], // Latin America 'BRL' : [10, 20, 30, 50, 100, 250, 500], 'ARS' : [60, 100, 200, 400, 1000, 1500, 2000], 'CLP' : [1500, 2500, 5000, 10000, 15000, 25000, 50000], 'COP' : [7000, 10000, 20000, 50000, 100000, 150000, 200000], 'MXN' : [35, 50, 100, 200, 500, 750, 1000], 'PEN' : [10, 30, 50, 150, 200, 275, 700], 'UYU' : [70, 100, 200, 400, 1000, 1500, 2000]
};
// 5 amount options. Used e.g. on mobile // Usual formula: take 1st, 3rd, 4th, 6th and 7th from asks7 */ frb.amounts.options5 = {
// Big English 'USD' : [2.75, 16.36, 20, 50, 100], 'CAD' : [2.75, 15, 20, 50, 100], 'AUD' : [2.75, 15, 20, 50, 100], 'NZD' : [2.75, 15, 20, 50, 100], 'GBP' : [2, 10, 20, 50, 100], 'EUR' : [2, 10, 20, 50, 100], // Others 'DKK' : [20, 100, 200, 500, 1000], 'HUF' : [500, 2500, 4000, 7000, 10000], 'ILS' : [10, 50, 200, 600, 1000], 'INR' : [150, 500, 1000, 3000, 5000], 'JPY' : [300, 1500, 2000, 5000, 10000], 'MYR' : [10, 50, 100, 300, 500], 'NOK' : [20, 100, 200, 500, 1000], 'PLN' : [10, 50, 100, 300, 500], 'RON' : [10, 50, 100, 200, 1000], 'SEK' : [30, 100, 200, 500, 1000], 'UAH' : [50, 150, 300, 750, 1000], 'ZAR' : [30, 100, 200, 500, 1000], // Latin America 'BRL' : [10, 30, 50, 100, 250], 'ARS' : [60, 200, 400, 1000, 2000], 'CLP' : [1500, 5000, 10000, 25000, 50000], 'COP' : [7000, 20000, 50000, 150000, 200000], 'MXN' : [35, 100, 200, 750, 1000], 'PEN' : [10, 50, 150, 300, 700], 'UYU' : [70, 200, 400, 1500, 2000]
};
/* "Average" donation */ frb.amounts.averages = {
'USD' : 16.36, 'CAD' : 15, 'AUD' : 15, 'NZD' : 15, 'GBP' : 10, 'EUR' : 10, // Others 'DKK' : 100, 'HUF' : 2500, 'ILS' : 50, 'INR' : 1000, 'JPY' : 1500, 'MYR' : 50, 'NOK' : 100, 'PLN' : 50, 'RON' : 50, 'SEK' : 100, 'UAH' : 150, 'ZAR' : 150, // Latin America 'BRL' : 25, 'ARS' : 200, 'CLP' : 8000, 'COP' : 30000, 'MXN' : 150, 'PEN' : 40, 'UYU' : 300
};
// 'If everyone gave X'. Mostly the same as first asks option. frb.amounts.ifEveryone = {
// Big English 'USD' : 2.75, 'CAD' : 2.75, 'AUD' : 2.75, 'NZD' : 2.75, 'GBP' : 2, 'EUR' : { 'default' : 2 }, // Others 'DKK' : 20, 'HUF' : 500, 'ILS' : 10, 'INR' : 150, 'JPY' : 300, 'MYR' : 10, 'NOK' : 20, 'PLN' : 10, 'RON' : 10, 'SEK' : 30, 'UAH' : 50, 'ZAR' : 30, // Latin America 'BRL' : 10, 'ARS' : 60, 'CLP' : 1500, 'COP' : 7000, 'MXN' : 35, 'PEN' : 10, 'UYU' : 70
};
// Minimum fee/PTF amounts. Default is 0.35. // Updated 2018-07-05 based on Ppena's feedback // Updated 2019-05-21 to approx 0.35 USD equivalent frb.amounts.feeMinimums = {
'DKK' : 2, 'HUF' : 100, 'ILS' : 1.2, 'INR' : 25, 'JPY' : 35, 'MYR' : 1, 'NOK' : 3, 'PLN' : 1.35, 'RON' : 1.5, 'SEK' : 3, 'UAH' : 10, 'ZAR' : 5, // Latin America 'BRL' : 1.5, 'ARS' : 15, 'CLP' : 250, 'COP' : 1000, 'PEN' : 1.2, 'MXN' : 6, 'UYU' : 12
};
// If one-time amount <= left amount, suggest right amount for monthly frb.amounts.monthlySuggest = {
'USD' : [ // also CAD, AUD, NZD [ 2.74, 0 ], [ 9, 1.75 ], [ 12, 2 ], [ 15, 2.5 ], [ 18, 3 ], [ 21, 3.5 ], [ 24, 4 ], [ 27, 4.5 ], [ 30, 5 ], [ 33, 5.5 ], [ 36, 6 ], [ 39, 6.5 ], [ 42, 7 ], [ 45, 7.5 ], [ 48, 8 ], [ 51, 8.5 ], [ 54, 9 ], [ 57, 9.5 ], [ 60, 10 ], [ 63, 10.5 ], [ 66, 11 ], [ 69, 11.5 ], [ 72, 12 ], [ 75, 12.5 ], [ 102, 17 ], [ 250, 25 ], [ 480, 50 ], [ Infinity, 0 ] ], 'GBP' : [ // also EUR [ 1.99, 0 ], [ 9, 1.75 ], [ 12, 2 ], [ 15, 2.5 ], [ 18, 3 ], [ 21, 3.5 ], [ 24, 4 ], [ 27, 4.5 ], [ 30, 5 ], [ 33, 5.5 ], [ 36, 6 ], [ 39, 6.5 ], [ 42, 7 ], [ 45, 7.5 ], [ 48, 8 ], [ 51, 8.5 ], [ 54, 9 ], [ 57, 9.5 ], [ 60, 10 ], [ 63, 10.5 ], [ 66, 11 ], [ 69, 11.5 ], [ 72, 12 ], [ 75, 12.5 ], [ 102, 17 ], [ 250, 25 ], [ 480, 50 ], [ Infinity, 0 ] ], 'INR' : [ [ 300, 150 ], [ 500, 175 ], [ 1000, 250 ], [ 1500, 350 ], [ 3000, 500 ], [ 5000, 750 ], [ 10000, 1000 ], [ 25000, 2500 ], [ Infinity, 5000 ] ], 'JPY' : [ [ 1000, 300 ], [ 1500, 450 ], [ 2000, 500 ], [ 3000, 700 ], [ 5000, 900 ], [ 10000, 1100 ], [ 25000, 2500], [ 50000, 5000], [ 100000, 12000], [ 250000, 25000], [ 500000, 50000], [ 750000, 75000], [ Infinity, 100000] ], 'SEK' : [ [ 50, 25 ], [ 100, 30 ], [ 200, 50 ], [ 300, 70 ], [ 500, 90 ], [ 1000, 110 ], [ 2500, 250 ], [ 5000, 500 ], [ Infinity, 1000 ] ]
}; frb.amounts.monthlySuggest.EUR = frb.amounts.monthlySuggest.GBP; frb.amounts.monthlySuggest.CAD = frb.amounts.monthlySuggest.USD; frb.amounts.monthlySuggest.AUD = frb.amounts.monthlySuggest.USD; frb.amounts.monthlySuggest.NZD = frb.amounts.monthlySuggest.USD;
frb.currencyFormats = {
'USD' : '$\t', 'CAD' : { 'fr' : '$\t', 'default' : '$\t' }, 'AUD' : '$\t', 'NZD' : '$\t', 'GBP' : '£\t', 'EUR' : { 'en' : '€\t', 'cy' : '€\t', 'ga' : '€\t', 'mt' : '€\t', 'nl' : '€ \t', 'lv' : '€ \t', 'tr' : '€ \t', 'default' : '\t €' }, // Others 'DKK' : '\t kr.', 'HUF' : '\t Ft', 'ILS' : { 'he' : '\t ₪', 'yi' : '\t ₪', 'ar' : '\t ₪', 'default' : '₪ \t' }, 'INR' : '₹\t', 'JPY' : '¥\t', 'MYR' : 'RM\t', 'NOK' : '\t kr', 'PLN' : '\t zł', 'RON' : '\t lei', 'SEK' : '\t kr', 'UAH' : '₴\t', 'ZAR' : 'R \t', // Latin America 'BRL' : 'R$\t', 'ARS' : '$\t', 'CLP' : '$\t', 'COP' : '$\t', 'MXN' : '$\t', 'PEN' : 'S/. \t', 'UYU' : '$U \t'
};
// Check in user language first, then fall back to English frb.countryNames = {
'en' : { 'US' : 'the U.S.', 'CA' : 'Canada', 'GB' : 'the UK', 'IE' : 'Ireland', 'AU' : 'Australia', 'NZ' : 'New Zealand', 'AR' : 'Argentina', 'AT' : 'Austria', 'BE' : 'Belgium', 'BR' : 'Brazil', 'CL' : 'Chile', 'CO' : 'Colombia', 'DK' : 'Denmark', 'ES' : 'Spain', 'FR' : 'France', 'HK' : 'Hong Kong', 'HU' : 'Hungary', 'IL' : 'Israel', 'IN' : 'India', 'IT' : 'Italy', 'JP' : 'Japan', 'LU' : 'Luxembourg', 'LV' : 'Latvia', 'MX' : 'Mexico', 'MY' : 'Malaysia', 'NL' : 'the Netherlands', 'NO' : 'Norway', 'PE' : 'Peru', 'PL' : 'Poland', 'PT' : 'Portugal', 'RO' : 'Romania', 'SE' : 'Sweden', 'SK' : 'Slovakia', 'UA' : 'Ukraine', 'UY' : 'Uruguay', 'ZA' : 'South Africa' }, 'es' : { 'MX' : 'México', 'PE' : 'Perú', 'ES' : 'España' }, 'da' : { 'AT' : 'i Østrig', 'BE' : 'i Belgien', 'DK' : 'i Danmark', 'HU' : 'i Ungarn', 'IL' : 'i Israel', 'LV' : 'i Letland', 'LU' : 'i Luxembourg', 'MY' : 'i Malaysia', 'NO' : 'i Norge', 'PL' : 'i Polen', 'PT' : 'i Portugal', 'RO' : 'i Rumænien', 'SK' : 'i Slovakiet', 'ZA' : 'i Sydafrika', 'UA' : 'i Ukraine' }, 'nl' : { 'NL' : 'in Nederland', 'AT' : 'in Oostenrijk', 'BE' : 'in België', 'DK' : 'in Denemarken', 'HU' : 'in Hongarije', 'IL' : 'in Israël', 'LV' : 'in Letland', 'LU' : 'in Luxemburg', 'MY' : 'in Maleisië', 'NO' : 'in Noorwegen', 'PL' : 'in Polen', 'PT' : 'in Portugal', 'RO' : 'in Roemenië', 'SK' : 'in Slowakije', 'ZA' : 'in Zuid-Afrika', 'UA' : 'in Oekraïne' }, 'fr' : { 'AT' : 'en Autriche', 'BE' : 'en Belgique', 'DK' : 'au Danemark', 'HU' : 'en Hongrie', 'IL' : 'en Israël', 'LV' : 'en Lettonie', 'LU' : 'au Luxembourg', 'MY' : 'en Malaisie', 'NO' : 'en Norvège', 'PL' : 'en Pologne', 'PT' : 'au Portugal', 'RO' : 'en Roumanie', 'SK' : 'en Slovaquie', 'ZA' : 'en Afrique du Sud', 'UA' : 'en Ukraine' }, 'de' : { 'AT' : 'in Österreich', 'BE' : 'in Belgien', 'DK' : 'in Dänemark', 'HU' : 'in Ungarn', 'IL' : 'in Israel', 'LV' : 'in Lettland', 'LU' : 'in Luxemburg', 'MY' : 'in Malaysia', 'NO' : 'in Norwegen', 'PL' : 'in Polen', 'PT' : 'in Portugal', 'RO' : 'in Rumänien', 'SK' : 'in der Slowakei', 'ZA' : 'in Südafrika', 'UA' : 'in der Ukraine' }, 'he' : { 'AT' : 'באוסטרליה', 'BE' : 'בבלגיה', 'DK' : 'בדנמרק', 'HU' : 'בהונגריה', 'IL' : 'בישראל', 'LV' : 'בלטביה', 'LU' : 'בלוקסמבורג', 'MY' : 'במלזיה', 'NO' : 'בנורבגיה', 'PL' : 'בפולין', 'PT' : 'בפורטוגל', 'RO' : 'ברומניה', 'SK' : 'בסלובקיה', 'ZA' : 'בדרום אפריקה', 'UA' : 'באוקראינה' }, 'hu' : { 'AT' : 'Ausztriában', 'BE' : 'Belgiumban', 'DK' : 'Dániában', 'HU' : 'magyarországi', 'IL' : 'Izraelben', 'LV' : 'Lettországban', 'LU' : 'Luxemburgban', 'MY' : 'Malajziában', 'NO' : 'Norvégiában', 'PL' : 'Lengyelországban', 'PT' : 'Portugáliában', 'RO' : 'Romániában', 'SK' : 'Szlovákiában', 'ZA' : 'Dél-Afrikában', 'UA' : 'Ukrajnában' }, 'lv' : { 'AT' : 'valstī Austrijā', 'BE' : 'valstī Beļģijā', 'DK' : 'valstī Dānijā', 'HU' : 'valstī Ungārijā', 'IL' : 'Izraēlas valstī', 'LV' : 'valstī Latvijā', 'LU' : 'valstī Luksemburgā', 'MY' : 'valstī Malaizijā', 'NO' : 'valstī Norvēģijā', 'PL' : 'valstī Polijā', 'PT' : 'valstī Portugālē', 'RO' : 'valstī Rumānijā', 'SK' : 'valstī Slovākijā', 'ZA' : 'Dienvidāfrikas valstī', 'UA' : 'valstī Ukrainā' }, 'nb' : { 'AT' : 'i Østerrike', 'BE' : 'i Belgia', 'DK' : 'i Danmark', 'HU' : 'i Ungarn', 'IL' : 'i Israel', 'LV' : 'i Latvia', 'LU' : 'i Luxembourg', 'MY' : 'i Malaysia', 'NO' : 'i Norge', 'PL' : 'i Polen', 'PT' : 'i Portugal', 'RO' : 'i Romania', 'SK' : 'i Slovakia', 'ZA' : 'i Sør-Afrika', 'UA' : 'i Ukraina' }, 'pl' : { 'AT' : 'w Austrii', 'BE' : 'w Belgii', 'DK' : 'w Danii', 'HU' : 'na Węgrzech', 'IL' : 'w Izraelu', 'LV' : 'na Łotwie', 'LU' : 'w Luksemburgu', 'MY' : 'w Malezji', 'NO' : 'w Norwegii', 'PL' : 'w Polsce', 'PT' : 'w Portugalii', 'RO' : 'w Rumunii', 'SK' : 'na Słowacji', 'ZA' : 'w Republice Południowej Afryki', 'UA' : 'na Ukrainie' }, 'pt' : { 'AT' : 'na Áustria', 'BE' : 'na Bélgica', 'DK' : 'na Dinamarca', 'HU' : 'na Hungria', 'IL' : 'em Israel', 'LV' : 'na Letónia', 'LU' : 'no Luxemburgo', 'MY' : 'na Malásia', 'NO' : 'na Noruega', 'PL' : 'na Polónia', 'PT' : 'em Portugal', 'RO' : 'na Roménia', 'SK' : 'na Eslováquia', 'ZA' : 'na África do Sul', 'UA' : 'na Ucrânia' }, 'ro' : { 'AT' : 'în Austria', 'BE' : 'în Belgia', 'DK' : 'în Danemarca', 'HU' : 'în Ungaria', 'IL' : 'în Israel', 'LV' : 'în Latvia', 'LU' : 'în Luxemburg', 'MY' : 'în Malaezia', 'NO' : 'în Norvegia', 'PL' : 'în Polonia', 'PT' : 'în Portugalia', 'RO' : 'în România', 'SK' : 'în Slovacia', 'ZA' : 'în Africa de Sud', 'UA' : 'în Ucraina' }, 'ru' : { 'AT' : 'в Австрии', 'BE' : 'в Бельгии', 'DK' : 'в Дании', 'HU' : 'в Венгрии', 'IL' : 'в Израиле', 'LV' : 'в Латвии', 'LU' : 'в Люксембурге', 'MY' : 'в Малайзии', 'NO' : 'в Норвегии', 'PL' : 'в Польше', 'PT' : 'в Португалии', 'RO' : 'в Румынии', 'SK' : 'в Словакии', 'ZA' : 'в Южной Африке', 'UA' : 'в Украине' }, 'sk' : { 'AT' : 'v Rakúsku', 'BE' : 'v Belgicku', 'DK' : 'v Dánsku', 'HU' : 'v Maďarsku', 'IL' : 'v Izraeli', 'LV' : 'v Lotyšsku', 'LU' : 'v Luxembursku', 'MY' : 'v Malajzii', 'NO' : 'v Nórsku', 'PL' : 'v Poľsku', 'PT' : 'v Portugalsku', 'RO' : 'v Rumunsku', 'SK' : 'na Slovensku', 'ZA' : 'v Juhoafrickej republike', 'UA' : 'na Ukrajine' }, 'uk' : { 'AT' : 'у Австрії', 'BE' : 'у Бельгії', 'DK' : 'у Данії', 'HU' : 'в Угорщині', 'IL' : 'в Ізраїлі', 'LV' : 'у Латвії', 'LU' : 'у Люксембургу', 'MY' : 'у Малайзії', 'NO' : 'у Норвегії', 'PL' : 'у Польщі', 'PT' : 'у Португалії', 'RO' : 'у Румунії', 'SK' : 'у Словаччині', 'ZA' : 'у ПАР', 'UA' : 'в Україні' }
};
frb.dayNames = {
'en' : [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ], 'ja' : [ '日', '月', '火', '水', '木', '金', '土' ], 'es' : [ 'domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado' ], 'sv' : [ 'söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag' ], 'da' : [ 'søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag' ], 'nb' : [ 'søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag' ], 'it' : [ 'domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato' ], 'nl' : [ 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag' ], 'fr' : [ 'dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi' ], 'de' : [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag' ], 'he' : [ 'ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת' ], 'lv' : [ 'svētdienā', 'pirmdienā', 'otrdienā', 'trešdienā', 'ceturtdienā', 'piektdienā', 'sestdienā' ], 'pl' : [ 'niedzielę', 'poniedziałek', 'wtorek', 'środę', 'czwartek', 'piątek', 'sobotę' ], 'ru' : [ 'воскресенье', 'понедельник', 'вторник', 'среду', 'четверг', 'пятницу', 'субботу' ], 'uk' : [ 'неділі', 'понеділка', 'вівторка', 'середи', 'четверга', 'п’ятниц', 'суботи' ], 'hu' : [ 'vasárnapon', 'hétfőn', 'kedden', 'szerdán', 'csütörtökön', 'pénteken', 'szombaton' ], 'ro' : [ 'duminica', 'lunea', 'marțea', 'miercurea', 'joia', 'vinerea', 'sâmbăta' ]
};
// "This fooday" translations. Needed for some languages where gender varies and "this" must agree frb.dayNamesThis = {
'en' : [ 'this Sunday', 'this Monday', 'this Tuesday', 'this Wednesday', 'this Thursday', 'this Friday', 'this Saturday' ], 'jp' : [ 'この日曜日', 'この月曜日', 'この火曜日', 'この水曜日', 'この木曜日', 'この金曜日', 'この土曜日' ], 'it' : [ 'questa domenica', 'questo lunedì', 'questo martedì', 'questo mercoledì', 'questo giovedì', 'questo venerdì', 'questo sabato'], 'pl' : [ 'w tę niedzielę', 'w ten poniedziałek', 'w ten wtorek', 'w tę środę', 'w ten czwartek', 'w ten piątek', 'w tę sobotę' ], 'ru' : [ 'в это воскресенье', 'в этот понедельник', 'в этот вторник', 'в эту среду', 'в этот четверг', 'в эту пятницу', 'в эту субботу' ], 'uk' : [ 'цієї неділі', 'цього понеділка', 'цього вівторка', 'цієї середи', 'цього четверга', 'цієї п’ятниці', 'цієї суботи' ], 'pt' : [ 'neste domingo', 'nesta segunda-feira', 'nesta terça-feira', 'nesta quarta-feira', 'nesta quinta-feira', 'nesta sexta-feira', 'neste sábado'], 'sk' : [ 'túto nedeľu', 'tento pondelok', 'tento utorok', 'túto stredu', 'tento štvrtok', 'tento piatok', 'túto sobotu']
};
frb.iPadTranslations = {
'en' : 'iPad'
}; /* MediaWiki:FundraisingBanners/CoreJS-2018.js
* Core code for banner forms, with new inline error messages */
var frb = frb || {}; frb.loadedTime = Date.now(); frb.didSelectAmount = false;
frb.optinRequiredCountries =
[ 'AT', 'BE', 'DK', 'ES', 'FR', 'GB', 'HU', 'IE', 'IT', 'LU', 'LV', 'NL', 'NO', 'PL', 'PT', 'RO', 'SE', 'SK', 'UA' ];
frb.optinRequired = frb.optinRequiredCountries.indexOf(mw.centralNotice.data.country) !== -1;
frb.maxUSD = 12000;
/**
* Main function to submit to paymentswiki * * @param {Object} options * - method (required) * - submethod (optional) * - gateway (optional) * - ffname (optional) * - skipValidation (optional boolean, for pp-usd. Not yet implemented.) * @param {Boolean} isEndowment */
frb.submitForm = function(options, isEndowment) {
var uri = new mw.Uri('https://payments.wikimedia.org/index.php/Special:GatewayFormChooser'); var params = {};
if ( !frb.validateForm( options ) ) { frb.extraData.validateError = 1; // Flag they had an error, even if fixed later return false; // Error, bail out of submitting }
/* Form selection data */ params.payment_method = options.method; if ( options.submethod ) { params.payment_submethod = options.submethod; } if ( options.gateway ) { params.gateway = options.gateway; } if ( options.ffname ) { params.ffname = options.ffname; } if ( options.variant ) { params.variant = options.variant; } params.recurring = frb.getRecurring();
params.currency_code = frb.getCurrency(mw.centralNotice.data.country) || 'USD';
params.uselang = mw.centralNotice.data.uselang || 'en'; params.country = mw.centralNotice.data.country || 'XX';
if ( params.uselang === 'pt' && params.country === 'BR' ) { params.uselang = 'pt-br'; } if ( params.uselang === 'es' && ( params.country === 'AR' || params.country === 'CL' || params.country === 'CO' || params.country === 'MX' || params.country === 'PE' || params.country === 'UY' ) ) { params.uselang = 'es-419'; }
/* Adyen override. frb.ccAdyenCountries is defined in LocalizeJS-2017.js */ if ( params.payment_method === 'cc' && frb.ccAdyenCountries.indexOf( params.country ) !== -1 ) { params.gateway = 'adyen'; }
/* Amount */ var amount = frb.getAmount(); if ( $('#frb-ptf-checkbox').prop('checked') ) { amount = amount + frb.calculateFee(amount); frb.extraData.ptf = 1; } params.amount = amount;
/* Email optin */ if ( $('input[name="opt_in"]').length > 0 ) { var opt_inValue = $('input[name="opt_in"]:checked').val(); params.opt_in = opt_inValue; // frb.validateForm() already checked it's 1 or 0 }
/* Tracking info */ if ( isEndowment ) { params.utm_medium = 'endowment'; } else { params.utm_medium = 'sitenotice'; } params.utm_campaign = mw.centralNotice.data.campaign || 'test'; params.utm_source = frb.buildUtmSource(params);
frb.extraData.vw = window.innerWidth; frb.extraData.vh = window.innerHeight; frb.extraData.time = Math.round( (Date.now() - frb.loadedTime)/1000 );
if ( !$.isEmptyObject( frb.extraData ) ) { params.utm_key = frb.buildUtmKey( frb.extraData ); }
/* Link to Banner History if enabled */ var mixins = mw.centralNotice.getDataProperty( 'mixins' ); if ( mixins && mixins.bannerHistoryLogger ) { params.bannerhistlog = mw.centralNotice.bannerHistoryLogger.id; }
uri.extend(params);
if ( mixins && mixins.bannerHistoryLogger ) { mw.centralNotice.bannerHistoryLogger.ensureLogSent().always(function() { window.location.href = uri.toString(); }); } else { window.location.href = uri.toString(); }
};
/**
* Check the form for errors. * Called on submission, can also be called on input. */
frb.validateForm = function( options ) {
var error = false;
/* Reset all errors */ $('.frb-haserror').removeClass('frb-haserror'); $('.frb-error').hide();
if ( !options.method ) { error = true; $('.frb-methods').addClass('frb-haserror'); $('.frb-error-method').show(); }
if ( !frb.validateAmount() ) { error = true; }
/* Email optin */ if ( frb.optinRequired && $('.frb-optin').is(':visible') ) { var opt_inValue = $('input[name="opt_in"]:checked').val(); if ( opt_inValue !== '1' && opt_inValue !== '0' ) { $('.frb-optin').addClass('frb-haserror'); $('.frb-error-optin').show(); error = true; } }
return !error;
};
/**
* Check if selected amount is valid i.e. a positive number, between minimum and maximum. * If not, show an error and return false. */
frb.validateAmount = function() {
var amount = frb.getAmount(); var currency = frb.getCurrency( mw.centralNotice.data.country ); var minAmount = frb.amounts.minimums[ currency ];
if ( amount === null || isNaN(amount) || amount <= 0 || amount < minAmount ) { $('fieldset.frb-amounts').addClass('frb-haserror'); $('.frb-error-bigamount').hide(); $('.frb-error-smallamount').show(); return false; } else if ( amount > frb.maxUSD * minAmount ) { $('fieldset.frb-amounts').addClass('frb-haserror'); $('.frb-error-bigamount').show(); return false; } else { $('fieldset.frb-amounts').removeClass('frb-haserror'); $('.frb-error-smallamount, .frb-error-bigamount').hide(); return true; }
};
/**
* Build the utm_source for analytics. * * Own function so it can be overriden for weird tests * * @param {Object} params * @return {string} utm_source */
frb.buildUtmSource = function(params) {
var utm_source; var fullDottedPaymentMethod = params.payment_method; if ( params.recurring ) { fullDottedPaymentMethod = 'r' + fullDottedPaymentMethod; } if ( params.payment_submethod ) { fullDottedPaymentMethod = fullDottedPaymentMethod + '.' + params.payment_submethod; }
utm_source = mw.centralNotice.data.banner;
// Keeping opt-in in utm_source for safety for now // Eventually remove it, or move to utm_key? if ( params.opt_in ) { utm_source += '_optIn' + params.opt_in; }
utm_source += '.no-LP.' + fullDottedPaymentMethod;
return utm_source;
};
/**
* Build a string for utm_key from extra tracking data * * @param {Object} data * @return {string} utm_key */
frb.buildUtmKey = function(data) {
var dataArray = []; for (var key in data) { if (data.hasOwnProperty(key)) { dataArray.push( key + '_' + data[key] ); } } return dataArray.join('~');
};
/**
* Determine if we should show recurring choice on step 2 * @param {Object} options Including method and optional gateway * @param {String} country * @return {boolean} */
frb.shouldShowRecurring = function(options, country) {
if ( frb.noRecurringCountries.indexOf( country ) !== -1 ) { // Defined in LocalizeJS-2017.js return false; } if ( options.method === 'paypal' ) { return true; } if ( options.method === 'cc' ) { if ( options.gateway === 'adyen' || frb.ccAdyenCountries.indexOf( country ) !== -1 ) { // Defined in LocalizeJS-2017.js return false; } else { return true; } } return false;
};
/* Is recurring method selected? This function can be overriden for different forms */ frb.getRecurring = function() {
var form = document.getElementById('frb-form'); return form.frequency.value === 'monthly';
};
/* Return amount selected */ frb.getAmount = function() {
var form = document.getElementById('frb-form'); var amount = null; frb.extraData.otherAmt = 0;
// If there are some amount radio buttons, then look for the checked one if (form.amount) { for (var i = 0; i < form.amount.length; i++) { if (form.amount[i].checked) { amount = form.amount[i].value; } } }
// Check the "other" amount box if (form.otherAmount.value !== ) { var otherAmount = form.otherAmount.value; otherAmount = otherAmount.replace(/[,.](\d)$/, ':$10'); otherAmount = otherAmount.replace(/[,.](\d)(\d)$/, ':$1$2'); otherAmount = otherAmount.replace(/[$£€¥,.]/g, ); otherAmount = otherAmount.replace(/:/, '.'); amount = otherAmount; frb.extraData.otherAmt = 1; }
amount = parseFloat(amount);
if ( isNaN(amount) ) { return 0; } else { return amount; }
};
/* Localize the amount errors. Call when initialising banner. */ frb.localizeErrors = function() {
var currency = frb.getCurrency( mw.centralNotice.data.country ); var minAmount = frb.amounts.minimums[ currency ];
$('.frb-error-smallamount').text( function( index, oldText ) { return oldText.replace( '$1', minAmount + ' ' + currency ); });
if ( currency === 'USD' ) { // we don't need to include the conversion $('.frb-error-bigamount').text( function( index, oldText ) { return oldText.replace( '($1 $2) ', ) .replace( '($1 $2) ', ); }); }
$('.frb-error-bigamount').text( function( index, oldText ) { return oldText.replace( '$1', frb.maxUSD * minAmount ) .replace( '$2', currency ) .replace( '$3', 'benefactors@wikimedia.org' ) .replace( '$4', frb.maxUSD ); });
};
/**
* Shared code for amount input handling */
frb.initAmountOptions = function() {
// Reset "Other" input if user clicks a preset amount $('#frb-form [id^=frb-amt-ps]').click(function() { $('#frb-amt-other-input').val(); });
// Track if they selected and then later changed amount // Only for radios, not for every keystroke in Other and not for PTF $('.frb-amounts input[type="radio"]').on('change', function(e) { if ( frb.didSelectAmount ) { frb.extraData.changedAmt = 1; } frb.didSelectAmount = true; });
// Block typing non-numerics in input field, otherwise Safari allows them and then chokes // https://phabricator.wikimedia.org/T118741, https://phabricator.wikimedia.org/T173431 var blockNonNumeric = function(e) { // Allow special keys in Firefox if ((e.code == 'ArrowLeft') || (e.code == 'ArrowRight') || (e.code == 'ArrowUp') || (e.code == 'ArrowDown') || (e.code == 'Delete') || (e.code == 'Backspace')) { return; } var chr = String.fromCharCode(e.which); if ("0123456789., ".indexOf(chr) === -1) { return false; } }; $('#frb-amt-other-input').on('keypress', blockNonNumeric); $('#frb-amt-monthly-other-input').on('keypress', blockNonNumeric);
};
/**
* Calculate approximate transaction fee on given amount * @param {number} amount * @return {number} Rounded to 2 decimal places */
frb.calculateFee = function(amount) {
var currency = frb.getCurrency(mw.centralNotice.data.country), feeMultiplier = 0.04, feeMinimum = frb.amounts.feeMinimums[currency] || 0.35, feeAmount = amount * feeMultiplier;
if ( feeAmount < feeMinimum ) { feeAmount = feeMinimum; } return parseFloat(feeAmount.toFixed(2));
};
frb.updateFeeDisplay = function() {
var currency = frb.getCurrency(mw.centralNotice.data.country), language = mw.centralNotice.data.uselang, amount, feeAmount, totalAmount;
amount = frb.getAmount(); feeAmount = frb.calculateFee(amount); if ( $('#frb-ptf-checkbox').prop('checked') ) { totalAmount = amount + feeAmount; } else { totalAmount = amount; }
var feeAmountFormatted = frb.formatCurrency(currency, feeAmount, language); $('.frb-ptf-fee').text(feeAmountFormatted);
var totalAmountFormatted = frb.formatCurrency(currency, totalAmount, language); $('.frb-ptf-total').text(totalAmountFormatted);
$('.frb-ptf').slideDown();
};
/** Debug function to highlight dynamically replaced elements */ frb.highlightReplacements = function() {
$('.frb [class^="frb-replace"], .frb-ptf-fee, .frb-ptf-total, .frb-upsell-ask').css('background-color', '#fa0');
};
/* End of MediaWiki:FundraisingBanners/CoreJS-2018.js */ /* == MediaWiki:FundraisingBanners/LocalizeJS-2017.js == */
/**
* Get the currency for a given country * * NOTE: The following currency mapping is WMF-specific based on payment * provider availability, NOT necessarily the official currency of the country * * @param {string} country code * @return {string} currency code */
frb.getCurrency = function(country) {
switch ( country ) { // Big 6 case 'US': return 'USD'; case 'CA': return 'CAD'; case 'GB': return 'GBP'; case 'IE': return 'EUR'; case 'AU': return 'AUD'; case 'NZ': return 'NZD'; // Euro countries case 'AT': case 'BE': case 'ES': case 'FR': case 'IE': case 'IT': case 'LU': case 'LV': case 'NL': case 'PT': case 'SK': return 'EUR'; // Others case 'DK': return 'DKK'; case 'HU': return 'HUF'; case 'IL': return 'ILS'; case 'IN': return 'INR'; case 'JP': return 'JPY'; case 'MY': return 'MYR'; case 'NO': return 'NOK'; case 'PL': return 'PLN'; case 'RO': return 'RON'; case 'SE': return 'SEK'; case 'UA': return 'UAH'; case 'ZA': return 'ZAR'; // Latin America case 'BR': return 'BRL'; case 'AR': return 'ARS'; case 'CL': return 'CLP'; case 'CO': return 'COP'; case 'MX': return 'MXN'; case 'PE': return 'PEN'; case 'UY': return 'UYU'; // Fall back to USD default: return 'USD'; }
};
/**
* Format a currency value * * @param {string} currency code. Leave undefined to get without symbol. * @param {number} amount * @param {string} language code * @return {string} formatted string e.g. '$3', '£5', '10 €' */
frb.formatCurrency = function(currency, amount, language) {
var locale, formatterOptions, formatter, fmAmount;
if (isNaN(amount) || amount === ) { // Not a number, it's probably the 'other' string or box // TODO: better way of doing this? fmAmount = amount; } else { if (window.Intl && typeof window.Intl === 'object') { // Use this for fancy number formatting - thousands separators etc locale = language + '-' + Geo.country; if ( amount % 1 !== 0 ) { // Not a whole number formatterOptions = { minimumFractionDigits: 2 }; } else { formatterOptions = {}; } formatter = new Intl.NumberFormat(locale, formatterOptions); } else { // Bad browser. Just do the basics: 2 decimal places if needed, or none formatter = {}; formatter.format = function(number) { if ( amount % 1 !== 0 ) { // Not a whole number return number.toFixed(2); } else { return number.toString(); } }; } fmAmount = formatter.format(amount); }
// No symbol needed if ( currency === undefined ) { return fmAmount; }
// Better dive into the formatting object if ( frb.currencyFormats[currency] === undefined ) { return currency + ' ' + fmAmount; } if ( frb.currencyFormats[currency] instanceof Object ) { // not a string if ( frb.currencyFormats[currency][language] !== undefined ) { return frb.currencyFormats[currency][language].replace('\t', fmAmount); } return frb.currencyFormats[currency]['default'].replace('\t', fmAmount); }
return frb.currencyFormats[currency].replace('\t', fmAmount);
};
/*
* Select the correct amount or array of amounts from object in "source" * * @param {Object} source - the amounts data object e.g. frb.amounts.options7, frb.amounts.averages * @param {string} currency - ISO code of currency * @param {string} country - ISO code of country (optional) * @return {array/number} - depending on source */
frb.pickAmounts = function(source, currency, country) {
if ( source[currency]['default'] ) { // we need to go deeper if ( source[currency][country] !== undefined ) { return source[currency][country]; } else { return source[currency]['default']; } } else { return source[currency]; }
};
/* Credit card types so we can show the correct logos */ frb.cardTypes = {
// Big 6 'US' : 'vmad', 'CA' : 'vma', 'GB' : 'vmaj', 'IE' : 'vmaj', 'AU' : 'vmaj', 'NZ' : 'vma', // Euro countries 'AT' : 'vmaj', 'BE' : 'vmaj', 'ES' : 'vmaj', 'FR' : 'CBvma', 'IT' : 'vmaj', 'LU' : 'vmaj', 'LV' : 'vma', 'NL' : 'vmaj', 'PT' : 'vmaj', 'SK' : 'vmaj', // Others 'DK' : 'vma', 'HU' : 'vma', 'IL' : 'vmad', // Adyen 'JP' : 'vmaj', 'MY' : 'vmaj', 'NO' : 'vma', 'PL' : 'vma', 'RO' : 'vma', 'SE' : 'vma', 'UA' : 'vma', // Adyen 'ZA' : 'vm'
};
/**
* Display the correct payment methods for current country * * Methods should be labeled with class 'frb-pm-xxxx' * TODO: clean this function up more * * @param {string} country */
frb.localizeMethods = function(country) {
// Hide recurring completely for some countries if ( frb.noRecurringCountries.indexOf(country) !== -1 ) { $('.frb-frequency, .recurring-details').hide(); }
// Remove any leftover WorldPay and Adyen $('.frb-pm-cc-wp').remove(); $('.frb-pm-cc-adyen').remove();
// Countries using Adyen for credit card if ( frb.ccAdyenCountries.indexOf( country ) !== -1 ) { $('.frb-pm-cc').addClass('no-monthly'); }
// Countries with no PayPal option var noPP = ['IN', 'RU', 'SG', 'AE', 'QA', 'OM', 'BD', 'BO', 'PA', 'PY', 'GT', 'JM', 'TT', 'DZ']; if ($.inArray(country, noPP) !== -1) { $('.frb-pm-pp').remove(); $('.frb-pm-pp-usd').remove(); }
// Countries with no PayPal for mobile only - https://phabricator.wikimedia.org/T173001 var noPPmobile = ['PH', 'ID', 'TH', 'KR', 'MY', 'VN']; var mobileRegex = /(_mob_|_ipd_|_m_)/; if ($.inArray(country, noPPmobile) !== -1) { if (mw.centralNotice.data.banner.search(mobileRegex) !== -1) { $('.frb-pm-pp').remove(); $('.frb-pm-pp-usd').remove(); } }
// Countries where PayPal must be in USD var ppUSD = ['BG', 'HR', 'LT', 'MK', 'RO', 'UA', 'SA', 'CN', 'ID', 'KR', 'KZ', 'MY', 'VN', 'AR', 'CL', 'DO', 'CO', 'NI', 'UY', 'ZA', 'BH', 'LB', 'VE', 'TR', 'IS', 'BA', 'MV', 'BB', 'BM', 'BZ', 'CR', 'CW', 'SX', 'HN', 'KN', 'DM', 'AG', 'LC', 'GD', 'FJ', 'TN', 'BJ', 'BF', 'CI', 'GW', 'ML', 'NE', 'SN', 'TG', 'BR', 'PE']; if ($.inArray(country, ppUSD) !== -1) { $('.frb-pm-pp').remove(); $('.frb-pm-pp-usd').show(); } else { $('.frb-pm-pp').show(); $('.frb-pm-pp-usd').remove(); }
// Show any extra local payment methods, or remove them if not needed var extrapaymentmethods = { 'amazon' : ['US'], 'bpay' : [], 'ideal' : ['NL'], 'bt' : ['BR', 'AR', 'CO', 'CL', 'IN'], // Bank Transfer (Astropay) 'cash' : ['BR', 'MX', 'AR', 'CO', 'UY'] // 'Cash' methods (Astropay) };
// Methods with different labels per country
var language = mw.config.get('wgUserLanguage'); var cashTranslation = 'Cash'; var btTranslation = 'Bank Transfer';
if (language === 'en') {
if (country === 'BR') { cashTranslation = 'Boletos'; } if (country === 'UY') { cashTranslation = 'RedPagos'; }
} else if (language === 'pt') {
if (country === 'BR') { btTranslation = 'Transferência Bancária'; cashTranslation = 'Boletos'; }
} else if (language === 'es') {
if (country === 'AR') { btTranslation = 'Transferência Bancária'; cashTranslation = 'Efectivo'; } if (country === 'CL') { btTranslation = 'WebPay'; } if (country === 'CO') { btTranslation = 'PSE Pagos'; cashTranslation = 'Efectivo'; } if (country === 'MX') { cashTranslation = 'Efectivo'; } if (country === 'UY') { cashTranslation = 'RedPagos'; }
}
$('.frb-pm-bt button, .frb-pm-bt label, button.frb-pm-bt' ).text( btTranslation ); $('.frb-pm-cash button, .frb-pm-cash label, button.frb-pm-cash').text( cashTranslation );
for (var method in extrapaymentmethods) { var $methodbutton = $('.frb-pm-' + method); if ( $.inArray(country, extrapaymentmethods[method]) !== -1 ) { // country is in the list $methodbutton.show(); } else { $methodbutton.remove(); } }
/* Add card types class to credit card button, so we can show correct logos */ if ( frb.cardTypes[country] ) { $('.frb-pm-cc').addClass('frb-cctypes-' + frb.cardTypes[country] ); }
};
/**
* Check scheduled payment method outages and hide buttons if needed * * Data at https://meta.wikimedia.org/wiki/MediaWiki:FR2013/Resources/PaymentOutages.js * Methods should be labeled with class 'frb-pm-xxxx' * * @param {string} country code */
frb.checkMethodOutages = function(country) {
// TODO - can we load this a better way? /* This file can be used to schedule hiding of individual payment methods from banners * e.g. if they have scheduled downtime. * * Valid methods are: * ideal, cc, pp, amazon, bpay, webmoney, cash, pp-usd * (most of the time it's 'ideal'...) * Can also limit outage to a specific country with country: "XX" (where XX is an ISO code) * * Note that in JavaScript dates the months (and only the months) start at 0. * Jan=0, Feb=1, Mar=2, Apr=3 etc. How hateful. * * Be sure to also update donatewiki if needed e.g. by commenting the method templates * found at https://donate.wikimedia.org/wiki/Template:2012FR/Form-section/Paymentmethods * */
var outages = [
{ start: new Date(Date.UTC(2016, 8, 18, 1)), end: new Date(Date.UTC(2016, 8, 18, 7)), method: "ideal" }
];
var now = new Date();
for (var i = outages.length - 1; i >= 0; i--) { if ( now > outages[i].start && now < outages[i].end ) { if (outages[i].country === undefined || outages[i].country == country) { $('.frb-pm-' + outages[i].method).hide(); } } }
};
/**
* Adjust the amount options and their labels * * Inputs should have id frb-amt-psX where X is the index number (starting from 1) * * @param {Object} source - object with amounts e.g. frb.amounts.options7 * @param {string} currency - currency code e.g. 'USD' * @param {string} country - country code e.g. 'FR' Some currencies can have different options per country. * @param {string} language - language code e.g. 'en' For symbol formatting * @param {boolean} useSymbols - use currency symbols on labels or not? (3 vs $3) */
frb.localizeAmountOptions = function(source, currency, country, language, useSymbols) {
var amountOptions = frb.pickAmounts(source, currency, country);
$('#frb-form input[name="amount"]').each(function(index) { var $input = $(this); var $label = $input.siblings('label');
var i = $input.attr('id').replace('frb-amt-ps', ); var amount = amountOptions[i-1]; // because IDs start from 1
if ( amount ) { $input.val( amount ); if ( useSymbols ) { $label.text( frb.formatCurrency( currency, amount, language) ); } else { $label.text( frb.formatCurrency( undefined, amount, language) ); } } });
};
/**
* Make an element into a link * * @param {string} selector CSS selector for elements to convert to a link * @param {string} baseUrl URL of link (function will add language parameter) */
frb.makeLink = function( selector, baseUrl ) {
var url = baseUrl + '&language=' + mw.config.get( 'wgUserLanguage' ); // TODO: pt-br and es-419 $( selector ).each( function() { var $link = $( '<a></a>' ); $link.html( $( this ).html() ); $link.attr( { href: url, target: '_blank' } ); $( this ).replaceWith( $link ); });
};
frb.noRecurringCountries = ['AR', 'CL', 'CO', 'MX', 'PE', 'UY', 'BR', 'IN']; frb.ccAdyenCountries = ['FR', 'IL', 'UA'];
/* These countries use potentially ambiguous $ sign. Use ISO code instead in text (but still $ for buttons) */ frb.textAmountIsoCountries = ['AR', 'CL', 'CO', 'MX'];
$(function() {
var language = mw.centralNotice.data.uselang; var country = mw.centralNotice.data.country; var currency = frb.getCurrency(country);
// Payment methods frb.localizeMethods(country); frb.checkMethodOutages(country);
// Basic replacements $('.frb-replace-currencysymbol').text( frb.formatCurrency( currency, , language ).replace(' ', ) ); $('.frb-replace-currencycode').text( currency );
// Country name var countryName; if ( frb.countryNames[language] ) { countryName = frb.countryNames[language][country] || frb.countryNames.en[country]; } else { countryName = frb.countryNames.en[country]; } $('.frb-replace-countryname').text( countryName );
// Day of week var now = new Date(); var dayNumber = now.getDay(); var capitalizeText = function( text ) { // Capitalize first letter, for use at start of sentence return text.charAt(0).toUpperCase() + text.slice(1); }
if ( $('.frb-replace-dayofweek, .frb-replace-dayofweek-capitalize').length > 0 ) { if ( frb.dayNames[language] ) { $('.frb-replace-dayofweek').text( frb.dayNames[language][dayNumber] ); $('.frb-replace-dayofweek-capitalize').text( capitalizeText( frb.dayNames[language][dayNumber] ) ); } else { console.log('Warning: banner should contain a day of the week, but no translations found.'); } }
if ( $('.frb-replace-dayofweek-this, .frb-replace-dayofweek-this-capitalize').length > 0 ) { if ( frb.dayNamesThis[language] ) { $('.frb-replace-dayofweek-this').text( frb.dayNamesThis[language][dayNumber] ); $('.frb-replace-dayofweek-this-capitalize').text( capitalizeText( frb.dayNamesThis[language][dayNumber] ) ); } else { console.log('Warning: banner should contain "this DAY", but no translations found.'); } }
// Capitalize $('.frb-capitalize').text(function( index, text ) { return text.charAt(0).toUpperCase() + text.slice(1); });
// Replace device with iPad if needed var ua = navigator.userAgent; if ( ua.match( /ipad/i ) ) { $('.frb-replace-device').text( frb.iPadTranslations[language] || frb.iPadTranslations.en ); }
// Replace %AVERAGE% with formatted "average" amount var average = frb.pickAmounts(frb.amounts.averages, currency, country); if ( frb.textAmountIsoCountries.indexOf(country) !== -1 ) { var avgString = average + ' ' + currency; } else { var avgString = frb.formatCurrency(currency, average, language).replace(/\.$/, ); // strip any period from end for use in running text } $('.frb').each(function(index){ var newHtml = $(this).html().replace(/%AVERAGE%/g, avgString ); $(this).html(newHtml); });
// Replace %MINIMUM% with formatted "if everyone" amount var ifEveryone = frb.pickAmounts(frb.amounts.ifEveryone, currency, country); if ( frb.textAmountIsoCountries.indexOf(country) !== -1 ) { var ifString = ifEveryone + ' ' + currency; } else { var ifString = frb.formatCurrency(currency, ifEveryone, language).replace(/\.$/, ); // strip any period from end for use in running text } $('.frb').each(function(index){ var newHtml = $(this).html().replace(/%MINIMUM%/g, ifString ); $(this).html(newHtml); });
/* Links (in smallprint) TODO: merge with frb.makeLink() */ $('.frb-localize-links a').each(function() { // Add parameters for LandingCheck var uri = new mw.Uri( $(this).attr('href') ); uri.extend({ country: country, language: language, uselang: language, utm_medium: 'sitenotice', utm_campaign: mw.centralNotice.data.campaign || 'test', utm_source: mw.centralNotice.data.banner }); $(this).attr('href', uri.toString()); $(this).attr('target', '_blank'); // Make links open in new tab });
// Add links frb.makeLink( '.frb-link-privacy', 'https://foundation.wikimedia.org/wiki/Special:LandingCheck?basic=true&landing_page=Donor_privacy_policy' ); frb.makeLink( '.frb-link-tax', 'https://donate.wikimedia.org/wiki/Special:LandingCheck?basic=true&landing_page=Tax_deductibility' ); frb.makeLink( '.frb-link-cancel', 'https://donate.wikimedia.org/wiki/Special:LandingCheck?basic=true&landing_page=Cancel_or_change_recurring_giving' );
// Legal text variants if (country === 'US') { $('.frb-legal-US').show(); $('.frb-legal-nonUS, .frb-legal-NL').hide(); } else if (country === 'NL') { $('.frb-legal-NL').show(); $('.frb-legal-US, .frb-legal-nonUS').hide(); } else { $('.frb-legal-nonUS').show(); $('.frb-legal-US, .frb-legal-NL').hide(); }
// Countries where Remind Me Later should be shown rmlCountries = ['US', 'CA', 'GB', 'IE', 'AU', 'NZ', 'SE', 'IT', 'NL', 'ES', 'JP', 'FR'];
if ( rmlCountries.indexOf(country) === -1 ) { $('.frb').addClass('frb-rml-disabled'); } else { $('.frb').addClass('frb-rml-enabled'); }
});
/* == end of MediaWiki:FundraisingBanners/LocalizeJS-2017.js == */ /** Provides alterImpressionData hook for CentralNotice
* This info will be sent back with Special:RecordImpression */
mediaWiki.centralNotice.bannerData.alterImpressionData = function( impressionData ) {
// Returning true from this function indicates the banner was shown if (mediaWiki.centralNotice.bannerData.hideReason) { impressionData.reason = mediaWiki.centralNotice.bannerData.hideReason; } if (mediaWiki.centralNotice.bannerData.cookieCount) { impressionData.banner_count = mediaWiki.centralNotice.bannerData.cookieCount; } return !mediaWiki.centralNotice.bannerData.hideResult;
};
frb.rml = {
post: function() { /* Create the iframe for the form and use it as the form's target */ var frameName = 'remindFrame'; var $form = $('#frb-rml-form'); if ( $("iframe[name=" + frameName + "]").length === 0 ) { var $iframe = $('<iframe style="display: none;" name="' + frameName + '"></iframe>'); $form.attr("target", $iframe.attr("name")); $form.after($iframe); } $form[0].submit(); },
getCurrentDate: function() { /* Get current date in correct format for Silverpop */ var today = new Date(); var dd = today.getDate(); var mm = today.getMonth()+1; // January is 0! var yyyy = today.getFullYear();
if( dd < 10 ) { dd = '0' + dd; } if( mm < 10 ) { mm = '0' + mm; }
return mm+'/'+dd+'/'+yyyy; },
init: function() { /* Prep the reminder form */
var form = document.getElementById('frb-rml-form'); if ( !form ) return;
form.rml_country.value = mw.centralNotice.data.country; form.rml_language.value = mw.centralNotice.data.uselang; form.rml_submitDate.value = frb.rml.getCurrentDate(); form.rml_segment.value = Math.floor((Math.random() * 100) + 1);
$('#frb-rml-submit').click(function() { if ( mw.util.validateEmail( form.Email.value ) ) { frb.rml.post(); $('.frb-rml-form, .frb-rml-link').hide(); $('.frb-rml-ty').show(); mw.centralNotice.internal.hide.setHideWithCloseButtonCookies(); // Hide future banners for 7 days return false; } else { $('#frb-rml-email').addClass('frb-haserror').focus(); $('.frb-error-invalidemail').show(); return false; } }); }
};
$(function() {
mw.loader.using(['mediawiki.util']).then(function() { frb.rml.init(); });
});
frb.initToolbar = function() {
/* --- Code for sticky toolbar --- */
$(window).scroll(function() { var articleLocation = $('.mw-body').offset().top; var headerContainerHeight = $('.header-container').height(); var donateFormLocation = $('.frb-form').offset().top;
// Handle .frb-header stickyness if ( $(window).scrollTop() >= headerContainerHeight ) { $('.frb-header').addClass('frb-header--sticky'); $('.frb-conversation').css('padding-top', $('.frb-header').outerHeight() ) } else { $('.frb-header').removeClass('frb-header--sticky'); $('.frb-conversation').css('padding-top', 0); }
// Handle .frb-header visibility if ( $(window).scrollTop() > donateFormLocation && $('.frb-header' ).css('visibility') == 'visible' ) { $('.frb-header').css('visibility', 'hidden'); } else if ( $(window).scrollTop() <= donateFormLocation && $('.frb-header' ).css('visibility') == 'hidden' ) { $('.frb-header').css('visibility', 'visible'); } });
};
$(function() {
var language = mw.centralNotice.data.uselang; var country = mw.centralNotice.data.country; var currency = frb.getCurrency(country); var minAmount = frb.amounts.minimums[ currency ]; var form = document.getElementById('frb-form'); var donateFormLocation;
frb.initAmountOptions(); frb.localizeAmountOptions(frb.amounts.options5, currency, country, language, true); frb.localizeErrors();
frb.storedOptions = {}; frb.extraData = {};
frb.setMethod = function(options, frequency) { if( frequency === 'no-monthly' ) { $('#frb-frequency-monthly').attr('disabled', true); } else { $('#frb-frequency-monthly').attr('disabled', false); } frb.storedOptions = options; // Default to credit card };
$('.frb-amounts').on('input change', function() { frb.validateAmount(); frb.updateFeeDisplay(); if ( frb.optinRequired ) { $('.frb-optin').show(); } $('.frb-cta, .frb-rml-wrapper').fadeOut(function() { $('.frb-step-2').fadeIn(); $('.frb-footer').fadeIn(); }); });
$('.frb-methods').on('change', function() { $('.frb-methods').removeClass('frb-haserror'); $('.frb-error-method').hide(); });
// Opt-in interaction $('.frb-optin .frb-radio').on('click', function() { $('.frb-optin').removeClass('frb-haserror'); $('.frb-error-optin').hide(); if ( $('#frb-optin-no').is(':checked') ) { $('.frb-optin-no-prompt').removeClass('is-positive'); if ( !$('.frb-optin-no-prompt').is(':visible') ) { $('.frb-optin .frb-message--typing').show().delay(frbMessageDelay).fadeOut(function() { $('.frb-optin-no-prompt').fadeIn(); }); } } else { $('.frb-optin-no-prompt').addClass('is-positive'); } });
/* Scroll to article option */ $('.js-close').on('click', function(e) { var articleLocation = $('.mw-body').offset().top; $('html, body').animate({ scrollTop: articleLocation }, 600); return false; });
/* Scroll to donate option */ $('.js-donate').on('click', function(e) { donateFormLocation = $('.frb-amounts').offset().top - $('.frb-header').outerHeight(); $('html, body').animate({ scrollTop: donateFormLocation }, 600); return false; });
/* Chat animation speed setting, mainly used for RML user interaction. */ var frbMessageDelay = 500; var $rmlButtonParent = $('.frb-options');
/* Remind me later (RML) form */ /* Reveal the RML form after clicking 'Donate Later' */ $('.js-rml').on('click', function(e) { var rmlLocation = $('.frb-rml-wrapper').offset().top;
e.stopPropagation(); $('.frb-footer').show();
if ( $(this).parent().parent().hasClass('frb-header') ) { $('html, body').animate({ scrollTop: rmlLocation }, 600); }
if ( $('.frb-rml-form').css('display') === 'none' ) { $('.frb-rml-wrapper .frb-message--typing') .show() .delay(frbMessageDelay) .fadeOut(function () { $('.frb-rml-form').fadeIn(function () { $('#frb-rml-email').focus(); }); }); }
return false; });
/* Hide banner and nag after RML submit. */ $('.frb-submit-rml').on('click', function(e){ if ( mw.util.validateEmail( $('#frb-rml-email').val() ) ) { $('.frb-inline-rml-form').hide(); $('.frb').delay(3000).fadeOut(frbMessageDelay, function() { $('.frb').hide(); }); mw.centralNotice.internal.hide.setHideWithCloseButtonCookies(); // Hide future banners for 7 days return false; } });
/* Other amount field */ $('.frb-button--other').on('click keypress', function(e) { if ( e.which === 13 || e.type === 'click' ) { document.getElementById('frb-input-other').checked = true; frb.updateFeeDisplay(); $('.frb-other-input').focus(); } });
/* Other amount field focus styles */ $('.frb-other-input') .focus(function() { $('.frb-button--other').addClass('frb-button--is-focused'); }) .blur(function() { $('.frb-button--other').removeClass('frb-button--is-focused'); });
frb.updateUpsellAsk = function(isOtherAmountStep) { var amount, feeAmount, upsellAmount, list = frb.amounts.monthlySuggest[currency];
// If user is on third step (write a different amount) then get monthly amount if not, the the first form amount if (isOtherAmountStep !== undefined) { amount = frb.getMonthlyAmount(); } else { amount = frb.getAmount(form); }
// If PTF is checked when we need to calculate the fee for that amount if ( $('#frb-ptf-checkbox').prop('checked') ) { amount = amount + frb.calculateFee(amount); }
for (var i = list.length - 1; i >= 0; i--) { if ( amount <= list[i][0] ) { upsellAmount = list[i][1]; } }
// If user is in the upsell (second step) then the form.otherMonthlyAmount.value will be updated with the upsellAmount calculated if (isOtherAmountStep === undefined) { form.otherMonthlyAmount.value = upsellAmount; }
// A formatted value will be returned var upsellAmountFormatted = frb.formatCurrency(currency, upsellAmount, language);
// The value of the amount will be updated only if the user is in the upsell (second step) if (isOtherAmountStep === undefined) { $('.frb-upsell-ask').text(upsellAmountFormatted); } };
// Pre-upsell submit button $('#frb-donate').on('click', function(e) { frb.updateUpsellAsk();
// Only do monthly convert if initial selection is one-time and payment method supports monthly and upsell value is not 0 (meaning skip). If method is CC, use the payments wiki monthly convert variant. if ( frb.getRecurring(document.getElementById('frb-form')) || !frb.shouldShowRecurring( frb.storedOptions, mw.centralNotice.data.country ) || form.otherMonthlyAmount.value == 0 || frb.storedOptions.method == 'paypal' ) { frb.submitForm(frb.storedOptions); } else if ( frb.validateForm(frb.storedOptions) ) { if ( frb.storedOptions.method == 'cc' ){ frb.setMethod({ method:'cc', variant:'monthlyConvert' }); frb.submitForm(frb.storedOptions); } else { $('.frb-step-upsell, .frb-back-step, .frb-mask').fadeIn(); } } else { frb.extraData.validateError = 1; } return false; });
// Go back to main step $('.frb-back-step, .frb-mask').on('click', function(e) { $('.frb-mask, .frb-step-upsell').fadeOut(); return false; });
// Donate monthly other amount $('.frb-monthly-diff-amt-link').on('click', function(e) { form.otherMonthlyAmount.value = ; validAmount = 0; frb.toggleMonthly(true); $('.frb-upsell, .frb-monthly-buttons').hide(); $('.frb-monthly-diff-amt, .frb-back').show(); return false; });
// Go back from diff amount $('.frb-back').on('click', function(e) { form.otherMonthlyAmount.value = ; frb.updateUpsellAsk(); validAmount = 1; frb.toggleMonthly(false); $('.frb-monthly-diff-amt, .frb-back').hide(); $('.frb-upsell, .frb-monthly-buttons').show(); return false; });
// Validate monthly other amount $('#frb-amt-monthly-other-input').on('input change', function(e) { if ( frb.validateMonthlyAmount() ) { validAmount = 1; frb.updateUpsellAsk(true); } else { validAmount = 0; } });
frb.getMonthlyAmount = function() { var amount = null;
// Check the "monthly other" amount box if (form.otherMonthlyAmount.value !== ) { var otherMonthlyAmount = form.otherMonthlyAmount.value; otherMonthlyAmount = otherMonthlyAmount.replace(/[,.](\d)$/, ':$10'); otherMonthlyAmount = otherMonthlyAmount.replace(/[,.](\d)(\d)$/, ':$1$2'); otherMonthlyAmount = otherMonthlyAmount.replace(/[$£€¥,.]/g, ); otherMonthlyAmount = otherMonthlyAmount.replace(/:/, '.'); amount = otherMonthlyAmount; }
amount = parseFloat(amount);
if ( isNaN(amount) ) { return 0; } else { var totalMonthlyAmountFormatted = frb.formatCurrency(currency, amount, language); $('.frb-monthly-total').text(totalMonthlyAmountFormatted);
return amount; } };
frb.validateMonthlyAmount = function() { var amount = frb.getMonthlyAmount(); var currency = frb.getCurrency( mw.centralNotice.data.country ); var minAmount = frb.amounts.minimums[ currency ];
if ( amount === null || isNaN(amount) || amount <= 0 || amount < minAmount ) { $('.frb-error-bigamount').hide(); $('.frb-error-smallamount').show(); return false; } else if ( amount > frb.maxUSD * minAmount ) { $('.frb-error-bigamount').show(); return false; } else { $('.frb-error-smallamount, .frb-error-bigamount').hide(); return true; } };
frb.submitMonthly = function() { frb.extraData.monthlyUpsell = 1; frb.extraData.originalAmt = frb.getAmount().toString();
frb.toggleMonthly(true); document.getElementById('frb-input-other').checked = true; document.getElementById('frb-ptf-checkbox').checked = false; form.otherAmount.value = form.otherMonthlyAmount.value; frb.submitForm(frb.storedOptions); }
// Submit form $('#frb-monthly-donate-yes').on('click', function(e) { frb.submitMonthly(); return false; });
$('#frb-monthly-donate-no').on('click', function(e) { frb.submitForm(frb.storedOptions); return false; });
$('#frb-donate-monthly-other').on('click', function (e) { if (frb.validateMonthlyAmount()) { frb.submitMonthly(); } return false; });
/* Hide banner outside of main namespace (and Main Page, for sites where that isn't in main namespace). */ if ( mw.config.get('wgNamespaceNumber') > 0 && !mw.config.get('wgIsMainPage') ) { mw.centralNotice.bannerData.hideResult = true; mw.centralNotice.bannerData.hideReason = 'namespace'; } /* Hide banner on desktop site, in case wrong device settings were chosen */ if ( mw.config.get('skin') !== 'minerva' ) { mw.centralNotice.bannerData.hideResult = true; mw.centralNotice.bannerData.hideReason = 'other'; }
if ( !mw.centralNotice.bannerData.hideResult ) { frb.show(); frb.initToolbar(); }
/* Social share tracking via hide banner cookie for enUS campaign experiment */ if ( $.cookie("centralnotice_hide_socialshare") != null && country === 'US' ) { frb.extraData.socialShare = 1; }
}); </script>