Add `pre` and `post` global hooks

pull/2/head
paldepind 10 years ago
parent 36377a5468
commit caea7088e5

@ -39,11 +39,15 @@ function init(modules) {
var createCbs = []; var createCbs = [];
var updateCbs = []; var updateCbs = [];
var removeCbs = []; var removeCbs = [];
var preCbs = [];
var postCbs = [];
modules.forEach(function(module) { modules.forEach(function(module) {
if (module.create) createCbs.push(module.create); if (module.create) createCbs.push(module.create);
if (module.update) updateCbs.push(module.update); if (module.update) updateCbs.push(module.update);
if (module.remove) removeCbs.push(module.remove); if (module.remove) removeCbs.push(module.remove);
if (module.pre) preCbs.push(module.pre);
if (module.post) postCbs.push(module.post);
}); });
function createElm(vnode) { function createElm(vnode) {
@ -178,12 +182,15 @@ function init(modules) {
} }
return function(oldVnode, vnode) { return function(oldVnode, vnode) {
var i;
insertedVnodeQueue = []; insertedVnodeQueue = [];
for (i = 0; i < preCbs.length; ++i) preCbs[i]();
patchVnode(oldVnode, vnode); patchVnode(oldVnode, vnode);
for (var i = 0; i < insertedVnodeQueue.length; ++i) { for (i = 0; i < insertedVnodeQueue.length; ++i) {
insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]); insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]);
} }
insertedVnodeQueue = undefined; insertedVnodeQueue = undefined;
for (i = 0; i < postCbs.length; ++i) postCbs[i]();
return vnode; return vnode;
}; };
} }

@ -515,6 +515,16 @@ describe('snabbdom', function() {
rm2(); rm2();
assert.equal(elm.children.length, 0); assert.equal(elm.children.length, 0);
}); });
it('invokes `pre` and `post` hook', function() {
var result = [];
var patch = snabbdom.init([
{pre: function() { result.push('pre'); }},
{post: function() { result.push('post'); }},
]);
var vnode1 = h('div');
patch(vnode0, vnode1);
assert.deepEqual(result, ['pre', 'post']);
});
}); });
}); });
}); });

Loading…
Cancel
Save