import { isPlainObject } from 'uni-shared'
|
|
import { initNavigationBarI18n } from 'uni-helpers/i18n'
|
|
function createButtonOnClick (index) {
|
return function onClick (btn) {
|
const pages = getCurrentPages()
|
if (!pages.length) {
|
return
|
}
|
btn.index = index
|
const page = pages[pages.length - 1]
|
page.$vm &&
|
page.$vm.__call_hook &&
|
page.$vm.__call_hook('onNavigationBarButtonTap', btn)
|
}
|
}
|
|
function parseTitleNViewButtons (titleNView) {
|
const buttons = titleNView.buttons
|
if (!Array.isArray(buttons)) {
|
return titleNView
|
}
|
buttons.forEach((btn, index) => {
|
btn.onclick = createButtonOnClick(index)
|
})
|
return titleNView
|
}
|
|
export function parseTitleNView (id, routeOptions) {
|
const windowOptions = routeOptions.window
|
const titleNView = windowOptions.titleNView
|
routeOptions.meta.statusBarStyle =
|
windowOptions.navigationBarTextStyle === 'white' ? 'light' : 'dark'
|
if (
|
// 无头
|
titleNView === false ||
|
titleNView === 'false' ||
|
(windowOptions.navigationStyle === 'custom' &&
|
!isPlainObject(titleNView)) ||
|
(windowOptions.transparentTitle === 'always' && !isPlainObject(titleNView))
|
) {
|
return false
|
}
|
|
const titleImage = windowOptions.titleImage || ''
|
const transparentTitle = windowOptions.transparentTitle || 'none'
|
const titleNViewTypeList = {
|
none: 'default',
|
auto: 'transparent',
|
always: 'float'
|
}
|
|
const navigationBarBackgroundColor =
|
windowOptions.navigationBarBackgroundColor
|
const ret = {
|
autoBackButton: !routeOptions.meta.isQuit,
|
titleText:
|
titleImage === '' ? windowOptions.navigationBarTitleText || '' : '',
|
titleColor:
|
windowOptions.navigationBarTextStyle === 'white' ? '#ffffff' : '#000000',
|
type: titleNViewTypeList[transparentTitle],
|
backgroundColor:
|
/^#[a-z0-9]{6}$/i.test(navigationBarBackgroundColor) ||
|
navigationBarBackgroundColor === 'transparent'
|
? navigationBarBackgroundColor
|
: '#f8f8f8',
|
tags:
|
titleImage === ''
|
? []
|
: [
|
{
|
tag: 'img',
|
src: titleImage,
|
position: {
|
left: 'auto',
|
top: 'auto',
|
width: 'auto',
|
height: '26px'
|
}
|
}
|
]
|
}
|
|
if (isPlainObject(titleNView)) {
|
return initTitleNViewI18n(
|
id,
|
Object.assign(ret, parseTitleNViewButtons(titleNView))
|
)
|
}
|
return initTitleNViewI18n(id, ret)
|
}
|
|
function initTitleNViewI18n (id, titleNView) {
|
const i18nResult = initNavigationBarI18n(titleNView)
|
if (!i18nResult) {
|
return titleNView
|
}
|
const [titleTextI18n, searchInputPlaceholderI18n] = i18nResult
|
if (titleTextI18n || searchInputPlaceholderI18n) {
|
uni.onLocaleChange(() => {
|
const webview = plus.webview.getWebviewById(id + '')
|
if (!webview) {
|
return
|
}
|
const newTitleNView = {}
|
if (titleTextI18n) {
|
newTitleNView.titleText = titleNView.titleText
|
}
|
if (searchInputPlaceholderI18n) {
|
newTitleNView.searchInput = {
|
placeholder: titleNView.searchInput.placeholder
|
}
|
}
|
if (process.env.NODE_ENV !== 'production') {
|
console.log('[uni-app] updateWebview', webview.id, newTitleNView)
|
}
|
webview.setStyle({
|
titleNView: newTitleNView
|
})
|
})
|
}
|
return titleNView
|
}
|