mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-04-10 11:14:03 +02:00
feat: automated replacement
This commit is contained in:
@@ -1,21 +1,96 @@
|
||||
import AirDatepicker from 'air-datepicker';
|
||||
import {createPopper} from '@popperjs/core';
|
||||
|
||||
// --- Static Locale Imports ---
|
||||
// We import all locales statically to ensure Vite transforms them correctly.
|
||||
import localeAr from 'air-datepicker/locale/ar.js';
|
||||
import localeBg from 'air-datepicker/locale/bg.js';
|
||||
import localeCa from 'air-datepicker/locale/ca.js';
|
||||
import localeCs from 'air-datepicker/locale/cs.js';
|
||||
import localeDa from 'air-datepicker/locale/da.js';
|
||||
import localeDe from 'air-datepicker/locale/de.js';
|
||||
import localeEl from 'air-datepicker/locale/el.js';
|
||||
import localeEn from 'air-datepicker/locale/en.js';
|
||||
import localeEs from 'air-datepicker/locale/es.js';
|
||||
import localeEu from 'air-datepicker/locale/eu.js';
|
||||
import localeFi from 'air-datepicker/locale/fi.js';
|
||||
import localeFr from 'air-datepicker/locale/fr.js';
|
||||
import localeHr from 'air-datepicker/locale/hr.js';
|
||||
import localeHu from 'air-datepicker/locale/hu.js';
|
||||
import localeId from 'air-datepicker/locale/id.js';
|
||||
import localeIt from 'air-datepicker/locale/it.js';
|
||||
import localeJa from 'air-datepicker/locale/ja.js';
|
||||
import localeKo from 'air-datepicker/locale/ko.js';
|
||||
import localeNb from 'air-datepicker/locale/nb.js';
|
||||
import localeNl from 'air-datepicker/locale/nl.js';
|
||||
import localePl from 'air-datepicker/locale/pl.js';
|
||||
import localePtBr from 'air-datepicker/locale/pt-BR.js';
|
||||
import localePt from 'air-datepicker/locale/pt.js';
|
||||
import localeRo from 'air-datepicker/locale/ro.js';
|
||||
import localeRu from 'air-datepicker/locale/ru.js';
|
||||
import localeSi from 'air-datepicker/locale/si.js';
|
||||
import localeSk from 'air-datepicker/locale/sk.js';
|
||||
import localeSl from 'air-datepicker/locale/sl.js';
|
||||
import localeSv from 'air-datepicker/locale/sv.js';
|
||||
import localeTh from 'air-datepicker/locale/th.js';
|
||||
import localeTr from 'air-datepicker/locale/tr.js';
|
||||
import localeUk from 'air-datepicker/locale/uk.js';
|
||||
import localeZh from 'air-datepicker/locale/zh.js';
|
||||
|
||||
// Map language codes to their imported locale objects
|
||||
const allLocales = {
|
||||
'ar': localeAr,
|
||||
'bg': localeBg,
|
||||
'ca': localeCa,
|
||||
'cs': localeCs,
|
||||
'da': localeDa,
|
||||
'de': localeDe,
|
||||
'el': localeEl,
|
||||
'en': localeEn,
|
||||
'es': localeEs,
|
||||
'eu': localeEu,
|
||||
'fi': localeFi,
|
||||
'fr': localeFr,
|
||||
'hr': localeHr,
|
||||
'hu': localeHu,
|
||||
'id': localeId,
|
||||
'it': localeIt,
|
||||
'ja': localeJa,
|
||||
'ko': localeKo,
|
||||
'nb': localeNb,
|
||||
'nl': localeNl,
|
||||
'pl': localePl,
|
||||
'pt-BR': localePtBr,
|
||||
'pt': localePt,
|
||||
'ro': localeRo,
|
||||
'ru': localeRu,
|
||||
'si': localeSi,
|
||||
'sk': localeSk,
|
||||
'sl': localeSl,
|
||||
'sv': localeSv,
|
||||
'th': localeTh,
|
||||
'tr': localeTr,
|
||||
'uk': localeUk,
|
||||
'zh': localeZh
|
||||
};
|
||||
// --- End of Locale Imports ---
|
||||
|
||||
|
||||
/**
|
||||
* Dynamically imports a language file from the locale folder.
|
||||
*
|
||||
* @param {string} langCode - The two-letter language code (e.g., 'en', 'es').
|
||||
* @returns {Promise<object>} A promise that resolves with the default export of the language file.
|
||||
*/
|
||||
* Selects a pre-imported language file from the locale map.
|
||||
*
|
||||
* @param {string} langCode - The two-letter language code (e.g., 'en', 'es').
|
||||
* @returns {Promise<object>} A promise that resolves with the locale object.
|
||||
*/
|
||||
export const getLocale = async (langCode) => {
|
||||
try {
|
||||
const localeModule = await import(`air-datepicker/locale/${langCode}.js`);
|
||||
return localeModule.default;
|
||||
} catch (error) {
|
||||
console.warn(`Could not find locale for '${langCode}'. Defaulting to English.`);
|
||||
const englishModule = await import('air-datepicker/locale/en.js');
|
||||
return englishModule.default;
|
||||
const locale = allLocales[langCode];
|
||||
|
||||
if (locale) {
|
||||
return locale;
|
||||
}
|
||||
|
||||
console.warn(`Could not find locale for '${langCode}'. Defaulting to English.`);
|
||||
return allLocales['en']; // Default to English
|
||||
};
|
||||
|
||||
function isMobileDevice() {
|
||||
@@ -40,9 +115,7 @@ window.DatePicker = async function createDynamicDatePicker(element) {
|
||||
dp.setViewDate(date);
|
||||
}
|
||||
};
|
||||
|
||||
let isOnMobile = isMobile();
|
||||
|
||||
let baseOpts = {
|
||||
isMobile: isOnMobile,
|
||||
dateFormat: element.dataset.dateFormat,
|
||||
@@ -59,7 +132,6 @@ window.DatePicker = async function createDynamicDatePicker(element) {
|
||||
datepicker.$el.dispatchEvent(_event);
|
||||
}
|
||||
};
|
||||
|
||||
const positionConfig = !isOnMobile ? {
|
||||
position({$datepicker, $target, $pointer, done}) {
|
||||
let popper = createPopper($target, $datepicker, {
|
||||
@@ -84,24 +156,20 @@ window.DatePicker = async function createDynamicDatePicker(element) {
|
||||
options: {
|
||||
element: $pointer
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
return function completeHide() {
|
||||
popper.destroy();
|
||||
done();
|
||||
};
|
||||
}
|
||||
} : {};
|
||||
|
||||
let opts = {...baseOpts, ...positionConfig};
|
||||
|
||||
if (element.dataset.value) {
|
||||
opts["selectedDates"] = [element.dataset.value];
|
||||
opts["startDate"] = [element.dataset.value];
|
||||
}
|
||||
|
||||
return new AirDatepicker(element, opts);
|
||||
};
|
||||
|
||||
@@ -114,9 +182,7 @@ window.MonthYearPicker = async function createDynamicDatePicker(element) {
|
||||
dp.setViewDate(date);
|
||||
}
|
||||
};
|
||||
|
||||
let isOnMobile = isMobile();
|
||||
|
||||
let baseOpts = {
|
||||
isMobile: isOnMobile,
|
||||
view: 'months',
|
||||
@@ -133,7 +199,6 @@ window.MonthYearPicker = async function createDynamicDatePicker(element) {
|
||||
datepicker.$el.dispatchEvent(_event);
|
||||
}
|
||||
};
|
||||
|
||||
const positionConfig = !isOnMobile ? {
|
||||
position({$datepicker, $target, $pointer, done}) {
|
||||
let popper = createPopper($target, $datepicker, {
|
||||
@@ -161,16 +226,13 @@ window.MonthYearPicker = async function createDynamicDatePicker(element) {
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
return function completeHide() {
|
||||
popper.destroy();
|
||||
done();
|
||||
};
|
||||
}
|
||||
} : {};
|
||||
|
||||
let opts = {...baseOpts, ...positionConfig};
|
||||
|
||||
if (element.dataset.value) {
|
||||
opts["selectedDates"] = [new Date(element.dataset.value + "T00:00:00")];
|
||||
opts["startDate"] = [new Date(element.dataset.value + "T00:00:00")];
|
||||
@@ -187,9 +249,7 @@ window.YearPicker = async function createDynamicDatePicker(element) {
|
||||
dp.setViewDate(date);
|
||||
}
|
||||
};
|
||||
|
||||
let isOnMobile = isMobile();
|
||||
|
||||
let baseOpts = {
|
||||
isMobile: isOnMobile,
|
||||
view: 'years',
|
||||
@@ -206,7 +266,6 @@ window.YearPicker = async function createDynamicDatePicker(element) {
|
||||
datepicker.$el.dispatchEvent(_event);
|
||||
}
|
||||
};
|
||||
|
||||
const positionConfig = !isOnMobile ? {
|
||||
position({$datepicker, $target, $pointer, done}) {
|
||||
let popper = createPopper($target, $datepicker, {
|
||||
@@ -234,16 +293,13 @@ window.YearPicker = async function createDynamicDatePicker(element) {
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
return function completeHide() {
|
||||
popper.destroy();
|
||||
done();
|
||||
};
|
||||
}
|
||||
} : {};
|
||||
|
||||
let opts = {...baseOpts, ...positionConfig};
|
||||
|
||||
if (element.dataset.value) {
|
||||
opts["selectedDates"] = [new Date(element.dataset.value + "T00:00:00")];
|
||||
opts["startDate"] = [new Date(element.dataset.value + "T00:00:00")];
|
||||
|
||||
Reference in New Issue
Block a user