]>
git.wh0rd.org - tt-rss.git/blob - lib/dojo/dnd/autoscroll.js
2 Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3 Available via Academic Free License >= 2.1 OR the modified BSD license.
4 see: http://dojotoolkit.org/license for details
8 if(!dojo
._hasResource
["dojo.dnd.autoscroll"]){
9 dojo
._hasResource
["dojo.dnd.autoscroll"]=true;
10 dojo
.provide("dojo.dnd.autoscroll");
11 dojo
.dnd
.getViewport=function(){
12 var d
=dojo
.doc
,dd
=d
.documentElement
,w
=window
,b
=dojo
.body();
14 return {w
:dd
.clientWidth
,h
:w
.innerHeight
};
16 if(!dojo
.isOpera
&&w
.innerWidth
){
17 return {w
:w
.innerWidth
,h
:w
.innerHeight
};
19 if(!dojo
.isOpera
&&dd
&&dd
.clientWidth
){
20 return {w
:dd
.clientWidth
,h
:dd
.clientHeight
};
23 return {w
:b
.clientWidth
,h
:b
.clientHeight
};
30 dojo
.dnd
.V_TRIGGER_AUTOSCROLL
=32;
31 dojo
.dnd
.H_TRIGGER_AUTOSCROLL
=32;
32 dojo
.dnd
.V_AUTOSCROLL_VALUE
=16;
33 dojo
.dnd
.H_AUTOSCROLL_VALUE
=16;
34 dojo
.dnd
.autoScroll=function(e
){
35 var v
=dojo
.dnd
.getViewport(),dx
=0,dy
=0;
36 if(e
.clientX
<dojo
.dnd
.H_TRIGGER_AUTOSCROLL
){
37 dx
=-dojo
.dnd
.H_AUTOSCROLL_VALUE
;
39 if(e
.clientX
>v
.w
-dojo
.dnd
.H_TRIGGER_AUTOSCROLL
){
40 dx
=dojo
.dnd
.H_AUTOSCROLL_VALUE
;
43 if(e
.clientY
<dojo
.dnd
.V_TRIGGER_AUTOSCROLL
){
44 dy
=-dojo
.dnd
.V_AUTOSCROLL_VALUE
;
46 if(e
.clientY
>v
.h
-dojo
.dnd
.V_TRIGGER_AUTOSCROLL
){
47 dy
=dojo
.dnd
.V_AUTOSCROLL_VALUE
;
50 window
.scrollBy(dx
,dy
);
52 dojo
.dnd
._validNodes
={"div":1,"p":1,"td":1};
53 dojo
.dnd
._validOverflow
={"auto":1,"scroll":1};
54 dojo
.dnd
.autoScrollNodes=function(e
){
55 for(var n
=e
.target
;n
;){
56 if(n
.nodeType
==1&&(n
.tagName
.toLowerCase() in dojo
.dnd
._validNodes
)){
57 var s
=dojo
.getComputedStyle(n
);
58 if(s
.overflow
.toLowerCase() in dojo
.dnd
._validOverflow
){
59 var b
=dojo
._getContentBox(n
,s
),t
=dojo
.position(n
,true);
60 var w
=Math
.min(dojo
.dnd
.H_TRIGGER_AUTOSCROLL
,b
.w
/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx
=e
.pageX
-t
.x
,ry
=e
.pageY
-t
.y
,dx
=0,dy
=0;
61 if(dojo
.isWebKit
||dojo
.isOpera
){
62 rx
+=dojo
.body().scrollLeft
,ry
+=dojo
.body().scrollTop
;
82 var _1
=n
.scrollLeft
,_2
=n
.scrollTop
;
83 n
.scrollLeft
=n
.scrollLeft
+dx
;
84 n
.scrollTop
=n
.scrollTop
+dy
;
85 if(_1
!=n
.scrollLeft
||_2
!=n
.scrollTop
){
97 dojo
.dnd
.autoScroll(e
);