Files
@ 27b469c2dc59
Branch filter:
Location: website/www/conservancy/static/js/supporter-page.js
27b469c2dc59
3.8 KiB
application/javascript
sponsors: Unlist too-old sponsors.
These companies have not given in the past year.
These companies have not given in the past year.
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 | /* 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 flipClass = function(elem, byeClass, hiClass) {
var classList = elem.classList;
classList.remove(byeClass);
classList.add(hiClass);
}
var checkAmountValid = function(amountInput) {
var value = parseFloat(amountInput.value);
var min = parseFloat(amountInput.min);
/* Is the value is a valid float, it will stringify back to itself. */
var isValid = (String(value) === amountInput.value) && (value >= min);
amountInput.dataset.valid = isValid ? '1' : '0';
return isValid;
}
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 input[type=number]').on('input', function(event) {
event.target.classList.remove('invalid');
}).on('focusout', function(event) {
var amountInput = event.target;
var wasValid = amountInput.dataset.valid === '1';
var isValid = checkAmountValid(amountInput);
if (isValid) {
flipClass(amountInput, 'invalid', 'valid');
if (!wasValid) {
$('.form-error', amountInput.parentNode).fadeOut();
}
} else if (wasValid) {
flipClass(amountInput, 'valid', 'invalid');
$('.form-error', amountInput.parentNode).fadeIn();
}
}).each(function(index, elem) {
if (checkAmountValid(elem)) {
$('.form-error', elem.parentNode).addClass('hidden');
} else {
elem.classList.add('invalid');
$('.form-error', elem.parentNode).removeClass('hidden');
}
});
$('form.supporter-form').on('submit', function(event) {
if (checkAmountValid($('input[name=amount]', event.target)[0])) {
$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();
}
});
|