From ee45f9287fd8acfe03d36f3218151d733778caa7 Mon Sep 17 00:00:00 2001 From: Rodrigo Souto Date: Wed, 16 Jul 2014 19:22:34 -0300 Subject: [PATCH] [media-panel-improvements] Published media folder selection filter --- app/controllers/my_profile/cms_controller.rb | 18 ++++++++++++++++-- app/helpers/forms_helper.rb | 4 ++-- app/models/article.rb | 1 + app/models/profile.rb | 1 - app/views/cms/_published_media_items.html.erb | 12 ++++++++++++ app/views/cms/_text_editor_sidebar.html.erb | 18 ++++-------------- app/views/cms/media_upload.js.erb | 4 ++-- public/javascripts/media-panel.js | 43 +++++++++++++++++++++++++++++++++++++++++++ public/javascripts/media-upload.js | 14 -------------- 9 files changed, 80 insertions(+), 35 deletions(-) create mode 100644 app/views/cms/_published_media_items.html.erb create mode 100644 public/javascripts/media-panel.js delete mode 100644 public/javascripts/media-upload.js diff --git a/app/controllers/my_profile/cms_controller.rb b/app/controllers/my_profile/cms_controller.rb index d439479..8f3cb60 100644 --- a/app/controllers/my_profile/cms_controller.rb +++ b/app/controllers/my_profile/cms_controller.rb @@ -329,6 +329,13 @@ class CmsController < MyProfileController #render :text => article_list_to_json([file]), :content_type => 'text/plain' end + def published_media_items + parent = profile.articles.find(params[:parent_id]) + load_recent_files(parent) + @published_media_items_id = params[:parent_id] + render :partial => 'published_media_items' + end + protected include CmsHelper @@ -425,14 +432,21 @@ class CmsController < MyProfileController {:images => _('Images'), :generics => _('Files')} end - def load_recent_files + def load_recent_files(parent = nil) #TODO Since we only have special support for images, I'm limiting myself to # consider generic files as non-images. In the future, with more supported # file types we'll need to have a smart way to fetch from the database # scopes of each supported type as well as the non-supported types as a # whole. @recent_files = {} - files = profile.files.more_recent + if parent.present? + files = parent.children.files + @published_media_items_id = parent.id + else + files = profile.files + @published_media_items_id = 'recent-media' + end + files = files.more_recent @recent_files[:images] = files.images.limit(6) @recent_files[:generics] = files.no_images.limit(6) end diff --git a/app/helpers/forms_helper.rb b/app/helpers/forms_helper.rb index 44f3626..93f358e 100644 --- a/app/helpers/forms_helper.rb +++ b/app/helpers/forms_helper.rb @@ -265,7 +265,7 @@ module FormsHelper ) end - def select_profile_folder(label_text, field_id, profile, default_value='', html_options = {}, js_options = {}, find_options = {}) + def select_profile_folder(label_text, field_id, profile, default_value='', html_options = {}, js_options = {}, find_options = {}, extra_options = {}) if find_options.empty? folders = profile.folders else @@ -276,7 +276,7 @@ module FormsHelper select_tag( field_id, options_for_select( - [[profile.identifier, '']] + + [[(extra_options[:root_label] || profile.identifier), '']] + folders.collect {|f| [ profile.identifier + '/' + f.full_name, f.id.to_s ] }, default_value.to_s ), diff --git a/app/models/article.rb b/app/models/article.rb index 4df59b2..5efb766 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -463,6 +463,7 @@ class Article < ActiveRecord::Base scope :images, :conditions => { :is_image => true } scope :no_images, :conditions => { :is_image => false } scope :text_articles, :conditions => [ 'articles.type IN (?)', text_article_types ] + scope :files, :conditions => { :type => 'UploadedFile' } scope :with_types, lambda { |types| { :conditions => [ 'articles.type IN (?)', types ] } } scope :more_popular, :order => 'hits DESC' diff --git a/app/models/profile.rb b/app/models/profile.rb index 26e7a1e..1506d8d 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -200,7 +200,6 @@ class Profile < ActiveRecord::Base has_many :tasks, :dependent => :destroy, :as => 'target' has_many :events, :source => 'articles', :class_name => 'Event', :order => 'start_date' - has_many :files, :source => 'articles', :class_name => 'UploadedFile', :order => 'start_date' def find_in_all_tasks(task_id) begin diff --git a/app/views/cms/_published_media_items.html.erb b/app/views/cms/_published_media_items.html.erb new file mode 100644 index 0000000..abddc44 --- /dev/null +++ b/app/views/cms/_published_media_items.html.erb @@ -0,0 +1,12 @@ +
+ <% file_types.each do |key, header| %> + <% display = @recent_files[key].present? ? '' : 'none' %> +
+

