diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb index 9b68f32c2a..416c07afdf 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[:default_top] = "#{options[:top]}px" 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, }, + :default_top => "#{params[:top]}px", } 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[:default_top] = "#{params[:top]}px" + end css = "task " + case object when Project diff --git a/public/javascripts/gantt.js b/public/javascripts/gantt.js index da3b86b7a3..c0735b233a 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 default_top = el.data('default-top'); + var el_task_bars = $('#gantt_area form > div[data-collapse-expand="' + json.obj_id + '"][data-default-top="' + default_top + '"]'); + var el_selected_columns = $('td.gantt_selected_column div[data-collapse-expand="' + json.obj_id + '"][data-default-top="' + default_top + '"]'); 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].forEach(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);