bdom-keep-order
Advanced tools
Comparing version 0.1.1 to 0.1.2
66
index.js
@@ -25,8 +25,18 @@ 'use strict'; | ||
function keepOnParentStart(parent, maps) { | ||
validateParams(parent, maps); | ||
// reverse the map so we can run an optimized loop | ||
maps = maps.reverse(); | ||
return function parentStartKeeper(input) { | ||
var lastInDom = void 0; | ||
var addAfterSibling = void 0; | ||
var i = maps.length; | ||
while (i--) { | ||
removeAndPopulateFragment(parent, input, maps[i]); | ||
parent.insertBefore(fragment, parent.firstChild); | ||
lastInDom = removeAndPopulateFragment(parent, input, maps[i]); | ||
if (addAfterSibling) { | ||
parent.insertBefore(fragment, addAfterSibling.nextSibling); | ||
} else { | ||
parent.insertBefore(fragment, parent.firstChild); | ||
} | ||
addAfterSibling = lastInDom || addAfterSibling; | ||
} | ||
@@ -42,6 +52,13 @@ }; | ||
return function parentEndKeeper(input) { | ||
var lastInDom = void 0; | ||
var addAfterSibling = void 0; | ||
var i = maps.length; | ||
while (i--) { | ||
removeAndPopulateFragment(parent, input, maps[i]); | ||
parent.appendChild(fragment); | ||
lastInDom = removeAndPopulateFragment(parent, input, maps[i]); | ||
if (addAfterSibling) { | ||
parent.insertBefore(fragment, addAfterSibling.nextSibling); | ||
} else { | ||
parent.appendChild(fragment); | ||
} | ||
addAfterSibling = lastInDom || addAfterSibling; | ||
} | ||
@@ -52,2 +69,3 @@ }; | ||
function keepBeforeSibling(sibling, maps) { | ||
if (!sibling || !(sibling instanceof Element) && sibling.nodeType !== ELEMENT_NODE) { | ||
@@ -70,2 +88,3 @@ throw new Error('The sibling node needs to be an element'); | ||
function keepAfterSibling(sibling, maps) { | ||
if (!sibling || !(sibling instanceof Element) && sibling.nodeType !== ELEMENT_NODE) { | ||
@@ -89,14 +108,27 @@ throw new Error('The sibling node needs to be an element'); | ||
var removableElement = void 0; | ||
var lastElementInDom = void 0; | ||
var i = elements.length; | ||
if (match(condition, input)) { | ||
elements.forEach(function (element) { | ||
return !doc.contains(element) && fragment.appendChild(element); | ||
}); | ||
while (i--) { | ||
lastElementInDom = elements[i]; | ||
if (!doc.contains(lastElementInDom)) { | ||
fragment.appendChild(lastElementInDom); | ||
} | ||
} | ||
} else { | ||
elements.forEach(function (element) { | ||
return doc.contains(element) && parent.removeChild(element); | ||
}); | ||
while (i--) { | ||
removableElement = elements[i]; | ||
if (doc.contains(removableElement)) { | ||
parent.removeChild(removableElement); | ||
} | ||
} | ||
} | ||
return lastElementInDom; | ||
} | ||
function validateParams(parent, maps) { | ||
// validate parameters | ||
@@ -109,2 +141,16 @@ if (!parent || !(parent instanceof Element) && parent.nodeType !== ELEMENT_NODE) { | ||
} | ||
var elements = void 0; | ||
var i = maps.length; | ||
while (i--) { | ||
elements = maps[i].elements; | ||
if (elements && typeof elements.length === 'number') { | ||
// reverse the elements list for optimal looping | ||
maps[i].elements = elements.reverse(); | ||
} else if (!elements || (typeof elements === 'undefined' ? 'undefined' : _typeof(elements)) !== 'object' || !(elements instanceof Element && elements.nodeType === ELEMENT_NODE)) { | ||
throw new Error('elements needs to be a dom element or an array of dom elements'); | ||
} else { | ||
maps[i].elements = [elements]; | ||
} | ||
} | ||
} | ||
@@ -111,0 +157,0 @@ |
{ | ||
"name": "bdom-keep-order", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"description": "add/remove child/sibling elements on conditions and keep them in original order ", | ||
@@ -8,2 +8,3 @@ "main": "index.js", | ||
"test": "npm run build && mocha", | ||
"test:debug": "npm run build && mocha debug", | ||
"build": "node node_modules/babel-cli/bin/babel.js tool.js --out-file index.js" | ||
@@ -10,0 +11,0 @@ }, |
5735
139