[ARVADOS] created: 8f20c1723c0614fabedb2c2468932d9245a1fc86

git at public.curoverse.com git at public.curoverse.com
Wed May 21 16:32:56 EDT 2014


        at  8f20c1723c0614fabedb2c2468932d9245a1fc86 (commit)


commit 8f20c1723c0614fabedb2c2468932d9245a1fc86
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed May 21 16:32:35 2014 -0400

    2760: Show folder hierarchy on regular page, not in left nav

diff --git a/apps/workbench/app/assets/stylesheets/folders.css.scss b/apps/workbench/app/assets/stylesheets/folders.css.scss
index 1dea791..163c188 100644
--- a/apps/workbench/app/assets/stylesheets/folders.css.scss
+++ b/apps/workbench/app/assets/stylesheets/folders.css.scss
@@ -1,3 +1,8 @@
-// Place all the styles related to the folders controller here.
-// They will automatically be included in application.css.
-// You can use Sass (SCSS) here: http://sass-lang.com/
+.arv-folder-list > .row {
+    padding-top: 5px;
+    padding-bottom: 5px;
+    padding-right: 1em;
+}
+.arv-folder-list > .row.folder:hover {
+    background: #d9edf7;
+}
diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb
index b62838f..4d6008a 100644
--- a/apps/workbench/app/controllers/application_controller.rb
+++ b/apps/workbench/app/controllers/application_controller.rb
@@ -14,7 +14,6 @@ class ApplicationController < ActionController::Base
   before_filter :check_user_notifications, except: ERROR_ACTIONS
   around_filter :using_reader_tokens, only: [:index, :show]
   before_filter :find_object_by_uuid, except: [:index] + ERROR_ACTIONS
-  before_filter :check_my_folders, :except => ERROR_ACTIONS
   theme :select_theme
 
   begin
@@ -423,15 +422,6 @@ class ApplicationController < ActionController::Base
     }
   }
 
-  def check_my_folders
-    @my_top_level_folders = lambda do
-      @top_level_folders ||= Group.
-        filter([['group_class','=','folder'],
-                ['owner_uuid','=',current_user.uuid]]).
-        sort_by { |x| x.name || '' }
-    end
-  end
-
   def check_user_notifications
     @notification_count = 0
     @notifications = []
diff --git a/apps/workbench/app/controllers/folders_controller.rb b/apps/workbench/app/controllers/folders_controller.rb
index 86ee42b..b87a94b 100644
--- a/apps/workbench/app/controllers/folders_controller.rb
+++ b/apps/workbench/app/controllers/folders_controller.rb
@@ -4,7 +4,7 @@ class FoldersController < ApplicationController
   end
 
   def index_pane_list
-    %w(My_folders Shared_with_me)
+    %w(Folders)
   end
 
   def remove_item
@@ -38,33 +38,37 @@ class FoldersController < ApplicationController
   end
 
   def index
-    @my_folders = []
-    @shared_with_me = []
     @objects = Group.where(group_class: 'folder').order('name')
-    owner_of = {}
-    moretodo = true
-    while moretodo
-      moretodo = false
-      @objects.each do |folder|
-        if !owner_of[folder.uuid]
-          moretodo = true
-          owner_of[folder.uuid] = folder.owner_uuid
-        end
-        if owner_of[folder.owner_uuid]
-          if owner_of[folder.uuid] != owner_of[folder.owner_uuid]
-            owner_of[folder.uuid] = owner_of[folder.owner_uuid]
-            moretodo = true
-          end
-        end
+    parent_of = {}
+    @objects.each do |ob|
+      parent_of[ob.uuid] = ob.owner_uuid
+    end
+    children_of = {false => [], current_user.uuid => []}
+    @objects.each do |ob|
+      if ob.owner_uuid != current_user.uuid and
+          not parent_of.has_key? ob.owner_uuid
+        parent_of[ob.uuid] = false
       end
+      children_of[parent_of[ob.uuid]] ||= []
+      children_of[parent_of[ob.uuid]] << ob
     end
-    @objects.each do |folder|
-      if owner_of[folder.uuid] == current_user.uuid
-        @my_folders << folder
-      else
-        @shared_with_me << folder
+    def buildtree children_of, root_uuid=false
+      tree = {}
+      children_of[root_uuid].andand.each do |ob|
+        tree[ob] = buildtree(children_of, ob.uuid)
+      end
+      tree
+    end
+    def sorted_paths tree, depth=0
+      paths = []
+      tree.keys.sort_by { |ob| ob.name || 'New folder' }.each do |ob|
+        paths << {object: ob, depth: depth}
+        paths += sorted_paths tree[ob], depth+1
       end
