@molejs/mole-jssdk
Version:
mole app jssdk
625 lines (551 loc) • 16.8 kB
JavaScript
/*
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;