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

Last change on this file since 33286 was 33286, checked in by kjdon, 5 years ago

standardising the basket names. berryBasket, favouriteBasket, documentBasket. variables etc will all follow this pattern. cgi params berrybasket, favouritebasket. etc

File size: 16.8 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
16var countBerries = function(callback) {
17
18 var request_type = "GET";
19 var url = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=ItemNum&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&c=";
20
21 var responseSuccess = function(o) {
22
23 var response = o.responseXML;
24 var size = response.getElementsByTagName('size').item(0).getAttribute('value');
25
26 var items = response.getElementsByTagName('item');
27
28 callback(items.length);
29 }
30
31 YAHOO.util.Connect.asyncRequest(request_type , url , {success: responseSuccess });
32}
33
34
35var countFavourites = function(callback) {
36 // identical AJAX call to countBerries()
37 return countBerries(callback);
38}
39
40
41// adds berries onto page
42var berryCheckout = function(){
43
44 if ( document.getElementById('berrybasket') == null ) return;
45
46 var request_type = "GET";
47 var url = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=ItemNum&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&c=";
48
49 var responseSuccess = function(o){
50
51 var response = o.responseXML;
52 var size = response.getElementsByTagName('size').item(0).getAttribute('value');
53
54 var items = response.getElementsByTagName('item');
55
56 berryList = new Array();
57 for (var i=0;i < items.length ; i++ ){
58
59 // remove berries images from if the berry basket has already contains this item
60 var itemID = items[i].getAttribute('collection')+":"+items[i].getAttribute('name');
61 var item = YAHOO.util.Dom.get(itemID);
62 if (item != null){
63 var parent = item.parentNode;
64 parent.removeChild(item);
65 if (parent !=null && parent.id == "documentberries"){
66 var root = YAHOO.util.Dom.get(itemID+":root");
67 var section = YAHOO.util.Dom.get(itemID+":section");
68
69 if(root!=null && root.id.indexOf(itemID) !=-1){
70 parent.removeChild(root);
71 }
72
73 if(section!=null && section.id.indexOf(itemID) !=-1){
74 parent.removeChild(section);
75 }
76 }
77 }
78 berryList[berryList.length] = items[i];
79 }
80
81 //add berryimage into the berry basket
82 updateBerryImages();
83
84 // set berries images visible
85 // they are set to be invisible to prevent flickering when first loaded (see berry.css)
86
87 var berries = document.getElementsByTagName('img');
88 var berrybasket = new YAHOO.util.DDTarget('berrybasket','basket');
89
90 for (var j=0; j < berries.length; j++){
91 var berry = berries[j];
92 var parent = berry.parentNode;
93 if (parent !=null && parent.id == "documentberries"){
94 var root = YAHOO.util.Dom.get(berry.id+":root");
95 var section = YAHOO.util.Dom.get(berry.id+":section");
96 if(root!=null && root.id.indexOf(berry.id) !=-1){
97 root.style.visibility ="visible" ;
98 }
99
100 if(section!=null && section.id.indexOf(berry.id) !=-1){
101 section.style.visibility ="visible" ;
102 }
103 }
104
105 if (berry.className && berry.className == 'pick'){
106 berry.style.visibility = "visible";
107 new ygDDPlayer(berry.id,'basket',berryList);
108 }
109 }
110 //updateBerryCount();
111 correctBerryExpandCollapseButtons();
112 }
113
114 var responseFailure = function(o){
115 console.error("Berry Basket GetItems AJAX call failed:" + url);
116 }
117
118 var callback = {
119 success: responseSuccess,
120 failure: responseFailure
121 }
122
123 //var date = new Date();
124 //url += "&rand=" + date.getTime();
125 YAHOO.util.Connect.asyncRequest(request_type , url , callback);
126}
127
128// display selected favourites (filled-in star icon) on page
129var favouritesCheckout = function(){
130
131 if ( document.getElementById('berrybasket') == null ) return;
132
133 var request_type = "GET";
134 var url = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=ItemNum&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&c=";
135
136 var responseSuccess = function(o){
137
138 var response = o.responseXML;
139 var size = response.getElementsByTagName('size').item(0).getAttribute('value');
140
141 var items = response.getElementsByTagName('item');
142
143 berryList = new Array();
144 for (var i=0;i < items.length ; i++ ){
145
146 var itemID = items[i].getAttribute('collection')+":"+items[i].getAttribute('name');
147 var item = YAHOO.util.Dom.get(itemID);
148
149 if (item != null){
150 item.src = gs.variables.selected_favourite_icon_url;
151 item.setAttribute("data-is-favourite","true");
152 }
153 berryList[berryList.length] = items[i];
154 }
155
156 // set favourite images visible
157 // they are set to be invisible to prevent flickering when first loaded (see berry.css)
158
159 var berries = document.getElementsByTagName('img');
160
161 for (var j=0; j < berries.length; j++){
162 var berry = berries[j];
163 var parent = berry.parentNode;
164 if (parent !=null && parent.id == "documentberries"){
165 var root = YAHOO.util.Dom.get(berry.id+":root");
166 var section = YAHOO.util.Dom.get(berry.id+":section");
167 if(root!=null && root.id.indexOf(berry.id) !=-1){
168 root.style.visibility ="visible" ;
169 }
170
171 if(section!=null && section.id.indexOf(berry.id) !=-1){
172 section.style.visibility ="visible" ;
173 }
174 }
175
176 if (berry.className && berry.className == 'pick'){
177 berry.style.visibility = "visible";
178 // new ygDDPlayer(berry.id,'basket',berryList); // **** can go
179 }
180 }
181 updateFavouritesCount();
182 }
183
184 var responseFailure = function(o){
185 console.error("Berry Basket GetItems AJAX call failed:" + url);
186 }
187
188 var callback = {
189 success: responseSuccess,
190 failure: responseFailure
191 }
192
193 //var date = new Date();
194 //url += "&rand=" + date.getTime();
195 YAHOO.util.Connect.asyncRequest(request_type , url , callback);
196}
197
198
199function updateBerryImages(){
200
201 var berries = YAHOO.util.Dom.get('berries');
202 if ( berries == null ) return;
203
204 while(berries.hasChildNodes())
205 {
206 berries.removeChild(berries.firstChild);
207 }
208
209 for (var i =0;i < berryList.length && i<12 ; i++ ){
210 var img = document.createElement('img');
211 img.src = berry_icon;
212 berries.appendChild(img);
213 }
214
215 //show/hide the help message depending if there are berries or not
216 var help_elem = YAHOO.util.Dom.get('berryHelpMsg');
217
218 if ( berryList.length == 0 ) {
219 help_elem.style.display='block';
220 } else {
221 help_elem.style.display='none';
222 }
223
224 //show the expand buttons
225 correctBerryExpandCollapseButtons();
226
227}
228
229function correctBerryExpandCollapseButtons() {
230 var bbecl = YAHOO.util.Dom.get('berryBasketExpandCollapseLinks');
231 if ( bbecl == null ) return;
232 if ( berryList.length > 0 ) {
233 YAHOO.util.Dom.get('berryBasketExpandCollapseLinks').style.display='';
234 } else {
235 YAHOO.util.Dom.get('berryBasketExpandCollapseLinks').style.display='none';
236 }
237}
238
239function updateBerryCount() {
240 var berries = YAHOO.util.Dom.get('berries');
241 var berryCountElement = YAHOO.util.Dom.get('berryBasketCount');
242 if ( berries == null || berryCountElement == null ) return;
243 if ( berryList.length == 0 ) {
244 berryCountElement.innerHTML = "empty";
245 } else {
246 berryCountElement.innerHTML = berryList.length;
247 }
248}
249
250function updateFavouritesCount() {
251 var favouritesCountElement = YAHOO.util.Dom.get('favouritesCountDisplay');
252 if ( favouritesCountElement == null ) return;
253 if ( berryList.length == 0 ) {
254 favouritesCountElement.innerHTML = "(0)";
255 } else {
256 favouritesCountElement.innerHTML = "(" + berryList.length + ")";
257 }
258}
259
260function basketUpdate(e) {
261
262 var target = e.target;
263 if ((target.id.toLowerCase() == 'berrybasket' || target.id.toLowerCase() == 'berries') && !show){
264 showBasket();
265 show = true;
266 }else{
267 if (target.id.toLowerCase() == 'hideview' && show){
268 hideBasket();
269 show = false;
270 }
271 }
272
273 if (target.className == 'pick'){
274 addBerry(target);
275 }
276}
277
278function showBasket() {
279
280 var berryBasket = YAHOO.util.Dom.get('berrybasket');
281 var basketHandle = YAHOO.util.Dom.get('baskethandle');
282 var berries = YAHOO.util.Dom.get('berries');
283 var width = 500;
284 var height = 40;
285 var i=0;
286
287 //remove berryImages in the berry basket
288 while (berries.hasChildNodes()) {
289 berries.removeChild(berries.firstChild);
290 }
291 while (basketHandle.hasChildNodes()) {
292 basketHandle.removeChild(basketHandle.firstChild);
293 }
294
295 var div = document.createElement('div');
296 berries.appendChild(div);
297 var list = document.createElement('ol');
298 div.appendChild(list);
299
300 list.id = 'doclist';
301
302 //put the berries in
303 for (i; i < berryList.length; i++){
304 var berryItem = berryList[i];
305 var berryElement = document.createElement('li');
306 list.appendChild(berryElement);
307
308 var title = berryTitle(berryItem);
309 berryElement.setAttribute("class","berryitem");
310 berryElement.setAttribute("title",title);
311 berryElement.innerHTML = title;
312 height +=40;
313 }
314
315 oldHeight = berryBasket.style.height;
316 oldWidth = berryBasket.style.width;
317 oldBg = berryBasket.style.background;
318
319 berryBasket.style.background ='url("interfaces/default/images/kete2.png") 0 0 repeat';
320 berryBasket.style.cursor = "default";
321 berryBasket.className = "show";
322
323 //set url and show full view link
324 var fullView = YAHOO.util.Dom.get('berryFullViewLink');
325 //Find the collection in the cgi parameters
326 var url = window.location.href;
327 var colstart = url.indexOf("&c=");
328 var collectionName = "";
329 if (colstart != -1)
330 {
331 var colend = url.indexOf("&", (colstart + 1));
332 if (colend == -1)
333 {
334 colend = url.length - 1;
335 }
336 collectionName = url.substring(colstart + 3, colend);
337 }
338
339 fullView.setAttribute("href",gs.xsltParams.library_name + "?a=g&sa=berry&c=&s=DisplayList&rt=r&p.c=" + collectionName);
340 fullView.style.display='block';
341
342 //toggle expand/collapse links
343 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
344 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
345 if ( expandLink != null && collapseLink != null ) {
346 expandLink.style.display = 'none';
347 collapseLink.style.display = '';
348 }
349
350}
351
352function berryTitle(berryItem) {
353
354 var title = berryItem.getAttribute('Title');
355 var root_title = berryItem.getAttribute('root_Title');
356 //var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
357
358 if (root_title != null){
359 title = root_title+":"+title;
360 }
361 title += " ("+berryItem.getAttribute('collection')+")";
362 if (title.length > 76){
363 title = title.substring(0,30)+" ... "+title.substr(title.length-45,45);
364 }
365
366 return title;
367}
368
369function hideBasket() {
370 var i = 0;
371 var berryBasket = YAHOO.util.Dom.get('berrybasket');
372 var basketHandle = YAHOO.util.Dom.get('baskethandle');
373 var berries = YAHOO.util.Dom.get('berries');
374 berryBasket.style.height = oldHeight;
375 berryBasket.style.width = oldWidth;
376 berryBasket.style.background = oldBg;
377 berryBasket.style.cursor = "pointer";
378 berryBasket.className = "hide";
379
380 while (berries.hasChildNodes()) {
381 berries.removeChild(berries.firstChild);
382 }
383
384 while (basketHandle.hasChildNodes()) {
385 basketHandle.removeChild(basketHandle.firstChild);
386 }
387
388 updateBerryImages();
389 //updateBerryCount();
390
391 //toggle expand/collapse links
392 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
393 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
394 if ( expandLink != null && collapseLink != null ) {
395 expandLink.style.display = '';
396 collapseLink.style.display = 'none';
397 }
398 // hide full view link
399 var fullView = YAHOO.util.Dom.get('berryFullViewLink');
400 fullView.style.display='none';
401}
402
403
404function addBerry(el){
405 var addurl = 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=" + el.id;
406
407 var addSuccess = function(o){
408 var result = o.responseXML;
409 var items = result.getElementsByTagName('item');
410
411 if (items.length < 0){
412
413 var item = items[0];
414 var berrybasket = YAHOO.util.Dom.get('berrybasket');
415 var berries = YAHOO.util.Dom.get('berries');
416 berryList[berryList.length]= item;
417 var parent =el.parentNode;
418 if (parent == null) return;
419 parent.removeChild(el);
420 var itemID = item.getAttribute('collection')+":"+item.getAttribute('name');
421 if (parent !=null && parent.id == "documentberries"){
422
423 var root = YAHOO.util.Dom.get(itemID+":root");
424 var section = YAHOO.util.Dom.get(itemID+":section");
425
426 if(root!=null && root.id.indexOf(itemID) !=-1){
427 parent.removeChild(root);
428 }
429
430 if(section!=null && section.id.indexOf(itemID) !=-1){
431 parent.removeChild(section);
432 }
433
434 }
435
436 if (!YAHOO.util.Dom.get('hideview') && berryList.length < 13){
437
438 while (berries.hasChildNodes()) {
439 berries.removeChild(berries.firstChild);
440 }
441
442 for (var i =0; i < berryList.length; i++ ){
443 var img = document.createElement('img');
444 img.src = berry_icon;
445 berries.appendChild(img);
446 }
447
448 } else {
449
450 if (YAHOO.util.Dom.get('hideview')){
451 var berryBasket = YAHOO.util.Dom.get('berrybasket');
452 var berries = YAHOO.util.Dom.get('berries');
453 var doclist = YAHOO.util.Dom.get('doclist');
454 var tid = el.id;
455 var berryItem;
456 var berryElement = document.createElement('li');
457
458 for (var i in berryList){
459 berryItem = berryList[i];
460 var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
461
462 if (id == tid){
463 var title = berryItem.getAttribute('Title');
464 var root_title = berryItem.getAttribute('root_Title');
465 if (root_title != null){
466
467 title = root_title+":"+title;
468 }
469 if (title.length > 50){
470 title = title.substring(0,20)+" ... "+title.substr(title.length-35,35);
471 }
472
473 berryElement.appendChild(document.createTextNode(title));
474 berryElement.setAttribute("class","berryitem");
475 doclist.appendChild(berryElement);
476 var heightStr = berryBasket.style.height+"";
477 var height =parseInt(heightStr.substring(0,heightStr.length-2)) +18;
478 berryBasket.style.height = height;
479 berries.style.height = height;
480 break;
481 }
482
483 }
484
485 }
486
487 }
488 }
489 }
490
491 var addFailure = function(o){
492 }
493
494 var addcallback = {
495 success:addSuccess,
496 failure:addFailure
497 }
498
499 YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
500}
501
502
503
504function addFavourite(el){
505 var addurl = 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=" + el.id;
506
507 var addSuccess = function(o){
508 var result = o.responseXML;
509 var items = result.getElementsByTagName('item');
510
511 if (items.length > 0){
512 // assumes that there is only 1 item to add
513 var item = items[0];
514 berryList[berryList.length]= item;
515
516 updateFavouritesCount();
517 }
518
519 }
520
521 var addFailure = function(o){
522 }
523
524 var addcallback = {
525 success:addSuccess,
526 failure:addFailure
527 }
528
529 YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
530}
531
532
533function deleteFavourite(el){
534 var delurl = 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=" + el.id;
535
536 var delSuccess = function(o){
537
538 for (var i in berryList) {
539 var berry = berryList[i];
540 console.log(berry);
541 var id = berry.getAttribute('collection')+":"+berry.getAttribute('name');
542
543 if (id == el.id){
544 berryList.splice(i,1);
545
546 break;
547 }
548
549 }
550 updateFavouritesCount();
551
552 }
553
554 var delFailure = function(o){
555 }
556
557 var delcallback = {
558 success:delSuccess,
559 failure:delFailure
560 }
561
562 YAHOO.util.Connect.asyncRequest(request_type , delurl , delcallback);
563}
564
565
566
567function toggleFavourite(el)
568{
569 var is_favourite = el.getAttribute("data-is-favourite");
570 if (is_favourite == "true") {
571 deleteFavourite(el);
572 el.src = gs.variables.unselected_favourite_icon_url;
573 el.setAttribute("data-is-favourite","false")
574 }
575 else {
576 addFavourite(el);
577 el.src = gs.variables.selected_favourite_icon_url;
578 el.setAttribute("data-is-favourite","true")
579 }
580}
581
582if(gs.cgiParams.berrybasket == "on")
583{
584 YAHOO.util.Event.addListener(window, 'load', berryCheckout);
585}
586else {
587 // assumption is that favouritebasket is on
588 YAHOO.util.Event.addListener(window, 'load', favouritesCheckout);
589}
590
591//YAHOO.util.Event.addListener(window, 'click', basketUpdate);
592
593
594
Note: See TracBrowser for help on using the repository browser.