source: main/trunk/greenstone3/web/interfaces/default/js/berrybasket/ygDDPlayer.js@ 33103

Last change on this file since 33103 was 33103, checked in by ak19, 5 years ago

Fixing 2 issues with the berry basket to do with the existing delete: 1. The wrong id was retrieved (content instead of berryBasketContent), so that until the page was reloaded, it wouldn't tell you that the berry basket had become empty on delete of last item. 2. Code checked whether a PARENT list item of the deleted strawberry children had any children left, instead of checking whether the grandparent (ANCESTOR) ordered list item had any children left.

  • Property svn:executable set to *
File size: 9.1 KB
Line 
1/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */
2
3function ygDDStack(id, sGroup) {
4 if (id) {
5 this.init(id, sGroup);
6 this.initFrame();
7 }
8}
9
10ygDDStack.prototype = new YAHOO.util.DDTarget();
11
12ygDDPlayer.TYPE = "ygDDPlayer";
13
14/**
15* @class a YAHOO.util.DDFramed implementation. During the drag over event, the
16* dragged element is inserted before the dragged-over element.
17*
18* @extends YAHOO.util.DDProxy
19* @constructor
20* @param {String} id the id of the linked element
21* @param {String} sGroup the group of related DragDrop objects
22*/
23function ygDDPlayer(id, sGroup, bl) {
24 this.initPlayer(id, sGroup);
25 this.berryList = bl;
26
27}
28
29ygDDPlayer.prototype = new YAHOO.util.DDProxy();
30
31ygDDPlayer.prototype.berryList = new Array();
32
33ygDDPlayer.prototype.initPlayer = function(id, sGroup) {
34 if (!id) { return; }
35
36 this.init(id, sGroup);
37 this.initFrame();
38 var s = this.getDragEl().style;
39 s.borderColor = "transparent";
40 // s.backgroundColor = "#cccccc";
41 s.opacity = 0.76;
42 s.filter = "alpha(opacity=76)";
43
44 // specify that this is not currently a drop target
45 this.isTarget = false;
46
47 this.originalStyles = [];
48
49 this.type = ygDDPlayer.TYPE;
50 this.slot = null;
51 this.startPos = YAHOO.util.Dom.getXY( this.getEl() );
52
53}
54
55ygDDPlayer.prototype.startDrag = function(x, y) {
56
57 var dragEl = this.getDragEl();
58 var clickEl = this.getEl();
59
60 dragEl.innerHTML = clickEl.innerHTML;
61 //dragEl.className = clickEl.className;
62 //dragEl.style.color = clickEl.style.color;
63 //dragEl.style.backgroundColor = clickEl.style.backgroundColor;
64 //dragEl.style.visibility = clickEl.style.visibility;
65
66 while (dragEl.hasChildNodes()) {
67 dragEl.removeChild(dragEl.firstChild);
68 }
69
70 var img = document.createElement('img');
71 img.src = 'interfaces/default/images/berry.png';
72 dragEl.appendChild(img);
73
74 var added = true;
75
76 var s = clickEl.style;
77 s.opacity = .1;
78 s.filter = "alpha(opacity=10)";
79
80 var targets = YAHOO.util.DDM.getRelated(this, true);
81
82 for (var i=0; i<targets.length; i++) {
83
84 var targetEl = this.getTargetDomRef(targets[i]);
85
86 if (!this.originalStyles[targetEl.id]) {
87 this.originalStyles[targetEl.id] = targetEl.className;
88 }
89
90 targetEl.className = "target";
91 }
92 correctBerryExpandCollapseButtons();
93};
94
95ygDDPlayer.prototype.getTargetDomRef = function(oDD) {
96 if (oDD.player) {
97 return oDD.player.getEl();
98 } else {
99 return oDD.getEl();
100 }
101};
102
103ygDDPlayer.prototype.endDrag = function(e) {
104 // reset the linked element styles
105 var s = this.getEl().style;
106 s.opacity = 1;
107 s.filter = "alpha(opacity=100)";
108
109 this.resetTargets();
110};
111
112ygDDPlayer.prototype.resetTargets = function() {
113
114 // reset the target styles
115 var targets = YAHOO.util.DDM.getRelated(this, true);
116 for (var i=0; i<targets.length; i++) {
117 var targetEl = this.getTargetDomRef(targets[i]);
118 var oldStyle = this.originalStyles[targetEl.id];
119 if (oldStyle) {
120 targetEl.className = oldStyle;
121 }
122 }
123};
124
125var request_type = "GET";
126var addurlPath = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=AddItem&c=&s1.id=2&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&s1.item=";
127var delurlPath = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=DeleteItems&c=&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&s1.items=";
128var postdata = null;
129
130ygDDPlayer.prototype.onDragDrop = function(e, id) {
131 // get the drag and drop object that was targeted
132 var oDD;
133 var player = this;
134
135 if ("string" == typeof id) {
136 oDD = YAHOO.util.DDM.getDDById(id);
137 } else {
138 oDD = YAHOO.util.DDM.getBestMatch(id);
139 }
140
141
142 var el = this.getEl();
143
144 // check if the slot has a player in it already
145 if (oDD.player) {
146 // check if the dragged player was already in a slot
147 if (this.slot) {
148 // check to see if the player that is already in the
149 // slot can go to the slot the dragged player is in
150 // YAHOO.util.DDM.isLegalTarget is a new method
151 if ( YAHOO.util.DDM.isLegalTarget(oDD.player, this.slot) ) {
152 YAHOO.util.DDM.moveToEl(oDD.player.getEl(), el);
153 this.slot.player = oDD.player;
154 oDD.player.slot = this.slot;
155 } else {
156 YAHOO.util.Dom.setXY(oDD.player.getEl(), oDD.player.startPos);
157 this.slot.player = null;
158 oDD.player.slot = null
159 }
160 } else {
161 // the player in the slot will be moved to the dragged
162 // players start position
163 //oDD.player.slot = null;
164 //YAHOO.util.DDM.moveToEl(oDD.player.getEl(), el);
165 }
166 }else {
167 // Move the player into the emply slot
168 // I may be moving off a slot so I need to clear the player ref
169 if (this.slot) {
170 this.slot.player = null;
171 }
172 }
173
174 var addurl = addurlPath + el.id;
175 var addSuccess = function(o){
176 var text = o.responseText;
177 var result = o.responseXML;
178 var items = result.getElementsByTagName('item');
179 if (items.length > 0){
180 var item = items[0];
181 var berrybasket = YAHOO.util.Dom.get('berrybasket');
182 var berries = YAHOO.util.Dom.get('berries');
183 player.berryList[player.berryList.length]= item;
184
185 var itemID = item.getAttribute('collection')+":"+item.getAttribute('name');
186 var parent =el.parentNode;
187 parent.removeChild(el);
188
189 if (parent !=null && parent.id == "documentberries"){
190 var root = YAHOO.util.Dom.get(itemID+":root");
191 var section = YAHOO.util.Dom.get(itemID+":section");
192 if(root!=null && root.id.indexOf(itemID) !=-1){
193 parent.removeChild(root);
194 }
195
196 if(section!=null && section.id.indexOf(itemID) !=-1){
197 parent.removeChild(section);
198 }
199 }
200
201
202 if (!YAHOO.util.Dom.get('hideview') && player.berryList.length <13){
203
204 while (berries.hasChildNodes()) {
205 berries.removeChild(berries.firstChild);
206 }
207
208 for (var i =0; i < player.berryList.length; i++ ){
209 var img = document.createElement('img');
210 img.src = 'interfaces/default/images/berry.png';
211 berries.appendChild(img);
212 }
213
214 correctBerryExpandCollapseButtons();
215
216 }
217 else{
218
219
220 if (YAHOO.util.Dom.get('hideview')){
221
222 var berryBasket = YAHOO.util.Dom.get('berrybasket');
223 var berries = YAHOO.util.Dom.get('berries');
224 var doclist = YAHOO.util.Dom.get('doclist');
225 var tid = el.id;
226 var berryItem;
227 var berryElement = document.createElement('li');
228 for (var i in player.berryList){
229 berryItem = player.berryList[i];
230 var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
231 if (id == tid){
232 var title = berryItem.getAttribute('title');
233 var root_title = berryItem.getAttribute('root_title');
234 if (root_title != ""){
235 root_title +=":";
236 }
237
238 title = root_title+title;
239 if (title.length > 50){
240 title = title.substring(0,20)+" ... "+title.substr(title.length-35,35);
241 }
242
243 berryElement.appendChild(document.createTextNode(title));
244 berryElement.setAttribute("class","berryitem");
245 doclist.appendChild(berryElement);
246 var heightStr = berryBasket.style.height+"";
247 var height =parseInt(heightStr.substring(0,heightStr.length-2)) +18;
248 berryBasket.style.height = height;
249 berries.style.height = height;
250 break;
251 }
252 }
253 }
254
255 }
256 }
257
258 //Makes sure all the berries on the page are up to date
259 checkout();
260 }
261
262 var addFailure = function(o){ alert("Adding berry failed" + o); }
263
264
265 var addcallback = {
266 success:addSuccess,
267 failure:addFailure,
268 argument:player
269 }
270
271
272 var delurl = delurlPath + el.id;
273 var delSuccess = function(o){
274 var result = o.responseXML;
275 var parent =el.parentNode;
276 var ancestor = parent.parentNode;
277 if (parent == null) return;
278
279 ancestor.removeChild(parent);
280
281 for (var i in player.berryList){
282 var berry = player.berryList[i];
283
284 var id = berry['collection']+":"+berry['name'];
285
286 if (id == el.id){
287 player.berryList.splice(i,1);
288
289 break;
290 }
291
292 }
293
294 if (!ancestor.hasChildNodes()){ // OL list of berries //if (!parent.hasChildNodes()){ // LI item per berry
295 var content = YAHOO.util.Dom.get('berryBasketContent');
296 while (content.hasChildNodes()) {
297 content.removeChild(content.firstChild);
298 }
299 content.appendChild(document.createTextNode('Your berry basket is empty.'));
300 }
301 var trashbin = YAHOO.util.Dom.get('trashbin');
302 if ( trashbin !=null){
303 trashbin.style.background = 'url("interfaces/default/images/trash-full.png") 0 0 no-repeat';
304 }
305 }
306
307
308 var delFailure = function(o){ alert("Deletion failed" + o);}
309
310
311 var delcallback = {
312 success:delSuccess,
313 failure:delFailure,
314 argument:player
315 }
316
317 if (id == 'berrybasket'){
318 YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
319 } else {
320 if (id == 'trashbin'){
321 YAHOO.util.Connect.asyncRequest(request_type , delurl , delcallback);
322 }
323 }
324
325 this.resetTargets();
326 this.slot = oDD;
327 this.slot.player = this;
328
329};
330
331ygDDPlayer.prototype.swap = function(el1, el2) {
332 var dom = YAHOO.util.Dom;
333 var pos1 = dom.getXY(el1);
334 var pos2 = dom.getXY(el2);
335 dom.setXY(el1, pos2);
336 dom.setXY(el2, pos1);
337};
338
339ygDDPlayer.prototype.onDragOver = function(e, id) {};
340
341ygDDPlayer.prototype.onDrag = function(e, id) {};
342
343
344
345
346
Note: See TracBrowser for help on using the repository browser.