From 9e15d1ea42d6f86b068f91173af5ea436c7e612a Mon Sep 17 00:00:00 2001 From: aignatov-bio Date: Thu, 27 Feb 2020 16:04:44 +0100 Subject: [PATCH] Refactor experiment sidebar --- app/assets/javascripts/sidebar.js | 58 ++++++++++++++++++- app/assets/stylesheets/partials/_sidebar.scss | 4 -- .../stylesheets/partials/_tree_view.scss | 17 ++++++ app/controllers/projects_controller.rb | 9 +++ app/views/shared/_sidebar.html.erb | 6 +- .../shared/sidebar/_experiments.html.erb | 18 ++++-- app/views/shared/sidebar/_my_modules.html.erb | 4 +- app/views/shared/sidebar/_projects.html.erb | 15 ++++- 8 files changed, 116 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/sidebar.js b/app/assets/javascripts/sidebar.js index e8405f58e..7bb33cae6 100644 --- a/app/assets/javascripts/sidebar.js +++ b/app/assets/javascripts/sidebar.js @@ -272,4 +272,60 @@ }); scrollToSelectedItem(); -}(window)); +}); + + + +var Sidebar = (function() { + + const SIDEBAR_ID = '#slide-panel'; + const STORAGE_TREE_KEY = 'scinote-sidebar-tree-state'; + const STORAGE_SCROLL_TREE_KEY = 'scinote-sidebar-tree-scroll-state'; + + function toggleTree($tree_childs) { + $tree_childs.toggleClass('hidden') + $.each($tree_childs, (i, tree_child) => { + $(tree_child).closest('.branch').find('.tree-toggle').first().toggleClass('fa-caret-down').toggleClass('fa-caret-right') + }) + } + + function saveCurrentState() { + var config = [] + $.each($(SIDEBAR_ID).find('.tree-child:not(:hidden)'), (i, branch) => { + config.push(`[data-branch-id=${branch.dataset.branchId}]`) + }) + sessionStorage.setItem(STORAGE_TREE_KEY, config.join(',')); + } + + function initSideBar() { + $(SIDEBAR_ID).on('click', '.tree-toggle', function() { + var $tree_child = $(this).closest('.branch').find('.tree-child').first() + toggleTree($tree_child) + saveCurrentState(); + PerfectSb().update_all(); + }) + + $(SIDEBAR_ID).find('.tree').scroll(function() { + sessionStorage.setItem(STORAGE_SCROLL_TREE_KEY, $(this).scrollTop()); + }) + + toggleTree($(SIDEBAR_ID).find('.tree-child[data-active="true"]')) + toggleTree($(SIDEBAR_ID).find('.tree-child.hidden').filter(sessionStorage.getItem(STORAGE_TREE_KEY))) + $('#wrapper').show(); + + PerfectSb().update_all(); + $(SIDEBAR_ID).find('.tree').scrollTo(sessionStorage.getItem(STORAGE_SCROLL_TREE_KEY)); + } + + return { + init: (mode) => { + if ($(SIDEBAR_ID).length) { + initSideBar() + } + } + }; +}()); + +$(document).on('turbolinks:load', function() { + Sidebar.init(); +}); diff --git a/app/assets/stylesheets/partials/_sidebar.scss b/app/assets/stylesheets/partials/_sidebar.scss index 8ad802a2b..d376eb032 100644 --- a/app/assets/stylesheets/partials/_sidebar.scss +++ b/app/assets/stylesheets/partials/_sidebar.scss @@ -66,10 +66,6 @@ opacity: 1; } - .fa-caret-right { - padding: 3px 5px; - } - .tree { margin-bottom: 0; opacity: 1; diff --git a/app/assets/stylesheets/partials/_tree_view.scss b/app/assets/stylesheets/partials/_tree_view.scss index c7cafa298..9850415c6 100644 --- a/app/assets/stylesheets/partials/_tree_view.scss +++ b/app/assets/stylesheets/partials/_tree_view.scss @@ -85,7 +85,24 @@ } .tree-link { + align-items: center; display: flex; + padding-left: 0; + position: relative; + + .tree-toggle { + display: inline-block; + line-height: 30px; + position: absolute; + text-align: center; + top: 10px; + width: 30px; + z-index: 2; + } + + .line-wrap { + padding-left: 30px; + } a:not(.canvas-center-on) { width: 100%; diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 0db4d5f56..e2b7a8a56 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -69,11 +69,20 @@ class ProjectsController < ApplicationController end def sidebar + current_task ||= current_task || nil + current_experiment ||= current_experiment || current_task&.experiment || nil + current_project ||= current_experiment&.project || current_task&.experiment&.project || nil + respond_to do |format| format.json do render json: { html: render_to_string( partial: 'shared/sidebar/projects.html.erb', + locals: { + current_project: current_project, + current_experiment: current_experiment, + current_task: current_task + }, formats: :html ) } diff --git a/app/views/shared/_sidebar.html.erb b/app/views/shared/_sidebar.html.erb index c1ab00e87..cc16aa23f 100644 --- a/app/views/shared/_sidebar.html.erb +++ b/app/views/shared/_sidebar.html.erb @@ -12,7 +12,11 @@
diff --git a/app/views/shared/sidebar/_experiments.html.erb b/app/views/shared/sidebar/_experiments.html.erb index 78a9ccc45..5f08439fe 100644 --- a/app/views/shared/sidebar/_experiments.html.erb +++ b/app/views/shared/sidebar/_experiments.html.erb @@ -1,17 +1,27 @@ <% if project.active_experiments.present? %> -