UNPKG

yyuap-template

Version:

template project which is based on tinper

396 lines (390 loc) 13.5 kB
(function (global, factory) { if (typeof define === "function" && define.amd) { define([], factory); } else if (typeof exports !== "undefined") { factory(); } else { var mod = { exports: {} }; factory(); global.jDiwork = mod.exports; } })(this, function () { "use strict"; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; (function (f) { var g; if (typeof window !== "undefined") { g = window; } else if (typeof global !== "undefined") { g = global; } else if (typeof self !== "undefined") { g = self; } else { g = this; } g.jDiwork = f(); })(function () { var callbackMaps = {}; var callbackQueue = {}; var callbackPrevents = {}; var isReady = false; var uid = 0; var messType = 'JDIWORK'; var originList = ['http://workbench.yyuap.com', 'http://workbenchdev.yyuap.com', 'https://www.diwork.com', 'https://workbench-daily.yyuap.com', window.location.origin]; // ie9下的substring if (navigator.userAgent.indexOf('MSIE 9.0') < 0) { originList.push(window.location.origin.substring(0, window.location.origin.lastIndexOf(':') + 1) + '3000'); } var getUid = function getUid() { return ++uid; }; var emit = function emit(event) { try { var type = event.type.split(':'); var name = type[0]; var id = type[1]; var data = typeof event.data === 'undefined' ? false : event.data; var map = callbackMaps[name]; var destroy = typeof event.destroy === 'undefined' ? true : event.destroy; } catch (e) { console.log(e); return; } if (map && map[id]) { clearTimeout(map[id].timer); var result = map[id].callback(data); if (destroy) { delete map[id]; } return result; } }; var emitPreventCallBack = function emitPreventCallBack(event) { try { var type = event.type.split(':'); var name = type[0]; var id = type[1]; var data = typeof event.data === 'undefined' ? false : event.data; var map = callbackPrevents[name]; var destroy = typeof event.destroy === 'undefined' ? true : event.destroy; } catch (e) { console.log(e); return; } if (map && map[id]) { var result = map[id].callback(data); if (destroy) { delete map[id]; } return result; } }; var reg = function reg(name, callback, autoClear) { autoClear = typeof autoClear === 'undefined' ? true : autoClear; var map = callbackMaps[name]; var uid = getUid(); var callbackObj = { callback: callback, timer: autoClear ? setTimeout(function () { callback(false); delete map[uid]; }, 500) : 0 }; if (map) { map[uid] = callbackObj; } else { map = {}; map[uid] = callbackObj; callbackMaps[name] = map; } return name + ':' + uid; }; var regPrevent = function regPrevent(name, callback) { var map = callbackPrevents[name + '_prevent']; var uid = getUid(); var callbackObj = { callback: callback }; if (map) { map[uid] = callbackObj; } else { map = {}; map[uid] = callbackObj; callbackPrevents[name + '_prevent'] = map; } return name + '_prevent:' + uid; }; var cancel = function cancel(type) { try { type = event.type.split(':'); var name = type[0]; var id = type[1]; var map = callbackMaps[name]; } catch (e) { console.log(e); return; } if (map && id && map[id]) { if (map[id].timer) { clearTimeout(map[id].timer); } delete map[id]; } else if (map && !id) { for (var key in map) { if (map[key].timer) { clearTimeout(map[id].timer); } delete map[key]; } } }; var trigger = function trigger(event) { try { var name = event.type; var data = event.data; var queue = callbackQueue[name]; } catch (e) { console.log(e); return; } if (queue && queue.length) { for (var i = 0, l = queue.length; i < l; i++) { queue[i](data); } } }; var on = function on(name, callback) { var queue = callbackQueue[name]; if (queue) { queue.push(callback); } else { callbackQueue[name] = [callback]; } }; var remove = function remove(name, callback) { var queue = callbackQueue[name]; if (queue) { if (callback) { var index = queue.indexOf(callback); if (index !== -1) { queue.splice(index, 1); } } else { delete callbackQueue[name]; } } }; var postToDiwork = function postToDiwork(data) { data.messType = messType; window.top.postMessage(JSON.stringify(data), '*'); }; var ready = function ready(callback) { var event = { type: reg('ready', callback) }; if (isReady) { emit(event); } else { setTimeout(function () { emit(event); }, 0); } }; var openService = function openService(serviceCode, data, type, callback) { postToDiwork({ detail: { serviceCode: serviceCode, data: data, type: type }, callbackId: reg('openService', callback) }); }; var closeDialog = function closeDialog() { postToDiwork({ callbackId: 'closeDialog' }); cancel(this.onClose); if (this.btns) { this.btns.forEach(function (btn) { cancel(btn.fun); }); } cancel('openDialog'); }; var openDialog = function openDialog(options, callback) { if (options.btns && options.btns.length) { options.btns = options.btns.map(function (btn, i) { if (btn.fun) { var tempBtnFun = btn.fun; btn.fun = reg('dialogBtnClick', function () { tempBtnFun(closeDialog.bind(options)); }, false); } else { btn.fun = reg('dialogBtnClick', closeDialog.bind(options), false); } return btn; }); } if (options.onClose) { var onClose = options.onClose; options.onClose = reg('dialogOnClose', function () { if (onClose()) { closeDialog.call(options); } }, false); } else { options.onClose = reg('dialogOnClose', closeDialog.bind(options), false); } postToDiwork({ detail: { options: options }, callbackId: reg('openDialog', callback) }); }; var addBrm = function addBrm(name, callback) { postToDiwork({ detail: { name: name, url: window.location.href }, callbackId: reg('addBrm', callback) }); }; var addBrm_prevent = function addBrm_prevent(name, callback) { postToDiwork({ detail: { name: name, url: window.location.href }, callbackId: regPrevent('addBrm', callback) }); }; var popBrm = function popBrm(index, callback) { postToDiwork({ detail: { index: index, url: window.location.href }, callbackId: reg('popBrm', callback) }); }; var getBrm = function getBrm(callback) { postToDiwork({ callbackId: reg('getBrm', callback) }); }; var checkServiceOpen = function checkServiceOpen(serviceCode, callback) { postToDiwork({ detail: { serviceCode: serviceCode }, callbackId: reg('checkServiceOpen', callback) }); }; var postDataToService = function postDataToService(serviceCode, data, callback) { postToDiwork({ detail: { serviceCode: serviceCode, data: data }, callbackId: reg('postDataToService', callback) }); }; var getContext = function getContext(callback) { postToDiwork({ callbackId: reg('getContext', callback) }); }; var getHost = function getHost(detail, callback) { postToDiwork({ detail: detail, callbackId: reg('getHost', callback) }); }; var onData = function onData(callback) { on('data', callback); }; var customMessage = function customMessage(type) { postToDiwork({ callbackId: type }); }; var openMessage = function openMessage(data, callback) { postToDiwork({ detail: data, callbackId: reg('openMessage', callback || function () {}) }); }; var showDialog = function showDialog(data, callback) { postToDiwork({ detail: data, callbackId: reg('showDialog', callback || function () {}) }); }; var closeDialogNew = function closeDialogNew(data, callback) { postToDiwork({ detail: data, callbackId: reg('closeDialogNew', callback || function () {}) }); }; window.addEventListener('DOMContentLoaded', function () { isReady = true; }, false); window.addEventListener('message', function (event) { var data = event.data; if (!data) { return; } try { if (typeof data === 'string') { data = JSON.parse(data); } } catch (e) { console.log(e); return; } if (data && (typeof data === "undefined" ? "undefined" : _typeof(data)) === 'object' && data.type) { if (data.type.indexOf(':') < 0) { trigger(data); } else { if (data.type.indexOf('_prevent') > 0) { emitPreventCallBack(data); } else { emit(data); } } } }, false); window.addEventListener('click', function () { postToDiwork({ callbackId: 'rootClick' }); }, false); return { ready: ready, openService: openService, checkServiceOpen: checkServiceOpen, addBrm: addBrm, addBrm_prevent: addBrm_prevent, popBrm: popBrm, getBrm: getBrm, openDialog: openDialog, onData: onData, getContext: getContext, getHost: getHost, postDataToService: postDataToService, customMessage: customMessage, openMessage: openMessage, showDialog: showDialog, closeDialogNew: closeDialogNew }; }); });