- fixed broken eventHandlers for new added Systems, closed #622

This commit is contained in:
Mark Friedrich
2018-05-05 18:09:36 +02:00
parent 161c37c256
commit 359ff4cc29
4 changed files with 136 additions and 76 deletions

View File

@@ -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);
};
/**

View File

@@ -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 <a>-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 <a>-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,

View File

@@ -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);
};
/**

View File

@@ -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 <a>-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 <a>-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,