comfortable_mexican_sofa 1.0.37 → 1.0.38

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 (38) hide show
  1. data/LICENSE +20 -0
  2. data/README.md +4 -18
  3. data/VERSION +1 -1
  4. data/app/controllers/cms_admin/base_controller.rb +16 -4
  5. data/app/controllers/cms_admin/layouts_controller.rb +1 -0
  6. data/app/controllers/cms_admin/pages_controller.rb +26 -0
  7. data/app/models/cms_layout.rb +0 -9
  8. data/app/models/cms_page.rb +13 -1
  9. data/app/views/cms_admin/common/desc/_layout_content.html.erb +25 -0
  10. data/app/views/cms_admin/common/desc/_layout_css.html.erb +1 -0
  11. data/app/views/cms_admin/common/desc/_layout_js.html.erb +1 -0
  12. data/app/views/cms_admin/layouts/_form.html.erb +4 -3
  13. data/app/views/cms_admin/pages/_index_branch.html.erb +18 -6
  14. data/app/views/cms_admin/pages/form_blocks.js.erb +1 -1
  15. data/app/views/cms_admin/pages/index.html.erb +1 -1
  16. data/app/views/cms_admin/pages/toggle_branch.js.erb +11 -0
  17. data/app/views/layouts/cms_admin.html.erb +3 -1
  18. data/comfortable_mexican_sofa.gemspec +11 -3
  19. data/config/initializers/comfortable_mexican_sofa.rb +4 -1
  20. data/config/routes.rb +6 -2
  21. data/lib/comfortable_mexican_sofa/acts_as_tree.rb +5 -0
  22. data/lib/comfortable_mexican_sofa/configuration.rb +4 -0
  23. data/lib/comfortable_mexican_sofa/form_builder.rb +10 -1
  24. data/lib/comfortable_mexican_sofa/view_methods.rb +0 -1
  25. data/public/images/comfortable_mexican_sofa/arrow_bottom.gif +0 -0
  26. data/public/images/comfortable_mexican_sofa/arrow_right.gif +0 -0
  27. data/public/images/comfortable_mexican_sofa/icon_move.gif +0 -0
  28. data/public/javascripts/comfortable_mexican_sofa/cms.js +19 -0
  29. data/public/stylesheets/comfortable_mexican_sofa/structure.css +117 -48
  30. data/public/stylesheets/comfortable_mexican_sofa/typography.css +8 -2
  31. data/test/functional/cms_admin/layouts_controller_test.rb +1 -0
  32. data/test/functional/cms_admin/pages_controller_test.rb +49 -0
  33. data/test/integration/sites_test.rb +44 -5
  34. data/test/test_helper.rb +13 -7
  35. data/test/unit/cms_layout_test.rb +0 -8
  36. data/test/unit/cms_page_test.rb +11 -0
  37. metadata +13 -5
  38. data/public/images/comfortable_mexican_sofa/body_bg.jpg +0 -0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010-2011 Oleg Khabarov, The Working Group Inc
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -19,27 +19,13 @@ Then from the Rails project's root run:
19
19
  rails g cms
20
20
  rake db:migrate
21
21
 
