source: cows_wps/trunk/cows_wps/renderer/form_renderer.py @ 5994

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows_wps/trunk/cows_wps/renderer/form_renderer.py@5994
Revision 5994, 3.3 KB checked in by astephen, 11 years ago (diff)

added type ahead and filepath into UI options.

Line 
1import os
2
3from genshi.template import TemplateLoader
4from genshi.builder import * 
5from genshi import HTML
6
7
8class FormRenderer(object):
9    """
10    A set of rendering methods for HTML forms.
11    """
12
13    def __init__(self):
14        # Instantiate Genshi template loader
15        self.templateLoader = TemplateLoader(
16           os.path.join(os.getcwd(), 'cows_wps/templates'),
17           auto_reload=True)
18
19    def htmlify(self, html): return HTML(html)
20
21    def renderRadioButton(self, name, is_boolean=True, values=None):
22        """
23        Returns HTML of radio button.
24        """
25        if is_boolean == True:
26            values = ("true", "false")
27
28        html = ""
29        for value in values:
30            html += """         <input type="radio" id="%s" name="%s" value="%s" />
31                <label for="%s">%s</label><br />\n"""   
32
33        return html
34
35    def renderTextInput(self, name, dtype):
36        """
37        Returns HTML for text input including onChange validator.
38        """
39        allowed_dtypes = ("float", "int", "string")
40        if dtype not in allowed_dtypes:
41            raise Exception("Invalid type sent to FormRenderer.renderTextInput(): %s" % dtype)
42
43        validators = {"int": ("/^[0-9]+$/", "The %s input must be an integer." % name), 
44                      "float": ("/^[-+]?([0-9]*\.[0-9]+|[0-9]+)$/", "The %s input must be a decimal number." % name),
45                      "string": ("/[0-9a-zA-Z]+/", "The %s input must include text characters." % name)}
46
47        (regex, msg) = validators[dtype]
48 
49        html = """<input type="text" name="%s" id="%s" value="" onChange="validateTextInput(this.value, %s, '%s');" /><br />\n""" % (name, name, regex, msg)
50        html += """<script type="text/javascript">addValidator('%s', 'text', %s, '%s');</script>\n""" % (name, regex, msg)
51        return html
52
53    def renderSelectList(self, name, values):
54        """
55        Returns HTML for select list.
56        """
57        html = """<select name="%s" id="%s">\n""" % (name, name)
58       
59        for value in values:
60            html += """ <option value="%s">%s</option>\n""" % (value, value)
61
62        return html
63
64    def renderTypeAheadDirList(self, name, base_dir):
65        """
66        Renders type-ahead widget for directory listing.
67        """
68        html = """      <script type="text/javascript" src="/js/ext/jquery-1.3.2/jquery-1.3.2.js"></script>
69        <script type="text/javascript" src="/js/ui/type_ahead_dirs.js"></script>
70        <script type="text/javascript">
71                var current_list = false;
72                var abs_pos_%s = null;
73
74                $(document).ready(function(){
75                        initTypeAhead("%s", "type_ahead_for_%s", "%s");
76                        abs_pos_%s = type_ahead_div.offset();   
77                        positionRespDiv(abs_pos_%s);
78                });
79        </script>
80
81        <p>Press down button to fill with text...</p>
82        <div style="z-index: 1;">
83                <input type="text" id="%s" name="%s" value="" style="width: 505px; height: 25px;" onBlur="hideSuggestions();" onFocus="showSuggestions();" />
84        </div>
85        <!--<span id="resp_container">
86<div id="type_ahead_for_%s" style="width: 500px; background-color: yellow; border-style: solid; border-width: 1px; position: relative;"></div>
87        </span>-->
88        <div id="type_ahead_for_%s" style="width: 500px; background-color: yellow; border-style: solid; border-width: 1px; position: statis;"></div>
89""" % (name, name, name, base_dir, name, name, name, name, name, name)
90        return html 
Note: See TracBrowser for help on using the repository browser.