Browse Source

Pull request #3316: 无JIRA任务 chore: 补充eslint规则

Merge in VISUAL/fineui from ~ZHENFEI.LI/fineui:es6 to es6

* commit '5fcb9f0eb0d31f09ae4407654fd4b01d40e8b076':
  无JIRA任务 chore: 补充eslint规则
es6
Zhenfei.Li-李振飞 2 years ago
parent
commit
4913c2b167
  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. 4
      src/core/index.js

8
.eslintrc

@ -27,11 +27,15 @@
"plugins": ["@typescript-eslint/eslint-plugin"],
"overrides": [{
"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": {
"no-param-reassign": "off",
"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"],

310
src/core/2.base.js

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

11
src/core/3.ob.js

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

135
src/core/4.widget.js

@ -30,7 +30,7 @@ function callLifeHook(self, life) {
if (hook) {
hooks = hooks.concat(isArray(hook) ? hook : [hook]);
}
each(hooks, function (i, hook) {
each(hooks, (i, hook) => {
hook.call(self);
});
}
@ -53,7 +53,7 @@ export class Widget extends OB {
baseCls: "",
extraCls: "",
cls: "",
css: null
css: null,
// vdom: false
});
@ -132,6 +132,7 @@ export class Widget extends OB {
// 加个保险
if (initCallbackCalled === true) {
_global.console && console.error("组件: 请检查beforeInit内部的写法,callback只能执行一次");
return;
}
initCallbackCalled = true;
@ -140,18 +141,19 @@ export class Widget extends OB {
// 加个保险
if (renderCallbackCalled === true) {
_global.console && console.error("组件: 请检查beforeRender内部的写法,callback只能执行一次");
return;
}
renderCallbackCalled = true;
this._render();
this.__afterRender();
}
};
if (this.options.beforeRender || this.beforeRender) {
this.__async = true;
const beforeRenderResult = (this.options.beforeRender || this.beforeRender).call(this, render);
if (beforeRenderResult instanceof Promise) {
beforeRenderResult.then(render).catch(function (e) {
beforeRenderResult.then(render).catch(e => {
_global.console && console.error(e);
render();
});
@ -160,13 +162,13 @@ export class Widget extends OB {
this._render();
this.__afterRender();
}
}
};
if (this.options.beforeInit || this.beforeInit) {
this.__asking = true;
const beforeInitResult = (this.options.beforeInit || this.beforeInit).call(this, init);
if (beforeInitResult instanceof Promise) {
beforeInitResult.then(init).catch(function (e) {
beforeInitResult.then(init).catch(e => {
_global.console && console.error(e);
init();
});
@ -206,11 +208,11 @@ export class Widget extends OB {
this._initElementWidth();
this._initElementHeight();
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 (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.addClass(cls);
@ -229,7 +231,7 @@ export class Widget extends OB {
}
if (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) {
if (isNull(newValue[k])) {
newValue[k] = "";
@ -247,14 +249,13 @@ export class Widget extends OB {
__watch(getter, handler, options) {
if (_global.Fix) {
this._watchers = this._watchers || [];
const watcher = new Fix.Watcher(null, () => {
return getter.call(this, this);
}, (handler && ((v) => {
const watcher = new Fix.Watcher(null, () => getter.call(this, this), (handler && (v => {
handler.call(this, this, v);
})) || BI.emptyFn, extend({ deep: true }, options));
this._watchers.push(() => {
watcher.teardown();
});
return watcher.value;
} else {
return getter();
@ -374,7 +375,7 @@ export class Widget extends OB {
each(els, (i, el) => {
if (el) {
_lazyCreateWidget(el, {
element: this
element: this,
});
}
});
@ -422,6 +423,7 @@ export class Widget extends OB {
this.__afterMount(lifeHook, predicate);
// }, 0);
}
return true;
}
@ -444,10 +446,12 @@ export class Widget extends OB {
_update(nextProps, shouldUpdate) {
callLifeHook(this, "beforeUpdate");
let res;
if (shouldUpdate) {
const res = this.update && this.update(nextProps, shouldUpdate);
res = this.update && this.update(nextProps, shouldUpdate);
}
callLifeHook(this, "updated");
return res;
}
@ -476,7 +480,7 @@ export class Widget extends OB {
this.options._disabled = true;
}
// 递归将所有子组件使能
each(this._children, function (i, child) {
each(this._children, (i, child) => {
!child._manualSetEnable && child._setEnable && child._setEnable(enable);
});
}
@ -488,7 +492,7 @@ export class Widget extends OB {
this.options._invalid = true;
}
// 递归将所有子组件使有效
each(this._children, function (i, child) {
each(this._children, (i, child) => {
!child._manualSetValid && child._setValid && child._setValid(valid);
});
}
@ -525,36 +529,36 @@ export class Widget extends OB {
this.__setElementVisible(true);
this._mount();
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) {
cancelAnimationFrame(this._requestAnimationFrame);
}
this._requestAnimationFrame = () => {
this.element.addClass(o.animation + "-enter-active");
this.element.addClass(`${o.animation}-enter-active`);
};
requestAnimationFrame(this._requestAnimationFrame);
if (this._animationDuring) {
clearTimeout(this._animationDuring);
}
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);
}
} else if (visible === false) {
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) {
cancelAnimationFrame(this._requestAnimationFrame);
}
this._requestAnimationFrame = () => {
this.element.addClass(o.animation + "-leave-active");
this.element.addClass(`${o.animation}-leave-active`);
};
requestAnimationFrame(this._requestAnimationFrame);
if (this._animationDuring) {
clearTimeout(this._animationDuring);
}
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);
}, o.animationDuring);
} else {
@ -582,8 +586,8 @@ export class Widget extends OB {
doBehavior() {
const args = arguments;
// 递归将所有子组件使有效
each(this._children, function (i, child) {
child.doBehavior && child.doBehavior.apply(child, args);
each(this._children, (i, child) => {
child.doBehavior && child.doBehavior(...args);
});
}
@ -602,7 +606,7 @@ export class Widget extends OB {
name = widget.getName();
}
if (isKey(name)) {
name = name + "";
name = `${name}`;
}
name = name || widget.getName() || uniqueId("widget");
if (this._children[name]) {
@ -613,6 +617,7 @@ export class Widget extends OB {
// TODO: self待删
remove(self._children, this);
});
return (this._children[name] = widget);
}
@ -620,20 +625,21 @@ export class Widget extends OB {
if (!isKey(name) || name === this.getName()) {
return this;
}
name = name + "";
let widget = void 0, other = {};
any(this._children, function (i, wi) {
name = `${name}`;
let widget = void 0;
const other = {};
any(this._children, (i, wi) => {
if (i === name) {
widget = wi;
return true;
}
other[i] = wi;
});
if (!widget) {
any(other, function (i, wi) {
return (widget = wi.getWidgetByName(i));
});
any(other, (i, wi) => (widget = wi.getWidgetByName(i)));
}
return widget;
}
@ -646,7 +652,7 @@ export class Widget extends OB {
}
hasWidget(name) {
return this._children[name] != null;
return isNotNull(this._children[name]);
}
getName() {
@ -664,11 +670,13 @@ export class Widget extends OB {
attr(key, value) {
if (isPlainObject(key)) {
each(key, (k, v) => this.attr(k, v));
return;
}
if (isNotNull(value)) {
return this.options[key] = value;
this.options[key] = value;
}
return this.options[key];
}
@ -729,7 +737,7 @@ export class Widget extends OB {
}
__d() {
each(this._children, function (i, widget) {
each(this._children, (i, widget) => {
widget && widget._unMount && widget._unMount();
});
this._children = {};
@ -747,7 +755,6 @@ export class Widget extends OB {
this.destroyed = null;
this._isDestroyed = true;
// this._purgeRef(); // 清除ref的时机还是要仔细考虑一下
}
_unMount() {
@ -767,7 +774,7 @@ export class Widget extends OB {
_empty () {
this._assetMounted();
each(this._children, function (i, widget) {
each(this._children, (i, widget) => {
widget && widget._unMount && widget._unMount();
});
this._children = {};
@ -801,9 +808,9 @@ export class Widget extends OB {
// this.purgeListeners();
// 去掉组件绑定的watcher
each(this._watchers, function (i, unwatches) {
each(this._watchers, (i, unwatches) => {
unwatches = isArray(unwatches) ? unwatches : [unwatches];
each(unwatches, function (j, unwatch) {
each(unwatches, (j, unwatch) => {
unwatch();
});
});
@ -839,7 +846,7 @@ export class Widget extends OB {
this._purgeRef();
this.purgeListeners();
}
};
}
let context = null, current = null;
const contextStack = [], currentStack = [];
@ -882,35 +889,42 @@ export function useStore(_store) {
}
if (current) {
const currentStore = current._store;
let delegate = {}, origin;
const delegate = {};
let origin;
if (_global.Proxy) {
const proxy = new Proxy(delegate, {
get: function (target, key) {
get (target, key) {
return Reflect.get(origin, key);
},
set: function (target, key, value) {
set (target, key, value) {
return Reflect.set(origin, key, value);
}
},
});
current._store = function () {
origin = (_store || currentStore).apply(this, arguments);
delegate.$delegate = origin;
return origin;
};
return current.$storeDelegate = proxy;
current.$storeDelegate = proxy;
return current.$storeDelegate;
}
current._store = function () {
const st = (_store || currentStore).apply(this, arguments);
extend(delegate, st);
return st;
};
return current.$storeDelegate = delegate;
current.$storeDelegate = delegate;
return current.$storeDelegate;
}
}
export function useContext(inject) {
// 通过组件找最近的store
const vm = Widget.findStore(Widget.current || Widget.context);
let vm = Widget.findStore(Widget.current || Widget.context);
if (vm) {
if (inject) {
if (vm.$$computed && inject in vm.$$computed) {
@ -928,9 +942,11 @@ export function useContext(inject) {
}
vm = vm._parent;
}
return null;
}
}
return vm;
}
@ -949,18 +965,19 @@ export function watch(vm, watch, handler) {
if (isArray(handler)) {
for (let i = 0; i < handler.length; i++) {
watchers.push(Fix.watch(vm.model, key, innerHandler, {
store: vm
store: vm,
}));
}
} else {
watchers.push(Fix.watch(vm.model, key, innerHandler, {
store: vm
store: vm,
}));
}
}
// vm中一定有_widget
Widget.current._watchers || (Widget.current._watchers = []);
Widget.current._watchers = Widget.current._watchers.concat(watchers);
return;
}
handler = watch;
@ -974,6 +991,7 @@ export function onBeforeMount(beforeMount) {
if (current) {
if (current.__isMounting) {
beforeMount();
return;
}
if (!current.beforeMount) {
@ -989,6 +1007,7 @@ export function onMounted(mounted) {
if (current) {
if (current._isMounted && !this.__async) {
mounted();
return;
}
if (!current.mounted) {
@ -998,7 +1017,7 @@ export function onMounted(mounted) {
}
current.mounted.push(mounted);
}
};
}
export function onBeforeUnmount(beforeDestroy) {
if (current) {
@ -1026,7 +1045,7 @@ Widget.registerRenderEngine = function (engine) {
Widget._renderEngine = engine;
};
Widget.registerRenderEngine({
createElement: function (widget) {
createElement (widget) {
if (isWidget(widget)) {
const o = widget.options;
if (o.element) {
@ -1035,13 +1054,15 @@ Widget.registerRenderEngine({
if (o.tagName) {
return BI.$(document.createElement(o.tagName));
}
return BI.$(document.createDocumentFragment());
}
return BI.$(widget);
},
createFragment: function () {
createFragment () {
return document.createDocumentFragment();
}
},
});
export function mount(widget, container, predicate, hydrate) {
@ -1049,8 +1070,8 @@ export function mount(widget, container, predicate, hydrate) {
// 将widget的element元素都挂载好,并建立相互关系
widget.element.data("__widgets", [widget]);
const res = widget._mount(true, false, false, function (w) {
each(w._children, function (i, child) {
const ws = child.element.data("__widgets");
each(w._children, (i, child) => {
let ws = child.element.data("__widgets");
if (!ws) {
ws = [];
}
@ -1063,19 +1084,21 @@ export function mount(widget, container, predicate, hydrate) {
const c = Widget._renderEngine.createElement;
BI.DOM.patchProps(widget.element, c(c(container).children()[0]));
const triggerLifeHook = function (w) {
const triggerLifeHook = w => {
w.beforeMount && w.beforeMount();
w.mounted && w.mounted();
each(w._children, function (i, child) {
each(w._children, (i, child) => {
triggerLifeHook(child);
});
};
// 最后触发组件树生命周期函数
triggerLifeHook(widget);
return res;
}
if (container) {
Widget._renderEngine.createElement(container).append(widget.element);
}
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 { OB } from "./3.ob";
import { Widget } from "./4.widget"
import { Widget } from "./4.widget";
let moduleInjection = {}, moduleInjectionMap = {
const moduleInjection = {}, moduleInjectionMap = {
components: {},
constants: {},
stores: {},
services: {},
models: {},
providers: {}
providers: {},
};
export function module(xtype, cls) {
if (moduleInjection[xtype] != null) {
_global.console && console.error("module: [" + xtype + "] 已经注册过了");
if (isNotNull(moduleInjection[xtype])) {
_global.console && console.error(`module: [${xtype}] 已经注册过了`);
} else {
if (isFunction(cls)) {
cls = cls();
@ -29,7 +29,7 @@ export function module(xtype, cls) {
}
moduleInjectionMap[k][key].push({
version: cls[k][key],
moduleId: xtype
moduleId: xtype,
});
}
}
@ -40,10 +40,10 @@ export function module(xtype, cls) {
return () => Modules.getModule(xtype);
}
let constantInjection = {};
const constantInjection = {};
export function constant(xtype, cls) {
if (constantInjection[xtype] != null) {
_global.console && console.error("constant: [" + xtype + "]已经注册过了");
if (isNotNull(constantInjection[xtype])) {
_global.console && console.error(`constant: [${xtype}]已经注册过了`);
} else {
constantInjection[xtype] = cls;
}
@ -51,60 +51,60 @@ export function constant(xtype, cls) {
return () => Constants.getConstant(xtype);
}
let modelInjection = {};
const modelInjection = {};
export function model(xtype, cls) {
if (modelInjection[xtype] != null) {
_global.console && console.error("model: [" + xtype + "] 已经注册过了");
if (isNotNull(modelInjection[xtype])) {
_global.console && console.error(`model: [${xtype}] 已经注册过了`);
} else {
modelInjection[xtype] = cls;
}
return (config) => Models.getModel(xtype, config);
return config => Models.getModel(xtype, config);
}
let storeInjection = {};
const storeInjection = {};
export function store(xtype, cls) {
if (storeInjection[xtype] != null) {
_global.console && console.error("store: [" + xtype + "] 已经注册过了");
if (isNotNull(storeInjection[xtype])) {
_global.console && console.error(`store: [${xtype}] 已经注册过了`);
} else {
storeInjection[xtype] = cls;
}
return (config) => Stores.getStore(xtype, config);
return config => Stores.getStore(xtype, config);
}
let serviceInjection = {};
const serviceInjection = {};
export function service(xtype, cls) {
if (serviceInjection[xtype] != null) {
_global.console && console.error("service: [" + xtype + "] 已经注册过了");
if ((serviceInjection[xtype])) {
_global.console && console.error(`service: [${xtype}] 已经注册过了`);
}
serviceInjection[xtype] = cls;
return (config) => Services.getService(xtype, config);
return config => Services.getService(xtype, config);
}
let providerInjection = {};
const providerInjection = {};
export function provider(xtype, cls) {
if (providerInjection[xtype] != null) {
_global.console && console.error("provider: [" + xtype + "] 已经注册过了");
if ((providerInjection[xtype])) {
_global.console && console.error(`provider: [${xtype}] 已经注册过了`);
} else {
providerInjection[xtype] = cls;
}
return (config) => Providers.getProvider(xtype, config);
return config => Providers.getProvider(xtype, config);
}
let configFunctions = OB.configFunctions = {};
const runConfigFunction = function (type, configFn) {
const configFunctions = OB.configFunctions = {};
const runConfigFunction = (type, configFn) => {
if (!type || !configFunctions[type]) {
return false;
}
let queue = [];
if (configFn) {
queue = configFunctions[type].filter((conf) => conf.fn === configFn);
configFunctions[type] = configFunctions[type].filter((conf) => conf.fn !== configFn);
queue = configFunctions[type].filter(conf => conf.fn === configFn);
configFunctions[type] = configFunctions[type].filter(conf => conf.fn !== configFn);
} else {
queue = configFunctions[type];
delete configFunctions[type];
@ -140,7 +140,7 @@ const runConfigFunction = function (type, configFn) {
}
}
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;
}
}
@ -179,6 +179,7 @@ export function config(type, configFn, opt) {
if (providerInstance[type]) {
delete providerInstance[type];
}
return configFn(providers[type]);
}
@ -187,7 +188,7 @@ export function config(type, configFn, opt) {
}
configFunctions[type].push({
fn: configFn,
opt: opt
opt,
});
if (opt.immediately) {
@ -199,28 +200,30 @@ export function getReference(type, fn) {
return BI.Plugin.registerObject(type, fn);
}
let actions = {};
let globalAction = [];
const actions = {};
const globalAction = [];
export function action(type, actionFn) {
if (isFunction(type)) {
globalAction.push(type);
return () => {
remove(globalAction, (idx) => globalAction.indexOf(actionFn) === idx);
remove(globalAction, idx => globalAction.indexOf(actionFn) === idx);
};
}
if (!actions[type]) {
actions[type] = [];
}
actions[type].push(actionFn);
return () => {
remove(actions[type], (idx) => actions[type].indexOf(actionFn) === idx);
remove(actions[type], idx => actions[type].indexOf(actionFn) === idx);
if (actions[type].length === 0) {
delete actions[type];
}
};
}
let points = {};
const points = {};
export function point(type, action, pointFn, after) {
if (!points[type]) {
points[type] = {};
@ -235,35 +238,37 @@ export function point(type, action, pointFn, after) {
}
export const Modules = {
getModule: function (type) {
getModule (type) {
if (!moduleInjection[type]) {
_global.console && console.error("module: [" + type + "] 未定义");
_global.console && console.error(`module: [${type}] 未定义`);
}
return moduleInjection[type];
},
getAllModules: function () {
getAllModules () {
return moduleInjection;
}
}
},
};
export const Constants = {
getConstant: function (type) {
getConstant (type) {
if (isNull(constantInjection[type])) {
_global.console && console.error("constant: [" + type + "] 未定义");
_global.console && console.error(`constant: [${type}] 未定义`);
}
runConfigFunction(type);
return isFunction(constantInjection[type]) ? constantInjection[type]() : constantInjection[type];
}
}
},
};
const callPoint = function (inst, types) {
function callPoint(inst, types) {
types = isArray(types) ? types : [types];
each(types, (idx, type) => {
if (points[type]) {
for (const action in points[type]) {
let bfns = points[type][action].before;
const bfns = points[type][action].before;
if (bfns) {
BI.aspect.before(inst, action, function (bfns) {
BI.aspect.before(inst, action, (function (bfns) {
return function () {
for (let i = 0, len = bfns.length; i < len; i++) {
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) {
BI.aspect.after(inst, action, function (afns) {
BI.aspect.after(inst, action, (function (afns) {
return function () {
for (let i = 0, len = afns.length; i < len; i++) {
try {
@ -287,66 +292,69 @@ const callPoint = function (inst, types) {
}
}
};
}(afns));
}(afns)));
}
}
}
});
};
}
export const Models = {
getModel: function (type, config) {
getModel (type, config) {
if (!modelInjection[type]) {
_global.console && console.error("model: [" + type + "] 未定义");
_global.console && console.error(`model: [${type}] 未定义`);
}
runConfigFunction(type);
var inst = new modelInjection[type](config);
const inst = new modelInjection[type](config);
inst._constructor && inst._constructor(config);
inst.mixins && callPoint(inst, inst.mixins);
callPoint(inst, type);
return inst;
}
}
},
};
let stores = {};
const stores = {};
export const Stores = {
getStore: function (type, config) {
getStore (type, config) {
if (!storeInjection[type]) {
_global.console && console.error("store: [" + type + "] 未定义");
_global.console && console.error(`store: [${type}] 未定义`);
}
if (stores[type]) {
return stores[type];
}
const inst = stores[type] = new storeInjection[type](config);
inst._constructor && inst._constructor(config, function () {
inst._constructor && inst._constructor(config, () => {
delete stores[type];
});
callPoint(inst, type);
return inst;
}
}
},
};
let services = {};
const services = {};
export const Services = {
getService: (type, config) => {
if (!serviceInjection[type]) {
_global.console && console.error("service: [" + type + "] 未定义");
_global.console && console.error(`service: [${type}] 未定义`);
}
if (services[type]) {
return services[type];
}
services[type] = new serviceInjection[type](config);
callPoint(services[type], type);
return services[type];
}
}
},
};
let providers = {},
const providers = {},
providerInstance = {};
export const Providers = {
getProvider: (type, config) => {
if (!providerInjection[type]) {
_global.console && console.error("provider: [" + type + "] 未定义");
_global.console && console.error(`provider: [${type}] 未定义`);
}
runConfigFunction(type);
if (!providers[type]) {
@ -355,12 +363,13 @@ export const Providers = {
if (!providerInstance[type] && providers[type].$get) {
providerInstance[type] = new (providers[type].$get())(config);
}
return providerInstance[type];
}
}
},
};
export const Actions = {
runAction: function (type, event, config) {
runAction (type, event, config) {
each(actions[type], (i, act) => {
try {
act(event, config);
@ -369,38 +378,38 @@ export const Actions = {
}
});
},
runGlobalAction: function () {
var args = [].slice.call(arguments);
runGlobalAction () {
const args = [].slice.call(arguments);
each(globalAction, (i, act) => {
try {
act.apply(null, args);
act(...args);
} catch (e) {
_global.console && console.error(e);
}
});
}
}
},
};
let kv = {};
const kv = {};
export function shortcut(xtype, cls) {
if (kv[xtype] != null) {
_global.console && console.error("组件: [" + xtype + "] 已经注册过了");
if (isNotNull(kv[xtype])) {
_global.console && console.error(`组件: [${xtype}] 已经注册过了`);
}
if (cls) {
cls["xtype"] = xtype;
cls.xtype = xtype;
}
kv[xtype] = cls;
}
// 根据配置属性生成widget
const createRealWidget = function (config, context, lazy) {
const cls = isFunction(config.type) ? config.type : kv[config.type];
const createRealWidget = (config, context, lazy) => {
const Cls = isFunction(config.type) ? config.type : kv[config.type];
if (!cls) {
throw new Error("组件: [" + config.type + "] 未定义");
if (!Cls) {
throw new Error(`组件: [${config.type}] 未定义`);
}
let pushed = false;
const widget = new cls();
const widget = new Cls();
widget._context = Widget.context || context;
if (!Widget.context && context) {
pushed = true;
@ -414,6 +423,7 @@ const createRealWidget = function (config, context, lazy) {
widget._lazyConstructor();
// }
pushed && Widget.popContext();
return widget;
};
@ -426,15 +436,15 @@ export function createWidget(item, options, context, lazy) {
options || (options = {});
}
var el, w;
let el, w;
if (item.type || options.type) {
el = extend({}, options, item);
} else if (item.el && (item.el.type || options.type)) {
el = extend({}, options, item.el);
}
let elType;
if (el) {
var elType = (el.type && el.type.xtype) || el.type;
elType = (el.type && el.type.xtype) || el.type;
runConfigFunction(elType);
}
@ -443,7 +453,7 @@ export function createWidget(item, options, context, lazy) {
if (isEmpty(item) && isEmpty(options)) {
return createWidget({
type: "bi.layout"
type: "bi.layout",
});
}
if (isWidget(item)) {
@ -451,7 +461,7 @@ export function createWidget(item, options, context, lazy) {
}
if (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 (BI.Plugin.hasObject(elType)) {
if (!w.listeners || isArray(w.listeners)) {
@ -459,7 +469,7 @@ export function createWidget(item, options, context, lazy) {
eventName: BI.Events.MOUNT,
action: () => {
BI.Plugin.getObject(elType, this);
}
},
}]);
} else {
w.listeners[BI.Events.MOUNT] = [
@ -469,8 +479,10 @@ export function createWidget(item, options, context, lazy) {
].concat(w.listeners[BI.Events.MOUNT] || []);
}
}
return createRealWidget(w, context, lazy);
}
return createWidget(w, options, context, lazy);
}
if (isWidget(item.el)) {
@ -485,6 +497,7 @@ export function _lazyCreateWidget (item, options, context) {
export function createElement() {
const widget = createWidget.apply(this, arguments);
return widget.element;
}
@ -504,5 +517,5 @@ export function getResource(type, config) {
if (providerInjection[type]) {
return Providers.getProvider(type, config);
}
throw new Error("未知类型: [" + type + "] 未定义");
throw new Error(`未知类型: [${type}] 未定义`);
}

4
src/core/index.js

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

Loading…
Cancel
Save