Files
@ 32def0ec736a
Branch filter:
Location: website/www/conservancy/static/js/supporter-page.js - annotation
32def0ec736a
4.3 KiB
application/javascript
Copyleft Compliance: minor word updates/HTML fixes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | 01eb8c80c8c1 ec26bfc846e3 ec26bfc846e3 342590123ff5 01eb8c80c8c1 01eb8c80c8c1 01eb8c80c8c1 cb5b5ec23fc2 cb5b5ec23fc2 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 6392ae3a4313 6392ae3a4313 ab29d4563909 19e744788b7f ab29d4563909 ab29d4563909 ab29d4563909 ab29d4563909 ab29d4563909 492de3eab3de 492de3eab3de 492de3eab3de 492de3eab3de 492de3eab3de ab29d4563909 ab29d4563909 ab29d4563909 ab29d4563909 ab29d4563909 ab29d4563909 01eb8c80c8c1 674261e0f0c2 674261e0f0c2 6392ae3a4313 6392ae3a4313 ba0df40639d9 674261e0f0c2 cb5b5ec23fc2 cb5b5ec23fc2 72027870920f cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 ba0df40639d9 cb5b5ec23fc2 6392ae3a4313 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 cb5b5ec23fc2 86e780340a2b b90413809f26 86ef51db5dff 86ef51db5dff 86ef51db5dff 86ef51db5dff 78c474caaccc 78c474caaccc 78c474caaccc 78c474caaccc 78c474caaccc 6392ae3a4313 9d30d7431a1e 86ef51db5dff 86ef51db5dff 86ef51db5dff 86ef51db5dff 9d30d7431a1e 86ef51db5dff 9d30d7431a1e 19e744788b7f 9d30d7431a1e 9d30d7431a1e 44301d386ba0 | /* Copyright (C) 2012-2013 Denver Gingerich,
** Copyright (C) 2013-2014 Bradley M. Kuhn,
** Copyright (C) 2016 Brett Smith.
** License: GPLv3-or-later
** Find a copy of GPL at https://sfconservancy.org/GPLv3
*/
var NEW_AMOUNT_EVENT = 'conservancy:newamount';
var flipClass = function(elem, byeClass, hiClass) {
var classList = elem.classList;
classList.remove(byeClass);
classList.add(hiClass);
}
var buildAmountData = function(amountInput) {
var amountData = {
minAmount: parseFloat(amountInput.min),
newAmount: parseFloat(amountInput.value),
}
if (amountInput.dataset.oldAmount !== undefined) {
amountData.oldAmount = parseFloat(amountInput.dataset.oldAmount);
}
return amountData;
}
var supportTypeSelector = function(supportTypeHash) {
return $(supportTypeHash + "Selector");
};
var $window = $(window);
$window.load(function() {
/* We've sometimes published links that say #renew instead of #renewal.
Rewrite that to work as intended. */
if (window.location.hash === "#renew") {
window.location.hash = "#renewal";
}
var $selectorLink = supportTypeSelector(window.location.hash);
if ($selectorLink.length > 0) {
$window.scrollTop($selectorLink.offset().top);
}
});
$(document).ready(function() {
// Forms start in "invalid" form, with the errors shown, so that
// non-Javascript users see the errors by default and know what they must
// enter. Now we hide those for JavaScript users:
var $formCorrectionNeeded = $('#form-correction-needed');
$formCorrectionNeeded.addClass('hidden');
$('form.supporter-form').each(function(index, form) {
var $amountInput = $('input[type=number]', form).first();
var $amountError = $('.form-error', $amountInput.parents('.supporter-form-input'));
$amountError.on(NEW_AMOUNT_EVENT, function(event, amountData) {
var isValid = amountData.newAmount >= amountData.minAmount;
if (amountData.oldAmount === undefined) {
if (isValid) {
$amountError.addClass('hidden');
} else {
flipClass($amountInput[0], 'valid', 'invalid');
$amountError.removeClass('hidden');
}
} else if (isValid) {
flipClass($amountInput[0], 'invalid', 'valid');
$amountError.fadeOut();
} else if (amountData.oldAmount >= amountData.minAmount) {
flipClass($amountInput[0], 'valid', 'invalid');
$amountError.fadeIn();
}
});
$amountInput.on('input', function(event) {
event.target.classList.remove('invalid');
}).on('focusout', function(event) {
var amountInput = event.target;
var amountData = buildAmountData(amountInput);
$amountError.trigger(NEW_AMOUNT_EVENT, amountData);
amountInput.dataset.oldAmount = amountData.newAmount;
}).trigger('focusout');
$(form).on('submit', function(event) {
var amountData = buildAmountData($amountInput[0]);
if (amountData.newAmount >= amountData.minAmount) {
$formCorrectionNeeded.addClass('hidden');
} else {
$formCorrectionNeeded.removeClass('hidden')
.css("font-weight", "bold").css("font-size", "150%");
event.preventDefault();
}
});
});
var selectSupportType = function(event) {
var $selectedLink = $(event.target);
$(".supporter-type-selector a").removeClass("supporter-type-selector-selected");
$selectedLink.addClass("supporter-type-selector-selected");
$(".supporter-type-selection").hide();
var hashIndex = event.target.href.lastIndexOf('#');
if (hashIndex > -1) {
$(event.target.href.slice(hashIndex)).show();
}
$formCorrectionNeeded.addClass('hidden');
return false;
};
$(".supporter-type-selector a").bind("click", selectSupportType);
var selectSupportTypeFromHash = function() {
return supportTypeSelector(window.location.hash).click();
};
$window.bind("hashchange", selectSupportTypeFromHash);
if (selectSupportTypeFromHash().length === 0) {
supportTypeSelector("#annual").click();
}
});
|