diff --git a/media/com_jedchecker/js/script.js b/media/com_jedchecker/js/script.js
index f5ce430..8f7b4a9 100644
--- a/media/com_jedchecker/js/script.js
+++ b/media/com_jedchecker/js/script.js
@@ -1,92 +1,98 @@
-function add_validation() {
- // Fetch all the forms we want to apply custom Bootstrap validation styles to
- var forms = document.getElementsByClassName('needs-validation');
- // Loop over them and prevent submission
- var validation = Array.prototype.filter.call(forms, function(form) {
- form.addEventListener('submit', function(event) {
- if (form.checkValidity() === false) {
- event.preventDefault();
- event.stopPropagation();
- }
- form.classList.add('was-validated');
- }, false);
- });
-}
-
-function check(url, rule) {
- jQuery.ajax({
- url: url + 'index.php?option=com_jedchecker&task=police.check&format=raw&rule='+rule,
- method: 'GET',
- success: function(result){
- var sidebar = jQuery('#jed-' + rule);
- var target = jQuery('#police-check-result-' + rule);
-
- target.html(result);
-
- var error = target.find('.alert-danger').length;
- sidebar.find('.badge.bg-danger').text(error || '');
-
- var warning = target.find('.alert-warning').length;
- sidebar.find('.badge.bg-warning').text(warning || '');
-
- var compat = target.find('.alert-secondary').length;
- sidebar.find('.badge.bg-secondary').text(compat || '');
-
- var info = target.find('.alert-info').length;
- sidebar.find('.badge.bg-info').text(info || '');
-
- var success = target.find('.alert-success').length;
- sidebar.find('.badge.bg-success').toggleClass('hidden', !success);
-
- sidebar.find('.spinner-border').addClass('hidden');
- },
- error: function(xhr, status){
- var sidebar = jQuery('#jed-' + rule);
- var target = jQuery('#police-check-result-' + rule);
-
- target.html('' + status + ': ' + xhr.status + ' ' + xhr.statusText + '');
-
- sidebar.find('.badge.bg-danger').text('?');
- sidebar.find('.badge.bg-warning,.badge.bg-secondary,.badge.bg-info').text('');
- sidebar.find('.badge.bg-success').addClass('hidden');
-
- sidebar.find('.spinner-border').addClass('hidden');
- }
- });
-}
-
-var jed_collapse_init = false;
-Joomla.submitbutton = function (task) {
- if (task == 'check') {
- jQuery(".jedchecker-results").removeClass("hidden");
- jQuery('.jedchecker-results .badge:not(.bg-success)').html('');
- jQuery('.jedchecker-results .badge.bg-success').addClass('hidden');
- jQuery('.jedchecker-results .spinner-border').removeClass('hidden');
- jQuery('.police-check-result').html('
');
-
- if (!jed_collapse_init) {
- jQuery(".card-header[data-bs-toggle]")
- .addClass("accordion-button collapsed")
- .each(function () {
- var $this = jQuery(this);
- $this.attr('href', $this.attr('data-href'));
- });
-
- new bootstrap.Collapse(document.getElementById('jedchecker-welcome'));
- new bootstrap.Collapse(document.getElementById('jedchecker-contributors'));
-
- jed_collapse_init = true;
- }
-
- for (index = 0; index < jed_options["rules"].length; ++index) {
- check(jed_options["url"], jed_options["rules"][index]);
- }
-
- } else {
- Joomla.submitform(task);
+(() => {
+ const jsonDataElement = document.getElementById('jed-rules-json');
+ if (!jsonDataElement) {
+ thrown new Error('Initialization data is missing');
+ }
+ let jedOptions;
+ try {
+ jedOptions = JSON.parse(jsonDataElement.innerHTML);
+ } catch (e) {
+ thrown new Error('Initialization data is missing');
+ }
+
+ if (!jedOptions) thrown new Error('Initialization data is missing');
+
+ const add_validation = () => {
+ // Loop over them and prevent submission
+ [...document.querySelectorAll('.needs-validation')].forEach((form) => {
+ form.addEventListener('submit', (event) => {
+ const form = event.target;
+ if (form.checkValidity() === false) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ form.classList.add('was-validated');
+ }, false);
+ });
+ }
+
+ function check(url, rule) {
+ fetch(`${url}index.php?option=com_jedchecker&task=police.check&format=raw&rule=${rule}`)
+ .then(response => response.text())
+ .then(data => {
+ const sidebar = document.querySelector(`#jed-${rule}`);
+ const target = document.querySelector(`#police-check-result-${rule}`);
+
+ target.innerHTML = data;
+
+ const error = [...target.querySelectorAll('.alert-danger')].length;
+ [...sidebar.querySelectorAll('.badge.bg-danger')].map(el => el.textContent = error || '');
+
+ const warning = [...target.querySelectorAll('.alert-warning')].length;
+ [...sidebar.querySelectorAll('.badge.bg-warning')].map(el => el.textContent = warning || '');
+
+ const compat = [...target.querySelectorAll('.alert-secondary')].length;
+ [...sidebar.querySelectorAll('.badge.bg-secondary')].map(el => el.textContent = compat || '');
+
+ var info = [...target.querySelectorAll('.alert-info')].length;
+ [...sidebar.querySelectorAll('.badge.bg-info')].map(el => el.textContent = info || '');
+
+ var success = [...target.querySelectorAll('.alert-success')].length;
+ [...sidebar.querySelectorAll('.badge.bg-info')].map(el => el.classList.toggle('hidden', !success));
+
+ [...sidebar.querySelectorAll('.badge.bg-border')].map(el => el.classList.add('hidden'));
+ })
+ .catch(error => {
+ console.log(error);
+ const sidebar = document.querySelector(`#jed-${rule}`);
+ const target = document.querySelector(`#police-check-result-${rule}`);
+
+ target.innerHTML = `${error.status}: ${xhr.status} ${xhr.statusText}`;
+
+ [...sidebar.querySelectorAll('.badge.bg-danger')].map(el => el.textContent = '?');
+ [...sidebar.querySelectorAll('.badge.bg-danger, .badge.bg-secondary, .badge.bg-info')].map(el => el.textContent = '');
+ [...sidebar.querySelectorAll('.badge.bg-success, .spinner-border')].map(el => el.addClass('hidden'));
+ });
+ }
+
+ let jed_collapse_init = false;
+ Joomla.submitbutton = function (task) {
+ if (task == 'check') {
+ [...document.querySelectorAll(".jedchecker-results")].map((el) => el.removeClass("hidden"));
+ [...document.querySelectorAll('.jedchecker-results .badge:not(.bg-success)')].map((el) => el.innerHTML = '');
+ [...document.querySelectorAll('.jedchecker-results .badge.bg-success')].map((el) => el.addClass('hidden'));
+ [...document.querySelectorAll('.jedchecker-results .spinner-border')].map((el) => el.removeClass('hidden'));
+ [...document.querySelectorAll('.police-check-result')].map((el) => el.innerHTML = '
');
+
+ if (!jed_collapse_init) {
+ [...document.querySelectorAll(".card-header[data-bs-toggle]")].forEach((el) => {
+ el.addClass("accordion-button collapsed");
+ el.setAttribute('href', el.dataset.href);
+ });
+
+ new bootstrap.Collapse(document.getElementById('jedchecker-welcome'));
+ new bootstrap.Collapse(document.getElementById('jedchecker-contributors'));
+
+ jed_collapse_init = true;
+ }
+
+ jedOptions["rules"].forEach((rule) => {
+ check(jedOptions["url"], rule);
+ });
+ } else {
+ Joomla.submitform(task);
+ }
}
-}
-jQuery(document).ready(function() {
new bootstrap.Tooltip(document.getElementById('jedchecker'), {container: 'body', selector: '[data-bs-toggle=tooltip]'});
-});
+})();