source: main/trunk/greenstone3/web/interfaces/default/transform/berrytools.xsl@ 23779

Last change on this file since 23779 was 23779, checked in by davidb, 13 years ago

Two new interfaces - 'default' now tries to use the client's XSLT capabilities of the web browser, falling back to the 'traditional' interface if this fails.

  • Property svn:keywords set to Author Date Id Revision
File size: 16.7 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<xsl:stylesheet version="1.0"
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns:java="http://xml.apache.org/xslt/java"
5 extension-element-prefixes="java"
6 exclude-result-prefixes="java">
7
8 <xsl:param name="berryBaskets"/>
9
10 <xsl:template name="berrybasket">
11 <div id="berrybasket" class="hide" >
12 <div id="baskethandle"><span></span></div>
13 <div id ="berries"><span></span></div>
14 </div>
15 </xsl:template>
16
17 <xsl:template name="documentBerryBasket">
18 <xsl:param name="collName"/>
19 <xsl:param name="selectedNode"/>
20 <xsl:param name="rootNode"/>
21 <xsl:param name="docType" />
22 <div id="berrybasket" class="hide" >
23 <div id="baskethandle"><span></span></div>
24 <div id ="berries" ><span></span></div>
25 </div>
26 <xsl:choose>
27 <xsl:when test="$selectedNode = $rootNode">
28 <p id="documentberries">
29 <img class='pick' id="{$collName}:{$rootNode}" src="interfaces/default/images/berry3.png" alt="in basket" width="15" height="15" border="0"/><span id="{$collName}:{$rootNode}:root" class="documentberry">the whole document</span></p>
30 </xsl:when>
31 <xsl:otherwise>
32 <p id="documentberries">
33 <img class='pick' id="{$collName}:{$rootNode}" src="interfaces/default/images/berry3.png" alt="in basket" width="15" height="15" border="0"/><span id="{$collName}:{$rootNode}:root" class="documentberry">the whole document</span><img class='pick' id="{$collName}:{$selectedNode}" src="interfaces/default/images/berry3.png" alt="in basket" width="15" height="15" border="0"/><span id="{$collName}:{$selectedNode}:section" class="documentberry">the current section</span></p>
34 </xsl:otherwise>
35 </xsl:choose>
36 </xsl:template>
37
38
39 <xsl:template name="loadLibrary">
40 <script type="text/javascript" src="interfaces/default/js/YAHOO.js"><xsl:text disable-output-escaping="yes"> </xsl:text></script>
41 <script type="text/javascript" src="interfaces/default/js/event.js"><xsl:text disable-output-escaping="yes"> </xsl:text></script>
42 <script type="text/javascript" src="interfaces/default/js/connection.js"><xsl:text disable-output-escaping="yes"> </xsl:text></script>
43 <script type="text/javascript" src="interfaces/default/js/dom.js"><xsl:text disable-output-escaping="yes"> </xsl:text></script>
44 <script type="text/javascript" src="interfaces/default/js/dragdrop.js"><xsl:text disable-output-escaping="yes"> </xsl:text></script>
45 <script type="text/javascript" src="interfaces/default/js/ygDDPlayer.js"><xsl:text disable-output-escaping="yes"> </xsl:text></script>
46 <script type="text/javascript" src="interfaces/default/js/ygDDOnTop.js"><xsl:text disable-output-escaping="yes"> </xsl:text></script>
47
48 </xsl:template>
49
50 <xsl:template name="js-library">
51 <xsl:call-template name="loadLibrary" />
52 <xsl:call-template name="basketCheckout" />
53 </xsl:template>
54
55 <!-- should be called for a documentNode -->
56 <xsl:template name="addBerry">
57 <xsl:param name="collName"/>
58 <td valign="top"><img class='pick' id="{$collName}:{@nodeID}" src="interfaces/default/images/berry3.png" alt="in basket" width="15" height="15" border="0"/></td>
59 </xsl:template>
60
61 <xsl:template name="basketCheckout">
62 <script type="text/javascript">
63 <xsl:text disable-output-escaping="yes">
64 //used to stored the current items in berrybasket, including collection name, document id and dodument title
65 //in the format of collection:id:[title], it is updated when the page is loaded (reloaded) or the user adds
66 // new items in the berry basket (see ygDDplayer.js). It is used to show the contents of the berry basket.
67 var berryList = new Array();
68 var show = false;
69
70 // the default width and height of the berry basket
71 var oldHeight=90;
72 var oldWidth=140;
73 var oldBg;
74
75 var dd = new ygDDOnTop('berrybasket');
76 dd.setHandleElId('baskethandle');
77
78 var checkout = function(){
79 var request_type = "GET";
80 var url = "?a=pr&amp;amp;rt=r&amp;amp;ro=1&amp;amp;s=ItemNum&amp;amp;o=XML&amp;amp;c=";
81
82 var responseSuccess = function(o){
83 var response = o.responseXML;
84 var size = response.getElementsByTagName('size').item(0).getAttribute('value');
85
86 var items = response.getElementsByTagName('item');
87
88 for (var i=0;i &lt; items.length ; i++ ){
89
90 // remove berries images from if the berry basket has already contains this item
91
92 var itemID = items[i].getAttribute('collection')+":"+items[i].getAttribute('name');
93 var item = YAHOO.util.Dom.get(itemID);
94 if (item != null){
95 var parent = item.parentNode;
96 parent.removeChild(item);
97
98 if (parent !=null &amp;amp;&amp;amp; parent.id == "documentberries"){
99 var root = YAHOO.util.Dom.get(itemID+":root");
100 var section = YAHOO.util.Dom.get(itemID+":section");
101 if(root!=null &amp;amp;&amp;amp; root.id.indexOf(itemID) !=-1){
102 parent.removeChild(root);
103 }
104
105 if(section!=null &amp;amp;&amp;amp; section.id.indexOf(itemID) !=-1){
106 parent.removeChild(section);
107 }
108
109
110 }
111 }
112
113 berryList[berryList.length] = items[i];
114 }
115
116 //add berryimage into the berry basket
117 updateBerryImages();
118
119 // set berries images visible
120 // they are set to be invisible to prevent flickering when first loaded (see berry.css)
121
122 var berries =document.getElementsByTagName('img');
123 var berrybasket = new YAHOO.util.DDTarget('berrybasket','basket');
124
125 for (var j=0; j &lt; berries.length; j++){
126
127 var berry = berries[j];
128 var parent = berry.parentNode;
129
130
131 if (parent !=null &amp;amp;&amp;amp; parent.id == "documentberries"){
132 var root = YAHOO.util.Dom.get(berry.id+":root");
133 var section = YAHOO.util.Dom.get(berry.id+":section");
134 if(root!=null &amp;amp;&amp;amp; root.id.indexOf(berry.id) !=-1){
135 root.style.visibility ="visible" ;
136 }
137
138 if(section!=null &amp;amp;&amp;amp; section.id.indexOf(berry.id) !=-1){
139 section.style.visibility ="visible" ;
140 }
141
142
143 }
144
145 if (berry.className &amp;amp;&amp;amp; berry.className == 'pick')
146 {
147 berry.style.visibility = "visible";
148 new ygDDPlayer(berry.id,'basket',berryList);
149 }
150
151 }
152
153 }
154
155 var responseFailure = function(o){
156
157 }
158
159 var callback = {
160 success: responseSuccess,
161 failure: responseFailure
162 }
163
164 YAHOO.util.Connect.asyncRequest(request_type , url , callback);
165 }
166
167 function updateBerryImages(){
168
169 for (var i =0;i &lt; berryList.length &amp;amp;&amp;amp; i &lt;12 ; i++ ){
170 var berries = YAHOO.util.Dom.get('berries');
171 var img = document.createElement('img');
172 img.src = 'interfaces/default/images/berry3.png';
173 img.height = 15;
174 img.width = 15;
175 img.border = 0;
176 berries.appendChild(img);
177 }
178
179 }
180
181 function basketUpdate(e) {
182 var target = e.target;
183
184 if ((target.id.toLowerCase() == 'berrybasket' || target.id.toLowerCase() == 'berries') &amp;amp;&amp;amp; !show){
185 showBasket();
186 show = true;
187 }
188 else{
189 if (target.id.toLowerCase() == 'hideview' &amp;amp;&amp;amp; show){
190 hideBasket();
191 show = false;
192 }
193 }
194
195 if (target.className == 'pick'){
196 addBerry(target);
197 }
198
199 }
200
201 function showBasket() {
202 var berryBasket = YAHOO.util.Dom.get('berrybasket');
203 var basketHandle = YAHOO.util.Dom.get('baskethandle');
204 var berries = YAHOO.util.Dom.get('berries');
205 var div = document.createElement('div');
206 var list = document.createElement('ol');
207 var width = 500;
208 var height = 40;
209 var i=0;
210
211 list.id = 'doclist';
212
213 //remove berryImages in the berry basket
214 while (berries.hasChildNodes()) {
215 berries.removeChild(berries.firstChild);
216 }
217
218 while (basketHandle.hasChildNodes()) {
219 basketHandle.removeChild(basketHandle.firstChild);
220 }
221
222 for (i in berryList){
223 var berryItem = berryList[i];
224 var berryElement = document.createElement('li');
225 var title = berryItem.getAttribute('title');
226 var root_title = berryItem.getAttribute('root_title');
227 var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
228
229 if (root_title != ""){
230 root_title +=":";
231 }
232
233 title = root_title+title;
234 if (title.length > 50){
235 title = title.substring(0,20)+" ... "+title.substr(title.length-35,35);
236 }
237
238 berryElement.appendChild(document.createTextNode(title));
239 berryElement.setAttribute("class","berryitem");
240 list.appendChild(berryElement);
241 height +=18;
242 }
243
244 oldHeight = berryBasket.style.height;
245 oldWidth = berryBasket.style.width;
246 oldBg = berryBasket.style.background;
247 berryBasket.style.height = height;
248 berryBasket.style.width = width;
249 berryBasket.style.background ='url("interfaces/default/images/kete2.png") 0 0 repeat';
250 berryBasket.style.cursor = "default";
251 berryBasket.className = "show";
252 div.appendChild(list);
253 berries.appendChild(div);
254 berries.style.height = height - 40;
255
256 var links = document.createElement('div');
257 var hideView = document.createElement('a');
258 var fullView = document.createElement('a');
259 links.appendChild(hideView);
260 links.appendChild(fullView);
261 basketHandle.appendChild(links);
262 hideView.appendChild(document.createTextNode("Hide"));
263 fullView.appendChild(document.createTextNode("Full View"));
264 hideView.setAttribute("id","hideview");
265 fullView.setAttribute("href","?a=g&amp;amp;sa=berry&amp;amp;c=&amp;amp;s=DisplayList&amp;amp;rt=r");
266 fullView.setAttribute("class","fullview");
267
268 }
269
270 function hideBasket() {
271 var i = 0;
272 var berryBasket = YAHOO.util.Dom.get('berrybasket');
273 var basketHandle = YAHOO.util.Dom.get('baskethandle');
274 var berries = YAHOO.util.Dom.get('berries');
275 berryBasket.style.height = oldHeight;
276 berryBasket.style.width = oldWidth;
277 berryBasket.style.background = oldBg;
278 berryBasket.style.cursor = "pointer";
279 berryBasket.className = "hide";
280
281 while (berries.hasChildNodes()) {
282 berries.removeChild(berries.firstChild);
283 }
284
285 while (basketHandle.hasChildNodes()) {
286 basketHandle.removeChild(basketHandle.firstChild);
287 }
288
289 updateBerryImages();
290 }
291
292
293 function addBerry(el){
294 var addurl = "?a=pr&amp;amp;rt=r&amp;amp;ro=1&amp;amp;s=AddItem&amp;amp;c=&amp;amp;s1.id=2&amp;amp;o=XML&amp;amp;s1.item=" + el.id;
295 var addSuccess = function(o){
296 var result = o.responseXML;
297 var items = result.getElementsByTagName('item');
298 if (items.length &gt; 0){
299 var item = items[0];
300 var berrybasket = YAHOO.util.Dom.get('berrybasket');
301 var berries = YAHOO.util.Dom.get('berries');
302 berryList[berryList.length]= item;
303 var parent =el.parentNode;
304 if (parent == null) return;
305 parent.removeChild(el);
306
307 var itemID = item.getAttribute('collection')+":"+item.getAttribute('name');
308 if (parent !=null &amp;amp;&amp;amp; parent.id == "documentberries"){
309 var root = YAHOO.util.Dom.get(itemID+":root");
310 var section = YAHOO.util.Dom.get(itemID+":section");
311 if(root!=null &amp;amp;&amp;amp; root.id.indexOf(itemID) !=-1){
312 parent.removeChild(root);
313 }
314
315 if(section!=null &amp;amp;&amp;amp; section.id.indexOf(itemID) !=-1){
316 parent.removeChild(section);
317 }
318 }
319
320 if (!YAHOO.util.Dom.get('hideview') &amp;amp;&amp;amp; berryList.length &lt; 13){
321 while (berries.hasChildNodes()) {
322 berries.removeChild(berries.firstChild);
323 }
324
325 for (var i =0; i &lt; berryList.length; i++ ){
326 var img = document.createElement('img');
327 img.src = 'interfaces/default/images/berry3.png';
328 img.height = 15;
329 img.width = 15;
330 img.border = 0;
331 berries.appendChild(img);
332 }
333
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 for (var i in berryList){
346 berryItem = berryList[i];
347 var id = berryItem.getAttribute('collection')+":"+berryItem.getAttribute('name');
348 if (id == tid){
349 var title = berryItem.getAttribute('title');
350 var root_title = berryItem.getAttribute('root_title');
351 if (root_title != ""){
352 root_title +=":";
353 }
354
355 title = root_title+title;
356 if (title.length > 50){
357 title = title.substring(0,20)+" ... "+title.substr(title.length-35,35);
358 }
359
360 berryElement.appendChild(document.createTextNode(title));
361 berryElement.setAttribute("class","berryitem");
362 doclist.appendChild(berryElement);
363 var heightStr = berryBasket.style.height+"";
364 var height =parseInt(heightStr.substring(0,heightStr.length-2)) +18;
365 berryBasket.style.height = height;
366 berries.style.height = height;
367 break;
368 }
369 }
370
371 }
372
373 }
374 }
375
376 }
377
378 var addFailure = function(o){ }
379
380 var addcallback = {
381 success:addSuccess,
382 failure:addFailure
383 }
384
385 YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
386
387 }
388
389
390
391 YAHOO.util.Event.addListener(window,'load', checkout);
392 YAHOO.util.Event.addListener(window,'click', basketUpdate);
393 </xsl:text>
394 </script>
395 </xsl:template>
396
397 <xsl:template name="berryStyleSheet">
398 <link rel="stylesheet" href="interfaces/default/style/berry.css" type="text/css"/>
399 </xsl:template>
400
401</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.