From 6a2256a387a54db8d1d4e7899faa7c0d0c7e1237 Mon Sep 17 00:00:00 2001 From: Andreas Fernandez <a.fernandez@scripting-base.de> Date: Fri, 11 Nov 2022 16:40:18 +0100 Subject: [PATCH] [BUGFIX] Properly check if language was not fetched from UC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The date-time-picker component now checks properly if the backend user's language could not get fetched from its UC by checking loose for a falsy value. Resolves: #99067 Releases: main, 11.5 Change-Id: I3ba104afde2321480099e96beff6ab77ecb126a2 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/76561 Tested-by: core-ci <typo3@b13.com> Tested-by: Markus Klein <markus.klein@typo3.org> Tested-by: Roman Büchler <info@buechler.pro> Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de> Reviewed-by: Markus Klein <markus.klein@typo3.org> Reviewed-by: Roman Büchler <info@buechler.pro> Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de> --- Build/Sources/TypeScript/backend/date-time-picker.ts | 2 +- .../backend/Resources/Public/JavaScript/date-time-picker.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Build/Sources/TypeScript/backend/date-time-picker.ts b/Build/Sources/TypeScript/backend/date-time-picker.ts index e7f3c4b6b020..c2857f1844a7 100644 --- a/Build/Sources/TypeScript/backend/date-time-picker.ts +++ b/Build/Sources/TypeScript/backend/date-time-picker.ts @@ -56,7 +56,7 @@ class DateTimePicker { } let userLocale = PersistentStorage.get('lang'); - if (userLocale === '') { + if (!userLocale) { userLocale = 'default'; } else if (userLocale === 'ch') { // Fix our made up locale "ch" diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js b/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js index a33679e1d502..66edd637e814 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/date-time-picker.js @@ -10,4 +10,4 @@ * * The TYPO3 project - inspiring people to share! */ -import flatpickr from"flatpickr/flatpickr.min.js";import moment from"moment";import PersistentStorage from"@typo3/backend/storage/persistent.js";import ThrottleEvent from"@typo3/core/event/throttle-event.js";class DateTimePicker{constructor(){this.format=(void 0!==opener?.top?.TYPO3?opener.top:top).TYPO3.settings.DateTimePicker.DateFormat}static formatDateForHiddenField(e,t){return"time"!==t&&"timesec"!==t||e.year(1970).month(0).date(1),e.format()}initialize(e){if(!(e instanceof HTMLInputElement)||void 0!==e.dataset.datepickerInitialized)return;let t=PersistentStorage.get("lang");""===t?t="default":"ch"===t&&(t="zh"),e.dataset.datepickerInitialized="1",import("flatpickr/locales.js").then((()=>{this.initializeField(e,t)}))}initializeField(e,t){const a=this.getScrollEvent(),n=this.getDateOptions(e);n.locale=t,n.onOpen=[()=>{a.bindTo(document.querySelector(".t3js-module-body"))}],n.onClose=()=>{a.release()};const r=flatpickr(e,n);e.addEventListener("input",(()=>{const e=r._input.value,t=r.parseDate(e);e===r.formatDate(t,r.config.dateFormat)&&r.setDate(e)})),e.addEventListener("keyup",(e=>{"Escape"===e.key&&r.close()})),e.addEventListener("change",(t=>{t.stopImmediatePropagation();const a=t.target,n=e.parentElement.parentElement.querySelector('input[type="hidden"]');if(""!==a.value){const e=a.dataset.dateType,t=moment.utc(a.value,a._flatpickr.config.dateFormat);t.isValid()?n.value=DateTimePicker.formatDateForHiddenField(t,e):a.value=DateTimePicker.formatDateForHiddenField(moment.utc(n.value),e)}else n.value="";a.dispatchEvent(new Event("formengine.dp.change"))}))}getScrollEvent(){return new ThrottleEvent("scroll",(()=>{const e=document.querySelector(".flatpickr-input.active");if(null===e)return;const t=e.getBoundingClientRect(),a=e._flatpickr.calendarContainer.offsetHeight;let n,r;window.innerHeight-t.bottom<a&&t.top>a?(n=t.y-a-2,r="arrowBottom"):(n=t.y+t.height+2,r="arrowTop"),e._flatpickr.calendarContainer.style.top=n+"px",e._flatpickr.calendarContainer.classList.remove("arrowBottom","arrowTop"),e._flatpickr.calendarContainer.classList.add(r)}),15)}getDateOptions(e){const t=this.format,a=e.dataset.dateType,n=new Date,r={allowInput:!0,dateFormat:"",defaultDate:e.value,defaultHour:n.getHours(),defaultMinute:n.getMinutes(),enableSeconds:!1,enableTime:!1,formatDate:(e,t)=>moment(e).format(t),parseDate:(e,t)=>moment(e,t,!0).toDate(),maxDate:"",minDate:"",minuteIncrement:1,noCalendar:!1,weekNumbers:!0};switch(a){case"datetime":r.dateFormat=t[1],r.enableTime=!0;break;case"date":r.dateFormat=t[0];break;case"time":r.dateFormat="HH:mm",r.enableTime=!0,r.noCalendar=!0;break;case"timesec":r.dateFormat="HH:mm:ss",r.enableSeconds=!0,r.enableTime=!0,r.noCalendar=!0;break;case"year":r.dateFormat="Y"}return"undefined"!==e.dataset.dateMindate&&(r.minDate=e.dataset.dateMindate),"undefined"!==e.dataset.dateMaxdate&&(r.maxDate=e.dataset.dateMaxdate),r}}export default new DateTimePicker; \ No newline at end of file +import flatpickr from"flatpickr/flatpickr.min.js";import moment from"moment";import PersistentStorage from"@typo3/backend/storage/persistent.js";import ThrottleEvent from"@typo3/core/event/throttle-event.js";class DateTimePicker{constructor(){this.format=(void 0!==opener?.top?.TYPO3?opener.top:top).TYPO3.settings.DateTimePicker.DateFormat}static formatDateForHiddenField(e,t){return"time"!==t&&"timesec"!==t||e.year(1970).month(0).date(1),e.format()}initialize(e){if(!(e instanceof HTMLInputElement)||void 0!==e.dataset.datepickerInitialized)return;let t=PersistentStorage.get("lang");t?"ch"===t&&(t="zh"):t="default",e.dataset.datepickerInitialized="1",import("flatpickr/locales.js").then((()=>{this.initializeField(e,t)}))}initializeField(e,t){const a=this.getScrollEvent(),n=this.getDateOptions(e);n.locale=t,n.onOpen=[()=>{a.bindTo(document.querySelector(".t3js-module-body"))}],n.onClose=()=>{a.release()};const r=flatpickr(e,n);e.addEventListener("input",(()=>{const e=r._input.value,t=r.parseDate(e);e===r.formatDate(t,r.config.dateFormat)&&r.setDate(e)})),e.addEventListener("keyup",(e=>{"Escape"===e.key&&r.close()})),e.addEventListener("change",(t=>{t.stopImmediatePropagation();const a=t.target,n=e.parentElement.parentElement.querySelector('input[type="hidden"]');if(""!==a.value){const e=a.dataset.dateType,t=moment.utc(a.value,a._flatpickr.config.dateFormat);t.isValid()?n.value=DateTimePicker.formatDateForHiddenField(t,e):a.value=DateTimePicker.formatDateForHiddenField(moment.utc(n.value),e)}else n.value="";a.dispatchEvent(new Event("formengine.dp.change"))}))}getScrollEvent(){return new ThrottleEvent("scroll",(()=>{const e=document.querySelector(".flatpickr-input.active");if(null===e)return;const t=e.getBoundingClientRect(),a=e._flatpickr.calendarContainer.offsetHeight;let n,r;window.innerHeight-t.bottom<a&&t.top>a?(n=t.y-a-2,r="arrowBottom"):(n=t.y+t.height+2,r="arrowTop"),e._flatpickr.calendarContainer.style.top=n+"px",e._flatpickr.calendarContainer.classList.remove("arrowBottom","arrowTop"),e._flatpickr.calendarContainer.classList.add(r)}),15)}getDateOptions(e){const t=this.format,a=e.dataset.dateType,n=new Date,r={allowInput:!0,dateFormat:"",defaultDate:e.value,defaultHour:n.getHours(),defaultMinute:n.getMinutes(),enableSeconds:!1,enableTime:!1,formatDate:(e,t)=>moment(e).format(t),parseDate:(e,t)=>moment(e,t,!0).toDate(),maxDate:"",minDate:"",minuteIncrement:1,noCalendar:!1,weekNumbers:!0};switch(a){case"datetime":r.dateFormat=t[1],r.enableTime=!0;break;case"date":r.dateFormat=t[0];break;case"time":r.dateFormat="HH:mm",r.enableTime=!0,r.noCalendar=!0;break;case"timesec":r.dateFormat="HH:mm:ss",r.enableSeconds=!0,r.enableTime=!0,r.noCalendar=!0;break;case"year":r.dateFormat="Y"}return"undefined"!==e.dataset.dateMindate&&(r.minDate=e.dataset.dateMindate),"undefined"!==e.dataset.dateMaxdate&&(r.maxDate=e.dataset.dateMaxdate),r}}export default new DateTimePicker; \ No newline at end of file -- GitLab