diff --git a/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.js b/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.js index c87603625..eac58f3ed 100644 --- a/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.js +++ b/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.js @@ -3,20 +3,17 @@ modules.define('jquery', function(provide, $) { $.each({ pointerpress : 'pointerdown', pointerrelease : 'pointerup pointercancel' -}, function(spec, origEvent) { +}, function(fix, origEvent) { function eventHandler(e) { - var res, origType = e.handleObj.origType; - if(e.which === 1) { - e.type = spec; - res = $.event.dispatch.apply(this, arguments); - e.type = origType; + var fixedEvent = cloneEvent(e); + fixedEvent.type = fix; + fixedEvent.originalEvent = e; + return $.event.dispatch.call(this, fixedEvent); } - - return res; } - $.event.special[spec] = { + $.event.special[fix] = { setup : function() { $(this).on(origEvent, eventHandler); return false; @@ -28,6 +25,16 @@ $.each({ }; }); +function cloneEvent(event) { + var eventCopy = $.extend(new $.Event(), event); + if(event.preventDefault) { + eventCopy.preventDefault = function() { + event.preventDefault(); + }; + } + return eventCopy; +} + provide($); }); diff --git a/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.spec.js b/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.spec.js index 6967a7496..671f7777d 100644 --- a/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.spec.js +++ b/common.blocks/jquery/__event/_type/jquery__event_type_pointerpressrelease.spec.js @@ -3,29 +3,62 @@ modules.define( ['jquery', 'sinon'], function(provide, $, sinon) { -describe('jquery__event_type_pointerpressrelease', function() { - it('should trigger "pointerpress" event on "mousedown"', function() { - var spy = sinon.spy(), - e = $.Event('mousedown', { which : 1 }), - elem = $('
').appendTo('body'); - - elem.on('pointerpress', spy).trigger(e); +describe.only('jquery__event_type_pointerpressrelease', function() { + var elem; - spy.should.have.been.calledOnce; + beforeEach(function() { + elem = $('').appendTo('body'); + }); + afterEach(function() { elem.remove(); }); - it('should trigger "pointerrelease" event on "mouseup"', function() { - var spy = sinon.spy(), - e = $.Event('mouseup', { which : 1 }), - elem = $('').appendTo('body'); + it('should trigger "pointerpress" event on "mousedown"', function() { + var spy = sinon.spy(); + elem.on('pointerpress', spy) + .trigger($.Event('mousedown', { which : 1 })) + .trigger('mouseup'); + + spy.should.have.been.calledOnce; + }); - elem.on('pointerrelease', spy).trigger(e); + it('should trigger "pointerrelease" event on "mouseup"', function() { + var spy = sinon.spy(); + elem.on('pointerrelease', spy) + .trigger('mousedown') + .trigger($.Event('mouseup', { which : 1 })); spy.should.have.been.calledOnce; + }); - elem.remove(); + it('"pointerpress" should have "pointerdown" original event', function(done) { + elem + .on('pointerpress', function(e) { + e.originalEvent.type.should.be.equal('pointerdown'); + done(); + }) + .trigger($.Event('mousedown', { which : 1 })) + .trigger('mouseup'); + }); + + it('"pointerrelease" should have "pointerup" original event', function(done) { + elem + .on('pointerrelease', function(e) { + e.originalEvent.type.should.be.equal('pointerup'); + done(); + }) + .trigger('mousedown') + .trigger($.Event('mouseup', { which : 1 })); + }); + + it('"pointerrelease" should have "pointercancel" original event', function(done) { + elem + .on('pointerrelease', function(e) { + e.originalEvent.type.should.be.equal('pointercancel'); + done(); + }) + .trigger($.Event('pointercancel', { which : 1 })); }); });