From a82df1058d0d16971dd601d3d3448b5b06461da7 Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Thu, 16 Nov 2023 15:23:40 +0100 Subject: [PATCH] Phrasen Plugin: async loadCategory function & use Vue.computed() --- application/views/lehre/Antrag/Create.php | 6 +- public/js/apps/lehre/Antrag.js | 6 +- .../Studierendenantrag/Form/Abmeldung.js | 18 ++-- .../Studierendenantrag/Form/AbmeldungStgl.js | 10 +- .../Studierendenantrag/Form/Unterbrechung.js | 18 ++-- .../Studierendenantrag/Form/Wiederholung.js | 10 +- .../Leitung/Actions/Columns.js | 3 - .../Studierendenantrag/Leitung/Table.js | 47 ++++----- public/js/plugin/Phrasen.js | 95 +++++++------------ 9 files changed, 95 insertions(+), 118 deletions(-) diff --git a/application/views/lehre/Antrag/Create.php b/application/views/lehre/Antrag/Create.php index 643991191..2c9d0d382 100644 --- a/application/views/lehre/Antrag/Create.php +++ b/application/views/lehre/Antrag/Create.php @@ -35,13 +35,13 @@ $this->load->view( antrag-type="" studierendenantrag-id="" v-model:info-array="infoArray" - v-model:status-msg="statusMsg" - v-model:status-severity="statusSeverity" + v-model:status-msg="status.msg" + v-model:status-severity="status.severity" >
- +
diff --git a/public/js/apps/lehre/Antrag.js b/public/js/apps/lehre/Antrag.js index 24f071597..00a5877b3 100644 --- a/public/js/apps/lehre/Antrag.js +++ b/public/js/apps/lehre/Antrag.js @@ -13,8 +13,10 @@ const app = Vue.createApp({ }, data() { return { - statusMsg: "", - statusSeverity: "", + status: { + msg: '', + severity: '' + }, infoArray: [] }; } diff --git a/public/js/components/Studierendenantrag/Form/Abmeldung.js b/public/js/components/Studierendenantrag/Form/Abmeldung.js index 5f5d5ecb6..513b8b542 100644 --- a/public/js/components/Studierendenantrag/Form/Abmeldung.js +++ b/public/js/components/Studierendenantrag/Form/Abmeldung.js @@ -52,7 +52,7 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } @@ -63,7 +63,7 @@ export default { createAntrag() { bootstrap.Modal.getOrCreateInstance(this.$refs.modal).hide(); this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')})), severity: 'warning' }); this.saving = true; @@ -89,7 +89,7 @@ export default { this.errors.default.push(result.data.retval[k]); } this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')})), severity: 'danger' }); } @@ -100,13 +100,13 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } else this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_open')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_open')})), severity:'success' }); } @@ -116,7 +116,7 @@ export default { }, cancelAntrag() { this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelling')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelling')})), severity: 'warning' }); this.saving = true; @@ -140,7 +140,7 @@ export default { this.errors.default.push(result.data.retval[k]); } this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')})), severity:'danger' }); } @@ -152,13 +152,13 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } else this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelled')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelled')})), severity: 'danger' }); } diff --git a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js index 540abed9d..2bc24e5c7 100644 --- a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js +++ b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js @@ -52,7 +52,7 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } @@ -63,7 +63,7 @@ export default { createAntrag() { bootstrap.Modal.getOrCreateInstance(this.$refs.modal).hide(); this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')})), severity: 'warning' }); this.saving = true; @@ -89,7 +89,7 @@ export default { this.errors.default.push(result.data.retval[k]); } this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')})), severity: 'danger' }); } @@ -100,13 +100,13 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } else this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_open')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_open')})), severity:'success' }); } diff --git a/public/js/components/Studierendenantrag/Form/Unterbrechung.js b/public/js/components/Studierendenantrag/Form/Unterbrechung.js index f4fea0629..49e50fd71 100644 --- a/public/js/components/Studierendenantrag/Form/Unterbrechung.js +++ b/public/js/components/Studierendenantrag/Form/Unterbrechung.js @@ -75,7 +75,7 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } @@ -85,7 +85,7 @@ export default { }, createAntrag() { this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')})), severity: 'warning' }); this.saving = true; @@ -122,7 +122,7 @@ export default { this.errors.default.push(result.data.retval[k]); } this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')})), severity: 'danger' }); } @@ -133,13 +133,13 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } else this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_created')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_created')})), severity: 'info' }); } @@ -149,7 +149,7 @@ export default { }, cancelAntrag() { this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelling')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelling')})), severity: 'warning' }); this.saving = true; @@ -173,7 +173,7 @@ export default { this.errors.default.push(result.data.retval[k]); } this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')})), severity: 'danger' }); } @@ -185,13 +185,13 @@ export default { this.data = result.data.retval; if (this.data.status) { this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } else this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelled')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_cancelled')})), severity: 'danger' }); } diff --git a/public/js/components/Studierendenantrag/Form/Wiederholung.js b/public/js/components/Studierendenantrag/Form/Wiederholung.js index bc7dfc616..c2aea93f2 100644 --- a/public/js/components/Studierendenantrag/Form/Wiederholung.js +++ b/public/js/components/Studierendenantrag/Form/Wiederholung.js @@ -67,7 +67,7 @@ export default { } this.$emit('update:status', this.data.status); this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); return result; @@ -85,7 +85,7 @@ export default { let nextState = repeat ? 'Erstellt' : 'Verzichtet'; this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_saving')})), severity: 'warning' }); this.saving = true; @@ -112,7 +112,7 @@ export default { this.errors.default.push(result.data.retval[k]); } this.$emit('setStatus', { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.$p.t('studierendenantrag', 'status_error')})), severity: 'danger' }); } @@ -125,7 +125,7 @@ export default { this.data.status = nextState; this.$emit('update:status', this.data.status); this.$emit("setStatus", { - msg: this.$p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + msg: Vue.computed(() => this.$p.t('studierendenantrag', 'status_x', {status: this.data.statustyp})), severity: this.statusSeverity }); } @@ -139,7 +139,7 @@ export default { }, mounted() { this.infos = [...Array(5).keys()].map(n => ({ - body: this.$p.t_ref('studierendenantrag', 'infotext_Wiederholung_' + n) + body: Vue.computed(() => this.$p.t('studierendenantrag', 'infotext_Wiederholung_' + n)) })); this.$emit('setInfos', this.infos); }, diff --git a/public/js/components/Studierendenantrag/Leitung/Actions/Columns.js b/public/js/components/Studierendenantrag/Leitung/Actions/Columns.js index 7128761d7..55a7bd1cc 100644 --- a/public/js/components/Studierendenantrag/Leitung/Actions/Columns.js +++ b/public/js/components/Studierendenantrag/Leitung/Actions/Columns.js @@ -6,9 +6,6 @@ export default { toggleColumn(col) { col.visible = !col.visible; col.original.toggle() - }, - show() { - } }, template: ` diff --git a/public/js/components/Studierendenantrag/Leitung/Table.js b/public/js/components/Studierendenantrag/Leitung/Table.js index d398824b1..1e566222e 100644 --- a/public/js/components/Studierendenantrag/Leitung/Table.js +++ b/public/js/components/Studierendenantrag/Leitung/Table.js @@ -74,7 +74,8 @@ export default { this.$refs.lvList.show(); } }, - mounted() { + async mounted() { + await this.$p.loadCategory(['lehre', 'studierendenantrag', 'person', 'global', 'ui']); function dateFormatter(cell) { let val = cell.getValue(); @@ -112,7 +113,7 @@ export default { title: '#' }, { field: 'bezeichnung', - title: this.$p.t_node('lehre', 'studiengang'), + title: this.$p.t('lehre', 'studiengang'), headerFilter: 'list', headerFilterParams: { valuesLookup: true, @@ -121,7 +122,7 @@ export default { } }, { field: 'orgform', - title: this.$p.t_node('lehre', 'organisationsform'), + title: this.$p.t('lehre', 'organisationsform'), headerFilter: 'list', headerFilterParams: { valuesLookup: true, @@ -130,7 +131,7 @@ export default { } }, { field: 'typ', - title: this.$p.t_node('studierendenantrag', 'antrag_typ'), + title: this.$p.t('studierendenantrag', 'antrag_typ'), headerFilter: 'list', headerFilterParams: { valuesLookup: true, @@ -142,7 +143,7 @@ export default { } }, { field: 'statustyp', - title: this.$p.t_node('studierendenantrag', 'antrag_status'), + title: this.$p.t('studierendenantrag', 'antrag_status'), headerFilter: 'list', headerFilterParams: { valuesLookup: true, @@ -164,32 +165,32 @@ export default { } }, { field: 'matrikelnr', - title: this.$p.t_node('person', 'personenkennzeichen'), + title: this.$p.t('person', 'personenkennzeichen'), headerFilter: 'input' }, { field: 'prestudent_id', - title: this.$p.t_node('lehre', 'prestudent'), + title: this.$p.t('lehre', 'prestudent'), headerFilter: 'input' }, { field: 'name', - title: this.$p.t_node('global', 'name'), + title: this.$p.t('global', 'name'), mutator: (value, data) => (data.vorname + ' ' + data.nachname).replace(/^\s*(.*)\s*$/, '$1'), headerFilter: 'input' }, { field: 'datum', - title: this.$p.t_node('global', 'datum'), + title: this.$p.t('global', 'datum'), formatter: dateFormatter, headerFilterFunc: 'dates', headerFilter: dateFilter }, { field: 'datum_wiedereinstieg', - title: this.$p.t_node('studierendenantrag', 'antrag_datum_wiedereinstieg'), + title: this.$p.t('studierendenantrag', 'antrag_datum_wiedereinstieg'), formatter: dateFormatter, headerFilterFunc: 'dates', headerFilter: dateFilter }, { field: 'grund', - title: this.$p.t_node('studierendenantrag', 'antrag_grund'), + title: this.$p.t('studierendenantrag', 'antrag_grund'), formatter: (cell, formatterParams, onRendered) => { let link = document.createElement('a'), val = cell.getValue(); @@ -204,7 +205,7 @@ export default { } }, { field: 'dms_id', - title: this.$p.t_node('studierendenantrag', 'antrag_dateianhaenge'), + title: this.$p.t('studierendenantrag', 'antrag_dateianhaenge'), formatter: (cell, formatterParams, onRendered) => { let val = cell.getValue(); if (!val) @@ -216,13 +217,13 @@ export default { val; link.setAttribute('target', '_blank'); link.innerHTML = ''; - link.append(this.$p.t_node('studierendenantrag/antrag_anhang')); + link.append(this.$p.t('studierendenantrag/antrag_anhang')); return link; } }, { field: 'actions', frozen: true, - title: this.$p.t_node('ui', 'aktion'), + title: this.$p.t('ui', 'aktion'), headerFilter: false, headerSort: false, formatter: (cell, formatterParams, onRendered) => { @@ -246,7 +247,7 @@ export default { if (data.typ == 'AbmeldungStgl' && data.status == 'Genehmigt') { // NOTE(chris): Object let button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_object')); + button.append(this.$p.t('studierendenantrag', 'btn_object')); button.className = "btn btn-outline-secondary"; button.addEventListener('click', () => this.$emit('action:object', [cell.getData()])); container.append(button); @@ -255,14 +256,14 @@ export default { if (data.typ == 'AbmeldungStgl' && data.status == 'Beeinsprucht') { // NOTE(chris): Deny Objection let button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_objection_deny')); + button.append(this.$p.t('studierendenantrag', 'btn_objection_deny')); button.className = "btn btn-outline-secondary"; button.addEventListener('click', () => this.$emit('action:objectionDeny', [cell.getData()])); container.append(button); // NOTE(chris): Approve Objection button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_objection_approve')); + button.append(this.$p.t('studierendenantrag', 'btn_objection_approve')); button.className = "btn btn-outline-secondary"; button.addEventListener('click', () => this.$emit('action:objectionApprove', [cell.getData()])); container.append(button); @@ -272,7 +273,7 @@ export default { // NOTE(chris): Reopen if (data.typ == 'Wiederholung' && data.status == 'Verzichtet') { let button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_reopen')); + button.append(this.$p.t('studierendenantrag', 'btn_reopen')); button.className = "btn btn-outline-secondary"; button.addEventListener('click', () => this.$emit('action:reopen', [cell.getData()])); container.append(button); @@ -280,7 +281,7 @@ export default { // NOTE(chris): Lv Zuweisen if (data.typ == 'Wiederholung' && (data.status == 'Erstellt' || data.status == 'Lvszugewiesen')) { let button = document.createElement('a'); - button.append(this.$p.t_node('studierendenantrag', 'btn_lvzuweisen')); + button.append(this.$p.t('studierendenantrag', 'btn_lvzuweisen')); button.className = "btn btn-outline-secondary"; button.href = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + @@ -302,7 +303,7 @@ export default { // NOTE(chris): Cancel if (data.typ == 'AbmeldungStgl' && (data.status == 'Erstellt' || data.status == 'Genehmigt' )) { let button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_cancel')); + button.append(this.$p.t('studierendenantrag', 'btn_cancel')); button.className = "btn btn-outline-secondary"; button.addEventListener('click',() => this.$emit('action:cancel', [cell.getData()])); container.append(button); @@ -313,7 +314,7 @@ export default { // NOTE(chris): Approve if ((data.typ == 'Wiederholung' && data.status == 'Lvszugewiesen') || (data.typ != 'Wiederholung' && data.status == 'Erstellt')) { let button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_approve')); + button.append(this.$p.t('studierendenantrag', 'btn_approve')); button.className = "btn btn-outline-secondary"; button.addEventListener('click', () => this.$emit('action:approve', [cell.getData()])); container.append(button); @@ -321,7 +322,7 @@ export default { // NOTE(chris): Reject (Unterbrechung braucht grund) if (data.status == 'Erstellt' && data.typ == 'Unterbrechung') { let button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_reject')); + button.append(this.$p.t('studierendenantrag', 'btn_reject')); button.className = "btn btn-outline-secondary"; button.addEventListener('click', () => this.$emit('action:reject', [cell.getData()])); container.append(button); @@ -331,7 +332,7 @@ export default { // NOTE(chris): Show LVs if (data.typ == 'Wiederholung' && (data.status == 'Lvszugewiesen' || data.status == 'Genehmigt')) { let button = document.createElement('button'); - button.append(this.$p.t_node('studierendenantrag', 'btn_show_lvs')); + button.append(this.$p.t('studierendenantrag', 'btn_show_lvs')); button.className = "btn btn-outline-secondary"; button.addEventListener('click', () => this.showLVs(cell.getData())); container.append(button); diff --git a/public/js/plugin/Phrasen.js b/public/js/plugin/Phrasen.js index 2ca7c7c44..162dc2179 100644 --- a/public/js/plugin/Phrasen.js +++ b/public/js/plugin/Phrasen.js @@ -1,4 +1,4 @@ -const categories = {}; +const categories = Vue.reactive({}); const loadingModules = {}; function extractCategory(obj, category) { @@ -8,37 +8,6 @@ function extractCategory(obj, category) { return res; }, {}); } -function reloadRefs(category) { - while (loadingModules[category].length) { - var v = loadingModules[category].pop(); - if (v[0].nodeType && v[0].nodeType == Node.TEXT_NODE) { - v[0].textContent = getValueForLoadedPhrase(category, v[1], v[2]); - } else if (Vue.isRef(v[0])) { - v[0].value = getValueForLoadedPhrase(category, v[1], v[2]); - Vue.triggerRef(v[0]); - /*Vue.unref(v);*/ - } - } -} -function loadLazy(category, val, phrase, params) { - // NOTE(chris): load module if it's not loaded yet - if (loadingModules[category]) { - loadingModules[category].push([val, phrase, params]); - if (categories[category]) // NOTE(chris): this is for safety in case the loading finished the moment before the val was pushed into the array - reloadRefs(category); - return; - } - loadingModules[category] = [[val, phrase, params]]; - - axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Phrasen/loadModule/' + category).then(res => { - if (res.data.retval) - categories[category] = extractCategory(res.data.retval, category); - else - categories[category] = {}; - - reloadRefs(category); - }).catch(err => console.error(err)); -} function getValueForLoadedPhrase(category, phrase, params) { let result = categories[category][phrase]; if (!result) @@ -48,38 +17,46 @@ function getValueForLoadedPhrase(category, phrase, params) { return result; } -function t_intern(val, category, phrase, params) { - if (params === undefined && ( - (Array.isArray(category) && category.length == 2) || - (category.split && category.split('/').length == 2)) - ) { - params = phrase; - [category, phrase] = category.split ? category.split('/') : category; - } - if (phrase === undefined) { - console.error('invalid input', category, phrase, params); - return ''; - } - if (categories[category]) - return getValueForLoadedPhrase(category, phrase, params); - - loadLazy(category, val, phrase, params); - return ''; -} const phrasen = { - t_ref(category, phrase, params) { - let val = Vue.ref(''); - val.value = t_intern(val, category, phrase, params); - return val; + loadCategory(category) { + if (Array.isArray(category)) + return Promise.all(category.map(cat => this.loadCategory(cat))); + if (!loadingModules[category]) + loadingModules[category] = axios + .get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Phrasen/loadModule/' + category) + .then(res => { + if (res.data.retval) + categories[category] = extractCategory(res.data.retval, category); + else + categories[category] = {}; + }); + return loadingModules[category]; }, - t_node(category, phrase, params) { - let val = document.createTextNode(''); - val.textContent = t_intern(val, category, phrase, params); - return val; + t_ref(category, phrase, params) { + console.warn('depricated'); + return Vue.computed(() => this.t(category, phrase, params)); }, t(category, phrase, params) { - return Vue.unref(this.t_ref(category, phrase, params)); + if (params === undefined && ( + (Array.isArray(category) && category.length == 2) || + (category.split && category.split('/').length == 2)) + ) { + params = phrase; + [category, phrase] = category.split ? category.split('/') : category; + } + if (phrase === undefined) { + console.error('invalid input', category, phrase, params); + return ''; + } + let val = Vue.computed(() => { + if (!categories[category]) + return ''; + return getValueForLoadedPhrase(category, phrase, params); + }); + if (!categories[category]) + this.loadCategory(category); + return val.value; } };