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

Last change on this file since 29280 was 29280, checked in by kjdon, 10 years ago

made the text a bit longer as there was more room in my basket. Note each item is two lines. If the original intention was to have it on one line, then need to make it much shorter. Also display the collection the doc comes from.

File size: 11.2 KB
Line 
1//used to stored the current items in berrybasket, including collection name, document id and dodument title
2//in the format of collection:id:[title], it is updated when the page is loaded (reloaded) or the user adds
3// new items in the berry basket (see ygDDplayer.js). It is used to show the contents of the berry basket.
4
5var berryList = new Array();
6var show = false;
7
8// the default width and height of the berry basket
9var oldHeight=90;
10var oldWidth=140;
11var oldBg;
12
13var dd = new ygDDOnTop('berrybasket');
14dd.setHandleElId('baskethandle');
15
16
17var checkout = function(){
18
19 if ( document.getElementById('berrybasket') == null ) return;
20
21 var request_type = "GET";
22 var url = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=ItemNum&o=XML&hhf=[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]&c=";
23
24 var responseSuccess = function(o){
25
26 var response = o.responseXML;
27 var size = response.getElementsByTagName('size').item(0).getAttribute('value');
28
29 var items = response.getElementsByTagName('item');
30
31 berryList = new Array();
32 for (var i=0;i < items.length ; i++ ){
33
34 // remove berries images from if the berry basket has already contains this item
35 var itemID = items[i].getAttribute('collection')+":"+items[i].getAttribute('name');
36 var item = YAHOO.util.Dom.get(itemID);
37 if (item != null){
38 var parent = item.parentNode;
39 parent.removeChild(item);
40 if (parent !=null && parent.id == "documentberries"){
41 var root = YAHOO.util.Dom.get(itemID+":root");
42 var section = YAHOO.util.Dom.get(itemID+":section");
43
44 if(root!=null && root.id.indexOf(itemID) !=-1){
45 parent.removeChild(root);
46 }
47
48 if(section!=null && section.id.indexOf(itemID) !=-1){
49 parent.removeChild(section);
50 }
51 }
52 }
53 berryList[berryList.length] = items[i];
54 }
55
56 //add berryimage into the berry basket
57 updateBerryImages();
58
59 // set berries images visible
60 // they are set to be invisible to prevent flickering when first loaded (see berry.css)
61
62 var berries = document.getElementsByTagName('img');
63 var berrybasket = new YAHOO.util.DDTarget('berrybasket','basket');
64
65 for (var j=0; j < berries.length; j++){
66 var berry = berries[j];
67 var parent = berry.parentNode;
68 if (parent !=null && parent.id == "documentberries"){
69 var root = YAHOO.util.Dom.get(berry.id+":root");
70 var section = YAHOO.util.Dom.get(berry.id+":section");
71 if(root!=null && root.id.indexOf(berry.id) !=-1){
72 root.style.visibility ="visible" ;
73 }
74
75 if(section!=null && section.id.indexOf(berry.id) !=-1){
76 section.style.visibility ="visible" ;
77 }
78 }
79
80 if (berry.className && berry.className == 'pick'){
81 berry.style.visibility = "visible";
82 new ygDDPlayer(berry.id,'basket',berryList);
83 }
84 }
85 //updateBerryCount();
86 correctBerryExpandCollapseButtons();
87 }
88
89 var responseFailure = function(o){
90 alert("CHECKOUT FAILED");
91 }
92
93 var callback = {
94 success: responseSuccess,
95 failure: responseFailure
96 }
97
98 //var date = new Date();
99 //url += "&rand=" + date.getTime();
100 YAHOO.util.Connect.asyncRequest(request_type , url , callback);
101}
102
103function updateBerryImages(){
104
105 var berries = YAHOO.util.Dom.get('berries');
106 if ( berries == null ) return;
107
108 while(berries.hasChildNodes())
109 {
110 berries.removeChild(berries.firstChild);
111 }
112
113 for (var i =0;i < berryList.length && i<12 ; i++ ){
114 var img = document.createElement('img');
115 img.src = 'interfaces/default/images/berry.png';
116 berries.appendChild(img);
117 }
118
119 //show the help message if there are no berries
120 if ( berryList.length == 0 ) {
121 var berryHelpMsg = document.createElement('span');
122 berries.appendChild(berryHelpMsg);
123 berryHelpMsg.appendChild(document.createTextNode('Drag & drop berries here to add documents to your Berry Basket'));
124 berryHelpMsg.setAttribute('id','berryHelpMsg');
125 }
126
127 //show the expand buttons
128 correctBerryExpandCollapseButtons();
129
130}
131
132function correctBerryExpandCollapseButtons() {
133 var bbecl = YAHOO.util.Dom.get('berryBasketExpandCollapseLinks');
134 if ( bbecl == null ) return;
135 if ( berryList.length > 0 ) {
136 YAHOO.util.Dom.get('berryBasketExpandCollapseLinks').style.display='';
137 } else {
138 YAHOO.util.Dom.get('berryBasketExpandCollapseLinks').style.display='none';
139 }
140}
141
142function updateBerryCount() {
143 var berries = YAHOO.util.Dom.get('berries');
144 var berryCountElement = YAHOO.util.Dom.get('berryBasketCount');
145 if ( berries == null || berryCountElement == null ) return;
146 if ( berryList.length == 0 ) {
147 berryCountElement.innerHTML = "empty";
148 } else {
149 berryCountElement.innerHTML = berryList.length;
150 }
151}
152
153function basketUpdate(e) {
154//alert( arguments.callee );
155 var target = e.target;
156 if ((target.id.toLowerCase() == 'berrybasket' || target.id.toLowerCase() == 'berries') && !show){
157 showBasket();
158 show = true;
159 }else{
160 if (target.id.toLowerCase() == 'hideview' && show){
161 hideBasket();
162 show = false;
163 }
164 }
165
166 if (target.className == 'pick'){
167 addBerry(target);
168 }
169}
170
171function showBasket() {
172//alert( arguments.callee );
173 var berryBasket = YAHOO.util.Dom.get('berrybasket');
174 var basketHandle = YAHOO.util.Dom.get('baskethandle');
175 var berries = YAHOO.util.Dom.get('berries');
176 var width = 500;
177 var height = 40;
178 var i=0;
179
180 //remove berryImages in the berry basket
181 while (berries.hasChildNodes()) {
182 berries.removeChild(berries.firstChild);
183 }
184 while (basketHandle.hasChildNodes()) {
185 basketHandle.removeChild(basketHandle.firstChild);
186 }
187
188 var div = document.createElement('div');
189 berries.appendChild(div);
190 var list = document.createElement('ol');
191 div.appendChild(list);
192
193 list.id = 'doclist';
194
195 //put the berries in
196 for (i; i < berryList.length; i++){
197 var berryItem = berryList[i];
198 var berryElement = document.createElement('li');
199 list.appendChild(berryElement);
200 var title = berryItem.getAttribute('title');
201 var root_title = berryItem.getAttribute('root_title');
202 //var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
203
204 if (root_title != ""){
205 root_title +=":";
206 }
207
208 title = root_title+title;
209 title += " ("+berryItem.getAttribute('collection')+")";
210 if (title.length > 76){
211 title = title.substring(0,30)+" ... "+title.substr(title.length-45,45);
212 }
213
214 berryElement.setAttribute("class","berryitem");
215 berryElement.setAttribute("title",title);
216 berryElement.innerHTML = title;
217 height +=40;
218 }
219
220 oldHeight = berryBasket.style.height;
221 oldWidth = berryBasket.style.width;
222 oldBg = berryBasket.style.background;
223
224 berryBasket.style.background ='url("interfaces/default/images/kete2.png") 0 0 repeat';
225 berryBasket.style.cursor = "default";
226 berryBasket.className = "show";
227
228 //put the full view link in
229 var fullView = document.createElement('a');
230 berries.appendChild(fullView);
231
232 //Find the collection in the cgi parameters
233 var url = window.location.href;
234 var colstart = url.indexOf("&c=");
235 var collectionName = "";
236 if (colstart != -1)
237 {
238 var colend = url.indexOf("&", (colstart + 1));
239 if (colend == -1)
240 {
241 colend = url.length - 1;
242 }
243 collectionName = url.substring(colstart + 3, colend);
244 }
245
246 fullView.appendChild(document.createTextNode('Full View »'));
247 fullView.setAttribute("href",gs.xsltParams.library_name + "?a=g&sa=berry&c=&s=DisplayList&rt=r&p.c=" + collectionName);
248 fullView.setAttribute("id","berryFullViewLink");
249
250 //toggle expand/collapse links
251 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
252 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
253 if ( expandLink != null && collapseLink != null ) {
254 expandLink.style.display = 'none';
255 collapseLink.style.display = '';
256 }
257
258}
259
260function hideBasket() {
261//alert( arguments.callee );
262 var i = 0;
263 var berryBasket = YAHOO.util.Dom.get('berrybasket');
264 var basketHandle = YAHOO.util.Dom.get('baskethandle');
265 var berries = YAHOO.util.Dom.get('berries');
266 berryBasket.style.height = oldHeight;
267 berryBasket.style.width = oldWidth;
268 berryBasket.style.background = oldBg;
269 berryBasket.style.cursor = "pointer";
270 berryBasket.className = "hide";
271
272 while (berries.hasChildNodes()) {
273 berries.removeChild(berries.firstChild);
274 }
275
276 while (basketHandle.hasChildNodes()) {
277 basketHandle.removeChild(basketHandle.firstChild);
278 }
279
280 updateBerryImages();
281 //updateBerryCount();
282
283 //toggle expand/collapse links
284 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
285 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
286 if ( expandLink != null && collapseLink != null ) {
287 expandLink.style.display = '';
288 collapseLink.style.display = 'none';
289 }
290
291}
292
293
294function addBerry(el){
295 var addurl = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=AddItem&c=&s1.id=2&o=XML&hhf=[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]&s1.item=" + el.id;
296
297 var addSuccess = function(o){
298 var result = o.responseXML;
299 var items = result.getElementsByTagName('item');
300
301 if (items.length < 0){
302
303 var item = items[0];
304 var berrybasket = YAHOO.util.Dom.get('berrybasket');
305 var berries = YAHOO.util.Dom.get('berries');
306 berryList[berryList.length]= item;
307 var parent =el.parentNode;
308 if (parent == null) return;
309 parent.removeChild(el);
310 var itemID = item.getAttribute('collection')+":"+item.getAttribute('name');
311 if (parent !=null && parent.id == "documentberries"){
312
313 var root = YAHOO.util.Dom.get(itemID+":root");
314 var section = YAHOO.util.Dom.get(itemID+":section");
315
316 if(root!=null && root.id.indexOf(itemID) !=-1){
317 parent.removeChild(root);
318 }
319
320 if(section!=null && section.id.indexOf(itemID) !=-1){
321 parent.removeChild(section);
322 }
323
324 }
325
326 if (!YAHOO.util.Dom.get('hideview') && berryList.length < 13){
327
328 while (berries.hasChildNodes()) {
329 berries.removeChild(berries.firstChild);
330 }
331
332 for (var i =0; i < berryList.length; i++ ){
333 var img = document.createElement('img');
334 img.src = 'interfaces/default/images/berry.png';
335 berries.appendChild(img);
336 }
337
338 } else {
339
340 if (YAHOO.util.Dom.get('hideview')){
341 var berryBasket = YAHOO.util.Dom.get('berrybasket');
342 var berries = YAHOO.util.Dom.get('berries');
343 var doclist = YAHOO.util.Dom.get('doclist');
344 var tid = el.id;
345 var berryItem;
346 var berryElement = document.createElement('li');
347
348 for (var i in berryList){
349 berryItem = berryList[i];
350 var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
351
352 if (id == tid){
353 var title = berryItem.getAttribute('title');
354 var root_title = berryItem.getAttribute('root_title');
355 if (root_title != ""){
356 root_title +=":";
357 }
358
359 title = root_title+title;
360 if (title.length > 50){
361 title = title.substring(0,20)+" ... "+title.substr(title.length-35,35);
362 }
363
364 berryElement.appendChild(document.createTextNode(title));
365 berryElement.setAttribute("class","berryitem");
366 doclist.appendChild(berryElement);
367 var heightStr = berryBasket.style.height+"";
368 var height =parseInt(heightStr.substring(0,heightStr.length-2)) +18;
369 berryBasket.style.height = height;
370 berries.style.height = height;
371 break;
372 }
373
374 }
375
376 }
377
378 }
379 }
380 }
381
382 var addFailure = function(o){
383 }
384
385 var addcallback = {
386 success:addSuccess,
387 failure:addFailure
388 }
389
390 YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
391}
392
393YAHOO.util.Event.addListener(window, 'load', checkout);
394//YAHOO.util.Event.addListener(window, 'click', basketUpdate);
395
396
397
Note: See TracBrowser for help on using the repository browser.