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.1 to 0.2.2

2

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

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

# Snabbdom
[![Join the chat at https://gitter.im/paldepind/snabbdom](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/paldepind/snabbdom?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
A virtual DOM library with focus on simplicity, modularity, powerful features

@@ -10,2 +9,4 @@ and performance.

[![Join the chat at https://gitter.im/paldepind/snabbdom](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/paldepind/snabbdom?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
## Table of contents

@@ -67,3 +68,3 @@

var h = require('snabbdom/h'); // helper function for creating VNodes
var vnode = h('div#id.two.classes', {on: {click: someFn}}, [
var vnode = h('div#container.two.classes', {on: {click: someFn}}, [
h('span', {style: {fontWeight: 'bold'}}, 'This is bold'),

@@ -104,4 +105,14 @@ ' and this is just normal text',

element or a vnode representing the current view. The second is a vnode
representing the new view.
representing the new updated view.
If a DOM element with a parent is passed `newVnode` will be turned into a DOM
node and the passed element will be replaced by the created DOM node. If an old
vnode is passed Snabbdom will effeciently modify to match the description in
the new vnode.
Any old vnode passed must be the resulting vnode from a previous call to
`patch`. This is necessary since Snabbdom stores information in the vnode.
This makes it possible to implement a simpler and more performant architecture.
This also avoids the creation of a new old vnode tree.
```javascript

@@ -192,3 +203,3 @@ patch(oldVnode, newVnode);

You can specify properties as being delayed. Whenver these properties change
You can specify properties as being delayed. Whenever these properties change
the change is not applied until after the next frame.

@@ -195,0 +206,0 @@

@@ -9,2 +9,3 @@ // jshint newcap: false

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

@@ -27,3 +28,3 @@ function emptyNodeAt(elm) {

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

@@ -52,8 +53,8 @@ return map;

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

@@ -65,4 +66,4 @@ var hashIdx = sel.indexOf('#');

var tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel;
elm = vnode.elm = !isUndef(data) && !isUndef(i = data.ns) ? document.createElementNS(i, tag)
: 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);

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

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

@@ -98,6 +99,6 @@ if (i.insert) insertedVnodeQueue.push(vnode);

var i = vnode.data, j;
if (!isUndef(i)) {
if (!isUndef(i = i.hook) && !isUndef(i = i.destroy)) i(vnode);
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 (!isUndef(i = vnode.children)) {
if (isDef(i = vnode.children)) {
for (j = 0; j < vnode.children.length; ++j) {

@@ -113,11 +114,15 @@ invokeDestroyHook(vnode.children[j]);

var i, listeners, rm, ch = vnodes[startIdx];
if (!isUndef(ch)) {
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 (!isUndef(i = ch.data) && !isUndef(i = i.hook) && !isUndef(i = i.remove)) {
i(ch, rm);
} else {
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 { // Text node
parentElm.removeChild(ch.elm);
}

@@ -186,20 +191,20 @@ }

var i, hook;
if (!isUndef(i = vnode.data) && !isUndef(hook = i.hook) && !isUndef(i = hook.prepatch)) {
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, oldCh = oldVnode.children, ch = vnode.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(oldVnode, 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)) {
} else if (isDef(ch)) {
addVnodes(elm, null, ch, 0, ch.length - 1);
} else if (!isUndef(oldCh)) {
} else if (isDef(oldCh)) {
removeVnodes(elm, oldCh, 0, oldCh.length - 1);

@@ -210,3 +215,3 @@ }

}
if (!isUndef(hook) && !isUndef(i = hook.postpatch)) {
if (isDef(hook) && isDef(i = hook.postpatch)) {
i(oldVnode, vnode);

@@ -213,0 +218,0 @@ }

@@ -695,2 +695,19 @@ var assert = require('assert');

});
it('does not invoke `create` and `remove` module hook for text nodes', function() {
var created = 0;
var removed = 0;
var patch = snabbdom.init([
{create: function() { created++; }},
{remove: function() { removed++; }},
]);
var vnode1 = h('div', [
h('span', 'First child'),
'',
h('span', 'Third child'),
]);
patch(vnode0, vnode1);
patch(vnode1, vnode0);
assert.equal(created, 2);
assert.equal(removed, 2);
});
it('does not invoke `destroy` module hook for text nodes', function() {

@@ -697,0 +714,0 @@ var created = 0;

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