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.
package/dist/tgganttchart.umd.js
CHANGED
|
@@ -3385,7 +3385,7 @@ if (typeof window !== 'undefined') {
|
|
|
3385
3385
|
// Indicate to webpack that this file can be concatenated
|
|
3386
3386
|
/* harmony default export */ var setPublicPath = (null);
|
|
3387
3387
|
|
|
3388
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
3388
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
3389
3389
|
var render = function render() {
|
|
3390
3390
|
var _vm = this,
|
|
3391
3391
|
_c = _vm._self._c;
|
|
@@ -3394,6 +3394,32 @@ var render = function render() {
|
|
|
3394
3394
|
"tasks": _vm.tasks,
|
|
3395
3395
|
"options": _vm.options,
|
|
3396
3396
|
"dynamicStyle": _vm.dynamicStyle
|
|
3397
|
+
},
|
|
3398
|
+
on: {
|
|
3399
|
+
"task-updated": function ($event) {
|
|
3400
|
+
return _vm.$emit('task-updated', $event);
|
|
3401
|
+
},
|
|
3402
|
+
"gantt-task-updated": function ($event) {
|
|
3403
|
+
return _vm.$emit('gantt-task-updated', $event);
|
|
3404
|
+
},
|
|
3405
|
+
"view-mode-changed": function ($event) {
|
|
3406
|
+
return _vm.$emit('view-mode-changed', $event);
|
|
3407
|
+
},
|
|
3408
|
+
"gantt-view-mode-changed": function ($event) {
|
|
3409
|
+
return _vm.$emit('gantt-view-mode-changed', $event);
|
|
3410
|
+
},
|
|
3411
|
+
"tasks-changed": function ($event) {
|
|
3412
|
+
return _vm.$emit('tasks-changed', $event);
|
|
3413
|
+
},
|
|
3414
|
+
"options-changed": function ($event) {
|
|
3415
|
+
return _vm.$emit('options-changed', $event);
|
|
3416
|
+
},
|
|
3417
|
+
"dynamic-style-changed": function ($event) {
|
|
3418
|
+
return _vm.$emit('dynamic-style-changed', $event);
|
|
3419
|
+
},
|
|
3420
|
+
"mounted": function ($event) {
|
|
3421
|
+
return _vm.$emit('mounted', $event);
|
|
3422
|
+
}
|
|
3397
3423
|
}
|
|
3398
3424
|
}, [_vm.components.header ? _c(_vm.components.header, {
|
|
3399
3425
|
tag: "component",
|
|
@@ -3411,8 +3437,8 @@ var render = function render() {
|
|
|
3411
3437
|
};
|
|
3412
3438
|
var staticRenderFns = [];
|
|
3413
3439
|
|
|
3414
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
3415
|
-
var
|
|
3440
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
3441
|
+
var GanttElasticvue_type_template_id_0a0b0d9f_render = function render() {
|
|
3416
3442
|
var _vm = this,
|
|
3417
3443
|
_c = _vm._self._c,
|
|
3418
3444
|
_setup = _vm._self._setupProxy;
|
|
@@ -3435,10 +3461,13 @@ var GanttElasticvue_type_template_id_2767341e_render = function render() {
|
|
|
3435
3461
|
},
|
|
3436
3462
|
slot: "header"
|
|
3437
3463
|
}), _vm._t("header"), _c('main-view', {
|
|
3438
|
-
ref: "mainView"
|
|
3464
|
+
ref: "mainView",
|
|
3465
|
+
on: {
|
|
3466
|
+
"task-updated": _vm.handleTaskUpdated
|
|
3467
|
+
}
|
|
3439
3468
|
}), _vm._t("footer")], 2);
|
|
3440
3469
|
};
|
|
3441
|
-
var
|
|
3470
|
+
var GanttElasticvue_type_template_id_0a0b0d9f_staticRenderFns = [];
|
|
3442
3471
|
|
|
3443
3472
|
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js
|
|
3444
3473
|
var es_array_push = __webpack_require__(4114);
|
|
@@ -3681,8 +3710,8 @@ var component = normalizeComponent(
|
|
|
3681
3710
|
)
|
|
3682
3711
|
|
|
3683
3712
|
/* harmony default export */ var GanttViewFilter = (component.exports);
|
|
3684
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
3685
|
-
var
|
|
3713
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
3714
|
+
var MainViewvue_type_template_id_79e1eba9_render = function render() {
|
|
3686
3715
|
var _vm = this,
|
|
3687
3716
|
_c = _vm._self._c;
|
|
3688
3717
|
return _c('div', {
|
|
@@ -3751,7 +3780,11 @@ var MainViewvue_type_template_id_1a4b756c_render = function render() {
|
|
|
3751
3780
|
return _vm.chartWheel.apply(null, arguments);
|
|
3752
3781
|
}
|
|
3753
3782
|
}
|
|
3754
|
-
}, [_c('chart'
|
|
3783
|
+
}, [_c('chart', {
|
|
3784
|
+
on: {
|
|
3785
|
+
"task-updated": _vm.handleTaskUpdated
|
|
3786
|
+
}
|
|
3787
|
+
})], 1)])]), _c('div', {
|
|
3755
3788
|
ref: "chartScrollContainerVertical",
|
|
3756
3789
|
staticClass: "gantt-elastic__chart-scroll-container gantt-elastic__chart-scroll-container--vertical",
|
|
3757
3790
|
style: {
|
|
@@ -3787,7 +3820,7 @@ var MainViewvue_type_template_id_1a4b756c_render = function render() {
|
|
|
3787
3820
|
}
|
|
3788
3821
|
})])]);
|
|
3789
3822
|
};
|
|
3790
|
-
var
|
|
3823
|
+
var MainViewvue_type_template_id_79e1eba9_staticRenderFns = [];
|
|
3791
3824
|
|
|
3792
3825
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
3793
3826
|
var TaskListvue_type_template_id_74ce1216_render = function render() {
|
|
@@ -4594,8 +4627,8 @@ var TaskList_component = normalizeComponent(
|
|
|
4594
4627
|
)
|
|
4595
4628
|
|
|
4596
4629
|
/* harmony default export */ var TaskList = (TaskList_component.exports);
|
|
4597
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
4598
|
-
var
|
|
4630
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
4631
|
+
var Chartvue_type_template_id_0856b85c_render = function render() {
|
|
4599
4632
|
var _vm = this,
|
|
4600
4633
|
_c = _vm._self._c;
|
|
4601
4634
|
return _c('div', {
|
|
@@ -4663,14 +4696,17 @@ var Chartvue_type_template_id_1d5eb6d6_render = function render() {
|
|
|
4663
4696
|
tag: "component",
|
|
4664
4697
|
attrs: {
|
|
4665
4698
|
"task": task
|
|
4699
|
+
},
|
|
4700
|
+
on: {
|
|
4701
|
+
"task-updated": _vm.handleTaskUpdated
|
|
4666
4702
|
}
|
|
4667
4703
|
})], 1);
|
|
4668
4704
|
})], 2)])])])]);
|
|
4669
4705
|
};
|
|
4670
|
-
var
|
|
4706
|
+
var Chartvue_type_template_id_0856b85c_staticRenderFns = [];
|
|
4671
4707
|
|
|
4672
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
4673
|
-
var
|
|
4708
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
4709
|
+
var Gridvue_type_template_id_244ea0ee_render = function render() {
|
|
4674
4710
|
var _vm = this,
|
|
4675
4711
|
_c = _vm._self._c;
|
|
4676
4712
|
return _c('svg', {
|
|
@@ -4732,7 +4768,7 @@ var Gridvue_type_template_id_b2e4dec2_render = function render() {
|
|
|
4732
4768
|
}
|
|
4733
4769
|
})], 2)]);
|
|
4734
4770
|
};
|
|
4735
|
-
var
|
|
4771
|
+
var Gridvue_type_template_id_244ea0ee_staticRenderFns = [];
|
|
4736
4772
|
|
|
4737
4773
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Grid.vue?vue&type=script&lang=js
|
|
4738
4774
|
|
|
@@ -4840,15 +4876,41 @@ var Gridvue_type_template_id_b2e4dec2_staticRenderFns = [];
|
|
|
4840
4876
|
let lines = [];
|
|
4841
4877
|
const state = this.root.state.options;
|
|
4842
4878
|
let tasks = this.root.visibleTasks;
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4879
|
+
|
|
4880
|
+
// If we have tasks, show full grid for all tasks
|
|
4881
|
+
if (tasks.length > 0) {
|
|
4882
|
+
const rowHeight = state.row.height + state.chart.grid.horizontal.gap * 2;
|
|
4883
|
+
const rowCount = tasks.length; // Use actual task count
|
|
4884
|
+
|
|
4885
|
+
for (let index = 0; index <= rowCount; index++) {
|
|
4886
|
+
const y = index * rowHeight + this.root.style['grid-line-vertical']['stroke-width'] / 2;
|
|
4887
|
+
lines.push({
|
|
4888
|
+
key: 'hl' + index,
|
|
4889
|
+
x1: 0,
|
|
4890
|
+
y1: y,
|
|
4891
|
+
x2: '100%',
|
|
4892
|
+
y2: y
|
|
4893
|
+
});
|
|
4894
|
+
}
|
|
4895
|
+
} else {
|
|
4896
|
+
// If no tasks, use reduced viewport height for empty state
|
|
4897
|
+
const viewportHeight = window.innerHeight;
|
|
4898
|
+
const headerHeight = state.calendar.height + state.calendar.gap;
|
|
4899
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
4900
|
+
const reducedHeight = Math.max(availableHeight, 300); // Minimum 300px height
|
|
4901
|
+
|
|
4902
|
+
const rowHeight = state.row.height + state.chart.grid.horizontal.gap * 2;
|
|
4903
|
+
const maxRows = Math.floor(reducedHeight / rowHeight);
|
|
4904
|
+
for (let index = 0; index <= maxRows; index++) {
|
|
4905
|
+
const y = index * rowHeight + this.root.style['grid-line-vertical']['stroke-width'] / 2;
|
|
4906
|
+
lines.push({
|
|
4907
|
+
key: 'hl' + index,
|
|
4908
|
+
x1: 0,
|
|
4909
|
+
y1: y,
|
|
4910
|
+
x2: '100%',
|
|
4911
|
+
y2: y
|
|
4912
|
+
});
|
|
4913
|
+
}
|
|
4852
4914
|
}
|
|
4853
4915
|
return lines;
|
|
4854
4916
|
},
|
|
@@ -4897,8 +4959,8 @@ var Gridvue_type_template_id_b2e4dec2_staticRenderFns = [];
|
|
|
4897
4959
|
;
|
|
4898
4960
|
var Grid_component = normalizeComponent(
|
|
4899
4961
|
Chart_Gridvue_type_script_lang_js,
|
|
4900
|
-
|
|
4901
|
-
|
|
4962
|
+
Gridvue_type_template_id_244ea0ee_render,
|
|
4963
|
+
Gridvue_type_template_id_244ea0ee_staticRenderFns,
|
|
4902
4964
|
false,
|
|
4903
4965
|
null,
|
|
4904
4966
|
null,
|
|
@@ -5850,8 +5912,8 @@ var DependencyLines_component = normalizeComponent(
|
|
|
5850
5912
|
)
|
|
5851
5913
|
|
|
5852
5914
|
/* harmony default export */ var DependencyLines = (DependencyLines_component.exports);
|
|
5853
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
5854
|
-
var
|
|
5915
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
5916
|
+
var Taskvue_type_template_id_23849415_render = function render() {
|
|
5855
5917
|
var _vm = this,
|
|
5856
5918
|
_c = _vm._self._c;
|
|
5857
5919
|
return _c('g', {
|
|
@@ -5888,11 +5950,11 @@ var Taskvue_type_template_id_208a9baa_render = function render() {
|
|
|
5888
5950
|
..._vm.task.style['chart-row-bar']
|
|
5889
5951
|
},
|
|
5890
5952
|
attrs: {
|
|
5891
|
-
"x": _vm.task.x,
|
|
5953
|
+
"x": _vm.task.x - 8,
|
|
5892
5954
|
"y": _vm.task.y,
|
|
5893
|
-
"width": _vm.task.width,
|
|
5955
|
+
"width": _vm.task.width + 16,
|
|
5894
5956
|
"height": _vm.task.height,
|
|
5895
|
-
"viewBox":
|
|
5957
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
5896
5958
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
5897
5959
|
},
|
|
5898
5960
|
on: {
|
|
@@ -5947,20 +6009,76 @@ var Taskvue_type_template_id_208a9baa_render = function render() {
|
|
|
5947
6009
|
..._vm.task.style['chart-row-bar-polygon']
|
|
5948
6010
|
},
|
|
5949
6011
|
attrs: {
|
|
5950
|
-
"points": _vm.
|
|
6012
|
+
"points": _vm.getPointsAdjusted
|
|
6013
|
+
},
|
|
6014
|
+
on: {
|
|
6015
|
+
"mousedown": function ($event) {
|
|
6016
|
+
return _vm.startDrag($event, 'move');
|
|
6017
|
+
},
|
|
6018
|
+
"touchstart": function ($event) {
|
|
6019
|
+
return _vm.startDrag($event, 'move');
|
|
6020
|
+
}
|
|
5951
6021
|
}
|
|
5952
6022
|
}), _c('progress-bar', {
|
|
5953
6023
|
attrs: {
|
|
5954
6024
|
"task": _vm.task,
|
|
5955
6025
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
5956
6026
|
}
|
|
6027
|
+
}), _c('rect', {
|
|
6028
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
6029
|
+
staticStyle: {
|
|
6030
|
+
"pointer-events": "all",
|
|
6031
|
+
"z-index": "50",
|
|
6032
|
+
"cursor": "ew-resize !important"
|
|
6033
|
+
},
|
|
6034
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
6035
|
+
attrs: {
|
|
6036
|
+
"x": "0",
|
|
6037
|
+
"y": "0",
|
|
6038
|
+
"width": 12,
|
|
6039
|
+
"height": _vm.task.height
|
|
6040
|
+
},
|
|
6041
|
+
on: {
|
|
6042
|
+
"mousedown": function ($event) {
|
|
6043
|
+
$event.stopPropagation();
|
|
6044
|
+
return _vm.startDrag($event, 'start');
|
|
6045
|
+
},
|
|
6046
|
+
"touchstart": function ($event) {
|
|
6047
|
+
$event.stopPropagation();
|
|
6048
|
+
return _vm.startDrag($event, 'start');
|
|
6049
|
+
}
|
|
6050
|
+
}
|
|
6051
|
+
}), _c('rect', {
|
|
6052
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
6053
|
+
staticStyle: {
|
|
6054
|
+
"pointer-events": "all",
|
|
6055
|
+
"z-index": "50",
|
|
6056
|
+
"cursor": "ew-resize !important"
|
|
6057
|
+
},
|
|
6058
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
6059
|
+
attrs: {
|
|
6060
|
+
"x": _vm.task.width - 12,
|
|
6061
|
+
"y": "0",
|
|
6062
|
+
"width": 12,
|
|
6063
|
+
"height": _vm.task.height
|
|
6064
|
+
},
|
|
6065
|
+
on: {
|
|
6066
|
+
"mousedown": function ($event) {
|
|
6067
|
+
$event.stopPropagation();
|
|
6068
|
+
return _vm.startDrag($event, 'end');
|
|
6069
|
+
},
|
|
6070
|
+
"touchstart": function ($event) {
|
|
6071
|
+
$event.stopPropagation();
|
|
6072
|
+
return _vm.startDrag($event, 'end');
|
|
6073
|
+
}
|
|
6074
|
+
}
|
|
5957
6075
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
5958
6076
|
attrs: {
|
|
5959
6077
|
"task": _vm.task
|
|
5960
6078
|
}
|
|
5961
6079
|
}) : _vm._e()], 1);
|
|
5962
6080
|
};
|
|
5963
|
-
var
|
|
6081
|
+
var Taskvue_type_template_id_23849415_staticRenderFns = [];
|
|
5964
6082
|
|
|
5965
6083
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
5966
6084
|
var Textvue_type_template_id_634f40aa_render = function render() {
|
|
@@ -6097,15 +6215,16 @@ var Text_component = normalizeComponent(
|
|
|
6097
6215
|
)
|
|
6098
6216
|
|
|
6099
6217
|
/* harmony default export */ var Text = (Text_component.exports);
|
|
6100
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
6101
|
-
var
|
|
6218
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
6219
|
+
var ProgressBarvue_type_template_id_2323ee21_render = function render() {
|
|
6102
6220
|
var _vm = this,
|
|
6103
6221
|
_c = _vm._self._c;
|
|
6104
6222
|
return _c('g', {
|
|
6105
6223
|
staticClass: "gantt-elastic__chart-row-progress-bar-wrapper",
|
|
6106
6224
|
style: {
|
|
6107
6225
|
..._vm.root.style['chart-row-progress-bar-wrapper'],
|
|
6108
|
-
..._vm.task.style['chart-row-progress-bar-wrapper']
|
|
6226
|
+
..._vm.task.style['chart-row-progress-bar-wrapper'],
|
|
6227
|
+
'pointer-events': 'none'
|
|
6109
6228
|
}
|
|
6110
6229
|
}, [_c('defs', [_c('pattern', {
|
|
6111
6230
|
attrs: {
|
|
@@ -6127,8 +6246,11 @@ var ProgressBarvue_type_template_id_bc869ae8_render = function render() {
|
|
|
6127
6246
|
"x2": "0",
|
|
6128
6247
|
"y2": _vm.root.state.options.chart.progress.width
|
|
6129
6248
|
}
|
|
6130
|
-
})])]), _vm.root.state.options.chart.progress.bar ? _c('rect', {
|
|
6249
|
+
})])]), _vm.root.state.options.chart.progress.bar && _vm.task.progress > 0 ? _c('rect', {
|
|
6131
6250
|
staticClass: "gantt-elastic__chart-row-progress-bar-solid",
|
|
6251
|
+
staticStyle: {
|
|
6252
|
+
"pointer-events": "none"
|
|
6253
|
+
},
|
|
6132
6254
|
style: {
|
|
6133
6255
|
..._vm.root.style['chart-row-progress-bar-solid'],
|
|
6134
6256
|
..._vm.task.style['chart-row-progress-bar-solid']
|
|
@@ -6138,7 +6260,11 @@ var ProgressBarvue_type_template_id_bc869ae8_render = function render() {
|
|
|
6138
6260
|
"y": "0",
|
|
6139
6261
|
"width": _vm.getProgressWidth
|
|
6140
6262
|
}
|
|
6141
|
-
}) : _vm._e(), _vm.root.state.options.chart.progress.pattern ? _c('g',
|
|
6263
|
+
}) : _vm._e(), _vm.root.state.options.chart.progress.pattern && _vm.task.progress > 0 ? _c('g', {
|
|
6264
|
+
staticStyle: {
|
|
6265
|
+
"pointer-events": "none"
|
|
6266
|
+
}
|
|
6267
|
+
}, [_c('rect', {
|
|
6142
6268
|
staticClass: "gantt-elastic__chart-row-progress-bar-pattern",
|
|
6143
6269
|
style: {
|
|
6144
6270
|
..._vm.root.style['chart-row-progress-bar-pattern'],
|
|
@@ -6162,7 +6288,7 @@ var ProgressBarvue_type_template_id_bc869ae8_render = function render() {
|
|
|
6162
6288
|
}
|
|
6163
6289
|
})]) : _vm._e()]);
|
|
6164
6290
|
};
|
|
6165
|
-
var
|
|
6291
|
+
var ProgressBarvue_type_template_id_2323ee21_staticRenderFns = [];
|
|
6166
6292
|
|
|
6167
6293
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/ProgressBar.vue?vue&type=script&lang=js
|
|
6168
6294
|
/* harmony default export */ var ProgressBarvue_type_script_lang_js = ({
|
|
@@ -6223,8 +6349,8 @@ var ProgressBarvue_type_template_id_bc869ae8_staticRenderFns = [];
|
|
|
6223
6349
|
;
|
|
6224
6350
|
var ProgressBar_component = normalizeComponent(
|
|
6225
6351
|
Chart_ProgressBarvue_type_script_lang_js,
|
|
6226
|
-
|
|
6227
|
-
|
|
6352
|
+
ProgressBarvue_type_template_id_2323ee21_render,
|
|
6353
|
+
ProgressBarvue_type_template_id_2323ee21_staticRenderFns,
|
|
6228
6354
|
false,
|
|
6229
6355
|
null,
|
|
6230
6356
|
null,
|
|
@@ -6281,11 +6407,631 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6281
6407
|
}
|
|
6282
6408
|
}
|
|
6283
6409
|
});
|
|
6410
|
+
;// ./src/components/Chart/Row/Draggable.mixin.js
|
|
6411
|
+
|
|
6412
|
+
|
|
6413
|
+
/* harmony default export */ var Draggable_mixin = ({
|
|
6414
|
+
data() {
|
|
6415
|
+
return {
|
|
6416
|
+
isDragging: false,
|
|
6417
|
+
dragStartX: 0,
|
|
6418
|
+
dragStartTime: 0,
|
|
6419
|
+
dragType: null,
|
|
6420
|
+
// 'start', 'end', or 'move'
|
|
6421
|
+
originalStartTime: 0,
|
|
6422
|
+
originalEndTime: 0,
|
|
6423
|
+
originalDuration: 0
|
|
6424
|
+
};
|
|
6425
|
+
},
|
|
6426
|
+
methods: {
|
|
6427
|
+
startDrag(event, type) {
|
|
6428
|
+
event.preventDefault();
|
|
6429
|
+
event.stopPropagation();
|
|
6430
|
+
|
|
6431
|
+
// Debug logging
|
|
6432
|
+
// console.log('Starting drag:', {
|
|
6433
|
+
// type: type,
|
|
6434
|
+
// taskId: this.task.id,
|
|
6435
|
+
// taskType: this.task.type,
|
|
6436
|
+
// originalStart: this.task.startTime,
|
|
6437
|
+
// originalEnd: this.task.endTime
|
|
6438
|
+
// });
|
|
6439
|
+
|
|
6440
|
+
// Safety checks
|
|
6441
|
+
if (!this.root || !this.root.state || !this.root.state.options || !this.root.state.options.times) {
|
|
6442
|
+
console.error('Root or times options not available for dragging');
|
|
6443
|
+
return;
|
|
6444
|
+
}
|
|
6445
|
+
this.isDragging = true;
|
|
6446
|
+
this.dragType = type;
|
|
6447
|
+
this.dragStartX = event.clientX || event.touches[0].clientX;
|
|
6448
|
+
this.dragStartTime = this.task.startTime;
|
|
6449
|
+
this.originalStartTime = this.task.startTime;
|
|
6450
|
+
this.originalEndTime = this.task.endTime;
|
|
6451
|
+
this.originalDuration = this.task.duration;
|
|
6452
|
+
|
|
6453
|
+
// Add event listeners
|
|
6454
|
+
document.addEventListener('mousemove', this.handleDrag);
|
|
6455
|
+
document.addEventListener('mouseup', this.endDrag);
|
|
6456
|
+
document.addEventListener('touchmove', this.handleDrag);
|
|
6457
|
+
document.addEventListener('touchend', this.endDrag);
|
|
6458
|
+
|
|
6459
|
+
// Hide hover tooltip when dragging starts
|
|
6460
|
+
this.hideHoverTooltip();
|
|
6461
|
+
|
|
6462
|
+
// Add context menu for extending tasks
|
|
6463
|
+
// this.$el.addEventListener('contextmenu', this.showContextMenu);
|
|
6464
|
+
|
|
6465
|
+
// Add keyboard shortcuts
|
|
6466
|
+
this.$el.addEventListener('keydown', this.handleKeyboardShortcuts);
|
|
6467
|
+
|
|
6468
|
+
// Add dragging class for visual feedback
|
|
6469
|
+
this.$el.classList.add('gantt-elastic__task-dragging');
|
|
6470
|
+
this.$el.classList.add(`gantt-elastic__task-dragging--${type}`);
|
|
6471
|
+
|
|
6472
|
+
// Create date tooltip for all dragging types
|
|
6473
|
+
this.createDateTooltip();
|
|
6474
|
+
},
|
|
6475
|
+
handleDrag(event) {
|
|
6476
|
+
if (!this.isDragging) return;
|
|
6477
|
+
event.preventDefault();
|
|
6478
|
+
const currentX = event.clientX || event.touches[0].clientX;
|
|
6479
|
+
const deltaX = currentX - this.dragStartX;
|
|
6480
|
+
|
|
6481
|
+
// Convert pixel delta to time delta
|
|
6482
|
+
const timeDelta = deltaX * this.root.state.options.times.timePerPixel;
|
|
6483
|
+
if (this.dragType === 'move') {
|
|
6484
|
+
// Move entire task
|
|
6485
|
+
const newStartTime = this.originalStartTime + timeDelta;
|
|
6486
|
+
const newEndTime = this.originalEndTime + timeDelta;
|
|
6487
|
+
|
|
6488
|
+
// Ensure task doesn't go before chart start
|
|
6489
|
+
const chartStartTime = this.root.state.options.times.firstTime;
|
|
6490
|
+
const chartEndTime = this.root.state.options.times.lastTime;
|
|
6491
|
+
if (newStartTime >= chartStartTime && newEndTime <= chartEndTime) {
|
|
6492
|
+
this.updateTaskTime(newStartTime, newEndTime);
|
|
6493
|
+
|
|
6494
|
+
// Update date tooltip for move dragging
|
|
6495
|
+
if (this.dateTooltip) {
|
|
6496
|
+
this.updateDateTooltip(newStartTime);
|
|
6497
|
+
}
|
|
6498
|
+
}
|
|
6499
|
+
} else if (this.dragType === 'start') {
|
|
6500
|
+
// Resize from start - change start date
|
|
6501
|
+
const newStartTime = this.originalStartTime + timeDelta;
|
|
6502
|
+
const newEndTime = this.originalEndTime;
|
|
6503
|
+
|
|
6504
|
+
// Ensure start doesn't go after end and respects minimum duration
|
|
6505
|
+
const minDuration = 24 * 60 * 60 * 1000; // 1 day minimum
|
|
6506
|
+
const chartStartTime = this.root.state.options.times.firstTime;
|
|
6507
|
+
if (newStartTime < newEndTime && newEndTime - newStartTime >= minDuration && newStartTime >= chartStartTime) {
|
|
6508
|
+
this.updateTaskTime(newStartTime, newEndTime);
|
|
6509
|
+
|
|
6510
|
+
// Update date tooltip for start dragging
|
|
6511
|
+
if (this.dateTooltip) {
|
|
6512
|
+
this.updateDateTooltip(newStartTime);
|
|
6513
|
+
}
|
|
6514
|
+
}
|
|
6515
|
+
} else if (this.dragType === 'end') {
|
|
6516
|
+
// Resize from end - change end date while keeping start fixed
|
|
6517
|
+
const newStartTime = this.originalStartTime;
|
|
6518
|
+
const newEndTime = this.originalEndTime + timeDelta;
|
|
6519
|
+
|
|
6520
|
+
// Ensure end doesn't go before start and respects minimum duration
|
|
6521
|
+
const minDuration = 24 * 60 * 60 * 1000; // 1 day minimum
|
|
6522
|
+
|
|
6523
|
+
if (newEndTime > newStartTime && newEndTime - newStartTime >= minDuration) {
|
|
6524
|
+
// Allow extending beyond chart end time if needed
|
|
6525
|
+
this.updateTaskTime(newStartTime, newEndTime);
|
|
6526
|
+
|
|
6527
|
+
// Update date tooltip for end dragging
|
|
6528
|
+
if (this.dateTooltip) {
|
|
6529
|
+
this.updateDateTooltip(newEndTime);
|
|
6530
|
+
}
|
|
6531
|
+
}
|
|
6532
|
+
}
|
|
6533
|
+
},
|
|
6534
|
+
endDrag(event) {
|
|
6535
|
+
if (!this.isDragging) return;
|
|
6536
|
+
this.isDragging = false;
|
|
6537
|
+
|
|
6538
|
+
// Remove event listeners
|
|
6539
|
+
document.removeEventListener('mousemove', this.handleDrag);
|
|
6540
|
+
document.removeEventListener('mouseup', this.endDrag);
|
|
6541
|
+
document.removeEventListener('touchmove', this.handleDrag);
|
|
6542
|
+
document.removeEventListener('touchend', this.endDrag);
|
|
6543
|
+
|
|
6544
|
+
// Remove dragging classes
|
|
6545
|
+
this.$el.classList.remove('gantt-elastic__task-dragging');
|
|
6546
|
+
this.$el.classList.remove(`gantt-elastic__task-dragging--${this.dragType}`);
|
|
6547
|
+
|
|
6548
|
+
// Remove date tooltip
|
|
6549
|
+
this.removeDateTooltip();
|
|
6550
|
+
|
|
6551
|
+
// Emit save event with updated data
|
|
6552
|
+
this.emitSaveEvent();
|
|
6553
|
+
},
|
|
6554
|
+
updateTaskTime(newStartTime, newEndTime) {
|
|
6555
|
+
// Ensure valid times
|
|
6556
|
+
if (newStartTime >= newEndTime) {
|
|
6557
|
+
return; // Don't update if invalid
|
|
6558
|
+
}
|
|
6559
|
+
|
|
6560
|
+
// Debug logging for epic tasks
|
|
6561
|
+
if (this.task.type === 'epic') {
|
|
6562
|
+
// console.log('Epic task drag:', {
|
|
6563
|
+
// dragType: this.dragType,
|
|
6564
|
+
// originalStart: this.originalStartTime,
|
|
6565
|
+
// originalEnd: this.originalEndTime,
|
|
6566
|
+
// newStart: newStartTime,
|
|
6567
|
+
// newEnd: newEndTime,
|
|
6568
|
+
// startChanged: newStartTime !== this.originalStartTime,
|
|
6569
|
+
// endChanged: newEndTime !== this.originalEndTime
|
|
6570
|
+
// });
|
|
6571
|
+
}
|
|
6572
|
+
|
|
6573
|
+
// Update task data
|
|
6574
|
+
this.task.startTime = newStartTime;
|
|
6575
|
+
this.task.endTime = newEndTime;
|
|
6576
|
+
this.task.duration = newEndTime - newStartTime;
|
|
6577
|
+
|
|
6578
|
+
// Debug logging
|
|
6579
|
+
// console.log('Updating task time:', {
|
|
6580
|
+
// taskId: this.task.id,
|
|
6581
|
+
// newStartTime,
|
|
6582
|
+
// newEndTime,
|
|
6583
|
+
// duration: this.task.duration,
|
|
6584
|
+
// root: !!this.root,
|
|
6585
|
+
// timeToPixelOffsetX: !!(this.root && this.root.timeToPixelOffsetX),
|
|
6586
|
+
// timePerPixel: this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel
|
|
6587
|
+
// });
|
|
6588
|
+
|
|
6589
|
+
// Update task position and width using the correct method
|
|
6590
|
+
if (this.root && this.root.timeToPixelOffsetX) {
|
|
6591
|
+
this.task.x = this.root.timeToPixelOffsetX(newStartTime);
|
|
6592
|
+
this.task.width = this.root.timeToPixelOffsetX(newEndTime) - this.task.x;
|
|
6593
|
+
} else {
|
|
6594
|
+
// Fallback calculation if method is not available
|
|
6595
|
+
const timePerPixel = this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel;
|
|
6596
|
+
if (timePerPixel > 0) {
|
|
6597
|
+
this.task.x = (newStartTime - this.root.state.options.times.firstTime) / timePerPixel;
|
|
6598
|
+
this.task.width = (newEndTime - newStartTime) / timePerPixel;
|
|
6599
|
+
} else {
|
|
6600
|
+
console.error('timePerPixel is not available or invalid:', timePerPixel);
|
|
6601
|
+
}
|
|
6602
|
+
}
|
|
6603
|
+
|
|
6604
|
+
// Force update
|
|
6605
|
+
this.$forceUpdate();
|
|
6606
|
+
},
|
|
6607
|
+
emitSaveEvent() {
|
|
6608
|
+
// Calculate date information
|
|
6609
|
+
const startDate = new Date(this.task.startTime);
|
|
6610
|
+
const endDate = new Date(this.task.endTime);
|
|
6611
|
+
const durationDays = Math.ceil(this.task.duration / (24 * 60 * 60 * 1000));
|
|
6612
|
+
|
|
6613
|
+
// Emit event to parent component with updated task data
|
|
6614
|
+
this.$emit('task-updated', {
|
|
6615
|
+
id: this.task.id,
|
|
6616
|
+
startTime: this.task.startTime,
|
|
6617
|
+
endTime: this.task.endTime,
|
|
6618
|
+
duration: this.task.duration,
|
|
6619
|
+
durationDays: durationDays,
|
|
6620
|
+
startDate: startDate.toISOString(),
|
|
6621
|
+
endDate: endDate.toISOString(),
|
|
6622
|
+
startDateFormatted: startDate.toLocaleDateString(),
|
|
6623
|
+
endDateFormatted: endDate.toLocaleDateString(),
|
|
6624
|
+
dragType: this.dragType,
|
|
6625
|
+
originalStartTime: this.originalStartTime,
|
|
6626
|
+
originalEndTime: this.originalEndTime,
|
|
6627
|
+
originalDuration: this.originalDuration
|
|
6628
|
+
});
|
|
6629
|
+
|
|
6630
|
+
// Log the update for debugging
|
|
6631
|
+
// console.log('Task drag completed:', {
|
|
6632
|
+
// id: this.task.id,
|
|
6633
|
+
// dragType: this.dragType,
|
|
6634
|
+
// startDate: startDate.toLocaleDateString(),
|
|
6635
|
+
// endDate: endDate.toLocaleDateString(),
|
|
6636
|
+
// duration: `${durationDays} days`,
|
|
6637
|
+
// startTime: this.task.startTime,
|
|
6638
|
+
// endTime: this.task.endTime
|
|
6639
|
+
// });
|
|
6640
|
+
},
|
|
6641
|
+
/**
|
|
6642
|
+
* Show context menu for task actions
|
|
6643
|
+
*
|
|
6644
|
+
* @param {Event} event - Right-click event
|
|
6645
|
+
*/
|
|
6646
|
+
// showContextMenu(event) {
|
|
6647
|
+
// event.preventDefault();
|
|
6648
|
+
//
|
|
6649
|
+
// // Remove existing context menu
|
|
6650
|
+
// this.hideContextMenu();
|
|
6651
|
+
//
|
|
6652
|
+
// // Create context menu
|
|
6653
|
+
// const contextMenu = document.createElement('div');
|
|
6654
|
+
// contextMenu.className = 'gantt-elastic__context-menu';
|
|
6655
|
+
// contextMenu.style.cssText = `
|
|
6656
|
+
// position: fixed;
|
|
6657
|
+
// top: ${event.clientY}px;
|
|
6658
|
+
// left: ${event.clientX}px;
|
|
6659
|
+
// background: white;
|
|
6660
|
+
// border: 1px solid #e5e7eb;
|
|
6661
|
+
// border-radius: 6px;
|
|
6662
|
+
// box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
6663
|
+
// z-index: 1000;
|
|
6664
|
+
// min-width: 150px;
|
|
6665
|
+
// padding: 4px 0;
|
|
6666
|
+
// `;
|
|
6667
|
+
//
|
|
6668
|
+
// // Add menu items
|
|
6669
|
+
// const menuItems = [
|
|
6670
|
+
// { text: 'Extend to Next Date', action: () => this.extendTaskToNextDate() },
|
|
6671
|
+
// { text: 'Extend by 1 Day', action: () => this.extendTaskByDays(1) },
|
|
6672
|
+
// { text: 'Extend by 3 Days', action: () => this.extendTaskByDays(3) },
|
|
6673
|
+
// { text: 'Extend by 1 Week', action: () => this.extendTaskByDays(7) }
|
|
6674
|
+
// ];
|
|
6675
|
+
//
|
|
6676
|
+
// menuItems.forEach(item => {
|
|
6677
|
+
// const menuItem = document.createElement('div');
|
|
6678
|
+
// menuItem.className = 'gantt-elastic__context-menu-item';
|
|
6679
|
+
// menuItem.textContent = item.text;
|
|
6680
|
+
// menuItem.style.cssText = `
|
|
6681
|
+
// padding: 8px 16px;
|
|
6682
|
+
// cursor: pointer;
|
|
6683
|
+
// font-size: 14px;
|
|
6684
|
+
// color: #374151;
|
|
6685
|
+
// transition: background-color 0.2s;
|
|
6686
|
+
// `;
|
|
6687
|
+
//
|
|
6688
|
+
// menuItem.addEventListener('mouseenter', () => {
|
|
6689
|
+
// menuItem.style.backgroundColor = '#f3f4f6';
|
|
6690
|
+
// });
|
|
6691
|
+
//
|
|
6692
|
+
// menuItem.addEventListener('mouseleave', () => {
|
|
6693
|
+
// menuItem.style.backgroundColor = 'transparent';
|
|
6694
|
+
// });
|
|
6695
|
+
//
|
|
6696
|
+
// menuItem.addEventListener('click', () => {
|
|
6697
|
+
// item.action();
|
|
6698
|
+
// this.hideContextMenu();
|
|
6699
|
+
// });
|
|
6700
|
+
//
|
|
6701
|
+
// contextMenu.appendChild(menuItem);
|
|
6702
|
+
// });
|
|
6703
|
+
//
|
|
6704
|
+
// // Add to document
|
|
6705
|
+
// document.body.appendChild(contextMenu);
|
|
6706
|
+
// this.contextMenu = contextMenu;
|
|
6707
|
+
//
|
|
6708
|
+
// // Close menu when clicking outside
|
|
6709
|
+
// setTimeout(() => {
|
|
6710
|
+
// document.addEventListener('click', this.hideContextMenu);
|
|
6711
|
+
// }, 0);
|
|
6712
|
+
// },
|
|
6713
|
+
|
|
6714
|
+
/**
|
|
6715
|
+
* Hide context menu
|
|
6716
|
+
*/
|
|
6717
|
+
// hideContextMenu() {
|
|
6718
|
+
// if (this.contextMenu) {
|
|
6719
|
+
// document.body.removeChild(this.contextMenu);
|
|
6720
|
+
// this.contextMenu = null;
|
|
6721
|
+
// document.removeEventListener('click', this.hideContextMenu);
|
|
6722
|
+
// }
|
|
6723
|
+
// },
|
|
6724
|
+
|
|
6725
|
+
/**
|
|
6726
|
+
* Extend task to next date (1 day)
|
|
6727
|
+
*/
|
|
6728
|
+
// extendTaskToNextDate() {
|
|
6729
|
+
// const additionalDuration = 24 * 60 * 60 * 1000; // 1 day
|
|
6730
|
+
// this.task.duration += additionalDuration;
|
|
6731
|
+
// this.task.endTime += additionalDuration;
|
|
6732
|
+
//
|
|
6733
|
+
// // Update task position and width
|
|
6734
|
+
// if (this.root && this.root.timeToPixelOffsetX) {
|
|
6735
|
+
// this.task.width = this.root.timeToPixelOffsetX(this.task.endTime) - this.task.x;
|
|
6736
|
+
// } else {
|
|
6737
|
+
// const timePerPixel = this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel;
|
|
6738
|
+
// if (timePerPixel > 0) {
|
|
6739
|
+
// this.task.width = (this.task.endTime - this.task.startTime) / timePerPixel;
|
|
6740
|
+
// }
|
|
6741
|
+
// }
|
|
6742
|
+
//
|
|
6743
|
+
// // Emit update event
|
|
6744
|
+
// this.emitSaveEvent();
|
|
6745
|
+
//
|
|
6746
|
+
// console.log(`✅ Task extended to next date:`, {
|
|
6747
|
+
// taskId: this.task.id,
|
|
6748
|
+
// newDuration: this.task.duration,
|
|
6749
|
+
// newEndDate: new Date(this.task.endTime).toLocaleDateString()
|
|
6750
|
+
// });
|
|
6751
|
+
// },
|
|
6752
|
+
|
|
6753
|
+
/**
|
|
6754
|
+
* Extend task by specific number of days
|
|
6755
|
+
*
|
|
6756
|
+
* @param {number} days - Number of days to add
|
|
6757
|
+
*/
|
|
6758
|
+
// extendTaskByDays(days) {
|
|
6759
|
+
// const additionalDuration = days * 24 * 60 * 60 * 1000;
|
|
6760
|
+
// this.task.duration += additionalDuration;
|
|
6761
|
+
// this.task.endTime += additionalDuration;
|
|
6762
|
+
//
|
|
6763
|
+
// // Update task position and width
|
|
6764
|
+
// if (this.root && this.root.timeToPixelOffsetX) {
|
|
6765
|
+
// this.task.width = this.root.timeToPixelOffsetX(this.task.endTime) - this.task.x;
|
|
6766
|
+
// } else {
|
|
6767
|
+
// const timePerPixel = this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel;
|
|
6768
|
+
// if (timePerPixel > 0) {
|
|
6769
|
+
// this.task.width = (this.task.endTime - this.task.startTime) / timePerPixel;
|
|
6770
|
+
// }
|
|
6771
|
+
// }
|
|
6772
|
+
//
|
|
6773
|
+
// // Emit update event
|
|
6774
|
+
// this.emitSaveEvent();
|
|
6775
|
+
//
|
|
6776
|
+
// console.log(`✅ Task extended by ${days} day(s):`, {
|
|
6777
|
+
// taskId: this.task.id,
|
|
6778
|
+
// daysAdded: days,
|
|
6779
|
+
// newDuration: this.task.duration,
|
|
6780
|
+
// newEndDate: new Date(this.task.endTime).toLocaleDateString()
|
|
6781
|
+
// });
|
|
6782
|
+
// },
|
|
6783
|
+
|
|
6784
|
+
/**
|
|
6785
|
+
* Handle keyboard shortcuts for task extension
|
|
6786
|
+
*
|
|
6787
|
+
* @param {KeyboardEvent} event - Keyboard event
|
|
6788
|
+
*/
|
|
6789
|
+
handleKeyboardShortcuts(event) {
|
|
6790
|
+
// Only handle if task is focused and not dragging
|
|
6791
|
+
if (this.isDragging) return;
|
|
6792
|
+
|
|
6793
|
+
// Check for Ctrl/Cmd + E for extend to next date
|
|
6794
|
+
if ((event.ctrlKey || event.metaKey) && event.key === 'e') {
|
|
6795
|
+
event.preventDefault();
|
|
6796
|
+
this.extendTaskToNextDate();
|
|
6797
|
+
}
|
|
6798
|
+
// Check for Ctrl/Cmd + Shift + E for extend by 1 day
|
|
6799
|
+
else if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === 'E') {
|
|
6800
|
+
event.preventDefault();
|
|
6801
|
+
this.extendTaskByDays(1);
|
|
6802
|
+
}
|
|
6803
|
+
// Check for Ctrl/Cmd + 3 for extend by 3 days
|
|
6804
|
+
else if ((event.ctrlKey || event.metaKey) && event.key === '3') {
|
|
6805
|
+
event.preventDefault();
|
|
6806
|
+
this.extendTaskByDays(3);
|
|
6807
|
+
}
|
|
6808
|
+
// Check for Ctrl/Cmd + 7 for extend by 1 week
|
|
6809
|
+
else if ((event.ctrlKey || event.metaKey) && event.key === '7') {
|
|
6810
|
+
event.preventDefault();
|
|
6811
|
+
this.extendTaskByDays(7);
|
|
6812
|
+
}
|
|
6813
|
+
},
|
|
6814
|
+
/**
|
|
6815
|
+
* Create date tooltip for end dragging
|
|
6816
|
+
*/
|
|
6817
|
+
createDateTooltip() {
|
|
6818
|
+
this.dateTooltip = document.createElement('div');
|
|
6819
|
+
this.dateTooltip.className = 'gantt-elastic__date-tooltip';
|
|
6820
|
+
this.dateTooltip.style.cssText = `
|
|
6821
|
+
position: fixed;
|
|
6822
|
+
background: #000000;
|
|
6823
|
+
color: white;
|
|
6824
|
+
padding: 6px 12px;
|
|
6825
|
+
border-radius: 6px;
|
|
6826
|
+
font-size: 13px;
|
|
6827
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
6828
|
+
font-weight: 500;
|
|
6829
|
+
pointer-events: none;
|
|
6830
|
+
z-index: 10000;
|
|
6831
|
+
white-space: nowrap;
|
|
6832
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
6833
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
6834
|
+
`;
|
|
6835
|
+
document.body.appendChild(this.dateTooltip);
|
|
6836
|
+
|
|
6837
|
+
// Initialize tooltip with current values
|
|
6838
|
+
if (this.dragType === 'start') {
|
|
6839
|
+
this.updateDateTooltip(this.originalStartTime);
|
|
6840
|
+
} else if (this.dragType === 'end') {
|
|
6841
|
+
this.updateDateTooltip(this.originalEndTime);
|
|
6842
|
+
} else if (this.dragType === 'move') {
|
|
6843
|
+
this.updateDateTooltip(this.originalStartTime);
|
|
6844
|
+
}
|
|
6845
|
+
},
|
|
6846
|
+
/**
|
|
6847
|
+
* Update date tooltip with new time and day changes
|
|
6848
|
+
*
|
|
6849
|
+
* @param {number} newTime - New time in milliseconds
|
|
6850
|
+
*/
|
|
6851
|
+
updateDateTooltip(newTime) {
|
|
6852
|
+
if (!this.dateTooltip) return;
|
|
6853
|
+
const newDate = new Date(newTime);
|
|
6854
|
+
const formattedDate = newDate.toLocaleDateString('en-US', {
|
|
6855
|
+
year: 'numeric',
|
|
6856
|
+
month: 'short',
|
|
6857
|
+
day: 'numeric'
|
|
6858
|
+
});
|
|
6859
|
+
|
|
6860
|
+
// Calculate day changes based on drag type
|
|
6861
|
+
let dayChanges = '';
|
|
6862
|
+
if (this.dragType === 'start') {
|
|
6863
|
+
// For start drag, show how many days we're moving the start date
|
|
6864
|
+
const daysDiff = Math.round((newTime - this.originalStartTime) / (24 * 60 * 60 * 1000));
|
|
6865
|
+
if (daysDiff !== 0) {
|
|
6866
|
+
dayChanges = daysDiff > 0 ? ` (+${daysDiff} days)` : ` (${daysDiff} days)`;
|
|
6867
|
+
}
|
|
6868
|
+
} else if (this.dragType === 'end') {
|
|
6869
|
+
// For end drag, show how many days we're moving the end date
|
|
6870
|
+
const daysDiff = Math.round((newTime - this.originalEndTime) / (24 * 60 * 60 * 1000));
|
|
6871
|
+
if (daysDiff !== 0) {
|
|
6872
|
+
dayChanges = daysDiff > 0 ? ` (+${daysDiff} days)` : ` (${daysDiff} days)`;
|
|
6873
|
+
}
|
|
6874
|
+
} else if (this.dragType === 'move') {
|
|
6875
|
+
// For move drag, show how many days we're moving the entire task
|
|
6876
|
+
const daysDiff = Math.round((newTime - this.originalStartTime) / (24 * 60 * 60 * 1000));
|
|
6877
|
+
if (daysDiff !== 0) {
|
|
6878
|
+
dayChanges = daysDiff > 0 ? ` (+${daysDiff} days)` : ` (${daysDiff} days)`;
|
|
6879
|
+
}
|
|
6880
|
+
}
|
|
6881
|
+
this.dateTooltip.textContent = `${formattedDate}${dayChanges}`;
|
|
6882
|
+
|
|
6883
|
+
// Position tooltip based on drag type
|
|
6884
|
+
const rect = this.$el.getBoundingClientRect();
|
|
6885
|
+
if (this.dragType === 'start') {
|
|
6886
|
+
// Position tooltip on the left side for start drag
|
|
6887
|
+
this.dateTooltip.style.left = `${rect.left - this.dateTooltip.offsetWidth - 10}px`;
|
|
6888
|
+
this.dateTooltip.style.top = `${rect.top + rect.height / 2 - 10}px`;
|
|
6889
|
+
} else if (this.dragType === 'end') {
|
|
6890
|
+
// Position tooltip on the right side for end drag
|
|
6891
|
+
this.dateTooltip.style.left = `${rect.right + 10}px`;
|
|
6892
|
+
this.dateTooltip.style.top = `${rect.top + rect.height / 2 - 10}px`;
|
|
6893
|
+
} else if (this.dragType === 'move') {
|
|
6894
|
+
// Position tooltip on the right side for move drag
|
|
6895
|
+
this.dateTooltip.style.left = `${rect.right + 10}px`;
|
|
6896
|
+
this.dateTooltip.style.top = `${rect.top + rect.height / 2 - 10}px`;
|
|
6897
|
+
}
|
|
6898
|
+
},
|
|
6899
|
+
/**
|
|
6900
|
+
* Remove date tooltip
|
|
6901
|
+
*/
|
|
6902
|
+
removeDateTooltip() {
|
|
6903
|
+
if (this.dateTooltip) {
|
|
6904
|
+
document.body.removeChild(this.dateTooltip);
|
|
6905
|
+
this.dateTooltip = null;
|
|
6906
|
+
}
|
|
6907
|
+
},
|
|
6908
|
+
/**
|
|
6909
|
+
* Add hover tooltips for drag handles
|
|
6910
|
+
*/
|
|
6911
|
+
addHoverTooltips() {
|
|
6912
|
+
// Find drag handles in the current element
|
|
6913
|
+
const dragHandles = this.$el.querySelectorAll('.gantt-elastic__chart-row-extend-handle');
|
|
6914
|
+
dragHandles.forEach((handle, index) => {
|
|
6915
|
+
const isStartHandle = index === 0; // First handle is start, second is end
|
|
6916
|
+
|
|
6917
|
+
// Remove existing listeners to avoid duplicates
|
|
6918
|
+
handle.removeEventListener('mouseenter', this.handleMouseEnter);
|
|
6919
|
+
handle.removeEventListener('mouseleave', this.handleMouseLeave);
|
|
6920
|
+
|
|
6921
|
+
// Add new listeners
|
|
6922
|
+
handle.addEventListener('mouseenter', this.handleMouseEnter.bind(this));
|
|
6923
|
+
handle.addEventListener('mouseleave', this.handleMouseLeave.bind(this));
|
|
6924
|
+
});
|
|
6925
|
+
},
|
|
6926
|
+
/**
|
|
6927
|
+
* Handle mouse enter on drag handle
|
|
6928
|
+
*/
|
|
6929
|
+
handleMouseEnter(event) {
|
|
6930
|
+
if (!this.isDragging) {
|
|
6931
|
+
this.showHoverTooltip(event, false);
|
|
6932
|
+
}
|
|
6933
|
+
},
|
|
6934
|
+
/**
|
|
6935
|
+
* Handle mouse leave on drag handle
|
|
6936
|
+
*/
|
|
6937
|
+
handleMouseLeave() {
|
|
6938
|
+
if (!this.isDragging) {
|
|
6939
|
+
this.hideHoverTooltip();
|
|
6940
|
+
}
|
|
6941
|
+
},
|
|
6942
|
+
/**
|
|
6943
|
+
* Show hover tooltip with date range and duration
|
|
6944
|
+
*/
|
|
6945
|
+
showHoverTooltip(event, isStartHandle) {
|
|
6946
|
+
this.hideHoverTooltip(); // Remove any existing tooltip
|
|
6947
|
+
|
|
6948
|
+
const startDate = new Date(this.task.startTime);
|
|
6949
|
+
const endDate = new Date(this.task.endTime);
|
|
6950
|
+
const startFormatted = startDate.toLocaleDateString('en-US', {
|
|
6951
|
+
year: 'numeric',
|
|
6952
|
+
month: 'short',
|
|
6953
|
+
day: 'numeric'
|
|
6954
|
+
});
|
|
6955
|
+
const endFormatted = endDate.toLocaleDateString('en-US', {
|
|
6956
|
+
year: 'numeric',
|
|
6957
|
+
month: 'short',
|
|
6958
|
+
day: 'numeric'
|
|
6959
|
+
});
|
|
6960
|
+
|
|
6961
|
+
// Calculate duration in days
|
|
6962
|
+
const durationMs = this.task.endTime - this.task.startTime;
|
|
6963
|
+
const durationDays = Math.ceil(durationMs / (24 * 60 * 60 * 1000));
|
|
6964
|
+
this.hoverTooltip = document.createElement('div');
|
|
6965
|
+
this.hoverTooltip.className = 'gantt-elastic__hover-tooltip';
|
|
6966
|
+
this.hoverTooltip.textContent = `${startFormatted} - ${endFormatted} (${durationDays} days)`;
|
|
6967
|
+
this.hoverTooltip.style.cssText = `
|
|
6968
|
+
position: fixed;
|
|
6969
|
+
background: #333333;
|
|
6970
|
+
color: white;
|
|
6971
|
+
padding: 8px 12px;
|
|
6972
|
+
border-radius: 6px;
|
|
6973
|
+
font-size: 13px;
|
|
6974
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
6975
|
+
font-weight: 500;
|
|
6976
|
+
pointer-events: none;
|
|
6977
|
+
z-index: 10001;
|
|
6978
|
+
white-space: nowrap;
|
|
6979
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
6980
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
6981
|
+
`;
|
|
6982
|
+
document.body.appendChild(this.hoverTooltip);
|
|
6983
|
+
|
|
6984
|
+
// Position tooltip above the handle
|
|
6985
|
+
const rect = event.target.getBoundingClientRect();
|
|
6986
|
+
this.hoverTooltip.style.left = `${rect.left + rect.width / 2 - this.hoverTooltip.offsetWidth / 2}px`;
|
|
6987
|
+
this.hoverTooltip.style.top = `${rect.top - this.hoverTooltip.offsetHeight - 8}px`;
|
|
6988
|
+
},
|
|
6989
|
+
/**
|
|
6990
|
+
* Hide hover tooltip
|
|
6991
|
+
*/
|
|
6992
|
+
hideHoverTooltip() {
|
|
6993
|
+
if (this.hoverTooltip) {
|
|
6994
|
+
document.body.removeChild(this.hoverTooltip);
|
|
6995
|
+
this.hoverTooltip = null;
|
|
6996
|
+
}
|
|
6997
|
+
}
|
|
6998
|
+
},
|
|
6999
|
+
mounted() {
|
|
7000
|
+
// Add hover tooltips when component is mounted
|
|
7001
|
+
this.$nextTick(() => {
|
|
7002
|
+
this.addHoverTooltips();
|
|
7003
|
+
});
|
|
7004
|
+
},
|
|
7005
|
+
beforeDestroy() {
|
|
7006
|
+
// Clean up event listeners
|
|
7007
|
+
document.removeEventListener('mousemove', this.handleDrag);
|
|
7008
|
+
document.removeEventListener('mouseup', this.endDrag);
|
|
7009
|
+
document.removeEventListener('touchmove', this.handleDrag);
|
|
7010
|
+
document.removeEventListener('touchend', this.endDrag);
|
|
7011
|
+
document.removeEventListener('click', this.hideContextMenu);
|
|
7012
|
+
|
|
7013
|
+
// Clean up context menu
|
|
7014
|
+
this.hideContextMenu();
|
|
7015
|
+
|
|
7016
|
+
// Clean up date tooltip
|
|
7017
|
+
this.removeDateTooltip();
|
|
7018
|
+
|
|
7019
|
+
// Clean up hover tooltip
|
|
7020
|
+
this.hideHoverTooltip();
|
|
7021
|
+
|
|
7022
|
+
// Clean up keyboard listeners
|
|
7023
|
+
if (this.$el) {
|
|
7024
|
+
// this.$el.removeEventListener('contextmenu', this.showContextMenu);
|
|
7025
|
+
this.$el.removeEventListener('keydown', this.handleKeyboardShortcuts);
|
|
7026
|
+
}
|
|
7027
|
+
}
|
|
7028
|
+
});
|
|
6284
7029
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
6285
7030
|
|
|
6286
7031
|
|
|
6287
7032
|
|
|
6288
7033
|
|
|
7034
|
+
|
|
6289
7035
|
/* harmony default export */ var Taskvue_type_script_lang_js = ({
|
|
6290
7036
|
name: 'Task',
|
|
6291
7037
|
components: {
|
|
@@ -6295,7 +7041,7 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6295
7041
|
},
|
|
6296
7042
|
inject: ['root'],
|
|
6297
7043
|
props: ['task'],
|
|
6298
|
-
mixins: [Task_mixin],
|
|
7044
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6299
7045
|
data() {
|
|
6300
7046
|
return {};
|
|
6301
7047
|
},
|
|
@@ -6316,6 +7062,15 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6316
7062
|
getPoints() {
|
|
6317
7063
|
const task = this.task;
|
|
6318
7064
|
return `0,0 ${task.width},0 ${task.width},${task.height} 0,${task.height}`;
|
|
7065
|
+
},
|
|
7066
|
+
/**
|
|
7067
|
+
* Get points adjusted for viewBox
|
|
7068
|
+
*
|
|
7069
|
+
* @returns {string}
|
|
7070
|
+
*/
|
|
7071
|
+
getPointsAdjusted() {
|
|
7072
|
+
const task = this.task;
|
|
7073
|
+
return `8,0 ${task.width + 8},0 ${task.width + 8},${task.height} 8,${task.height}`;
|
|
6319
7074
|
}
|
|
6320
7075
|
}
|
|
6321
7076
|
});
|
|
@@ -6331,8 +7086,8 @@ var ProgressBar_component = normalizeComponent(
|
|
|
6331
7086
|
;
|
|
6332
7087
|
var Task_component = normalizeComponent(
|
|
6333
7088
|
Row_Taskvue_type_script_lang_js,
|
|
6334
|
-
|
|
6335
|
-
|
|
7089
|
+
Taskvue_type_template_id_23849415_render,
|
|
7090
|
+
Taskvue_type_template_id_23849415_staticRenderFns,
|
|
6336
7091
|
false,
|
|
6337
7092
|
null,
|
|
6338
7093
|
null,
|
|
@@ -6341,8 +7096,8 @@ var Task_component = normalizeComponent(
|
|
|
6341
7096
|
)
|
|
6342
7097
|
|
|
6343
7098
|
/* harmony default export */ var Task = (Task_component.exports);
|
|
6344
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
6345
|
-
var
|
|
7099
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
7100
|
+
var Milestonevue_type_template_id_c9bfeb4a_render = function render() {
|
|
6346
7101
|
var _vm = this,
|
|
6347
7102
|
_c = _vm._self._c;
|
|
6348
7103
|
return _c('g', {
|
|
@@ -6379,11 +7134,11 @@ var Milestonevue_type_template_id_edd49e02_render = function render() {
|
|
|
6379
7134
|
..._vm.task.style['chart-row-bar']
|
|
6380
7135
|
},
|
|
6381
7136
|
attrs: {
|
|
6382
|
-
"x": _vm.task.x,
|
|
7137
|
+
"x": _vm.task.x - 8,
|
|
6383
7138
|
"y": _vm.task.y,
|
|
6384
|
-
"width": _vm.task.width,
|
|
7139
|
+
"width": _vm.task.width + 16,
|
|
6385
7140
|
"height": _vm.task.height,
|
|
6386
|
-
"viewBox":
|
|
7141
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6387
7142
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6388
7143
|
},
|
|
6389
7144
|
on: {
|
|
@@ -6438,26 +7193,83 @@ var Milestonevue_type_template_id_edd49e02_render = function render() {
|
|
|
6438
7193
|
..._vm.task.style['chart-row-bar-polygon']
|
|
6439
7194
|
},
|
|
6440
7195
|
attrs: {
|
|
6441
|
-
"points": _vm.
|
|
7196
|
+
"points": _vm.getPointsAdjusted
|
|
7197
|
+
},
|
|
7198
|
+
on: {
|
|
7199
|
+
"mousedown": function ($event) {
|
|
7200
|
+
return _vm.startDrag($event, 'move');
|
|
7201
|
+
},
|
|
7202
|
+
"touchstart": function ($event) {
|
|
7203
|
+
return _vm.startDrag($event, 'move');
|
|
7204
|
+
}
|
|
6442
7205
|
}
|
|
6443
7206
|
}), _c('progress-bar', {
|
|
6444
7207
|
attrs: {
|
|
6445
7208
|
"task": _vm.task,
|
|
6446
7209
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
6447
7210
|
}
|
|
7211
|
+
}), _c('rect', {
|
|
7212
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7213
|
+
staticStyle: {
|
|
7214
|
+
"pointer-events": "all",
|
|
7215
|
+
"z-index": "50",
|
|
7216
|
+
"cursor": "ew-resize !important"
|
|
7217
|
+
},
|
|
7218
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7219
|
+
attrs: {
|
|
7220
|
+
"x": "0",
|
|
7221
|
+
"y": "0",
|
|
7222
|
+
"width": 12,
|
|
7223
|
+
"height": _vm.task.height
|
|
7224
|
+
},
|
|
7225
|
+
on: {
|
|
7226
|
+
"mousedown": function ($event) {
|
|
7227
|
+
$event.stopPropagation();
|
|
7228
|
+
return _vm.startDrag($event, 'start');
|
|
7229
|
+
},
|
|
7230
|
+
"touchstart": function ($event) {
|
|
7231
|
+
$event.stopPropagation();
|
|
7232
|
+
return _vm.startDrag($event, 'start');
|
|
7233
|
+
}
|
|
7234
|
+
}
|
|
7235
|
+
}), _c('rect', {
|
|
7236
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7237
|
+
staticStyle: {
|
|
7238
|
+
"pointer-events": "all",
|
|
7239
|
+
"z-index": "50",
|
|
7240
|
+
"cursor": "ew-resize !important"
|
|
7241
|
+
},
|
|
7242
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7243
|
+
attrs: {
|
|
7244
|
+
"x": _vm.task.width - 12,
|
|
7245
|
+
"y": "0",
|
|
7246
|
+
"width": 12,
|
|
7247
|
+
"height": _vm.task.height
|
|
7248
|
+
},
|
|
7249
|
+
on: {
|
|
7250
|
+
"mousedown": function ($event) {
|
|
7251
|
+
$event.stopPropagation();
|
|
7252
|
+
return _vm.startDrag($event, 'end');
|
|
7253
|
+
},
|
|
7254
|
+
"touchstart": function ($event) {
|
|
7255
|
+
$event.stopPropagation();
|
|
7256
|
+
return _vm.startDrag($event, 'end');
|
|
7257
|
+
}
|
|
7258
|
+
}
|
|
6448
7259
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
6449
7260
|
attrs: {
|
|
6450
7261
|
"task": _vm.task
|
|
6451
7262
|
}
|
|
6452
7263
|
}) : _vm._e()], 1);
|
|
6453
7264
|
};
|
|
6454
|
-
var
|
|
7265
|
+
var Milestonevue_type_template_id_c9bfeb4a_staticRenderFns = [];
|
|
6455
7266
|
|
|
6456
7267
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
6457
7268
|
|
|
6458
7269
|
|
|
6459
7270
|
|
|
6460
7271
|
|
|
7272
|
+
|
|
6461
7273
|
/* harmony default export */ var Milestonevue_type_script_lang_js = ({
|
|
6462
7274
|
name: 'Milestone',
|
|
6463
7275
|
components: {
|
|
@@ -6467,7 +7279,7 @@ var Milestonevue_type_template_id_edd49e02_staticRenderFns = [];
|
|
|
6467
7279
|
},
|
|
6468
7280
|
inject: ['root'],
|
|
6469
7281
|
props: ['task'],
|
|
6470
|
-
mixins: [Task_mixin],
|
|
7282
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6471
7283
|
data() {
|
|
6472
7284
|
return {};
|
|
6473
7285
|
},
|
|
@@ -6498,6 +7310,25 @@ var Milestonevue_type_template_id_edd49e02_staticRenderFns = [];
|
|
|
6498
7310
|
${task.width},${fifty}
|
|
6499
7311
|
${task.width - offset},${task.height}
|
|
6500
7312
|
${offset},${task.height}`;
|
|
7313
|
+
},
|
|
7314
|
+
/**
|
|
7315
|
+
* Get points adjusted for viewBox
|
|
7316
|
+
*
|
|
7317
|
+
* @returns {string}
|
|
7318
|
+
*/
|
|
7319
|
+
getPointsAdjusted() {
|
|
7320
|
+
const task = this.task;
|
|
7321
|
+
const fifty = task.height / 2;
|
|
7322
|
+
let offset = fifty;
|
|
7323
|
+
if (task.width / 2 - offset < 0) {
|
|
7324
|
+
offset = task.width / 2;
|
|
7325
|
+
}
|
|
7326
|
+
return `${8},${fifty}
|
|
7327
|
+
${8 + offset},0
|
|
7328
|
+
${8 + task.width - offset},0
|
|
7329
|
+
${8 + task.width},${fifty}
|
|
7330
|
+
${8 + task.width - offset},${task.height}
|
|
7331
|
+
${8 + offset},${task.height}`;
|
|
6501
7332
|
}
|
|
6502
7333
|
}
|
|
6503
7334
|
});
|
|
@@ -6513,8 +7344,8 @@ var Milestonevue_type_template_id_edd49e02_staticRenderFns = [];
|
|
|
6513
7344
|
;
|
|
6514
7345
|
var Milestone_component = normalizeComponent(
|
|
6515
7346
|
Row_Milestonevue_type_script_lang_js,
|
|
6516
|
-
|
|
6517
|
-
|
|
7347
|
+
Milestonevue_type_template_id_c9bfeb4a_render,
|
|
7348
|
+
Milestonevue_type_template_id_c9bfeb4a_staticRenderFns,
|
|
6518
7349
|
false,
|
|
6519
7350
|
null,
|
|
6520
7351
|
null,
|
|
@@ -6523,8 +7354,8 @@ var Milestone_component = normalizeComponent(
|
|
|
6523
7354
|
)
|
|
6524
7355
|
|
|
6525
7356
|
/* harmony default export */ var Milestone = (Milestone_component.exports);
|
|
6526
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
6527
|
-
var
|
|
7357
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
7358
|
+
var Projectvue_type_template_id_72239142_render = function render() {
|
|
6528
7359
|
var _vm = this,
|
|
6529
7360
|
_c = _vm._self._c;
|
|
6530
7361
|
return _c('g', {
|
|
@@ -6561,11 +7392,11 @@ var Projectvue_type_template_id_760bf767_render = function render() {
|
|
|
6561
7392
|
..._vm.task.style['chart-row-bar']
|
|
6562
7393
|
},
|
|
6563
7394
|
attrs: {
|
|
6564
|
-
"x": _vm.task.x,
|
|
7395
|
+
"x": _vm.task.x - 8,
|
|
6565
7396
|
"y": _vm.task.y,
|
|
6566
|
-
"width": _vm.task.width,
|
|
7397
|
+
"width": _vm.task.width + 16,
|
|
6567
7398
|
"height": _vm.task.height,
|
|
6568
|
-
"viewBox":
|
|
7399
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6569
7400
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6570
7401
|
},
|
|
6571
7402
|
on: {
|
|
@@ -6620,26 +7451,83 @@ var Projectvue_type_template_id_760bf767_render = function render() {
|
|
|
6620
7451
|
..._vm.task.style['chart-row-bar-polygon']
|
|
6621
7452
|
},
|
|
6622
7453
|
attrs: {
|
|
6623
|
-
"d": _vm.
|
|
7454
|
+
"d": _vm.getPointsAdjusted
|
|
7455
|
+
},
|
|
7456
|
+
on: {
|
|
7457
|
+
"mousedown": function ($event) {
|
|
7458
|
+
return _vm.startDrag($event, 'move');
|
|
7459
|
+
},
|
|
7460
|
+
"touchstart": function ($event) {
|
|
7461
|
+
return _vm.startDrag($event, 'move');
|
|
7462
|
+
}
|
|
6624
7463
|
}
|
|
6625
7464
|
}), _c('progress-bar', {
|
|
6626
7465
|
attrs: {
|
|
6627
7466
|
"task": _vm.task,
|
|
6628
7467
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
6629
7468
|
}
|
|
7469
|
+
}), _c('rect', {
|
|
7470
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7471
|
+
staticStyle: {
|
|
7472
|
+
"pointer-events": "all",
|
|
7473
|
+
"z-index": "50",
|
|
7474
|
+
"cursor": "ew-resize !important"
|
|
7475
|
+
},
|
|
7476
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7477
|
+
attrs: {
|
|
7478
|
+
"x": "0",
|
|
7479
|
+
"y": "0",
|
|
7480
|
+
"width": 12,
|
|
7481
|
+
"height": _vm.task.height
|
|
7482
|
+
},
|
|
7483
|
+
on: {
|
|
7484
|
+
"mousedown": function ($event) {
|
|
7485
|
+
$event.stopPropagation();
|
|
7486
|
+
return _vm.startDrag($event, 'start');
|
|
7487
|
+
},
|
|
7488
|
+
"touchstart": function ($event) {
|
|
7489
|
+
$event.stopPropagation();
|
|
7490
|
+
return _vm.startDrag($event, 'start');
|
|
7491
|
+
}
|
|
7492
|
+
}
|
|
7493
|
+
}), _c('rect', {
|
|
7494
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7495
|
+
staticStyle: {
|
|
7496
|
+
"pointer-events": "all",
|
|
7497
|
+
"z-index": "50",
|
|
7498
|
+
"cursor": "ew-resize !important"
|
|
7499
|
+
},
|
|
7500
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7501
|
+
attrs: {
|
|
7502
|
+
"x": _vm.task.width - 12,
|
|
7503
|
+
"y": "0",
|
|
7504
|
+
"width": 12,
|
|
7505
|
+
"height": _vm.task.height
|
|
7506
|
+
},
|
|
7507
|
+
on: {
|
|
7508
|
+
"mousedown": function ($event) {
|
|
7509
|
+
$event.stopPropagation();
|
|
7510
|
+
return _vm.startDrag($event, 'end');
|
|
7511
|
+
},
|
|
7512
|
+
"touchstart": function ($event) {
|
|
7513
|
+
$event.stopPropagation();
|
|
7514
|
+
return _vm.startDrag($event, 'end');
|
|
7515
|
+
}
|
|
7516
|
+
}
|
|
6630
7517
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
6631
7518
|
attrs: {
|
|
6632
7519
|
"task": _vm.task
|
|
6633
7520
|
}
|
|
6634
7521
|
}) : _vm._e()], 1);
|
|
6635
7522
|
};
|
|
6636
|
-
var
|
|
7523
|
+
var Projectvue_type_template_id_72239142_staticRenderFns = [];
|
|
6637
7524
|
|
|
6638
7525
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
6639
7526
|
|
|
6640
7527
|
|
|
6641
7528
|
|
|
6642
7529
|
|
|
7530
|
+
|
|
6643
7531
|
/* harmony default export */ var Projectvue_type_script_lang_js = ({
|
|
6644
7532
|
name: 'Project',
|
|
6645
7533
|
components: {
|
|
@@ -6649,7 +7537,7 @@ var Projectvue_type_template_id_760bf767_staticRenderFns = [];
|
|
|
6649
7537
|
},
|
|
6650
7538
|
inject: ['root'],
|
|
6651
7539
|
props: ['task'],
|
|
6652
|
-
mixins: [Task_mixin],
|
|
7540
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6653
7541
|
data() {
|
|
6654
7542
|
return {};
|
|
6655
7543
|
},
|
|
@@ -6685,6 +7573,29 @@ var Projectvue_type_template_id_760bf767_staticRenderFns = [];
|
|
|
6685
7573
|
Z
|
|
6686
7574
|
`;
|
|
6687
7575
|
},
|
|
7576
|
+
/**
|
|
7577
|
+
* Get points adjusted for viewBox
|
|
7578
|
+
*
|
|
7579
|
+
* @returns {string}
|
|
7580
|
+
*/
|
|
7581
|
+
getPointsAdjusted() {
|
|
7582
|
+
const task = this.task;
|
|
7583
|
+
const bottom = task.height - task.height / 4;
|
|
7584
|
+
const corner = task.height / 6;
|
|
7585
|
+
const smallCorner = task.height / 8;
|
|
7586
|
+
return `M ${8 + smallCorner},0
|
|
7587
|
+
L ${8 + task.width - smallCorner} 0
|
|
7588
|
+
L ${8 + task.width} ${smallCorner}
|
|
7589
|
+
L ${8 + task.width} ${bottom}
|
|
7590
|
+
L ${8 + task.width - corner} ${task.height}
|
|
7591
|
+
L ${8 + task.width - corner * 2} ${bottom}
|
|
7592
|
+
L ${8 + corner * 2} ${bottom}
|
|
7593
|
+
L ${8 + corner} ${task.height}
|
|
7594
|
+
L ${8} ${bottom}
|
|
7595
|
+
L ${8} ${smallCorner}
|
|
7596
|
+
Z
|
|
7597
|
+
`;
|
|
7598
|
+
},
|
|
6688
7599
|
/**
|
|
6689
7600
|
* Should we display expander?
|
|
6690
7601
|
*
|
|
@@ -6709,8 +7620,8 @@ var Projectvue_type_template_id_760bf767_staticRenderFns = [];
|
|
|
6709
7620
|
;
|
|
6710
7621
|
var Project_component = normalizeComponent(
|
|
6711
7622
|
Row_Projectvue_type_script_lang_js,
|
|
6712
|
-
|
|
6713
|
-
|
|
7623
|
+
Projectvue_type_template_id_72239142_render,
|
|
7624
|
+
Projectvue_type_template_id_72239142_staticRenderFns,
|
|
6714
7625
|
false,
|
|
6715
7626
|
null,
|
|
6716
7627
|
null,
|
|
@@ -6719,8 +7630,8 @@ var Project_component = normalizeComponent(
|
|
|
6719
7630
|
)
|
|
6720
7631
|
|
|
6721
7632
|
/* harmony default export */ var Project = (Project_component.exports);
|
|
6722
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
6723
|
-
var
|
|
7633
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
7634
|
+
var Epicvue_type_template_id_80ad2e9c_render = function render() {
|
|
6724
7635
|
var _vm = this,
|
|
6725
7636
|
_c = _vm._self._c;
|
|
6726
7637
|
return _c('g', {
|
|
@@ -6757,11 +7668,11 @@ var Epicvue_type_template_id_a2e89cd8_render = function render() {
|
|
|
6757
7668
|
..._vm.task.style['chart-row-bar']
|
|
6758
7669
|
},
|
|
6759
7670
|
attrs: {
|
|
6760
|
-
"x": _vm.task.x,
|
|
7671
|
+
"x": _vm.task.x - 8,
|
|
6761
7672
|
"y": _vm.task.y,
|
|
6762
|
-
"width": _vm.task.width,
|
|
7673
|
+
"width": _vm.task.width + 16,
|
|
6763
7674
|
"height": _vm.task.height,
|
|
6764
|
-
"viewBox":
|
|
7675
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6765
7676
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6766
7677
|
},
|
|
6767
7678
|
on: {
|
|
@@ -6813,29 +7724,88 @@ var Epicvue_type_template_id_a2e89cd8_render = function render() {
|
|
|
6813
7724
|
..._vm.root.style['chart-row-bar-polygon'],
|
|
6814
7725
|
..._vm.root.style['chart-row-epic-polygon'],
|
|
6815
7726
|
..._vm.task.style['base'],
|
|
6816
|
-
..._vm.task.style['chart-row-bar-polygon']
|
|
7727
|
+
..._vm.task.style['chart-row-bar-polygon'],
|
|
7728
|
+
'pointer-events': 'all',
|
|
7729
|
+
'z-index': '10'
|
|
6817
7730
|
},
|
|
6818
7731
|
attrs: {
|
|
6819
|
-
"d": _vm.
|
|
7732
|
+
"d": _vm.getPointsAdjusted
|
|
7733
|
+
},
|
|
7734
|
+
on: {
|
|
7735
|
+
"mousedown": function ($event) {
|
|
7736
|
+
return _vm.startDrag($event, 'move');
|
|
7737
|
+
},
|
|
7738
|
+
"touchstart": function ($event) {
|
|
7739
|
+
return _vm.startDrag($event, 'move');
|
|
7740
|
+
}
|
|
6820
7741
|
}
|
|
6821
|
-
}), _c('progress-bar', {
|
|
7742
|
+
}), _vm.task.progress > 0 ? _c('progress-bar', {
|
|
6822
7743
|
attrs: {
|
|
6823
7744
|
"task": _vm.task,
|
|
6824
7745
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
6825
7746
|
}
|
|
7747
|
+
}) : _vm._e(), _c('rect', {
|
|
7748
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7749
|
+
staticStyle: {
|
|
7750
|
+
"pointer-events": "all",
|
|
7751
|
+
"z-index": "50",
|
|
7752
|
+
"cursor": "ew-resize !important"
|
|
7753
|
+
},
|
|
7754
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7755
|
+
attrs: {
|
|
7756
|
+
"x": "0",
|
|
7757
|
+
"y": "0",
|
|
7758
|
+
"width": 12,
|
|
7759
|
+
"height": _vm.task.height
|
|
7760
|
+
},
|
|
7761
|
+
on: {
|
|
7762
|
+
"mousedown": function ($event) {
|
|
7763
|
+
$event.stopPropagation();
|
|
7764
|
+
return _vm.startDrag($event, 'start');
|
|
7765
|
+
},
|
|
7766
|
+
"touchstart": function ($event) {
|
|
7767
|
+
$event.stopPropagation();
|
|
7768
|
+
return _vm.startDrag($event, 'start');
|
|
7769
|
+
}
|
|
7770
|
+
}
|
|
7771
|
+
}), _c('rect', {
|
|
7772
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
7773
|
+
staticStyle: {
|
|
7774
|
+
"pointer-events": "all",
|
|
7775
|
+
"z-index": "50",
|
|
7776
|
+
"cursor": "ew-resize !important"
|
|
7777
|
+
},
|
|
7778
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
7779
|
+
attrs: {
|
|
7780
|
+
"x": _vm.task.width - 12,
|
|
7781
|
+
"y": "0",
|
|
7782
|
+
"width": 12,
|
|
7783
|
+
"height": _vm.task.height
|
|
7784
|
+
},
|
|
7785
|
+
on: {
|
|
7786
|
+
"mousedown": function ($event) {
|
|
7787
|
+
$event.stopPropagation();
|
|
7788
|
+
return _vm.startDrag($event, 'end');
|
|
7789
|
+
},
|
|
7790
|
+
"touchstart": function ($event) {
|
|
7791
|
+
$event.stopPropagation();
|
|
7792
|
+
return _vm.startDrag($event, 'end');
|
|
7793
|
+
}
|
|
7794
|
+
}
|
|
6826
7795
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
6827
7796
|
attrs: {
|
|
6828
7797
|
"task": _vm.task
|
|
6829
7798
|
}
|
|
6830
7799
|
}) : _vm._e()], 1);
|
|
6831
7800
|
};
|
|
6832
|
-
var
|
|
7801
|
+
var Epicvue_type_template_id_80ad2e9c_staticRenderFns = [];
|
|
6833
7802
|
|
|
6834
7803
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
6835
7804
|
|
|
6836
7805
|
|
|
6837
7806
|
|
|
6838
7807
|
|
|
7808
|
+
|
|
6839
7809
|
/* harmony default export */ var Epicvue_type_script_lang_js = ({
|
|
6840
7810
|
name: 'Epic',
|
|
6841
7811
|
components: {
|
|
@@ -6845,7 +7815,7 @@ var Epicvue_type_template_id_a2e89cd8_staticRenderFns = [];
|
|
|
6845
7815
|
},
|
|
6846
7816
|
inject: ['root'],
|
|
6847
7817
|
props: ['task'],
|
|
6848
|
-
mixins: [Task_mixin],
|
|
7818
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
6849
7819
|
data() {
|
|
6850
7820
|
return {};
|
|
6851
7821
|
},
|
|
@@ -6881,6 +7851,29 @@ var Epicvue_type_template_id_a2e89cd8_staticRenderFns = [];
|
|
|
6881
7851
|
Z
|
|
6882
7852
|
`;
|
|
6883
7853
|
},
|
|
7854
|
+
/**
|
|
7855
|
+
* Get points adjusted for viewBox
|
|
7856
|
+
*
|
|
7857
|
+
* @returns {string}
|
|
7858
|
+
*/
|
|
7859
|
+
getPointsAdjusted() {
|
|
7860
|
+
const task = this.task;
|
|
7861
|
+
const bottom = task.height - task.height / 4;
|
|
7862
|
+
const corner = task.height / 6;
|
|
7863
|
+
const smallCorner = task.height / 8;
|
|
7864
|
+
return `M ${8 + smallCorner},0
|
|
7865
|
+
L ${8 + task.width - smallCorner} 0
|
|
7866
|
+
L ${8 + task.width} ${smallCorner}
|
|
7867
|
+
L ${8 + task.width} ${bottom}
|
|
7868
|
+
L ${8 + task.width - corner} ${task.height}
|
|
7869
|
+
L ${8 + task.width - corner * 2} ${bottom}
|
|
7870
|
+
L ${8 + corner * 2} ${bottom}
|
|
7871
|
+
L ${8 + corner} ${task.height}
|
|
7872
|
+
L ${8} ${bottom}
|
|
7873
|
+
L ${8} ${smallCorner}
|
|
7874
|
+
Z
|
|
7875
|
+
`;
|
|
7876
|
+
},
|
|
6884
7877
|
/**
|
|
6885
7878
|
* Should we display expander?
|
|
6886
7879
|
*
|
|
@@ -6905,8 +7898,8 @@ var Epicvue_type_template_id_a2e89cd8_staticRenderFns = [];
|
|
|
6905
7898
|
;
|
|
6906
7899
|
var Epic_component = normalizeComponent(
|
|
6907
7900
|
Row_Epicvue_type_script_lang_js,
|
|
6908
|
-
|
|
6909
|
-
|
|
7901
|
+
Epicvue_type_template_id_80ad2e9c_render,
|
|
7902
|
+
Epicvue_type_template_id_80ad2e9c_staticRenderFns,
|
|
6910
7903
|
false,
|
|
6911
7904
|
null,
|
|
6912
7905
|
null,
|
|
@@ -6915,8 +7908,8 @@ var Epic_component = normalizeComponent(
|
|
|
6915
7908
|
)
|
|
6916
7909
|
|
|
6917
7910
|
/* harmony default export */ var Epic = (Epic_component.exports);
|
|
6918
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
6919
|
-
var
|
|
7911
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
7912
|
+
var Subtaskvue_type_template_id_52219a35_render = function render() {
|
|
6920
7913
|
var _vm = this,
|
|
6921
7914
|
_c = _vm._self._c;
|
|
6922
7915
|
return _c('g', {
|
|
@@ -6953,11 +7946,11 @@ var Subtaskvue_type_template_id_86599310_render = function render() {
|
|
|
6953
7946
|
..._vm.task.style['chart-row-bar']
|
|
6954
7947
|
},
|
|
6955
7948
|
attrs: {
|
|
6956
|
-
"x": _vm.task.x,
|
|
7949
|
+
"x": _vm.task.x - 8,
|
|
6957
7950
|
"y": _vm.task.y,
|
|
6958
|
-
"width": _vm.task.width,
|
|
7951
|
+
"width": _vm.task.width + 16,
|
|
6959
7952
|
"height": _vm.task.height,
|
|
6960
|
-
"viewBox":
|
|
7953
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
6961
7954
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
6962
7955
|
},
|
|
6963
7956
|
on: {
|
|
@@ -7012,26 +8005,83 @@ var Subtaskvue_type_template_id_86599310_render = function render() {
|
|
|
7012
8005
|
..._vm.task.style['chart-row-bar-polygon']
|
|
7013
8006
|
},
|
|
7014
8007
|
attrs: {
|
|
7015
|
-
"points": _vm.
|
|
8008
|
+
"points": _vm.getPointsAdjusted
|
|
8009
|
+
},
|
|
8010
|
+
on: {
|
|
8011
|
+
"mousedown": function ($event) {
|
|
8012
|
+
return _vm.startDrag($event, 'move');
|
|
8013
|
+
},
|
|
8014
|
+
"touchstart": function ($event) {
|
|
8015
|
+
return _vm.startDrag($event, 'move');
|
|
8016
|
+
}
|
|
7016
8017
|
}
|
|
7017
8018
|
}), _c('progress-bar', {
|
|
7018
8019
|
attrs: {
|
|
7019
8020
|
"task": _vm.task,
|
|
7020
8021
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
7021
8022
|
}
|
|
8023
|
+
}), _c('rect', {
|
|
8024
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8025
|
+
staticStyle: {
|
|
8026
|
+
"pointer-events": "all",
|
|
8027
|
+
"z-index": "50",
|
|
8028
|
+
"cursor": "ew-resize !important"
|
|
8029
|
+
},
|
|
8030
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8031
|
+
attrs: {
|
|
8032
|
+
"x": "0",
|
|
8033
|
+
"y": "0",
|
|
8034
|
+
"width": 12,
|
|
8035
|
+
"height": _vm.task.height
|
|
8036
|
+
},
|
|
8037
|
+
on: {
|
|
8038
|
+
"mousedown": function ($event) {
|
|
8039
|
+
$event.stopPropagation();
|
|
8040
|
+
return _vm.startDrag($event, 'start');
|
|
8041
|
+
},
|
|
8042
|
+
"touchstart": function ($event) {
|
|
8043
|
+
$event.stopPropagation();
|
|
8044
|
+
return _vm.startDrag($event, 'start');
|
|
8045
|
+
}
|
|
8046
|
+
}
|
|
8047
|
+
}), _c('rect', {
|
|
8048
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8049
|
+
staticStyle: {
|
|
8050
|
+
"pointer-events": "all",
|
|
8051
|
+
"z-index": "50",
|
|
8052
|
+
"cursor": "ew-resize !important"
|
|
8053
|
+
},
|
|
8054
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8055
|
+
attrs: {
|
|
8056
|
+
"x": _vm.task.width - 12,
|
|
8057
|
+
"y": "0",
|
|
8058
|
+
"width": 12,
|
|
8059
|
+
"height": _vm.task.height
|
|
8060
|
+
},
|
|
8061
|
+
on: {
|
|
8062
|
+
"mousedown": function ($event) {
|
|
8063
|
+
$event.stopPropagation();
|
|
8064
|
+
return _vm.startDrag($event, 'end');
|
|
8065
|
+
},
|
|
8066
|
+
"touchstart": function ($event) {
|
|
8067
|
+
$event.stopPropagation();
|
|
8068
|
+
return _vm.startDrag($event, 'end');
|
|
8069
|
+
}
|
|
8070
|
+
}
|
|
7022
8071
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
7023
8072
|
attrs: {
|
|
7024
8073
|
"task": _vm.task
|
|
7025
8074
|
}
|
|
7026
8075
|
}) : _vm._e()], 1);
|
|
7027
8076
|
};
|
|
7028
|
-
var
|
|
8077
|
+
var Subtaskvue_type_template_id_52219a35_staticRenderFns = [];
|
|
7029
8078
|
|
|
7030
8079
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
7031
8080
|
|
|
7032
8081
|
|
|
7033
8082
|
|
|
7034
8083
|
|
|
8084
|
+
|
|
7035
8085
|
/* harmony default export */ var Subtaskvue_type_script_lang_js = ({
|
|
7036
8086
|
name: 'Subtask',
|
|
7037
8087
|
components: {
|
|
@@ -7041,7 +8091,7 @@ var Subtaskvue_type_template_id_86599310_staticRenderFns = [];
|
|
|
7041
8091
|
},
|
|
7042
8092
|
inject: ['root'],
|
|
7043
8093
|
props: ['task'],
|
|
7044
|
-
mixins: [Task_mixin],
|
|
8094
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
7045
8095
|
data() {
|
|
7046
8096
|
return {};
|
|
7047
8097
|
},
|
|
@@ -7063,6 +8113,15 @@ var Subtaskvue_type_template_id_86599310_staticRenderFns = [];
|
|
|
7063
8113
|
const task = this.task;
|
|
7064
8114
|
return `0,0 ${task.width},0 ${task.width},${task.height} 0,${task.height}`;
|
|
7065
8115
|
},
|
|
8116
|
+
/**
|
|
8117
|
+
* Get points adjusted for viewBox
|
|
8118
|
+
*
|
|
8119
|
+
* @returns {string}
|
|
8120
|
+
*/
|
|
8121
|
+
getPointsAdjusted() {
|
|
8122
|
+
const task = this.task;
|
|
8123
|
+
return `8,0 ${task.width + 8},0 ${task.width + 8},${task.height} 8,${task.height}`;
|
|
8124
|
+
},
|
|
7066
8125
|
/**
|
|
7067
8126
|
* Should we display expander?
|
|
7068
8127
|
*
|
|
@@ -7087,8 +8146,8 @@ var Subtaskvue_type_template_id_86599310_staticRenderFns = [];
|
|
|
7087
8146
|
;
|
|
7088
8147
|
var Subtask_component = normalizeComponent(
|
|
7089
8148
|
Row_Subtaskvue_type_script_lang_js,
|
|
7090
|
-
|
|
7091
|
-
|
|
8149
|
+
Subtaskvue_type_template_id_52219a35_render,
|
|
8150
|
+
Subtaskvue_type_template_id_52219a35_staticRenderFns,
|
|
7092
8151
|
false,
|
|
7093
8152
|
null,
|
|
7094
8153
|
null,
|
|
@@ -7097,8 +8156,8 @@ var Subtask_component = normalizeComponent(
|
|
|
7097
8156
|
)
|
|
7098
8157
|
|
|
7099
8158
|
/* harmony default export */ var Subtask = (Subtask_component.exports);
|
|
7100
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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=
|
|
7101
|
-
var
|
|
8159
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
8160
|
+
var Storyvue_type_template_id_5d688d0c_render = function render() {
|
|
7102
8161
|
var _vm = this,
|
|
7103
8162
|
_c = _vm._self._c;
|
|
7104
8163
|
return _c('g', {
|
|
@@ -7135,11 +8194,11 @@ var Storyvue_type_template_id_1f59b61a_render = function render() {
|
|
|
7135
8194
|
..._vm.task.style['chart-row-bar']
|
|
7136
8195
|
},
|
|
7137
8196
|
attrs: {
|
|
7138
|
-
"x": _vm.task.x,
|
|
8197
|
+
"x": _vm.task.x - 8,
|
|
7139
8198
|
"y": _vm.task.y,
|
|
7140
|
-
"width": _vm.task.width,
|
|
8199
|
+
"width": _vm.task.width + 16,
|
|
7141
8200
|
"height": _vm.task.height,
|
|
7142
|
-
"viewBox":
|
|
8201
|
+
"viewBox": `-8 0 ${_vm.task.width + 16} ${_vm.task.height}`,
|
|
7143
8202
|
"xmlns": "http://www.w3.org/2000/svg"
|
|
7144
8203
|
},
|
|
7145
8204
|
on: {
|
|
@@ -7194,26 +8253,83 @@ var Storyvue_type_template_id_1f59b61a_render = function render() {
|
|
|
7194
8253
|
..._vm.task.style['chart-row-bar-polygon']
|
|
7195
8254
|
},
|
|
7196
8255
|
attrs: {
|
|
7197
|
-
"d": _vm.
|
|
8256
|
+
"d": _vm.getPointsAdjusted
|
|
8257
|
+
},
|
|
8258
|
+
on: {
|
|
8259
|
+
"mousedown": function ($event) {
|
|
8260
|
+
return _vm.startDrag($event, 'move');
|
|
8261
|
+
},
|
|
8262
|
+
"touchstart": function ($event) {
|
|
8263
|
+
return _vm.startDrag($event, 'move');
|
|
8264
|
+
}
|
|
7198
8265
|
}
|
|
7199
8266
|
}), _c('progress-bar', {
|
|
7200
8267
|
attrs: {
|
|
7201
8268
|
"task": _vm.task,
|
|
7202
8269
|
"clip-path": 'url(#' + _vm.clipPathId + ')'
|
|
7203
8270
|
}
|
|
8271
|
+
}), _c('rect', {
|
|
8272
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8273
|
+
staticStyle: {
|
|
8274
|
+
"pointer-events": "all",
|
|
8275
|
+
"z-index": "50",
|
|
8276
|
+
"cursor": "ew-resize !important"
|
|
8277
|
+
},
|
|
8278
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8279
|
+
attrs: {
|
|
8280
|
+
"x": "0",
|
|
8281
|
+
"y": "0",
|
|
8282
|
+
"width": 12,
|
|
8283
|
+
"height": _vm.task.height
|
|
8284
|
+
},
|
|
8285
|
+
on: {
|
|
8286
|
+
"mousedown": function ($event) {
|
|
8287
|
+
$event.stopPropagation();
|
|
8288
|
+
return _vm.startDrag($event, 'start');
|
|
8289
|
+
},
|
|
8290
|
+
"touchstart": function ($event) {
|
|
8291
|
+
$event.stopPropagation();
|
|
8292
|
+
return _vm.startDrag($event, 'start');
|
|
8293
|
+
}
|
|
8294
|
+
}
|
|
8295
|
+
}), _c('rect', {
|
|
8296
|
+
staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
|
|
8297
|
+
staticStyle: {
|
|
8298
|
+
"pointer-events": "all",
|
|
8299
|
+
"z-index": "50",
|
|
8300
|
+
"cursor": "ew-resize !important"
|
|
8301
|
+
},
|
|
8302
|
+
style: _vm.root.style['chart-row-extend-handle'],
|
|
8303
|
+
attrs: {
|
|
8304
|
+
"x": _vm.task.width - 12,
|
|
8305
|
+
"y": "0",
|
|
8306
|
+
"width": 12,
|
|
8307
|
+
"height": _vm.task.height
|
|
8308
|
+
},
|
|
8309
|
+
on: {
|
|
8310
|
+
"mousedown": function ($event) {
|
|
8311
|
+
$event.stopPropagation();
|
|
8312
|
+
return _vm.startDrag($event, 'end');
|
|
8313
|
+
},
|
|
8314
|
+
"touchstart": function ($event) {
|
|
8315
|
+
$event.stopPropagation();
|
|
8316
|
+
return _vm.startDrag($event, 'end');
|
|
8317
|
+
}
|
|
8318
|
+
}
|
|
7204
8319
|
})], 1), _vm.root.state.options.chart.text.display ? _c('chart-text', {
|
|
7205
8320
|
attrs: {
|
|
7206
8321
|
"task": _vm.task
|
|
7207
8322
|
}
|
|
7208
8323
|
}) : _vm._e()], 1);
|
|
7209
8324
|
};
|
|
7210
|
-
var
|
|
8325
|
+
var Storyvue_type_template_id_5d688d0c_staticRenderFns = [];
|
|
7211
8326
|
|
|
7212
8327
|
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
|
|
7213
8328
|
|
|
7214
8329
|
|
|
7215
8330
|
|
|
7216
8331
|
|
|
8332
|
+
|
|
7217
8333
|
/* harmony default export */ var Storyvue_type_script_lang_js = ({
|
|
7218
8334
|
name: 'Story',
|
|
7219
8335
|
components: {
|
|
@@ -7223,7 +8339,7 @@ var Storyvue_type_template_id_1f59b61a_staticRenderFns = [];
|
|
|
7223
8339
|
},
|
|
7224
8340
|
inject: ['root'],
|
|
7225
8341
|
props: ['task'],
|
|
7226
|
-
mixins: [Task_mixin],
|
|
8342
|
+
mixins: [Task_mixin, Draggable_mixin],
|
|
7227
8343
|
data() {
|
|
7228
8344
|
return {};
|
|
7229
8345
|
},
|
|
@@ -7255,6 +8371,25 @@ var Storyvue_type_template_id_1f59b61a_staticRenderFns = [];
|
|
|
7255
8371
|
Q 0 0 ${corner} 0
|
|
7256
8372
|
Z`;
|
|
7257
8373
|
},
|
|
8374
|
+
/**
|
|
8375
|
+
* Get points adjusted for viewBox
|
|
8376
|
+
*
|
|
8377
|
+
* @returns {string}
|
|
8378
|
+
*/
|
|
8379
|
+
getPointsAdjusted() {
|
|
8380
|
+
const task = this.task;
|
|
8381
|
+
const corner = Math.min(task.height / 4, 8); // Rounded corners
|
|
8382
|
+
return `M ${8 + corner},0
|
|
8383
|
+
L ${8 + task.width - corner} 0
|
|
8384
|
+
Q ${8 + task.width} 0 ${8 + task.width} ${corner}
|
|
8385
|
+
L ${8 + task.width} ${task.height - corner}
|
|
8386
|
+
Q ${8 + task.width} ${task.height} ${8 + task.width - corner} ${task.height}
|
|
8387
|
+
L ${8 + corner} ${task.height}
|
|
8388
|
+
Q ${8} ${task.height} ${8} ${task.height - corner}
|
|
8389
|
+
L ${8} ${corner}
|
|
8390
|
+
Q ${8} 0 ${8 + corner} 0
|
|
8391
|
+
Z`;
|
|
8392
|
+
},
|
|
7258
8393
|
/**
|
|
7259
8394
|
* Should we display expander?
|
|
7260
8395
|
*
|
|
@@ -7279,8 +8414,8 @@ var Storyvue_type_template_id_1f59b61a_staticRenderFns = [];
|
|
|
7279
8414
|
;
|
|
7280
8415
|
var Story_component = normalizeComponent(
|
|
7281
8416
|
Row_Storyvue_type_script_lang_js,
|
|
7282
|
-
|
|
7283
|
-
|
|
8417
|
+
Storyvue_type_template_id_5d688d0c_render,
|
|
8418
|
+
Storyvue_type_template_id_5d688d0c_staticRenderFns,
|
|
7284
8419
|
false,
|
|
7285
8420
|
null,
|
|
7286
8421
|
null,
|
|
@@ -7330,6 +8465,43 @@ var Story_component = normalizeComponent(
|
|
|
7330
8465
|
this.root.state.refs.chartGraph = this.$refs.chartGraph;
|
|
7331
8466
|
this.root.state.refs.chartGraphSvg = this.$refs.chartGraphSvg;
|
|
7332
8467
|
},
|
|
8468
|
+
methods: {
|
|
8469
|
+
/**
|
|
8470
|
+
* Handle task updated event
|
|
8471
|
+
*
|
|
8472
|
+
* @param {Object} updatedTask - Updated task data
|
|
8473
|
+
*/
|
|
8474
|
+
handleTaskUpdated(updatedTask) {
|
|
8475
|
+
// Emit event to parent component
|
|
8476
|
+
console.log("task-updated --Chart");
|
|
8477
|
+
this.$emit('task-updated', updatedTask);
|
|
8478
|
+
|
|
8479
|
+
// Update the task in the root state
|
|
8480
|
+
const taskIndex = this.root.state.tasks.findIndex(task => task.id === updatedTask.id);
|
|
8481
|
+
if (taskIndex !== -1) {
|
|
8482
|
+
// Update task data
|
|
8483
|
+
this.root.state.tasks[taskIndex].startTime = updatedTask.startTime;
|
|
8484
|
+
this.root.state.tasks[taskIndex].endTime = updatedTask.endTime;
|
|
8485
|
+
this.root.state.tasks[taskIndex].duration = updatedTask.duration;
|
|
8486
|
+
|
|
8487
|
+
// Update task position and width
|
|
8488
|
+
if (this.root && this.root.timeToPixelOffsetX) {
|
|
8489
|
+
this.root.state.tasks[taskIndex].x = this.root.timeToPixelOffsetX(updatedTask.startTime);
|
|
8490
|
+
this.root.state.tasks[taskIndex].width = this.root.timeToPixelOffsetX(updatedTask.endTime) - this.root.state.tasks[taskIndex].x;
|
|
8491
|
+
} else {
|
|
8492
|
+
// Fallback calculation if method is not available
|
|
8493
|
+
const timePerPixel = this.root.state.options.times.timePerPixel;
|
|
8494
|
+
if (timePerPixel > 0) {
|
|
8495
|
+
this.root.state.tasks[taskIndex].x = (updatedTask.startTime - this.root.state.options.times.firstTime) / timePerPixel;
|
|
8496
|
+
this.root.state.tasks[taskIndex].width = (updatedTask.endTime - updatedTask.startTime) / timePerPixel;
|
|
8497
|
+
}
|
|
8498
|
+
}
|
|
8499
|
+
|
|
8500
|
+
// Force update
|
|
8501
|
+
this.$forceUpdate();
|
|
8502
|
+
}
|
|
8503
|
+
}
|
|
8504
|
+
},
|
|
7333
8505
|
computed: {
|
|
7334
8506
|
/**
|
|
7335
8507
|
* Get view box
|
|
@@ -7353,8 +8525,8 @@ var Story_component = normalizeComponent(
|
|
|
7353
8525
|
;
|
|
7354
8526
|
var Chart_component = normalizeComponent(
|
|
7355
8527
|
Chart_Chartvue_type_script_lang_js,
|
|
7356
|
-
|
|
7357
|
-
|
|
8528
|
+
Chartvue_type_template_id_0856b85c_render,
|
|
8529
|
+
Chartvue_type_template_id_0856b85c_staticRenderFns,
|
|
7358
8530
|
false,
|
|
7359
8531
|
null,
|
|
7360
8532
|
null,
|
|
@@ -7443,6 +8615,16 @@ let ignoreScrollEvents = false;
|
|
|
7443
8615
|
}
|
|
7444
8616
|
},
|
|
7445
8617
|
methods: {
|
|
8618
|
+
/**
|
|
8619
|
+
* Handle task updated event from chart
|
|
8620
|
+
*
|
|
8621
|
+
* @param {Object} updatedTask - Updated task data
|
|
8622
|
+
*/
|
|
8623
|
+
handleTaskUpdated(updatedTask) {
|
|
8624
|
+
// Emit event to parent component
|
|
8625
|
+
console.log("task-updated --MainView");
|
|
8626
|
+
this.$emit('task-updated', updatedTask);
|
|
8627
|
+
},
|
|
7446
8628
|
/**
|
|
7447
8629
|
* Emit event when mouse is moving inside main view
|
|
7448
8630
|
*/
|
|
@@ -7559,8 +8741,8 @@ let ignoreScrollEvents = false;
|
|
|
7559
8741
|
;
|
|
7560
8742
|
var MainView_component = normalizeComponent(
|
|
7561
8743
|
components_MainViewvue_type_script_lang_js,
|
|
7562
|
-
|
|
7563
|
-
|
|
8744
|
+
MainViewvue_type_template_id_79e1eba9_render,
|
|
8745
|
+
MainViewvue_type_template_id_79e1eba9_staticRenderFns,
|
|
7564
8746
|
false,
|
|
7565
8747
|
null,
|
|
7566
8748
|
null,
|
|
@@ -7883,6 +9065,192 @@ function getStyle(fontSize = '12px', fontFamily = 'Arial, sans-serif') {
|
|
|
7883
9065
|
'text-overflow': 'ellipsis',
|
|
7884
9066
|
'max-width': '120px'
|
|
7885
9067
|
},
|
|
9068
|
+
'chart-row-resize-handle': {
|
|
9069
|
+
fill: 'rgba(59, 130, 246, 0.2)',
|
|
9070
|
+
stroke: 'rgba(59, 130, 246, 0.8)',
|
|
9071
|
+
'stroke-width': '2',
|
|
9072
|
+
cursor: 'ew-resize',
|
|
9073
|
+
opacity: '0.3',
|
|
9074
|
+
transition: 'opacity 0.2s ease',
|
|
9075
|
+
'pointer-events': 'all'
|
|
9076
|
+
},
|
|
9077
|
+
'chart-row-resize-handle--start': {
|
|
9078
|
+
cursor: 'w-resize',
|
|
9079
|
+
fill: 'rgba(34, 197, 94, 0.3)',
|
|
9080
|
+
stroke: 'rgba(34, 197, 94, 0.9)',
|
|
9081
|
+
'stroke-width': '2'
|
|
9082
|
+
},
|
|
9083
|
+
'chart-row-resize-handle--end': {
|
|
9084
|
+
cursor: 'e-resize',
|
|
9085
|
+
fill: 'rgba(239, 68, 68, 0.4)',
|
|
9086
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9087
|
+
'stroke-width': '2'
|
|
9088
|
+
},
|
|
9089
|
+
'chart-row-bar-wrapper:hover .chart-row-resize-handle': {
|
|
9090
|
+
opacity: '0.8'
|
|
9091
|
+
},
|
|
9092
|
+
'chart-row-resize-handle:hover': {
|
|
9093
|
+
opacity: '1',
|
|
9094
|
+
fill: 'rgba(59, 130, 246, 0.4)',
|
|
9095
|
+
stroke: 'rgba(59, 130, 246, 1)'
|
|
9096
|
+
},
|
|
9097
|
+
'chart-row-resize-handle--start:hover': {
|
|
9098
|
+
fill: 'rgba(34, 197, 94, 0.4)',
|
|
9099
|
+
stroke: 'rgba(34, 197, 94, 1)'
|
|
9100
|
+
},
|
|
9101
|
+
'chart-row-resize-handle--end:hover': {
|
|
9102
|
+
fill: 'rgba(239, 68, 68, 0.5)',
|
|
9103
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9104
|
+
'stroke-width': '3'
|
|
9105
|
+
},
|
|
9106
|
+
'chart-row-resize-handle--corner': {
|
|
9107
|
+
fill: 'rgba(147, 51, 234, 0.6)',
|
|
9108
|
+
stroke: 'rgba(147, 51, 234, 1)',
|
|
9109
|
+
'stroke-width': '2',
|
|
9110
|
+
cursor: 'nw-resize',
|
|
9111
|
+
opacity: '0.9',
|
|
9112
|
+
transition: 'opacity 0.2s ease',
|
|
9113
|
+
'pointer-events': 'all'
|
|
9114
|
+
},
|
|
9115
|
+
'chart-row-resize-handle--corner:hover': {
|
|
9116
|
+
fill: 'rgba(147, 51, 234, 0.8)',
|
|
9117
|
+
stroke: 'rgba(147, 51, 234, 1)',
|
|
9118
|
+
'stroke-width': '3',
|
|
9119
|
+
opacity: '1'
|
|
9120
|
+
},
|
|
9121
|
+
'chart-row-resize-handle--corner--start': {
|
|
9122
|
+
fill: 'rgba(34, 197, 94, 0.7)',
|
|
9123
|
+
stroke: 'rgba(34, 197, 94, 1)',
|
|
9124
|
+
'stroke-width': '2',
|
|
9125
|
+
cursor: 'w-resize'
|
|
9126
|
+
},
|
|
9127
|
+
'chart-row-resize-handle--corner--end': {
|
|
9128
|
+
fill: 'rgba(239, 68, 68, 0.7)',
|
|
9129
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9130
|
+
'stroke-width': '2',
|
|
9131
|
+
cursor: 'e-resize'
|
|
9132
|
+
},
|
|
9133
|
+
'chart-row-corner-handle--start': {
|
|
9134
|
+
fill: 'rgba(34, 197, 94, 0.8)',
|
|
9135
|
+
stroke: 'rgba(34, 197, 94, 1)',
|
|
9136
|
+
'stroke-width': '2',
|
|
9137
|
+
cursor: 'w-resize',
|
|
9138
|
+
opacity: '0.9',
|
|
9139
|
+
transition: 'opacity 0.2s ease',
|
|
9140
|
+
'pointer-events': 'all'
|
|
9141
|
+
},
|
|
9142
|
+
'chart-row-corner-handle--end': {
|
|
9143
|
+
fill: 'rgba(239, 68, 68, 0.8)',
|
|
9144
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9145
|
+
'stroke-width': '2',
|
|
9146
|
+
cursor: 'e-resize',
|
|
9147
|
+
opacity: '0.9',
|
|
9148
|
+
transition: 'opacity 0.2s ease',
|
|
9149
|
+
'pointer-events': 'all'
|
|
9150
|
+
},
|
|
9151
|
+
'chart-row-corner-handle--start:hover': {
|
|
9152
|
+
fill: 'rgba(34, 197, 94, 0.5)',
|
|
9153
|
+
stroke: 'rgba(34, 197, 94, 1)',
|
|
9154
|
+
'stroke-width': '2',
|
|
9155
|
+
opacity: '0.9'
|
|
9156
|
+
},
|
|
9157
|
+
'chart-row-corner-handle--end:hover': {
|
|
9158
|
+
fill: 'rgba(239, 68, 68, 0.5)',
|
|
9159
|
+
stroke: 'rgba(239, 68, 68, 1)',
|
|
9160
|
+
'stroke-width': '2',
|
|
9161
|
+
opacity: '0.9'
|
|
9162
|
+
},
|
|
9163
|
+
'chart-row-extend-handle': {
|
|
9164
|
+
fill: 'rgba(255, 255, 255, 0.1)',
|
|
9165
|
+
stroke: 'rgba(255, 255, 255, 0.3)',
|
|
9166
|
+
'stroke-width': '1',
|
|
9167
|
+
cursor: 'ew-resize',
|
|
9168
|
+
opacity: '0.3',
|
|
9169
|
+
transition: 'opacity 0.2s ease',
|
|
9170
|
+
'pointer-events': 'all',
|
|
9171
|
+
'z-index': '10'
|
|
9172
|
+
},
|
|
9173
|
+
'chart-row-extend-handle:hover': {
|
|
9174
|
+
fill: 'rgba(255, 255, 255, 0.2)',
|
|
9175
|
+
stroke: 'rgba(255, 255, 255, 0.6)',
|
|
9176
|
+
'stroke-width': '2',
|
|
9177
|
+
opacity: '0.8'
|
|
9178
|
+
},
|
|
9179
|
+
'chart-row-expand-icon-bg': {
|
|
9180
|
+
fill: 'rgba(255, 255, 255, 0.95)',
|
|
9181
|
+
stroke: 'rgba(0, 0, 0, 0.5)',
|
|
9182
|
+
'stroke-width': '1.5',
|
|
9183
|
+
cursor: 'ew-resize',
|
|
9184
|
+
opacity: '1',
|
|
9185
|
+
transition: 'opacity 0.2s ease',
|
|
9186
|
+
'pointer-events': 'all'
|
|
9187
|
+
},
|
|
9188
|
+
'chart-row-expand-icon-arrow': {
|
|
9189
|
+
fill: 'rgba(0, 0, 0, 0.9)',
|
|
9190
|
+
cursor: 'ew-resize',
|
|
9191
|
+
'pointer-events': 'all'
|
|
9192
|
+
},
|
|
9193
|
+
'chart-row-expand-icon:hover .gantt-elastic__chart-row-expand-icon-bg': {
|
|
9194
|
+
fill: 'rgba(255, 255, 255, 1)',
|
|
9195
|
+
stroke: 'rgba(0, 0, 0, 0.5)',
|
|
9196
|
+
'stroke-width': '1.5',
|
|
9197
|
+
opacity: '1'
|
|
9198
|
+
},
|
|
9199
|
+
'chart-row-expand-icon:hover .gantt-elastic__chart-row-expand-icon-arrow': {
|
|
9200
|
+
fill: 'rgba(0, 0, 0, 1)'
|
|
9201
|
+
},
|
|
9202
|
+
'gantt-elastic__task-dragging': {
|
|
9203
|
+
opacity: '0.8',
|
|
9204
|
+
'pointer-events': 'none',
|
|
9205
|
+
'filter': 'drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2))'
|
|
9206
|
+
},
|
|
9207
|
+
'gantt-elastic__task-dragging--start': {
|
|
9208
|
+
'border-left': '3px solid #22c55e',
|
|
9209
|
+
'box-shadow': 'inset 3px 0 0 #22c55e'
|
|
9210
|
+
},
|
|
9211
|
+
'gantt-elastic__task-dragging--end': {
|
|
9212
|
+
'border-right': '3px solid #ef4444',
|
|
9213
|
+
'box-shadow': 'inset -3px 0 0 #ef4444'
|
|
9214
|
+
},
|
|
9215
|
+
'gantt-elastic__task-dragging--move': {
|
|
9216
|
+
'border': '2px solid #3b82f6',
|
|
9217
|
+
'box-shadow': '0 0 0 2px rgba(59, 130, 246, 0.3)'
|
|
9218
|
+
},
|
|
9219
|
+
'gantt-elastic__context-menu': {
|
|
9220
|
+
'position': 'fixed',
|
|
9221
|
+
'background': 'white',
|
|
9222
|
+
'border': '1px solid #e5e7eb',
|
|
9223
|
+
'border-radius': '6px',
|
|
9224
|
+
'box-shadow': '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
|
|
9225
|
+
'z-index': '1000',
|
|
9226
|
+
'min-width': '150px',
|
|
9227
|
+
'padding': '4px 0',
|
|
9228
|
+
'font-family': 'system-ui, -apple-system, sans-serif'
|
|
9229
|
+
},
|
|
9230
|
+
'gantt-elastic__context-menu-item': {
|
|
9231
|
+
'padding': '8px 16px',
|
|
9232
|
+
'cursor': 'pointer',
|
|
9233
|
+
'font-size': '14px',
|
|
9234
|
+
'color': '#374151',
|
|
9235
|
+
'transition': 'background-color 0.2s',
|
|
9236
|
+
'user-select': 'none'
|
|
9237
|
+
},
|
|
9238
|
+
'gantt-elastic__context-menu-item:hover': {
|
|
9239
|
+
'background-color': '#f3f4f6'
|
|
9240
|
+
},
|
|
9241
|
+
'gantt-elastic__date-tooltip': {
|
|
9242
|
+
'position': 'fixed',
|
|
9243
|
+
'background': 'rgba(0, 0, 0, 0.8)',
|
|
9244
|
+
'color': 'white',
|
|
9245
|
+
'padding': '4px 8px',
|
|
9246
|
+
'border-radius': '4px',
|
|
9247
|
+
'font-size': '12px',
|
|
9248
|
+
'font-family': 'system-ui, -apple-system, sans-serif',
|
|
9249
|
+
'pointer-events': 'none',
|
|
9250
|
+
'z-index': '10000',
|
|
9251
|
+
'white-space': 'nowrap',
|
|
9252
|
+
'box-shadow': '0 2px 4px rgba(0, 0, 0, 0.2)'
|
|
9253
|
+
},
|
|
7886
9254
|
'chart-row-text-content--text': {},
|
|
7887
9255
|
'chart-row-text-content--html': {},
|
|
7888
9256
|
'chart-row-wrapper': {},
|
|
@@ -10056,6 +11424,15 @@ const GanttElastic = {
|
|
|
10056
11424
|
}
|
|
10057
11425
|
}
|
|
10058
11426
|
|
|
11427
|
+
// Emit event to parent component
|
|
11428
|
+
this.$emit('view-mode-changed', mode);
|
|
11429
|
+
|
|
11430
|
+
// Also emit to root for plugin usage
|
|
11431
|
+
this.$root.$emit('gantt-view-mode-changed', mode);
|
|
11432
|
+
|
|
11433
|
+
// Log the view mode change for debugging
|
|
11434
|
+
console.log('View mode changed - from GanttElastic:', mode);
|
|
11435
|
+
|
|
10059
11436
|
// Force recalculation by triggering a reactive update
|
|
10060
11437
|
this.$nextTick(() => {
|
|
10061
11438
|
this.$forceUpdate();
|
|
@@ -10074,6 +11451,20 @@ const GanttElastic = {
|
|
|
10074
11451
|
}
|
|
10075
11452
|
});
|
|
10076
11453
|
},
|
|
11454
|
+
/**
|
|
11455
|
+
* Handle task updated event from dragging
|
|
11456
|
+
*
|
|
11457
|
+
* @param {Object} updatedTask - Updated task data
|
|
11458
|
+
*/
|
|
11459
|
+
handleTaskUpdated(updatedTask) {
|
|
11460
|
+
// Emit event to parent component
|
|
11461
|
+
console.log('Task updated -- GanttElastic:');
|
|
11462
|
+
this.$emit('task-updated', updatedTask);
|
|
11463
|
+
this.$emit('gantt-task-updated', updatedTask);
|
|
11464
|
+
|
|
11465
|
+
// Also emit to root for plugin usage
|
|
11466
|
+
this.$root.$emit('gantt-task-updated', updatedTask);
|
|
11467
|
+
},
|
|
10077
11468
|
/**
|
|
10078
11469
|
* Calculate height of scrollbar in current browser
|
|
10079
11470
|
*
|
|
@@ -10426,7 +11817,18 @@ const GanttElastic = {
|
|
|
10426
11817
|
* @returns {number}
|
|
10427
11818
|
*/
|
|
10428
11819
|
getHeight(visibleTasks, outer = false) {
|
|
10429
|
-
let height
|
|
11820
|
+
let height;
|
|
11821
|
+
|
|
11822
|
+
// If we have tasks, use their actual height for full grid
|
|
11823
|
+
if (visibleTasks.length > 0) {
|
|
11824
|
+
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;
|
|
11825
|
+
} else {
|
|
11826
|
+
// If no tasks, use 70% of viewport height for empty state
|
|
11827
|
+
const viewportHeight = window.innerHeight;
|
|
11828
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
11829
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
11830
|
+
height = Math.max(availableHeight, 300); // Minimum 300px height
|
|
11831
|
+
}
|
|
10430
11832
|
if (outer) {
|
|
10431
11833
|
height += this.state.options.scrollBarHeight;
|
|
10432
11834
|
}
|
|
@@ -10449,7 +11851,20 @@ const GanttElastic = {
|
|
|
10449
11851
|
* @returns {number}
|
|
10450
11852
|
*/
|
|
10451
11853
|
getTasksHeight(visibleTasks) {
|
|
10452
|
-
|
|
11854
|
+
const taskHeight = visibleTasks.length * this.getTaskHeight();
|
|
11855
|
+
|
|
11856
|
+
// If we have tasks, use their actual height for full grid
|
|
11857
|
+
if (visibleTasks.length > 0) {
|
|
11858
|
+
return taskHeight;
|
|
11859
|
+
}
|
|
11860
|
+
|
|
11861
|
+
// If no tasks, use 70% of viewport height for empty state
|
|
11862
|
+
const viewportHeight = window.innerHeight;
|
|
11863
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
11864
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
11865
|
+
const reducedHeight = Math.max(availableHeight, 300); // Minimum 300px height
|
|
11866
|
+
|
|
11867
|
+
return reducedHeight;
|
|
10453
11868
|
},
|
|
10454
11869
|
/**
|
|
10455
11870
|
* Convert time (in milliseconds) to pixel offset inside chart
|
|
@@ -10756,15 +12171,15 @@ const GanttElastic = {
|
|
|
10756
12171
|
getMaxWidthMultiplier(stepDuration, stepCount) {
|
|
10757
12172
|
const clientWidth = this.state.options.clientWidth;
|
|
10758
12173
|
|
|
10759
|
-
// Base multipliers for different screen sizes
|
|
12174
|
+
// Base multipliers for different screen sizes (reduced for better balance)
|
|
10760
12175
|
const baseMultipliers = {
|
|
10761
|
-
mobile:
|
|
10762
|
-
//
|
|
10763
|
-
tablet:
|
|
10764
|
-
//
|
|
10765
|
-
desktopSmall:
|
|
10766
|
-
//
|
|
10767
|
-
desktopBig:
|
|
12176
|
+
mobile: 1.5,
|
|
12177
|
+
// 1.5x viewport width on mobile
|
|
12178
|
+
tablet: 1.8,
|
|
12179
|
+
// 1.8x viewport width on tablet
|
|
12180
|
+
desktopSmall: 2.2,
|
|
12181
|
+
// 2.2x viewport width on small desktop
|
|
12182
|
+
desktopBig: 2.5 // 2.5x viewport width on big desktop
|
|
10768
12183
|
};
|
|
10769
12184
|
|
|
10770
12185
|
// Determine screen size
|
|
@@ -10791,7 +12206,7 @@ const GanttElastic = {
|
|
|
10791
12206
|
// If we have more data than minimum visibility, allow more width
|
|
10792
12207
|
if (stepCount > minVisibilitySteps[stepDuration]) {
|
|
10793
12208
|
const dataRatio = stepCount / minVisibilitySteps[stepDuration];
|
|
10794
|
-
multiplier = Math.min(multiplier * (1 + dataRatio * 0.
|
|
12209
|
+
multiplier = Math.min(multiplier * (1 + dataRatio * 0.3), 3); // Max 3x viewport width
|
|
10795
12210
|
}
|
|
10796
12211
|
return multiplier;
|
|
10797
12212
|
},
|
|
@@ -10892,7 +12307,7 @@ const GanttElastic = {
|
|
|
10892
12307
|
const maxWidth = this.state.options.clientWidth * maxWidthMultiplier;
|
|
10893
12308
|
|
|
10894
12309
|
// Ensure minimum width for scrolling when we have minimum visibility requirements
|
|
10895
|
-
const minWidthForScrolling = this.state.options.clientWidth * 1.
|
|
12310
|
+
const minWidthForScrolling = this.state.options.clientWidth * 1.1; // 10% more than viewport
|
|
10896
12311
|
const finalWidth = Math.max(calculatedWidth, minWidthForScrolling);
|
|
10897
12312
|
if (finalWidth > maxWidth) {
|
|
10898
12313
|
// Only limit width if it's truly excessive
|
|
@@ -11182,6 +12597,29 @@ const GanttElastic = {
|
|
|
11182
12597
|
width: 0
|
|
11183
12598
|
}).width;
|
|
11184
12599
|
},
|
|
12600
|
+
/**
|
|
12601
|
+
* Recalculate height based on current tasks and viewport
|
|
12602
|
+
*/
|
|
12603
|
+
recalculateHeight() {
|
|
12604
|
+
const visibleTasks = this.state.tasks.filter(task => this.isTaskVisible(task));
|
|
12605
|
+
if (visibleTasks.length > 0) {
|
|
12606
|
+
// Use full task height for complete grid
|
|
12607
|
+
this.state.options.rowsHeight = this.getTasksHeight(visibleTasks);
|
|
12608
|
+
this.state.options.height = this.getHeight(visibleTasks);
|
|
12609
|
+
this.state.options.allVisibleTasksHeight = this.getTasksHeight(visibleTasks);
|
|
12610
|
+
this.state.options.outerHeight = this.getHeight(visibleTasks, true);
|
|
12611
|
+
} else {
|
|
12612
|
+
// Use reduced viewport height for empty state
|
|
12613
|
+
const viewportHeight = window.innerHeight;
|
|
12614
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12615
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40;
|
|
12616
|
+
const reducedHeight = Math.max(availableHeight, 300);
|
|
12617
|
+
this.state.options.rowsHeight = reducedHeight;
|
|
12618
|
+
this.state.options.height = reducedHeight + this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12619
|
+
this.state.options.allVisibleTasksHeight = reducedHeight;
|
|
12620
|
+
this.state.options.outerHeight = this.state.options.height + this.state.options.scrollBarHeight;
|
|
12621
|
+
}
|
|
12622
|
+
},
|
|
11185
12623
|
/**
|
|
11186
12624
|
* Global resize event (from window.addEventListener)
|
|
11187
12625
|
*/
|
|
@@ -11190,6 +12628,15 @@ const GanttElastic = {
|
|
|
11190
12628
|
return;
|
|
11191
12629
|
}
|
|
11192
12630
|
this.state.options.clientWidth = this.$el.clientWidth;
|
|
12631
|
+
|
|
12632
|
+
// Only set height if no tasks are present (let visibleTasks computed property handle height when tasks exist)
|
|
12633
|
+
if (this.state.tasks.length === 0) {
|
|
12634
|
+
// Set height to 70% of viewport height for better balance when no tasks
|
|
12635
|
+
const viewportHeight = window.innerHeight;
|
|
12636
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12637
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40; // 70% of viewport, 40px for padding/margins
|
|
12638
|
+
this.state.options.height = Math.max(availableHeight, 300); // Minimum 300px height
|
|
12639
|
+
}
|
|
11193
12640
|
if (this.state.options.taskList.widthFromPercentage > this.state.options.clientWidth / 100 * this.state.options.taskList.widthThreshold) {
|
|
11194
12641
|
const diff = this.state.options.taskList.widthFromPercentage - this.state.options.clientWidth / 100 * this.state.options.taskList.widthThreshold;
|
|
11195
12642
|
let diffPercent = 100 - diff / this.state.options.taskList.widthFromPercentage * 100;
|
|
@@ -11212,6 +12659,9 @@ const GanttElastic = {
|
|
|
11212
12659
|
this.computeCalendarWidths();
|
|
11213
12660
|
this.$emit('calendar-recalculate');
|
|
11214
12661
|
this.syncScrollTop();
|
|
12662
|
+
|
|
12663
|
+
// Recalculate height after resize
|
|
12664
|
+
this.recalculateHeight();
|
|
11215
12665
|
}
|
|
11216
12666
|
},
|
|
11217
12667
|
computed: {
|
|
@@ -11222,16 +12672,17 @@ const GanttElastic = {
|
|
|
11222
12672
|
*/
|
|
11223
12673
|
visibleTasks() {
|
|
11224
12674
|
const visibleTasks = this.state.tasks.filter(task => this.isTaskVisible(task));
|
|
11225
|
-
|
|
11226
|
-
|
|
12675
|
+
|
|
12676
|
+
// Use full visible tasks for height calculations to show complete grid
|
|
12677
|
+
this.state.options.rowsHeight = this.getTasksHeight(visibleTasks);
|
|
11227
12678
|
let heightCompensation = 0;
|
|
11228
12679
|
if (this.state.options.maxHeight && this.state.options.rowsHeight > this.state.options.maxHeight) {
|
|
11229
12680
|
heightCompensation = this.state.options.rowsHeight - this.state.options.maxHeight;
|
|
11230
12681
|
this.state.options.rowsHeight = this.state.options.maxHeight;
|
|
11231
12682
|
}
|
|
11232
|
-
this.state.options.height = this.getHeight(
|
|
12683
|
+
this.state.options.height = this.getHeight(visibleTasks) - heightCompensation;
|
|
11233
12684
|
this.state.options.allVisibleTasksHeight = this.getTasksHeight(visibleTasks);
|
|
11234
|
-
this.state.options.outerHeight = this.getHeight(
|
|
12685
|
+
this.state.options.outerHeight = this.getHeight(visibleTasks, true) - heightCompensation;
|
|
11235
12686
|
let len = visibleTasks.length;
|
|
11236
12687
|
for (let index = 0; index < len; index++) {
|
|
11237
12688
|
let task = visibleTasks[index];
|
|
@@ -11282,6 +12733,10 @@ const GanttElastic = {
|
|
|
11282
12733
|
if (notEqual) {
|
|
11283
12734
|
this.setup('tasks');
|
|
11284
12735
|
}
|
|
12736
|
+
// Recalculate height when tasks change
|
|
12737
|
+
this.$nextTick(() => {
|
|
12738
|
+
this.recalculateHeight();
|
|
12739
|
+
});
|
|
11285
12740
|
}, {
|
|
11286
12741
|
deep: true
|
|
11287
12742
|
});
|
|
@@ -11331,15 +12786,59 @@ const GanttElastic = {
|
|
|
11331
12786
|
*/
|
|
11332
12787
|
mounted() {
|
|
11333
12788
|
this.state.options.clientWidth = this.$el.clientWidth;
|
|
12789
|
+
|
|
12790
|
+
// Set initial height based on whether tasks exist
|
|
12791
|
+
if (this.state.tasks.length === 0) {
|
|
12792
|
+
const viewportHeight = window.innerHeight;
|
|
12793
|
+
const headerHeight = this.state.options.calendar.height + this.state.options.calendar.gap;
|
|
12794
|
+
const availableHeight = viewportHeight * 0.7 - headerHeight - 40;
|
|
12795
|
+
this.state.options.height = Math.max(availableHeight, 300);
|
|
12796
|
+
}
|
|
11334
12797
|
this.state.resizeObserver = new ResizeObserver_es((entries, observer) => {
|
|
11335
12798
|
this.globalOnResize();
|
|
11336
12799
|
});
|
|
11337
12800
|
this.state.resizeObserver.observe(this.$el.parentNode);
|
|
12801
|
+
|
|
12802
|
+
// Add window resize listener for full viewport responsiveness
|
|
12803
|
+
window.addEventListener('resize', this.globalOnResize);
|
|
11338
12804
|
this.globalOnResize();
|
|
12805
|
+
this.recalculateHeight();
|
|
11339
12806
|
this.$emit('ready', this);
|
|
11340
12807
|
this.$root.$emit('gantt-elastic-mounted', this);
|
|
11341
12808
|
this.$emit('mounted', this);
|
|
11342
12809
|
this.$root.$emit('gantt-elastic-ready', this);
|
|
12810
|
+
|
|
12811
|
+
// Expose methods for plugin usage
|
|
12812
|
+
this.$gantt = {
|
|
12813
|
+
onTaskUpdated: this.handleTaskUpdated,
|
|
12814
|
+
onViewModeChanged: this.onViewModeChanged,
|
|
12815
|
+
getTasks: () => this.state.tasks,
|
|
12816
|
+
updateTask: (taskId, updates) => {
|
|
12817
|
+
const taskIndex = this.state.tasks.findIndex(task => task.id === taskId);
|
|
12818
|
+
if (taskIndex !== -1) {
|
|
12819
|
+
Object.assign(this.state.tasks[taskIndex], updates);
|
|
12820
|
+
this.$forceUpdate();
|
|
12821
|
+
}
|
|
12822
|
+
}
|
|
12823
|
+
};
|
|
12824
|
+
|
|
12825
|
+
/*
|
|
12826
|
+
* PLUGIN USAGE EXAMPLE:
|
|
12827
|
+
*
|
|
12828
|
+
* // Listen to events when using as plugin:
|
|
12829
|
+
* this.$root.$on('gantt-task-updated', (updatedTask) => {
|
|
12830
|
+
* console.log('Task updated:', updatedTask);
|
|
12831
|
+
* });
|
|
12832
|
+
*
|
|
12833
|
+
* this.$root.$on('gantt-view-mode-changed', (mode) => {
|
|
12834
|
+
* console.log('View mode changed:', mode);
|
|
12835
|
+
* });
|
|
12836
|
+
*
|
|
12837
|
+
* // Access gantt methods:
|
|
12838
|
+
* const ganttInstance = this.$refs.ganttChart.$gantt;
|
|
12839
|
+
* ganttInstance.updateTask(1, { label: 'New Task Name' });
|
|
12840
|
+
* const tasks = ganttInstance.getTasks();
|
|
12841
|
+
*/
|
|
11343
12842
|
},
|
|
11344
12843
|
/**
|
|
11345
12844
|
* Emit event when data was changed and before update (you can cleanup dom events here for example)
|
|
@@ -11360,6 +12859,7 @@ const GanttElastic = {
|
|
|
11360
12859
|
*/
|
|
11361
12860
|
beforeDestroy() {
|
|
11362
12861
|
this.state.resizeObserver.unobserve(this.$el.parentNode);
|
|
12862
|
+
window.removeEventListener('resize', this.globalOnResize);
|
|
11363
12863
|
this.state.unwatchTasks();
|
|
11364
12864
|
this.state.unwatchOptions();
|
|
11365
12865
|
this.state.unwatchStyle();
|
|
@@ -11378,10 +12878,10 @@ const GanttElastic = {
|
|
|
11378
12878
|
/* harmony default export */ var GanttElasticvue_type_script_lang_js = (GanttElastic);
|
|
11379
12879
|
;// ./src/GanttElastic.vue?vue&type=script&lang=js
|
|
11380
12880
|
/* harmony default export */ var src_GanttElasticvue_type_script_lang_js = (GanttElasticvue_type_script_lang_js);
|
|
11381
|
-
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=style&index=0&id=
|
|
12881
|
+
;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.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
|
|
11382
12882
|
// extracted by mini-css-extract-plugin
|
|
11383
12883
|
|
|
11384
|
-
;// ./src/GanttElastic.vue?vue&type=style&index=0&id=
|
|
12884
|
+
;// ./src/GanttElastic.vue?vue&type=style&index=0&id=0a0b0d9f&prod&lang=css
|
|
11385
12885
|
|
|
11386
12886
|
;// ./src/GanttElastic.vue
|
|
11387
12887
|
|
|
@@ -11394,8 +12894,8 @@ const GanttElastic = {
|
|
|
11394
12894
|
|
|
11395
12895
|
var GanttElastic_component = normalizeComponent(
|
|
11396
12896
|
src_GanttElasticvue_type_script_lang_js,
|
|
11397
|
-
|
|
11398
|
-
|
|
12897
|
+
GanttElasticvue_type_template_id_0a0b0d9f_render,
|
|
12898
|
+
GanttElasticvue_type_template_id_0a0b0d9f_staticRenderFns,
|
|
11399
12899
|
false,
|
|
11400
12900
|
null,
|
|
11401
12901
|
null,
|