diff --git a/bin/TemplateAll.adc b/bin/TemplateAll.adc index 086bec2..a7efb82 100755 Binary files a/bin/TemplateAll.adc and b/bin/TemplateAll.adc differ diff --git a/changelog.md b/changelog.md index dc3830d..f914b39 100755 --- a/changelog.md +++ b/changelog.md @@ -54,3 +54,5 @@ Version v4.2.14 - Datetime fixed v4.2.15 - JQuery removed. v4.2.16 - Fixed exclusives. + v4.2.17 - included askiascript variables for min/max date + v4.2.18 - fixed onclock event listener firing multiple times per askia-response element on the screen diff --git a/config.xml b/config.xml index 259e804..08ec982 100755 --- a/config.xml +++ b/config.xml @@ -7,7 +7,7 @@ TemplateAll feba6dd4-1a09-4470-a854-e89c59821d8e - 4.2.16 + 4.2.18 2023-12-19 Askia SAS @@ -285,7 +285,24 @@ Format: MM/DD/YYYY]]> + + + + + + + + + + + + + + + diff --git a/example/TemplateAll.qex b/example/TemplateAll.qex index b35f6da..9d2b2bb 100755 Binary files a/example/TemplateAll.qex and b/example/TemplateAll.qex differ diff --git a/resources/dynamic/Initializer.js b/resources/dynamic/Initializer.js index 9703d2c..a42a6b4 100755 --- a/resources/dynamic/Initializer.js +++ b/resources/dynamic/Initializer.js @@ -18,8 +18,11 @@ dim numberOfMonths dim mainCalendar dim minDate dim maxDate +dim useScript dim minBound dim maxBound +dim minScript +dim maxScript %} (function () { var adcdefault = new AdcDefault({ @@ -65,6 +68,7 @@ dim maxBound showMonthAfterYear = CurrentADC.PropValue("showMonthAfterYear") numberOfMonths = CurrentADC.PropValue("numberOfMonths") mainCalendar = "'"+CurrentADC.PropValue("mainCalendar")+"'" + useScript = CurrentADC.PropValue("useScript").ToNumber() minDate = column.MinDate.Format("yyyy-MM-dd") maxDate = column.MaxDate.Format("yyyy-MM-dd") minBound = column.MinDate.Format("yyyy").ToNumber() @@ -77,6 +81,8 @@ dim maxBound if CvDkNa(maxBound) < 1 Then maxBound = 2100 EndIf + + inputName = column.InputName() inputId = (inputName + "_" + 1).Replace("D", "askia-input-dateO") %} diff --git a/resources/static/adc_default.js b/resources/static/adc_default.js index e73ab9e..1cc250e 100755 --- a/resources/static/adc_default.js +++ b/resources/static/adc_default.js @@ -288,23 +288,52 @@ return result; } - /** - * Manually check the input(radio/checkbox) on response-label click. - */ - var askResponses = document.getElementsByClassName('askia-response'); - for (var i = 0; i < askResponses.length; i++) { - var response = askResponses[i]; - response.addEventListener('click', function(event) { + /** + * Manually check the input(radio/checkbox) on response-label click. + * + * This version is guarded so it only installs once, even if adc_default.js + * is initialized multiple times. + */ + if (!window.__askiaResponseClickHandlerInstalled) { + window.__askiaResponseClickHandlerInstalled = true; + + document.addEventListener('click', function(event) { var clickedElement = event.target || event.srcElement; - if (clickedElement.tagName !== "INPUT") { - var inputId = this.querySelector(".askia-response-label").dataset.for; - var inputElement = document.getElementById(inputId); - inputElement.click(); - if (inputElement.type== "checkbox") { - event.preventDefault(); - } + + // Let real input clicks behave normally. + if (!clickedElement || clickedElement.tagName === "INPUT") { + return; } - }, { capture: true }); + + // Find the response row that was clicked. + var response = clickedElement.closest + ? clickedElement.closest('.askia-response') + : null; + + if (!response) { + return; + } + + var label = response.querySelector('.askia-response-label'); + + if (!label || !label.dataset || !label.dataset.for) { + return; + } + + var inputElement = document.getElementById(label.dataset.for); + + if (!inputElement || inputElement.disabled) { + return; + } + + // Stop the original row/label click from also toggling the input. + event.preventDefault(); + event.stopPropagation(); + + // Fire one intentional input click. + inputElement.click(); + + }, true); } /**