1 line
26 KiB
JSON
1 line
26 KiB
JSON
|
{"ast":null,"code":"import { isArray, isObject } from '../core/util.js';\nimport { createElement, createVNode, XMLNS, XML_NAMESPACE, XLINKNS } from './core.js';\nimport * as api from './domapi.js';\nvar colonChar = 58;\nvar xChar = 120;\nvar emptyNode = createVNode('', '');\n\nfunction isUndef(s) {\n return s === undefined;\n}\n\nfunction isDef(s) {\n return s !== undefined;\n}\n\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n var map = {};\n\n for (var i = beginIdx; i <= endIdx; ++i) {\n var key = children[i].key;\n\n if (key !== undefined) {\n if (process.env.NODE_ENV !== 'production') {\n if (map[key] != null) {\n console.error(\"Duplicate key \" + key);\n }\n }\n\n map[key] = i;\n }\n }\n\n return map;\n}\n\nfunction sameVnode(vnode1, vnode2) {\n var isSameKey = vnode1.key === vnode2.key;\n var isSameTag = vnode1.tag === vnode2.tag;\n return isSameTag && isSameKey;\n}\n\nfunction createElm(vnode) {\n var i;\n var children = vnode.children;\n var tag = vnode.tag;\n\n if (isDef(tag)) {\n var elm = vnode.elm = createElement(tag);\n updateAttrs(emptyNode, vnode);\n\n if (isArray(children)) {\n for (i = 0; i < children.length; ++i) {\n var ch = children[i];\n\n if (ch != null) {\n api.appendChild(elm, createElm(ch));\n }\n }\n } else if (isDef(vnode.text) && !isObject(vnode.text)) {\n api.appendChild(elm, api.createTextNode(vnode.text));\n }\n } else {\n vnode.elm = api.createTextNode(vnode.text);\n }\n\n return vnode.elm;\n}\n\nfunction addVnodes(parentElm, before, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n\n if (ch != null) {\n api.insertBefore(parentElm, createElm(ch), before);\n }\n }\n}\n\nfunction removeVnodes(parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n\n if (ch != null) {\n if (isDef(ch.tag)) {\n var parent_1 = api.parentNode(ch.elm);\n api.removeChild(parent_1, ch.elm);\n } else {\n api.removeChild(parentElm, ch.elm);\n }\n }\n }\n}\n\nexport function updateAttrs(oldVnode, vnode) {\n var key;\n var elm = vnode.elm;\n var oldAttrs = oldVnode && oldVnode.attrs || {};\n var attrs = vnode.attrs || {};\n\n if (oldAttrs === attrs) {\n return;\n }\n\n for (key in attrs) {\n var cur = attrs[key];\n var old = oldAttrs[key];\n\n if (old !== cur) {\n if (cur === true) {\n elm.setAttribute(key, '');\n } else if (cur === false) {\n elm.removeAttribute(key);\n } else {\n if (key.charCodeAt(0) !== xChar) {\n elm.setAttribute(key, cur);\n } else if (key === 'xmlns:xlink' || key === 'xmlns') {\n elm.setAttributeNS(XMLNS, key, cur);\n } else if (key.charCodeAt(3) === colonChar) {\n elm.setAttributeNS(XML_NAMESPACE, key, cur);\n } else if (key.charCodeAt(5) === colonChar) {\n elm.setAttributeNS(XLINKNS, key, cur);\n } else {\n elm.setAttribute(key, cur);\n }\n }\n }\n }\n\n for (key in oldAttrs) {\n if (!(key in attrs)) {\n elm.removeAttribute(key);\n }\n }\n}\n\nfunction updateChildren(parentElm, oldCh, newCh) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx;\n var idxInOld;\n var elmToMove;\n var before;\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (oldStartVnode == null) {\n oldStartVnode = oldCh[++oldStartIdx];\n } else if (oldEndVnode == null) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (newStartVnode == null) {\n newStartVnode = newCh[++newStartIdx];\n } else if (newEndVnode == null) {\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(o
|