<!-- ====== Main Navigation ====== --> <def tag="main-nav"> <navigation class="main-nav" merge-attrs> <nav-item href="#{base_url}/">Home</nav-item> <% models.select { |m| linkable?(m, :index) }[0..4].each do |m| -%> <nav-item with="&<%= m.name %>"><%= m.name.titleize.pluralize %></nav-item> <% end -%> </navigation> </def> <% each_controller do -%> <!-- ====== <%= model.name %> Pages ====== --> <% new_link = linkable?(:new) -%> <def tag="index-page" for="<%= model.name %>"> <page merge title="<%= model_name :title, :plural %>"> <body: class="index-page <%= model_class %>" param/> <content: param> <header param="content-header"> <h2 param="heading"><%= model_name :title, :plural %></h2> <p param="count" if>There <count prefix="are"/></p> </header> <section param="content-body"> <% if new_link -%> <a action="new" to="&model" merge-params/> <% end -%> <page-nav param="top-page-nav"/> <collection param/> <page-nav param="bottom-page-nav"/> </section> </content:> </page> </def> <def tag="new-page" for="<%= model.name %>"> <page merge title="New <%= model_name :title %>"> <body: class="new-page <%= model_class %>" param/> <content: param> <section param="content-header"> <h2 param="heading">New <%= model_name :title %></h2> </section> <section param="content-body"> <form param/> </section> </content:> </page> </def> <% back_link = model.dependent_on.detect { |x| !(model.reflections[x].klass < Hobo::User) } boolean_fields = model.columns.select { |c| c.type == :boolean }.*.name creator = model.creator_attribute creator_link = creator && model.reflections[creator] && linkable?(model.reflections[creator].klass, :show) edit_link = linkable?(:edit) main_content = model.primary_content_attribute show_fields = standard_fields(:belongs_to).*.to_s - [model.name_attribute, main_content, creator, back_link, *boolean_fields].*.to_s collection = model.dependent_collections.sort_by(&:to_s).first if collection collection_class = model.reflections[collection].klass owner = model.reverse_reflection(collection).name add_link = collection &&linkable?(collection_class, :"new_for_#{owner}") add_form = !add_link && linkable?(collection_class, :"create_for_#{owner}", :method => :post) end -%> <def tag="show-page" for="<%= model.name %>"> <page merge title="<%= model_name :title %>"> <body: class="show-page <%= model_class %>" param/> <content: param> <header param="content-header"> <% if back_link -%> <a:<%= back_link %> param="parent-link">« <name/></a> <% end -%> <h2 param="heading"><name/></h2> <% if boolean_fields.any? -%> <field-names-where-true fields="<%= boolean_fields * ', ' %>"/> <% end -%> <% if creator_link -%> <a:<%= model.creator_attribute %> param="creator-link"/> <% elsif creator -%> <view:get-creator param="creator-name"/> <% end -%> <% if edit_link -%> <a action="edit" if="&can_edit?" param="edit-link">Edit <%= model_name :title %></a> <% end -%> </header> <section param="content-body"> <% if main_content -%> <view:<%= main_content %>/> <% end -%> <% if show_fields.any? -%> <field-list fields="<%= show_fields * ', ' %>" param/> <% end -%> <% if collection -%> <section param="collection-section"> <h3 param="collection-heading"><%= collection.to_s.titleize %></h3> <% if sortable_collection?(collection) -%> <sortable-collection:<%= collection %> param="collection"/> <% else -%> <collection:<%= collection %> param/> <% end -%> <% if add_link -%> <a:<%= collection %> action="new" if="&can_create?" param="new-link">New <%= collection.to_s.singularize.titleize %></a> <% elsif add_form -%> <section param="add-to-collection" if="&can_create?(@<%= model_name.underscore %>.<%= collection %>)"> <h3 param="add-form-heading">Add <%= a_or_an collection.to_s.singularize.titleize %></h3> <form with="&@<%= collection_class.name.underscore %> || @<%= model_name.underscore %>.<%= collection %>.new" owner="<%= owner %>" method="post" without-or-cancel param> <field-list: skip="<%= owner %>"/> <submit: label="Add"/> </form> </section> <% end -%> </section> <% end -%> </section> </content:> </page> </def> <% name_attribute = model.name_attribute -%> <def tag="edit-page" for="<%= model.name %>"> <page merge title="Edit <%= model_name :title %>"> <body: class="edit-page <%= model_class %>" param/> <content:> <section param="content-header"> <h2 param="heading"><name/></h2> <delete-button label="Remove This <%= model_name :title %>" param/> </section> <section param="content-body"> <form param/> </section> </content:> </page> </def> <% controller.owner_actions.each_pair do |owner, actions| -%> <% collection_name = model.reverse_reflection(owner).name.to_s owner_model = model.reflections[owner].klass owner_tag = linkable?(owner_model) ? "a" : "name" owner = owner.to_s -%> <% if :index.in? actions -%> <% new_link = :new.in?(actions) -%> <def tag="index-for-<%= owner.dasherize %>-page" polymorphic/> <def tag="index-for-<%= owner.dasherize %>-page" for="<%= model.name %>"> <page merge title="<%= model_name :title, :plural %> for #{name :with => @<%= owner %>}"> <body: class="index-for-owner-page <%= owner.dasherize %> <%= model_class %>" param/> <content: param> <header param="content-header"> <div param="back-to">Back to <a with="&@<%= owner %>"/></div> <h2 param="heading"><%= model_name :title, :plural %></h2> <p param="count" if>There <count prefix="are"/></p> </header> <section param="content-body"> <% if new_link -%> <a action="new" to="&model" merge-params/> <% end -%> <page-nav param="top-page-nav"/> <collection param/> <page-nav param="bottom-page-nav"/> </section> </content:> </page> </def> <% end -%> <% if :new.in? actions -%> <def tag="new-for-<%= owner.dasherize %>-page" polymorphic/> <def tag="new-for-<%= owner.dasherize %>-page" for="<%= model.name %>"> <page merge title="New <%= model_name :title %> for #{name :with => @<%= owner %>}"> <body: class="new-for-owner-page <% owner.dasherize %> <%= model_class %>" param/> <content: param> <header param="content-header"> <h2 param="heading">New <%= collection_name.singularize.titleize %></h2> <h3 class="subheading" param>For: <<%= owner_tag %> with="&@<%= owner %>"/></h3> </header> <section param="content-body"> <form owner="<%= owner %>" method="post" param> <field-list: skip="<%= owner %>"/> </form> </section> </content:> </page> </def> <% end -%> <% end # of owner_actions.each_pair -%> <% if defined? model::Lifecycle -%> <% model::Lifecycle.creators.values.where.publishable?.*.name.each do |creator| -%> <def tag="<%= creator.dasherize %>-page" polymorphic/> <def tag="<%= creator.dasherize %>-page" for="<%= model.name %>"> <page title="<%= creator.titleize %>" merge> <body: class="lifecycle-start-page <%= creator.dasherize %>-page" param/> <content: param> <header param="content-header"> <h2 param="heading"><%= creator.titleize %></h2> </header> <section param="content-body"> <<%= creator.dasherize %>-form param="form"/> </section> </content:> </page> </def> <% end -%> <% model::Lifecycle.transitions.where.publishable?.*.name.each do |transition| -%> <def tag="<%= transition.dasherize %>-page" polymorphic/> <def tag="<%= transition.dasherize %>-page" for="<%= model.name %>"> <page title="<%= transition.titleize %>" merge> <body: class="lifecycle-transition-page #{transition.dasherize}-page" param/> <content:> <header param="content-header"> <h2 param="heading"><%= transition.titleize %></h2> </header> <section param="content-body"> <<%= transition.dasherize %>-form param="form"/> </section> </content:> </page> </def> <% end -%> <% end # of if defined? model::Lifecycle -%> <% end # of each_model do -%>