<% # routing's not available yet, so we just guess based on presence # of methods def linkable?(model, action) action = action.to_s if RUBY_VERSION < "1.9" model.hobo_controller[subsite] && model.hobo_controller[subsite].public_instance_methods.include?(action) end %> <!-- ====== Main Navigation ====== --> <def tag="main-nav"> <navigation class="main-nav" merge-attrs param="default"> <nav-item href="#{base_url}/">Home</nav-item> <% models.select { |m| linkable?(m, :index) }.each do |m| -%> <nav-item with="&<%= m.name %>"><ht key="<%= m.to_s.underscore %>.nav_item" count="100"><model-name-human count="100"/></ht></nav-item> <% end -%> </navigation> </def> <% each_controller do -%> <% next unless @controller < Hobo::Controller::Model %> <!-- ====== <%= model.name %> Pages ====== --> <% new_link = linkable?(model, :new) new_form = !new_link && linkable?(model, :create) model_key = model.to_s.underscore -%> <def tag="index-page" for="<%= model.name %>"> <page merge title="#{ht '<%= model_key %>.index.title', :default=>[model.model_name.human(:count=>100)] }"> <body: class="index-page <%= model_class %>" param/> <content-header: param> <h2 param="heading"> <ht key="<%= model_key %>.index.heading"> <model-name-human model="&model"/> </ht> </h2> <p param="count" if> <ht key="<%= model_key %>.collection.count" count="&collection_count"> <count summary/> </ht> </p> </content-header:> <content-body: param> <% if new_link -%> <a action="new" to="&model" param="new-link"> <ht key="<%= model_key %>.actions.new">New <%=model_name %></ht> </a> <% end -%> <% if view_hints.paginate? -%> <page-nav param="top-page-nav"/> <% end -%> <% if view_hints.sortable? -%> <sortable-collection param="collection"/> <% else -%> <collection param/> <% end -%> <% if view_hints.paginate? -%> <page-nav param="bottom-page-nav"/> <% end -%> <% if new_form -%> <div param="new-form"> <h3 param="new-form-heading"> <ht key="<%= model_key %>.form.new.heading">New <%= model_name %></ht> </h3> <form with="&@invalid_record || new_for_current_user(<%= model %>)" param/> </div> <% end -%> </content-body:> </page> </def> <def tag="new-page" for="<%= model.name %>"> <page merge title="#{ht '<%= model_key %>.new.title', :default=>[' New <%= sq_escape(model_name) %>'] }"> <body: class="new-page <%= model_class %>" param/> <content-header: param> <h2 param="heading"> <ht key="<%= model_key %>.new.heading"> New <%= model_name %> </ht> </h2> </content-header:> <content-body: param> <form param> <submit: label="#{ht '<%= model_key %>.actions.create', :default=>['Create <%= sq_escape(model_name) %>']}"/> </form> </content-body:> </page> </def> <% back_link = model.view_hints.parent back_link_human_name = model.reflections[back_link.to_s] && model.reflections[back_link.to_s].klass unless back_link.blank? back_link_human_name = back_link_human_name && back_link_human_name.model_name.human boolean_fields = model.table_exists? ? (model.columns.select { |c| c.type == :boolean }.*.name - model.view_hints.inline_booleans) : [] creator = model.creator_attribute creator_link = creator && model.reflections[creator.to_s] && linkable?(model.reflections[creator.to_s].klass, :show) edit_link = linkable?(model, :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 is_user_model = model < Hobo::Model::UserBase collection = model.view_hints.primary_children if collection collection_class = model.reflections[collection.to_s].klass owner = model.reverse_reflection(collection)._?.name if owner add_link = collection && linkable?(collection_class, :"new_for_#{owner}") add_form = !add_link && linkable?(collection_class, :"create_for_#{owner}") end end unless model.view_hints.secondary_children.empty? aside_collections = model.view_hints.secondary_children.map { |c| [model.reflections[c.to_s], model.reverse_reflection(c)] } end -%> <def tag="show-page" for="<%= model.name %>"> <page merge title="#{ht '<%=model_key %>.show.title', :default=>['<%=sq_escape model_name %>'], :name => name(:no_wrapper => true) }"<%= ' without-aside' unless aside_collections %> > <body: class="show-page <%= model_class %>" param/> <content-header: param> <% if back_link -%> <a:<%= back_link %> param="parent-link">« <ht key="<%= model_key %>.actions.back_to_parent" parent="<%= back_link_human_name %>" name="&this">Back to <name/></ht></a:<%= back_link %>> <% end -%> <h2 param="heading"> <ht key="<%= model_key %>.show.heading" name="#{name(:no_wrapper => true)}"> <%= model_name %> <name/> </ht> </h2> <% if boolean_fields -%> <record-flags fields="<%= boolean_fields * ', ' %>" param/> <% 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"> <ht key="<%= model_key %>.actions.edit" name="#{name(:no_wrapper => true)}"> Edit <%= model_name %> </ht> </a> <% end -%> </content-header:> <content-body: param> <% if main_content -%> <view:<%= main_content %> param="description" /> <% end -%> <% if show_fields.any? -%> <field-list fields="<%= show_fields * ', ' %>" param/> <% end -%> <% if collection -%> <section param="collection-section"> <h3 param="collection-heading"> <ht key="<%= collection_class.to_s.underscore %>.collection.heading" count="&this.<%= collection.to_s %>.count" > <human-collection-name collection="<%= collection %>" your/> </ht> </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?(@<%= model.name.underscore %>.<%= collection %>)" param="new-link"> <ht key="<%= collection_class.to_s.underscore %>.actions.new" count="1"> New <%= collection_class.to_s.titleize %> </ht> </a:<%= collection %>> <% elsif add_form -%> <section param="add-to-collection" if="&can_create?(@<%= model.name.underscore %>.<%= collection %>)"> <h3 param="add-form-heading"> <ht key="<%= collection_class.to_s.underscore %>.collection.add_form_heading" count="1"> Add <%= a_or_an collection_class.to_s.titleize %> </ht> </h3> <form with="&@<%= collection_class.name.underscore %> || new_for_current_user(@<%= model.name.underscore %>.<%= collection %>)" owner="<%= owner %>" without-cancel param> <field-list: skip="<%= owner %>"/> <submit: label="#{ht '<%= sq_escape collection_class.to_s.underscore %>.actions.add', :default=>['Add'] }"/> </form> </section> <% end -%> </section> <% end -%> </content-body:> <% if aside_collections -%> <aside: param> <% for refl, reverse_refl in aside_collections -%> <% if reverse_refl && linkable?(refl.klass, :"index_for_#{reverse_refl.name}") -%> <collection-preview:<%= refl.name %>.recent param="<%= refl.name %>-preview"> <heading-content:><human-collection-name with="&this.origin" collection="<%= refl.name %>" your/></heading-content:> </collection-preview:<%= refl.name %>.recent> <% else -%> <section param="<%= refl.name %>-collection-section"> <h3 param="<%= refl.name %>-collection-heading"> <ht key="<%= refl.klass.to_s.underscore %>.collection.heading" count="&this.<%= refl.name.to_s %>.count" > <human-collection-name collection="<%= refl.name %>" your/> </ht> </h3> <collection:<%= refl.name %> param="<%= refl.name %>-collection"/> </section> <% end -%> <% end -%> </aside:> <% end -%> </page> </def> <% name_attribute = model.name_attribute -%> <def tag="edit-page" for="<%= model.name %>"> <page merge title="#{ht '<%= model_key %>.edit.title', :default=>['Edit <%= sq_escape model_name %>'], :name => name(:no_wrapper => true) }"> <body: class="edit-page <%= model_class %>" param/> <content-header: param> <h2 param="heading"> <ht key="<%= model_key %>.edit.heading" name="#{name(:no_wrapper => true)}"> Edit <%= model_name %> </ht> </h2> <delete-button label="#{ht '<%= model_key %>.actions.delete', :default=>['Remove This <%= sq_escape model_name %>']}" param/> </content-header:> <content-body: param> <form param/> </content-body:> </page> </def> <% controller.owner_actions.each_pair do |owner, actions| -%> <% collection_name = model.reverse_reflection(owner.to_s).name.to_s owner_model = model.reflections[owner.to_s].klass linkable_owner = linkable?(owner_model, :show) owner_tag = linkable_owner ? "a" : "name" owner_is_user = owner_model < Hobo::Model::UserBase owner = model.reflections[owner.to_s].macro == :has_many ? owner.to_s.singularize : 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="#{ht '<%= model_key %>.index_for_owner.title', :count=>100, :default=>['<%= sq_escape(model_name(:plural)) %> for']} #{name :with => @<%= owner %>, :no_wrapper => true}"> <body: class="index-for-owner-page <%= owner.dasherize %> <%= model_class %>" param/> <content-header: param> <% if linkable_owner -%> <div param="back-to"> <t key="hobo.actions.back">Back to</t> <a with="&@<%= owner %>"/> </div> <% end -%> <h2 param="heading" if="&@owner"> <ht key="<%= model_key %>.index_for_owner.heading" count="&@<%= owner %>.<%= collection_name %>.count"> <human-collection-name with="&@<%= owner %>" collection="<%= collection_name %>" your/> </ht> </h2> <% unless owner_is_user %> <h3 param="subheading"> <ht key="<%= model_key %>.index_for_owner.subheading"> For: </ht> <<%= owner_tag %> with="&@<%= owner %>"/> </h3> <% end -%> <p param="count" if> <ht key="<%= model_key %>.collection.count" count="&collection_count"> <count summary/> </ht> </p> </content-header:> <content-body: param> <% if new_link -%> <a action="new" to="&@<%= owner %>.<%= collection_name %>" param="new-link"> <ht key="<%= model_key %>.actions.new" >New <%=model_name %></ht> </a> <% end -%> <page-nav param="top-page-nav"/> <collection param/> <page-nav param="bottom-page-nav"/> </content-body:> </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="#{ht '<%=model_key %>.new_for_owner.title', :default=>['New <%= sq_escape model_name %> for']} #{name :with => @<%= owner %>}"> <body: class="new-for-owner-page <% owner.dasherize %> <%= model_class %>" param/> <content-header: param> <h2 param="heading"> <ht key="<%= model_key %>.new_for_owner.heading"> New <%= collection_name.singularize.titleize %> </ht> </h2> <h3 param="subheading"> <ht key="<%= model_key %>.new_for_owner.subheading"> For: </ht> <<%= owner_tag %> with="&@<%= owner %>"/> </h3> </content-header:> <content-body: param> <form owner="<%= owner %>" method="post" param> <field-list: skip="<%= owner %>"/> <submit: label="#{ht '<%=model_key %>.actions.create', :default=>['Create <%= sq_escape model_name %>']}"/> </form> </content-body:> </page> </def> <% end -%> <% end # of owner_actions.each_pair -%> <% creator_names.each do |creator| -%> <def tag="<%= creator.dasherize %>-page" polymorphic/> <def tag="<%= creator.dasherize %>-page" for="<%= model.name %>"> <page title="#{ht '<%=model_key %>.<%= creator.underscore %>.title', :default=>['<%= sq_escape creator.titleize %>']}" merge> <body: class="lifecycle-start-page <%= creator.dasherize %>-page" param/> <content-header: param> <h2 param="heading"> <ht key="<%= model_key %>.<%= creator.underscore %>.heading"> <%= creator.titleize %> </ht> </h2> </content-header:> <content-body: param> <<%= creator.dasherize %>-form param="form"/> </content-body:> </page> </def> <% end -%> <% transition_names.each do |transition| -%> <def tag="<%= transition.dasherize %>-page" polymorphic/> <def tag="<%= transition.dasherize %>-page" for="<%= model.name %>"> <page title="#{ht '<%=model_key %>.<%= transition.underscore %>.title', :default=>['<%= transition.titleize %>']}" merge> <body: class="lifecycle-transition-page <%= transition.dasherize -%>-page" param/> <content-header: param> <h2 param="heading"> <ht key="<%= model_key %>.<%= transition.underscore %>.heading"> <%= transition.titleize %> </ht> </h2> </content-header:> <content-body: param> <<%= transition.dasherize %>-form param="form"/> </content-body:> </page> </def> <% end -%> <% end # of each_model do -%>