Changeset 870
- Timestamp:
- 05/16/08 15:13:20 (3 months ago)
- Files:
-
- trunk/radiant/app/helpers/admin/regions_helper.rb (added)
- trunk/radiant/app/helpers/application_helper.rb (modified) (1 diff)
- trunk/radiant/app/views/admin/layout/edit.html.haml (modified) (1 diff)
- trunk/radiant/app/views/admin/page/_node.html.haml (modified) (1 diff)
- trunk/radiant/app/views/admin/page/_part.html.haml (modified) (1 diff)
- trunk/radiant/app/views/admin/page/edit.html.haml (modified) (1 diff)
- trunk/radiant/app/views/admin/page/index.html.haml (modified) (2 diffs)
- trunk/radiant/app/views/admin/snippet/edit.html.haml (modified) (1 diff)
- trunk/radiant/app/views/admin/user/edit.html.haml (modified) (1 diff)
- trunk/radiant/lib/radiant/admin_ui (added)
- trunk/radiant/lib/radiant/admin_ui.rb (modified) (2 diffs)
- trunk/radiant/lib/radiant/admin_ui/region_partials.rb (added)
- trunk/radiant/lib/radiant/admin_ui/region_set.rb (added)
- trunk/radiant/spec/controllers/admin/abstract_model_controller_spec.rb (modified) (1 diff)
- trunk/radiant/spec/helpers/admin/regions_helper_spec.rb (added)
- trunk/radiant/spec/helpers/application_helper_spec.rb (modified) (1 diff)
- trunk/radiant/spec/lib/radiant/admin_ui (added)
- trunk/radiant/spec/lib/radiant/admin_ui/region_partials_spec.rb (added)
- trunk/radiant/spec/lib/radiant/admin_ui/region_set_spec.rb (added)
- trunk/radiant/spec/lib/radiant/admin_ui_spec.rb (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/radiant/app/helpers/application_helper.rb
r865 r870 1 1 module ApplicationHelper 2 2 include LocalTime 3 include Admin::RegionsHelper 3 4 4 5 def config trunk/radiant/app/views/admin/layout/edit.html.haml
r865 r870 1 - if @layout.new_record? 2 %h1 New Layout 3 - else 4 %h1 Edit Layout 1 - render_region :main do |main| 2 - main.edit_header do 3 - if @layout.new_record? 4 %h1 New Layout 5 - else 6 %h1 Edit Layout 7 - main.edit_form do 8 - form_tag do 9 .form-area 10 = render_region :form_top 11 = hidden_field 'layout', 'lock_version' 12 - render_region :form do |form| 13 - form.edit_title do 14 %p.title 15 %label{:for=>"layout_name"} Name 16 = text_field 'layout', 'name', :maxlength => 100, :class => "textbox" 17 - form.edit_extended_metadata do 18 #extended-metadata.row{meta_visible(:meta)} 19 %table.fieldset{:cellpadding=>"0", :cellspacing=>"0", :border=>"0"} 20 %tr 21 %th.label 22 %label{:for=>"layout_content_type"} Content‑Type 23 %td.field 24 = text_field 'layout', 'content_type', :maxlength => 40, :class => "textbox" 25 = render_region :extended_metadata 26 %p.more-or-less 27 %small 28 %a#more-extended-metadata{meta_visible(:meta_more), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} More 29 %a#less-extended-metadata{meta_visible(:meta_less), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} Less 30 - form.edit_content do 31 %p.content 32 %label{:for=>"layout_content"} Body 33 ~ text_area 'layout', 'content', :size => '40x20', :style => 'width: 100%', :class => "textarea" 34 - form.edit_timestamp do 35 = updated_stamp @layout 5 36 6 - form_tag do 7 8 .form-area 9 = hidden_field 'layout', 'lock_version' 10 %p.title 11 %label{:for=>"layout_name"} Name 12 = text_field 'layout', 'name', :maxlength => 100, :class => "textbox" 13 14 #extended-metadata.row{meta_visible(:meta)} 15 %table.fieldset{:cellpadding=>"0", :cellspacing=>"0", :border=>"0"} 16 %tr 17 %th.label 18 %label{:for=>"layout_content_type"} Content‑Type 19 %td.field 20 = text_field 'layout', 'content_type', :maxlength => 40, :class => "textbox" 21 22 %p.more-or-less 23 %small 24 %a#more-extended-metadata{meta_visible(:meta_more), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} More 25 %a#less-extended-metadata{meta_visible(:meta_less), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} Less 26 27 %p.content 28 %label{:for=>"layout_content"} Body 29 ~ text_area 'layout', 'content', :size => '40x20', :style => 'width: 100%', :class => "textarea" 30 = updated_stamp @layout 31 32 = javascript_tag "$('layout_name').activate()" 33 34 %p.buttons 35 = save_model_button @layout 36 = save_model_and_continue_editing_button @layout 37 or 38 = link_to "Cancel", layout_index_url 37 = javascript_tag "$('layout_name').activate()" 38 - render_region :form_bottom do |form_bottom| 39 - form_bottom.edit_buttons do 40 %p.buttons 41 = save_model_button @layout 42 = save_model_and_continue_editing_button @layout 43 or 44 = link_to "Cancel", layout_index_url trunk/radiant/app/views/admin/page/_node.html.haml
r865 r870 1 1 %tr.node{:id => "page-#{page.id}", :class =>"level-#{level}#{children_class}#{virtual_class}"} 2 %td.page{:style => "padding-left: #{padding_left(level)}px"} 3 %span.w1 4 - if simple 5 = icon 6 = node_title 7 - else 8 = expander + link_to("#{icon} #{node_title}", page_edit_url(:id => page), :title => page.url) 9 = page_type 10 = spinner 11 - unless simple 12 %td.status{:class => "#{page.status.name.downcase}-status"}= page.status.name 13 %td.add-child= link_to image('add-child', :alt => 'add child'), page_new_url(:parent_id => page) 14 %td.remove= link_to image('remove', :alt => 'remove page'), page_remove_url(:id => page) 2 - render_region :node, :locals => {:page => page, :level => level, :simple => simple} do |node| 3 - node.title_column do 4 %td.page{:style => "padding-left: #{padding_left(level)}px"} 5 %span.w1 6 - if simple 7 = icon 8 = node_title 9 - else 10 = expander + link_to("#{icon} #{node_title}", page_edit_url(:id => page), :title => page.url) 11 = page_type 12 = spinner 13 - node.status_column do 14 - unless simple 15 %td.status{:class => "#{page.status.name.downcase}-status"}= page.status.name 16 - node.add_child_column do 17 - unless simple 18 %td.add-child= link_to image('add-child', :alt => 'add child'), page_new_url(:parent_id => page) 19 - node.remove_column do 20 - unless simple 21 %td.remove= link_to image('remove', :alt => 'remove page'), page_remove_url(:id => page) 15 22 16 23 - if expanded trunk/radiant/app/views/admin/page/_part.html.haml
r865 r870 12 12 %span{:id => "tag-reference-link-#{@index}"} 13 13 = link_to_function 'Available Tags', "load_tag_reference(#{@index});" 14 = render_region :part_controls 14 15 %div 15 16 ~ text_area_tag "part[#{@index}][content]", h(part.content), :class => "textarea", :style => "width: 100%", :id => "part_#{@index}_content" trunk/radiant/app/views/admin/page/edit.html.haml
r865 r870 14 14 .textbox 15 15 width: 90% 16 - if @page.new_record? 17 %h1 New Page 18 - else 19 %h1 Edit Page 16 - render_region :main do |main| 17 - main.edit_header do 18 - if @page.new_record? 19 %h1 New Page 20 - else 21 %h1 Edit Page 22 - main.edit_form do 23 - form_tag({}, {:multipart => true}) do 24 = hidden_field 'page', 'lock_version' 25 = render_region :form_top 26 .form-area 27 - render_region :form do |form| 28 - form.edit_title do 29 %p.title 30 %label{:for=>"page_title"} 31 Page Title 32 = text_field "page", "title", :class => 'textbox', :maxlength => 255 33 - form.edit_extended_metadata do 34 #extended-metadata.row{meta_visible(:meta)} 35 %table.fieldset 36 = render :partial => "meta_row", :collection => @meta 37 = render_region :extended_metadata 38 %p.more-or-less 39 %small 40 %a#more-extended-metadata{meta_visible(:meta_more), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} More 41 %a#less-extended-metadata{meta_visible(:meta_less), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} Less 42 - form.edit_page_parts do 43 #tab-control 44 #tabs.tabs 45 #tab-toolbar 46 = link_to_function image('plus', :alt => 'plus'), 'toggle_add_part_popup()', :title => 'Add Tab' 47 = link_to_function image('minus', :alt => 'minus'), 'if(confirm(\'Delete the current tab?\')) { tabControl.removeTab(tabControl.selected) }', :title => 'Remove Tab' 20 48 21 - form_tag({}, {:multipart => true}) do 22 = hidden_field 'page', 'lock_version' 23 .form-area 24 %p.title 25 %label{:for=>"page_title"} 26 Page Title 27 = text_field "page", "title", :class => 'textbox', :maxlength => 255 49 #pages.pages 50 = render :partial => 'part', :collection => @page.parts 51 - render_region :parts_bottom do |parts_bottom| 52 - parts_bottom.edit_layout_and_type do 53 .row 54 %p 55 %label{:for=>"page_layout_id"} 56 Layout 57 = select "page", "layout_id", [['<inherit>', '']] + Layout.find(:all).map { |s| [s.name, s.id] } 58 %p 59 %label{:for=>"page_class_name"} 60 Page Type 61 = select "page", "class_name", [['<normal>', 'Page']] + Page.descendants.map { |p| [p.display_name, p.name] }.sort_by { |p| p.first } 62 %p 63 %label{:for=>"page_status_id"} 64 Status 65 = select "page", "status_id", Status.find_all.map { |s| [s.name, s.id] }, {} 66 %p#publication-date{:style => "display: none"} 67 %label{:for=>"page_published_at"} 68 Published At 69 = datetime_select "page", "published_at", :disabled => true 70 = render_region :layout_row 71 %span.clear 72 - parts_bottom.edit_timestamp do 73 = updated_stamp @page 74 - render_region :form_bottom do |form_bottom| 75 - form_bottom.edit_buttons do 76 - @buttons_partials.each do |partial| 77 = render :partial => partial 78 %p.buttons 79 = save_model_button(@page) 80 = save_model_and_continue_editing_button(@page) 81 or 82 = link_to 'Cancel', page_index_url 83 - main.edit_popups do 84 - content_for 'popups' do 85 #add-part-popup.popup{:style => "display: none"} 86 #busy.busy{:style => "display: none"}= image 'spinner.gif' 87 %h3 Add Part 88 - form_remote_tag(:url => page_add_part_url, :update => "pages", :position => :bottom, :loading => 'part_loading()', :complete => 'part_added()', :condition => 'valid_part_name()') do 89 %div 90 = hidden_field_tag 'index', @index, :id => 'part-index-field' 91 = text_field_tag "part[name]", "", :id => 'part-name-field', :maxlength => 100 92 = submit_tag "Add Part", :id => 'add-part-button' 93 %p 94 = link_to_function 'Close', "$(this).up('.popup').hide()", :class => 'close-link' 28 95 29 #extended-metadata.row{meta_visible(:meta)} 30 %table.fieldset 31 = render :partial => "meta_row", :collection => @meta 96 #tag-reference-popup.popup{ :style => "display:none;" } 97 %div{ :style => "float:right" } 98 %label{:for=> 'search-tag-reference'} Search Tags: 99 %input#search-tag-reference{ :type => "text" }/ 100 %h3 101 Available Tags for 102 %span#page-type= @page.class.display_name 103 #tag-reference= tag_reference(@page.class.name) 104 %p 105 = link_to 'Close', '#', :class => 'close' 32 106 33 %p.more-or-less 34 %small 35 %a#more-extended-metadata{meta_visible(:meta_more), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} More 36 %a#less-extended-metadata{meta_visible(:meta_less), :href => "#", :onclick=>toggle_javascript_for('extended-metadata')} Less 37 38 #tab-control 39 #tabs.tabs 40 #tab-toolbar 41 = link_to_function image('plus', :alt => 'plus'), 'toggle_add_part_popup()', :title => 'Add Tab' 42 = link_to_function image('minus', :alt => 'minus'), 'if(confirm(\'Delete the current tab?\')) { tabControl.removeTab(tabControl.selected) }', :title => 'Remove Tab' 43 44 #pages.pages 45 = render :partial => 'part', :collection => @page.parts 46 47 .row 48 %p 49 %label{:for=>"page_layout_id"} 50 Layout 51 = select "page", "layout_id", [['<inherit>', '']] + Layout.find(:all).map { |s| [s.name, s.id] } 52 %p 53 %label{:for=>"page_class_name"} 54 Page Type 55 = select "page", "class_name", [['<normal>', 'Page']] + Page.descendants.map { |p| [p.display_name, p.name] }.sort_by { |p| p.first } 56 %p 57 %label{:for=>"page_status_id"} 58 Status 59 = select "page", "status_id", Status.find_all.map { |s| [s.name, s.id] }, {} 60 %p#publication-date{:style => "display: none"} 61 %label{:for=>"page_published_at"} 62 Published At 63 = datetime_select "page", "published_at", :disabled => true 64 %span.clear 65 = updated_stamp @page 66 67 - @buttons_partials.each do |partial| 68 = render :partial => partial 69 70 %p.buttons 71 = save_model_button(@page) 72 = save_model_and_continue_editing_button(@page) 73 or 74 = link_to 'Cancel', page_index_url 75 76 - content_for 'popups' do 77 #add-part-popup.popup{:style => "display: none"} 78 #busy.busy{:style => "display: none"}= image 'spinner.gif' 79 %h3 Add Part 80 - form_remote_tag(:url => page_add_part_url, :update => "pages", :position => :bottom, :loading => 'part_loading()', :complete => 'part_added()', :condition => 'valid_part_name()') do 81 %div 82 = hidden_field_tag 'index', @index, :id => 'part-index-field' 83 = text_field_tag "part[name]", "", :id => 'part-name-field', :maxlength => 100 84 = submit_tag "Add Part", :id => 'add-part-button' 85 %p 86 = link_to_function 'Close', "$(this).up('.popup').hide()", :class => 'close-link' 87 88 #tag-reference-popup.popup{ :style => "display:none;" } 89 %div{ :style => "float:right" } 90 %label{:for=> 'search-tag-reference'} Search Tags: 91 %input#search-tag-reference{ :type => "text" }/ 92 %h3 93 Available Tags for 94 %span#page-type= @page.class.display_name 95 #tag-reference= tag_reference(@page.class.name) 96 %p 97 = link_to 'Close', '#', :class => 'close' 98 99 #filter-reference-popup.popup{ :style => "display:none;" } 100 %h3 101 %span#filter-type= default_filter_name 102 Reference 103 #filter-reference= filter_reference(default_filter_name) 104 %p 105 = link_to_function 'Close', "Element.hide('filter-reference-popup')", :class => 'close-link' 107 #filter-reference-popup.popup{ :style => "display:none;" } 108 %h3 109 %span#filter-type= default_filter_name 110 Reference 111 #filter-reference= filter_reference(default_filter_name) 112 %p 113 = link_to_function 'Close', "Element.hide('filter-reference-popup')", :class => 'close-link' 114 = render_region :popups trunk/radiant/app/views/admin/page/index.html.haml
r865 r870 3 3 %h1 Pages 4 4 5 = render_region :top 6 5 7 %table#site-map.index{:summary=>"Page hierarchy of the current site"} 6 8 %thead 7 9 %tr 8 %th.page Page 9 %th.status Status 10 %th.modify{:colspan=>"2"} Modify 10 - render_region :sitemap_head do |sitemap_head| 11 - sitemap_head.title_column_header do 12 %th.page Page 13 - sitemap_head.status_column_header do 14 %th.status Status 15 - sitemap_head.modify_column_header do 16 %th.modify{:colspan=>"2"} Modify 11 17 %tbody 12 18 - if @homepage … … 16 22 %td.note{:colspan => 4} No Pages 17 23 24 = render_region :bottom 25 18 26 - unless @homepage 19 27 %p trunk/radiant/app/views/admin/snippet/edit.html.haml
r865 r870 1 - if @snippet.new_record? 2 %h1 New Snippet 3 - else 4 %h1 Edit Snippet 1 - render_region :main do |main| 2 - main.edit_header do 3 - if @snippet.new_record? 4 %h1 New Snippet 5 - else 6 %h1 Edit Snippet 7 - main.edit_form do 8 - form_tag do 9 = hidden_field 'snippet', 'lock_version' 10 = render_region :form_top 11 .form-area 12 - render_region :form do |form| 13 - form.edit_title do 14 %p.title 15 %label{:for=>"snippet_name"} Name 16 = text_field "snippet", "name", :class => 'textbox', :maxlength => 100 17 - form.edit_content do 18 %p.content 19 %label{:for=>"snippet_content"} Body 20 ~ text_area "snippet", "content", :class => "textarea", :style => "width: 100%" 21 - form.edit_filter do 22 %p 23 %label{:for=>"snippet_filter"} Filter 24 = select_tag "snippet[filter_id]", options_for_select([['none', '']] + TextFilter.descendants.map { |f| f.filter_name }.sort, @snippet.filter_id), :id => 'snippet_filter' 25 - form.edit_timestamp do 26 = updated_stamp @snippet 5 27 6 - form_tag do 7 = hidden_field 'snippet', 'lock_version' 8 .form-area 9 10 %p.title 11 %label{:for=>"snippet_name"} Name 12 = text_field "snippet", "name", :class => 'textbox', :maxlength => 100 13 14 %p.content 15 %label{:for=>"snippet_content"} Body 16 ~ text_area "snippet", "content", :class => "textarea", :style => "width: 100%" 17 18 %p 19 %label{:for=>"snippet_filter"} Filter 20 = select_tag "snippet[filter_id]", options_for_select([['none', '']] + TextFilter.descendants.map { |f| f.filter_name }.sort, @snippet.filter_id), :id => 'snippet_filter' 21 22 = updated_stamp @snippet 23 24 = javascript_tag "$('snippet_name').activate()" 25 26 %p.buttons 27 = save_model_button(@snippet) 28 = save_model_and_continue_editing_button(@snippet) 29 or 30 = link_to 'Cancel', snippet_index_url 28 = javascript_tag "$('snippet_name').activate()" 29 30 - render_region :form_bottom do |form_bottom| 31 - form_bottom.edit_buttons do 32 %p.buttons 33 = save_model_button(@snippet) 34 = save_model_and_continue_editing_button(@snippet) 35 or 36 = link_to 'Cancel', snippet_index_url trunk/radiant/app/views/admin/user/edit.html.haml
r865 r870 1 - if @user.new_record? 2 %h1 New User 3 - else 4 %h1 Edit User 5 6 - form_tag do 7 = hidden_field 'user', 'lock_version' 8 %table.fieldset{:cellpadding=>0, :cellspacing=>0, :border=>0} 9 %tr 10 %th.label 11 %label{:for=>"user_name"} Name 12 %td.field 13 = text_field "user", "name", :class => 'textbox', :maxlength => 100 14 %td.help Required. 15 %tr 16 %th.label 17 %label.optional{:for=>"user_email"} E-mail 18 %td.field 19 = text_field "user", "email", :class => 'textbox', :maxlength => 255 20 %td.help 21 Optional. Please use a valid e-mail address. 22 %tr 23 %th.label 24 %label{:for=>"user_login"} Username 25 %td.field 26 = text_field "user", "login", :class => 'textbox', :maxlength => 40 27 %td.help 28 At least 3 characters. Must be unique. 29 %tr 30 %th.label 31 %label{:for=>"user_password"} Password 32 %td.field 33 = password_field "user", "password", :class => 'textbox', :value => '', :maxlength => 40 34 %td.help{:rowspan=>2} 35 At least 5 characters. 36 - unless @user.new_record? 37 Leave password blank for it to remain unchanged. 38 %tr 39 %th.label 40 %label{:for=>"user_password_confirmation"} Confirm Password 41 %td.field 42 = password_field "user", "password_confirmation", :class => 'textbox', :value => '', :maxlength => 40 43 %tr 44 %th.label 45 %label{:for=>"user_admin"} Roles 46 %td.field 47 %span.checkbox 48 = check_box "user", "admin" 49 %label{:for=> "user_admin"} Administrator 50 %span.checkbox 51 = check_box "user", "developer" 52 %label{:for=> "user_developer"} Developer 53 %td.help 54 Roles restrict user privileges and turn parts of the administrative interface on or off. 55 %tr 56 %th.label 57 %label.optional{:for=>"user_notes"} Notes 58 %td.field 59 ~ text_area "user", "notes", :size => '40x4', :class => "textarea" 60 %td.help 61 Optional. 62 63 = updated_stamp @user 64 65 %p.buttons 66 = save_model_button(@user) 67 = save_model_and_continue_editing_button(@user) 68 or 69 = link_to "Cancel", user_index_url 1 - render_region :main do |main| 2 - main.edit_header do 3 - if @user.new_record? 4 %h1 New User 5 - else 6 %h1 Edit User 7 - main.edit_form do 8 - form_tag do 9 = hidden_field 'user', 'lock_version' 10 = render_region :form_top 11 %table.fieldset{:cellpadding=>0, :cellspacing=>0, :border=>0} 12 - render_region :form do |form| 13 - form.edit_name do 14 %tr 15 %th.label 16 %label{:for=>"user_name"} Name 17 %td.field 18 = text_field "user", "name", :class => 'textbox', :maxlength => 100 19 %td.help Required. 20 - form.edit_email do 21 %tr 22 %th.label 23 %label.optional{:for=>"user_email"} E-mail 24 %td.field 25 = text_field "user", "email", :class => 'textbox', :maxlength => 255 26 %td.help 27 Optional. Please use a valid e-mail address. 28 - form.edit_username do 29 %tr 30 %th.label 31 %label{:for=>"user_login"} Username 32 %td.field 33 = text_field "user", "login", :class => 'textbox', :maxlength => 40 34 %td.help 35 At least 3 characters. Must be unique. 36 - form.edit_password do 37 %tr 38 %th.label 39 %label{:for=>"user_password"} Password 40 %td.field 41 = password_field "user", "password", :class => 'textbox', :value => '', :maxlength => 40 42 %td.help{:rowspan=>2} 43 At least 5 characters. 44 - unless @user.new_record? 45 Leave password blank for it to remain unchanged. 46 %tr 47 %th.label 48 %label{:for=>"user_password_confirmation"} Confirm Password 49 %td.field 50 = password_field "user", "password_confirmation", :class => 'textbox', :value => '', :maxlength => 40 51 - form.edit_roles do 52 %tr 53 %th.label 54 %label{:for=>"user_admin"} Roles 55 %td.field 56 %span.checkbox 57 = check_box "user", "admin" 58 %label{:for=> "user_admin"} Administrator 59 %span.checkbox 60 = check_box "user", "developer" 61 %label{:for=> "user_developer"} Developer 62 %td.help 63 Roles restrict user privileges and turn parts of the administrative interface on or off. 64 - form.edit_notes do 65 %tr 66 %th.label 67 %label.optional{:for=>"user_notes"} Notes 68 %td.field 69 ~ text_area "user", "notes", :size => '40x4', :class => "textarea" 70 %td.help 71 Optional. 72 - render_region :form_bottom do |form_bottom| 73 - form_bottom.edit_timestamp do 74 = updated_stamp @user 75 - form_bottom.edit_buttons do 76 %p.buttons 77 = save_model_button(@user) 78 = save_model_and_continue_editing_button(@user) 79 or 80 = link_to "Cancel", user_index_url trunk/radiant/lib/radiant/admin_ui.rb
r405 r870 1 1 require 'simpleton' 2 require 'ostruct' 2 3 3 4 module Radiant 4 5 class AdminUI 6 # This may be loaded before ActiveSupport, so do an explicit require 7 require 'radiant/admin_ui/region_set' 5 8 6 9 class DuplicateTabNameError < StandardError; end … … 75 78 attr_accessor :tabs 76 79 80 # Region sets 81 attr_accessor :page, :snippet, :layout, :user 82 77 83 def initialize 78 84 @tabs = TabSet.new 85 load_default_regions 79 86 end 80 87 88 private 89 90 def load_default_regions 91 @page = load_default_page_regions 92 @snippet = load_default_snippet_regions 93 @layout = load_default_layout_regions 94 @user = load_default_user_regions 95 end 96 97 def load_default_page_regions 98 returning OpenStruct.new do |page| 99 page.edit = RegionSet.new do |edit| 100 edit.main.concat %w{edit_header edit_form edit_popups} 101 edit.form.concat %w{edit_title edit_extended_metadata 102 edit_page_parts} 103 edit.form_bottom.concat %w{edit_buttons} 104 edit.parts_bottom.concat %w{edit_layout_and_type edit_timestamp} 105 end 106 page.index = RegionSet.new do |index| 107 index.sitemap_head.concat %w{title_column_header status_column_header 108 modify_column_header} 109 index.node.concat %w{title_column status_column add_child_column remove_column} 110 end 111 page.remove = page.children = page.index 112 page._part = page.edit 113 end 114 end 115 116 def load_default_user_regions 117 returning OpenStruct.new do |user| 118 user.edit = RegionSet.new do |edit| 119 edit.main.concat %w{edit_header edit_form} 120 edit.form.concat %w{edit_name edit_email edit_username edit_password 121 edit_roles edit_notes} 122 edit.form_bottom.concat %w{edit_timestamp edit_buttons} 123 end 124 end 125 end 126 127 def load_default_snippet_regions 128 returning OpenStruct.new do |snippet| 129 snippet.edit = RegionSet.new do |edit| 130 edit.main.concat %w{edit_header edit_form} 131 edit.form.concat %w{edit_title edit_content edit_filter edit_timestamp} 132 edit.form_bottom.concat %w{edit_buttons} 133 end 134 end 135 end 136 137 def load_default_layout_regions 138 returning OpenStruct.new do |layout| 139 layout.edit = RegionSet.new do |edit| 140 edit.main.concat %w{edit_header edit_form} 141 edit.form.concat %w{edit_title edit_extended_metadata edit_content edit_timestamp} 142 edit.form_bottom.concat %w{edit_buttons} 143 end 144 end 145 end 81 146 end 82 147 end trunk/radiant/spec/controllers/admin/abstract_model_controller_spec.rb
r785 r870 10 10 "#{Admin::LayoutController.controller_path}/#{default_action_name}" 11 11 end 12 13 before_filter {|c| c.send(:instance_variable_set, "@controller_name", 'layout')} 12 14 end 13 15 trunk/radiant/spec/helpers/application_helper_spec.rb
r865 r870 164 164 admin.should == Radiant::AdminUI.instance 165 165 end 166 167 it "should include the regions helper" do 168 ApplicationHelper.included_modules.should include(Admin::RegionsHelper) 169 end 166 170 end trunk/radiant/spec/lib/radiant/admin_ui_spec.rb
r607 r870 3 3 describe Radiant::AdminUI do 4 4 before :each do 5 @admin = Radiant::AdminUI. instance5 @admin = Radiant::AdminUI.new 6 6 end 7 7 8 8 it "should be a Simpleton" do 9 9 Radiant::AdminUI.included_modules.should include(Simpleton) 10 10 Radiant::AdminUI.should respond_to(:instance) 11 11 end 12 12 13 13 it "should have a TabSet" do 14 14 @admin.should respond_to(:tabs) 15 15 @admin.tabs.should_not be_nil 16 16 @admin.tabs.should be_instance_of(Radiant::AdminUI::TabSet) 17 end 18 19 it "should have collections of Region Sets for every controller" do 20 %w{page snippet layout user}.each do |collection| 21 @admin.should respond_to(collection) 22 @admin.send(collection).should_not be_nil 23 @admin.send(collection).should be_kind_of(OpenStruct) 24 end 25 end 26 27 it "should load the default page regions" do 28 page = @admin.page 29 %w{edit remove children index}.each do |action| 30 page.send(action).should_not be_nil 31 page.send(action).should be_kind_of(Radiant::AdminUI::RegionSet) 32 end 33 page.edit.main.should == %w{edit_header edit_form edit_popups} 34 page.edit.form.should == %w{edit_title edit_extended_metadata 35 edit_page_parts} 36 page.edit.parts_bottom.should == %w{edit_layout_and_type edit_timestamp} 37 page.edit.form_bottom.should == %w{edit_buttons} 38 page.index.sitemap_head.should == %w{title_column_header 39 status_column_header 40 modify_column_header} 41 page.index.node.should == %w{title_column status_column add_child_column 42 remove_column} 43 page.remove.should === page.index 44 page.children.should === page.index 45 page._part.should === page.edit 46 end 47 48 it "should load the default snippet regions" do 49 snippet = @admin.snippet 50 snippet.edit.should_not be_nil 51 snippet.edit.main.should == %w{edit_header edit_form} 52 snippet.edit.form.should == %w{edit_title edit_content edit_filter 53 edit_timestamp} 54 snippet.edit.form_bottom.should == %w{edit_buttons} 55 end 56 57 it "should load the default layout regions" do 58 layout = @admin.layout 59 layout.edit.should_not be_nil 60 layout.edit.main.should == %w{edit_header edit_form} 61 layout.edit.form.should == %w{edit_title edit_extended_metadata 62 edit_content edit_timestamp} 63 layout.edit.form_bottom.should == %w{edit_buttons} 64 end 65 66 it "should load the default user regions" do 67 user = @admin.user 68 user.edit.should_not be_nil 69 user.edit.main.should == %w{edit_header edit_form} 70 user.edit.form.should == %w{edit_name edit_email edit_username 71 edit_password edit_roles edit_notes} 72 user.edit.form_bottom.should == %w{edit_timestamp edit_buttons} 17 73 end 18 74 end … … 31 87 @tabs.class.included_modules.should include(Enumerable) 32 88 end 33 89 34 90 it "should have its tabs accessible by name using brackets" do 35 91 @tabs.should respond_to(:[]) … … 39 95 end 40 96 end 41 97 42 98 it "should have its tabs accessible by index using brackets" do 43 99 @tab_names.each_with_index do |name, index| 44 100 @tabs[index].should be_instance_of(Radiant::AdminUI::Tab) 45 101 @tabs[index].name.should == name 46 end 102 end 47 103 end 48 104 49 105 it "should add new tabs to the end by default" do 50 106 @tabs.size.should == 3 … … 52 108 @tabs[3].name.should == "Test" 53 109 end 54 110 55 111 it "should add a new tab before the specified tab" do 56 112 @tabs[1].name.should == "Second" … … 59 115 @tabs[2].name.should == "Second" 60 116 end 61 117 62 118 it "should add a new tab after the specified tab" do 63 119 @tabs[1].name.should == "Second" … … 68 124 @tabs[3].name.should == "Third" 69 125 end 70 126 71 127 it "should remove a tab by name" do 72 128 @tabs.size.should == 3 … … 75 131 @tabs[1].name.should == "Third" 76 132 end 77 133 78 134 it "should not allow adding a tab with the same name as an existing tab" do 79 135 lambda { @tabs.add "First", "/first" }.should raise_error(Radiant::AdminUI::DuplicateTabNameError) 80 136 end 81 137 82 138 it "should remove all tabs when cleared" do 83 139 @tabs.size.should == 3 … … 100 156 end 101 157 end 102 158 103 159 it "should be shown only to admin users when visibility is admin" do 104 160 @tab.visibility = [:admin] … … 108 164 end 109 165 end 110 166 111 167 it "should be shown only to developer users when visibility is developer" do 112 168 @tab.visibility = [:developer] … … 114 170 [:existing, :another, :admin, :non_admin].each do |user| 115 171 @tab.should_not be_shown_for(users(user)) 116 end 172 end 117 173 end 118 174 119 175 it "should assign visibility from :for option when created" do 120 176 @tab = Radiant::AdminUI::Tab.new "Test", "/test", :for => :developer 121 177 @tab.visibility.should == [:developer] 122 178 end 123 179 124 180 it "should assign visibility from :visibility option when created" do 125 181 @tab = Radiant::AdminUI::Tab.new "Test", "/test", :visibility => :developer 126 182 @tab.visibility.should == [:developer] 127 183 end 128 184 129 185 it "should assign visibility from both :for and :visibility options when created" do 130 186 @tab = Radiant::AdminUI::Tab.new "Test", "/test", :for => :developer, :visibility => :admin
