UNPKG

yylib-quick-mobile

Version:

yylib-quick-mobile

108 lines (102 loc) 4.65 kB
'use strict'; var loader = require('./loader'); var _ = require('lodash'); var mathUtil = require('./MathUtils'); var formatUtils = require('./formatUtils'); var JsPluginUtils = { init: function init(options) { var _ref = options || {}, page = _ref.page, uiEvent = _ref.uiEvent; if (!page) return; var loadPath = page.getJsPluginUrl(); var pageCode = page.getPageCode(); if (loadPath && pageCode && uiEvent) { if (window["YYPlugin_" + pageCode]) { JsPluginUtils.merge(options); } else { loader.loadJS(loadPath, function () { JsPluginUtils.merge(options); }); } } }, merge: function merge(options) { var transUtils = { _: _, ajax: window.YYUtils.Ajax, authToken: window.YYUtils.AuthToken, mathUtil: mathUtil, formatUtils: formatUtils }; var _ref2 = options || {}, page = _ref2.page, uiEvent = _ref2.uiEvent; if (!page) return; var loadPath = page.getJsPluginUrl(); var pageCode = page.getPageCode(); if (loadPath && pageCode && uiEvent) { if (window["YYPlugin_" + pageCode]) { var pluginEvents = this.dealPluginEvent(page, window["YYPlugin_" + pageCode](transUtils)); var allEvent = this.combineEvent(pluginEvents, uiEvent); var returnEvent = this.transEvent(allEvent, page, pluginEvents); page.refresh(null, { uiEvent: returnEvent }); } else { console.error("请按规范命名当前页面扩展插件的方法名,缺少方法:YYPlugin_" + pageCode); } } }, dealPluginEvent: function dealPluginEvent(page, copyEvents) { for (var uikey in copyEvents) { var itemEvents = copyEvents[uikey]; for (var name in itemEvents) { if (itemEvents[name] && typeof itemEvents[name] == 'function') { itemEvents[name] = itemEvents[name].bind(page); } else { console.error('[绑定事件失败]' + uikey + '.' + name + ',检查是否为有效的Function', err); } } } return copyEvents; }, combineEvent: function combineEvent(pluginEvents, _uiEvent) { for (var item in _uiEvent) { if (pluginEvents[item]) { _.assign(_uiEvent[item], pluginEvents[item]); } } for (var item in pluginEvents) { if (!_uiEvent[item]) { _uiEvent[item] = pluginEvents[item]; } } return _uiEvent; }, transEvent: function transEvent(uiEvent, page, pluginEvents) { var _uiEvent = _.cloneDeep(uiEvent); for (var uikey in _uiEvent) { for (var eventName in _uiEvent[uikey]) { if (eventName.indexOf('before_') == -1 && eventName.indexOf('after_') == -1 && pluginEvents[uikey] && (typeof pluginEvents[uikey][eventName] == "function" || typeof pluginEvents[uikey]["before_" + eventName] == "function" || typeof pluginEvents[uikey]["after_" + eventName] == "function")) { (function (key, name) { var originFunc = _uiEvent[key][name]; _uiEvent[key][name] = function () { var originFuncParams = arguments; var mainSet = new Promise(function (resolve, reject) { console.log("执行" + key + "组件事件:" + name); resolve("success"); }).then(function () { if (_uiEvent[key]["before_" + name]) { return _uiEvent[key]["before_" + name].apply(page, originFuncParams); } }).then(function () { return originFunc.apply(page, originFuncParams); }).then(function () { if (_uiEvent[key]["after_" + name]) { _uiEvent[key]["after_" + name].apply(page, originFuncParams); } }).catch(function (msg) { console.log(msg); }); }; })(uikey, eventName); } } } return _uiEvent; } }; module.exports = JsPluginUtils;