child task restrict position, scroll position

This commit is contained in:
Faris Ansari 2017-01-28 12:44:30 +05:30
parent 3caff0e781
commit 5ab94156dd
4 changed files with 112 additions and 61 deletions

54
dist/frappe-gantt.js vendored
View File

@ -382,7 +382,7 @@ return /******/ (function(modules) { // webpackBootstrap
var parent_element = document.querySelector(self.element).parentElement; var parent_element = document.querySelector(self.element).parentElement;
if (!parent_element) return; if (!parent_element) return;
var scroll_pos = get_min_date().diff(self.gantt_start, 'hours') / self.config.step * self.config.column_width; var scroll_pos = get_min_date().diff(self.gantt_start, 'hours') / self.config.step * self.config.column_width - self.config.column_width;
parent_element.scrollLeft = scroll_pos; parent_element.scrollLeft = scroll_pos;
} }
@ -1146,11 +1146,8 @@ return /******/ (function(modules) { // webpackBootstrap
Class: Bar Class: Bar
Opts: Opts:
canvas [reqd] gt: Gantt object
task [reqd] task: task object
column_width [reqd]
x
y
*/ */
function Bar(gt, task) { function Bar(gt, task) {
@ -1286,6 +1283,14 @@ return /******/ (function(modules) { // webpackBootstrap
var pos = get_details_position(); var pos = get_details_position();
details_box.transform('t' + pos.x + ',' + pos.y); details_box.transform('t' + pos.x + ',' + pos.y);
render_details();
});
}
function render_details() {
var popover_group = gt.element_groups.details;
var details_box = popover_group.select('.details-wrapper');
var start_date = self.task._start.format('MMM D'), var start_date = self.task._start.format('MMM D'),
end_date = self.task._end.format('MMM D'), end_date = self.task._end.format('MMM D'),
heading = self.task.name + ': ' + start_date + ' - ' + end_date; heading = self.task.name + ': ' + start_date + ' - ' + end_date;
@ -1302,7 +1307,6 @@ return /******/ (function(modules) { // webpackBootstrap
var $body = popover_group.selectAll('.details-body'); var $body = popover_group.selectAll('.details-body');
$body[0].attr('text', body1); $body[0].attr('text', body1);
$body[1].attr('text', body2); $body[1].attr('text', body2);
});
} }
function get_details_position() { function get_details_position() {
@ -1390,7 +1394,7 @@ return /******/ (function(modules) { // webpackBootstrap
function onmove(dx, dy) { function onmove(dx, dy) {
var bar = self.$bar; var bar = self.$bar;
bar.finaldx = get_snap_position(dx); bar.finaldx = get_snap_position(dx);
update_bar_position(bar.ox + bar.finaldx); update_bar_position({ x: bar.ox + bar.finaldx });
run_method_for_dependencies('onmove', [dx, dy]); run_method_for_dependencies('onmove', [dx, dy]);
} }
self.onmove = onmove; self.onmove = onmove;
@ -1407,7 +1411,10 @@ return /******/ (function(modules) { // webpackBootstrap
function onmove_handle_left(dx, dy) { function onmove_handle_left(dx, dy) {
var bar = self.$bar; var bar = self.$bar;
bar.finaldx = get_snap_position(dx); bar.finaldx = get_snap_position(dx);
update_bar_position(bar.ox + bar.finaldx, bar.owidth - bar.finaldx); update_bar_position({
x: bar.ox + bar.finaldx,
width: bar.owidth - bar.finaldx
});
run_method_for_dependencies('onmove', [dx, dy]); run_method_for_dependencies('onmove', [dx, dy]);
} }
self.onmove_handle_left = onmove_handle_left; self.onmove_handle_left = onmove_handle_left;
@ -1454,7 +1461,7 @@ return /******/ (function(modules) { // webpackBootstrap
function onmove_handle_right(dx, dy) { function onmove_handle_right(dx, dy) {
var bar = self.$bar; var bar = self.$bar;
bar.finaldx = get_snap_position(dx); bar.finaldx = get_snap_position(dx);
update_bar_position(null, bar.owidth + bar.finaldx); update_bar_position({ width: bar.owidth + bar.finaldx });
} }
function onstop_handle_right() { function onstop_handle_right() {
@ -1463,10 +1470,31 @@ return /******/ (function(modules) { // webpackBootstrap
set_action_completed(); set_action_completed();
} }
function update_bar_position(x, width) { function update_bar_position(_ref) {
var _ref$x = _ref.x,
x = _ref$x === undefined ? null : _ref$x,
_ref$width = _ref.width,
width = _ref$width === undefined ? null : _ref$width;
var bar = self.$bar; var bar = self.$bar;
if (x) update_attr(bar, 'x', x); if (x) {
if (width) update_attr(bar, 'width', width); // get all x values of parent task
var xs = task.dependencies.map(function (dep) {
return gt.get_bar(dep).$bar.getX();
});
// child task must not go before parent
var valid_x = xs.reduce(function (prev, curr) {
return x >= curr;
}, x);
if (!valid_x) {
width = null;
return;
}
update_attr(bar, 'x', x);
}
if (width && width >= gt.config.column_width) {
update_attr(bar, 'width', width);
}
update_label_position(); update_label_position();
update_handle_position(); update_handle_position();
update_progressbar_position(); update_progressbar_position();

File diff suppressed because one or more lines are too long

View File

@ -3,11 +3,8 @@
Class: Bar Class: Bar
Opts: Opts:
canvas [reqd] gt: Gantt object
task [reqd] task: task object
column_width [reqd]
x
y
*/ */
export default function Bar(gt, task) { export default function Bar(gt, task) {
@ -181,6 +178,14 @@ export default function Bar(gt, task) {
const pos = get_details_position(); const pos = get_details_position();
details_box.transform(`t${pos.x},${pos.y}`); details_box.transform(`t${pos.x},${pos.y}`);
render_details();
});
}
function render_details() {
const popover_group = gt.element_groups.details;
let details_box = popover_group.select('.details-wrapper');
const start_date = self.task._start.format('MMM D'), const start_date = self.task._start.format('MMM D'),
end_date = self.task._end.format('MMM D'), end_date = self.task._end.format('MMM D'),
heading = `${self.task.name}: ${start_date} - ${end_date}`; heading = `${self.task.name}: ${start_date} - ${end_date}`;
@ -201,7 +206,6 @@ export default function Bar(gt, task) {
const $body = popover_group.selectAll('.details-body'); const $body = popover_group.selectAll('.details-body');
$body[0].attr('text', body1); $body[0].attr('text', body1);
$body[1].attr('text', body2); $body[1].attr('text', body2);
});
} }
function get_details_position() { function get_details_position() {
@ -287,7 +291,7 @@ export default function Bar(gt, task) {
function onmove(dx, dy) { function onmove(dx, dy) {
const bar = self.$bar; const bar = self.$bar;
bar.finaldx = get_snap_position(dx); bar.finaldx = get_snap_position(dx);
update_bar_position(bar.ox + bar.finaldx); update_bar_position({x: bar.ox + bar.finaldx});
run_method_for_dependencies('onmove', [dx, dy]); run_method_for_dependencies('onmove', [dx, dy]);
} }
self.onmove = onmove; self.onmove = onmove;
@ -304,7 +308,10 @@ export default function Bar(gt, task) {
function onmove_handle_left(dx, dy) { function onmove_handle_left(dx, dy) {
const bar = self.$bar; const bar = self.$bar;
bar.finaldx = get_snap_position(dx); bar.finaldx = get_snap_position(dx);
update_bar_position(bar.ox + bar.finaldx, bar.owidth - bar.finaldx); update_bar_position({
x: bar.ox + bar.finaldx,
width: bar.owidth - bar.finaldx
});
run_method_for_dependencies('onmove', [dx, dy]); run_method_for_dependencies('onmove', [dx, dy]);
} }
self.onmove_handle_left = onmove_handle_left; self.onmove_handle_left = onmove_handle_left;
@ -330,7 +337,7 @@ export default function Bar(gt, task) {
function onmove_handle_right(dx, dy) { function onmove_handle_right(dx, dy) {
const bar = self.$bar; const bar = self.$bar;
bar.finaldx = get_snap_position(dx); bar.finaldx = get_snap_position(dx);
update_bar_position(null, bar.owidth + bar.finaldx); update_bar_position({width: bar.owidth + bar.finaldx});
} }
function onstop_handle_right() { function onstop_handle_right() {
@ -339,10 +346,26 @@ export default function Bar(gt, task) {
set_action_completed(); set_action_completed();
} }
function update_bar_position(x, width) { function update_bar_position({x = null, width = null}) {
const bar = self.$bar; const bar = self.$bar;
if (x) update_attr(bar, 'x', x); if (x) {
if (width) update_attr(bar, 'width', width); // get all x values of parent task
const xs = task.dependencies.map(dep => {
return gt.get_bar(dep).$bar.getX();
});
// child task must not go before parent
const valid_x = xs.reduce((prev, curr) => {
return x >= curr;
}, x);
if(!valid_x) {
width = null;
return;
}
update_attr(bar, 'x', x);
}
if (width && width >= gt.config.column_width) {
update_attr(bar, 'width', width);
}
update_label_position(); update_label_position();
update_handle_position(); update_handle_position();
update_progressbar_position(); update_progressbar_position();

View File

@ -244,7 +244,7 @@ export default function Gantt(element, tasks, config) {
if(!parent_element) return; if(!parent_element) return;
const scroll_pos = get_min_date().diff(self.gantt_start, 'hours') / const scroll_pos = get_min_date().diff(self.gantt_start, 'hours') /
self.config.step * self.config.column_width; self.config.step * self.config.column_width - self.config.column_width;
parent_element.scrollLeft = scroll_pos; parent_element.scrollLeft = scroll_pos;
} }