You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.8 KiB
95 lines
2.8 KiB
define(["dojo/_base/lang","../_base", "dojo/_base/window", "dojo/on", "dojo/_base/config", "dojo/touch", |
|
"dojox/gesture/tap", "dojox/gesture/swipe" |
|
|
|
], function(lang, dxa, window, on, config, touch, tap, swipe){ |
|
|
|
// window startup data |
|
return (dxa.plugins.gestureEvents = new (function(){ |
|
|
|
// watch for dojox.gesture.swipe, use delay to avoid getting too many |
|
if(config["watchSwipe"] !== undefined && !config["watchSwipe"]){ |
|
this.watchSwipe = false; |
|
}else{ |
|
this.watchSwipe = true; |
|
} |
|
this.swipeSampleDelay = config["swipeSampleDelay"] || 1000; |
|
this.targetProps = config["targetProps"] || ["id","className","localName","href", "spellcheck", "lang", "textContent", "value" ]; |
|
this.textContentMaxChars = config["textContentMaxChars"] || 50; |
|
|
|
this.addDataSwipe = lang.hitch(dxa, "addData", "gesture.swipe"); |
|
this.sampleSwipe = function(e){ |
|
if(!this._rateLimited){ |
|
this.addDataSwipe(this.trimEvent(e)); |
|
this._rateLimited = true; |
|
setTimeout(lang.hitch(this, function(){ |
|
if(this._rateLimited){ |
|
this.trimEvent(this._lastSwipeEvent); |
|
delete this._lastSwipeEvent; |
|
delete this._rateLimited; |
|
} |
|
}), this.swipeSampleDelay); |
|
} |
|
this._lastSwipeEvent = e; |
|
return e; |
|
} |
|
if(this.watchSwipe){ |
|
on(window.doc, swipe, lang.hitch(this, "sampleSwipe")); |
|
} |
|
|
|
|
|
// watch for dojox.gesture.tap |
|
this.addData = lang.hitch(dxa, "addData", "gesture.tap"); |
|
this.onGestureTap = function(e){ |
|
this.addData(this.trimEvent(e)); |
|
} |
|
on(window.doc, tap, lang.hitch(this, "onGestureTap")); |
|
|
|
// watch for dojox.gesture.tap.doubletap |
|
this.addDataDoubleTap = lang.hitch(dxa, "addData", "gesture.tap.doubletap"); |
|
this.onGestureDoubleTap = function(e){ |
|
this.addDataDoubleTap(this.trimEvent(e)); |
|
} |
|
on(window.doc, tap.doubletap, lang.hitch(this, "onGestureDoubleTap")); |
|
|
|
// watch for dojox.gesture.tap.taphold |
|
this.addDataTapHold = lang.hitch(dxa, "addData", "gesture.tap.taphold"); |
|
this.onGestureTapHold = function(e){ |
|
this.addDataTapHold(this.trimEvent(e)); |
|
} |
|
on(window.doc, tap.hold, lang.hitch(this, "onGestureTapHold")); |
|
|
|
|
|
this.trimEvent = function(e){ |
|
var t = {}; |
|
for(var i in e){ |
|
switch(i){ |
|
case "target": |
|
var props = this.targetProps; |
|
t[i] = {}; |
|
for(var j = 0;j < props.length;j++){ |
|
if(e[i][props[j]]){ |
|
if(props[j] == "text" || props[j] == "textContent"){ |
|
if((e[i]["localName"] != "HTML") && (e[i]["localName"] != "BODY")){ |
|
t[i][props[j]] = e[i][props[j]].substr(0,this.textContentMaxChars); |
|
} |
|
}else{ |
|
t[i][props[j]] = e[i][props[j]]; |
|
} |
|
} |
|
} |
|
break; |
|
case "clientX": |
|
case "clientY": |
|
case "screenX": |
|
case "screenY": |
|
case "dx": |
|
case "dy": |
|
case "time": |
|
t[i] = e[i]; |
|
break; |
|
} |
|
} |
|
return t; |
|
} |
|
})()); |
|
});
|
|
|