/* @flow */ import { extend } from 'shared/util' function updateAttrs (oldVnode: VNodeWithData, vnode: VNodeWithData) { if (!oldVnode.data.attrs && !vnode.data.attrs) { return } let key, cur, old const elm = vnode.elm const oldAttrs = oldVnode.data.attrs || {} let attrs = vnode.data.attrs || {} // clone observed objects, as the user probably wants to mutate it if (attrs.__ob__) { attrs = vnode.data.attrs = extend({}, attrs) } const supportBatchUpdate = typeof elm.setAttrs === 'function' const batchedAttrs = {} for (key in attrs) { cur = attrs[key] old = oldAttrs[key] if (old !== cur) { supportBatchUpdate ? (batchedAttrs[key] = cur) : elm.setAttr(key, cur) } } for (key in oldAttrs) { if (attrs[key] == null) { supportBatchUpdate ? (batchedAttrs[key] = undefined) : elm.setAttr(key) } } if (supportBatchUpdate) { elm.setAttrs(batchedAttrs) } } export default { create: updateAttrs, update: updateAttrs }