Files
@ 19e744788b7f
Branch filter:
Location: website/www/conservancy/static/js/supporter-page.js - annotation
19e744788b7f
3.3 KiB
application/javascript
supporter: Only render the Annual form for upgraders.
This lets us do more with HTML and less with JavaScript, which is always
nice.
This lets us do more with HTML and less with JavaScript, which is always
nice.
01eb8c80c8c1 ec26bfc846e3 ec26bfc846e3 342590123ff5 01eb8c80c8c1 01eb8c80c8c1 01eb8c80c8c1 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 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 6392ae3a4313 674261e0f0c2 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 9bfb5e10dec2 b90413809f26 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 6392ae3a4313 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 flipClass = function(elem, byeClass, hiClass) {
var classList = elem.classList;
classList.remove(byeClass);
classList.add(hiClass);
}
var amountIsValid = 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. */
return (String(value) === amountInput.value) && (value >= min);
}
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:
$('.form-error').addClass('hidden');
var $formCorrectionNeeded = $('#form-correction-needed');
$('form.supporter-form input[type=number]').on('focusout', function(event) {
var amountInput = event.target;
var wasValid = !amountInput.classList.contains('invalid');
var isValid = amountIsValid(amountInput);
if (!wasValid && isValid) {
flipClass(amountInput, 'invalid', 'valid');
$('.form-error', amountInput.parentNode).addClass('hidden');
} else if (wasValid && !isValid) {
flipClass(amountInput, 'valid', 'invalid');
$('.form-error', amountInput.parentNode).removeClass('hidden');
}
});
$('form.supporter-form').on('submit', function(event) {
if (amountIsValid($('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();
}
});
|