browsercms_s3 3.0.4 → 3.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -50,6 +50,7 @@ The user documentation and guides for this version of the application can be fou
50
50
 
51
51
  1. http://browsercms.org/doc/guides/html/index.html - User guides and manuals that cover the features and general functionality of the project. (Found locally at doc/guides/html/index.html)
52
52
  2. http://browsercms.org/doc/app/index.html - The RDoc API documenation (locally at doc/app/index.html)
53
+ 3. http://wiki.github.com/browsermedia/browsercms - The project wiki
53
54
 
54
55
  ## Modifying the source
55
56
  If you want to experiment with the source code, the BrowserCMS project can bootstrap itself as a web application. This allows developers who want to contribute to the project to easily alter and test changes. To run the application itself, do the following:
@@ -58,7 +58,7 @@ class Cms::ContentController < Cms::ApplicationController
58
58
  # if caching is not enabled
59
59
  def render_page
60
60
  @_page_route.execute(self) if @_page_route
61
- prepare_connectables_for_render unless (logged_in? && current_user.able_to?(:administrate, :edit_content, :publish_content))
61
+ prepare_connectables_for_render
62
62
  render :layout => @page.layout, :action => 'show'
63
63
  end
64
64
 
@@ -95,7 +95,7 @@ class Cms::ContentController < Cms::ApplicationController
95
95
  @template.instance_variable_set("#{v}", nil)
96
96
  end
97
97
 
98
- prepare_connectables_for_render unless (logged_in? && current_user.able_to?(:administrate, :edit_content, :publish_content))
98
+ prepare_connectables_for_render
99
99
  render :layout => @page.layout, :template => 'cms/content/show', :status => status
100
100
  else
101
101
  handle_server_error(exception)
@@ -105,23 +105,28 @@ class Cms::ContentController < Cms::ApplicationController
105
105
  # If any of the page's connectables (portlets, etc) are renderable, they may have a render method
106
106
  # which does "controller" stuff, so we need to get that run before rendering the page.
107
107
  def prepare_connectables_for_render
108
- worst_exception = nil
109
- @page.connectables_by_connector.values.each do |c|
110
- begin
111
- c.prepare_to_render(self)
112
- rescue
113
- logger.debug "THROWN EXCEPTION by connectable #{c}: #{$!}"
114
- case $!
115
- when ActiveRecord::RecordNotFound
116
- raise
117
- when Cms::Errors::AccessDenied
118
- worst_exception = $!
119
- else
120
- c.render_exception = $!
108
+
109
+ @_connectors = @page.connectors.for_page_version(@page.version)
110
+ @_connectables = @_connectors.map(&:connectable_with_deleted)
111
+ unless (logged_in? && current_user.able_to?(:administrate, :edit_content, :publish_content))
112
+ worst_exception = nil
113
+ @_connectables.each do |c|
114
+ begin
115
+ c.prepare_to_render(self)
116
+ rescue
117
+ logger.debug "THROWN EXCEPTION by connectable #{c}: #{$!}"
118
+ case $!
119
+ when ActiveRecord::RecordNotFound
120
+ raise
121
+ when Cms::Errors::AccessDenied
122
+ worst_exception = $!
123
+ else
124
+ c.render_exception = $!
125
+ end
121
126
  end
122
127
  end
123
- end
124
- raise worst_exception if worst_exception
128
+ raise worst_exception if worst_exception
129
+ end
125
130
  end
126
131
 
127
132
  # ----- Before Filters -------------------------------------------------------
@@ -1,5 +1,5 @@
1
1
  class Cms::PagesController < Cms::BaseController
2
-
2
+
3
3
  before_filter :set_toolbar_tab
4
4
  before_filter :load_section, :only => [:new, :create]
5
5
  before_filter :load_page, :only => [:versions, :version, :revert_to, :destroy]
@@ -18,7 +18,7 @@ class Cms::PagesController < Cms::BaseController
18
18
  def show
19
19
  redirect_to Page.find(params[:id]).path
20
20
  end
21
-
21
+
22
22
  def create
23
23
  @page = Page.new(params[:page])
24
24
  @page.section = @section
