import { parseTitleNView } from './title-nview-parser'
|
|
import { parsePullToRefresh } from './pull-to-refresh-parser'
|
|
import { parseStyleUnit } from './style-unit-parser'
|
|
import { parseTheme } from '../../theme'
|
|
const WEBVIEW_STYLE_BLACKLIST = [
|
'navigationBarBackgroundColor',
|
'navigationBarTextStyle',
|
'navigationBarTitleText',
|
'navigationBarShadow',
|
'navigationStyle',
|
'disableScroll',
|
'backgroundColor',
|
'backgroundTextStyle',
|
'enablePullDownRefresh',
|
'onReachBottomDistance',
|
'usingComponents',
|
// 需要解析的
|
'titleNView',
|
'pullToRefresh'
|
]
|
|
export function parseWebviewStyle (id, path, _routeOptions = {}) {
|
const webviewStyle = {
|
bounce: 'vertical'
|
}
|
|
// 合并
|
_routeOptions.window = parseStyleUnit(
|
Object.assign(
|
JSON.parse(JSON.stringify(__uniConfig.window || {})),
|
_routeOptions.window || {}
|
)
|
)
|
|
const routeOptions = parseTheme(_routeOptions)
|
|
Object.keys(routeOptions.window).forEach(name => {
|
if (WEBVIEW_STYLE_BLACKLIST.indexOf(name) === -1) {
|
webviewStyle[name] = routeOptions.window[name]
|
}
|
})
|
|
let backgroundColor = routeOptions.window.backgroundColor
|
if (
|
/^#[a-z0-9]{6}$/i.test(backgroundColor) ||
|
backgroundColor === 'transparent'
|
) {
|
if (!webviewStyle.background) {
|
webviewStyle.background = backgroundColor
|
} else {
|
backgroundColor = webviewStyle.background
|
}
|
if (!webviewStyle.backgroundColorTop) {
|
webviewStyle.backgroundColorTop = backgroundColor
|
}
|
if (!webviewStyle.backgroundColorBottom) {
|
webviewStyle.backgroundColorBottom = backgroundColor
|
}
|
if (!webviewStyle.animationAlphaBGColor) {
|
webviewStyle.animationAlphaBGColor = backgroundColor
|
}
|
if (typeof webviewStyle.webviewBGTransparent === 'undefined') {
|
webviewStyle.webviewBGTransparent = true
|
}
|
}
|
|
const titleNView = parseTitleNView(id, routeOptions)
|
if (titleNView) {
|
if (
|
id === 1 &&
|
__uniConfig.realEntryPagePath &&
|
!routeOptions.meta.isQuit // 可能是tabBar
|
) {
|
titleNView.autoBackButton = true
|
}
|
webviewStyle.titleNView = titleNView
|
}
|
|
const pullToRefresh = parsePullToRefresh(routeOptions)
|
if (pullToRefresh) {
|
if (pullToRefresh.style === 'circle') {
|
webviewStyle.bounce = 'none'
|
}
|
webviewStyle.pullToRefresh = pullToRefresh
|
}
|
|
// 不支持 hide
|
if (webviewStyle.popGesture === 'hide') {
|
delete webviewStyle.popGesture
|
}
|
|
if (routeOptions.meta.isQuit) {
|
// 退出
|
webviewStyle.popGesture = plus.os.name === 'iOS' ? 'appback' : 'none'
|
}
|
|
// TODO 下拉刷新
|
|
if (path && routeOptions.meta.isNVue) {
|
webviewStyle.uniNView = {
|
path,
|
defaultFontSize: __uniConfig.defaultFontSize,
|
viewport: __uniConfig.viewport
|
}
|
}
|
|
_routeOptions.meta = routeOptions.meta
|
return webviewStyle
|
}
|