UNPKG

@molejs/mole-jssdk

Version:

mole app jssdk

625 lines (551 loc) 16.8 kB
/* object-assign (c) Sindre Sorhus @license MIT */ /* eslint-disable no-unused-vars */ var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError('Object.assign cannot be called with null or undefined'); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } // Detect buggy property enumeration order in older V8 versions. // https://bugs.chromium.org/p/v8/issues/detail?id=4118 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers test1[5] = 'de'; if (Object.getOwnPropertyNames(test1)[0] === '5') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test2 = {}; for (var i = 0; i < 10; i++) { test2['_' + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function (n) { return test2[n]; }); if (order2.join('') !== '0123456789') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test3 = {}; 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { return false; } return true; } catch (err) { // We don't expect any of the above to throw, but better to be safe. return false; } } var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; function dingTalkPolyfill () { return { openNewPage: function openNewPage(_ref) { var url = _ref.url; window.dd.biz.util.openLink({ url: url }); }, get version() { return window.dd.version; } }; } var ua = window.navigator.userAgent; function dynamicLoadJs(url, callback) { var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; if (typeof callback == 'function') { script.onload = script.onreadystatechange = function () { if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") { callback(); script.onload = script.onreadystatechange = null; } }; } head.appendChild(script); } var platform = { get iPhoneX() { return (/iphone/gi.test(ua) && screen.height == 812 && screen.width == 375 ); }, get iPhoneXR() { return (/iphone/gi.test(window.navigator.userAgent) && window.devicePixelRatio && window.devicePixelRatio === 2 && window.screen.width === 414 && window.screen.height === 896 ); }, get iPhoneXSMax() { return (/iphone/gi.test(window.navigator.userAgent) && window.devicePixelRatio && window.devicePixelRatio === 3 && window.screen.width === 414 && window.screen.height === 896 ); }, get os() { if (ua.match(/(Android);?[\s\/]+([\d.]+)?/)) { return 'android'; } var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/); if (ipad || iphone || ipod) return 'ios'; return ''; }, get container() { if (ua.toLowerCase().match(/upaasapp/i)) return 'italent'; if (ua.toLowerCase().match(/tita/i)) return 'tita'; if (ua.match(/DingTalk/i)) return 'dingTalk'; if (ua.match(/MicroMessenger/i)) return 'wechart'; if (ua.match(/wxwork/i)) return 'wxwork'; return 'browser'; }, get OS() { if (ua.match(/(Android);?[\s\/]+([\d.]+)?/)) { return 'android'; } var ipad = ua.match(/(iPad).*OS\s([\d_]+)/); var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/); if (ipad || iphone || ipod) return 'ios'; return ''; }, get ShellName() { if (ua.toLowerCase().match(/upaasapp/i)) return 'italent'; if (ua.toLowerCase().match(/tita/i)) return 'tita'; if (ua.match(/DingTalk/i)) return 'dingTalk'; if (ua.match(/MicroMessenger/i)) return 'wechart'; if (ua.match(/wxwork/i)) return 'wxwork'; return 'browser'; }, get web() { if (/mobile|android|iphone|ipad|phone/i.test(ua) && !platform.bsAppAndroid && !platform.bsAppIOS) { return true; } return false; }, get ios() { return platform.os === 'ios'; }, get android() { return platform.os === 'android'; }, get weixin() { return !!ua.match(/MicroMessenger/i); }, get weixinWork() { return !!ua.match(/wxwork/i); }, get bsAppIOS() { return !!ua.toLowerCase().match(/beisen/i) && platform.ios && platform.apiCloud; }, get beisenApp() { return platform.bsAppIOS || platform.bsAppAndroid; }, get bsAppAndroid() { return !!ua.toLowerCase().match(/beisen/i) && platform.android; }, get apiCloud() { return !!ua.toLowerCase().match(/apicloud/i); }, get titaApp() { return !!ua.toLowerCase().match(/tita/i); }, get titav2App() { return !!ua.match(/Titav2/i); }, get upaasApp() { return !!ua.toLowerCase().match(/upaasapp/i); }, get dingTalk() { return !!ua.match(/DingTalk/i); }, get bayer() { return !!ua.match(/Bayer/i); }, get iTalentIOS() { return platform.ios && platform.apiCloud && platform.upaasApp; }, get iTalentAndroid() { return platform.android && platform.upaasApp; }, get iTalentWeb() { return false; }, get api() { return platform.bsAppIOS ? window.api || window.top.api || {} : window.BSJSBridge; }, waitApi: function waitApi() { var t = void 0; return new Promise(function (reslove, reject) { if (!!ua.match(/DingTalk/i)) { return dynamicLoadJs('//g.alicdn.com/dingding/dingtalk-jsapi/2.3.0/dingtalk.open.js', function () { window.api = dingTalkPolyfill(window.dd); return reslove({}); }); } if (platform.bsAppAndroid) { if (window.BSJSBridge || window.parent.BSJSBridge) { return reslove({ api: window.BSJSBridge || window.parent.BSJSBridge }); } t = setInterval(function () { if (window.BSJSBridge || window.parent.BSJSBridge) { clearInterval(t); return reslove({ api: window.BSJSBridge || window.parent.BSJSBridge }); } }, 16); } else if (platform.bsAppIOS) { if (window.api || window.parent.api) { return reslove({ api: window.api || window.parent.api }); } t = setInterval(function () { if (window.api || window.parent.api) { clearInterval(t); return reslove({ api: window.api || window.parent.api }); } }, 16); } else { return reslove({}); } }); }, waitApiV2: function waitApiV2() { var t = void 0; return new Promise(function (reslove, reject) { if (platform.dingTalk) { return dynamicLoadJs('//g.alicdn.com/dingding/dingtalk-jsapi/2.3.0/dingtalk.open.js', function () { window.api = dingTalkPolyfill(window.dd); return reslove({}); }); } if (platform.bsAppAndroid) { if (window.bsapi || window.parent.bsapi) { return reslove({ api: window.bsapi || window.parent.bsapi }); } t = setInterval(function () { if (window.bsapi || window.parent.bsapi) { clearInterval(t); return reslove({ api: window.bsapi || window.parent.bsapi }); } }, 16); } else if (platform.bsAppIOS) { if (window.api || window.parent.api) { return reslove({ api: window.api || window.parent.api }); } t = setInterval(function () { if (window.api || window.parent.api) { clearInterval(t); return reslove({ api: window.api || window.parent.api }); } }, 16); } }); }, select: function select() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var mobile = params.mobile, androidApp = params.androidApp, iosApp = params.iosApp, beisenApp = params.beisenApp, weixin = params.weixin, weixinWork = params.weixinWork, dingTalk = params.dingTalk; var cb = void 0; if (platform.bsAppIOS && iosApp) { cb = iosApp; } else if (platform.bsAppAndroid && androidApp) { cb = androidApp; } else if (platform.dingTalk && dingTalk) { cb = dingTalk; } else if (platform.weixin && weixin) { cb = weixin; } else if (platform.weixinWork && weixinWork) { cb = weixinWork; } else { cb = mobile; } if (platform.beisenApp && beisenApp) { cb = beisenApp; } if (typeof cb === 'function') { return cb(); } } }; function getApi() { return platform.select({ iosApp: function iosApp() { return window.api || window.parent.api; }, androidApp: function androidApp() { return window.BSJSBridge || window.parent.BSJSBridge; } }); } function notify() { var param = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var cb = arguments[1]; getApi().callHandler('bs-droid-event', { param: param }, function (ret, err) { return cb && cb(window.JSON.parse(ret), err); }); } var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var objectWithoutProperties = function (obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }; var iconIOSMapings = { history: 'sys-icon-banci', back: 'm-sys-backward', close: 'm-sys-guanbi', share: 'upaas-icon-share', 'm-sys-backward': 'm-sys-backward', 'm-sys-guanbi': 'm-sys-guanbi', 'upaas-icon-share': 'upaas-icon-share' }; var iconAndroidMapings = { history: 'history', back: 'back', close: 'close', share: 'upaas-icon-share' }; var navBarHelper = { getIcon: function getIcon(iconName) { return platform.select({ iosApp: function iosApp() { return iconIOSMapings[iconName]; }, androidApp: function androidApp() { return iconAndroidMapings[iconName]; } }); }, getColor: function getColor() { var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var defaultColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#fafafa'; return platform.select({ iosApp: function iosApp() { return color; }, androidApp: function androidApp() { if (color.match(/#fff|#ffffff|(rgb)a?\(255,/gi)) { return defaultColor; } return color; } }); }, getItemStyle: function getItemStyle(data) { var _ref = data.style || { color: '#667580' }, fontSize = _ref.fontSize, _ref$color = _ref.color, color = _ref$color === undefined ? '#667580' : _ref$color; var newColor = this.getColor(color); return platform.select({ iosApp: function iosApp() { return { style: _extends({ color: '#667580' }, data.style) }; }, androidApp: function androidApp() { return { fontSize: fontSize, color: newColor, textColor: newColor }; } }); }, isControl: function isControl(data) { return !data.control || data.useDefault || data.init; }, getDefaultCallback: function getDefaultCallback(data) { var type = data.type; if (type === 'back') { return 'handleBack'; } else if (type === 'close') { return 'handleClose'; } else { return data.callback; } } }; var default_leftItem = [{ type: 'back', icon: 'm-sys-backward', useDefault: true, control: false, callback: 'handleBack' }]; function getiOSApi() { return window.api || window.top.api; } function openNewPage(options) { platform.waitApi().then(function () { var params = objectAssign({}, options); var url = params.url, pageId = params.pageId, _params$navBar = params.navBar, navBar = _params$navBar === undefined ? { show: true } : _params$navBar, _params$header = params.header, header = _params$header === undefined ? {} : _params$header, _params$referrer = params.referrer, referrer = _params$referrer === undefined ? '' : _params$referrer, tag = params.tag, _params$features = params.features, features = _params$features === undefined ? {} : _params$features, _params$winAttrs = params.winAttrs, winAttrs = _params$winAttrs === undefined ? {} : _params$winAttrs, restParam = objectWithoutProperties(params, ['url', 'pageId', 'navBar', 'header', 'referrer', 'tag', 'features', 'winAttrs']); var _navBar$show = navBar.show, navBarShow = _navBar$show === undefined ? true : _navBar$show; if (navBarShow) { navBar.options = objectAssign({}, { leftItem: default_leftItem }, navBar.options); if (navBar.options.rightItem && navBar.options.rightItem.length > 0) { navBar.options.rightItem.forEach(function (item) { objectAssign(item, _extends({ useDefault: !item.control, init: !item.control, icon: navBarHelper.getIcon(item.icon || item.type) }, navBarHelper.getItemStyle(item))); if (!item.control || item.useDefault || item.init) { item.callback = '$$rightback$$'; } }); } if (platform.titaApp || platform.titav2App) { navBar.options.leftItem = navBar.options.leftItem.filter(function (item) { return item.type !== 'close'; }); } navBar.options.leftItem.forEach(function (item) { objectAssign(item, _extends({ useDefault: !item.control, init: !item.control, icon: navBarHelper.getIcon(item.icon || item.type) }, navBarHelper.getItemStyle(item))); if (item.type === 'back') { if (!item.control || item.useDefault || item.init) { item.callback = 'handleBack'; } else { item.callback = item.callback || '$$handleBack$$'; } } if (item.type === 'close') { if (!item.control || item.useDefault || item.init) { item.callback = 'handleClose'; } else { item.callback = '$$handleClose$$'; } } }); objectAssign(navBar, _extends({}, header, { enable: navBar.show || navBar.enable || header.show, options: { pageParam: navBar.options } })); } platform.select({ dingTalk: function dingTalk() { window.dd.biz.util.openLink({ url: url }); }, mobile: function mobile() { window.location.href = url; }, iosApp: function iosApp() { getiOSApi().sendEvent({ name: 'upaas_page_jump', extra: _extends({ href: url, from: referrer || 'paasapp', closeToWinName: tag || getiOSApi().winName, header: navBar }, features, restParam, { winName: pageId || getiOSApi().winName, winSettings: winAttrs }) }); }, androidApp: function androidApp() { notify(_extends({ action: 12, type: navBar.enable || navBarShow ? 2 : 4, url: url }, features, winAttrs, restParam)); } }); }); } export default openNewPage;