From f9a7c1f77d40bf4562ce46a1a30550aba4f2b3d9 Mon Sep 17 00:00:00 2001 From: AurĂ©lio A. Heckert Date: Wed, 4 Jun 2014 18:40:04 -0300 Subject: [PATCH] Makes folder listing context-able --- app/helpers/folder_helper.rb | 40 +++++++++++++++++++++++++++------------- app/views/content_viewer/folder.rhtml | 2 +- app/views/profile/sitemap.rhtml | 2 +- app/views/shared/articles_list.rhtml | 11 +++++------ public/stylesheets/application.css | 26 ++++++++++++++++++++++---- test/unit/folder_helper_test.rb | 9 ++++++--- 6 files changed, 62 insertions(+), 28 deletions(-) diff --git a/app/helpers/folder_helper.rb b/app/helpers/folder_helper.rb index c9d0a43..71119a0 100644 --- a/app/helpers/folder_helper.rb +++ b/app/helpers/folder_helper.rb @@ -3,15 +3,17 @@ module FolderHelper include ShortFilename include ArticleHelper - def list_articles(articles, recursive = false) - if !articles.blank? - articles = articles.paginate( + def list_contents(configure={}) + configure[:recursive] ||= false + configure[:list_type] ||= :folder + if !configure[:contents].blank? + configure[:contents] = configure[:contents].paginate( :order => "updated_at DESC", :per_page => 10, :page => params[:npage] ) - render :file => 'shared/articles_list', :locals => {:articles => articles, :recursive => recursive} + render :file => 'shared/articles_list', :locals => configure else content_tag('em', _('(empty folder)')) end @@ -21,21 +23,33 @@ module FolderHelper articles.select {|article| article.display_to?(user)} end - def display_article_in_listing(article, recursive = false, level = 0) - article = FilePresenter.for article - article_link = if article.image? - link_to(' ' * (level * 4) + image_tag(icon_for_article(article)) + short_filename(article.name), article.url.merge(:view => true)) + def display_content_in_listing(configure={}) + recursive = configure[:recursive] || false + list_type = configure[:list_type] || :folder + level = configure[:level] || 0 + content = FilePresenter.for configure[:content] + content_link = if content.image? + link_to(' ' * (level * 4) + + image_tag(icon_for_article(content)) + short_filename(content.name), + content.url.merge(:view => true) + ) else - link_to(' ' * (level * 4) + short_filename(article.name), article.url.merge(:view => true), :class => icon_for_article(article)) + link_to(' ' * (level * 4) + + short_filename(content.name), + content.url.merge(:view => true), :class => icon_for_article(content) + ) end result = content_tag( 'tr', - content_tag('td', article_link )+ - content_tag('td', show_date(article.updated_at), :class => 'last-update'), - :class => 'sitemap-item' + content_tag('td', content_link ) + + content_tag('td', show_date(content.updated_at), :class => 'last-update'), + :class => "#{list_type}-item" ) if recursive - result + article.children.map {|item| display_article_in_listing(item, recursive, level + 1) }.join('') + result + content.children.map {|item| + display_content_in_listing :content=>item, :recursive=>recursive, + :list_type=>list_type, :level=>level+1 + }.join("\n") else result end diff --git a/app/views/content_viewer/folder.rhtml b/app/views/content_viewer/folder.rhtml index a670b39..dbd0914 100644 --- a/app/views/content_viewer/folder.rhtml +++ b/app/views/content_viewer/folder.rhtml @@ -8,5 +8,5 @@ <% if folder.children.empty? %> <%= _('(empty folder)') %> <% else %> - <%= list_articles(folder.children) %> + <%= list_contents(:contents=>folder.children) %> <% end %> diff --git a/app/views/profile/sitemap.rhtml b/app/views/profile/sitemap.rhtml index 0fcf974..c2f2252 100644 --- a/app/views/profile/sitemap.rhtml +++ b/app/views/profile/sitemap.rhtml @@ -1,3 +1,3 @@

<%= _("%s: site map") % profile.name %>

-<%= list_articles(available_articles(@articles, user), false) %> +<%= list_contents :contents=>available_articles(@articles, user), :list_type=>:sitemap %> diff --git a/app/views/shared/articles_list.rhtml b/app/views/shared/articles_list.rhtml index 089a36d..3abfbe3 100644 --- a/app/views/shared/articles_list.rhtml +++ b/app/views/shared/articles_list.rhtml @@ -1,14 +1,13 @@ - - +
- <% articles.each do |article| %> - <% if article.display_to?(user) %> - <%= display_article_in_listing(article, recursive, 0) %> + <% contents.each do |content| %> + <% if content.display_to?(user) %> + <%= display_content_in_listing :content=>content, :list_type=>list_type, :recursive=>recursive %> <% end %> <% end %>
<%= _('Title') %> <%= _('Last update') %>
-

<%= pagination_links(articles, {:param_name => 'npage', :page_links => true}) %>

+

<%= pagination_links contents, :param_name => 'npage', :page_links => true %>

diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 2164e1b..9aa2a28 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -305,17 +305,19 @@ div.pending-tasks { -khtml-border-radius: 2px; border-radius: 2px; } -/* sitemap and agenda */ +/* sitemap and agenda */ -.agenda-item a.icon, .sitemap-item a.icon { +.agenda-item a.icon { background-image: none; line-height: 150%; } -.agenda-item .icon:hover, .sitemap-item .icon:hover { + +.agenda-item:hover, .sitemap-item:hover, .sitemap-item:hover a { background-color: transparent; text-decoration: underline; } + .agenda-item a, a:visited{ font-weight: bold; color: black; @@ -326,6 +328,14 @@ div.pending-tasks { text-decoration: none; } +.sitemap-item a.icon { + background-repeat: no-repeat; + background-position: 0% 50%; + padding-left: 20px; + display: inline-block; + line-height: 16px; +} + .sitemap-item img, .agenda-item img { border: none; } @@ -3453,7 +3463,15 @@ div.with_media_panel .formfield input[type="checkbox"] { .pagination a:hover { color: #2e3436; } -/* ==> @import url('folder.css'); <== */ + +/* Folders */ + +.folder-content .folder-item img { + vertical-align: middle; + position: relative; + left: -3px; +} + .image-gallery { text-align: center; } diff --git a/test/unit/folder_helper_test.rb b/test/unit/folder_helper_test.rb index 54c4562..715fec6 100644 --- a/test/unit/folder_helper_test.rb +++ b/test/unit/folder_helper_test.rb @@ -97,14 +97,17 @@ class FolderHelperTest < ActiveSupport::TestCase article2 = fast_create(Article, {:name => 'Article2', :parent_id => folder.id, :profile_id => profile.id, :updated_at => DateTime.now }) self.stubs(:params).returns({:npage => nil}) - articles = folder.children.find(:all, :order => 'updated_at DESC').paginate(:per_page => 10, :page => params[:npage]) + contents = folder.children.find(:all, :order => 'updated_at DESC').paginate(:per_page => 10, :page => params[:npage]) expects(:user).returns(profile).at_least_once + expects(:list_type).returns(:folder).at_least_once expects(:recursive).returns(false).at_least_once expects(:pagination_links).with(anything, anything).returns('') list = render 'shared/articles_list', binding - expects(:render).with(:file => 'shared/articles_list', :locals => { :articles => articles, :recursive => false}).returns(list) + expects(:render).with(:file => 'shared/articles_list', + :locals => { :contents => contents, :recursive => false, :list_type => :folder } + ).returns(list) - result = list_articles(folder.children) + result = list_contents(:contents=>contents) assert_tag_in_string result, :tag => 'td', :descendant => { :tag => 'a', :attributes => { :href => /.*\/folder-owner\/my-article-[0-9]*(\?|$)/ } }, :content => /Article1/ assert_tag_in_string result, :tag => 'td', :descendant => { :tag => 'a', :attributes => { :href => /.*\/folder-owner\/my-article-[0-9]*(\?|$)/ } }, :content => /Article2/ -- libgit2 0.21.2