Render `vnode` property if defined

pull/2/head
paldepind 10 years ago
parent a2f0d27417
commit 5ae0836f21

@ -55,8 +55,9 @@ function init(modules) {
function createElm(vnode) {
var i;
if (!isUndef(i = vnode.data) && !isUndef(i = i.hook) && !isUndef(i = i.init)) {
vnode = i(vnode);
i(vnode);
}
if (!isUndef(i = vnode.data) && !isUndef(i = i.vnode)) vnode = i;
var elm, children = vnode.children, sel = vnode.sel;
if (!isUndef(sel)) {
// Parse selector
@ -184,9 +185,9 @@ function init(modules) {
var i;
if (!isUndef(i = vnode.data) && !isUndef(i = i.hook) && !isUndef(i = i.patch)) {
i = i(oldVnode, vnode);
oldVnode = i[0];
vnode = i[1];
}
if (!isUndef(i = oldVnode.data) && !isUndef(i = i.vnode)) oldVnode = i;
if (!isUndef(i = vnode.data) && !isUndef(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)) {

@ -1,2 +1,3 @@
require('./core');
require('./style');
require('./thunk');

@ -6,7 +6,7 @@ var patch = snabbdom.init([
var h = require('../h');
var thunk = require('../thunk');
describe.only('thunk', function() {
describe('thunk', function() {
var elm, vnode0;
beforeEach(function() {
elm = document.createElement('div');
@ -18,7 +18,7 @@ describe.only('thunk', function() {
}
var vnode = thunk('num', numberInSpan, 22);
assert.deepEqual(vnode.sel, 'thunknum');
assert.deepEqual(vnode.data.thunk.args, [22]);
assert.deepEqual(vnode.data.args, [22]);
});
it('only calls render function on data change', function() {
var called = 0;

@ -1,23 +1,24 @@
var h = require('./h');
function init(thunk) {
var i, cur = thunk.data.thunk,
args = cur.args;
return (cur.vnode = cur.fn.apply(undefined, cur.args));
var i, cur = thunk.data;
cur.vnode = cur.fn.apply(undefined, cur.args);
}
function patch(oldThunk, thunk) {
var i, old = oldThunk.data.thunk,
cur = thunk.data.thunk,
oldArgs = old.args,
args = cur.args;
var i, old = oldThunk.data, cur = thunk.data;
var oldArgs = old.args, args = cur.args;
cur.vnode = old.vnode;
if (oldArgs.length !== args.length) {
cur.vnode = cur.fn.apply(undefined, args);
return;
}
for (i = 0; i < args.length; ++i) {
if (oldArgs[i] !== args[i]) {
cur.vnode = cur.fn.apply(undefined, args);
return;
}
}
return [old.vnode, cur.vnode];
}
module.exports = function(name, fn /* args */) {
@ -27,6 +28,6 @@ module.exports = function(name, fn /* args */) {
}
return h('thunk' + name, {
hook: {init: init, patch: patch},
thunk: {fn: fn, args: args},
fn: fn, args: args,
});
};

Loading…
Cancel
Save