| 1 |
document.addEventListener('DOMContentLoaded', function () { |
| 2 |
// 0) Only run on the Shield settings page |
| 3 |
if (typeof nsShieldSettings !== 'object' || !nsShieldSettings.pageSlug) { |
| 4 |
return; |
| 5 |
} |
| 6 |
var pageRegex = new RegExp('[?&]page=' + nsShieldSettings.pageSlug + '(?:&|$)'); |
| 7 |
if (!pageRegex.test(window.location.search)) { |
| 8 |
return; |
| 9 |
} |
| 10 |
|
| 11 |
// 1) Hide any inline preload-modal (we handle it in modal_popup.php) |
| 12 |
var inlineModal = document.getElementById('ns-shield-preload-modal'); |
| 13 |
if (inlineModal) { |
| 14 |
inlineModal.style.display = 'none'; |
| 15 |
} |
| 16 |
|
| 17 |
// 2) Show/hide text fields based on toggles |
| 18 |
function handleTextFieldVisibility(toggleId, fieldId) { |
| 19 |
var toggle = document.getElementById(toggleId), |
| 20 |
field = document.getElementById(fieldId); |
| 21 |
if (!toggle || !field) return; |
| 22 |
field.style.display = toggle.checked ? 'block' : 'none'; |
| 23 |
toggle.addEventListener('change', function () { |
| 24 |
field.style.display = this.checked ? 'block' : 'none'; |
| 25 |
}); |
| 26 |
} |
| 27 |
handleTextFieldVisibility('ns_shield_login_url_enabled', 'ns_shield_login_url'); |
| 28 |
handleTextFieldVisibility('ns_shield_default_admin', 'admin_login_field'); |
| 29 |
|
| 30 |
// 3) Tooltips on sliders |
| 31 |
function handleTooltip(sliderSelector, tooltipSelector) { |
| 32 |
document.querySelectorAll(sliderSelector).forEach(function (slider) { |
| 33 |
var tooltip = |
| 34 |
slider.parentElement.querySelector(tooltipSelector) || |
| 35 |
(slider.nextElementSibling && |
| 36 |
slider.nextElementSibling.matches(tooltipSelector) && |
| 37 |
slider.nextElementSibling) || |
| 38 |
(slider.parentElement.parentElement && |
| 39 |
slider.parentElement.parentElement.querySelector(tooltipSelector)); |
| 40 |
if (!tooltip) return; |
| 41 |
['mouseenter','focus'].forEach(function (evt) { |
| 42 |
slider.addEventListener(evt, function () { tooltip.style.display = 'block'; }); |
| 43 |
}); |
| 44 |
['mouseleave','blur'].forEach(function (evt) { |
| 45 |
slider.addEventListener(evt, function () { tooltip.style.display = 'none'; }); |
| 46 |
}); |
| 47 |
}); |
| 48 |
} |
| 49 |
handleTooltip('.slider', '.tooltip'); |
| 50 |
|
| 51 |
// 4) CSP header light/hard toggles |
| 52 |
var lightToggle = document.getElementById('ns_shield_csp_header_light'), |
| 53 |
hardToggle = document.getElementById('ns_shield_csp_header_hard'); |
| 54 |
if (lightToggle && hardToggle) { |
| 55 |
function updateHardToggle() { |
| 56 |
hardToggle.checked = false; |
| 57 |
hardToggle.disabled = lightToggle.checked; |
| 58 |
} |
| 59 |
updateHardToggle(); |
| 60 |
lightToggle.addEventListener('change', updateHardToggle); |
| 61 |
var form = lightToggle.closest('form'); |
| 62 |
if (form) { |
| 63 |
form.addEventListener('submit', function () { |
| 64 |
if (lightToggle.checked) { |
| 65 |
hardToggle.checked = false; |
| 66 |
} |
| 67 |
hardToggle.disabled = false; |
| 68 |
}); |
| 69 |
} |
| 70 |
} |
| 71 |
|
| 72 |
// 5) Remember popup shown state on form submit |
| 73 |
var preloadCb = document.getElementById('ns-shield-preload-checkbox'); |
| 74 |
if (preloadCb) { |
| 75 |
var preloadForm = preloadCb.closest('form'); |
| 76 |
if (preloadForm) { |
| 77 |
preloadForm.addEventListener('submit', function () { |
| 78 |
var key = preloadCb.checked |
| 79 |
? 'nsShieldModalShownEnable' |
| 80 |
: 'nsShieldModalShownDisable'; |
| 81 |
localStorage.setItem(key, '1'); |
| 82 |
}); |
| 83 |
} |
| 84 |
} |
| 85 |
}); |
| 86 |
|