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

Last change on this file since 32307 was 32307, checked in by kjdon, 6 years ago

I have changed the way metadata is stored in java for berry basket items, to make it easier to customise for teh user without modifying java code. This means the metadata names will match what is in greenstone now, eg Title instead of the old title. updated names and tidied up code a bit, and handling extra custom metadata.

File size: 11.1 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/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 var title = berryItem.getAttribute('Title');
202 var root_title = berryItem.getAttribute('root_Title');
203 //var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
204
205 if (root_title != null){
206 title = root_title+":"+title;
207 }
208 title += " ("+berryItem.getAttribute('collection')+")";
209 if (title.length > 76){
210 title = title.substring(0,30)+" ... "+title.substr(title.length-45,45);
211 }
212
213 berryElement.setAttribute("class","berryitem");
214 berryElement.setAttribute("title",title);
215 berryElement.innerHTML = title;
216 height +=40;
217 }
218
219 oldHeight = berryBasket.style.height;
220 oldWidth = berryBasket.style.width;
221 oldBg = berryBasket.style.background;
222
223 berryBasket.style.background ='url("interfaces/default/images/kete2.png") 0 0 repeat';
224 berryBasket.style.cursor = "default";
225 berryBasket.className = "show";
226
227 //set url and show full view link
228 var fullView = YAHOO.util.Dom.get('berryFullViewLink');
229 //Find the collection in the cgi parameters
230 var url = window.location.href;
231 var colstart = url.indexOf("&c=");
232 var collectionName = "";
233 if (colstart != -1)
234 {
235 var colend = url.indexOf("&", (colstart + 1));
236 if (colend == -1)
237 {
238 colend = url.length - 1;
239 }
240 collectionName = url.substring(colstart + 3, colend);
241 }
242
243 fullView.setAttribute("href",gs.xsltParams.library_name + "?a=g&sa=berry&c=&s=DisplayList&rt=r&p.c=" + collectionName);
244 fullView.style.display='block';
245
246 //toggle expand/collapse links
247 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
248 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
249 if ( expandLink != null && collapseLink != null ) {
250 expandLink.style.display = 'none';
251 collapseLink.style.display = '';
252 }
253
254}
255
256function hideBasket() {
257//alert( arguments.callee );
258 var i = 0;
259 var berryBasket = YAHOO.util.Dom.get('berrybasket');
260 var basketHandle = YAHOO.util.Dom.get('baskethandle');
261 var berries = YAHOO.util.Dom.get('berries');
262 berryBasket.style.height = oldHeight;
263 berryBasket.style.width = oldWidth;
264 berryBasket.style.background = oldBg;
265 berryBasket.style.cursor = "pointer";
266 berryBasket.className = "hide";
267
268 while (berries.hasChildNodes()) {
269 berries.removeChild(berries.firstChild);
270 }
271
272 while (basketHandle.hasChildNodes()) {
273 basketHandle.removeChild(basketHandle.firstChild);
274 }
275
276 updateBerryImages();
277 //updateBerryCount();
278
279 //toggle expand/collapse links
280 var expandLink = YAHOO.util.Dom.get('berryBasketExpandLink');
281 var collapseLink = YAHOO.util.Dom.get('berryBasketCollapseLink');
282 if ( expandLink != null && collapseLink != null ) {
283 expandLink.style.display = '';
284 collapseLink.style.display = 'none';
285 }
286 // hide full view link
287 var fullView = YAHOO.util.Dom.get('berryFullViewLink');
288 fullView.style.display='none';
289}
290
291
292function addBerry(el){
293 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;
294
295 var addSuccess = function(o){
296 var result = o.responseXML;
297 var items = result.getElementsByTagName('item');
298
299 if (items.length < 0){
300
301 var item = items[0];
302 var berrybasket = YAHOO.util.Dom.get('berrybasket');
303 var berries = YAHOO.util.Dom.get('berries');
304 berryList[berryList.length]= item;
305 var parent =el.parentNode;
306 if (parent == null) return;
307 parent.removeChild(el);
308 var itemID = item.getAttribute('collection')+":"+item.getAttribute('name');
309 if (parent !=null && parent.id == "documentberries"){
310
311 var root = YAHOO.util.Dom.get(itemID+":root");
312 var section = YAHOO.util.Dom.get(itemID+":section");
313
314 if(root!=null && root.id.indexOf(itemID) !=-1){
315 parent.removeChild(root);
316 }
317
318 if(section!=null && section.id.indexOf(itemID) !=-1){
319 parent.removeChild(section);
320 }
321
322 }
323
324 if (!YAHOO.util.Dom.get('hideview') && berryList.length < 13){
325
326 while (berries.hasChildNodes()) {
327 berries.removeChild(berries.firstChild);
328 }
329
330 for (var i =0; i < berryList.length; i++ ){
331 var img = document.createElement('img');
332 img.src = 'interfaces/default/images/berry.png';
333 berries.appendChild(img);
334 }
335
336 } else {
337
338 if (YAHOO.util.Dom.get('hideview')){
339 var berryBasket = YAHOO.util.Dom.get('berrybasket');
340 var berries = YAHOO.util.Dom.get('berries');
341 var doclist = YAHOO.util.Dom.get('doclist');
342 var tid = el.id;
343 var berryItem;
344 var berryElement = document.createElement('li');
345
346 for (var i in berryList){
347 berryItem = berryList[i];
348 var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
349
350 if (id == tid){
351 var title = berryItem.getAttribute('Title');
352 var root_title = berryItem.getAttribute('root_Title');
353 if (root_title != null){
354
355 title = root_title+":"+title;
356 }
357 if (title.length > 50){
358 title = title.substring(0,20)+" ... "+title.substr(title.length-35,35);
359 }
360
361 berryElement.appendChild(document.createTextNode(title));
362 berryElement.setAttribute("class","berryitem");
363 doclist.appendChild(berryElement);
364 var heightStr = berryBasket.style.height+"";
365 var height =parseInt(heightStr.substring(0,heightStr.length-2)) +18;
366 berryBasket.style.height = height;
367 berries.style.height = height;
368 break;
369 }
370
371 }
372
373 }
374
375 }
376 }
377 }
378
379 var addFailure = function(o){
380 }
381
382 var addcallback = {
383 success:addSuccess,
384 failure:addFailure
385 }
386
387 YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
388}
389
390YAHOO.util.Event.addListener(window, 'load', checkout);
391//YAHOO.util.Event.addListener(window, 'click', basketUpdate);
392
393
394
Note: See TracBrowser for help on using the repository browser.