'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = require("path"); const fs_1 = require("fs"); const Vue = require('vue/dist/vue.common.prod'); const languageContentTemplate = ` const win = window as any; export const languages = { // Data }; if (!win.languages) { win.languages = {}; } win.languages.{{name}} = languages; `; module.exports = Editor.Panel.define({ template: `
{{item}}
`, style: ` :host { display: flex; padding: 6px; flex-direction: column; } :host .content { flex: 1; display: flex; flex-direction: column; } header { margin-bottom: 6px; } header > ui-button.refresh { float: right; } section { flex: 1; background: var(--color-normal-fill-emphasis); border-radius: calc( var(--size-normal-radius)* 1px); padding: 4px; } section > div { padding: 0 10px; } section > div > .slider { margin-right: 4px; } section > div > .option { float: right; display: none; } section > div > ui-icon { cursor: pointer; color: var(--color-warn-fill-normal); } section > div > ui-icon[value=eye-open] { color: var(--color-success-fill-normal); } section > div > ui-icon[value=del] { color: var(--color-danger-fill-normal); } section > div:hover { background: var(--color-normal-fill); border-radius: calc( var(--size-normal-radius)* 1px); } section > div:hover > .option { display: inline; } `, $: { content: '.content', }, ready() { const vm = new Vue({ el: this.$.content, data: { current: '', list: [], showAddInput: false, }, watch: { current() { const vm = this; Editor.Message.send('scene', 'execute-scene-script', { name: 'i18n', method: 'changeCurrentLanguage', args: [vm.current || ''], }); }, }, methods: { add() { vm.showAddInput = true; requestAnimationFrame(() => { vm.$refs.addInput.focus(); }); }, select(language) { vm.current = language; }, async del(name) { const result = await Editor.Dialog.info(`确定删除 ${name} 语言文件?`, { buttons: ['确认', '取消'], default: 0, cancel: 1, }); if (result.response === 0) { await Editor.Message.request('asset-db', 'delete-asset', `db://assets/resources/i18n/${name}.ts`); vm.refresh(); } }, async refresh() { const dir = path_1.join(Editor.Project.path, 'assets/resources/i18n'); if (!fs_1.existsSync(dir)) { return; } vm.current = await Editor.Message.request('scene', 'execute-scene-script', { name: 'i18n', method: 'queryCurrentLanguage', args: [], }) || ''; const names = fs_1.readdirSync(dir); vm.$set(vm, 'list', []); names.forEach((name) => { const language = name.replace(/\.[^\.]+$/, ''); if (!/\./.test(language)) { vm.list.push(language); } }); }, async generateLanguageFile(event) { // @ts-ignore const language = event.target.value; if (!/[a-zA-Z]/.test(language)) { console.warn(`语言名称只允许使用 a-z A-Z, ${language} 不合法`); return; } const languageContent = languageContentTemplate.replace(/{{name}}/g, language); vm.showAddInput = false; await Editor.Message.request('asset-db', 'create-asset', `db://assets/resources/i18n/${language}.ts`, languageContent); vm.refresh(); }, }, }); vm.refresh(); }, });