Socket
Socket
Sign inDemoInstall

snabbdom

Package Overview
Dependencies
Maintainers
1
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

snabbdom - npm Package Compare versions

Comparing version 0.2.2 to 0.2.3

test/browserified.js

147

examples/hero/build.js

@@ -146,2 +146,8 @@ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){

function fnInvoker(arr) {
return function (ev) {
arr[0](ev);
};
}
function updateEventListeners(oldVnode, vnode) {

@@ -159,6 +165,16 @@ var name,

if (old === undefined) {
elm.addEventListener(name, is.array(cur) ? arrInvoker(cur) : cur);
} else if (is.array(old)) {
if (is.array(cur)) {
elm.addEventListener(name, arrInvoker(cur));
} else {
cur = [cur];
on[name] = cur;
elm.addEventListener(name, fnInvoker(cur));
}
} else if (old.length === 2) {
old[0] = cur[0]; // Deliberately modify old array since it's
old[1] = cur[1]; // captured in closure created with `arrInvoker`
on[name] = old;
} else {
old[0] = cur;
on[name] = old;
}

@@ -316,4 +332,4 @@ }

style = s.remove,
amount = 0;
var applied = [];
amount = 0,
applied = [];
for (name in style) {

@@ -338,2 +354,3 @@ applied.push(name);

// jshint newcap: false
/* global require, module, document, Element */
'use strict';

@@ -347,2 +364,5 @@

}
function isDef(s) {
return s !== undefined;
}

@@ -367,3 +387,3 @@ function emptyNodeAt(elm) {

key = children[i].key;
if (!isUndef(key)) map[key] = i;
if (isDef(key)) map[key] = i;
}

@@ -375,3 +395,4 @@ return map;

return function () {
if (--listeners === 0) parentElm.removeChild(childElm);
//if (--listeners === 0) parentElm.removeChild(childElm);
if (--listeners === 0) childElm.parentElement.removeChild(childElm);
};

@@ -394,11 +415,12 @@ }

