]> git.decadent.org.uk Git - maypole.git/blob - ex/fancy_example/templates/custom/display_inputs.recursive
Beginning to a fancy example app of 2.11 features . See
[maypole.git] / ex / fancy_example / templates / custom / display_inputs.recursive
1 [%# 
2
3 =head1 display_inputs
4
5 This *RECURSIVELY* displays inputs for a hash of html elements
6
7 Vars it needs: 
8    classmetadata-- the hash of bunch of data:
9    cgi -- inputs keyed on column names
10    table -- table inputs are for
11    columns -- list  in order want displayed inputs
12    colnames -- hash of what to label inputs
13    
14 errors           -- hash of errors keyed on columns 
15
16
17 TODO -- make it recognize a general submit button for redisplaying
18 values on errors
19
20 =cut
21
22 #
23 %]
24
25 [% # some variables
26    foreign    = []; 
27    names      = [];
28    # get hash of related classes keyed on accessor for Foreign Inputs
29    USE this   = Class(classmetadata.name); 
30    tbl = classmetadata.table;
31    required = { }; 
32    FOR c IN request.config.$tbl.required_cols;
33          required.$c = 1;
34    END;
35 %]      
36
37 [% FOR col = classmetadata.columns;  
38         NEXT IF !classmetadata.cgi.$col;
39         NEXT IF col == "id";
40
41         # Display foreign inputs last 
42         IF (mykeys = classmetadata.cgi.$col.keys); 
43                         foreign.push(col);
44                         names.push(classmetadata.colnames.$col);
45                         NEXT;
46         END;
47 %]
48
49 [%  # Base case starts here 
50
51         SET elem = classmetadata.cgi.$col; #.clone; # not sure why clone
52         IF elem.type == 'hidden'; 
53                 elem.as_XML;
54                 NEXT;
55         ELSIF  cgi_params;
56                 param_col = col_prefix _ col;
57                 IF elem.tag == "textarea";
58                         elem = elem.push_content(cgi_params.$param_col);
59                 ELSIF elem.tag == "select";
60                         oldval = set_selected(elem, cgi_params.$col);
61                 ELSE;
62                         oldval = elem.attr("value", cgi_params.$param_col);
63                 END;
64         END;
65 %]
66
67         <label>
68                 [% req_indicator = '';
69            SET indicator = '*' IF (required.$col); 
70         %]
71                 <span class="field">
72                     [% indicator _ classmetadata.colnames.$col || 
73                         col | replace('_',' ') | ucfirst  %] 
74                 </span>
75                 [% elem.as_XML; %]
76         </label>
77
78         [% IF errors.$col %]
79                 <span class="error">[% errors.$col | html  %]</span>
80         [% END %]
81 [% END; %]
82
83 <!-- Display the differnt component inputs --> 
84
85 [%      USE this = Class(classmetadata.name); 
86         FOR col IN foreign; 
87                 fclass = this.related_class(request, col); 
88                 fclass_meta = this.get_classmetadata(fclass);
89                 fclass_meta.cgi = classmetadata.cgi.$col; 
90                 INCLUDE display_inputs
91                         col_prefix = col _ "__AF__" _ col_prefix
92                         errors = errors.$col
93                         heading = names.shift
94                         classmetadata = fclass_meta; # localize 
95         END;
96 %]
97