test('on', 9, function () { var called = false, DelegateTest = Control.extend({ click: function () {} }), Tester = Control.extend({ init: function (el, ops) { this.on(window, 'click', function (ev) { ok(true, 'Got window click event'); }); this.on(window, 'click', 'clicked'); this.on('click', function () { ok(true, 'Directly clicked element'); }); this.on('click', 'clicked'); }, clicked: function (context) { console.log(context); ok(true, 'Controller action delegated click triggered, too'); } }), div = document.createElement('div'); this.fixture.appendChild( div ); var rb = new Tester(div); this.fixture.appendChild( fragment( '<div id=\'els\'><span id=\'elspan\'><a href=\'javascript://\' id=\'elsa\'>click me</a></span></div>') ); var dt = new DelegateTest('#els'); dt.on(document.querySelector('#els span'), 'a', 'click', function () { called = true; }); domDispatch.call(document.querySelector('#els a'), 'click'); ok(called, 'delegate works'); domMutate.removeChild.call(this.fixture, document.querySelector('#els') ); domDispatch.call(div, 'click'); domDispatch.call(window, 'click'); rb.destroy(); });
test('custom events with hyphens work', 1, function () { this.fixture.appendChild( fragment( '<div id=\'customEvent\'><span></span></div>') ); var FooBar = Control.extend({ 'span custom-event': function () { ok(true, 'Custom event was fired.'); } }); new FooBar('#customEvent'); domDispatch.call(document.querySelector('#customEvent span'), 'custom-event'); });
test('space makes event', 1, function () { var Dot = Control.extend({ ' foo': function () { ok(true, 'called'); } }); this.fixture.appendChild( fragment( '<div id=\'els\'><span id=\'elspan\'><a href=\'#\' id=\'elsa\'>click me</a></span></div>') ); new Dot('#els'); domDispatch.call(document.querySelector('#els'), 'foo'); });
test('windowresize', function () { var called = false, WindowBind = Control.extend('', { '{window} resize': function () { called = true; } }); this.fixture.appendChild( fragment( '<div id=\'weird\'>') ); new WindowBind('#weird'); domDispatch.call(window, 'resize'); ok(called, 'got window resize event'); });
test('inherit', function () { var called = false, Parent = Control.extend({ click: function () { called = true; } }), Child = Parent.extend({}); this.fixture.appendChild( fragment( '<div id=\'els\'><span id=\'elspan\'><a href=\'#\' id=\'elsa\'>click me</a></span></div>') ); new Child('#els'); domDispatch.call(document.querySelector('#els'), 'click'); ok(called, 'inherited the click method'); });
test('parameterized actions', function () { var called = false, WeirderBind = Control.extend({ '{parameterized}': function () { called = true; } }), a; this.fixture.appendChild( fragment('<div id=\'crazy\'></div>')); a = document.getElementById('crazy'); new WeirderBind(a, { parameterized: 'sillyEvent' }); domDispatch.call(a, 'sillyEvent'); ok(called, 'heard the trigger'); });
test("drag and drop events", function() { expect(7); var DragDrop = Control.extend("", { " dragstart": function() { ok(true, "dragstart called"); }, " dragenter": function() { ok(true, "dragenter called"); }, " dragover": function() { ok(true, "dragover called"); }, " dragleave": function() { ok(true, "dragleave called"); }, " drag": function() { ok(true, "drag called"); }, " drop": function() { ok(true, "drop called"); }, " dragend": function() { ok(true, "dragend called"); } }); this.fixture.appendChild( fragment( '<div id="draggable"/>') ); new DragDrop("#draggable"); var draggable = document.getElementById("draggable"); domDispatch.call(draggable, "dragstart"); domDispatch.call(draggable, "dragenter"); domDispatch.call(draggable, "dragover"); domDispatch.call(draggable, "dragleave"); domDispatch.call(draggable, "drag"); domDispatch.call(draggable, "drop"); domDispatch.call(draggable, "dragend"); });