UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

598 lines (560 loc) 18.4 kB
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 } }); }