22
- At this point you should have database structure created, some assets copied to /public directory and initializer set up:
23
-
24
- ComfortableMexicanSofa.configure do |config|
25
- config.cms_title = 'ComfortableMexicanSofa'
26
- config.authentication = 'ComfortableMexicanSofa::HttpAuth'
27
- end
28
-
29
- # Credentials for HttpAuth
30
- ComfortableMexicanSofa::HttpAuth.username = 'username'
31
- ComfortableMexicanSofa::HttpAuth.password = 'password'
32
-
33
- For a full list of available configuration options and their defaults take a peek in here: [configuration.rb](http://https://github.com/theworkinggroup/comfortable-mexican-sofa/blob/master/lib/comfortable_mexican_sofa/configuration.rb)
22
+ At this point you should have database structure created, some assets copied to /public directory and [initializer](https://github.com/twg/comfortable-mexican-sofa/blob/master/config/initializers/comfortable_mexican_sofa.rb) set up.
34
23
 
35
24
  Usage
36
25
  -----
37
26
  Now you should be able to navigate to http://yoursite/cms-admin
38
27
 
39
- ### Step 1: Create Site
40
- CMS allows you to run multiple sites from a single installation. Each site is attached to a hostname. For the first time you'll be prompted to set up the initial site. Hostname will be pre-populated so just choose a label.
41
-
42
- ### Step 2: Create Layout
28
+ ### Step 1: Create Layout
43
29
  Before creating pages and populating them with content we need to create a layout. Layout is the template of your pages. It defines some reusable content (like header and footer, for example) and places where the content goes. A very simple layout can look like this:
44
30
 
45
31
  <html>
@@ -88,7 +74,7 @@ are exactly that. You don't want to do IRB inside CMS so there's a handy tag:
88
74
  {{ cms:partial:path/to/partial:x:y }} # gets translated to <%= render :partial => 'path/to/partial',
89
75
  # :locals => { :param_1 => 'x', :param_2 => 'y'} %>
90
76
 
91
- ### Step 3: Create Page
77
+ ### Step 2: Create Page
92
78
  Now you're ready to create a page. Based on how you defined your layout, you should have form inputs ready to be populated.
93
79
  Save a page, and it will be accessible from the public side.
94
80
 
@@ -131,7 +117,7 @@ Then it's a matter of populating the content. Few rules to remember:
131
117
  - parent pages are identified by full_path (slug for layouts)
132
118
  - folder structure reflects tree structure of the site
133
119
 
134
- Example fixture files for a [layout](https://github.com/theworkinggroup/comfortable-mexican-sofa/blob/master/test/cms_seeds/test.host/layouts/nested.yml), [page](https://github.com/theworkinggroup/comfortable-mexican-sofa/blob/master/test/cms_seeds/test.host/pages/child/subchild.yml) and [snippet](https://github.com/theworkinggroup/comfortable-mexican-sofa/blob/master/test/cms_seeds/test.host/snippets/default.yml)
120
+ Example fixture files for a [layout](https://github.com/twg/comfortable-mexican-sofa/blob/master/test/cms_seeds/test.host/layouts/nested.yml), [page](https://github.com/twg/comfortable-mexican-sofa/blob/master/test/cms_seeds/test.host/pages/child/subchild.yml) and [snippet](https://github.com/twg/comfortable-mexican-sofa/blob/master/test/cms_seeds/test.host/snippets/default.yml)
135
121
 
136
122
  **Note:** If ComfortableMexicanSofa.config.seed\_data\_path is set no content is loaded from database. Only fixture files are used.
137
123
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.37
1
+ 1.0.38
@@ -11,12 +11,24 @@ class CmsAdmin::BaseController < ActionController::Base
11
11
  layout 'cms_admin'
12
12
 
13
13
  protected
14
-
14
+
15
15
  def load_admin_cms_site
16
16
  @cms_site = CmsSite.find_by_hostname!(request.host.downcase)
17
+
17
18
  rescue ActiveRecord::RecordNotFound
18
- flash[:error] = 'No Site defined for this hostname. Create it now.'
19
- redirect_to new_cms_admin_site_path
19
+
20
+ if ComfortableMexicanSofa.config.auto_manage_sites
21
+ if CmsSite.count == 0
22
+ @cms_site = CmsSite.create!(:label => 'Default Site', :hostname => request.host.downcase)
23
+ elsif CmsSite.count == 1
24
+ @cms_site = CmsSite.first
25
+ @cms_site.update_attribute(:hostname, request.host.downcase)
26
+ end
27
+ end
28
+
29
+ unless @cms_site
30
+ flash[:error] = 'No Site defined for this hostname. Create it now.'
31
+ return redirect_to(cms_admin_sites_path)
32
+ end
20
33
  end
21
-
22
34
  end
@@ -45,6 +45,7 @@ protected
45
45
  def build_cms_layout
46
46
  @cms_layout = @cms_site.cms_layouts.new(params[:cms_layout])
47
47
  @cms_layout.parent ||= CmsLayout.find_by_id(params[:parent_id])
48
+ @cms_layout.content ||= '{{ cms:page:content }}'
48
49
  end
49
50
 
50
51
  def load_cms_layout
@@ -1,5 +1,6 @@
1
1
  class CmsAdmin::PagesController < CmsAdmin::BaseController
2
2
 
3
+ before_filter :check_for_layouts, :only => [:new, :edit]
3
4
  before_filter :build_cms_page, :only => [:new, :create]
4
5
  before_filter :load_cms_page, :only => [:edit, :update, :destroy]
5
6
  before_filter :preview_cms_page, :only => [:create, :update]
@@ -47,7 +48,32 @@ class CmsAdmin::PagesController < CmsAdmin::BaseController
47
48
  @cms_page.cms_layout = @cms_site.cms_layouts.find_by_id(params[:layout_id])
48
49
  end
49
50
 
51
+ def toggle_branch
52
+ @cms_page = @cms_site.cms_pages.find(params[:id])
53
+ s = (session[:cms_page_tree] ||= [])
54
+ id = @cms_page.id.to_s
55
+ s.member?(id) ? s.delete(id) : s << id
56
+ rescue ActiveRecord::RecordNotFound
57
+ # do nothing
58
+ end
59
+
60
+ def reorder
61
+ (params[:cms_page] || []).each_with_index do |id, index|
62
+ if (cms_page = CmsPage.find_by_id(id))
63
+ cms_page.update_attribute(:position, index)
64
+ end
65
+ end
66
+ render :nothing => true
67
+ end
68
+
50
69
  protected
70
+
71
+ def check_for_layouts
72
+ if CmsLayout.count == 0
73
+ flash[:error] = 'No Layouts found. Please create one.'
74
+ redirect_to new_cms_admin_layout_path
75
+ end
76
+ end
51
77
 
52
78
  def build_cms_page
53
79
  @cms_page = @cms_site.cms_pages.new(params[:cms_page])
@@ -93,14 +93,6 @@ class CmsLayout < ActiveRecord::Base
93
93
  end
94
94
  end
95
95
 
96
- def merged_css
97
- self.parent ? [self.parent.merged_css, self.css].join("\n") : self.css.to_s
98
- end
99
-
100
- def merged_js
101
- self.parent ? [self.parent.merged_js, self.js].join("\n") : self.js.to_s
102
- end
103
-
104
96
  protected
105
97
 
106
98
  def check_content_tag_presence
@@ -115,7 +107,6 @@ protected
115
107
  def clear_cache
116
108
  FileUtils.rm File.expand_path("cms-css/#{self.slug}.css", Rails.public_path), :force => true
117
109
  FileUtils.rm File.expand_path("cms-js/#{self.slug}.js", Rails.public_path), :force => true
118
- self.children.each{ |child| child.save! }
119
110
  end
120
111
 
121
112
  # Forcing page content reload. This will happen in cascade due to #clear_cache mathod above.
@@ -16,7 +16,8 @@ class CmsPage < ActiveRecord::Base
16
16
 
17
17
  # -- Callbacks ------------------------------------------------------------
18
18
  before_validation :assign_parent,
19
- :assign_full_path
19
+ :assign_full_path,
20
+ :assign_position
20
21
  before_save :set_cached_content
21
22
  after_save :sync_child_pages
22
23
 
@@ -115,6 +116,11 @@ class CmsPage < ActiveRecord::Base
115
116
  @cms_tags ||= []
116
117
  end
117
118
 
119
+ # Full url for a page
120
+ def url
121
+ "http://#{self.cms_site.hostname}#{self.full_path}"
122
+ end
123
+
118
124
  protected
119
125
 
120
126
  def assign_parent
@@ -125,6 +131,12 @@ protected
125
131
  self.full_path = self.parent ? "#{self.parent.full_path}/#{self.slug}".squeeze('/') : '/'
126
132
  end
127
133
 
134
+ def assign_position
135
+ return unless self.parent
136
+ max = self.parent.children.maximum(:position)
137
+ self.position = max ? max + 1 : 0
138
+ end
139
+
128
140
  def validate_target_page
129
141
  return unless self.target_page
130
142
  p = self
@@ -0,0 +1,25 @@
1
+ <table>
2
+ <tr>
3
+ <td>
4
+ <strong>Renderable Page Elements:</strong>
5
+ <br/>{{ cms:page:<em>some_label</em>:text }}
6
+ <br/>{{ cms:page:<em>some_label</em>:rich_text }}
7
+ <br/>{{ cms:page:<em>some_label</em>:string }}
8
+ <br/>{{ cms:page:<em>some_label</em>:datetime }}
9
+ <br/>{{ cms:page:<em>some_label</em>:integer }}
10
+ </td>
11
+ <td>
12
+ <strong>Internal Field Elements:</strong>
13
+ <br/>{{ cms:field:<em>some_label</em>:text }}
14
+ <br/>{{ cms:field:<em>some_label</em>:string }}
15
+ <br/>{{ cms:field:<em>some_label</em>:datetime }}
16
+ <br/>{{ cms:field:<em>some_label</em>:integer }}
17
+ </td>
18
+ <td>
19
+ <strong>Snippets, Helpers and Partials:</strong>
20
+ <br/>{{ cms:snippet:<em>slug</em> }}
21
+ <br/>{{ cms:helper:<em>method_name</em> }}
22
+ <br/>{{ cms:partial:<em>path/to/partial</em> }}
23
+ </td>
24
+ </tr>
25
+ </table>
@@ -0,0 +1 @@
1
+ CSS is available at <%= auto_link cms_css_url((@cms_layout.slug || 'layout-slug'), :format => 'css'), :html => { :target => '_blank' } %>
@@ -0,0 +1 @@
1
+ JS is available at <%= auto_link cms_js_url((@cms_layout.slug || 'layout-slug'), :format => 'css'), :html => { :target => '_blank' } %>
@@ -10,6 +10,7 @@
10
10
  <% if (options = CmsLayout.app_layouts_for_select).present? %>
11
11
  <%= form.select :app_layout, [['---- Select Application Layout ----', nil]] + options %>
12
12
  <% end %>
13
- <%= form.text_area :content %>
14
- <%= form.text_area :css %>
15
- <%= form.text_area :js %>
13
+
14
+ <%= form.text_area :content, :desc => render(:partial => '/cms_admin/common/desc/layout_content'), :desc_toggle => '[ help ]' %>
15
+ <%= form.text_area :css, :desc => render(:partial => '/cms_admin/common/desc/layout_css'), :desc_toggle => '[ help ]' %>
16
+ <%= form.text_area :js, :desc => render(:partial => '/cms_admin/common/desc/layout_js'), :desc_toggle => '[ help ]' %>
@@ -1,10 +1,22 @@
1
- <% cms_page ||= index_branch %>
1
+ <%
2
+ cms_page ||= index_branch
3
+ has_children = cms_page.children.present?
4
+ has_siblings = cms_page.siblings.present?
5
+ branch_open = (session[:cms_page_tree] || []).member?(cms_page.id.to_s) || cms_page.root?
6
+ %>
2
7
 
3
- <li id='cms_page_<%= cms_page.id %>'>
8
+ <li id='<%= dom_id(cms_page) %>'>
4
9
  <div class='item'>
10
+ <div class='toggle <%= 'open' if branch_open %>'>
11
+ <%=
12
+ if has_children && !cms_page.root?
13
+ link_to span_tag('toggle'), toggle_branch_cms_admin_page_path(cms_page), :remote => true
14
+ end
15
+ %>
16
+ </div>
5
17
  <div class='icon'>
6
- <% if cms_page.siblings.size > 0 %>
7
- <div class='dragger'></div>
18
+ <% if has_siblings %>
19
+ <div class='dragger'><span>drag</span></div>
8
20
  <% end %>
9
21
  </div>
10
22
  <div class='action_links'>
@@ -15,11 +27,11 @@
15
27
  <div class='label'>
16
28
  <%= link_to cms_page.label, edit_cms_admin_page_path(cms_page) %>
17
29
  <div class='sublabel'>
18
- <%= link_to cms_page.full_path, cms_page.full_path %>
30
+ <%= link_to cms_page.url, cms_page.full_path, :target => '_blank' %>
19
31
  </div>
20
32
  </div>
21
33
  </div>
22
- <% if cms_page.children.present? %>
34
+ <% if has_children && branch_open %>
23
35
  <ul>
24
36
  <%= render :partial => 'index_branch', :collection => cms_page.children %>
25
37
  </ul>
@@ -1 +1 @@
1
- $('#form_blocks').replaceWith('<%= escape_javascript(render(:partial => "form_blocks")) %>')
1
+ $('#form_blocks').replaceWith('<%= escape_javascript(render(:partial => "form_blocks")) %>');
@@ -1,6 +1,6 @@
1
1
  <%= link_to span_tag('Create New Page'), new_cms_admin_page_path, :class => 'big_button' %>
2
2
  <h1>Pages</h1>
3
3
 
4
- <ul class='list'>
4
+ <ul class='list sortable'>
5
5
  <%= render :partial => 'index_branch', :collection => @cms_pages %>
6
6
  </ul>
@@ -0,0 +1,11 @@
1
+ var li = $('li#cms_page_<%=@cms_page.id%>');
2
+ li.find('.item .toggle').first().toggleClass('open');
3
+
4
+ <% if session[:cms_page_tree].member?(@cms_page.id.to_s) %>
5
+ if(!li.find('ul')[0]) {
6
+ li.append('<ul><%= escape_javascript(render :partial => "index_branch", :collection => @cms_page.children) %></ul>');
7
+ $.CMS.enable_sortable_list();
8
+ }
9
+ <% else %>
10
+ li.find('ul').remove();
11
+ <% end %>
@@ -13,7 +13,9 @@
13
13
  <div class='body_wrapper'>
14
14
  <div class='left_column'>
15
15
  <div class='left_column_content'>
16
- <%= active_link_to 'Sites', cms_admin_sites_path %>
16
+ <% unless ComfortableMexicanSofa.config.auto_manage_sites %>
17
+ <%= active_link_to 'Sites', cms_admin_sites_path %>
18
+ <% end %>
17
19
  <%= active_link_to 'Layouts', cms_admin_layouts_path %>
18
20
  <%= active_link_to 'Pages', cms_admin_pages_path %>
19
21
  <%= active_link_to 'Snippets', cms_admin_snippets_path %>
@@ -5,19 +5,21 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{comfortable_mexican_sofa}
8
- s.version = "1.0.37"
8
+ s.version = "1.0.38"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Oleg Khabarov", "The Working Group Inc"]
12
- s.date = %q{2011-01-07}
12
+ s.date = %q{2011-01-28}
13
13
  s.description = %q{}
14
14
  s.email = %q{oleg@theworkinggroup.ca}
15
15
  s.extra_rdoc_files = [
16
+ "LICENSE",
16
17
  "README.md"
17
18
  ]
18
19
  s.files = [
19
20
  "Gemfile",
20
21
  "Gemfile.lock",
22
+ "LICENSE",
21
23
  "README.md",
22
24
  "Rakefile",
23
25
  "VERSION",
@@ -35,6 +37,9 @@ Gem::Specification.new do |s|
35
37
  "app/models/cms_site.rb",
36
38
  "app/models/cms_snippet.rb",
37
39
  "app/models/cms_upload.rb",
40
+ "app/views/cms_admin/common/desc/_layout_content.html.erb",
41
+ "app/views/cms_admin/common/desc/_layout_css.html.erb",
42
+ "app/views/cms_admin/common/desc/_layout_js.html.erb",
38
43
  "app/views/cms_admin/layouts/_form.html.erb",
39
44
  "app/views/cms_admin/layouts/_index_branch.html.erb",
40
45
  "app/views/cms_admin/layouts/edit.html.erb",
@@ -47,6 +52,7 @@ Gem::Specification.new do |s|
47
52
  "app/views/cms_admin/pages/form_blocks.js.erb",
48
53
  "app/views/cms_admin/pages/index.html.erb",
49
54
  "app/views/cms_admin/pages/new.html.erb",
55
+ "app/views/cms_admin/pages/toggle_branch.js.erb",
50
56
  "app/views/cms_admin/sites/_form.html.erb",
51
57
  "app/views/cms_admin/sites/edit.html.erb",
52
58
  "app/views/cms_admin/sites/index.html.erb",
@@ -106,7 +112,9 @@ Gem::Specification.new do |s|
106
112
  "public/422.html",
107
113
  "public/500.html",
108
114
  "public/favicon.ico",
109
- "public/images/comfortable_mexican_sofa/body_bg.jpg",
115
+ "public/images/comfortable_mexican_sofa/arrow_bottom.gif",
116
+ "public/images/comfortable_mexican_sofa/arrow_right.gif",
117
+ "public/images/comfortable_mexican_sofa/icon_move.gif",
110
118
  "public/images/comfortable_mexican_sofa/icon_regular.gif",
111
119
  "public/javascripts/comfortable_mexican_sofa/cms.js",
112
120
  "public/javascripts/comfortable_mexican_sofa/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png",
@@ -11,12 +11,15 @@ ComfortableMexicanSofa.configure do |config|
11
11
  # config.admin_route_prefix = 'cms-admin'
12
12
 
13
13
  # Path: /cms-admin redirects to /cms-admin/pages but you can change it
14
- # to something else like:
14
+ # You don't need to change it when changing admin_route_prefix
15
15
  # config.admin_route_redirect = '/cms-admin/pages'
16
16
 
17
17
  # Location of YAML files that can be used to render pages instead of pulling
18
18
  # data from the database. Not active if not specified.
19
19
  # config.seed_data_path = File.expand_path('db/cms_seeds', Rails.root)
20
+
21
+ # Let CMS handle site creation and management. Enabled by default.
22
+ # config.auto_manage_sites = true
20
23
  end
21
24
 
22
25
  # Default credentials for ComfortableMexicanSofa::HttpAuth
@@ -5,6 +5,10 @@ Rails.application.routes.draw do
5
5
  resources :pages do
6
6
  member do
7
7
  match :form_blocks
8
+ match :toggle_branch
9
+ end
10
+ collection do
11
+ match :reorder
8
12
  end
9
13
  end
10
14
  resources :sites
@@ -14,8 +18,8 @@ Rails.application.routes.draw do
14
18
  end
15
19
 
16
20
  scope :controller => :cms_content do
17
- get '/cms-css/:id' => :render_css, :as => 'cms_css', :format => 'css'
18
- get '/cms-js/:id' => :render_js, :as => 'cms_js', :format => 'js'
21
+ get '/cms-css/:id' => :render_css, :as => 'cms_css'
22
+ get '/cms-js/:id' => :render_js, :as => 'cms_js'
19
23
  get '/' => :render_html, :as => 'cms_html', :path => '(*cms_path)'
20
24
  end
21
25
 
@@ -78,6 +78,11 @@ module ComfortableMexicanSofa::ActsAsTree
78
78
  node
79
79
  end
80
80
 
81
+ # Checks if this node is a root
82
+ def root?
83
+ !self.parent
84
+ end
85
+
81
86
  # Returns all siblings of the current node.
82
87
  #
83
88
  # subchild1.siblings # => [subchild2]
@@ -18,6 +18,9 @@ class ComfortableMexicanSofa::Configuration
18
18
  # to something else
19
19
  attr_accessor :admin_route_redirect
20
20
 
21
+ # Let CMS handle site creation and management. Enabled by default.
22
+ attr_accessor :auto_manage_sites
23
+
21
24
  # Configuration defaults
22
25
  def initialize
23
26
  @cms_title = 'ComfortableMexicanSofa'
@@ -25,6 +28,7 @@ class ComfortableMexicanSofa::Configuration
25
28
  @seed_data_path = nil
26
29
  @admin_route_prefix = 'cms-admin'
27
30
  @admin_route_redirect = "/#{@admin_route_prefix}/pages"
31
+ @auto_manage_sites = true
28
32
  end
29
33
 
30
34
  end
@@ -16,10 +16,19 @@ class ComfortableMexicanSofa::FormBuilder < ActionView::Helpers::FormBuilder
16
16
  end
17
17
 
18
18
  def default_field(type, field, options = {}, &block)
19
+ if desc = options.delete(:desc)
20
+ desc_toggle = options.delete(:desc_toggle)
21
+ desc_toggle = "<div class='desc_toggle'>#{desc_toggle}</div>" if desc_toggle
22
+ desc = %(
23
+ <div class='desc #{desc_toggle ? 'with_toggle' : nil}'>
24
+ #{desc_toggle} <div class='desc_content'>#{desc}</div>
25
+ </div>
26
+ )
27
+ end
19
28
  %(
20
29
  <div class='form_element #{type}_element'>
21
30
  <div class='label'>#{label_for(field, options)}</div>
22
- <div class='value'>#{yield}</div>
31
+ <div class='value'>#{yield}</div> #{desc}
23
32
  </div>
24
33
  ).html_safe
25
34
  end
@@ -36,7 +36,6 @@ module ComfortableMexicanSofa::ViewMethods
36
36
  return '' unless block = page.cms_blocks.find_by_label(block_label)
37
37
  block.content.to_s.html_safe
38
38
  end
39
-
40
39
  end
41
40
 
42
41
  ActionView::Base.send :include, ComfortableMexicanSofa::ViewMethods
@@ -9,6 +9,8 @@ $.CMS = function(){
9
9
  $.CMS.load_page_blocks();
10
10
  $.CMS.enable_rich_text();
11
11
  $.CMS.enable_date_picker();
12
+ $.CMS.enable_desc_toggle();
13
+ $.CMS.enable_sortable_list();
12
14
  if($('form.new_cms_page, form.edit_cms_page').get(0)) $.CMS.enable_page_save_form();
13
15
  if($('#page_save').get(0)) $.CMS.enable_page_save_widget();
14
16
  if($('#uploader_button').get(0)) $.CMS.enable_uploader();
@@ -17,6 +19,16 @@ $.CMS = function(){
17
19
 
18
20
  return {
19
21
 
22
+ enable_sortable_list: function(){
23
+ $('ul.sortable, ul.sortable ul').sortable({
24
+ handle: 'div.dragger',
25
+ axis: 'y',
26
+ update: function(){
27
+ $.post(current_path + '/reorder', '_method=put&'+$(this).sortable('serialize'));
28
+ }
29
+ })
30
+ },
31
+
20
32
  slugify: function(){
21
33
  $('input#slugify').bind('keyup.cms', function() {
22
34
  $('input#slug').val( slugify( $(this).val() ) );
@@ -70,6 +82,13 @@ $.CMS = function(){
70
82
  $('input[type=datetime]').datepicker();
71
83
  },
72
84
 
85
+ enable_desc_toggle: function(){
86
+ $('.form_element .desc .desc_toggle').click(function(){
87
+ $(this).toggle();
88
+ $(this).siblings('.desc_content').toggle();
89
+ })
90
+ },
91
+
73
92
  tree_methods: function(){
74
93
  $('a.tree_toggle').bind('click.cms', function() {
75
94
  $(this).siblings('ul').toggle();
@@ -1,7 +1,7 @@
1
1
  /* -- Containers --------------------------------------------------------- */
2
2
  html, body {
3
3
  height: 100%;
4
- background: url(/images/comfortable_mexican_sofa/body_bg.jpg);
4
+ background-color: #252525;
5
5
  }
6
6
  .body_wrapper {
7
7
  height: 100%;
@@ -13,11 +13,10 @@ html, body {
13
13
  .center_column {
14
14
  margin: 0px 250px 0px 175px;
15
15
  min-height: 100%;
16
- background-color: #ececec;
17
16
  overflow: hidden;
18
- box-shadow: inset 0px 0px 3px #000;
19
- -moz-box-shadow: inset 0px 0px 3px #000;
20
- -webkit-box-shadow: inset 0px 0px 3px #000;
17
+ background-color: #D8D8D8;
18
+ border-left: 1px solid #484844;
19
+ border-right: 1px solid #484848;
21
20
  }
22
21
  .center_column_content {
23
22
  padding: 25px;
@@ -38,19 +37,22 @@ html, body {
38
37
  }
39
38
  .left_column_content a {
40
39
  display: block;
41
- background-color: #fff;
42
- padding: 0px 10px;
40
+ padding: 3px 10px;
43
41
  margin-bottom: 5px;
44
- font: 15px/25px Georgia, serif;
45
- color: #1C1F22;
42
+ font: 15px/25px 'Lucida Grande', 'Tahoma', serif;
46
43
  border-top-left-radius: 4px;
47
- border-bottom-left-radius: 4px ;
44
+ border-bottom-left-radius: 4px;
48
45
  -moz-border-radius-topleft: 4px;
49
46
  -moz-border-radius-bottomleft: 4px;
50
- opacity: 0.8;
47
+ background: #2D2D2D;
48
+ background: -moz-linear-gradient(left, #2D2D2D 0%, #3A3A3A 100%);
49
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%,#2D2D2D), color-stop(100%,#3A3A3A));
50
+ color: #fff;
51
+ opacity: 0.3;
51
52
  }
52
53
  .left_column_content a:hover,
53
54
  .left_column_content a.active {
55
+ color: #fff;
54
56
  opacity: 1;
55
57
  }
56
58
  /* -- Right Column ------------------------------------------------------- */
@@ -126,16 +128,18 @@ html, body {
126
128
  }
127
129
  .big_button {
128
130
  float: right;
129
- padding: 6px 10px;
131
+ padding: 4px 10px;
130
132
  font-size: 10px;
133
+ font-weight: bold;
131
134
  text-transform: uppercase;
132
- background: url(/images/comfortable_mexican_sofa/body_bg.jpg);
133
135
  border-radius: 3px;
134
136
  -moz-border-radius: 3px;
137
+ border: 1px solid #9f9f9f;
138
+ background: -moz-linear-gradient(top, #F9F9F9 0%, #D5D5D5 34%, #B4B4B4 100%);
139
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F9F9F9), color-stop(34%,#D5D5D5), color-stop(100%,#B4B4B4));
140
+ text-shadow: #f5f5f5 1px 1px;
135
141
  letter-spacing: 0.5px;
136
- }
137
- .big_button span {
138
- color: #fff;
142
+ color: #1b1b1b;
139
143
  }
140
144
 
141
145
  /* -- Forms -------------------------------------------------------------- */
@@ -147,7 +151,7 @@ html, body {
147
151
  width: 137px;
148
152
  float: left;
149
153
  text-align: right;
150
- font: 15px/21px Georgia, serif;
154
+ font: 15px/21px 'Lucida Grande', 'Tahoma', serif;
151
155
  text-shadow: #fff 1px 1px;
152
156
  padding-right: 10px;
153
157
  background-color: #e0e0e0;
@@ -164,14 +168,16 @@ html, body {
164
168
  .form_element .value input[type='password'],
165
169
  .form_element .value textarea,
166
170
  .form_element .value select {
167
- width: 98%;
171
+ width: 100%;
168
172
  }
169
173
  .form_element .value input[type='text'],
170
174
  .form_element .value input[type='password'],
171
175
  .form_element .value select,
172
176
  .form_element .value textarea {
173
- border: 1px solid #ccc;
174
- padding: 2px;
177
+ border: 0px;
178
+ border-top: 1px solid #ccc;
179
+ border-bottom: 1px solid #ccc;
180
+ padding: 2px 0px;
175
181
  font-family: 'Courier New', Courier, monospace;
176
182
  }
177
183
  .form_element .value textarea {
@@ -220,62 +226,125 @@ html, body {
220
226
  .form_element.form_save label {
221
227
  margin: 0px 5px;
222
228
  }
229
+ .form_element .desc {
230
+ margin: 3px 0px 0px 160px;
231
+ font-size: 11px;
232
+ color: #777;
233
+ }
234
+ .form_element .desc .desc_toggle {
235
+ float: right;
236
+ }
237
+ .form_element .desc .desc_toggle:hover {
238
+ text-decoration: underline;
239
+ cursor: pointer;
240
+ }
241
+ .form_element .desc .desc_content {
242
+ background-color: #fff;
243
+ padding: 5px;
244
+ border-radius: 3px;
245
+ -moz-border-radius: 3px;
246
+ }
247
+ .form_element .desc.with_toggle .desc_content {
248
+ display: none;
249
+ }
250
+ .form_element .desc.with_toggle .desc_content table td {
251
+ vertical-align: top;
252
+ padding: 5px;
253
+ }
223
254
 
224
255
  /* -- Listings ----------------------------------------------------------- */
225
256
  ul.list li .item {
226
257
  overflow: hidden;
227
258
  padding: 5px;
228
- border-bottom: 1px solid #fff;
259
+ background-color: #ececec;
260
+ border-radius: 3px;
261
+ -moz-border-radius: 3px;
262
+ margin-bottom: 5px;
229
263
  }
230
- ul.list li .icon {
264
+ ul.list li .item .toggle {
265
+ float: left;
266
+ height: 28px;
267
+ width: 28px;
268
+ }
269
+ ul.list li .item .toggle a {
270
+ display: block;
271
+ height: 28px;
272
+ width: 28px;
273
+ background: url(/images/comfortable_mexican_sofa/arrow_right.gif) center center no-repeat;
274
+ }
275
+ ul.list li .item .toggle a span {
276
+ display: none;
277
+ }
278
+ ul.list li .item .toggle.open a {
279
+ background-image: url(/images/comfortable_mexican_sofa/arrow_bottom.gif);
280
+ }
281
+ ul.list li .item .icon {
282
+ float: left;
231
283
  width: 28px;
232
284
  height: 28px;
233
285
  background: url(/images/comfortable_mexican_sofa/icon_regular.gif);
234
- float: left;
235
286
  }
236
- ul.list li .action_links {
237
- float: right;
238
- opacity: 0.1;
287
+ ul.list li .item .icon .dragger {
288
+ width: 28px;
289
+ height: 28px;
290
+ background: url(/images/comfortable_mexican_sofa/icon_move.gif);
291
+ display: none;
239
292
  }
240
- table.formatted td.action_links a {
241
- opacity: 0.1;
293
+ ul.list li .item .icon:hover .dragger {
294
+ display: block;
295
+ }
296
+ ul.list li .item .icon .dragger span {
297
+ display: none;
298
+ }
299
+ ul.list li .item .label {
300
+ margin-left: 60px;
301
+ font-size: 14px;
302
+ font-weight: bold;
303
+ }
304
+ ul.list li .item .label .sublabel {
305
+ font-size: 10px;
306
+ font-weight: normal;
307
+ }
308
+ ul.list li ul {
309
+ margin-left: 28px;
242
310
  }
243
311
  ul.list .action_links a,
244
312
  table.formatted td.action_links a {
245
313
  margin-left: 3px;
246
- background-color: #272A2D;
247
- color: #fff;
314
+ background-color: #b4b4b4;
315
+ color: #1b1b1b;
248
316
  padding: 3px 5px;
249
317
  font-size: 9px;
250
318
  text-transform: uppercase;
251
319
  border-radius: 3px;
252
320
  -moz-border-radius: 3px;
321
+ border: 1px solid #9f9f9f;
322
+ background: -moz-linear-gradient(top, #F9F9F9 0%, #D5D5D5 34%, #B4B4B4 100%);
323
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F9F9F9), color-stop(34%,#D5D5D5), color-stop(100%,#B4B4B4));
324
+ text-shadow: #f5f5f5 1px 1px;
325
+ }
326
+ ul.list .action_links a:hover,
327
+ table.formatted td.action_links a:hover {
328
+ box-shadow: inset 0px 0px 5px #aaa;
329
+ -moz-box-shadow: inset 0px 0px 5px #aaa;
330
+ -webkit-box-shadow: inset 0px 0px 5px #aaa;
331
+ border-color: #484848;
253
332
  }
254
- ul.list li .label,
255
- table.formatted td .label {
256
- margin-left: 35px;
257
- font: 16px/18px Georgia, serif;
258
- color: #1C1F22;
259
- }
260
- table.formatted td .label {
261
- margin-left: 0px;
333
+ ul.list li .action_links {
334
+ float: right;
335
+ opacity: 0.2;
262
336
  }
263
- ul.list li .label .sublabel {
264
- margin-left: 15px;
265
- font: 11px/14px Arial, sans-serif;
266
- color: #1C1F22;
337
+ table.formatted td.action_links a {
338
+ opacity: 0.2;
267
339
  }
268
- ul.list li ul {
269
- margin-left: 30px;
340
+ ul.list li .item:hover .action_links,
341
+ table.formatted tr:hover td.action_links a {
342
+ opacity: 1;
270
343
  }
271
344
  ul.list li .item:hover,
272
345
  table.formatted tr:hover td {
273
346
  background-color: #fff;
274
347
  }
275
- ul.list li .item:hover .action_links,
276
- table.formatted tr:hover td.action_links a {
277
- opacity: 1;
278
- }
279
348
  table.formatted {
280
349
  clear: both;
281
350
  }
@@ -1,9 +1,9 @@
1
1
  body {
2
- font: 13px Arial, sans-serif;
2
+ font: 13px 'Lucida Grande', 'Tahoma', sans-serif;
3
3
  }
4
4
 
5
5
  h1 {
6
- font: bold 25px/25px Georgia, serif;
6
+ font: bold 25px/25px 'Lucida Grande', 'Tahoma', serif;
7
7
  margin-bottom: 25px;
8
8
  padding-bottom: 5px;
9
9
  color: #1C1F22;
@@ -16,4 +16,10 @@ a {
16
16
  }
17
17
  a:hover {
18
18
  color: #1C2733;
19
+ }
20
+ strong {
21
+ font-weight: bold;
22
+ }
23
+ em {
24
+ font-style: italic;
19
25
  }
@@ -20,6 +20,7 @@ class CmsAdmin::LayoutsControllerTest < ActionController::TestCase
20
20
  get :new
21
21
  assert_response :success
22
22
  assert assigns(:cms_layout)
23
+ assert_equal '{{ cms:page:content }}', assigns(:cms_layout).content
23
24
  assert_template :new
24
25
  assert_select 'form[action=/cms-admin/layouts]'
25
26
  end
@@ -282,4 +282,53 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
282
282
  assert_not_equal 'Updated Label', page.label
283
283
  end
284
284
  end
285
+
286
+ def test_get_new_with_no_layout
287
+ CmsLayout.destroy_all
288
+ get :new
289
+ assert_response :redirect
290
+ assert_redirected_to new_cms_admin_layout_path
291
+ assert_equal 'No Layouts found. Please create one.', flash[:error]
292
+ end
293
+
294
+ def test_get_edit_with_no_layout
295
+ CmsLayout.destroy_all
296
+ page = cms_pages(:default)
297
+ get :edit, :id => page
298
+ assert_response :redirect
299
+ assert_redirected_to new_cms_admin_layout_path
300
+ assert_equal 'No Layouts found. Please create one.', flash[:error]
301
+ end
302
+
303
+ def test_get_toggle_branch
304
+ page = cms_pages(:default)
305
+ get :toggle_branch, :id => page, :format => :js
306
+ assert_response :success
307
+ assert_equal [page.id.to_s], session[:cms_page_tree]
308
+
309
+ get :toggle_branch, :id => page, :format => :js
310
+ assert_response :success
311
+ assert_equal [], session[:cms_page_tree]
312
+ end
313
+
314
+ def test_reorder
315
+ page_one = cms_pages(:child)
316
+ page_two = cms_sites(:default).cms_pages.create!(
317
+ :parent => cms_pages(:default),
318
+ :cms_layout => cms_layouts(:default),
319
+ :label => 'test',
320
+ :slug => 'test'
321
+ )
322
+ assert_equal 0, page_one.position
323
+ assert_equal 1, page_two.position
324
+
325
+ post :reorder, :cms_page => [page_two.id, page_one.id]
326
+ assert_response :success
327
+ page_one.reload
328
+ page_two.reload
329
+
330
+ assert_equal 1, page_one.position
331
+ assert_equal 0, page_two.position
332
+ end
333
+
285
334
  end
@@ -2,16 +2,55 @@ require File.expand_path('../test_helper', File.dirname(__FILE__))
2
2
 
3
3
  class SitesTest < ActionDispatch::IntegrationTest
4
4
 
5
- def test_get_admin_pages_index
5
+ def test_get_admin
6
6
  http_auth :get, cms_admin_pages_path
7
7
  assert_response :success
8
8
  end
9
9
 
10
- def test_get_admin_pages_index_with_no_site
10
+ def test_get_admin_with_no_site
11
11
  CmsSite.delete_all
12
- http_auth :get, cms_admin_pages_path
13
- assert_response :redirect
14
- assert_redirected_to new_cms_admin_site_path
12
+ assert_difference 'CmsSite.count' do
13
+ http_auth :get, cms_admin_pages_path
14
+ assert_response :redirect
15
+ assert_redirected_to new_cms_admin_page_path
16
+ site = CmsSite.first
17
+ assert_equal 'test.host', site.hostname
18
+ assert_equal 'Default Site', site.label
19
+ end
20
+ end
21
+
22
+ def test_get_admin_with_wrong_site
23
+ site = cms_sites(:default)
24
+ site.update_attribute(:hostname, 'remote.host')
25
+ assert_no_difference 'CmsSite.count' do
26
+ http_auth :get, cms_admin_pages_path
27
+ assert_response :success
28
+ site.reload
29
+ assert_equal 'test.host', site.hostname
30
+ end
31
+ end
32
+
33
+ def test_get_admin_with_two_wrong_sites
34
+ CmsSite.delete_all
35
+ CmsSite.create!(:label => 'Site1', :hostname => 'site1.host')
36
+ CmsSite.create!(:label => 'Site2', :hostname => 'site2.host')
37
+ assert_no_difference 'CmsSite.count' do
38
+ http_auth :get, cms_admin_pages_path
39
+ assert_response :redirect
40
+ assert_redirected_to cms_admin_sites_path
41
+ assert_equal 'No Site defined for this hostname. Create it now.', flash[:error]
42
+ end
43
+ end
44
+
45
+ def test_get_admin_with_no_site_and_no_auto_manage
46
+ ComfortableMexicanSofa.config.auto_manage_sites = false
47
+ CmsSite.delete_all
48
+ assert_no_difference 'CmsSite.count' do
49
+ http_auth :get, cms_admin_pages_path
50
+ assert_response :redirect
51
+ assert_redirected_to cms_admin_sites_path
52
+ assert_equal 'No Site defined for this hostname. Create it now.', flash[:error]
53
+ end
15
54
  end
16
55
 
17
56
  def test_get_public_page_for_non_existent_site
@@ -3,15 +3,23 @@ require File.expand_path('../../config/environment', __FILE__)
3
3
  require 'rails/test_help'
4
4
 
5
5
  class ActiveSupport::TestCase
6
+
6
7
  fixtures :all
7
8
  include ActionDispatch::TestProcess
8
9
 
9
10
  def setup
10
- # resetting default configuration
11
+ reset_config
12
+ end
13
+
14
+ # resetting default configuration
15
+ def reset_config
11
16
  ComfortableMexicanSofa.configure do |config|
12
- config.cms_title = 'ComfortableMexicanSofa'
13
- config.authentication = 'ComfortableMexicanSofa::HttpAuth'
14
- config.seed_data_path = nil
17
+ config.cms_title = 'ComfortableMexicanSofa'
18
+ config.authentication = 'ComfortableMexicanSofa::HttpAuth'
19
+ config.seed_data_path = nil
20
+ config.admin_route_prefix = 'cms-admin'
21
+ config.admin_route_redirect = "/cms-admin/pages"
22
+ config.auto_manage_sites = true
15
23
  end
16
24
  ComfortableMexicanSofa::HttpAuth.username = 'username'
17
25
  ComfortableMexicanSofa::HttpAuth.password = 'password'
@@ -69,9 +77,7 @@ class ActionDispatch::IntegrationTest
69
77
 
70
78
  def setup
71
79
  host! 'test.host'
72
- ComfortableMexicanSofa.config.seed_data_path = nil
73
- ComfortableMexicanSofa::HttpAuth.username = 'username'
74
- ComfortableMexicanSofa::HttpAuth.password = 'password'
80
+ reset_config
75
81
  end
76
82
 
77
83
  # Attaching http_auth stuff with request. Example use:
@@ -84,14 +84,6 @@ class CmsLayoutTest < ActiveSupport::TestCase
84
84
  assert_equal '{{cms:page:content}}', child_layout.merged_content
85
85
  end
86
86
 
87
- def test_merged_css
88
- assert_equal "nested_css\nchild_css", cms_layouts(:child).merged_css
89
- end
90
-
91
- def test_merged_js
92
- assert_equal "nested_js\nchild_js", cms_layouts(:child).merged_js
93
- end
94
-
95
87
  def test_load_from_file
96
88
  assert !CmsLayout.load_from_file(cms_sites(:default), 'default')
97
89
 
@@ -57,6 +57,7 @@ class CmsPageTest < ActiveSupport::TestCase
57
57
  ]
58
58
  )
59
59
  assert page.is_published?
60
+ assert_equal 1, page.position
60
61
  end
61
62
  end
62
63
 
@@ -231,6 +232,16 @@ class CmsPageTest < ActiveSupport::TestCase
231
232
  assert_equal 1, CmsPage.published.count
232
233
  end
233
234
 
235
+ def test_root?
236
+ assert cms_pages(:default).root?
237
+ assert !cms_pages(:child).root?
238
+ end
239
+
240
+ def test_url
241
+ assert_equal 'http://test.host/', cms_pages(:default).url
242
+ assert_equal 'http://test.host/child-page', cms_pages(:child).url
243
+ end
244
+
234
245
  protected
235
246
 
236
247
  def new_params(options = {})
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 37
9
- version: 1.0.37
8
+ - 38
9
+ version: 1.0.38
10
10
  platform: ruby
11
11
  authors:
12
12
  - Oleg Khabarov
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-07 00:00:00 -05:00
18
+ date: 2011-01-28 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -141,10 +141,12 @@ executables: []
141
141
  extensions: []
142
142
 
143
143
  extra_rdoc_files:
144
+ - LICENSE
144
145
  - README.md
145
146
  files:
146
147
  - Gemfile
147
148
  - Gemfile.lock
149
+ - LICENSE
148
150
  - README.md
149
151
  - Rakefile
150
152
  - VERSION
@@ -162,6 +164,9 @@ files:
162
164
  - app/models/cms_site.rb
163
165
  - app/models/cms_snippet.rb
164
166
  - app/models/cms_upload.rb
167
+ - app/views/cms_admin/common/desc/_layout_content.html.erb
168
+ - app/views/cms_admin/common/desc/_layout_css.html.erb
169
+ - app/views/cms_admin/common/desc/_layout_js.html.erb
165
170
  - app/views/cms_admin/layouts/_form.html.erb
166
171
  - app/views/cms_admin/layouts/_index_branch.html.erb
167
172
  - app/views/cms_admin/layouts/edit.html.erb
@@ -174,6 +179,7 @@ files:
174
179
  - app/views/cms_admin/pages/form_blocks.js.erb
175
180
  - app/views/cms_admin/pages/index.html.erb
176
181
  - app/views/cms_admin/pages/new.html.erb
182
+ - app/views/cms_admin/pages/toggle_branch.js.erb
177
183
  - app/views/cms_admin/sites/_form.html.erb
178
184
  - app/views/cms_admin/sites/edit.html.erb
179
185
  - app/views/cms_admin/sites/index.html.erb
@@ -233,7 +239,9 @@ files:
233
239
  - public/422.html
234
240
  - public/500.html
235
241
  - public/favicon.ico
236
- - public/images/comfortable_mexican_sofa/body_bg.jpg
242
+ - public/images/comfortable_mexican_sofa/arrow_bottom.gif
243
+ - public/images/comfortable_mexican_sofa/arrow_right.gif
244
+ - public/images/comfortable_mexican_sofa/icon_move.gif
237
245
  - public/images/comfortable_mexican_sofa/icon_regular.gif
238
246
  - public/javascripts/comfortable_mexican_sofa/cms.js
239
247
  - public/javascripts/comfortable_mexican_sofa/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png
@@ -359,7 +367,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
359
367
  requirements:
360
368
  - - ">="
361
369
  - !ruby/object:Gem::Version
362
- hash: 1225201023293296474
370
+ hash: 1387758075576454082
363
371
  segments:
364
372
  - 0
365
373
  version: "0"