Remove remaining jQuery
This avoids every page on the site parsing 250KB of JavaScript. supporter-page.js isn't the most elegant code, but at least it's a little more modular now and no longer user jQuery.
This commit is contained in:
parent
10dfdb617b
commit
44c0a9db32
4 changed files with 50 additions and 9455 deletions
6
TODO.md
6
TODO.md
|
@ -1,12 +1,9 @@
|
|||
# To-do
|
||||
|
||||
* ensure appropriate caching headers are used
|
||||
* remove jQuery
|
||||
* consider removing `events` and `worldmap` modules
|
||||
* ask Denver about why so many license files
|
||||
* serve a 400 in Apache for a hostname we don't explicitly support
|
||||
* use `<detail>` elements for supporter page hidden sections, rather than
|
||||
complex jQuery - or consider Alpine.js
|
||||
* replace `internalNavigate` with inline flexbox layout
|
||||
* add tests for main pages returning 200
|
||||
* move `sponsors.py` and `sponsors.html` into `supporters` app
|
||||
|
@ -14,6 +11,9 @@
|
|||
|
||||
# Done
|
||||
|
||||
* use `<detail>` elements for supporter page hidden sections, rather than
|
||||
complex jQuery
|
||||
* remove jQuery
|
||||
* split the template/content files out from `conservancy/static` into their own
|
||||
`content` directory (avoid mixing static and non-static content)
|
||||
* remove `ForceCanonicalHostnameMiddleware` by ensuring canonical redirect and
|
||||
|
|
9404
conservancy/static/js/jquery-1.7.2.js
vendored
9404
conservancy/static/js/jquery-1.7.2.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -7,8 +7,6 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
var NEW_AMOUNT_EVENT = 'conservancy:newamount';
|
||||
|
||||
var flipClass = function(elem, byeClass, hiClass) {
|
||||
var classList = elem.classList;
|
||||
classList.remove(byeClass);
|
||||
|
@ -26,10 +24,6 @@ var buildAmountData = function(amountInput) {
|
|||
return amountData;
|
||||
}
|
||||
|
||||
var supportTypeSelector = function(supportTypeHash) {
|
||||
return $(supportTypeHash + "Selector");
|
||||
};
|
||||
|
||||
/* We've sometimes published links that say #renew instead of #renewal.
|
||||
Rewrite that to work as intended. */
|
||||
if (window.location.hash === "#renew") {
|
||||
|
@ -38,6 +32,24 @@ if (window.location.hash === "#renew") {
|
|||
|
||||
var formCorrectionNeeded = qs('#form-correction-needed');
|
||||
|
||||
function new_amount(amountData, amountInput, amountError) {
|
||||
var isValid = amountData.newAmount >= amountData.minAmount;
|
||||
if (amountData.oldAmount === undefined) {
|
||||
if (isValid) {
|
||||
hide(amountError);
|
||||
} else {
|
||||
flipClass(amountInput, 'valid', 'invalid');
|
||||
show(amountError);
|
||||
}
|
||||
} else if (isValid) {
|
||||
flipClass(amountInput, 'invalid', 'valid');
|
||||
hide(amountError);
|
||||
} else if (amountData.oldAmount >= amountData.minAmount) {
|
||||
flipClass(amountInput, 'valid', 'invalid');
|
||||
show(amountError);
|
||||
}
|
||||
}
|
||||
|
||||
function init_sustainer_form_validation () {
|
||||
// Forms start in "invalid" form, with the errors shown, so that
|
||||
// non-Javascript users see the errors by default and know what they must
|
||||
|
@ -45,39 +57,23 @@ function init_sustainer_form_validation () {
|
|||
formCorrectionNeeded.classList.add('hidden');
|
||||
|
||||
qsa('form.supporter-form').forEach(function(form) {
|
||||
var $amountInput = $('input[type=number]', form).first();
|
||||
var amountInput = qs('input[type=number]', form);
|
||||
var amountError = qs('.supporter-form-input .form-error', form);
|
||||
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.classList.add('hidden');
|
||||
} else {
|
||||
flipClass($amountInput[0], 'valid', 'invalid');
|
||||
amountError.classList.remove('hidden');
|
||||
}
|
||||
} else if (isValid) {
|
||||
flipClass($amountInput[0], 'invalid', 'valid');
|
||||
hide(amountError);
|
||||
} else if (amountData.oldAmount >= amountData.minAmount) {
|
||||
flipClass($amountInput[0], 'valid', 'invalid');
|
||||
show(amountError);
|
||||
}
|
||||
});
|
||||
|
||||
$amountInput.on('input', function(event) {
|
||||
event.target.classList.remove('invalid');
|
||||
}).on('focusout', function(event) {
|
||||
var amountInput = event.target;
|
||||
function amount_change_handler () {
|
||||
var amountData = buildAmountData(amountInput);
|
||||
$amountError.trigger(NEW_AMOUNT_EVENT, amountData);
|
||||
new_amount(amountData, amountInput, amountError);
|
||||
amountInput.dataset.oldAmount = amountData.newAmount;
|
||||
}).trigger('focusout');
|
||||
}
|
||||
|
||||
amountInput.addEventListener('input', function() {
|
||||
amountInput.classList.remove('invalid');
|
||||
})
|
||||
amountInput.addEventListener('focusout', amount_change_handler);
|
||||
amount_change_handler();
|
||||
|
||||
form.addEventListener('submit', function(event) {
|
||||
var amountData = buildAmountData($amountInput[0]);
|
||||
var amountData = buildAmountData(amountInput);
|
||||
if (amountData.newAmount >= amountData.minAmount) {
|
||||
formCorrectionNeeded.classList.add('hidden');
|
||||
} else {
|
||||
|
@ -90,24 +86,28 @@ function init_sustainer_form_validation () {
|
|||
}
|
||||
|
||||
function init_sustainer_type_switching () {
|
||||
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();
|
||||
$(event.target.hash).show();
|
||||
function selectSupportType(selectedLink) {
|
||||
qsa(".supporter-type-selector a").forEach(function(el) {
|
||||
el.classList.remove("supporter-type-selector-selected");
|
||||
});
|
||||
selectedLink.classList.add("supporter-type-selector-selected");
|
||||
qsa(".supporter-type-selection").forEach(function(el) { hide(el); });
|
||||
let hash = window.location.hash !== '' ? window.location.hash : '#annual';
|
||||
show(qs(hash));
|
||||
formCorrectionNeeded.classList.add('hidden');
|
||||
return false;
|
||||
};
|
||||
$(".supporter-type-selector a").bind("click", selectSupportType);
|
||||
qsa(".supporter-type-selector a").forEach(function(el) {
|
||||
el.addEventListener("click", () => selectSupportType(el));
|
||||
});
|
||||
|
||||
var selectSupportTypeFromHash = function() {
|
||||
return supportTypeSelector(window.location.hash).click();
|
||||
};
|
||||
$(window).bind("hashchange", selectSupportTypeFromHash);
|
||||
if (selectSupportTypeFromHash().length === 0) {
|
||||
supportTypeSelector("#annual").click();
|
||||
}
|
||||
let el = qs(window.location.hash !== '' ? window.location.hash + 'Selector' : '#annualSelector');
|
||||
selectSupportType(el);
|
||||
|
||||
window.addEventListener("hashchange", function () {
|
||||
let el = qs(window.location.hash !== '' ? window.location.hash + 'Selector' : '#annualSelector');
|
||||
selectSupportType(el);
|
||||
});
|
||||
};
|
||||
|
||||
function init_expanders () {
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
<link rel="stylesheet" type="text/css" href="{% static 'css/tachyons.css' %}"/>
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="{% static 'css/conservancy.css' %}" />
|
||||
<link rel="stylesheet" type="text/css" media="(min-width: 67em)" href="{% static 'css/conservancy-bigscreen.css' %}" />
|
||||
<script type="text/javascript" src="{% static 'js/jquery-1.7.2.js' %}" defer></script>
|
||||
<script type="text/javascript" src="{% static 'js/conservancy.js' %}" defer></script>
|
||||
{% block head %}{% endblock %}
|
||||
</head>
|
||||
|
|
Loading…
Reference in a new issue