@@ -38,7 +38,7 @@ class Cms::PagesController < Cms::BaseController
38
38
  render :action => "edit"
39
39
  end
40
40
  rescue ActiveRecord::StaleObjectError => e
41
- @other_version = @page.class.find(@page.id)
41
+ @other_version = @page.class.find(@page.id)
42
42
  render :action => "edit"
43
43
  end
44
44
 
@@ -55,7 +55,7 @@ class Cms::PagesController < Cms::BaseController
55
55
  end
56
56
  end
57
57
  end
58
-
58
+
59
59
  #status actions
60
60
  {:publish => "published", :hide => "hidden", :archive => "archived"}.each do |status, verb|
61
61
  define_method status do
@@ -74,25 +74,27 @@ class Cms::PagesController < Cms::BaseController
74
74
  end
75
75
  end
76
76
  end
77
-
77
+
78
78
  def version
79
79
  @page = @page.as_of_version(params[:version])
80
80
  @show_toolbar = true
81
81
  @show_page_toolbar = true
82
+ @_connectors = @page.connectors.for_page_version(@page.version)
83
+ @_connectables = @_connectors.map(&:connectable_with_deleted)
82
84
  render :layout => @page.layout, :template => 'cms/content/show'
83
- end
84
-
85
+ end
86
+
85
87
  def revert_to
86
88
  if @page.revert_to(params[:version])
87
89
  flash[:notice] = "Page '#{@page.name}' was reverted to version #{params[:version]}"
88
90
  end
89
-
91
+
90
92
  respond_to do |format|
91
93
  format.html { redirect_to @page.path }
92
94
  format.js { render :template => 'cms/shared/show_notice' }
93
- end
95
+ end
94
96
  end
95
-
97
+
96
98
  private
97
99
  def strip_publish_params
98
100
  unless current_user.able_to?(:publish_content)
@@ -105,17 +107,17 @@ class Cms::PagesController < Cms::BaseController
105
107
  @page = Page.find(params[:id])
106
108
  raise Cms::Errors::AccessDenied unless current_user.able_to_edit?(@page)
107
109
  end
108
-
110
+
109
111
  def load_draft_page
110
112
  load_page
111
113
  @page = @page.as_of_draft_version
112
114
  end
113
-
115
+
114
116
  def load_section
115
117
  @section = Section.find(params[:section_id])
116
118
  raise Cms::Errors::AccessDenied unless current_user.able_to_edit?(@section)
117
119
  end
118
-
120
+
119
121
  def hide_toolbar
120
122
  @hide_page_toolbar = true
121
123
  end
@@ -123,9 +125,9 @@ class Cms::PagesController < Cms::BaseController
123
125
  def set_toolbar_tab
124
126
  @toolbar_tab = :sitemap
125
127
  end
126
-
128
+
127
129
  def load_templates
128
130
  @templates = PageTemplate.options
129
131
  end
130
-
132
+
131
133
  end
@@ -3,11 +3,11 @@ class Cms::SessionsController < Cms::ApplicationController
3
3
 
4
4
  before_filter :redirect_to_cms_site, :only => [:new]
5
5
  layout "cms/login"
6
-
6
+
7
7
  def new
8
-
8
+
9
9
  end
10
-
10
+
11
11
  def create
12
12
  logout_keeping_session!
13
13
  user = User.authenticate(params[:login], params[:password])
@@ -21,7 +21,7 @@ class Cms::SessionsController < Cms::ApplicationController
21
21
  handle_remember_cookie! new_cookie_flag
22
22
  flash[:notice] = "Logged in successfully"
23
23
  if params[:success_url] # Coming from login portlet
24
- redirect_to(session[:return_to] || params[:success_url] || "/")
24
+ redirect_to((!params[:success_url].blank? && params[:success_url]) || session[:return_to] || "/")
25
25
  session[:return_to] = nil
26
26
  else
27
27
  redirect_back_or_default(cms_home_url)
@@ -30,7 +30,7 @@ class Cms::SessionsController < Cms::ApplicationController
30
30
  note_failed_signin
31
31
  @login = params[:login]
32
32
  @remember_me = params[:remember_me]
