123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.propagating = factory());
- }(this, (function () { 'use strict';
- var _firstTarget = null;
-
- function propagating(hammer, options) {
- var _options = options || {
- preventDefault: false
- };
- if (hammer.Manager) {
-
-
- var Hammer = hammer;
- var PropagatingHammer = function(element, options) {
- var o = Object.create(_options);
- if (options) Hammer.assign(o, options);
- return propagating(new Hammer(element, o), o);
- };
- Hammer.assign(PropagatingHammer, Hammer);
- PropagatingHammer.Manager = function (element, options) {
- var o = Object.create(_options);
- if (options) Hammer.assign(o, options);
- return propagating(new Hammer.Manager(element, o), o);
- };
- return PropagatingHammer;
- }
-
-
- var wrapper = Object.create(hammer);
-
- var element = hammer.element;
- if(!element.hammer) element.hammer = [];
- element.hammer.push(wrapper);
-
-
- hammer.on('hammer.input', function (event) {
- if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) {
- event.preventDefault();
- }
- if (event.isFirst) {
- _firstTarget = event.target;
- }
- });
-
- wrapper._handlers = {};
-
- wrapper.on = function (events, handler) {
-
- split(events).forEach(function (event) {
- var _handlers = wrapper._handlers[event];
- if (!_handlers) {
- wrapper._handlers[event] = _handlers = [];
-
- hammer.on(event, propagatedHandler);
- }
- _handlers.push(handler);
- });
- return wrapper;
- };
-
- wrapper.off = function (events, handler) {
-
- split(events).forEach(function (event) {
- var _handlers = wrapper._handlers[event];
- if (_handlers) {
- _handlers = handler ? _handlers.filter(function (h) {
- return h !== handler;
- }) : [];
- if (_handlers.length > 0) {
- wrapper._handlers[event] = _handlers;
- }
- else {
-
- hammer.off(event, propagatedHandler);
- delete wrapper._handlers[event];
- }
- }
- });
- return wrapper;
- };
-
- wrapper.emit = function(eventType, event) {
- _firstTarget = event.target;
- hammer.emit(eventType, event);
- };
- wrapper.destroy = function () {
-
- var hammers = hammer.element.hammer;
- var idx = hammers.indexOf(wrapper);
- if(idx !== -1) hammers.splice(idx,1);
- if(!hammers.length) delete hammer.element.hammer;
-
- wrapper._handlers = {};
-
- hammer.destroy();
- };
-
- function split(events) {
- return events.match(/[^ ]+/g);
- }
-
- function propagatedHandler(event) {
-
- if (event.type !== 'hammer.input') {
-
-
- if (!event.srcEvent._handled) {
- event.srcEvent._handled = {};
- }
- if (event.srcEvent._handled[event.type]) {
- return;
- }
- else {
- event.srcEvent._handled[event.type] = true;
- }
- }
-
- var stopped = false;
- event.stopPropagation = function () {
- stopped = true;
- };
-
- var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent);
- if(typeof srcStop == "function") {
- event.srcEvent.stopPropagation = function(){
- srcStop();
- event.stopPropagation();
- };
- }
-
- event.firstTarget = _firstTarget;
-
- var elem = _firstTarget;
- while (elem && !stopped) {
- var elemHammer = elem.hammer;
- if(elemHammer){
- var _handlers;
- for(var k = 0; k < elemHammer.length; k++){
- _handlers = elemHammer[k]._handlers[event.type];
- if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) {
- _handlers[i](event);
- }
- }
- }
- elem = elem.parentNode;
- }
- }
- return wrapper;
- }
- return propagating;
- })));
|