1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-02-06 09:03:25 +00:00
redmine/app/helpers/gantt_helper.rb
Go MAEDA 3775bb31d6 Extract Gantt view structure and wire Stimulus controllers (#43397).
Patch by Katsuya HIDAKA (user:hidakatsuya).


git-svn-id: https://svn.redmine.org/redmine/trunk@24085 e93f8b46-1217-0410-a6f0-8f06a7374b81
2025-10-29 02:35:11 +00:00

88 lines
3.5 KiB
Ruby

# frozen_string_literal: true
# Redmine - project management software
# Copyright (C) 2006- Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module GanttHelper
def gantt_zoom_link(gantt, in_or_out)
case in_or_out
when :in
if gantt.zoom < 4
link_to(
sprite_icon('zoom-in', l(:text_zoom_in)),
{:params => request.query_parameters.merge(gantt.params.merge(:zoom => (gantt.zoom + 1)))},
:class => 'icon icon-zoom-in')
else
content_tag(:span, sprite_icon('zoom-in', l(:text_zoom_in)), :class => 'icon icon-zoom-in').html_safe
end
when :out
if gantt.zoom > 1
link_to(
sprite_icon('zoom-out', l(:text_zoom_out)),
{:params => request.query_parameters.merge(gantt.params.merge(:zoom => (gantt.zoom - 1)))},
:class => 'icon icon-zoom-out')
else
content_tag(:span, sprite_icon('zoom-out', l(:text_zoom_out)), :class => 'icon icon-zoom-out').html_safe
end
end
end
def gantt_chart_tag(query, &)
data_attributes = {
controller: 'gantt--chart',
# Events emitted by child controllers the chart listens to.
# - `gantt--options` toggles checkboxes under Options.
# - `gantt--subjects` reports tree expand/collapse.
# - Window resize triggers a redraw of progress lines and relations.
action: %w(
gantt--options:toggle-display@document->gantt--chart#handleOptionsDisplay
gantt--options:toggle-relations@document->gantt--chart#handleOptionsRelations
gantt--options:toggle-progress@document->gantt--chart#handleOptionsProgress
gantt--subjects:toggle-tree->gantt--chart#handleSubjectTreeChanged
resize@window->gantt--chart#handleWindowResize
).join(' '),
'gantt--chart-issue-relation-types-value': Redmine::Helpers::Gantt::DRAW_TYPES.to_json,
'gantt--chart-show-selected-columns-value': query.draw_selected_columns ? 'true' : 'false',
'gantt--chart-show-relations-value': query.draw_relations ? 'true' : 'false',
'gantt--chart-show-progress-value': query.draw_progress_line ? 'true' : 'false'
}
tag.table(class: 'gantt-table', data: data_attributes, &)
end
def gantt_column_tag(column_name, min_width: nil, **options, &)
options[:data] = {
controller: 'gantt--column',
action: 'resize@window->gantt--column#handleWindowResize',
'gantt--column-min-width-value': min_width,
'gantt--column-column-value': column_name
}
options[:class] = ["gantt_#{column_name}_column", options[:class]]
tag.td(**options, &)
end
def gantt_subjects_tag(&)
data_attributes = {
controller: 'gantt--subjects',
action: 'gantt--column:resize-column-subjects@document->gantt--subjects#handleResizeColumn'
}
tag.div(class: "gantt_subjects", data: data_attributes, &)
end
end