198 lines
5.4 KiB
JavaScript
198 lines
5.4 KiB
JavaScript
//>>built
|
|
define("dojox/mdnd/AutoScroll", ["dojo/_base/kernel","dojo/_base/declare","dojo/_base/lang","dojo/_base/connect",
|
|
"dojo/_base/window"],function(dojo){
|
|
var as = dojo.declare(
|
|
"dojox.mdnd.AutoScroll",
|
|
null,
|
|
{
|
|
// summary:
|
|
// Activate scrolling while dragging a widget.
|
|
|
|
// interval: Integer
|
|
// default mouse move offset
|
|
interval: 3,
|
|
|
|
// recursiveTimer: Integer
|
|
recursiveTimer: 10,
|
|
|
|
// marginMouse: Integer
|
|
// Default mouse margin
|
|
marginMouse: 50,
|
|
|
|
constructor: function(){
|
|
//console.log("dojox.mdnd.AutoScroll ::: constructor ");
|
|
this.resizeHandler = dojo.connect(dojo.global,"onresize", this, function(){
|
|
this.getViewport();
|
|
});
|
|
dojo.ready(dojo.hitch(this, "init"));
|
|
},
|
|
|
|
init: function(){
|
|
//console.log("dojox.mdnd.AutoScroll ::: init ");
|
|
this._html = (dojo.isWebKit) ? dojo.body() : dojo.body().parentNode;
|
|
this.getViewport();
|
|
},
|
|
|
|
getViewport:function(){
|
|
// summary:
|
|
// Set the visible part of the window. Varies accordion to Navigator.
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: getViewport ");
|
|
var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
|
|
if(dojo.isMozilla){
|
|
this._v = { 'w': dd.clientWidth, 'h': w.innerHeight }; // Object
|
|
}
|
|
else if(!dojo.isOpera && w.innerWidth){
|
|
this._v = { 'w': w.innerWidth, 'h': w.innerHeight }; // Object
|
|
}
|
|
else if(!dojo.isOpera && dd && dd.clientWidth){
|
|
this._v = { 'w': dd.clientWidth, 'h': dd.clientHeight }; // Object
|
|
}
|
|
else if(b.clientWidth){
|
|
this._v = { 'w': b.clientWidth, 'h': b.clientHeight }; // Object
|
|
}
|
|
},
|
|
|
|
setAutoScrollNode: function(/*Node*/node){
|
|
// summary:
|
|
// set the node which is dragged
|
|
// node:
|
|
// node to scroll
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: setAutoScrollNode ");
|
|
this._node = node;
|
|
},
|
|
|
|
setAutoScrollMaxPage: function(){
|
|
// summary:
|
|
// Set the hightest heigh and width authorized scroll.
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: setAutoScrollMaxPage ");
|
|
this._yMax = this._html.scrollHeight;
|
|
this._xMax = this._html.scrollWidth;
|
|
},
|
|
|
|
checkAutoScroll: function(/*Event*/e){
|
|
// summary:
|
|
// Check if an autoScroll have to be launched.
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: checkAutoScroll");
|
|
if(this._autoScrollActive){
|
|
this.stopAutoScroll();
|
|
}
|
|
this._y = e.pageY;
|
|
this._x = e.pageX;
|
|
if(e.clientX < this.marginMouse){
|
|
this._autoScrollActive = true;
|
|
this._autoScrollLeft(e);
|
|
}
|
|
else if(e.clientX > this._v.w - this.marginMouse){
|
|
this._autoScrollActive = true;
|
|
this._autoScrollRight(e);
|
|
}
|
|
if(e.clientY < this.marginMouse){
|
|
this._autoScrollActive = true;
|
|
this._autoScrollUp(e);
|
|
|
|
}
|
|
else if(e.clientY > this._v.h - this.marginMouse){
|
|
this._autoScrollActive = true;
|
|
this._autoScrollDown();
|
|
}
|
|
},
|
|
|
|
_autoScrollDown: function(){
|
|
// summary:
|
|
// Manage the down autoscroll.
|
|
// tags:
|
|
// protected
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: _autoScrollDown ");
|
|
if(this._timer){
|
|
clearTimeout(this._timer);
|
|
}
|
|
if(this._autoScrollActive && this._y + this.marginMouse < this._yMax){
|
|
this._html.scrollTop += this.interval;
|
|
this._node.style.top = (parseInt(this._node.style.top) + this.interval) + "px";
|
|
this._y += this.interval;
|
|
this._timer = setTimeout(dojo.hitch(this, "_autoScrollDown"), this.recursiveTimer);
|
|
}
|
|
},
|
|
|
|
_autoScrollUp: function(){
|
|
// summary:
|
|
// Manage the up autoscroll.
|
|
// tags:
|
|
// protected
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: _autoScrollUp ");
|
|
if(this._timer){
|
|
clearTimeout(this._timer);
|
|
}
|
|
if(this._autoScrollActive && this._y - this.marginMouse > 0){
|
|
this._html.scrollTop -= this.interval;
|
|
this._node.style.top = (parseInt(this._node.style.top) - this.interval) + "px";
|
|
this._y -= this.interval;
|
|
this._timer = setTimeout(dojo.hitch(this, "_autoScrollUp"),this.recursiveTimer);
|
|
}
|
|
},
|
|
|
|
_autoScrollRight: function(){
|
|
// summary:
|
|
// Manage the right autoscroll.
|
|
// tags:
|
|
// protected
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: _autoScrollRight ");
|
|
if(this._timer){
|
|
clearTimeout(this._timer);
|
|
}
|
|
if(this._autoScrollActive && this._x + this.marginMouse < this._xMax){
|
|
this._html.scrollLeft += this.interval;
|
|
this._node.style.left = (parseInt(this._node.style.left) + this.interval) + "px";
|
|
this._x += this.interval;
|
|
this._timer = setTimeout(dojo.hitch(this, "_autoScrollRight"), this.recursiveTimer);
|
|
}
|
|
},
|
|
|
|
_autoScrollLeft: function(/*Event*/e){
|
|
// summary:
|
|
// Manage the left autoscroll.
|
|
// tags:
|
|
// protected
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: _autoScrollLeft ");
|
|
if(this._timer){
|
|
clearTimeout(this._timer);
|
|
}
|
|
if(this._autoScrollActive && this._x - this.marginMouse > 0){
|
|
this._html.scrollLeft -= this.interval;
|
|
this._node.style.left = (parseInt(this._node.style.left) - this.interval) + "px";
|
|
this._x -= this.interval;
|
|
this._timer = setTimeout(dojo.hitch(this, "_autoScrollLeft"),this.recursiveTimer);
|
|
}
|
|
},
|
|
|
|
stopAutoScroll: function(){
|
|
// summary:
|
|
// Stop the autoscroll.
|
|
|
|
//console.log("dojox.mdnd.AutoScroll ::: stopAutoScroll ");
|
|
if(this._timer){
|
|
clearTimeout(this._timer);
|
|
}
|
|
this._autoScrollActive = false;
|
|
},
|
|
|
|
destroy: function(){
|
|
//console.log("dojox.mdnd.AutoScroll ::: destroy ");
|
|
dojo.disconnect(this.resizeHandler);
|
|
}
|
|
});
|
|
|
|
dojox.mdnd.autoScroll = null;
|
|
|
|
dojox.mdnd.autoScroll = new dojox.mdnd.AutoScroll();
|
|
return as;
|
|
});
|