tt-rss/lib/dojo/dnd/TimedMoveable.js.uncompressed.js
2013-03-18 10:26:26 +04:00

64 lines
2 KiB
JavaScript

define("dojo/dnd/TimedMoveable", ["../_base/declare", "./Moveable" /*=====, "./Mover" =====*/], function(declare, Moveable /*=====, Mover =====*/){
// module:
// dojo/dnd/TimedMoveable
/*=====
var __TimedMoveableArgs = declare([Moveable.__MoveableArgs], {
// timeout: Number
// delay move by this number of ms,
// accumulating position changes during the timeout
timeout: 0
});
=====*/
// precalculate long expressions
var oldOnMove = Moveable.prototype.onMove;
return declare("dojo.dnd.TimedMoveable", Moveable, {
// summary:
// A specialized version of Moveable to support an FPS throttling.
// This class puts an upper restriction on FPS, which may reduce
// the CPU load. The additional parameter "timeout" regulates
// the delay before actually moving the moveable object.
// object attributes (for markup)
timeout: 40, // in ms, 40ms corresponds to 25 fps
constructor: function(node, params){
// summary:
// an object that makes a node moveable with a timer
// node: Node||String
// a node (or node's id) to be moved
// params: __TimedMoveableArgs
// object with additional parameters.
// sanitize parameters
if(!params){ params = {}; }
if(params.timeout && typeof params.timeout == "number" && params.timeout >= 0){
this.timeout = params.timeout;
}
},
onMoveStop: function(/*Mover*/ mover){
if(mover._timer){
// stop timer
clearTimeout(mover._timer);
// reflect the last received position
oldOnMove.call(this, mover, mover._leftTop);
}
Moveable.prototype.onMoveStop.apply(this, arguments);
},
onMove: function(/*Mover*/ mover, /*Object*/ leftTop){
mover._leftTop = leftTop;
if(!mover._timer){
var _t = this; // to avoid using dojo.hitch()
mover._timer = setTimeout(function(){
// we don't have any pending requests
mover._timer = null;
// reflect the last received position
oldOnMove.call(_t, mover, mover._leftTop);
}, this.timeout);
}
}
});
});