Lines 60-240
function isNum(v,maybenull) {
Link Here
|
60 |
//======================================================================= |
60 |
//======================================================================= |
61 |
// Functions for drag-and-drop functionality |
61 |
// Functions for drag-and-drop functionality |
62 |
|
62 |
|
|
|
63 |
if( typeof(YAHOO) === "object"){ |
64 |
(function() { |
63 |
|
65 |
|
64 |
(function() { |
66 |
var Dom = YAHOO.util.Dom; |
65 |
|
67 |
var Event = YAHOO.util.Event; |
66 |
var Dom = YAHOO.util.Dom; |
68 |
var DDM = YAHOO.util.DragDropMgr; |
67 |
var Event = YAHOO.util.Event; |
69 |
|
68 |
var DDM = YAHOO.util.DragDropMgr; |
70 |
DDApp = { |
69 |
|
71 |
init: function() { |
70 |
DDApp = { |
72 |
var uls = document.getElementsByTagName('ul'); |
71 |
init: function() { |
73 |
var i,j; |
72 |
var uls = document.getElementsByTagName('ul'); |
74 |
var ddtarget; |
73 |
var i,j; |
75 |
for (i=0; i<uls.length;i=i+1) { |
74 |
var ddtarget; |
76 |
if (uls[i].className == "draglist" || uls[i].className == "draglist_alt") { |
75 |
for (i=0; i<uls.length;i=i+1) { |
77 |
ddtarget = YAHOO.util.DragDropMgr.getDDById(uls[i].id); |
76 |
if (uls[i].className == "draglist" || uls[i].className == "draglist_alt") { |
78 |
// The yahoo drag and drop is written (broken or not) in such a way, that if an element is subscribed as a target multiple times, |
77 |
ddtarget = YAHOO.util.DragDropMgr.getDDById(uls[i].id); |
79 |
// it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group |
78 |
// The yahoo drag and drop is written (broken or not) in such a way, that if an element is subscribed as a target multiple times, |
|
|
79 |
// it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group |
80 |
if( ! ddtarget ) { |
81 |
new YAHOO.util.DDTarget(uls[i].id); |
82 |
} |
83 |
var children = uls[i].getElementsByTagName('li'); |
84 |
for( j=0; j<children.length; j=j+1) { |
85 |
// The yahoo drag and drop is (broken or not) in such a way, that if an element is subscribed as a target multiple times, |
86 |
// it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group |
87 |
ddtarget = YAHOO.util.DragDropMgr.getDDById(children[j].id); |
88 |
if( ! ddtarget ) { |
80 |
if( ! ddtarget ) { |
89 |
new DDList(children[j].id); |
81 |
new YAHOO.util.DDTarget(uls[i].id); |
|
|
82 |
} |
83 |
var children = uls[i].getElementsByTagName('li'); |
84 |
for( j=0; j<children.length; j=j+1) { |
85 |
// The yahoo drag and drop is (broken or not) in such a way, that if an element is subscribed as a target multiple times, |
86 |
// it has to be unlinked multiple times, so we need to test whether it is allready a target, otherwise we'll have a problem when closing the group |
87 |
ddtarget = YAHOO.util.DragDropMgr.getDDById(children[j].id); |
88 |
if( ! ddtarget ) { |
89 |
new DDList(children[j].id); |
90 |
} |
90 |
} |
91 |
} |
91 |
} |
92 |
} |
92 |
} |
93 |
} |
93 |
} |
94 |
} |
94 |
} |
95 |
}; |
95 |
}; |
|
|
96 |
|
96 |
|
97 |
|
97 |
|
98 |
// drag and drop implementation |
98 |
// drag and drop implementation |
99 |
|
99 |
|
100 |
DDList = function(id, sGroup, config) { |
100 |
DDList = function(id, sGroup, config) { |
101 |
|
101 |
|
102 |
DDList.superclass.constructor.call(this, id, sGroup, config); |
102 |
DDList.superclass.constructor.call(this, id, sGroup, config); |
103 |
|
103 |
|
104 |
this.logger = this.logger || YAHOO; |
104 |
this.logger = this.logger || YAHOO; |
105 |
var el = this.getDragEl(); |
105 |
var el = this.getDragEl(); |
106 |
Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent |
106 |
Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent |
107 |
|
107 |
|
108 |
this.goingUp = false; |
108 |
this.goingUp = false; |
109 |
this.lastY = 0; |
109 |
this.lastY = 0; |
110 |
}; |
110 |
}; |
111 |
|
111 |
|
112 |
YAHOO.extend(DDList, YAHOO.util.DDProxy, { |
112 |
YAHOO.extend(DDList, YAHOO.util.DDProxy, { |
113 |
|
113 |
|
114 |
startDrag: function(x, y) { |
114 |
startDrag: function(x, y) { |
115 |
this.logger.log(this.id + " startDrag"); |
115 |
this.logger.log(this.id + " startDrag"); |
116 |
|
116 |
|
117 |
// make the proxy look like the source element |
117 |
// make the proxy look like the source element |
118 |
var dragEl = this.getDragEl(); |
118 |
var dragEl = this.getDragEl(); |
119 |
var clickEl = this.getEl(); |
119 |
var clickEl = this.getEl(); |
120 |
Dom.setStyle(clickEl, "visibility", "hidden"); |
120 |
Dom.setStyle(clickEl, "visibility", "hidden"); |
121 |
|
121 |
|
122 |
dragEl.innerHTML = clickEl.innerHTML; |
122 |
dragEl.innerHTML = clickEl.innerHTML; |
123 |
|
123 |
|
124 |
Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color")); |
124 |
Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color")); |
125 |
Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor")); |
125 |
Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor")); |
126 |
Dom.setStyle(dragEl, "border", "2px solid gray"); |
126 |
Dom.setStyle(dragEl, "border", "2px solid gray"); |
127 |
}, |
127 |
}, |
128 |
|
128 |
|
129 |
endDrag: function(e) { |
129 |
endDrag: function(e) { |
130 |
|
130 |
|
131 |
var srcEl = this.getEl(); |
131 |
var srcEl = this.getEl(); |
132 |
var proxy = this.getDragEl(); |
132 |
var proxy = this.getDragEl(); |
133 |
|
133 |
|
134 |
// Show the proxy element and animate it to the src element's location |
134 |
// Show the proxy element and animate it to the src element's location |
135 |
Dom.setStyle(proxy, "visibility", ""); |
135 |
Dom.setStyle(proxy, "visibility", ""); |
136 |
var a = new YAHOO.util.Motion( |
136 |
var a = new YAHOO.util.Motion( |
137 |
proxy, { |
137 |
proxy, { |
138 |
points: { |
138 |
points: { |
139 |
to: Dom.getXY(srcEl) |
139 |
to: Dom.getXY(srcEl) |
140 |
} |
140 |
} |
141 |
}, |
141 |
}, |
142 |
0.2, |
142 |
0.2, |
143 |
YAHOO.util.Easing.easeOut |
143 |
YAHOO.util.Easing.easeOut |
144 |
) |
144 |
) |
145 |
var proxyid = proxy.id; |
145 |
var proxyid = proxy.id; |
146 |
var thisid = this.id; |
146 |
var thisid = this.id; |
147 |
|
147 |
|
148 |
// Hide the proxy and show the source element when finished with the animation |
148 |
// Hide the proxy and show the source element when finished with the animation |
149 |
a.onComplete.subscribe(function() { |
|
|
150 |
Dom.setStyle(proxyid, "visibility", "hidden"); |
151 |
Dom.setStyle(thisid, "visibility", ""); |
152 |
}); |
153 |
a.animate(); |
154 |
// if we are in basketgrouping page, when finished moving, edit the basket's info to reflect new status |
155 |
if(typeof(basketgroups) != 'undefined') { |
156 |
a.onComplete.subscribe(function() { |
149 |
a.onComplete.subscribe(function() { |
157 |
var reg = new RegExp("[-]+", "g"); |
150 |
Dom.setStyle(proxyid, "visibility", "hidden"); |
158 |
// add a changed input to each moved basket, so we know which baskets to modify, |
151 |
Dom.setStyle(thisid, "visibility", ""); |
159 |
// and so we don't need to modify each and every basket and basketgroup each time the page is loaded |
152 |
}); |
160 |
// FIXME: we shouldn't use getElementsByTagName, it's not explicit enough :-( |
153 |
a.animate(); |
161 |
srcEl.getElementsByTagName('input')[1].value = "1"; |
154 |
// if we are in basketgrouping page, when finished moving, edit the basket's info to reflect new status |
162 |
if ( srcEl.parentNode.parentNode.className == "workarea" ) { |
155 |
if(typeof(basketgroups) != 'undefined') { |
163 |
var dstbgroupid = srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-2].name.split(reg)[1]; |
156 |
a.onComplete.subscribe(function() { |
164 |
srcEl.className="grouped"; |
157 |
var reg = new RegExp("[-]+", "g"); |
165 |
srcEl.getElementsByTagName('input')[0].value = dstbgroupid; |
158 |
// add a changed input to each moved basket, so we know which baskets to modify, |
166 |
//FIXME: again, we shouldn't be using getElementsByTagName!! |
159 |
// and so we don't need to modify each and every basket and basketgroup each time the page is loaded |
167 |
srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-1].value = 1; |
160 |
// FIXME: we shouldn't use getElementsByTagName, it's not explicit enough :-( |
168 |
} |
161 |
srcEl.getElementsByTagName('input')[1].value = "1"; |
169 |
else if ( srcEl.parentNode.parentNode.className == "workarea_alt" ){ |
162 |
if ( srcEl.parentNode.parentNode.className == "workarea" ) { |
170 |
srcEl.className="ungrouped"; |
163 |
var dstbgroupid = srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-2].name.split(reg)[1]; |
171 |
srcEl.getElementsByTagName('input')[0].value = "0"; |
164 |
srcEl.className="grouped"; |
172 |
} |
165 |
srcEl.getElementsByTagName('input')[0].value = dstbgroupid; |
173 |
}); |
166 |
//FIXME: again, we shouldn't be using getElementsByTagName!! |
174 |
} |
167 |
srcEl.parentNode.parentNode.getElementsByTagName('input')[srcEl.parentNode.parentNode.getElementsByTagName('input').length-1].value = 1; |
175 |
}, |
168 |
} |
|
|
169 |
else if ( srcEl.parentNode.parentNode.className == "workarea_alt" ){ |
170 |
srcEl.className="ungrouped"; |
171 |
srcEl.getElementsByTagName('input')[0].value = "0"; |
172 |
} |
173 |
}); |
174 |
} |
175 |
}, |
176 |
|
176 |
|
177 |
onDragDrop: function(e, id) { |
177 |
onDragDrop: function(e, id) { |
178 |
|
178 |
|
179 |
// If there is one drop interaction, the li was dropped either on the list, |
179 |
// If there is one drop interaction, the li was dropped either on the list, |
180 |
// or it was dropped on the current location of the source element. |
180 |
// or it was dropped on the current location of the source element. |
181 |
if (DDM.interactionInfo.drop.length === 1) { |
181 |
if (DDM.interactionInfo.drop.length === 1) { |
182 |
|
182 |
|
183 |
// The position of the cursor at the time of the drop (YAHOO.util.Point) |
183 |
// The position of the cursor at the time of the drop (YAHOO.util.Point) |
184 |
var pt = DDM.interactionInfo.point; |
184 |
var pt = DDM.interactionInfo.point; |
185 |
|
185 |
|
186 |
// The region occupied by the source element at the time of the drop |
186 |
// The region occupied by the source element at the time of the drop |
187 |
var region = DDM.interactionInfo.sourceRegion; |
187 |
var region = DDM.interactionInfo.sourceRegion; |
188 |
|
188 |
|
189 |
// Check to see if we are over the source element's location. We will |
189 |
// Check to see if we are over the source element's location. We will |
190 |
// append to the bottom of the list once we are sure it was a drop in |
190 |
// append to the bottom of the list once we are sure it was a drop in |
191 |
// the negative space (the area of the list without any list items) |
191 |
// the negative space (the area of the list without any list items) |
192 |
if (!region.intersect(pt)) { |
192 |
if (!region.intersect(pt)) { |
193 |
var destEl = Dom.get(id); |
193 |
var destEl = Dom.get(id); |
194 |
var destDD = DDM.getDDById(id); |
194 |
var destDD = DDM.getDDById(id); |
195 |
destEl.appendChild(this.getEl()); |
195 |
destEl.appendChild(this.getEl()); |
196 |
destDD.isEmpty = false; |
196 |
destDD.isEmpty = false; |
197 |
DDM.refreshCache(); |
197 |
DDM.refreshCache(); |
|
|
198 |
} |
198 |
} |
199 |
} |
199 |
} |
200 |
}, |
200 |
}, |
|
|
201 |
|
201 |
|
202 |
onDrag: function(e) { |
202 |
onDrag: function(e) { |
203 |
|
203 |
|
204 |
// Keep track of the direction of the drag for use during onDragOver |
204 |
// Keep track of the direction of the drag for use during onDragOver |
205 |
var y = Event.getPageY(e); |
205 |
var y = Event.getPageY(e); |
206 |
|
206 |
|
207 |
if (y < this.lastY) { |
207 |
if (y < this.lastY) { |
208 |
this.goingUp = true; |
208 |
this.goingUp = true; |
209 |
} else if (y > this.lastY) { |
209 |
} else if (y > this.lastY) { |
210 |
this.goingUp = false; |
210 |
this.goingUp = false; |
211 |
} |
211 |
} |
212 |
this.lastY = y; |
212 |
this.lastY = y; |
213 |
}, |
213 |
}, |
214 |
|
214 |
|
215 |
onDragOver: function(e, id) { |
215 |
onDragOver: function(e, id) { |
216 |
|
216 |
|
217 |
var srcEl = this.getEl(); |
217 |
var srcEl = this.getEl(); |
218 |
var destEl = Dom.get(id); |
218 |
var destEl = Dom.get(id); |
219 |
|
219 |
|
220 |
// We are only concerned with list items, we ignore the dragover |
220 |
// We are only concerned with list items, we ignore the dragover |
221 |
// notifications for the list. |
221 |
// notifications for the list. |
222 |
if (destEl.nodeName.toLowerCase() == "li") { |
222 |
if (destEl.nodeName.toLowerCase() == "li") { |
223 |
var orig_p = srcEl.parentNode; |
223 |
var orig_p = srcEl.parentNode; |
224 |
var p = destEl.parentNode; |
224 |
var p = destEl.parentNode; |
225 |
|
225 |
|
226 |
if (this.goingUp) { |
226 |
if (this.goingUp) { |
227 |
p.insertBefore(srcEl, destEl); // insert above |
227 |
p.insertBefore(srcEl, destEl); // insert above |
228 |
} else { |
228 |
} else { |
229 |
p.insertBefore(srcEl, destEl.nextSibling); // insert below |
229 |
p.insertBefore(srcEl, destEl.nextSibling); // insert below |
230 |
} |
230 |
} |
231 |
|
231 |
|
232 |
DDM.refreshCache(); |
232 |
DDM.refreshCache(); |
|
|
233 |
} |
233 |
} |
234 |
} |
234 |
} |
235 |
}); |
235 |
}); |
236 |
})(); |
236 |
})(); |
237 |
} |
237 |
|
|
|
238 |
|
238 |
|
239 |
|
239 |
|
240 |
|
240 |
|
241 |
- |
|
|