33
- flash[:login_error] = "Log in failed"
33
+ flash[:login_error] = "Log in failed"
34
34
  if params[:success_url] # Coming from login portlet
35
35
  if params[:success_url].blank?
36
36
  success_url = session[:return_to] || "/"
@@ -42,23 +42,30 @@ class Cms::SessionsController < Cms::ApplicationController
42
42
  flash[:success_url] = success_url
43
43
  redirect_to request.referrer
44
44
  else
45
- render :action => "new"
46
- end
45
+ render :action => "new"
46
+ end
47
47
  end
48
48
  end
49
49
 
50
50
  def destroy
51
+ logout_user
52
+ redirect_back_or_default("/")
53
+ end
54
+
55
+ protected
56
+
57
+ # Pulled this out as a separate method so that modules (like bcms_cas) can override/alias destroy and
58
+ # not have a redirect happen as a side effect.
59
+ def logout_user
51
60
  logout_killing_session!
52
61
  cookies.delete :openSectionNodes
53
62
  flash[:notice] = "You have been logged out."
54
- redirect_back_or_default("/")
55
63
  end
56
64
 
57
- protected
58
65
  # Track failed login attempts
59
66
  def note_failed_signin
60
67
  flash[:error] = "Couldn't log you in as '#{params[:login]}'"
61
68
  logger.warn "Failed login for '#{params[:login]}' from #{request.remote_ip} at #{Time.now.utc}"
62
69
  end
63
-
70
+
64
71
  end
@@ -22,7 +22,7 @@ module Cms
22
22
  # * <tt>:children</tt> - An array of hashes containing the child menu items. This is where the
23
23
  # tree structure comes in.
24
24
  def render_menu(options = {})
25
- options[:items] ||= menu_items
25
+ options[:items] ||= menu_items(options)
26
26
  options[:partial] ||= "cms/menus/menu"
27
27
  options[:id] ||= "menu"
28
28
  options[:class] ||= "menu"
@@ -1,5 +1,11 @@
1
+ #
2
+ # A group represents a collection of permissions. Each User can be assigned to one or more groups, and the sum of
3
+ # their permissions from all groups combined represents what they can do.
4
+ #
1
5
  class Group < ActiveRecord::Base
2
-
6
+
7
+ GUEST_CODE = "guest"
8
+
3
9
  has_many :user_group_memberships
4
10
  has_many :users, :through => :user_group_memberships
5
11
 
@@ -26,5 +32,10 @@ class Group < ActiveRecord::Base
26
32
  def cms_access?
27
33
  group_type && group_type.cms_access?
28
34
  end
29
-
35
+
36
+ # Finds the guest group, which is a special group that represents public non-logged in users.
37
+ def self.guest
38
+ with_code(GUEST_CODE).first
39
+ end
40
+
30
41
  end
@@ -1,7 +1,13 @@
1
+ #
2
+ # Guests are a special user that represents a non-logged in user. The main reason to create an explicit
3
+ # instance of this type of user is so that the permissions a Guest user can have can be set via the Admin interface.
4
+ #
5
+ # Every request that a non-logged in user makes will use this User's permissions to determine what they can/can't do.
6
+ #
1
7
  class GuestUser < User
2
-
8
+
3
9
  def initialize(attributes={})
4
- super({:login => "guest", :first_name => "Anonymous", :last_name => "User"}.merge(attributes))
10
+ super({:login => Group::GUEST_CODE, :first_name => "Anonymous", :last_name => "User"}.merge(attributes))
5
11
  @guest = true
6
12
  end
7
13
 
@@ -18,7 +24,7 @@ class GuestUser < User
18
24
  end
19
25
 
20
26
  def group
21
- @group ||= Group.find_by_code("guest")
27
+ @group ||= Group.guest
22
28
  end
23
29
 
24
30
  def groups
@@ -151,17 +151,6 @@ class Page < ActiveRecord::Base
151
151
  def delete_connectors
152
152
  connectors.for_page_version(version).all.each{|c| c.destroy }
153
153
  end
154
-
155
- def connectables_by_connector
156
- @connectables_by_connector ||= connectors.for_page_version(version).inject({}) do |mem, connector|
157
- connectable = connector.connectable_with_deleted
158
- if connectable.class.versioned?
159
- connectable = connectable.as_of_version(connector.connectable_version)
160
- end
161
- mem[connector] = connectable
162
- mem
163
- end
164
- end
165
154
 
