51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
|
|
/*
|
||
|
|
* RecoReco -- keep the "days before" field within one period of the selected frequency.
|
||
|
|
*
|
||
|
|
* The Recurring schedule modal is injected by AJAX, so we react to the frequency <select> both when
|
||
|
|
* it appears (MutationObserver) and when it changes (delegated event). Daily -> field disabled (0);
|
||
|
|
* weekly -> max 6; monthly -> max 27; yearly -> max 364. The server clamps too, so this is only the
|
||
|
|
* UI guard.
|
||
|
|
*/
|
||
|
|
(function () {
|
||
|
|
"use strict";
|
||
|
|
|
||
|
|
var CAPS = { daily: 0, weekly: 6, monthly_day: 27, monthly_dow: 27, yearly: 364 };
|
||
|
|
|
||
|
|
function apply(select) {
|
||
|
|
var input = document.querySelector('input[name="recoreco_days_before"]');
|
||
|
|
if (! input) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
var max = CAPS.hasOwnProperty(select.value) ? CAPS[select.value] : 27;
|
||
|
|
|
||
|
|
if (max === 0) {
|
||
|
|
input.value = 0;
|
||
|
|
input.setAttribute("max", "0");
|
||
|
|
input.disabled = true;
|
||
|
|
} else {
|
||
|
|
input.disabled = false;
|
||
|
|
input.setAttribute("max", String(max));
|
||
|
|
if (parseInt(input.value, 10) > max) {
|
||
|
|
input.value = max;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
document.addEventListener("change", function (e) {
|
||
|
|
if (e.target && e.target.name === "recoreco_frequency") {
|
||
|
|
apply(e.target);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
if (window.MutationObserver) {
|
||
|
|
new MutationObserver(function () {
|
||
|
|
var select = document.querySelector('select[name="recoreco_frequency"]:not([data-recoreco-init])');
|
||
|
|
if (select) {
|
||
|
|
select.setAttribute("data-recoreco-init", "1");
|
||
|
|
apply(select);
|
||
|
|
}
|
||
|
|
}).observe(document.body, { childList: true, subtree: true });
|
||
|
|
}
|
||
|
|
})();
|