unique-interface
Version:
无UI组件库
75 lines (69 loc) • 2.23 kB
JavaScript
import { type, merge } from './util.js';
import Basic from './groups/basic.js';
import Form from './groups/form.js';
import Info from './groups/info.js';
import Navigation from './groups/navigation.js';
const packageJson = require('../package.json');
const CONFIG = {
pluginPosition: ['Vue', 'prototype']
};
let Lib;
function setup(components = [], plugins = {}){
let Vue = Lib;
// setup components
components.forEach(function(component){
Vue.component(component.name, component);
});
// setup plugins
var positions = [];
CONFIG.pluginPosition.forEach(position => {
switch(position){
case 'Vue': positions.push({ obj: Vue }); break;
case 'prototype': positions.push({ prefix: '$', obj: Vue.prototype }); break;
default: positions.push({ obj: position }); break;
}
});
Object.keys(plugins).forEach(name => {
positions.forEach(position => {
position.obj[(position.prefix || '') + name] = plugins[name];
});
});
}
function install(Vue, config = {}){
// merge config
Lib = Vue;
merge(CONFIG, config);
// setup basic
setup(Basic);
setup(Form);
setup(Info.components, Info.plugins);
setup(Navigation);
};
function setDefaults(config){
// components
[...Basic, ...Form, ...Info.components, ...Navigation].forEach(component => {
let name = component.name;
if(!config.hasOwnProperty(name))return;
for(let key in config[name]){
if(!(component.props || {}).hasOwnProperty(key))continue;
if(type(component.props[key]) === 'function'){
component.props[key] = {
type: component.props[key],
};
}
component.props[key]['default'] = config[name][key];
}
});
// plugins
if(!config.plugins)return;
Object.keys(Info.plugins).forEach(name => {
if(!config.plugins.hasOwnProperty(name))return;
if(!Info.plugins[name].setDefaults)return;
Info.plugins[name].setDefaults(config.plugins[name]);
});
}
export default {
version: packageJson.version,
install: install,
setDefaults: setDefaults,
};