166
155
  #This is done to let copy_connectors know which version to pull from
167
156
  #copy_connectors will get called later as an after_update callback
@@ -1,4 +1,5 @@
1
1
  <% content_for(:html_head) do %>
2
+ <%= javascript_include_tag "cms/content_library" %>
2
3
  <% javascript_tag do %>
3
4
  jQuery(function($){
4
5
  var collectionName = '<%= content_type.model_class.name.underscore.pluralize %>'
@@ -12,9 +12,9 @@
12
12
  <iframe src="<%=h cms_toolbar_path(:page_id => @page.id, :page_version => @page.version, :mode => @mode, :page_toolbar => @show_page_toolbar ? 1 : 0) %>" width="100%" height="<%= @show_page_toolbar ? 159 : 100 %>px" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" name="cms_toolbar"></iframe>
13
13
  <% end %>
14
14
 
15
- <% @page.connectables_by_connector.each_pair do |connector, connectable| %>
15
+ <% @_connectors.each_with_index do |connector, i| %>
16
16
  <% content_for(connector.container.to_sym) do %>
17
- <%= render_connector_and_connectable(connector, connectable) %>
17
+ <%= render_connector_and_connectable(connector, @_connectables[i]) %>
18
18
  <% end %>
19
19
  <% end %>
20
20
 
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{browsercms}
8
- s.version = "3.0.3"
8
+ s.version = "3.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["BrowserMedia"]
12
- s.date = %q{2009-10-28}
12
+ s.date = %q{2009-11-09}
13
13
  s.email = %q{github@browsermedia.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -1172,6 +1172,7 @@ Gem::Specification.new do |s|
1172
1172
  "public/images/cms/usercontrols_bg.png",
1173
1173
  "public/images/cms/usercontrols_bg_cap.png",
1174
1174
  "public/javascripts/cms/application.js",
1175
+ "public/javascripts/cms/content_library.js",
1175
1176
  "public/javascripts/cms/editor.js",
1176
1177
  "public/javascripts/cms/sitemap.js",
1177
1178
  "public/javascripts/jquery-ui.js",
@@ -1315,3 +1316,4 @@ Gem::Specification.new do |s|
1315
1316
  else
1316
1317
  end
1317
1318
  end
1319
+
@@ -1,3 +1,27 @@
1
+ #
2
+ # Defines the authentication behavior for controllers in BrowserCMS. It can be added to any controller that needs to
3
+ # hook into the BrowserCMS Authentication behavior like so:
4
+ #
5
+ # class MySuperSecureController < ApplicationController
6
+ # include Cms::Authentication::Controller
7
+ #
8
+ # It is based off Restful_Authentication, and adds in behavior to deal with several concepts specific to BrowserCMS.
9
+ #
10
+ # (Note: 10/8/09 - I was comparing this to a very old version of the generated code from Restful_Authentication,
11
+ # so some of the following items may be 'stock' to that. (Especially #2)
12
+ #
13
+ # 1. Guests - These represents users that are not logged in. What guests can see and do can be modified via the CMS UI. Guests
14
+ # are not considered to be 'logged in'.
15
+ # 2. 'Current' User - The currently logged in user is stored in a thread local, and can be accessed anywhere via 'User.current'.
16
+ # This allows model code to easily record which user is making changes to records, for versioning, etc.
17
+ #
18
+ # 3. 'Admin' Access Denied Page - If users try to access a protected controller, they are redirected to the CMS administration Login page
19
+ # which may be different than the 'front end' user login page. (Cms::Controller handles that differently)
20
+ #
21
+ #
22
+ # To Dos: It appears as though we are storing the 'current' user in two places, @current_user and User.current. This is probably not DRY, but
23
+ # more testing would be needed.
24
+ #
1
25
  module Cms
2
26
  module Authentication
3
27
  module Controller
@@ -12,6 +36,7 @@ module Cms
12
36
  # If the user is not logged in, this will be set to the guest user, which represents a public
13
37
  # user, who will likely have more limited permissions
14
38
  def current_user
39
+ # Note: We have disabled basic_http_auth
15
40
  @current_user ||= begin
16
41
  User.current = (login_from_session || login_from_cookie || User.guest)
17
42
  end
@@ -61,7 +86,7 @@ module Cms
61
86
 
62
87
  # Redirect as appropriate when an access request fails.
63
88
  #
64
- # The default action is to redirect to the login screen.
89
+ # The default action is to redirect to the BrowserCMS admin login screen.
65
90
  #
66
91
  # Override this method in your controllers if you want to have special
67
92
  # behavior in case the user is not authorized
@@ -73,11 +98,6 @@ module Cms
73
98
  store_location
74
99
  redirect_to cms_login_path
75
100
  end
76
- # format.any doesn't work in rails version < http://dev.rubyonrails.org/changeset/8987
77
- # you may want to change format.any to e.g. format.any(:js, :xml)
78
- # format.any do
79
- # request_http_basic_authentication 'Web Password'
80
- # end
81
101
  end
82
102
  end
83
103
 
@@ -162,7 +182,6 @@ module Cms
162
182
 
163
183
  # Cookies shouldn't be allowed to persist past their freshness date,
164
184
  # and they should be changed at each login
165
-
166
185
  def valid_remember_cookie?
167
186
  return nil unless User.current
168
187
  (User.current.remember_token?) &&
@@ -0,0 +1,36 @@
1
+ jQuery(function($){
2
+
3
+ //----- Helper Functions -----------------------------------------------------
4
+ //In all of this code, we are defining functions that we use later
5
+ //None of this actually manipulates the DOM in any way
6
+
7
+ //This is used to get the id part of an elementId
8
+ //For example, if you have section_node_5,
9
+ //you pass this 'section_node_5', 'section_node'
10
+ //and this returns 5
11
+ var getId = function(elementId, s) {
12
+ return elementId.replace(s,'')
13
+ }
14
+
15
+
16
+ var nodeOnDoubleClick = function() {
17
+ if($('#edit_button').hasClass('disabled')) {
18
+ //$('#view_button').click()
19
+ location.href = $('#view_button')[0].href
20
+ } else {
21
+ //$('#edit_button').click()
22
+ location.href = $('#edit_button')[0].href
23
+ }
24
+ }
25
+
26
+ var addNodeOnDoubleClick = function() {
27
+ $('#blocks tr').dblclick(nodeOnDoubleClick)
28
+ }
29
+
30
+ //----- Init -----------------------------------------------------------------
31
+ //In other words, stuff that happens when the page loads
32
+ //This is where we actually manipulate the DOM, fire events, etc.
33
+
34
+ addNodeOnDoubleClick()
35
+
36
+ })
@@ -230,7 +230,7 @@ class Cms::ContentCachingEnabledControllerTest < ActionController::TestCase
230
230
  ActionController::Base.perform_caching = true
231
231
  @page = Factory(:page, :section => root_section, :name => "Test Page", :path => "/page", :publish_on_save => true)
232
232
  @registered_user = Factory(:user)
233
- @registered_user.groups << Group.with_code("guest").first
233
+ @registered_user.groups << Group.guest
234
234
  end
235
235
 
236
236
  def teardown
@@ -315,7 +315,7 @@ class Cms::ContentCachingDisabledControllerTest < ActionController::TestCase
315
315
  ActionController::Base.perform_caching = false
316
316
  @page = Factory(:page, :section => root_section, :name => "Test Page", :path => "/page", :publish_on_save => true)
317
317
  @registered_user = Factory(:user)
318
- @registered_user.groups << Group.with_code("guest").first
318
+ @registered_user.groups << Group.guest
319
319
  end
320
320
 
321
321
  def test_guest_user_views_page_on_public_site
@@ -66,6 +66,13 @@ class Cms::PagesControllerTest < ActionController::TestCase
66
66
  end
67
67
  end
68
68
 
69
+ def test_version
70
+ create_page
71
+ @page.update_attributes(:name => "V2")
72
+ get :version, :id => @page.to_param, :version => 1
73
+ assert_response :success
74
+ end
75
+
69
76
  def test_revert_to
70
77
  create_page
71
78
  @page.update_attributes(:name => "V2")
@@ -2,6 +2,9 @@ require File.join(File.dirname(__FILE__), '/../../test_helper')
2
2
 
3
3
  class Cms::SessionsControllerTest < ActionController::TestCase
4
4
  include Cms::ControllerTestHelper
5
+ def teardown
6
+ User.current = nil
7
+ end
5
8
 
6
9
  def test_not_redirected_to_cms_site_if_public_site
7
10
  @request.host = "foo.com"
@@ -19,6 +22,22 @@ class Cms::SessionsControllerTest < ActionController::TestCase
19
22
  assert_select "title", "CMS Login"
20
23
  end
21
24
 
25
+ def test_return_to
26
+ user = Factory(:user)
27
+ expected_url = "/expected_url"
28
+
29
+ post :create, {:success_url => "", :login => user.login, :password => "password"}, {:return_to => expected_url }
30
+ assert_redirected_to(expected_url)
31
+ end
32
+ def test_success_url_overrides_return_to
33
+ user = Factory(:user)
34
+ expected_url = "/expected_url"
35
+
36
+ post :create, {:success_url => expected_url, :login => user.login, :password => "password"}, {:return_to => "/somewhere_else" }
37
+
38
+ assert_redirected_to(expected_url)
39
+ end
40
+
22
41
  end
23
42
 
24
43
  class Cms::SessionsControllerCacheEnabledTest < ActionController::TestCase
@@ -48,5 +67,10 @@ class Cms::SessionsControllerCacheEnabledTest < ActionController::TestCase
48
67
  log @response.body
49
68
  assert_select "title", "CMS Login"
50
69
  end
51
-
52
- end
70
+
71
+ test "destroy" do
72
+ Cms::SessionsController.any_instance.expects(:logout_user)
73
+ delete :destroy
74
+ assert_redirected_to "/"
75
+ end
76
+ end
@@ -99,7 +99,7 @@ class ActiveSupport::TestCase
99
99
  end
100
100
 
101
101
  def guest_group
102
- Group.find_by_code("guest") || Factory(:group, :code => "guest")
102
+ Group.guest || Factory(:group, :code => Group::GUEST_CODE)
103
103
  end
104
104
 
105
105
  def login_as(user)
@@ -4,4 +4,10 @@ class GroupTest < ActiveSupport::TestCase
4
4
  def test_valid
5
5
  assert Factory.build(:group).valid?
6
6
  end
7
+
8
+ test "Find guest group via method" do
9
+ expected = Group.find_by_code(Group::GUEST_CODE)
10
+ assert_not_nil expected, "Validates that our fixture code is loading a guest user into the database."
11
+ assert_equal expected, Group.guest
12
+ end
7
13
  end
@@ -72,7 +72,7 @@ end
72
72
  class UserPermissionsTest < ActiveSupport::TestCase
73
73
  def setup
74
74
  @user = Factory(:user)
75
- @guest_group = Group.first(:conditions => {:code => "guest"})
75
+ @guest_group = Group.guest
76
76
  end
77
77
 
78
78
  def test_user_permissions
@@ -210,7 +210,7 @@ end
210
210
  class GuestUserTest < ActiveSupport::TestCase
211
211
  def setup
212
212
  @user = User.guest
213
- @guest_group = Group.with_code("guest").first
213
+ @guest_group = Group.guest
214
214
  @public_page = Factory(:page, :section => root_section)
215
215
  @protected_section = Factory(:section, :parent => root_section)
216
216
  @protected_page = Factory(:page, :section => @protected_section)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browsercms_s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Underwood
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-31 00:00:00 +00:00
12
+ date: 2009-11-10 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -1179,6 +1179,7 @@ files:
1179
1179
  - public/images/cms/usercontrols_bg.png
1180
1180
  - public/images/cms/usercontrols_bg_cap.png
1181
1181
  - public/javascripts/cms/application.js
1182
+ - public/javascripts/cms/content_library.js
1182
1183
  - public/javascripts/cms/editor.js
1183
1184
  - public/javascripts/cms/sitemap.js
1184
1185
  - public/javascripts/jquery-ui.js