--- /dev/null
+[%#
+
+=head1 display_inputs
+
+This *RECURSIVELY* displays inputs for a hash of html elements
+
+Vars it needs:
+ classmetadata-- the hash of bunch of data:
+ cgi -- inputs keyed on column names
+ table -- table inputs are for
+ columns -- list in order want displayed inputs
+ colnames -- hash of what to label inputs
+
+errors -- hash of errors keyed on columns
+
+
+TODO -- make it recognize a general submit button for redisplaying
+values on errors
+
+=cut
+
+#
+%]
+
+[% # some variables
+ foreign = [];
+ names = [];
+ # get hash of related classes keyed on accessor for Foreign Inputs
+ USE this = Class(classmetadata.name);
+ tbl = classmetadata.table;
+ required = { };
+ FOR c IN request.config.$tbl.required_cols;
+ required.$c = 1;
+ END;
+
+%]
+
+[%
+SET heading_shown = 0;
+FOR col = classmetadata.columns;
+ NEXT IF !classmetadata.cgi.$col;
+ NEXT IF col == "id" OR col == classmetadata.table _ "_id";
+ # Display foreign inputs last
+ IF (mykeys = classmetadata.cgi.$col.keys);
+ foreign.push(col);
+ names.push(classmetadata.colnames.$col);
+ NEXT;
+ END;
+ IF ! heading_shown;
+ heading = classmetadata.moniker | ucfirst;
+ "<h4> $heading </h4>";
+ SET heading_shown = 1;
+ END;
+%]
+
+[% # Base case starts here
+
+ SET elem = classmetadata.cgi.$col; #.clone; # not sure why clone
+ IF elem.type == 'hidden';
+ elem.as_XML;
+ NEXT;
+ ELSIF cgi_params;
+ param_col = col_prefix _ col;
+ IF elem.tag == "textarea";
+ elem = elem.push_content(cgi_params.$param_col);
+ ELSIF elem.tag == "select";
+ oldval = set_selected(elem, cgi_params.$col);
+ ELSE;
+ oldval = elem.attr("value", cgi_params.$param_col);
+ END;
+ END;
+%]
+
+ <label>
+ [% indicator = '';
+ SET indicator = '*' IF (required.$col);
+ %]
+ <span class="field">
+ [% indicator _ classmetadata.colnames.$col ||
+ col | replace('_',' ') | ucfirst %]
+ </span>
+ [% elem.as_XML; %]
+ </label>
+
+ [% IF errors.$col %]
+ <span class="error">[% errors.$col | html %]</span>
+ [% END %]
+[% END; %]
+
+<!-- Display the differnt component inputs -->
+
+[% USE this = Class(classmetadata.name);
+ FOR col IN foreign;
+ # has_many mapping throws a stick in our spokes because related_class returns the mapped
+ # class. Sometimes we just want the has_many class.
+
+ # In case of Pub Handpumps maps to Beer and we want to add Handpump to Pub, we dont
+ # want the mapped data .
+ # In case of "Create New Handpump" -- we want the mapped data probably so we get
+ # Beer inputs and Pub select box.
+
+ fclass_rel_meta = this.related_meta(request, col);
+ fclass = fclass_rel_meta.foreign_class; # ignor args.mapping
+ fclass_meta = this.get_classmetadata(fclass);
+ fclass_meta.cgi = classmetadata.cgi.$col;
+ # USE Dumper; Dumper.dump(fclass_meta);
+ INCLUDE display_inputs
+ col_prefix = col _ "__AF__" _ col_prefix
+ errors = errors.$col
+ heading = names.shift
+ classmetadata = fclass_meta; # localize
+ END;
+%]
+