]>
git.wh0rd.org - tt-rss.git/blob - lib/dojo/dnd/autoscroll.js.uncompressed.js
1 define("dojo/dnd/autoscroll", ["../main", "../window"], function(dojo
) {
7 dojo
.getObject("dnd", true, dojo
);
9 dojo
.dnd
.getViewport
= dojo
.window
.getBox
;
11 dojo
.dnd
.V_TRIGGER_AUTOSCROLL
= 32;
12 dojo
.dnd
.H_TRIGGER_AUTOSCROLL
= 32;
14 dojo
.dnd
.V_AUTOSCROLL_VALUE
= 16;
15 dojo
.dnd
.H_AUTOSCROLL_VALUE
= 16;
17 dojo
.dnd
.autoScroll = function(e
){
19 // a handler for onmousemove event, which scrolls the window, if
24 // FIXME: needs more docs!
25 var v
= dojo
.window
.getBox(), dx
= 0, dy
= 0;
26 if(e
.clientX
< dojo
.dnd
.H_TRIGGER_AUTOSCROLL
){
27 dx
= -dojo
.dnd
.H_AUTOSCROLL_VALUE
;
28 }else if(e
.clientX
> v
.w
- dojo
.dnd
.H_TRIGGER_AUTOSCROLL
){
29 dx
= dojo
.dnd
.H_AUTOSCROLL_VALUE
;
31 if(e
.clientY
< dojo
.dnd
.V_TRIGGER_AUTOSCROLL
){
32 dy
= -dojo
.dnd
.V_AUTOSCROLL_VALUE
;
33 }else if(e
.clientY
> v
.h
- dojo
.dnd
.V_TRIGGER_AUTOSCROLL
){
34 dy
= dojo
.dnd
.V_AUTOSCROLL_VALUE
;
36 window
.scrollBy(dx
, dy
);
39 dojo
.dnd
._validNodes
= {"div": 1, "p": 1, "td": 1};
40 dojo
.dnd
._validOverflow
= {"auto": 1, "scroll": 1};
42 dojo
.dnd
.autoScrollNodes = function(e
){
44 // a handler for onmousemove event, which scrolls the first avaialble
45 // Dom element, it falls back to dojo.dnd.autoScroll()
49 // FIXME: needs more docs!
51 var b
, t
, w
, h
, rx
, ry
, dx
= 0, dy
= 0, oldLeft
, oldTop
;
53 for(var n
= e
.target
; n
;){
54 if(n
.nodeType
== 1 && (n
.tagName
.toLowerCase() in dojo
.dnd
._validNodes
)){
55 var s
= dojo
.getComputedStyle(n
),
56 overflow
= (s
.overflow
.toLowerCase() in dojo
.dnd
._validOverflow
),
57 overflowX
= (s
.overflowX
.toLowerCase() in dojo
.dnd
._validOverflow
),
58 overflowY
= (s
.overflowY
.toLowerCase() in dojo
.dnd
._validOverflow
);
59 if(overflow
|| overflowX
|| overflowY
){
60 b
= dojo
._getContentBox(n
, s
);
61 t
= dojo
.position(n
, true);
64 if(overflow
|| overflowX
){
65 w
= Math
.min(dojo
.dnd
.H_TRIGGER_AUTOSCROLL
, b
.w
/ 2);
67 if(dojo
.isWebKit
|| dojo
.isOpera
){
68 // FIXME: this code should not be here, it should be taken into account
69 // either by the event fixing code, or the dojo.position()
70 // FIXME: this code doesn't work on Opera 9.5 Beta
71 rx
+= dojo
.body().scrollLeft
;
74 if(rx
> 0 && rx
< b
.w
){
77 }else if(rx
> b
.w
- w
){
80 oldLeft
= n
.scrollLeft
;
81 n
.scrollLeft
= n
.scrollLeft
+ dx
;
85 if(overflow
|| overflowY
){
86 //console.log(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop);
87 h
= Math
.min(dojo
.dnd
.V_TRIGGER_AUTOSCROLL
, b
.h
/ 2);
89 if(dojo
.isWebKit
|| dojo
.isOpera
){
90 // FIXME: this code should not be here, it should be taken into account
91 // either by the event fixing code, or the dojo.position()
92 // FIXME: this code doesn't work on Opera 9.5 Beta
93 ry
+= dojo
.body().scrollTop
;
96 if(ry
> 0 && ry
< b
.h
){
99 }else if(ry
> b
.h
- h
){
102 oldTop
= n
.scrollTop
;
103 n
.scrollTop
= n
.scrollTop
+ dy
;
106 if(dx
|| dy
){ return; }
114 dojo
.dnd
.autoScroll(e
);