comfortable_mexican_sofa 1.0.37 → 1.0.38

Sign up to get free protection for your applications and to get access to all the features.
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"