tg-ganttchart 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3375,7 +3375,7 @@ if (typeof window !== 'undefined') {
|
|
|
3375
3375
|
// Indicate to webpack that this file can be concatenated
|
|
3376
3376
|
/* harmony default export */ var setPublicPath = (null);
|
|
3377
3377
|
|
|
3378
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.standalone.vue?vue&type=template&id=
|
|
3378
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.standalone.vue?vue&type=template&id=ba4781dc
|
|
3379
3379
|
var render = function render() {
|
|
3380
3380
|
var _vm = this,
|
|
3381
3381
|
_c = _vm._self._c;
|
|
@@ -3384,6 +3384,32 @@ var render = function render() {
|
|
|
3384
3384
|
"tasks": _vm.tasks,
|
|
3385
3385
|
"options": _vm.options,
|
|
3386
3386
|
"dynamicStyle": _vm.dynamicStyle
|
|
3387
|
+
},
|
|
3388
|
+
on: {
|
|
3389
|
+
"task-updated": function ($event) {
|
|
3390
|
+
return _vm.$emit('task-updated', $event);
|
|
3391
|
+
},
|
|
3392
|
+
"gantt-task-updated": function ($event) {
|
|
3393
|
+
return _vm.$emit('gantt-task-updated', $event);
|
|
3394
|
+
},
|
|
3395
|
+
"view-mode-changed": function ($event) {
|
|
3396
|
+
return _vm.$emit('view-mode-changed', $event);
|
|
3397
|
+
},
|
|
3398
|
+
"gantt-view-mode-changed": function ($event) {
|
|
3399
|
+
return _vm.$emit('gantt-view-mode-changed', $event);
|
|
3400
|
+
},
|
|
3401
|
+
"tasks-changed": function ($event) {
|
|
3402
|
+
return _vm.$emit('tasks-changed', $event);
|
|
3403
|
+
},
|
|
3404
|
+
"options-changed": function ($event) {
|
|
3405
|
+
return _vm.$emit('options-changed', $event);
|
|
3406
|
+
},
|
|
3407
|
+
"dynamic-style-changed": function ($event) {
|
|
3408
|
+
return _vm.$emit('dynamic-style-changed', $event);
|
|
3409
|
+
},
|
|
3410
|
+
"mounted": function ($event) {
|
|
3411
|
+
return _vm.$emit('mounted', $event);
|
|
3412
|
+
}
|
|
3387
3413
|
}
|
|
3388
3414
|
}, [_vm.components.header ? _c(_vm.components.header, {
|
|
3389
3415
|
tag: "component",
|
|
@@ -3401,8 +3427,8 @@ var render = function render() {
|
|
|
3401
3427
|
};
|
|
3402
3428
|
var staticRenderFns = [];
|
|
3403
3429
|
|
|
3404
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=template&id=
|
|
3405
|
-
var
|
|
3430
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=template&id=0a0b0d9f
|
|
3431
|
+
var GanttElasticvue_type_template_id_0a0b0d9f_render = function render() {
|
|
3406
3432
|
var _vm = this,
|
|
3407
3433
|
_c = _vm._self._c,
|
|
3408
3434
|
_setup = _vm._self._setupProxy;
|
|
@@ -3425,10 +3451,13 @@ var GanttElasticvue_type_template_id_2767341e_render = function render() {
|
|
|
3425
3451
|
},
|
|
3426
3452
|
slot: "header"
|
|
3427
3453
|
}), _vm._t("header"), _c('main-view', {
|
|
3428
|
-
ref: "mainView"
|
|
3454
|
+
ref: "mainView",
|
|
3455
|
+
on: {
|
|
3456
|
+
"task-updated": _vm.handleTaskUpdated
|
|
3457
|
+
}
|
|
3429
3458
|
}), _vm._t("footer")], 2);
|
|
3430
3459
|
};
|
|
3431
|
-
var
|
|
3460
|
+
var GanttElasticvue_type_template_id_0a0b0d9f_staticRenderFns = [];
|
|
3432
3461
|
|
|
3433
3462
|
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js
|
|
3434
3463
|
var es_array_push = __webpack_require__(4114);
|
|
@@ -3671,8 +3700,8 @@ var component = normalizeComponent(
|
|
|
3671
3700
|
)
|
|
3672
3701
|
|
|
3673
3702
|
/* harmony default export */ var GanttViewFilter = (component.exports);
|
|
3674
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/MainView.vue?vue&type=template&id=
|
|
3675
|
-
var
|
|
3703
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/MainView.vue?vue&type=template&id=79e1eba9
|
|
3704
|
+
var MainViewvue_type_template_id_79e1eba9_render = function render() {
|
|
3676
3705
|
var _vm = this,
|
|
3677
3706
|
_c = _vm._self._c;
|
|
3678
3707
|
return _c('div', {
|
|
@@ -3741,7 +3770,11 @@ var MainViewvue_type_template_id_1a4b756c_render = function render() {
|
|
|
3741
3770
|
return _vm.chartWheel.apply(null, arguments);
|
|
3742
3771
|
}
|
|
3743
3772
|
}
|
|
3744
|
-
}, [_c('chart'
|
|
3773
|
+
}, [_c('chart', {
|
|
3774
|
+
on: {
|
|
3775
|
+
"task-updated": _vm.handleTaskUpdated
|
|
3776
|
+
}
|
|
3777
|
+
})], 1)])]), _c('div', {
|
|
3745
3778
|
ref: "chartScrollContainerVertical",
|
|
3746
3779
|
staticClass: "gantt-elastic__chart-scroll-container gantt-elastic__chart-scroll-container--vertical",
|
|
3747
3780
|
style: {
|
|
@@ -3777,7 +3810,7 @@ var MainViewvue_type_template_id_1a4b756c_render = function render() {
|
|
|
3777
3810
|
}
|
|
3778
3811
|
})])]);
|
|
3779
3812
|
};
|
|
3780
|
-
var
|
|
3813
|
+
var MainViewvue_type_template_id_79e1eba9_staticRenderFns = [];
|
|
3781
3814
|
|
|
3782
3815
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/TaskList/TaskList.vue?vue&type=template&id=74ce1216
|
|
3783
3816
|
var TaskListvue_type_template_id_74ce1216_render = function render() {
|
|
@@ -4584,8 +4617,8 @@ var TaskList_component = normalizeComponent(
|
|
|
4584
4617
|
)
|
|
4585
4618
|
|
|
4586
4619
|
/* harmony default export */ var TaskList = (TaskList_component.exports);
|
|
4587
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Chart.vue?vue&type=template&id=
|
|
4588
|
-
var
|
|
4620
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Chart.vue?vue&type=template&id=0856b85c
|
|
4621
|
+
var Chartvue_type_template_id_0856b85c_render = function render() {
|
|
4589
4622
|
var _vm = this,
|
|
4590
4623
|
_c = _vm._self._c;
|
|
4591
4624
|
return _c('div', {
|
|
@@ -4653,14 +4686,17 @@ var Chartvue_type_template_id_1d5eb6d6_render = function render() {
|
|
|
4653
4686
|
tag: "component",
|
|
4654
4687
|
attrs: {
|
|
4655
4688
|
"task": task
|
|
4689
|
+
},
|
|
4690
|
+
on: {
|
|
4691
|
+
"task-updated": _vm.handleTaskUpdated
|
|
4656
4692
|
}
|
|
4657
4693
|
})], 1);
|
|
4658
4694
|
})], 2)])])])]);
|
|
4659
4695
|
};
|
|
4660
|
-
var
|
|
4696
|
+
var Chartvue_type_template_id_0856b85c_staticRenderFns = [];
|
|
4661
4697
|
|
|
4662
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Grid.vue?vue&type=template&id=
|
|
4663
|
-
var
|
|
4698
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Grid.vue?vue&type=template&id=244ea0ee
|
|
4699
|
+
var Gridvue_type_template_id_244ea0ee_render = function render() {
|
|
4664
4700
|
var _vm = this,
|
|
4665
4701
|
_c = _vm._self._c;
|
|
4666
4702
|
return _c('svg', {
|
|
@@ -4722,7 +4758,7 @@ var Gridvue_type_template_id_b2e4dec2_render = function render() {
|
|
|
4722
4758
|
}
|
|
4723
4759
|
})], 2)]);
|
|
4724
4760
|
};
|
|
4725
|
-
var
|
|
4761
|
+
var Gridvue_type_template_id_244ea0ee_staticRenderFns = [];
|
|
4726
4762
|
|
|
4727
4763
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Grid.vue?vue&type=script&lang=js
|
|
4728
4764
|
|
|
@@ -4830,15 +4866,41 @@ var Gridvue_type_template_id_b2e4dec2_staticRenderFns = [];
|
|
|
4830
4866
|
let lines = [];
|
|
4831
4867
|
const state = this.root.state.options;
|
|
4832
4868
|
let tasks = this.root.visibleTasks;
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4869
|
+
|
|
4870
|
+
// If we have tasks, show full grid for all tasks
|
|
4871
|
+
if (tasks.length > 0) {
|
|
4872
|
+
const rowHeight = state.row.height + state.chart.grid.horizontal.gap * 2;
|
|
4873
|
+
const rowCount = tasks.length; // Use actual task count
|
|
4874
|
+
|
|
4875
|
+
for (let index = 0; index <= rowCount; index++) {
|
|
4876
|
+
const y = index * rowHeight + this.root.style['grid-line-vertical']['stroke-width'] / 2;
|
|
4877
|
+
lines.push({
|
|
4878
|
+
key: 'hl' + index,
|
|
4879
|
+
x1: 0,
|
|
4880
|
+
y1: y,
|
|
4881
|
+
x2: '100%',
|
|
4882
|
+
y2: y
|
|
4883
|
+
});
|
|
4884
|
+
}
|
|
4885
|
+
} else {
|
|
4886
|
+
// If no tasks, use reduced viewport height for empty state
|
|
4887
|
+
const viewportHeight = window.innerHeight;
|
|
4888
|
+
const headerHeight = state.calendar.height + state.calendar.gap;
|
|
4889
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
4890
|
+
const reducedHeight = Math.max(availableHeight, 300); // Minimum 300px height
|
|
4891
|
+
|
|
4892
|
+
const rowHeight = state.row.height + state.chart.grid.horizontal.gap * 2;
|
|
4893
|
+
const maxRows = Math.floor(reducedHeight / rowHeight);
|
|
4894
|
+
for (let index = 0; index <= maxRows; index++) {
|
|
4895
|
+
const y = index * rowHeight + this.root.style['grid-line-vertical']['stroke-width'] / 2;
|
|
4896
|
+
lines.push({
|
|
4897
|
+
key: 'hl' + index,
|
|
4898
|
+
x1: 0,
|
|
4899
|
+
y1: y,
|
|
4900
|
+
x2: '100%',
|
|
4901
|
+
y2: y
|
|
4902
|
+
});
|
|
4903
|
+
}
|
|
4842
4904
|
}
|
|
4843
4905
|
return lines;
|
|
4844
4906
|
},
|
|
@@ -4887,8 +4949,8 @@ var Gridvue_type_template_id_b2e4dec2_staticRenderFns = [];
|
|
|
4887
4949
|
;
|
|
4888
4950
|
var Grid_component = normalizeComponent(
|
|
4889
4951
|
Chart_Gridvue_type_script_lang_js,
|
|
4890
|
-
|
|
4891
|
-
|
|
4952
|
+
Gridvue_type_template_id_244ea0ee_render,
|
|
4953
|
+
Gridvue_type_template_id_244ea0ee_staticRenderFns,
|
|
4892
4954
|
false,
|
|
4893
4955
|
null,
|
|
4894
4956
|
null,
|
|
@@ -5840,8 +5902,8 @@ var DependencyLines_component = normalizeComponent(
|
|
|
5840
5902
|
)
|
|
5841
5903
|
|
|
5842
5904
|
/* harmony default export */ var DependencyLines = (DependencyLines_component.exports);
|
|
5843
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Task.vue?vue&type=template&id=
|
|
5844
|
-
var
|
|
5905
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Task.vue?vue&type=template&id=23849415
|
|
5906
|
+
var Taskvue_type_template_id_23849415_render = function render() {
|
|
5845
5907
|
var _vm = this,
|
|
5846
5908
|
_c = _vm._self._c;
|
|
5847
5909
|
return _c('g', {
|
|
@@ -5878,11 +5940,11 @@ var Taskvue_type_template_id_208a9baa_render = function render() {
|
|
|
5878
5940
|
..._vm.task.style['chart-row-bar']
|
|
5879
5941
|
},
|
|
5880
5942
|
attrs: {
|
|
5881
|
-
"x": _vm.task.x,
|
|
5943
|
+
"x": _vm.task.x - 8,
|
|
5882
5944
|
"y": _vm.task.y,
|
|
5883
|
-
"width": _vm.task.width,
|
|
5945
|
+
"width": _vm.task.width + 16,
|
|
5884
5946
|
"height": _vm.task.height,
|
|
5885
|
-
"viewBox":
|
|
5947
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
5886
5948
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
5887
5949
|
},
|
|
5888
5950
|
on: {
|
|
@@ -5937,20 +5999,76 @@ var Taskvue_type_template_id_208a9baa_render = function render() {
|
|
|
5937
5999
|
..._vm.task.style['chart-row-bar-polygon']
|
|
5938
6000
|
},
|
|
5939
6001
|
attrs: {
|
|
5940
|
-
"points": _vm.
|
|
6002
|
+
"points": _vm.getPointsAdjusted
|
|
6003
|
+
},
|
|
6004
|
+
on: {
|
|
6005
|
+
"mousedown": function ($event) {
|
|
6006
|
+
return _vm.startDrag($event, 'move');
|
|
6007
|
+
},
|
|
6008
|
+
"touchstart": function ($event) {
|
|
6009
|
+
return _vm.startDrag($event, 'move');
|
|
6010
|
+
}
|
|
5941
6011
|
}
|
|
5942
6012
|
}), _c('progress-bar', {
|
|
5943
6013
|
attrs: {
|
|
5944
6014
|
"task": _vm.task,
|
|
5945
6015
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
5946
6016
|
}
|
|
6017
|
+
}), _c('rect', {
|
|
6018
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
6019
|
+
staticStyle: {
|
|
6020
|
+
"pointer-events": "all",
|
|
6021
|
+
"z-index": "50",
|
|
6022
|
+
"cursor": "ew-resize !important"
|
|
6023
|
+
},
|
|
6024
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
6025
|
+
attrs: {
|
|
6026
|
+
"x": "0",
|
|
6027
|
+
"y": "0",
|
|
6028
|
+
"width": 12,
|
|
6029
|
+
"height": _vm.task.height
|
|
6030
|
+
},
|
|
6031
|
+
on: {
|
|
6032
|
+
"mousedown": function ($event) {
|
|
6033
|
+
$event.stopPropagation();
|
|
6034
|
+
return _vm.startDrag($event, 'start');
|
|
6035
|
+
},
|
|
6036
|
+
"touchstart": function ($event) {
|
|
6037
|
+
$event.stopPropagation();
|
|
6038
|
+
return _vm.startDrag($event, 'start');
|
|
6039
|
+
}
|
|
6040
|
+
}
|
|
6041
|
+
}), _c('rect', {
|
|
6042
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
6043
|
+
staticStyle: {
|
|
6044
|
+
"pointer-events": "all",
|
|
6045
|
+
"z-index": "50",
|
|
6046
|
+
"cursor": "ew-resize !important"
|
|
6047
|
+
},
|
|
6048
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
6049
|
+
attrs: {
|
|
6050
|
+
"x": _vm.task.width - 12,
|
|
6051
|
+
"y": "0",
|
|
6052
|
+
"width": 12,
|
|
6053
|
+
"height": _vm.task.height
|
|
6054
|
+
},
|
|
6055
|
+
on: {
|
|
6056
|
+
"mousedown": function ($event) {
|
|
6057
|
+
$event.stopPropagation();
|
|
6058
|
+
return _vm.startDrag($event, 'end');
|
|
6059
|
+
},
|
|
6060
|
+
"touchstart": function ($event) {
|
|
6061
|
+
$event.stopPropagation();
|
|
6062
|
+
return _vm.startDrag($event, 'end');
|
|
6063
|
+
}
|
|
6064
|
+
}
|
|
5947
6065
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
5948
6066
|
attrs: {
|
|
5949
6067
|
"task": _vm.task
|
|
5950
6068
|
}
|
|
5951
6069
|
}) : _vm._e()], 1);
|
|
5952
6070
|
};
|
|
5953
|
-
var
|
|
6071
|
+
var Taskvue_type_template_id_23849415_staticRenderFns = [];
|
|
5954
6072
|
|
|
5955
6073
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Text.vue?vue&type=template&id=634f40aa
|
|
5956
6074
|
var Textvue_type_template_id_634f40aa_render = function render() {
|
|
@@ -6087,15 +6205,16 @@ var Text_component = normalizeComponent(
|
|
|
6087
6205
|
)
|
|
6088
6206
|
|
|
6089
6207
|
/* harmony default export */ var Text = (Text_component.exports);
|
|
6090
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/ProgressBar.vue?vue&type=template&id=
|
|
6091
|
-
var
|
|
6208
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/ProgressBar.vue?vue&type=template&id=2323ee21
|
|
6209
|
+
var ProgressBarvue_type_template_id_2323ee21_render = function render() {
|
|
6092
6210
|
var _vm = this,
|
|
6093
6211
|
_c = _vm._self._c;
|
|
6094
6212
|
return _c('g', {
|
|
6095
6213
|
staticClass: "gantt-elastic__chart-row-progress-bar-wrapper",
|
|
6096
6214
|
style: {
|
|
6097
6215
|
..._vm.root.style['chart-row-progress-bar-wrapper'],
|
|
6098
|
-
..._vm.task.style['chart-row-progress-bar-wrapper']
|
|
6216
|
+
..._vm.task.style['chart-row-progress-bar-wrapper'],
|
|
6217
|
+
'pointer-events': 'none'
|
|
6099
6218
|
}
|
|
6100
6219
|
}, [_c('defs', [_c('pattern', {
|
|
6101
6220
|
attrs: {
|
|
@@ -6117,8 +6236,11 @@ var ProgressBarvue_type_template_id_bc869ae8_render = function render() {
|
|
|
6117
6236
|
"x2": "0",
|
|
6118
6237
|
"y2": _vm.root.state.options.chart.progress.width
|
|
6119
6238
|
}
|
|
6120
|
-
})])]), _vm.root.state.options.chart.progress.bar ? _c('rect', {
|
|
6239
|
+
})])]), _vm.root.state.options.chart.progress.bar && _vm.task.progress > 0 ? _c('rect', {
|
|
6121
6240
|
staticClass: "gantt-elastic__chart-row-progress-bar-solid",
|
|
6241
|
+
staticStyle: {
|
|
6242
|
+
"pointer-events": "none"
|
|
6243
|
+
},
|
|
6122
6244
|
style: {
|
|
6123
6245
|
..._vm.root.style['chart-row-progress-bar-solid'],
|
|
6124
6246
|
..._vm.task.style['chart-row-progress-bar-solid']
|
|
@@ -6128,7 +6250,11 @@ var ProgressBarvue_type_template_id_bc869ae8_render = function render() {
|
|
|
6128
6250
|
"y": "0",
|
|
6129
6251
|
"width": _vm.getProgressWidth
|
|
6130
6252
|
}
|
|
6131
|
-
}) : _vm._e(), _vm.root.state.options.chart.progress.pattern ? _c('g',
|
|
6253
|
+
}) : _vm._e(), _vm.root.state.options.chart.progress.pattern && _vm.task.progress > 0 ? _c('g', {
|
|
6254
|
+
staticStyle: {
|
|
6255
|
+
"pointer-events": "none"
|
|
6256
|
+
}
|
|
6257
|
+
}, [_c('rect', {
|
|
6132
6258
|
staticClass: "gantt-elastic__chart-row-progress-bar-pattern",
|
|
6133
6259
|
style: {
|
|
6134
6260
|
..._vm.root.style['chart-row-progress-bar-pattern'],
|
|
@@ -6152,7 +6278,7 @@ var ProgressBarvue_type_template_id_bc869ae8_render = function render() {
|
|
|
6152
6278
|
}
|
|
6153
6279
|
})]) : _vm._e()]);
|
|
6154
6280
|
};
|
|
6155
|
-
var
|
|
6281
|
+
var ProgressBarvue_type_template_id_2323ee21_staticRenderFns = [];
|
|
6156
6282
|
|
|
6157
6283
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/ProgressBar.vue?vue&type=script&lang=js
|
|
6158
6284
|
/* harmony default export */ var ProgressBarvue_type_script_lang_js = ({
|
|
@@ -6213,8 +6339,8 @@ var ProgressBarvue_type_template_id_bc869ae8_staticRenderFns = [];
|
|
|
6213
6339
|
;
|
|
6214
6340
|
var ProgressBar_component = normalizeComponent(
|
|
6215
6341
|
Chart_ProgressBarvue_type_script_lang_js,
|
|
6216
|
-
|
|
6217
|
-
|
|
6342
|
+
ProgressBarvue_type_template_id_2323ee21_render,
|
|
6343
|
+
ProgressBarvue_type_template_id_2323ee21_staticRenderFns,
|
|
6218
6344
|
false,
|
|
6219
6345
|
null,
|
|
6220
6346
|
null,
|
|
@@ -6271,11 +6397,631 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6271
6397
|
}
|
|
6272
6398
|
}
|
|
6273
6399
|
});
|
|
6400
|
+
;// ./src/components/Chart/Row/Draggable.mixin.js
|
|
6401
|
+
|
|
6402
|
+
|
|
6403
|
+
/* harmony default export */ var Draggable_mixin = ({
|
|
6404
|
+
data() {
|
|
6405
|
+
return {
|
|
6406
|
+
isDragging: false,
|
|
6407
|
+
dragStartX: 0,
|
|
6408
|
+
dragStartTime: 0,
|
|
6409
|
+
dragType: null,
|
|
6410
|
+
// 'start', 'end', or 'move'
|
|
6411
|
+
originalStartTime: 0,
|
|
6412
|
+
originalEndTime: 0,
|
|
6413
|
+
originalDuration: 0
|
|
6414
|
+
};
|
|
6415
|
+
},
|
|
6416
|
+
methods: {
|
|
6417
|
+
startDrag(event, type) {
|
|
6418
|
+
event.preventDefault();
|
|
6419
|
+
event.stopPropagation();
|
|
6420
|
+
|
|
6421
|
+
// Debug logging
|
|
6422
|
+
// console.log('Starting drag:', {
|
|
6423
|
+
// type: type,
|
|
6424
|
+
// taskId: this.task.id,
|
|
6425
|
+
// taskType: this.task.type,
|
|
6426
|
+
// originalStart: this.task.startTime,
|
|
6427
|
+
// originalEnd: this.task.endTime
|
|
6428
|
+
// });
|
|
6429
|
+
|
|
6430
|
+
// Safety checks
|
|
6431
|
+
if (!this.root || !this.root.state || !this.root.state.options || !this.root.state.options.times) {
|
|
6432
|
+
console.error('Root or times options not available for dragging');
|
|
6433
|
+
return;
|
|
6434
|
+
}
|
|
6435
|
+
this.isDragging = true;
|
|
6436
|
+
this.dragType = type;
|
|
6437
|
+
this.dragStartX = event.clientX || event.touches[0].clientX;
|
|
6438
|
+
this.dragStartTime = this.task.startTime;
|
|
6439
|
+
this.originalStartTime = this.task.startTime;
|
|
6440
|
+
this.originalEndTime = this.task.endTime;
|
|
6441
|
+
this.originalDuration = this.task.duration;
|
|
6442
|
+
|
|
6443
|
+
// Add event listeners
|
|
6444
|
+
document.addEventListener('mousemove', this.handleDrag);
|
|
6445
|
+
document.addEventListener('mouseup', this.endDrag);
|
|
6446
|
+
document.addEventListener('touchmove', this.handleDrag);
|
|
6447
|
+
document.addEventListener('touchend', this.endDrag);
|
|
6448
|
+
|
|
6449
|
+
// Hide hover tooltip when dragging starts
|
|
6450
|
+
this.hideHoverTooltip();
|
|
6451
|
+
|
|
6452
|
+
// Add context menu for extending tasks
|
|
6453
|
+
// this.$el.addEventListener('contextmenu', this.showContextMenu);
|
|
6454
|
+
|
|
6455
|
+
// Add keyboard shortcuts
|
|
6456
|
+
this.$el.addEventListener('keydown', this.handleKeyboardShortcuts);
|
|
6457
|
+
|
|
6458
|
+
// Add dragging class for visual feedback
|
|
6459
|
+
this.$el.classList.add('gantt-elastic__task-dragging');
|
|
6460
|
+
this.$el.classList.add(`gantt-elastic__task-dragging--${type}`);
|
|
6461
|
+
|
|
6462
|
+
// Create date tooltip for all dragging types
|
|
6463
|
+
this.createDateTooltip();
|
|
6464
|
+
},
|
|
6465
|
+
handleDrag(event) {
|
|
6466
|
+
if (!this.isDragging) return;
|
|
6467
|
+
event.preventDefault();
|
|
6468
|
+
const currentX = event.clientX || event.touches[0].clientX;
|
|
6469
|
+
const deltaX = currentX - this.dragStartX;
|
|
6470
|
+
|
|
6471
|
+
// Convert pixel delta to time delta
|
|
6472
|
+
const timeDelta = deltaX * this.root.state.options.times.timePerPixel;
|
|
6473
|
+
if (this.dragType === 'move') {
|
|
6474
|
+
// Move entire task
|
|
6475
|
+
const newStartTime = this.originalStartTime + timeDelta;
|
|
6476
|
+
const newEndTime = this.originalEndTime + timeDelta;
|
|
6477
|
+
|
|
6478
|
+
// Ensure task doesn't go before chart start
|
|
6479
|
+
const chartStartTime = this.root.state.options.times.firstTime;
|
|
6480
|
+
const chartEndTime = this.root.state.options.times.lastTime;
|
|
6481
|
+
if (newStartTime >= chartStartTime && newEndTime <= chartEndTime) {
|
|
6482
|
+
this.updateTaskTime(newStartTime, newEndTime);
|
|
6483
|
+
|
|
6484
|
+
// Update date tooltip for move dragging
|
|
6485
|
+
if (this.dateTooltip) {
|
|
6486
|
+
this.updateDateTooltip(newStartTime);
|
|
6487
|
+
}
|
|
6488
|
+
}
|
|
6489
|
+
} else if (this.dragType === 'start') {
|
|
6490
|
+
// Resize from start - change start date
|
|
6491
|
+
const newStartTime = this.originalStartTime + timeDelta;
|
|
6492
|
+
const newEndTime = this.originalEndTime;
|
|
6493
|
+
|
|
6494
|
+
// Ensure start doesn't go after end and respects minimum duration
|
|
6495
|
+
const minDuration = 24 * 60 * 60 * 1000; // 1 day minimum
|
|
6496
|
+
const chartStartTime = this.root.state.options.times.firstTime;
|
|
6497
|
+
if (newStartTime < newEndTime && newEndTime - newStartTime >= minDuration && newStartTime >= chartStartTime) {
|
|
6498
|
+
this.updateTaskTime(newStartTime, newEndTime);
|
|
6499
|
+
|
|
6500
|
+
// Update date tooltip for start dragging
|
|
6501
|
+
if (this.dateTooltip) {
|
|
6502
|
+
this.updateDateTooltip(newStartTime);
|
|
6503
|
+
}
|
|
6504
|
+
}
|
|
6505
|
+
} else if (this.dragType === 'end') {
|
|
6506
|
+
// Resize from end - change end date while keeping start fixed
|
|
6507
|
+
const newStartTime = this.originalStartTime;
|
|
6508
|
+
const newEndTime = this.originalEndTime + timeDelta;
|
|
6509
|
+
|
|
6510
|
+
// Ensure end doesn't go before start and respects minimum duration
|
|
6511
|
+
const minDuration = 24 * 60 * 60 * 1000; // 1 day minimum
|
|
6512
|
+
|
|
6513
|
+
if (newEndTime > newStartTime && newEndTime - newStartTime >= minDuration) {
|
|
6514
|
+
// Allow extending beyond chart end time if needed
|
|
6515
|
+
this.updateTaskTime(newStartTime, newEndTime);
|
|
6516
|
+
|
|
6517
|
+
// Update date tooltip for end dragging
|
|
6518
|
+
if (this.dateTooltip) {
|
|
6519
|
+
this.updateDateTooltip(newEndTime);
|
|
6520
|
+
}
|
|
6521
|
+
}
|
|
6522
|
+
}
|
|
6523
|
+
},
|
|
6524
|
+
endDrag(event) {
|
|
6525
|
+
if (!this.isDragging) return;
|
|
6526
|
+
this.isDragging = false;
|
|
6527
|
+
|
|
6528
|
+
// Remove event listeners
|
|
6529
|
+
document.removeEventListener('mousemove', this.handleDrag);
|
|
6530
|
+
document.removeEventListener('mouseup', this.endDrag);
|
|
6531
|
+
document.removeEventListener('touchmove', this.handleDrag);
|
|
6532
|
+
document.removeEventListener('touchend', this.endDrag);
|
|
6533
|
+
|
|
6534
|
+
// Remove dragging classes
|
|
6535
|
+
this.$el.classList.remove('gantt-elastic__task-dragging');
|
|
6536
|
+
this.$el.classList.remove(`gantt-elastic__task-dragging--${this.dragType}`);
|
|
6537
|
+
|
|
6538
|
+
// Remove date tooltip
|
|
6539
|
+
this.removeDateTooltip();
|
|
6540
|
+
|
|
6541
|
+
// Emit save event with updated data
|
|
6542
|
+
this.emitSaveEvent();
|
|
6543
|
+
},
|
|
6544
|
+
updateTaskTime(newStartTime, newEndTime) {
|
|
6545
|
+
// Ensure valid times
|
|
6546
|
+
if (newStartTime >= newEndTime) {
|
|
6547
|
+
return; // Don't update if invalid
|
|
6548
|
+
}
|
|
6549
|
+
|
|
6550
|
+
// Debug logging for epic tasks
|
|
6551
|
+
if (this.task.type === 'epic') {
|
|
6552
|
+
// console.log('Epic task drag:', {
|
|
6553
|
+
// dragType: this.dragType,
|
|
6554
|
+
// originalStart: this.originalStartTime,
|
|
6555
|
+
// originalEnd: this.originalEndTime,
|
|
6556
|
+
// newStart: newStartTime,
|
|
6557
|
+
// newEnd: newEndTime,
|
|
6558
|
+
// startChanged: newStartTime !== this.originalStartTime,
|
|
6559
|
+
// endChanged: newEndTime !== this.originalEndTime
|
|
6560
|
+
// });
|
|
6561
|
+
}
|
|
6562
|
+
|
|
6563
|
+
// Update task data
|
|
6564
|
+
this.task.startTime = newStartTime;
|
|
6565
|
+
this.task.endTime = newEndTime;
|
|
6566
|
+
this.task.duration = newEndTime - newStartTime;
|
|
6567
|
+
|
|
6568
|
+
// Debug logging
|
|
6569
|
+
// console.log('Updating task time:', {
|
|
6570
|
+
// taskId: this.task.id,
|
|
6571
|
+
// newStartTime,
|
|
6572
|
+
// newEndTime,
|
|
6573
|
+
// duration: this.task.duration,
|
|
6574
|
+
// root: !!this.root,
|
|
6575
|
+
// timeToPixelOffsetX: !!(this.root && this.root.timeToPixelOffsetX),
|
|
6576
|
+
// timePerPixel: this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel
|
|
6577
|
+
// });
|
|
6578
|
+
|
|
6579
|
+
// Update task position and width using the correct method
|
|
6580
|
+
if (this.root && this.root.timeToPixelOffsetX) {
|
|
6581
|
+
this.task.x = this.root.timeToPixelOffsetX(newStartTime);
|
|
6582
|
+
this.task.width = this.root.timeToPixelOffsetX(newEndTime) - this.task.x;
|
|
6583
|
+
} else {
|
|
6584
|
+
// Fallback calculation if method is not available
|
|
6585
|
+
const timePerPixel = this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel;
|
|
6586
|
+
if (timePerPixel > 0) {
|
|
6587
|
+
this.task.x = (newStartTime - this.root.state.options.times.firstTime) / timePerPixel;
|
|
6588
|
+
this.task.width = (newEndTime - newStartTime) / timePerPixel;
|
|
6589
|
+
} else {
|
|
6590
|
+
console.error('timePerPixel is not available or invalid:', timePerPixel);
|
|
6591
|
+
}
|
|
6592
|
+
}
|
|
6593
|
+
|
|
6594
|
+
// Force update
|
|
6595
|
+
this.$forceUpdate();
|
|
6596
|
+
},
|
|
6597
|
+
emitSaveEvent() {
|
|
6598
|
+
// Calculate date information
|
|
6599
|
+
const startDate = new Date(this.task.startTime);
|
|
6600
|
+
const endDate = new Date(this.task.endTime);
|
|
6601
|
+
const durationDays = Math.ceil(this.task.duration / (24 * 60 * 60 * 1000));
|
|
6602
|
+
|
|
6603
|
+
// Emit event to parent component with updated task data
|
|
6604
|
+
this.$emit('task-updated', {
|
|
6605
|
+
id: this.task.id,
|
|
6606
|
+
startTime: this.task.startTime,
|
|
6607
|
+
endTime: this.task.endTime,
|
|
6608
|
+
duration: this.task.duration,
|
|
6609
|
+
durationDays: durationDays,
|
|
6610
|
+
startDate: startDate.toISOString(),
|
|
6611
|
+
endDate: endDate.toISOString(),
|
|
6612
|
+
startDateFormatted: startDate.toLocaleDateString(),
|
|
6613
|
+
endDateFormatted: endDate.toLocaleDateString(),
|
|
6614
|
+
dragType: this.dragType,
|
|
6615
|
+
originalStartTime: this.originalStartTime,
|
|
6616
|
+
originalEndTime: this.originalEndTime,
|
|
6617
|
+
originalDuration: this.originalDuration
|
|
6618
|
+
});
|
|
6619
|
+
|
|
6620
|
+
// Log the update for debugging
|
|
6621
|
+
// console.log('Task drag completed:', {
|
|
6622
|
+
// id: this.task.id,
|
|
6623
|
+
// dragType: this.dragType,
|
|
6624
|
+
// startDate: startDate.toLocaleDateString(),
|
|
6625
|
+
// endDate: endDate.toLocaleDateString(),
|
|
6626
|
+
// duration: `${durationDays} days`,
|
|
6627
|
+
// startTime: this.task.startTime,
|
|
6628
|
+
// endTime: this.task.endTime
|
|
6629
|
+
// });
|
|
6630
|
+
},
|
|
6631
|
+
/**
|
|
6632
|
+
* Show context menu for task actions
|
|
6633
|
+
*
|
|
6634
|
+
* @param {Event} event - Right-click event
|
|
6635
|
+
*/
|
|
6636
|
+
// showContextMenu(event) {
|
|
6637
|
+
// event.preventDefault();
|
|
6638
|
+
//
|
|
6639
|
+
// // Remove existing context menu
|
|
6640
|
+
// this.hideContextMenu();
|
|
6641
|
+
//
|
|
6642
|
+
// // Create context menu
|
|
6643
|
+
// const contextMenu = document.createElement('div');
|
|
6644
|
+
// contextMenu.className = 'gantt-elastic__context-menu';
|
|
6645
|
+
// contextMenu.style.cssText = `
|
|
6646
|
+
// position: fixed;
|
|
6647
|
+
// top: ${event.clientY}px;
|
|
6648
|
+
// left: ${event.clientX}px;
|
|
6649
|
+
// background: white;
|
|
6650
|
+
// border: 1px solid #e5e7eb;
|
|
6651
|
+
// border-radius: 6px;
|
|
6652
|
+
// box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
6653
|
+
// z-index: 1000;
|
|
6654
|
+
// min-width: 150px;
|
|
6655
|
+
// padding: 4px 0;
|
|
6656
|
+
// `;
|
|
6657
|
+
//
|
|
6658
|
+
// // Add menu items
|
|
6659
|
+
// const menuItems = [
|
|
6660
|
+
// { text: 'Extend to Next Date', action: () => this.extendTaskToNextDate() },
|
|
6661
|
+
// { text: 'Extend by 1 Day', action: () => this.extendTaskByDays(1) },
|
|
6662
|
+
// { text: 'Extend by 3 Days', action: () => this.extendTaskByDays(3) },
|
|
6663
|
+
// { text: 'Extend by 1 Week', action: () => this.extendTaskByDays(7) }
|
|
6664
|
+
// ];
|
|
6665
|
+
//
|
|
6666
|
+
// menuItems.forEach(item => {
|
|
6667
|
+
// const menuItem = document.createElement('div');
|
|
6668
|
+
// menuItem.className = 'gantt-elastic__context-menu-item';
|
|
6669
|
+
// menuItem.textContent = item.text;
|
|
6670
|
+
// menuItem.style.cssText = `
|
|
6671
|
+
// padding: 8px 16px;
|
|
6672
|
+
// cursor: pointer;
|
|
6673
|
+
// font-size: 14px;
|
|
6674
|
+
// color: #374151;
|
|
6675
|
+
// transition: background-color 0.2s;
|
|
6676
|
+
// `;
|
|
6677
|
+
//
|
|
6678
|
+
// menuItem.addEventListener('mouseenter', () => {
|
|
6679
|
+
// menuItem.style.backgroundColor = '#f3f4f6';
|
|
6680
|
+
// });
|
|
6681
|
+
//
|
|
6682
|
+
// menuItem.addEventListener('mouseleave', () => {
|
|
6683
|
+
// menuItem.style.backgroundColor = 'transparent';
|
|
6684
|
+
// });
|
|
6685
|
+
//
|
|
6686
|
+
// menuItem.addEventListener('click', () => {
|
|
6687
|
+
// item.action();
|
|
6688
|
+
// this.hideContextMenu();
|
|
6689
|
+
// });
|
|
6690
|
+
//
|
|
6691
|
+
// contextMenu.appendChild(menuItem);
|
|
6692
|
+
// });
|
|
6693
|
+
//
|
|
6694
|
+
// // Add to document
|
|
6695
|
+
// document.body.appendChild(contextMenu);
|
|
6696
|
+
// this.contextMenu = contextMenu;
|
|
6697
|
+
//
|
|
6698
|
+
// // Close menu when clicking outside
|
|
6699
|
+
// setTimeout(() => {
|
|
6700
|
+
// document.addEventListener('click', this.hideContextMenu);
|
|
6701
|
+
// }, 0);
|
|
6702
|
+
// },
|
|
6703
|
+
|
|
6704
|
+
/**
|
|
6705
|
+
* Hide context menu
|
|
6706
|
+
*/
|
|
6707
|
+
// hideContextMenu() {
|
|
6708
|
+
// if (this.contextMenu) {
|
|
6709
|
+
// document.body.removeChild(this.contextMenu);
|
|
6710
|
+
// this.contextMenu = null;
|
|
6711
|
+
// document.removeEventListener('click', this.hideContextMenu);
|
|
6712
|
+
// }
|
|
6713
|
+
// },
|
|
6714
|
+
|
|
6715
|
+
/**
|
|
6716
|
+
* Extend task to next date (1 day)
|
|
6717
|
+
*/
|
|
6718
|
+
// extendTaskToNextDate() {
|
|
6719
|
+
// const additionalDuration = 24 * 60 * 60 * 1000; // 1 day
|
|
6720
|
+
// this.task.duration += additionalDuration;
|
|
6721
|
+
// this.task.endTime += additionalDuration;
|
|
6722
|
+
//
|
|
6723
|
+
// // Update task position and width
|
|
6724
|
+
// if (this.root && this.root.timeToPixelOffsetX) {
|
|
6725
|
+
// this.task.width = this.root.timeToPixelOffsetX(this.task.endTime) - this.task.x;
|
|
6726
|
+
// } else {
|
|
6727
|
+
// const timePerPixel = this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel;
|
|
6728
|
+
// if (timePerPixel > 0) {
|
|
6729
|
+
// this.task.width = (this.task.endTime - this.task.startTime) / timePerPixel;
|
|
6730
|
+
// }
|
|
6731
|
+
// }
|
|
6732
|
+
//
|
|
6733
|
+
// // Emit update event
|
|
6734
|
+
// this.emitSaveEvent();
|
|
6735
|
+
//
|
|
6736
|
+
// console.log(`✅ Task extended to next date:`, {
|
|
6737
|
+
// taskId: this.task.id,
|
|
6738
|
+
// newDuration: this.task.duration,
|
|
6739
|
+
// newEndDate: new Date(this.task.endTime).toLocaleDateString()
|
|
6740
|
+
// });
|
|
6741
|
+
// },
|
|
6742
|
+
|
|
6743
|
+
/**
|
|
6744
|
+
* Extend task by specific number of days
|
|
6745
|
+
*
|
|
6746
|
+
* @param {number} days - Number of days to add
|
|
6747
|
+
*/
|
|
6748
|
+
// extendTaskByDays(days) {
|
|
6749
|
+
// const additionalDuration = days * 24 * 60 * 60 * 1000;
|
|
6750
|
+
// this.task.duration += additionalDuration;
|
|
6751
|
+
// this.task.endTime += additionalDuration;
|
|
6752
|
+
//
|
|
6753
|
+
// // Update task position and width
|
|
6754
|
+
// if (this.root && this.root.timeToPixelOffsetX) {
|
|
6755
|
+
// this.task.width = this.root.timeToPixelOffsetX(this.task.endTime) - this.task.x;
|
|
6756
|
+
// } else {
|
|
6757
|
+
// const timePerPixel = this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel;
|
|
6758
|
+
// if (timePerPixel > 0) {
|
|
6759
|
+
// this.task.width = (this.task.endTime - this.task.startTime) / timePerPixel;
|
|
6760
|
+
// }
|
|
6761
|
+
// }
|
|
6762
|
+
//
|
|
6763
|
+
// // Emit update event
|
|
6764
|
+
// this.emitSaveEvent();
|
|
6765
|
+
//
|
|
6766
|
+
// console.log(`✅ Task extended by ${days} day(s):`, {
|
|
6767
|
+
// taskId: this.task.id,
|
|
6768
|
+
// daysAdded: days,
|
|
6769
|
+
// newDuration: this.task.duration,
|
|
6770
|
+
// newEndDate: new Date(this.task.endTime).toLocaleDateString()
|
|
6771
|
+
// });
|
|
6772
|
+
// },
|
|
6773
|
+
|
|
6774
|
+
/**
|
|
6775
|
+
* Handle keyboard shortcuts for task extension
|
|
6776
|
+
*
|
|
6777
|
+
* @param {KeyboardEvent} event - Keyboard event
|
|
6778
|
+
*/
|
|
6779
|
+
handleKeyboardShortcuts(event) {
|
|
6780
|
+
// Only handle if task is focused and not dragging
|
|
6781
|
+
if (this.isDragging) return;
|
|
6782
|
+
|
|
6783
|
+
// Check for Ctrl/Cmd + E for extend to next date
|
|
6784
|
+
if ((event.ctrlKey || event.metaKey) && event.key === 'e') {
|
|
6785
|
+
event.preventDefault();
|
|
6786
|
+
this.extendTaskToNextDate();
|
|
6787
|
+
}
|
|
6788
|
+
// Check for Ctrl/Cmd + Shift + E for extend by 1 day
|
|
6789
|
+
else if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === 'E') {
|
|
6790
|
+
event.preventDefault();
|
|
6791
|
+
this.extendTaskByDays(1);
|
|
6792
|
+
}
|
|
6793
|
+
// Check for Ctrl/Cmd + 3 for extend by 3 days
|
|
6794
|
+
else if ((event.ctrlKey || event.metaKey) && event.key === '3') {
|
|
6795
|
+
event.preventDefault();
|
|
6796
|
+
this.extendTaskByDays(3);
|
|
6797
|
+
}
|
|
6798
|
+
// Check for Ctrl/Cmd + 7 for extend by 1 week
|
|
6799
|
+
else if ((event.ctrlKey || event.metaKey) && event.key === '7') {
|
|
6800
|
+
event.preventDefault();
|
|
6801
|
+
this.extendTaskByDays(7);
|
|
6802
|
+
}
|
|
6803
|
+
},
|
|
6804
|
+
/**
|
|
6805
|
+
* Create date tooltip for end dragging
|
|
6806
|
+
*/
|
|
6807
|
+
createDateTooltip() {
|
|
6808
|
+
this.dateTooltip = document.createElement('div');
|
|
6809
|
+
this.dateTooltip.className = 'gantt-elastic__date-tooltip';
|
|
6810
|
+
this.dateTooltip.style.cssText = `
|
|
6811
|
+
position: fixed;
|
|
6812
|
+
background: #000000;
|
|
6813
|
+
color: white;
|
|
6814
|
+
padding: 6px 12px;
|
|
6815
|
+
border-radius: 6px;
|
|
6816
|
+
font-size: 13px;
|
|
6817
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
6818
|
+
font-weight: 500;
|
|
6819
|
+
pointer-events: none;
|
|
6820
|
+
z-index: 10000;
|
|
6821
|
+
white-space: nowrap;
|
|
6822
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
6823
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
6824
|
+
`;
|
|
6825
|
+
document.body.appendChild(this.dateTooltip);
|
|
6826
|
+
|
|
6827
|
+
// Initialize tooltip with current values
|
|
6828
|
+
if (this.dragType === 'start') {
|
|
6829
|
+
this.updateDateTooltip(this.originalStartTime);
|
|
6830
|
+
} else if (this.dragType === 'end') {
|
|
6831
|
+
this.updateDateTooltip(this.originalEndTime);
|
|
6832
|
+
} else if (this.dragType === 'move') {
|
|
6833
|
+
this.updateDateTooltip(this.originalStartTime);
|
|
6834
|
+
}
|
|
6835
|
+
},
|
|
6836
|
+
/**
|
|
6837
|
+
* Update date tooltip with new time and day changes
|
|
6838
|
+
*
|
|
6839
|
+
* @param {number} newTime - New time in milliseconds
|
|
6840
|
+
*/
|
|
6841
|
+
updateDateTooltip(newTime) {
|
|
6842
|
+
if (!this.dateTooltip) return;
|
|
6843
|
+
const newDate = new Date(newTime);
|
|
6844
|
+
const formattedDate = newDate.toLocaleDateString('en-US', {
|
|
6845
|
+
year: 'numeric',
|
|
6846
|
+
month: 'short',
|
|
6847
|
+
day: 'numeric'
|
|
6848
|
+
});
|
|
6849
|
+
|
|
6850
|
+
// Calculate day changes based on drag type
|
|
6851
|
+
let dayChanges = '';
|
|
6852
|
+
if (this.dragType === 'start') {
|
|
6853
|
+
// For start drag, show how many days we're moving the start date
|
|
6854
|
+
const daysDiff = Math.round((newTime - this.originalStartTime) / (24 * 60 * 60 * 1000));
|
|
6855
|
+
if (daysDiff !== 0) {
|
|
6856
|
+
dayChanges = daysDiff > 0 ? ` (+${daysDiff} days)` : ` (${daysDiff} days)`;
|
|
6857
|
+
}
|
|
6858
|
+
} else if (this.dragType === 'end') {
|
|
6859
|
+
// For end drag, show how many days we're moving the end date
|
|
6860
|
+
const daysDiff = Math.round((newTime - this.originalEndTime) / (24 * 60 * 60 * 1000));
|
|
6861
|
+
if (daysDiff !== 0) {
|
|
6862
|
+
dayChanges = daysDiff > 0 ? ` (+${daysDiff} days)` : ` (${daysDiff} days)`;
|
|
6863
|
+
}
|
|
6864
|
+
} else if (this.dragType === 'move') {
|
|
6865
|
+
// For move drag, show how many days we're moving the entire task
|
|
6866
|
+
const daysDiff = Math.round((newTime - this.originalStartTime) / (24 * 60 * 60 * 1000));
|
|
6867
|
+
if (daysDiff !== 0) {
|
|
6868
|
+
dayChanges = daysDiff > 0 ? ` (+${daysDiff} days)` : ` (${daysDiff} days)`;
|
|
6869
|
+
}
|
|
6870
|
+
}
|
|
6871
|
+
this.dateTooltip.textContent = `${formattedDate}${dayChanges}`;
|
|
6872
|
+
|
|
6873
|
+
// Position tooltip based on drag type
|
|
6874
|
+
const rect = this.$el.getBoundingClientRect();
|
|
6875
|
+
if (this.dragType === 'start') {
|
|
6876
|
+
// Position tooltip on the left side for start drag
|
|
6877
|
+
this.dateTooltip.style.left = `${rect.left - this.dateTooltip.offsetWidth - 10}px`;
|
|
6878
|
+
this.dateTooltip.style.top = `${rect.top + rect.height / 2 - 10}px`;
|
|
6879
|
+
} else if (this.dragType === 'end') {
|
|
6880
|
+
// Position tooltip on the right side for end drag
|
|
6881
|
+
this.dateTooltip.style.left = `${rect.right + 10}px`;
|
|
6882
|
+
this.dateTooltip.style.top = `${rect.top + rect.height / 2 - 10}px`;
|
|
6883
|
+
} else if (this.dragType === 'move') {
|
|
6884
|
+
// Position tooltip on the right side for move drag
|
|
6885
|
+
this.dateTooltip.style.left = `${rect.right + 10}px`;
|
|
6886
|
+
this.dateTooltip.style.top = `${rect.top + rect.height / 2 - 10}px`;
|
|
6887
|
+
}
|
|
6888
|
+
},
|
|
6889
|
+
/**
|
|
6890
|
+
* Remove date tooltip
|
|
6891
|
+
*/
|
|
6892
|
+
removeDateTooltip() {
|
|
6893
|
+
if (this.dateTooltip) {
|
|
6894
|
+
document.body.removeChild(this.dateTooltip);
|
|
6895
|
+
this.dateTooltip = null;
|
|
6896
|
+
}
|
|
6897
|
+
},
|
|
6898
|
+
/**
|
|
6899
|
+
* Add hover tooltips for drag handles
|
|
6900
|
+
*/
|
|
6901
|
+
addHoverTooltips() {
|
|
6902
|
+
// Find drag handles in the current element
|
|
6903
|
+
const dragHandles = this.$el.querySelectorAll('.gantt-elastic__chart-row-extend-handle');
|
|
6904
|
+
dragHandles.forEach((handle, index) => {
|
|
6905
|
+
const isStartHandle = index === 0; // First handle is start, second is end
|
|
6906
|
+
|
|
6907
|
+
// Remove existing listeners to avoid duplicates
|
|
6908
|
+
handle.removeEventListener('mouseenter', this.handleMouseEnter);
|
|
6909
|
+
handle.removeEventListener('mouseleave', this.handleMouseLeave);
|
|
6910
|
+
|
|
6911
|
+
// Add new listeners
|
|
6912
|
+
handle.addEventListener('mouseenter', this.handleMouseEnter.bind(this));
|
|
6913
|
+
handle.addEventListener('mouseleave', this.handleMouseLeave.bind(this));
|
|
6914
|
+
});
|
|
6915
|
+
},
|
|
6916
|
+
/**
|
|
6917
|
+
* Handle mouse enter on drag handle
|
|
6918
|
+
*/
|
|
6919
|
+
handleMouseEnter(event) {
|
|
6920
|
+
if (!this.isDragging) {
|
|
6921
|
+
this.showHoverTooltip(event, false);
|
|
6922
|
+
}
|
|
6923
|
+
},
|
|
6924
|
+
/**
|
|
6925
|
+
* Handle mouse leave on drag handle
|
|
6926
|
+
*/
|
|
6927
|
+
handleMouseLeave() {
|
|
6928
|
+
if (!this.isDragging) {
|
|
6929
|
+
this.hideHoverTooltip();
|
|
6930
|
+
}
|
|
6931
|
+
},
|
|
6932
|
+
/**
|
|
6933
|
+
* Show hover tooltip with date range and duration
|
|
6934
|
+
*/
|
|
6935
|
+
showHoverTooltip(event, isStartHandle) {
|
|
6936
|
+
this.hideHoverTooltip(); // Remove any existing tooltip
|
|
6937
|
+
|
|
6938
|
+
const startDate = new Date(this.task.startTime);
|
|
6939
|
+
const endDate = new Date(this.task.endTime);
|
|
6940
|
+
const startFormatted = startDate.toLocaleDateString('en-US', {
|
|
6941
|
+
year: 'numeric',
|
|
6942
|
+
month: 'short',
|
|
6943
|
+
day: 'numeric'
|
|
6944
|
+
});
|
|
6945
|
+
const endFormatted = endDate.toLocaleDateString('en-US', {
|
|
6946
|
+
year: 'numeric',
|
|
6947
|
+
month: 'short',
|
|
6948
|
+
day: 'numeric'
|
|
6949
|
+
});
|
|
6950
|
+
|
|
6951
|
+
// Calculate duration in days
|
|
6952
|
+
const durationMs = this.task.endTime - this.task.startTime;
|
|
6953
|
+
const durationDays = Math.ceil(durationMs / (24 * 60 * 60 * 1000));
|
|
6954
|
+
this.hoverTooltip = document.createElement('div');
|
|
6955
|
+
this.hoverTooltip.className = 'gantt-elastic__hover-tooltip';
|
|
6956
|
+
this.hoverTooltip.textContent = `${startFormatted} - ${endFormatted} (${durationDays} days)`;
|
|
6957
|
+
this.hoverTooltip.style.cssText = `
|
|
6958
|
+
position: fixed;
|
|
6959
|
+
background: #333333;
|
|
6960
|
+
color: white;
|
|
6961
|
+
padding: 8px 12px;
|
|
6962
|
+
border-radius: 6px;
|
|
6963
|
+
font-size: 13px;
|
|
6964
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
6965
|
+
font-weight: 500;
|
|
6966
|
+
pointer-events: none;
|
|
6967
|
+
z-index: 10001;
|
|
6968
|
+
white-space: nowrap;
|
|
6969
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
6970
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
6971
|
+
`;
|
|
6972
|
+
document.body.appendChild(this.hoverTooltip);
|
|
6973
|
+
|
|
6974
|
+
// Position tooltip above the handle
|
|
6975
|
+
const rect = event.target.getBoundingClientRect();
|
|
6976
|
+
this.hoverTooltip.style.left = `${rect.left + rect.width / 2 - this.hoverTooltip.offsetWidth / 2}px`;
|
|
6977
|
+
this.hoverTooltip.style.top = `${rect.top - this.hoverTooltip.offsetHeight - 8}px`;
|
|
6978
|
+
},
|
|
6979
|
+
/**
|
|
6980
|
+
* Hide hover tooltip
|
|
6981
|
+
*/
|
|
6982
|
+
hideHoverTooltip() {
|
|
6983
|
+
if (this.hoverTooltip) {
|
|
6984
|
+
document.body.removeChild(this.hoverTooltip);
|
|
6985
|
+
this.hoverTooltip = null;
|
|
6986
|
+
}
|
|
6987
|
+
}
|
|
6988
|
+
},
|
|
6989
|
+
mounted() {
|
|
6990
|
+
// Add hover tooltips when component is mounted
|
|
6991
|
+
this.$nextTick(() => {
|
|
6992
|
+
this.addHoverTooltips();
|
|
6993
|
+
});
|
|
6994
|
+
},
|
|
6995
|
+
beforeDestroy() {
|
|
6996
|
+
// Clean up event listeners
|
|
6997
|
+
document.removeEventListener('mousemove', this.handleDrag);
|
|
6998
|
+
document.removeEventListener('mouseup', this.endDrag);
|
|
6999
|
+
document.removeEventListener('touchmove', this.handleDrag);
|
|
7000
|
+
document.removeEventListener('touchend', this.endDrag);
|
|
7001
|
+
document.removeEventListener('click', this.hideContextMenu);
|
|
7002
|
+
|
|
7003
|
+
// Clean up context menu
|
|
7004
|
+
this.hideContextMenu();
|
|
7005
|
+
|
|
7006
|
+
// Clean up date tooltip
|
|
7007
|
+
this.removeDateTooltip();
|
|
7008
|
+
|
|
7009
|
+
// Clean up hover tooltip
|
|
7010
|
+
this.hideHoverTooltip();
|
|
7011
|
+
|
|
7012
|
+
// Clean up keyboard listeners
|
|
7013
|
+
if (this.$el) {
|
|
7014
|
+
// this.$el.removeEventListener('contextmenu', this.showContextMenu);
|
|
7015
|
+
this.$el.removeEventListener('keydown', this.handleKeyboardShortcuts);
|
|
7016
|
+
}
|
|
7017
|
+
}
|
|
7018
|
+
});
|
|
6274
7019
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Task.vue?vue&type=script&lang=js
|
|
6275
7020
|
|
|
6276
7021
|
|
|
6277
7022
|
|
|
6278
7023
|
|
|
7024
|
+
|
|
6279
7025
|
/* harmony default export */ var Taskvue_type_script_lang_js = ({
|
|
6280
7026
|
name: 'Task',
|
|
6281
7027
|
components: {
|
|
@@ -6285,7 +7031,7 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6285
7031
|
},
|
|
6286
7032
|
inject: ['root'],
|
|
6287
7033
|
props: ['task'],
|
|
6288
|
-
mixins: [Task_mixin],
|
|
7034
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6289
7035
|
data() {
|
|
6290
7036
|
return {};
|
|
6291
7037
|
},
|
|
@@ -6306,6 +7052,15 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6306
7052
|
getPoints() {
|
|
6307
7053
|
const task = this.task;
|
|
6308
7054
|
return `0,0 ${task.width},0 ${task.width},${task.height} 0,${task.height}`;
|
|
7055
|
+
},
|
|
7056
|
+
/**
|
|
7057
|
+
* Get points adjusted for viewBox
|
|
7058
|
+
*
|
|
7059
|
+
* @returns {string}
|
|
7060
|
+
*/
|
|
7061
|
+
getPointsAdjusted() {
|
|
7062
|
+
const task = this.task;
|
|
7063
|
+
return `8,0 ${task.width + 8},0 ${task.width + 8},${task.height} 8,${task.height}`;
|
|
6309
7064
|
}
|
|
6310
7065
|
}
|
|
6311
7066
|
});
|
|
@@ -6321,8 +7076,8 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6321
7076
|
;
|
|
6322
7077
|
var Task_component = normalizeComponent(
|
|
6323
7078
|
Row_Taskvue_type_script_lang_js,
|
|
6324
|
-
|
|
6325
|
-
|
|
7079
|
+
Taskvue_type_template_id_23849415_render,
|
|
7080
|
+
Taskvue_type_template_id_23849415_staticRenderFns,
|
|
6326
7081
|
false,
|
|
6327
7082
|
null,
|
|
6328
7083
|
null,
|
|
@@ -6331,8 +7086,8 @@ var Task_component = normalizeComponent(
|
|
|
6331
7086
|
)
|
|
6332
7087
|
|
|
6333
7088
|
/* harmony default export */ var Task = (Task_component.exports);
|
|
6334
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Milestone.vue?vue&type=template&id=
|
|
6335
|
-
var
|
|
7089
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Milestone.vue?vue&type=template&id=c9bfeb4a
|
|
7090
|
+
var Milestonevue_type_template_id_c9bfeb4a_render = function render() {
|
|
6336
7091
|
var _vm = this,
|
|
6337
7092
|
_c = _vm._self._c;
|
|
6338
7093
|
return _c('g', {
|
|
@@ -6369,11 +7124,11 @@ var Milestonevue_type_template_id_edd49e02_render = function render() {
|
|
|
6369
7124
|
..._vm.task.style['chart-row-bar']
|
|
6370
7125
|
},
|
|
6371
7126
|
attrs: {
|
|
6372
|
-
"x": _vm.task.x,
|
|
7127
|
+
"x": _vm.task.x - 8,
|
|
6373
7128
|
"y": _vm.task.y,
|
|
6374
|
-
"width": _vm.task.width,
|
|
7129
|
+
"width": _vm.task.width + 16,
|
|
6375
7130
|
"height": _vm.task.height,
|
|
6376
|
-
"viewBox":
|
|
7131
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6377
7132
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6378
7133
|
},
|
|
6379
7134
|
on: {
|
|
@@ -6428,26 +7183,83 @@ var Milestonevue_type_template_id_edd49e02_render = function render() {
|
|
|
6428
7183
|
..._vm.task.style['chart-row-bar-polygon']
|
|
6429
7184
|
},
|
|
6430
7185
|
attrs: {
|
|
6431
|
-
"points": _vm.
|
|
7186
|
+
"points": _vm.getPointsAdjusted
|
|
7187
|
+
},
|
|
7188
|
+
on: {
|
|
7189
|
+
"mousedown": function ($event) {
|
|
7190
|
+
return _vm.startDrag($event, 'move');
|
|
7191
|
+
},
|
|
7192
|
+
"touchstart": function ($event) {
|
|
7193
|
+
return _vm.startDrag($event, 'move');
|
|
7194
|
+
}
|
|
6432
7195
|
}
|
|
6433
7196
|
}), _c('progress-bar', {
|
|
6434
7197
|
attrs: {
|
|
6435
7198
|
"task": _vm.task,
|
|
6436
7199
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
6437
7200
|
}
|
|
7201
|
+
}), _c('rect', {
|
|
7202
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7203
|
+
staticStyle: {
|
|
7204
|
+
"pointer-events": "all",
|
|
7205
|
+
"z-index": "50",
|
|
7206
|
+
"cursor": "ew-resize !important"
|
|
7207
|
+
},
|
|
7208
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7209
|
+
attrs: {
|
|
7210
|
+
"x": "0",
|
|
7211
|
+
"y": "0",
|
|
7212
|
+
"width": 12,
|
|
7213
|
+
"height": _vm.task.height
|
|
7214
|
+
},
|
|
7215
|
+
on: {
|
|
7216
|
+
"mousedown": function ($event) {
|
|
7217
|
+
$event.stopPropagation();
|
|
7218
|
+
return _vm.startDrag($event, 'start');
|
|
7219
|
+
},
|
|
7220
|
+
"touchstart": function ($event) {
|
|
7221
|
+
$event.stopPropagation();
|
|
7222
|
+
return _vm.startDrag($event, 'start');
|
|
7223
|
+
}
|
|
7224
|
+
}
|
|
7225
|
+
}), _c('rect', {
|
|
7226
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7227
|
+
staticStyle: {
|
|
7228
|
+
"pointer-events": "all",
|
|
7229
|
+
"z-index": "50",
|
|
7230
|
+
"cursor": "ew-resize !important"
|
|
7231
|
+
},
|
|
7232
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7233
|
+
attrs: {
|
|
7234
|
+
"x": _vm.task.width - 12,
|
|
7235
|
+
"y": "0",
|
|
7236
|
+
"width": 12,
|
|
7237
|
+
"height": _vm.task.height
|
|
7238
|
+
},
|
|
7239
|
+
on: {
|
|
7240
|
+
"mousedown": function ($event) {
|
|
7241
|
+
$event.stopPropagation();
|
|
7242
|
+
return _vm.startDrag($event, 'end');
|
|
7243
|
+
},
|
|
7244
|
+
"touchstart": function ($event) {
|
|
7245
|
+
$event.stopPropagation();
|
|
7246
|
+
return _vm.startDrag($event, 'end');
|
|
7247
|
+
}
|
|
7248
|
+
}
|
|
6438
7249
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
6439
7250
|
attrs: {
|
|
6440
7251
|
"task": _vm.task
|
|
6441
7252
|
}
|
|
6442
7253
|
}) : _vm._e()], 1);
|
|
6443
7254
|
};
|
|
6444
|
-
var
|
|
7255
|
+
var Milestonevue_type_template_id_c9bfeb4a_staticRenderFns = [];
|
|
6445
7256
|
|
|
6446
7257
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Milestone.vue?vue&type=script&lang=js
|
|
6447
7258
|
|
|
6448
7259
|
|
|
6449
7260
|
|
|
6450
7261
|
|
|
7262
|
+
|
|
6451
7263
|
/* harmony default export */ var Milestonevue_type_script_lang_js = ({
|
|
6452
7264
|
name: 'Milestone',
|
|
6453
7265
|
components: {
|
|
@@ -6457,7 +7269,7 @@ var Milestonevue_type_template_id_edd49e02_staticRenderFns = [];
|
|
|
6457
7269
|
},
|
|
6458
7270
|
inject: ['root'],
|
|
6459
7271
|
props: ['task'],
|
|
6460
|
-
mixins: [Task_mixin],
|
|
7272
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6461
7273
|
data() {
|
|
6462
7274
|
return {};
|
|
6463
7275
|
},
|
|
@@ -6488,6 +7300,25 @@ var Milestonevue_type_template_id_edd49e02_staticRenderFns = [];
|
|
|
6488
7300
|
${task.width},${fifty}
|
|
6489
7301
|
${task.width - offset},${task.height}
|
|
6490
7302
|
${offset},${task.height}`;
|
|
7303
|
+
},
|
|
7304
|
+
/**
|
|
7305
|
+
* Get points adjusted for viewBox
|
|
7306
|
+
*
|
|
7307
|
+
* @returns {string}
|
|
7308
|
+
*/
|
|
7309
|
+
getPointsAdjusted() {
|
|
7310
|
+
const task = this.task;
|
|
7311
|
+
const fifty = task.height / 2;
|
|
7312
|
+
let offset = fifty;
|
|
7313
|
+
if (task.width / 2 - offset < 0) {
|
|
7314
|
+
offset = task.width / 2;
|
|
7315
|
+
}
|
|
7316
|
+
return `${8},${fifty}
|
|
7317
|
+
${8 + offset},0
|
|
7318
|
+
${8 + task.width - offset},0
|
|
7319
|
+
${8 + task.width},${fifty}
|
|
7320
|
+
${8 + task.width - offset},${task.height}
|
|
7321
|
+
${8 + offset},${task.height}`;
|
|
6491
7322
|
}
|
|
6492
7323
|
}
|
|
6493
7324
|
});
|
|
@@ -6503,8 +7334,8 @@ var Milestonevue_type_template_id_edd49e02_staticRenderFns = [];
|
|
|
6503
7334
|
;
|
|
6504
7335
|
var Milestone_component = normalizeComponent(
|
|
6505
7336
|
Row_Milestonevue_type_script_lang_js,
|
|
6506
|
-
|
|
6507
|
-
|
|
7337
|
+
Milestonevue_type_template_id_c9bfeb4a_render,
|
|
7338
|
+
Milestonevue_type_template_id_c9bfeb4a_staticRenderFns,
|
|
6508
7339
|
false,
|
|
6509
7340
|
null,
|
|
6510
7341
|
null,
|
|
@@ -6513,8 +7344,8 @@ var Milestone_component = normalizeComponent(
|
|
|
6513
7344
|
)
|
|
6514
7345
|
|
|
6515
7346
|
/* harmony default export */ var Milestone = (Milestone_component.exports);
|
|
6516
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Project.vue?vue&type=template&id=
|
|
6517
|
-
var
|
|
7347
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Project.vue?vue&type=template&id=72239142
|
|
7348
|
+
var Projectvue_type_template_id_72239142_render = function render() {
|
|
6518
7349
|
var _vm = this,
|
|
6519
7350
|
_c = _vm._self._c;
|
|
6520
7351
|
return _c('g', {
|
|
@@ -6551,11 +7382,11 @@ var Projectvue_type_template_id_760bf767_render = function render() {
|
|
|
6551
7382
|
..._vm.task.style['chart-row-bar']
|
|
6552
7383
|
},
|
|
6553
7384
|
attrs: {
|
|
6554
|
-
"x": _vm.task.x,
|
|
7385
|
+
"x": _vm.task.x - 8,
|
|
6555
7386
|
"y": _vm.task.y,
|
|
6556
|
-
"width": _vm.task.width,
|
|
7387
|
+
"width": _vm.task.width + 16,
|
|
6557
7388
|
"height": _vm.task.height,
|
|
6558
|
-
"viewBox":
|
|
7389
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6559
7390
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6560
7391
|
},
|
|
6561
7392
|
on: {
|
|
@@ -6610,26 +7441,83 @@ var Projectvue_type_template_id_760bf767_render = function render() {
|
|
|
6610
7441
|
..._vm.task.style['chart-row-bar-polygon']
|
|
6611
7442
|
},
|
|
6612
7443
|
attrs: {
|
|
6613
|
-
"d": _vm.
|
|
7444
|
+
"d": _vm.getPointsAdjusted
|
|
7445
|
+
},
|
|
7446
|
+
on: {
|
|
7447
|
+
"mousedown": function ($event) {
|
|
7448
|
+
return _vm.startDrag($event, 'move');
|
|
7449
|
+
},
|
|
7450
|
+
"touchstart": function ($event) {
|
|
7451
|
+
return _vm.startDrag($event, 'move');
|
|
7452
|
+
}
|
|
6614
7453
|
}
|
|
6615
7454
|
}), _c('progress-bar', {
|
|
6616
7455
|
attrs: {
|
|
6617
7456
|
"task": _vm.task,
|
|
6618
7457
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
6619
7458
|
}
|
|
7459
|
+
}), _c('rect', {
|
|
7460
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7461
|
+
staticStyle: {
|
|
7462
|
+
"pointer-events": "all",
|
|
7463
|
+
"z-index": "50",
|
|
7464
|
+
"cursor": "ew-resize !important"
|
|
7465
|
+
},
|
|
7466
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7467
|
+
attrs: {
|
|
7468
|
+
"x": "0",
|
|
7469
|
+
"y": "0",
|
|
7470
|
+
"width": 12,
|
|
7471
|
+
"height": _vm.task.height
|
|
7472
|
+
},
|
|
7473
|
+
on: {
|
|
7474
|
+
"mousedown": function ($event) {
|
|
7475
|
+
$event.stopPropagation();
|
|
7476
|
+
return _vm.startDrag($event, 'start');
|
|
7477
|
+
},
|
|
7478
|
+
"touchstart": function ($event) {
|
|
7479
|
+
$event.stopPropagation();
|
|
7480
|
+
return _vm.startDrag($event, 'start');
|
|
7481
|
+
}
|
|
7482
|
+
}
|
|
7483
|
+
}), _c('rect', {
|
|
7484
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7485
|
+
staticStyle: {
|
|
7486
|
+
"pointer-events": "all",
|
|
7487
|
+
"z-index": "50",
|
|
7488
|
+
"cursor": "ew-resize !important"
|
|
7489
|
+
},
|
|
7490
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7491
|
+
attrs: {
|
|
7492
|
+
"x": _vm.task.width - 12,
|
|
7493
|
+
"y": "0",
|
|
7494
|
+
"width": 12,
|
|
7495
|
+
"height": _vm.task.height
|
|
7496
|
+
},
|
|
7497
|
+
on: {
|
|
7498
|
+
"mousedown": function ($event) {
|
|
7499
|
+
$event.stopPropagation();
|
|
7500
|
+
return _vm.startDrag($event, 'end');
|
|
7501
|
+
},
|
|
7502
|
+
"touchstart": function ($event) {
|
|
7503
|
+
$event.stopPropagation();
|
|
7504
|
+
return _vm.startDrag($event, 'end');
|
|
7505
|
+
}
|
|
7506
|
+
}
|
|
6620
7507
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
6621
7508
|
attrs: {
|
|
6622
7509
|
"task": _vm.task
|
|
6623
7510
|
}
|
|
6624
7511
|
}) : _vm._e()], 1);
|
|
6625
7512
|
};
|
|
6626
|
-
var
|
|
7513
|
+
var Projectvue_type_template_id_72239142_staticRenderFns = [];
|
|
6627
7514
|
|
|
6628
7515
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Project.vue?vue&type=script&lang=js
|
|
6629
7516
|
|
|
6630
7517
|
|
|
6631
7518
|
|
|
6632
7519
|
|
|
7520
|
+
|
|
6633
7521
|
/* harmony default export */ var Projectvue_type_script_lang_js = ({
|
|
6634
7522
|
name: 'Project',
|
|
6635
7523
|
components: {
|
|
@@ -6639,7 +7527,7 @@ var Projectvue_type_template_id_760bf767_staticRenderFns = [];
|
|
|
6639
7527
|
},
|
|
6640
7528
|
inject: ['root'],
|
|
6641
7529
|
props: ['task'],
|
|
6642
|
-
mixins: [Task_mixin],
|
|
7530
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6643
7531
|
data() {
|
|
6644
7532
|
return {};
|
|
6645
7533
|
},
|
|
@@ -6675,6 +7563,29 @@ var Projectvue_type_template_id_760bf767_staticRenderFns = [];
|
|
|
6675
7563
|
Z
|
|
6676
7564
|
`;
|
|
6677
7565
|
},
|
|
7566
|
+
/**
|
|
7567
|
+
* Get points adjusted for viewBox
|
|
7568
|
+
*
|
|
7569
|
+
* @returns {string}
|
|
7570
|
+
*/
|
|
7571
|
+
getPointsAdjusted() {
|
|
7572
|
+
const task = this.task;
|
|
7573
|
+
const bottom = task.height - task.height / 4;
|
|
7574
|
+
const corner = task.height / 6;
|
|
7575
|
+
const smallCorner = task.height / 8;
|
|
7576
|
+
return `M ${8 + smallCorner},0
|
|
7577
|
+
L ${8 + task.width - smallCorner} 0
|
|
7578
|
+
L ${8 + task.width} ${smallCorner}
|
|
7579
|
+
L ${8 + task.width} ${bottom}
|
|
7580
|
+
L ${8 + task.width - corner} ${task.height}
|
|
7581
|
+
L ${8 + task.width - corner * 2} ${bottom}
|
|
7582
|
+
L ${8 + corner * 2} ${bottom}
|
|
7583
|
+
L ${8 + corner} ${task.height}
|
|
7584
|
+
L ${8} ${bottom}
|
|
7585
|
+
L ${8} ${smallCorner}
|
|
7586
|
+
Z
|
|
7587
|
+
`;
|
|
7588
|
+
},
|
|
6678
7589
|
/**
|
|
6679
7590
|
* Should we display expander?
|
|
6680
7591
|
*
|
|
@@ -6699,8 +7610,8 @@ var Projectvue_type_template_id_760bf767_staticRenderFns = [];
|
|
|
6699
7610
|
;
|
|
6700
7611
|
var Project_component = normalizeComponent(
|
|
6701
7612
|
Row_Projectvue_type_script_lang_js,
|
|
6702
|
-
|
|
6703
|
-
|
|
7613
|
+
Projectvue_type_template_id_72239142_render,
|
|
7614
|
+
Projectvue_type_template_id_72239142_staticRenderFns,
|
|
6704
7615
|
false,
|
|
6705
7616
|
null,
|
|
6706
7617
|
null,
|
|
@@ -6709,8 +7620,8 @@ var Project_component = normalizeComponent(
|
|
|
6709
7620
|
)
|
|
6710
7621
|
|
|
6711
7622
|
/* harmony default export */ var Project = (Project_component.exports);
|
|
6712
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Epic.vue?vue&type=template&id=
|
|
6713
|
-
var
|
|
7623
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Epic.vue?vue&type=template&id=80ad2e9c
|
|
7624
|
+
var Epicvue_type_template_id_80ad2e9c_render = function render() {
|
|
6714
7625
|
var _vm = this,
|
|
6715
7626
|
_c = _vm._self._c;
|
|
6716
7627
|
return _c('g', {
|
|
@@ -6747,11 +7658,11 @@ var Epicvue_type_template_id_a2e89cd8_render = function render() {
|
|
|
6747
7658
|
..._vm.task.style['chart-row-bar']
|
|
6748
7659
|
},
|
|
6749
7660
|
attrs: {
|
|
6750
|
-
"x": _vm.task.x,
|
|
7661
|
+
"x": _vm.task.x - 8,
|
|
6751
7662
|
"y": _vm.task.y,
|
|
6752
|
-
"width": _vm.task.width,
|
|
7663
|
+
"width": _vm.task.width + 16,
|
|
6753
7664
|
"height": _vm.task.height,
|
|
6754
|
-
"viewBox":
|
|
7665
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6755
7666
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6756
7667
|
},
|
|
6757
7668
|
on: {
|
|
@@ -6803,29 +7714,88 @@ var Epicvue_type_template_id_a2e89cd8_render = function render() {
|
|
|
6803
7714
|
..._vm.root.style['chart-row-bar-polygon'],
|
|
6804
7715
|
..._vm.root.style['chart-row-epic-polygon'],
|
|
6805
7716
|
..._vm.task.style['base'],
|
|
6806
|
-
..._vm.task.style['chart-row-bar-polygon']
|
|
7717
|
+
..._vm.task.style['chart-row-bar-polygon'],
|
|
7718
|
+
'pointer-events': 'all',
|
|
7719
|
+
'z-index': '10'
|
|
6807
7720
|
},
|
|
6808
7721
|
attrs: {
|
|
6809
|
-
"d": _vm.
|
|
7722
|
+
"d": _vm.getPointsAdjusted
|
|
7723
|
+
},
|
|
7724
|
+
on: {
|
|
7725
|
+
"mousedown": function ($event) {
|
|
7726
|
+
return _vm.startDrag($event, 'move');
|
|
7727
|
+
},
|
|
7728
|
+
"touchstart": function ($event) {
|
|
7729
|
+
return _vm.startDrag($event, 'move');
|
|
7730
|
+
}
|
|
6810
7731
|
}
|
|
6811
|
-
}), _c('progress-bar', {
|
|
7732
|
+
}), _vm.task.progress > 0 ? _c('progress-bar', {
|
|
6812
7733
|
attrs: {
|
|
6813
7734
|
"task": _vm.task,
|
|
6814
7735
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
6815
7736
|
}
|
|
7737
|
+
}) : _vm._e(), _c('rect', {
|
|
7738
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7739
|
+
staticStyle: {
|
|
7740
|
+
"pointer-events": "all",
|
|
7741
|
+
"z-index": "50",
|
|
7742
|
+
"cursor": "ew-resize !important"
|
|
7743
|
+
},
|
|
7744
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7745
|
+
attrs: {
|
|
7746
|
+
"x": "0",
|
|
7747
|
+
"y": "0",
|
|
7748
|
+
"width": 12,
|
|
7749
|
+
"height": _vm.task.height
|
|
7750
|
+
},
|
|
7751
|
+
on: {
|
|
7752
|
+
"mousedown": function ($event) {
|
|
7753
|
+
$event.stopPropagation();
|
|
7754
|
+
return _vm.startDrag($event, 'start');
|
|
7755
|
+
},
|
|
7756
|
+
"touchstart": function ($event) {
|
|
7757
|
+
$event.stopPropagation();
|
|
7758
|
+
return _vm.startDrag($event, 'start');
|
|
7759
|
+
}
|
|
7760
|
+
}
|
|
7761
|
+
}), _c('rect', {
|
|
7762
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7763
|
+
staticStyle: {
|
|
7764
|
+
"pointer-events": "all",
|
|
7765
|
+
"z-index": "50",
|
|
7766
|
+
"cursor": "ew-resize !important"
|
|
7767
|
+
},
|
|
7768
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7769
|
+
attrs: {
|
|
7770
|
+
"x": _vm.task.width - 12,
|
|
7771
|
+
"y": "0",
|
|
7772
|
+
"width": 12,
|
|
7773
|
+
"height": _vm.task.height
|
|
7774
|
+
},
|
|
7775
|
+
on: {
|
|
7776
|
+
"mousedown": function ($event) {
|
|
7777
|
+
$event.stopPropagation();
|
|
7778
|
+
return _vm.startDrag($event, 'end');
|
|
7779
|
+
},
|
|
7780
|
+
"touchstart": function ($event) {
|
|
7781
|
+
$event.stopPropagation();
|
|
7782
|
+
return _vm.startDrag($event, 'end');
|
|
7783
|
+
}
|
|
7784
|
+
}
|
|
6816
7785
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
6817
7786
|
attrs: {
|
|
6818
7787
|
"task": _vm.task
|
|
6819
7788
|
}
|
|
6820
7789
|
}) : _vm._e()], 1);
|
|
6821
7790
|
};
|
|
6822
|
-
var
|
|
7791
|
+
var Epicvue_type_template_id_80ad2e9c_staticRenderFns = [];
|
|
6823
7792
|
|
|
6824
7793
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Epic.vue?vue&type=script&lang=js
|
|
6825
7794
|
|
|
6826
7795
|
|
|
6827
7796
|
|
|
6828
7797
|
|
|
7798
|
+
|
|
6829
7799
|
/* harmony default export */ var Epicvue_type_script_lang_js = ({
|
|
6830
7800
|
name: 'Epic',
|
|
6831
7801
|
components: {
|
|
@@ -6835,7 +7805,7 @@ var Epicvue_type_template_id_a2e89cd8_staticRenderFns = [];
|
|
|
6835
7805
|
},
|
|
6836
7806
|
inject: ['root'],
|
|
6837
7807
|
props: ['task'],
|
|
6838
|
-
mixins: [Task_mixin],
|
|
7808
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6839
7809
|
data() {
|
|
6840
7810
|
return {};
|
|
6841
7811
|
},
|
|
@@ -6871,6 +7841,29 @@ var Epicvue_type_template_id_a2e89cd8_staticRenderFns = [];
|
|
|
6871
7841
|
Z
|
|
6872
7842
|
`;
|
|
6873
7843
|
},
|
|
7844
|
+
/**
|
|
7845
|
+
* Get points adjusted for viewBox
|
|
7846
|
+
*
|
|
7847
|
+
* @returns {string}
|
|
7848
|
+
*/
|
|
7849
|
+
getPointsAdjusted() {
|
|
7850
|
+
const task = this.task;
|
|
7851
|
+
const bottom = task.height - task.height / 4;
|
|
7852
|
+
const corner = task.height / 6;
|
|
7853
|
+
const smallCorner = task.height / 8;
|
|
7854
|
+
return `M ${8 + smallCorner},0
|
|
7855
|
+
L ${8 + task.width - smallCorner} 0
|
|
7856
|
+
L ${8 + task.width} ${smallCorner}
|
|
7857
|
+
L ${8 + task.width} ${bottom}
|
|
7858
|
+
L ${8 + task.width - corner} ${task.height}
|
|
7859
|
+
L ${8 + task.width - corner * 2} ${bottom}
|
|
7860
|
+
L ${8 + corner * 2} ${bottom}
|
|
7861
|
+
L ${8 + corner} ${task.height}
|
|
7862
|
+
L ${8} ${bottom}
|
|
7863
|
+
L ${8} ${smallCorner}
|
|
7864
|
+
Z
|
|
7865
|
+
`;
|
|
7866
|
+
},
|
|
6874
7867
|
/**
|
|
6875
7868
|
* Should we display expander?
|
|
6876
7869
|
*
|
|
@@ -6895,8 +7888,8 @@ var Epicvue_type_template_id_a2e89cd8_staticRenderFns = [];
|
|
|
6895
7888
|
;
|
|
6896
7889
|
var Epic_component = normalizeComponent(
|
|
6897
7890
|
Row_Epicvue_type_script_lang_js,
|
|
6898
|
-
|
|
6899
|
-
|
|
7891
|
+
Epicvue_type_template_id_80ad2e9c_render,
|
|
7892
|
+
Epicvue_type_template_id_80ad2e9c_staticRenderFns,
|
|
6900
7893
|
false,
|
|
6901
7894
|
null,
|
|
6902
7895
|
null,
|
|
@@ -6905,8 +7898,8 @@ var Epic_component = normalizeComponent(
|
|
|
6905
7898
|
)
|
|
6906
7899
|
|
|
6907
7900
|
/* harmony default export */ var Epic = (Epic_component.exports);
|
|
6908
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Subtask.vue?vue&type=template&id=
|
|
6909
|
-
var
|
|
7901
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Subtask.vue?vue&type=template&id=52219a35
|
|
7902
|
+
var Subtaskvue_type_template_id_52219a35_render = function render() {
|
|
6910
7903
|
var _vm = this,
|
|
6911
7904
|
_c = _vm._self._c;
|
|
6912
7905
|
return _c('g', {
|
|
@@ -6943,11 +7936,11 @@ var Subtaskvue_type_template_id_86599310_render = function render() {
|
|
|
6943
7936
|
..._vm.task.style['chart-row-bar']
|
|
6944
7937
|
},
|
|
6945
7938
|
attrs: {
|
|
6946
|
-
"x": _vm.task.x,
|
|
7939
|
+
"x": _vm.task.x - 8,
|
|
6947
7940
|
"y": _vm.task.y,
|
|
6948
|
-
"width": _vm.task.width,
|
|
7941
|
+
"width": _vm.task.width + 16,
|
|
6949
7942
|
"height": _vm.task.height,
|
|
6950
|
-
"viewBox":
|
|
7943
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6951
7944
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6952
7945
|
},
|
|
6953
7946
|
on: {
|
|
@@ -7002,26 +7995,83 @@ var Subtaskvue_type_template_id_86599310_render = function render() {
|
|
|
7002
7995
|
..._vm.task.style['chart-row-bar-polygon']
|
|
7003
7996
|
},
|
|
7004
7997
|
attrs: {
|
|
7005
|
-
"points": _vm.
|
|
7998
|
+
"points": _vm.getPointsAdjusted
|
|
7999
|
+
},
|
|
8000
|
+
on: {
|
|
8001
|
+
"mousedown": function ($event) {
|
|
8002
|
+
return _vm.startDrag($event, 'move');
|
|
8003
|
+
},
|
|
8004
|
+
"touchstart": function ($event) {
|
|
8005
|
+
return _vm.startDrag($event, 'move');
|
|
8006
|
+
}
|
|
7006
8007
|
}
|
|
7007
8008
|
}), _c('progress-bar', {
|
|
7008
8009
|
attrs: {
|
|
7009
8010
|
"task": _vm.task,
|
|
7010
8011
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
7011
8012
|
}
|
|
8013
|
+
}), _c('rect', {
|
|
8014
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8015
|
+
staticStyle: {
|
|
8016
|
+
"pointer-events": "all",
|
|
8017
|
+
"z-index": "50",
|
|
8018
|
+
"cursor": "ew-resize !important"
|
|
8019
|
+
},
|
|
8020
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8021
|
+
attrs: {
|
|
8022
|
+
"x": "0",
|
|
8023
|
+
"y": "0",
|
|
8024
|
+
"width": 12,
|
|
8025
|
+
"height": _vm.task.height
|
|
8026
|
+
},
|
|
8027
|
+
on: {
|
|
8028
|
+
"mousedown": function ($event) {
|
|
8029
|
+
$event.stopPropagation();
|
|
8030
|
+
return _vm.startDrag($event, 'start');
|
|
8031
|
+
},
|
|
8032
|
+
"touchstart": function ($event) {
|
|
8033
|
+
$event.stopPropagation();
|
|
8034
|
+
return _vm.startDrag($event, 'start');
|
|
8035
|
+
}
|
|
8036
|
+
}
|
|
8037
|
+
}), _c('rect', {
|
|
8038
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8039
|
+
staticStyle: {
|
|
8040
|
+
"pointer-events": "all",
|
|
8041
|
+
"z-index": "50",
|
|
8042
|
+
"cursor": "ew-resize !important"
|
|
8043
|
+
},
|
|
8044
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8045
|
+
attrs: {
|
|
8046
|
+
"x": _vm.task.width - 12,
|
|
8047
|
+
"y": "0",
|
|
8048
|
+
"width": 12,
|
|
8049
|
+
"height": _vm.task.height
|
|
8050
|
+
},
|
|
8051
|
+
on: {
|
|
8052
|
+
"mousedown": function ($event) {
|
|
8053
|
+
$event.stopPropagation();
|
|
8054
|
+
return _vm.startDrag($event, 'end');
|
|
8055
|
+
},
|
|
8056
|
+
"touchstart": function ($event) {
|
|
8057
|
+
$event.stopPropagation();
|
|
8058
|
+
return _vm.startDrag($event, 'end');
|
|
8059
|
+
}
|
|
8060
|
+
}
|
|
7012
8061
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
7013
8062
|
attrs: {
|
|
7014
8063
|
"task": _vm.task
|
|
7015
8064
|
}
|
|
7016
8065
|
}) : _vm._e()], 1);
|
|
7017
8066
|
};
|
|
7018
|
-
var
|
|
8067
|
+
var Subtaskvue_type_template_id_52219a35_staticRenderFns = [];
|
|
7019
8068
|
|
|
7020
8069
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Subtask.vue?vue&type=script&lang=js
|
|
7021
8070
|
|
|
7022
8071
|
|
|
7023
8072
|
|
|
7024
8073
|
|
|
8074
|
+
|
|
7025
8075
|
/* harmony default export */ var Subtaskvue_type_script_lang_js = ({
|
|
7026
8076
|
name: 'Subtask',
|
|
7027
8077
|
components: {
|
|
@@ -7031,7 +8081,7 @@ var Subtaskvue_type_template_id_86599310_staticRenderFns = [];
|
|
|
7031
8081
|
},
|
|
7032
8082
|
inject: ['root'],
|
|
7033
8083
|
props: ['task'],
|
|
7034
|
-
mixins: [Task_mixin],
|
|
8084
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
7035
8085
|
data() {
|
|
7036
8086
|
return {};
|
|
7037
8087
|
},
|
|
@@ -7053,6 +8103,15 @@ var Subtaskvue_type_template_id_86599310_staticRenderFns = [];
|
|
|
7053
8103
|
const task = this.task;
|
|
7054
8104
|
return `0,0 ${task.width},0 ${task.width},${task.height} 0,${task.height}`;
|
|
7055
8105
|
},
|
|
8106
|
+
/**
|
|
8107
|
+
* Get points adjusted for viewBox
|
|
8108
|
+
*
|
|
8109
|
+
* @returns {string}
|
|
8110
|
+
*/
|
|
8111
|
+
getPointsAdjusted() {
|
|
8112
|
+
const task = this.task;
|
|
8113
|
+
return `8,0 ${task.width + 8},0 ${task.width + 8},${task.height} 8,${task.height}`;
|
|
8114
|
+
},
|
|
7056
8115
|
/**
|
|
7057
8116
|
* Should we display expander?
|
|
7058
8117
|
*
|
|
@@ -7077,8 +8136,8 @@ var Subtaskvue_type_template_id_86599310_staticRenderFns = [];
|
|
|
7077
8136
|
;
|
|
7078
8137
|
var Subtask_component = normalizeComponent(
|
|
7079
8138
|
Row_Subtaskvue_type_script_lang_js,
|
|
7080
|
-
|
|
7081
|
-
|
|
8139
|
+
Subtaskvue_type_template_id_52219a35_render,
|
|
8140
|
+
Subtaskvue_type_template_id_52219a35_staticRenderFns,
|
|
7082
8141
|
false,
|
|
7083
8142
|
null,
|
|
7084
8143
|
null,
|
|
@@ -7087,8 +8146,8 @@ var Subtask_component = normalizeComponent(
|
|
|
7087
8146
|
)
|
|
7088
8147
|
|
|
7089
8148
|
/* harmony default export */ var Subtask = (Subtask_component.exports);
|
|
7090
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Story.vue?vue&type=template&id=
|
|
7091
|
-
var
|
|
8149
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Story.vue?vue&type=template&id=5d688d0c
|
|
8150
|
+
var Storyvue_type_template_id_5d688d0c_render = function render() {
|
|
7092
8151
|
var _vm = this,
|
|
7093
8152
|
_c = _vm._self._c;
|
|
7094
8153
|
return _c('g', {
|
|
@@ -7125,11 +8184,11 @@ var Storyvue_type_template_id_1f59b61a_render = function render() {
|
|
|
7125
8184
|
..._vm.task.style['chart-row-bar']
|
|
7126
8185
|
},
|
|
7127
8186
|
attrs: {
|
|
7128
|
-
"x": _vm.task.x,
|
|
8187
|
+
"x": _vm.task.x - 8,
|
|
7129
8188
|
"y": _vm.task.y,
|
|
7130
|
-
"width": _vm.task.width,
|
|
8189
|
+
"width": _vm.task.width + 16,
|
|
7131
8190
|
"height": _vm.task.height,
|
|
7132
|
-
"viewBox":
|
|
8191
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
7133
8192
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
7134
8193
|
},
|
|
7135
8194
|
on: {
|
|
@@ -7184,26 +8243,83 @@ var Storyvue_type_template_id_1f59b61a_render = function render() {
|
|
|
7184
8243
|
..._vm.task.style['chart-row-bar-polygon']
|
|
7185
8244
|
},
|
|
7186
8245
|
attrs: {
|
|
7187
|
-
"d": _vm.
|
|
8246
|
+
"d": _vm.getPointsAdjusted
|
|
8247
|
+
},
|
|
8248
|
+
on: {
|
|
8249
|
+
"mousedown": function ($event) {
|
|
8250
|
+
return _vm.startDrag($event, 'move');
|
|
8251
|
+
},
|
|
8252
|
+
"touchstart": function ($event) {
|
|
8253
|
+
return _vm.startDrag($event, 'move');
|
|
8254
|
+
}
|
|
7188
8255
|
}
|
|
7189
8256
|
}), _c('progress-bar', {
|
|
7190
8257
|
attrs: {
|
|
7191
8258
|
"task": _vm.task,
|
|
7192
8259
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
7193
8260
|
}
|
|
8261
|
+
}), _c('rect', {
|
|
8262
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8263
|
+
staticStyle: {
|
|
8264
|
+
"pointer-events": "all",
|
|
8265
|
+
"z-index": "50",
|
|
8266
|
+
"cursor": "ew-resize !important"
|
|
8267
|
+
},
|
|
8268
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8269
|
+
attrs: {
|
|
8270
|
+
"x": "0",
|
|
8271
|
+
"y": "0",
|
|
8272
|
+
"width": 12,
|
|
8273
|
+
"height": _vm.task.height
|
|
8274
|
+
},
|
|
8275
|
+
on: {
|
|
8276
|
+
"mousedown": function ($event) {
|
|
8277
|
+
$event.stopPropagation();
|
|
8278
|
+
return _vm.startDrag($event, 'start');
|
|
8279
|
+
},
|
|
8280
|
+
"touchstart": function ($event) {
|
|
8281
|
+
$event.stopPropagation();
|
|
8282
|
+
return _vm.startDrag($event, 'start');
|
|
8283
|
+
}
|
|
8284
|
+
}
|
|
8285
|
+
}), _c('rect', {
|
|
8286
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8287
|
+
staticStyle: {
|
|
8288
|
+
"pointer-events": "all",
|
|
8289
|
+
"z-index": "50",
|
|
8290
|
+
"cursor": "ew-resize !important"
|
|
8291
|
+
},
|
|
8292
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8293
|
+
attrs: {
|
|
8294
|
+
"x": _vm.task.width - 12,
|
|
8295
|
+
"y": "0",
|
|
8296
|
+
"width": 12,
|
|
8297
|
+
"height": _vm.task.height
|
|
8298
|
+
},
|
|
8299
|
+
on: {
|
|
8300
|
+
"mousedown": function ($event) {
|
|
8301
|
+
$event.stopPropagation();
|
|
8302
|
+
return _vm.startDrag($event, 'end');
|
|
8303
|
+
},
|
|
8304
|
+
"touchstart": function ($event) {
|
|
8305
|
+
$event.stopPropagation();
|
|
8306
|
+
return _vm.startDrag($event, 'end');
|
|
8307
|
+
}
|
|
8308
|
+
}
|
|
7194
8309
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
7195
8310
|
attrs: {
|
|
7196
8311
|
"task": _vm.task
|
|
7197
8312
|
}
|
|
7198
8313
|
}) : _vm._e()], 1);
|
|
7199
8314
|
};
|
|
7200
|
-
var
|
|
8315
|
+
var Storyvue_type_template_id_5d688d0c_staticRenderFns = [];
|
|
7201
8316
|
|
|
7202
8317
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Story.vue?vue&type=script&lang=js
|
|
7203
8318
|
|
|
7204
8319
|
|
|
7205
8320
|
|
|
7206
8321
|
|
|
8322
|
+
|
|
7207
8323
|
/* harmony default export */ var Storyvue_type_script_lang_js = ({
|
|
7208
8324
|
name: 'Story',
|
|
7209
8325
|
components: {
|
|
@@ -7213,7 +8329,7 @@ var Storyvue_type_template_id_1f59b61a_staticRenderFns = [];
|
|
|
7213
8329
|
},
|
|
7214
8330
|
inject: ['root'],
|
|
7215
8331
|
props: ['task'],
|
|
7216
|
-
mixins: [Task_mixin],
|
|
8332
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
7217
8333
|
data() {
|
|
7218
8334
|
return {};
|
|
7219
8335
|
},
|
|
@@ -7245,6 +8361,25 @@ var Storyvue_type_template_id_1f59b61a_staticRenderFns = [];
|
|
|
7245
8361
|
Q 0 0 ${corner} 0
|
|
7246
8362
|
Z`;
|
|
7247
8363
|
},
|
|
8364
|
+
/**
|
|
8365
|
+
* Get points adjusted for viewBox
|
|
8366
|
+
*
|
|
8367
|
+
* @returns {string}
|
|
8368
|
+
*/
|
|
8369
|
+
getPointsAdjusted() {
|
|
8370
|
+
const task = this.task;
|
|
8371
|
+
const corner = Math.min(task.height / 4, 8); // Rounded corners
|
|
8372
|
+
return `M ${8 + corner},0
|
|
8373
|
+
L ${8 + task.width - corner} 0
|
|
8374
|
+
Q ${8 + task.width} 0 ${8 + task.width} ${corner}
|
|
8375
|
+
L ${8 + task.width} ${task.height - corner}
|
|
8376
|
+
Q ${8 + task.width} ${task.height} ${8 + task.width - corner} ${task.height}
|
|
8377
|
+
L ${8 + corner} ${task.height}
|
|
8378
|
+
Q ${8} ${task.height} ${8} ${task.height - corner}
|
|
8379
|
+
L ${8} ${corner}
|
|
8380
|
+
Q ${8} 0 ${8 + corner} 0
|
|
8381
|
+
Z`;
|
|
8382
|
+
},
|
|
7248
8383
|
/**
|
|
7249
8384
|
* Should we display expander?
|
|
7250
8385
|
*
|
|
@@ -7269,8 +8404,8 @@ var Storyvue_type_template_id_1f59b61a_staticRenderFns = [];
|
|
|
7269
8404
|
;
|
|
7270
8405
|
var Story_component = normalizeComponent(
|
|
7271
8406
|
Row_Storyvue_type_script_lang_js,
|
|
7272
|
-
|
|
7273
|
-
|
|
8407
|
+
Storyvue_type_template_id_5d688d0c_render,
|
|
8408
|
+
Storyvue_type_template_id_5d688d0c_staticRenderFns,
|
|
7274
8409
|
false,
|
|
7275
8410
|
null,
|
|
7276
8411
|
null,
|
|
@@ -7320,6 +8455,43 @@ var Story_component = normalizeComponent(
|
|
|
7320
8455
|
this.root.state.refs.chartGraph = this.$refs.chartGraph;
|
|
7321
8456
|
this.root.state.refs.chartGraphSvg = this.$refs.chartGraphSvg;
|
|
7322
8457
|
},
|
|
8458
|
+
methods: {
|
|
8459
|
+
/**
|
|
8460
|
+
* Handle task updated event
|
|
8461
|
+
*
|
|
8462
|
+
* @param {Object} updatedTask - Updated task data
|
|
8463
|
+
*/
|
|
8464
|
+
handleTaskUpdated(updatedTask) {
|
|
8465
|
+
// Emit event to parent component
|
|
8466
|
+
console.log("task-updated --Chart");
|
|
8467
|
+
this.$emit('task-updated', updatedTask);
|
|
8468
|
+
|
|
8469
|
+
// Update the task in the root state
|
|
8470
|
+
const taskIndex = this.root.state.tasks.findIndex(task => task.id === updatedTask.id);
|
|
8471
|
+
if (taskIndex !== -1) {
|
|
8472
|
+
// Update task data
|
|
8473
|
+
this.root.state.tasks[taskIndex].startTime = updatedTask.startTime;
|
|
8474
|
+
this.root.state.tasks[taskIndex].endTime = updatedTask.endTime;
|
|
8475
|
+
this.root.state.tasks[taskIndex].duration = updatedTask.duration;
|
|
8476
|
+
|
|
8477
|
+
// Update task position and width
|
|
8478
|
+
if (this.root && this.root.timeToPixelOffsetX) {
|
|
8479
|
+
this.root.state.tasks[taskIndex].x = this.root.timeToPixelOffsetX(updatedTask.startTime);
|
|
8480
|
+
this.root.state.tasks[taskIndex].width = this.root.timeToPixelOffsetX(updatedTask.endTime) - this.root.state.tasks[taskIndex].x;
|
|
8481
|
+
} else {
|
|
8482
|
+
// Fallback calculation if method is not available
|
|
8483
|
+
const timePerPixel = this.root.state.options.times.timePerPixel;
|
|
8484
|
+
if (timePerPixel > 0) {
|
|
8485
|
+
this.root.state.tasks[taskIndex].x = (updatedTask.startTime - this.root.state.options.times.firstTime) / timePerPixel;
|
|
8486
|
+
this.root.state.tasks[taskIndex].width = (updatedTask.endTime - updatedTask.startTime) / timePerPixel;
|
|
8487
|
+
}
|
|
8488
|
+
}
|
|
8489
|
+
|
|
8490
|
+
// Force update
|
|
8491
|
+
this.$forceUpdate();
|
|
8492
|
+
}
|
|
8493
|
+
}
|
|
8494
|
+
},
|
|
7323
8495
|
computed: {
|
|
7324
8496
|
/**
|
|
7325
8497
|
* Get view box
|
|
@@ -7343,8 +8515,8 @@ var Story_component = normalizeComponent(
|
|
|
7343
8515
|
;
|
|
7344
8516
|
var Chart_component = normalizeComponent(
|
|
7345
8517
|
Chart_Chartvue_type_script_lang_js,
|
|
7346
|
-
|
|
7347
|
-
|
|
8518
|
+
Chartvue_type_template_id_0856b85c_render,
|
|
8519
|
+
Chartvue_type_template_id_0856b85c_staticRenderFns,
|
|
7348
8520
|
false,
|
|
7349
8521
|
null,
|
|
7350
8522
|
null,
|
|
@@ -7433,6 +8605,16 @@ let ignoreScrollEvents = false;
|
|
|
7433
8605
|
}
|
|
7434
8606
|
},
|
|
7435
8607
|
methods: {
|
|
8608
|
+
/**
|
|
8609
|
+
* Handle task updated event from chart
|
|
8610
|
+
*
|
|
8611
|
+
* @param {Object} updatedTask - Updated task data
|
|
8612
|
+
*/
|
|
8613
|
+
handleTaskUpdated(updatedTask) {
|
|
8614
|
+
// Emit event to parent component
|
|
8615
|
+
console.log("task-updated --MainView");
|
|
8616
|
+
this.$emit('task-updated', updatedTask);
|
|
8617
|
+
},
|
|
7436
8618
|
/**
|
|
7437
8619
|
* Emit event when mouse is moving inside main view
|
|
7438
8620
|
*/
|
|
@@ -7549,8 +8731,8 @@ let ignoreScrollEvents = false;
|
|
|
7549
8731
|
;
|
|
7550
8732
|
var MainView_component = normalizeComponent(
|
|
7551
8733
|
components_MainViewvue_type_script_lang_js,
|
|
7552
|
-
|
|
7553
|
-
|
|
8734
|
+
MainViewvue_type_template_id_79e1eba9_render,
|
|
8735
|
+
MainViewvue_type_template_id_79e1eba9_staticRenderFns,
|
|
7554
8736
|
false,
|
|
7555
8737
|
null,
|
|
7556
8738
|
null,
|
|
@@ -7873,6 +9055,192 @@ function getStyle(fontSize = '12px', fontFamily = 'Arial, sans-serif') {
|
|
|
7873
9055
|
'text-overflow': 'ellipsis',
|
|
7874
9056
|
'max-width': '120px'
|
|
7875
9057
|
},
|
|
9058
|
+
'chart-row-resize-handle': {
|
|
9059
|
+
fill: 'rgba(59, 130, 246, 0.2)',
|
|
9060
|
+
stroke: 'rgba(59, 130, 246, 0.8)',
|
|
9061
|
+
'stroke-width': '2',
|
|
9062
|
+
cursor: 'ew-resize',
|
|
9063
|
+
opacity: '0.3',
|
|
9064
|
+
transition: 'opacity 0.2s ease',
|
|
9065
|
+
'pointer-events': 'all'
|
|
9066
|
+
},
|
|
9067
|
+
'chart-row-resize-handle--start': {
|
|
9068
|
+
cursor: 'w-resize',
|
|
9069
|
+
fill: 'rgba(34, 197, 94, 0.3)',
|
|
9070
|
+
stroke: 'rgba(34, 197, 94, 0.9)',
|
|
9071
|
+
'stroke-width': '2'
|
|
9072
|
+
},
|
|
9073
|
+
'chart-row-resize-handle--end': {
|
|
9074
|
+
cursor: 'e-resize',
|
|
9075
|
+
fill: 'rgba(239, 68, 68, 0.4)',
|
|
9076
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9077
|
+
'stroke-width': '2'
|
|
9078
|
+
},
|
|
9079
|
+
'chart-row-bar-wrapper:hover .chart-row-resize-handle': {
|
|
9080
|
+
opacity: '0.8'
|
|
9081
|
+
},
|
|
9082
|
+
'chart-row-resize-handle:hover': {
|
|
9083
|
+
opacity: '1',
|
|
9084
|
+
fill: 'rgba(59, 130, 246, 0.4)',
|
|
9085
|
+
stroke: 'rgba(59, 130, 246, 1)'
|
|
9086
|
+
},
|
|
9087
|
+
'chart-row-resize-handle--start:hover': {
|
|
9088
|
+
fill: 'rgba(34, 197, 94, 0.4)',
|
|
9089
|
+
stroke: 'rgba(34, 197, 94, 1)'
|
|
9090
|
+
},
|
|
9091
|
+
'chart-row-resize-handle--end:hover': {
|
|
9092
|
+
fill: 'rgba(239, 68, 68, 0.5)',
|
|
9093
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9094
|
+
'stroke-width': '3'
|
|
9095
|
+
},
|
|
9096
|
+
'chart-row-resize-handle--corner': {
|
|
9097
|
+
fill: 'rgba(147, 51, 234, 0.6)',
|
|
9098
|
+
stroke: 'rgba(147, 51, 234, 1)',
|
|
9099
|
+
'stroke-width': '2',
|
|
9100
|
+
cursor: 'nw-resize',
|
|
9101
|
+
opacity: '0.9',
|
|
9102
|
+
transition: 'opacity 0.2s ease',
|
|
9103
|
+
'pointer-events': 'all'
|
|
9104
|
+
},
|
|
9105
|
+
'chart-row-resize-handle--corner:hover': {
|
|
9106
|
+
fill: 'rgba(147, 51, 234, 0.8)',
|
|
9107
|
+
stroke: 'rgba(147, 51, 234, 1)',
|
|
9108
|
+
'stroke-width': '3',
|
|
9109
|
+
opacity: '1'
|
|
9110
|
+
},
|
|
9111
|
+
'chart-row-resize-handle--corner--start': {
|
|
9112
|
+
fill: 'rgba(34, 197, 94, 0.7)',
|
|
9113
|
+
stroke: 'rgba(34, 197, 94, 1)',
|
|
9114
|
+
'stroke-width': '2',
|
|
9115
|
+
cursor: 'w-resize'
|
|
9116
|
+
},
|
|
9117
|
+
'chart-row-resize-handle--corner--end': {
|
|
9118
|
+
fill: 'rgba(239, 68, 68, 0.7)',
|
|
9119
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9120
|
+
'stroke-width': '2',
|
|
9121
|
+
cursor: 'e-resize'
|
|
9122
|
+
},
|
|
9123
|
+
'chart-row-corner-handle--start': {
|
|
9124
|
+
fill: 'rgba(34, 197, 94, 0.8)',
|
|
9125
|
+
stroke: 'rgba(34, 197, 94, 1)',
|
|
9126
|
+
'stroke-width': '2',
|
|
9127
|
+
cursor: 'w-resize',
|
|
9128
|
+
opacity: '0.9',
|
|
9129
|
+
transition: 'opacity 0.2s ease',
|
|
9130
|
+
'pointer-events': 'all'
|
|
9131
|
+
},
|
|
9132
|
+
'chart-row-corner-handle--end': {
|
|
9133
|
+
fill: 'rgba(239, 68, 68, 0.8)',
|
|
9134
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9135
|
+
'stroke-width': '2',
|
|
9136
|
+
cursor: 'e-resize',
|
|
9137
|
+
opacity: '0.9',
|
|
9138
|
+
transition: 'opacity 0.2s ease',
|
|
9139
|
+
'pointer-events': 'all'
|
|
9140
|
+
},
|
|
9141
|
+
'chart-row-corner-handle--start:hover': {
|
|
9142
|
+
fill: 'rgba(34, 197, 94, 0.5)',
|
|
9143
|
+
stroke: 'rgba(34, 197, 94, 1)',
|
|
9144
|
+
'stroke-width': '2',
|
|
9145
|
+
opacity: '0.9'
|
|
9146
|
+
},
|
|
9147
|
+
'chart-row-corner-handle--end:hover': {
|
|
9148
|
+
fill: 'rgba(239, 68, 68, 0.5)',
|
|
9149
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9150
|
+
'stroke-width': '2',
|
|
9151
|
+
opacity: '0.9'
|
|
9152
|
+
},
|
|
9153
|
+
'chart-row-extend-handle': {
|
|
9154
|
+
fill: 'rgba(255, 255, 255, 0.1)',
|
|
9155
|
+
stroke: 'rgba(255, 255, 255, 0.3)',
|
|
9156
|
+
'stroke-width': '1',
|
|
9157
|
+
cursor: 'ew-resize',
|
|
9158
|
+
opacity: '0.3',
|
|
9159
|
+
transition: 'opacity 0.2s ease',
|
|
9160
|
+
'pointer-events': 'all',
|
|
9161
|
+
'z-index': '10'
|
|
9162
|
+
},
|
|
9163
|
+
'chart-row-extend-handle:hover': {
|
|
9164
|
+
fill: 'rgba(255, 255, 255, 0.2)',
|
|
9165
|
+
stroke: 'rgba(255, 255, 255, 0.6)',
|
|
9166
|
+
'stroke-width': '2',
|
|
9167
|
+
opacity: '0.8'
|
|
9168
|
+
},
|
|
9169
|
+
'chart-row-expand-icon-bg': {
|
|
9170
|
+
fill: 'rgba(255, 255, 255, 0.95)',
|
|
9171
|
+
stroke: 'rgba(0, 0, 0, 0.5)',
|
|
9172
|
+
'stroke-width': '1.5',
|
|
9173
|
+
cursor: 'ew-resize',
|
|
9174
|
+
opacity: '1',
|
|
9175
|
+
transition: 'opacity 0.2s ease',
|
|
9176
|
+
'pointer-events': 'all'
|
|
9177
|
+
},
|
|
9178
|
+
'chart-row-expand-icon-arrow': {
|
|
9179
|
+
fill: 'rgba(0, 0, 0, 0.9)',
|
|
9180
|
+
cursor: 'ew-resize',
|
|
9181
|
+
'pointer-events': 'all'
|
|
9182
|
+
},
|
|
9183
|
+
'chart-row-expand-icon:hover .gantt-elastic__chart-row-expand-icon-bg': {
|
|
9184
|
+
fill: 'rgba(255, 255, 255, 1)',
|
|
9185
|
+
stroke: 'rgba(0, 0, 0, 0.5)',
|
|
9186
|
+
'stroke-width': '1.5',
|
|
9187
|
+
opacity: '1'
|
|
9188
|
+
},
|
|
9189
|
+
'chart-row-expand-icon:hover .gantt-elastic__chart-row-expand-icon-arrow': {
|
|
9190
|
+
fill: 'rgba(0, 0, 0, 1)'
|
|
9191
|
+
},
|
|
9192
|
+
'gantt-elastic__task-dragging': {
|
|
9193
|
+
opacity: '0.8',
|
|
9194
|
+
'pointer-events': 'none',
|
|
9195
|
+
'filter': 'drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2))'
|
|
9196
|
+
},
|
|
9197
|
+
'gantt-elastic__task-dragging--start': {
|
|
9198
|
+
'border-left': '3px solid #22c55e',
|
|
9199
|
+
'box-shadow': 'inset 3px 0 0 #22c55e'
|
|
9200
|
+
},
|
|
9201
|
+
'gantt-elastic__task-dragging--end': {
|
|
9202
|
+
'border-right': '3px solid #ef4444',
|
|
9203
|
+
'box-shadow': 'inset -3px 0 0 #ef4444'
|
|
9204
|
+
},
|
|
9205
|
+
'gantt-elastic__task-dragging--move': {
|
|
9206
|
+
'border': '2px solid #3b82f6',
|
|
9207
|
+
'box-shadow': '0 0 0 2px rgba(59, 130, 246, 0.3)'
|
|
9208
|
+
},
|
|
9209
|
+
'gantt-elastic__context-menu': {
|
|
9210
|
+
'position': 'fixed',
|
|
9211
|
+
'background': 'white',
|
|
9212
|
+
'border': '1px solid #e5e7eb',
|
|
9213
|
+
'border-radius': '6px',
|
|
9214
|
+
'box-shadow': '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
|
|
9215
|
+
'z-index': '1000',
|
|
9216
|
+
'min-width': '150px',
|
|
9217
|
+
'padding': '4px 0',
|
|
9218
|
+
'font-family': 'system-ui, -apple-system, sans-serif'
|
|
9219
|
+
},
|
|
9220
|
+
'gantt-elastic__context-menu-item': {
|
|
9221
|
+
'padding': '8px 16px',
|
|
9222
|
+
'cursor': 'pointer',
|
|
9223
|
+
'font-size': '14px',
|
|
9224
|
+
'color': '#374151',
|
|
9225
|
+
'transition': 'background-color 0.2s',
|
|
9226
|
+
'user-select': 'none'
|
|
9227
|
+
},
|
|
9228
|
+
'gantt-elastic__context-menu-item:hover': {
|
|
9229
|
+
'background-color': '#f3f4f6'
|
|
9230
|
+
},
|
|
9231
|
+
'gantt-elastic__date-tooltip': {
|
|
9232
|
+
'position': 'fixed',
|
|
9233
|
+
'background': 'rgba(0, 0, 0, 0.8)',
|
|
9234
|
+
'color': 'white',
|
|
9235
|
+
'padding': '4px 8px',
|
|
9236
|
+
'border-radius': '4px',
|
|
9237
|
+
'font-size': '12px',
|
|
9238
|
+
'font-family': 'system-ui, -apple-system, sans-serif',
|
|
9239
|
+
'pointer-events': 'none',
|
|
9240
|
+
'z-index': '10000',
|
|
9241
|
+
'white-space': 'nowrap',
|
|
9242
|
+
'box-shadow': '0 2px 4px rgba(0, 0, 0, 0.2)'
|
|
9243
|
+
},
|
|
7876
9244
|
'chart-row-text-content--text': {},
|
|
7877
9245
|
'chart-row-text-content--html': {},
|
|
7878
9246
|
'chart-row-wrapper': {},
|
|
@@ -10046,6 +11414,15 @@ const GanttElastic = {
|
|
|
10046
11414
|
}
|
|
10047
11415
|
}
|
|
10048
11416
|
|
|
11417
|
+
// Emit event to parent component
|
|
11418
|
+
this.$emit('view-mode-changed', mode);
|
|
11419
|
+
|
|
11420
|
+
// Also emit to root for plugin usage
|
|
11421
|
+
this.$root.$emit('gantt-view-mode-changed', mode);
|
|
11422
|
+
|
|
11423
|
+
// Log the view mode change for debugging
|
|
11424
|
+
console.log('View mode changed - from GanttElastic:', mode);
|
|
11425
|
+
|
|
10049
11426
|
// Force recalculation by triggering a reactive update
|
|
10050
11427
|
this.$nextTick(() => {
|
|
10051
11428
|
this.$forceUpdate();
|
|
@@ -10064,6 +11441,20 @@ const GanttElastic = {
|
|
|
10064
11441
|
}
|
|
10065
11442
|
});
|
|
10066
11443
|
},
|
|
11444
|
+
/**
|
|
11445
|
+
* Handle task updated event from dragging
|
|
11446
|
+
*
|
|
11447
|
+
* @param {Object} updatedTask - Updated task data
|
|
11448
|
+
*/
|
|
11449
|
+
handleTaskUpdated(updatedTask) {
|
|
11450
|
+
// Emit event to parent component
|
|
11451
|
+
console.log('Task updated -- GanttElastic:');
|
|
11452
|
+
this.$emit('task-updated', updatedTask);
|
|
11453
|
+
this.$emit('gantt-task-updated', updatedTask);
|
|
11454
|
+
|
|
11455
|
+
// Also emit to root for plugin usage
|
|
11456
|
+
this.$root.$emit('gantt-task-updated', updatedTask);
|
|
11457
|
+
},
|
|
10067
11458
|
/**
|
|
10068
11459
|
* Calculate height of scrollbar in current browser
|
|
10069
11460
|
*
|
|
@@ -10416,7 +11807,18 @@ const GanttElastic = {
|
|
|
10416
11807
|
* @returns {number}
|
|
10417
11808
|
*/
|
|
10418
11809
|
getHeight(visibleTasks, outer = false) {
|
|
10419
|
-
let height
|
|
11810
|
+
let height;
|
|
11811
|
+
|
|
11812
|
+
// If we have tasks, use their actual height for full grid
|
|
11813
|
+
if (visibleTasks.length > 0) {
|
|
11814
|
+
height = visibleTasks.length * (this.state.options.row.height + this.state.options.chart.grid.horizontal.gap * 2) + this.state.options.calendar.height + this.state.options.calendar.strokeWidth + this.state.options.calendar.gap;
|
|
11815
|
+
} else {
|
|
11816
|
+
// If no tasks, use 70% of viewport height for empty state
|
|
11817
|
+
const viewportHeight = window.innerHeight;
|
|
11818
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
11819
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
11820
|
+
height = Math.max(availableHeight, 300); // Minimum 300px height
|
|
11821
|
+
}
|
|
10420
11822
|
if (outer) {
|
|
10421
11823
|
height += this.state.options.scrollBarHeight;
|
|
10422
11824
|
}
|
|
@@ -10439,7 +11841,20 @@ const GanttElastic = {
|
|
|
10439
11841
|
* @returns {number}
|
|
10440
11842
|
*/
|
|
10441
11843
|
getTasksHeight(visibleTasks) {
|
|
10442
|
-
|
|
11844
|
+
const taskHeight = visibleTasks.length * this.getTaskHeight();
|
|
11845
|
+
|
|
11846
|
+
// If we have tasks, use their actual height for full grid
|
|
11847
|
+
if (visibleTasks.length > 0) {
|
|
11848
|
+
return taskHeight;
|
|
11849
|
+
}
|
|
11850
|
+
|
|
11851
|
+
// If no tasks, use 70% of viewport height for empty state
|
|
11852
|
+
const viewportHeight = window.innerHeight;
|
|
11853
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
11854
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
11855
|
+
const reducedHeight = Math.max(availableHeight, 300); // Minimum 300px height
|
|
11856
|
+
|
|
11857
|
+
return reducedHeight;
|
|
10443
11858
|
},
|
|
10444
11859
|
/**
|
|
10445
11860
|
* Convert time (in milliseconds) to pixel offset inside chart
|
|
@@ -10746,15 +12161,15 @@ const GanttElastic = {
|
|
|
10746
12161
|
getMaxWidthMultiplier(stepDuration, stepCount) {
|
|
10747
12162
|
const clientWidth = this.state.options.clientWidth;
|
|
10748
12163
|
|
|
10749
|
-
// Base multipliers for different screen sizes
|
|
12164
|
+
// Base multipliers for different screen sizes (reduced for better balance)
|
|
10750
12165
|
const baseMultipliers = {
|
|
10751
|
-
mobile:
|
|
10752
|
-
//
|
|
10753
|
-
tablet:
|
|
10754
|
-
//
|
|
10755
|
-
desktopSmall:
|
|
10756
|
-
//
|
|
10757
|
-
desktopBig:
|
|
12166
|
+
mobile: 1.5,
|
|
12167
|
+
// 1.5x viewport width on mobile
|
|
12168
|
+
tablet: 1.8,
|
|
12169
|
+
// 1.8x viewport width on tablet
|
|
12170
|
+
desktopSmall: 2.2,
|
|
12171
|
+
// 2.2x viewport width on small desktop
|
|
12172
|
+
desktopBig: 2.5 // 2.5x viewport width on big desktop
|
|
10758
12173
|
};
|
|
10759
12174
|
|
|
10760
12175
|
// Determine screen size
|
|
@@ -10781,7 +12196,7 @@ const GanttElastic = {
|
|
|
10781
12196
|
// If we have more data than minimum visibility, allow more width
|
|
10782
12197
|
if (stepCount > minVisibilitySteps[stepDuration]) {
|
|
10783
12198
|
const dataRatio = stepCount / minVisibilitySteps[stepDuration];
|
|
10784
|
-
multiplier = Math.min(multiplier * (1 + dataRatio * 0.
|
|
12199
|
+
multiplier = Math.min(multiplier * (1 + dataRatio * 0.3), 3); // Max 3x viewport width
|
|
10785
12200
|
}
|
|
10786
12201
|
return multiplier;
|
|
10787
12202
|
},
|
|
@@ -10882,7 +12297,7 @@ const GanttElastic = {
|
|
|
10882
12297
|
const maxWidth = this.state.options.clientWidth * maxWidthMultiplier;
|
|
10883
12298
|
|
|
10884
12299
|
// Ensure minimum width for scrolling when we have minimum visibility requirements
|
|
10885
|
-
const minWidthForScrolling = this.state.options.clientWidth * 1.
|
|
12300
|
+
const minWidthForScrolling = this.state.options.clientWidth * 1.1; // 10% more than viewport
|
|
10886
12301
|
const finalWidth = Math.max(calculatedWidth, minWidthForScrolling);
|
|
10887
12302
|
if (finalWidth > maxWidth) {
|
|
10888
12303
|
// Only limit width if it's truly excessive
|
|
@@ -11172,6 +12587,29 @@ const GanttElastic = {
|
|
|
11172
12587
|
width: 0
|
|
11173
12588
|
}).width;
|
|
11174
12589
|
},
|
|
12590
|
+
/**
|
|
12591
|
+
* Recalculate height based on current tasks and viewport
|
|
12592
|
+
*/
|
|
12593
|
+
recalculateHeight() {
|
|
12594
|
+
const visibleTasks = this.state.tasks.filter(task => this.isTaskVisible(task));
|
|
12595
|
+
if (visibleTasks.length > 0) {
|
|
12596
|
+
// Use full task height for complete grid
|
|
12597
|
+
this.state.options.rowsHeight = this.getTasksHeight(visibleTasks);
|
|
12598
|
+
this.state.options.height = this.getHeight(visibleTasks);
|
|
12599
|
+
this.state.options.allVisibleTasksHeight = this.getTasksHeight(visibleTasks);
|
|
12600
|
+
this.state.options.outerHeight = this.getHeight(visibleTasks, true);
|
|
12601
|
+
} else {
|
|
12602
|
+
// Use reduced viewport height for empty state
|
|
12603
|
+
const viewportHeight = window.innerHeight;
|
|
12604
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12605
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40;
|
|
12606
|
+
const reducedHeight = Math.max(availableHeight, 300);
|
|
12607
|
+
this.state.options.rowsHeight = reducedHeight;
|
|
12608
|
+
this.state.options.height = reducedHeight + this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12609
|
+
this.state.options.allVisibleTasksHeight = reducedHeight;
|
|
12610
|
+
this.state.options.outerHeight = this.state.options.height + this.state.options.scrollBarHeight;
|
|
12611
|
+
}
|
|
12612
|
+
},
|
|
11175
12613
|
/**
|
|
11176
12614
|
* Global resize event (from window.addEventListener)
|
|
11177
12615
|
*/
|
|
@@ -11180,6 +12618,15 @@ const GanttElastic = {
|
|
|
11180
12618
|
return;
|
|
11181
12619
|
}
|
|
11182
12620
|
this.state.options.clientWidth = this.$el.clientWidth;
|
|
12621
|
+
|
|
12622
|
+
// Only set height if no tasks are present (let visibleTasks computed property handle height when tasks exist)
|
|
12623
|
+
if (this.state.tasks.length === 0) {
|
|
12624
|
+
// Set height to 70% of viewport height for better balance when no tasks
|
|
12625
|
+
const viewportHeight = window.innerHeight;
|
|
12626
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12627
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
12628
|
+
this.state.options.height = Math.max(availableHeight, 300); // Minimum 300px height
|
|
12629
|
+
}
|
|
11183
12630
|
if (this.state.options.taskList.widthFromPercentage > this.state.options.clientWidth / 100 * this.state.options.taskList.widthThreshold) {
|
|
11184
12631
|
const diff = this.state.options.taskList.widthFromPercentage - this.state.options.clientWidth / 100 * this.state.options.taskList.widthThreshold;
|
|
11185
12632
|
let diffPercent = 100 - diff / this.state.options.taskList.widthFromPercentage * 100;
|
|
@@ -11202,6 +12649,9 @@ const GanttElastic = {
|
|
|
11202
12649
|
this.computeCalendarWidths();
|
|
11203
12650
|
this.$emit('calendar-recalculate');
|
|
11204
12651
|
this.syncScrollTop();
|
|
12652
|
+
|
|
12653
|
+
// Recalculate height after resize
|
|
12654
|
+
this.recalculateHeight();
|
|
11205
12655
|
}
|
|
11206
12656
|
},
|
|
11207
12657
|
computed: {
|
|
@@ -11212,16 +12662,17 @@ const GanttElastic = {
|
|
|
11212
12662
|
*/
|
|
11213
12663
|
visibleTasks() {
|
|
11214
12664
|
const visibleTasks = this.state.tasks.filter(task => this.isTaskVisible(task));
|
|
11215
|
-
|
|
11216
|
-
|
|
12665
|
+
|
|
12666
|
+
// Use full visible tasks for height calculations to show complete grid
|
|
12667
|
+
this.state.options.rowsHeight = this.getTasksHeight(visibleTasks);
|
|
11217
12668
|
let heightCompensation = 0;
|
|
11218
12669
|
if (this.state.options.maxHeight && this.state.options.rowsHeight > this.state.options.maxHeight) {
|
|
11219
12670
|
heightCompensation = this.state.options.rowsHeight - this.state.options.maxHeight;
|
|
11220
12671
|
this.state.options.rowsHeight = this.state.options.maxHeight;
|
|
11221
12672
|
}
|
|
11222
|
-
this.state.options.height = this.getHeight(
|
|
12673
|
+
this.state.options.height = this.getHeight(visibleTasks) - heightCompensation;
|
|
11223
12674
|
this.state.options.allVisibleTasksHeight = this.getTasksHeight(visibleTasks);
|
|
11224
|
-
this.state.options.outerHeight = this.getHeight(
|
|
12675
|
+
this.state.options.outerHeight = this.getHeight(visibleTasks, true) - heightCompensation;
|
|
11225
12676
|
let len = visibleTasks.length;
|
|
11226
12677
|
for (let index = 0; index < len; index++) {
|
|
11227
12678
|
let task = visibleTasks[index];
|
|
@@ -11272,6 +12723,10 @@ const GanttElastic = {
|
|
|
11272
12723
|
if (notEqual) {
|
|
11273
12724
|
this.setup('tasks');
|
|
11274
12725
|
}
|
|
12726
|
+
// Recalculate height when tasks change
|
|
12727
|
+
this.$nextTick(() => {
|
|
12728
|
+
this.recalculateHeight();
|
|
12729
|
+
});
|
|
11275
12730
|
}, {
|
|
11276
12731
|
deep: true
|
|
11277
12732
|
});
|
|
@@ -11321,15 +12776,59 @@ const GanttElastic = {
|
|
|
11321
12776
|
*/
|
|
11322
12777
|
mounted() {
|
|
11323
12778
|
this.state.options.clientWidth = this.$el.clientWidth;
|
|
12779
|
+
|
|
12780
|
+
// Set initial height based on whether tasks exist
|
|
12781
|
+
if (this.state.tasks.length === 0) {
|
|
12782
|
+
const viewportHeight = window.innerHeight;
|
|
12783
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12784
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40;
|
|
12785
|
+
this.state.options.height = Math.max(availableHeight, 300);
|
|
12786
|
+
}
|
|
11324
12787
|
this.state.resizeObserver = new ResizeObserver_es((entries, observer) => {
|
|
11325
12788
|
this.globalOnResize();
|
|
11326
12789
|
});
|
|
11327
12790
|
this.state.resizeObserver.observe(this.$el.parentNode);
|
|
12791
|
+
|
|
12792
|
+
// Add window resize listener for full viewport responsiveness
|
|
12793
|
+
window.addEventListener('resize', this.globalOnResize);
|
|
11328
12794
|
this.globalOnResize();
|
|
12795
|
+
this.recalculateHeight();
|
|
11329
12796
|
this.$emit('ready', this);
|
|
11330
12797
|
this.$root.$emit('gantt-elastic-mounted', this);
|
|
11331
12798
|
this.$emit('mounted', this);
|
|
11332
12799
|
this.$root.$emit('gantt-elastic-ready', this);
|
|
12800
|
+
|
|
12801
|
+
// Expose methods for plugin usage
|
|
12802
|
+
this.$gantt = {
|
|
12803
|
+
onTaskUpdated: this.handleTaskUpdated,
|
|
12804
|
+
onViewModeChanged: this.onViewModeChanged,
|
|
12805
|
+
getTasks: () => this.state.tasks,
|
|
12806
|
+
updateTask: (taskId, updates) => {
|
|
12807
|
+
const taskIndex = this.state.tasks.findIndex(task => task.id === taskId);
|
|
12808
|
+
if (taskIndex !== -1) {
|
|
12809
|
+
Object.assign(this.state.tasks[taskIndex], updates);
|
|
12810
|
+
this.$forceUpdate();
|
|
12811
|
+
}
|
|
12812
|
+
}
|
|
12813
|
+
};
|
|
12814
|
+
|
|
12815
|
+
/*
|
|
12816
|
+
* PLUGIN USAGE EXAMPLE:
|
|
12817
|
+
*
|
|
12818
|
+
* // Listen to events when using as plugin:
|
|
12819
|
+
* this.$root.$on('gantt-task-updated', (updatedTask) => {
|
|
12820
|
+
* console.log('Task updated:', updatedTask);
|
|
12821
|
+
* });
|
|
12822
|
+
*
|
|
12823
|
+
* this.$root.$on('gantt-view-mode-changed', (mode) => {
|
|
12824
|
+
* console.log('View mode changed:', mode);
|
|
12825
|
+
* });
|
|
12826
|
+
*
|
|
12827
|
+
* // Access gantt methods:
|
|
12828
|
+
* const ganttInstance = this.$refs.ganttChart.$gantt;
|
|
12829
|
+
* ganttInstance.updateTask(1, { label: 'New Task Name' });
|
|
12830
|
+
* const tasks = ganttInstance.getTasks();
|
|
12831
|
+
*/
|
|
11333
12832
|
},
|
|
11334
12833
|
/**
|
|
11335
12834
|
* Emit event when data was changed and before update (you can cleanup dom events here for example)
|
|
@@ -11350,6 +12849,7 @@ const GanttElastic = {
|
|
|
11350
12849
|
*/
|
|
11351
12850
|
beforeDestroy() {
|
|
11352
12851
|
this.state.resizeObserver.unobserve(this.$el.parentNode);
|
|
12852
|
+
window.removeEventListener('resize', this.globalOnResize);
|
|
11353
12853
|
this.state.unwatchTasks();
|
|
11354
12854
|
this.state.unwatchOptions();
|
|
11355
12855
|
this.state.unwatchStyle();
|
|
@@ -11368,10 +12868,10 @@ const GanttElastic = {
|
|
|
11368
12868
|
/* harmony default export */ var GanttElasticvue_type_script_lang_js = (GanttElastic);
|
|
11369
12869
|
;// ./src/GanttElastic.vue?vue&type=script&lang=js
|
|
11370
12870
|
/* harmony default export */ var src_GanttElasticvue_type_script_lang_js = (GanttElasticvue_type_script_lang_js);
|
|
11371
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=style&index=0&id=
|
|
12871
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=style&index=0&id=0a0b0d9f&prod&lang=css
|
|
11372
12872
|
// extracted by mini-css-extract-plugin
|
|
11373
12873
|
|
|
11374
|
-
;// ./src/GanttElastic.vue?vue&type=style&index=0&id=
|
|
12874
|
+
;// ./src/GanttElastic.vue?vue&type=style&index=0&id=0a0b0d9f&prod&lang=css
|
|
11375
12875
|
|
|
11376
12876
|
;// ./src/GanttElastic.vue
|
|
11377
12877
|
|
|
@@ -11384,8 +12884,8 @@ const GanttElastic = {
|
|
|
11384
12884
|
|
|
11385
12885
|
var GanttElastic_component = normalizeComponent(
|
|
11386
12886
|
src_GanttElasticvue_type_script_lang_js,
|
|
11387
|
-
|
|
11388
|
-
|
|
12887
|
+
GanttElasticvue_type_template_id_0a0b0d9f_render,
|
|
12888
|
+
GanttElasticvue_type_template_id_0a0b0d9f_staticRenderFns,
|
|
11389
12889
|
false,
|
|
11390
12890
|
null,
|
|
11391
12891
|
null,
|