Browse Source

无JIRA任务 chore: 补充eslint规则

es6
Zhenfei.Li 2 years ago
parent
commit
4e2a41bfb7
  1. 8
      .eslintrc
  2. 310
      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"],

310
src/core/2.base.js

@ -3,28 +3,29 @@
* Create By GUY 2014\11\17 * Create By GUY 2014\11\17
* *
*/ */
var traverse = function (func, context) { function traverse (func, context) {
return function (value, key, obj) { return function (value, key, obj) {
return func.call(context, key, value, obj); return func.call(context, key, value, obj);
}; };
}; }
var _apply = function (name) { function _apply(name) {
return function () { return function () {
return BI._[name].apply(BI._, arguments); return BI._[name](...arguments);
};
}; };
var _applyFunc = function (name) { }
function _applyFunc(name) {
return function () { return function () {
var args = Array.prototype.slice.call(arguments, 0); const args = Array.prototype.slice.call(arguments, 0);
args[1] = BI._.isFunction(args[1]) ? traverse(args[1], args[2]) : args[1]; args[1] = BI._.isFunction(args[1]) ? traverse(args[1], args[2]) : args[1];
return BI._[name].apply(BI._, args);
}; return BI._[name](...args);
}; };
}
export function assert(v, is) { export function assert(v, is) {
if (isFunction(is)) { if (isFunction(is)) {
if (!is(v)) { if (!is(v)) {
throw new Error(v + " error"); throw new Error(`${v} error`);
} else { } else {
return true; return true;
} }
@ -33,8 +34,9 @@ export function assert(v, is) {
is = [is]; is = [is];
} }
if (!deepContains(is, v)) { if (!deepContains(is, v)) {
throw new Error(v + " error"); throw new Error(`${v} error`);
} }
return true; return true;
} }
@ -43,12 +45,13 @@ export function warn(message) {
} }
export function UUID() { export function UUID() {
var f = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]; const f = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
var str = ""; let str = "";
for (var i = 0; i < 16; i++) { for (let i = 0; i < 16; i++) {
var r = _global.parseInt(f.length * Math.random(), 10); const r = _global.parseInt(f.length * Math.random(), 10);
str += f[r]; str += f[r];
} }
return str; return str;
} }
@ -66,58 +69,60 @@ export function createWidgets(items, options, context) {
} else { } else {
options || (options = {}); options || (options = {});
} }
return map(flatten(items), function (i, item) {
return BI.createWidget(item, deepClone(options), context); return map(flatten(items), (i, item) => BI.createWidget(item, deepClone(options), context));
});
} }
export function createItems(data, innerAttr, outerAttr) { export function createItems(data, innerAttr, outerAttr) {
innerAttr = isArray(innerAttr) ? innerAttr : makeArray(flatten(data).length, innerAttr || {}); innerAttr = isArray(innerAttr) ? innerAttr : makeArray(flatten(data).length, innerAttr || {});
outerAttr = isArray(outerAttr) ? outerAttr : makeArray(flatten(data).length, outerAttr || {}); outerAttr = isArray(outerAttr) ? outerAttr : makeArray(flatten(data).length, outerAttr || {});
return map(data, function (i, item) {
return map(data, (i, item) => {
if (isArray(item)) { if (isArray(item)) {
return createItems(item, innerAttr, outerAttr); return createItems(item, innerAttr, outerAttr);
} }
if (item instanceof BI.Widget) { if (item instanceof BI.Widget) {
return extend({}, innerAttr.shift(), outerAttr.shift(), { return extend({}, innerAttr.shift(), outerAttr.shift(), {
type: null, type: null,
el: item el: item,
}); });
} }
if (innerAttr[0] instanceof BI.Widget) { if (innerAttr[0] instanceof BI.Widget) {
outerAttr.shift(); outerAttr.shift();
return extend({}, item, { return extend({}, item, {
el: innerAttr.shift() el: innerAttr.shift(),
}); });
} }
if (item.el instanceof BI.Widget) { if (item.el instanceof BI.Widget) {
innerAttr.shift(); innerAttr.shift();
return extend({}, outerAttr.shift(), { type: null }, item); return extend({}, outerAttr.shift(), { type: null }, item);
} }
if (item.el) { if (item.el) {
return extend({}, outerAttr.shift(), item, { return extend({}, outerAttr.shift(), item, {
el: extend({}, innerAttr.shift(), item.el) el: extend({}, innerAttr.shift(), item.el),
}); });
} }
return extend({}, outerAttr.shift(), { return extend({}, outerAttr.shift(), {
el: extend({}, innerAttr.shift(), item) el: extend({}, innerAttr.shift(), item),
}); });
}); });
} }
// 用容器包装items // 用容器包装items
export function packageItems(items, layouts) { export function packageItems(items, layouts) {
for (var i = layouts.length - 1; i >= 0; i--) { for (let i = layouts.length - 1; i >= 0; i--) {
items = map(items, function (k, it) { items = map(items, (k, it) => extend({}, layouts[i], {
return extend({}, layouts[i], {
items: [ items: [
extend({}, layouts[i].el, { extend({}, layouts[i].el, {
el: it el: it,
}) })
] ],
}); }));
});
} }
return items; return items;
} }
@ -125,8 +130,9 @@ export function formatEL(obj) {
if (obj && !obj.type && obj.el) { if (obj && !obj.type && obj.el) {
return obj; return obj;
} }
return { return {
el: obj el: obj,
}; };
} }
@ -140,13 +146,13 @@ export function trans2Element(widgets) {
} }
// 集合相关方法 // 集合相关方法
BI._.each(["where", "findWhere", "invoke", "pluck", "shuffle", "sample", "toArray", "size"], function (name) { BI._.each(["where", "findWhere", "invoke", "pluck", "shuffle", "sample", "toArray", "size"], name => {
BI[name] = _apply(name); BI[name] = _apply(name);
}); });
BI._.each([ BI._.each([
"get", "set", "each", "map", "reduce", "reduceRight", "find", "filter", "reject", "every", "all", "some", "any", "max", "min", "get", "set", "each", "map", "reduce", "reduceRight", "find", "filter", "reject", "every", "all", "some", "any", "max", "min",
"sortBy", "groupBy", "indexBy", "countBy", "partition", "clamp" "sortBy", "groupBy", "indexBy", "countBy", "partition", "clamp"
], function (name) { ], name => {
if (name === "any") { if (name === "any") {
BI[name] = _applyFunc("some"); BI[name] = _applyFunc("some");
} else { } else {
@ -185,12 +191,13 @@ export const clamp = BI.clamp;
// 数数 // 数数
export function count(from, to, predicate) { export function count(from, to, predicate) {
var t; let t;
if (predicate) { if (predicate) {
for (t = from; t < to; t++) { for (t = from; t < to; t++) {
predicate(t); predicate(t);
} }
} }
return to - from; return to - from;
} }
@ -201,45 +208,51 @@ export function inverse(from, to, predicate) {
export function firstKey(obj) { export function firstKey(obj) {
let res = undefined; let res = undefined;
any(obj, function (key, value) { any(obj, (key, value) => {
res = key; res = key;
return true; return true;
}); });
return res; return res;
} }
export function lastKey(obj) { export function lastKey(obj) {
let res = undefined; let res = undefined;
each(obj, function (key, value) { each(obj, (key, value) => {
res = key; res = key;
return true; return true;
}); });
return res; return res;
} }
export function firstObject(obj) { export function firstObject(obj) {
let res = undefined; let res = undefined;
any(obj, function (key, value) { any(obj, (key, value) => {
res = value; res = value;
return true; return true;
}); });
return res; return res;
} }
export function lastObject(obj) { export function lastObject(obj) {
let res = undefined; let res = undefined;
each(obj, function (key, value) { each(obj, (key, value) => {
res = value; res = value;
return true; return true;
}); });
return res; return res;
} }
export function concat(obj1, obj2) { export function concat(obj1, obj2) {
if (isKey(obj1)) { if (isKey(obj1)) {
return map([].slice.apply(arguments), function (idx, v) { return map([].slice.apply(arguments), (idx, v) => v).join("");
return v;
}).join("");
} }
if (isArray(obj1)) { if (isArray(obj1)) {
return BI._.concat.apply([], arguments); return BI._.concat.apply([], arguments);
@ -254,6 +267,7 @@ export function backEach(obj, predicate, context) {
for (let index = obj.length - 1; index >= 0; index--) { for (let index = obj.length - 1; index >= 0; index--) {
predicate(index, obj[index], obj); predicate(index, obj[index], obj);
} }
return false; return false;
} }
@ -264,6 +278,7 @@ export function backAny(obj, predicate, context) {
return true; return true;
} }
} }
return false; return false;
} }
@ -274,12 +289,14 @@ export function backEvery(obj, predicate, context) {
return false; return false;
} }
} }
return true; return true;
} }
export function backFindKey(obj, predicate, context) { export function backFindKey(obj, predicate, context) {
predicate = iteratee(predicate, context); predicate = iteratee(predicate, context);
let objKeys = keys(obj), key; const objKeys = keys(obj);
let key;
for (let i = objKeys.length - 1; i >= 0; i--) { for (let i = objKeys.length - 1; i >= 0; i--) {
key = objKeys[i]; key = objKeys[i];
if (predicate(obj[key], key, obj)) { if (predicate(obj[key], key, obj)) {
@ -311,7 +328,7 @@ export function remove(obj, target, context) {
} }
} }
} else { } else {
each(obj, function (i, v) { each(obj, (i, v) => {
if ((targetIsFunction && (target === obj[i] || target.apply(context, [i, obj[i]]) === true)) || (!targetIsFunction && contains(target, obj[i]))) { if ((targetIsFunction && (target === obj[i] || target.apply(context, [i, obj[i]]) === true)) || (!targetIsFunction && contains(target, obj[i]))) {
delete obj[i]; delete obj[i];
} }
@ -321,7 +338,8 @@ export function remove(obj, target, context) {
export function removeAt(obj, index) { export function removeAt(obj, index) {
index = isArray(index) ? index : [index]; index = isArray(index) ? index : [index];
let objIsArray = isArray(obj), i; const objIsArray = isArray(obj);
let i;
for (i = 0; i < index.length; i++) { for (i = 0; i < index.length; i++) {
if (objIsArray) { if (objIsArray) {
obj[index[i]] = "$deleteIndex"; obj[index[i]] = "$deleteIndex";
@ -343,13 +361,15 @@ export function array2String(array) {
} }
export function abc2Int(string) { export function abc2Int(string) {
let idx = 0, start = "A", str = string.toUpperCase(); let idx = 0;
const start = "A", str = string.toUpperCase();
for (let i = 0, len = str.length; i < len; ++i) { for (let i = 0, len = str.length; i < len; ++i) {
idx = str.charAt(i).charCodeAt(0) - start.charCodeAt(0) + 26 * idx + 1; idx = str.charAt(i).charCodeAt(0) - start.charCodeAt(0) + 26 * idx + 1;
if (idx > (2147483646 - str.charAt(i).charCodeAt(0) + start.charCodeAt(0)) / 26) { if (idx > (2147483646 - str.charAt(i).charCodeAt(0) + start.charCodeAt(0)) / 26) {
return 0; return 0;
} }
} }
return idx; return idx;
} }
@ -367,6 +387,7 @@ export function int2Abc(num) {
str = DIGITS[t - 1] + str; str = DIGITS[t - 1] + str;
idx = (idx - t) / 26; idx = (idx - t) / 26;
} }
return str; return str;
} }
@ -374,10 +395,10 @@ export function int2Abc(num) {
BI._.each([ BI._.each([
"first", "initial", "last", "rest", "compact", "flatten", "without", "union", "intersection", "first", "initial", "last", "rest", "compact", "flatten", "without", "union", "intersection",
"difference", "zip", "unzip", "object", "indexOf", "lastIndexOf", "sortedIndex", "range", "take", "takeRight", "uniqBy" "difference", "zip", "unzip", "object", "indexOf", "lastIndexOf", "sortedIndex", "range", "take", "takeRight", "uniqBy"
], function (name) { ], name => {
BI[name] = _apply(name); BI[name] = _apply(name);
}); });
BI._.each(["findIndex", "findLastIndex"], function (name) { BI._.each(["findIndex", "findLastIndex"], name => {
BI[name] = _applyFunc(name); BI[name] = _applyFunc(name);
}); });
export const first = BI.first; export const first = BI.first;
@ -405,7 +426,7 @@ export const findLastIndex = BI.findLastIndex;
// 构建一个长度为length的数组 // 构建一个长度为length的数组
export function makeArray(length, value) { export function makeArray(length, value) {
let res = []; const res = [];
for (let i = 0; i < length; i++) { for (let i = 0; i < length; i++) {
if (isNull(value)) { if (isNull(value)) {
res.push(i); res.push(i);
@ -413,11 +434,12 @@ export function makeArray(length, value) {
res.push(deepClone(value)); res.push(deepClone(value));
} }
} }
return res; return res;
} }
export function makeObject(array, value) { export function makeObject(array, value) {
let map = {}; const map = {};
for (let i = 0; i < array.length; i++) { for (let i = 0; i < array.length; i++) {
if (isNull(value)) { if (isNull(value)) {
map[array[i]] = array[i]; map[array[i]] = array[i];
@ -427,11 +449,12 @@ export function makeObject(array, value) {
map[array[i]] = deepClone(value); map[array[i]] = deepClone(value);
} }
} }
return map; return map;
} }
export function makeArrayByArray(array, value) { export function makeArrayByArray(array, value) {
let res = []; const res = [];
if (!array) { if (!array) {
return res; return res;
} }
@ -442,11 +465,12 @@ export function makeArrayByArray(array, value) {
res.push(deepClone(value)); res.push(deepClone(value));
} }
} }
return res; return res;
} }
export function uniq(array, isSorted, iteratee, context) { export function uniq(array, isSorted, iteratee, context) {
if (array == null) { if (array === null) {
return []; return [];
} }
if (!isBoolean(isSorted)) { if (!isBoolean(isSorted)) {
@ -455,7 +479,8 @@ export function uniq(array, isSorted, iteratee, context) {
isSorted = false; isSorted = false;
} }
iteratee && (iteratee = traverse(iteratee, context)); iteratee && (iteratee = traverse(iteratee, context));
return uniq.call(BI._, array, isSorted, iteratee, context);
return BI._uniq.call(BI._, array, isSorted, iteratee, context);
} }
// 对象相关方法 // 对象相关方法
@ -464,7 +489,7 @@ BI._.each([
"defaults", "clone", "property", "propertyOf", "matcher", "isEqual", "isMatch", "isEmpty", "defaults", "clone", "property", "propertyOf", "matcher", "isEqual", "isMatch", "isEmpty",
"isElement", "isNumber", "isString", "isArray", "isObject", "isPlainObject", "isArguments", "isFunction", "isFinite", "isElement", "isNumber", "isString", "isArray", "isObject", "isPlainObject", "isArguments", "isFunction", "isFinite",
"isBoolean", "isDate", "isRegExp", "isError", "isNaN", "isUndefined", "zipObject", "cloneDeep" "isBoolean", "isDate", "isRegExp", "isError", "isNaN", "isUndefined", "zipObject", "cloneDeep"
], function (name) { ], name => {
BI[name] = _apply(name); BI[name] = _apply(name);
}); });
export const keys = BI.keys; export const keys = BI.keys;
@ -502,7 +527,7 @@ export const isUndefined = BI.isUndefined;
export const zipObject = BI.zipObject; export const zipObject = BI.zipObject;
export const cloneDeep = BI.cloneDeep; export const cloneDeep = BI.cloneDeep;
BI._.each(["mapObject", "findKey", "pick", "omit", "tap"], function (name) { BI._.each(["mapObject", "findKey", "pick", "omit", "tap"], name => {
BI[name] = _applyFunc(name); BI[name] = _applyFunc(name);
}); });
export const mapObject = BI.mapObject; export const mapObject = BI.mapObject;
@ -512,17 +537,18 @@ export const omit = BI.omit;
export const tap = BI.tap; export const tap = BI.tap;
export function inherit(sp, overrides) { export function inherit(sp, overrides) {
let sb = function () { function sb () {
return sp.apply(this, arguments); return sp.apply(this, arguments);
}; }
let F = function () { function F () {}
}, spp = sp.prototype; const spp = sp.prototype;
F.prototype = spp; F.prototype = spp;
sb.prototype = new F(); sb.prototype = new F();
sb.superclass = spp; sb.superclass = spp;
extend(sb.prototype, overrides, { extend(sb.prototype, overrides, {
superclass: sp superclass: sp,
}); });
return sb; return sb;
} }
@ -542,11 +568,11 @@ export function has(obj, keys) {
if (keys.length === 0) { if (keys.length === 0) {
return false; return false;
} }
return every(keys, function (i, key) {
return BI._.has(obj, key); return every(keys, (i, key) => BI._.has(obj, key));
});
} }
return BI._.has.apply(BI._, arguments);
return BI._.has(...arguments);
} }
export function freeze(value) { export function freeze(value) {
@ -555,6 +581,7 @@ export function freeze(value) {
if (Object.freeze && isObject(value)) { if (Object.freeze && isObject(value)) {
return Object.freeze(value); return Object.freeze(value);
} }
return value; return value;
} }
@ -565,8 +592,9 @@ export function isKey(key) {
// 忽略大小写的等于 // 忽略大小写的等于
export function isCapitalEqual(a, b) { export function isCapitalEqual(a, b) {
a = isNull(a) ? a : ("" + a).toLowerCase(); a = isNull(a) ? a : (`${a}`).toLowerCase();
b = isNull(b) ? b : ("" + b).toLowerCase(); b = isNull(b) ? b : (`${b}`).toLowerCase();
return isEqual(a, b); return isEqual(a, b);
} }
@ -603,7 +631,7 @@ export function isNotEmptyObject(obj) {
} }
export function isWindow(obj) { export function isWindow(obj) {
return obj != null && obj == obj.window; return obj !== null && obj === obj.window;
} }
export function isPromise(obj) { export function isPromise(obj) {
@ -614,8 +642,8 @@ export const deepClone = BI._.cloneDeep;
export const deepExtend = BI._.deepExtend; export const deepExtend = BI._.deepExtend;
export function isDeepMatch(object, attrs) { export function isDeepMatch(object, attrs) {
let attrsKeys = keys(attrs), length = attrsKeys.length; const attrsKeys = keys(attrs), length = attrsKeys.length;
if (object == null) { if (object === null) {
return !length; return !length;
} }
const obj = Object(object); const obj = Object(object);
@ -625,11 +653,13 @@ export function isDeepMatch(object, attrs) {
return false; return false;
} }
} }
return true; return true;
} }
export function contains(obj, target, fromIndex) { export function contains(obj, target, fromIndex) {
if (!BI._.isArrayLike(obj)) obj = values(obj); if (!BI._.isArrayLike(obj)) obj = values(obj);
return indexOf(obj, target, typeof fromIndex === "number" && fromIndex) >= 0; return indexOf(obj, target, typeof fromIndex === "number" && fromIndex) >= 0;
} }
@ -637,6 +667,7 @@ export function deepContains(obj, copy) {
if (isObject(copy)) { if (isObject(copy)) {
return any(obj, (i, v) => isEqual(v, copy)); return any(obj, (i, v) => isEqual(v, copy));
} }
return contains(obj, copy); return contains(obj, copy);
} }
@ -646,6 +677,7 @@ export function deepIndexOf(obj, target) {
return i; return i;
} }
} }
return -1; return -1;
} }
@ -667,35 +699,39 @@ export function deepRemove(obj, target) {
} }
}); });
} }
return done; return done;
} }
export function deepWithout(obj, target) { export function deepWithout(obj, target) {
if (isArray(obj)) { if (isArray(obj)) {
let result = []; const result = [];
for (let i = 0; i < obj.length; i++) { for (let i = 0; i < obj.length; i++) {
if (!isEqual(target, obj[i])) { if (!isEqual(target, obj[i])) {
result.push(obj[i]); result.push(obj[i]);
} }
} }
return result; return result;
} }
let result = {}; const result = {};
each(obj, (i, v) => { each(obj, (i, v) => {
if (!isEqual(target, obj[i])) { if (!isEqual(target, obj[i])) {
result[i] = v; result[i] = v;
} }
}); });
return result; return result;
} }
export function deepUnique(array) { export function deepUnique(array) {
let result = []; const result = [];
each(array, (i, item) => { each(array, (i, item) => {
if (!deepContains(result, item)) { if (!deepContains(result, item)) {
result.push(item); result.push(item);
} }
}); });
return result; return result;
} }
@ -703,9 +739,9 @@ export function deepUnique(array) {
export function deepDiff(object, other) { export function deepDiff(object, other) {
object || (object = {}); object || (object = {});
other || (other = {}); other || (other = {});
let result = []; const result = [];
let used = []; const used = [];
for (let b in object) { for (const b in object) {
if (has(object, b)) { if (has(object, b)) {
if (!isEqual(object[b], other[b])) { if (!isEqual(object[b], other[b])) {
result.push(b); result.push(b);
@ -713,19 +749,18 @@ export function deepDiff(object, other) {
used.push(b); used.push(b);
} }
} }
for (let b in other) { for (const b in other) {
if (has(other, b) && !contains(used, b)) { if (has(other, b) && !contains(used, b)) {
result.push(b); result.push(b);
} }
} }
return result; return result;
} }
// 通用方法 // 通用方法
BI._.each(["uniqueId", "result", "chain", "iteratee", "unescape", "before", "after", "chunk"], function (name) { BI._.each(["uniqueId", "result", "chain", "iteratee", "unescape", "before", "after", "chunk"], name => {
BI[name] = function () { BI[name] = (...args) => BI._[name](...args);
return BI._[name].apply(BI._, arguments);
};
}); });
export const uniqueId = BI.uniqueId; export const uniqueId = BI.uniqueId;
export const result = BI.result; export const result = BI.result;
@ -737,10 +772,8 @@ export const after = BI.after;
export const chunk = BI.chunk; export const chunk = BI.chunk;
// 事件相关方法 // 事件相关方法
BI._.each(["bind", "once", "partial", "debounce", "throttle", "delay", "defer", "wrap"], function (name) { BI._.each(["bind", "once", "partial", "debounce", "throttle", "delay", "defer", "wrap"], name => {
BI[name] = function () { BI[name] = (...args) => BI._[name](...args);
return BI._[name].apply(BI._, arguments);
};
}); });
export const bind = BI.bind; export const bind = BI.bind;
export const once = BI.once; export const once = BI.once;
@ -752,13 +785,13 @@ export const defer = BI.defer;
export const wrap = BI.wrap; export const wrap = BI.wrap;
export const nextTick = (function () { export const nextTick = (function () {
let callbacks = []; const callbacks = [];
let pending = false; let pending = false;
let timerFunc = void 0; let timerFunc = void 0;
function nextTickHandler() { function nextTickHandler() {
pending = false; pending = false;
let copies = callbacks.slice(0); const copies = callbacks.slice(0);
callbacks.length = 0; callbacks.length = 0;
for (let i = 0; i < copies.length; i++) { for (let i = 0; i < copies.length; i++) {
copies[i](); copies[i]();
@ -766,16 +799,16 @@ export const nextTick = (function () {
} }
if (typeof Promise !== "undefined") { if (typeof Promise !== "undefined") {
let p = Promise.resolve(); const p = Promise.resolve();
timerFunc = function timerFunc() { timerFunc = function timerFunc() {
p.then(nextTickHandler); p.then(nextTickHandler);
}; };
} else if (typeof MutationObserver !== "undefined") { } else if (typeof MutationObserver !== "undefined") {
let counter = 1; let counter = 1;
let observer = new MutationObserver(nextTickHandler); const observer = new MutationObserver(nextTickHandler);
let textNode = document.createTextNode(String(counter)); const textNode = document.createTextNode(String(counter));
observer.observe(textNode, { observer.observe(textNode, {
characterData: true characterData: true,
}); });
timerFunc = function timerFunc() { timerFunc = function timerFunc() {
counter = (counter + 1) % 2; counter = (counter + 1) % 2;
@ -794,16 +827,16 @@ export const nextTick = (function () {
return function queueNextTick(cb) { return function queueNextTick(cb) {
let _resolve = void 0; let _resolve = void 0;
let args = [].slice.call(arguments, 1); const args = [].slice.call(arguments, 1);
callbacks.push(function () { callbacks.push(() => {
if (cb) { if (cb) {
try { try {
cb.apply(null, args); cb(...args);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
} else if (_resolve) { } else if (_resolve) {
_resolve.apply(null, args); _resolve(...args);
} }
}); });
if (!pending) { if (!pending) {
@ -811,16 +844,16 @@ export const nextTick = (function () {
timerFunc(); timerFunc();
} }
// $flow-disable-line // $flow-disable-line
if (!cb && typeof Promise !== 'undefined') { if (!cb && typeof Promise !== "undefined") {
return new Promise(function (resolve, reject) { return new Promise(((resolve, reject) => {
_resolve = resolve; _resolve = resolve;
}); }));
} }
}; };
})(); }());
// 数字相关方法 // 数字相关方法
BI._.each(["random"], function (name) { BI._.each(["random"], name => {
BI[name] = _apply(name); BI[name] = _apply(name);
}); });
export const random = BI.random; export const random = BI.random;
@ -833,13 +866,13 @@ export function parseInt(number) {
try { try {
return _global.parseInt(number, radix); return _global.parseInt(number, radix);
} catch (e) { } catch (e) {
throw new Error(number + "parse int error"); throw new Error(`${number}parse int error`);
return NaN;
} }
} }
export function parseSafeInt(value) { export function parseSafeInt(value) {
let MAX_SAFE_INTEGER = 9007199254740991; const MAX_SAFE_INTEGER = 9007199254740991;
return value return value
? clamp(parseInt(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) ? clamp(parseInt(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
: (value === 0 ? value : 0); : (value === 0 ? value : 0);
@ -849,8 +882,7 @@ export function parseFloat(number) {
try { try {
return _global.parseFloat(number); return _global.parseFloat(number);
} catch (e) { } catch (e) {
throw new Error(number + "parse float error"); throw new Error(`${number}parse float error`);
return NaN;
} }
} }
@ -863,11 +895,11 @@ export function isPositiveInteger(number) {
} }
export function isNegativeInteger(number) { export function isNegativeInteger(number) {
return /^\-[1-9][0-9]*$/.test(number); return /^-[1-9][0-9]*$/.test(number);
} }
export function isInteger(number) { export function isInteger(number) {
return /^\-?\d+$/.test(number); return /^-?\d+$/.test(number);
} }
export function isNumeric(number) { export function isNumeric(number) {
@ -882,6 +914,7 @@ export function isOdd(number) {
if (!isInteger(number)) { if (!isInteger(number)) {
return false; return false;
} }
return (number & 1) === 1; return (number & 1) === 1;
} }
@ -889,6 +922,7 @@ export function isEven(number) {
if (!isInteger(number)) { if (!isInteger(number)) {
return false; return false;
} }
return (number & 1) === 0; return (number & 1) === 0;
} }
@ -901,24 +935,26 @@ export function sum(array, iteratee, context) {
sum += Number(item); sum += Number(item);
} }
}); });
return sum; return sum;
} }
export function average(array, iteratee, context) { export function average(array, iteratee, context) {
const sumResult = sum(array, iteratee, context); const sumResult = sum(array, iteratee, context);
return sumResult / array.length; return sumResult / array.length;
} }
export function trim() { export function trim(...args) {
return BI._.trim.apply(BI._, arguments); return BI._.trim(...args);
} }
export function toUpperCase(string) { export function toUpperCase(string) {
return (string + "").toLocaleUpperCase(); return (`${string}`).toLocaleUpperCase();
} }
export function toLowerCase(string) { export function toLowerCase(string) {
return (string + "").toLocaleLowerCase(); return (`${string}`).toLocaleLowerCase();
} }
export function isEndWithBlank(string) { export function isEndWithBlank(string) {
@ -926,12 +962,13 @@ export function isEndWithBlank(string) {
} }
export function isLiteral(exp) { export function isLiteral(exp) {
return /^\s?(true|false|-?[\d\.]+|'[^']*'|"[^"]*")\s?$/.test(exp); return /^\s?(true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/.test(exp);
} }
export function stripQuotes(str) { export function stripQuotes(str) {
const a = str.charCodeAt(0); const a = str.charCodeAt(0);
const b = str.charCodeAt(str.length - 1); const b = str.charCodeAt(str.length - 1);
return a === b && (a === 0x22 || a === 0x27) return a === b && (a === 0x22 || a === 0x27)
? str.slice(1, -1) ? str.slice(1, -1)
: str; : str;
@ -1015,6 +1052,7 @@ export function leftPad(val, size, ch) {
while (result.length < size) { while (result.length < size) {
result = ch + result; result = ch + result;
} }
return result.toString(); return result.toString();
} }
@ -1030,7 +1068,8 @@ export function leftPad(val, size, ch) {
* @return {String} 做了替换后的字符串 * @return {String} 做了替换后的字符串
*/ */
export function format(format) { export function format(format) {
var args = Array.prototype.slice.call(arguments, 1); const args = Array.prototype.slice.call(arguments, 1);
return format.replace(/\{(\d+)\}/g, (m, i) => args[i]); return format.replace(/\{(\d+)\}/g, (m, i) => args[i]);
} }
@ -1065,25 +1104,26 @@ export function checkDateVoid(YY, MM, DD, minDate, maxDate) {
} else if (YY > maxDate[0]) { } else if (YY > maxDate[0]) {
back = ["y", 1]; back = ["y", 1];
} else if (YY >= minDate[0] && YY <= maxDate[0]) { } else if (YY >= minDate[0] && YY <= maxDate[0]) {
if (YY == minDate[0]) { if (YY === minDate[0]) {
if (MM < minDate[1]) { if (MM < minDate[1]) {
back = ["m"]; back = ["m"];
} else if (MM == minDate[1]) { } else if (MM === minDate[1]) {
if (DD < minDate[2]) { if (DD < minDate[2]) {
back = ["d"]; back = ["d"];
} }
} }
} }
if (YY == maxDate[0]) { if (YY === maxDate[0]) {
if (MM > maxDate[1]) { if (MM > maxDate[1]) {
back = ["m", 1]; back = ["m", 1];
} else if (MM == maxDate[1]) { } else if (MM === maxDate[1]) {
if (DD > maxDate[2]) { if (DD > maxDate[2]) {
back = ["d", 1]; back = ["d", 1];
} }
} }
} }
} }
return back; return back;
} }
@ -1096,8 +1136,9 @@ export function checkDateLegal(str) {
if (ar.length <= 2) { if (ar.length <= 2) {
return MM >= 1 && MM <= 12; return MM >= 1 && MM <= 12;
} }
let MD = BI.Date._MD.slice(0); const MD = BI.Date._MD.slice(0);
MD[1] = isLeapYear(YY) ? 29 : 28; MD[1] = isLeapYear(YY) ? 29 : 28;
return MM >= 1 && MM <= 12 && DD <= MD[MM - 1]; return MM >= 1 && MM <= 12 && DD <= MD[MM - 1];
} }
@ -1114,15 +1155,15 @@ export function parseDateTime(str, fmt) {
let m; let m;
let d; let d;
// wei : 对于fmt为‘YYYYMM’或者‘YYYYMMdd’的格式,str的值为类似'201111'的形式,因为年月之间没有分隔符,所以正则表达式分割无效,导致bug7376。 // wei : 对于fmt为‘YYYYMM’或者‘YYYYMMdd’的格式,str的值为类似'201111'的形式,因为年月之间没有分隔符,所以正则表达式分割无效,导致bug7376。
let a = str.split(/\W+/); const a = str.split(/\W+/);
if (fmt.toLowerCase() == "%y%x" || fmt.toLowerCase() == "%y%x%d") { if (fmt.toLowerCase() === "%y%x" || fmt.toLowerCase() === "%y%x%d") {
let yearlength = 4; const yearlength = 4;
let otherlength = 2; const otherlength = 2;
a[0] = str.substring(0, yearlength); a[0] = str.substring(0, yearlength);
a[1] = str.substring(yearlength, yearlength + otherlength); a[1] = str.substring(yearlength, yearlength + otherlength);
a[2] = str.substring(yearlength + otherlength, yearlength + otherlength * 2); a[2] = str.substring(yearlength + otherlength, yearlength + otherlength * 2);
} }
let b = fmt.match(/%./g); const b = fmt.match(/%./g);
let i = 0, j = 0; let i = 0, j = 0;
let hr = 0; let hr = 0;
let min = 0; let min = 0;
@ -1150,7 +1191,7 @@ export function parseDateTime(str, fmt) {
case "%b": case "%b":
case "%B": case "%B":
for (j = 0; j < 12; ++j) { for (j = 0; j < 12; ++j) {
if (BI.getMonthName(j).substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { if (BI.getMonthName(j).substr(0, a[i].length).toLowerCase() === a[i].toLowerCase()) {
m = j; m = j;
break; break;
} }
@ -1182,6 +1223,7 @@ export function parseDateTime(str, fmt) {
case "%S": case "%S":
sec = _global.parseInt(a[i], 10); sec = _global.parseInt(a[i], 10);
break; break;
default:
} }
} }
// if (!a[i]) { // if (!a[i]) {
@ -1205,45 +1247,46 @@ export function parseDateTime(str, fmt) {
if (isNaN(sec)) { if (isNaN(sec)) {
sec = today.getSeconds(); sec = today.getSeconds();
} }
if (y != 0) { if (y !== 0) {
return BI.getDate(y, m, d, hr, min, sec); return BI.getDate(y, m, d, hr, min, sec);
} }
y = 0; y = 0;
m = -1; m = -1;
d = 0; d = 0;
for (i = 0; i < a.length; ++i) { for (i = 0; i < a.length; ++i) {
if (a[i].search(/[a-zA-Z]+/) != -1) { if (a[i].search(/[a-zA-Z]+/) !== -1) {
let t = -1; let t = -1;
for (j = 0; j < 12; ++j) { for (j = 0; j < 12; ++j) {
if (BI.getMonthName(j).substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { if (BI.getMonthName(j).substr(0, a[i].length).toLowerCase() === a[i].toLowerCase()) {
t = j; t = j;
break; break;
} }
} }
if (t != -1) { if (t !== -1) {
if (m != -1) { if (m !== -1) {
d = m + 1; d = m + 1;
} }
m = t; m = t;
} }
} else if (_global.parseInt(a[i], 10) <= 12 && m == -1) { } else if (_global.parseInt(a[i], 10) <= 12 && m === -1) {
m = a[i] - 1; m = a[i] - 1;
} else if (_global.parseInt(a[i], 10) > 31 && y == 0) { } else if (_global.parseInt(a[i], 10) > 31 && y === 0) {
y = _global.parseInt(a[i], 10); y = _global.parseInt(a[i], 10);
(y < 100) && (y += (y > 29) ? 1900 : 2000); (y < 100) && (y += (y > 29) ? 1900 : 2000);
} else if (d == 0) { } else if (d === 0) {
d = a[i]; d = a[i];
} }
} }
if (y == 0) { if (y === 0) {
y = today.getFullYear(); y = today.getFullYear();
} }
if (m === -1) { if (m === -1) {
m = today.getMonth(); m = today.getMonth();
} }
if (m != -1 && d != 0) { if (m !== -1 && d !== 0) {
return BI.getDate(y, m, d, hr, min, sec); return BI.getDate(y, m, d, hr, min, sec);
} }
return today; return today;
} }
@ -1292,8 +1335,10 @@ export function getDate(...args) {
// BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准 // BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准
const localOffset = dt.getTimezoneOffset() * 60000; // 获得当地时间偏移的毫秒数 const localOffset = dt.getTimezoneOffset() * 60000; // 获得当地时间偏移的毫秒数
const utc = localTime + localOffset; // utc即GMT时间标准时区 const utc = localTime + localOffset; // utc即GMT时间标准时区
return new Date(utc + BI.timeZone);// + Pool.timeZone.offset); return new Date(utc + BI.timeZone);// + Pool.timeZone.offset);
} }
return dt; return dt;
} }
@ -1342,6 +1387,7 @@ export function getTime() {
// BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准 // BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准
return dt.getTime() - BI.timeZone - new Date().getTimezoneOffset() * 60000; return dt.getTime() - BI.timeZone - new Date().getTimezoneOffset() * 60000;
} }
return dt.getTime(); return dt.getTime();
} }

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