54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
import Vue from 'vue';
|
|
|
|
|
|
export const appBaseConfig = {
|
|
el: '#app',
|
|
delimiters: ['[[', ']]'],
|
|
}
|
|
|
|
/**
|
|
* Application config for the main application instance
|
|
*/
|
|
var appConfig = {};
|
|
|
|
export function setAppConfig(config) {
|
|
for(var member in appConfig) delete appConfig[member];
|
|
return Object.assign(appConfig, config)
|
|
}
|
|
|
|
export function getAppConfig(config) {
|
|
if(config instanceof Function)
|
|
config = config()
|
|
config = config == null ? appConfig : config;
|
|
return {...appBaseConfig, ...config}
|
|
}
|
|
|
|
|
|
/**
|
|
* Create Vue application at window 'load' event and return a Promise
|
|
* resolving to the created app.
|
|
*
|
|
* config: defaults to appConfig (checked when window is loaded)
|
|
*/
|
|
export function loadApp(config=null) {
|
|
return new Promise(function(resolve, reject) {
|
|
window.addEventListener('load', function() {
|
|
try {
|
|
config = getAppConfig(config)
|
|
const el = document.querySelector(config.el)
|
|
if(!el) {
|
|
reject(`Error: missing element ${config.el}`);
|
|
return;
|
|
}
|
|
|
|
resolve(new Vue(config))
|
|
}
|
|
catch(error) { reject(error) }
|
|
})
|
|
})
|
|
}
|
|
|
|
|
|
|
|
|