source: MILK/trunk/milk_server/milk_server/templates/meta.kid @ 6003

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/MILK/trunk/milk_server/milk_server/templates/meta.kid@6003
Revision 6003, 23.6 KB checked in by sdonegan, 11 years ago (diff)

Slight adjustment to button titles - again

Line 
1<!-- This is a bunch of named functions for using when displaying metadata -->
2<?python
3
4from milk_server.lib.Utilities import urlListEncode
5import string
6
7?>
8
9<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#">
10
11<!-- Parameter list class, used in StubB and DIF -->
12   
13    <div py:def="ParameterList(params)" class="ParameterList">
14        <table py:if="params!={}" cellspacing="0" cellpadding="3" border="0" width="100%"><tbody>
15            <tr><td class="linehead"><span class="heading0"> Parameters</span></td></tr>
16            <span py:for="item in params">
17                <tr><td class="rowhead">$item</td></tr>
18                <?python
19                #should make sure keyword with spaces are not split inappropriately
20                keywords='; '.join([k.replace(' ','&nbsp;') for k in params[item]])
21                ?>
22                <tr py:if="params[item]!=[]"><td>${XML(keywords)}</td></tr>
23            </span>
24        </tbody></table>
25    </div>
26   
27    <div py:def="Distribution(dlist)">
28        <table py:if="dlist!=[]" cellspacing="0" cellpadding="3" width=" 100%" border="0">
29        <tr><td class="linehead" colspan="4"><span class="headingO">Distribution</span></td></tr>
30        <tr><th> Format </th> <th> Size </th> <th> Media </th> <th> Fees </th> </tr>
31        <tr py:for="d in dlist">
32            <td>${d['Distribution_Format']}</td>
33            <td>${d['Distribution_Size']}</td>
34            <td>${d['Distribution_Media']}</td>
35            <td>${d['Fees']}</td>
36        </tr>
37        </table>
38    </div>
39   
40    <div py:def="Services()" id="ServiceList">
41        <table cellspacing="0" cellpadding="3" width=" 100%" border="0"><tbody>
42       
43           
44            <tr><td class="linehead" colspan="3"><span class="headingO">Links and Services</span></td></tr>
45            <tr py:for="s in c.doc.services">
46                <?python
47                t=s.contentType
48               
49                isWMC = False
50                atomFudge=False
51               
52                if 'ATOM' in s.url:
53                    atomFudge=True
54               
55                if 'WEB MAP CONTEXT' in t:
56                        isWMC = True
57                if t=='':
58                        t='R'
59                if 'GET DATA' in t:
60                        t='GET DATA'
61                                       
62                try:
63                    iconD={'NDG_BROWSE':g.icons_NDGBrwse,'GET DATA':g.icons_A,
64                        'VIEW EXTENDED METADATA':g.icons_B,
65                        'DISCOVERY':g.icons_D,
66                        'R':g.icons_R,'WMS':g.wmsIcon,'WCS':g.wcsIcon,'WFS':g.wfsIcon,'VIS':g.visIcon}[t]
67                     
68                except:
69                    icon=g.icons_R
70                                       
71                if atomFudge:                       
72                    icon=g.icons_NDGBrwse
73                ?>
74               
75                <td width="20%" py:if="isWMC">
76                 $g.server
77                        <span py:replace="linkimage(g.server + '/viewItems?ENDPOINT=' + s.url,icon,s.description)" py:strip="True"/>
78                </td>
79                <td width="20%" py:if="not isWMC">
80                        <span py:replace="linkimage(s.url,icon,s.description)" py:strip="True"/>
81                </td>
82                <td>${s.description}</td>
83               
84                <!-- Add in the actual URL of service so user can cut and paste
85                <td>
86                ${s.url}
87                </td> -->
88               
89               
90            </tr>
91           
92            <tr py:if="c.doc.ndgObject is not None">
93                <td width="20%"><span py:replace="linkimage(c.doc.ndgObject.xmlURL,g.icons_xml,'[XML]')"/></td>
94                <td>Downloadable XML version of this record
95                    <span py:if="c.doc.ndgObject.gettable==1">
96                    (Original <span py:replace="linkimage(c.doc.ndgObject.xmlURL+'&amp;outputSchema=original',g.icons_xml,'[XML]')"/>)
97                    </span>
98                </td>
99            </tr>
100            <tr py:if="c.doc.ndgObject is not None">
101                <td width="20%"><span py:replace="linkimage(c.doc.ndgObject.printableURL,g.icons_prn,'[HTML]')"/></td>
102                <td>Viewable XML version of this record
103                    <span py:if="c.doc.ndgObject.gettable==1">
104                    (Original <span py:replace="linkimage(c.doc.ndgObject.printableURL+'&amp;outputSchema=original',g.icons_prn,'[HTML]')"/>)
105                    </span>
106                </td>
107            </tr>
108            <tr py:if="c.doc.ndgObject.gettable==1">
109                <td></td>
110                <td>(Original records are the raw material harvested from data providers)</td>
111             </tr>
112           
113            <tr><td><br/></td></tr>
114           
115            <!-- Add in separate sub-sections for WMS, WCS etc etc -->
116            <tr py:if="c.doc.wmsServiceCounter > 0"><td class="linehead" colspan="3" id="wmsServices"><span class="headingO">Web Map Services (WMS)</span></td></tr>           
117            <tr py:for="s in c.doc.OGCservices">
118                <?python
119                t=s.contentType
120               
121                isService = False
122               
123                #check for wms, wfs, wcs, vis in contentTypes - according to types on vocab dif accepted terms list
124               
125                if 'WEB MAP SERVICE' in t:
126                    icon = g.wmsIcon
127                    isService = True
128                else:
129                    icon = g.icons_R
130                                   
131                ?>
132                <td width="20%" py:if="isService">                 
133                    <span py:replace="linkimage(g.server + '/viewItems?ENDPOINT=' + s.url,icon,s.description)" py:strip="True"/>
134                </td>               
135                <td py:if="isService">${s.description}</td>
136               
137                <!-- Add in the actual URL of service so user can cut and paste -->
138                <td py:if="isService">
139                    ${s.url}
140                </td>               
141            </tr>
142           <tr><td><br/></td></tr>
143            <tr py:if="c.doc.wcsServiceCounter > 0"><td class="linehead" colspan="3" id="wcsServices"><span class="headingO">Web Coverage Services (WCS)</span></td></tr>
144            <tr py:for="s in c.doc.OGCservices">
145                <?python
146                t=s.contentType
147               
148                isService = False
149                               
150                if 'WEB COVERAGE SERVICE' in t:
151                    icon = g.wcsIcon
152                    isService = True
153                else:
154                    icon = g.icons_R
155                                   
156                ?>
157                <td width="20%" py:if="isService">                 
158                    <span py:replace="linkimage(g.server + '/viewItems?ENDPOINT=' + s.url,icon,s.description)" py:strip="True"/>
159                </td>               
160                <td py:if="isService">${s.description}</td>
161               
162                <!-- Add in the actual URL of service so user can cut and paste -->
163                <td py:if="isService">
164                    ${s.url}
165                </td>               
166            </tr>
167            <tr><td><br/></td></tr>
168            <tr py:if="c.doc.wfsServiceCounter > 0"><td class="linehead" colspan="3" id="wfsServices"><span class="headingO">Web Feature Services (WFS)</span></td></tr>
169            <tr py:for="s in c.doc.OGCservices">
170                <?python
171                t=s.contentType
172               
173                isService = False
174                               
175                if 'WEB FEATURE SERVICE' in t:
176                    icon = g.wfsIcon
177                    isService = True
178                else:
179                    icon = g.icons_R
180                                   
181                ?>
182                <td width="20%" py:if="isService">                 
183                    <span py:replace="linkimage(g.server + '/viewItems?ENDPOINT=' + s.url,icon,s.description)" py:strip="True"/>
184                </td>               
185                <td py:if="isService">${s.description}</td>
186               
187                <!-- Add in the actual URL of service so user can cut and paste -->
188                <td py:if="isService">
189                    ${s.url}
190                </td>               
191            </tr>
192            <tr><td><br/></td></tr>
193            <!--
194            TODO - SHOULD WE LINK IN KML ETC HERE??
195            -->
196            <tr py:if="c.doc.visServiceCounter > 0"><td class="linehead" colspan="3" id="visServices"><span class="headingO">Visualisation Services</span></td></tr>
197            <tr py:for="s in c.doc.OGCservices">
198                <?python
199                t=s.contentType
200               
201                isService = False
202                               
203                if 'ACCESS MAP VIEWER' in t:
204                    icon = g.visIcon
205                    isService = True
206                else:
207                    icon = g.icons_R
208                                   
209                ?>
210                <td width="20%" py:if="isService">                 
211                    <span py:replace="linkimage(g.server + '/viewItems?ENDPOINT=' + s.url,icon,s.description)" py:strip="True"/>
212                </td>               
213                <td py:if="isService">${s.description}</td>
214               
215                <!-- Add in the actual URL of service so user can cut and paste -->
216                <td py:if="isService">
217                    ${s.url}
218                </td>               
219            </tr>
220           
221           
222        </tbody></table>
223    </div> <!-- ServiceList -->
224   
225   
226    <div py:def="Spatial(bbox,h)">
227        <!-- Currently this only shows the first bounding box -->
228        <table py:if="bbox.nboxes==1"><tbody>
229            <tr py:if="h==1"><td colspan="2" class="cellhead">Spatial coverage</td></tr>
230            <tr><td colspan="2" align="center">${bbox.boxes[0][0]}</td></tr>
231            <tr><td align="center">${bbox.boxes[0][1]}</td><td align="center">${bbox.boxes[0][2]}</td></tr>
232            <tr><td colspan="2" align="center">${bbox.boxes[0][3]}</td></tr>
233        </tbody></table>
234        <span py:if="bbox.nboxes!=1"><p py:if="h==1" class="cellhead">Spatial Coverage</p>
235            <p py:if="bbox.nboxes>1"> $bbox.nboxes different areas.</p>
236            <p py:if="bbox.nboxes==0"> No spatial coverage information available.</p>
237        </span>
238    </div>
239   
240    <div py:def="Coverage(bbox,timcov)">
241        <table cellspacing="0" cellpadding="3" border="0" width="100%"><tbody>
242            <tr><td class="linehead" colspan="2"><span class="heading0"> Data Coverage</span> </td></tr>
243            <tr><td><div py:replace="Spatial(bbox,1)"/></td>
244                <td><table><tr><td colspan="2" class="cellhead"> Temporal coverage</td></tr>
245                           <span py:if="len(timcov)==1">
246                                <tr><td> Start Date: ${timcov[0][0]}</td><td>End Date: ${timcov[0][1]}</td></tr>
247                                <tr><td colspan="2"> Status:${timcov[0][2]}</td></tr>
248                           </span>
249                           <tr py:if="len(timcov)==0"><td colspan="2">No temporal information available.</td></tr>
250                           <tr py:if="len(timcov)>1"><td colspan="2">${len(timcov)} different periods of data available.</td></tr>
251                    </table>
252                </td></tr>
253        </tbody></table>
254    </div>
255   
256    <div py:def="ShortCoverage(e)">
257        <span py:if="len(e.timeCoverage)==1">From ${e.timeCoverage[0][0]} to ${e.timeCoverage[0][1]}
258        </span><span py:if="e.bbox.nboxes==1">
259         for latitude ${e.bbox.boxes[0][3]} to ${e.bbox.boxes[0][0]}N and longitude ${e.bbox.boxes[0][1]} to ${e.bbox.boxes[0][2]}E
260        </span>
261    </div>
262   
263    <div py:def="People(ptype,listOf)">
264        <table py:if="listOf!=[]" cellspacing="0" cellpadding="3" border="0" width="100%"><tbody>
265            <tr><td class="linehead" colspan="2"><span class="heading0"> $ptype</span></td></tr>
266            <tr py:for="p in listOf"><td>${XML(p.core['role'])}</td><td>${XML(p.toHTML())}</td></tr>
267        </tbody></table>
268    </div>
269   
270    <div py:def="Centre(cen)">
271        <table cellspacing="0" cellpadding="3" border="0" width="100%"><tbody>
272            <tr><td class="linehead"><span class="heading0"> Data Centre</span></td></tr>
273            <tr><td>${XML(cen.toHTML())}</td></tr>
274        </tbody></table>
275    </div>
276   
277    <div py:def="Keywords(Name,listOf)">
278         <table cellspacing="0" cellpadding="3" border="0" width="100%"><tbody>
279            <tr><td class="linehead"><span class="heading0"> $Name</span></td></tr>
280            <tr py:for="item in listOf"><td>$item</td></tr>
281        </tbody></table>
282    </div>
283   
284    <!--- Create that little list of service icons on the result page -->
285    <!-- FUDGE to get different icon showing for ceda browse records until I fix the atom=>dif pipeline (so contentType included on all ceda difs) SJD 22/10/09 -->
286    <span py:def="serviceIcons(sL)">
287        <span py:for="s in sL">
288            <?python
289           
290           
291            listServiceEsc=['GET WEB MAP SERVICE','GET WEB COVERAGE SERVICE','GET WEB FEATURE SERVICE','ACCESS MAP VIEWER']
292                       
293            t=s.contentType
294            serviceStatus='False'
295            loopy = False
296           
297            #flag whether we need to produce an icon i.e. if content above is in contentType then we don't need it as producing a service button instead.                         
298            for service in listServiceEsc:
299                if loopy:
300                    break
301               
302                if service in t:
303                    serviceStatus='True'
304                    loopy = True
305           
306           
307            if 'ATOM' in s.description:
308                atomFudge=True
309            else:           
310                atomFudge=False
311           
312            if t=='': t='R'
313           
314            if 'GET DATA' in t: t='GET DATA'
315           
316            try:
317                iconD={'NDG_BROWSE':g.icons_NDGBrwse,'GET DATA':g.icons_A,'VIEW EXTENDED METADATA':g.icons_B,'DISCOVERY':g.icons_D,'R':g.icons_R}
318                   
319                if atomFudge:
320                    icon=g.icons_NDGBrwse
321                   
322                else:
323                    icon=iconD[t]
324                 
325            except:
326               
327                icon=g.icons_R
328               
329            if serviceStatus == 'True':
330                icon=''
331                 
332            ?>
333           
334            <span py:if="icon!=''">       
335                <span py:replace="linkimage(s.url,icon,s.description)"/>
336            </span>
337        </span>
338    </span>
339   
340    <!-- in order to get around displaying a huge list of service icons for wms etc, generate buttons with number info -->
341    <span py:def="serviceButtons(sL,discoveryViewLinkBinding)">
342   
343        <?python
344       
345            numWMS = 0
346            numWCS = 0
347            numWFS = 0
348            numVis = 0
349           
350            counter = 0
351           
352            #discoveryViewLink passed from d.binding, coding for which is deep down somewhere.  Just parse and strip out the url for now..
353            #..and can add anchor for links and service in at this point too..
354            #discoveryViewLink=discoveryViewLinkBinding + '#linksAndServices'
355            wmsLink=discoveryViewLinkBinding + '#wmsServices'
356            wcsLink=discoveryViewLinkBinding + '#wcsServices'
357            wfsLink=discoveryViewLinkBinding + '#wfsServices'
358            visLink=discoveryViewLinkBinding + '#visServices'
359           
360        ?>
361        <!-- Loop through each service content block and count numbers of relevant services - NOTE based on GCMD accepted terms -->
362        <span py:for="s in sL">
363   
364            <?python
365                t=s.contentType
366                             
367                if 'GET WEB MAP SERVICE' in t:
368                    numWMS = numWMS + 1
369                   
370                if 'GET WEB COVERAGE SERVICE' in t:
371                    numWCS = numWCS + 1
372                   
373                if 'GET WEB FEATURE SERVICE' in t:
374                    numWFS = numWFS + 1
375                   
376                if 'ACCESS MAP VIEWER' in t:
377                    numVis = numVis + 1
378                                 
379                counter = counter+1
380            ?>
381           
382        </span>
383       
384        <!-- now formulate buttons to add to links and services bar -->
385        <span py:if="numWMS > 0">
386            <input type="button" class="txtButtons_WMS" onMouseOver="goLite(this.form.name,this.name)" onMouseOut="goDim(this.form.name,this.name)" title="$numWMS OGC Web Map Services available - click for more info" value="$numWMS WMS" onclick="window.location.href='$wmsLink'"/>
387        </span>
388        <span py:if="numWCS > 0">
389            <input type="button" class="txtButtons_WCS" onMouseOver="goLite(this.form.name,this.name)" onMouseOut="goDim(this.form.name,this.name)" title="$numWCS OGC Web Coverage Services available - click for more info" value="$numWCS WCS" onclick="window.location.href='$wcsLink'"/>
390        </span>
391        <span py:if="numWFS > 0">
392            <input type="button" class="txtButtons_WFS" onMouseOver="goLite(this.form.name,this.name)" onMouseOut="goDim(this.form.name,this.name)" title="$numWFS OGC Web Feature Services available - click for more info" value="$numWFS WCS" onclick="window.location.href='$wfsLink'"/>
393        </span>
394        <span py:if="numVis > 0">
395            <input type="button" class="txtButtons_VIS" onMouseOver="goLite(this.form.name,this.name)" onMouseOut="goDim(this.form.name,this.name)" title="$numVis Data Visualisation Services - click for more info" value="$numVis Visualisations" onclick="window.location.href='$visLink'"/>
396        </span>
397               
398       
399    </span>
400   
401    <!--- Easy shortening of text for result pages, should use ajax to expand -->
402    <span py:def="abbreviate(text,L,url)">
403        <?python
404        if len(text)<L:
405            more=''
406        else:
407           
408            if url:
409                more='&nbsp;<a href="%s">(more)</a>'%url
410            else: more='...'
411        ?>
412        ${text[0:L]} ${XML(more)}
413    </span>
414   
415    <!--- Easy shortening of text for result pages, should use ajax to expand -->
416    <span py:def="abbreviateAbstract(text,L,url)">
417        <?python
418        if len(text)<L:
419            more=''
420        else:
421           
422            if url:
423                more='&nbsp;<a href="%s">(more)</a>'%url
424            else: more='...'
425        ?>
426        ${text[0:L]} ${XML(more)}
427    </span>
428   
429    <!-- Abstract more/less -->
430    <!--<span py:def="moreAbstract(value)">
431   
432        <span >
433           
434            <img src="$g.helpIcon" alt="Toggle help" class="helpicon"/></a>
435           
436            $value
437           
438            <input type="button"  class="txtButtons" alt="Click to show/hide rest of abstract" value="(more)" onclick="toggleDiv(1,'$value','shown','hidden','div'); return false;" />
439               
440        </span>
441    </span>-->
442   
443   
444    <span py:def="result(i,d)">
445        <?python
446       
447        thisRecordFull = 'fullAbstract_' + str(i)
448        thisRecordTrun = 'trunAbstract_' + str(i)
449       
450        abslen = len(d.abstract)
451             
452        if len(d.timeCoverage)==1:
453            tc=d.timeCoverage[0]
454        elif len(d.timeCoverage)==0:
455            tc=['','','']
456        else:
457            tc=d.timeCoverage[0]
458            for m in d.timeCoverage:
459                if m[0]<tc[0]:tc[0]=m[0]
460                if m[1]>tc[1]:tc[1]=m[1]
461        ?>   
462        <tr class="${i%2 and 'rowhi' or 'rowlo'}">
463            <td>
464                <span py:if="d.briefCitation!=''">
465                    <span class="ndgem">Citation:</span> ${d.briefCitation}</span>
466                <span class="ndgem"> Title:</span>
467                    <span py:replace="abbreviate(d.name,70,0)"/>
468                <br/>
469                               
470                <!-- trunc text
471                <div id="$thisRecordTrun" class="abstractText_shown">-->
472                <div id="$thisRecordTrun" class="${i%2 and 'abstractText_shown_hi' or 'abstractText_shown_lo'}">
473                   
474                    <span class="ndgem"> Abstract: </span>
475                                           
476                        <span py:replace="abbreviateAbstract(d.abstract,200,'')"/><!-- the text -->
477                       
478                        <!-- Only show "more" button if abstract long enough..  -->
479                        <span py:if="abslen > 200">
480                            <input type="button"  class="txtButtons_more" title="Click to show rest of abstract" value="more" onclick="Div_show('$thisRecordFull');Div_hide('$thisRecordTrun')" />
481                        </span>
482                </div>
483               
484                <!-- full text             
485                <div id="$thisRecordFull" class="abstractText_hidden">-->
486                <div id="$thisRecordFull" class="${i%2 and 'abstractText_hidden_hi' or 'abstractText_hidden_lo'}">
487               
488                <span class="ndgem"> Abstract: </span>
489                   
490                        ${d.abstract}
491                        <input type="button"  class="txtButtons_less" title="Click to hide rest of abstract" value="less" onclick="Div_show('$thisRecordTrun');Div_hide('$thisRecordFull')" />
492                </div>
493               
494                <span class="ndgem"> Sourced from:</span>&nbsp;${XML(d.centre.url())}
495                &nbsp;<span class="ndgem">Links:</span>
496                <!-- Magnifying glass icon courtesy of http://www.deleket.com used for non-commercial purposes within this Discovery Service page and sub-documents -->               
497                <span py:replace="serviceIcons([d.binding])"/>     <!-- Discovery View link -->       
498                <span py:replace="serviceIcons(d.services)"/>      <!-- Logos, homepage etc etc -->
499               
500                <br/><span class="ndgem" py:if="d.serviceCounter > 0">Services:</span>
501                <span py:replace="serviceButtons(d.OGCservices,d.discoveryViewURL)"/>    <!-- Buttons for links to wms, wcs, vis services etc -->
502               
503            </td>
504            <td>${tc[0]}</td>
505            <td>${tc[1]}</td>
506            <td>
507                <div py:replace="Spatial(d.bbox,0)"/>
508            </td>
509            <!-- check if the DIF has already been selected
510            <?python
511                selected=False
512                select_td_id='select_td_id_%s'%d.entryID
513                if 'selection' in session:
514                        for item in session['selection']:
515                        if item.entryID == d.entryID:
516                                        selected=True
517                select_url = h.url_for(controller="visualise/selectedItems",
518                                       action="addSelectedItem",
519                                       entryid=d.entryID,
520                                       divid=select_td_id,
521                                       kmlurl = urlListEncode(d.kmlURL),
522                                       wmcurl = urlListEncode(d.wmcURL),
523                                       title = d.name)
524
525            ?>
526                       
527                <td id="$select_td_id" align="center">
528                <span py:if="selected">
529                        ${XML(h.link_to_remote("Unselect",
530                                        dict(update=select_td_id,
531                                                 url=h.url_for(controller="visualise/selectedItems",
532                                                                   action="unSelectItem",
533                                                                   entryid=d.entryID,
534                                                                   divid=select_td_id))))}
535                                                                   
536                                </span>
537                                <span class="selectme" py:if="not selected">
538                        ${XML(h.link_to_remote("Select",
539                                        dict(update=select_td_id,
540                                             url=select_url
541                                             )))}
542                </span>
543            </td>-->
544        </tr>
545    </span>
546   
547</html>
Note: See TracBrowser for help on using the repository browser.