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

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

tomcat 8 strict on unsafe chars. Use the new makeURLComponentSafe for berry baskets and document baskets etc to escape the hhf param ( no idea what this param does..)

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="+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 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="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&poo=1&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.