comfortable_mexican_sofa 1.3.8 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. data/Gemfile +1 -1
  2. data/README.md +1 -1
  3. data/VERSION +1 -1
  4. data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  5. data/app/assets/javascripts/comfortable_mexican_sofa/application.js +38 -25
  6. data/app/assets/javascripts/comfortable_mexican_sofa/jquery_ui.js +176 -174
  7. data/app/assets/stylesheets/comfortable_mexican_sofa/content.css +142 -32
  8. data/app/assets/stylesheets/comfortable_mexican_sofa/form.css +12 -0
  9. data/app/assets/stylesheets/comfortable_mexican_sofa/jquery_ui.css +16 -16
  10. data/app/assets/stylesheets/comfortable_mexican_sofa/structure.css +3 -2
  11. data/app/assets/stylesheets/comfortable_mexican_sofa/widgets.css +2 -1
  12. data/app/controllers/cms_admin/categories_controller.rb +33 -0
  13. data/app/controllers/cms_admin/files_controller.rb +82 -0
  14. data/app/controllers/cms_admin/pages_controller.rb +8 -4
  15. data/app/controllers/cms_admin/snippets_controller.rb +1 -1
  16. data/app/models/cms/categorization.rb +17 -0
  17. data/app/models/cms/category.rb +22 -0
  18. data/app/models/cms/{upload.rb → file.rb} +17 -3
  19. data/app/models/cms/page.rb +1 -0
  20. data/app/models/cms/site.rb +1 -1
  21. data/app/models/cms/snippet.rb +2 -0
  22. data/app/views/cms_admin/categories/_categories.html.erb +6 -0
  23. data/app/views/cms_admin/categories/_edit.html.erb +7 -0
  24. data/app/views/cms_admin/categories/_form.html.erb +12 -0
  25. data/app/views/cms_admin/categories/_index.html.erb +31 -0
  26. data/app/views/cms_admin/categories/_show.html.erb +16 -0
  27. data/app/views/cms_admin/categories/create.js.erb +7 -0
  28. data/app/views/cms_admin/categories/destroy.js.erb +3 -0
  29. data/app/views/cms_admin/categories/edit.js.erb +3 -0
  30. data/app/views/cms_admin/categories/update.js.erb +6 -0
  31. data/app/views/cms_admin/{uploads → files}/_file.html.erb +1 -1
  32. data/app/views/cms_admin/files/_form.html.erb +15 -0
  33. data/app/views/cms_admin/files/_index.html.erb +13 -0
  34. data/app/views/cms_admin/files/create.js.erb +3 -0
  35. data/app/views/cms_admin/files/destroy.js.erb +3 -0
  36. data/app/views/cms_admin/files/edit.html.erb +5 -0
  37. data/app/views/cms_admin/files/index.html.erb +25 -0
  38. data/app/views/cms_admin/files/new.html.erb +5 -0
  39. data/app/views/cms_admin/layouts/_form.html.erb +1 -1
  40. data/app/views/cms_admin/pages/_form.html.erb +3 -1
  41. data/app/views/cms_admin/pages/_index_branch.html.erb +6 -4
  42. data/app/views/cms_admin/pages/index.html.erb +2 -0
  43. data/app/views/cms_admin/snippets/_form.html.erb +3 -1
  44. data/app/views/cms_admin/snippets/index.html.erb +3 -0
  45. data/app/views/layouts/cms_admin/_head.html.erb +2 -6
  46. data/app/views/layouts/cms_admin/_left.html.erb +1 -0
  47. data/comfortable_mexican_sofa.gemspec +44 -21
  48. data/config/database.yml +2 -8
  49. data/config/locales/en.yml +35 -2
  50. data/config/locales/es.yml +38 -5
  51. data/config/routes.rb +3 -2
  52. data/db/migrate/01_create_cms.rb +23 -4
  53. data/db/migrate/upgrades/05_upgrade_to_1_4_0.rb +33 -0
  54. data/lib/comfortable_mexican_sofa.rb +6 -5
  55. data/lib/comfortable_mexican_sofa/{acts_as_tree.rb → extensions/acts_as_tree.rb} +0 -0
  56. data/lib/comfortable_mexican_sofa/{has_revisions.rb → extensions/has_revisions.rb} +0 -0
  57. data/lib/comfortable_mexican_sofa/extensions/is_categorized.rb +45 -0
  58. data/lib/comfortable_mexican_sofa/{is_mirrored.rb → extensions/is_mirrored.rb} +0 -0
  59. data/lib/comfortable_mexican_sofa/{rails_extensions.rb → extensions/rails.rb} +0 -0
  60. data/lib/comfortable_mexican_sofa/tag.rb +2 -2
  61. data/lib/comfortable_mexican_sofa/tags/{upload.rb → file.rb} +6 -6
  62. data/test/fixtures/cms/categories.yml +3 -0
  63. data/test/fixtures/cms/categorizations.yml +3 -0
  64. data/test/fixtures/cms/{uploads.yml → files.yml} +3 -1
  65. data/test/functional/cms_admin/categories_controller_test.rb +70 -0
  66. data/test/functional/cms_admin/files_controller_test.rb +168 -0
  67. data/test/functional/cms_admin/pages_controller_test.rb +19 -1
  68. data/test/functional/cms_admin/snippets_controller_test.rb +18 -0
  69. data/test/unit/models/block_test.rb +1 -1
  70. data/test/unit/models/categorization_test.rb +76 -0
  71. data/test/unit/models/category_test.rb +39 -0
  72. data/test/unit/models/file_test.rb +33 -0
  73. data/test/unit/models/site_test.rb +9 -0
  74. data/test/unit/tags/asset_test.rb +1 -1
  75. data/test/unit/tags/field_datetime_test.rb +1 -1
  76. data/test/unit/tags/field_integer_test.rb +1 -1
  77. data/test/unit/tags/field_string_test.rb +1 -1
  78. data/test/unit/tags/field_text_test.rb +1 -1
  79. data/test/unit/tags/file_test.rb +67 -0
  80. data/test/unit/tags/helper_test.rb +1 -1
  81. data/test/unit/tags/page_datetime_test.rb +1 -1
  82. data/test/unit/tags/page_integer_test.rb +1 -1
  83. data/test/unit/tags/page_rich_text.rb +1 -1
  84. data/test/unit/tags/page_string_test.rb +1 -1
  85. data/test/unit/tags/page_text_test.rb +1 -1
  86. data/test/unit/tags/partial_test.rb +1 -1
  87. data/test/unit/tags/snippet_test.rb +1 -1
  88. metadata +49 -26
  89. data/app/assets/javascripts/comfortable_mexican_sofa/plupload/plupload.html5.js +0 -1
  90. data/app/assets/javascripts/comfortable_mexican_sofa/plupload/plupload.js +0 -2
  91. data/app/controllers/cms_admin/uploads_controller.rb +0 -29
  92. data/app/views/cms_admin/uploads/_index.html.erb +0 -10
  93. data/app/views/cms_admin/uploads/destroy.js.erb +0 -3
  94. data/test/functional/cms_admin/uploads_controller_test.rb +0 -26
  95. data/test/unit/models/upload_test.rb +0 -32
  96. data/test/unit/tags/upload_test.rb +0 -67
