UNPKG

unique-interface

Version:

无UI组件库

75 lines (69 loc) 2.23 kB
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, };