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 updateCbs = [];
var removeCbs = [];
var preCbs = [];
var postCbs = [];
modules.forEach(function(module) {
if (module.create) createCbs.push(module.create);
if (module.update) updateCbs.push(module.update);
if (module.remove) removeCbs.push(module.remove);
if (module.pre) preCbs.push(module.pre);
if (module.post) postCbs.push(module.post);
});
function createElm(vnode) {
@ -178,12 +182,15 @@ function init(modules) {
}
return function(oldVnode, vnode) {
var i;
insertedVnodeQueue = [];
for (i = 0; i < preCbs.length; ++i) preCbs[i]();
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 = undefined;
for (i = 0; i < postCbs.length; ++i) postCbs[i]();
return vnode;
};
}

@ -515,6 +515,16 @@ describe('snabbdom', function() {
rm2();
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