mtl-js-sdk
Version:
ynf-fw-mtl-api
598 lines (560 loc) • 18.4 kB
JavaScript
import {invokeFail, invokeSuccess, invokeCallback} from '../callback'
import {handleMessage} from '../message'
import {getUserAgentInternal, setYhtCookie, getExclusiveDomainInfo, compareVersion} from '../util'
import {userFontSizeKey, onlinePreloadMdf, saveExpandParams} from '../keys'
import {execUpesnBridgeify,canExecUpesnBridge,execUpesnBridge,registerCommonCallback} from '../bridge/index'
export function settingNavBar(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('settingNavBar', param);
return;
}
const {hide, backgroundColor, tintColor, fullScreen, hideShadowImage, statusBarStyle, leftItems, centerItems, rightItems} = param;
let fontSizeList = [14, 16, 18];
if (typeof hide != 'undefined' || (centerItems && centerItems.length > 0)) {
let attr = {};
if (typeof hide != 'undefined') {
attr.hideNavigationBar = hide == 1;
}
if (centerItems && centerItems.length > 0) {
attr.title = centerItems[0].title;
}
api.setTabLayoutAttr(attr);
}
if (typeof fullScreen == 'number') {
api.setWinAttr({statusBarAppearance: fullScreen == 0 ? false : true });
}
if (typeof statusBarStyle == 'number') {
api.setStatusBarStyle({
style: statusBarStyle == 1 ? 'light' : 'dark'
});
}
let p = {};
if (backgroundColor) {
p.background = backgroundColor;
}
if (tintColor) {
p.color = tintColor;
}
if (typeof hideShadowImage != 'undefined') {
p.shadow = hideShadowImage==1?'rgba(0,0,0,0)':'#ddd';
}
if (centerItems && centerItems.length > 0) {
let item = centerItems[0];
if (item.titleColor) {
p.color = item.titleColor;
}
let fontSize = typeof item.fontSize == 'number' ? item.fontSize : -1;
if (fontSize >= 0) {
p.fontSize = fontSizeList[fontSize];
}
}
if (leftItems) {
let leftButtons = [];
leftItems.forEach(item => {
let fontSize = typeof item.fontSize == 'number' ? item.fontSize : 1;
leftButtons.push({
text:item.title,
color:item.titleColor || tintColor,
fontSize:fontSizeList[fontSize] || 16,
iconPath:item.icon,
scale:3
});
});
p.leftButtons = leftButtons;
api.sendEvent({
name:'mtl$didResetLeftButtons',
extra:{name:api.frameName, winName:api.winName}
});
}
if (rightItems) {
let rightButtons = [];
rightItems.forEach(item => {
let fontSize = typeof item.fontSize == 'number' ? item.fontSize : 1;
rightButtons.push({
text:item.title,
color:item.titleColor || tintColor,
fontSize:fontSizeList[fontSize] || 16,
iconPath:item.icon,
scale:3
});
});
p.rightButtons = rightButtons;
api.sendEvent({
name:'mtl$didResetRightButtons',
extra:{name:api.frameName, winName:api.winName}
});
}
Object.keys(p).length > 0 && api.setNavBarAttr(p);
if ((leftItems && leftItems.length > 0) || (rightItems && rightItems.length > 0)) {
api.addEventListener({
name:'navitembtn'
}, function(ret){
if (ret.type == 'left') {
if (leftItems && leftItems.length > ret.index) {
let callback = leftItems[ret.index].callback;
callback && handleMessage(callback);
}
} else if (ret.type == 'right') {
if (rightItems && rightItems.length > ret.index) {
let callback = rightItems[ret.index].callback;
callback && handleMessage(callback);
}
}
});
}
invokeSuccess(param, {});
}
export function getNavBarInfo(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('getNavBarInfo', {
...param,
success:function(res){
let height = res.height;
let isNativeNavBar = height > 0;
invokeSuccess(param, {isNativeNavBar, height});
}
});
return;
}
let info = api.getNavBarAttr();
let isNativeNavBar = !info.hidden;
let height = isNativeNavBar ? info.height : 0;
invokeSuccess(param, {isNativeNavBar, height});
}
export function showToast(param = {}) {
api.toast({
msg: param.content,
duration: (param.duration || 2) * 1000,
location: 'middle'
});
invokeSuccess(param, {});
}
export function showAlert(param = {}) {
let method;
let buttons = [param.confirmButtonText || 'confirm'];
if (param.type == 'confirm') {
method = 'confirm';
buttons.push(param.cancelButtonText || 'cancel');
} else {
method = 'alert';
}
api[method]({
title: param.title,
msg: param.content,
buttons: buttons
}, function(ret){
let selectButton = ret.buttonIndex == 1?'confirm':'cancel';
invokeSuccess(param, {selectButton});
});
}
export function navigateTo(param = {}) {
setYhtCookie(param.url);
let p = param;
p.hideNavigationBar = param.navShow == 0?true:false;
p.navigationBar = {height:44};
p.bgColor = 'white';
p.slidBackType = 'edge';
p.statusBarAppearance = false;
p.headers = {
'User-Agent': getUserAgentInternal()
};
api.navigateTo(p);
}
export function navigateBack(param = {}) {
if (api.systemType=='ios' && compareVersion(api.version, '3.0.60') == -1 && api.windows().length == 1) {
api.closeWidget({
animation: {
type: 'reveal',
subType: 'from_top',
duration: 200
}
});
return;
}
api.navigateBack(param);
}
export function redirectTo(param = {}) {
setYhtCookie(param.url);
let p = param;
p.hideNavigationBar = param.navShow == 0?true:false;
p.headers = {
'User-Agent': getUserAgentInternal()
};
api.redirectTo(p);
}
export function reLaunch(param = {}) {
setYhtCookie(param.url);
let p = param;
p.hideNavigationBar = param.navShow == 0?true:false;
p.headers = {
'User-Agent': getUserAgentInternal()
};
api.reLaunch(p);
}
export function openWindow(param = {}) {
openNewWebview(param)
}
export function openNewWebview(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('navigateTo', param);
return;
}
let headers = {'User-Agent': getUserAgentInternal()};
let {url, orientation, navShow = 1, isClearCookie} = param;
setYhtCookie(url);
let browserPath = api.systemType=='harmonyos'?'package://res_yonBuilder/widget/html/browser/browser.html':'package://res_yonBuilder/widget/build/browser/browser.js';
api.openTabLayout({
name: url,
url: browserPath,
bgColor: '#fff',
slidBackType: 'edge',
orientation: orientation,
statusBarAppearance: false,
hideNavigationBar: !navShow,
navigationBar: {},
pageParam: {
url: url,
headers: headers,
param: param
}
});
}
export function closeCurrentWebview(param = {}) {
navigateBack(param);
}
export function webviewLoadUrl(param = {}) {
let {url, reload} = param;
if (url) {
setYhtCookie(url);
if (reload) {
let frameName = api.frameName;
if (frameName) {
api.openFrame({
name: frameName,
url: url,
reload
});
} else {
api.openWin({
name: api.winName,
url: url,
reload
});
}
} else {
location.href = url;
}
}
}
export function backToHome(param) {
api.closeWidget({silent:true});
}
export function openExclusiveApp(param = {}) {
let {openAppExpandParams,appletExtId,appletVersion,extId,gzipVersion,serviceCode,app_type,serviceIcon,serviceName,tenantId,serviceId,appUrl,appletPackageType,packageType,appletUrl,navShow,supportHorizontal,tintColor,titleColor,statusBarStyle,isbrowser} = param;
// 保存后通过 mtl.getAppletShareParams 获取
api.setGlobalData({
key: saveExpandParams,
value: typeof openAppExpandParams==='string'?openAppExpandParams:'{}'
});
if (!packageType) {
packageType = param.packagetype;
}
let headers = {'User-Agent': getUserAgentInternal()};
if (appletPackageType == 'applet') { //小程序,带胶囊
let url;
if (packageType == 'APPLET_YSMDF') {
url = "package://res_yonBuilder/widget/html/mdf.html";
} else {
url = "package://res_yonBuilder/widget/html/commonApplet.html";
const resourceKey = 'resource_' + serviceId + tenantId;
api.setPrefs({
key: resourceKey,
value: appletExtId,
sync: true
});
}
api.openWidget({
path: 'package://res_yonBuilder/widget',
longPressToExit: false,
wgtParam: {
iuapApcomFile: getExclusiveDomainInfo().data.iuapApcomFile,
param: param,
headers: headers,
startPage: url
},
animation: {
type: 'movein',
subType: 'from_bottom',
duration: 200
}
});
return;
}
if (packageType == 'gzip') { //资源包
// let pageParam = param;
// pageParam.headers = headers;
// api.openTabLayout({
// name: serviceName,
// url: 'package://res_yonBuilder/widget/build/h5app/h5app.js',
// title: serviceName,
// bgColor: '#fff',
// slidBackType: 'edge',
// statusBarAppearance: false,
// hideNavigationBar: navShow == 2 || navShow == '2',
// navigationBar: {
// color: titleColor,
// shadow:'rgba(0,0,0,0)'
// },
// pageParam: pageParam
// });
} else if (app_type == 4) {
} else {
if (packageType == 'YSMDF') {
setYhtCookie(appUrl);
let name = api.getGlobalData({
key: onlinePreloadMdf
});
if (name) {
api.execScript({
name:name,
frameName:'WebFrame',
script:`openBill("${appUrl}")`
});
api.openWin({
name:name,
statusBarAppearance: false,
slidBackType: 'edge'
});
} else {
api.openTabLayout({
name: appUrl,
url: appUrl,
bgColor: '#fff',
slidBackType: 'edge',
statusBarAppearance: false,
hideNavigationBar: true,
navigationBar: {},
headers: headers,
progress: {type: "page", color: "#EE2233"}
});
}
} else {
if (isbrowser) {
mtl.openSchema({url:appUrl});
return;
}
setYhtCookie(appUrl);
let browserPath = api.systemType=='harmonyos'?'package://res_yonBuilder/widget/html/browser/browser.html':'package://res_yonBuilder/widget/build/browser/browser.js';
api.openTabLayout({
name: appUrl || ('browser_' + serviceName),
url: browserPath,
title: serviceName,
bgColor: '#fff',
slidBackType: 'edge',
statusBarAppearance: false,
hideNavigationBar: navShow == 2 || navShow == '2',
navigationBar: {
color: titleColor
},
pageParam: {
url: appUrl,
headers: headers,
param: {
showWebMoreDialogue: true,
...param
}
}
});
}
}
}
export function getUserFontSize(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('getUserFontSize', param);
return;
}
let level = api.getPrefs({
sync: true,
key: userFontSizeKey
});
if (level && typeof level == 'string') {
level = parseInt(level);
} else if (typeof level != 'number') {
level = 1;
}
invokeSuccess(param, {level});
}
export function setUserFontSize(param = {}) {
api.setPrefs({
key: userFontSizeKey,
value: param.level
}, function(ret, err) {
if (ret) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err);
}
});
}
export function getStatusBarHeight(param = {}) {
let safeArea = api.safeArea;
invokeSuccess(param, {statusBarHeight:safeArea.top, safeAreaBottom:safeArea.bottom});
}
export function setStatusBar(param = {}) {
let {isScreenEdge, isStatusBarDefault, color} = param;
if (typeof isScreenEdge != 'undefined') {
if (isScreenEdge == '1' || isScreenEdge == 1) {
api.setWinAttr({statusBarAppearance:true});
} else if (isScreenEdge == '0' || isScreenEdge == 0) {
api.setWinAttr({statusBarAppearance:false});
}
}
if (typeof isStatusBarDefault != 'undefined') {
if (isStatusBarDefault == '1' || isStatusBarDefault == 1) {
api.setStatusBarStyle({style:'dark', color:color});
} else if (isStatusBarDefault == '0' || isStatusBarDefault == 0) {
api.setStatusBarStyle({style:'light', color:color});
}
}
invokeSuccess(param, {});
}
export function switchLongPress(param = {}) {
let frameName = api.frameName;
if (frameName) {
api.setFrameAttr({
name:frameName,
allowEdit:param.enabled == 1
});
} else {
api.setWinAttr({allowEdit:param.enabled == 1});
}
invokeSuccess(param, {});
}
export function afterPrivacyAgreement(param = {}) {
api.agreedPrivacy && api.agreedPrivacy();
invokeSuccess(param, {});
}
export function setAppletCapsuleStyle(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('setAppletCapsuleStyle', param);
return;
}
invokeSuccess(param, {});
}
export function getAppletCapsuleParams(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('getAppletCapsuleParams', param);
return;
}
let leftWidthRadio = (api.winWidth - 100) / api.winWidth;
let statusBarHeight = api.safeArea.top + '';
invokeSuccess(param, {leftWidthRadio, statusBarHeight});
}
export function getAppInformation(param = {}) {
var currentApp = api.require('currentApp');
if (!currentApp) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('getAppInformation', param);
return;
}
invokeFail(param, {msg:'module currentApp not added'});
return;
}
currentApp.info(function(ret, err) {
if (ret) {
const { bundleId } = ret
invokeSuccess(param, {...ret, packageName: bundleId});
} else {
invokeFail(param, err);
}
})
}
export function registerLifeCycle(param = {}) {
const { onShow, onHide } = param
api.addEventListener({
name:'viewappear'
}, function(ret, err){
if (ret) {
onShow && onShow(ret)
} else {
invokeFail(param, err);
}
});
api.addEventListener({
name:'viewdisappear'
}, function(ret, err){
if (ret) {
onHide && onHide(ret)
} else {
invokeFail(param, err);
}
});
}
export function getUserAgent(param = {}) {
const userAgent = getUserAgentInternal();
invokeSuccess(param, {userAgent});
}
export function h5PageClose(param = {}) {
if (canExecUpesnBridge()) {
window.mtl?.execUpesnBridge({method: 'h5PageClose', ...param})
return;
}
api.addEventListener({
name:'mtl$h5PageClose'
}, function() {
invokeCallback(param, {});
});
}
export function showWebMoreDialogue(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridge({...param, method:'showWebMoreDialogue'})
return;
}
api.sendEvent({
name:'showWebMoreDialogue',
extra:param
});
}
let configMoreMenuArrayCallbackId = 0;
export function configMoreMenuArray(param = {}) {
let menuArray = param.menuArray;
if (!menuArray) {
return;
}
if (canExecUpesnBridge()) {
if (menuArray.length > 0) {
for (let i=0; i<menuArray.length; i++) {
let item = menuArray[i];
if (typeof item.callback == 'function') {
configMoreMenuArrayCallbackId++;
let handlerName = 'configMoreMenuArrayMenuCallback$' + configMoreMenuArrayCallbackId;
registerCommonCallback(handlerName, item.callback);
item.callback = handlerName;
}
}
}
execUpesnBridge({...param, method:'configMoreMenuArray'})
return;
}
let eventName = 'configMoreMenuArrayCallback';
api.addEventListener({
name:eventName
}, function(ret) {
let winName = ret.value.winName;
if (winName == api.winName) {
let index = ret.value.index;
if (menuArray.length > index) {
let callback = menuArray[index].callback;
typeof callback == 'function' && callback();
}
}
});
api.sendEvent({
name:'configMoreMenuArray',
extra:{
...param,
callbackEventName:eventName,
winName:api.winName
}
});
}