dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
96 lines (85 loc) • 2.88 kB
JavaScript
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;
}
})());
});