function createElm(vnode) {
var i;
if (!isUndef(i = vnode.data) && !isUndef(i = i.hook) && !isUndef(i = i.init)) {
i(vnode);
var i,
data = vnode.data;
if (isDef(data)) {
if (isDef(i = data.hook) && isDef(i = i.init)) i(vnode);
if (isDef(i = data.vnode)) vnode = i;
}
if (!isUndef(i = vnode.data) && !isUndef(i = i.vnode)) vnode = i;
var elm,
children = vnode.children,
sel = vnode.sel;
if (!isUndef(sel)) {
if (isDef(sel)) {
// Parse selector

@@ -410,3 +432,3 @@ var hashIdx = sel.indexOf('#');

var tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel;
elm = vnode.elm = document.createElement(tag);
elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? document.createElementNS(i, tag) : document.createElement(tag);
if (hash < dot) elm.id = sel.slice(hash + 1, dot);

@@ -423,4 +445,4 @@ if (dotIdx > 0) elm.className = sel.slice(dot + 1).replace(/\./g, ' ');

i = vnode.data.hook; // Reuse variable
if (!isUndef(i)) {
if (i.create) i.create(vnode);
if (isDef(i)) {
if (i.create) i.create(emptyNode, vnode);
if (i.insert) insertedVnodeQueue.push(vnode);

@@ -431,15 +453,8 @@ }

}
return elm;
return vnode.elm;
}
function addVnodes(parentElm, before, vnodes, startIdx, endIdx) {
if (isUndef(before)) {
for (; startIdx <= endIdx; ++startIdx) {
parentElm.appendChild(createElm(vnodes[startIdx]));
}
} else {
var elm = before.elm;
for (; startIdx <= endIdx; ++startIdx) {
parentElm.insertBefore(createElm(vnodes[startIdx]), elm);
}
for (; startIdx <= endIdx; ++startIdx) {
parentElm.insertBefore(createElm(vnodes[startIdx]), before);
}

@@ -449,9 +464,11 @@ }

function invokeDestroyHook(vnode) {
var i = vnode.data.hook,
var i = vnode.data,
j;
if (!isUndef(i) && !isUndef(j = i.destroy)) j(vnode);
for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode);
if (!isUndef(vnode.children)) {
for (j = 0; j < vnode.children.length; ++j) {
invokeDestroyHook(vnode.children[j]);
if (isDef(i)) {
if (isDef(i = i.hook) && isDef(i = i.destroy)) i(vnode);
for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode);
if (isDef(i = vnode.children)) {
for (j = 0; j < vnode.children.length; ++j) {
invokeDestroyHook(vnode.children[j]);
}
}

@@ -467,11 +484,16 @@ }

ch = vnodes[startIdx];
if (!isUndef(ch)) {
listeners = cbs.remove.length + 1;
rm = createRmCb(parentElm, ch.elm, listeners);
for (i = 0; i < cbs.remove.length; ++i) cbs.remove[i](ch, rm);
invokeDestroyHook(ch);
if (ch.data.hook && ch.data.hook.remove) {
ch.data.hook.remove(ch, rm);
if (isDef(ch)) {
if (isDef(ch.sel)) {
invokeDestroyHook(ch);
listeners = cbs.remove.length + 1;
rm = createRmCb(parentElm, ch.elm, listeners);
for (i = 0; i < cbs.remove.length; ++i) cbs.remove[i](ch, rm);
if (isDef(i = ch.data) && isDef(i = i.hook) && isDef(i = i.remove)) {
i(ch, rm);
} else {
rm();
}
} else {
rm();
// Text node
parentElm.removeChild(ch.elm);
}

@@ -491,3 +513,3 @@ }

var newEndVnode = newCh[newEndIdx];
var oldKeyToIdx, idxInOld, elmToMove;
var oldKeyToIdx, idxInOld, elmToMove, before;

@@ -535,12 +557,17 @@ while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {

}
if (oldStartIdx > oldEndIdx) addVnodes(parentElm, oldStartVnode, newCh, newStartIdx, newEndIdx);else if (newStartIdx > newEndIdx) removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);
if (oldStartIdx > oldEndIdx) {
before = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx);
} else if (newStartIdx > newEndIdx) {
removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);
}
}
function patchVnode(oldVnode, vnode) {
var i;
if (!isUndef(i = vnode.data) && !isUndef(i = i.hook) && !isUndef(i = i.patch)) {
i = i(oldVnode, vnode);
var i, hook;
if (isDef(i = vnode.data) && isDef(hook = i.hook) && isDef(i = hook.prepatch)) {
i(oldVnode, vnode);
}
if (!isUndef(i = oldVnode.data) && !isUndef(i = i.vnode)) oldVnode = i;
if (!isUndef(i = vnode.data) && !isUndef(i = i.vnode)) vnode = i;
if (isDef(i = oldVnode.data) && isDef(i = i.vnode)) oldVnode = i;
if (isDef(i = vnode.data) && isDef(i = i.vnode)) vnode = i;
var elm = vnode.elm = oldVnode.elm,

@@ -550,18 +577,21 @@ oldCh = oldVnode.children,

if (oldVnode === vnode) return;
if (!isUndef(vnode.data)) {
if (isDef(vnode.data)) {
for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode);
i = vnode.data.hook;
if (!isUndef(i) && !isUndef(i = i.update)) i(vnode);
if (isDef(i) && isDef(i = i.update)) i(oldVnode, vnode);
}
if (isUndef(vnode.text)) {
if (!isUndef(oldCh) && !isUndef(ch)) {
if (isDef(oldCh) && isDef(ch)) {
if (oldCh !== ch) updateChildren(elm, oldCh, ch);
} else if (!isUndef(ch)) {
addVnodes(elm, undefined, ch, 0, ch.length - 1);
} else if (!isUndef(oldCh)) {
} else if (isDef(ch)) {
addVnodes(elm, null, ch, 0, ch.length - 1);
} else if (isDef(oldCh)) {
removeVnodes(elm, oldCh, 0, oldCh.length - 1);
}
} else if (oldVnode.text !== vnode.text) {
elm.childNodes[0].nodeValue = vnode.text;
elm.textContent = vnode.text;
}
if (isDef(hook) && isDef(i = hook.postpatch)) {
i(oldVnode, vnode);
}
return vnode;

@@ -573,7 +603,14 @@ }

insertedVnodeQueue = [];
for (i = 0; i < cbs.pre.length; ++i) cbs.pre[i]();
if (oldVnode instanceof Element) {
oldVnode = emptyNodeAt(oldVnode);
if (oldVnode.parentElement !== null) {
createElm(vnode);
oldVnode.parentElement.replaceChild(vnode.elm, oldVnode);
} else {
oldVnode = emptyNodeAt(oldVnode);
patchVnode(oldVnode, vnode);
}
} else {
patchVnode(oldVnode, vnode);
}
for (i = 0; i < cbs.pre.length; ++i) cbs.pre[i]();
patchVnode(oldVnode, vnode);
for (i = 0; i < insertedVnodeQueue.length; ++i) {

@@ -580,0 +617,0 @@ insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]);

@@ -16,5 +16,6 @@ function pre(vnode, newVnode) {

function destroy(vnode) {
// Remove placeholder
vnode.elm.parentElement.removeChild(vnode.elm);
// Remove real element from where it was inserted
var attachData = vnode.data.attachData;
attachData.target.removeChild(attachData.real);
vnode.elm = vnode.data.attachData.real;
}

@@ -21,0 +22,0 @@

@@ -43,4 +43,3 @@ var raf = requestAnimationFrame || setTimeout;

var name, elm = vnode.elm, idx, i = 0, maxDur = 0,
compStyle, style = s.remove, amount = 0;
var applied = [];
compStyle, style = s.remove, amount = 0, applied = [];
for (name in style) {

@@ -47,0 +46,0 @@ applied.push(name);

{
"name": "snabbdom",
"version": "0.2.2",
"version": "0.2.3",
"description": "A virtual DOM library with focus on simplicity, modularity, powerful features and performance.",

@@ -5,0 +5,0 @@ "main": "snabbdom.js",

@@ -164,2 +164,14 @@ # Snabbdom

#### The `remove` hook
Allows you to hook into the removal of an element. The hook is called once a
vnode is to be removed from the DOM. The handling function recieves both the
vnode and a callback. You can control and delay the removal with the callback.
It should be invoked once the hook is done doing its business and the element
will only be removed once all `remove` hooks have invoked their callback.
The hook is only triggered when and element is to be removed from its parent –
not if it is the child of an element that is removed. For that see the destroy
hook.
## Modules documentation

@@ -166,0 +178,0 @@

@@ -32,5 +32,5 @@ // jshint newcap: false

function createRmCb(parentElm, childElm, listeners) {
function createRmCb(childElm, listeners) {
return function() {
if (--listeners === 0) parentElm.removeChild(childElm);
if (--listeners === 0) childElm.parentElement.removeChild(childElm);
};

@@ -113,3 +113,3 @@ }

listeners = cbs.remove.length + 1;
rm = createRmCb(parentElm, ch.elm, listeners);
rm = createRmCb(ch.elm, listeners);
for (i = 0; i < cbs.remove.length; ++i) cbs.remove[i](ch, rm);

@@ -116,0 +116,0 @@ if (isDef(i = ch.data) && isDef(i = i.hook) && isDef(i = i.remove)) {

@@ -77,2 +77,25 @@ var assert = require('assert');

});
it('remove hook recieves real element', function() {
function rm(vnode, cb) {
console.log(vnode);
console.log(vnode.elm);
console.log(vnode.elm.parentElement);
assert.equal(vnode.elm.tagName, 'DIV');
assert.equal(vnode.elm.innerHTML, 'First text');
cb();
}
var vnode1 = h('div', [
h('div#wrapper', [
h('div', 'Some element'),
attachTo(elm, h('div#attached', {hook: {remove: rm}}, 'First text')),
]),
]);
var vnode2 = h('div', [
h('div#wrapper', [
h('div', 'Some element'),
]),
]);
patch(vnode0, vnode1);
patch(vnode1, vnode2);
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc