1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /* @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
- }
|