Changeset 588

Show
Ignore:
Timestamp:
11/08/07 18:06:13 (10 months ago)
Author:
seancribbs
Message:

Initial refactoring of region API in shards extension.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/extensions/shards/README

    r488 r588  
    11= Shards 
    22 
    3 Description goes here 
     3Created by: Sean Cribbs, September 2007 
     4 
     5The Shards extension creates insertion points called "regions" into the admin 
     6UI.  Other extensions can modify these regions by adding or removing partials 
     7in order to customize the UI and provide new or modify existing functionality. 
     8 
     9Regions are accessed via the "admin" object within an extension class.  If I 
     10wanted to add a partial to the top of the page editing screen, I would do 
     11so like this: 
     12 
     13  # Within the context of my extension class 
     14  def activate 
     15    admin.page.edit.add :main, "fuzzy_bears", :before => "edit_header" 
     16  end 
     17 
     18The "fuzzy_bears" partial name is relative to the Admin::PageController, so it 
     19should exist inside the app/views/admin/page directory in the extension. 
     20 
     21More details can be found on the Radiant wiki: 
     22 
     23http://wiki.radiantcms.org/UsingShardsExtension 
  • trunk/extensions/shards/app/views/admin/page/_edit_form.rhtml

    r571 r588  
    1 <form method="post" enctype="multipart/form-data"> 
    2   <%= hidden_field "page", "lock_version" %> 
    3   <%= render_region :form_top %> 
    4   <div class="form-area"> 
    5     <%= render_region :form %> 
    6   </div> 
    7   <%= render_region :form_bottom %> 
    8 </form> 
     1    <form method="post" enctype="multipart/form-data"> 
     2      <%= hidden_field "page", "lock_version" %> 
     3      <%= render_region :form_top %> 
     4      <div class="form-area"> 
     5        <% render_region :form do |form| %> 
     6          <% form.edit_title do %> 
     7            <p class="title"> 
     8              <label for="page_title">Page Title</label> 
     9              <%= text_field "page", "title", :class => 'textbox', :maxlength => 255 %> 
     10            </p>  
     11          <% end %> 
     12          <% form.edit_extended_metadata do %> 
     13            <div id="extended-metadata" class="row"<%= meta_visible(:meta) %>> 
     14              <table class="fieldset"> 
     15                <% for meta in @meta %> 
     16                  <%= render :partial => "meta_row", :object => meta %> 
     17                <% end %> 
     18                <%= render_region :extended_metadata %> 
     19              </table> 
     20            </div> 
     21            <p class="more-or-less"> 
     22              <small> 
     23                <a href="#" onclick="<%= toggle_javascript_for('extended-metadata') %>"<%= meta_visible(:meta_more) %> id="more-extended-metadata">More</a> 
     24                <a href="#" onclick="<%= toggle_javascript_for('extended-metadata') %>"<%= meta_visible(:meta_less) %> id="less-extended-metadata">Less</a> 
     25              </small> 
     26            </p> 
     27          <% end %> 
     28          <% form.edit_page_parts do %> 
     29            <div id="tab-control"> 
     30              <div id="tabs" class="tabs"> 
     31                <div id="tab-toolbar"> 
     32                  <%= link_to image('plus'), 'javascript:toggle_add_part_popup()', :title => 'Add Tab' %> 
     33                  <%= link_to image('minus'), 'javascript:tabControl.removeTab(tabControl.selected)', :title => 'Remove Tab', :confirm => 'Delete the current tab?' %> 
     34                </div> 
     35              </div> 
     36              <div id="pages" class="pages"> 
     37            <%= render :partial => 'part', :collection => @page.parts %> 
     38              </div> 
     39            </div> 
     40            <% render_region :parts_bottom do |parts_bottom| %> 
     41              <% parts_bottom.edit_layout_and_type do %> 
     42                <div class="row"> 
     43                  <p><label for="page_layout_id">Layout</label> 
     44                    <%= select "page", "layout_id", [['<inherit>', '']] + Layout.find(:all).map { |s| [s.name, s.id] } %></p> 
     45                  <p><label for="page_class_name">Page Type</label> 
     46                    <%= select "page", "class_name", [['<normal>', 'Page']] + Page.descendants.map { |p| [p.display_name, p.name] }.sort_by { |p| p.first } %></p> 
     47                  <p><label for="page_status_id">Status</label> 
     48                    <%= select "page", "status_id", Status.find_all.map { |s| [s.name, s.id] } %></p> 
     49                  <%= render_region :layout_row %> 
     50                </div> 
     51                <span class="clear">&nbsp;</span> 
     52              <% end %> 
     53              <% parts_bottom.edit_timestamp do %> 
     54                <%= updated_stamp @page %> 
     55              <% end %> 
     56            <% end %>  
     57          <% end %> 
     58        <% end %> 
     59      </div> 
     60      <% render_region :form_bottom do |form_bottom| %> 
     61        <% form_bottom.edit_buttons do %> 
     62          <p class="buttons"> 
     63            <% @buttons_partials.each do |partial| %> 
     64              <%= render :partial => partial %> 
     65            <% end %>   
     66            <%= save_model_button(@page) %>  
     67            <%= save_model_and_continue_editing_button(@page) %>  
     68            or  
     69            <%= link_to "Cancel", page_index_url %> 
     70            <%= render_region :buttons %> 
     71          </p> 
     72        <% end %> 
     73      <% end %> 
     74    </form> 
  • trunk/extensions/shards/app/views/admin/page/edit.rhtml

    r488 r588  
    1 <%= render_region :main %> 
     1<% render_region :main do |main| %> 
     2  <% main.edit_header do %> 
     3    <% if @page.new_record? -%> 
     4    <h1 id="new_page">New Page</h1> 
     5    <% else -%> 
     6    <h1 id="edit_page">Edit Page</h1> 
     7    <% end -%> 
     8  <% end %> 
     9<% end %> 
    210<%= render :partial => "edit_scripts_and_styles" %> 
  • trunk/extensions/shards/app/views/admin/page/index.rhtml

    r561 r588  
    55  <thead> 
    66    <tr> 
    7       <%= render_region :sitemap_head %> 
     7      <% render_region :sitemap_head do |sitemap_head| %> 
     8        <% sitemap_head.index_sitemap_column_headers do %> 
     9          <th class="page">Page</th> 
     10          <th class="status">Status</th> 
     11          <th class="modify" colspan="2">Modify</th> 
     12        <% end %> 
     13      <% end %> 
    814    </tr> 
    915  </thead> 
  • trunk/extensions/shards/lib/shards/helper_extensions.rb

    r567 r588  
    11module Shards::HelperExtensions 
    2   def render_region(region, options={}) 
    3     @controller_name ||= @controller.controller_name 
    4     @template_name ||= File.basename(@first_render).split(".").last 
    5     admin.send(@controller_name).send(@template_name)[region].compact.map do |partial| 
    6       render options.merge(:partial => partial) 
     2  def render_region(region, options={}, &block) 
     3    lazy_initialize_region_set     
     4    default_partials = Shards::RegionPartials.new(@template) 
     5    if block_given? 
     6      junk = capture(default_partials, &block)  
     7      (options[:locals] ||= {}).merge!(:defaults => default_partials) 
     8    end 
     9    output = @region_set[region].compact.map do |partial| 
     10      begin 
     11        render options.merge(:partial => partial) 
     12      rescue ::ActionView::TemplateError => e # error in template 
     13        raise e 
     14      rescue ::ActionView::ActionViewError # couldn't find template 
     15        default_partials[partial] 
     16      end 
    717    end.join 
     18    block_given? ? concat(output, block.binding) : output 
     19  end 
     20   
     21  def lazy_initialize_region_set 
     22    unless @region_set 
     23      @controller_name ||= @controller.controller_name 
     24      @template_name ||= File.basename(@first_render).split(".").last 
     25      @region_set = admin.send(@controller_name).send(@template_name) 
     26    end 
    827  end 
    928end