<%= header %>

+ <% @recent_files[key].each do |file| %> + <% @file = file %> + <%= render :partial => "cms/media_panel/#{key.to_s.singularize}" %> + <% end %> +
+ <% end %> +
diff --git a/app/views/cms/_text_editor_sidebar.html.erb b/app/views/cms/_text_editor_sidebar.html.erb index 8f81070..ff65ab9 100644 --- a/app/views/cms/_text_editor_sidebar.html.erb +++ b/app/views/cms/_text_editor_sidebar.html.erb @@ -23,20 +23,10 @@
<%= _('Published media') %>
+ <%= select_profile_folder(nil, :parent_id, profile, 'recent-media', {'data-url' => url_for({:controller => 'cms', :action => 'published_media_items', :profile => profile.identifier})}, {}, + "type='Folder' or type='Gallery'", {:root_label => _('Recent media')}) %> <%= render :partial => 'drag_and_drop_note' %> -
- <% file_types.each do |key, label| %> - <% if @recent_files[key].present? %> -
-

<%= label %>

- <% @recent_files[key].each do |file| %> - <% @file = file %> - <%= render :partial => "cms/media_panel/#{key.to_s.singularize}" %> - <% end %> -
- <% end %> - <% end %> -
+ <%= render :partial => 'published_media_items' %>
-<%= javascript_include_tag 'jquery.fileupload.js', 'tmpl.js', 'media-upload.js' %> +<%= javascript_include_tag 'jquery.fileupload.js', 'tmpl.js', 'media-panel.js' %> diff --git a/app/views/cms/media_upload.js.erb b/app/views/cms/media_upload.js.erb index ea8762d..a383e63 100644 --- a/app/views/cms/media_upload.js.erb +++ b/app/views/cms/media_upload.js.erb @@ -1,7 +1,7 @@ <% if @file.valid? %> <% klass = @file.class.name.split('::').last.to_css_class %> - jQuery("#published-media .items .<%= klass.pluralize %> h3").after("<%= j render :partial => "cms/media_panel/#{klass}" %>"); - jQuery("#published-media .items .<%= klass.pluralize %>").show(); + jQuery("#published-media #recent-media .<%= klass.pluralize %> h3").after("<%= j render :partial => "cms/media_panel/#{klass}" %>"); + jQuery("#published-media #recent-media .<%= klass.pluralize %>").show(); <% else %> alert("Failed to upload file: <%= j @file.errors.full_messages.join(', ').html_safe %>"); <% end %> diff --git a/public/javascripts/media-panel.js b/public/javascripts/media-panel.js new file mode 100644 index 0000000..79939de --- /dev/null +++ b/public/javascripts/media-panel.js @@ -0,0 +1,43 @@ +jQuery('#file').fileupload({ + add: function(e, data){ + data.context = jQuery(tmpl("template-upload", data.files[0])); + jQuery('#media-upload-form').append(data.context); + data.submit(); + }, + progress: function (e, data) { + if (data.context) { + progress = parseInt(data.loaded / data.total * 100, 10); + data.context.find('.bar').css('width', progress + '%'); + data.context.find('.percentage').text(progress + '%'); + } + } +}); + +jQuery('#published-media #parent_id').change(function(){ + value = jQuery(this).val(); + if(value == '') + value = 'recent-media' + selector = '#published-media #'+value + + if (jQuery(selector).length > 0){ + jQuery('#published-media .items').hide(); + jQuery(selector).show(); + } else { + jQuery('#published-media').addClass('fetching'); + url = jQuery(this).data('url'); + jQuery.ajax({ + url: url, + data: {"parent_id":value}, + dataType: 'html', + success: function(response) { + jQuery('#published-media .items').hide(); + jQuery("#published-media").append('
' + response + '
'); + jQuery('#published-media').removeClass('fetching'); + }, + error: function(response, textStatus, xhr) { + console.log(response); + console.log(textStatus); + } + }); + } +}); diff --git a/public/javascripts/media-upload.js b/public/javascripts/media-upload.js deleted file mode 100644 index 7d55cdf..0000000 --- a/public/javascripts/media-upload.js +++ /dev/null @@ -1,14 +0,0 @@ -jQuery('#file').fileupload({ - add: function(e, data){ - data.context = jQuery(tmpl("template-upload", data.files[0])); - jQuery('#media-upload-form').append(data.context); - data.submit(); - }, - progress: function (e, data) { - if (data.context) { - progress = parseInt(data.loaded / data.total * 100, 10); - data.context.find('.bar').css('width', progress + '%'); - data.context.find('.percentage').text(progress + '%'); - } - } -}); -- libgit2 0.21.2