summaryrefslogtreecommitdiff
path: root/frontend/beta/js/YUI-extensions/dd/ScrollManager.js
Unidiff
Diffstat (limited to 'frontend/beta/js/YUI-extensions/dd/ScrollManager.js') (more/less context) (show whitespace changes)
-rw-r--r--frontend/beta/js/YUI-extensions/dd/ScrollManager.js171
1 files changed, 171 insertions, 0 deletions
diff --git a/frontend/beta/js/YUI-extensions/dd/ScrollManager.js b/frontend/beta/js/YUI-extensions/dd/ScrollManager.js
new file mode 100644
index 0000000..615aadf
--- a/dev/null
+++ b/frontend/beta/js/YUI-extensions/dd/ScrollManager.js
@@ -0,0 +1,171 @@
1// kill dependency issue
2if(YAHOO.util.DragDrop){
3/**
4 * @class YAHOO.ext.dd.ScrollManager
5 * Provides automatic scrolling of overflow regions in the page during drag operations.<br><br>
6 * <b>Note: This class uses "Point Mode" and is untested in "Intersect Mode".</b>
7 * @singleton
8 */
9YAHOO.ext.dd.ScrollManager = function(){
10 var ddm = YAHOO.util.DragDropMgr;
11 var els = {};
12 var dragEl = null;
13 var proc = {};
14
15 var onStop = function(e){
16 dragEl = null;
17 clearProc();
18 };
19
20 var triggerRefresh = function(){
21 if(ddm.dragCurrent){
22 ddm.refreshCache(ddm.dragCurrent.groups);
23 }
24 }
25
26 var doScroll = function(){
27 if(ddm.dragCurrent){
28 var dds = YAHOO.ext.dd.ScrollManager;
29 if(!dds.animate || !YAHOO.util.Scroll){
30 if(proc.el.scroll(proc.dir, dds.increment)){
31 triggerRefresh();
32 }
33 }else{
34 proc.el.scroll(proc.dir, dds.increment, true, dds.animDuration, triggerRefresh);
35 }
36 }
37 };
38
39 var clearProc = function(){
40 if(proc.id){
41 clearInterval(proc.id);
42 }
43 proc.id = 0;
44 proc.el = null;
45 proc.dir = '';
46 };
47
48 var startProc = function(el, dir){
49 clearProc();
50 proc.el = el;
51 proc.dir = dir;
52 proc.id = setInterval(doScroll, YAHOO.ext.dd.ScrollManager.frequency);
53 };
54
55 var onFire = function(e, isDrop){
56 if(isDrop || !ddm.dragCurrent){ return; }
57 var dds = YAHOO.ext.dd.ScrollManager;
58 if(!dragEl || dragEl != ddm.dragCurrent){
59 dragEl = ddm.dragCurrent;
60 // refresh regions on drag start
61 dds.refreshCache();
62 }
63
64 var xy = YAHOO.util.Event.getXY(e);
65 var pt = new YAHOO.util.Point(xy[0], xy[1]);
66 for(var id in els){
67 var el = els[id], r = el._region;
68 if(r.contains(pt) && el.isScrollable()){
69 if(r.bottom - pt.y <= dds.thresh){
70 if(proc.el != el){
71 startProc(el, 'down');
72 }
73 return;
74 }else if(r.right - pt.x <= dds.thresh){
75 if(proc.el != el){
76 startProc(el, 'left');
77 }
78 return;
79 }else if(pt.y - r.top <= dds.thresh){
80 if(proc.el != el){
81 startProc(el, 'up');
82 }
83 return;
84 }else if(pt.x - r.left <= dds.thresh){
85 if(proc.el != el){
86 startProc(el, 'right');
87 }
88 return;
89 }
90 }
91 }
92 clearProc();
93 };
94
95 ddm.fireEvents = ddm.fireEvents.createSequence(onFire, ddm);
96 ddm.stopDrag = ddm.stopDrag.createSequence(onStop, ddm);
97
98 return {
99 /**
100 * Registers new overflow element(s) to auto scroll
101 * @param {String/HTMLElement/Element/Array} el The id of or the element to be scrolled or an array of either
102 */
103 register : function(el){
104 if(el instanceof Array){
105 for(var i = 0, len = el.length; i < len; i++) {
106 this.register(el[i]);
107 }
108 }else{
109 el = getEl(el);
110 els[el.id] = el;
111 }
112 },
113
114 /**
115 * Unregisters overflow element(s) so they are no longer scrolled
116 * @param {String/HTMLElement/Element/Array} el The id of or the element to be removed or an array of either
117 */
118 unregister : function(el){
119 if(el instanceof Array){
120 for(var i = 0, len = el.length; i < len; i++) {
121 this.unregister(el[i]);
122 }
123 }else{
124 el = getEl(el);
125 delete els[el.id];
126 }
127 },
128
129 /**
130 * The number of pixels from the edge of a container the pointer needs to be to
131 * trigger scrolling (defaults to 25)
132 * @type Number
133 */
134 thresh : 25,
135
136 /**
137 * The number of pixels to scroll in each scroll increment (defaults to 50)
138 * @type Number
139 */
140 increment : 100,
141
142 /**
143 * The frequency of scrolls in milliseconds (defaults to 500)
144 * @type Number
145 */
146 frequency : 500,
147
148 /**
149 * True to animate the scroll (defaults to true)
150 * @type Boolean
151 */
152 animate: true,
153
154 /**
155 * The animation duration in seconds -
156 * MUST BE less than YAHOO.ext.dd.ScrollManager.frequency! (defaults to .4)
157 * @type Number
158 */
159 animDuration: .4,
160
161 /**
162 * Manually trigger a cache refresh.
163 */
164 refreshCache : function(){
165 for(var id in els){
166 els[id]._region = els[id].getRegion();
167 }
168 }
169 }
170}();
171}