uwire
Version:
A way to create persistent fragments
55 lines (45 loc) • 1.42 kB
JavaScript
var uwire = (function (exports) {
'use strict';
var _ref = [],
slice = _ref.slice;
var ELEMENT_NODE = 1;
var nodeType = 111;
var remove = function remove(_ref) {
var firstChild = _ref.firstChild,
lastChild = _ref.lastChild;
var range = document.createRange();
range.setStartAfter(firstChild);
range.setEndAfter(lastChild);
range.deleteContents();
return firstChild;
};
var diffable = function diffable(node, operation) {
return node.nodeType === nodeType ? 1 / operation < 0 ? operation ? remove(node) : node.lastChild : operation ? node.valueOf() : node.firstChild : node;
};
var persistent = function persistent(fragment) {
var childNodes = fragment.childNodes;
var length = childNodes.length;
if (length < 2) return length ? childNodes[0] : fragment;
var nodes = slice.call(childNodes, 0);
var firstChild = nodes[0];
var lastChild = nodes[length - 1];
return {
ELEMENT_NODE: ELEMENT_NODE,
nodeType: nodeType,
firstChild: firstChild,
lastChild: lastChild,
valueOf: function valueOf() {
if (childNodes.length !== length) {
var i = 0;
while (i < length) {
fragment.appendChild(nodes[i++]);
}
}
return fragment;
}
};
};
exports.diffable = diffable;
exports.persistent = persistent;
return exports;
}({}));