Browse Source

无JIRA任务 chore: 补充eslint规则

es6
Zhenfei.Li 1 year ago
parent
commit
4e2a41bfb7
  1. 8
      .eslintrc
  2. 544
      src/core/2.base.js
  3. 11
      src/core/3.ob.js
  4. 135
      src/core/4.widget.js
  5. 201
      src/core/5.inject.js
  6. 6
      src/core/index.js

8
.eslintrc

@ -27,11 +27,15 @@
"plugins": ["@typescript-eslint/eslint-plugin"], "plugins": ["@typescript-eslint/eslint-plugin"],
"overrides": [{ "overrides": [{
"files": ["src/*.js","src/**/*.js", "demo/*.js", "demo/**/*.js", "i18n/**/*.js", "i18n/*.js", "test/**/*.js", "test/*.js", "examples/*.js", "examples/**/*.js"], "files": ["src/*.js","src/**/*.js", "demo/*.js", "demo/**/*.js", "i18n/**/*.js", "i18n/*.js", "test/**/*.js", "test/*.js", "examples/*.js", "examples/**/*.js"],
"extends": "plugin:@fui/es6", "extends": "plugin:@fui/esnext",
"rules": { "rules": {
"no-param-reassign": "off", "no-param-reassign": "off",
"quotes": [2, "double"], "quotes": [2, "double"],
"comma-dangle": ["error", { "arrays": "never", "objects": "always-multiline"}] // 多行对象字面量中要求拖尾逗号 "comma-dangle": ["error", { "arrays": "never", "objects": "always-multiline"}], // 多行对象字面量中要求拖尾逗号
"no-var": 2,
"prefer-const": 2,
"indent": ["error", 4],
"no-use-before-define": 0
} }
}, { }, {
"files": ["webpack/*.js", "./*.js", "lib/**/*.js", "lib/*.js", "./bin/*.js", "./bin/**/*.js"], "files": ["webpack/*.js", "./*.js", "lib/**/*.js", "lib/*.js", "./bin/*.js", "./bin/**/*.js"],

544
src/core/2.base.js

File diff suppressed because it is too large Load Diff

11
src/core/3.ob.js

@ -1,7 +1,8 @@
import { isFunction, isArray, isObject, isArguments, reduce, bind } from "./2.base"; import { isFunction, isArray, isObject, isArguments, reduce, bind } from "./2.base";
function obExtend() { function obExtend() {
let target = arguments[0] || {}, length = arguments.length, i = 1, name, copy; const target = arguments[0] || {}, length = arguments.length;
let i = 1, name, copy;
for (; i < length; i++) { for (; i < length; i++) {
// Only deal with non-null/undefined values // Only deal with non-null/undefined values
const options = arguments[i]; const options = arguments[i];
@ -53,9 +54,7 @@ export class OB {
props = this.props(config); props = this.props(config);
} }
const defaultProps = obExtend(this._defaultConfig(config), props); const defaultProps = obExtend(this._defaultConfig(config), props);
const modifiedDefaultProps = (config && config.type && OB.configFunctions[config.type + ".props"]) ? reduce(OB.configFunctions[config.type + ".props"], function (value, conf, index) { const modifiedDefaultProps = (config && config.type && OB.configFunctions[`${config.type}.props`]) ? reduce(OB.configFunctions[`${config.type}.props`], (value, conf, index) => obExtend(conf, value.fn(defaultProps, config, value.opt)), {}) : null;
return obExtend(conf, value.fn(defaultProps, config, value.opt));
}, {}) : null;
this.options = obExtend(defaultProps, modifiedDefaultProps, config); this.options = obExtend(defaultProps, modifiedDefaultProps, config);
} }
@ -73,7 +72,7 @@ export class OB {
return; return;
} }
if (isArray(lis)) { if (isArray(lis)) {
BI._.each(lis, (l) => { BI._.each(lis, l => {
this.on(eventName, l); this.on(eventName, l);
}); });
@ -162,7 +161,7 @@ export class OB {
const fns = this._getEvents()[eventName]; const fns = this._getEvents()[eventName];
if (isArray(fns)) { if (isArray(fns)) {
const newFns = []; const newFns = [];
BI._.each(fns, function (ifn) { BI._.each(fns, ifn => {
if (ifn !== fn) { if (ifn !== fn) {
newFns.push(ifn); newFns.push(ifn);
} }

135
src/core/4.widget.js

@ -30,7 +30,7 @@ function callLifeHook(self, life) {
if (hook) { if (hook) {
hooks = hooks.concat(isArray(hook) ? hook : [hook]); hooks = hooks.concat(isArray(hook) ? hook : [hook]);
} }
each(hooks, function (i, hook) { each(hooks, (i, hook) => {
hook.call(self); hook.call(self);
}); });
} }
@ -53,7 +53,7 @@ export class Widget extends OB {
baseCls: "", baseCls: "",
extraCls: "", extraCls: "",
cls: "", cls: "",
css: null css: null,
// vdom: false // vdom: false
}); });
@ -132,6 +132,7 @@ export class Widget extends OB {
// 加个保险 // 加个保险
if (initCallbackCalled === true) { if (initCallbackCalled === true) {
_global.console && console.error("组件: 请检查beforeInit内部的写法,callback只能执行一次"); _global.console && console.error("组件: 请检查beforeInit内部的写法,callback只能执行一次");
return; return;
} }
initCallbackCalled = true; initCallbackCalled = true;
@ -140,18 +141,19 @@ export class Widget extends OB {
// 加个保险 // 加个保险
if (renderCallbackCalled === true) { if (renderCallbackCalled === true) {
_global.console && console.error("组件: 请检查beforeRender内部的写法,callback只能执行一次"); _global.console && console.error("组件: 请检查beforeRender内部的写法,callback只能执行一次");
return; return;
} }
renderCallbackCalled = true; renderCallbackCalled = true;
this._render(); this._render();
this.__afterRender(); this.__afterRender();
} };
if (this.options.beforeRender || this.beforeRender) { if (this.options.beforeRender || this.beforeRender) {
this.__async = true; this.__async = true;
const beforeRenderResult = (this.options.beforeRender || this.beforeRender).call(this, render); const beforeRenderResult = (this.options.beforeRender || this.beforeRender).call(this, render);
if (beforeRenderResult instanceof Promise) { if (beforeRenderResult instanceof Promise) {
beforeRenderResult.then(render).catch(function (e) { beforeRenderResult.then(render).catch(e => {
_global.console && console.error(e); _global.console && console.error(e);
render(); render();
}); });
@ -160,13 +162,13 @@ export class Widget extends OB {
this._render(); this._render();
this.__afterRender(); this.__afterRender();
} }
} };
if (this.options.beforeInit || this.beforeInit) { if (this.options.beforeInit || this.beforeInit) {
this.__asking = true; this.__asking = true;
const beforeInitResult = (this.options.beforeInit || this.beforeInit).call(this, init); const beforeInitResult = (this.options.beforeInit || this.beforeInit).call(this, init);
if (beforeInitResult instanceof Promise) { if (beforeInitResult instanceof Promise) {
beforeInitResult.then(init).catch(function (e) { beforeInitResult.then(init).catch(e => {
_global.console && console.error(e); _global.console && console.error(e);
init(); init();
}); });
@ -206,11 +208,11 @@ export class Widget extends OB {
this._initElementWidth(); this._initElementWidth();
this._initElementHeight(); this._initElementHeight();
if (o._baseCls || o.baseCls || o.extraCls) { if (o._baseCls || o.baseCls || o.extraCls) {
this.element.addClass((o._baseCls || "") + " " + (o.baseCls || "") + " " + (o.extraCls || "")); this.element.addClass(`${o._baseCls || ""} ${o.baseCls || ""} ${o.extraCls || ""}`);
} }
if (o.cls) { if (o.cls) {
if (isFunction(o.cls)) { if (isFunction(o.cls)) {
const cls = this.__watch(o.cls, (context, newValue) => { let cls = this.__watch(o.cls, (context, newValue) => {
this.element.removeClass(cls).addClass(cls = newValue); this.element.removeClass(cls).addClass(cls = newValue);
}); });
this.element.addClass(cls); this.element.addClass(cls);
@ -229,7 +231,7 @@ export class Widget extends OB {
} }
if (o.css) { if (o.css) {
if (isFunction(o.css)) { if (isFunction(o.css)) {
const css = this.__watch(o.css, (context, newValue) => { let css = this.__watch(o.css, (context, newValue) => {
for (const k in css) { for (const k in css) {
if (isNull(newValue[k])) { if (isNull(newValue[k])) {
newValue[k] = ""; newValue[k] = "";
@ -247,14 +249,13 @@ export class Widget extends OB {
__watch(getter, handler, options) { __watch(getter, handler, options) {
if (_global.Fix) { if (_global.Fix) {
this._watchers = this._watchers || []; this._watchers = this._watchers || [];
const watcher = new Fix.Watcher(null, () => { const watcher = new Fix.Watcher(null, () => getter.call(this, this), (handler && (v => {
return getter.call(this, this);
}, (handler && ((v) => {
handler.call(this, this, v); handler.call(this, this, v);
})) || BI.emptyFn, extend({ deep: true }, options)); })) || BI.emptyFn, extend({ deep: true }, options));
this._watchers.push(() => { this._watchers.push(() => {
watcher.teardown(); watcher.teardown();
}); });
return watcher.value; return watcher.value;
} else { } else {
return getter(); return getter();
@ -374,7 +375,7 @@ export class Widget extends OB {
each(els, (i, el) => { each(els, (i, el) => {
if (el) { if (el) {
_lazyCreateWidget(el, { _lazyCreateWidget(el, {
element: this element: this,
}); });
} }
}); });
@ -422,6 +423,7 @@ export class Widget extends OB {
this.__afterMount(lifeHook, predicate); this.__afterMount(lifeHook, predicate);
// }, 0); // }, 0);
} }
return true; return true;
} }
@ -444,10 +446,12 @@ export class Widget extends OB {
_update(nextProps, shouldUpdate) { _update(nextProps, shouldUpdate) {
callLifeHook(this, "beforeUpdate"); callLifeHook(this, "beforeUpdate");
let res;
if (shouldUpdate) { if (shouldUpdate) {
const res = this.update && this.update(nextProps, shouldUpdate); res = this.update && this.update(nextProps, shouldUpdate);
} }
callLifeHook(this, "updated"); callLifeHook(this, "updated");
return res; return res;
} }
@ -476,7 +480,7 @@ export class Widget extends OB {
this.options._disabled = true; this.options._disabled = true;
} }
// 递归将所有子组件使能 // 递归将所有子组件使能
each(this._children, function (i, child) { each(this._children, (i, child) => {
!child._manualSetEnable && child._setEnable && child._setEnable(enable); !child._manualSetEnable && child._setEnable && child._setEnable(enable);
}); });
} }
@ -488,7 +492,7 @@ export class Widget extends OB {
this.options._invalid = true; this.options._invalid = true;
} }
// 递归将所有子组件使有效 // 递归将所有子组件使有效
each(this._children, function (i, child) { each(this._children, (i, child) => {
!child._manualSetValid && child._setValid && child._setValid(valid); !child._manualSetValid && child._setValid && child._setValid(valid);
}); });
} }
@ -525,36 +529,36 @@ export class Widget extends OB {
this.__setElementVisible(true); this.__setElementVisible(true);
this._mount(); this._mount();
if (o.animation && !lastVisible) { if (o.animation && !lastVisible) {
this.element.removeClass(o.animation + "-leave").removeClass(o.animation + "-leave-active").addClass(o.animation + "-enter"); this.element.removeClass(`${o.animation}-leave`).removeClass(`${o.animation}-leave-active`).addClass(`${o.animation}-enter`);
if (this._requestAnimationFrame) { if (this._requestAnimationFrame) {
cancelAnimationFrame(this._requestAnimationFrame); cancelAnimationFrame(this._requestAnimationFrame);
} }
this._requestAnimationFrame = () => { this._requestAnimationFrame = () => {
this.element.addClass(o.animation + "-enter-active"); this.element.addClass(`${o.animation}-enter-active`);
}; };
requestAnimationFrame(this._requestAnimationFrame); requestAnimationFrame(this._requestAnimationFrame);
if (this._animationDuring) { if (this._animationDuring) {
clearTimeout(this._animationDuring); clearTimeout(this._animationDuring);
} }
this._animationDuring = setTimeout(() => { this._animationDuring = setTimeout(() => {
this.element.removeClass(o.animation + "-enter").removeClass(o.animation + "-enter-active"); this.element.removeClass(`${o.animation}-enter`).removeClass(`${o.animation}-enter-active`);
}, o.animationDuring); }, o.animationDuring);
} }
} else if (visible === false) { } else if (visible === false) {
if (o.animation && lastVisible) { if (o.animation && lastVisible) {
this.element.removeClass(o.animation + "-enter").removeClass(o.animation + "-enter-active").addClass(o.animation + "-leave"); this.element.removeClass(`${o.animation}-enter`).removeClass(`${o.animation}-enter-active`).addClass(`${o.animation}-leave`);
if (this._requestAnimationFrame) { if (this._requestAnimationFrame) {
cancelAnimationFrame(this._requestAnimationFrame); cancelAnimationFrame(this._requestAnimationFrame);
} }
this._requestAnimationFrame = () => { this._requestAnimationFrame = () => {
this.element.addClass(o.animation + "-leave-active"); this.element.addClass(`${o.animation}-leave-active`);
}; };
requestAnimationFrame(this._requestAnimationFrame); requestAnimationFrame(this._requestAnimationFrame);
if (this._animationDuring) { if (this._animationDuring) {
clearTimeout(this._animationDuring); clearTimeout(this._animationDuring);
} }
this._animationDuring = setTimeout(() => { this._animationDuring = setTimeout(() => {
this.element.removeClass(o.animation + "-leave").removeClass(o.animation + "-leave-active"); this.element.removeClass(`${o.animation}-leave`).removeClass(`${o.animation}-leave-active`);
this.__setElementVisible(false); this.__setElementVisible(false);
}, o.animationDuring); }, o.animationDuring);
} else { } else {
@ -582,8 +586,8 @@ export class Widget extends OB {
doBehavior() { doBehavior() {
const args = arguments; const args = arguments;
// 递归将所有子组件使有效 // 递归将所有子组件使有效
each(this._children, function (i, child) { each(this._children, (i, child) => {
child.doBehavior && child.doBehavior.apply(child, args); child.doBehavior && child.doBehavior(...args);
}); });
} }
@ -602,7 +606,7 @@ export class Widget extends OB {
name = widget.getName(); name = widget.getName();
} }
if (isKey(name)) { if (isKey(name)) {
name = name + ""; name = `${name}`;
} }
name = name || widget.getName() || uniqueId("widget"); name = name || widget.getName() || uniqueId("widget");
if (this._children[name]) { if (this._children[name]) {
@ -613,6 +617,7 @@ export class Widget extends OB {
// TODO: self待删 // TODO: self待删
remove(self._children, this); remove(self._children, this);
}); });
return (this._children[name] = widget); return (this._children[name] = widget);
} }
@ -620,20 +625,21 @@ export class Widget extends OB {
if (!isKey(name) || name === this.getName()) { if (!isKey(name) || name === this.getName()) {
return this; return this;
} }
name = name + ""; name = `${name}`;
let widget = void 0, other = {}; let widget = void 0;
any(this._children, function (i, wi) { const other = {};
any(this._children, (i, wi) => {
if (i === name) { if (i === name) {
widget = wi; widget = wi;
return true; return true;
} }
other[i] = wi; other[i] = wi;
}); });
if (!widget) { if (!widget) {
any(other, function (i, wi) { any(other, (i, wi) => (widget = wi.getWidgetByName(i)));
return (widget = wi.getWidgetByName(i));
});
} }
return widget; return widget;
} }
@ -646,7 +652,7 @@ export class Widget extends OB {
} }
hasWidget(name) { hasWidget(name) {
return this._children[name] != null; return isNotNull(this._children[name]);
} }
getName() { getName() {
@ -664,11 +670,13 @@ export class Widget extends OB {
attr(key, value) { attr(key, value) {
if (isPlainObject(key)) { if (isPlainObject(key)) {
each(key, (k, v) => this.attr(k, v)); each(key, (k, v) => this.attr(k, v));
return; return;
} }
if (isNotNull(value)) { if (isNotNull(value)) {
return this.options[key] = value; this.options[key] = value;
} }
return this.options[key]; return this.options[key];
} }
@ -729,7 +737,7 @@ export class Widget extends OB {
} }
__d() { __d() {
each(this._children, function (i, widget) { each(this._children, (i, widget) => {
widget && widget._unMount && widget._unMount(); widget && widget._unMount && widget._unMount();
}); });
this._children = {}; this._children = {};
@ -747,7 +755,6 @@ export class Widget extends OB {
this.destroyed = null; this.destroyed = null;
this._isDestroyed = true; this._isDestroyed = true;
// this._purgeRef(); // 清除ref的时机还是要仔细考虑一下 // this._purgeRef(); // 清除ref的时机还是要仔细考虑一下
} }
_unMount() { _unMount() {
@ -767,7 +774,7 @@ export class Widget extends OB {
_empty () { _empty () {
this._assetMounted(); this._assetMounted();
each(this._children, function (i, widget) { each(this._children, (i, widget) => {
widget && widget._unMount && widget._unMount(); widget && widget._unMount && widget._unMount();
}); });
this._children = {}; this._children = {};
@ -801,9 +808,9 @@ export class Widget extends OB {
// this.purgeListeners(); // this.purgeListeners();
// 去掉组件绑定的watcher // 去掉组件绑定的watcher
each(this._watchers, function (i, unwatches) { each(this._watchers, (i, unwatches) => {
unwatches = isArray(unwatches) ? unwatches : [unwatches]; unwatches = isArray(unwatches) ? unwatches : [unwatches];
each(unwatches, function (j, unwatch) { each(unwatches, (j, unwatch) => {
unwatch(); unwatch();
}); });
}); });
@ -839,7 +846,7 @@ export class Widget extends OB {
this._purgeRef(); this._purgeRef();
this.purgeListeners(); this.purgeListeners();
} }
}; }
let context = null, current = null; let context = null, current = null;
const contextStack = [], currentStack = []; const contextStack = [], currentStack = [];
@ -882,35 +889,42 @@ export function useStore(_store) {
} }
if (current) { if (current) {
const currentStore = current._store; const currentStore = current._store;
let delegate = {}, origin; const delegate = {};
let origin;
if (_global.Proxy) { if (_global.Proxy) {
const proxy = new Proxy(delegate, { const proxy = new Proxy(delegate, {
get: function (target, key) { get (target, key) {
return Reflect.get(origin, key); return Reflect.get(origin, key);
}, },
set: function (target, key, value) { set (target, key, value) {
return Reflect.set(origin, key, value); return Reflect.set(origin, key, value);
} },
}); });
current._store = function () { current._store = function () {
origin = (_store || currentStore).apply(this, arguments); origin = (_store || currentStore).apply(this, arguments);
delegate.$delegate = origin; delegate.$delegate = origin;
return origin; return origin;
}; };
return current.$storeDelegate = proxy; current.$storeDelegate = proxy;
return current.$storeDelegate;
} }
current._store = function () { current._store = function () {
const st = (_store || currentStore).apply(this, arguments); const st = (_store || currentStore).apply(this, arguments);
extend(delegate, st); extend(delegate, st);
return st; return st;
}; };
return current.$storeDelegate = delegate; current.$storeDelegate = delegate;
return current.$storeDelegate;
} }
} }
export function useContext(inject) { export function useContext(inject) {
// 通过组件找最近的store // 通过组件找最近的store
const vm = Widget.findStore(Widget.current || Widget.context); let vm = Widget.findStore(Widget.current || Widget.context);
if (vm) { if (vm) {
if (inject) { if (inject) {
if (vm.$$computed && inject in vm.$$computed) { if (vm.$$computed && inject in vm.$$computed) {
@ -928,9 +942,11 @@ export function useContext(inject) {
} }
vm = vm._parent; vm = vm._parent;
} }
return null; return null;
} }
} }
return vm; return vm;
} }
@ -949,18 +965,19 @@ export function watch(vm, watch, handler) {
if (isArray(handler)) { if (isArray(handler)) {
for (let i = 0; i < handler.length; i++) { for (let i = 0; i < handler.length; i++) {
watchers.push(Fix.watch(vm.model, key, innerHandler, { watchers.push(Fix.watch(vm.model, key, innerHandler, {
store: vm store: vm,
})); }));
} }
} else { } else {
watchers.push(Fix.watch(vm.model, key, innerHandler, { watchers.push(Fix.watch(vm.model, key, innerHandler, {
store: vm store: vm,
})); }));
} }
} }
// vm中一定有_widget // vm中一定有_widget
Widget.current._watchers || (Widget.current._watchers = []); Widget.current._watchers || (Widget.current._watchers = []);
Widget.current._watchers = Widget.current._watchers.concat(watchers); Widget.current._watchers = Widget.current._watchers.concat(watchers);
return; return;
} }
handler = watch; handler = watch;
@ -974,6 +991,7 @@ export function onBeforeMount(beforeMount) {
if (current) { if (current) {
if (current.__isMounting) { if (current.__isMounting) {
beforeMount(); beforeMount();
return; return;
} }
if (!current.beforeMount) { if (!current.beforeMount) {
@ -989,6 +1007,7 @@ export function onMounted(mounted) {
if (current) { if (current) {
if (current._isMounted && !this.__async) { if (current._isMounted && !this.__async) {
mounted(); mounted();
return; return;
} }
if (!current.mounted) { if (!current.mounted) {
@ -998,7 +1017,7 @@ export function onMounted(mounted) {
} }
current.mounted.push(mounted); current.mounted.push(mounted);
} }
}; }
export function onBeforeUnmount(beforeDestroy) { export function onBeforeUnmount(beforeDestroy) {
if (current) { if (current) {
@ -1026,7 +1045,7 @@ Widget.registerRenderEngine = function (engine) {
Widget._renderEngine = engine; Widget._renderEngine = engine;
}; };
Widget.registerRenderEngine({ Widget.registerRenderEngine({
createElement: function (widget) { createElement (widget) {
if (isWidget(widget)) { if (isWidget(widget)) {
const o = widget.options; const o = widget.options;
if (o.element) { if (o.element) {
@ -1035,13 +1054,15 @@ Widget.registerRenderEngine({
if (o.tagName) { if (o.tagName) {
return BI.$(document.createElement(o.tagName)); return BI.$(document.createElement(o.tagName));
} }
return BI.$(document.createDocumentFragment()); return BI.$(document.createDocumentFragment());
} }
return BI.$(widget); return BI.$(widget);
}, },
createFragment: function () { createFragment () {
return document.createDocumentFragment(); return document.createDocumentFragment();
} },
}); });
export function mount(widget, container, predicate, hydrate) { export function mount(widget, container, predicate, hydrate) {
@ -1049,8 +1070,8 @@ export function mount(widget, container, predicate, hydrate) {
// 将widget的element元素都挂载好,并建立相互关系 // 将widget的element元素都挂载好,并建立相互关系
widget.element.data("__widgets", [widget]); widget.element.data("__widgets", [widget]);
const res = widget._mount(true, false, false, function (w) { const res = widget._mount(true, false, false, function (w) {
each(w._children, function (i, child) { each(w._children, (i, child) => {
const ws = child.element.data("__widgets"); let ws = child.element.data("__widgets");
if (!ws) { if (!ws) {
ws = []; ws = [];
} }
@ -1063,19 +1084,21 @@ export function mount(widget, container, predicate, hydrate) {
const c = Widget._renderEngine.createElement; const c = Widget._renderEngine.createElement;
BI.DOM.patchProps(widget.element, c(c(container).children()[0])); BI.DOM.patchProps(widget.element, c(c(container).children()[0]));
const triggerLifeHook = function (w) { const triggerLifeHook = w => {
w.beforeMount && w.beforeMount(); w.beforeMount && w.beforeMount();
w.mounted && w.mounted(); w.mounted && w.mounted();
each(w._children, function (i, child) { each(w._children, (i, child) => {
triggerLifeHook(child); triggerLifeHook(child);
}); });
}; };
// 最后触发组件树生命周期函数 // 最后触发组件树生命周期函数
triggerLifeHook(widget); triggerLifeHook(widget);
return res; return res;
} }
if (container) { if (container) {
Widget._renderEngine.createElement(container).append(widget.element); Widget._renderEngine.createElement(container).append(widget.element);
} }
return widget._mount(true, false, false, predicate); return widget._mount(true, false, false, predicate);
} }

201
src/core/5.inject.js

@ -1,19 +1,19 @@
import { isFunction, isNull, isNotNull, isArray, each, isWidget, extend, init, isEmpty, remove } from "./2.base"; import { isFunction, isNull, isNotNull, isArray, each, isWidget, extend, init, isEmpty, remove } from "./2.base";
import { OB } from "./3.ob"; import { OB } from "./3.ob";
import { Widget } from "./4.widget" import { Widget } from "./4.widget";
let moduleInjection = {}, moduleInjectionMap = { const moduleInjection = {}, moduleInjectionMap = {
components: {}, components: {},
constants: {}, constants: {},
stores: {}, stores: {},
services: {}, services: {},
models: {}, models: {},
providers: {} providers: {},
}; };
export function module(xtype, cls) { export function module(xtype, cls) {
if (moduleInjection[xtype] != null) { if (isNotNull(moduleInjection[xtype])) {
_global.console && console.error("module: [" + xtype + "] 已经注册过了"); _global.console && console.error(`module: [${xtype}] 已经注册过了`);
} else { } else {
if (isFunction(cls)) { if (isFunction(cls)) {
cls = cls(); cls = cls();
@ -29,7 +29,7 @@ export function module(xtype, cls) {
} }
moduleInjectionMap[k][key].push({ moduleInjectionMap[k][key].push({
version: cls[k][key], version: cls[k][key],
moduleId: xtype moduleId: xtype,
}); });
} }
} }
@ -40,10 +40,10 @@ export function module(xtype, cls) {
return () => Modules.getModule(xtype); return () => Modules.getModule(xtype);
} }
let constantInjection = {}; const constantInjection = {};
export function constant(xtype, cls) { export function constant(xtype, cls) {
if (constantInjection[xtype] != null) { if (isNotNull(constantInjection[xtype])) {
_global.console && console.error("constant: [" + xtype + "]已经注册过了"); _global.console && console.error(`constant: [${xtype}]已经注册过了`);
} else { } else {
constantInjection[xtype] = cls; constantInjection[xtype] = cls;
} }
@ -51,60 +51,60 @@ export function constant(xtype, cls) {
return () => Constants.getConstant(xtype); return () => Constants.getConstant(xtype);
} }
let modelInjection = {}; const modelInjection = {};
export function model(xtype, cls) { export function model(xtype, cls) {
if (modelInjection[xtype] != null) { if (isNotNull(modelInjection[xtype])) {
_global.console && console.error("model: [" + xtype + "] 已经注册过了"); _global.console && console.error(`model: [${xtype}] 已经注册过了`);
} else { } else {
modelInjection[xtype] = cls; modelInjection[xtype] = cls;
} }
return (config) => Models.getModel(xtype, config); return config => Models.getModel(xtype, config);
} }
let storeInjection = {}; const storeInjection = {};
export function store(xtype, cls) { export function store(xtype, cls) {
if (storeInjection[xtype] != null) { if (isNotNull(storeInjection[xtype])) {
_global.console && console.error("store: [" + xtype + "] 已经注册过了"); _global.console && console.error(`store: [${xtype}] 已经注册过了`);
} else { } else {
storeInjection[xtype] = cls; storeInjection[xtype] = cls;
} }
return (config) => Stores.getStore(xtype, config); return config => Stores.getStore(xtype, config);
} }
let serviceInjection = {}; const serviceInjection = {};
export function service(xtype, cls) { export function service(xtype, cls) {
if (serviceInjection[xtype] != null) { if ((serviceInjection[xtype])) {
_global.console && console.error("service: [" + xtype + "] 已经注册过了"); _global.console && console.error(`service: [${xtype}] 已经注册过了`);
} }
serviceInjection[xtype] = cls; serviceInjection[xtype] = cls;
return (config) => Services.getService(xtype, config); return config => Services.getService(xtype, config);
} }
let providerInjection = {}; const providerInjection = {};
export function provider(xtype, cls) { export function provider(xtype, cls) {
if (providerInjection[xtype] != null) { if ((providerInjection[xtype])) {
_global.console && console.error("provider: [" + xtype + "] 已经注册过了"); _global.console && console.error(`provider: [${xtype}] 已经注册过了`);
} else { } else {
providerInjection[xtype] = cls; providerInjection[xtype] = cls;
} }
return (config) => Providers.getProvider(xtype, config); return config => Providers.getProvider(xtype, config);
} }
let configFunctions = OB.configFunctions = {}; const configFunctions = OB.configFunctions = {};
const runConfigFunction = function (type, configFn) { const runConfigFunction = (type, configFn) => {
if (!type || !configFunctions[type]) { if (!type || !configFunctions[type]) {
return false; return false;
} }
let queue = []; let queue = [];
if (configFn) { if (configFn) {
queue = configFunctions[type].filter((conf) => conf.fn === configFn); queue = configFunctions[type].filter(conf => conf.fn === configFn);
configFunctions[type] = configFunctions[type].filter((conf) => conf.fn !== configFn); configFunctions[type] = configFunctions[type].filter(conf => conf.fn !== configFn);
} else { } else {
queue = configFunctions[type]; queue = configFunctions[type];
delete configFunctions[type]; delete configFunctions[type];
@ -140,7 +140,7 @@ const runConfigFunction = function (type, configFn) {
} }
} }
if (findVersion === true) { if (findVersion === true) {
_global.console && console.error("moduleId: [" + module.moduleId + "] 接口: [" + type + "] 接口版本: [" + version + "] 已过期,版本要求为:", dependencies[module.moduleId], "=>", moduleInjection[module.moduleId]); _global.console && console.error(`moduleId: [${module.moduleId}] 接口: [${type}] 接口版本: [${version}] 已过期,版本要求为:`, dependencies[module.moduleId], "=>", moduleInjection[module.moduleId]);
continue; continue;
} }
} }
@ -179,6 +179,7 @@ export function config(type, configFn, opt) {
if (providerInstance[type]) { if (providerInstance[type]) {
delete providerInstance[type]; delete providerInstance[type];
} }
return configFn(providers[type]); return configFn(providers[type]);
} }
@ -187,7 +188,7 @@ export function config(type, configFn, opt) {
} }
configFunctions[type].push({ configFunctions[type].push({
fn: configFn, fn: configFn,
opt: opt opt,
}); });
if (opt.immediately) { if (opt.immediately) {
@ -199,28 +200,30 @@ export function getReference(type, fn) {
return BI.Plugin.registerObject(type, fn); return BI.Plugin.registerObject(type, fn);
} }
let actions = {}; const actions = {};
let globalAction = []; const globalAction = [];
export function action(type, actionFn) { export function action(type, actionFn) {
if (isFunction(type)) { if (isFunction(type)) {
globalAction.push(type); globalAction.push(type);
return () => { return () => {
remove(globalAction, (idx) => globalAction.indexOf(actionFn) === idx); remove(globalAction, idx => globalAction.indexOf(actionFn) === idx);
}; };
} }
if (!actions[type]) { if (!actions[type]) {
actions[type] = []; actions[type] = [];
} }
actions[type].push(actionFn); actions[type].push(actionFn);
return () => { return () => {
remove(actions[type], (idx) => actions[type].indexOf(actionFn) === idx); remove(actions[type], idx => actions[type].indexOf(actionFn) === idx);
if (actions[type].length === 0) { if (actions[type].length === 0) {
delete actions[type]; delete actions[type];
} }
}; };
} }
let points = {}; const points = {};
export function point(type, action, pointFn, after) { export function point(type, action, pointFn, after) {
if (!points[type]) { if (!points[type]) {
points[type] = {}; points[type] = {};
@ -235,35 +238,37 @@ export function point(type, action, pointFn, after) {
} }
export const Modules = { export const Modules = {
getModule: function (type) { getModule (type) {
if (!moduleInjection[type]) { if (!moduleInjection[type]) {
_global.console && console.error("module: [" + type + "] 未定义"); _global.console && console.error(`module: [${type}] 未定义`);
} }
return moduleInjection[type]; return moduleInjection[type];
}, },
getAllModules: function () { getAllModules () {
return moduleInjection; return moduleInjection;
} },
} };
export const Constants = { export const Constants = {
getConstant: function (type) { getConstant (type) {
if (isNull(constantInjection[type])) { if (isNull(constantInjection[type])) {
_global.console && console.error("constant: [" + type + "] 未定义"); _global.console && console.error(`constant: [${type}] 未定义`);
} }
runConfigFunction(type); runConfigFunction(type);
return isFunction(constantInjection[type]) ? constantInjection[type]() : constantInjection[type]; return isFunction(constantInjection[type]) ? constantInjection[type]() : constantInjection[type];
} },
} };
const callPoint = function (inst, types) { function callPoint(inst, types) {
types = isArray(types) ? types : [types]; types = isArray(types) ? types : [types];
each(types, (idx, type) => { each(types, (idx, type) => {
if (points[type]) { if (points[type]) {
for (const action in points[type]) { for (const action in points[type]) {
let bfns = points[type][action].before; const bfns = points[type][action].before;
if (bfns) { if (bfns) {
BI.aspect.before(inst, action, function (bfns) { BI.aspect.before(inst, action, (function (bfns) {
return function () { return function () {
for (let i = 0, len = bfns.length; i < len; i++) { for (let i = 0, len = bfns.length; i < len; i++) {
try { try {
@ -273,11 +278,11 @@ const callPoint = function (inst, types) {
} }
} }
}; };
}(bfns)); }(bfns)));
} }
let afns = points[type][action].after; const afns = points[type][action].after;
if (afns) { if (afns) {
BI.aspect.after(inst, action, function (afns) { BI.aspect.after(inst, action, (function (afns) {
return function () { return function () {
for (let i = 0, len = afns.length; i < len; i++) { for (let i = 0, len = afns.length; i < len; i++) {
try { try {
@ -287,66 +292,69 @@ const callPoint = function (inst, types) {
} }
} }
}; };
}(afns)); }(afns)));
} }
} }
} }
}); });
}; }
export const Models = { export const Models = {
getModel: function (type, config) { getModel (type, config) {
if (!modelInjection[type]) { if (!modelInjection[type]) {
_global.console && console.error("model: [" + type + "] 未定义"); _global.console && console.error(`model: [${type}] 未定义`);
} }
runConfigFunction(type); runConfigFunction(type);
var inst = new modelInjection[type](config); const inst = new modelInjection[type](config);
inst._constructor && inst._constructor(config); inst._constructor && inst._constructor(config);
inst.mixins && callPoint(inst, inst.mixins); inst.mixins && callPoint(inst, inst.mixins);
callPoint(inst, type); callPoint(inst, type);
return inst; return inst;
} },
} };
let stores = {}; const stores = {};
export const Stores = { export const Stores = {
getStore: function (type, config) { getStore (type, config) {
if (!storeInjection[type]) { if (!storeInjection[type]) {
_global.console && console.error("store: [" + type + "] 未定义"); _global.console && console.error(`store: [${type}] 未定义`);
} }
if (stores[type]) { if (stores[type]) {
return stores[type]; return stores[type];
} }
const inst = stores[type] = new storeInjection[type](config); const inst = stores[type] = new storeInjection[type](config);
inst._constructor && inst._constructor(config, function () { inst._constructor && inst._constructor(config, () => {
delete stores[type]; delete stores[type];
}); });
callPoint(inst, type); callPoint(inst, type);
return inst; return inst;
} },
} };
let services = {}; const services = {};
export const Services = { export const Services = {
getService: (type, config) => { getService: (type, config) => {
if (!serviceInjection[type]) { if (!serviceInjection[type]) {
_global.console && console.error("service: [" + type + "] 未定义"); _global.console && console.error(`service: [${type}] 未定义`);
} }
if (services[type]) { if (services[type]) {
return services[type]; return services[type];
} }
services[type] = new serviceInjection[type](config); services[type] = new serviceInjection[type](config);
callPoint(services[type], type); callPoint(services[type], type);
return services[type]; return services[type];
} },
} };
let providers = {}, const providers = {},
providerInstance = {}; providerInstance = {};
export const Providers = { export const Providers = {
getProvider: (type, config) => { getProvider: (type, config) => {
if (!providerInjection[type]) { if (!providerInjection[type]) {
_global.console && console.error("provider: [" + type + "] 未定义"); _global.console && console.error(`provider: [${type}] 未定义`);
} }
runConfigFunction(type); runConfigFunction(type);
if (!providers[type]) { if (!providers[type]) {
@ -355,12 +363,13 @@ export const Providers = {
if (!providerInstance[type] && providers[type].$get) { if (!providerInstance[type] && providers[type].$get) {
providerInstance[type] = new (providers[type].$get())(config); providerInstance[type] = new (providers[type].$get())(config);
} }
return providerInstance[type]; return providerInstance[type];
} },
} };
export const Actions = { export const Actions = {
runAction: function (type, event, config) { runAction (type, event, config) {
each(actions[type], (i, act) => { each(actions[type], (i, act) => {
try { try {
act(event, config); act(event, config);
@ -369,38 +378,38 @@ export const Actions = {
} }
}); });
}, },
runGlobalAction: function () { runGlobalAction () {
var args = [].slice.call(arguments); const args = [].slice.call(arguments);
each(globalAction, (i, act) => { each(globalAction, (i, act) => {
try { try {
act.apply(null, args); act(...args);
} catch (e) { } catch (e) {
_global.console && console.error(e); _global.console && console.error(e);
} }
}); });
} },
} };
let kv = {}; const kv = {};
export function shortcut(xtype, cls) { export function shortcut(xtype, cls) {
if (kv[xtype] != null) { if (isNotNull(kv[xtype])) {
_global.console && console.error("组件: [" + xtype + "] 已经注册过了"); _global.console && console.error(`组件: [${xtype}] 已经注册过了`);
} }
if (cls) { if (cls) {
cls["xtype"] = xtype; cls.xtype = xtype;
} }
kv[xtype] = cls; kv[xtype] = cls;
} }
// 根据配置属性生成widget // 根据配置属性生成widget
const createRealWidget = function (config, context, lazy) { const createRealWidget = (config, context, lazy) => {
const cls = isFunction(config.type) ? config.type : kv[config.type]; const Cls = isFunction(config.type) ? config.type : kv[config.type];
if (!cls) { if (!Cls) {
throw new Error("组件: [" + config.type + "] 未定义"); throw new Error(`组件: [${config.type}] 未定义`);
} }
let pushed = false; let pushed = false;
const widget = new cls(); const widget = new Cls();
widget._context = Widget.context || context; widget._context = Widget.context || context;
if (!Widget.context && context) { if (!Widget.context && context) {
pushed = true; pushed = true;
@ -414,6 +423,7 @@ const createRealWidget = function (config, context, lazy) {
widget._lazyConstructor(); widget._lazyConstructor();
// } // }
pushed && Widget.popContext(); pushed && Widget.popContext();
return widget; return widget;
}; };
@ -426,15 +436,15 @@ export function createWidget(item, options, context, lazy) {
options || (options = {}); options || (options = {});
} }
var el, w; let el, w;
if (item.type || options.type) { if (item.type || options.type) {
el = extend({}, options, item); el = extend({}, options, item);
} else if (item.el && (item.el.type || options.type)) { } else if (item.el && (item.el.type || options.type)) {
el = extend({}, options, item.el); el = extend({}, options, item.el);
} }
let elType;
if (el) { if (el) {
var elType = (el.type && el.type.xtype) || el.type; elType = (el.type && el.type.xtype) || el.type;
runConfigFunction(elType); runConfigFunction(elType);
} }
@ -443,7 +453,7 @@ export function createWidget(item, options, context, lazy) {
if (isEmpty(item) && isEmpty(options)) { if (isEmpty(item) && isEmpty(options)) {
return createWidget({ return createWidget({
type: "bi.layout" type: "bi.layout",
}); });
} }
if (isWidget(item)) { if (isWidget(item)) {
@ -451,7 +461,7 @@ export function createWidget(item, options, context, lazy) {
} }
if (el) { if (el) {
w = BI.Plugin.getWidget(elType, el); w = BI.Plugin.getWidget(elType, el);
var wType = (w.type && w.type.xtype) || w.type; const wType = (w.type && w.type.xtype) || w.type;
if (wType === elType) { if (wType === elType) {
if (BI.Plugin.hasObject(elType)) { if (BI.Plugin.hasObject(elType)) {
if (!w.listeners || isArray(w.listeners)) { if (!w.listeners || isArray(w.listeners)) {
@ -459,7 +469,7 @@ export function createWidget(item, options, context, lazy) {
eventName: BI.Events.MOUNT, eventName: BI.Events.MOUNT,
action: () => { action: () => {
BI.Plugin.getObject(elType, this); BI.Plugin.getObject(elType, this);
} },
}]); }]);
} else { } else {
w.listeners[BI.Events.MOUNT] = [ w.listeners[BI.Events.MOUNT] = [
@ -469,8 +479,10 @@ export function createWidget(item, options, context, lazy) {
].concat(w.listeners[BI.Events.MOUNT] || []); ].concat(w.listeners[BI.Events.MOUNT] || []);
} }
} }
return createRealWidget(w, context, lazy); return createRealWidget(w, context, lazy);
} }
return createWidget(w, options, context, lazy); return createWidget(w, options, context, lazy);
} }
if (isWidget(item.el)) { if (isWidget(item.el)) {
@ -485,6 +497,7 @@ export function _lazyCreateWidget (item, options, context) {
export function createElement() { export function createElement() {
const widget = createWidget.apply(this, arguments); const widget = createWidget.apply(this, arguments);
return widget.element; return widget.element;
} }
@ -504,5 +517,5 @@ export function getResource(type, config) {
if (providerInjection[type]) { if (providerInjection[type]) {
return Providers.getProvider(type, config); return Providers.getProvider(type, config);
} }
throw new Error("未知类型: [" + type + "] 未定义"); throw new Error(`未知类型: [${type}] 未定义`);
} }

6
src/core/index.js

@ -22,13 +22,13 @@ export * from "./controller";
export * from "./func"; export * from "./func";
// 有了后删掉 // 有了后删掉
export const emptyFn = () => { } export const emptyFn = () => { };
export { export {
StyleLoaderManager, StyleLoaderManager,
ShowListener, ShowListener,
shortcut, shortcut
} };
Object.assign(BI, { Object.assign(BI, {
...base, ...base,

Loading…
Cancel
Save