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.
109 lines
3.0 KiB
109 lines
3.0 KiB
define(["dojo/_base/lang", "../_base", "dojo/_base/config", "dojo/_base/window", "dojo/on", "dojo/touch" |
|
], function(lang, dxa, config, window, on, touch){ |
|
|
|
|
|
return (dxa.plugins.touchMove = new (function(){ |
|
if(config["watchTouch"] !== undefined && !config["watchTouch"]){ |
|
this.watchTouch = false; |
|
}else{ |
|
this.watchTouch = true; |
|
} |
|
if(config["showTouchesDetails"] !== undefined && !config["showTouchesDetails"]){ |
|
this.showTouchesDetails = false; |
|
}else{ |
|
this.showTouchesDetails = true; |
|
} |
|
this.touchSampleDelay = config["touchSampleDelay"] || 1000; |
|
this.targetProps = config["targetProps"] || ["id","className","localName","href", "spellcheck", "lang", "textContent", "value" ]; |
|
this.textContentMaxChars = config["textContentMaxChars"] || 50; |
|
this.addData = lang.hitch(dxa, "addData", "touch.move"); |
|
|
|
this.sampleTouchMove = function(e){ |
|
if(!this._rateLimited){ |
|
this.addData("sample",this.trimTouchEvent(e)); |
|
this._rateLimited = true; |
|
setTimeout(lang.hitch(this, function(){ |
|
if(this._rateLimited){ |
|
this.trimTouchEvent(this._lastTouchEvent); |
|
delete this._lastTouchEvent; |
|
delete this._rateLimited; |
|
} |
|
}), this.touchSampleDelay); |
|
} |
|
this._lastTouchEvent = e; |
|
return e; |
|
}; |
|
|
|
on(window.doc, touch.move, lang.hitch(this, "sampleTouchMove")); |
|
|
|
this.handleTarget = function(t, target, i){ |
|
var props = this.targetProps; |
|
t[i] = {}; |
|
for(var j = 0;j < props.length;j++){ |
|
if((typeof target == "object" || typeof target == "function") && props[j] in target){ |
|
|
|
if(props[j] == "text" || props[j] == "textContent"){ |
|
if(target["localName"] && (target["localName"] != "HTML") && (target["localName"] != "BODY")){ |
|
t[i][props[j]] = target[props[j]].substr(0,this.textContentMaxChars); |
|
} |
|
}else{ |
|
t[i][props[j]] = target[props[j]]; |
|
} |
|
} |
|
} |
|
}; |
|
|
|
this.trimTouchEvent = function(e){ |
|
var t = {}; |
|
var val; |
|
for(var i in e){ |
|
switch(i){ |
|
case "target": |
|
this.handleTarget(t, e[i], i) |
|
break; |
|
case "touches": |
|
if(e[i].length !== 0){ |
|
t["touches.length"] = e[i].length; |
|
} |
|
if(this.showTouchesDetails){ |
|
for(var j = 0;j < e[i].length;j++){ |
|
for(var s in e[i][j]){ |
|
switch(s){ |
|
case "target": |
|
this.handleTarget(t, e[i][j].target, "touches["+j+"][target]"); |
|
break; |
|
case "clientX": |
|
case "clientY": |
|
case "screenX": |
|
case "screenY": |
|
if(e[i][j]){ |
|
val = e[i][j][s]; |
|
t["touches["+j+"]["+s+"]"] = val + ''; |
|
} |
|
break; |
|
default: |
|
//console.log("Skipping: ", i); |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
break; |
|
case "clientX": |
|
case "clientY": |
|
case "screenX": |
|
case "screenY": |
|
if(e[i]){ |
|
val = e[i]; |
|
t[i] = val + ''; |
|
} |
|
break; |
|
default: |
|
//console.log("Skipping: ", i); |
|
break; |
|
} |
|
} |
|
return t; |
|
}; |
|
})()); |
|
});
|
|
|