/* @flow */ import { extend, isObject } from 'shared/util' function updateClass (oldVnode: VNodeWithData, vnode: VNodeWithData) { const el = vnode.elm const ctx = vnode.context const data: VNodeData = vnode.data const oldData: VNodeData = oldVnode.data if (!data.staticClass && !data.class && (!oldData || (!oldData.staticClass && !oldData.class)) ) { return } const oldClassList = makeClassList(oldData) const classList = makeClassList(data) if (typeof el.setClassList === 'function') { el.setClassList(classList) } else { const style = getStyle(oldClassList, classList, ctx) if (typeof el.setStyles === 'function') { el.setStyles(style) } else { for (const key in style) { el.setStyle(key, style[key]) } } } } function makeClassList (data: VNodeData): Array { const classList = [] // unlike web, weex vnode staticClass is an Array const staticClass: any = data.staticClass const dataClass = data.class if (staticClass) { classList.push.apply(classList, staticClass) } if (Array.isArray(dataClass)) { classList.push.apply(classList, dataClass) } else if (isObject(dataClass)) { classList.push.apply(classList, Object.keys(dataClass).filter(className => dataClass[className])) } else if (typeof dataClass === 'string') { classList.push.apply(classList, dataClass.trim().split(/\s+/)) } return classList } function getStyle (oldClassList: Array, classList: Array, ctx: Component): Object { // style is a weex-only injected object // compiled from