@@ -1,4 +1,5 @@
1
1
  /* -- Dialog Box --------------------------------------------------------- */
2
+ /*
2
3
  .ui-dialog {
3
4
  border: 1px solid #252525;
4
5
  border-radius: 5px;
@@ -32,7 +33,7 @@ a.ui-dialog-titlebar-close {
32
33
  top: 4px;
33
34
  right: 4px;
34
35
  }
35
-
36
+ */
36
37
  /* -- WYMeditor ---------------------------------------------------------- */
37
38
  .wym_box {
38
39
  background: #f1f1f1;
@@ -0,0 +1,33 @@
1
+ class CmsAdmin::CategoriesController < CmsAdmin::BaseController
2
+
3
+ before_filter :load_category, :only => [:edit, :update, :destroy]
4
+
5
+ def edit
6
+ render
7
+ end
8
+
9
+ def create
10
+ @category = Cms::Category.create!(params[:category])
11
+ rescue
12
+ render :nothing => true
13
+ end
14
+
15
+ def update
16
+ @category.update_attributes!(params[:category])
17
+ rescue
18
+ render :nothing => true
19
+ end
20
+
21
+ def destroy
22
+ @category.destroy
23
+ end
24
+
25
+ protected
26
+
27
+ def load_category
28
+ @category = Cms::Category.find(params[:id])
29
+ rescue ActiveRecord::RecordNotFound
30
+ render :nothing => true
31
+ end
32
+
33
+ end
@@ -0,0 +1,82 @@
1
+ class CmsAdmin::FilesController < CmsAdmin::BaseController
2
+
3
+ skip_before_filter :load_fixtures
4
+
5
+ before_filter :load_file, :only => [:edit, :update, :destroy]
6
+
7
+ def index
8
+ return redirect_to :action => :new if @site.files.count == 0
9
+ @files = @site.files.for_category(params[:category]).all(:order => 'cms_files.label')
10
+ end
11
+
12
+ def new
13
+ @file = @site.files.new
14
+ end
15
+
16
+ def create
17
+ respond_to do |format|
18
+ format.html do
19
+ @file = @site.files.new
20
+ file_array = params[:file][:file] || [nil]
21
+ label = params[:file][:label]
22
+
23
+ file_array.each_with_index do |file, i|
24
+ file_params = params[:file].merge(:file => file)
25
+ if file_array.size > 1 && file_params[:label].present?
26
+ label = file_params[:label] + " #{i + 1}"
27
+ end
28
+ @file = @site.files.create!(file_params.merge(:label => label))
29
+ end
30
+
31
+ flash[:notice] = I18n.t('cms.files.created')
32
+ redirect_to :action => :edit, :id => @file
33
+ end
34
+ format.js do
35
+ io = request.env['rack.input'].clone
36
+ io.class.class_eval { attr_accessor :original_filename, :content_type }
37
+ io.original_filename = request.env['HTTP_X_FILE_NAME']
38
+ io.content_type = request.env['CONTENT_TYPE']
39
+ @file = @site.files.create!(:file => io)
40
+ end
41
+ end
42
+ rescue ActiveRecord::RecordInvalid
43
+ respond_to do |format|
44
+ format.html do
45
+ flash.now[:error] = I18n.t('cms.files.creation_failure')
46
+ render :action => :new
47
+ end
48
+ format.js do
49
+ render :nothing => true
50
+ end
51
+ end
52
+ end
53
+
54
+ def update
55
+ @file.update_attributes!(params[:file])
56
+ flash[:notice] = I18n.t('cms.files.updated')
57
+ redirect_to :action => :edit, :id => @file
58
+ rescue ActiveRecord::RecordInvalid
59
+ flash.now[:error] = I18n.t('cms.files.update_failure')
60
+ render :action => :edit
61
+ end
62
+
63
+ def destroy
64
+ @file.destroy
65
+ respond_to do |format|
66
+ format.js
67
+ format.html do
68
+ flash[:notice] = I18n.t('cms.files.deleted')
69
+ redirect_to :action => :index
70
+ end
71
+ end
72
+ end
73
+
74
+ protected
75
+
76
+ def load_file
77
+ @file = @site.files.find(params[:id])
78
+ rescue ActiveRecord::RecordNotFound
79
+ flash[:error] = I18n.t('cms.files.not_found')
80
+ redirect_to :action => :index
81
+ end
82
+ end
@@ -4,11 +4,15 @@ class CmsAdmin::PagesController < CmsAdmin::BaseController
4
4
  before_filter :build_cms_page, :only => [:new, :create]
5
5
  before_filter :load_cms_page, :only => [:edit, :update, :destroy]
6
6
  before_filter :preview_cms_page, :only => [:create, :update]
7
- before_filter :build_upload_file, :only => [:new, :edit]
7
+ before_filter :build_file, :only => [:new, :edit]
8
8
 
9
9
  def index
10
10
  return redirect_to :action => :new if @site.pages.count == 0
11
- @pages = [@site.pages.root].compact
11
+ if params[:category].present?
12
+ @pages = @site.pages.for_category(params[:category]).all(:order => 'label')
13
+ else
14
+ @pages = [@site.pages.root].compact
15
+ end
12
16
  end
13
17
 
14
18
  def new
@@ -81,8 +85,8 @@ protected
81
85
  @page.layout ||= (@page.parent && @page.parent.layout || @site.layouts.first)
82
86
  end
83
87
 
84
- def build_upload_file
85
- @upload = Cms::Upload.new
88
+ def build_file
89
+ @file = Cms::File.new
86
90
  end
87
91
 
88
92
  def load_cms_page
@@ -5,7 +5,7 @@ class CmsAdmin::SnippetsController < CmsAdmin::BaseController
5
5
 
6
6
  def index
7
7
  return redirect_to :action => :new if @site.snippets.count == 0
8
- @snippets = @site.snippets.all(:order => 'label')
8
+ @snippets = @site.snippets.for_category(params[:category]).all(:order => 'label')
9
9
  end
10
10
 
11
11
  def new
@@ -0,0 +1,17 @@
1
+ class Cms::Categorization < ActiveRecord::Base
2
+
3
+ set_table_name :cms_categorizations
4
+
5
+ # -- Relationships --------------------------------------------------------
6
+ belongs_to :category
7
+ belongs_to :categorized,
8
+ :polymorphic => true
9
+
10
+ # -- Validations ----------------------------------------------------------
11
+ validates :categorized_type, :categorized_id,
12
+ :presence => true
13
+ validates :category_id,
14
+ :presence => true,
15
+ :uniqueness => { :scope => [:categorized_type, :categorized_id] }
16
+
17
+ end
@@ -0,0 +1,22 @@
1
+ class Cms::Category < ActiveRecord::Base
2
+
3
+ set_table_name :cms_categories
4
+
5
+ # -- Relationships --------------------------------------------------------
6
+ has_many :categorizations,
7
+ :dependent => :destroy
8
+
9
+ # -- Validations ----------------------------------------------------------
10
+ validates :label,
11
+ :presence => true,
12
+ :uniqueness => { :scope => :categorized_type }
13
+ validates :categorized_type,
14
+ :presence => true
15
+
16
+ # -- Scopes ---------------------------------------------------------------
17
+ default_scope order(:label)
18
+ scope :of_type, lambda { |type|
19
+ where(:categorized_type => type)
20
+ }
21
+
22
+ end
@@ -1,7 +1,9 @@
1
- class Cms::Upload < ActiveRecord::Base
1
+ class Cms::File < ActiveRecord::Base
2
+
3
+ set_table_name :cms_files
4
+
5
+ cms_is_categorized
2
6
 
3
- set_table_name :cms_uploads
4
-
5
7
  # -- AR Extensions --------------------------------------------------------
6
8
  has_attached_file :file, ComfortableMexicanSofa.config.upload_file_options
7
9
 
@@ -12,4 +14,16 @@ class Cms::Upload < ActiveRecord::Base
12
14
  validates :site_id, :presence => true
13
15
  validates_attachment_presence :file
14
16
 
17
+ validates_uniqueness_of :file_file_name,
18
+ :scope => :site_id
19
+
20
+ # -- Callbacks ------------------------------------------------------------
21
+ before_save :assign_label
22
+
23
+ protected
24
+
25
+ def assign_label
26
+ self.label = self.label.blank?? self.file_file_name.gsub(/\.[^\.]*?$/, '').titleize : self.label
27
+ end
28
+
15
29
  end
@@ -3,6 +3,7 @@ class Cms::Page < ActiveRecord::Base
3
3
  set_table_name :cms_pages
4
4
 
5
5
  cms_acts_as_tree :counter_cache => :children_count
6
+ cms_is_categorized
6
7
  cms_is_mirrored
7
8
  cms_has_revisions_for :blocks_attributes
8
9
 
@@ -6,7 +6,7 @@ class Cms::Site < ActiveRecord::Base
6
6
  has_many :layouts, :dependent => :destroy
7
7
  has_many :pages, :dependent => :destroy
8
8
  has_many :snippets, :dependent => :destroy
9
- has_many :uploads, :dependent => :destroy
9
+ has_many :files, :dependent => :destroy
10
10
 
11
11
  # -- Callbacks ------------------------------------------------------------
12
12
  before_validation :assign_label
@@ -1,6 +1,8 @@
1
1
  class Cms::Snippet < ActiveRecord::Base
2
2
 
3
3
  set_table_name :cms_snippets
4
+
5
+ cms_is_categorized
4
6
  cms_is_mirrored
5
7
  cms_has_revisions_for :content
6
8
 
@@ -0,0 +1,6 @@
1
+ <% object ||= categories %>
2
+ <% object.categories.each do |category| %>
3
+ <span class='category'>
4
+ <%= category.label %>
5
+ </span>
6
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <% category ||= edit %>
2
+ <div class='category edit' id='<%= dom_id(category) %>'>
3
+ <%= form_for @category, :as => :category, :url => cms_admin_site_category_path(@site, category), :remote => true do |form| %>
4
+ <%= form.text_field :label %>
5
+ <%= form.submit t('.save') %>
6
+ <% end %>
7
+ </div>
@@ -0,0 +1,12 @@
1
+ <% object = form.object %>
2
+ <% if (categories = Cms::Category.of_type(object.class.to_s)).present? %>
3
+ <%= form.simple_field t('.label'), nil, :class => 'categories' do %>
4
+ <% categories.each do |category| %>
5
+ <%= hidden_field_tag "#{object.class.to_s.demodulize.downcase}[category_ids][#{category.id}]", 0, :id => nil %>
6
+ <label>
7
+ <%= check_box_tag "#{object.class.to_s.demodulize.downcase}[category_ids][#{category.id}]", 1, object.categories.member?(category), :id => nil %>
8
+ <%= category.label %>
9
+ </label>
10
+ <% end %>
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1,31 @@
1
+ <% type ||= index %>
2
+
3
+ <div class='categories_widget'>
4
+
5
+ <div class='label'><%= t('.label') %></div>
6
+
7
+ <%= link_to t('.edit'), '#', :class => 'action_link edit', 'data-state' => 'edit' %>
8
+ <%= link_to t('.done'), '#', :class => 'action_link done', 'data-state' => 'done', :style => 'display:none' %>
9
+
10
+ <div class='categories read'>
11
+ <div class='category all <%= (params[:category].blank?? 'active' : nil ) %>'>
12
+ <%= link_to t('.all'), :category => nil %>
13
+ </div>
14
+ <% Cms::Category.of_type(type).each do |category| %>
15
+ <%= render :partial => 'cms_admin/categories/show', :object => category, :locals => { :read => true } %>
16
+ <% end %>
17
+ </div>
18
+
19
+ <div class='categories editable' style='display:none'>
20
+ <% Cms::Category.of_type(type).each do |category| %>
21
+ <%= render :partial => 'cms_admin/categories/show', :object => category %>
22
+ <% end %>
23
+ <div class='category new'>
24
+ <%= form_for :category, :url => cms_admin_site_categories_path(@site), :remote => true do |form| %>
25
+ <%= form.hidden_field :categorized_type, :value => type %>
26
+ <%= form.text_field :label %>
27
+ <%= form.submit t('.add') %>
28
+ <% end %>
29
+ </div>
30
+ </div>
31
+ </div>
@@ -0,0 +1,16 @@
1
+ <%
2
+ category ||= show
3
+ read ||= false
4
+ categories = [params[:category]].flatten.compact
5
+ active = categories.flatten.member?(category.label)
6
+ %>
7
+
8
+ <div class='category <%= read && active ? 'active' : nil %>' id="<%= dom_id(category)%>">
9
+ <% if read %>
10
+ <% categories = active ? categories.reject{|c| c == category.label} : categories << category.label %>
11
+ <%= link_to category.label, "?#{{:category => categories}.to_param}" %>
12
+ <% else %>
13
+ <%= link_to category.label, edit_cms_admin_site_category_path(@site, category), :remote => true %>
14
+ <%= link_to 'x', cms_admin_site_category_path(@site, category), :method => :delete, :remote => true, :confirm => t('.are_you_sure'), :class => 'delete' %>
15
+ <% end %>
16
+ </div>
@@ -0,0 +1,7 @@
1
+ $('.categories_widget .categories.editable .category.new').before(
2
+ '<%= escape_javascript(render :partial => "show", :object => @category ) %>'
3
+ );
4
+ $('.categories_widget .categories.read').append(
5
+ '<%= escape_javascript(render :partial => "show", :object => @category, :locals => { :read => true }) %>'
6
+ );
7
+ $('.categories_widget .categories.editable .category.new form input#category_label').val('');
@@ -0,0 +1,3 @@
1
+ $('.categories .category#<%= dom_id(@category) %>').fadeOut('slow', function(){
2
+ $(this).remove()
3
+ })
@@ -0,0 +1,3 @@
1
+ $('.categories.editable .category#<%= dom_id(@category) %>').replaceWith(
2
+ '<%= escape_javascript(render :partial => "edit", :object => @category ) %>'
3
+ );
@@ -0,0 +1,6 @@
1
+ $('.categories.editable .category#<%= dom_id(@category) %>').replaceWith(
2
+ '<%= escape_javascript(render :partial => "show", :object => @category ) %>'
3
+ );
4
+ $('.categories.read .category#<%= dom_id(@category) %>').replaceWith(
5
+ '<%= escape_javascript(render :partial => "show", :object => @category, :locals => { :read => true } ) %>'
6
+ );
@@ -6,5 +6,5 @@
6
6
  end
7
7
  %>
8
8
  <%= link_to file_name, file.file.url, :target => '_blank', :class => 'filename' %>
9
- <%= link_to span_tag('x'), cms_admin_site_upload_path(@site, file), :method => :delete, :remote => true, :class => 'delete' %>
9
+ <%= link_to span_tag('x'), cms_admin_site_file_path(@site, file), :method => :delete, :remote => true, :class => 'delete' %>
10
10
  </div>
@@ -0,0 +1,15 @@
1
+ <%= form.text_field :label %>
2
+ <% if @file.new_record? %>
3
+ <%= form.file_field :file, :multiple => true %>
4
+ <% else %>
5
+ <%= form.simple_field 'File', nil do %>
6
+ <%= link_to @file.file.url, @file.file.url, :target => '_blank' %>
7
+ <% end %>
8
+ <% end %>
9
+ <%= form.text_area :description %>
10
+
11
+ <%= render :partial => 'cms_admin/categories/form', :object => form %>
12
+
13
+ <%= form.simple_field nil, nil, :class => 'submit_element' do %>
14
+ <%= form.submit t(@file.new_record?? '.create' : '.update'), :disable_builder => true %>
15
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <div id='file_uploads' class='box'>
2
+
3
+ <%= form_for :file, :url => cms_admin_site_files_path(@site) do |form| %>
4
+ <a id='uploader_button' href='#' class='big button'><%= t('.button') %></a>
5
+ <%= form.file_field :file, :multiple => true %>
6
+ <% end %>
7
+
8
+ <div id='uploaded_files'>
9
+ <% Cms::File.order('label').all.each do |file| %>
10
+ <%= render :partial => 'cms_admin/files/file', :object => file %>
11
+ <% end %>
12
+ </div>
13
+ </div>
@@ -0,0 +1,3 @@
1
+ $('#uploaded_files').prepend(
2
+ '<%= escape_javascript(render :partial => "file", :object => @file ) %>'
3
+ );
@@ -0,0 +1,3 @@
1
+ $(".file#<%= dom_id(@file) %>").fadeOut('slow', function(){
2
+ $(this).remove()
3
+ })
@@ -0,0 +1,5 @@
1
+ <h1><%= t('.title')%></h1>
2
+
3
+ <%= cms_form_for @file, :as => :file, :url => {:action => :update} do |form| %>
4
+ <%= render :partial => 'form', :object => form %>
5
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <%= link_to span_tag(t('.new_link')), new_cms_admin_site_file_path(@site), :class => 'big button' %>
2
+ <h1><%= t('.title')%></h1>
3
+
4
+ <%= render :partial => 'cms_admin/categories/index', :object => 'Cms::File' %>
5
+
6
+ <ul class='list'>
7
+ <% @files.each do |file| %>
8
+ <li id='<%= dom_id(file) %>'>
9
+ <div class='item'>
10
+ <div class='icon'></div>
11
+ <div class='action_links'>
12
+ <%= link_to t('.edit'), edit_cms_admin_site_file_path(@site, file) %>
13
+ <%= link_to t('.delete'), cms_admin_site_file_path(@site, file), :method => :delete, :confirm => t('.are_you_sure') %>
14
+ </div>
15
+ <div class='label'>
16
+ <%= link_to file.label, edit_cms_admin_site_file_path(@site, file) %>
17
+ <%= render :partial => '/cms_admin/categories/categories', :object => file %>
18
+ <div class='sublabel'>
19
+ <%= link_to file.file_file_name, file.file.url, :target => '_blank' %>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </li>
24
+ <% end %>
25
+ </ul>