Changeset 2608


Ignore:
Timestamp:
19/06/07 11:14:53 (12 years ago)
Author:
lawrence
Message:

Tagging the current version of wsgi PythonCode? (discovery/browse) as
beta - even though there are some issues still to be sorted ...

Location:
TI07-MOLES/tags/wsgi-beta
Files:
49 copied

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/tags/wsgi-beta/DiscoveryGUI.py

    r2545 r2608  
    155155        self.logger.info(constraints) 
    156156        return constraints 
    157          
    158      
     157    
    159158    def doText(self,searchString,textTarget,start,howmany,scope=None,dateRange=None,bbox=None): 
    160159        ''' Carry out a text search for <searchString>  
     
    210209                        self.html+=' (unfortunately %s hits matched unformattable documents from %s, an internal error has been logged):</p>'%(len(errors),dp) 
    211210                        mailError('b.n.lawrence@rl.ac.uk','DIF errors',str(errors),server=self.mailServer) 
    212                     self.html+=renderDiscoverySet(difs,state,self.config) 
     211                    self.html+=renderDiscoverySet(difs,state,self.config,selector=self.environ['ndgSelector']) 
    213212            except ValueError,e: 
    214213                if debug:  
  • TI07-MOLES/tags/wsgi-beta/DiscoveryTemplate.py

    r2545 r2608  
    149149</div>''' 
    150150 
    151 oneLiner='''<input type="text" size="60" name="searchString"><input type="hidden" value="0" name="advanced"> 
     151oneLiner='''<input type="text" size="60" name="searchString"/><input type="hidden" value="0" name="advanced"/> 
    152152            (Target:&nbsp;<select name="textTarget"> 
    153153            <option value="Authors">Authors</option> 
     
    165165        <form action="%(advancedURL)s"> 
    166166            <table class="SearchBox"><tbody> 
    167                 <tr><td>Free&nbsp;Text&nbsp;Search:&nbsp;<input type="text" size="60" name="searchString">  
     167                <tr><td>Free&nbsp;Text&nbsp;Search:&nbsp;<input type="text" size="60" name="searchString"/>  
    168168                (Target:&nbsp;<select name="textTarget"> 
    169169                    <option value="Authors">Authors</option> 
     
    199199                        <tr><td> Southerly Latitude:</td> 
    200200                        <td colspan="2" align="center"> 
    201                         <input size="7"value="%(bboxS)s" name="bboxS"/></td></tr> 
     201                        <input size="7" value="%(bboxS)s" name="bboxS"/></td></tr> 
    202202                        <tr><td colspan="3"> (Units: degrees, north and east positive)</td></tr> 
    203203                     </tbody></table> 
     
    206206                    <table><tbody> 
    207207                        <tr><td colspan="2"><span class="searchHdr"> Refine by Source Data Centres </span></td></tr> 
    208                         <tr><td> All</td><td><input type="radio" name="source" value="All" checked="checked"></td></tr> 
     208                        <tr><td> All</td><td><input type="radio" name="source" value="All" checked="checked"/></td></tr> 
    209209                        <tr><td> NERC Data Centres</td><td><input type="radio" name="source" value="NERC_DDC"/></td></tr> 
    210210                        <tr><td> Marine Data Partnership (MDIP)</td><td><input type="radio" name="source" value="MDIP"/></td></tr> 
    211211                    </tbody></table> 
    212212                 </div></td></tr> 
    213                 <tr><td align="center"><input type="submit"></td></tr> 
     213                <tr><td align="center"><input type="submit"/></td></tr> 
    214214            </tbody></table> 
    215215            <input type="hidden" value="1" name="advanced"/> 
  • TI07-MOLES/tags/wsgi-beta/layout/ndg.css

    r2533 r2608  
    4444    FONT-SIZE: 20px; COLOR: #CC3333; FONT-FAMILY: Arial, Verdana, serif, sans-serif; } 
    4545 
    46 #Main { 
    47         PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px 
    48 } 
     46#Main {PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px} 
    4947 
    50 #LeftColumn { MARGIN: 10px; WIDTH: 160px; FLOAT: left } 
    51  
    52  
    53  
     48#HistoryCart { WIDTH: 220px; FLOAT: left; margin-top: 10px; margin-bottom: 10px;} 
     49#Contents { WIDTH: 800px; FLOAT: left; margin-left: 10px; } 
    5450 
    5551#Header {color: black; background-color: white; text-align: center; margin-bottom: 10px; padding-top: 3px; padding-right: 10px; padding-left: 10px; padding-bottom: 10px; clear: both; border-bottom: 2px solid wheat; font-size: medium; font-weight:bold;} 
    56  
    57  
    5852 
    5953a img {border: none;} 
     
    7771tr.rbgBeige {BACKGROUND-COLOR: #FDFFCC; } 
    7872.searchString {BACKGROUND-COLOR: white; margin-left:2px; margin-right:2px;} 
     73 
    7974/* end of result set controls */ 
     75 
     76/* Left Pane (History & Cart) CSS Below is the CSS for the tab panel div tags.  
     77     Note that it is dependent on the ndgjavascript.jss 
     78     */ 
     79.tab {  
     80        font-family: verdana,sans-serif;  
     81        font-size: 14px; 
     82        width: 100px; 
     83        white-space: nowrap; 
     84        text-align: center; 
     85        border-style: solid; 
     86        border-color: wheat; 
     87        border-left-width: 1px; 
     88        border-right-width: 1px; 
     89        border-top-width: 1px; 
     90        border-bottom-width: 0px; 
     91        padding-top: 5px; 
     92        padding-bottom: 5px; 
     93        cursor: pointer; 
     94        } 
     95.tabhold {  
     96        background-color: white; 
     97        color: black; 
     98        } 
     99.tabfocus {  
     100        background-color: wheat; 
     101        color: white; 
     102        } 
     103.tabcontent {  
     104        font-family: sans-serif;  
     105        font-size: 14px; 
     106        width: 200px; 
     107        height: 275px; 
     108        border-style: solid; 
     109        border-color: wheat; 
     110        border-width: 1px; 
     111        padding-top: 15px; 
     112        padding-left: 10px; 
     113        padding-right: 10px; 
     114        } 
     115</style> 
     116 
     117/* end of Left Pane */ 
     118 
    80119 
    81120div.searchMethod {margin-top: 7px; margin-bottom: 8px;} 
    82121 
    83 table.SearchBox {margin-left:auto; margin-right:auto; padding-bottom: 10px; color: black; background-color: #FDFFCC; padding-left: 20px; padding-right: 20px; clear: both;} 
     122table.SearchBox {margin-left:auto; margin-right:auto; padding-bottom: 10px; color: black; background-color: #FDFFCC; padding-left: 20px; padding-right: 20px; clear: both;}  
    84123 
    85124table.related{} 
     
    91130    padding-top:1px; padding-left: 4px; padding-right: 4px; text-decoration:none; color:black;} 
    92131 
    93 #Footer  { color: #999999; background-color: #f4f4f4; text-align: center;  margin-bottom: 25px; padding-top: 3px; padding-right: 10px; padding-left: 10px; height: 49px; clear: both; border-top: 2px solid wheat; margin-top:10px;} 
     132#Footer  { color: #999999; background-color: #f4f4f4; margin-bottom: 25px; padding-top: 3px; padding-right: 10px; padding-left: 10px; clear: both; border-top: 2px solid wheat; margin-top:10px;} 
     133Footer.td {border-style:solid; border-color:black; border-width:1px;} 
    94134 
    95135 
    96136 
    97  
  • TI07-MOLES/tags/wsgi-beta/layout/ndgJavascript.js

    r2319 r2608  
    5050  
    5151 } 
     52function ManageTabPanelDisplay() { 
     53 
     54// Between the parenthesis, list the id's of the div's that  
     55//     will be effected when tabs are clicked. List in any  
     56//     order. Put the id's in single quotes (apostrophes)  
     57//     and separate them with a comma -- all one line. 
     58// 
     59// Only the following line needs to be modified for tabs ... 
     60// 
     61var idlist = new Array('TabHistoryFocus','TabCartFocus','TabHistoryReady','TabCartReady','HistoryContent','CartContent'); 
     62 
     63if(arguments.length < 1) { return; } 
     64for(var i = 0; i < idlist.length; i++) { 
     65   var block = false; 
     66   for(var ii = 0; ii < arguments.length; ii++) { 
     67      if(idlist[i] == arguments[ii]) { 
     68         block = true; 
     69         break; 
     70         } 
     71      } 
     72   if(block) { document.getElementById(idlist[i]).style.display = "block"; } 
     73   else { document.getElementById(idlist[i]).style.display = "none"; } 
     74   } 
     75} 
     76  
  • TI07-MOLES/tags/wsgi-beta/ndg.ini

    r2487 r2608  
    3131/layout=layout 
    3232/retrieve=ndgWrapRetrieve 
     33/login=ndgLogin 
     34/logout=ndgLogout 
    3335 
    3436#[filter-app:exception] 
     
    8082[app:retrieve] 
    8183paste.app_factory = ndgRetrieve:retrieveFactory 
     84 
     85[app:ndgLogin] 
     86paste.app_factory = ndgLogin:loginFactory 
     87 
     88[app:ndgLogout] 
     89paste.app_factory = ndgLogout:logoutFactory 
  • TI07-MOLES/tags/wsgi-beta/ndgPageLayout.py

    r2533 r2608  
    11from Utilities import myConfig,mailError 
    2 from paste.request import parse_querystring 
     2from paste.request import parse_querystring, construct_url 
     3from ndgSelector import ndgSelector 
    34 
    45debug=1 
     
    2728      
    2829    def __init__(self, wrapTarget,pageName,configFile=None): 
     30         
    2931        ''' This is simple WSGI middleware to provide a page wrapper, will eventually 
    3032        include cookie handling for grabbing a "cart" of datasets ''' 
     
    3436         
    3537        helpAddress=self.config.get('SEARCH','helpURL') 
    36         discoveryURL=self.config.get('SEARCH','discoveryURL') 
    37         advancedURL=self.config.get('SEARCH','advancedURL') 
    3838        ndgJavascript=self.config.get('layout','ndgJavascript') 
    3939        self.mailServer=self.config.get('DEFAULT','mailServer','outbox.rl.ac.uk') 
    40  
    41         self.pageStart='''<?xml version="1.0" encoding="utf-8"?> 
    42                 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    43                  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
    44                 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
     40        self.server=self.config.get('DEFAULT','server','CONFIG-FILE-ERROR') 
     41 
     42        self.pageStart=''' 
     43        <?xml version="1.0" encoding="utf-8"?> 
     44            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     45            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
     46            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    4547                <head> 
    4648                  <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/> 
    4749                  <title>%s</title> 
    4850                  <link media="all, screen" href="layout/ndg.css" type="text/css" rel="stylesheet"/> 
    49                   <script type="text/javascript" language="javascript"> %s </script> 
     51                  <script type="text/javascript" src="%s"/> 
    5052                </head><body><div id="Main">'''%(pageName,ndgJavascript) 
    5153         
    52         self.header=''' 
    53         <div id="Header">%s</div>'''% self.__buildHeader(configFile) 
    54          
    55         self.disclaimer='''<p> This portal is a pre-alpha release of NDG software.  
    56         We expect bugs, and things not to work, so please let us know about such problems  
    57         (please email badc@rl.ac.uk, and include "NDG problem" in the subject line).  
    58         </p>''' 
    59          
    60         self.discovery=''' 
    61             <div class="simpleSearch"> 
    62             <form action="%s"> 
    63             <center><table><tbody> 
    64             <tr><td> New search for text in: <input type="radio" name="textTarget" value="All" checked="checked"/> Everything 
    65                 <input type="radio" name="textTarget" value="Authors"/> Authors 
    66                 <input type="radio" name="textTarget" value="Params"/>&nbsp;&nbsp;Parameters 
    67                 (<a href="%s">Advanced Search</a>,&nbsp;<a href="%s">Help</a>)</td></tr> 
    68             <tr><td><input type="text" size="66" name="searchString"/> <input type="submit"></input></td></tr> 
    69             </tbody></table></center> 
    70             <input type="hidden" value="0" name="advanced"/> 
    71             </form></div>'''%(discoveryURL,advancedURL,helpAddress) 
     54        self.header='''<div id="Header">%s</div>'''% self.__buildHeader(configFile) 
    7255 
    7356    def __call__(self,environ,start_response): 
    7457        ''' Let's prepend and postpend some stuff''' 
    75         if ('type','xml') in parse_querystring(environ): 
     58        self.url=construct_url(environ) 
     59        inputs=parse_querystring(environ) 
     60        if ('type','xml') in inputs: 
    7661            response='''<?xml version="1.0" encoding="utf-8"?>''' 
    7762            footer=0 
     
    7964            footer=1 
    8065            response=self.pageStart+self.header 
    81         if environ['SCRIPT_NAME']=='/discovery': 
    82             insert=self.disclaimer 
    83         else: 
    84             insert=self.discovery+self.disclaimer 
    85         self.footer='''<div id="Footer">%s</div></div></body></html>'''%insert 
    86         try: 
    87             if debug: 
    88                 for i in self.wrapTarget(environ,start_response): response+=i 
    89             else: 
    90                 for i in self.wrapTarget(environ,start_response): response+=str(i) 
    91             failure=0 
    92         except Exception,e: 
    93             body='Error [%s]\n'%e 
    94             response+='''<p> Unable to fufill request. NDG staff have been advised.  
    95             Please try another search. </p><p>%s</p> '''%body 
    96             body+=str(environ) 
    97             mailError('b.n.lawrence@rl.ac.uk','Discovery/Browse Error',body,server=self.mailServer) 
    98             failure=1 
    99         if footer: response+=self.footer 
     66             
     67        #  Note that build footer will remove any ndg security info from the query string as well as set self.loginstatus 
     68        self.inputs=dict(inputs) 
     69        environ,self.footer=self.__buildFooter(environ) 
     70        
     71        #try: 
     72        if debug: 
     73            wrapped=self.wrapTarget(environ,start_response) 
     74        else: 
     75            wrapped=str(self.wrapTarget(environ,start_response)) 
     76        failure=0 
     77        #except Exception,e: 
     78        #    raise Exception,e 
     79        #    body='Error [%s]\n'%e 
     80        #    wrapped=['''<p> Unable to fufill request. NDG staff have been advised.  
     81        #    Please try another search. </p><p>%s</p> '''%body] 
     82        #    body+=str(environ) 
     83        #    mailError('b.n.lawrence@rl.ac.uk','Discovery/Browse Error',body,server=self.mailServer) 
     84        #    failure=1 
     85        sidebar='' 
     86        
     87        if self.loginstatus: 
     88            # top left right bottom layout 
     89            HistoryContent=environ['ndgSelector'].getHistoryHTML() 
     90            CartContent=environ['ndgSelector'].getCartHTML() 
     91            sidebar=self.__buildLeftPanel(HistoryContent,CartContent) 
     92            h='%s <div id="CentralPane">%s<div id="Contents">%s</div></div>%s'%(response,sidebar,wrapped[0],self.footer) 
     93        else: 
     94            # top middle bottom layout 
     95            h=response+wrapped[0] 
     96            if footer: h+=self.footer 
    10097        if failure: start_response('500 OK', [('Content-Type', 'text/html'),('charset','utf-8')]) 
    10198        #currently need to coerce response into a string for flup ... 
    102         return [response] 
     99        return [h] 
    103100         
    104101    def __buildHeader(self,configFile): 
     
    128125         
    129126        return banner 
     127         
     128         
     129    def __buildFooter(self,environ): 
     130        ''' Return a footer which includes a login button ''' 
     131        left='''<p> This portal is a product of the <a href="http://ndg.nerc.ac.uk"> NERC DataGrid</a>. Not all functionality is completely implemented, bugs and problems are expected </p>''' 
     132        environ,right=self.__loginStatus(environ) 
     133        if self.loginstatus: 
     134            environ['ndgSelector']=ndgSelector(environ,url=self.url) 
     135        else: 
     136            environ['ndgSelector']=None 
     137         
     138        return environ,''' 
     139        <div id="Footer"><center><table><tbody> 
     140            <tr><td align="center" width="50%%">%s</td> 
     141                <td width="50%%" align="center">%s</td> 
     142            </tr></tbody></table></center></div>'''%(left,right) 
     143     
     144    def __loginStatus(self,environ): 
     145        ''' This should eventually talk to a cookie &/or redirect ... ''' 
     146        if 'ndg1' in self.inputs: 
     147            #it is a redirect, handle, and write to cooke ... 
     148            ndg1=self.inputs['ndg1'] 
     149            ndg2=self.inputs['ndg2'] 
     150            loginstatus=True 
     151            #now we need to fix up the query string so that nothing else needs know about this ... 
     152            del self.inputs['ndg1'] 
     153            del self.inputs['ndg2'] 
     154            # build a new query string 
     155            environ['QUERY_STRING']=dict2querystring(self.inputs) 
     156            # and clear the parsed querystring cache 
     157            del environ['paste.parsed_querystring'] 
     158            # now get this stuff into the response as a cookie 
     159            environ['ndgSecurity']=[ndg1,ndg2] 
     160        else: 
     161            # get status from cookie 
     162            loginstatus=False 
     163        loginhost='badc' 
     164        currentPage=self.url 
     165        if loginstatus: 
     166            logout='''<a class="button" href="%s">logout</a>'''%currentPage 
     167            loginMessage='You are logged in at %s: %s'%(loginhost,logout) 
     168        else: 
     169            login='''<a class="button" href="%s/login?loginfrom=%s">login</a>'''%(self.server,currentPage) 
     170            loginMessage='Further services may be available if you can %s'%login  
     171        self.loginstatus=loginstatus 
     172        return environ,loginMessage 
     173         
     174    def __buildLeftPanel(self,HistoryContent,CartContent): 
     175        ''' The left panel holds a history and shopping cart ''' 
     176        # (Start with styles as you wish to look at it before the user has clicked on anything) 
     177        h=''' 
     178        <div id="HistoryCart"><table border="0" cellpadding="0" cellspacing="0"> 
     179        <tbody> 
     180            <tr> 
     181                <td align="left"> 
     182                    <div id="TabHistoryFocus" class="tab tabfocus" style="display:block;"> 
     183                    History 
     184                    </div> 
     185                    <div id="TabHistoryReady" class="tab tabhold" style="display:none;"> 
     186                    <!-- Between the parenthesis, provide a list of ids that are to  
     187                         be visible when this tab is clicked. The ids are between  
     188                         single quotes (apostrophes) and separated with a comma. --> 
     189                    <span onclick="ManageTabPanelDisplay('TabHistoryFocus','TabCartReady','HistoryContent')">History</span> 
     190                    </div> 
     191                </td><td width="10"></td><td align="right"> 
     192                    <div id="TabCartFocus" class="tab tabfocus" style="display:none;"> 
     193                    Selected 
     194                    </div> 
     195                    <div id="TabCartReady" class="tab tabhold" style="display:block;"> 
     196                    <!-- Between the parenthesis, provide a list of ids that are to  
     197                        be visible when this tab is clicked. The ids are between  
     198                        single quotes (apostrophes) and separated with a comma. --> 
     199                    <span onclick="ManageTabPanelDisplay('TabHistoryReady','TabCartFocus','CartContent')">Selected</span> 
     200                    </div> 
     201                </td> 
     202            </tr> 
     203            <tr><td colspan="3"> 
     204                <div id="HistoryContent" class="tabcontent" style="display:block;"> 
     205                %s 
     206                </div> 
     207                <div id="CartContent" class="tabcontent" style="display:none;"> 
     208                %s 
     209                </div> 
     210            </td></tr> 
     211        </tbody> 
     212        </table></div> 
     213        '''%(HistoryContent,CartContent) 
     214        return h 
     215         
     216def dict2querystring(adictionary): 
     217    ''' Take a dictionary and construct an http query string ''' 
     218    #nb whether or not it is url safe is irrelevant since we're handling it the same way it came. 
     219    s='' 
     220    for k in adictionary: 
     221        s+='%s=%s&'%(k,adictionary[k]) 
     222    if s<>'': s=s[:-1] # strip last & 
     223    return s 
  • TI07-MOLES/tags/wsgi-beta/renderDiscoverySet.py

    r2533 r2608  
    5757                              this service to the selected list 
    5858     Note that state is a DiscoveryState instance containing the sessionID from the search, 
    59      and the offset, stride, and total number of results ...selector is a class for adding 
    60      particular datasets to a selection dataset (and cookie). 
     59     and the offset, stride, and total number of results ... 
     60     If present, selector provides a class with two attributes: the url for adding more slections 
     61     and a list of already selected uris. 
    6162     ''' 
    6263             
     
    6768        return '''<table><tbody><tr><td colspan="2" align="center">%s</td></tr> 
    6869                  <tr><td align="center">%s</td><td align="center">%s</td></tr></tbody></table>'''%args 
    69     def row(rowlist,rclass='rbgWhite'): 
     70    def row(rowlist,rclass='rbgWhite',header=0): 
    7071        print rowlist 
    7172        r= '''<tr class="%s"><td width="%s">%s</td><td width="12%%" align="center">%s</td> 
    7273            '''%(rclass,WIDTH,rowlist[0],rowlist[1]) 
    7374        ll=len(rowlist) 
    74         print 'BBB[',rowlist[2:],']' 
    75          
    76         if ll==3: 
    77             r+='<td align="center" colspan="2" width="12%%">%s</td></tr>'%rowlist[2] 
    78         elif ll==4: 
    79             r+='<td align="center">%s</td><td align="center">%s</td></tr>'%tuple(rowlist[2:]) 
     75        if not header: 
     76            for d in rowlist[2:]: r+='<td align="center">%s</td>'%d 
    8077        else: 
    81             raise 'Coding error in renderDiscovery' 
    82         print 'ok' 
     78            r+='<td align="center" colspan="2" width="12%%">%s</td>'%rowlist[2] 
     79            for d in rowlist[3:]: r+='<td align="center">%s</td>'%d 
     80        r+='</tr>' 
     81        #if ll==3: 
     82        #    r+='<td align="center" colspan="2" width="12%%">%s</td></tr>'%rowlist[2] 
     83        #elif ll==4 or ll==5: 
     84        #    r+='<td align="center">%s</td><td align="center">%s</td>'%(rowlist[2],rowlist[3]) 
     85        #    if ll==5:  
     86        #        r+='<td>%s</td></tr>'%rowlist[4] 
     87        #    else: r+='</tr>' 
     88        #else: 
     89        #    raise 'Coding error in renderDiscovery' 
    8390        return r 
    8491         
     
    113120    # ################################## 
    114121     
     122    if selector!=None: 
     123        html='<form action="%s">'%selector.url 
     124        alreadySelected=selector.alreadySelected 
     125        selector=1 
     126    else: 
     127        html='' 
     128        selector=0 
     129     
    115130    # previous versions of this code had options, but let's simplify this a lot ... 
    116131     
     
    118133    temporal=doubleheader(('Temporal&nbsp;Coverage','Start','End')) 
    119134    columns=['Dataset',spatial,temporal]  
    120     html='<table><tbody>'+row(columns,rclass="rbgBeige") 
     135    if selector: columns.append('Select') 
     136    html+='<table><tbody>'+row(columns,rclass="rbgBeige",header=1) 
    121137     
    122138    # ok, now let's cycle through the hits 
    123139    i=1 
     140    n=0 
     141    ncols=4 
     142    if selector:ncols=5 
    124143    for item in difSet: 
     144        n+=1 
    125145        d=item # we used to do the diffing here ... but we don't anymore 
    126146        bgc={1:'rbgWhite',-1:'rbgGrey'}[i] 
    127147        i=-1*i 
    128148        if d.tree is None: 
    129             html+='<tr class="%s"><td colspan="4"> Unparseable record </td></tr>'%bgc 
     149            html+='<tr class="%s"><td colspan="%s"> Unparseable record </td></tr>'%(bgc,ncols) 
    130150        else: 
    131151            ndg,slist=serviceList(d) 
     
    139159            rlist[0]+='<br/>%s: %s.'%(span('Repository','ndgem'),d.centre.url()) 
    140160            rlist[0]+=slist 
    141             if ndg and selector !=None:  
    142                 rlist[0]+=',&nbsp;'+selector.target(d.entryID,name=d.abbreviation) 
    143161            rlist.append(spatialBox(d)) 
    144162            rlist.append(htmlTime(d.timeCoverage[0])) 
    145163            rlist.append(htmlTime(d.timeCoverage[1])) 
     164            if selector: 
     165                if ndg: 
     166                    #nn='selector-%s'%n 
     167                    #uu=d.ndgObject.uri 
     168                    #if uu not in alreadySelected: 
     169                    #    ss='<input type="checkbox" name="%s"/><input type="hidden" value="%s" name="%s-uri"/>'%(nn,uu,nn) 
     170                    #else: 
     171                    #    ss+='selected' 
     172                    ss='selectable' 
     173                else: 
     174                    ss='' 
     175                rlist.append(ss) 
    146176            html+=row(rlist,rclass=bgc) 
    147177 
    148178    html+='</tbody></table>' 
     179    if selector:  
     180        html+='<input type="submit" value="Collect Selected Datasets"/></form>' 
    149181    html='<div class="ListOfResults">%s\n%s</div>'%(htmlStride(state),html) 
    150182    return html 
Note: See TracChangeset for help on using the changeset viewer.