diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb index 9b68f32c2..aaf820809 100644 --- a/lib/redmine/helpers/gantt.rb +++ b/lib/redmine/helpers/gantt.rb @@ -347,6 +347,7 @@ module Redmine if options[:format] == :html data_options = {} data_options[:collapse_expand] = "issue-#{issue.id}" + data_options[:number_of_rows] = number_of_rows style = "position: absolute;top: #{options[:top]}px; font-size: 0.8em;" content = view.content_tag( @@ -780,6 +781,7 @@ module Redmine :top_increment => params[:top_increment], :obj_id => "#{object.class}-#{object.id}".downcase, }, + :number_of_rows => number_of_rows, } end if has_children @@ -835,7 +837,10 @@ module Redmine def html_task(params, coords, markers, label, object) output = +'' data_options = {} - data_options[:collapse_expand] = "#{object.class}-#{object.id}".downcase if object + if object + data_options[:collapse_expand] = "#{object.class}-#{object.id}".downcase + data_options[:number_of_rows] = number_of_rows + end css = "task " + case object when Project diff --git a/public/javascripts/gantt.js b/public/javascripts/gantt.js index da3b86b7a..69cef59e7 100644 --- a/public/javascripts/gantt.js +++ b/public/javascripts/gantt.js @@ -253,13 +253,16 @@ ganttEntryClick = function(e){ subject.nextAll('div').each(function(_, element){ var el = $(element); var json = el.data('collapse-expand'); + var number_of_rows = el.data('number-of-rows'); + var el_task_bars = '#gantt_area form > div[data-collapse-expand="' + json.obj_id + '"][data-number-of-rows="' + number_of_rows + '"]'; + var el_selected_columns = 'td.gantt_selected_column div[data-collapse-expand="' + json.obj_id + '"][data-number-of-rows="' + number_of_rows + '"]'; if(out_of_hierarchy || parseInt(el.css('left')) <= subject_left){ out_of_hierarchy = true; if(target_shown == null) return false; var new_top_val = parseInt(el.css('top')) + total_height * (target_shown ? -1 : 1); el.css('top', new_top_val); - $('#gantt_area form > div[data-collapse-expand="' + json.obj_id + '"], td.gantt_selected_column div[data-collapse-expand="' + json.obj_id + '"]').each(function(_, el){ + $([el_task_bars, el_selected_columns].join()).each(function(_, el){ $(el).css('top', new_top_val); }); return true; @@ -272,15 +275,14 @@ ganttEntryClick = function(e){ total_height = 0; } if(is_shown == target_shown){ - $('#gantt_area form > div[data-collapse-expand="' + json.obj_id + '"]').each(function(_, task) { + $(el_task_bars).each(function(_, task) { var el_task = $(task); if(!is_shown) el_task.css('top', target_top + total_height); if(!el_task.hasClass('tooltip')) el_task.toggle(!is_shown); }); - $('td.gantt_selected_column div[data-collapse-expand="' + json.obj_id + '"]' - ).each(function (_, attr) { + $(el_selected_columns).each(function (_, attr) { var el_attr = $(attr); if (!is_shown) el_attr.css('top', target_top + total_height);