]> git.wh0rd.org - tt-rss.git/blob - lib/dojo/dnd/autoscroll.js
add dijit/dojo stuff; initial ui mockup
[tt-rss.git] / lib / dojo / dnd / autoscroll.js
1 /*
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
5 */
6
7
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();
13 if(dojo.isMozilla){
14 return {w:dd.clientWidth,h:w.innerHeight};
15 }else{
16 if(!dojo.isOpera&&w.innerWidth){
17 return {w:w.innerWidth,h:w.innerHeight};
18 }else{
19 if(!dojo.isOpera&&dd&&dd.clientWidth){
20 return {w:dd.clientWidth,h:dd.clientHeight};
21 }else{
22 if(b.clientWidth){
23 return {w:b.clientWidth,h:b.clientHeight};
24 }
25 }
26 }
27 }
28 return null;
29 };
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;
38 }else{
39 if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){
40 dx=dojo.dnd.H_AUTOSCROLL_VALUE;
41 }
42 }
43 if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){
44 dy=-dojo.dnd.V_AUTOSCROLL_VALUE;
45 }else{
46 if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){
47 dy=dojo.dnd.V_AUTOSCROLL_VALUE;
48 }
49 }
50 window.scrollBy(dx,dy);
51 };
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;
63 }
64 if(rx>0&&rx<b.w){
65 if(rx<w){
66 dx=-w;
67 }else{
68 if(rx>b.w-w){
69 dx=w;
70 }
71 }
72 }
73 if(ry>0&&ry<b.h){
74 if(ry<h){
75 dy=-h;
76 }else{
77 if(ry>b.h-h){
78 dy=h;
79 }
80 }
81 }
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){
86 return;
87 }
88 }
89 }
90 try{
91 n=n.parentNode;
92 }
93 catch(x){
94 n=null;
95 }
96 }
97 dojo.dnd.autoScroll(e);
98 };
99 }