browsercms 4.0.0.alpha → 4.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/bcms/ckeditor.js +1 -0
  3. data/app/assets/javascripts/bcms/{ckeditor_load.js.erb → ckeditor_load.js} +4 -1
  4. data/app/assets/javascripts/bcms/ckeditor_standard_config.js +1 -13
  5. data/app/assets/javascripts/cms/application.js +1 -0
  6. data/app/assets/javascripts/cms/{attachment_manager.js.erb → attachment_manager.js} +19 -13
  7. data/app/assets/javascripts/cms/content_types.js +13 -0
  8. data/app/assets/javascripts/cms/core_library.js.erb +3 -3
  9. data/app/assets/javascripts/cms/form_builder.js +1 -1
  10. data/app/assets/javascripts/cms/page_editor.js +9 -8
  11. data/app/assets/javascripts/cms/sitemap.js +5 -5
  12. data/app/assets/javascripts/cms/user.js +1 -1
  13. data/app/assets/stylesheets/cms/_assets.css.scss +5 -0
  14. data/app/assets/stylesheets/cms/_main-area.css.scss +1 -1
  15. data/app/assets/stylesheets/cms/_sitemap.css.scss +13 -0
  16. data/app/assets/stylesheets/cms/styles/_images.css.scss +11 -0
  17. data/app/controllers/cms/application_controller.rb +0 -1
  18. data/app/controllers/cms/content_controller.rb +3 -0
  19. data/app/controllers/cms/content_types_controller.rb +14 -0
  20. data/app/controllers/cms/inline_content_controller.rb +10 -8
  21. data/app/controllers/cms/passwords_controller.rb +5 -0
  22. data/app/controllers/cms/sites/passwords_controller.rb +5 -0
  23. data/app/helpers/cms/content_types_helper.rb +4 -0
  24. data/app/helpers/cms/form_tag_helper.rb +9 -1
  25. data/app/helpers/cms/page_helper.rb +2 -6
  26. data/app/helpers/cms/path_helper.rb +9 -0
  27. data/app/helpers/cms/section_nodes_helper.rb +1 -1
  28. data/app/inputs/name_input.rb +42 -0
  29. data/app/models/cms/attachment.rb +1 -0
  30. data/app/models/cms/content_type.rb +6 -0
  31. data/app/models/cms/dynamic_view.rb +2 -1
  32. data/app/models/cms/page.rb +6 -0
  33. data/app/models/cms/persistent_user.rb +1 -0
  34. data/app/models/cms/section_node.rb +8 -0
  35. data/app/models/cms/user.rb +9 -0
  36. data/app/portlets/helpers/cms/list_portlet_helper.rb +5 -0
  37. data/app/portlets/list_portlet.rb +40 -0
  38. data/app/views/cms/application/_add_content_modal.html.erb +2 -2
  39. data/app/views/cms/application/_exception.html.erb +1 -1
  40. data/app/views/cms/attachments/_attachment.html.erb +8 -6
  41. data/app/views/cms/attachments/_attachment_manager.html.erb +35 -18
  42. data/app/views/cms/attachments/_attachment_table.html.erb +12 -7
  43. data/app/views/cms/content/editing_frame.html.erb +1 -1
  44. data/app/views/cms/content_block/_sidebar.html.erb +2 -1
  45. data/app/views/cms/content_types/_order_field.html.erb +5 -0
  46. data/app/views/cms/content_types/index.html.erb +3 -0
  47. data/app/views/cms/forms/_form.html.erb +3 -2
  48. data/app/views/cms/pages/_main_form.html.erb +1 -1
  49. data/app/views/cms/passwords/new.html.erb +16 -0
  50. data/app/views/cms/section_nodes/_children.html.erb +2 -0
  51. data/app/views/cms/section_nodes/_row_buttons.html.erb +1 -1
  52. data/app/views/cms/section_nodes/_section_node.html.erb +1 -1
  53. data/app/views/cms/sessions/new.html.erb +10 -11
  54. data/app/views/layouts/cms/application.html.erb +4 -1
  55. data/app/views/portlets/email_page/_form.html.erb +1 -1
  56. data/app/views/portlets/email_page/render.html.erb +1 -1
  57. data/app/views/portlets/list/_form.html.erb +33 -0
  58. data/app/views/portlets/list/_list.html.erb +6 -0
  59. data/app/views/portlets/list/_table.html.erb +13 -0
  60. data/app/views/portlets/list/render.html.erb +1 -0
  61. data/app/views/portlets/tag_cloud/_form.html.erb +1 -1
  62. data/config/routes.rb +10 -5
  63. data/db/browsercms.seeds.rb +10 -8
  64. data/db/migrate/20130327184912_browsercms400.rb +30 -0
  65. data/doc/features/simple_form_refactor.md +2 -2
  66. data/doc/release_notes.md +38 -1
  67. data/lib/cms/acts/cms_user.rb +2 -2
  68. data/lib/cms/authentication/test_password_strategy.rb +10 -1
  69. data/lib/cms/behaviors/connecting.rb +20 -9
  70. data/lib/cms/commands/actions.rb +1 -3
  71. data/lib/cms/configuration.rb +2 -1
  72. data/lib/cms/configure_simple_form_bootstrap.rb +9 -0
  73. data/lib/cms/engine.rb +14 -5
  74. data/lib/cms/route_extensions.rb +2 -0
  75. data/lib/cms/version.rb +1 -1
  76. data/lib/generators/cms/content_block/content_block_generator.rb +21 -0
  77. data/lib/generators/cms/content_block/templates/_form.html.erb +1 -1
  78. data/lib/generators/cms/content_block/templates/application_controller.rb.erb +4 -0
  79. data/lib/generators/cms/content_block/templates/render.html.erb +22 -20
  80. data/lib/generators/cms/portlet/templates/_form.html.erb +3 -3
  81. data/lib/generators/cms/portlet/templates/portlet.rb +2 -0
  82. metadata +25 -15
  83. data/app/inputs/cms_text_field_input.rb +0 -29
  84. data/db/migrate/20131206214021_devise_create_users.rb +0 -47
  85. data/db/migrate/20131211223908_kill_reset_password.rb +0 -5
  86. data/db/migrate/20131218222005_create_cms_external_users.rb +0 -10
