X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=templates%2Ffactory%2Fmacros;h=3d45a6fa65c36bae4d5a48db84e17722b41b38d2;hb=d77cc42a2fd0ae059128043822ef127199e55ed2;hp=2a2315523300949de9c7b48f103f28367a4cf9b9;hpb=7137ae307038838c154fec5240c629fdb9e8ac76;p=maypole.git diff --git a/templates/factory/macros b/templates/factory/macros index 2a23155..3d45a6f 100644 --- a/templates/factory/macros +++ b/templates/factory/macros @@ -1,36 +1,117 @@ -[% MACRO maybe_link_view(object) BLOCK; - IF object.moniker; # It's an object, i.e. a has-a - ""; - object; - ""; +[%# + +=head1 MACROS + +These are some default macros which are used by various templates in the +system. + +=head2 link + +This creates an '; + label; + ""; +END; +%] + +[%# + +=head2 maybe_link_view + +C takes something returned from the database - either +some ordinary data, or an object in a related class expanded by a +has-a relationship. If it is an object, it constructs a link to the view +command for that object. Otherwise, it just displays the data. + +#%] + +[% +MACRO maybe_link_view(object) BLOCK; + IF object.table; # It's an object, i.e. a has-a + link(object.table, "view", object.id, object); ELSE; object; END; END; %] +[%# + +=head2 display_line + +C is used in the list template to display a row from the +database, by iterating over the columns and displaying the data for each +column. It misses out the C column by default, and magically +URLifies columns called C. This may be considered too much magic +for some. + +#%] [% MACRO display_line(item) BLOCK; - FOR col = classmetadata.columns; + FOR col = classmetadata.columns; NEXT IF col == "id"; ""; - IF col == "url"; # Possibly too much magic. - " "; item.url; ""; - ELSIF col == "name"; + IF col == "url"; + " "; item.url; ""; + ELSIF col == item.stringify_column; maybe_link_view(item); ELSE; maybe_link_view(item.$col); END; ""; - END; + END; button(item, "edit"); button(item, "delete"); END %] +[%# + +=head2 button + +This is a generic button, which performs an action on an object. +=cut + +#%] [% MACRO button(obj, action) BLOCK; %] - -
- -
- + +
+ +
+ [% END %] +[%# + +=head2 view_related + +This takes an object, and looks up the C; this should +give a list of accessors that can be called to get a list of related +objects. It then displays a title for that accessor, (i.e. "Beers" for a +brewery) calls the accesor, and displays a list of the results. + +=cut +#%] +[% +MACRO view_related(object) BLOCK; + FOR accessor = classmetadata.related_accessors.list; + "

"; accessor | ucfirst; "

\n"; + "
    "; + FOR thing = object.$accessor; + "
  • "; maybe_link_view(thing); "
  • \n"; + END; + "
"; + END; +END; + +MACRO test_xxxx(myblock) BLOCK; + FOR col = classmetadata.columns; + NEXT IF col == "id"; + myblock; + END; +END; +%]