diff --git a/src/platforms/web/server/modules/style.js b/src/platforms/web/server/modules/style.js index 7822023f7a3..a98dec68be7 100644 --- a/src/platforms/web/server/modules/style.js +++ b/src/platforms/web/server/modules/style.js @@ -2,24 +2,43 @@ import { hyphenate, toObject } from 'shared/util' -export default function renderStyle (node: VNodeWithData): ?string { +function concatStyleString (former: string, latter: string) { + if (former === '' || latter === '' || former.charAt(former.length - 1) === ';') { + return former + latter + } + return former + ';' + latter +} + +function generateStyleText (node) { const staticStyle = node.data.attrs && node.data.attrs.style - if (node.data.style || staticStyle) { - let styles = node.data.style - let res = '' - if (styles) { - if (typeof styles === 'string') { - res += styles - } else { - if (Array.isArray(styles)) { - styles = toObject(styles) - } - for (const key in styles) { - res += `${hyphenate(key)}:${styles[key]};` - } - res += staticStyle || '' + let styles = node.data.style + const parentStyle = node.parent ? generateStyleText(node.parent) : '' + + if (!styles && !staticStyle) { + return parentStyle + } + + let dynamicStyle = '' + if (styles) { + if (typeof styles === 'string') { + dynamicStyle += styles + } else { + if (Array.isArray(styles)) { + styles = toObject(styles) + } + for (const key in styles) { + dynamicStyle += `${hyphenate(key)}:${styles[key]};` } } + } + + dynamicStyle = concatStyleString(parentStyle, dynamicStyle) + return concatStyleString(dynamicStyle, staticStyle || '') +} + +export default function renderStyle (node: VNodeWithData): ?string { + const res = generateStyleText(node) + if (res) { return ` style=${JSON.stringify(res)}` } }