@@ -8,14 +8,22 @@ module Cms
8
8
  # support.
9
9
  def content_block_form_for(object, *args, &block)
10
10
  options = args.extract_options!
11
- simple_form_for(engine_aware_path(object), *(args << options.merge(builder: Cms::FormBuilder::ContentBlockFormBuilder)), &block)
11
+ simple_form_for(engine_aware_path(object), *(args << options.merge(builder: Cms::FormBuilder::ContentBlockFormBuilder, wrapper: 'browsercms')), &block)
12
12
  end
13
13
 
14
+ # Simple wrapper for Rails form_for that will use the CMS CustomFormBuilder.
15
+ # Can be used by portlets or other random public facing views to render content.
16
+ def cms_form_for(*args, &block)
17
+ options = args.extract_options!
18
+ options.merge!(:builder => Cms::FormBuilder::ContentBlockFormBuilder)
19
+ form_for(*(args + [options]), &block)
20
+ end
14
21
 
15
22
  def forecasting_a_new_section?(form_object)
16
23
  Cms::Section.with_path(form_object.object.class.path).first.nil?
17
24
  end
18
25
 
26
+
19
27
  def slug_source_if(boolean)
20
28
  if boolean
21
29
  {input_html: {class: 'slug-source'}}
@@ -26,13 +26,9 @@ module Cms
26
26
  # Return the JS file to load the configured default WYSIWYG editor
27
27
  #
28
28
  # Ideally, this could be improved if sprockets allows for dynamically determining which js library to use.
29
- # @return [Array] Names of the JS files need to load the editor.
29
+ # @return [String] Names of the JS file needed to load the editor.
30
30
  def cms_content_editor
31
- if Cms.content_editor.is_a?(Array)
32
- Cms.content_editor
33
- else
34
- "bcms/#{Cms.content_editor}" # Handles existing FCKEditor behavior
35
- end
31
+ "bcms/#{Cms.content_editor}"
36
32
  end
37
33
 
38
34
  # Outputs the title for this page. Used by both internal CMS pages, as well as page templates. Call use_page_title to
@@ -5,6 +5,15 @@ module Cms
5
5
  # From app, should be cms.xyz_path
6
6
  module PathHelper
7
7
 
8
+ # @return A link if content is addressable, name otherwise.
9
+ # Link_to_if would call content.path even if it doesn't respond to '
10
+ def link_to_addressable_content(name, content)
11
+ if content.respond_to? :path
12
+ link_to name, content.path
13
+ else
14
+ name
15
+ end
16
+ end
8
17
  # Returns the relative path to the given attachment.
9
18
  # Content editors will see exact specific version path, while other users will see the 'public' url for the path.
