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

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

moved the basket item display to its own function so it can easily be customised. also removed a debug thing which got left in by mistake

File size: 11.7 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="+makeURLComponentSafe("[{\"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/hide the help message depending if there are berries or not
120 var help_elem = YAHOO.util.Dom.get('berryHelpMsg');
121
122 if ( berryList.length == 0 ) {
123 help_elem.style.display='block';
124 } else {
125 help_elem.style.display='none';
126 }
127
128 //show the expand buttons
129 correctBerryExpandCollapseButtons();
130
131}
132
133function correctBerryExpandCollapseButtons() {
134 var bbecl = YAHOO.util.Dom.get('berryBasketExpandCollapseLinks');
135 if ( bbecl == null ) return;
136 if ( berryList.length > 0 ) {
137 YAHOO.util.Dom.get('berryBasketExpandCollapseLinks').style.display='';
138 } else {
139 YAHOO.util.Dom.get('berryBasketExpandCollapseLinks').style.display='none';
140 }
141}
142
143function updateBerryCount() {
144 var berries = YAHOO.util.Dom.get('berries');
145 var berryCountElement = YAHOO.util.Dom.get('berryBasketCount');
146 if ( berries == null || berryCountElement == null ) return;
147 if ( berryList.length == 0 ) {
148 berryCountElement.innerHTML = "empty";
149 } else {
150 berryCountElement.innerHTML = berryList.length;
151 }
152}
153
154function basketUpdate(e) {
155//alert( arguments.callee );
156 var target = e.target;
157 if ((target.id.toLowerCase() == 'berrybasket' || target.id.toLowerCase() == 'berries') && !show){
158 showBasket();
159 show = true;
160 }else{
161 if (target.id.toLowerCase() == 'hideview' && show){
162 hideBasket();
163 show = false;
164 }
165 }
166
167 if (target.className == 'pick'){
168 addBerry(target);
169 }
170}
171
172function showBasket() {
173//alert( arguments.callee );
174 var berryBasket = YAHOO.util.Dom.get('berrybasket');
175 var basketHandle = YAHOO.util.Dom.get('baskethandle');
176 var berries = YAHOO.util.Dom.get('berries');
177 var width = 500;
178 var height = 40;
179 var i=0;
180
181 //remove berryImages in the berry basket
182 while (berries.hasChildNodes()) {
183 berries.removeChild(berries.firstChild);
184 }
185 while (basketHandle.hasChildNodes()) {
186 basketHandle.removeChild(basketHandle.firstChild);
187 }
188
189 var div = document.createElement('div');
190 berries.appendChild(div);
191 var list = document.createElement('ol');
192 div.appendChild(list);
193
194 list.id = 'doclist';
195
196 //put the berries in
197 for (i; i < berryList.length; i++){
198 var berryItem = berryList[i];
199 var berryElement = document.createElement('li');
200 list.appendChild(berryElement);
201
202 var title = berryTitle(berryItem);
203 berryElement.setAttribute("class","berryitem");
204 berryElement.setAttribute("title",title);
205 berryElement.innerHTML = title;
206 height +=40;
207 }
208
209 oldHeight = berryBasket.style.height;
210 oldWidth = berryBasket.style.width;
211 oldBg = berryBasket.style.background;
212
213 berryBasket.style.background ='url("interfaces/default/images/kete2.png") 0 0 repeat';
214 berryBasket.style.cursor = "default";
215 berryBasket.className = "show";
216
217 //set url and show full view link
218 var fullView = YAHOO.util.Dom.get('berryFullViewLink');
219 //Find the collection in the cgi parameters
220 var url = window.location.href;
221 var colstart = url.indexOf("&c=");
222 var collectionName = "";
223 if (colstart != -1)
224 {
225 var colend = url.indexOf("&", (colstart + 1));
226 if (colend == -1)
227 {
228 colend = url.length - 1;
229 }
230 collectionName = url.substring(colstart + 3, colend);
231 }
232
233 fullView.setAttribute("href",gs.xsltParams.library_name + "?a=g&sa=berry&c=&s=DisplayList&rt=r&p.c=" + collectionName);
234 fullView.style.display='block';
235
236 //toggle expand/collapse links
237 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
238 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
239 if ( expandLink != null && collapseLink != null ) {
240 expandLink.style.display = 'none';
241 collapseLink.style.display = '';
242 }
243
244}
245
246function berryTitle(berryItem) {
247
248 var title = berryItem.getAttribute('Title');
249 var root_title = berryItem.getAttribute('root_Title');
250 //var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
251
252 if (root_title != null){
253 title = root_title+":"+title;
254 }
255 title += " ("+berryItem.getAttribute('collection')+")";
256 if (title.length > 76){
257 title = title.substring(0,30)+" ... "+title.substr(title.length-45,45);
258 }
259
260 return title;
261}
262
263function hideBasket() {
264//alert( arguments.callee );
265 var i = 0;
266 var berryBasket = YAHOO.util.Dom.get('berrybasket');
267 var basketHandle = YAHOO.util.Dom.get('baskethandle');
268 var berries = YAHOO.util.Dom.get('berries');
269 berryBasket.style.height = oldHeight;
270 berryBasket.style.width = oldWidth;
271 berryBasket.style.background = oldBg;
272 berryBasket.style.cursor = "pointer";
273 berryBasket.className = "hide";
274
275 while (berries.hasChildNodes()) {
276 berries.removeChild(berries.firstChild);
277 }
278
279 while (basketHandle.hasChildNodes()) {
280 basketHandle.removeChild(basketHandle.firstChild);
281 }
282
283 updateBerryImages();
284 //updateBerryCount();
285
286 //toggle expand/collapse links
287 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
288 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
289 if ( expandLink != null && collapseLink != null ) {
290 expandLink.style.display = '';
291 collapseLink.style.display = 'none';
292 }
293 // hide full view link
294 var fullView = YAHOO.util.Dom.get('berryFullViewLink');
295 fullView.style.display='none';
296}
297
298
299function addBerry(el){
300 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;
301
302 var addSuccess = function(o){
303 var result = o.responseXML;
304 var items = result.getElementsByTagName('item');
305
306 if (items.length < 0){
307
308 var item = items[0];
309 var berrybasket = YAHOO.util.Dom.get('berrybasket');
310 var berries = YAHOO.util.Dom.get('berries');
311 berryList[berryList.length]= item;
312 var parent =el.parentNode;
313 if (parent == null) return;
314 parent.removeChild(el);
315 var itemID = item.getAttribute('collection')+":"+item.getAttribute('name');
316 if (parent !=null && parent.id == "documentberries"){
317
318 var root = YAHOO.util.Dom.get(itemID+":root");
319 var section = YAHOO.util.Dom.get(itemID+":section");
320
321 if(root!=null && root.id.indexOf(itemID) !=-1){
322 parent.removeChild(root);
323 }
324
325 if(section!=null && section.id.indexOf(itemID) !=-1){
326 parent.removeChild(section);
327 }
328
329 }
330
331 if (!YAHOO.util.Dom.get('hideview') && berryList.length < 13){
332
333 while (berries.hasChildNodes()) {
334 berries.removeChild(berries.firstChild);
335 }
336
337 for (var i =0; i < berryList.length; i++ ){
338 var img = document.createElement('img');
339 img.src = 'interfaces/default/images/berry.png';
340 berries.appendChild(img);
341 }
342
343 } else {
344
345 if (YAHOO.util.Dom.get('hideview')){
346 var berryBasket = YAHOO.util.Dom.get('berrybasket');
347 var berries = YAHOO.util.Dom.get('berries');
348 var doclist = YAHOO.util.Dom.get('doclist');
349 var tid = el.id;
350 var berryItem;
351 var berryElement = document.createElement('li');
352
353 for (var i in berryList){
354 berryItem = berryList[i];
355 var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
356
357 if (id == tid){
358 var title = berryItem.getAttribute('Title');
359 var root_title = berryItem.getAttribute('root_Title');
360 if (root_title != null){
361
362 title = root_title+":"+title;
363 }
364 if (title.length > 50){
365 title = title.substring(0,20)+" ... "+title.substr(title.length-35,35);
366 }
367
368 berryElement.appendChild(document.createTextNode(title));
369 berryElement.setAttribute("class","berryitem");
370 doclist.appendChild(berryElement);
371 var heightStr = berryBasket.style.height+"";
372 var height =parseInt(heightStr.substring(0,heightStr.length-2)) +18;
373 berryBasket.style.height = height;
374 berries.style.height = height;
375 break;
376 }
377
378 }
379
380 }
381
382 }
383 }
384 }
385
386 var addFailure = function(o){
387 }
388
389 var addcallback = {
390 success:addSuccess,
391 failure:addFailure
392 }
393
394 YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
395}
396
397YAHOO.util.Event.addListener(window, 'load', checkout);
398//YAHOO.util.Event.addListener(window, 'click', basketUpdate);
399
400
401
Note: See TracBrowser for help on using the repository browser.