From 359ff4cc2983d104f4b55eed115072309217a28b Mon Sep 17 00:00:00 2001 From: Mark Friedrich Date: Sat, 5 May 2018 18:09:36 +0200 Subject: [PATCH] - fixed broken eventHandlers for new added Systems, closed #622 --- js/app/map/map.js | 11 ++-- js/app/util.js | 95 ++++++++++++++++++++++----------- public/js/v1.3.5/app/map/map.js | 11 ++-- public/js/v1.3.5/app/util.js | 95 ++++++++++++++++++++++----------- 4 files changed, 136 insertions(+), 76 deletions(-) diff --git a/js/app/map/map.js b/js/app/map/map.js index cfd6461b..89f50941 100644 --- a/js/app/map/map.js +++ b/js/app/map/map.js @@ -748,7 +748,7 @@ define([ } }.bind(connection); - connectionCanvas.singleDoubleClick(single, () => {}); + Util.singleDoubleClick(connectionCanvas, single, () => {}); }; /** @@ -1505,7 +1505,7 @@ define([ * @param systemData * @param connectedSystem */ - let drawSystem = function(map, systemData, connectedSystem){ + let drawSystem = (map, systemData, connectedSystem) => { // check if systemData is valid if(isValidSystem(systemData)){ @@ -1551,7 +1551,7 @@ define([ * @param requestData * @param context */ - let saveSystem = function(requestData, context){ + let saveSystem = (requestData, context) => { $.ajax({ type: 'POST', url: Init.path.saveSystem, @@ -2190,7 +2190,7 @@ define([ * @param map * @param system */ - let setSystemObserver = function(map, system){ + let setSystemObserver = (map, system) => { system = $(system); // get map container @@ -2481,7 +2481,6 @@ define([ }; let single = function(e){ - // check if click was performed on "popover" (x-editable) let popoverClick = false; if( $(e.target).parents('.popover').length ){ @@ -2510,7 +2509,7 @@ define([ }; - system.singleDoubleClick(single, double); + Util.singleDoubleClick(system, single, double); }; /** diff --git a/js/app/util.js b/js/app/util.js index 29228a76..0dc72175 100644 --- a/js/app/util.js +++ b/js/app/util.js @@ -744,38 +744,6 @@ define([ }); }; - /** - * wrapper function for onClick() || onDblClick() events in order to distinguish between this two types of events - * @param singleClickCallback - * @param doubleClickCallback - * @param timeout - * @returns {any|JQuery|*} - */ - $.fn.singleDoubleClick = function(singleClickCallback, doubleClickCallback, timeout) { - return this.each(function(){ - let clicks = 0, self = this; - - // prevent default behaviour (e.g. open -tag link) - $(this).off('click').on('click', function(e){ - e.preventDefault(); - }); - - $(this).off('mouseup').on('mouseup', function(e){ - clicks++; - if (clicks === 1) { - setTimeout(function(){ - if(clicks === 1) { - singleClickCallback.call(self, e); - } else { - doubleClickCallback.call(self, e); - } - clicks = 0; - }, timeout || Init.timer.DBL_CLICK); - } - }); - }); - }; - /** * highlight jquery elements * add/remove css class for keyframe animation @@ -2378,6 +2346,68 @@ define([ return dateString + ' ' + timeString; }; + /** + * check an element for attached event by name + * -> e.g. eventName = 'click.myNamespace' + * @param element + * @param eventName + * @returns {boolean} + */ + let hasEvent = (element, eventName) => { + let exists = false; + let parts = eventName.split('.'); + let name = parts[0]; + let namespace = parts.length === 2 ? parts[1] : false; + let events = $._data( element[0], 'events')[name]; + if(events){ + if(namespace){ + // seach events by namespace + for(let event of events){ + if(event.namespace === namespace){ + exists = true; + break; + } + } + }else{ + // at least ONE event of the given name found + exists = true; + } + } + return exists; + }; + + /** + * wrapper function for onClick() || onDblClick() events in order to distinguish between this two types of events + * @param element + * @param singleClickCallback + * @param doubleClickCallback + * @param timeout + */ + let singleDoubleClick = (element, singleClickCallback, doubleClickCallback, timeout) => { + let eventName = 'mouseup.singleDouble'; + if(!hasEvent(element, eventName)){ + let clicks = 0; + // prevent default behaviour (e.g. open -tag link) + element.off('click').on('click', function(e){ + e.preventDefault(); + }); + + element.off(eventName).on(eventName, function(e){ + clicks++; + if (clicks === 1) { + setTimeout(element => { + if(clicks === 1) { + singleClickCallback.call(element, e); + } else { + doubleClickCallback.call(element, e); + } + clicks = 0; + }, timeout || Init.timer.DBL_CLICK, this); + } + }); + } + }; + /** * get deep json object value if exists * -> e.g. key = 'first.last.third' string @@ -2566,6 +2596,7 @@ define([ getLocalStorage: getLocalStorage, clearSessionStorage: clearSessionStorage, getBrowserTabId: getBrowserTabId, + singleDoubleClick: singleDoubleClick, getObjVal: getObjVal, redirect: redirect, logout: logout, diff --git a/public/js/v1.3.5/app/map/map.js b/public/js/v1.3.5/app/map/map.js index cfd6461b..89f50941 100644 --- a/public/js/v1.3.5/app/map/map.js +++ b/public/js/v1.3.5/app/map/map.js @@ -748,7 +748,7 @@ define([ } }.bind(connection); - connectionCanvas.singleDoubleClick(single, () => {}); + Util.singleDoubleClick(connectionCanvas, single, () => {}); }; /** @@ -1505,7 +1505,7 @@ define([ * @param systemData * @param connectedSystem */ - let drawSystem = function(map, systemData, connectedSystem){ + let drawSystem = (map, systemData, connectedSystem) => { // check if systemData is valid if(isValidSystem(systemData)){ @@ -1551,7 +1551,7 @@ define([ * @param requestData * @param context */ - let saveSystem = function(requestData, context){ + let saveSystem = (requestData, context) => { $.ajax({ type: 'POST', url: Init.path.saveSystem, @@ -2190,7 +2190,7 @@ define([ * @param map * @param system */ - let setSystemObserver = function(map, system){ + let setSystemObserver = (map, system) => { system = $(system); // get map container @@ -2481,7 +2481,6 @@ define([ }; let single = function(e){ - // check if click was performed on "popover" (x-editable) let popoverClick = false; if( $(e.target).parents('.popover').length ){ @@ -2510,7 +2509,7 @@ define([ }; - system.singleDoubleClick(single, double); + Util.singleDoubleClick(system, single, double); }; /** diff --git a/public/js/v1.3.5/app/util.js b/public/js/v1.3.5/app/util.js index 29228a76..0dc72175 100644 --- a/public/js/v1.3.5/app/util.js +++ b/public/js/v1.3.5/app/util.js @@ -744,38 +744,6 @@ define([ }); }; - /** - * wrapper function for onClick() || onDblClick() events in order to distinguish between this two types of events - * @param singleClickCallback - * @param doubleClickCallback - * @param timeout - * @returns {any|JQuery|*} - */ - $.fn.singleDoubleClick = function(singleClickCallback, doubleClickCallback, timeout) { - return this.each(function(){ - let clicks = 0, self = this; - - // prevent default behaviour (e.g. open -tag link) - $(this).off('click').on('click', function(e){ - e.preventDefault(); - }); - - $(this).off('mouseup').on('mouseup', function(e){ - clicks++; - if (clicks === 1) { - setTimeout(function(){ - if(clicks === 1) { - singleClickCallback.call(self, e); - } else { - doubleClickCallback.call(self, e); - } - clicks = 0; - }, timeout || Init.timer.DBL_CLICK); - } - }); - }); - }; - /** * highlight jquery elements * add/remove css class for keyframe animation @@ -2378,6 +2346,68 @@ define([ return dateString + ' ' + timeString; }; + /** + * check an element for attached event by name + * -> e.g. eventName = 'click.myNamespace' + * @param element + * @param eventName + * @returns {boolean} + */ + let hasEvent = (element, eventName) => { + let exists = false; + let parts = eventName.split('.'); + let name = parts[0]; + let namespace = parts.length === 2 ? parts[1] : false; + let events = $._data( element[0], 'events')[name]; + if(events){ + if(namespace){ + // seach events by namespace + for(let event of events){ + if(event.namespace === namespace){ + exists = true; + break; + } + } + }else{ + // at least ONE event of the given name found + exists = true; + } + } + return exists; + }; + + /** + * wrapper function for onClick() || onDblClick() events in order to distinguish between this two types of events + * @param element + * @param singleClickCallback + * @param doubleClickCallback + * @param timeout + */ + let singleDoubleClick = (element, singleClickCallback, doubleClickCallback, timeout) => { + let eventName = 'mouseup.singleDouble'; + if(!hasEvent(element, eventName)){ + let clicks = 0; + // prevent default behaviour (e.g. open -tag link) + element.off('click').on('click', function(e){ + e.preventDefault(); + }); + + element.off(eventName).on(eventName, function(e){ + clicks++; + if (clicks === 1) { + setTimeout(element => { + if(clicks === 1) { + singleClickCallback.call(element, e); + } else { + doubleClickCallback.call(element, e); + } + clicks = 0; + }, timeout || Init.timer.DBL_CLICK, this); + } + }); + } + }; + /** * get deep json object value if exists * -> e.g. key = 'first.last.third' string @@ -2566,6 +2596,7 @@ define([ getLocalStorage: getLocalStorage, clearSessionStorage: clearSessionStorage, getBrowserTabId: getBrowserTabId, + singleDoubleClick: singleDoubleClick, getObjVal: getObjVal, redirect: redirect, logout: logout,