10
19
  def attachment_path_for(attachment)
@@ -26,7 +26,7 @@ module Cms
26
26
 
27
27
  # When sitemap initially renders, we only want to show first level.
28
28
  def initial_visibility_class(section_node)
29
- section_node.depth > 1 ? 'hide' : ''
29
+ section_node.depth >= 1 ? 'hide' : ''
30
30
  end
31
31
 
32
32
  # Returns a css class for determine sitemap depth.
@@ -0,0 +1,42 @@
1
+ # A text field that is used for the Name fields of content.
2
+ #
3
+ # @example <%= f.name as: :name %>
4
+ #
5
+ # Add the following behaviors above and beyond
6
+ # 1. Will generate a slug if the class requires it. (Requires a as: :path field to work)
7
+ # 2. If no label is specified, it shows a larger than normal input which spans the full row.
8
+ # 3. Labels are turned off by default.
9
+ class NameInput < SimpleForm::Inputs::TextInput
10
+
11
+ def initialize(*args)
12
+ super(*args)
13
+ options[:label] = false if options[:label].nil?
14
+ options[:placeholder] = "Name" if options[:placeholder].nil?
15
+ end
16
+
17
+ def input
18
+ add_slug_source_for_content_that_needs_it
19
+
20
+ unless options[:label]
21
+ input_html_options[:class] << 'input-block-level input-xxlarge'
22
+ end
23
+
24
+ @builder.text_field(attribute_name, input_html_options).html_safe
25
+ end
26
+
27
+ protected
28
+
29
+ def add_slug_source_for_content_that_needs_it
30
+ if should_autogenerate_slug?
31
+ input_html_options[:class] << 'slug-source'
32
+ end
33
+ end
34
+
35
+ def should_autogenerate_slug?
36
+ content_requires_slug_field? && (object.new_record? || (object.name.blank? && object.slug.blank?))
37
+ end
38
+
39
+ def content_requires_slug_field?
40
+ object.class.requires_slug?
41
+ end
42
+ end
@@ -98,6 +98,7 @@ module Cms
98
98
  :storage => rail_config(:storage),
99
99
  :s3_credentials => rail_config(:s3_credentials),
100
100
  :bucket => rail_config(:s3_bucket),
101
+ :s3_host_name => rail_config(:s3_host_name),
101
102
  :s3_host_alias => rail_config(:s3_host_alias)
102
103
 
103
104
  end
@@ -108,6 +108,12 @@ module Cms
108
108
  klass.content_type
109
109
  end
110
110
 
111
+ # Returns a list of column names and values for this content type which are allowed be orderable.
112
+ def orderable_attributes
113
+ attribute_names = model_class.new.attribute_names
114
+ attribute_names -= ["id", "version", "lock_version", "created_by_id", "updated_by_id"]
115
+ end
116
+
111
117
  # @deprecated
112
118
  def save!
113
119
  ActiveSupport::Deprecation.warn "Cms::ContentType#save! should no longer be called. Content Types do not need to be registered in the database."
@@ -29,7 +29,8 @@ module Cms
29
29
 
30
30
  validates_presence_of :name, :format, :handler, :path, :locale
31
31
  validates_uniqueness_of :name, :scope => [:format, :handler],
32
- :message => "Must have a unique combination of name, format and handler"
32
+ :message => "Must have a unique combination of name, format and handler",
33
+ conditions: -> { where(deleted: false) }
33
34
 
34
35
  end
35
36
  end
@@ -379,6 +379,12 @@ class Cms::Page < ActiveRecord::Base
379
379
  path == "/"
380
380
  end
381
381
 
382
+
383
+ # @return [Boolean] true if this page can be deleted or not.
384
+ def deletable?
385
+ !home?
386
+ end
387
+
382
388
  # This will return the "top level section" for this page, which is the section directly
383
389
  # below the root (a.k.a My Site) that this page is in. If this page is in root,
384
390
  # then this will return root.
@@ -11,6 +11,7 @@ module Cms
11
11
  # Note that Chrome doesn't expire session cookies immediately so test this in other browsers.
12
12
  # http://stackoverflow.com/questions/16817229/issues-with-devise-rememberable
13
13
  :rememberable,
14
+ :recoverable, # Needs to be here so forgot password link works.
14
15
  :authentication_keys => [:login]
15
16
 
16
17
 
@@ -78,6 +78,14 @@ class Cms::SectionNode < ActiveRecord::Base
78
78
  def link?
79
79
  node_type == 'Cms::Link'
80
80
  end
