source: main/trunk/greenstone3/web/interfaces/traditional/transform/berrytools.xsl@ 23784

Last change on this file since 23784 was 23784, 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.

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