mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 11:16:47 +00:00
A step towards a Content-Security-Policy without inline scripts. The scripts every page or many pages share now load from static files: the error focus of base.html, the please-wait dialog, the sign-in forms' password toggle and busy button, the jobs pages' reload while a job runs, and the start of the job panel and of the VM list's state poll, whose values come as json_script data. Cancel links go back through a data-history-back attribute instead of a javascript: URL. The IE8 html5shiv/respond.js block, X-UA-Compatible and shrink-to-fit are gone: no supported browser reads them.
20 lines
901 B
JavaScript
20 lines
901 B
JavaScript
// After a refused submission, start at the error. The places an error
|
|
// can be, most specific first: a refused field, its form's summary, an
|
|
// open dialog's copy of the messages (the page's are behind it), the
|
|
// page's messages. A page that sets itself up first has
|
|
// data-error-focus="manual" and calls this when it is ready.
|
|
const ERROR_PLACES = [".is-invalid", ".form-errors", ".modal.show .modal-messages .alert-danger",
|
|
"#messages .alert-danger"];
|
|
|
|
function focusFirstError() {
|
|
for (const selector of ERROR_PLACES) {
|
|
const target = [...document.querySelectorAll(selector)].find(e => e.offsetParent !== null);
|
|
if (target) {
|
|
if (!target.matches("input, select, textarea")) target.tabIndex = -1;
|
|
target.focus();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
window.focusFirstError = focusFirstError;
|
|
if (document.body.dataset.errorFocus !== "manual") focusFirstError();
|