Files
ezbookkeeping/src/mobile-main.js
T
2020-10-31 19:22:20 +08:00

133 lines
3.9 KiB
JavaScript

import Vue from 'vue';
import VueI18n from 'vue-i18n';
import VueI18nFilter from 'vue-i18n-filter'
import Framework7 from 'framework7/framework7.esm.bundle.js';
import Framework7Vue from 'framework7-vue/framework7-vue.esm.bundle.js';
import VueMoment from 'vue-moment';
import moment from 'moment';
import 'moment/min/locales';
import 'framework7/css/framework7.bundle.css';
import 'framework7-icons';
import { getAllLanguages, getLanguage, getDefaultLanguage, getI18nOptions, getLocalizedError } from './lib/i18n.js';
import version from './lib/version.js';
import settings from './lib/settings.js';
import services from './lib/services.js';
import userstate from './lib/userstate.js';
import App from './Mobile.vue';
Vue.use(VueI18n);
Vue.use(VueI18nFilter);
Vue.use(VueMoment, { moment });
Framework7.use(Framework7Vue);
const i18n = new VueI18n(getI18nOptions());
Vue.prototype.$version = version.getVersion;
Vue.prototype.$settings = settings;
Vue.prototype.$getDefaultLanguage = getDefaultLanguage;
Vue.prototype.$getAllLanguages = getAllLanguages;
Vue.prototype.$getLanguage = getLanguage;
Vue.prototype.$setLanguage = function (locale) {
if (settings.getLanguage() !== locale) {
settings.setLanguage(locale);
}
i18n.locale = locale;
moment.locale(locale);
services.setLocale(locale);
document.querySelector('html').setAttribute('lang', locale);
return locale;
};
Vue.prototype.$isUserRegistrationEnabled = settings.isUserRegistrationEnabled;
Vue.prototype.$alert = function (message, confirmCallback) {
let parameters = {};
if (message && message.error) {
const localizedError = getLocalizedError(message.error);
message = localizedError.message;
if (localizedError.parameters) {
for (let i = 0; i < localizedError.parameters.length; i++) {
const parameter = localizedError.parameters[i];
if (parameter.localized) {
parameters[parameter.key] = i18n.t(`parameter.${parameter.value}`);
} else {
parameters[parameter.key] = parameter.value;
}
}
}
}
this.$f7.dialog.create({
title: i18n.t('global.app.title'),
text: i18n.t(message, parameters),
buttons: [
{
text: i18n.t('OK'),
onClick: confirmCallback
}
]
}).open();
};
Vue.prototype.$confirm = function (message, confirmCallback, cancelCallback) {
this.$f7.dialog.create({
title: i18n.t('global.app.title'),
text: i18n.t(message),
buttons: [
{
text: i18n.t('Cancel'),
onClick: cancelCallback
},
{
text: i18n.t('OK'),
onClick: confirmCallback
}
]
}).open();
};
Vue.prototype.$toast = function (message, timeout) {
this.$f7.toast.create({
text: i18n.t(message),
position: 'center',
closeTimeout: timeout || 1500
}).open();
};
Vue.prototype.$services = services;
Vue.prototype.$user = userstate;
Vue.prototype.$setLanguage(settings.getLanguage() || getDefaultLanguage());
// refresh token if user is logined
if (userstate.isUserLogined()) {
services.refreshToken();
}
new Vue({
el: '#app',
i18n: i18n,
render: h => h(App),
mounted: function () {
const app = this.$f7;
window.addEventListener('popstate', () => {
if (document.querySelectorAll('.modal-in').length > 0) {
app.dialog.close();
}
}, false);
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape' || event.key === 'Esc' || event.keyCode === 27 || event.which === 27) {
if (document.querySelectorAll('.modal-in').length > 0) {
app.dialog.close();
}
}
}, false);
}
});