{"version":3,"file":"kendo.dom.min.js","names":["factory","define","amd","kendo","Node","this","node","NullNode","prototype","remove","parentNode","removeChild","attr","text","nodeName","style","children","NULL_NODE","Element","TextNode","nodeValue","force","String","HtmlNode","html","replace","appendTo","parent","document","createElement","index","length","render","appendChild","cached","cachedChildren","cachedLength","Math","abs","replaceChild","syncAttributes","removeAttributes","cachedAttr","name","value","cachedValue","setStyle","setAttribute","key","removeStyle","cachedStyle","undefined","removeAttribute","cssText","className","str","i","createTextNode","nodes","el","lastChild","replacedNode","outerHTML","firstChild","HTML_CONTAINER","innerHTML","replaceNode","insertHtml","push","child","nextSibling","slice","element","attrs","Tree","root","dom","window"],"sources":["kendo.dom.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.core'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"dom\",\n name: \"Virtual DOM\",\n category: \"framework\",\n depends: [ \"core\" ],\n advanced: true\n };\n\n (function(kendo) {\n function Node() {\n this.node = null;\n }\n\n Node.prototype = {\n remove: function() {\n if (this.node.parentNode) {\n this.node.parentNode.removeChild(this.node);\n }\n this.attr = {};\n },\n attr: {},\n text: function() {\n return \"\";\n }\n };\n\n function NullNode() {\n }\n\n NullNode.prototype = {\n nodeName: \"#null\",\n attr: { style: {} },\n children: [],\n remove: function() {\n }\n };\n\n var NULL_NODE = new NullNode();\n\n function Element(nodeName, attr, children) {\n this.nodeName = nodeName;\n\n this.attr = attr || {};\n\n this.children = children || [];\n }\n\n Element.prototype = new Node();\n\n Element.prototype.appendTo = function(parent) {\n var node = typeof(this.nodeName) === \"string\" ? document.createElement(this.nodeName) : this.nodeName;\n\n var children = this.children;\n\n for (var index = 0; index < children.length; index++) {\n children[index].render(node, NULL_NODE);\n }\n\n parent.appendChild(node);\n\n return node;\n };\n\n Element.prototype.render = function(parent, cached) {\n var node;\n\n if (cached.nodeName !== this.nodeName) {\n cached.remove();\n\n node = this.appendTo(parent);\n } else {\n node = cached.node;\n\n var index;\n\n var children = this.children;\n\n var length = children.length;\n\n var cachedChildren = cached.children;\n\n var cachedLength = cachedChildren.length;\n\n if (Math.abs(cachedLength - length) > 2) {\n this.render({\n appendChild: function(node) {\n parent.replaceChild(node, cached.node);\n }\n }, NULL_NODE);\n\n return;\n }\n\n for (index = 0; index < length; index++) {\n children[index].render(node, cachedChildren[index] || NULL_NODE);\n }\n\n for (index = length; index < cachedLength; index++) {\n cachedChildren[index].remove();\n }\n }\n\n this.node = node;\n\n this.syncAttributes(cached.attr);\n\n this.removeAttributes(cached.attr);\n };\n\n Element.prototype.syncAttributes = function(cachedAttr) {\n var attr = this.attr;\n\n for (var name in attr) {\n var value = attr[name];\n\n var cachedValue = cachedAttr[name];\n\n if (name === \"style\") {\n this.setStyle(value, cachedValue);\n } else if (value !== cachedValue) {\n this.setAttribute(name, value, cachedValue);\n }\n }\n };\n\n Element.prototype.setStyle = function(style, cachedValue) {\n var node = this.node;\n var key;\n\n if (cachedValue) {\n for (key in style) {\n if (style[key] !== cachedValue[key]) {\n node.style[key] = style[key];\n }\n }\n } else {\n for (key in style) {\n node.style[key] = style[key];\n }\n }\n };\n\n Element.prototype.removeStyle = function(cachedStyle) {\n var style = this.attr.style || {};\n var node = this.node;\n\n for (var key in cachedStyle) {\n if (style[key] === undefined) {\n node.style[key] = \"\";\n }\n }\n };\n\n Element.prototype.removeAttributes = function(cachedAttr) {\n var attr = this.attr;\n\n for (var name in cachedAttr) {\n if (name === \"style\") {\n this.removeStyle(cachedAttr.style);\n } else if (attr[name] === undefined) {\n this.removeAttribute(name);\n }\n }\n };\n\n Element.prototype.removeAttribute = function(name) {\n var node = this.node;\n\n if (name === \"style\") {\n node.style.cssText = \"\";\n } else if (name === \"className\") {\n node.className = \"\";\n } else {\n node.removeAttribute(name);\n }\n };\n\n Element.prototype.setAttribute = function(name, value) {\n var node = this.node;\n\n if (node[name] !== undefined) {\n node[name] = value;\n } else {\n node.setAttribute(name, value);\n }\n };\n\n Element.prototype.text = function() {\n var str = \"\";\n for (var i = 0; i < this.children.length; ++i) {\n str += this.children[i].text();\n }\n return str;\n };\n\n function TextNode(nodeValue, force) {\n this.nodeValue = String(nodeValue);\n this.force = force;\n }\n\n TextNode.prototype = new Node();\n\n TextNode.prototype.nodeName = \"#text\";\n\n TextNode.prototype.render = function(parent, cached) {\n var node;\n\n if (cached.nodeName !== this.nodeName || this.force) {\n cached.remove();\n\n node = document.createTextNode(this.nodeValue);\n\n parent.appendChild(node);\n } else {\n node = cached.node;\n\n if (this.nodeValue !== cached.nodeValue) {\n if (node.parentNode) {\n // sometimes in IE parentNode is null (reason unknown),\n // and IE throws an error when you try to set a\n // parentless' nodeValue, because why not.\n node.nodeValue = this.nodeValue;\n }\n }\n }\n\n this.node = node;\n };\n\n TextNode.prototype.text = function() {\n return this.nodeValue;\n };\n\n function HtmlNode(html, replace) {\n this.html = html;\n this.replace = replace;\n }\n\n HtmlNode.prototype = {\n nodeName: \"#html\",\n attr: {},\n remove: function() {\n for (var index = 0; index < this.nodes.length; index++) {\n var el = this.nodes[index];\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n }\n },\n render: function(parent, cached) {\n var lastChild, replacedNode;\n if (cached.nodeName !== this.nodeName || cached.html !== this.html || this.replace) {\n if (this.replace && cached.replace && cached.nodes && cached.nodes.length && cached.nodes[0].outerHTML) {\n // This could be changed to a for loop that replaces several nodes instead of the first one. Presently, there is no use-case scenario for that.\n replacedNode = replaceNode(parent, cached.nodes[0], this.html);\n lastChild = parent.lastChild;\n } else {\n cached.remove();\n lastChild = parent.lastChild;\n insertHtml(parent, this.html);\n }\n this.nodes = [];\n\n if (replacedNode) {\n this.nodes.push(replacedNode);\n }\n\n for (var child = lastChild ? lastChild.nextSibling : parent.firstChild; child; child = child.nextSibling) {\n this.nodes.push(child);\n }\n } else {\n this.nodes = cached.nodes.slice(0);\n }\n }\n };\n\n var HTML_CONTAINER = document.createElement(\"div\");\n\n function insertHtml(node, html) {\n HTML_CONTAINER.innerHTML = html;\n\n while (HTML_CONTAINER.firstChild) {\n node.appendChild(HTML_CONTAINER.firstChild);\n }\n }\n\n function replaceNode(parent, node, html) {\n var firstChild;\n\n HTML_CONTAINER.innerHTML = html;\n firstChild = HTML_CONTAINER.firstChild;\n\n parent.replaceChild(firstChild, node);\n\n return firstChild;\n }\n\n function html(value, force) {\n return new HtmlNode(value, force);\n }\n\n function element(nodeName, attrs, children) {\n return new Element(nodeName, attrs, children);\n }\n\n function text(value, force) {\n return new TextNode(value, force);\n }\n\n function Tree(root) {\n this.root = root;\n this.children = [];\n }\n\n Tree.prototype = {\n html: html,\n element: element,\n text: text,\n render: function(children) {\n var cachedChildren = this.children;\n\n var index;\n\n var length;\n\n for (index = 0, length = children.length; index < length; index++) {\n var cached = cachedChildren[index];\n if (!cached) {\n cached = NULL_NODE;\n } else if (!cached.node || !cached.node.parentNode) {\n cached.remove();\n cached = NULL_NODE;\n }\n children[index].render(this.root, cached);\n }\n\n for (index = length; index < cachedChildren.length; index++) {\n cachedChildren[index].remove();\n }\n\n this.children = children;\n }\n };\n\n kendo.dom = {\n html: html,\n text: text,\n element: element,\n Tree: Tree,\n Node: Node\n };\n })(window.kendo);\n\n}));\n"]}