UNPKG

elmer-ui-core

Version:

web app framework

1,314 lines (1,276 loc) 268 kB
"use strict"; (self["elmer-chunks"] = self["elmer-chunks"] || []).push([[136],{ /***/ 3972: /***/ (function(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) { // EXTERNAL MODULE: ./node_modules/elmer-virtual-dom/lib/index.js var lib = __webpack_require__(69); // EXTERNAL MODULE: ./node_modules/elmer-worker/lib/index.js var elmer_worker_lib = __webpack_require__(1763); // EXTERNAL MODULE: ./node_modules/reflect-metadata/Reflect.js var reflect_metadata_Reflect = __webpack_require__(3353); ;// CONCATENATED MODULE: ./src/lib/utils.ts function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } /** * 格式化数字,#字符占位 * @param val 要格式化的数据 * @param formatStr 格式化文本 * @returns 返回数据 */ var format = function format(val, formatStr) { if (formatStr === void 0) { formatStr = "####.##"; } var valueMatch = val.toString().match(/^(\d*)($|[\.]([\d]{1,}))$/); var formatReg = /^([#\,\s]{1,})($|[\.]([#,\s]*))$/; if (!formatReg.test(formatStr)) { throw new Error("格式化参数设置错误,只允许包含一下字符: '#',',',' '"); } if (valueMatch) { var intValue = valueMatch[1]; var decValue = valueMatch[3]; var formatMatch = (formatStr || "").match(formatReg); var intFormat = formatMatch ? formatMatch[1] : ""; var decFormat = formatMatch ? formatMatch[3] || "" : ""; var intLen = intFormat.replace(/[^#]*/g, "").length; var decLen = decFormat.replace(/[^#]*/g, "").length; var finalInt = intLen > intValue.length ? "0".repeat(intLen - intValue.length) + intValue : intValue; // 整数部分位数不足在最前面补0 var finalDec = decLen > 0 ? decLen > decValue.length ? decValue + "0".repeat(decLen - decValue.length) : decValue : ""; // 小数部分位数不足在最后面补0 var finalIntResult = []; var finalDecResult = []; var intRelaceCount = 0, decReplaceCount = 0; for (var i = 0; i < intFormat.length; i++) { var intChar = intFormat.substr(i, 1); if (intChar === "#") { finalIntResult.push(finalInt.substr(intRelaceCount, 1)); intRelaceCount += 1; } else { finalIntResult.push(intChar); } } if (decFormat.length > 0) { for (var i = 0; i < decFormat.length; i++) { var intChar = decFormat.substr(i, 1); if (intChar === "#") { finalDecResult.push(finalDec.substr(decReplaceCount, 1)); decReplaceCount += 1; } else { finalDecResult.push(intChar); } } } return finalDecResult.length > 0 ? finalIntResult.join("") + "." + finalDecResult.join("") : finalIntResult.join(""); } else { return val.toString(); } }; var guid = function guid() { var d = new Date().getTime(); if (window.performance && typeof window.performance.now === "function") { d += performance.now(); // use high-precision timer if available } var uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); // tslint:disable-next-line: triple-equals return (c == "x" ? r : r & 0x3 | 0x8).toString(16); }); return uuid; }; var getType = function getType(val) { return Object.prototype.toString.call(val); }; /** * 变量是否为空 * @param val - 检查变量 * @returns - 返回值 */ var isEmpty = function isEmpty(val) { return undefined === val || null === val || typeof val === "string" && val.length <= 0; }; /** * 是否是Object对象 * @param val - 检查变量 * @returns - 返回值 */ var isObject = function isObject(val) { return _typeof(val) === "object"; }; /** * 是否为文本 * @param val - 检查变量 * @returns - 返回值 */ var isString = function isString(val) { return typeof val === "string"; }; /** * 是否为正则表达式对象 * @param val - 检查变量 * @returns - 返回值 */ var isRegExp = function isRegExp(val) { return getType(val) === "[object RegExp]"; }; /** * 是否为数组 * @param val - 检查变量 * @returns - 返回值 */ var isArray = function isArray(val) { return getType(val) === "[object Array]"; }; var isNumber = function isNumber(val) { return getType(val) === "[object Number]"; }; var isBoolean = function isBoolean(val) { return getType(val) === "[object Boolean]"; }; var isPromise = function isPromise(val) { return getType(val) === "[object Promise]"; }; var isNumeric = function isNumeric(val) { return !isNaN(val); }; /** 判断对象是否是Global这个Node环境全局对象 */ var isGlobalObject = function isGlobalObject(val) { return getType(val) === "[object global]"; }; var getRandomText = function getRandomText(len) { if (len === void 0) { len = 8; } if (len > 5) { var baseStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890"; var str = ""; var baseLen = baseStr.length; for (var i = 0; i < len; i++) { var index = Math.floor(Math.random() * baseLen); str += baseStr.substr(index, 1); } return str; } return ""; }; /** Http */ var toUri = function toUri(queryStr) { if (!isEmpty(queryStr)) { if (isString(queryStr)) { var textQuery = queryStr.replace(/^\?/, "").replace(/^\s*/, "").replace(/\#[\s\S]*$/, ""); var arr = textQuery.split("&"); var result = {}; var qVReg = /^([a-z0-9_\-]{1,})=([\s\S]*)$/i; for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) { var qStr = arr_1[_i]; var qMatch = qStr.match(qVReg); if (qMatch) { result[qMatch[1]] = decodeURIComponent(qMatch[2]); } else { var qKey = qStr.replace(/\=\s*$/, ""); result[qKey] = true; } } return result; } else { return queryStr; } } }; var toQuery = function toQuery(obj) { if (obj) { var objArr_1 = []; Object.keys(obj).map(function (attrKey) { var attrValue = obj[attrKey]; var attrStr = attrValue ? isObject(attrValue) ? encodeURIComponent(JSON.stringify(attrValue)) : encodeURIComponent(attrValue) : ""; objArr_1.push("".concat(attrKey, "=").concat(attrStr)); }); return objArr_1.join("&"); } }; var getUri = function getUri(queryStr, key) { var queryObj = toUri(queryStr); return queryObj ? queryObj[key] : null; }; var getValue = function getValue(data, key, defaultValue) { var keyValue = key !== undefined && key !== null ? key : ""; if (/\./.test(keyValue)) { var keyArr = keyValue.split("."); var isFind = false; var index = 0; var keyStr = ""; var tmpData = data; while (index <= keyArr.length - 1) { keyStr = keyArr[index]; isFind = index === keyArr.length - 1; if (isArray(tmpData) && isNumeric(keyStr)) { keyStr = parseInt(keyStr, 10); } if (!isFind) { var nextKey = keyArr[keyArr.length - 1]; if (isArray(tmpData) || isObject(tmpData) || isGlobalObject(tmpData)) { // tmpData = tmpData[keyStr]; } if (tmpData && index === keyArr.length - 2) { if (nextKey === "key") { tmpData = tmpData.key; isFind = true; } else if (nextKey === "length") { tmpData = tmpData.length; isFind = true; } } } else { tmpData = tmpData ? tmpData[keyStr] : undefined; } if (isFind) { break; } index++; } return isFind ? undefined !== tmpData ? tmpData : defaultValue : defaultValue; } else { var rResult = data ? data[keyValue] : undefined; return data ? undefined !== rResult ? rResult : defaultValue : defaultValue; } }; /** * 给指定对象设置属性值 * @param data 设置属性值对象 * @param key 设置属性key,属性key有多层可使用.区分 * @param value 设置属性值 * @param fn 自定义设置值回调 */ var setValue = function setValue(data, key, value, fn) { var isUpdate = false; if (!isObject(data)) { throw new Error("The parameter of data is not a object"); } if (isEmpty(key)) { throw new Error("The key can not be an empty string"); } if (!isEmpty(value)) { var keyArr = key.split("."); var keyLen = keyArr.length; var index = 0; var tmpData = data; while (index < keyLen) { var cKey = keyArr[index]; if (index < keyLen - 1) { // 不是最后一个节点 if (!isEmpty(tmpData[cKey])) { if (isObject(tmpData[cKey])) { tmpData = tmpData[cKey]; } else { throw new Error("Can not set value to attribute of " + cKey); } } else { tmpData[cKey] = {}; tmpData = tmpData[cKey]; } } else { // 要更新数据的节点 if (typeof fn === "function") { fn(tmpData, cKey, value); } else { tmpData[cKey] = value; } isUpdate = true; } index++; } } return isUpdate; }; /* harmony default export */ var lib_utils = ({ format: format, getRandomText: getRandomText, getUri: getUri, getValue: getValue, guid: guid, isArray: isArray, isBoolean: isBoolean, isEmpty: isEmpty, isGlobalObject: isGlobalObject, isNumber: isNumber, isNumeric: isNumeric, isObject: isObject, isPromise: isPromise, isRegExp: isRegExp, isString: isString, setValue: setValue, toQuery: toQuery }); ;// CONCATENATED MODULE: ./src/decorators/base.ts var decoratorStorage = { classPool: {}, execIndex: {}, objPool: {} }; var DECORATORS_CLASS_TYPE = "DECORATORS_CLASS_TYPE"; var DECORATORS_CLASS_TYPE_SERVICE = "DECORATORS_CLASS_SERVICE"; var DECORATORS_CLASS_TYPE_MODEL = "DECORATORS_CLASS_MODEL"; var DECORATORS_CLASS_TYPE_RENDER_PLUGIN = "DECORATORS_CLASS_RENDER_PLUGIN"; // 渲染中间件 var base_DECORATORS_CLASS_OPTIONS = ""; var base_DECORATORS_FUNDATION_COMPONENTS = "DECORATORS_FUNDATION_COMPONENTS"; // 功能性装饰器 var DECORATORS_MODEL_ID = "DECORATORS_ID"; var saveToObjPool = function saveToObjPool(modelId, obj) { decoratorStorage.objPool[modelId] = obj; }; var getFromObjPool = function getFromObjPool(modelId) { return decoratorStorage.objPool[modelId]; }; /** * 将定义类保存到资源池 * @param type 定义类型 * @param ClassFactory 类 */ var saveToClassPool = function saveToClassPool(type, ClassFactory) { var id = Reflect.getMetadata(DECORATORS_MODEL_ID, ClassFactory); if (lib_utils.isEmpty(id)) { throw new Error("类装饰器定义错误,DECORATORS_ID缺失."); } else { if (!decoratorStorage.classPool[type]) { decoratorStorage.classPool[type] = {}; } decoratorStorage.classPool[type][id] = ClassFactory; } }; /** * 从类资源池获取对象 * @param type 定义Model类型 * @param id 定义的Model Id * @returns any */ var getFromClassPool = function getFromClassPool(type, id) { return decoratorStorage.classPool[type] ? decoratorStorage.classPool[type][id] : null; }; var base_getAllClassFromPool = function getAllClassFromPool(type) { return decoratorStorage.classPool[type]; }; /** * 保存插件执行顺序索引 * @param type - 插件类型 * @param index - 执行索引 */ var base_setExecIndex = function setExecIndex(type, index) { decoratorStorage.execIndex[type] = index; }; /** * 获取插件执行顺序索引 * @param type - 插件类型 * @return - 执行索引 */ var base_getExecIndex = function getExecIndex(type) { return decoratorStorage.execIndex[type]; }; ;// CONCATENATED MODULE: ./src/decorators/Autowired.ts var __spreadArray = undefined && undefined.__spreadArray || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var getClassParams = function getClassParams(Factory) { var paramTypes = Reflect.getMetadata("design:paramtypes", Factory); var newParams = []; if ((paramTypes === null || paramTypes === void 0 ? void 0 : paramTypes.length) > 0) { paramTypes.map(function (param) { var classType = Reflect.getMetadata(DECORATORS_CLASS_TYPE, param); if (classType === DECORATORS_CLASS_TYPE_SERVICE) { newParams.push(Autowired_getServiceObj(param)); } else if (classType === DECORATORS_CLASS_TYPE_MODEL) { newParams.push(getModelObj(param)); } else { newParams.push(param); } }); } return newParams; }; var Autowired_getServiceObj = function getServiceObj(Factory) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var serviceId = Reflect.getMetadata(DECORATORS_MODEL_ID, Factory); var serviceName = Factory.name; var obj = getFromObjPool(serviceId); if (!obj) { var params = getClassParams(Factory); var newParams = __spreadArray([], params, true); if (args.length > 0) { for (var _a = 0, args_1 = args; _a < args_1.length; _a++) { var argv = args_1[_a]; if (argv === Factory) { throw new Error("(".concat(serviceName, ")\u4E0D\u5141\u8BB8\u6CE8\u5165\u81EA\u5DF1")); } else { var argvType = Reflect.getMetadata(DECORATORS_CLASS_TYPE, argv); if (argvType === DECORATORS_CLASS_TYPE_MODEL) { newParams.push(getModelObj(argv)); } else if (argvType === DECORATORS_CLASS_TYPE_SERVICE) { newParams.push(getServiceObj(argv)); } else { newParams.push(argv); } } } } obj = new (Factory.bind.apply(Factory, __spreadArray([void 0], newParams, false)))(); saveToObjPool(serviceId, obj); } return obj; }; var getModelObj = function getModelObj(Factory) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var modelId = Reflect.getMetadata(DECORATORS_MODEL_ID, Factory); var params = getClassParams(Factory); var modelName = Factory.name; var newParams = __spreadArray([], params, true); if (args.length > 0) { for (var _a = 0, args_2 = args; _a < args_2.length; _a++) { var argv = args_2[_a]; if (argv === Factory) { throw new Error("(".concat(modelName, ")\u4E0D\u5141\u8BB8\u6CE8\u5165\u81EA\u5DF1")); } else { var argvType = Reflect.getMetadata(DECORATORS_CLASS_TYPE, argv); if (argvType === DECORATORS_CLASS_TYPE_MODEL) { newParams.push(getModelObj(argv)); } else if (argvType === DECORATORS_CLASS_TYPE_SERVICE) { newParams.push(Autowired_getServiceObj(argv)); } else { newParams.push(argv); } } } } var obj = new (Factory.bind.apply(Factory, __spreadArray([void 0], newParams, false)))(); obj.id = modelId; return obj; }; var Autowired = function Autowired() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return function (target, attrKey) { var TargetFactory = Reflect.getMetadata("design:type", target, attrKey); Object.defineProperty(target, attrKey, { configurable: false, enumerable: true, get: function get() { var type = Reflect.getMetadata(DECORATORS_CLASS_TYPE, TargetFactory); var obj = null; if (type === DECORATORS_CLASS_TYPE_SERVICE) { obj = Autowired_getServiceObj.apply(void 0, __spreadArray([TargetFactory], args, false)); } else if (type === DECORATORS_CLASS_TYPE_MODEL) { obj = getModelObj.apply(void 0, __spreadArray([TargetFactory], args, false)); } else { throw new Error("(".concat(TargetFactory.name, ")\u5F53\u524D\u6A21\u5757\u6CE8\u518C\u7C7B\u578B\u4E0D\u9002\u5408\u4F7F\u7528Autowired\u521D\u59CB\u5316.")); } return obj; }, set: function set() { throw new Error("使用Autowired初始化的对象不允许重写."); } }); }; }; ;// CONCATENATED MODULE: ./src/decorators/loadComponents.ts var loadComponents = function loadComponents(components) { return function (target) { Reflect.defineMetadata(base_DECORATORS_FUNDATION_COMPONENTS, components, target); }; }; var getComponents = function getComponents(ComponentFactory) { return Reflect.getMetadata(base_DECORATORS_FUNDATION_COMPONENTS, ComponentFactory) || {}; }; ;// CONCATENATED MODULE: ./src/decorators/Model.ts var Model = function Model(Target) { var type = Reflect.getMetadata(DECORATORS_CLASS_TYPE, Target); var params = Reflect.getMetadata("design:paramtypes", Target); if (params) { for (var _i = 0, params_1 = params; _i < params_1.length; _i++) { var val = params_1[_i]; if (val === Target) { throw new Error("不能依赖自已"); } else { var paramClassType = Reflect.getMetadata(DECORATORS_CLASS_TYPE, Target); if (paramClassType !== DECORATORS_CLASS_TYPE_SERVICE && paramClassType !== DECORATORS_CLASS_TYPE_MODEL) { throw new Error("".concat(Target.name, "]\u6784\u9020\u51FD\u6570\u53C2\u6570(").concat(val.name, ")\u672A\u6CE8\u518C\u5230Service\u6216Model\u3002")); } } } } if (!lib_utils.isEmpty(type)) { if (type !== DECORATORS_CLASS_TYPE_MODEL) { throw new Error("类装饰器定义冲突,不允许同时使用两个类装饰器。"); } } else { var modelId = "decorator_service_" + lib_utils.guid(); Reflect.defineMetadata(DECORATORS_CLASS_TYPE, DECORATORS_CLASS_TYPE_MODEL, Target); Reflect.defineMetadata(DECORATORS_MODEL_ID, modelId, Target); } }; ;// CONCATENATED MODULE: ./src/decorators/Service.ts var Service = function Service(Target) { var type = Reflect.getMetadata(DECORATORS_CLASS_TYPE, Target); var params = Reflect.getMetadata("design:paramtypes", Target); if (params) { for (var _i = 0, params_1 = params; _i < params_1.length; _i++) { var val = params_1[_i]; if (val === Target) { throw new Error("不能依赖自已"); } else { var paramClassType = Reflect.getMetadata(DECORATORS_CLASS_TYPE, val); if (paramClassType !== DECORATORS_CLASS_TYPE_SERVICE && paramClassType !== DECORATORS_CLASS_TYPE_MODEL) { throw new Error("[".concat(Target.name, "]\u6784\u9020\u51FD\u6570\u53C2\u6570(").concat(val.name, ")\u672A\u6CE8\u518C\u5230Service\u6216Model\u3002")); } } } } if (!lib_utils.isEmpty(type)) { if (type !== DECORATORS_CLASS_TYPE_SERVICE) { throw new Error("类装饰器定义冲突,不允许同时使用两个类装饰器。"); } } else { var modelId = "decorator_service_" + lib_utils.guid(); Reflect.defineMetadata(DECORATORS_CLASS_TYPE, DECORATORS_CLASS_TYPE_SERVICE, Target); Reflect.defineMetadata(DECORATORS_MODEL_ID, modelId, Target); } }; ;// CONCATENATED MODULE: ./src/lib/SortHelper.ts function SortHelper_typeof(o) { "@babel/helpers - typeof"; return SortHelper_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, SortHelper_typeof(o); } var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : SortHelper_typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var EnumSortCompare; (function (EnumSortCompare) { EnumSortCompare[EnumSortCompare["LESS_THAN"] = -1] = "LESS_THAN"; EnumSortCompare[EnumSortCompare["BIGGER_THAN"] = 1] = "BIGGER_THAN"; EnumSortCompare[EnumSortCompare["EQUALS"] = 0] = "EQUALS"; })(EnumSortCompare || (EnumSortCompare = {})); var SortHelper_SortHelper = /** @class */function () { function SortHelper() {} SortHelper.prototype.bubbleSort = function (sortData, compareOptions) { // 获取数组长度 var length = sortData.length; for (var i = 0; i < length; i++) { // 从数组的0号元素遍历到数组的倒数第2号元素,然后减去外层已经遍历的轮数 for (var j = 0; j < length - 1 - i; j++) { // 如果j > j + 1位置的元素就交换他们两个元素的位置 if (this.compare(sortData[j], sortData[j + 1], compareOptions === null || compareOptions === void 0 ? void 0 : compareOptions.compareValueKey, compareOptions === null || compareOptions === void 0 ? void 0 : compareOptions.compareFn) === EnumSortCompare.BIGGER_THAN) { this.swap(sortData, j, j + 1); } } } }; /** * 选择排序算法 * @param sortData - 排序数据 * @param compareOptions - [可选]排序参数 */ SortHelper.prototype.selectionSort = function (sortData, compareOptions) { var len = sortData.length; var minIndex = 0; for (var i = 0; i < len; i++) { minIndex = i; for (var j = i; j < len; j++) { if (this.compare(sortData[minIndex], sortData[j], compareOptions === null || compareOptions === void 0 ? void 0 : compareOptions.compareValueKey, compareOptions === null || compareOptions === void 0 ? void 0 : compareOptions.compareFn) === EnumSortCompare.BIGGER_THAN) { minIndex = j; } } if (minIndex !== i) { this.swap(sortData, i, minIndex); } } }; /** * 自定数组两个元素互相交换位置 * @param sortData - 排序数组 * @param index - 第一个交换元素 * @param nextIndex - 第二个交换元素 */ SortHelper.prototype.swap = function (sortData, index, nextIndex) { var tmpData = sortData[index]; sortData[index] = sortData[nextIndex]; sortData[nextIndex] = tmpData; }; /** * 比较两个变量大小,可使用两个对象中的指定字段做比较 * @param a - 比较变量A * @param b - 比较变量B * @param compareValueKey - [可选]比较字段索引 * @param compareCallback - [可选]自定义比较方法 * @returns - 返回比较结果 */ SortHelper.prototype.compare = function (a, b, compareValueKey, compareCallback) { if (lib_utils.isEmpty(compareValueKey)) { if (typeof compareCallback === "function") { return compareCallback(a, b); } else { if (a === b) { return EnumSortCompare.EQUALS; } else if (a > b) { return EnumSortCompare.BIGGER_THAN; } else { return EnumSortCompare.LESS_THAN; } } } else { var compareA = lib_utils.getValue(a, compareValueKey); var compareB = lib_utils.getValue(b, compareValueKey); if (typeof compareCallback === "function") { return compareCallback(compareA, compareB); } else { if (compareA === compareB) { return EnumSortCompare.EQUALS; } else if (compareA > compareB) { return EnumSortCompare.BIGGER_THAN; } else { return EnumSortCompare.LESS_THAN; } } } }; SortHelper = __decorate([Service], SortHelper); return SortHelper; }(); ;// CONCATENATED MODULE: ./src/decorators/Plugin.ts var __assign = undefined && undefined.__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var Plugin_spreadArray = undefined && undefined.__spreadArray || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; /** * 定义插件 * @param enumPluginType - 插件类型 * @param options - 插件扩展参数 * @returns - void */ var Plugin = function Plugin(enumPluginType, options) { return function (Target) { var classType = Reflect.getMetadata(DECORATORS_CLASS_TYPE, Target); if (!lib_utils.isEmpty(classType)) { throw new Error("PluginRender装饰器不允许混合使用。"); } else { var moduleId = "PluginRender_" + lib_utils.guid(); Reflect.defineMetadata(DECORATORS_CLASS_TYPE, DECORATORS_CLASS_TYPE_SERVICE, Target); Reflect.defineMetadata(DECORATORS_MODEL_ID, moduleId, Target); saveToClassPool(enumPluginType, Target); // --- if has index was setting or options.index is numeric then do the sort if ((options === null || options === void 0 ? void 0 : options.index) >= 0) { base_setExecIndex(enumPluginType, []); } if (options) { Reflect.defineMetadata(base_DECORATORS_CLASS_OPTIONS, options, Target); } } }; }; var pluginExec = function pluginExec(event) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var enumPluginType = event.type, methodName = event.name; var allPluginFactory = getAllClassFromPool(enumPluginType) || {}; var execIndexs = getExecIndex(enumPluginType); var finalizeIndex = Object.keys(allPluginFactory); if (utils.isArray(execIndexs) && execIndexs.length !== finalizeIndex.length) { var sortHelper = getServiceObj(SortHelper); sortHelper.bubbleSort(finalizeIndex, { compareFn: function compareFn(pluginId1, pluginId2) { var Plugin1 = allPluginFactory[pluginId1]; var Plugin2 = allPluginFactory[pluginId2]; var option1 = Reflect.getMetadata(DECORATORS_CLASS_OPTIONS, Plugin1); var option2 = Reflect.getMetadata(DECORATORS_CLASS_OPTIONS, Plugin2); var index1 = (option1 === null || option1 === void 0 ? void 0 : option1.index) || 0; var index2 = (option2 === null || option2 === void 0 ? void 0 : option2.index) || 0; return index1 === index2 ? 0 : index1 > index2 ? 1 : -1; } }); setExecIndex(enumPluginType, finalizeIndex); } var execToken = utils.isArray(event.token) ? event.token : !utils.isEmpty(event.token) ? [event.token] : []; var lastResult = null; var lastPluginId = null; finalizeIndex.map(function (pluginId) { var ExecPlugin = allPluginFactory[pluginId]; var execOption = Reflect.getMetadata(DECORATORS_CLASS_OPTIONS, ExecPlugin); var objToken = execOption === null || execOption === void 0 ? void 0 : execOption.token; var isAvailable = utils.isArray(execToken) && execToken.length > 0 ? execToken.indexOf(objToken) >= 0 : true; if (isAvailable) { // 给插件定义token,当前插件的tokenId在允许执行范围内才执行方法 var execObj = getServiceObj(ExecPlugin); if (typeof execObj[methodName] === "function") { lastResult = execObj[methodName].apply(execObj, Plugin_spreadArray([__assign(__assign({}, event.args || {}), { lastPluginId: lastPluginId, lastResult: lastResult, pluginId: pluginId })], args, false)); lastPluginId = pluginId; } } }); return lastResult; }; ;// CONCATENATED MODULE: ./src/decorators/index.ts var decorators_Autowired = Autowired; var decorators_loadComponents = (/* unused pure expression or super */ null && (DCloadComponents)); var decorators_Model = (/* unused pure expression or super */ null && (DCModel)); var decorators_Service = Service; var decorators_Plugin = (/* unused pure expression or super */ null && (DCPlugin)); /* harmony default export */ var decorators = ({ Autowired: Autowired, Model: Model, Plugin: Plugin, Service: Service, loadComponents: loadComponents }); ;// CONCATENATED MODULE: ./src/polyfill/index.ts // import { ReduxController } from "elmer-redux/lib/redux/ReduxController"; /** 将第三方依赖注册为Service组件 */ decorators_Service(lib.VirtualNode); decorators_Service(lib.HtmlParse); decorators_Service(elmer_worker_lib.ElmerWorker); decorators_Service(lib.VirtualRender); // Service(ReduxController); if (!String.prototype["__defineGetter__"]) { // tslint:disable-next-line:typedef String.prototype["__defineGetter__"] = function (color, func) { this[color] = func; }; } if (!Date.prototype.format) { // tslint:disable-next-line: only-arrow-functions Date.prototype.format = function (formatStr) { var year = this.getFullYear(); var month = this.getMonth() + 1; var date = this.getDate(); var hour = this.getHours(); var minutes = this.getMinutes(); var second = this.getSeconds(); var milliseconds = this.getMilliseconds(); month = month > 9 ? month : "0" + month; date = date > 9 ? date : "0" + date; hour = hour > 9 ? hour : "0" + hour; minutes = minutes > 9 ? minutes : "0" + minutes; second = second > 9 ? second : "0" + second; var result = formatStr.replace(/YYYY/g, year).replace(/MM/g, month).replace(/DD/g, date).replace(/H/ig, hour).replace(/i/g, minutes).replace(/ms/g, milliseconds).replace(/s/g, second).replace(/yyyy/g, year).replace(/mm/g, month).replace(/dd/g, date); return result; }; } // EXTERNAL MODULE: ./node_modules/elmer-common/lib/index.js var elmer_common_lib = __webpack_require__(2832); ;// CONCATENATED MODULE: ./src/render/RenderQueue.ts function RenderQueue_typeof(o) { "@babel/helpers - typeof"; return RenderQueue_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, RenderQueue_typeof(o); } var __extends = undefined && undefined.__extends || function () { var _extendStatics = function extendStatics(d, b) { _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; } || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return _extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); _extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var RenderQueue_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : RenderQueue_typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; /** * 队列执行渲染任务 * 1、当前模块主要功能将一次渲染当做一个任务推送到队列中去执行 * 2、在第一次渲染还未执行结束时触发第二次或更多次渲染任务,在第一次渲染结束以后,立即执行第二次渲染,此时会将新增的任务数据合并一次执行 */ var RenderQueue = /** @class */function (_super) { __extends(RenderQueue, _super); function RenderQueue() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.queueList = {}; return _this; } RenderQueue.prototype.startAction = function (sessionId, options, renderCallback, finishCallback) { var _this = this; return new Promise(function (resolve, reject) { var actionId = "queueRenderAction_" + _this.guid(); if (!_this.queueList[sessionId]) { _this.queueList[sessionId] = { actionList: [], actionRuning: false, actionRuningIndexs: [], lastActionIndex: -1, render: renderCallback }; } _this.queueList[sessionId].onFinish = finishCallback; _this.queueList[sessionId].actionList.push({ actionId: actionId, isRended: false, options: options, reject: reject, resolve: resolve }); _this.runActions(sessionId); }); }; RenderQueue.prototype.runActions = function (sessionId) { var _this = this; var renderSession = this.queueList[sessionId]; if (!renderSession.actionRuning) { // 没有正在执行任务,开始检测状态并进入执行阶段 // 当有任务正在执行时跳过触发阶段 var actionLength = renderSession.actionList.length; if (actionLength > 0) { // has task waiting var updateState = {}; var updateData = {}; var updateProps = {}; var firstRender = false; for (var i = actionLength - 1; i > renderSession.lastActionIndex; i--) { if (!renderSession.actionList[i].isRended) { // 合并队列中的数据,统一执行一次 // 添加当前队列索引到执行状态的列表中,下一次执行任务忽略执行过的队列 var curAction = renderSession.actionList[i]; firstRender = curAction.options.firstRender; this.extend(updateState, curAction.options.state); this.extend(updateData, curAction.options.data); this.extend(updateProps, curAction.options.props); renderSession.actionRuningIndexs.push(i); renderSession.actionList[i].isRended = true; } } renderSession.lastActionIndex = actionLength - 1; renderSession.actionRuning = true; renderSession.render({ data: updateData, props: updateProps, state: updateState, // tslint:disable-next-line: object-literal-sort-keys firstRender: firstRender }).then(function () { // 将当前执行的数据都 _this.checkSessionStatus(sessionId, false); }).catch(function (err) { var _a; // tslint:disable-next-line: no-console console.error(((_a = err.exception) === null || _a === void 0 ? void 0 : _a.stack) || err.stack || err); _this.checkSessionStatus(sessionId, true, err); }); } } }; RenderQueue.prototype.checkSessionStatus = function (sessionId, error, exception) { var renderSession = this.queueList[sessionId]; if (renderSession && renderSession.actionList) { // 当任务队列长度等于已经执行过的索引长度一致时可认为任务已经执行完成 var finished = renderSession.actionList.length === renderSession.actionRuningIndexs.length; if (finished) { // 任务结束以后执行回调 renderSession.actionRuning = false; for (var _i = 0, _a = renderSession.actionList; _i < _a.length; _i++) { var action = _a[_i]; if (error) { action.reject(exception); } else { action.resolve({}); } } // 通知最后一次触发任务时的回调,某些场景不需要每次渲染任务结束都需要执行操作 typeof renderSession.onFinish === "function" && renderSession.onFinish(); } else { // 任务未执行完成,继续下一次任务 renderSession.actionRuning = false; this.runActions(sessionId); } } }; RenderQueue.className = "RenderQueue"; RenderQueue = RenderQueue_decorate([decorators_Service], RenderQueue); return RenderQueue; }(elmer_common_lib.Common); ;// CONCATENATED MODULE: ./src/events/ElmerEvent.ts function ElmerEvent_typeof(o) { "@babel/helpers - typeof"; return ElmerEvent_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, ElmerEvent_typeof(o); } var ElmerEvent_extends = undefined && undefined.__extends || function () { var _extendStatics = function extendStatics(d, b) { _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; } || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return _extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); _extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var ElmerEvent_decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : ElmerEvent_typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = undefined && undefined.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : ElmerEvent_typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var ElmerEvent = /** @class */function (_super) { ElmerEvent_extends(ElmerEvent, _super); function ElmerEvent(worker) { var _this = _super.call(this) || this; _this.eventListeners = {}; _this.eventData = {}; _this.eventHandlers = []; _this.eventOriginHandler = {}; _this.worker = worker; return _this; } ElmerEvent.prototype.dispose = function () { var _this = this; Object.keys(this.eventListeners).map(function (eventName) { var evtObj = _this.eventListeners[eventName]; Object.keys(evtObj).map(function (evtId) { _this.removeEvent(document.body, eventName, evtObj[evtId].callback); }); delete _this.eventListeners[eventName]; }); this.eventListeners = {}; }; ElmerEvent.prototype.subscribe = function (dom, options) { var _this = this; var eventId = "Event_" + elmer_common_lib.utils.guid().replace(/\-/g, "") + "_" + new Date().getTime(); try { var bindEventName = options.eventName; var EUIEventsOption = options.eventName !== "resize" ? dom.EUIEventsOption : null; EUIEventsOption = EUIEventsOption || { depth: options.depth, eventId: eventId, events: {}, path: options.path, virtualId: options.virtualId, virtualNodePath: options.virtualNodePath, virtualPath: options.virtualPath }; if (!this.eventData[bindEventName]) { var invokeEvent = function invokeEvent(event) { var eventPath = event.path; if (eventPath) { if (event.type !== "resize" && eventPath && eventPath.length > 0) { var srcEventDom = void 0; var eventOptions = void 0; for (var i = 0; i < eventPath.length; i++) { var myOptions = eventPath[i].EUIEventsOption; if (myOptions) { eventOptions = myOptions; srcEventDom = eventPath[i]; break; } } if (srcEventDom) { // find the event target that event handler was bind by ElmerEvent _this.callEventHandler(eventOptions, event); } } else { _this.callResizeEventHandler(event); } } else { var srcEventDom = event.target; var myOptions = srcEventDom.EUIEventsOption; _this.callEventHandler(myOptions, event); } }; this.addEventListener(options.eventName, invokeEvent); this.eventData[bindEventName] = {}; // 将初始事件处理方法保留,以便后面做删除操作 this.eventOriginHandler[bindEventName] = invokeEvent; } if (!EUIEventsOption.events[bindEventName]) { EUIEventsOption.events[bindEventName] = eventId; } else { throw new Error("The event of ".concat(options.eventName, " already has event handler.")); } if (options.eventName !== "resize") { dom.EUIEventsOption = EUIEventsOption; } this.eventData[bindEventName][eventId] = options; this.eventHandlers.push({ depth: options.depth, eventId: eventId, eventName: bindEventName, path: options.path, virtualId: options.virtualId, virtualNodePath: options.virtualNodePath, virtualPath: options.virtualPath }); } catch (e) { // tslint:disable-next-line: no-console console.error(e); } return eventId; }; /** * 移除事件监听 * @param virtualNodeId - (optional)自定义组件虚拟节点ID * @param eventId - (optional)要删除的事件ID列表 */ ElmerEvent.prototype.unsubscribe = function (virtualNodeId, eventIds) { var _this = this; if (!elmer_common_lib.utils.isEmpty(virtualNodeId) || (eventIds === null || eventIds === void 0 ? void 0 : eventIds.length) > 0) { var newEventHandler = []; // 将事件从事件索引列表删除 for (var i = this.eventHandlers.length - 1; i >= 0; i--) { var evt = this.eventHandlers[i]; var isRemoved = false; if ((evt === null || evt === void 0 ? void 0 : evt.virtualId) === virtualNodeId) { // 当前事件监听所在虚拟domID与移除事件监听dom相同 isRemoved = true; } if (!isRemoved) { // 当前事件监听所在虚拟domID与移除事件监听dom不相同时 if (eventIds && eventIds.indexOf(evt.eventId) >= 0) { // 事件ID和移除事件ID相同 isRemoved = true; } } !isRemoved && newEventHandler.push(evt); } this.eventHandlers = newEventHandler; // 将事件监听从监听源数据删除 Object.keys(this.eventData).map(function (eventName) { var evtInfo = _this.eventData[eventName]; Object.keys(evtInfo).map(function (eventId) { var isDelete = false; if (eventIds && eventIds.indexOf(eventId) >= 0) { isDelete = true; delete evtInfo[eventId]; } if ((!isDelete && evtInfo[eventId]).virtualId === virtualNodeId) { delete evtInfo[eventId]; } }); if (Object.keys(evtInfo).length <= 0) { // 当所有事件监听都从虚拟节点移除以后,将根元素的事件监听移除 // 保证所有做过删除的事件不会被调用两次 _this.removeEventListen(eventName, _this.eventOriginHandler[eventName]); delete _this.eventData[eventName]; delete _this.eventOriginHandler[eventName]; } }); } }; /** * 当dom元素由于Delete操作导致后面的元素位置变化需要更新path到指定节点事件绑定对象上 * @param events - 当前元素绑定的事件信息 Type TypeEvents<T={}> = {[P in keyof T]: String} * @param newPath - 当前元素最新的位置路径 */ ElmerEvent.prototype.updateEventPath = function (events, newPath) { var _this = this; var updateEvents = []; Object.keys(events).map(function (eventName) { updateEvents.push(events[eventName]); }); for (var i = 0; i < this.eventHandlers.length; i++) { var eventId = this.eventHandlers[i].eventId; if (updateEvents.indexOf(eventId) >= 0) { this.eventHandlers[i].path = newPath; } } Object.keys(this.eventData).map(function (eventName) { var eventData = _this.eventData[eventName]; Object.keys(eventData).map(function (eventId) { if (updateEvents.indexOf(eventId) >= 0) { eventData[eventId].path = newPath; } }); }); }; ElmerEvent.prototype.callResizeEventHandler = function (event) { var _this = this; this.worker.callObjMethod("elmerEvent", "resizeEventSortAction", this.eventHandlers).then(function (resp) { if (/^200$/.test(resp.statusCode)) { var matchEvents = resp.data || []; var eventHandlers = _this.eventData["resize"]; if (eventHandlers) { var callEventOptions = { cancelBubble: false, height: window.innerHeight, nativeEvent: event, width: window.innerWidth }; for (var _i = 0, matchEvents_1 = matchEvents; _i < matchEvents_1.length; _i++) { var evt = matchEvents_1[_i]; var handler = eventHandlers[evt.eventId]; var callback = handler.callback; typeof (handler === null || handler === void 0 ? void 0 : handler.callback) === "function" && callback(callEventOptions); } } } }).catch(function (err) { // tslint:disable-next-line: no-console console.error(err); }); }; /** * 响应事件,查找到在事件触发返回的callback并触发,如果遇到cancelBubble将停止事件冒泡 * @param eventOptions - 保存到dom节点上的数据 * @param event - Native Event */ ElmerEvent.prototype.callEventHandler = function (eventOptions, event) { var _this = this; this.worker.callObjMethod("elmerEvent", "eventHandleSort", event.type, eventOptions, this.eventHandlers).then(function (resp) { if (/^200$/.test(resp.statusCode)) { var matchEvents = resp.data || []; if (matchEvents.length > 0) { var callEventOptions = { cancelBubble: false, dataSet: null, nativeEvent: event, srcElement: event.srcElement }; /** 针对特殊事件做处理,在事件池保存name区分大小写 */ var type = /animationEnd$/i.test(event.type) ? "animationEnd" : /transitionEnd$/i.test(event.type) ? "transitionEnd" : event.type; var eventHandlers = _this.eventData[type]; if (eventHandlers) { for (var _i = 0, matchEvents_2 = matchEvents; _i < matchEvents_2.length; _i++) { var evt = matchEvents_2[_i]; var handler = eventHandlers[evt.eventId]; if (handler) { var callback = handler.callback; var eventTarget = handler.target; callEventOptions.currentTarget = eventTarget; callEventOptions.dataSet = handler.dataSet; callEventOptions.data = handler.data; if (/^input$/i.test(eventTarget.tagName)) { if (/^(radio|checkbox)$/i.test(eventTarget.type)) { callEventOptions.checked = eventTarget.checked; } else { callEventOptions.value = eventTarget.value; } } else if (/^(textarea|select)$/i.test(eventTarget.tagName)) { callEventOptions.value = eventTarget.value; } if (/^mouse/i.test(type)) { // mouse event callEventOptions.x = event.x; callEventOptions.y = event.y; } else if (/^touch/i.test(type)) { callEventOptions.touches = event.touches; } typeof (handler === null || handler === void 0 ? void 0 : handler.callback) === "function" && callback(callEventOptions); // console.log(callback, evt.eventId); if (callEventOptions.cancelBubble) { break; } } } } } } }).catch(function (error) { // tslint:disable-next-line: no-console console.error(error); }); }; ElmerEvent.prototype.addEventListener = function (eventName, eventCallback) { if (eventName !== "resize") { this.addEvent(document.body, eventName, eventCallback); if (eventName === "animationEnd") { this.addEvent(document.body, "webkitAnimationEnd", eventCallback); this.addEvent(document.body, "mozAnimationEnd", eventCallback); this.addEvent(document.body, "msAnimationEnd", eventCallback); this.addEvent(document.body, "oAnimationEnd", eventCallback); } else if (eventName === "transitionEnd") { this.addEvent(document.body, "webkitTransitionEnd", eventCallback); this.addEvent(document.body, "mozTransitionEnd", eventCallback); this.addEvent(document.body, "msTransitionEnd", eventCallback); this.addEvent(document.body, "oTransitionEnd", eventCallback); } } else { this.addEvent(window, eventName, eventCallback); } }; ElmerEvent.prototype.removeEventListen = function (eventName, callback) { if (eventName !== "resize") { this.removeEvent(document.body, eventName, callback); if (eventName === "animationEnd") { this.removeEvent(document.body, "webkitAnimationEnd", callback); this.removeEvent(document.body, "mozAnimationEnd", callback); this.removeEvent(document.body, "msAnimationEnd", callback); this.removeEvent(document.body, "oAnimationEnd", callback); } else if (eventName === "transitionEnd") { this.removeEvent(document.body, "webkitTransitionEnd", callback); this.removeEvent(document.body, "mozTransitionEnd", callback); this.removeEvent(document.body, "msTransitionEnd", callback); this.removeEvent(document.body, "oTransitionEnd", callback); } } else { this.removeEvent(window, "resize", callback); } }; ElmerEvent.prototype.addEvent = function (dom, eventName, callback) { if (dom.addEventListener) { dom.addEventListener(eventName, callback, { passive: true }); } else if (dom.attachEvent) { dom.attachEvent("on" + eventName, callback); } }; ElmerEvent.prototype.removeEvent = function (dom, eventName, callback) { if (dom.removeEventListener) { dom.removeEventListener(eventName, callback); } else if (dom.detachEvent) { dom.detachEvent("on" + eventName, callback); } }; ElmerEvent = ElmerEvent_decorate([decorators_Service, __metadata("design:paramtypes", [elmer_worker_lib.ElmerWorker])], ElmerEvent); return ElmerEvent; }(elmer_common_lib.Common); ;// CONCATENATED MODULE: ./src/events/EventNames.ts var EventNames = ["abort", "activate", "beforeactivate", "beforecopy", "beforecut", "beforedeactivate", "beforepaste", "blur", "canplay", "canplaythrough", "change", "click", "contextmenu", "copy", "cuechange", "cut", "dblclick", "deactivate", "drag", "dragend", "dragenter", "dragleave", "dragover", "dragstart", "drop", "durationchange", "emptied", "ended", "error", "focus", "input", "invalid", "keydown", "keypress", "keyup", "load", "loadeddata", "loadedmetadata", "loadstart", "mousedown", "mouseenter", "mouseleave", "mousemove", "mouseo