+      paths
     end
+    @my_folder_tree = sorted_paths buildtree(children_of, current_user.uuid)
+    @shared_folder_tree = sorted_paths buildtree(children_of, false)
   end
 
   def show
diff --git a/apps/workbench/app/views/folders/_show_folders.html.erb b/apps/workbench/app/views/folders/_show_folders.html.erb
new file mode 100644
index 0000000..f2dd1c0
--- /dev/null
+++ b/apps/workbench/app/views/folders/_show_folders.html.erb
@@ -0,0 +1,19 @@
+<div class="container-fluid arv-folder-list">
+  <% [[@my_folder_tree, 'My folders'],
+     [@shared_folder_tree, 'Shared with me']].each do |tree, label| %>
+    <div class="row">
+      <i class="fa fa-fw fa-folder-open-o"></i> <%= label %>
+    </div>
+    <% tree.each do |foldernode| %>
+      <div class="folder row" style="padding-left: <%= 1 + foldernode[:depth] %>em;">
+        <i class="fa fa-fw fa-folder-o"></i>
+        <%= link_to foldernode[:object] do %>
+          <%= foldernode[:object].name || 'New folder' %>
+        <% end %>
+        <div class="pull-right">
+          <%= render partial: 'delete_object_button', locals: {object: foldernode[:object]} %>
+        </div>
+      </div>
+    <% end %>
+  <% end %>
+</div>
diff --git a/apps/workbench/app/views/folders/_show_my_folders.html.erb b/apps/workbench/app/views/folders/_show_my_folders.html.erb
deleted file mode 100644
index b009acf..0000000
--- a/apps/workbench/app/views/folders/_show_my_folders.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= render(partial: 'show_recent',
-    locals: { comparable: comparable, objects: @my_folders }) %>
diff --git a/apps/workbench/app/views/folders/_show_shared_with_me.html.erb b/apps/workbench/app/views/folders/_show_shared_with_me.html.erb
deleted file mode 100644
index 6ccf983..0000000
--- a/apps/workbench/app/views/folders/_show_shared_with_me.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= render(partial: 'show_recent',
-    locals: { comparable: comparable, objects: @shared_with_me }) %>
diff --git a/apps/workbench/app/views/layouts/application.html.erb b/apps/workbench/app/views/layouts/application.html.erb
index 2d3c4c0..4560885 100644
--- a/apps/workbench/app/views/layouts/application.html.erb
+++ b/apps/workbench/app/views/layouts/application.html.erb
@@ -77,17 +77,9 @@
             </li>
 
             <li class="dropdown">
-              <a href="/folders" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-lg fa-folder-o fa-fw"></i> Folders <b class="caret"></b></a>
-              <ul class="dropdown-menu">
-                <li><%= link_to raw('<i class="fa fa-plus fa-fw"></i> Create new folder'), folders_path, method: :post %></li>
-                <% @my_top_level_folders.call[0..7].each do |folder| %>
-                <li><%= link_to raw('<i class="fa fa-folder-open fa-fw"></i> ') + folder.name, folder_path(folder) %></li>
-                <% end %>
-                <li><a href="/folders">
-                    <i class="fa fa-ellipsis-h fa-fw"></i> Show all folders
-                </a></li>
-              </ul>
-            </li>
+              <a href="/folders">
+                <i class="fa fa-lg fa-folder-o fa-fw"></i> Folders
+            </a></li>
             <li><a href="/collections">
                 <i class="fa fa-lg fa-briefcase fa-fw"></i> Collections (data files)
             </a></li>
diff --git a/apps/workbench/test/integration/folders_test.rb b/apps/workbench/test/integration/folders_test.rb
index dc51b77..3039786 100644
--- a/apps/workbench/test/integration/folders_test.rb
+++ b/apps/workbench/test/integration/folders_test.rb
@@ -8,7 +8,7 @@ class FoldersTest < ActionDispatch::IntegrationTest
     Capybara.current_driver = Capybara.javascript_driver
     visit page_with_token 'active', '/'
     find('nav a', text: 'Folders').click
-    find('.side-nav a,button', text: 'A Folder').
+    find('.arv-folder-list a,button', text: 'A Folder').
       click
     within('.panel', text: api_fixture('groups')['afolder']['name']) do
       find('span', text: api_fixture('groups')['afolder']['name']).click

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list