81
+
82
+ def deletable?
83
+ return false if self.root?
84
+ if node.respond_to?(:deletable?)
85
+ return node.deletable?
86
+ end
87
+ true
88
+ end
81
89
 
82
90
  # @param [Section] section
83
91
  # @param [Integer] position
@@ -19,9 +19,18 @@ module Cms
19
19
  end
20
20
  end
21
21
 
22
+ # Generate a new random password for this user.
23
+ # @return [String] The newly generated and assigned password
24
+ def new_password
25
+ pwd = SecureRandom.hex(4)
26
+ change_password(pwd)
27
+ pwd
28
+ end
29
+
22
30
  # Change this User's password to a new value.
23
31
  def change_password(new_password)
24
32
  update(:password => new_password, :password_confirmation => new_password)
33
+ new_password
25
34
  end
26
35
 
27
36
  # By default, Users are coming from the the CMS database (cms_users). All Cms::User class have have the same source.
@@ -0,0 +1,5 @@
1
+ ##
2
+ # All methods from this helper will be available in the render.html.erb for ListPortlet
3
+ module ListPortletHelper
4
+
5
+ end
@@ -0,0 +1,40 @@
1
+ class ListPortlet < Cms::Portlet
2
+
3
+ description "Find and display content blocks."
4
+ enable_template_editor false
5
+
6
+ def render
7
+ query = current_content_type.model_class
8
+ limit = self.limit
9
+ unless limit.blank?
10
+ query = query.limit(limit.to_i)
11
+ end
12
+ direction = self.reverse_order.blank? || self.reverse_order == "0" ? 'asc' : 'desc'
13
+ unless self.order.blank?
14
+ query = query.order("#{self.order} #{direction}")
15
+ end
16
+ @content_blocks = query.all.to_a
17
+ end
18
+
19
+
20
+ # This is far less flexible than prepending additional view paths, but it suffices for now.
21
+ def view_as_full_path
22
+ if File.exists?(expected_view_path())
23
+ "portlets/list/#{self.name.parameterize('_')}/_#{self.view_as}"
24
+ else
25
+ "portlets/list/_#{self.view_as}"
26
+ end
27
+ end
28
+
29
+ def expected_view_path
30
+ File.join(Rails.root, 'app', 'views', 'portlets', 'list', self.name.parameterize('_'), "_#{self.view_as}.html.erb")
31
+ end
32
+
33
+ def view_as_path
34
+ "portlets/list/#{self.name.parameterize('_')}/_#{self.view_as}.html.erb"
35
+ end
36
+
37
+ def current_content_type
38
+ Cms::ContentType.named(self.content_type).first
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
- <div id="modal-add-content" class="modal fade modal-content" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
2
-
1
+ <div id="modal-add-content" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
2
+ <div class="modal-content"></div>
3
3
  </div>
@@ -1,6 +1,6 @@
1
1
  <div class="errorExplanation" id="errorExplanation">
2
2
  <h2>An Error Occurred</h2>
3
3
  <ul>
4
- <li><%=h "#{exception.class.name}: #{exception.message}" %></li>
4
+ <li><%=h "#{@exception.class.name}: #{@exception.message}" %></li>
5
5
  </ul>
6
6
  </div>
@@ -1,14 +1,16 @@
1
1
  <%
2
- show_delete = true
3
- show_delete = can_delete if defined?(can_delete)
2
+ show_delete = true
3
+ show_delete = can_delete if defined?(can_delete)
4
4
  %>
5
- <tr id="<%= dom_id(attachment)%>">
5
+ <tr id="<%= dom_id(attachment) %>">
6
6
  <% if attachment.is_image? %>
7
- <td><%= link_to image_tag(attachment_path_for(attachment), :size => '60x60', :data=>{:purpose=>'attachment'}), attachment_path_for(attachment) %></td>
7
+ <td><%= link_to(image_tag(attachment_path_for(attachment), :size => '60x60', :data => {:purpose => 'attachment'}), attachment_path_for(attachment), target: "_blank") %></td>
8
8
  <% else %>
9
- <td><%= image_tag "cms/icons/file_types/#{attachment.icon}.png" %>
9
+ <td><%= image_tag "cms/icons/file_types/#{attachment.icon}.png" %>
10
10
  <% end %>
11
11
  <td><%= attachment.attachment_name.singularize.capitalize %></td>
12
12
  <td><%= number_to_human_size(attachment.size) %></td>
