Skip to content

Commit

Permalink
Fixes multiple events on now. Fixes not event triggering in interme…
Browse files Browse the repository at this point in the history
…diate nodes on live mode.
  • Loading branch information
arqex committed Sep 19, 2015
1 parent b6279ed commit b287826
Show file tree
Hide file tree
Showing 9 changed files with 63 additions and 26 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Freezer Changelog
###v0.7.1
* Fixed `now` method triggering `update` event twice.
* Fixed live mode not triggering events in intermediate nodes.

###v0.7.0
* Added `pivot`` method.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ bower install freezer-js
It is possible to download the [full version](https://raw.githubusercontent.com/arqex/freezer/master/build/freezer.js) (~20KB) or [minified](https://raw.githubusercontent.com/arqex/freezer/master/build/freezer.min.js) (~9KB).

## Example of use
You can play with [this example in JSBin](http://jsbin.com/suvoxivizi/2/edit?js,console).
You can play with [this example in JSBin](http://jsbin.com/hinazasuto/edit?js,console).
```js
// Browserify/Node style of loading
var Freezer = require('freezer-js');
Expand Down
25 changes: 14 additions & 11 deletions build/freezer.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* freezer-js v0.7.0 (16-9-2015)
/* freezer-js v0.7.1 (19-9-2015)
* https://github.com/arqex/freezer
* By arqex
* License: MIT
Expand Down Expand Up @@ -552,7 +552,7 @@ var Frozen = {
// Since the parents will be refreshed directly,
// Trigger the listener here
if( frozen.__.listener )
this.trigger( frozen, 'update', frozen );
this.trigger( frozen, 'update', frozen, _.live );
}

// Refresh the parent nodes directly
Expand Down Expand Up @@ -719,7 +719,6 @@ var Frozen = {

unpivot: function( node ){
Utils.nextTick( function(){
console.log('unpivoting');
node.__.pivot = 0;
});
},
Expand Down Expand Up @@ -854,7 +853,7 @@ var Frozen = {
;

if( _.listener )
this.trigger( newChild, 'update', newChild );
this.trigger( newChild, 'update', newChild, _.live );

if( !_.parents.length ){
if( _.listener ){
Expand Down Expand Up @@ -919,19 +918,21 @@ var Frozen = {
;

if( now ){
if( ticking ){
if( ticking || param ){
listener.ticking = 0;
listener.trigger( eventName, ticking );
listener.trigger( eventName, ticking || param );
}
return;
}

listener.ticking = param;
if( !ticking ){
Utils.nextTick( function(){
var updated = listener.ticking;
listener.ticking = 0;
listener.trigger( eventName, updated );
if( listener.ticking ){
var updated = listener.ticking;
listener.ticking = 0;
listener.trigger( eventName, updated );
}
});
}
},
Expand Down Expand Up @@ -1044,8 +1045,10 @@ var Freezer = function( initialValue, options ) {
if( !updating ){
updating = true;
Utils.nextTick( function(){
updating = false;
me.trigger( 'update', frozen );
if( updating ){
updating = false;
me.trigger( 'update', frozen );
}
});
}
});
Expand Down
4 changes: 2 additions & 2 deletions build/freezer.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "freezer-js",
"version": "0.7.0",
"version": "0.7.1",
"description": "A tree data structure that is always updated from the root, making easier to think in a reactive way.",
"main": "freezer.js",
"homepage": "https://github.com/arqex/freezer",
Expand Down
6 changes: 4 additions & 2 deletions src/freezer.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,10 @@ var Freezer = function( initialValue, options ) {
if( !updating ){
updating = true;
Utils.nextTick( function(){
updating = false;
me.trigger( 'update', frozen );
if( updating ){
updating = false;
me.trigger( 'update', frozen );
}
});
}
});
Expand Down
17 changes: 9 additions & 8 deletions src/frozen.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ var Frozen = {
// Since the parents will be refreshed directly,
// Trigger the listener here
if( frozen.__.listener )
this.trigger( frozen, 'update', frozen );
this.trigger( frozen, 'update', frozen, _.live );
}

// Refresh the parent nodes directly
Expand Down Expand Up @@ -344,7 +344,6 @@ var Frozen = {

unpivot: function( node ){
Utils.nextTick( function(){
console.log('unpivoting');
node.__.pivot = 0;
});
},
Expand Down Expand Up @@ -479,7 +478,7 @@ var Frozen = {
;

if( _.listener )
this.trigger( newChild, 'update', newChild );
this.trigger( newChild, 'update', newChild, _.live );

if( !_.parents.length ){
if( _.listener ){
Expand Down Expand Up @@ -544,19 +543,21 @@ var Frozen = {
;

if( now ){
if( ticking ){
if( ticking || param ){
listener.ticking = 0;
listener.trigger( eventName, ticking );
listener.trigger( eventName, ticking || param );
}
return;
}

listener.ticking = param;
if( !ticking ){
Utils.nextTick( function(){
var updated = listener.ticking;
listener.ticking = 0;
listener.trigger( eventName, updated );
if( listener.ticking ){
var updated = listener.ticking;
listener.ticking = 0;
listener.trigger( eventName, updated );
}
});
}
},
Expand Down
1 change: 0 additions & 1 deletion tests/freezer-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,6 @@ describe("Freezer test", function(){
var handler = function handler( newData ){
freezer.off('update', handler);
var newPivot = newData.b.set({u: 20});
console.log( newPivot );
assert.equal( newPivot.u, 20 );
assert.equal( newData.__.pivot, 0 );
done();
Expand Down
29 changes: 29 additions & 0 deletions tests/listener-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,25 @@ describe("Freezer events test", function(){
freezer.get().b.set( {c: 3} );
});

it( "Live mode should trigger in all parents synchronously.", function(){
var freezer = new Freezer( example, { live: true } ),
data = freezer.get(),
triggered = 0,
handler = function(){
triggered++;
}
;

freezer.on('update', handler);
data.getListener().on('update', handler);
data.c.getListener().on('update', handler);
data.c[2].getListener().on('update', handler);

data.c[2].set( {w:4} );

assert.equal( triggered, 4 );
});

it( "Listen to root updates", function( done ){

freezer.on( 'update', function(){
Expand Down Expand Up @@ -326,4 +345,14 @@ describe("Freezer events test", function(){

assert.equal( triggered, 4 );
});

it( "Now must trigger just one event", function( done ){
freezer.on('update', function( update ){
// If we get here and call done twice
// an error will be thrown
assert.equal( update.a, 10 );
done();
});
data.set({a: 10}).now();
});
});

0 comments on commit b287826

Please sign in to comment.