scinote-web/app/controllers/concerns/breadcrumbs.rb
2023-06-22 15:41:37 +02:00

82 lines
2.5 KiB
Ruby

# frozen_string_literal: true
module Breadcrumbs
extend ActiveSupport::Concern
included do
def set_breadcrumbs_items
my_module = @my_module
experiment = my_module&.experiment || @experiment
project = experiment&.project || @project
current_folder = project&.project_folder || @current_folder
@breadcrumbs_items = []
folders = helpers.tree_ordered_parent_folders(current_folder)
archived_branch = project&.archived? ||
current_folder&.archived? ||
(!project && params[:view_mode] == 'archived')
@breadcrumbs_items.push({
label: t('projects.index.breadcrumbs_root'),
url: projects_path(view_mode: archived_branch ? :archived : :active),
archived: archived_branch
})
folders&.each do |project_folder|
archived_branch = project_folder.archived_branch?
@breadcrumbs_items.push({
label: project_folder.name,
url: project_folder_path(project_folder,
view_mode: archived_branch ? :archived : :active),
archived: archived_branch
})
end
include_project(project) if project
include_experiment(experiment) if experiment
include_my_module(my_module) if my_module
@breadcrumbs_items.each do |item|
item[:label] = "(A) #{item[:label]}" if item[:archived]
end
@breadcrumbs_items
end
end
private
def include_project(project)
archived_branch = project.archived?
@breadcrumbs_items.push(
{
label: project.name,
url: project_path(project, view_mode: archived_branch ? :archived : :active),
archived: archived_branch
}
)
end
def include_experiment(experiment)
archived_branch = experiment.archived_branch?
@breadcrumbs_items.push(
{
label: experiment.name,
url: archived_branch ? module_archive_experiment_path(experiment) : my_modules_experiment_path(experiment),
archived: archived_branch
}
)
end
def include_my_module(my_module)
archived_branch = my_module.archived_branch?
@breadcrumbs_items.push(
{
label: my_module.name,
url: my_module_path(my_module),
archived: archived_branch
}
)
end
end