diff --git a/Gemfile b/Gemfile index 11e9d38..cadb82d 100644 --- a/Gemfile +++ b/Gemfile @@ -44,7 +44,7 @@ gem 'execjs' gem 'therubyracer' gem 'omniauth-facebook' gem 'ancestry' - +gem 'simple_form' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console diff --git a/Gemfile.lock b/Gemfile.lock index 65fc7a4..0e00c51 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -185,6 +185,9 @@ GEM sdoc (0.4.1) json (~> 1.7, >= 1.7.7) rdoc (~> 4.0) + simple_form (3.1.0) + actionpack (~> 4.0) + activemodel (~> 4.0) slim (3.0.1) temple (~> 0.7.3) tilt (>= 1.3.3, < 2.1) @@ -242,6 +245,7 @@ DEPENDENCIES rspec-rails sass-rails (~> 5.0) sdoc (~> 0.4.0) + simple_form slim spring therubyracer diff --git a/app/controllers/folders_controller.rb b/app/controllers/folders_controller.rb index 57695f5..a51ee90 100644 --- a/app/controllers/folders_controller.rb +++ b/app/controllers/folders_controller.rb @@ -2,18 +2,21 @@ class FoldersController < ApplicationController before_action :authenticate_user! + def show + @folder = Folder.find(params[:id]) + end + def new @folder = Folder.new(parent_id: params[:parent_id], user_id: current_user.id) end def index - @folder = Folder.new - @folders = Folder.all + @folders = Folder.roots end def create @folder = Folder.create folder_params - redirect_to folders_path + redirect_to folders_tree_folders_path end def destroy @@ -22,6 +25,15 @@ def destroy redirect_to folders_path end + def folders_tree + @folder = Folder.new + @folders = Folder.all + end + + def folders_form + @folder = Folder.new(parent_id: params[:parent_id], user_id: current_user.id) + end + private def folder_params @@ -29,3 +41,6 @@ def folder_params end end + + + diff --git a/app/helpers/folders_helper.rb b/app/helpers/folders_helper.rb index 5100e28..0774e69 100644 --- a/app/helpers/folders_helper.rb +++ b/app/helpers/folders_helper.rb @@ -4,4 +4,12 @@ def nested_folders(folders) render(folder) + content_tag(:div, nested_folders(sub_folders), :class => "nested_folders") end.join.html_safe end + + def nested_folders_tree(folders) + folders.map do |folder, sub_folders| + render("folder_item", folder: folder) + content_tag(:div, nested_folders_tree(sub_folders), :class => "nested_folders") + end.join.html_safe + end + end + diff --git a/app/views/folders/_folder.html.slim b/app/views/folders/_folder.html.slim index 0a71b25..4f56bb4 100644 --- a/app/views/folders/_folder.html.slim +++ b/app/views/folders/_folder.html.slim @@ -1,9 +1,2 @@ -.folder - .created_at - = folder.created_at.strftime("%B %d, %Y") - .name - = folder.name - .actions - = link_to "Create subfolder", new_folder_path(parent_id: folder) - = "|" - = link_to "Destroy", folder, method: :delete, data: {confirm: "Are you sure?"} +li + = link_to folder.name, folder_path(folder) diff --git a/app/views/folders/_folder_item.html.slim b/app/views/folders/_folder_item.html.slim new file mode 100644 index 0000000..08cf964 --- /dev/null +++ b/app/views/folders/_folder_item.html.slim @@ -0,0 +1,9 @@ +.folder + .created_at + = folder.created_at.strftime("%B %d, %Y") + .name + = folder.name + .actions + = link_to "Create subfolder", folders_form_folders_path(parent_id: folder) + = "|" + = link_to "Destroy", folder, method: :delete, data: {confirm: "Are you sure?"} \ No newline at end of file diff --git a/app/views/folders/folders_form.html.slim b/app/views/folders/folders_form.html.slim new file mode 100644 index 0000000..a1ba2b8 --- /dev/null +++ b/app/views/folders/folders_form.html.slim @@ -0,0 +1,8 @@ +h1 Create subfolder + += render "folder_item", folder: @folder.parent if @folder.parent + += render "form" + +p + = link_to "Back to Folders", folders_path diff --git a/app/views/folders/folders_tree.html.slim b/app/views/folders/folders_tree.html.slim new file mode 100644 index 0000000..6dc4d0b --- /dev/null +++ b/app/views/folders/folders_tree.html.slim @@ -0,0 +1,5 @@ +h1 Folders + += nested_folders_tree @folders.arrange(:order => :created_at) + += render "form" \ No newline at end of file diff --git a/app/views/folders/index.html.slim b/app/views/folders/index.html.slim index 433ca6a..625434b 100644 --- a/app/views/folders/index.html.slim +++ b/app/views/folders/index.html.slim @@ -1,5 +1,5 @@ h1 Folders -= nested_folders @folders.arrange(:order => :created_at) - -= render "form" +ul + - @folders.each do |folder| + = render folder diff --git a/app/views/folders/show.html.slim b/app/views/folders/show.html.slim new file mode 100644 index 0000000..6b98e1f --- /dev/null +++ b/app/views/folders/show.html.slim @@ -0,0 +1,8 @@ +h1 + = @folder.name + +ul + li + = link_to '/..', @folder.parent ? folder_path(@folder.parent) : folders_path + - @folder.children.each do |child| + = render child \ No newline at end of file diff --git a/app/views/layouts/_navigation.html.slim b/app/views/layouts/_navigation.html.slim index f62f164..1255ad3 100644 --- a/app/views/layouts/_navigation.html.slim +++ b/app/views/layouts/_navigation.html.slim @@ -7,7 +7,7 @@ nav.navbar.navbar-inverse.navbar-fixed-top span.icon-bar span.icon-bar span.icon-bar - = link_to 'Home', root_path, class: 'navbar-brand' + = link_to 'Home', folders_path, class: 'navbar-brand' .collapse.navbar-collapse ul.nav.navbar-nav = render 'layouts/navigation_links' \ No newline at end of file diff --git a/app/views/layouts/_navigation_links.html.erb b/app/views/layouts/_navigation_links.html.erb index c815701..de9dcb5 100644 --- a/app/views/layouts/_navigation_links.html.erb +++ b/app/views/layouts/_navigation_links.html.erb @@ -9,7 +9,7 @@ <% end %> <% if user_signed_in? %>