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

Last change on this file since 33152 was 33152, checked in by davidb, 5 years ago

Additional method added, similar to the start checkout(), but counts the number of items in the berrybasket. Useful to decide if on a page (such as the About page) to show a link to the berry basket (because you have items in it)

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