13
- <td><%= link_to_function "Delete", "$.cms.AttachmentManager.destroy(#{attachment.id})" if show_delete %></td>
13
+ <td><%= link_to("Delete", '#',
14
+ data: {purpose: 'delete-attachment', id: attachment.id},
15
+ class: 'btn btn-mini btn-danger') if show_delete %></td>
14
16
  </tr>
@@ -1,22 +1,39 @@
1
1
  <%= render :partial => 'cms/attachments/attachment_table', :locals => {:block => @block, :can_delete => true} %>
2
- <div class="fields">
3
- <p>Upload a new attachment:</p>
4
- </div>
2
+ <%= link_to 'Upload a New Attachment', "#", class: 'btn btn-primary', data: {toggle: "modal", target: "#upload-attachment"} %>
5
3
 
6
- <div class="fields select_fields">
7
- <%= label_tag "Attachment Type" %>
8
- <%= select_tag :asset_types, options_for_select(asset_types) %>
9
- </div>
10
- <%= f.hidden_field :attachment_id_list, :id => "attachment_manager_ids_list" %>
11
- <%= f.hidden_field :attachments_changed, :id => "attachments_manager_changed" %>
4
+ <% content_for :before_main_content do
5
+ # Must be outside main form, since we can't have a form within a form.
6
+ %>
7
+ <div class="modal fade" id="upload-attachment">
8
+ <div class="modal-dialog">
9
+ <div class="modal-content">
10
+ <div class="modal-header">
11
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
12
+ <h4 class="modal-title">Upload a New Attachment</h4>
13
+ </div>
14
+ <div class="modal-body">
15
+ <%= simple_form_for Cms::Attachment.new do |af| %>
16
+ <%= af.input :attachable_type, collection: asset_types, label: 'Type', include_blank: false %>
17
+ <%= hidden_field_tag :attachment_id_list, "", :id => "attachment_manager_ids_list" %>
18
+ <%= hidden_field_tag :attachments_changed, "", :id => "attachments_manager_changed" %>
12
19
 
13
- <div id="asset_add" class="fields file_fields" style="display:<%= asset_types.size > 1 ? "none" : "block" %>">
14
- <label for="asset_add">Choose file</label>
20
+ <%= af.input :data, label: 'File', input_html: {id: 'asset_add_file', onchange: "$.cms.AttachmentManager.upload(this)"} %>
21
+ <input type="hidden" id="asset_attachable_id" name="asset[attachable_id]" value="<%= object.id %>"/>
22
+ <input type="hidden" id="asset_attachable_class" value="<%= object.class.name %>"/>
23
+
24
+ <div id="asset_add" class="fields file_fields" style="display:<%= asset_types.size > 1 ? "none" : "block" %>">
25
+
26
+ <div id="asset_add_div">
27
+ <iframe src="javascript:false" name="asset_add_uploader" id="asset_add_uploader"></iframe>
28
+ </div>
29
+ </div>
30
+ <% end %>
31
+ </div>
32
+ <div class="modal-footer">
33
+ <button type="button" class="btn btn-small" data-dismiss="modal">Never Mind</button>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ <% end %>
15
39
 
16
- <div id="asset_add_div">
17
- <input type="file" name="attachment[data]" id="asset_add_file" onchange="$.cms.AttachmentManager.upload(this)"/>
18
- <input type="hidden" id="asset_attachable_id" name="asset[attachable_id]" value="<%= object.id %>"/>
19
- <input type="hidden" id="asset_attachable_class" value="<%= object.class.name %>"/>
20
- <iframe src="javascript:false" name="asset_add_uploader" id="asset_add_uploader"></iframe>
21
- </div>
22
- </div>
@@ -1,17 +1,22 @@
1
1
  <div class="fields" id="assets_table">
2
- <label><span id="asset-name"><%= block.class.name %></span> Attachments</label>
3
- <br /><br />
4
- <table style="display:<%= block.multiple_attachments.empty? ? "none" : "block"%>">
2
+ <table class="table table-bordered assets">
3
+ <thead>
5
4
  <tr>
6
5
  <th>Preview</th>
7
6
  <th>Type</th>
8
7
  <th>Size</th>
9
- <th></th>
8
+ <th>Actions</th>
10
9
  <tr>
10
+ </thead>
11
+ <tbody>
12
+ <% if @block.multiple_attachments.empty? %>
13
+ <tr class='empty-row'><td colspan="4" >There are no attachments yet.</td></tr>
14
+ <% end %>
11
15
  <% for attachment in block.multiple_attachments %>
