]> git.decadent.org.uk Git - maypole.git/blobdiff - templates/factory/macros
applied patch for public buttons.
[maypole.git] / templates / factory / macros
index 044ba456ad44c4d82016e6abd526920db94d04a0..95dc9730e4a4b31f632f164a84c8a0d0a7d1ab8f 100644 (file)
-[% MACRO maybe_link_view(object) BLOCK;
-    IF object.moniker; # It's an object, i.e. a has-a
-        "<A HREF='" _ base _ object.moniker _ "/view/" _ object.id _"'>";
-        object;
-        "</A>";
+[%#
+
+=head1 MACROS
+
+These are some default macros which are used by various templates in the
+system.
+
+=head2 link
+
+This creates an <A HREF="... to a command in the Apache::MVC system by
+catenating the base URL, table, command, and any arguments.
+
+#%]
+[%
+MACRO link(table, command, additional, label) BLOCK;
+    SET lnk = base _ "/" _ table _ "/" _ command _ "/" _ additional;
+    lnk = lnk | uri | html;
+    '<a href="' _ lnk _ '">';
+    label;
+    "</a>";
+END;
+%]
+
+[%#
+
+=head2 maybe_link_view
+
+C<maybe_link_view> 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.isa('Maypole::Model::Base');
+        link(object.table, "view", object.id.join('/'), object);
     ELSE;
         object;
     END;
 END;
 %]
 
+[%#
+
+=head2 display_line
+
+C<display_line> 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<id> column by default, and magically
+URLifies columns called C<url>. This may be considered too much magic
+for some.
+
+#%]
 [% MACRO display_line(item) BLOCK;
-     FOR col = classmetadata.columns;
+    FOR col = classmetadata.list_columns;
         NEXT IF col == "id";
         "<td>";
-        IF col == "url";  # Possibly too much magic.
-            "<A HREF="; item.url; "> "; item.url; "</A>";
-        ELSIF col == "name";
+        IF col == "url" AND item.url;
+            '<a href="'; item.url; '"> '; item.url; '</a>';
+        ELSIF col == item.stringify_column;
             maybe_link_view(item);
         ELSE;
             maybe_link_view(item.$col);
         END;
         "</td>";
-     END;
+    END;
+    '<td class="actions">';
     button(item, "edit");
     button(item, "delete");
+    "</td>";
 END %]
+[%#
+
+=head2 button
 
+This is a generic button, which performs an action on an object.
+
+=cut
+
+#%]
 [% MACRO button(obj, action) BLOCK; %]
-<TD>
-<FORM METHOD="post" ACTION="[%base%]/[%obj.moniker%]/[%action%]/[%obj.id%]">
-    <INPUT TYPE="submit" NAME="[%action%]" VALUE="[%action%]">
-</FORM>
-</TD>
+[% IF obj.is_public(action) %]
+<form class="actionform" action="[% base %]/[% obj.table %]/[% action %]/[% obj.id.join('/') %]" method="post">
+<div class="field"><input class="actionbutton" type="submit" value="[% action %]" /></div></form>
+[% END %]
 [% END %]
+[%#
 
-[% MACRO view_related(object) BLOCK;
+=head2 view_related
+
+This takes an object, and looks up the C<related_accessors>; 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;
-        "<H3>"; accessor | ucfirst; "</H3>\n";
-        "<UL id=\"vlist\">";
+        "<div id=\"subtitle\">"; accessor | ucfirst; "</div>\n";
+        "<ul id=\"vlist\">";
         FOR thing = object.$accessor;
-            "<LI>"; maybe_link_view(thing); "</LI>\n";
+            "<li>"; maybe_link_view(thing); "</li>\n";
         END;
-        "</UL>";
+        "</ul>";
     END; 
 END;
+
+MACRO test_xxxx(myblock) BLOCK;
+    FOR col = classmetadata.columns;
+        NEXT IF col == "id";
+        myblock;
+    END;
+END;
 %]