Changeset 5818


Ignore:
Timestamp:
06/10/09 10:07:48 (10 years ago)
Author:
pnorton
Message:

Made some improvements to the wcsdown page and fixed a couple of layout issues.

Location:
cowsclient/trunk
Files:
3 added
9 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/trunk/cowsclient/controllers/wcsdown.py

    r5778 r5818  
    4444        c.time_end = params.get('TIME_END', None) 
    4545        layer = params.get('LAYER', None) 
    46         format = params.get('FOMRAT', None) 
     46        format = params.get('FORMAT', None) 
    4747        crs = params.get('CRS', None) 
    4848        c.message = params.get('MESSAGE', "") 
     
    5050         
    5151        layers = [] 
     52        supportedFormats = [] 
     53        supportedCRS = [] 
     54        bboxLimits = None 
    5255        timepositions = None 
    5356         
     
    6063            if layer != None: 
    6164                st1 = time.time() 
    62                 layerMetadata, c.bboxLimits, timepositions, c.supportedFormats, c.supportedCRS =\ 
     65                layerMetadata, bboxLimits, timepositions, supportedFormats, supportedCRS =\ 
    6366                       self._getWCSMetadata(wcs, layer) 
    6467                log.debug("retrieved layer metadata in  = %s" % (time.time() - st1,)) 
     
    6669         
    6770        if bbox != None: 
    68             c.bboxLimits = bbox 
     71            c.selected_bbox = bbox 
     72        elif bboxLimits != None: 
     73            c.selected_bbox = bboxLimits 
     74        else: 
     75            c.selected_bbox = '-180.0,-90.0,180.0,90.0' 
    6976         
    7077         
     
    7582            c.timedata = utils.toJSON(options)  
    7683             
    77         c.crs = crs 
    7884        c.endpoint = endpoint 
    79         c.layer = layer 
    80         c.layers = [''] 
    81         c.layers.extend(layers) 
     85         
     86        c.selected_layer = layer 
     87        c.layer_options = [(x,x) for x in layers] 
     88        c.layer_options.insert(0, ("","")) #add an empty value at the start 
     89         
     90        c.selected_format = format 
     91        c.format_options = [(x,x) for x in supportedFormats] 
     92        c.format_options.insert(0, ("","")) #add an empty value at the start 
     93         
     94        c.selected_crs = crs 
     95        c.crs_options = [(x,x) for x in supportedCRS] 
     96        c.crs_options.insert(0, ("","")) #add an empty value at the start 
    8297         
    8398        #get server information from config file 
  • cowsclient/trunk/cowsclient/controllers/wmsviz.py

    r5789 r5818  
    2727import logging 
    2828log = logging.getLogger(__name__) 
    29 import urllib, urllib2 
     29import urllib2 
    3030 
    3131class WmsvizController(BaseController): 
  • cowsclient/trunk/cowsclient/lib/helpers.py

    r5265 r5818  
    55""" 
    66from webhelpers import * 
     7import webhelpers.html.tags as html_tags 
     8 
     9from pylons import config 
     10 
     11def jsonParseIfNotEmpty(var): 
     12    if var is not None and var != "": 
     13        return 'JSON.parse("%s")' % var 
     14    else: 
     15        return 'null' 
     16     
     17def getOpenLayersImportPath(): 
     18    return config.get('openlayers_js_path', config['serverurl'] + '/js/OpenLayers.js')  
  • cowsclient/trunk/cowsclient/public/js/boundingBoxMapSelect.js

    r5778 r5818  
    1616     
    1717    this._bbox = new OpenLayers.Bounds(-180.0, -90.0, 180.0, 90.0); 
     18     
     19    if (this.inputElementId !== null) { 
     20         
     21        var inputValue = document.getElementById(this.inputElementId).value; 
     22        if (inputValue !== null && inputValue !== '') { 
     23            this._bbox = this._getBoundsFromString(inputValue); 
     24        } 
     25    } 
    1826     
    1927    this._buildMap(coastlineURL, coastlineParams); 
     
    7886        this.map.setLayerIndex(boxesLayer, 1); 
    7987         
    80         this.subselControl.switchModeTo('zoombox');         
     88        this.subselControl.switchModeTo('zoombox'); 
     89         
     90        // move to the default bounds 
     91        this.subselControl.setSubSel(this._bbox); 
    8192         
    8293        this.map.events.register('moveend', this, this._mapMoved); 
     94         
    8395         
    8496    }, 
     
    125137        this._bbox = this.map.maxExtent; 
    126138        this._updateBBoxString(); 
     139    }, 
     140     
     141    _getBoundsFromString: function (boundsString) { 
     142        var splitResult = boundsString.split(','); 
     143        var west = splitResult[0]; 
     144        var south = splitResult[1]; 
     145        var east = splitResult[2]; 
     146        var north = splitResult[3]; 
     147        return new OpenLayers.Bounds(west, south, east, north); 
    127148    } 
    128149     
  • cowsclient/trunk/cowsclient/public/layout/ddc_vis.css

    r5772 r5818  
    22DIV#visBody { 
    33  margin: 4px; 
    4   width: 100%; 
     4  width: auto; 
    55} 
    66 
     
    88  width: 100%; 
    99} 
    10  
    11  
    1210 
    1311DIV.optDiv { 
  • cowsclient/trunk/cowsclient/public/layout/open_layers_map.css

    r5724 r5818  
    1414} 
    1515 
    16  
    1716.olControlLoadingPanel { 
    1817    background-image:url(./images/loading.gif); 
     
    2120} 
    2221 
    23  
    2422DIV#legend { 
    2523  width: 640px; 
  • cowsclient/trunk/cowsclient/templates/wcsdown.html

    r5778 r5818  
    33      xmlns:xi="http://www.w3.org/2001/XInclude">     
    44 
    5  
    6 <?python 
    7  
    8     from pylons import config 
    9     openlayersImportPath = config.get('openlayers_js_path', config['serverurl'] + '/js/OpenLayers.js') 
    10  
    11  
    12     def setAtt(dict, name, value): 
    13         if value != None: 
    14             dict[name] = value 
    15      
    16 ?> 
    17  
    18 <py:def function="makeSelect(name, options, id=None, descriptions=None, default=None, onChange=None)"> 
     5<py:def function="makeInput(name, label=None, inputHTML='')"> 
    196    <?python 
    20         atts = {"name":name} 
    21         setAtt(atts,'id', id) 
    22         setAtt(atts,'onChange', onChange) 
    23  
    24         if descriptions == None: 
    25             descriptions = options 
    26     ?> 
    27      
    28     <select py:attrs="atts"> 
    29         <py:for each="i in range(len(options))"> 
    30             <?python 
    31             optAtts = {"value":options[i]} 
    32             if default != None and default == options[i]: 
    33                 optAtts["selected"] = "selected" 
    34             ?> 
    35          
    36             <option py:attrs="optAtts">${descriptions[i]}</option> 
    37         </py:for> 
    38     </select> 
    39      
    40 </py:def> 
    41  
    42 <py:def function="makeSelectInput(name, options, descriptions=None, label=None, default=None, onChange=None)"> 
    43     <?python 
    44         if label == None: 
    45             label = name 
    46  
     7        # This function makes a div, label + input html structure for a single input item 
     8     
    479        labelAtts = {'for':name, 'id':name+'_label'} 
    4810        divAtts = {'id':name+'_container'} 
    49     ?> 
    50      
    51     <div class="input_item" py:attrs="divAtts"> 
    52         <label py:attrs="labelAtts">${label}</label> 
    53         ${makeSelect(name, options, id=name, descriptions=descriptions, default=default, onChange=onChange)} 
    54     </div> 
    55 </py:def> 
    56  
    57 <py:def function="makeTextInput(name, label=None, default=None, onChange=None)"> 
    58     <?python 
    59         atts = {'type':'text', 'name':name, 'id':name} 
    60         setAtt(atts, 'value', default) 
    61         setAtt(atts, 'onChange', onChange) 
    6211 
    6312        if label == None: 
    6413            label = name 
    6514    ?> 
    66     <div class="input_item"> 
    67         <label for="${name}">${label}</label> 
    68         <input py:attrs="atts" ></input> 
     15    <div class="input_item" py:attrs="divAtts"> 
     16        <label py:attrs="labelAtts">${label}</label> 
     17        ${inputHTML} 
    6918    </div> 
    7019</py:def> 
     20 
     21<py:def function="makeSelectInput(name, selected_value, options, label=None, default=None, **atts)"> 
     22    <?python 
     23        inputHTML = h.html_tags.select(name, selected_value, options,  **atts) 
     24    ?> 
     25    ${makeInput(name, label, inputHTML)} 
     26</py:def> 
     27 
     28<py:def function="makeCheckboxInput(name, label=None, default=None, **atts)"> 
     29    <?python 
     30        inputHTML = h.html_tags.checkbox(name, **atts) 
     31    ?> 
     32    ${makeInput(name, label, inputHTML)} 
     33</py:def> 
     34 
    7135 
    7236<head> 
     
    9054<!-- End of autocomplete imports --> 
    9155 
    92 <script type="text/javascript" src="${openlayersImportPath}" /> 
    93 <script type="text/javascript" src="$g.server/js/openlayers-x.js" /> 
     56<script type="text/javascript" src="${h.getOpenLayersImportPath()}"></script> 
     57<script type="text/javascript" src="$g.server/js/openlayers-x.js"></script> 
    9458 
    9559<link rel="stylesheet" type="text/css" href="$g.server/layout/wcdown.css" /> 
     
    10468<script src="$g.server/js/utils.js"></script> 
    10569 
    106  
    107  
    108  
    10970<script type="text/javascript"> 
    11071 
     
    11273var refreshAction = "$g.server/wcsdown"; 
    11374 
    114 <py:if test="c.layer != None"> 
    115     var timedata = JSON.parse("${c.timedata}"); 
    116 </py:if> 
    117  
    118 var defaultEndpoints = JSON.parse("${c.defaultWCSEndpoints}"); 
     75var timedata = ${h.jsonParseIfNotEmpty(c.timedata)}; 
     76var defaultEndpoints = ${h.jsonParseIfNotEmpty(c.defaultWCSEndpoints)}; 
    11977 
    12078WMSC.log("defaultEndpoints = " + defaultEndpoints); 
     
    12280function init() { 
    12381 
    124     var baseLayerJSON = "${c.baseLayerJSON}"; 
    125     var baseLayerData = JSON.parse(baseLayerJSON); 
    126      
    127     <py:if test="c.layer != None"> 
     82    var baseLayerData = ${h.jsonParseIfNotEmpty(c.baseLayerJSON)}; 
     83     
     84    // build endpoint autocomplete 
     85    Utils.makeCombobox("endpoint", "endpoint_toggle", "endpoint_options", defaultEndpoints, onEndpointChange); 
     86     
     87    <py:if test="c.selected_layer != None"> 
     88     
    12889        var startTime = new SplitSelect('time_container', 'time', timedata, 'Start Time:'); 
    12990        startTime.build(); 
     
    13394         
    13495        setSingleTime('${c.singleTimePoint}' == 'true'); 
     96         
     97        var bboxSelect = new BoundingBoxMapSelect('map', 'bounds_control_container', baseLayerData.url, baseLayerData.params,  'bbox_hidden_input', null); 
    13598    </py:if> 
    13699 
    137  
    138     // build endpoint autocomplete 
    139     Utils.makeCombobox("endpoint", "endpoint_toggle", "endpoint_options", defaultEndpoints, onEndpointChange); 
    140  
    141  
    142     var bboxSelect = new BoundingBoxMapSelect('map', 'bounds_control_container', baseLayerData.url, baseLayerData.params,  'bbox_hidden_input', null); 
    143      
    144100     
    145101} 
     
    217173     
    218174     
     175     
    219176    <div id="page_content"> 
    220177     
     
    227184                    <h4>Data Selection</h4> 
    228185                     
    229                     <div id="endpoint_container" class="input_item"> 
    230                         <label for="endpoint">Endpoint :</label> 
    231                         <div id="endpoint_autocomplete" style="display:inline;"> 
    232                             <input id="endpoint" name="endpoint" type="text" value="${c.endpoint}"></input> <span id="endpoint_toggle"></span> 
    233                             <div id="endpoint_options"></div> 
    234                         </div > 
     186                     
     187                    <div py:def="autocompleteMarkup" id='endpoint_autocomplete' style='display:inline;'> 
     188                        ${h.html_tags.text('endpoint', id='endpoint', value=c.endpoint)} 
     189                        <span id="endpoint_toggle"></span> 
     190                        <div id="endpoint_options"></div> 
    235191                    </div> 
    236192                     
    237                      
    238                     ${makeSelectInput('layer', c.layers, label='Layer :', default=c.layer, onChange='onLayerChange();')} 
    239                      
    240                     <py:if test="c.layer != None"> 
    241                      
    242                         ${makeSelectInput('format', c.supportedFormats, label='Format :')} 
    243                          
    244                         ${makeSelectInput('crs', c.supportedCRS, label='CRS :', default=c.crs)} 
     193                    ${makeInput('endpoint','Endpoint :', autocompleteMarkup())} 
     194                     
     195                    ${makeSelectInput('layer', c.selected_layer, c.layer_options, label='Layer :', onChange='onLayerChange();')} 
     196                     
     197                    <py:if test="c.selected_layer != None"> 
     198                     
     199                        ${makeSelectInput('format', c.selected_format, c.format_options, label='Format :')} 
     200                        ${makeSelectInput('crs', c.selected_crs, c.crs_options, label='CRS :')} 
     201 
    245202                    </py:if> 
    246203                 
    247204                </div> 
    248205                 
    249                 <py:if test="c.layer != None"> 
    250                  
    251      
     206                <py:if test="c.selected_layer != None"> 
     207                 
    252208                    <div id="bounding_container"> 
     209                     
    253210                        <h4>Bounding Box</h4>     
    254211                        <div id="bounds_control_container"></div> 
     
    257214                            <div id='map'></div> 
    258215                        </div>     
    259                             
    260                         <input type="hidden" id="bbox_hidden_input" name="bbox" value=''></input> 
     216 
     217                        ${h.html_tags.hidden(name='bbox', id='bbox_hidden_input', value=c.selected_bbox)} 
    261218     
    262219                    </div> 
    263220     
    264                  
    265                      
    266                      
    267221                    <div id="dimensions_container"> 
    268222                        <h4>Dimensions</h4> 
    269223                         
    270                         <div class="input_item"> 
    271                             <label for="single_time">Single Time Point :</label> 
    272                             <input type="checkbox" id="single_time" name="single_time" value='true' onClick="setSingleTime(this.checked);"></input> 
    273                         </div> 
     224                        ${makeCheckboxInput('single_time', label='Single Time Point :', value='true', onClick="setSingleTime(this.checked);")} 
    274225                         
    275226                        <div id="time_container" class="input_item"> </div> 
  • cowsclient/trunk/cowsclient/templates/wmsviz.html

    r5793 r5818  
    88 
    99<?python 
    10  
    1110    from pylons import config 
    1211 
    13     #check for a custom openlayers import path 
    14     openlayersImportPath = config.get('openlayers_js_path', config['serverurl'] + '/js/OpenLayers.js') 
    15      
    1612    #check if we should use the minified version of the yui javascript 
    1713    minified_yui_javascript = config.get('minified_yui_javascript', 'true').lower() == 'true' 
    18  
    19     def jsonParseIfNotEmpty(var): 
    20         if var is not None and var != "": 
    21             return 'JSON.parse("%s")' % var 
    22         else: 
    23             return 'null'  
    2414?> 
    2515 
     
    10696<script type="text/javascript" src="$g.server/js/wmsc.js"></script> 
    10797<script type="text/javascript" src="$g.server/js/prototype.js"></script> 
    108 <script type="text/javascript" src="${openlayersImportPath}" /> 
     98<script type="text/javascript" src="${h.getOpenLayersImportPath()}"></script> 
    10999<script type="text/javascript" src="$g.server/js/LoadingPanel.js"></script> 
    110100 
    111101<script type="text/javascript" src="$g.server/js/utils.js"></script> 
    112102 
    113 <script type="text/javascript" src="$g.server/js/openlayers-x.js"/> 
    114 <!-- script src="$g.server/js/dimensionControl.js"/ --> 
    115 <script type="text/javascript" src="$g.server/js/mapControl.js"/> 
     103<script type="text/javascript" src="$g.server/js/openlayers-x.js"></script> 
     104<script type="text/javascript" src="$g.server/js/mapControl.js"></script> 
    116105<script type="text/javascript" src="$g.server/js/layerControl.js"></script>  
    117106<script type="text/javascript" src="$g.server/js/capabilities.js"></script> 
     
    156145var layerParameters = null; 
    157146 
    158 var defaultEndpoints = ${jsonParseIfNotEmpty(c.defaultWMSEndpoints)}; 
    159 var hideDisplayOptions = ${jsonParseIfNotEmpty(c.hideDisplayOptions)}; 
    160 var defaultOptions = ${jsonParseIfNotEmpty(c.defaultOptions)}; 
     147var defaultEndpoints = ${h.jsonParseIfNotEmpty(c.defaultWMSEndpoints)}; 
     148var hideDisplayOptions = ${h.jsonParseIfNotEmpty(c.hideDisplayOptions)}; 
     149var defaultOptions = ${h.jsonParseIfNotEmpty(c.defaultOptions)}; 
    161150 
    162151var eventsManager = null; 
     
    270259                <b>Selection Description</b> 
    271260                <div id="description"> 
    272                   Complete your selection below to view  <span py:replace="helpIcon('coord_help', 'div')"/>  
     261                  Complete your selection below to view  <span py:replace="helpIcon('coord_help', 'div')" />  
    273262                </div> 
    274263              </div> 
  • cowsclient/trunk/endpoints.txt

    r5719 r5818  
    22 
    33[WMS] 
    4 http://ice.badc.rl.ac.uk:5000/clim_10/wms 
    5 http://ice.badc.rl.ac.uk:5000/clim_30/wms 
    6 http://ice.badc.rl.ac.uk:5000/cru_tmc/wms 
    7 http://ice.badc.rl.ac.uk:5000/ccip/wms 
     4http://ice.badc.rl.ac.uk:5000/clim_10/wms3 
     5http://ice.badc.rl.ac.uk:5000/clim_30/wms3 
     6http://ice.badc.rl.ac.uk:5000/cru_tmc/wms3 
     7http://ice.badc.rl.ac.uk:5000/ccip/wms3 
    88http://ice.badc.rl.ac.uk:5000/coastwms 
    9 http://ice.badc.rl.ac.uk:5000/globalpop/wms 
    10 http://ice.badc.rl.ac.uk:5000/modis/wms 
    11 http://ice.badc.rl.ac.uk:5000/islscp_soil/wms 
    12 http://ice.badc.rl.ac.uk:5000/landtype/wms3 
     9http://ice.badc.rl.ac.uk:5000/globalpop/wms3 
     10http://ice.badc.rl.ac.uk:5000/modis/wms3 
     11http://ice.badc.rl.ac.uk:5000/islscp_soil/wms3 
    1312http://labs.metacarta.com/wms/vmap0 
    1413http://ndg3beta.badc.rl.ac.uk/cows/demo_hadcm3/wms 
    1514 
    1615[WCS] 
    17 http://ice.badc.rl.ac.uk:5000/clim_10/wcs 
    18 http://ice.badc.rl.ac.uk:5000/clim_30/wcs 
    19 http://ice.badc.rl.ac.uk:5000/cru_tmc/wcs 
    20 http://ice.badc.rl.ac.uk:5000/ccip/wcs 
     16http://ice.badc.rl.ac.uk:5000/clim_10/wcs3 
     17http://ice.badc.rl.ac.uk:5000/clim_30/wcs3 
     18http://ice.badc.rl.ac.uk:5000/cru_tmc/wcs3 
     19http://ice.badc.rl.ac.uk:5000/ccip/wcs3 
    2120http://motherlode.ucar.edu:8080/thredds/wcs/fmrc/NCEP/NAM/CONUS_40km/conduit/NCEP-NAM-CONUS_40km-conduit_best.ncd 
     21 
Note: See TracChangeset for help on using the changeset viewer.