12
- <% unless attachment.new_record? %>
13
- <%= render :partial => "cms/attachments/attachment", :locals => { :attachment => attachment, :can_delete => can_delete } %>
14
- <% end %>
16
+ <% unless attachment.new_record? %>
17
+ <%= render :partial => "cms/attachments/attachment", :locals => {:attachment => attachment, :can_delete => can_delete} %>
18
+ <% end %>
15
19
  <% end %>
20
+ </tbody>
16
21
  </table>
17
22
  </div>
@@ -1 +1 @@
1
- <%= page_content_iframe(edit_content_path(current_page)) %>
1
+ <%= page_content_iframe(@edit_page_path) %>
@@ -12,7 +12,7 @@
12
12
  <ul class="unstyled">
13
13
  <h4 class="gray">Changes will affect:</h4>
14
14
  <% @block.connected_pages.each do |page| %>
15
- <li><%= link_to page.name, page_path(page), target: "_blank" %></li>
15
+ <li><%= link_to page.name, cms.page_path(page), target: "_blank" %></li>
16
16
  <% end %>
17
17
  </ul>
18
18
  <% end %>
@@ -33,3 +33,4 @@
33
33
  <%= link_to "Delete", engine_aware_path(@block), class: "btn btn-small btn-danger confirm_with_title http_delete", title: "Are you sure you want to delete this content?" %>
34
34
  </div>
35
35
  </div>
36
+ <%= yield :sidebar_after if content_for(:sidebar_after)%>
@@ -0,0 +1,5 @@
1
+ <%= f.input :order,
2
+ collection: collection,
3
+ label_method: :humanize,
4
+ include_blank: false,
5
+ wrapper_html: {'data-role' => "order-fields", class: 'load'} %>
@@ -0,0 +1,3 @@
1
+ <%= simple_form_for ListPortlet.new(order: "name") do |f| %>
2
+ <%= render partial: 'cms/content_types/order_field', locals: { f: f, collection: @attributes} %>
3
+ <% end %>
@@ -3,7 +3,7 @@
3
3
  <% end %>
4
4
 
5
5
  <h3>Form Settings</h3>
6
- <%= f.input :name, as: :cms_text_field %>
6
+ <%= f.input :name, as: :name %>
7
7
  <%= f.input :slug, as: :path %>
8
8
  <%= f.input :description %>
9
9
  <%= hidden_field_tag "field_ids", @block.field_ids %>
@@ -41,7 +41,8 @@
41
41
  <% end %>
42
42
  <%# Can't have a form inside a form, so this must go into the head. %>
43
43
  <%= content_for :html_head do %>
44
- <div id="modal-edit-field" class="modal modal-content" tabindex="-1" role="dialog" aria-labelledby="model_label" aria-hidden="true">
44
+ <div id="modal-edit-field" class="modal" tabindex="-1" role="dialog" aria-labelledby="model_label" aria-hidden="true">
45
+ <div class="modal-content"></div>
45
46
  </div>
46
47
 
47
48
  <div id="modal-confirm-delete-field" class="modal modal-content" tabindex="-1" role="dialog" aria-labelledby="model_label" aria-hidden="true">
@@ -5,7 +5,7 @@
5
5
  <%= f.hidden_field :lock_version %>
6
6
  <% end %>
7
7
 
8
- <%= f.input :name, label: false, placeholder: 'Page Name', input_html: {class: 'input-block-level input-xxlarge'} %>
8
+ <%= f.input :name, placeholder: 'Page Name', as: :name %>
9
9
  <%= f.input :path, placeholder: 'Page Path' %>
10
10
  <%= f.input :template_file_name, collection: Cms::PageTemplate.options, label: "Template", as: :select, include_blank: false %>
11
11
 
@@ -0,0 +1,16 @@
1
+ <%# Overrides devise/passwords/new to add CMS specific styles. %>
2
+ <%= render 'cms/application/page_title' %>
3
+
4
+ <%= simple_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
5
+ <%= render layout: 'cms/application/main_with_sidebar' do %>
6
+ <%= f.error_notification %>
7
+ <%= f.input :email, :required => true, :autofocus => true %>
8
+
9
+ <%= render "devise/shared/links" %>
10
+ <% end %>
11
+ <%= render layout: 'cms/application/row' do %>
12
+ <%= button_menu :bottom do %>
13
+ <%= f.button :submit, "Send me reset password instructions", class: 'right btn-primary' %>
14
+ <% end %>
15
+ <% end %>
16
+ <% end %>