describe 'Entwine' describe 'Events' before $('body').append('
') end after $('#dom_test').remove() end before_each $.entwine.synchronous_mode(); $.entwine.clear_all_rules() $('#dom_test').html('
') end it 'calls onfoo when foo triggered' var a = 0; $('#a').entwine({onfoo: function(){a = 1;} }); a.should.equal 0 $('#a').trigger('foo'); a.should.equal 1 end it 'only calls most specific onfoo when foo triggered' var a = 0, b = 0; $('#a.a').entwine({onfoo: function(){a = 1;} }); $('#a').entwine({onfoo: function(){b = 1;} }); a.should.equal 0 b.should.equal 0 $('#a').trigger('foo'); a.should.equal 1 b.should.equal 0 end it 'calls namespaced onfoo when foo triggered' var a = 0; $('#a').entwine('bar', function($){return{onfoo: function(){a = 1;} }}); a.should.equal 0 $('#a').trigger('foo'); a.should.equal 1 end it 'calls most specific namespaced onfoo and most specific non-namespaced onfoo when foo triggered' var a = 0, b = 0, c = 0, d = 0; $('#a.a').entwine({onfoo: function(){a = 1;} }); $('#a').entwine({onfoo: function(){b = 1;} }); $('#a.a').entwine('bar', function($){return{onfoo: function(){c = 1;} }}); $('#a').entwine('bar', function($){return{onfoo: function(){d = 1;} }}); [a, b, c, d].should.eql [0, 0, 0, 0] $('#a').trigger('foo'); [a, b, c, d].should.eql [1, 0, 1, 0] end it 'calls up correctly on _super' var a = 0, b = 0; $('#a').entwine({onfoo: function(){a += 1;} }); $('#a.a').entwine({onfoo: function(){this._super(); b += 1; this._super();} }); [a, b].should.eql [0, 0] $('#a').trigger('foo') [a, b].should.eql [2, 1] end it 'passes event object' var event; $('#a').entwine({onfoo: function(e){event = e;} }); $('#a').trigger('foo'); event.should.have_prop 'type', 'foo' $(event.target).should.have_attr 'id', 'a' end it 'delegates submit events to forms' var a = 0; $('
').appendTo('#dom_test'); $('.foo').entwine({onsubmit: function(e, d){a = 1;} }); a.should.eql 0 $('.foo').trigger('submit'); a.should.eql 1 end describe 'can pass event data' it 'on custom events' var data; $('#a').entwine({onfoo: function(e, d){data = d;} }); $('#a').trigger('foo', {cheese: 'burger'}); data.cheese.should.eql 'burger' end it 'on normal events' var data; $('#a').entwine({onclick: function(e, d){data = d;} }); $('#a').trigger('click', {finger: 'left'}); data.finger.should.eql 'left' end it 'on submit' var data; $('').appendTo('#dom_test'); $('.foo').entwine({onsubmit: function(e, d){data = d; return false;} }) $('.foo').trigger('submit', {cheese: 'burger'}); data.cheese.should.eql 'burger' end end end end