diff --git a/README.md b/README.md
index 559da24..352e0cc 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# dhtmlxGantt #
[](https://dhtmlx.com/)
-[](https://www.npmjs.com/package/dhtmlx-gantt)
+[](https://www.npmjs.com/package/dhtmlx-gantt)
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
[Getting started](#getting-started) | [Features](#features) | [License](#license) | [Useful links](#links) | [Follow us](#followus)
@@ -117,7 +117,7 @@ Resource management, critical path calculation, auto scheduling, and other enhan
## License ##
-dhtmlxGantt v.9.0.0 Standard
+dhtmlxGantt v.9.0.1 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
diff --git a/bower.json b/bower.json
index 9617f24..ededdc7 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "gantt",
- "version": "9.0.0",
+ "version": "9.0.1",
"homepage": "https://dhtmlx.com/docs/products/dhtmlxGantt/",
"description": "An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.",
"main": [
diff --git a/codebase/dhtmlxgantt.css b/codebase/dhtmlxgantt.css
index 624ecf4..1ca4d43 100644
--- a/codebase/dhtmlxgantt.css
+++ b/codebase/dhtmlxgantt.css
@@ -1 +1 @@
-@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuOKfMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuI6fMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuDyYMZg.ttf) format("truetype")}:root{--dhx-gantt-theme: terrace;--dhx-gantt-font-family: Inter, Helvetica, Arial, sans-serif;--dhx-gantt-font-size: 14px;--dhx-gantt-heading-font-size: calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-heading-font-weight: 600;--dhx-gantt-important-font-size: var(--dhx-gantt-font-size);--dhx-gantt-important-line-height: 142%;--dhx-gantt-important-font-weight: 500;--dhx-gantt-regular-font-size: var(--dhx-gantt-font-size);--dhx-gantt-regular-font-weight: 400;--dhx-gantt-regular-line-height: 142%;--dhx-gantt-caption-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-caption-font-weight: 400;--dhx-gantt-caption-line-height: 132%;--dhx-gantt-base-colors-white: #FFFFFF;--dhx-gantt-base-colors-select: #EFF3FF;--dhx-gantt-base-colors-hover-color: #e0e0e0;--dhx-gantt-base-colors-border-light: #F0F0F0;--dhx-gantt-base-colors-border: #DFE0E1;--dhx-gantt-base-colors-icons: #A1A4A6;--dhx-gantt-base-colors-icons-active: #8b8e90;--dhx-gantt-base-colors-icons-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 12.6%);--dhx-gantt-base-colors-icons-hover: #76787a;--dhx-gantt-base-colors-icons-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 28.5%);--dhx-gantt-base-colors-disabled: #E9E9E9;--dhx-gantt-base-colors-select: #E0E5F3;--dhx-gantt-base-colors-readonly: var(--dhx-gantt-base-colors-icons);--dhx-gantt-base-colors-text-light: #555D63;--dhx-gantt-base-colors-text-base: #23272A;--dhx-gantt-base-colors-text-on-fill: rgba(255, 255, 255, .9);--dhx-gantt-base-colors-background: #FFFFFF;--dhx-gantt-base-colors-background-alt: #F2F2F2;--dhx-gantt-base-colors-primary: #537CFA;--dhx-gantt-base-colors-primary-hover: #4269E0;--dhx-gantt-base-colors-primary-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000000 6%);--dhx-gantt-base-colors-primary-active: #3365fb;--dhx-gantt-base-colors-primary-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000000 16.6%);--dhx-gantt-base-colors-primary-lighter: #537cfa33;--dhx-gantt-base-colors-primary-lighter: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 20%, rgba(0, 0, 0, 0) 100%);--dhx-gantt-base-colors-warning: #FAB936;--dhx-gantt-base-colors-error: #E3334E;--dhx-gantt-base-colors-error-hover: #D3233E;--dhx-gantt-base-colors-error-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000000 6%);--dhx-gantt-base-colors-error-active: #C3132E;--dhx-gantt-base-colors-error-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000000 16.6%);--dhx-gantt-base-colors-error-lighter: #E3334E33;--dhx-gantt-base-colors-error-lighter: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 20%, rgba(0, 0, 0, 0) 100%);--dhx-gantt-base-colors-error-text: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-base-colors-success: #1BC297;--dhx-gantt-container-background: var(--dhx-gantt-base-colors-background);--dhx-gantt-container-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-offtime-background: var(--dhx-gantt-base-colors-background-alt);--dhx-gantt-scale-background: var(--dhx-gantt-container-background);--dhx-gantt-scale-border-vertical: 1px solid var(--dhx-gantt-base-colors-border-light);--dhx-gantt-scale-border-horizontal: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-grid-body-background: transparent;--dhx-gantt-grid-scale-background: var(--dhx-gantt-scale-background);--dhx-gantt-grid-scale-color: var(--dhx-gantt-scale-color);--dhx-gantt-grid-scale-border-vertical: var(--dhx-gantt-scale-border-vertical);--dhx-gantt-timeline-scale-background: var(--dhx-gantt-scale-background);--dhx-gantt-timeline-scale-color: var(--dhx-gantt-scale-color);--dhx-gantt-timeline-scale-border-vertical: var(--dhx-gantt-scale-border-vertical);--dhx-gantt-grid-cell-border: 1px solid transparent;--dhx-gantt-grid-row-border: var(--dhx-gantt-scale-border-horizontal);--dhx-gantt-base-transition: .2s ease;--dhx-gantt-box-shadow-s: 0px 4px 24px 0px rgba(44, 47, 60, .08);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-icon-size: 1.5em;--dhx-gantt-base-module: 4px;--dhx-gantt-base-padding: 4px;--dhx-gantt-border-radius: var(--dhx-gantt-base-module);--dhx-gantt-transition: all .3s;--dhx-gantt-default-border: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-header-border: var(--dhx-gantt-default-border);--dhx-gantt-task-blue: var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-green: #20B56D;--dhx-gantt-task-violet: #D071EF;--dhx-gantt-task-yellow: linear-gradient(180deg, #FFB725 0%, #FFBB25 31.25%, #FAEA27 100%);--dhx-gantt-baseline-background-0: #00B4FF;--dhx-gantt-baseline-background-1: #DF6DE3;--dhx-gantt-baseline-background-2: #FF957D;--dhx-gantt-baseline-background-3: #25C79D;--dhx-gantt-baseline-background-4: #FF6FB0;--dhx-gantt-baseline-background-5: #FFC470;--dhx-gantt-baseline-background-6: #FDE720;--dhx-gantt-baseline-background-7: #47AFD0;--dhx-gantt-baseline-background-8: #DA9DFF;--dhx-gantt-baseline-background-9: #BEE964;--dhx-gantt-task-font-size: var(--dhx-gantt-regular-font-size);--dhx-gantt-task-line-height: var(--dhx-gantt-regular-line-height);--dhx-gantt-task-font-weight: var(--dhx-gantt-regular-font-weight);--dhx-gantt-task-background-primary: var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-border-radius: var(--dhx-gantt-border-radius);--dhx-gantt-task-background: var(--dhx-gantt-task-blue);--dhx-gantt-task-border: none;--dhx-gantt-task-color: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-project-color: var(--dhx-gantt-task-color);--dhx-gantt-task-line-text: var(--dhx-gantt-container-color);--dhx-gantt-task-row-border: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-task-row-background: var(--dhx-gantt-container-background);--dhx-gantt-task-row-background--odd: var(--dhx-gantt-container-background);--dhx-gantt-task-progress-color: rgba(0, 0, 0, .15);--dhx-gantt-project-progress-color: var(--dhx-gantt-task-progress-color);--dhx-gantt-project-background: var(--dhx-gantt-task-green);--dhx-gantt-milestone-background: var(--dhx-gantt-task-violet);--dhx-gantt-task-marker-color: var(--dhx-gantt-task-background);--dhx-gantt-popup-background: var(--dhx-gantt-container-background);--dhx-gantt-popup-color: var(--dhx-gantt-container-color);--dhx-gantt-popup-border: none;--dhx-gantt-popup-border-radius: var(--dhx-gantt-border-radius);--dhx-gantt-tooltip-background: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-tooltip-color: var(--dhx-gantt-container-background);--dhx-gantt-tooltip-border: none;--dhx-gantt-tooltip-border-radius: var(--dhx-gantt-popup-border-radius);--dhx-gantt-link-background: var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-background-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-link-critical-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-link-handle-offset: 8px;--dhx-gantt-link-handle-size: 10px;--dhx-gantt-link-handle-border: var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-handle-border-hover: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-progress-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-progress-handle-background: var(--dhx-gantt-base-colors-icons);--dhx-gantt-progress-handle-background-hover: var(--dhx-gantt-base-colors-icons-hover);--dhx-gantt-control-height: 32px;--dhx-gantt-checkbox-height: 20px;--dhx-gantt-lightbox_font-family: var(--dhx-gantt-font-family);--dhx-gantt-lightbox-font-size: var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-font-weight: var(--dhx-gantt-important-font-weight);--dhx-gantt-lightbox-background: var(--dhx-gantt-popup-background);--dhx-gantt-lightbox-border: var(--dhx-gantt-popup-border);--dhx-gantt-lightbox-control-border: var(--dhx-gantt-default-border);--dhx-gantt-lightbox-color: var(--dhx-gantt-popup-color);--dhx-gantt-lightbox-padding: 12px;--dhx-gantt-lightbox-title-background: var(--dhx-gantt-base-colors-select);--dhx-gantt-lightbox-title-color: var(--dhx-gantt-lightbox-color);--dhx-gantt-lightbox-title-font-size: var(--dhx-gantt-heading-font-size);--dhx-gantt-lightbox-max-width: 622px;--dhx-gantt-lightbox-wide-max-width: 738px;--dhx-gantt-lightbox-width: max-content;--dhx-gantt-btn-order: row-reverse;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-outline-background: transparent;--dhx-gantt-btn-outline-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-border-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-background-hover: var(--dhx-gantt-base-colors-primary-lighter);--dhx-gantt-btn-outline-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-border-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-background-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-color-active: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-outline-border-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-background-disabled: transparent;--dhx-gantt-btn-outline-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-outline-border-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-text-transform: none;--dhx-gantt-info-background: var(--dhx-gantt-popup-background);--dhx-gantt-info-color: var(--dhx-gantt-popup-color);--dhx-gantt-info-border: var(--dhx-gantt-popup-border);--dhx-gantt-info-shadow: var(--dhx-gantt-box-shadow-m);--dhx-gantt-modal-background: var(--dhx-gantt-popup-background);--dhx-gantt-modal-color: var(--dhx-gantt-popup-color);--dhx-gantt-modal-border: var(--dhx-gantt-popup-border);--dhx-gantt-modal-padding: 16px;--dhx-gantt-modal-width: 320px;--dhx-gantt-modal-border-radius: var(--dhx-gantt-popup-border-radius);--dhx-gantt-undo-delete-background: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-undo-delete-color: var(--dhx-gantt-task-color)}:root[data-gantt-theme=dark]{--dhx-gantt-theme: dark;--dhx-gantt-base-colors-disabled: #3d3d3d;--dhx-gantt-base-colors-text-light: #AAA;--dhx-gantt-base-colors-text-base: rgba(255, 255, 255, .9);--dhx-gantt-base-colors-background: #141414;--dhx-gantt-base-colors-background-alt: #383838;--dhx-gantt-base-colors-border: #4B4B4B;--dhx-gantt-base-colors-border-light: #4B4B4B;--dhx-gantt-navline-font-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-base-colors-primary: #3B72F8;--dhx-gantt-base-colors-error: #EB284F;--dhx-gantt-base-colors-select: #2A2A2A;--dhx-gantt-base-colors-hover-color: #2A2A2A;--dhx-gantt-base-colors-icons: #AAAAAA;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #1B1B1C;--dhx-gantt-popup-border: 1px solid #4B4B4B;--dhx-gantt-btn-font-weight: 600;--dhx-gantt-undo-delete-background: var(--dhx-gantt-popup-background);--dhx-gantt-link-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-background)}:root[data-gantt-theme=meadow]{--dhx-gantt-theme: meadow;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-base-colors-select: #ffebbc;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-container-color: #3f3f3f;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-scale-background: #f4f2ea;--dhx-gantt-scale-color: #42464b;--dhx-gantt-task-color: #1e2022;--dhx-gantt-project-background: #c7d8f7;--dhx-gantt-milestone-background: #DB7DC5;--dhx-gantt-task-background: #e1ffd4;--dhx-gantt-task-border: 1px solid #3588c5;--dhx-gantt-task-progress-color: #a7d991;--dhx-gantt-project-progress-color: #9ab9f1;--dhx-gantt-link-background: #ffb96d;--dhx-gantt-lightbox-title-background: #f4f2ea;--dhx-gantt-popup-background: #fcfaf3;--dhx-gantt-popup-color: var(--dhx-gantt-container-color);--dhx-gantt-popup-border: 1px solid #cac8bd}:root[data-gantt-theme=skyblue]{--dhx-gantt-theme: skyblue;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-scale-background: #dfedff;--dhx-gantt-scale-color: #42464b;--dhx-gantt-task-color: #1e2022;--dhx-gantt-project-background: #eff6fb;--dhx-gantt-task-background: #eff6fb;--dhx-gantt-milestone-background: #DB7DC5;--dhx-gantt-task-border: 1px solid #3588c5;--dhx-gantt-task-progress-color: linear-gradient(0deg, #abcee8 0, #5aa0d3 36%, #bfdaee);--dhx-gantt-link-background: #4a8f43;--dhx-gantt-lightbox-title-background: #eff6fb}:root[data-gantt-theme=skyblue] .gantt_grid_scale,:root[data-gantt-theme=skyblue] .gantt_task_scale,:root[data-gantt-theme=skyblue] .gantt_task_vscroll{box-shadow:inset 0 1px 1px #fff;background-image:linear-gradient(to bottom,#e4f0ff,#dfedff,#d5e8ff)}:root[data-gantt-theme=broadway]{--dhx-gantt-theme: broadway;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-base-colors-select: #fff3a1;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-halfhour-border: 1px solid #e8e8e8;--dhx-gantt-task-title-font-size: 12px;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-grid-scale-background: #4f4f4f;--dhx-gantt-grid-scale-border-vertical: 1px solid #5b5b5b;--dhx-gantt-grid-scale-color: #e1e1e1;--dhx-gantt-timeline-scale-background: #dbdbdb;--dhx-gantt-timeline-scale-border-vertical: 1px solid #bababa;--dhx-gantt-timeline-scale-color: #494949;--dhx-gantt-grid-body-background: #dbdbdb;--dhx-gantt-task-color: #FFF;--dhx-gantt-link-background: #ffb96d;--dhx-gantt-project-background: #65c16f;--dhx-gantt-project-progress-color: #46ad51;--dhx-gantt-task-progress-color: #04a4f0;--dhx-gantt-task-background: #17b2fb;--dhx-gantt-milestone-background: #DB7DC5}:root[data-gantt-theme=broadway] .gantt_grid_data{--dhx-gantt-task-row-background: var(--dhx-gantt-grid-body-background);--dhx-gantt-task-row-background--odd: var(--dhx-gantt-grid-body-background)}:root[data-gantt-theme=material]{--dhx-gantt-theme: material;--dhx-gantt-font-family: Roboto, Inter, Helvetica, Arial, sans-serif;--dhx-gantt-base-colors-primary: #448aff;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-project-background: #1de9b6;--dhx-gantt-milestone-background: #ffc107;--dhx-gantt-task-progress-color: rgba(0, 0, 0, .2);--dhx-gantt-project-color: rgba(0, 0, 0, .6);--dhx-gantt-base-colors-border: #e0e0e0;--dhx-gantt-task-title-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-task-text-font-size: var(--dhx-gantt-font-size);--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 20px;--dhx-gantt-caption-font-size: var(--dhx-gantt-font-size);--dhx-gantt-caption-font-weight: 500;--dhx-gantt-btn-font-weight: 500;--dhx-gantt-heading-font-weight: 500;--dhx-gantt-hours-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-base-colors-text-base: rgba(0, 0, 0, .75);--dhx-gantt-base-transition: .15s ease;--dhx-gantt-header-border: 1px solid transparent;--dhx-gantt-scale-color: rgba(0, 0, 0, .54);--dhx-gantt-base-colors-select: rgba(0, 199, 181, .2);--dhx-gantt-base-colors-hover-color: var(--dhx-gantt-base-colors-select);--dhx-gantt-border-radius: 0;--dhx-gantt-task-border-radius: 18px;--dhx-gantt-btn-text-transform: uppercase;--dhx-gantt-btn-padding: 1px 20px 0;--dhx-gantt-link-handle-size: 16px;--dhx-gantt-progress-handle-background: #FFF;--dhx-gantt-progress-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-lightbox-title-background: var(--dhx-gantt-container-background);--dhx-gantt-lightbox-title-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-lightbox-title-font-size: calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-lightbox-padding: 30px;--dhx-gantt-lightbox-width: 610px;--dhx-gantt-lightbox-wide-max-width: 640px;--dhx-gantt-btn-order: row;--dhx-gantt-btn-outline-border-color: transparent;--dhx-gantt-btn-outline-border-hover: transparent;--dhx-gantt-btn-outline-border-active: transparent;--dhx-gantt-btn-outline-border-color-disabled: transparent}:root[data-gantt-theme=material] .dhx_cal_ltitle{font-weight:400;text-transform:uppercase;padding:18px var(--dhx-gantt-lightbox-padding) 8px;border-bottom-color:transparent}:root[data-gantt-theme=material] .gantt_grid .gantt_grid_scale .gantt_grid_head_cell,:root[data-gantt-theme=material] .gantt_task .gantt_task_scale .gantt_scale_cell{font-weight:500;text-transform:uppercase}:root[data-gantt-theme=material] .dhx_cal_ltitle_controls{--dhx-gantt-base-colors-icons: var(--dhx-gantt-lightbox-title-color)}:root[data-gantt-theme=material] .gantt_cal_lsection{margin-top:12px;margin-bottom:4px}:root[data-gantt-theme=material] .gantt_cal_ltitle{padding:18px var(--dhx-gantt-lightbox-padding);border-bottom-color:transparent}:root[data-gantt-theme=material] .gantt_cal_lcontrols{padding-bottom:40px;padding-top:30px}:root[data-gantt-theme=material] .gantt_add,:root[data-gantt-theme=material] .gantt_grid_head_add{--dhx-gantt-base-colors-icons: #70d0c2;--dhx-gantt-base-colors-icons-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 12.6%);--dhx-gantt-base-colors-icons-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 28.5%)}:root[data-gantt-theme=material] .gantt_grid_data .gantt_row,:root[data-gantt-theme=material] .gantt_grid_data .gantt_row.odd{transition:background var(--dhx-gantt-base-transition)}:root[data-gantt-theme=material] .gantt_grid_head_cell{transition:border-color ground var(--dhx-gantt-base-transition);border-right:1px solid transparent}:root[data-gantt-theme=material] .gantt_grid_scale:hover .gantt_grid_head_cell{border-right:var(--dhx-gantt-grid-scale-border-vertical)}:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap .gantt_grid_column_resize{transition:background var(--dhx-gantt-base-transition);background-color:transparent}:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap:hover .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border)}:root[data-gantt-theme=material] div.gantt_grid_scale:after,:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{content:"";width:100%;display:block;height:1px;background-color:transparent;position:absolute;box-shadow:0 1px 2px #0003,0 2px 3px #0000001a;z-index:1}:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{bottom:-1px}:root[data-gantt-theme=material] .gantt_link_control{--dhx-gantt-link-handle-border: var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background: #FFF;--dhx-gantt-link-handle-border-hover: var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background-hover: #FFF}:root[data-gantt-theme=material] .gantt_task_line.gantt_milestone{margin-top:-1px;--dhx-gantt-task-border-radius: 2px}:root[data-gantt-theme=contrast-white]{--dhx-gantt-theme: contrast-white;--dhx-gantt-base-colors-disabled: #C2C2C2;--dhx-gantt-base-colors-text-light: #303030;--dhx-gantt-base-colors-text-base: #303030;--dhx-gantt-base-colors-background: #FFFFFF;--dhx-gantt-base-colors-background-alt: #929292;--dhx-gantt-base-colors-border: #4D595B;--dhx-gantt-base-colors-border-light: #4D595B;--dhx-gantt-base-colors-text-on-fill: #FFF;--dhx-gantt-base-colors-primary: #0A47CD;--dhx-gantt-base-colors-text-on-fill: rgba(255, 255, 255, .9);--dhx-gantt-task-background: #0A47CD;--dhx-gantt-task-border: 1px solid rgba(0, 0, 0, .1);--dhx-gantt-base-colors-warning: #FCBA2E;--dhx-gantt-base-colors-success: #77D257;--dhx-gantt-base-colors-error: #ee3d31;--dhx-gantt-base-colors-error-text: #141414;--dhx-gantt-btn-color: #FFFFFF;--dhx-gantt-btn-color-hover: #FFFFFF;--dhx-gantt-btn-color-active: #FFFFFF;--dhx-gantt-base-colors-select: #E7E5E5;--dhx-gantt-base-colors-hover-color: #E7E5E5;--dhx-gantt-base-colors-icons: #303030;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #FFF;--dhx-gantt-popup-border: 1px solid #4D595B;--dhx-gantt-font-size: 16px;--dhx-gantt-heading-font-size: 24px;--dhx-gantt-important-font-size: 16px;--dhx-gantt-regular-font-size: 16px;--dhx-gantt-caption-font-size: 16px;--dhx-gantt-btn-outline-color-hover: #212121;--dhx-gantt-btn-outline-color-active: #FFFFFF}:root[data-gantt-theme=contrast-black]{--dhx-gantt-theme: contrast-black;--dhx-gantt-base-colors-disabled: #3d3d3d;--dhx-gantt-base-colors-text-light: #cfcfcf;--dhx-gantt-base-colors-text-base: #FFFFFF;--dhx-gantt-base-colors-background: #141414;--dhx-gantt-base-colors-background-alt: #4f4f4f;--dhx-gantt-base-colors-border: rgba(255, 255, 255, .8);--dhx-gantt-base-colors-border-light: rgba(255, 255, 255, .8);--dhx-gantt-base-colors-text-on-fill: #141414;--dhx-gantt-base-colors-primary: #A395FF;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-project-background: #77D257;--dhx-gantt-milestone-background: #FCBA2E;--dhx-gantt-task-background: #A395FF;--dhx-gantt-task-border: 1px solid rgba(0, 0, 0, .1);--dhx-gantt-base-colors-warning: #694E02;--dhx-gantt-base-colors-success: #115700;--dhx-gantt-base-colors-error: #FFA7A0;--dhx-gantt-base-colors-error-text: #141414;--dhx-gantt-base-colors-select: #2A2A2A;--dhx-gantt-base-colors-hover-color: #2A2A2A;--dhx-gantt-base-colors-icons: #AAAAAA;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #1B1B1C;--dhx-gantt-undo-delete-background: var(--dhx-gantt-popup-background);--dhx-gantt-undo-delete-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-popup-border: 1px solid #4B4B4B;--dhx-gantt-font-size: 16px;--dhx-gantt-heading-font-size: 24px;--dhx-gantt-important-font-size: 16px;--dhx-gantt-regular-font-size: 16px;--dhx-gantt-caption-font-size: 16px;--dhx-gantt-btn-outline-color-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-btn-outline-color-active: var(--dhx-gantt-base-colors-text-light)}.dhx_gantt_button--mixin{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px}.dhx_gantt_button--mixin:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_button--mixin:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_button--mixin:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.dhx_gantt_button_outline--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_danger_outline--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-lighter);--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-base-colors-icons)}.dhx_gantt_button_danger_link--mixin{--dhx-gantt-icon-size: 18px;padding:6px 0;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.dhx_gantt_button_link--mixin{padding:6px 0;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.dhx_gantt_button_icon--mixin{min-width:32px;height:32px;border-radius:50%;padding:6px 0;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.dhx_gantt_button_icon--mixin:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.dhx_gantt_button_icon--mixin:active{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-active)}.dhx_gantt_button_icon--mixin:disabled{--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color-disabled)}.dhx_gantt_btn,.dhx_gantt_btn_danger,.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline,.dhx_gantt_btn_danger_link,.gantt_qi_big_icon,.gantt_btn_set{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px}.dhx_gantt_btn:hover,.dhx_gantt_btn_danger:hover,.dhx_gantt_btn_outline:hover,.dhx_gantt_btn_danger_outline:hover,.dhx_gantt_btn_danger_link:hover,.gantt_qi_big_icon:hover,.gantt_btn_set:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_btn:active,.dhx_gantt_btn_danger:active,.dhx_gantt_btn_outline:active,.dhx_gantt_btn_danger_outline:active,.dhx_gantt_btn_danger_link:active,.gantt_qi_big_icon:active,.gantt_btn_set:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_btn:disabled,.dhx_gantt_btn_danger:disabled,.dhx_gantt_btn_outline:disabled,.dhx_gantt_btn_danger_outline:disabled,.dhx_gantt_btn_danger_link:disabled,.gantt_qi_big_icon:disabled,.gantt_btn_set:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px}.gantt_popup_button:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_popup_button:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_popup_button:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button:not(.gantt_ok_button){--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_ok_button{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger,.dhx_gantt_button_danger_outline{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_link,.gantt_qi_big_icon{padding:6px 0;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}@font-face{font-family:dhx-gantt-icons;src:url(data:font/woff;base64,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) format("woff"),url(data:font/woff2;base64,d09GMgABAAAAAAVgAAsAAAAADHgAAAUSAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEQgqGcIV9ATYCJANECyQABCAFhGoHhAEbGwsjEXaDUZpA9o+E7LTkMj3uJ6P42UJ6Z4Ln+XfLzk2CvYeOpONCV4Ua1JQhX1URmFVluib+pVo1AmBTZxn2J/LjFhx7e7s/rSHL0LOlnKzQ/7+fq5uXLMxKJUVK+qL33Y+qJLHEIRInHVGNYiGPUMhUL60DAmPTWQn6KmyefREEUFxCDCPes3+S4LTR82ZQgoUYLzCvLNMmTxyN1wvDqqgseBHcTTeVkOzCBfzJl0DL+M13BRkABi4TcajBExLjeP2wHA5LFCiVXmh9zYgzQG++CUQPLELmVMdNw5zmRTFRqjiLrubcFgKHw7kch2XIHvZsIBiYWLi8f/M8ePGh0PgJECREGMSNIH70n+eH4bAUwBgNANAEAC0A0AUAugFADwDoBQB9AKACADUA6AcAAwBgEAAMAYBhNMRBZLhBDVAJ/A9yMUJZZhGRcQZmwWEUB8vn83ssYg2SleX1iRO7tMs0LX8o0smyHI3TnEy1tjlKki1OW1PKaVlMbmpLNvuq1hjRopqcKjTsMEebynCoqqXNKcTmczJsZWrDWZXupLe2i6hmjXJsVaDQ4mxNr9q3JbO6fXKawqQSZ0tB05DW9tV2LDM4iXacIcOcYUMdrVQRhtIu6013lU7vK0jueyAjsrr9wUInzy3PZu9YfWfHc1ufefj2Vbc99LTTmrGbMs+qLc+/vH/VI6+8oLd+9pasviO537M6Cr35dHGmRzwyRhSLxOPcc+miPk5ZNfnn+0giEU9ECmpAQ0//coJFsevWlK+5rlfv4MabQzczNdF1Z9XOroMHqXQ2mj0c/S/Ky9dcuaB0wZXdu/mXbDq5KZ3ouqtqV9dBlefsG9MHdo1T/+tMZtO45eOGv/hx7OPW4seKSY9VBwrkIL6+5s555u0D27cFg2//646/fPNH8UD88vjP+/dff32xKqlHD/zAstSB//l/82PFjw0T+/Urzl8H32THjRw57pYJ8yKfqE/VJ5F5LKvNj2V/bfylI9YQ6/il8ddsbOCjtbdsuvzccrv4y5rOl0Vrvyyu2e2tsb9b1q8sWXb1qCR5rMitEvIZyY21p2b7D5pDkDvBOQkZpuNiSDThpNhVcQfEAz7eJVhqJUvcNzxmyS9PKwIc4F4oygL8KkUknJXoW/t9+GqsER4ZuuG4V0sUYFn946ugd6upTcOL4cYLNGGGU+VyUvtO5p8mpqJl0ZuM2wN7KgxEtCiXfHGWNACFAnKIhDDv7jZBCDWuCAYeQnPZnCo2aktfb3WhucLqJkQXq6KVgZtr8lmMiVg+hAq2GVaDIFmrSQXPqy39t1YXNsesbipEWRUpafpImgu/ZIV2W257FMn9SJi+wc6hZ0Vrma/+gZMnVHVRKZ/iBAjcC2g17CotthExyjBFdSQUCIHUxHSGUQonMh3K0ri3VIwUM+22HNujSI4fCdM34J059NysAxV1/4GTT7yjqCmomqtPBLs49wI6ZtiHMWkxSePGGFXUZYqKYzemoRykTDGZ1POdYZQC1yFnOlBavZmmpNixEh/5ocCfyj6IiCGmWOISt3jEK77P6Gp+CUhQQhKWiORxd520raat1vbMtLa6GBxvlBPN06Xr4hgowac/M2ES7j1KG8AY3tEkAvqjgQcTBa+/7Ez21ukZ0GfCRv5duaohgMCjwnckqV2AxY99uCiZzhDH2zgtAs5nqM+7jeyue72MVL7XpDegKczprSLTjBr0pW5bT2nxETjLAAA=) format("woff2")}.dhx_gantt_icon:before,.dhx_menu_icon:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.dhx_gantt_icon.dhx_gantt_icon_arrow_down:before,.dhx_menu_icon.dhx_gantt_icon_arrow_down:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_arrow_up:before,.dhx_menu_icon.dhx_gantt_icon_arrow_up:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_close:before,.dhx_menu_icon.dhx_gantt_icon_close:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_left_dotted:before,.dhx_menu_icon.dhx_gantt_icon_constraint_left_dotted:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_left_solid:before,.dhx_menu_icon.dhx_gantt_icon_constraint_left_solid:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_right_dotted:before,.dhx_menu_icon.dhx_gantt_icon_constraint_right_dotted:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_right_solid:before,.dhx_menu_icon.dhx_gantt_icon_constraint_right_solid:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_delete:before,.dhx_menu_icon.dhx_gantt_icon_delete:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_dots_vertical:before,.dhx_menu_icon.dhx_gantt_icon_dots_vertical:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_edit:before,.dhx_menu_icon.dhx_gantt_icon_edit:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_menu_down:before,.dhx_menu_icon.dhx_gantt_icon_menu_down:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_menu_right:before,.dhx_menu_icon.dhx_gantt_icon_menu_right:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_minus:before,.dhx_menu_icon.dhx_gantt_icon_minus:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_plus:before,.dhx_menu_icon.dhx_gantt_icon_plus:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_rounded_arrow_right:before,.dhx_menu_icon.dhx_gantt_icon_rounded_arrow_right:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_timer:before,.dhx_menu_icon.dhx_gantt_icon_timer:before{content:""}.gantt_container{background:var(--dhx-gantt-container-background);color:var(--dhx-gantt-container-color);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);border:1px solid var(--dhx-gantt-base-colors-border);position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_task,.gantt_grid{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);border-bottom:var(--dhx-gantt-scale-border-horizontal);box-sizing:border-box}.gantt_grid_scale{background:var(--dhx-gantt-grid-scale-background);color:var(--dhx-gantt-grid-scale-color)}.gantt_task_scale{background:var(--dhx-gantt-timeline-scale-background);color:var(--dhx-gantt-timeline-scale-color)}.gantt_task_vscroll{background:var(--dhx-gantt-container-background)}.gantt_scale_line{box-sizing:border-box;border-top:var(--dhx-gantt-scale-border-horizontal)}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:var(--dhx-gantt-grid-scale-border-vertical);text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative;background:var(--dhx-gantt-grid-body-background)}.gantt_row{position:relative;-webkit-user-select:none;user-select:none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;cursor:pointer;position:relative;opacity:.6}.gantt_add:before,.gantt_grid_head_add:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_add:before,.gantt_grid_head_add:before{content:""}.gantt_grid_head_cell.gantt_grid_head_add{opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{background-color:var(--dhx-gantt-base-colors-hover-color)}.gantt_grid_data .gantt_row:hover .gantt_add{opacity:1}.gantt_task_row,.gantt_row{border-bottom:var(--dhx-gantt-task-row-border);background:var(--dhx-gantt-task-row-background)}.gantt_row.odd,.gantt_task_row.odd{background:var(--dhx-gantt-task-row-background--odd)}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border);height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:var(--dhx-gantt-base-colors-border-light);top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:#e7e7e780;height:100%;width:100%}.gantt_drag_marker.gantt_grid_resize_area{border-left:var(--dhx-gantt-scale-border-vertical);border-right:var(--dhx-gantt-scale-border-vertical)}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:var(--dhx-gantt-scale-border-horizontal);border-bottom:var(--dhx-gantt-scale-border-horizontal)}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:var(--dhx-gantt-grid-cell-border);padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap}.gantt_cell_tree{display:flex;gap:4px;flex-wrap:nowrap}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0px}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:var(--dhx-gantt-grid-scale-border-vertical);text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:var(--dhx-gantt-timeline-scale-border-vertical)}.gantt_layout_cell.gantt_ver_scroll{width:0px;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0px;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent,.gantt_tree_icon{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0;overflow:hidden;width:auto;text-overflow:ellipsis}.gantt_tree_icon.gantt_open,.gantt_tree_icon.gantt_close{width:20px;cursor:pointer}.gantt_tree_icon.gantt_open:before,.gantt_tree_icon.gantt_close:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_tree_icon.gantt_open:before{content:""}.gantt_tree_icon.gantt_close:before{content:""}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open,.gantt_tree_icon.gantt_folder_closed,.gantt_tree_icon.gantt_file{display:none}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:0;width:7px;height:13px}.gantt_grid_head_cell .gantt_sort.gantt_asc:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_grid_head_cell .gantt_sort.gantt_asc:before{content:""}.gantt_grid_head_cell .gantt_sort.gantt_desc:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_grid_head_cell .gantt_sort.gantt_desc:before{content:""}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:var(--dhx-gantt-base-colors-error)}.gantt_status{right:1px;padding:5px 10px;background:#9b9b9b1a;position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:var(--dhx-gantt-grid-scale-border-vertical);opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:var(--dhx-gantt-grid-scale-border-vertical);opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:var(--dhx-gantt-base-colors-primary);transform:translate(-1px)}.gantt_grid_target_marker:before,.gantt_grid_target_marker:after{display:block;content:"";position:absolute;left:-5px;width:0px;height:0px;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:var(--dhx-gantt-base-colors-primary)}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:var(--dhx-gantt-base-colors-primary)}.gantt_message_area{position:fixed;right:5px;width:320px;z-index:1000}.gantt-info{min-width:120px;padding:12px;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);font-weight:var(--dhx-gantt-regular-font-weight);line-height:var(--dhx-gantt-regular-line-height);z-index:14;overflow:hidden;margin:5px 5px 10px;transition:all .5s ease;background:var(--dhx-gantt-info-background);color:var(--dhx-gantt-info-color);border:var(--dhx-gantt-info-border);box-shadow:var(--dhx-gantt-info-shadow)}.gantt-info.hidden{height:0px;padding:0;border-width:0px;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;position:fixed;min-width:300px;width:var(--dhx-gantt-modal-width);background:var(--dhx-gantt-modal-background);box-shadow:var(--dhx-gantt-box-shadow-l);border:var(--dhx-gantt-modal-border);z-index:18;border-radius:var(--dhx-gantt-modal-border-radius);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);color:var(--dhx-gantt-popup-color);line-height:150%}.gantt_popup_title{border-top-left-radius:var(--dhx-gantt-modal-border-radius);border-top-right-radius:var(--dhx-gantt-modal-border-radius);text-transform:uppercase;font-weight:var(--dhx-gantt-heading-font-weight);padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding);display:flex;justify-content:center;align-items:center}.gantt_popup_text{padding:var(--dhx-gantt-modal-padding);display:flex;justify-content:center;align-items:center}.gantt_popup_controls{display:flex;flex-direction:var(--dhx-gantt-btn-order);padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding);align-items:center;gap:12px}.gantt-info,.gantt_popup_button,.gantt_button{-webkit-user-select:none;user-select:none;cursor:pointer}.gantt_popup_text{overflow:hidden}div.dhx_modal_cover{background:#44494e;opacity:.2;position:fixed;z-index:17;left:0;top:0;width:100%;height:100%;border:none}.gantt_popup_controls{border-radius:var(--dhx-gantt-border-radius)}.gantt_message_area .gantt-error{--dhx-gantt-info-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-info-color: var(--dhx-gantt-base-colors-text-on-fill)}.gantt_message_area .gantt-warning{--dhx-gantt-info-background: var(--dhx-gantt-base-colors-warning);--dhx-gantt-info-color: var(--dhx-gantt-base-colors-text-on-fill)}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:var(--dhx-gantt-task-font-size);color:var(--dhx-gantt-task-color);width:100%;padding-top:1px;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:var(--dhx-gantt-task-progress-color)}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:var(--dhx-gantt-task-border-radius);position:absolute;box-sizing:border-box;background:var(--dhx-gantt-task-background);border:var(--dhx-gantt-task-border);-webkit-user-select:none;user-select:none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress,.gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:var(--dhx-gantt-base-colors-text-light);top:0;font-size:calc(var(--dhx-gantt-task-font-size) - 1px)}.gantt_side_content.gantt_left{right:100%;padding-right:var(--dhx-gantt-base-padding)}.gantt_side_content.gantt_right{left:100%;padding-left:var(--dhx-gantt-base-padding)}.gantt_side_content.gantt_link_crossing{margin-top:-6px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow,.gantt_link_corner{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:var(--dhx-gantt-link-background)}.gantt_link_corner{box-sizing:content-box!important;border-color:var(--dhx-gantt-link-background);background-color:transparent}.gantt_task_link:hover{--dhx-gantt-link-background: var(--dhx-gantt-link-background-hover)}.gantt_task_link div.gantt_link_arrow{color:var(--dhx-gantt-link-background)}.gantt_task_link div.gantt_link_arrow:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_task_link div.gantt_link_arrow:before{content:""}.gantt_link_control{position:absolute;width:calc(var(--dhx-gantt-link-handle-offset) + var(--dhx-gantt-link-handle-size));top:50%;display:flex;align-items:center;transition:all var(--dhx-gantt-base-transition)}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;border:2px solid var(--dhx-gantt-link-handle-border);border-radius:50%;height:var(--dhx-gantt-link-handle-size);width:var(--dhx-gantt-link-handle-size);background:var(--dhx-gantt-link-handle-background)}.gantt_link_control div:hover{--dhx-gantt-link-handle-background: var(--dhx-gantt-link-handle-background-hover);--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover)}.gantt_link_control.task_left{transform:translate(-100%,-50%);left:0;justify-content:flex-start}.gantt_link_control.task_right{transform:translate(100%,-50%);right:0;justify-content:flex-end}.gantt_task_line.gantt_link_source .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_link_source .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_drag{display:block}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag{display:flex}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px var(--dhx-gantt-base-colors-primary)}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px var(--dhx-gantt-base-colors-success)}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px var(--dhx-gantt-base-colors-error)}.gantt_link_from_start .gantt_link_control.task_start_date div,.gantt_link_from_end .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div,.link_finish_allow .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-primary)}.link_start_deny .gantt_link_control.task_start_date div,.link_finish_deny .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-error)}.gantt_link_arrow_left{transform:rotate(180deg)}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:16px;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:70%;min-height:12px;bottom:-3px;transform:translate(-50%);z-index:1;align-items:flex-end}.gantt_task_progress_drag:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.gantt_link_tooltip{box-shadow:3px 3px 3px #0003;background-color:var(--dhx-gantt-popup-background);border-left:1px solid var(--dhx-gantt-base-colors-border);border-top:1px solid var(--dhx-gantt-base-colors-border);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);color:var(--dhx-gantt-popup-color);padding:var(--dhx-gantt-base-padding);line-height:var(--dhx-gantt-regular-line-height)}.gantt_link_direction{height:0px;border:none;border-bottom:2px dashed var(--dhx-gantt-base-colors-primary);transform-origin:0% 0%;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}.gantt_row_project{font-weight:500}.gantt_task_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}.gantt_task_line.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_cal_quick_info.gantt_project,.gantt_task_line.gantt_project{--dhx-gantt-task-color: var(--dhx-gantt-project-color);--dhx-gantt-task-background: var(--dhx-gantt-project-background);--dhx-gantt-task-progress-color: var(--dhx-gantt-project-progress-color)}.gantt_task_line.gantt_project.gantt_task_line_planned{--dhx-gantt-task-background: var(--dhx-gantt-base-colors-text-light)}.gantt_task_line_planned{--dhx-gantt-scheduled-summary-bracket-size: 8px}.gantt_task_line_planned:before,.gantt_task_line_planned:after{content:"";position:absolute;top:0;width:0;height:0;border-style:solid;border-color:transparent}.gantt_task_line_planned:before{border-width:var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0 0;border-right-color:var(--dhx-gantt-task-background);transform:rotate(180deg)}.gantt_task_line_planned:after{border-width:0 var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0;border-right-color:var(--dhx-gantt-task-background);right:0}.gantt_task_line_actual{opacity:.3;--dhx-gantt-task-border-radius: 2px}.gantt_task_line.gantt_project.gantt_project_scheduling_conflict .gantt_task_line_actual{--dhx-gantt-task-background: var(--dhx-gantt-base-colors-error)}.gantt_task_line.gantt_project.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_task_line.gantt_milestone{--dhx-gantt-task-background: var(--dhx-gantt-milestone-background);visibility:hidden;border:none;box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:var(--dhx-gantt-task-background)}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:var(--dhx-gantt-task-background);opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected{box-shadow:0 0 5px var(--dhx-gantt-task-background)}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 var(--dhx-gantt-task-background)}.gantt_critical_task{--dhx-gantt-task-background: var(--dhx-gantt-link-critical-background)}.gantt_critical_task .gantt_task_progress{--dhx-gantt-task-progress: rgba(0, 0, 0, .4)}.gantt_critical_link{--dhx-gantt-link-background: var(--dhx-gantt-link-critical-background)}.gantt_link_arrow{--dhx-gantt-base-colors-icons: var(--dhx-gantt-link-background)}.gantt_row:focus,.gantt_cell:focus,.gantt_btn_set:focus,.gantt_qi_big_icon:focus,.gantt_popup_button:focus,.gantt_grid_head_cell:focus{box-shadow:inset 0 0 1px 1px var(--dhx-gantt-base-colors-primary)}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;user-select:none}.gantt_common_input{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);padding:6px 8px;box-sizing:border-box;margin-top:0;margin-bottom:0}.gantt_common_input:focus,.gantt_common_input:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_common_input:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_one_line_input{height:var(--dhx-gantt-control-height)}.gantt_cal_cover,.gantt_cal_cover *{box-sizing:border-box}.gantt_cal_light{margin-top:auto;margin-bottom:auto;width:var(--dhx-gantt-lightbox-width);max-width:var(--dhx-gantt-lightbox-max-width);height:auto;-webkit-tap-highlight-color:transparent;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);position:absolute;z-index:15;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);line-height:142%;border:var(--dhx-gantt-lightbox-border);border-radius:var(--dhx-gantt-popup-border-radius)}.gantt_cal_light.gantt_cal_light_wide{--dhx-gantt-lightbox-width: var(--dhx-gantt-lightbox-wide-max-width);--dhx-gantt-lightbox-max-width: var(--dhx-gantt-lightbox-wide-max-width)}.gantt_cal_light textarea,.gantt_cal_light input,.gantt_cal_light select{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);padding:6px 8px;box-sizing:border-box;margin-top:0;margin-bottom:0}.gantt_cal_light textarea:focus,.gantt_cal_light input:focus,.gantt_cal_light select:focus,.gantt_cal_light textarea:focus-visible,.gantt_cal_light input:focus-visible,.gantt_cal_light select:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_cal_light textarea:disabled,.gantt_cal_light input:disabled,.gantt_cal_light select:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_cal_light input,.gantt_cal_light select{height:var(--dhx-gantt-control-height)}.gantt_cal_light input[type=select],.gantt_cal_light input[type=checkbox]{height:var(--dhx-gantt-checkbox-height)}.gantt_cal_light .gantt_time{display:none}.gantt_cal_ltitle{font-size:var(--dhx-gantt-lightbox-title-font-size);font-weight:var(--dhx-gantt-heading-font-weight);line-height:142%;background:var(--dhx-gantt-lightbox-title-background);color:var(--dhx-gantt-lightbox-title-color);border-bottom:var(--dhx-gantt-default-border);padding:calc(var(--dhx-gantt-base-padding) * 3) var(--dhx-gantt-lightbox-padding);overflow:hidden;white-space:nowrap;display:flex;flex-direction:row;justify-content:space-between;gap:calc(var(--dhx-gantt-base-padding) * 2);border-top-right-radius:var(--dhx-gantt-popup-border-radius);border-top-left-radius:var(--dhx-gantt-popup-border-radius)}.gantt_cal_ltitle .gantt_mark{display:none}.gantt_cal_ltitle .gantt_cal_ltitle_descr{overflow:hidden;text-overflow:ellipsis}.gantt_cal_ltitle .gantt_cal_ltitle_controls{cursor:pointer;--dhx-gantt-icon-size: 18px}.gantt_cal_light_rtl{direction:rtl}.gantt_cal_light_wide.gantt_cal_light_rtl .gantt_custom_button{right:auto;left:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_cal_larea{border:none;padding:0 var(--dhx-gantt-lightbox-padding) 4px;height:auto;gap:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:16;top:0;left:0;background-color:#0000004d;display:flex;justify-content:center;align-items:center;overflow:auto}.gantt_lightbox_time_select{min-width:80px}.gantt_lightbox_day_select{min-width:60px}.gantt_lightbox_month_select{min-width:110px}.gantt_lightbox_year_select{min-width:77px}.gantt_cal_light_full{width:auto}.gantt_cal_light_wide .gantt_cal_larea{display:flex;flex-direction:column;padding-top:12px;gap:12px}.gantt_cal_light_wide .gantt_wrap_section{display:flex;flex:0;position:relative}.gantt_cal_light_wide .gantt_cal_lsection{width:120px;justify-content:start;align-items:start;flex-shrink:0;margin-top:0;margin-bottom:0;padding:4px 8px}.gantt_cal_light_wide .gantt_custom_button{position:absolute;left:auto;right:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_cal_light_wide .gantt_cal_ltext{flex:1}.gantt_cal_light_wide .gantt_section_time{justify-content:start}.gantt_cal_light_wide .gantt_fullday{margin-left:unset}.gantt_duration{display:flex;justify-content:flex-start;align-items:center;gap:4px}.gantt_duration .gantt_duration_end_date{color:var(--dhx-gantt-base-colors-text-light);min-width:130px}.gantt_duration .gantt_duration_value,.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);padding:6px 8px;box-sizing:border-box;margin-top:0;margin-bottom:0;text-align:center}.gantt_duration .gantt_duration_value:focus,.gantt_duration .gantt_duration_dec:focus,.gantt_duration .gantt_duration_inc:focus,.gantt_duration .gantt_duration_value:focus-visible,.gantt_duration .gantt_duration_dec:focus-visible,.gantt_duration .gantt_duration_inc:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_duration .gantt_duration_value:disabled,.gantt_duration .gantt_duration_dec:disabled,.gantt_duration .gantt_duration_inc:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_duration_inputs{display:flex}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0;border-radius:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:26px;padding:1px 4px;color:var(--dhx-gantt-base-colors-primary);font-size:18px;border-radius:var(--dhx-gantt-border-radius);cursor:pointer}.gantt_duration .gantt_duration_dec{border-top-right-radius:0;border-bottom-right-radius:0}.gantt_duration .gantt_duration_inc{border-top-left-radius:0;border-bottom-left-radius:0}.gantt_duration .gantt_duration_inc{margin-right:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid var(--dhx-gantt-base-colors-border-light);cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter{display:flex;align-items:center}.gantt_resources_filter label{display:inline-flex;gap:2px;align-items:center}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 6px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_lcontrols{display:flex;flex-direction:var(--dhx-gantt-btn-order);gap:calc(var(--dhx-gantt-base-padding)*2);padding:12px var(--dhx-gantt-lightbox-padding)}.gantt_cal_lcontrols .gantt_btn_set{display:flex;flex-direction:row;gap:var(--dhx-gantt-base-padding)}.gantt_cal_lcontrols .gantt_btn_set.gantt_delete_btn_set{--dhx-gantt-icon-size: 18px;padding:6px 0;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.gantt_cal_lcontrols .gantt_btn_set:not(.gantt_save_btn_set,.gantt_delete_btn_set){--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_cal_lcontrols .gantt_btn_set .gantt_btn_inner{display:none}.gantt_cal_lcontrols .gantt_btn_set .gantt_delete_btn:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_cal_lcontrols .gantt_btn_set .gantt_delete_btn:before{content:""}.gantt_cal_lcontrols .gantt_cal_lcontrols_push_right{margin-left:auto}.gantt_cal_ltext textarea{width:100%;height:100%;resize:none;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);line-height:142%}.gantt_section_time_spacer,.gantt_lightbox_minical_spacer{visibility:hidden;height:0;flex-basis:100%}.gantt_section_time{--dhx-gantt-lightbox-time-font-size: var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-time-font-weight: var(--dhx-gantt-important-font-weight);font-size:var(--dhx-gantt-lightbox-time-font-size);font-weight:var(--dhx-gantt-lightbox-time-font-weight);line-height:142%;display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--dhx-gantt-base-padding) * 2);row-gap:var(--dhx-gantt-base-padding)}.gantt_section_time .gantt_section_time_icon{width:calc(var(--dhx-gantt-base-module) * 2);height:calc(var(--dhx-gantt-base-module) * 2);border-radius:2px;background:var(--dhx-gantt-base-colors-primary)}.gantt_section_duration{gap:16px}.gantt_fullday{margin-left:auto}.gantt_cal_light_rtl .gantt_fullday{margin-left:unset;margin-right:auto}.gantt_cal_lsection label{font-weight:var(--dhx-gantt-heading-font-weight);display:flex;align-items:center;gap:4px;width:100%}.gantt_cal_lsection{display:flex;margin-top:12px;margin-bottom:4px}.gantt_cal_lsection .gantt_custom_button{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled);order:1;margin-left:auto;margin-right:unset}.gantt_cal_lsection .gantt_custom_button:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_cal_lsection .gantt_custom_button:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_cal_lsection .gantt_custom_button:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_cal_light_rtl .gantt_custom_button{margin-left:unset;margin-right:auto}.gantt_cal_checkbox{display:flex;gap:var(--dhx-gantt-base-padding)}.gantt_cal_wide_checkbox{padding:4px 0}.gantt_cal_radio input{margin:var(--dhx-gantt-base-padding)}.gantt_cal_radio_item{display:flex;gap:var(--dhx-gantt-base-padding);align-items:center}.gantt_cal_radio{display:flex;gap:4px}.gantt_cal_radio_vertical{flex-direction:column;overflow:auto;--dhx-gantt-control-height: 20px}.gantt_cal_lcheckbox,.gantt_cal_lradio{display:flex;flex-wrap:wrap;gap:8px}.gantt_cal_lcheckbox label,.gantt_cal_lradio label{display:flex;align-items:center;gap:4px}.gantt_cal_template{position:relative;padding-top:4px;padding-bottom:4px}.gantt_cal_light .gantt_readonly{color:var(--dhx-gantt-base-colors-readonly)}.gantt_cal_quick_info{--dhx-gantt-quick-info-font-size: var(--dhx-gantt-font-size);position:absolute;z-index:8;font-size:var(--dhx-gantt-quick-info-font-size);background:var(--dhx-gantt-popup-background);color:var(--dhx-gantt-popup-color);border:var(--dhx-gantt-popup-border);padding:calc(var(--dhx-gantt-base-padding)*2) calc(var(--dhx-gantt-base-padding)*3);border-radius:var(--dhx-gantt-border-radius);width:300px;display:flex;flex-direction:column;box-shadow:var(--dhx-gantt-box-shadow-s);transition:left .5s ease,right .5s ease}.gantt_cal_qi_tcontrols{display:flex;justify-content:end;height:8px}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn{min-width:32px;height:32px;border-radius:50%;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent;width:unset;min-width:unset;padding:2px;font-size:18px;cursor:pointer;height:20px;position:relative;z-index:1}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:active{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-active)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:disabled{--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color-disabled)}.gantt_cal_qi_title,.gantt_cal_qi_controls,.gantt_cal_qi_content{padding:0 calc(var(--dhx-gantt-base-padding) * 3)}.gantt_cal_qi_title{display:flex;flex-direction:column;gap:12px;padding-right:14px}.gantt_cal_qi_tcontent{font-size:var(--dhx-gantt-heading-font-size);font-weight:var(--dhx-gantt-heading-font-weight);line-height:150%;position:relative;display:flex;flex-direction:row;justify-content:start;align-items:center;gap:8px;overflow:hidden;flex-grow:0;text-overflow:ellipsis;white-space:nowrap}.gantt_cal_qi_tcontent>span{text-overflow:ellipsis;overflow:hidden}.gantt_cal_qi_tcontent:before{display:var(--dhx-gantt-quick-info-dot-display, block);content:"";flex-shrink:0;width:8px;height:8px;border-radius:2px;background:var(--dhx-gantt-task-background)}.gantt_cal_qi_tdate{font-size:var(--dhx-gantt-important-font-size);font-weight:var(--dhx-gantt-important-font-weight);line-height:var(--dhx-gantt-important-line-height)}.gantt_cal_qi_content{padding-top:16px;padding-bottom:8px}.gantt_cal_qi_controls{display:flex;flex-direction:row;justify-content:start;align-items:center;padding-top:8px;gap:12px;color:var(--dhx-gantt-base-colors-primary)}.gantt_cal_qi_controls>div:first-child{margin-left:-3px}.gantt_menu_icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color)}.dhx_gantt_icon.dhx_gantt_icon_edit,.dhx_menu_icon.dhx_gantt_icon_edit{--dhx-gantt-icon-size: var(--dhx-gantt-font-size)}.gantt_tooltip{padding:8px 30px 8px 8px;position:absolute;z-index:50;white-space:nowrap;box-shadow:var(--dhx-gantt-box-shadow-m);background:var(--dhx-gantt-tooltip-background);color:var(--dhx-gantt-tooltip-color);border:var(--dhx-gantt-tooltip-border);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);line-height:var(--dhx-gantt-regular-line-height);font-weight:var(--dhx-gantt-regular-font-weight);border-radius:var(--dhx-gantt-tooltip-border-radius);display:flex;flex-direction:column;align-items:flex-start;gap:4px}.gantt_resource_marker{position:absolute;text-align:center;font-size:var(--dhx-gantt-font-size);color:#fff}.gantt_resource_marker_ok{background:var(--dhx-gantt-base-colors-success)}.gantt_resource_marker_overtime{background:var(--dhx-gantt-base-colors-error)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:var(--dhx-gantt-font-size)}.gantt_histogram_fill{background-color:#537cfa4d;background-color:color-mix(in srgb,var(--dhx-gantt-base-colors-primary),transparent 60%);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;position:absolute;background:var(--dhx-gantt-base-colors-primary);margin-top:-1px;margin-left:-1px}.gantt_histogram_vert_bar{width:1px;position:absolute;background:var(--dhx-gantt-base-colors-primary);margin-left:-1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:var(--dhx-gantt-font-size)}.gantt_marker{height:100%;width:1px;top:0;position:absolute;text-align:center;background-color:var(--dhx-gantt-base-colors-error)}.gantt_marker .gantt_marker_content{padding:2px;background:inherit;color:var(--dhx-gantt-base-colors-white);position:absolute;font-size:var(--dhx-gantt-caption-font-size);line-height:var(--dhx-gantt-caption-line-height);font-weight:var(--dhx-gantt-caption-line-weight)}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_file,.gantt_row_placeholder .gantt_add{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:var(--dhx-gantt-base-colors-primary)}.gantt_grid_dnd_marker_line:before{background:var(--dhx-gantt-base-colors-white);width:12px;height:12px;box-sizing:border-box;border:3px solid var(--dhx-gantt-base-colors-primary);border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:0 0 0 2px var(--dhx-gantt-base-colors-primary) inset;background:transparent}.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0;display:none}.gantt_overlay{position:absolute;left:0;top:0;height:inherit;width:inherit}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid var(--dhx-gantt-base-colors-primary);background-color:var(--dhx-gantt-base-colors-primary-lighter)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_constraint_marker{position:absolute;pointer-events:none;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-text-light)}.gantt_constraint_marker.gantt_constraint_marker_snlt,.gantt_constraint_marker.gantt_constraint_marker_fnlt,.gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(180deg)}.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snlt,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnlt,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(0)}.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snet,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnet,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mso{transform:rotate(180deg)}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_row,.gantt_rtl .gantt_cell{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"⇧"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"⇩"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"⇦"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"⇧"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_right{border-right:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_top{border-top:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_bottom{border-bottom:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:solid 2px #ffffff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:#0000001a;z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:#0000001a;z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_container,.gantt_cal_light,.gantt_message_area,.gantt_modal_box,.gantt_cal_quick_info,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--dhx-gantt-font-family)}.gantt_container,.gantt_container *{box-sizing:border-box}.gantt_noselect{-webkit-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row:hover,.gantt_noselect .gantt_grid_data .gantt_row.odd:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);z-index:1;white-space:nowrap;background:var(--dhx-gantt-base-colors-select)}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:var(--dhx-gantt-base-colors-primary);background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker .gantt_row.odd{background-color:var(--dhx-gantt-base-colors-select)}.gantt_drag_marker .gantt_row{border-left:var(--dhx-gantt-scale-border-vertical);border-top:var(--dhx-gantt-scale-border-horizontal)}.gantt_drag_marker .gantt_cell{border-color:var(--dhx-gantt-base-colors-border)}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:var(--dhx-gantt-base-colors-primary-active)}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#537cfa73}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}.gantt_task_deadline{position:absolute;z-index:5;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error)}.gantt_task_deadline:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_task_deadline:before{content:""}.gantt_task_baseline{position:absolute;border-radius:2px;opacity:.9;background:#ffd180;z-index:0;overflow:hidden}.gantt_task_baseline.gantt_milestone_baseline{transform:rotate(45deg)}.gantt_task_baseline.gantt_task_baseline_0{background:var(--dhx-gantt-baseline-background-0)}.gantt_task_baseline.gantt_task_baseline_1{background:var(--dhx-gantt-baseline-background-1)}.gantt_task_baseline.gantt_task_baseline_2{background:var(--dhx-gantt-baseline-background-2)}.gantt_task_baseline.gantt_task_baseline_3{background:var(--dhx-gantt-baseline-background-3)}.gantt_task_baseline.gantt_task_baseline_4{background:var(--dhx-gantt-baseline-background-4)}.gantt_task_baseline.gantt_task_baseline_5{background:var(--dhx-gantt-baseline-background-5)}.gantt_task_baseline.gantt_task_baseline_6{background:var(--dhx-gantt-baseline-background-6)}.gantt_task_baseline.gantt_task_baseline_7{background:var(--dhx-gantt-baseline-background-7)}.gantt_task_baseline.gantt_task_baseline_8{background:var(--dhx-gantt-baseline-background-8)}.gantt_task_baseline.gantt_task_baseline_9{background:var(--dhx-gantt-baseline-background-9)}.gantt_section_baselines{overflow-y:auto;display:flex;flex-direction:column;gap:4px}.gantt_custom_button.gantt_add_baselines{margin-left:0}
+@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuOKfMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuI6fMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf) format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuDyYMZg.ttf) format("truetype")}:root{--dhx-gantt-theme: terrace;--dhx-gantt-font-family: Inter, Helvetica, Arial, sans-serif;--dhx-gantt-font-size: 14px;--dhx-gantt-heading-font-size: calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-heading-font-weight: 600;--dhx-gantt-important-font-size: var(--dhx-gantt-font-size);--dhx-gantt-important-line-height: 142%;--dhx-gantt-important-font-weight: 500;--dhx-gantt-regular-font-size: var(--dhx-gantt-font-size);--dhx-gantt-regular-font-weight: 400;--dhx-gantt-regular-line-height: 142%;--dhx-gantt-caption-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-caption-font-weight: 400;--dhx-gantt-caption-line-height: 132%;--dhx-gantt-base-colors-white: #FFFFFF;--dhx-gantt-base-colors-select: #EFF3FF;--dhx-gantt-base-colors-hover-color: #e0e0e0;--dhx-gantt-base-colors-border-light: #F0F0F0;--dhx-gantt-base-colors-border: #DFE0E1;--dhx-gantt-base-colors-icons: #A1A4A6;--dhx-gantt-base-colors-icons-active: #8b8e90;--dhx-gantt-base-colors-icons-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 12.6%);--dhx-gantt-base-colors-icons-hover: #76787a;--dhx-gantt-base-colors-icons-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 28.5%);--dhx-gantt-base-colors-disabled: #E9E9E9;--dhx-gantt-base-colors-select: #E0E5F3;--dhx-gantt-base-colors-readonly: var(--dhx-gantt-base-colors-icons);--dhx-gantt-base-colors-text-light: #555D63;--dhx-gantt-base-colors-text-base: #23272A;--dhx-gantt-base-colors-text-on-fill: rgba(255, 255, 255, .9);--dhx-gantt-base-colors-background: #FFFFFF;--dhx-gantt-base-colors-background-alt: #F2F2F2;--dhx-gantt-base-colors-primary: #537CFA;--dhx-gantt-base-colors-primary-hover: #4269E0;--dhx-gantt-base-colors-primary-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000000 6%);--dhx-gantt-base-colors-primary-active: #3365fb;--dhx-gantt-base-colors-primary-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000000 16.6%);--dhx-gantt-base-colors-primary-lighter: #537cfa33;--dhx-gantt-base-colors-primary-lighter: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 20%, rgba(0, 0, 0, 0) 100%);--dhx-gantt-base-colors-warning: #FAB936;--dhx-gantt-base-colors-error: #E3334E;--dhx-gantt-base-colors-error-hover: #D3233E;--dhx-gantt-base-colors-error-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000000 6%);--dhx-gantt-base-colors-error-active: #C3132E;--dhx-gantt-base-colors-error-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000000 16.6%);--dhx-gantt-base-colors-error-lighter: #E3334E33;--dhx-gantt-base-colors-error-lighter: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 20%, rgba(0, 0, 0, 0) 100%);--dhx-gantt-base-colors-error-text: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-base-colors-success: #1BC297;--dhx-gantt-container-background: var(--dhx-gantt-base-colors-background);--dhx-gantt-container-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-offtime-background: var(--dhx-gantt-base-colors-background-alt);--dhx-gantt-scale-background: var(--dhx-gantt-container-background);--dhx-gantt-scale-border-vertical: 1px solid var(--dhx-gantt-base-colors-border-light);--dhx-gantt-scale-border-horizontal: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-grid-body-background: transparent;--dhx-gantt-grid-scale-background: var(--dhx-gantt-scale-background);--dhx-gantt-grid-scale-color: var(--dhx-gantt-scale-color);--dhx-gantt-grid-scale-border-vertical: var(--dhx-gantt-scale-border-vertical);--dhx-gantt-timeline-scale-background: var(--dhx-gantt-scale-background);--dhx-gantt-timeline-scale-color: var(--dhx-gantt-scale-color);--dhx-gantt-timeline-scale-border-vertical: var(--dhx-gantt-scale-border-vertical);--dhx-gantt-grid-cell-border: 1px solid transparent;--dhx-gantt-grid-row-border: var(--dhx-gantt-scale-border-horizontal);--dhx-gantt-base-transition: .2s ease;--dhx-gantt-box-shadow-s: 0px 4px 24px 0px rgba(44, 47, 60, .08);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-icon-size: 1.5em;--dhx-gantt-base-module: 4px;--dhx-gantt-base-padding: 4px;--dhx-gantt-border-radius: var(--dhx-gantt-base-module);--dhx-gantt-transition: all .3s;--dhx-gantt-default-border: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-header-border: var(--dhx-gantt-default-border);--dhx-gantt-task-blue: var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-green: #20B56D;--dhx-gantt-task-violet: #D071EF;--dhx-gantt-task-yellow: linear-gradient(180deg, #FFB725 0%, #FFBB25 31.25%, #FAEA27 100%);--dhx-gantt-baseline-background-0: #00B4FF;--dhx-gantt-baseline-background-1: #DF6DE3;--dhx-gantt-baseline-background-2: #FF957D;--dhx-gantt-baseline-background-3: #25C79D;--dhx-gantt-baseline-background-4: #FF6FB0;--dhx-gantt-baseline-background-5: #FFC470;--dhx-gantt-baseline-background-6: #FDE720;--dhx-gantt-baseline-background-7: #47AFD0;--dhx-gantt-baseline-background-8: #DA9DFF;--dhx-gantt-baseline-background-9: #BEE964;--dhx-gantt-task-font-size: var(--dhx-gantt-regular-font-size);--dhx-gantt-task-line-height: var(--dhx-gantt-regular-line-height);--dhx-gantt-task-font-weight: var(--dhx-gantt-regular-font-weight);--dhx-gantt-task-background-primary: var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-border-radius: var(--dhx-gantt-border-radius);--dhx-gantt-task-background: var(--dhx-gantt-task-blue);--dhx-gantt-task-border: none;--dhx-gantt-task-color: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-project-color: var(--dhx-gantt-task-color);--dhx-gantt-task-line-text: var(--dhx-gantt-container-color);--dhx-gantt-task-row-border: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-task-row-background: var(--dhx-gantt-container-background);--dhx-gantt-task-row-background--odd: var(--dhx-gantt-container-background);--dhx-gantt-task-progress-color: rgba(0, 0, 0, .15);--dhx-gantt-project-progress-color: var(--dhx-gantt-task-progress-color);--dhx-gantt-project-background: var(--dhx-gantt-task-green);--dhx-gantt-milestone-background: var(--dhx-gantt-task-violet);--dhx-gantt-task-marker-color: var(--dhx-gantt-task-background);--dhx-gantt-popup-background: var(--dhx-gantt-container-background);--dhx-gantt-popup-color: var(--dhx-gantt-container-color);--dhx-gantt-popup-border: none;--dhx-gantt-popup-border-radius: var(--dhx-gantt-border-radius);--dhx-gantt-tooltip-background: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-tooltip-color: var(--dhx-gantt-container-background);--dhx-gantt-tooltip-border: none;--dhx-gantt-tooltip-border-radius: var(--dhx-gantt-popup-border-radius);--dhx-gantt-link-background: var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-background-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-link-critical-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-link-handle-offset: 8px;--dhx-gantt-link-handle-size: 10px;--dhx-gantt-link-handle-border: var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-handle-border-hover: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-progress-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-progress-handle-background: var(--dhx-gantt-base-colors-icons);--dhx-gantt-progress-handle-background-hover: var(--dhx-gantt-base-colors-icons-hover);--dhx-gantt-control-height: 32px;--dhx-gantt-checkbox-height: 20px;--dhx-gantt-lightbox_font-family: var(--dhx-gantt-font-family);--dhx-gantt-lightbox-font-size: var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-font-weight: var(--dhx-gantt-important-font-weight);--dhx-gantt-lightbox-background: var(--dhx-gantt-popup-background);--dhx-gantt-lightbox-border: var(--dhx-gantt-popup-border);--dhx-gantt-lightbox-control-border: var(--dhx-gantt-default-border);--dhx-gantt-lightbox-color: var(--dhx-gantt-popup-color);--dhx-gantt-lightbox-padding: 12px;--dhx-gantt-lightbox-title-background: var(--dhx-gantt-base-colors-select);--dhx-gantt-lightbox-title-color: var(--dhx-gantt-lightbox-color);--dhx-gantt-lightbox-title-font-size: var(--dhx-gantt-heading-font-size);--dhx-gantt-lightbox-max-width: 622px;--dhx-gantt-lightbox-wide-max-width: 738px;--dhx-gantt-lightbox-width: 560px;--dhx-gantt-btn-order: row-reverse;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-outline-background: transparent;--dhx-gantt-btn-outline-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-border-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-background-hover: var(--dhx-gantt-base-colors-primary-lighter);--dhx-gantt-btn-outline-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-border-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-background-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-color-active: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-outline-border-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-background-disabled: transparent;--dhx-gantt-btn-outline-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-outline-border-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-text-transform: none;--dhx-gantt-info-background: var(--dhx-gantt-popup-background);--dhx-gantt-info-color: var(--dhx-gantt-popup-color);--dhx-gantt-info-border: var(--dhx-gantt-popup-border);--dhx-gantt-info-shadow: var(--dhx-gantt-box-shadow-m);--dhx-gantt-modal-background: var(--dhx-gantt-popup-background);--dhx-gantt-modal-color: var(--dhx-gantt-popup-color);--dhx-gantt-modal-border: var(--dhx-gantt-popup-border);--dhx-gantt-modal-padding: 16px;--dhx-gantt-modal-width: 320px;--dhx-gantt-modal-border-radius: var(--dhx-gantt-popup-border-radius);--dhx-gantt-undo-delete-background: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-undo-delete-color: var(--dhx-gantt-task-color)}:root[data-gantt-theme=dark]{--dhx-gantt-theme: dark;--dhx-gantt-base-colors-disabled: #3d3d3d;--dhx-gantt-base-colors-text-light: #AAA;--dhx-gantt-base-colors-text-base: rgba(255, 255, 255, .9);--dhx-gantt-base-colors-background: #141414;--dhx-gantt-base-colors-background-alt: #383838;--dhx-gantt-base-colors-border: #4B4B4B;--dhx-gantt-base-colors-border-light: #4B4B4B;--dhx-gantt-navline-font-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-base-colors-primary: #3B72F8;--dhx-gantt-base-colors-error: #EB284F;--dhx-gantt-base-colors-select: #2A2A2A;--dhx-gantt-base-colors-hover-color: #2A2A2A;--dhx-gantt-base-colors-icons: #AAAAAA;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #1B1B1C;--dhx-gantt-popup-border: 1px solid #4B4B4B;--dhx-gantt-btn-font-weight: 600;--dhx-gantt-undo-delete-background: var(--dhx-gantt-popup-background);--dhx-gantt-link-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-background)}:root[data-gantt-theme=meadow]{--dhx-gantt-theme: meadow;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-base-colors-select: #ffebbc;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-container-color: #3f3f3f;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-scale-background: #f4f2ea;--dhx-gantt-scale-color: #42464b;--dhx-gantt-task-color: #1e2022;--dhx-gantt-project-background: #c7d8f7;--dhx-gantt-milestone-background: #DB7DC5;--dhx-gantt-task-background: #e1ffd4;--dhx-gantt-task-border: 1px solid #3588c5;--dhx-gantt-task-progress-color: #a7d991;--dhx-gantt-project-progress-color: #9ab9f1;--dhx-gantt-link-background: #ffb96d;--dhx-gantt-lightbox-title-background: #f4f2ea;--dhx-gantt-popup-background: #fcfaf3;--dhx-gantt-popup-color: var(--dhx-gantt-container-color);--dhx-gantt-popup-border: 1px solid #cac8bd}:root[data-gantt-theme=skyblue]{--dhx-gantt-theme: skyblue;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-scale-background: #dfedff;--dhx-gantt-scale-color: #42464b;--dhx-gantt-task-color: #1e2022;--dhx-gantt-project-background: #eff6fb;--dhx-gantt-task-background: #eff6fb;--dhx-gantt-milestone-background: #DB7DC5;--dhx-gantt-task-border: 1px solid #3588c5;--dhx-gantt-task-progress-color: linear-gradient(0deg, #abcee8 0, #5aa0d3 36%, #bfdaee);--dhx-gantt-link-background: #4a8f43;--dhx-gantt-lightbox-title-background: #eff6fb}:root[data-gantt-theme=skyblue] .gantt_grid_scale,:root[data-gantt-theme=skyblue] .gantt_task_scale,:root[data-gantt-theme=skyblue] .gantt_task_vscroll{box-shadow:inset 0 1px 1px #fff;background-image:linear-gradient(to bottom,#e4f0ff,#dfedff,#d5e8ff)}:root[data-gantt-theme=broadway]{--dhx-gantt-theme: broadway;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-base-colors-select: #fff3a1;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-halfhour-border: 1px solid #e8e8e8;--dhx-gantt-task-title-font-size: 12px;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-grid-scale-background: #4f4f4f;--dhx-gantt-grid-scale-border-vertical: 1px solid #c1c1c1;--dhx-gantt-grid-scale-color: #e1e1e1;--dhx-gantt-timeline-scale-background: #dbdbdb;--dhx-gantt-timeline-scale-border-vertical: 1px solid #ebebeb;--dhx-gantt-timeline-scale-color: #494949;--dhx-gantt-grid-body-background: #dbdbdb;--dhx-gantt-lightbox-title-background: #4f4f4f;--dhx-gantt-lightbox-title-color: #e1e1e1;--dhx-gantt-task-color: #FFF;--dhx-gantt-link-background: #ffb96d;--dhx-gantt-project-background: #65c16f;--dhx-gantt-project-progress-color: #46ad51;--dhx-gantt-task-progress-color: #04a4f0;--dhx-gantt-task-background: #17b2fb;--dhx-gantt-milestone-background: #DB7DC5}:root[data-gantt-theme=broadway] .gantt_grid_data{--dhx-gantt-task-row-background: var(--dhx-gantt-grid-body-background);--dhx-gantt-task-row-background--odd: var(--dhx-gantt-grid-body-background)}:root[data-gantt-theme=material]{--dhx-gantt-theme: material;--dhx-gantt-font-family: Roboto, Inter, Helvetica, Arial, sans-serif;--dhx-gantt-base-colors-primary: #448aff;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-project-background: #1de9b6;--dhx-gantt-milestone-background: #ffc107;--dhx-gantt-task-progress-color: rgba(0, 0, 0, .2);--dhx-gantt-project-color: rgba(0, 0, 0, .6);--dhx-gantt-base-colors-border: #e0e0e0;--dhx-gantt-task-title-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-task-text-font-size: var(--dhx-gantt-font-size);--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 20px;--dhx-gantt-caption-font-size: var(--dhx-gantt-font-size);--dhx-gantt-caption-font-weight: 500;--dhx-gantt-btn-font-weight: 500;--dhx-gantt-heading-font-weight: 500;--dhx-gantt-hours-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-base-colors-text-base: rgba(0, 0, 0, .75);--dhx-gantt-base-transition: .15s ease;--dhx-gantt-header-border: 1px solid transparent;--dhx-gantt-scale-color: rgba(0, 0, 0, .54);--dhx-gantt-base-colors-select: rgba(0, 199, 181, .2);--dhx-gantt-base-colors-hover-color: var(--dhx-gantt-base-colors-select);--dhx-gantt-border-radius: 0;--dhx-gantt-task-border-radius: 18px;--dhx-gantt-btn-text-transform: uppercase;--dhx-gantt-btn-padding: 1px 20px 0;--dhx-gantt-link-handle-size: 16px;--dhx-gantt-progress-handle-background: #FFF;--dhx-gantt-progress-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-lightbox-title-background: var(--dhx-gantt-container-background);--dhx-gantt-lightbox-title-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-lightbox-title-font-size: calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-lightbox-padding: 30px;--dhx-gantt-lightbox-width: 610px;--dhx-gantt-lightbox-wide-max-width: 640px;--dhx-gantt-btn-order: row;--dhx-gantt-btn-outline-border-color: transparent;--dhx-gantt-btn-outline-border-hover: transparent;--dhx-gantt-btn-outline-border-active: transparent;--dhx-gantt-btn-outline-border-color-disabled: transparent}:root[data-gantt-theme=material] .dhx_cal_ltitle{font-weight:400;text-transform:uppercase;padding:18px var(--dhx-gantt-lightbox-padding) 8px;border-bottom-color:transparent}:root[data-gantt-theme=material] .gantt_grid .gantt_grid_scale .gantt_grid_head_cell,:root[data-gantt-theme=material] .gantt_task .gantt_task_scale .gantt_scale_cell{font-weight:500;text-transform:uppercase}:root[data-gantt-theme=material] .dhx_cal_ltitle_controls{--dhx-gantt-base-colors-icons: var(--dhx-gantt-lightbox-title-color)}:root[data-gantt-theme=material] .gantt_cal_lsection{margin-top:12px;margin-bottom:4px}:root[data-gantt-theme=material] .gantt_cal_ltitle{padding:18px var(--dhx-gantt-lightbox-padding);border-bottom-color:transparent}:root[data-gantt-theme=material] .gantt_cal_lcontrols{padding-bottom:40px;padding-top:30px}:root[data-gantt-theme=material] .gantt_add,:root[data-gantt-theme=material] .gantt_grid_head_add{--dhx-gantt-base-colors-icons: #70d0c2;--dhx-gantt-base-colors-icons-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 12.6%);--dhx-gantt-base-colors-icons-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 28.5%)}:root[data-gantt-theme=material] .gantt_grid_data .gantt_row,:root[data-gantt-theme=material] .gantt_grid_data .gantt_row.odd{transition:background var(--dhx-gantt-base-transition)}:root[data-gantt-theme=material] .gantt_grid_head_cell{transition:border-color ground var(--dhx-gantt-base-transition);border-right:1px solid transparent}:root[data-gantt-theme=material] .gantt_grid_scale:hover .gantt_grid_head_cell{border-right:var(--dhx-gantt-grid-scale-border-vertical)}:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap .gantt_grid_column_resize{transition:background var(--dhx-gantt-base-transition);background-color:transparent}:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap:hover .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border)}:root[data-gantt-theme=material] div.gantt_grid_scale:after,:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{content:"";width:100%;display:block;height:1px;background-color:transparent;position:absolute;box-shadow:0 1px 2px #0003,0 2px 3px #0000001a;z-index:1}:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{bottom:-1px}:root[data-gantt-theme=material] .gantt_link_control{--dhx-gantt-link-handle-border: var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background: #FFF;--dhx-gantt-link-handle-border-hover: var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background-hover: #FFF}:root[data-gantt-theme=material] .gantt_task_line.gantt_milestone{margin-top:-1px;--dhx-gantt-task-border-radius: 2px}:root[data-gantt-theme=contrast-white]{--dhx-gantt-theme: contrast-white;--dhx-gantt-base-colors-disabled: #C2C2C2;--dhx-gantt-base-colors-text-light: #303030;--dhx-gantt-base-colors-text-base: #303030;--dhx-gantt-base-colors-background: #FFFFFF;--dhx-gantt-base-colors-background-alt: #929292;--dhx-gantt-base-colors-border: #4D595B;--dhx-gantt-base-colors-border-light: #4D595B;--dhx-gantt-base-colors-text-on-fill: #FFF;--dhx-gantt-base-colors-primary: #0A47CD;--dhx-gantt-base-colors-text-on-fill: rgba(255, 255, 255, .9);--dhx-gantt-task-background: #0A47CD;--dhx-gantt-task-border: 1px solid rgba(0, 0, 0, .1);--dhx-gantt-base-colors-warning: #FCBA2E;--dhx-gantt-base-colors-success: #77D257;--dhx-gantt-base-colors-error: #ee3d31;--dhx-gantt-base-colors-error-text: #141414;--dhx-gantt-btn-color: #FFFFFF;--dhx-gantt-btn-color-hover: #FFFFFF;--dhx-gantt-btn-color-active: #FFFFFF;--dhx-gantt-base-colors-select: #E7E5E5;--dhx-gantt-base-colors-hover-color: #E7E5E5;--dhx-gantt-base-colors-icons: #303030;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #FFF;--dhx-gantt-popup-border: 1px solid #4D595B;--dhx-gantt-font-size: 16px;--dhx-gantt-heading-font-size: 24px;--dhx-gantt-important-font-size: 16px;--dhx-gantt-regular-font-size: 16px;--dhx-gantt-caption-font-size: 16px;--dhx-gantt-btn-outline-color-hover: #212121;--dhx-gantt-btn-outline-color-active: #FFFFFF}:root[data-gantt-theme=contrast-black]{--dhx-gantt-theme: contrast-black;--dhx-gantt-base-colors-disabled: #3d3d3d;--dhx-gantt-base-colors-text-light: #cfcfcf;--dhx-gantt-base-colors-text-base: #FFFFFF;--dhx-gantt-base-colors-background: #141414;--dhx-gantt-base-colors-background-alt: #4f4f4f;--dhx-gantt-base-colors-border: rgba(255, 255, 255, .8);--dhx-gantt-base-colors-border-light: rgba(255, 255, 255, .8);--dhx-gantt-base-colors-text-on-fill: #141414;--dhx-gantt-base-colors-primary: #A395FF;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-project-background: #77D257;--dhx-gantt-milestone-background: #FCBA2E;--dhx-gantt-task-background: #A395FF;--dhx-gantt-task-border: 1px solid rgba(0, 0, 0, .1);--dhx-gantt-base-colors-warning: #694E02;--dhx-gantt-base-colors-success: #115700;--dhx-gantt-base-colors-error: #FFA7A0;--dhx-gantt-base-colors-error-text: #141414;--dhx-gantt-base-colors-select: #2A2A2A;--dhx-gantt-base-colors-hover-color: #2A2A2A;--dhx-gantt-base-colors-icons: #AAAAAA;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #1B1B1C;--dhx-gantt-undo-delete-background: var(--dhx-gantt-popup-background);--dhx-gantt-undo-delete-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-popup-border: 1px solid #4B4B4B;--dhx-gantt-font-size: 16px;--dhx-gantt-heading-font-size: 24px;--dhx-gantt-important-font-size: 16px;--dhx-gantt-regular-font-size: 16px;--dhx-gantt-caption-font-size: 16px;--dhx-gantt-btn-outline-color-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-btn-outline-color-active: var(--dhx-gantt-base-colors-text-light)}.dhx_gantt_button--mixin{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px}.dhx_gantt_button--mixin:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_button--mixin:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_button--mixin:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.dhx_gantt_button_outline--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_danger_outline--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-lighter);--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-base-colors-icons)}.dhx_gantt_button_danger_link--mixin{--dhx-gantt-icon-size: 18px;padding:6px 0;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.dhx_gantt_button_link--mixin{padding:6px 0;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.dhx_gantt_button_icon--mixin{min-width:32px;height:32px;border-radius:50%;padding:6px 0;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.dhx_gantt_button_icon--mixin:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.dhx_gantt_button_icon--mixin:active{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-active)}.dhx_gantt_button_icon--mixin:disabled{--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color-disabled)}.dhx_gantt_btn,.dhx_gantt_btn_danger,.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline,.dhx_gantt_btn_danger_link,.gantt_qi_big_icon,.gantt_btn_set{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px}.dhx_gantt_btn:hover,.dhx_gantt_btn_danger:hover,.dhx_gantt_btn_outline:hover,.dhx_gantt_btn_danger_outline:hover,.dhx_gantt_btn_danger_link:hover,.gantt_qi_big_icon:hover,.gantt_btn_set:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_btn:active,.dhx_gantt_btn_danger:active,.dhx_gantt_btn_outline:active,.dhx_gantt_btn_danger_outline:active,.dhx_gantt_btn_danger_link:active,.gantt_qi_big_icon:active,.gantt_btn_set:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_btn:disabled,.dhx_gantt_btn_danger:disabled,.dhx_gantt_btn_outline:disabled,.dhx_gantt_btn_danger_outline:disabled,.dhx_gantt_btn_danger_link:disabled,.gantt_qi_big_icon:disabled,.gantt_btn_set:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px}.gantt_popup_button:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_popup_button:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_popup_button:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button:not(.gantt_ok_button){--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_ok_button{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger,.dhx_gantt_button_danger_outline{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_link,.gantt_qi_big_icon{padding:6px 0;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}@font-face{font-family:dhx-gantt-icons;src:url(data:font/woff;base64,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) format("woff"),url(data:font/woff2;base64,d09GMgABAAAAAAVgAAsAAAAADHgAAAUSAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEQgqGcIV9ATYCJANECyQABCAFhGoHhAEbGwsjEXaDUZpA9o+E7LTkMj3uJ6P42UJ6Z4Ln+XfLzk2CvYeOpONCV4Ua1JQhX1URmFVluib+pVo1AmBTZxn2J/LjFhx7e7s/rSHL0LOlnKzQ/7+fq5uXLMxKJUVK+qL33Y+qJLHEIRInHVGNYiGPUMhUL60DAmPTWQn6KmyefREEUFxCDCPes3+S4LTR82ZQgoUYLzCvLNMmTxyN1wvDqqgseBHcTTeVkOzCBfzJl0DL+M13BRkABi4TcajBExLjeP2wHA5LFCiVXmh9zYgzQG++CUQPLELmVMdNw5zmRTFRqjiLrubcFgKHw7kch2XIHvZsIBiYWLi8f/M8ePGh0PgJECREGMSNIH70n+eH4bAUwBgNANAEAC0A0AUAugFADwDoBQB9AKACADUA6AcAAwBgEAAMAYBhNMRBZLhBDVAJ/A9yMUJZZhGRcQZmwWEUB8vn83ssYg2SleX1iRO7tMs0LX8o0smyHI3TnEy1tjlKki1OW1PKaVlMbmpLNvuq1hjRopqcKjTsMEebynCoqqXNKcTmczJsZWrDWZXupLe2i6hmjXJsVaDQ4mxNr9q3JbO6fXKawqQSZ0tB05DW9tV2LDM4iXacIcOcYUMdrVQRhtIu6013lU7vK0jueyAjsrr9wUInzy3PZu9YfWfHc1ufefj2Vbc99LTTmrGbMs+qLc+/vH/VI6+8oLd+9pasviO537M6Cr35dHGmRzwyRhSLxOPcc+miPk5ZNfnn+0giEU9ECmpAQ0//coJFsevWlK+5rlfv4MabQzczNdF1Z9XOroMHqXQ2mj0c/S/Ky9dcuaB0wZXdu/mXbDq5KZ3ouqtqV9dBlefsG9MHdo1T/+tMZtO45eOGv/hx7OPW4seKSY9VBwrkIL6+5s555u0D27cFg2//646/fPNH8UD88vjP+/dff32xKqlHD/zAstSB//l/82PFjw0T+/Urzl8H32THjRw57pYJ8yKfqE/VJ5F5LKvNj2V/bfylI9YQ6/il8ddsbOCjtbdsuvzccrv4y5rOl0Vrvyyu2e2tsb9b1q8sWXb1qCR5rMitEvIZyY21p2b7D5pDkDvBOQkZpuNiSDThpNhVcQfEAz7eJVhqJUvcNzxmyS9PKwIc4F4oygL8KkUknJXoW/t9+GqsER4ZuuG4V0sUYFn946ugd6upTcOL4cYLNGGGU+VyUvtO5p8mpqJl0ZuM2wN7KgxEtCiXfHGWNACFAnKIhDDv7jZBCDWuCAYeQnPZnCo2aktfb3WhucLqJkQXq6KVgZtr8lmMiVg+hAq2GVaDIFmrSQXPqy39t1YXNsesbipEWRUpafpImgu/ZIV2W257FMn9SJi+wc6hZ0Vrma/+gZMnVHVRKZ/iBAjcC2g17CotthExyjBFdSQUCIHUxHSGUQonMh3K0ri3VIwUM+22HNujSI4fCdM34J059NysAxV1/4GTT7yjqCmomqtPBLs49wI6ZtiHMWkxSePGGFXUZYqKYzemoRykTDGZ1POdYZQC1yFnOlBavZmmpNixEh/5ocCfyj6IiCGmWOISt3jEK77P6Gp+CUhQQhKWiORxd520raat1vbMtLa6GBxvlBPN06Xr4hgowac/M2ES7j1KG8AY3tEkAvqjgQcTBa+/7Ez21ukZ0GfCRv5duaohgMCjwnckqV2AxY99uCiZzhDH2zgtAs5nqM+7jeyue72MVL7XpDegKczprSLTjBr0pW5bT2nxETjLAAA=) format("woff2")}.dhx_gantt_icon:before,.dhx_menu_icon:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.dhx_gantt_icon.dhx_gantt_icon_arrow_down:before,.dhx_menu_icon.dhx_gantt_icon_arrow_down:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_arrow_up:before,.dhx_menu_icon.dhx_gantt_icon_arrow_up:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_close:before,.dhx_menu_icon.dhx_gantt_icon_close:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_left_dotted:before,.dhx_menu_icon.dhx_gantt_icon_constraint_left_dotted:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_left_solid:before,.dhx_menu_icon.dhx_gantt_icon_constraint_left_solid:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_right_dotted:before,.dhx_menu_icon.dhx_gantt_icon_constraint_right_dotted:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_constraint_right_solid:before,.dhx_menu_icon.dhx_gantt_icon_constraint_right_solid:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_delete:before,.dhx_menu_icon.dhx_gantt_icon_delete:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_dots_vertical:before,.dhx_menu_icon.dhx_gantt_icon_dots_vertical:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_edit:before,.dhx_menu_icon.dhx_gantt_icon_edit:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_menu_down:before,.dhx_menu_icon.dhx_gantt_icon_menu_down:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_menu_right:before,.dhx_menu_icon.dhx_gantt_icon_menu_right:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_minus:before,.dhx_menu_icon.dhx_gantt_icon_minus:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_plus:before,.dhx_menu_icon.dhx_gantt_icon_plus:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_rounded_arrow_right:before,.dhx_menu_icon.dhx_gantt_icon_rounded_arrow_right:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_timer:before,.dhx_menu_icon.dhx_gantt_icon_timer:before{content:""}.gantt_container{background:var(--dhx-gantt-container-background);color:var(--dhx-gantt-container-color);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);border:1px solid var(--dhx-gantt-base-colors-border);position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_task,.gantt_grid{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);border-bottom:var(--dhx-gantt-scale-border-horizontal);box-sizing:border-box}.gantt_grid_scale{background:var(--dhx-gantt-grid-scale-background);color:var(--dhx-gantt-grid-scale-color)}.gantt_task_scale{background:var(--dhx-gantt-timeline-scale-background);color:var(--dhx-gantt-timeline-scale-color)}.gantt_task_vscroll{background:var(--dhx-gantt-container-background)}.gantt_scale_line{box-sizing:border-box;border-top:var(--dhx-gantt-scale-border-horizontal)}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:var(--dhx-gantt-grid-scale-border-vertical);text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative;background:var(--dhx-gantt-grid-body-background)}.gantt_row{position:relative;-webkit-user-select:none;user-select:none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;cursor:pointer;position:relative;opacity:.6}.gantt_add:before,.gantt_grid_head_add:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_add:before,.gantt_grid_head_add:before{content:""}.gantt_grid_head_cell.gantt_grid_head_add{opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{background-color:var(--dhx-gantt-base-colors-hover-color)}.gantt_grid_data .gantt_row:hover .gantt_add{opacity:1}.gantt_task_row,.gantt_row{border-bottom:var(--dhx-gantt-task-row-border);background:var(--dhx-gantt-task-row-background)}.gantt_row.odd,.gantt_task_row.odd{background:var(--dhx-gantt-task-row-background--odd)}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border);height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:var(--dhx-gantt-base-colors-border-light);top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:#e7e7e780;height:100%;width:100%}.gantt_drag_marker.gantt_grid_resize_area{border-left:var(--dhx-gantt-scale-border-vertical);border-right:var(--dhx-gantt-scale-border-vertical)}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:var(--dhx-gantt-scale-border-horizontal);border-bottom:var(--dhx-gantt-scale-border-horizontal)}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:var(--dhx-gantt-grid-cell-border);padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap}.gantt_cell_tree{display:flex;gap:4px;flex-wrap:nowrap}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0px}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{position:relative;display:inline-block;white-space:nowrap;overflow:hidden;border-right:var(--dhx-gantt-grid-scale-border-vertical);text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:var(--dhx-gantt-timeline-scale-border-vertical)}.gantt_layout_cell.gantt_ver_scroll{width:0px;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0px;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent,.gantt_tree_icon{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0;overflow:hidden;width:auto;text-overflow:ellipsis}.gantt_tree_icon.gantt_open,.gantt_tree_icon.gantt_close{width:20px;cursor:pointer}.gantt_tree_icon.gantt_open:before,.gantt_tree_icon.gantt_close:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_tree_icon.gantt_open:before{content:""}.gantt_tree_icon.gantt_close:before{content:""}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open,.gantt_tree_icon.gantt_folder_closed,.gantt_tree_icon.gantt_file{display:none}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:0;width:7px;height:13px}.gantt_grid_head_cell .gantt_sort.gantt_asc:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_grid_head_cell .gantt_sort.gantt_asc:before{content:""}.gantt_grid_head_cell .gantt_sort.gantt_desc:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_grid_head_cell .gantt_sort.gantt_desc:before{content:""}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:var(--dhx-gantt-base-colors-error)}.gantt_status{right:1px;padding:5px 10px;background:#9b9b9b1a;position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:var(--dhx-gantt-grid-scale-border-vertical);opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:var(--dhx-gantt-grid-scale-border-vertical);opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:var(--dhx-gantt-base-colors-primary);transform:translate(-1px)}.gantt_grid_target_marker:before,.gantt_grid_target_marker:after{display:block;content:"";position:absolute;left:-5px;width:0px;height:0px;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:var(--dhx-gantt-base-colors-primary)}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:var(--dhx-gantt-base-colors-primary)}.gantt_message_area{position:fixed;right:5px;width:320px;z-index:1000}.gantt-info{min-width:120px;padding:12px;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);font-weight:var(--dhx-gantt-regular-font-weight);line-height:var(--dhx-gantt-regular-line-height);z-index:14;overflow:hidden;margin:5px 5px 10px;transition:all .5s ease;background:var(--dhx-gantt-info-background);color:var(--dhx-gantt-info-color);border:var(--dhx-gantt-info-border);box-shadow:var(--dhx-gantt-info-shadow)}.gantt-info.hidden{height:0px;padding:0;border-width:0px;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;position:fixed;min-width:300px;width:var(--dhx-gantt-modal-width);background:var(--dhx-gantt-modal-background);box-shadow:var(--dhx-gantt-box-shadow-l);border:var(--dhx-gantt-modal-border);z-index:18;border-radius:var(--dhx-gantt-modal-border-radius);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);color:var(--dhx-gantt-popup-color);line-height:150%}.gantt_popup_title{border-top-left-radius:var(--dhx-gantt-modal-border-radius);border-top-right-radius:var(--dhx-gantt-modal-border-radius);text-transform:uppercase;font-weight:var(--dhx-gantt-heading-font-weight);padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding);display:flex;justify-content:center;align-items:center}.gantt_popup_text{padding:var(--dhx-gantt-modal-padding);display:flex;justify-content:center;align-items:center}.gantt_popup_controls{display:flex;flex-direction:var(--dhx-gantt-btn-order);padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding);align-items:center;gap:12px}.gantt-info,.gantt_popup_button,.gantt_button{-webkit-user-select:none;user-select:none;cursor:pointer}.gantt_popup_text{overflow:hidden}div.dhx_modal_cover{background:#44494e;opacity:.2;position:fixed;z-index:17;left:0;top:0;width:100%;height:100%;border:none}.gantt_popup_controls{border-radius:var(--dhx-gantt-border-radius)}.gantt_message_area .gantt-error{--dhx-gantt-info-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-info-color: var(--dhx-gantt-base-colors-text-on-fill)}.gantt_message_area .gantt-warning{--dhx-gantt-info-background: var(--dhx-gantt-base-colors-warning);--dhx-gantt-info-color: var(--dhx-gantt-base-colors-text-on-fill)}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:var(--dhx-gantt-task-font-size);color:var(--dhx-gantt-task-color);width:100%;padding-top:1px;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:var(--dhx-gantt-task-progress-color)}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:var(--dhx-gantt-task-border-radius);position:absolute;box-sizing:border-box;background:var(--dhx-gantt-task-background);border:var(--dhx-gantt-task-border);-webkit-user-select:none;user-select:none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress,.gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:var(--dhx-gantt-base-colors-text-light);top:0;font-size:calc(var(--dhx-gantt-task-font-size) - 1px)}.gantt_side_content.gantt_left{right:100%;padding-right:var(--dhx-gantt-base-padding)}.gantt_side_content.gantt_right{left:100%;padding-left:var(--dhx-gantt-base-padding)}.gantt_side_content.gantt_link_crossing{margin-top:-6px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow,.gantt_link_corner{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:var(--dhx-gantt-link-background)}.gantt_link_corner{box-sizing:content-box!important;border-color:var(--dhx-gantt-link-background);background-color:transparent}.gantt_task_link:hover{--dhx-gantt-link-background: var(--dhx-gantt-link-background-hover)}.gantt_task_link div.gantt_link_arrow{color:var(--dhx-gantt-link-background)}.gantt_task_link div.gantt_link_arrow:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_task_link div.gantt_link_arrow:before{content:""}.gantt_link_control{position:absolute;width:calc(var(--dhx-gantt-link-handle-offset) + var(--dhx-gantt-link-handle-size));top:50%;display:flex;align-items:center;transition:all var(--dhx-gantt-base-transition)}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;border:2px solid var(--dhx-gantt-link-handle-border);border-radius:50%;height:var(--dhx-gantt-link-handle-size);width:var(--dhx-gantt-link-handle-size);background:var(--dhx-gantt-link-handle-background)}.gantt_link_control div:hover{--dhx-gantt-link-handle-background: var(--dhx-gantt-link-handle-background-hover);--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover)}.gantt_link_control.task_left{transform:translate(-100%,-50%);left:0;justify-content:flex-start}.gantt_link_control.task_right{transform:translate(100%,-50%);right:0;justify-content:flex-end}.gantt_task_line.gantt_link_source .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_link_source .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_drag{display:block}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag{display:flex}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px var(--dhx-gantt-base-colors-primary)}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px var(--dhx-gantt-base-colors-success)}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px var(--dhx-gantt-base-colors-error)}.gantt_link_from_start .gantt_link_control.task_start_date div,.gantt_link_from_end .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div,.link_finish_allow .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-primary)}.link_start_deny .gantt_link_control.task_start_date div,.link_finish_deny .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-error)}.gantt_link_arrow_left{transform:rotate(180deg)}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:16px;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:70%;min-height:12px;bottom:-3px;transform:translate(-50%);z-index:1;align-items:flex-end}.gantt_task_progress_drag:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.gantt_link_tooltip{box-shadow:3px 3px 3px #0003;background-color:var(--dhx-gantt-popup-background);border-left:1px solid var(--dhx-gantt-base-colors-border);border-top:1px solid var(--dhx-gantt-base-colors-border);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);color:var(--dhx-gantt-popup-color);padding:var(--dhx-gantt-base-padding);line-height:var(--dhx-gantt-regular-line-height)}.gantt_link_direction{height:0px;border:none;border-bottom:2px dashed var(--dhx-gantt-base-colors-primary);transform-origin:0% 0%;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}.gantt_row_project{font-weight:500}.gantt_task_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}.gantt_task_line.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_cal_quick_info.gantt_project,.gantt_task_line.gantt_project{--dhx-gantt-task-color: var(--dhx-gantt-project-color);--dhx-gantt-task-background: var(--dhx-gantt-project-background);--dhx-gantt-task-progress-color: var(--dhx-gantt-project-progress-color)}.gantt_task_line.gantt_project.gantt_task_line_planned{--dhx-gantt-task-background: var(--dhx-gantt-base-colors-text-light)}.gantt_task_line_planned{--dhx-gantt-scheduled-summary-bracket-size: 8px}.gantt_task_line_planned:before,.gantt_task_line_planned:after{content:"";position:absolute;top:0;width:0;height:0;border-style:solid;border-color:transparent}.gantt_task_line_planned:before{border-width:var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0 0;border-right-color:var(--dhx-gantt-task-background);transform:rotate(180deg)}.gantt_task_line_planned:after{border-width:0 var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0;border-right-color:var(--dhx-gantt-task-background);right:0}.gantt_task_line_actual{opacity:.3;--dhx-gantt-task-border-radius: 2px}.gantt_task_line.gantt_project.gantt_project_scheduling_conflict .gantt_task_line_actual{--dhx-gantt-task-background: var(--dhx-gantt-base-colors-error)}.gantt_task_line.gantt_project.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_task_line.gantt_milestone{--dhx-gantt-task-background: var(--dhx-gantt-milestone-background);visibility:hidden;border:none;box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:var(--dhx-gantt-task-background)}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:var(--dhx-gantt-task-background);opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected{box-shadow:0 0 5px var(--dhx-gantt-task-background)}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 var(--dhx-gantt-task-background)}.gantt_critical_task{--dhx-gantt-task-background: var(--dhx-gantt-link-critical-background)}.gantt_critical_task .gantt_task_progress{--dhx-gantt-task-progress: rgba(0, 0, 0, .4)}.gantt_critical_link{--dhx-gantt-link-background: var(--dhx-gantt-link-critical-background)}.gantt_link_arrow{--dhx-gantt-base-colors-icons: var(--dhx-gantt-link-background)}.gantt_row:focus,.gantt_cell:focus,.gantt_btn_set:focus,.gantt_qi_big_icon:focus,.gantt_popup_button:focus,.gantt_grid_head_cell:focus{box-shadow:inset 0 0 1px 1px var(--dhx-gantt-base-colors-primary)}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;user-select:none}.gantt_common_input{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);padding:6px 8px;box-sizing:border-box;margin-top:0;margin-bottom:0}.gantt_common_input:focus,.gantt_common_input:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_common_input:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_one_line_input{height:var(--dhx-gantt-control-height)}.gantt_cal_cover,.gantt_cal_cover *{box-sizing:border-box}.gantt_cal_light{margin-top:auto;margin-bottom:auto;min-width:var(--dhx-gantt-lightbox-width);width:max-content;max-width:var(--dhx-gantt-lightbox-max-width);height:auto;-webkit-tap-highlight-color:transparent;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);position:absolute;z-index:15;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);line-height:142%;border:var(--dhx-gantt-lightbox-border);border-radius:var(--dhx-gantt-popup-border-radius)}.gantt_cal_light.gantt_cal_light_wide{--dhx-gantt-lightbox-width: var(--dhx-gantt-lightbox-wide-max-width);--dhx-gantt-lightbox-max-width: var(--dhx-gantt-lightbox-wide-max-width)}.gantt_cal_light textarea,.gantt_cal_light input,.gantt_cal_light select{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);padding:6px 8px;box-sizing:border-box;margin-top:0;margin-bottom:0}.gantt_cal_light textarea:focus,.gantt_cal_light input:focus,.gantt_cal_light select:focus,.gantt_cal_light textarea:focus-visible,.gantt_cal_light input:focus-visible,.gantt_cal_light select:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_cal_light textarea:disabled,.gantt_cal_light input:disabled,.gantt_cal_light select:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_cal_light input,.gantt_cal_light select{height:var(--dhx-gantt-control-height)}.gantt_cal_light input[type=select],.gantt_cal_light input[type=checkbox]{height:var(--dhx-gantt-checkbox-height)}.gantt_cal_light .gantt_time{display:none}.gantt_cal_ltitle{font-size:var(--dhx-gantt-lightbox-title-font-size);font-weight:var(--dhx-gantt-heading-font-weight);line-height:142%;background:var(--dhx-gantt-lightbox-title-background);color:var(--dhx-gantt-lightbox-title-color);border-bottom:var(--dhx-gantt-default-border);padding:calc(var(--dhx-gantt-base-padding) * 3) var(--dhx-gantt-lightbox-padding);overflow:hidden;white-space:nowrap;display:flex;flex-direction:row;justify-content:space-between;gap:calc(var(--dhx-gantt-base-padding) * 2);border-top-right-radius:var(--dhx-gantt-popup-border-radius);border-top-left-radius:var(--dhx-gantt-popup-border-radius)}.gantt_cal_ltitle .gantt_mark{display:none}.gantt_cal_ltitle .gantt_cal_ltitle_descr{overflow:hidden;text-overflow:ellipsis}.gantt_cal_ltitle .gantt_cal_ltitle_controls{cursor:pointer;--dhx-gantt-icon-size: 18px}.gantt_cal_light_rtl{direction:rtl}.gantt_cal_light_wide.gantt_cal_light_rtl .gantt_custom_button{right:auto;left:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_cal_larea{border:none;padding:0 var(--dhx-gantt-lightbox-padding) 4px;overflow:hidden;height:auto;gap:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:16;top:0;left:0;background-color:#0000004d;display:flex;justify-content:center;align-items:center;overflow:auto}.gantt_lightbox_time_select{min-width:80px}.gantt_lightbox_day_select{min-width:60px}.gantt_lightbox_month_select{min-width:110px}.gantt_lightbox_year_select{min-width:77px}.gantt_cal_light_full{width:auto}.gantt_cal_light_wide .gantt_cal_larea{display:flex;flex-direction:column;padding-top:12px;gap:12px}.gantt_cal_light_wide .gantt_wrap_section{display:flex;flex:0;position:relative}.gantt_cal_light_wide .gantt_cal_lsection{width:120px;justify-content:start;align-items:start;flex-shrink:0;margin-top:0;margin-bottom:0;padding:4px 8px}.gantt_cal_light_wide .gantt_custom_button{position:absolute;left:auto;right:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_cal_light_wide .gantt_cal_ltext{flex:1}.gantt_cal_light_wide .gantt_section_time{justify-content:start}.gantt_cal_light_wide .gantt_fullday{margin-left:unset}.gantt_duration{display:flex;justify-content:flex-start;align-items:center;gap:4px}.gantt_duration .gantt_duration_end_date{color:var(--dhx-gantt-base-colors-text-light);min-width:130px}.gantt_duration .gantt_duration_value,.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);padding:6px 8px;box-sizing:border-box;margin-top:0;margin-bottom:0;text-align:center}.gantt_duration .gantt_duration_value:focus,.gantt_duration .gantt_duration_dec:focus,.gantt_duration .gantt_duration_inc:focus,.gantt_duration .gantt_duration_value:focus-visible,.gantt_duration .gantt_duration_dec:focus-visible,.gantt_duration .gantt_duration_inc:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_duration .gantt_duration_value:disabled,.gantt_duration .gantt_duration_dec:disabled,.gantt_duration .gantt_duration_inc:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_duration_inputs{display:flex}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0;border-radius:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:26px;padding:1px 4px;color:var(--dhx-gantt-base-colors-primary);font-size:18px;border-radius:var(--dhx-gantt-border-radius);cursor:pointer}.gantt_duration .gantt_duration_dec{border-top-right-radius:0;border-bottom-right-radius:0}.gantt_duration .gantt_duration_inc{border-top-left-radius:0;border-bottom-left-radius:0}.gantt_duration .gantt_duration_inc{margin-right:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid var(--dhx-gantt-base-colors-border-light);cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_section_resources{overflow:hidden;display:flex;flex-direction:column;width:100%}.gantt_resources_filter{display:flex;flex-grow:0;align-items:center}.gantt_resources_filter label{display:inline-flex;gap:2px;align-items:center}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 6px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_lcontrols{display:flex;flex-direction:var(--dhx-gantt-btn-order);gap:calc(var(--dhx-gantt-base-padding)*2);padding:12px var(--dhx-gantt-lightbox-padding)}.gantt_cal_lcontrols .gantt_btn_set{display:flex;flex-direction:row;gap:var(--dhx-gantt-base-padding)}.gantt_cal_lcontrols .gantt_btn_set.gantt_delete_btn_set{--dhx-gantt-icon-size: 18px;padding:6px 0;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}.gantt_cal_lcontrols .gantt_btn_set:not(.gantt_save_btn_set,.gantt_delete_btn_set){--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_cal_lcontrols .gantt_btn_set .gantt_btn_inner{display:none}.gantt_cal_lcontrols .gantt_btn_set .gantt_delete_btn:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_cal_lcontrols .gantt_btn_set .gantt_delete_btn:before{content:""}.gantt_cal_lcontrols .gantt_cal_lcontrols_push_right{margin-left:auto}.gantt_cal_ltext textarea{width:100%;height:100%;resize:none;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);line-height:142%}.gantt_section_time_spacer,.gantt_lightbox_minical_spacer{visibility:hidden;height:0;flex-basis:100%}.gantt_section_time{--dhx-gantt-lightbox-time-font-size: var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-time-font-weight: var(--dhx-gantt-important-font-weight);font-size:var(--dhx-gantt-lightbox-time-font-size);font-weight:var(--dhx-gantt-lightbox-time-font-weight);line-height:142%;display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--dhx-gantt-base-padding) * 2);row-gap:var(--dhx-gantt-base-padding)}.gantt_section_time .gantt_section_time_icon{width:calc(var(--dhx-gantt-base-module) * 2);height:calc(var(--dhx-gantt-base-module) * 2);border-radius:2px;background:var(--dhx-gantt-base-colors-primary)}.gantt_section_duration{gap:16px}.gantt_fullday{margin-left:auto}.gantt_cal_light_rtl .gantt_fullday{margin-left:unset;margin-right:auto}.gantt_cal_lsection label{font-weight:var(--dhx-gantt-heading-font-weight);display:flex;align-items:center;gap:4px;width:100%}.gantt_cal_lsection{display:flex;margin-top:12px;margin-bottom:4px}.gantt_cal_lsection .gantt_custom_button{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding, 0 20px);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled);order:1;margin-left:auto;margin-right:unset}.gantt_cal_lsection .gantt_custom_button:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_cal_lsection .gantt_custom_button:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_cal_lsection .gantt_custom_button:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_cal_light_rtl .gantt_custom_button{margin-left:unset;margin-right:auto}.gantt_cal_checkbox{display:flex;gap:var(--dhx-gantt-base-padding)}.gantt_cal_wide_checkbox{padding:4px 0}.gantt_cal_radio input{margin:var(--dhx-gantt-base-padding)}.gantt_cal_radio_item{display:flex;gap:var(--dhx-gantt-base-padding);align-items:center}.gantt_cal_radio{display:flex;gap:4px}.gantt_cal_radio_vertical{flex-direction:column;overflow:auto;--dhx-gantt-control-height: 20px}.gantt_cal_lcheckbox,.gantt_cal_lradio{display:flex;flex-wrap:wrap;gap:8px}.gantt_cal_lcheckbox label,.gantt_cal_lradio label{display:flex;align-items:center;gap:4px}.gantt_cal_template{position:relative;padding-top:4px;padding-bottom:4px}.gantt_cal_light .gantt_readonly{color:var(--dhx-gantt-base-colors-readonly)}.gantt_cal_quick_info{--dhx-gantt-quick-info-font-size: var(--dhx-gantt-font-size);position:absolute;z-index:8;font-size:var(--dhx-gantt-quick-info-font-size);background:var(--dhx-gantt-popup-background);color:var(--dhx-gantt-popup-color);border:var(--dhx-gantt-popup-border);padding:calc(var(--dhx-gantt-base-padding)*2) calc(var(--dhx-gantt-base-padding)*3);border-radius:var(--dhx-gantt-border-radius);width:300px;display:flex;flex-direction:column;box-shadow:var(--dhx-gantt-box-shadow-s);transition:left .5s ease,right .5s ease}.gantt_cal_qi_tcontrols{display:flex;justify-content:end;height:8px}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn{min-width:32px;height:32px;border-radius:50%;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent;width:unset;min-width:unset;padding:2px;font-size:18px;cursor:pointer;height:20px;position:relative;z-index:1}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:active{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-active)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:disabled{--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color-disabled)}.gantt_cal_qi_title,.gantt_cal_qi_controls,.gantt_cal_qi_content{padding:0 calc(var(--dhx-gantt-base-padding) * 3)}.gantt_cal_qi_title{display:flex;flex-direction:column;gap:12px;padding-right:14px}.gantt_cal_qi_tcontent{font-size:var(--dhx-gantt-heading-font-size);font-weight:var(--dhx-gantt-heading-font-weight);line-height:150%;position:relative;display:flex;flex-direction:row;justify-content:start;align-items:center;gap:8px;overflow:hidden;flex-grow:0;text-overflow:ellipsis;white-space:nowrap}.gantt_cal_qi_tcontent>span{text-overflow:ellipsis;overflow:hidden}.gantt_cal_qi_tcontent:before{display:var(--dhx-gantt-quick-info-dot-display, block);content:"";flex-shrink:0;width:8px;height:8px;border-radius:2px;background:var(--dhx-gantt-task-background)}.gantt_cal_qi_tdate{font-size:var(--dhx-gantt-important-font-size);font-weight:var(--dhx-gantt-important-font-weight);line-height:var(--dhx-gantt-important-line-height)}.gantt_cal_qi_content{padding-top:16px;padding-bottom:8px}.gantt_cal_qi_controls{display:flex;flex-direction:row;justify-content:start;align-items:center;padding-top:8px;gap:12px;color:var(--dhx-gantt-base-colors-primary)}.gantt_cal_qi_controls>div:first-child{margin-left:-3px}.gantt_menu_icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color)}.dhx_gantt_icon.dhx_gantt_icon_edit,.dhx_menu_icon.dhx_gantt_icon_edit{--dhx-gantt-icon-size: var(--dhx-gantt-font-size)}.gantt_tooltip{padding:8px 30px 8px 8px;position:absolute;z-index:50;white-space:nowrap;box-shadow:var(--dhx-gantt-box-shadow-m);background:var(--dhx-gantt-tooltip-background);color:var(--dhx-gantt-tooltip-color);border:var(--dhx-gantt-tooltip-border);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);line-height:var(--dhx-gantt-regular-line-height);font-weight:var(--dhx-gantt-regular-font-weight);border-radius:var(--dhx-gantt-tooltip-border-radius);display:flex;flex-direction:column;align-items:flex-start;gap:4px}.gantt_resource_marker{position:absolute;text-align:center;font-size:var(--dhx-gantt-font-size);color:#fff}.gantt_resource_marker_ok{background:var(--dhx-gantt-base-colors-success)}.gantt_resource_marker_overtime{background:var(--dhx-gantt-base-colors-error)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:var(--dhx-gantt-font-size)}.gantt_histogram_fill{background-color:#537cfa4d;background-color:color-mix(in srgb,var(--dhx-gantt-base-colors-primary),transparent 60%);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;position:absolute;background:var(--dhx-gantt-base-colors-primary);margin-top:-1px;margin-left:-1px}.gantt_histogram_vert_bar{width:1px;position:absolute;background:var(--dhx-gantt-base-colors-primary);margin-left:-1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:var(--dhx-gantt-font-size)}.gantt_marker{height:100%;width:1px;top:0;position:absolute;text-align:center;background-color:var(--dhx-gantt-base-colors-error)}.gantt_marker .gantt_marker_content{padding:2px;background:inherit;color:var(--dhx-gantt-base-colors-white);position:absolute;font-size:var(--dhx-gantt-caption-font-size);line-height:var(--dhx-gantt-caption-line-height);font-weight:var(--dhx-gantt-caption-line-weight)}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_file,.gantt_row_placeholder .gantt_add{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:var(--dhx-gantt-base-colors-primary)}.gantt_grid_dnd_marker_line:before{background:var(--dhx-gantt-base-colors-white);width:12px;height:12px;box-sizing:border-box;border:3px solid var(--dhx-gantt-base-colors-primary);border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:0 0 0 2px var(--dhx-gantt-base-colors-primary) inset;background:transparent}.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0;display:none}.gantt_overlay{position:absolute;left:0;top:0;height:inherit;width:inherit}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid var(--dhx-gantt-base-colors-primary);background-color:var(--dhx-gantt-base-colors-primary-lighter)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_constraint_marker{position:absolute;pointer-events:none;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-text-light)}.gantt_constraint_marker.gantt_constraint_marker_snlt,.gantt_constraint_marker.gantt_constraint_marker_fnlt,.gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(180deg)}.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snlt,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnlt,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(0)}.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snet,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnet,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mso{transform:rotate(180deg)}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_row,.gantt_rtl .gantt_cell{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"⇧"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"⇩"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"⇦"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"⇧"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_right{border-right:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_top{border-top:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_bottom{border-bottom:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:solid 2px #ffffff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:#0000001a;z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:#0000001a;z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_container,.gantt_cal_light,.gantt_message_area,.gantt_modal_box,.gantt_cal_quick_info,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--dhx-gantt-font-family)}.gantt_container,.gantt_container *{box-sizing:border-box}.gantt_noselect{-webkit-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row:hover,.gantt_noselect .gantt_grid_data .gantt_row.odd:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);z-index:1;white-space:nowrap;background:var(--dhx-gantt-base-colors-select)}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:var(--dhx-gantt-base-colors-primary);background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker .gantt_row.odd{background-color:var(--dhx-gantt-base-colors-select)}.gantt_drag_marker .gantt_row{border-left:var(--dhx-gantt-scale-border-vertical);border-top:var(--dhx-gantt-scale-border-horizontal)}.gantt_drag_marker .gantt_cell{border-color:var(--dhx-gantt-base-colors-border)}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:var(--dhx-gantt-base-colors-primary-active)}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#537cfa73}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}.gantt_task_deadline{position:absolute;z-index:5;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error)}.gantt_task_deadline:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_task_deadline:before{content:""}.gantt_task_baseline{position:absolute;border-radius:2px;opacity:.9;background:#ffd180;z-index:0;overflow:hidden}.gantt_task_baseline.gantt_milestone_baseline{transform:rotate(45deg)}.gantt_task_baseline.gantt_task_baseline_0{background:var(--dhx-gantt-baseline-background-0)}.gantt_task_baseline.gantt_task_baseline_1{background:var(--dhx-gantt-baseline-background-1)}.gantt_task_baseline.gantt_task_baseline_2{background:var(--dhx-gantt-baseline-background-2)}.gantt_task_baseline.gantt_task_baseline_3{background:var(--dhx-gantt-baseline-background-3)}.gantt_task_baseline.gantt_task_baseline_4{background:var(--dhx-gantt-baseline-background-4)}.gantt_task_baseline.gantt_task_baseline_5{background:var(--dhx-gantt-baseline-background-5)}.gantt_task_baseline.gantt_task_baseline_6{background:var(--dhx-gantt-baseline-background-6)}.gantt_task_baseline.gantt_task_baseline_7{background:var(--dhx-gantt-baseline-background-7)}.gantt_task_baseline.gantt_task_baseline_8{background:var(--dhx-gantt-baseline-background-8)}.gantt_task_baseline.gantt_task_baseline_9{background:var(--dhx-gantt-baseline-background-9)}.gantt_section_baselines{overflow-y:auto;display:flex;flex-direction:column;gap:4px}.gantt_custom_button.gantt_add_baselines{margin-left:0}
diff --git a/codebase/dhtmlxgantt.d.ts b/codebase/dhtmlxgantt.d.ts
index 8433dd4..a1665b3 100644
--- a/codebase/dhtmlxgantt.d.ts
+++ b/codebase/dhtmlxgantt.d.ts
@@ -1,4 +1,4 @@
-// Type definitions for dhtmlxGantt 9.0.0
+// Type definitions for dhtmlxGantt 9.0.1
// Project: https://dhtmlx.com/docs/products/dhtmlxGantt
type GanttCallback = (...args: any[]) => any;
@@ -3387,11 +3387,6 @@ export interface GanttStatic {
*/
resetSkin(): void;
- /**
- * forces the lightbox to resize
- */
- resizeLightbox(): void;
-
/**
* rounds the specified date to the nearest date in the time scale
* @param date the Date object to round or an object with settings
diff --git a/codebase/dhtmlxgantt.es.d.ts b/codebase/dhtmlxgantt.es.d.ts
index 8433dd4..a1665b3 100644
--- a/codebase/dhtmlxgantt.es.d.ts
+++ b/codebase/dhtmlxgantt.es.d.ts
@@ -1,4 +1,4 @@
-// Type definitions for dhtmlxGantt 9.0.0
+// Type definitions for dhtmlxGantt 9.0.1
// Project: https://dhtmlx.com/docs/products/dhtmlxGantt
type GanttCallback = (...args: any[]) => any;
@@ -3387,11 +3387,6 @@ export interface GanttStatic {
*/
resetSkin(): void;
- /**
- * forces the lightbox to resize
- */
- resizeLightbox(): void;
-
/**
* rounds the specified date to the nearest date in the time scale
* @param date the Date object to round or an object with settings
diff --git a/codebase/dhtmlxgantt.es.js b/codebase/dhtmlxgantt.es.js
index 1a0056f..f9a95b9 100644
--- a/codebase/dhtmlxgantt.es.js
+++ b/codebase/dhtmlxgantt.es.js
@@ -1,6 +1,6 @@
/** @license
-dhtmlxGantt v.9.0.0 Standard
+dhtmlxGantt v.9.0.1 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
@@ -47,7 +47,7 @@ function ye(t) {
}
return n;
}
-function Ze() {
+function Xe() {
var t = document.createElement("div");
t.style.cssText = "visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;", document.body.appendChild(t);
var e = t.offsetWidth - t.clientWidth;
@@ -72,15 +72,15 @@ function be(t) {
return typeof t == "string" ? document.getElementById(t) || document.querySelector(t) || document.body : t || document.body;
}
var Ht;
-function Qe(t, e) {
+function Ze(t, e) {
Ht || (Ht = document.createElement("div")), Ht.innerHTML = e;
var n = Ht.firstChild;
return t.appendChild(n), n;
}
-function tn(t) {
+function Qe(t) {
t && t.parentNode && t.parentNode.removeChild(t);
}
-function en(t, e) {
+function tn(t, e) {
for (var n = t.childNodes, i = n.length, a = [], r = 0; r < i; r++) {
var s = n[r];
s.className && s.className.indexOf(e) !== -1 && a.push(s);
@@ -120,11 +120,11 @@ function ft(t, e, n) {
}
return null;
}
-function lt(t, e) {
+function rt(t, e) {
var n = document.documentElement, i = F(e);
return { x: t.clientX + n.scrollLeft - n.clientLeft - i.x + e.scrollLeft, y: t.clientY + n.scrollTop - n.clientTop - i.y + e.scrollTop };
}
-function xe(t, e) {
+function en(t, e) {
const n = F(t), i = F(e);
return { x: n.x - i.x, y: n.y - i.y };
}
@@ -165,18 +165,18 @@ function mt(t) {
for (; t.parentNode && (t = t.parentNode); ) if (t instanceof ShadowRoot) return t.host;
return document.body;
}
-const rn = Object.freeze(Object.defineProperty({ __proto__: null, addClassName: $t, closest: dt, getActiveElement: ce, getChildNodes: en, getClassName: Z, getClosestSizedElement: nn, getFocusableNodes: ye, getNodePosition: F, getRelativeEventPosition: lt, getRelativeNodePosition: xe, getRootNode: mt, getScrollSize: Ze, getTargetNode: kt, hasClass: function(t, e) {
+const rn = Object.freeze(Object.defineProperty({ __proto__: null, addClassName: $t, closest: dt, getActiveElement: ce, getChildNodes: tn, getClassName: Z, getClosestSizedElement: nn, getFocusableNodes: ye, getNodePosition: F, getRelativeEventPosition: rt, getRelativeNodePosition: en, getRootNode: mt, getScrollSize: Xe, getTargetNode: kt, hasClass: function(t, e) {
return "classList" in t ? t.classList.contains(e) : new RegExp("\\b" + e + "\\b").test(t.className);
}, hasShadowParent: function(t) {
return !!mt(t);
-}, insertNode: Qe, isChildOf: J, isShadowDomSupported: an, locateAttribute: et, locateClassName: ft, removeClassName: Ut, removeNode: tn, toNode: be }, Symbol.toStringTag, { value: "Module" })), ot = typeof window < "u" ? window : global;
+}, insertNode: Ze, isChildOf: J, isShadowDomSupported: an, locateAttribute: et, locateClassName: ft, removeClassName: Ut, removeNode: Qe, toNode: be }, Symbol.toStringTag, { value: "Module" })), lt = typeof window < "u" ? window : global;
let Mn = class {
constructor(t) {
this._mouseDown = !1, this._gantt = t, this._domEvents = t._createDomEventScope();
}
attach(t, e, n) {
const i = this._gantt, a = t.getViewPort();
- this._originPosition = ot.getComputedStyle(a).display, this._restoreOriginPosition = () => {
+ this._originPosition = lt.getComputedStyle(a).display, this._restoreOriginPosition = () => {
a.style.position = this._originPosition;
}, this._originPosition === "static" && (a.style.position = "relative");
const r = i.$services.getService("state");
@@ -253,7 +253,7 @@ var Nn = function(t) {
e = {};
}, i;
};
-function st(t) {
+function ot(t) {
var e = new sn();
t.attachEvent = function(n, i, a) {
n = "ev_" + n.toLowerCase(), e.listeners[n] || (e.listeners[n] = Nn(this)), a && a.thisObject && (i = i.bind(a.thisObject));
@@ -281,9 +281,9 @@ function st(t) {
for (var n in e.listeners) e.listeners[n].clear();
};
}
-var Ce = { second: 1, minute: 60, hour: 3600, day: 86400, week: 604800, month: 2592e3, quarter: 7776e3, year: 31536e3 };
+var Te = { second: 1, minute: 60, hour: 3600, day: 86400, week: 604800, month: 2592e3, quarter: 7776e3, year: 31536e3 };
function jt(t) {
- return Ce[t] || Ce.hour;
+ return Te[t] || Te.hour;
}
function vt(t, e) {
if (t.forEach) t.forEach(e);
@@ -307,7 +307,7 @@ function Q(t) {
function yt(t) {
return Q(t) && !isNaN(t.getTime());
}
-function Ee(t, e) {
+function Ce(t, e) {
var n, i = function() {
i.$cancelTimeout(), i.$pending = !0;
var a = Array.prototype.slice.call(arguments);
@@ -323,9 +323,9 @@ function Ee(t, e) {
}, i;
}
function at(t, e) {
- return De(t) && !De(e) && (t = "0"), t;
+ return Ee(t) && !Ee(e) && (t = "0"), t;
}
-function De(t) {
+function Ee(t) {
return t === 0;
}
function Dt(t, e) {
@@ -354,7 +354,7 @@ class Pn {
}, this._gantt = n, this._view = i, this._viewPort = e.viewPort, this._el.classList.add(e.className), typeof e.callback == "function" && (this._callback = e.callback), this.render = () => {
let r;
r = e.render ? e.render(this._startPoint, this._endPoint) : this.defaultRender(this._startPoint, this._endPoint), r !== this._el && (this._el && this._el.parentNode && this._el.parentNode.removeChild(this._el), this._el = r), e.className !== "" && this._el.classList.add(e.className), this.draw();
- }, (a = this._viewPort).attachEvent && a.detachEvent || st(this._viewPort), this._singleRow = e.singleRow, this._useRequestAnimationFrame = e.useRequestAnimationFrame;
+ }, (a = this._viewPort).attachEvent && a.detachEvent || ot(this._viewPort), this._singleRow = e.singleRow, this._useRequestAnimationFrame = e.useRequestAnimationFrame;
}
draw() {
if (this._useRequestAnimationFrame) return requestAnimationFrame(() => {
@@ -419,7 +419,7 @@ class Pn {
}
}
}
-class $e {
+class xe {
constructor(e) {
this._mouseDown = !1, this._calculateDirectionVector = () => {
if (this._trace.length >= 10) {
@@ -462,7 +462,7 @@ class $e {
}, this._gantt = e, this._domEvents = e._createDomEventScope(), this._trace = [];
}
static create(e) {
- return new $e(e);
+ return new xe(e);
}
destructor() {
this._domEvents.detachAll();
@@ -708,7 +708,7 @@ function L(t, e, n) {
function W(t) {
return t !== void 0;
}
-function rt() {
+function st() {
return Xt || (Xt = (/* @__PURE__ */ new Date()).valueOf()), ++Xt;
}
function R(t, e) {
@@ -722,8 +722,8 @@ function on(t, e, n, i) {
function ln(t, e, n, i) {
t.removeEventListener ? t.removeEventListener(e, n, i !== void 0 && i) : t.detachEvent && t.detachEvent("on" + e, n);
}
-const Bn = Object.freeze(Object.defineProperty({ __proto__: null, bind: R, copy: G, defined: W, event: on, eventRemove: ln, mixin: L, uid: rt }, Symbol.toStringTag, { value: "Module" }));
-function we(t, e) {
+const Bn = Object.freeze(Object.defineProperty({ __proto__: null, bind: R, copy: G, defined: W, event: on, eventRemove: ln, mixin: L, uid: st }, Symbol.toStringTag, { value: "Module" }));
+function $e(t, e) {
t = t || on, e = e || ln;
var n = [], i = { attach: function(a, r, s, o) {
n.push({ element: a, event: r, callback: s, capture: o }), t(a, r, s, o);
@@ -740,7 +740,7 @@ function we(t, e) {
}
n.splice(0, n.length);
}, extend: function() {
- return we(this.event, this.eventRemove);
+ return $e(this.event, this.eventRemove);
} };
return i;
}
@@ -777,7 +777,7 @@ class zn {
return this._root || document.body;
}
_calculateTooltipPosition(e) {
- const n = this._gantt, i = this._getViewPortSize(), a = this.getNode(), r = { top: 0, left: 0, width: a.offsetWidth, height: a.offsetHeight, bottom: 0, right: 0 }, s = n.config.tooltip_offset_x, o = n.config.tooltip_offset_y, l = document.body, d = lt(e, l), c = F(l);
+ const n = this._gantt, i = this._getViewPortSize(), a = this.getNode(), r = { top: 0, left: 0, width: a.offsetWidth, height: a.offsetHeight, bottom: 0, right: 0 }, s = n.config.tooltip_offset_x, o = n.config.tooltip_offset_y, l = document.body, d = rt(e, l), c = F(l);
d.y += c.y, r.top = d.y, r.left = d.x, r.top += o, r.left += s, r.bottom = r.top + r.height, r.right = r.left + r.width;
const u = window.scrollY + l.scrollTop;
return r.top < i.top - u ? (r.top = i.top, r.bottom = r.top + r.height) : r.bottom > i.bottom && (r.bottom = i.bottom, r.top = r.bottom - r.height), r.left < i.left ? (r.left = i.left, r.right = i.left + r.width) : r.right > i.right && (r.right = i.right, r.left = r.right - r.width), d.x >= r.left && d.x <= r.right && (r.left = d.x - r.width - s, r.right = r.left + r.width), d.y >= r.top && d.y <= r.bottom && (r.top = d.y - r.height - o, r.bottom = r.top + r.height), r;
@@ -790,7 +790,7 @@ class zn {
}
class Wn {
constructor(e) {
- this._listeners = {}, this.tooltip = new zn(e), this._gantt = e, this._domEvents = we(), this._initDelayedFunctions();
+ this._listeners = {}, this.tooltip = new zn(e), this._gantt = e, this._domEvents = $e(), this._initDelayedFunctions();
}
destructor() {
this.tooltip.hide(), this._domEvents.detachAll();
@@ -834,14 +834,14 @@ class Wn {
}
_initDelayedFunctions() {
const e = this._gantt;
- this.delayShow && this.delayShow.$cancelTimeout(), this.delayHide && this.delayHide.$cancelTimeout(), this.tooltip.hide(), this.delayShow = Ee((n, i) => {
+ this.delayShow && this.delayShow.$cancelTimeout(), this.delayHide && this.delayHide.$cancelTimeout(), this.tooltip.hide(), this.delayShow = Ce((n, i) => {
e.callEvent("onBeforeTooltip", [n]) === !1 ? this.tooltip.hide() : (this.tooltip.setContent(i), this.tooltip.show(n));
- }, e.config.tooltip_timeout || 1), this.delayHide = Ee(() => {
+ }, e.config.tooltip_timeout || 1), this.delayHide = Ce(() => {
this.delayShow.$cancelTimeout(), this.tooltip.hide();
}, e.config.tooltip_hide_timeout || 1);
}
}
-const Ae = { onBeforeUndo: "onAfterUndo", onBeforeRedo: "onAfterRedo" }, Ie = ["onTaskDragStart", "onAfterTaskUpdate", "onAfterTaskDelete", "onBeforeBatchUpdate"];
+const De = { onBeforeUndo: "onAfterUndo", onBeforeRedo: "onAfterRedo" }, Ae = ["onTaskDragStart", "onAfterTaskUpdate", "onAfterTaskDelete", "onBeforeBatchUpdate"];
class jn {
constructor(e, n) {
this._batchAction = null, this._batchMode = !1, this._ignore = !1, this._ignoreMoveEvents = !1, this._initialTasks = {}, this._initialLinks = {}, this._nestedTasks = {}, this._nestedLinks = {}, this._undo = e, this._gantt = n, this._attachEvents();
@@ -955,8 +955,8 @@ class jn {
this.setInitialLink(l.id);
}));
}, a = (l) => n.copy(n.getTask(l));
- for (const l in Ae) n.attachEvent(l, () => (this.startIgnore(), !0)), n.attachEvent(Ae[l], () => (this.stopIgnore(), !0));
- for (let l = 0; l < Ie.length; l++) n.attachEvent(Ie[l], () => (this.startBatchAction(), !0));
+ for (const l in De) n.attachEvent(l, () => (this.startIgnore(), !0)), n.attachEvent(De[l], () => (this.stopIgnore(), !0));
+ for (let l = 0; l < Ae.length; l++) n.attachEvent(Ae[l], () => (this.startBatchAction(), !0));
n.attachEvent("onParse", () => {
this._undo.clearUndoStack(), this._undo.clearRedoStack(), i();
}), n.attachEvent("onAfterTaskAdd", (l, d) => {
@@ -1160,7 +1160,7 @@ const Vn = { click_drag: function(t) {
n.destructor();
});
}, drag_timeline: function(t) {
- t.ext || (t.ext = {}), t.ext.dragTimeline = { create: () => $e.create(t) }, t.config.drag_timeline = { enabled: !0, render: !1 };
+ t.ext || (t.ext = {}), t.ext.dragTimeline = { create: () => xe.create(t) }, t.config.drag_timeline = { enabled: !0, render: !1 };
}, fullscreen: function(t) {
function e() {
const c = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
@@ -1677,7 +1677,7 @@ const Vn = { click_drag: function(t) {
clearInterval(h);
});
var y = {};
- st(y), e.mixin(y, { addShortcut: function(v, b, _) {
+ ot(y), e.mixin(y, { addShortcut: function(v, b, _) {
var m = g(_);
m && m.prototype.bind(v, b);
}, getShortcutHandler: function(v, b) {
@@ -2346,7 +2346,7 @@ class qn {
const Gn = () => ({ layout: { css: "gantt_container", rows: [{ cols: [{ view: "grid", scrollX: "scrollHor", scrollY: "scrollVer" }, { resizer: !0, width: 1 }, { view: "timeline", scrollX: "scrollHor", scrollY: "scrollVer" }, { view: "scrollbar", id: "scrollVer" }] }, { view: "scrollbar", id: "scrollHor", height: 20 }] }, links: { finish_to_start: "0", start_to_start: "1", finish_to_finish: "2", start_to_finish: "3" }, types: { task: "task", project: "project", milestone: "milestone" }, auto_types: !1, duration_unit: "day", work_time: !1, correct_work_time: !1, skip_off_time: !1, cascade_delete: !0, autosize: !1, autosize_min_width: 0, autoscroll: !0, autoscroll_speed: 30, deepcopy_on_parse: !1, show_links: !0, show_task_cells: !0, static_background: !1, static_background_cells: !0, branch_loading: !1, branch_loading_property: "$has_child", show_loading: !1, show_chart: !0, show_grid: !0, min_duration: 36e5, date_format: "%d-%m-%Y %H:%i", xml_date: void 0, start_on_monday: !0, server_utc: !1, show_progress: !0, fit_tasks: !1, select_task: !0, scroll_on_click: !0, smart_rendering: !0, preserve_scroll: !0, readonly: !1, container_resize_timeout: 20, deadlines: !0, date_grid: "%Y-%m-%d", drag_links: !0, drag_progress: !0, drag_resize: !0, drag_project: !1, drag_move: !0, drag_mode: { resize: "resize", progress: "progress", move: "move", ignore: "ignore" }, round_dnd_dates: !0, link_wrapper_width: 20, link_arrow_size: 12, root_id: 0, autofit: !1, columns: [{ name: "text", tree: !0, width: "*", resize: !0 }, { name: "start_date", align: "center", resize: !0 }, { name: "duration", align: "center" }, { name: "add", width: 44 }], scale_offset_minimal: !0, inherit_scale_class: !1, scales: [{ unit: "day", step: 1, date: "%d %M" }], time_step: 60, duration_step: 1, task_date: "%d %F %Y", time_picker: "%H:%i", task_attribute: "data-task-id", link_attribute: "data-link-id", layer_attribute: "data-layer", buttons_left: ["gantt_save_btn", "gantt_cancel_btn"], _migrate_buttons: { dhx_save_btn: "gantt_save_btn", dhx_cancel_btn: "gantt_cancel_btn", dhx_delete_btn: "gantt_delete_btn" }, buttons_right: ["gantt_delete_btn"], lightbox: { sections: [{ name: "description", height: 70, map_to: "text", type: "textarea", focus: !0 }, { name: "time", type: "duration", map_to: "auto" }], project_sections: [{ name: "description", height: 70, map_to: "text", type: "textarea", focus: !0 }, { name: "type", type: "typeselect", map_to: "type" }, { name: "time", type: "duration", readonly: !0, map_to: "auto" }], milestone_sections: [{ name: "description", height: 70, map_to: "text", type: "textarea", focus: !0 }, { name: "type", type: "typeselect", map_to: "type" }, { name: "time", type: "duration", single_date: !0, map_to: "auto" }] }, drag_lightbox: !0, sort: !1, details_on_create: !0, details_on_dblclick: !0, initial_scroll: !0, task_scroll_offset: 100, order_branch: !1, order_branch_free: !1, task_height: void 0, bar_height: "full", bar_height_padding: 9, min_column_width: 70, min_grid_column_width: 70, grid_resizer_column_attribute: "data-column-index", keep_grid_width: !1, grid_resize: !1, grid_elastic_columns: !1, show_tasks_outside_timescale: !1, show_unscheduled: !0, resize_rows: !1, task_grid_row_resizer_attribute: "data-row-index", min_task_grid_row_height: 30, row_height: 36, readonly_property: "readonly", editable_property: "editable", calendar_property: "calendar_id", resource_calendars: {}, dynamic_resource_calendars: !1, inherit_calendar: !1, type_renderers: {}, open_tree_initially: !1, optimize_render: !0, prevent_default_scroll: !1, show_errors: !0, wai_aria_attributes: !0, smart_scales: !0, rtl: !1, placeholder_task: !1, horizontal_scroll_key: "shiftKey", drag_timeline: { useKey: void 0, ignore: ".gantt_task_line, .gantt_task_link", render: !1 }, drag_multiple: !0, csp: "auto" });
var nt = typeof window < "u";
const pt = { isIE: nt && (navigator.userAgent.indexOf("MSIE") >= 0 || navigator.userAgent.indexOf("Trident") >= 0), isIE6: nt && !XMLHttpRequest && navigator.userAgent.indexOf("MSIE") >= 0, isIE7: nt && navigator.userAgent.indexOf("MSIE 7.0") >= 0 && navigator.userAgent.indexOf("Trident") < 0, isIE8: nt && navigator.userAgent.indexOf("MSIE 8.0") >= 0 && navigator.userAgent.indexOf("Trident") >= 0, isOpera: nt && navigator.userAgent.indexOf("Opera") >= 0, isChrome: nt && navigator.userAgent.indexOf("Chrome") >= 0, isKHTML: nt && (navigator.userAgent.indexOf("Safari") >= 0 || navigator.userAgent.indexOf("Konqueror") >= 0), isFF: nt && navigator.userAgent.indexOf("Firefox") >= 0, isIPad: nt && navigator.userAgent.search(/iPad/gi) >= 0, isEdge: nt && navigator.userAgent.indexOf("Edge") != -1, isNode: !nt || typeof navigator > "u" || !1 };
-function Me(t) {
+function Ie(t) {
if (typeof t == "string" || typeof t == "number") return t;
let e = "";
for (const n in t) {
@@ -2358,7 +2358,7 @@ function Me(t) {
function bt(t, e) {
var n = { method: t };
if (e.length === 0) throw new Error("Arguments list of query is wrong.");
- if (e.length === 1) return typeof e[0] == "string" ? (n.url = e[0], n.async = !0) : (n.url = e[0].url, n.async = e[0].async || !0, n.callback = e[0].callback, n.headers = e[0].headers), e[0].data ? typeof e[0].data != "string" ? n.data = Me(e[0].data) : n.data = e[0].data : n.data = "", n;
+ if (e.length === 1) return typeof e[0] == "string" ? (n.url = e[0], n.async = !0) : (n.url = e[0].url, n.async = e[0].async || !0, n.callback = e[0].callback, n.headers = e[0].headers), e[0].data ? typeof e[0].data != "string" ? n.data = Ie(e[0].data) : n.data = e[0].data : n.data = "", n;
switch (n.url = e[0], t) {
case "GET":
case "DELETE":
@@ -2366,11 +2366,11 @@ function bt(t, e) {
break;
case "POST":
case "PUT":
- e[1] ? typeof e[1] != "string" ? n.data = Me(e[1]) : n.data = e[1] : n.data = "", n.callback = e[2], n.headers = e[3];
+ e[1] ? typeof e[1] != "string" ? n.data = Ie(e[1]) : n.data = e[1] : n.data = "", n.callback = e[2], n.headers = e[3];
}
return n;
}
-const Ne = { date_to_str: (t, e, n) => {
+const Me = { date_to_str: (t, e, n) => {
t = t.replace(/%[a-zA-Z]/g, (a) => {
switch (a) {
case "%d":
@@ -2463,7 +2463,7 @@ const Ne = { date_to_str: (t, e, n) => {
e && (r = ` Date.UTC(${r})`);
const s = new Function("date", "locale", `var set=[0,0,1,0,0,0]; ${i} return new Date(${r});`);
return (o) => s(o, n.locale);
-} }, Le = { date_to_str: (t, e, n) => (i) => t.replace(/%[a-zA-Z]/g, (a) => {
+} }, Ne = { date_to_str: (t, e, n) => (i) => t.replace(/%[a-zA-Z]/g, (a) => {
switch (a) {
case "%d":
return e ? n.date.to_fixed(i.getUTCDate()) : n.date.to_fixed(i.getDate());
@@ -2620,11 +2620,11 @@ function Yn(t) {
}, copy: function(a) {
return new Date(a.valueOf());
}, date_to_str: function(a, r) {
- var s = Ne;
- return n() && (s = Le), s.date_to_str(a, r, t);
+ var s = Me;
+ return n() && (s = Ne), s.date_to_str(a, r, t);
}, str_to_date: function(a, r) {
- var s = Ne;
- return n() && (s = Le), s.str_to_date(a, r, t);
+ var s = Me;
+ return n() && (s = Ne), s.str_to_date(a, r, t);
}, getISOWeek: function(a) {
return t.date._getWeekNumber(a, !0);
}, _getWeekNumber: function(a, r) {
@@ -2822,7 +2822,7 @@ function Lt(t, e, n, i) {
return (i = e ? e.config : i) && i.placeholder_task && n.exists(t) ? n.getItem(t).type === i.types.placeholder : !1;
}
var it = function(t) {
- return this.pull = {}, this.$initItem = t.initItem, this.visibleOrder = tt.$create(), this.fullOrder = tt.$create(), this._skip_refresh = !1, this._filterRule = null, this._searchVisibleOrder = {}, this._indexRangeCache = {}, this._getItemsCache = null, this.$config = t, st(this), this._attachDataChange(function() {
+ return this.pull = {}, this.$initItem = t.initItem, this.visibleOrder = tt.$create(), this.fullOrder = tt.$create(), this._skip_refresh = !1, this._filterRule = null, this._searchVisibleOrder = {}, this._indexRangeCache = {}, this._getItemsCache = null, this.$config = t, ot(this), this._attachDataChange(function() {
return this._indexRangeCache = {}, this._getItemsCache = null, !0;
}), this;
};
@@ -2866,7 +2866,7 @@ it.prototype = { _attachDataChange: function(t) {
}, getVisibleItems: function() {
return this.getIndexRange();
}, addItem: function(t, e) {
- return W(t.id) || (t.id = rt()), this.$initItem && (t = this.$initItem(t)), !(!this.isSilent() && this.callEvent("onBeforeAdd", [t.id, t]) === !1) && (this._addItemInner(t, e), this.isSilent() || (this.callEvent("onAfterAdd", [t.id, t]), this.callEvent("onStoreUpdated", [t.id, t, "add"])), t.id);
+ return W(t.id) || (t.id = st()), this.$initItem && (t = this.$initItem(t)), !(!this.isSilent() && this.callEvent("onBeforeAdd", [t.id, t]) === !1) && (this._addItemInner(t, e), this.isSilent() || (this.callEvent("onAfterAdd", [t.id, t]), this.callEvent("onStoreUpdated", [t.id, t, "add"])), t.id);
}, _changeIdInner: function(t, e) {
this.pull[t] && (this.pull[e] = this.pull[t]);
var n = this._searchVisibleOrder[t];
@@ -3386,7 +3386,7 @@ const ti = { create: function() {
}, updateTask: function(e, n) {
W(n) || (n = this.getTask(e)), this.$data.tasksStore.updateItem(e, n), this.isTaskExists(e) && this.refreshTask(e);
}, addTask: function(e, n, i) {
- return W(e.id) || (e.id = rt()), this.isTaskExists(e.id) && this.getTask(e.id).$index != e.$index ? (e.start_date && typeof e.start_date == "string" && (e.start_date = this.date.parseDate(e.start_date, "parse_date")), e.end_date && typeof e.end_date == "string" && (e.end_date = this.date.parseDate(e.end_date, "parse_date")), this.$data.tasksStore.updateItem(e.id, e)) : (W(n) || (n = this.getParent(e) || 0), this.isTaskExists(n) || (n = this.config.root_id), this.setParent(e, n), this.$data.tasksStore.addItem(e, i, n));
+ return W(e.id) || (e.id = st()), this.isTaskExists(e.id) && this.getTask(e.id).$index != e.$index ? (e.start_date && typeof e.start_date == "string" && (e.start_date = this.date.parseDate(e.start_date, "parse_date")), e.end_date && typeof e.end_date == "string" && (e.end_date = this.date.parseDate(e.end_date, "parse_date")), this.$data.tasksStore.updateItem(e.id, e)) : (W(n) || (n = this.getParent(e) || 0), this.isTaskExists(n) || (n = this.config.root_id), this.setParent(e, n), this.$data.tasksStore.addItem(e, i, n));
}, deleteTask: function(e) {
return e = at(e, this.config.root_id), this.$data.tasksStore.removeItem(e);
}, getTaskCount: function() {
@@ -3640,16 +3640,16 @@ function _e(t) {
}
}(t);
}
-function Pe(t, e, n) {
+function Le(t, e, n) {
for (var i = 0; i < e.length; i++) t.isLinkExists(e[i]) && (n[e[i]] = t.getLink(e[i]));
}
-function Re(t, e, n) {
- Pe(t, e.$source, n), Pe(t, e.$target, n);
+function Pe(t, e, n) {
+ Le(t, e.$source, n), Le(t, e.$target, n);
}
const ge = { getSubtreeLinks: function(t, e) {
var n = {};
- return t.isTaskExists(e) && Re(t, t.getTask(e), n), t.eachTask(function(i) {
- Re(t, i, n);
+ return t.isTaskExists(e) && Pe(t, t.getTask(e), n), t.eachTask(function(i) {
+ Pe(t, i, n);
}, e), n;
}, getSubtreeTasks: function(t, e) {
var n = {};
@@ -3835,9 +3835,9 @@ const Yt = class Yt {
}
};
Yt.create = () => new Yt();
-let qt = Yt, He = class {
+let qt = Yt, Re = class {
constructor(t) {
- this.serverProcessor = t, this.action_param = "!nativeeditor_status", this.updatedRows = [], this.autoUpdate = !0, this.updateMode = "cell", this._headers = null, this._payload = null, this._postDelim = "_", this._routerParametersFormat = "parameters", this._waitMode = 0, this._in_progress = {}, this._storage = qt.create(), this._invalid = {}, this.messages = [], this.styles = { updated: "font-weight:bold;", inserted: "font-weight:bold;", deleted: "text-decoration : line-through;", invalid: "background-color:FFE0E0;", invalid_cell: "border-bottom:2px solid red;", error: "color:red;", clear: "font-weight:normal;text-decoration:none;" }, this.enableUTFencoding(!0), st(this);
+ this.serverProcessor = t, this.action_param = "!nativeeditor_status", this.updatedRows = [], this.autoUpdate = !0, this.updateMode = "cell", this._headers = null, this._payload = null, this._postDelim = "_", this._routerParametersFormat = "parameters", this._waitMode = 0, this._in_progress = {}, this._storage = qt.create(), this._invalid = {}, this.messages = [], this.styles = { updated: "font-weight:bold;", inserted: "font-weight:bold;", deleted: "text-decoration : line-through;", invalid: "background-color:FFE0E0;", invalid_cell: "border-bottom:2px solid red;", error: "color:red;", clear: "font-weight:normal;text-decoration:none;" }, this.enableUTFencoding(!0), ot(this);
}
setTransactionMode(t, e) {
typeof t == "object" ? (this._tMode = t.mode || this._tMode, W(t.headers) && (this._headers = t.headers), W(t.payload) && (this._payload = t.payload), this._tSend = !!e) : (this._tMode = t, this._tSend = e), this._tMode === "REST" && (this._tSend = !1), this._tMode === "JSON" || this._tMode === "REST-JSON" ? (this._tSend = !1, this._serializeAsJson = !0, this._headers = this._headers || {}, this._headers["Content-Type"] = "application/json") : this._headers && !this._headers["Content-Type"] && (this._headers["Content-Type"] = "application/x-www-form-urlencoded"), this._tMode === "CUSTOM" && (this._tSend = !1, this._router = t.router);
@@ -3855,7 +3855,7 @@ let qt = Yt, He = class {
this.autoUpdate = t === "cell", this.updateMode = t, this.dnd = e;
}
ignore(t, e) {
- this._silent_mode = !0, t.call(e || ot), this._silent_mode = !1;
+ this._silent_mode = !0, t.call(e || lt), this._silent_mode = !1;
}
setUpdated(t, e, n) {
if (this._silent_mode) return;
@@ -4273,12 +4273,12 @@ See https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and ht
return this.getGanttMode() === "task" ? n.isTaskExists(t) && (e = this.$gantt.getTask(t)) : this.getGanttMode() === "assignment" ? this.$gantt.$data.assignmentsStore.exists(t) && (e = this.$gantt.$data.assignmentsStore.getItem(t)) : this.getGanttMode() === "baseline" ? this.$gantt.$data.baselineStore.exists(t) && (e = this.$gantt.$data.baselineStore.getItem(t)) : n.isLinkExists(t) && (e = this.$gantt.getLink(t)), e || (e = this.getStoredItem(t)), e || (e = { id: t }), this._prepareDataItem(e);
}
};
-const Oe = { DEPRECATED_api: function(t) {
- return new He(t);
+const He = { DEPRECATED_api: function(t) {
+ return new Re(t);
}, createDataProcessor: function(t) {
let e, n, i;
t instanceof Function ? e = t : t.hasOwnProperty("router") ? e = t.router : t.hasOwnProperty("assignment") || t.hasOwnProperty("baseline") || t.hasOwnProperty("link") || t.hasOwnProperty("task") ? e = t : t.hasOwnProperty("headers") && (i = t.headers), n = e ? "CUSTOM" : t.mode || "REST-JSON";
- const a = new He(t.url);
+ const a = new Re(t.url);
return a.init(this), a.setTransactionMode({ mode: n, router: e, headers: i }, t.batchUpdate), t.deleteAfterConfirmation && (a.deleteAfterConfirmation = t.deleteAfterConfirmation), a;
} };
function ii(t) {
@@ -4300,7 +4300,7 @@ function ii(t) {
try {
l();
} catch (d) {
- ot.console.error(d);
+ lt.console.error(d);
}
}
return t.$services.getService("state").registerProvider("batchUpdate", function() {
@@ -6010,7 +6010,7 @@ gn.prototype = { _calendars: {}, _convertWorkTimeSettings: function(t) {
}).bind(this)), this.createCalendar(i);
}, _createCalendarFromConfig: function(t) {
var e = new pe(this.$gantt, hn(this.$gantt));
- e.id = String(rt());
+ e.id = String(st());
var n = this._convertWorkTimeSettings(t);
if (n.customWeeks) for (var i in n.customWeeks) n.customWeeks[i] = this._convertWorkTimeSettings(n.customWeeks[i]);
return e._setConfig(n), e;
@@ -6069,7 +6069,7 @@ gn.prototype = { _calendars: {}, _convertWorkTimeSettings: function(t) {
if (t._tryChangeCalendarSettings(function() {
})) {
var n = this.$gantt.config;
- return t.id = t.id || rt(), this._calendars[t.id] = t, n.worktimes || (n.worktimes = {}), n.worktimes[t.id] = t.getConfig(), t.id;
+ return t.id = t.id || st(), this._calendars[t.id] = t, n.worktimes || (n.worktimes = {}), n.worktimes[t.id] = t.getConfig(), t.id;
}
return this.$gantt.callEvent("onCalendarError", [{ message: "Invalid calendar settings, no worktime available" }, t]), null;
}, deleteCalendar: function(t) {
@@ -6299,15 +6299,15 @@ function Si(t) {
return t._init_task_timing(t.getTask(s)), !0;
});
}
-function Be(t, e) {
+function Oe(t, e) {
var n, i = t.config.container_resize_timeout || 20;
- let a = ze(t);
+ let a = Be(t);
if (t.config.container_resize_method == "timeout") l();
else try {
t.event(e, "resize", function() {
if (t.$scrollbarRepaint) t.$scrollbarRepaint = null;
else {
- let d = ze(t);
+ let d = Be(t);
if (a.x == d.x && a.y == d.y) return;
a = d, r();
}
@@ -6325,7 +6325,7 @@ function Be(t, e) {
t.$root.offsetHeight == s && t.$root.offsetWidth == o || r(), s = t.$root.offsetHeight, o = t.$root.offsetWidth, setTimeout(l, i);
}
}
-function ze(t) {
+function Be(t) {
return { x: t.$root.offsetWidth, y: t.$root.offsetHeight };
}
function Ti(t) {
@@ -6366,7 +6366,7 @@ function Ti(t) {
}), this.callEvent("onGanttLayoutReady", []), this.$layout.render(), this.$container = this.$layout.$container.firstChild, function(r) {
window.getComputedStyle(r.$root).getPropertyValue("position") == "static" && (r.$root.style.position = "relative");
var s = document.createElement("iframe");
- s.className = "gantt_container_resize_watcher", s.tabIndex = -1, r.config.wai_aria_attributes && (s.setAttribute("role", "none"), s.setAttribute("aria-hidden", !0)), (window.Sfdc || window.$A || window.Aura) && (r.config.container_resize_method = "timeout"), r.$root.appendChild(s), s.contentWindow ? Be(r, s.contentWindow) : (r.$root.removeChild(s), Be(r, window));
+ s.className = "gantt_container_resize_watcher", s.tabIndex = -1, r.config.wai_aria_attributes && (s.setAttribute("role", "none"), s.setAttribute("aria-hidden", !0)), (window.Sfdc || window.$A || window.Aura) && (r.config.container_resize_method = "timeout"), r.$root.appendChild(s), s.contentWindow ? Oe(r, s.contentWindow) : (r.$root.removeChild(s), Oe(r, window));
}(this));
}).bind(t);
t.resetLayout = function() {
@@ -6459,7 +6459,7 @@ class Gi {
}
const Yi = { date: { month_full: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], month_short: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], day_short: ["Søn", "Mon", "Tir", "Ons", "Tor", "Fre", "Lør"] }, labels: { new_task: "Ny oppgave", icon_save: "Lagre", icon_cancel: "Avbryt", icon_details: "Detaljer", icon_edit: "Rediger", icon_delete: "Slett", confirm_closing: "", confirm_deleting: "Hendelsen vil bli slettet permanent. Er du sikker?", section_description: "Beskrivelse", section_time: "Tidsperiode", section_type: "Type", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Avbryt", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, Ji = { date: { month_full: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], month_short: ["Jan", "Feb", "mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"], day_short: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"] }, labels: { new_task: "Nieuwe taak", icon_save: "Opslaan", icon_cancel: "Annuleren", icon_details: "Details", icon_edit: "Bewerken", icon_delete: "Verwijderen", confirm_closing: "", confirm_deleting: "Item zal permanent worden verwijderd, doorgaan?", section_description: "Beschrijving", section_time: "Tijd periode", section_type: "Type", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Taak omschrijving", column_start_date: "Startdatum", column_duration: "Duur", column_add: "", link: "Koppeling", confirm_link_deleting: "zal worden verwijderd", link_start: " (start)", link_end: " (eind)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "minuten", hours: "uren", days: "dagen", weeks: "weken", months: "maanden", years: "jaren", message_ok: "OK", message_cancel: "Annuleren", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, Ki = { date: { month_full: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], month_short: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], day_short: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"] }, labels: { new_task: "Ny oppgave", icon_save: "Lagre", icon_cancel: "Avbryt", icon_details: "Detaljer", icon_edit: "Endre", icon_delete: "Slett", confirm_closing: "Endringer blir ikke lagret, er du sikker?", confirm_deleting: "Oppføringen vil bli slettet, er du sikker?", section_description: "Beskrivelse", section_time: "Tidsperiode", section_type: "Type", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Avbryt", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, Xi = { date: { month_full: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], month_short: ["Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"], day_full: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"], day_short: ["Nie", "Pon", "Wto", "Śro", "Czw", "Pią", "Sob"] }, labels: { new_task: "Nowe zadanie", icon_save: "Zapisz", icon_cancel: "Anuluj", icon_details: "Szczegóły", icon_edit: "Edytuj", icon_delete: "Usuń", confirm_closing: "", confirm_deleting: "Zdarzenie zostanie usunięte na zawsze, kontynuować?", section_description: "Opis", section_time: "Okres czasu", section_type: "Typ", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Nazwa zadania", column_start_date: "Początek", column_duration: "Czas trwania", column_add: "", link: "Link", confirm_link_deleting: "zostanie usunięty", link_start: " (początek)", link_end: " (koniec)", type_task: "Zadanie", type_project: "Projekt", type_milestone: "Milestone", minutes: "Minuty", hours: "Godziny", days: "Dni", weeks: "Tydzień", months: "Miesiące", years: "Lata", message_ok: "OK", message_cancel: "Anuluj", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, Zi = { date: { month_full: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], month_short: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], day_full: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], day_short: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"] }, labels: { new_task: "Nova tarefa", icon_save: "Salvar", icon_cancel: "Cancelar", icon_details: "Detalhes", icon_edit: "Editar", icon_delete: "Excluir", confirm_closing: "", confirm_deleting: "As tarefas serão excluidas permanentemente, confirme?", section_description: "Descrição", section_time: "Período", section_type: "Tipo", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "EAP", column_text: "Nome tarefa", column_start_date: "Data início", column_duration: "Duração", column_add: "", link: "Link", confirm_link_deleting: "Será excluído!", link_start: " (início)", link_end: " (fim)", type_task: "Task", type_project: "Projeto", type_milestone: "Marco", minutes: "Minutos", hours: "Horas", days: "Dias", weeks: "Semanas", months: "Meses", years: "Anos", message_ok: "OK", message_cancel: "Cancelar", section_constraint: "Restrição", constraint_type: "Tipo Restrição", constraint_date: "Data restrição", asap: "Mais breve possível", alap: "Mais tarde possível", snet: "Não começar antes de", snlt: "Não começar depois de", fnet: "Não terminar antes de", fnlt: "Não terminar depois de", mso: "Precisa começar em", mfo: "Precisa terminar em", resources_filter_placeholder: "Tipo de filtros", resources_filter_label: "Ocultar vazios", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, Qi = { date: { month_full: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "November", "December"], month_short: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], day_full: ["Duminica", "Luni", "Marti", "Miercuri", "Joi", "Vineri", "Sambata"], day_short: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sa"] }, labels: { new_task: "Sarcina noua", icon_save: "Salveaza", icon_cancel: "Anuleaza", icon_details: "Detalii", icon_edit: "Editeaza", icon_delete: "Sterge", confirm_closing: "Schimbarile nu vor fi salvate, esti sigur?", confirm_deleting: "Evenimentul va fi sters permanent, esti sigur?", section_description: "Descriere", section_time: "Interval", section_type: "Type", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Anuleaza", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, ta = { date: { month_full: ["Январь", "Февраль", "Март", "Апрель", "Maй", "Июнь", "Июль", "Август", "Сентябрь", "Oктябрь", "Ноябрь", "Декабрь"], month_short: ["Янв", "Фев", "Maр", "Aпр", "Maй", "Июн", "Июл", "Aвг", "Сен", "Окт", "Ноя", "Дек"], day_full: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"], day_short: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"] }, labels: { new_task: "Новое задание", icon_save: "Сохранить", icon_cancel: "Отменить", icon_details: "Детали", icon_edit: "Изменить", icon_delete: "Удалить", confirm_closing: "", confirm_deleting: "Событие будет удалено безвозвратно, продолжить?", section_description: "Описание", section_time: "Период времени", section_type: "Тип", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "ИСР", column_text: "Задача", column_start_date: "Начало", column_duration: "Длительность", column_add: "", link: "Связь", confirm_link_deleting: "будет удалена", link_start: " (начало)", link_end: " (конец)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Минута", hours: "Час", days: "День", weeks: "Неделя", months: "Месяц", years: "Год", message_ok: "OK", message_cancel: "Отменить", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "начните вводить слово для фильтрации", resources_filter_label: "спрятать не установленные", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, ea = { date: { month_full: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"], day_short: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"] }, labels: { new_task: "Nova naloga", icon_save: "Shrani", icon_cancel: "Prekliči", icon_details: "Podrobnosti", icon_edit: "Uredi", icon_delete: "Izbriši", confirm_closing: "", confirm_deleting: "Dogodek bo izbrisan. Želite nadaljevati?", section_description: "Opis", section_time: "Časovni okvir", section_type: "Type", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Prekliči", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, na = { date: { month_full: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sept", "Okt", "Nov", "Dec"], day_full: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"], day_short: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So"] }, labels: { new_task: "Nová úloha", icon_save: "Uložiť", icon_cancel: "Späť", icon_details: "Detail", icon_edit: "Edituj", icon_delete: "Zmazať", confirm_closing: "Vaše zmeny nebudú uložené. Skutočne?", confirm_deleting: "Udalosť bude natrvalo vymazaná. Skutočne?", section_description: "Poznámky", section_time: "Doba platnosti", section_type: "Type", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Späť", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, ia = { date: { month_full: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"], day_short: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"] }, labels: { new_task: "Ny uppgift", icon_save: "Spara", icon_cancel: "Avbryt", icon_details: "Detajer", icon_edit: "Ändra", icon_delete: "Ta bort", confirm_closing: "", confirm_deleting: "Är du säker på att du vill ta bort händelsen permanent?", section_description: "Beskrivning", section_time: "Tid", section_type: "Typ", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Uppgiftsnamn", column_start_date: "Starttid", column_duration: "Varaktighet", column_add: "", link: "Länk", confirm_link_deleting: "kommer tas bort", link_start: " (start)", link_end: " (slut)", type_task: "Uppgift", type_project: "Projekt", type_milestone: "Milstolpe", minutes: "Minuter", hours: "Timmar", days: "Dagar", weeks: "Veckor", months: "Månader", years: "År", message_ok: "OK", message_cancel: "Avbryt", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, aa = { date: { month_full: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], month_short: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], day_full: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"], day_short: ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"] }, labels: { new_task: "Yeni görev", icon_save: "Kaydet", icon_cancel: "İptal", icon_details: "Detaylar", icon_edit: "Düzenle", icon_delete: "Sil", confirm_closing: "", confirm_deleting: "Görev silinecek, emin misiniz?", section_description: "Açıklama", section_time: "Zaman Aralığı", section_type: "Tip", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Görev Adı", column_start_date: "Başlangıç", column_duration: "Süre", column_add: "", link: "Bağlantı", confirm_link_deleting: "silinecek", link_start: " (başlangıç)", link_end: " (bitiş)", type_task: "Görev", type_project: "Proje", type_milestone: "Kilometretaşı", minutes: "Dakika", hours: "Saat", days: "Gün", weeks: "Hafta", months: "Ay", years: "Yıl", message_ok: "OK", message_cancel: "Ýptal", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } }, ra = { date: { month_full: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], month_short: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], day_full: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"], day_short: ["Нед", "Пон", "Вів", "Сер", "Чет", "Птн", "Суб"] }, labels: { new_task: "Нове завдання", icon_save: "Зберегти", icon_cancel: "Відміна", icon_details: "Деталі", icon_edit: "Редагувати", icon_delete: "Вилучити", confirm_closing: "", confirm_deleting: "Подія вилучиться назавжди. Ви впевнені?", section_description: "Опис", section_time: "Часовий проміжок", section_type: "Тип", section_deadline: "Deadline", section_baselines: "Baselines", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Відміна", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task", baselines_section_placeholder: "Start adding a new baseline", baselines_add_button: "Add Baseline", baselines_remove_button: "Remove", baselines_remove_all_button: "Remove All", deadline_enable_button: "Set", deadline_disable_button: "Remove" } };
function sa() {
- this.constants = Un, this.version = "9.0.0", this.license = "gpl", this.templates = {}, this.ext = {}, this.keys = { edit_save: this.constants.KEY_CODES.ENTER, edit_cancel: this.constants.KEY_CODES.ESC };
+ this.constants = Un, this.version = "9.0.1", this.license = "gpl", this.templates = {}, this.ext = {}, this.keys = { edit_save: this.constants.KEY_CODES.ENTER, edit_cancel: this.constants.KEY_CODES.ESC };
}
function oa(t) {
var e = new sa(), n = new qn(t), i = {};
@@ -6486,7 +6486,7 @@ function oa(t) {
} };
}(), e.config = Gn(), e.ajax = /* @__PURE__ */ function(l) {
return { cache: !0, method: "get", parse: function(d) {
- return typeof d != "string" ? d : (d = d.replace(/^[\s]+/, ""), typeof DOMParser > "u" || pt.isIE ? ot.ActiveXObject !== void 0 && ((c = new ot.ActiveXObject("Microsoft.XMLDOM")).async = "false", c.loadXML(d)) : c = new DOMParser().parseFromString(d, "text/xml"), c);
+ return typeof d != "string" ? d : (d = d.replace(/^[\s]+/, ""), typeof DOMParser > "u" || pt.isIE ? lt.ActiveXObject !== void 0 && ((c = new lt.ActiveXObject("Microsoft.XMLDOM")).async = "false", c.loadXML(d)) : c = new DOMParser().parseFromString(d, "text/xml"), c);
var c;
}, xmltop: function(d, c, u) {
if (c.status === void 0 || c.status < 400) {
@@ -6522,12 +6522,12 @@ function oa(t) {
return h.async = !1, this.query(h);
}, _call: function(d, c, u, h, g, f) {
return new l.Promise(function(y, v) {
- var b = typeof XMLHttpRequest !== void 0 ? new XMLHttpRequest() : new ot.ActiveXObject("Microsoft.XMLHTTP"), _ = navigator.userAgent.match(/AppleWebKit/) !== null && navigator.userAgent.match(/Qt/) !== null && navigator.userAgent.match(/Safari/) !== null;
+ var b = typeof XMLHttpRequest !== void 0 ? new XMLHttpRequest() : new lt.ActiveXObject("Microsoft.XMLHTTP"), _ = navigator.userAgent.match(/AppleWebKit/) !== null && navigator.userAgent.match(/Qt/) !== null && navigator.userAgent.match(/Safari/) !== null;
h && (b.onreadystatechange = function() {
if (b.readyState == 4 || _ && b.readyState == 3) {
if ((b.status != 200 || b.responseText === "") && !l.callEvent("onAjaxError", [b])) return;
setTimeout(function() {
- typeof g == "function" && g.apply(ot, [{ xmlDoc: b, filePath: c }]), y(b), typeof g == "function" && (g = null, b = null);
+ typeof g == "function" && g.apply(lt, [{ xmlDoc: b, filePath: c }]), y(b), typeof g == "function" && (g = null, b = null);
}, 0);
}
});
@@ -6545,16 +6545,16 @@ function oa(t) {
return { target: u.target || u.srcElement, pageX: u.pageX, pageY: u.pageY, clientX: u.clientX, clientY: u.clientY, metaKey: u.metaKey, shiftKey: u.shiftKey, ctrlKey: u.ctrlKey, altKey: u.altKey };
}
function c(u, h) {
- this._obj = u, this._settings = h || {}, st(this);
+ this._obj = u, this._settings = h || {}, ot(this);
var g = this.getInputMethods();
this._drag_start_timer = null, l.attachEvent("onGanttScroll", R(function(v, b) {
this.clearDragTimer();
}, this));
for (var f = { passive: !1 }, y = 0; y < g.length; y++) R(function(v) {
l.event(u, v.down, R(function(_) {
- v.accessor(_) && (h.preventDefault && h.selector && dt(_.target, h.selector) && _.preventDefault(), l.config.touch && _.timeStamp && _.timeStamp - 0 < 300 || (this._settings.original_target = d(_), this._settings.original_element_sizes = { ...xe(_.target, nn(u)), width: _.target.offsetWidth, height: _.target.offsetHeight }, l.config.touch ? (this.clearDragTimer(), this._drag_start_timer = setTimeout(R(function() {
+ v.accessor(_) && (_.button !== void 0 && _.button !== 0 || (h.preventDefault && h.selector && dt(_.target, h.selector) && _.preventDefault(), l.config.touch && _.timeStamp && _.timeStamp - 0 < 300 || (this._settings.original_target = d(_), this._settings.original_element_sizes = { ...rt(_, nn(u)), width: _.target.offsetWidth, height: _.target.offsetHeight }, l.config.touch ? (this.clearDragTimer(), this._drag_start_timer = setTimeout(R(function() {
l.getState().lightbox || this.dragStart(u, _, v);
- }, this), l.config.touch_drag)) : this.dragStart(u, _, v)));
+ }, this), l.config.touch_drag)) : this.dragStart(u, _, v))));
}, this), f);
var b = document.body;
l.event(b, v.up, R(function(_) {
@@ -6606,9 +6606,9 @@ function oa(t) {
}
h ? u.push({ move: "touchmove", down: "touchstart", up: "touchend", accessor: function(g) {
return g.touches && g.touches.length > 1 ? null : g.touches[0] ? { target: document.elementFromPoint(g.touches[0].clientX, g.touches[0].clientY), pageX: g.touches[0].pageX, pageY: g.touches[0].pageY, clientX: g.touches[0].clientX, clientY: g.touches[0].clientY } : g;
- } }) : ot.navigator.pointerEnabled ? u.push({ move: "pointermove", down: "pointerdown", up: "pointerup", accessor: function(g) {
+ } }) : lt.navigator.pointerEnabled ? u.push({ move: "pointermove", down: "pointerdown", up: "pointerup", accessor: function(g) {
return g.pointerType == "mouse" ? null : g;
- } }) : ot.navigator.msPointerEnabled && u.push({ move: "MSPointerMove", down: "MSPointerDown", up: "MSPointerUp", accessor: function(g) {
+ } }) : lt.navigator.msPointerEnabled && u.push({ move: "MSPointerMove", down: "MSPointerDown", up: "MSPointerUp", accessor: function(g) {
return g.pointerType == g.MSPOINTER_TYPE_MOUSE ? null : g;
} });
}
@@ -6711,7 +6711,7 @@ function oa(t) {
}(e);
e.$services.setService("templateLoader", function() {
return r;
- }), st(e);
+ }), ot(e);
var s = new Xn();
s.registerProvider("global", function() {
var l = { min_date: e._min_date, max_date: e._max_date, selected_task: null };
@@ -6853,7 +6853,7 @@ function oa(t) {
}), l.attachEvent("onAfterLinkDelete", function(_, m) {
l.refreshTask(m.source), l.refreshTask(m.target);
}), l.attachEvent("onParse", v), b({ source: h, target: l, events: { onItemLoading: "onLinkLoading", onBeforeAdd: "onBeforeLinkAdd", onAfterAdd: "onAfterLinkAdd", onBeforeUpdate: "onBeforeLinkUpdate", onAfterUpdate: "onAfterLinkUpdate", onBeforeDelete: "onBeforeLinkDelete", onAfterDelete: "onAfterLinkDelete", onIdChange: "onLinkIdChange" } }), b({ source: u, target: l, events: { onItemLoading: "onTaskLoading", onBeforeAdd: "onBeforeTaskAdd", onAfterAdd: "onAfterTaskAdd", onBeforeUpdate: "onBeforeTaskUpdate", onAfterUpdate: "onAfterTaskUpdate", onBeforeDelete: "onBeforeTaskDelete", onAfterDelete: "onAfterTaskDelete", onIdChange: "onTaskIdChange", onBeforeItemMove: "onBeforeTaskMove", onAfterItemMove: "onAfterTaskMove", onFilterItem: "onBeforeTaskDisplay", onItemOpen: "onTaskOpened", onItemClose: "onTaskClosed", onBeforeSelect: "onBeforeTaskSelected", onAfterSelect: "onTaskSelected", onAfterUnselect: "onTaskUnselected" } }), l.$data = { tasksStore: u, linksStore: h };
- }(e), e.dataProcessor = Oe.DEPRECATED_api, e.createDataProcessor = Oe.createDataProcessor, function(l) {
+ }(e), e.dataProcessor = He.DEPRECATED_api, e.createDataProcessor = He.createDataProcessor, function(l) {
l.ext || (l.ext = {});
for (var d = [ai, si, li, di, ci, ui, hi, _i, pi], c = 0; c < d.length; c++) d[c] && d[c](l);
}(e), function(l) {
@@ -6983,7 +6983,7 @@ function la(t) {
}
function d(_, m, p) {
var k = _.tagName ? _ : function(x, S, T) {
- var C = document.createElement("div"), E = rt();
+ var C = document.createElement("div"), E = st();
t._waiAria.messageModalAttr(C, E), C.className = " gantt_modal_box gantt-" + x.type, C.setAttribute(e, 1);
var D = "";
if (x.width && (C.style.width = x.width), x.height && (C.style.height = x.height), x.title && (D += '
"), D += '", ht = ``, O = document.createElement("div");
O.className = "gantt_section_time gantt_section_duration", O.setAttribute("data-baseline-id", T.id), O.innerHTML = D + V + ht + " ", S.appendChild(O);
- var K, Y, z, U = O.getElementsByTagName("select"), St = O.getElementsByTagName("input"), Tt = St[1], Te = [St[0], St[2]], wn = O.getElementsByTagName("span")[0], Sn = E._time_format_order;
+ var K, Y, z, U = O.getElementsByTagName("select"), St = O.getElementsByTagName("input"), Tt = St[1], Se = [St[0], St[2]], wn = O.getElementsByTagName("span")[0], Sn = E._time_format_order;
function _t() {
var ct = w.call(_, O, E), q = x.call(_, O, E), Tn = _.calculateEndDate({ start_date: ct, duration: q, task: C }), Cn = _.templates.task_end_date || _.templates.task_date;
wn.innerHTML = Cn(Tn);
@@ -11145,9 +11147,9 @@ function Qa(t) {
O.querySelector(".baseline_delete_button").onclick = function(ct) {
const q = O.parentNode;
O.innerHTML = "", O.remove(), q.innerHTML === "" && (q.innerHTML = _.locale.labels.baselines_section_placeholder);
- }, Te[0].onclick = _.bind(function() {
+ }, Se[0].onclick = _.bind(function() {
Rt(-1 * _.config.duration_step);
- }, _), Te[1].onclick = _.bind(function() {
+ }, _), Se[1].onclick = _.bind(function() {
Rt(1 * _.config.duration_step);
}, _), U[0].onchange = _t, U[1].onchange = _t, U[2].onchange = _t, U[3] && (U[3].onchange = _t), Tt.onkeydown = _.bind(function(ct) {
var q;
@@ -11461,7 +11463,7 @@ function Qa(t) {
function tr(t) {
if (!pt.isNode) {
t.utils = { arrayFind: Ln, dom: rn };
- var e = we();
+ var e = $e();
t.event = e.attach, t.eventRemove = e.detach, t._eventRemoveAll = e.detachAll, t._createDomEventScope = e.extend, L(t, la(t));
var n = Va.init(t);
t.$ui = n.factory, t.$ui.layers = n.render, t.$mouseEvents = n.mouseEvents, t.$services.setService("mouseEvents", function() {
@@ -11810,7 +11812,7 @@ function tr(t) {
}
}, { once: !0 });
}), t.attachEvent("onBeforeGanttReady", function() {
- this.config.scroll_size || (this.config.scroll_size = Ze() || 15), j(t) || (this._eventRemoveAll(), this.$mouseEvents.reset(), this.resetLightbox());
+ this.config.scroll_size || (this.config.scroll_size = Xe() || 15), j(t) || (this._eventRemoveAll(), this.$mouseEvents.reset(), this.resetLightbox());
}), t.attachEvent("onGanttReady", function() {
!j(t) && t.config.rtl && t.$layout.getCellsByType("viewCell").forEach(function(i) {
var a = i.$config.scrollX;
@@ -11827,7 +11829,7 @@ To fix it, you need to remove the obsolete file and connect the extension via th
}
});
}
-const er = ot.gantt = function(t) {
+const er = lt.gantt = function(t) {
var e = oa(t);
return e.env.isNode || (tr(e), function(n) {
n.load = function(i, a, r) {
diff --git a/codebase/dhtmlxgantt.es.js.map b/codebase/dhtmlxgantt.es.js.map
index f02fbe7..956f61e 100644
--- a/codebase/dhtmlxgantt.es.js.map
+++ b/codebase/dhtmlxgantt.es.js.map
@@ -1 +1 @@
-{"version":3,"file":"dhtmlxgantt.es.js","sources":["../sources/core/ui/utils/dom_helpers.js","../sources/utils/global.js","../sources/ext/click_drag/eventsManager.ts","../sources/utils/eventable.js","../sources/utils/helpers.js","../sources/ext/click_drag/selectedRegion.ts","../sources/ext/drag_timeline/eventsManager.ts","../sources/ext/keyboard_navigation/modals.js","../sources/ext/quick_info/quickInfo.ts","../sources/utils/utils.js","../sources/core/ui/utils/dom_event_scope.js","../sources/ext/tooltip/tooltip.ts","../sources/ext/tooltip/tooltipManager.ts","../sources/ext/undo/monitor.ts","../sources/ext/undo/undo.ts","../sources/ext/extensions_gpl.ts","../sources/ext/click_drag/index.ts","../sources/ext/drag_timeline/index.ts","../sources/ext/fullscreen/index.ts","../sources/ext/keyboard_navigation.js","../sources/ext/keyboard_navigation/common/keyboard_shortcuts.js","../sources/ext/keyboard_navigation/common/eventhandler.js","../sources/ext/keyboard_navigation/common/trap_modal_focus.js","../sources/ext/keyboard_navigation/elements/gantt_node.js","../sources/ext/keyboard_navigation/elements/nav_node.js","../sources/ext/keyboard_navigation/elements/header_cell.js","../sources/ext/keyboard_navigation/elements/task_row.js","../sources/ext/keyboard_navigation/elements/task_cell.js","../sources/ext/keyboard_navigation/core.js","../sources/ext/quick_info/index.ts","../sources/ext/tooltip/index.ts","../sources/ext/undo/index.ts","../sources/ext/marker.js","../sources/ext/multiselect.js","../sources/ext/export_api/index.ts","../sources/constants/index.js","../sources/ext/extension_manager.ts","../sources/core/common/config.ts","../sources/utils/env.js","../sources/core/common/serialize.ts","../sources/core/common/ajax.js","../sources/core/common/date_parsers/fast_version.ts","../sources/core/common/date_parsers/csp_compliant_version.ts","../sources/core/common/date.js","../node_modules/remote-client/dist/remote.es6.js","../sources/core/remote/remote_events.js","../sources/utils/timeout.js","../sources/core/common/state.js","../sources/utils/promise.js","../sources/core/facades/datastore_tasks.js","../sources/core/datastore/power_array.js","../sources/utils/placeholder_task.js","../sources/core/datastore/datastore.js","../sources/core/datastore/treedatastore.js","../sources/utils/is_headless.js","../sources/core/datastore/datastore_render.js","../sources/core/facades/datastore.js","../sources/core/datastore/select.js","../sources/core/facades/datastore_links.js","../sources/core/ui/timeline/scales.js","../sources/core/gantt_data_range.js","../sources/utils/task_tree_helpers.js","../sources/core/dataprocessor/data_processor_events.ts","../sources/core/dataprocessor/simple_storage.ts","../sources/core/dataprocessor/data_processor.ts","../sources/core/dataprocessor/extend_gantt.ts","../sources/core/dataprocessor/index.js","../sources/core/plugins/batch_update.js","../sources/core/plugins/wbs.js","../sources/core/plugins/resources.js","../sources/core/plugins/resource_assignments.js","../sources/core/plugins/new_task_placeholder.js","../sources/core/plugins/auto_task_types.js","../sources/core/common/duration_formatter_numeric.ts","../sources/core/common/link_formatter_simple.ts","../sources/core/plugins/formatters.js","../sources/core/plugins/empty_state_screen.ts","../sources/core/ui/render/baseline_helper.js","../sources/core/plugins/baselines.js","../sources/core/loading/parsing.js","../sources/core/worktime/calendar_arguments_helper.js","../sources/core/worktime/strategy/work_calendar_merger.js","../sources/core/worktime/strategy/work_unit_cache/workunit_map_cache.ts","../sources/core/worktime/strategy/work_unit_cache/workunit_object_cache.ts","../sources/core/worktime/strategy/work_unit_cache/larger_units_helper.ts","../sources/core/worktime/strategy/work_unit_cache/date_duration_cache.ts","../sources/core/worktime/strategy/calendar_strategy.js","../sources/core/worktime/strategy/work_unit_cache/index.ts","../sources/core/worktime/legacy_resource_config.js","../sources/core/worktime/calendar_manager.js","../sources/core/worktime/dynamic_resource_calendars.js","../sources/core/worktime/strategy/no_work_time.js","../sources/core/worktime/time_calculator.js","../sources/core/facades/worktime_calendars.js","../sources/core/data.js","../sources/core/ui/resize_listener.js","../sources/core/gantt_core.js","../sources/core/common/assert.js","../sources/locale/locale_ar.ts","../sources/locale/locale_be.ts","../sources/locale/locale_ca.ts","../sources/locale/locale_cn.ts","../sources/locale/locale_cs.ts","../sources/locale/locale_da.ts","../sources/locale/locale_de.ts","../sources/locale/locale_el.ts","../sources/locale/locale_en.ts","../sources/locale/locale_es.ts","../sources/locale/locale_fa.ts","../sources/locale/locale_fi.ts","../sources/locale/locale_fr.ts","../sources/locale/locale_he.ts","../sources/locale/locale_hr.ts","../sources/locale/locale_hu.ts","../sources/locale/locale_id.ts","../sources/locale/locale_it.ts","../sources/locale/locale_jp.ts","../sources/locale/locale_kr.ts","../sources/locale/locale_manager.ts","../sources/locale/locale_nb.ts","../sources/locale/locale_nl.ts","../sources/locale/locale_no.ts","../sources/locale/locale_pl.ts","../sources/locale/locale_pt.ts","../sources/locale/locale_ro.ts","../sources/locale/locale_ru.ts","../sources/locale/locale_si.ts","../sources/locale/locale_sk.ts","../sources/locale/locale_sv.ts","../sources/locale/locale_tr.ts","../sources/locale/locale_ua.ts","../sources/factory/make_instance_common.js","../sources/core/common/services.js","../sources/core/common/dnd.js","../sources/core/common/templates.js","../sources/core/datastore/datastore_hooks.js","../sources/core/plugins/index.js","../sources/core/grid_column_api.gpl.js","../sources/core/tasks.js","../sources/core/worktime/work_time.js","../sources/core/data_task_types.gpl.js","../sources/core/cached_functions.js","../sources/core/destructor.js","../sources/locale/index.ts","../sources/core/ui/message.js","../sources/core/ui/configurable.js","../sources/core/ui/ui_factory.js","../sources/core/ui/mouse.js","../sources/core/ui/render/viewport/is_in_viewport.js","../sources/core/ui/render/is_legacy_smart_render.js","../sources/core/ui/render/viewport/get_grid_row_rectangle.js","../sources/core/ui/render/viewport/get_visible_bars_range.js","../sources/core/ui/render/render_factory.js","../sources/core/ui/render/layer_engine.js","../sources/core/ui/render/viewport/get_bar_rectangle.js","../sources/core/ui/render/viewport/factory/get_visible_link_range.js","../sources/core/ui/render/viewport/get_link_rectangle.js","../sources/core/ui/render/viewport/is_link_in_viewport.js","../sources/core/ui/gantt_layers.js","../sources/core/ui/layout/cell.js","../sources/utils/extends.js","../sources/core/ui/layout/layout.js","../sources/core/ui/layout/view_layout.js","../sources/core/ui/layout/view_cell.js","../sources/core/ui/layout/scrollbar_cell.js","../sources/core/ui/row_position_mixin.js","../sources/core/ui/row_position_fixed_height.js","../sources/core/ui/timeline/tasks_canvas_render.gpl.js","../sources/core/ui/timeline/timeline.js","../sources/core/ui/timeline/timeline_layers_gpl.js","../sources/core/ui/plugins/column_grid_dnd/scrollable_grid.ts","../sources/core/ui/plugins/column_grid_dnd/column_grid_dnd.ts","../sources/core/ui/mouse_event_container.js","../sources/core/ui/grid/grid.js","../sources/core/ui/grid/grid_resize.gpl.js","../sources/core/ui/grid/task_grid_row_resize.js","../sources/core/ui/grid/editors/keyboard_mappings/default.js","../sources/core/ui/grid/editors/keyboard_mappings/keyboard_navigation.js","../sources/core/ui/grid/editors/editors/base.js","../sources/core/ui/grid/editors/editors/text.js","../sources/core/ui/grid/editors/editors/number.js","../sources/core/ui/grid/editors/editors/select.js","../sources/core/ui/grid/editors/editors/date.js","../sources/core/ui/grid/editors/editors/predecessor.js","../sources/core/ui/grid/editors/editors/duration.js","../sources/core/ui/grid/editors/linked_properties.js","../sources/core/ui/grid/editors/controller.js","../sources/core/ui/grid/editors/keyboard_mappings.js","../sources/core/ui/render/viewport/is_bar_in_viewport.js","../sources/core/ui/render/task_bar_render.js","../sources/core/ui/render/task_bar_smart_render.js","../sources/core/ui/render/dummy_layer.js","../sources/core/ui/render/viewport/get_bg_row_rectangle.js","../sources/core/ui/render/viewport/get_visible_cells_range.js","../sources/core/ui/render/viewport/is_column_visible.js","../sources/core/ui/render/prerender/task_bg_placeholder.js","../sources/core/ui/render/link_render.js","../sources/core/ui/render/viewport/is_grid_row_in_viewport.js","../sources/core/resource_timetable_builder.js","../sources/core/ui/grid/tasks_grid_dnd.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/drop_target.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/locked_level.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/highlight.js","../sources/core/ui/grid/tasks_grid_dnd_marker.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/multi_level.js","../sources/core/ui/grid/main_grid_initializer.js","../sources/core/ui/timeline/tasks_dnd.js","../sources/core/ui/timeline/links_dnd.js","../sources/core/ui/timeline/main_timeline_initializer.js","../sources/core/ui/main_layout_initializer.js","../sources/core/ui/index.js","../sources/core/ui/layout/resizer_cell.gpl.js","../sources/core/ui/render/task_grid_line_render.js","../sources/core/ui/render/task_bg_render.js","../sources/core/ui/render/task_rollup_render.js","../sources/core/ui/render/resource_matrix_render.js","../sources/core/ui/render/task_grid_row_resize_render.js","../sources/core/ui/skin.js","../sources/core/ui/plugins/autoscroll.js","../sources/core/ui/plugins/jquery_hooks.js","../sources/core/ui/plugins/dhtmlx_hooks.js","../sources/core/ui/plugins/timeline_zoom.ts","../sources/core/ui/touch.js","../sources/core/ui/lightbox/controls/base_control.js","../sources/core/ui/utils/html_helpers.js","../sources/core/ui/lightbox/controls/select_control.js","../sources/core/ui/lightbox/controls/parent_control.js","../sources/core/ui/lightbox/index.js","../sources/core/ui/lightbox/controls/template_control.js","../sources/core/ui/lightbox/controls/textarea_control.js","../sources/core/ui/lightbox/controls/time_control.js","../sources/core/ui/lightbox/controls/checkbox_control.js","../sources/core/ui/lightbox/controls/radio_control.js","../sources/core/ui/lightbox/controls/duration_control.js","../sources/core/ui/lightbox/controls/constraint_control.js","../sources/core/ui/lightbox/controls/typeselect_control.js","../sources/core/ui/lightbox/controls/baseline_control.js","../sources/core/ui_core.js","../sources/core/data_task_layers.gpl.js","../sources/core/facades/layout.js","../sources/css/skins/skyblue.js","../sources/css/skins/dark.js","../sources/css/skins/meadow.js","../sources/css/skins/terrace.js","../sources/css/skins/broadway.js","../sources/css/skins/material.js","../sources/css/skins/contrast_black.js","../sources/css/skins/contrast_white.js","../sources/core/ui/plugins/index.js","../sources/core/ui/lightbox/lightbox_optional_time.js","../sources/core/ui/wai_aria.js","../sources/dhtmlxgantt.gpl.ts","../sources/factory/make_instance_web.js","../sources/core/loading/ajax_loading.js"],"sourcesContent":["//returns position of html element on the page\r\nfunction getNodePosition(elem) {\r\n\tvar top=0, left=0, right=0, bottom=0;\r\n\tif (elem.getBoundingClientRect) { //HTML5 method\r\n\t\tvar box = elem.getBoundingClientRect();\r\n\t\tvar body = document.body;\r\n\t\tvar docElem = (document.documentElement ||\r\n\t\t\tdocument.body.parentNode ||\r\n\t\t\tdocument.body);\r\n\r\n\t\tvar scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\r\n\t\tvar scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\r\n\t\tvar clientTop = docElem.clientTop || body.clientTop || 0;\r\n\t\tvar clientLeft = docElem.clientLeft || body.clientLeft || 0;\r\n\t\ttop = box.top + scrollTop - clientTop;\r\n\t\tleft = box.left + scrollLeft - clientLeft;\r\n\r\n\t\tright = document.body.offsetWidth - box.right;\r\n\t\tbottom = document.body.offsetHeight - box.bottom;\r\n\t} else { //fallback to naive approach\r\n\t\twhile(elem) {\r\n\t\t\ttop = top + parseInt(elem.offsetTop,10);\r\n\t\t\tleft = left + parseInt(elem.offsetLeft,10);\r\n\t\t\telem = elem.offsetParent;\r\n\t\t}\r\n\r\n\t\tright = document.body.offsetWidth - elem.offsetWidth - left;\r\n\t\tbottom = document.body.offsetHeight - elem.offsetHeight - top;\r\n\t}\r\n\treturn { y: Math.round(top), x: Math.round(left), width:elem.offsetWidth, height:elem.offsetHeight, right: Math.round(right), bottom: Math.round(bottom) };\r\n}\r\n\r\nfunction isVisible(node){\r\n\tvar display = false,\r\n\t\tvisibility = false;\r\n\tif(window.getComputedStyle){\r\n\t\tvar style = window.getComputedStyle(node, null);\r\n\t\tdisplay = style[\"display\"];\r\n\t\tvisibility = style[\"visibility\"];\r\n\t}else if(node.currentStyle){\r\n\t\tdisplay = node.currentStyle[\"display\"];\r\n\t\tvisibility = node.currentStyle[\"visibility\"];\r\n\t}\r\n\treturn (display != \"none\" && visibility != \"hidden\");\r\n}\r\n\r\nfunction hasNonNegativeTabIndex(node){\r\n\treturn !isNaN(node.getAttribute(\"tabindex\")) && (node.getAttribute(\"tabindex\")*1 >= 0);\r\n}\r\n\r\nfunction hasHref(node){\r\n\tvar canHaveHref = {\"a\": true, \"area\": true};\r\n\tif(canHaveHref[node.nodeName.loLowerCase()]){\r\n\t\treturn !!node.getAttribute(\"href\");\r\n\t}\r\n\treturn true;\r\n}\r\n\r\nfunction isEnabled(node){\r\n\tvar canDisable = {\"input\":true, \"select\":true, \"textarea\":true, \"button\":true, \"object\":true};\r\n\tif(canDisable[node.nodeName.toLowerCase()]){\r\n\t\treturn !node.hasAttribute(\"disabled\");\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nfunction getFocusableNodes(root){\r\n\tvar nodes = root.querySelectorAll([\r\n\t\t\"a[href]\",\r\n\t\t\"area[href]\",\r\n\t\t\"input\",\r\n\t\t\"select\",\r\n\t\t\"textarea\",\r\n\t\t\"button\",\r\n\t\t\"iframe\",\r\n\t\t\"object\",\r\n\t\t\"embed\",\r\n\t\t\"[tabindex]\",\r\n\t\t\"[contenteditable]\"\r\n\t].join(\", \"));\r\n\r\n\tvar nodesArray = Array.prototype.slice.call(nodes, 0);\r\n\t\r\n\tfor(var i = 0; i < nodesArray.length; i++){\r\n\t\tnodesArray[i].$position = i;\r\n\t\t// we remember original nodes order, \r\n\t\t// so when we sort them by tabindex we ensure order of nodes with same tabindex is preserved, \r\n\t\t// since some browsers do unstable sort\r\n\t}\r\n\t\r\n\t// use tabindex to sort focusable nodes\r\n\tnodesArray.sort(function(a, b) {\r\n\t\tif(a.tabIndex === 0 && b.tabIndex !== 0){\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif(a.tabIndex !== 0 && b.tabIndex === 0){\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\t\r\n\t\tif (a.tabIndex === b.tabIndex){\r\n\t\t\t// ensure we do stable sort\r\n\t\t\treturn a.$position - b.$position;\r\n\t\t}\r\n\t\tif (a.tabIndex < b.tabIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\treturn 1;\r\n\t});\r\n\t\r\n\tfor(var i = 0; i < nodesArray.length; i++){\r\n\t\tvar node = nodesArray[i];\r\n\t\tvar isValid = (hasNonNegativeTabIndex(node) || isEnabled(node) || hasHref(node)) && isVisible(node);\r\n\t\tif(!isValid){\r\n\t\t\tnodesArray.splice(i, 1);\r\n\t\t\ti--;\r\n\t\t}\r\n\t}\r\n\treturn nodesArray;\r\n}\r\n\r\nfunction getScrollSize(){\r\n\tvar div = document.createElement(\"div\");\r\n\tdiv.style.cssText=\"visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;\";\r\n\r\n\tdocument.body.appendChild(div);\r\n\tvar width = div.offsetWidth-div.clientWidth;\r\n\tdocument.body.removeChild(div);\r\n\r\n\treturn Math.max(width, 15);\r\n}\r\n\r\nfunction getClassName(node){\r\n\tif(!node) return \"\";\r\n\r\n\tvar className = node.className || \"\";\r\n\tif(className.baseVal)//'className' exist but not a string - IE svg element in DOM\r\n\t\tclassName = className.baseVal;\r\n\r\n\tif(!className.indexOf)\r\n\t\tclassName = \"\";\r\n\r\n\treturn _trimString(className);\r\n}\r\n\r\nfunction addClassName(node, className){\r\n\tif (className && node.className.indexOf(className) === -1) {\r\n\t\tnode.className += \" \" + className;\r\n\t}\r\n}\r\n\r\nfunction removeClassName(node, name) {\r\n\tname = name.split(\" \");\r\n\tfor (var i = 0; i < name.length; i++) {\r\n\t\tvar regEx = new RegExp(\"\\\\s?\\\\b\" + name[i] + \"\\\\b(?![-_.])\", \"\");\r\n\t\tnode.className = node.className.replace(regEx, \"\");\r\n\t}\r\n}\r\n\r\nfunction hasClass(element, className){\r\n\tif ('classList' in element) {\r\n\t\treturn element.classList.contains(className);\r\n\t} else { \r\n\t\treturn new RegExp(\"\\\\b\" + className + \"\\\\b\").test(element.className);\r\n\t}\r\n}\r\n\r\nfunction toNode(node) {\r\n\tif (typeof node === \"string\") {\r\n\t\treturn (document.getElementById(node) || document.querySelector(node) || document.body);\r\n\t}\r\n\treturn node || document.body;\r\n}\r\n\r\nvar _slave;\r\nfunction insertNode(node, newone) {\r\n\tif(!_slave){\r\n\t\t_slave = document.createElement(\"div\");\r\n\t}\r\n\t_slave.innerHTML = newone;\r\n\tvar child = _slave.firstChild;\r\n\tnode.appendChild(child);\r\n\treturn child;\r\n}\r\n\r\nfunction removeNode(node) {\r\n\tif (node && node.parentNode) {\r\n\t\tnode.parentNode.removeChild(node);\r\n\t}\r\n}\r\n\r\nfunction getChildNodes(node, css) {\r\n\tvar ch = node.childNodes;\r\n\tvar len = ch.length;\r\n\tvar out = [];\r\n\tfor (var i = 0; i < len; i++) {\r\n\t\tvar obj = ch[i];\r\n\t\tif (obj.className && obj.className.indexOf(css) !== -1) {\r\n\t\t\tout.push(obj);\r\n\t\t}\r\n\t}\r\n\treturn out;\r\n}\r\n\r\nfunction getTargetNode(e) {\r\n\tvar trg;\r\n\tif (e.tagName)\r\n\t\ttrg = e;\r\n\telse {\r\n\t\te = e || window.event;\r\n\t\ttrg = e.target || e.srcElement;\r\n\t\tif (trg.shadowRoot && e.composedPath) {\r\n\t\t\ttrg = e.composedPath()[0];\r\n\t\t}\r\n\t}\r\n\treturn trg;\r\n}\r\n\r\nfunction locateAttribute(e, attribute) {\r\n\tif(!attribute) return;\r\n\r\n\tvar trg = getTargetNode(e);\r\n\r\n\twhile (trg){\r\n\t\tif (trg.getAttribute){\t//text nodes has not getAttribute\r\n\t\t\tvar test = trg.getAttribute(attribute);\r\n\t\t\tif (test) return trg;\r\n\t\t}\r\n\t\ttrg=trg.parentNode;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction _trimString(str){\r\n\tvar func = String.prototype.trim || function(){ return this.replace(/^\\s+|\\s+$/g, \"\"); };\r\n\treturn func.apply(str);\r\n}\r\n\r\nfunction locateClassName(e, classname, strict){\r\n\tvar trg = getTargetNode(e);\r\n\tvar css = \"\";\r\n\r\n\tif(strict === undefined)\r\n\t\tstrict = true;\r\n\r\n\twhile (trg){\r\n\t\tcss = getClassName(trg);\r\n\t\tif(css){\r\n\t\t\tvar ind = css.indexOf(classname);\r\n\t\t\tif (ind >= 0){\r\n\t\t\t\tif (!strict)\r\n\t\t\t\t\treturn trg;\r\n\r\n\t\t\t\t//check that we have exact match\r\n\t\t\t\tvar left = (ind === 0) || (!_trimString(css.charAt(ind - 1)));\r\n\t\t\t\tvar right = ((ind + classname.length >= css.length)) || (!_trimString(css.charAt(ind + classname.length)));\r\n\r\n\t\t\t\tif (left && right)\r\n\t\t\t\t\treturn trg;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttrg=trg.parentNode;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\n/*\r\nevent position relatively to DOM element\r\n */\r\nfunction getRelativeEventPosition(ev, node){\r\n\tvar d = document.documentElement;\r\n\tvar box = getNodePosition(node);\r\n\r\n\treturn {\r\n\t\tx: ev.clientX + d.scrollLeft - d.clientLeft - box.x + node.scrollLeft,\r\n\t\ty: ev.clientY + d.scrollTop - d.clientTop - box.y + node.scrollTop\r\n\t};\r\n}\r\n\r\nfunction getRelativeNodePosition(child, parent){\r\n\tconst childPos = getNodePosition(child);\r\n\tconst parentPos = getNodePosition(parent);\r\n\treturn {\r\n\t\tx: childPos.x - parentPos.x,\r\n\t\ty: childPos.y - parentPos.y\r\n\t};\r\n}\r\n\r\nfunction isChildOf(child, parent){\r\n\tif(!child || !parent){\r\n\t\treturn false;\r\n\t}\r\n\r\n\twhile(child && child != parent) {\r\n\t\tchild = child.parentNode;\r\n\t}\r\n\r\n\treturn child === parent;\r\n}\r\n\r\nfunction closest(element, selector){\r\n\tif(element.closest){\r\n\t\treturn element.closest(selector);\r\n\t}else if(element.matches || element.msMatchesSelector || element.webkitMatchesSelector){\r\n\t\tvar el = element;\r\n\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\tdo {\r\n\t\t\tvar method = el.matches || el.msMatchesSelector || el.webkitMatchesSelector;\r\n\r\n\t\t\tif (method.call(el, selector)) return el;\r\n\t\t\tel = el.parentElement || el.parentNode;\r\n\t\t} while (el !== null && el.nodeType === 1); \r\n\t\treturn null;\r\n\t}else{\r\n\t\t// eslint-disable-next-line no-console\r\n\t\tconsole.error(\"Your browser is not supported\");\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\nfunction getClosestSizedElement(element) {\r\n\twhile (element) {\r\n\t\tif (element.offsetWidth > 0 && element.offsetHeight > 0) {\r\n\t\t\treturn element;\r\n\t\t}\r\n\t\telement = element.parentElement;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction isShadowDomSupported() {\r\n\treturn document.head.createShadowRoot || document.head.attachShadow;\r\n}\r\n\r\n/**\r\n * Returns element that has the browser focus, or null if no element has focus.\r\n * Works with shadow DOM, so it's prefereed to use this function instead of document.activeElement directly.\r\n * @returns HTMLElement\r\n */\r\nfunction getActiveElement(){\r\n\tvar activeElement = document.activeElement;\r\n\tif (activeElement.shadowRoot) {\r\n\t\tactiveElement = activeElement.shadowRoot.activeElement;\r\n\t}\r\n\tif (activeElement === document.body && document.getSelection) {\r\n\t\tactiveElement = document.getSelection().focusNode || document.body;\r\n\t}\r\n\r\n\treturn activeElement;\r\n}\r\n\r\n/**\r\n * Returns document.body or the host node of the ShadowRoot, if the element is attached to ShadowDom\r\n * @param {HTMLElement} element \r\n * @returns HTMLElement\r\n */\r\nfunction getRootNode(element) {\r\n\tif (!element) {\r\n\t\treturn document.body;\r\n\t}\r\n\tif (!isShadowDomSupported()) {\r\n\t\treturn document.body;\r\n\t}\r\n\twhile (element.parentNode && (element = element.parentNode)) {\r\n\t\tif (element instanceof ShadowRoot) {\r\n\t\t\treturn element.host;\r\n\t\t}\r\n\t}\r\n\treturn document.body;\r\n}\r\n\r\nfunction hasShadowParent(element) {\r\n\treturn !!getRootNode(element);\r\n}\r\n\r\nexport {\r\n\tgetNodePosition,\r\n\tgetFocusableNodes,\r\n\tgetScrollSize,\r\n\tgetClassName,\r\n\taddClassName,\r\n\tremoveClassName,\r\n\tinsertNode,\r\n\tremoveNode,\r\n\tgetChildNodes,\r\n\ttoNode,\r\n\tlocateClassName,\r\n\tlocateAttribute,\r\n\tgetTargetNode,\r\n\tgetRelativeEventPosition,\r\n\tisChildOf,\r\n\thasClass,\r\n\tclosest,\r\n\tgetRootNode,\r\n\thasShadowParent,\r\n\tisShadowDomSupported,\r\n\tgetActiveElement,\r\n\tgetRelativeNodePosition,\r\n\tgetClosestSizedElement\r\n};","\r\n/* eslint-disable no-restricted-globals */\r\nvar globalScope;\r\nif(typeof window !== \"undefined\"){\r\n\tglobalScope = window;\r\n}else{\r\n\tglobalScope = global;\r\n}\r\n/* eslint-enable no-restricted-globals */\r\n\r\nexport default globalScope;","import * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\nimport global from \"../../utils/global\";\r\nimport { SelectedRegion } from \"./selectedRegion\";\r\n\r\nexport class EventsManager {\r\n\tprivate _mouseDown: boolean = false;\r\n\tprivate _domEvents: any;\r\n\tprivate _originPosition: string;\r\n\tprivate _gantt: any;\r\n\tprivate _restoreOriginPosition: () => void;\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t}\r\n\r\n\tattach(selectedRegion: SelectedRegion, useKey?: \"shiftKey\" | \"ctrlKey\" | \"altKey\", ignore?: any): void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst _target = selectedRegion.getViewPort();\r\n\t\tthis._originPosition = global.getComputedStyle(_target).display;\r\n\t\tthis._restoreOriginPosition = () => {\r\n\t\t\t_target.style.position = this._originPosition;\r\n\t\t};\r\n\t\tif (this._originPosition === \"static\") {\r\n\t\t\t_target.style.position = \"relative\";\r\n\t\t}\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tstate.registerProvider(\"clickDrag\", () => {\r\n\t\t\tconst result = { autoscroll: false };\r\n\t\t\treturn result;\r\n\t\t});\r\n\r\n\r\n\t\tlet scheduledDndCoordinates = null;\r\n\t\tconst startDragAndDrop = () => {\r\n\t\t\tif (!scheduledDndCoordinates) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._mouseDown = true;\r\n\t\t\tselectedRegion.setStart(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tselectedRegion.setPosition(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tselectedRegion.setEnd(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t};\r\n\r\n\t\tthis._domEvents.attach(_target, \"mousedown\", (event) => {\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\r\n\t\t\tif (ignore !== undefined) {\r\n\t\t\t\tif (ignore instanceof Array) {\r\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilterTargets = ignore;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (filterTargets) {\r\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstate.registerProvider(\"clickDrag\", () => {\r\n\t\t\t\tconst result = { autoscroll: this._mouseDown };\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\tscheduledDndCoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t});\r\n\t\tconst eventElement = domHelpers.getRootNode(gantt.$root) || document.body;\r\n\t\tthis._domEvents.attach(eventElement, \"mouseup\", (event) => {\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tthis._mouseDown = false;\r\n\t\t\t\tconst coordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tselectedRegion.dragEnd(coordinates);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._domEvents.attach(_target, \"mousemove\", (event) => {\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\t// GS-854. If we don't have useKey for the click_drag extension,\r\n\t\t\t// check the drag_timeline to not simultaneously use both extensions\r\n\t\t\tconst dragTimeline = this._gantt.ext.clickDrag;\r\n\t\t\tconst dragTimelineUseKey = (this._gantt.config.drag_timeline || {}).useKey;\r\n\t\t\tif (dragTimeline && dragTimelineUseKey) {\r\n\t\t\t\tif (!useKey && event[dragTimelineUseKey]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet coordinates = null;\r\n\t\t\tif(!this._mouseDown && scheduledDndCoordinates){\r\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tif(Math.abs(scheduledDndCoordinates.relative.left - coordinates.relative.left) > 5){\r\n\t\t\t\t\t// add small threshold not to start dnd on simple click\r\n\t\t\t\t\tstartDragAndDrop();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tselectedRegion.setEnd(coordinates);\r\n\t\t\t\tselectedRegion.render();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdetach(): void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._domEvents.detachAll();\r\n\t\tif(this._restoreOriginPosition){\r\n\t\t\tthis._restoreOriginPosition();\r\n\t\t}\r\n\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tstate.unregisterProvider(\"clickDrag\");\r\n\t}\r\n\r\n\tdestructor(): void {\r\n\t\tthis.detach();\r\n\t}\r\n\r\n\tprivate _getCoordinates(event: MouseEvent, selectedRegion: SelectedRegion) {\r\n\t\tconst viewPort = selectedRegion.getViewPort();\r\n\t\tconst viewPortBounds = viewPort.getBoundingClientRect();\r\n\t\tconst { clientX, clientY } = event;\r\n\t\tconst result = {\r\n\t\t\tabsolute: {\r\n\t\t\t\tleft: clientX,\r\n\t\t\t\ttop: clientY\r\n\t\t\t},\r\n\t\t\trelative: {\r\n\t\t\t\tleft: clientX - viewPortBounds.left + viewPort.scrollLeft,\r\n\t\t\t\ttop: clientY - viewPortBounds.top + viewPort.scrollTop\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn result;\r\n\t}\r\n}","var EventHost = function(){\r\n\tthis._silent_mode = false;\r\n\tthis.listeners = {};\r\n};\r\n\r\nEventHost.prototype = {\r\n\t_silentStart: function() {\r\n\t\tthis._silent_mode = true;\r\n\t},\r\n\t_silentEnd: function() {\r\n\t\tthis._silent_mode = false;\r\n\t}\r\n};\r\n\r\nvar\tcreateEventStorage = function(obj) {\r\n\tvar handlers = {};\r\n\tvar index = 0;\r\n\tvar eventStorage = function(){\r\n\t\tvar combinedResult = true;\r\n\t\tfor(var i in handlers){\r\n\t\t\tvar handlerResult = handlers[i].apply(obj, arguments);\r\n\t\t\tcombinedResult=combinedResult && handlerResult;\r\n\t\t}\r\n\t\treturn combinedResult;\r\n\t};\r\n\teventStorage.addEvent=function(handler, settings){\r\n\t\tif (typeof (handler) == \"function\"){\r\n\t\t\tvar handlerId;\r\n\t\t\tif(settings && settings.id){\r\n\t\t\t\thandlerId = settings.id;\r\n\t\t\t}else{\r\n\t\t\t\thandlerId = index;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\r\n\t\t\tif(settings && settings.once){\r\n\t\t\t\tvar originalHandler = handler;\r\n\t\t\t\thandler = function(){\r\n\t\t\t\t\toriginalHandler();\r\n\t\t\t\t\teventStorage.removeEvent(handlerId);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\thandlers[handlerId] = handler;\r\n\t\t\treturn handlerId;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\teventStorage.removeEvent=function(id){\r\n\t\tdelete handlers[id];\r\n\t};\r\n\r\n\teventStorage.clear = function(){\r\n\t\thandlers = {};\r\n\t};\r\n\r\n\treturn eventStorage;\r\n};\r\n\r\nfunction makeEventable(obj){\r\n\r\n\tvar eventHost = new EventHost();\r\n\tobj.attachEvent=function(eventName, handler, settings){\r\n\t\teventName = 'ev_'+eventName.toLowerCase();\r\n\t\tif (!eventHost.listeners[eventName]){\r\n\t\t\teventHost.listeners[eventName] = createEventStorage(this);\r\n\t\t}\r\n\r\n\t\tif(settings && settings.thisObject){\r\n\t\t\thandler = handler.bind(settings.thisObject);\r\n\t\t}\r\n\r\n\t\tvar innerId = eventHost.listeners[eventName].addEvent(handler, settings);\r\n\r\n\t\tvar handlerId = (eventName+':'+innerId); //return ID (ev_eventname:1)\r\n\t\tif(settings && settings.id){\r\n\t\t\thandlerId = settings.id;\r\n\t\t}\r\n\t\treturn handlerId;\r\n\t};\r\n\r\n\tobj.attachAll = function(callback){\r\n\t\tthis.attachEvent('listen_all', callback);\r\n\t};\r\n\r\n\tobj.callEvent=function(name, eventArguments){\r\n\t\tif (eventHost._silent_mode) return true;\r\n\r\n\t\tvar handlerName = 'ev_'+name.toLowerCase();\r\n\r\n\t\tvar listeners = eventHost.listeners;\r\n\t\tif (listeners['ev_listen_all']){\r\n\t\t\tlisteners['ev_listen_all'].apply(this, [name].concat(eventArguments));\r\n\t\t}\r\n\r\n\t\tif (listeners[handlerName])\r\n\t\t\treturn listeners[handlerName].apply(this, eventArguments);\r\n\t\treturn true;\r\n\t};\r\n\r\n\tobj.checkEvent=function(name){\r\n\t\tvar listeners = eventHost.listeners;\r\n\t\treturn (!!listeners['ev_'+name.toLowerCase()]);\r\n\t};\r\n\r\n\tobj.detachEvent=function(id){\r\n\t\tif (id){\r\n\t\t\tvar listeners = eventHost.listeners;\r\n\t\t\tfor(var i in listeners){\r\n\t\t\t\tlisteners[i].removeEvent(id); //remove event\r\n\t\t\t}\r\n\r\n\t\t\tvar list = id.split(':');//get EventName and ID\r\n\t\t\tvar listeners = eventHost.listeners;\r\n\t\t\tif(list.length === 2){\r\n\t\t\t\tvar eventName = list[0];\r\n\t\t\t\tvar eventId = list[1];\r\n\t\t\t\tif(listeners[eventName]){\r\n\t\t\t\t\tlisteners[eventName].removeEvent(eventId); //remove event\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tobj.detachAllEvents = function(){\r\n\t\tfor (var name in eventHost.listeners) {\r\n\t\t\teventHost.listeners[name].clear();\r\n\t\t}\r\n\t};\r\n\r\n}\r\n\r\nexport default makeEventable;","var units = {\r\n\t\"second\": 1,\r\n\t\"minute\": 60,\r\n\t\"hour\": 60 * 60,\r\n\t\"day\": 60 * 60 * 24,\r\n\t\"week\": 60 * 60 * 24 * 7,\r\n\t\"month\": 60 * 60 * 24 * 30,\r\n\t\"quarter\": 60 * 60 * 24 * 30 * 3,\r\n\t\"year\": 60 * 60 * 24 * 365\r\n};\r\nfunction getSecondsInUnit(unit){\r\n\treturn units[unit] || units.hour;\r\n}\r\n\r\nfunction forEach(arr, callback) {\r\n\tif (arr.forEach) {\r\n\t\tarr.forEach(callback);\r\n\t} else {\r\n\t\tvar workArray = arr.slice();\r\n\t\tfor (var i = 0; i < workArray.length; i++) {\r\n\t\t\tcallback(workArray[i], i);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction arrayMap(arr, callback) {\r\n\tif (arr.map) {\r\n\t\treturn arr.map(callback);\r\n\t} else {\r\n\t\tvar workArray = arr.slice();\r\n\t\tvar resArray = [];\r\n\r\n\t\tfor (var i = 0; i < workArray.length; i++) {\r\n\t\t\tresArray.push(callback(workArray[i], i));\r\n\t\t}\r\n\t\treturn resArray;\r\n\t}\r\n}\r\n\r\n\r\nfunction arrayFind(arr, callback) {\r\n\tif (arr.find) {\r\n\t\treturn arr.find(callback);\r\n\t} else {\r\n\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\tif (callback(arr[i], i)) {\r\n\t\t\t\treturn arr[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction arrayIncludes(arr, item) {\r\n\tif(arr.includes){\r\n\t\treturn arr.includes(item);\r\n\t}else{\r\n\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\tif (arr[i] === item) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\n// iframe-safe array type check instead of using instanceof\r\nfunction isArray(obj){\r\n\tif(Array.isArray){\r\n\t\treturn Array.isArray(obj);\r\n\t}else{\r\n\t\t// close enough\r\n\t\treturn (obj && obj.length !== undefined && obj.pop && obj.push);\r\n\t}\r\n}\r\n\r\n// non-primitive string object, e.g. new String(\"abc\")\r\nfunction isStringObject(obj){\r\n\treturn obj && typeof obj === \"object\"\r\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function String() { [native code] }\";\r\n}\r\n\r\n// non-primitive number object, e.g. new Number(5)\r\nfunction isNumberObject(obj){\r\n\treturn obj && typeof obj === \"object\"\r\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Number() { [native code] }\";\r\n}\r\n\r\n// non-primitive number object, e.g. new Boolean(true)\r\nfunction isBooleanObject(obj){\r\n\treturn obj && typeof obj === \"object\"\r\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Boolean() { [native code] }\";\r\n}\r\n\r\nfunction isDate(obj) {\r\n\tif (obj && typeof obj === \"object\") {\r\n\t\treturn !!(obj.getFullYear && obj.getMonth && obj.getDate);\r\n\t} else {\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nfunction isValidDate(obj){\r\n\treturn isDate(obj) && !isNaN(obj.getTime());\r\n}\r\n\r\nfunction arrayFilter(arr, callback) {\r\n\tvar result = [];\r\n\r\n\tif (arr.filter) {\r\n\t\treturn arr.filter(callback);\r\n\t} else {\r\n\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\tif (callback(arr[i], i)) {\r\n\t\t\t\tresult[result.length] = arr[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\nfunction hashToArray(hash) {\r\n\tvar result = [];\r\n\r\n\tfor (var key in hash) {\r\n\t\tif (hash.hasOwnProperty(key)) {\r\n\t\t\tresult.push(hash[key]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction arraySome(arr, callback) {\r\n\tif (arr.length === 0) return false;\r\n\r\n\tfor (var i = 0; i < arr.length; i++) {\r\n\t\tif (callback(arr[i], i, arr)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nfunction arrayDifference(arr, callback) {\r\n\treturn arrayFilter(arr, function(item, i) {\r\n\t\treturn !callback(item, i);\r\n\t});\r\n}\r\n\r\nfunction throttle (callback, timeout) {\r\n\tvar wait = false;\r\n\r\n\treturn function () {\r\n\t\tif (!wait) {\r\n\t\t\tcallback.apply(null, arguments);\r\n\t\t\twait = true;\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\twait = false;\r\n\t\t\t}, timeout);\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction delay (callback, timeout){\r\n\tvar timer;\r\n\r\n\tvar result = function() {\r\n\t\tresult.$cancelTimeout();\r\n\t\tresult.$pending = true;\r\n\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\ttimer = setTimeout(function(){\r\n\t\t\tcallback.apply(this, args);\r\n\t\t\tresult.$pending = false;\r\n\t\t}, timeout);\r\n\t};\r\n\r\n\tresult.$pending = false;\r\n\tresult.$cancelTimeout = function(){\r\n\t\tclearTimeout(timer);\r\n\t\tresult.$pending = false;\r\n\t};\r\n\tresult.$execute = function(){\r\n\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\tcallback.apply(this, args);\r\n\t\tresult.$cancelTimeout();\r\n\t};\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction sortArrayOfHash(arr, field, desc) {\r\n\tvar compare = function(a, b) {\r\n\t\treturn a < b;\r\n\t};\r\n\r\n\tarr.sort(function(a, b) {\r\n\t\tif (a[field] === b[field]) return 0;\r\n\r\n\t\treturn desc ? compare(a[field], b[field]) : compare(b[field], a[field]);\r\n\t});\r\n}\r\n\r\nfunction objectKeys(obj) {\r\n\tif (Object.keys) {\r\n\t\treturn Object.keys(obj);\r\n\t}\r\n\tvar result = [];\r\n\tvar key;\r\n\tfor (key in obj) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n\t\t\tresult.push(key);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction isEventable(obj) {\r\n\treturn obj.attachEvent && obj.detachEvent;\r\n}\r\n\r\n//GS-1090: A task should be able to have the id = 0\r\nfunction replaceValidZeroId(id, rootId) {\r\n\tif (checkZeroId(id) && !checkZeroId(rootId)){\r\n\t\tid = \"0\";\r\n\t}\r\n\treturn id;\r\n}\r\n\r\nfunction checkZeroId(id) {\r\n\tif (id === 0){\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nfunction findBinary(array, target) {\r\n\t// modified binary search, target value not exactly match array elements, looking for closest one\r\n\r\n\tvar low = 0, high = array.length - 1, i, item, prev;\r\n\twhile (low <= high) {\r\n\r\n\t\ti = Math.floor((low + high) / 2);\r\n\t\titem = +array[i];\r\n\t\tprev = +array[i - 1];\r\n\t\tif (item < target) {\r\n\t\t\tlow = i + 1;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (item > target) {\r\n\t\t\tif (!(!isNaN(prev) && prev < target)) {\r\n\t\t\t\thigh = i - 1;\r\n\t\t\t\tcontinue;\r\n\t\t\t} else {\r\n\t\t\t\t// if target is between 'i' and 'i-1' return 'i - 1'\r\n\t\t\t\treturn i - 1;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\twhile (+array[i] == +array[i + 1]) i++;\r\n\r\n\t\treturn i;\r\n\t}\r\n\treturn array.length - 1;\r\n}\r\n\r\nexport {\r\n\tgetSecondsInUnit,\r\n\tforEach,\r\n\tarrayMap,\r\n\tarrayIncludes,\r\n\tarrayFind,\r\n\tarrayFilter,\r\n\tarrayDifference,\r\n\tarraySome,\r\n\thashToArray,\r\n\tsortArrayOfHash,\r\n\tthrottle,\r\n\tisArray,\r\n\tisDate,\r\n\tisValidDate,\r\n\tisStringObject,\r\n\tisNumberObject,\r\n\tisBooleanObject,\r\n\tdelay,\r\n\tobjectKeys,\r\n\tisEventable,\r\n\treplaceValidZeroId,\r\n\tcheckZeroId,\r\n\tfindBinary\r\n};","import eventable from \"../../utils/eventable\";\r\nimport { isEventable } from \"../../utils/helpers\";\r\n\r\nexport interface ISelectedRegionConfig {\r\n\tclassName?: string;\r\n\trender?: (startPoint: IPoint, endPoint: IPoint) => HTMLElement;\r\n\tviewPort?: HTMLElement;\r\n\tuseRequestAnimationFrame: boolean;\r\n\tcallback?: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\r\n\tsingleRow: boolean;\r\n}\r\n\r\ninterface ICoordinates {\r\n\tleft: number;\r\n\ttop: number;\r\n}\r\n\r\nexport interface IPoint {\r\n\tabsolute: ICoordinates;\r\n\trelative: ICoordinates;\r\n}\r\n\r\nexport class SelectedRegion {\r\n\trender: () => void;\r\n\tprivate _viewPort: HTMLElement & eventable;\r\n\tprivate _el: HTMLElement = document.createElement(\"div\");\r\n\tprivate _callback: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\r\n\tprivate _startPoint: IPoint;\r\n\tprivate _endPoint: IPoint;\r\n\tprivate _positionPoint: IPoint;\r\n\tprivate _useRequestAnimationFrame: boolean;\r\n\tprivate _startDate: Date;\r\n\tprivate _endDate: Date;\r\n\tprivate _singleRow: boolean;\r\n\tprivate _gantt: any;\r\n\tprivate _view: any;\r\n\r\n\tconstructor(config: ISelectedRegionConfig, gantt: any, view: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._view = view;\r\n\t\tthis._viewPort = config.viewPort;\r\n\t\tthis._el.classList.add(config.className);\r\n\t\tif (typeof config.callback === \"function\") {\r\n\t\t\tthis._callback = config.callback;\r\n\t\t}\r\n\r\n\t\tthis.render = () => {\r\n\t\t\tlet node;\r\n\t\t\tif(config.render){\r\n\t\t\t\tnode = config.render(this._startPoint, this._endPoint);\r\n\t\t\t}else{\r\n\t\t\t\tnode = this.defaultRender(this._startPoint, this._endPoint);\r\n\t\t\t}\r\n\r\n\t\t\tif(node !== this._el){\r\n\t\t\t\tif(this._el && this._el.parentNode){\r\n\t\t\t\t\tthis._el.parentNode.removeChild(this._el);\r\n\t\t\t\t}\r\n\t\t\t\tthis._el = node;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.className !== \"\") {\r\n\t\t\t\tthis._el.classList.add(config.className);\r\n\t\t\t}\r\n\t\t\tthis.draw();\r\n\t\t};\r\n\r\n\t\tif (!isEventable(this._viewPort)) {\r\n\t\t\teventable(this._viewPort);\r\n\t\t}\r\n\t\tthis._singleRow = config.singleRow;\r\n\t\tthis._useRequestAnimationFrame = config.useRequestAnimationFrame;\r\n\t}\r\n\r\n\tdefaultRender = (start: IPoint, end: IPoint) => {\r\n\t\tif(!this._el){\r\n\t\t\tthis._el = document.createElement(\"div\");\r\n\t\t}\r\n\t\tconst node = this._el;\r\n\t\t// const gantt = this._gantt;\r\n\r\n\t\tconst top = Math.min(start.relative.top, end.relative.top);\r\n\t\tconst bottom = Math.max(start.relative.top, end.relative.top);\r\n\t\tconst left = Math.min(start.relative.left, end.relative.left);\r\n\t\tconst right = Math.max(start.relative.left, end.relative.left);\r\n\r\n\t\tif (this._singleRow) {\r\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\r\n\t\t\tnode.style.height = pos.height + \"px\";\r\n\t\t\tnode.style.top = pos.top + \"px\";\r\n\t\t} else {\r\n\t\t\tnode.style.height = Math.abs(bottom - top) + \"px\";\r\n\t\t\tnode.style.top = top + \"px\";\r\n\t\t}\r\n\t\tnode.style.width = Math.abs(right - left) + \"px\";\r\n\t\tnode.style.left = left + \"px\";\r\n\t\treturn node;\r\n\t};\r\n\r\n\tdraw() {\r\n\t\tif (this._useRequestAnimationFrame) {\r\n\t\t\treturn requestAnimationFrame(() => {\r\n\t\t\t\tthis._viewPort.appendChild(this.getElement());\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._viewPort.appendChild(this.getElement());\r\n\t\t}\r\n\t}\r\n\r\n\tclear() {\r\n\t\tif (this._useRequestAnimationFrame) {\r\n\t\t\treturn requestAnimationFrame(() => {\r\n\t\t\t\tif (!this._el.parentNode) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._viewPort.removeChild(this._el);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (!this._el.parentNode) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._viewPort.removeChild(this._el);\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement() {\r\n\t\treturn this._el;\r\n\t}\r\n\r\n\tgetViewPort() {\r\n\t\treturn this._viewPort;\r\n\t}\r\n\r\n\tsetStart(startPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._startPoint = startPoint;\r\n\t\tthis._startDate = gantt.dateFromPos(this._startPoint.relative.left);\r\n\t\tthis._viewPort.callEvent(\"onBeforeDrag\", [this._startPoint]);\r\n\t}\r\n\r\n\tsetEnd(endPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._endPoint = endPoint;\r\n\t\tif (this._singleRow) {\r\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\r\n\t\t\tthis._endPoint.relative.top = pos.top;\r\n\t\t}\r\n\t\tthis._endDate = gantt.dateFromPos(this._endPoint.relative.left);\r\n\t\tif (this._startPoint.relative.left > this._endPoint.relative.left) {\r\n\t\t\tthis._positionPoint = {\r\n\t\t\t\trelative: { left: this._endPoint.relative.left, top: this._positionPoint.relative.top },\r\n\t\t\t\tabsolute: { left: this._endPoint.absolute.left, top: this._positionPoint.absolute.top }\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (this._startPoint.relative.top > this._endPoint.relative.top) {\r\n\t\t\tthis._positionPoint = {\r\n\t\t\t\trelative: { left: this._positionPoint.relative.left, top: this._endPoint.relative.top },\r\n\t\t\t\tabsolute: { left: this._positionPoint.absolute.left, top: this._endPoint.absolute.top }\r\n\t\t\t};\r\n\t\t}\r\n\r\n\r\n\t\tthis._viewPort.callEvent(\"onDrag\", [this._startPoint, this._endPoint]);\r\n\t}\r\n\r\n\tsetPosition(positionPoint: IPoint) {\r\n\t\tthis._positionPoint = positionPoint;\r\n\t}\r\n\r\n\tdragEnd(endPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif(endPoint.relative.left < 0){\r\n\t\t\tendPoint.relative.left = 0;\r\n\t\t}\r\n\t\tthis._viewPort.callEvent(\"onBeforeDragEnd\", [this._startPoint, endPoint]);\r\n\t\tthis.setEnd(endPoint);\r\n\t\t// GS-1422. The endDate can be null if we drag the mouse outside the Gantt container\r\n\t\tthis._endDate = this._endDate || gantt.getState().max_date;\r\n\r\n\t\tif (this._startDate.valueOf() > this._endDate.valueOf()) {\r\n\t\t\t[ this._startDate, this._endDate ] = [ this._endDate, this._startDate ];\r\n\t\t}\r\n\t\tthis.clear();\r\n\t\tconst tasksByTime = gantt.getTaskByTime(this._startDate, this._endDate);\r\n\t\tconst tasksByIndex = this._getTasksByTop(this._startPoint.relative.top, this._endPoint.relative.top);\r\n\r\n\t\tthis._viewPort.callEvent(\"onDragEnd\", [this._startPoint, this._endPoint]);\r\n\t\tif (this._callback) {\r\n\t\t\tthis._callback(this._startPoint, this._endPoint, this._startDate, this._endDate, tasksByTime, tasksByIndex);\r\n\t\t}\r\n\t}\r\n\r\n\tgetInBounds() {\r\n\t\treturn this._singleRow;\r\n\t}\r\n\r\n\tprivate _getTasksByTop(start: number, end:number) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet startValue = start;\r\n\t\tlet endValue = end;\r\n\t\tif (start > end) {\r\n\t\t\tstartValue = end;\r\n\t\t\tendValue = start;\r\n\t\t}\r\n\t\tconst startIndex = this._getTaskPositionByTop(startValue).index;\r\n\t\tconst endIndex = this._getTaskPositionByTop(endValue).index;\r\n\t\tconst result = [];\r\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\r\n\t\t\tconst task = gantt.getTaskByIndex(i);\r\n\t\t\tif (task) {\r\n\t\t\t\tresult.push(gantt.getTaskByIndex(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getTaskPositionByTop(top: number){\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst view = this._view;\r\n\t\tconst index = view.getItemIndexByTopPosition(top);\r\n\t\tconst task = gantt.getTaskByIndex(index);\r\n\t\tif(task){\r\n\t\t\tconst height = view.getItemHeight(task.id);\r\n\t\t\tconst itemTop = view.getItemTop(task.id);\r\n\t\t\treturn {\r\n\t\t\t\ttop: itemTop || 0,\r\n\t\t\t\theight: height || 0,\r\n\t\t\t\tindex\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tconst dataHeight = view.getTotalHeight();\r\n\t\t\treturn {\r\n\t\t\t\ttop: top > dataHeight ? dataHeight : 0,\r\n\t\t\t\theight: gantt.config.row_height,\r\n\t\t\t\tindex: top > dataHeight ? gantt.getTaskCount() : 0\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n}","interface IPoint {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport class EventsManager {\r\n\tstatic create(gantt: any) {\r\n\t\treturn new EventsManager(gantt);\r\n\t}\r\n\tprivate _mouseDown: boolean = false;\r\n\tprivate _startPoint: IPoint;\r\n\tprivate _scrollState: IPoint;\r\n\tprivate _originAutoscroll: boolean;\r\n\tprivate _domEvents: any;\r\n\tprivate _timeline: any;\r\n\tprivate _gantt: any;\r\n\tprivate _trace: IPoint[];\r\n\tprivate _originalReadonly: boolean;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t\tthis._trace = [];\r\n\t}\r\n\r\n\tdestructor() {\r\n\t\tthis._domEvents.detachAll();\r\n\t}\r\n\r\n\tattach(timeline: any): void {\r\n\t\tthis._timeline = timeline;\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._domEvents.attach(timeline.$task, \"mousedown\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey,ignore, enabled } = gantt.config.drag_timeline;\r\n\t\t\tif(enabled === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\r\n\t\t\tif(ignore !== undefined) {\r\n\t\t\t\tif(ignore instanceof Array){\r\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilterTargets = ignore;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (filterTargets) {\r\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\r\n\t\t\tthis._startDrag(event);\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(document, \"keydown\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] === true) {\r\n\t\t\t\tthis._applyDndReadyStyles();\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._domEvents.attach(document, \"keyup\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] === false) {\r\n\t\t\t\tthis._clearDndReadyStyles();\r\n\t\t\t\tthis._stopDrag(event);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(document, \"mouseup\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(gantt.$root, \"mouseup\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(document, \"mouseleave\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(gantt.$root, \"mouseleave\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(gantt.$root, \"mousemove\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\t// GS-854. If we don't have useKey for the drag_timeline extension,\r\n\t\t\t// check the click_drag to not simultaneously use both extensions\r\n\t\t\tconst clickDrag = this._gantt.ext.clickDrag;\r\n\t\t\tconst clickDragUseKey = (this._gantt.config.click_drag || {}).useKey;\r\n\t\t\tif (clickDrag && clickDragUseKey) {\r\n\t\t\t\tif (!useKey && event[clickDragUseKey]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tthis._trace.push({ x: event.clientX, y: event.clientY });\r\n\t\t\t\tconst scrollPosition: IPoint = this._countNewScrollPosition({ x: event.clientX, y: event.clientY });\r\n\t\t\t\tthis._setScrollPosition(timeline, scrollPosition);\r\n\t\t\t\tthis._scrollState = scrollPosition;\r\n\t\t\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _calculateDirectionVector = () => {\r\n\t\tconst traceSteps = 10;\r\n\t\tif(this._trace.length >= traceSteps) {\r\n\t\t\tconst dots = this._trace.slice(this._trace.length - traceSteps);\r\n\r\n\t\t\tconst vectors = [];\r\n\t\t\tfor(let i = 1; i < dots.length; i++) {\r\n\t\t\t\tvectors.push({\r\n\t\t\t\t\tx: dots[i].x - dots[i - 1].x,\r\n\t\t\t\t\ty: dots[i].y - dots[i - 1].y\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tconst resultVector = {x:0, y:0};\r\n\r\n\t\t\tvectors.forEach((vector) => {\r\n\t\t\t\tresultVector.x += vector.x;\r\n\t\t\t\tresultVector.y += vector.y;\r\n\t\t\t});\r\n\r\n\t\t\tconst magnitude = Math.sqrt(resultVector.x*resultVector.x + resultVector.y*resultVector.y);\r\n\t\t\tconst angleDegrees = Math.atan2(Math.abs(resultVector.y), Math.abs(resultVector.x)) * 180 / Math.PI;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tmagnitude,\r\n\t\t\t\tangleDegrees\r\n\t\t\t};\r\n\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tprivate _applyDndReadyStyles = (): void => {\r\n\t\tthis._timeline.$task.classList.add(\"gantt_timeline_move_available\");\r\n\t};\r\n\r\n\tprivate _clearDndReadyStyles = (): void => {\r\n\t\tthis._timeline.$task.classList.remove(\"gantt_timeline_move_available\");\r\n\t};\r\n\r\n\tprivate _getScrollPosition = (timeline: any): IPoint => {\r\n\t\tconst gantt = this._gantt;\r\n\t\treturn {\r\n\t\t\tx: gantt.$ui.getView(timeline.$config.scrollX).getScrollState().position,\r\n\t\t\ty: gantt.$ui.getView(timeline.$config.scrollY).getScrollState().position\r\n\t\t};\r\n\t};\r\n\tprivate _countNewScrollPosition = (coords: IPoint): IPoint => {\r\n\t\tconst vector = this._calculateDirectionVector();\r\n\t\tlet shiftX = this._startPoint.x - coords.x;\r\n\t\tlet shiftY = this._startPoint.y - coords.y;\r\n\t\tif(vector){\r\n\t\t\tif(vector.angleDegrees < 15){\r\n\t\t\t\tshiftY = 0;\r\n\t\t\t} else if(vector.angleDegrees > 75){\r\n\t\t\t\tshiftX = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst result = {\r\n\t\t\tx: this._scrollState.x + shiftX,\r\n\t\t\ty: this._scrollState.y + shiftY\r\n\t\t};\r\n\t\treturn result;\r\n\t};\r\n\tprivate _setScrollPosition = (timeline: any, coords: IPoint): void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tgantt.scrollLayoutCell(timeline.$id, coords.x, coords.y);\r\n\t\t});\r\n\t};\r\n\tprivate _stopDrag = (event: Event): void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._trace = [];\r\n\t\tgantt.$root.classList.remove(\"gantt_noselect\");\r\n\r\n\t\tif(this._originalReadonly !== undefined){\r\n\t\t\tgantt.config.readonly = this._originalReadonly;\r\n\t\t\tif(this._mouseDown && gantt.config.drag_timeline && gantt.config.drag_timeline.render){\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this._originAutoscroll !== undefined){\r\n\t\t\tgantt.config.autoscroll = this._originAutoscroll;\r\n\t\t}\r\n\r\n\t\tif(gantt.config.drag_timeline){\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] !== true) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._mouseDown = false;\r\n\t};\r\n\r\n\tprivate _startDrag = (event: any) : void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._originAutoscroll = gantt.config.autoscroll;\r\n\t\tgantt.config.autoscroll = false;\r\n\r\n\t\tgantt.$root.classList.add(\"gantt_noselect\");\r\n\t\tthis._originalReadonly = gantt.config.readonly;\r\n\t\tgantt.config.readonly = true;\r\n\r\n\t\tif(gantt.config.drag_timeline && gantt.config.drag_timeline.render){\r\n\t\t\tgantt.render();\r\n\t\t}\r\n\r\n\t\tthis._trace = [];\r\n\t\tthis._mouseDown = true;\r\n\t\tconst { x, y } = this._getScrollPosition(this._timeline);\r\n\t\tthis._scrollState = { x, y };\r\n\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\r\n\t\tthis._trace.push(this._startPoint);\r\n\t};\r\n}","export default function(gantt) {\r\n\r\n\t(function () {\r\n\t\tvar modalsStack = [];\r\n\r\n\t\tfunction isModal() {\r\n\t\t\treturn !!modalsStack.length;\r\n\t\t}\r\n\r\n\t\tfunction afterPopup(box) {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tif (!isModal()){\r\n\t\t\t\t\tif(!gantt.$destroyed){\r\n\t\t\t\t\t\tgantt.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, 1);\r\n\t\t}\r\n\r\n\t\tfunction startModal(box) {\r\n\t\t\tgantt.eventRemove(box, \"keydown\", trapFocus);\r\n\t\t\tgantt.event(box, \"keydown\", trapFocus);\r\n\t\t\tmodalsStack.push(box);\r\n\t\t\t//gantt.$keyboardNavigation.dispatcher.disable();\r\n\t\t}\r\n\r\n\t\tfunction endModal() {\r\n\t\t\tvar box = modalsStack.pop();\r\n\t\t\tif (box) {\r\n\t\t\t\tgantt.eventRemove(box, \"keydown\", trapFocus);\r\n\t\t\t}\r\n\t\t\tafterPopup(box);\r\n\r\n\t\t}\r\n\r\n\r\n\t\tfunction isTopModal(box) {\r\n\t\t\treturn box == modalsStack[modalsStack.length - 1];\r\n\t\t}\r\n\r\n\t\tfunction trapFocus(event) {\r\n\t\t\tvar target = event.currentTarget;\r\n\t\t\tif (!isTopModal(target)) return;\r\n\r\n\t\t\tgantt.$keyboardNavigation.trapFocus(target, event);\r\n\t\t}\r\n\r\n\t\tfunction traceLightbox() {\r\n\t\t\tstartModal(gantt.getLightbox());\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onLightbox\", traceLightbox);\r\n\t\tgantt.attachEvent(\"onAfterLightbox\", endModal);\r\n\t\tgantt.attachEvent(\"onLightboxChange\", function () {\r\n\t\t\tendModal();\r\n\t\t\ttraceLightbox();\r\n\t\t});\r\n\r\n\r\n\t\tgantt.attachEvent(\"onAfterQuickInfo\", function () {\r\n\t\t\tafterPopup();\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onMessagePopup\", function (box) {\r\n\t\t\tsaveFocus();\r\n\t\t\tstartModal(box);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterMessagePopup\", function () {\r\n\t\t\tendModal();\r\n\t\t\trestoreFocus();\r\n\t\t});\r\n\r\n\t\tvar focusElement = null;\r\n\r\n\t\tfunction saveFocus() {\r\n\t\t\tfocusElement = gantt.utils.dom.getActiveElement();\r\n\t\t}\r\n\r\n\t\tfunction restoreFocus() {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tif (focusElement) {\r\n\t\t\t\t\tfocusElement.focus();\r\n\t\t\t\t\tfocusElement = null;\r\n\t\t\t\t}\r\n\t\t\t}, 1);\r\n\t\t}\r\n\r\n\t\tgantt.$keyboardNavigation.isModal = isModal;\r\n\r\n\r\n\t})();\r\n\r\n};","\r\ninterface IQuickInfoContainer{\r\n\tparent: HTMLElement;\r\n\txViewport: HTMLElement;\r\n\tyViewport: HTMLElement;\r\n}\r\n\r\nexport class QuickInfo {\r\n\tprivate _quickInfoTask: TaskID;\r\n\tprivate _quickInfoBoxId: number | string;\r\n\tprivate _quickInfoBox: HTMLElement;\r\n\tprivate _quickInfoReadonly: boolean | null;\r\n\tprivate _container: HTMLElement;\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\t// show at coordinates:\r\n\t// show(x: number, y: number)\r\n\t// show for a task:\r\n\t// show(id: TaskID)\r\n\tshow : {\r\n\t\t(x: number, y: number) : void;\r\n\t\t(id: TaskID) : void;\r\n\t} = (id: TaskID | number, y? : number) : void => {\r\n\t\tif (y === undefined) {\r\n\t\t\tthis._showForTask(id);\r\n\t\t} else {\r\n\t\t\tthis._showAtCoordinates(id as number, y);\r\n\t\t}\r\n\t};\r\n\r\n\thide = (forced?: boolean) : any => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tthis._quickInfoBoxId = 0;\r\n\t\tconst taskId = this._quickInfoTask;\r\n\t\tthis._quickInfoTask = null;\r\n\r\n\t\tif (qi && qi.parentNode){\r\n\r\n\t\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\r\n\t\t\t\treturn qi.parentNode.removeChild(qi);\r\n\t\t\t}\r\n\r\n\t\t\tqi.className += \" gantt_qi_hidden\";\r\n\t\t\tif (qi.style.right === \"auto\"){\r\n\t\t\t\tqi.style.left = \"-350px\";\r\n\t\t\t} else {\r\n\t\t\t\tqi.style.right = \"-350px\";\r\n\t\t\t}\r\n\r\n\t\t\tif (forced) {\r\n\t\t\t\tqi.style.left = qi.style.right = \"\";\r\n\t\t\t\tqi.parentNode.removeChild(qi);\r\n\t\t\t}\r\n\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\r\n\t\t}\r\n\t};\r\n\r\n\tgetNode = (): HTMLElement => {\r\n\t\tif(this._quickInfoBox) {\r\n\t\t\treturn this._quickInfoBox;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tsetContainer = (container: string|HTMLElement): void => {\r\n\t\tif(container){\r\n\t\t\tthis._container = typeof container === \"string\" ? document.getElementById(container) : container;\r\n\t\t}\r\n\t};\r\n\r\n\tsetContent = (content?: IQuickInfoContent) => {\r\n\t\tconst gantt = this._gantt;\r\n\r\n\t\tconst defaultContent = {\r\n\t\t\ttaskId: null,\r\n\t\t\theader: {\r\n\t\t\t\ttitle: \"\",\r\n\t\t\t\tdate: \"\"\r\n\t\t\t},\r\n\t\t\tcontent: \"\",\r\n\t\t\tbuttons: gantt.config.quickinfo_buttons\r\n\t\t};\r\n\r\n\t\tif(!content){\r\n\t\t\tcontent = defaultContent;\r\n\t\t}\r\n\r\n\t\tif(!content.taskId){\r\n\t\t\tcontent.taskId = defaultContent.taskId;\r\n\t\t}\r\n\r\n\t\tif(!content.header){\r\n\t\t\tcontent.header = defaultContent.header;\r\n\t\t}\r\n\r\n\t\tif(!content.header.title){\r\n\t\t\tcontent.header.title = defaultContent.header.title;\r\n\t\t}\r\n\t\tif(!content.header.date){\r\n\t\t\tcontent.header.date = defaultContent.header.date;\r\n\t\t}\r\n\t\tif(!content.content){\r\n\t\t\tcontent.content = defaultContent.content;\r\n\t\t}\r\n\t\tif(!content.buttons){\r\n\t\t\tcontent.buttons = defaultContent.buttons;\r\n\t\t}\r\n\r\n\r\n\t\tlet qi = this.getNode();\r\n\t\tif(!qi){\r\n\t\t\tqi = this._createQuickInfoElement();\r\n\t\t}\r\n\r\n\t\tif(content.taskId){\r\n\t\t\tthis._quickInfoBoxId = content.taskId;\r\n\t\t}\r\n\r\n\t\tconst titleBox = qi.querySelector(\".gantt_cal_qi_title\") as HTMLElement;\r\n\t\tconst titleContent = titleBox.querySelector(\".gantt_cal_qi_tcontent\");\r\n\t\tconst titleDate = titleBox.querySelector(\".gantt_cal_qi_tdate\");\r\n\t\tconst main = qi.querySelector(\".gantt_cal_qi_content\");\r\n\t\tconst controls = qi.querySelector(\".gantt_cal_qi_controls\") as HTMLElement;\r\n\r\n\t\tgantt._waiAria.quickInfoHeader(qi, [content.header.title, content.header.date].join(\" \"));\r\n\r\n\t\ttitleContent.innerHTML = content.header.title;\r\n\t\ttitleDate.innerHTML = content.header.date;\r\n\r\n\t\tif(!content.header.title && !content.header.date){\r\n\t\t\ttitleBox.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\ttitleBox.style.display = \"\";\r\n\t\t}\r\n\t\tmain.innerHTML = content.content;\r\n\r\n\t\tconst buttons = content.buttons;\r\n\t\tif(!buttons.length){\r\n\t\t\tcontrols.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tcontrols.style.display = \"\";\r\n\t\t}\r\n\t\tlet html = \"\";\r\n\t\tfor (let i = 0; i < buttons.length; i++){\r\n\r\n\t\t\tconst ariaAttr = gantt._waiAria.quickInfoButtonAttrString(gantt.locale.labels[buttons[i]]);\r\n\r\n\t\t\thtml += `\r\n \r\n
${gantt.locale.labels[buttons[i]]}
\r\n
`;\r\n\t\t}\r\n\t\tcontrols.innerHTML = html;\r\n\r\n\t\tgantt.eventRemove(qi, \"click\", this._qiButtonClickHandler);\r\n\t\tgantt.eventRemove(qi, \"keypress\", this._qiKeyPressHandler);\r\n\r\n\t\tgantt.event(qi, \"click\", this._qiButtonClickHandler);\r\n\t\tgantt.event(qi, \"keypress\", this._qiKeyPressHandler);\r\n\t};\r\n\r\n\tprivate _qiButtonClickHandler = (ev) => {\r\n\t\tthis._qi_button_click(ev.target);\r\n\t};\r\n\r\n\tprivate _qiKeyPressHandler = (e) => {\r\n\r\n\t\tconst code = e.which;\r\n\t\tif (code === 13 || code === 32){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._qi_button_click(e.target);\r\n\t\t\t},1);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _showAtCoordinates(x: number, y: number) : void {\r\n\t\tthis.hide(true);\r\n\t\tthis._quickInfoBoxId = 0;\r\n\t\tthis._quickInfoTask = null;\r\n\t\tif(!this._quickInfoBox){\r\n\t\t\tthis._createQuickInfoElement();\r\n\t\t\tthis.setContent();\r\n\t\t}\r\n\r\n\t\tthis._appendAtCoordinates(x, y);\r\n\t\tthis._gantt.callEvent(\"onQuickInfo\", [null]);\r\n\t}\r\n\r\n\tprivate _showForTask(id: TaskID) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif ((\r\n\t\t\tid === this._quickInfoBoxId &&\r\n\t\t\tgantt.utils.dom.isChildOf(this._quickInfoBox, document.body)\r\n\t\t) || !gantt.config.show_quick_info) {\r\n\t\t\t// not show if the quick info is already displayed for this task, or if it shouldn't be displayed\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.hide(true);\r\n\t\tconst offset = 6; // offset TASK <> QI-BOX in 'px'\r\n\t\tconst container = this._getContainer();\r\n\t\tconst pos = this._get_event_counter_part(id, offset, container.xViewport, container.yViewport);\r\n\r\n\t\tif (pos){\r\n\t\t\tthis._quickInfoBox = this._init_quick_info(id);\r\n\t\t\tthis._quickInfoTask = id;\r\n\t\t\tthis._quickInfoBox.className = this._prepare_quick_info_classname(id);\r\n\r\n\t\t\tthis._fill_quick_data(id);\r\n\t\t\tthis._show_quick_info(pos, offset);\r\n\t\t\tgantt.callEvent(\"onQuickInfo\", [id]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _get_event_counter_part(id: TaskID, offset: number, xViewport: HTMLElement, yViewport: HTMLElement) : any {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet domEv = gantt.getTaskNode(id);\r\n\t\tif (!domEv) {\r\n\t\t\tdomEv = gantt.getTaskRowNode(id);\r\n\t\t\tif (!domEv) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet left = 0;\r\n\t\tconst top = offset + domEv.offsetTop + domEv.offsetHeight;\r\n\r\n\t\tlet node = domEv;\r\n\r\n\t\tif (gantt.utils.dom.isChildOf(node, xViewport)) {\r\n\t\t\twhile (node && node !== xViewport){\r\n\t\t\t\tleft += node.offsetLeft;\r\n\t\t\t\tnode = node.offsetParent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst scroll = gantt.getScrollState();\r\n\r\n\t\tif(node){\r\n\t\t\tconst dx = (left + domEv.offsetWidth/2) - scroll.x > (xViewport.offsetWidth/2) ? 1 : 0;\r\n\t\t\tconst dy = (top + domEv.offsetHeight/2) - scroll.y > (yViewport.offsetHeight/2) ? 1 : 0;\r\n\r\n\t\t\treturn { left, top, dx, dy, width:domEv.offsetWidth, height:domEv.offsetHeight };\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate _createQuickInfoElement() : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = document.createElement(\"div\");\r\n\t\tqi.className += \"gantt_cal_quick_info\";\r\n\t\tgantt._waiAria.quickInfoAttr(qi);\r\n\r\n\t\t// title\r\n\t\tconst ariaAttr = gantt._waiAria.quickInfoHeaderAttrString();\r\n\t\tvar html = `\r\n\t\t\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
`;\r\n\r\n\t\t//buttons\r\n\t\thtml += \"\";\r\n\r\n\t\thtml += \"
\";\r\n\r\n\t\tqi.innerHTML = html;\r\n\r\n\r\n\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\tconst container = this._getContainer();\r\n\t\t\tgantt.event(container.parent, \"scroll\", () => { this.hide(); });\r\n\t\t}\r\n\r\n\t\tthis._quickInfoBox = qi;\r\n\t\treturn qi;\r\n\t}\r\n\r\n\tprivate _init_quick_info(id: TaskID) : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst task = gantt.getTask(id);\r\n\t\t\r\n\r\n\t\tif(typeof this._quickInfoReadonly === \"boolean\"){\r\n\t\t\tif(gantt.isReadonly(task) !== this._quickInfoReadonly){\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t\tthis._quickInfoBox = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._quickInfoReadonly = gantt.isReadonly(task);\r\n\r\n\t\tif (!this._quickInfoBox){\r\n\t\t\tthis._quickInfoBox = this._createQuickInfoElement();\r\n\t\t}\r\n\r\n\t\treturn this._quickInfoBox;\r\n\t}\r\n\r\n\tprivate _prepare_quick_info_classname(id: TaskID) : string {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst task = gantt.getTask(id);\r\n\t\tconst taskType = gantt.getTaskType(task);\r\n\r\n\t\tlet css = `gantt_cal_quick_info gantt_${taskType}`;\r\n\t\tconst template = gantt.templates.quick_info_class(task.start_date, task.end_date, task);\r\n\r\n\t\tif(template){\r\n\t\t\tcss += \" \" + template;\r\n\t\t}\r\n\t\treturn css;\r\n\t}\r\n\r\n\tprivate _fill_quick_data(id: TaskID) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst ev = gantt.getTask(id);\r\n\r\n\t\tthis._quickInfoBoxId = id;\r\n\r\n\t\tlet allowedButtons = [];\r\n\t\tif (this._quickInfoReadonly){\r\n\t\t\tconst buttons = gantt.config.quickinfo_buttons;\r\n\t\t\tconst isEditor = {icon_delete: true, icon_edit: true};\r\n\t\t\tfor (let i = 0; i < buttons.length; i++){\r\n\t\t\t\tif(this._quickInfoReadonly && isEditor[buttons[i]]){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tallowedButtons.push(buttons[i]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tallowedButtons = gantt.config.quickinfo_buttons;\r\n\t\t}\r\n\r\n\t\tthis.setContent({\r\n\t\t\theader: {\r\n\t\t\t\ttitle: gantt.templates.quick_info_title(ev.start_date, ev.end_date, ev),\r\n\t\t\t\tdate: gantt.templates.quick_info_date(ev.start_date, ev.end_date, ev)\r\n\t\t\t},\r\n\t\t\tcontent: gantt.templates.quick_info_content(ev.start_date, ev.end_date, ev),\r\n\t\t\tbuttons: allowedButtons\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _appendAtCoordinates(x: number, y: number): void {\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tconst container = this._getContainer();\r\n\t\tif (!qi.parentNode ||\r\n\t\t\tqi.parentNode.nodeName.toLowerCase() === \"#document-fragment\"){ // IE8\r\n\t\t\tcontainer.parent.appendChild(qi);\r\n\t\t}\r\n\r\n\t\tqi.style.left = x + \"px\";\r\n\t\tqi.style.top = y + \"px\";\r\n\t}\r\n\r\n\tprivate _show_quick_info(pos: any, offset: number) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\tconst container = this._getContainer();\r\n\t\t\tif (!qi.parentNode ||\r\n\t\t\t\tqi.parentNode.nodeName.toLowerCase() === \"#document-fragment\"){ // IE8\r\n\t\t\t\tcontainer.parent.appendChild(qi);\r\n\t\t\t}\r\n\t\t\tconst width = qi.offsetWidth;\r\n\t\t\tconst popupHeight = qi.offsetHeight;\r\n\r\n\t\t\tconst scrolls = gantt.getScrollState();\r\n\t\t\tconst xViewport = container.xViewport;\r\n\t\t\tconst yViewport = container.yViewport;\r\n\t\t\tconst screenWidth = xViewport.offsetWidth + scrolls.x - width;\r\n\r\n\t\t\tconst relativePopupTop = pos.top - scrolls.y;\r\n\t\t\tconst relativePopupBottom = relativePopupTop + popupHeight;\r\n\r\n\t\t\tlet top = pos.top;\r\n\t\t\tif(relativePopupBottom > yViewport.offsetHeight / 2){\r\n\t\t\t\ttop = pos.top - (popupHeight + pos.height + 2*offset);\r\n\t\t\t\tif(top < scrolls.y && relativePopupBottom <= yViewport.offsetHeight){\r\n\t\t\t\t\ttop = pos.top;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (top < scrolls.y) {\r\n\t\t\t\ttop = scrolls.y;\r\n\t\t\t}\r\n\r\n\t\t\tconst x = Math.min(Math.max(scrolls.x, pos.left - pos.dx*(width - pos.width)), screenWidth);\r\n\t\t\tconst y = top;\r\n\r\n\t\t\tthis._appendAtCoordinates(x, y);\r\n\t\t} else {\r\n\t\t\tqi.style.top = 20 + \"px\";\r\n\t\t\tif (pos.dx === 1){\r\n\t\t\t\tqi.style.right = \"auto\";\r\n\t\t\t\tqi.style.left = \"-300px\";\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tqi.style.left = \"10px\";\r\n\t\t\t\t},1);\r\n\t\t\t} else {\r\n\t\t\t\tqi.style.left = \"auto\";\r\n\t\t\t\tqi.style.right = \"-300px\";\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tqi.style.right = \"10px\";\r\n\t\t\t\t},1);\r\n\t\t\t}\r\n\t\t\tqi.className += \" gantt_qi_\"+(pos.dx === 1 ? \"left\" : \"right\");\r\n\t\t\tgantt.$root.appendChild(qi);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _qi_button_click(node: any) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst box = this._quickInfoBox;\r\n\t\tif (!node || node === box){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(node.closest(\".gantt_cal_qi_close_btn\")){\r\n\t\t\tthis.hide();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst mask = node.className;\r\n\t\tif (mask.indexOf(\"_icon\") !== -1){\r\n\t\t\tconst id = this._quickInfoBoxId;\r\n\t\t\tgantt.$click.buttons[mask.split(\" \")[1].replace(\"icon_\",\"\")](id);\r\n\t\t} else {\r\n\t\t\tthis._qi_button_click(node.parentNode);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getContainer(): IQuickInfoContainer{\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet container = this._container ? this._container : gantt.$task_data;\r\n\t\tif (container && container.offsetHeight && container.offsetWidth) {\r\n\t\t\treturn {\r\n\t\t\t\tparent: container,\r\n\t\t\t\txViewport: gantt.$task,\r\n\t\t\t\tyViewport: gantt.$task_data\r\n\t\t\t};\r\n\t\t}\r\n\t\tcontainer = this._container ? this._container : gantt.$grid_data;\r\n\t\tif (container && container.offsetHeight && container.offsetWidth) {\r\n\t\t\treturn {\r\n\t\t\t\tparent: container,\r\n\t\t\t\txViewport: gantt.$grid,\r\n\t\t\t\tyViewport: gantt.$grid_data\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tparent: this._container ? this._container : gantt.$layout,\r\n\t\t\txViewport: gantt.$layout,\r\n\t\t\tyViewport: gantt.$layout\r\n\t\t};\r\n\t}\r\n}\r\n","import * as helpers from \"./helpers\";\r\n\r\nvar plainObjectConstructor = ({}).constructor.toString();\r\nfunction isCustomType(object){\r\n\tvar constructorString = object.constructor.toString();\r\n\r\n\treturn constructorString !== plainObjectConstructor;\r\n}\r\n\r\nfunction copy(object) {\r\n\tvar i, result; // iterator, types array, result\r\n\r\n\tif (object && typeof object == \"object\") {\r\n\r\n\t\tswitch (true){\r\n\t\t\tcase (helpers.isDate(object)):\r\n\t\t\t\tresult = new Date(object);\r\n\t\t\t\tbreak;\r\n\t\t\tcase (helpers.isArray(object)):\r\n\t\t\t\tresult = new Array(object.length);\r\n\t\t\t\tfor(i = 0; i < object.length; i++){\r\n\t\t\t\t\tresult[i] = copy(object[i]);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t/*\t\tcase (helpers.isStringObject(object)):\r\n\t\t\t\tresult = new String(object);\r\n\t\t\t\tbreak;\r\n\t\t\tcase (helpers.isNumberObject(object)):\r\n\t\t\t\tresult = new Number(object);\r\n\t\t\t\tbreak;\r\n\t\t\tcase (helpers.isBooleanObject(object)):\r\n\t\t\t\tresult = new Boolean(object);\r\n\t\t\t\tbreak;*/\r\n\t\t\tdefault:\r\n\t\t\t\tif(isCustomType(object)){\r\n\t\t\t\t\tresult = Object.create(object);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tresult = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (i in object) {\r\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.apply(object, [i]))\r\n\t\t\t\t\t\tresult[i] = copy(object[i]);\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn result || object;\r\n}\r\n\r\nfunction mixin (target, source, force){\r\n\tfor (var f in source)\r\n\t\tif (((target[f] === undefined) || force)) target[f]=source[f];\r\n\treturn target;\r\n}\r\n\r\nfunction defined(obj) {\r\n\treturn typeof(obj) != \"undefined\";\r\n}\r\n\r\nvar seed;\r\nfunction uid() {\r\n\tif (!seed)\r\n\t\tseed = (new Date()).valueOf();\r\n\r\n\tseed++;\r\n\treturn seed;\r\n}\r\n\r\n//creates function with specified \"this\" pointer\r\nfunction bind(functor, object){\r\n\tif(functor.bind)\r\n\t\treturn functor.bind(object);\r\n\telse\r\n\t\treturn function(){ return functor.apply(object,arguments); };\r\n}\r\n\r\nfunction event(el, event, handler, capture){\r\n\tif (el.addEventListener)\r\n\t\tel.addEventListener(event, handler, capture === undefined ? false : capture);\r\n\r\n\telse if (el.attachEvent)\r\n\t\tel.attachEvent(\"on\"+event, handler);\r\n}\r\n\r\nfunction eventRemove(el, event, handler, capture){\r\n\tif (el.removeEventListener)\r\n\t\tel.removeEventListener(event, handler, capture === undefined ? false : capture);\r\n\r\n\telse if (el.detachEvent)\r\n\t\tel.detachEvent(\"on\"+event, handler);\r\n}\r\n\r\nexport {\r\n\tcopy,\r\n\tdefined,\r\n\tmixin,\r\n\tuid,\r\n\tbind,\r\n\tevent,\r\n\teventRemove\r\n};","import * as utils from \"../../../utils/utils\";\r\n\r\nfunction createScope(addEvent, removeEvent) {\r\n\taddEvent = addEvent || utils.event;\r\n\tremoveEvent = removeEvent || utils.eventRemove;\r\n\r\n\tvar handlers = [];\r\n\r\n\tvar eventScope = {\r\n\t\tattach: function(el, event, callback, capture){\r\n\t\t\thandlers.push({element: el, event:event, callback: callback, capture: capture});\r\n\t\t\taddEvent(el, event, callback, capture);\r\n\t\t},\r\n\t\tdetach: function(el, event, callback, capture){\r\n\t\t\tremoveEvent(el, event, callback, capture);\r\n\t\t\tfor(var i = 0; i < handlers.length; i++){\r\n\t\t\t\tvar handler = handlers[i];\r\n\t\t\t\tif (handler.element === el && handler.event === event && handler.callback === callback && handler.capture === capture) {\r\n\t\t\t\t\thandlers.splice(i, 1);\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tdetachAll: function () {\r\n\t\t\tvar staticArray = handlers.slice();\r\n\t\t\t// original handlers array can be spliced on every iteration\r\n\t\t\tfor (var i = 0; i < staticArray.length; i++){\r\n\t\t\t\tvar handler = staticArray[i];\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, handler.capture);\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, undefined);\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, false);\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, true);\r\n\t\t\t}\r\n\t\t\thandlers.splice(0, handlers.length);\r\n\t\t},\r\n\t\textend: function(){\r\n\t\t\treturn createScope(this.event, this.eventRemove);\r\n\t\t}\r\n\t};\r\n\r\n\treturn eventScope;\r\n}\r\n\r\nexport default createScope;","import * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\n\r\n/* eslint-disable no-restricted-globals */\r\n\r\ninterface IViewPosition{\r\n\ttop: number;\r\n\tleft: number;\r\n}\r\n\r\ninterface IViewBox extends IViewPosition{\r\n\twidth: number;\r\n\theight: number;\r\n\tbottom: number;\r\n\tright: number;\r\n}\r\n\r\nexport class Tooltip {\r\n\tprivate _root: HTMLElement;\r\n\tprivate _tooltipNode: HTMLElement;\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any){\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\tgetNode() : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (!this._tooltipNode){\r\n\t\t\tthis._tooltipNode = document.createElement(\"div\");\r\n\t\t\tthis._tooltipNode.className = \"gantt_tooltip\";\r\n\t\t\tgantt._waiAria.tooltipAttr(this._tooltipNode);\r\n\t\t}\r\n\t\treturn this._tooltipNode;\r\n\t}\r\n\r\n\tsetViewport(node: HTMLElement):Tooltip{\r\n\t\tthis._root = node;\r\n\t\treturn this;\r\n\t}\r\n\r\n\tshow(left: number, top: number): Tooltip;\r\n\tshow(event: MouseEvent): Tooltip;\r\n\tshow(left: number | MouseEvent, top?: number): Tooltip {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst container = document.body;\r\n\t\tconst node = this.getNode();\r\n\r\n\t\tif(!domHelpers.isChildOf(node, container)){\r\n\t\t\tthis.hide();\r\n\t\t\t// GS-2463. Don't put the node beyond the body coordinates\r\n\t\t\t// as it may trigger the resize event\r\n\t\t\tnode.style.top = node.style.top || \"0px\";\r\n\t\t\tnode.style.left = node.style.left || \"0px\";\r\n\t\t\tcontainer.appendChild(node);\r\n\t\t}\r\n\r\n\t\tif (this._isLikeMouseEvent(left)) {\r\n\t\t\tconst position = this._calculateTooltipPosition(left as MouseEvent);\r\n\t\t\ttop = position.top;\r\n\t\t\tleft = position.left;\r\n\t\t}\r\n\r\n\t\tnode.style.top = top + \"px\";\r\n\t\tnode.style.left = left + \"px\";\r\n\r\n\t\tgantt._waiAria.tooltipVisibleAttr(node);\r\n\t\treturn this;\r\n\t}\r\n\thide() : Tooltip{\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst node = this.getNode();\r\n\t\tif(node && node.parentNode){\r\n\t\t\tnode.parentNode.removeChild(node);\r\n\t\t}\r\n\t\tgantt._waiAria.tooltipHiddenAttr(node);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tsetContent(html: string) : Tooltip{\r\n\t\tconst node = this.getNode();\r\n\t\tnode.innerHTML = html;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// it is for salesforce, because it proxies event to it own events\r\n\tprivate _isLikeMouseEvent(event: any): boolean {\r\n\t\tif (!event || typeof event !== \"object\") {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn \"clientX\" in event && \"clientY\" in event;\r\n\t}\r\n\r\n\tprivate _getViewPort() : HTMLElement {\r\n\t\treturn this._root || document.body;\r\n\t}\r\n\r\n\r\n\tprivate _calculateTooltipPosition(event: MouseEvent): IViewPosition{\r\n\t\tconst gantt = this._gantt;\r\n\t\t// top/left coordinates inside the viewport by mouse position\r\n\t\tconst viewport = this._getViewPortSize();\r\n\t\tconst tooltipNode = this.getNode();\r\n\t\tconst tooltip: IViewBox = {\r\n\t\t\ttop:0,\r\n\t\t\tleft: 0,\r\n\t\t\twidth: tooltipNode.offsetWidth,\r\n\t\t\theight: tooltipNode.offsetHeight,\r\n\t\t\tbottom: 0,\r\n\t\t\tright: 0\r\n\t\t};\r\n\r\n\t\tconst offsetX = gantt.config.tooltip_offset_x;\r\n\t\tconst offsetY = gantt.config.tooltip_offset_y;\r\n\r\n\t\tconst container = document.body;\r\n\t\tconst mouse = domHelpers.getRelativeEventPosition(event, container);\r\n\t\tconst containerPos = domHelpers.getNodePosition(container);\r\n\t\tmouse.y += containerPos.y; // to fix margin collapsing\r\n\r\n\t\ttooltip.top = mouse.y;\r\n\t\ttooltip.left = mouse.x;\r\n\t\ttooltip.top += offsetY;\r\n\t\ttooltip.left += offsetX;\r\n\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\ttooltip.right = tooltip.left + tooltip.width;\r\n\r\n\t\tconst scrollTop = window.scrollY + container.scrollTop; // to fix margin collapsing\r\n\t\t// edge cases when the tooltip element can be partially hidden by edges of the viewport\r\n\t\tif(tooltip.top < viewport.top - scrollTop){\r\n\t\t\ttooltip.top = viewport.top;\r\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\t}else if(tooltip.bottom > viewport.bottom){\r\n\t\t\ttooltip.bottom = viewport.bottom;\r\n\t\t\ttooltip.top = tooltip.bottom - tooltip.height;\r\n\t\t}\r\n\r\n\t\tif(tooltip.left < viewport.left){\r\n\t\t\ttooltip.left = viewport.left;\r\n\t\t\ttooltip.right = viewport.left + tooltip.width;\r\n\t\t}else if(tooltip.right > viewport.right){\r\n\t\t\ttooltip.right = viewport.right;\r\n\t\t\ttooltip.left = tooltip.right - tooltip.width;\r\n\t\t}\r\n\r\n\t\tif(mouse.x >= tooltip.left && mouse.x <= tooltip.right) {\r\n\t\t\ttooltip.left = mouse.x - tooltip.width - offsetX;\r\n\t\t\ttooltip.right = tooltip.left + tooltip.width;\r\n\t\t}\r\n\r\n\t\tif(mouse.y >= tooltip.top && mouse.y <= tooltip.bottom) {\r\n\t\t\ttooltip.top = mouse.y - tooltip.height - offsetY;\r\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\t}\r\n\r\n\t\treturn tooltip;\r\n\t}\r\n\r\n\tprivate _getViewPortSize() : IViewBox {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst container = this._getViewPort();\r\n\t\tlet viewport = container;\r\n\t\tlet scrollTop = window.scrollY + document.body.scrollTop;\r\n\t\tlet scrollLeft = window.scrollX + document.body.scrollLeft;\r\n\t\tlet pos;\r\n\t\t// support for the initial tooltip mode where the tooltip element was attached to the data area of gantt\r\n\t\tif(container === gantt.$task_data){\r\n\t\t\tviewport = gantt.$task;\r\n\t\t\tscrollTop = 0;\r\n\t\t\tscrollLeft = 0;\r\n\t\t\tpos = domHelpers.getNodePosition(gantt.$task);\r\n\t\t}else{\r\n\t\t\tpos = domHelpers.getNodePosition(viewport);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tleft:pos.x + scrollLeft,\r\n\t\t\ttop: pos.y + scrollTop,\r\n\t\t\twidth: pos.width,\r\n\t\t\theight: pos.height,\r\n\t\t\tbottom: pos.y + pos.height + scrollTop,\r\n\t\t\tright: pos.x + pos.width + scrollLeft\r\n\t\t};\r\n\t}\r\n}\r\n","import domEventsScope from \"../../core/ui/utils/dom_event_scope\";\r\nimport * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\nimport * as helpers from \"../../utils/helpers\";\r\nimport { Tooltip } from \"./tooltip\";\r\n\r\ninterface ITrackerTarget {\r\n\tselector: string;\r\n\tonmouseenter: (event: MouseEvent, node: HTMLElement) => void;\r\n\tonmousemove: (event: MouseEvent, node: HTMLElement) => void;\r\n\tonmouseleave: (event: MouseEvent, node: HTMLElement) => void;\r\n\tglobal: boolean;\r\n}\r\n\r\ninterface ITooltipConfig {\r\n\tselector: string;\r\n\thtml: (event: MouseEvent, node: HTMLElement) => string;\r\n\tglobal: boolean;\r\n}\r\n\r\nexport class TooltipManager{\r\n\ttooltip: Tooltip;\r\n\tprotected _domEvents: any;\r\n\tprivate _listeners: object = {};\r\n\tprivate _gantt: any;\r\n\tprivate delayShow: any;\r\n\tprivate delayHide: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis.tooltip = new Tooltip(gantt);\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = domEventsScope();\r\n\t\tthis._initDelayedFunctions();\r\n\t}\r\n\r\n\tdestructor(): void{\r\n\t\tthis.tooltip.hide();\r\n\t\tthis._domEvents.detachAll();\r\n\t}\r\n\thideTooltip(): void{\r\n\t\tthis.delayHide();\r\n\t}\r\n\tattach(config: ITrackerTarget): void {\r\n\t\tlet root = document.body;\r\n\t\tconst gantt = this._gantt;\r\n\t\tif(!config.global){\r\n\t\t\troot = gantt.$root;\r\n\t\t}\r\n\r\n\t\tlet watchableTarget = null;\r\n\t\tconst handler = (event) => {\r\n\t\t\tconst eventTarget = domHelpers.getTargetNode(event);\r\n\t\t\tconst targetNode = domHelpers.closest(eventTarget, config.selector);\r\n\t\t\tif(domHelpers.isChildOf(eventTarget, this.tooltip.getNode())){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst doOnMouseEnter = () => {\r\n\t\t\t\twatchableTarget = targetNode;\r\n\t\t\t\tconfig.onmouseenter(event, targetNode);\r\n\t\t\t};\r\n\r\n\t\t\tif(watchableTarget){\r\n\t\t\t\tif(targetNode && targetNode === watchableTarget){\r\n\t\t\t\t\tconfig.onmousemove(event, targetNode);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.onmouseleave(event, watchableTarget);\r\n\t\t\t\t\twatchableTarget = null;\r\n\r\n\t\t\t\t\tif(targetNode && targetNode !== watchableTarget){\r\n\t\t\t\t\t\tdoOnMouseEnter();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(targetNode){\r\n\t\t\t\t\tdoOnMouseEnter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.detach(config.selector);\r\n\t\tthis._domEvents.attach(root, \"mousemove\", handler);\r\n\t\tthis._listeners[config.selector] = {\r\n\t\t\tnode: root,\r\n\t\t\thandler\r\n\t\t};\r\n\t}\r\n\r\n\tdetach(selector: string): void {\r\n\t\tconst listener = this._listeners[selector];\r\n\t\tif(listener){\r\n\t\t\tthis._domEvents.detach(listener.node, \"mousemove\", listener.handler);\r\n\t\t}\r\n\t}\r\n\r\n\ttooltipFor(config: ITooltipConfig): void {\r\n\t\tconst cloneDomEvent = (event: MouseEvent) => {\r\n\t\t\tlet clone = event;\r\n\t\t\t// making events survive timeout in ie\r\n\t\t\t// tslint:disable-next-line no-string-literal\r\n\t\t\tif(document[\"createEventObject\"] && !document.createEvent){\r\n\t\t\t\t// tslint:disable-next-line no-string-literal\r\n\t\t\t\tclone = document[\"createEventObject\"](event);\r\n\t\t\t}\r\n\t\t\treturn clone;\r\n\t\t};\r\n\t\tthis._initDelayedFunctions();\r\n\t\tthis.attach({\r\n\t\t\tselector: config.selector,\r\n\t\t\tglobal: config.global,\r\n\t\t\tonmouseenter:(event: MouseEvent, node: HTMLElement) => {\r\n\t\t\t\tconst html = config.html(event, node);\r\n\t\t\t\tif(html){\r\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonmousemove:(event: MouseEvent, node: HTMLElement) => {\r\n\t\t\t\tconst html = config.html(event, node);\r\n\t\t\t\tif(html){\r\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\t\t\tthis.delayHide();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonmouseleave:() => {\r\n\t\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\t\tthis.delayHide();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initDelayedFunctions(){\r\n\t\tconst gantt = this._gantt;\r\n\t\t// reset delayed functions in order to apply current values of tooltip_timeout\r\n\t\tif(this.delayShow){\r\n\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t}\r\n\t\tif(this.delayHide){\r\n\t\t\tthis.delayHide.$cancelTimeout();\r\n\t\t}\r\n\t\tthis.tooltip.hide();\r\n\r\n\t\tthis.delayShow = helpers.delay((event: MouseEvent, html: string) => {\r\n\t\t\tif(gantt.callEvent(\"onBeforeTooltip\", [event]) === false) {\r\n\t\t\t\tthis.tooltip.hide();\r\n\t\t\t} else {\r\n\t\t\t\tthis.tooltip.setContent(html);\r\n\t\t\t\tthis.tooltip.show(event);\r\n\t\t\t}\r\n\t\t}, gantt.config.tooltip_timeout || 1);\r\n\r\n\t\tthis.delayHide = helpers.delay(() => {\r\n\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\tthis.tooltip.hide();\r\n\t\t}, gantt.config.tooltip_hide_timeout || 1);\r\n\t}\r\n\r\n}","import { IInlineEditState, IMonitor, IUndo, IUndoCommand, TActionType, TEntityType, TUndoValue } from \"./types\";\r\n\r\nconst noTrack = {\r\n\tonBeforeUndo: \"onAfterUndo\",\r\n\tonBeforeRedo: \"onAfterRedo\"\r\n};\r\n\r\nconst batchActions = [\r\n\t\"onTaskDragStart\",\r\n\t\"onAfterTaskUpdate\",\r\n\t\"onAfterTaskDelete\",\r\n\t\"onBeforeBatchUpdate\"\r\n];\r\n\r\nexport class Monitor implements IMonitor {\r\n\tprivate _batchAction = null;\r\n\tprivate _batchMode = false;\r\n\tprivate _ignore = false;\r\n\tprivate _ignoreMoveEvents = false;\r\n\tprivate _initialTasks = {};\r\n\tprivate _initialLinks = {};\r\n\tprivate _nestedTasks = {};\r\n\tprivate _nestedLinks = {};\r\n\tprivate _timeout;\r\n\tprivate _gantt: any;\r\n\tprivate _undo: IUndo;\r\n\r\n\tconstructor(undo: IUndo, gantt: any) {\r\n\t\tthis._undo = undo;\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._attachEvents();\r\n\t}\r\n\r\n\tstore(id: TaskID | LinkID, type: TEntityType, overwrite: boolean = false) {\r\n\t\tif (type === this._gantt.config.undo_types.task) {\r\n\t\t\treturn this._storeTask(id, overwrite);\r\n\t\t}\r\n\t\tif (type === this._gantt.config.undo_types.link) {\r\n\t\t\treturn this._storeLink(id, overwrite);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tisMoveEventsIgnored() {\r\n\t\treturn this._ignoreMoveEvents;\r\n\t}\r\n\ttoggleIgnoreMoveEvents(newValue?: boolean) {\r\n\t\tthis._ignoreMoveEvents = newValue || false;\r\n\t}\r\n\tstartIgnore() {\r\n\t\tthis._ignore = true;\r\n\t}\r\n\tstopIgnore() {\r\n\t\tthis._ignore = false;\r\n\t}\r\n\tstartBatchAction() {\r\n\t\t// try catching updates made from event handlers using timeout\r\n\t\tif (!this._timeout){\r\n\t\t\tthis._timeout = setTimeout(() => {\r\n\t\t\t\tthis.stopBatchAction();\r\n\t\t\t\tthis._timeout = null;\r\n\t\t\t}, 10);\r\n\t\t}\r\n\r\n\r\n\t\tif (this._ignore || this._batchMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._batchMode = true;\r\n\t\tthis._batchAction = this._undo.action.create();\r\n\t}\r\n\tstopBatchAction() {\r\n\t\tif (this._ignore) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst undo = this._undo;\r\n\t\tif (this._batchAction) {\r\n\t\t\tundo.logAction(this._batchAction);\r\n\t\t}\r\n\t\tthis._batchMode = false;\r\n\t\tthis._batchAction = null;\r\n\t}\r\n\tonTaskAdded(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.add);\r\n\t\t}\r\n\t}\r\n\tonTaskUpdated(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.update);\r\n\t\t}\r\n\t}\r\n\tonTaskMoved(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\t(task as any).$local_index = this._gantt.getTaskIndex(task.id);\r\n\t\t\tconst oldValue = this.getInitialTask(task.id);\r\n\t\t\tif((task as any).$local_index === oldValue.$local_index &&\r\n\t\t\t\tthis._gantt.getParent(task) === this._gantt.getParent(oldValue)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\tthis._storeEntityCommand(\r\n\t\t\t\ttask,\r\n\t\t\t\tthis.getInitialTask(task.id),\r\n\t\t\t\tthis._undo.command.type.move,\r\n\t\t\t\tthis._undo.command.entity.task\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\tonTaskDeleted(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.remove);\r\n\t\t\tif (this._nestedTasks[task.id]) {\r\n\t\t\t\tconst children = this._nestedTasks[task.id];\r\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\r\n\t\t\t\t\tthis._storeTaskCommand(children[i], this._undo.command.type.remove);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this._nestedLinks[task.id]) {\r\n\t\t\t\tconst childrenLinks = this._nestedLinks[task.id];\r\n\t\t\t\tfor (let i = 0; i < childrenLinks.length; i++) {\r\n\t\t\t\t\tthis._storeLinkCommand(childrenLinks[i], this._undo.command.type.remove);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tonLinkAdded(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.add);\r\n\t\t}\r\n\t}\r\n\tonLinkUpdated(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.update);\r\n\t\t}\r\n\t}\r\n\tonLinkDeleted(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.remove);\r\n\t\t}\r\n\t}\r\n\tsetNestedTasks(id: TaskID, taskIds: TaskID[]) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet task = null;\r\n\t\tconst tasks = [];\r\n\t\tlet\tlinkIds = this._getLinks(gantt.getTask(id));\r\n\r\n\t\tfor (let i = 0; i < taskIds.length; i++) {\r\n\t\t\ttask = this.setInitialTask(taskIds[i]);\r\n\t\t\tlinkIds = linkIds.concat(this._getLinks(task));\r\n\t\t\ttasks.push(task);\r\n\t\t}\r\n\r\n\t\tconst uniqueLinks = {};\r\n\t\tfor (let i = 0; i < linkIds.length; i++) {\r\n\t\t\tuniqueLinks[linkIds[i]] = true;\r\n\t\t}\r\n\t\tconst links = [];\r\n\t\tfor (const i in uniqueLinks) {\r\n\t\t\tlinks.push(this.setInitialLink(i));\r\n\t\t}\r\n\t\tthis._nestedTasks[id] = tasks;\r\n\t\tthis._nestedLinks[id] = links;\r\n\t}\r\n\tsetInitialTask(id: TaskID, overwrite?: boolean) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (overwrite || (!this._initialTasks[id] || !this._batchMode)) {\r\n\t\t\tconst task = gantt.copy(gantt.getTask(id));\r\n\t\t\ttask.$index = gantt.getGlobalTaskIndex(id);\r\n\t\t\ttask.$local_index = gantt.getTaskIndex(id);\r\n\t\t\tthis.setInitialTaskObject(id, task);\r\n\t\t}\r\n\t\treturn this._initialTasks[id];\r\n\t}\r\n\tgetInitialTask(id: TaskID) {\r\n\t\treturn this._initialTasks[id];\r\n\t}\r\n\tclearInitialTasks() {\r\n\t\tthis._initialTasks = {};\r\n\t}\r\n\tsetInitialTaskObject(id: TaskID, object: ITask) {\r\n\t\tthis._initialTasks[id] = object;\r\n\t}\r\n\tsetInitialLink(id: LinkID, overwrite?: boolean) {\r\n\t\tif (!this._initialLinks[id] || !this._batchMode) {\r\n\t\t\tthis._initialLinks[id] = this._gantt.copy(this._gantt.getLink(id));\r\n\t\t}\r\n\t\treturn this._initialLinks[id];\r\n\t}\r\n\tgetInitialLink(id: LinkID) {\r\n\t\treturn this._initialLinks[id];\r\n\t}\r\n\tclearInitialLinks() {\r\n\t\tthis._initialLinks = {};\r\n\t}\r\n\tprivate _attachEvents() {\r\n\t\tlet deleteCacheCooldown = null;\r\n\t\tconst gantt = this._gantt;\r\n\r\n\t\tconst saveInitialAll = () => {\r\n\t\t\tif (!deleteCacheCooldown) {\r\n\t\t\t\tdeleteCacheCooldown = setTimeout(() => {\r\n\t\t\t\t\tdeleteCacheCooldown = null;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.clearInitialTasks();\r\n\t\t\t\tgantt.eachTask((task: ITask) => {\r\n\t\t\t\t\tthis.setInitialTask(task.id);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.clearInitialLinks();\r\n\t\t\t\tgantt.getLinks().forEach((link: ILink) => {\r\n\t\t\t\t\tthis.setInitialLink(link.id);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t\tconst getMoveObjectByTaskId = (id: TaskID) => {\r\n\t\t\treturn gantt.copy(gantt.getTask(id));\r\n\t\t};\r\n\r\n\t\tfor (const i in noTrack) {\r\n\t\t\tgantt.attachEvent(i, () => {\r\n\t\t\t\tthis.startIgnore();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(noTrack[i], () => {\r\n\t\t\t\tthis.stopIgnore();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < batchActions.length; i++) {\r\n\t\t\tgantt.attachEvent(batchActions[i], () => {\r\n\t\t\t\tthis.startBatchAction();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onParse\", () => {\r\n\t\t\tthis._undo.clearUndoStack();\r\n\t\t\tthis._undo.clearRedoStack();\r\n\t\t\tsaveInitialAll();\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskAdd\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.setInitialTask(id, true);\r\n\t\t\tthis.onTaskAdded(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskUpdate\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.onTaskUpdated(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskDelete\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.onTaskDeleted(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkAdd\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.setInitialLink(id, true);\r\n\t\t\tthis.onLinkAdded(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkUpdate\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.onLinkUpdated(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkDelete\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.onLinkDeleted(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onRowDragEnd\", (id: TaskID, target: TaskID) => {\r\n\t\t\tthis.onTaskMoved(getMoveObjectByTaskId(id));\r\n\t\t\tthis.toggleIgnoreMoveEvents();\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onBeforeTaskDelete\", (id: TaskID) => {\r\n\t\t\tthis.store(id, gantt.config.undo_types.task);\r\n\t\t\tconst nested = [];\r\n\r\n\t\t\t// remember task indexes in case their being deleted in a loop, so they could be restored in the correct order\r\n\t\t\tsaveInitialAll();\r\n\r\n\t\t\tgantt.eachTask((task: ITask) => {\r\n\t\t\t\tnested.push(task.id);\r\n\t\t\t}, id);\r\n\t\t\tthis.setNestedTasks(id, nested);\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tconst datastore = gantt.getDatastore(\"task\");\r\n\r\n\t\tdatastore.attachEvent(\"onBeforeItemMove\", (id: TaskID, parent: TaskID, tindex: number) => {\r\n\t\t\tif (!this.isMoveEventsIgnored()) {\r\n\t\t\t\tsaveInitialAll();\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tdatastore.attachEvent(\"onAfterItemMove\", (id: TaskID, parent: TaskID, tindex: number) => {\r\n\t\t\tif (!this.isMoveEventsIgnored()) {\r\n\t\t\t\tthis.onTaskMoved(getMoveObjectByTaskId(id));\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onRowDragStart\", (id: TaskID, target: TaskID, e: Event) => {\r\n\t\t\tthis.toggleIgnoreMoveEvents(true);\r\n\t\t\tsaveInitialAll();\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tlet dragId = null;\r\n\t\tlet projectDrag = false;\r\n\t\tgantt.attachEvent(\"onBeforeTaskDrag\", (taskId: TaskID) => {\r\n\t\t\tdragId = gantt.getState().drag_id;\r\n\t\t\tif (dragId === taskId){\r\n\t\t\t\tconst task = gantt.getTask(taskId);\r\n\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project){\r\n\t\t\t\t\tprojectDrag = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// GS-99. Store the initial task dates before multiple drag\r\n\t\t\tif (gantt.plugins().multiselect){\r\n\t\t\t\tconst selectedIds = gantt.getSelectedTasks();\r\n\t\t\t\tif (selectedIds.length > 1){\r\n\t\t\t\t\tselectedIds.forEach((id)=>{\r\n\t\t\t\t\t\tthis.store(id, gantt.config.undo_types.task, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this.store(taskId, gantt.config.undo_types.task);\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onAfterTaskDrag\", (taskId: TaskID) => {\r\n\t\t\t// if we drag multiple tasks and other tasks move to another date after that,\r\n\t\t\t// auto-scheduling/correct work time should occur in anoher command.\r\n\t\t\t// otherwise, when we undo the changes, the task constraint is not restored correctly\r\n\t\t\tconst multipleDrag = projectDrag || (gantt.plugins().multiselect && gantt.getSelectedTasks().length > 1);\r\n\t\t\tif (multipleDrag && dragId === taskId){\r\n\t\t\t\tprojectDrag = false;\r\n\t\t\t\tdragId = null;\r\n\t\t\t\tthis.stopBatchAction();\r\n\t\t\t}\r\n\t\t\t// GS-99. When dragging multiple tasks, we need to store the initial tasks\r\n\t\t\tthis.store(taskId, gantt.config.undo_types.task, true);\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onLightbox\", (taskId: TaskID) => this.store(taskId, gantt.config.undo_types.task));\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskAutoSchedule\", (task: ITask) => {\r\n\t\t\tthis.store(task.id, gantt.config.undo_types.task, true);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tif (gantt.ext.inlineEditors) {\r\n\t\t\t// remove the onGanttLayoutReady wrapper when GS-1288 is merged\r\n\t\t\tlet onBeforeEditStartId = null;\r\n\t\t\tlet onEditStart = null;\r\n\t\t\tgantt.attachEvent(\"onGanttLayoutReady\", () => {\r\n\t\t\t\tif (onBeforeEditStartId) {\r\n\t\t\t\t\tgantt.ext.inlineEditors.detachEvent(onBeforeEditStartId);\r\n\t\t\t\t}\r\n\t\t\t\tif (onEditStart) {\r\n\t\t\t\t\tgantt.ext.inlineEditors.detachEvent(onEditStart);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tonEditStart = gantt.ext.inlineEditors.attachEvent(\"onEditStart\", (state: IInlineEditState) => {\r\n\t\t\t\t\tthis.store(state.id, gantt.config.undo_types.task);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// GS-99. If another inline editor is opened and we open a new inline editor,\r\n\t\t\t\t// we shouldn't use the batchAction\r\n\t\t\t\tonBeforeEditStartId = gantt.ext.inlineEditors.attachEvent(\"onBeforeEditStart\", (state: IInlineEditState) => {\r\n\t\t\t\t\tthis.stopBatchAction();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _storeCommand(command: IUndoCommand) {\r\n\t\tconst undo = this._undo;\r\n\t\tundo.updateConfigs();\r\n\r\n\t\tif (!undo.undoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._batchMode) {\r\n\t\t\tthis._batchAction.commands.push(command);\r\n\t\t} else {\r\n\t\t\tconst action = undo.action.create([command]);\r\n\t\t\tundo.logAction(action);\r\n\t\t}\r\n\t}\r\n\tprivate _storeEntityCommand(obj: TUndoValue, old: TUndoValue, actionType: TActionType, entityType: TEntityType) {\r\n\t\tconst undo = this._undo;\r\n\t\tconst command = undo.command.create(obj, old, actionType, entityType);\r\n\t\tthis._storeCommand(command);\r\n\t}\r\n\tprivate _storeTaskCommand(obj: ITask, type: TActionType) {\r\n\t\tif(this._gantt.isTaskExists(obj.id)){\r\n\t\t\t(obj as any).$local_index = this._gantt.getTaskIndex(obj.id);\r\n\t\t}\r\n\r\n\t\tthis._storeEntityCommand(obj, this.getInitialTask(obj.id), type, this._undo.command.entity.task);\r\n\t}\r\n\tprivate _storeLinkCommand(obj: ILink, type: TActionType) {\r\n\t\tthis._storeEntityCommand(obj, this.getInitialLink(obj.id), type, this._undo.command.entity.link);\r\n\t}\r\n\tprivate _getLinks(task: ITask) {\r\n\t\treturn task.$source.concat(task.$target);\r\n\t}\r\n\tprivate _storeTask(taskId: TaskID, overwrite: boolean = false) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.setInitialTask(taskId, overwrite);\r\n\t\tgantt.eachTask((child: ITask) => {\r\n\t\t\tthis.setInitialTask(child.id);\r\n\t\t}, taskId);\r\n\t\treturn true;\r\n\t}\r\n\tprivate _storeLink(linkId: LinkID, overwrite: boolean = false) {\r\n\t\tthis.setInitialLink(linkId, overwrite);\r\n\t\treturn true;\r\n\t}\r\n}","import { IUndo, IUndoCommand, IUndoCommands, IUndoPropAction, IUndoPropCommand, TActionType, TEntityType, TUndoStack, TUndoValue } from \"./types\";\r\n\r\nconst MAX_UNDO_STEPS = 100;\r\n\r\nexport class Undo implements IUndo {\r\n\r\n\tmaxSteps = MAX_UNDO_STEPS;\r\n\tundoEnabled = true;\r\n\tredoEnabled = true;\r\n\taction: IUndoPropAction = {\r\n\t\tcreate: (commands?: IUndoCommand[]): IUndoCommands => {\r\n\t\t\treturn { commands: (commands ? commands.slice() : []) };\r\n\t\t},\r\n\t\tinvert: (action: IUndoCommands): IUndoCommands => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst revert = gantt.copy(action);\r\n\t\t\tconst commands = this.command;\r\n\t\t\tfor (let i = 0; i < action.commands.length; i++) {\r\n\t\t\t\tconst command = revert.commands[i] = commands.invert(revert.commands[i]);\r\n\t\t\t\tif (command.type === commands.type.update || command.type === commands.type.move) {\r\n\t\t\t\t\t[command.value, command.oldValue] = [command.oldValue, command.value];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn revert as IUndoCommands;\r\n\t\t}\r\n\t};\r\n\tcommand: IUndoPropCommand = {\r\n\t\t// entities that require different processing for undoing-redoing changes (gantt.config.undo_types)\r\n\t\tentity: null,\r\n\r\n\t\t// types of traced actions (gantt.config.undo_actions)\r\n\t\ttype: null,\r\n\r\n\t\tcreate: (value: TUndoValue, oldValue: TUndoValue, type: TActionType, entity: TEntityType): IUndoCommand => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\treturn {\r\n\t\t\t\tentity,\r\n\t\t\t\ttype,\r\n\t\t\t\tvalue: gantt.copy(value),\r\n\t\t\t\toldValue: gantt.copy(oldValue || value)\r\n\t\t\t};\r\n\t\t},\r\n\t\tinvert: (command: IUndoCommand): IUndoCommand => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst revert = gantt.copy(command);\r\n\t\t\trevert.type = this.command.inverseCommands(command.type);\r\n\t\t\treturn revert;\r\n\t\t},\r\n\t\tinverseCommands: (command: TActionType): TActionType => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst types = this.command.type;\r\n\t\t\tswitch (command) {\r\n\t\t\t\tcase types.update:\r\n\t\t\t\t\treturn types.update;\r\n\t\t\t\tcase types.remove:\r\n\t\t\t\t\treturn types.add;\r\n\t\t\t\tcase types.add:\r\n\t\t\t\t\treturn types.remove;\r\n\t\t\t\tcase types.move:\r\n\t\t\t\t\treturn types.move;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgantt.assert(false, \"Invalid command \"+ command);\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _undoStack = [];\r\n\tprivate _redoStack = [];\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any){\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\tgetUndoStack() {\r\n\t\treturn this._undoStack;\r\n\t}\r\n\tsetUndoStack(stack: []) {\r\n\t\tthis._undoStack = stack;\r\n\t}\r\n\r\n\tgetRedoStack() {\r\n\t\treturn this._redoStack;\r\n\t}\r\n\tsetRedoStack(stack: []) {\r\n\t\tthis._redoStack = stack;\r\n\t}\r\n\r\n\tclearUndoStack() {\r\n\t\tthis._undoStack = [];\r\n\t}\r\n\r\n\tclearRedoStack() {\r\n\t\tthis._redoStack = [];\r\n\t}\r\n\r\n\tupdateConfigs() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.maxSteps = gantt.config.undo_steps || MAX_UNDO_STEPS;\r\n\t\tthis.command.entity = gantt.config.undo_types;\r\n\t\tthis.command.type = gantt.config.undo_actions;\r\n\t\tthis.undoEnabled = !!gantt.config.undo;\r\n\t\tthis.redoEnabled = !!gantt.config.redo; // GS-873, Redo should work even when the `gantt.config.undo` is disabled.\r\n\t}\r\n\r\n\tundo() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.updateConfigs();\r\n\t\tif (!this.undoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst action = this._pop(this._undoStack);\r\n\t\tif (action) {\r\n\t\t\tthis._reorderCommands(action);\r\n\t\t}\r\n\t\tif (gantt.callEvent(\"onBeforeUndo\", [action]) !== false) {\r\n\t\t\tif (action) {\r\n\t\t\t\tthis._applyAction(this.action.invert(action));\r\n\t\t\t\tthis._push(this._redoStack, gantt.copy(action));\r\n\t\t\t\tgantt.callEvent(\"onAfterUndo\", [action]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.callEvent(\"onAfterUndo\", [null]);\r\n\t}\r\n\r\n\tredo() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.updateConfigs();\r\n\t\tif (!this.redoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst action = this._pop(this._redoStack);\r\n\t\tif (action) {\r\n\t\t\tthis._reorderCommands(action);\r\n\t\t}\r\n\r\n\t\tif (gantt.callEvent(\"onBeforeRedo\", [action]) !== false) {\r\n\t\t\tif (action) {\r\n\t\t\t\tthis._applyAction(action);\r\n\t\t\t\tthis._push(this._undoStack, gantt.copy(action));\r\n\t\t\t\tgantt.callEvent(\"onAfterRedo\", [action]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.callEvent(\"onAfterRedo\", [null]);\r\n\t}\r\n\r\n\t// storeUndo:\r\n\tlogAction(action: IUndoCommands) {\r\n\t\tthis._push(this._undoStack, action);\r\n\t\tthis._redoStack = [];\r\n\t}\r\n\r\n\tprivate _push(stack: TUndoStack, action: IUndoCommands): IUndoCommands {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (!action.commands.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst event = stack === this._undoStack ? \"onBeforeUndoStack\" : \"onBeforeRedoStack\";\r\n\t\tif (gantt.callEvent(event, [action]) === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// commands can be removed from event handler\r\n\t\tif (!action.commands.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstack.push(action);\r\n\t\twhile (stack.length > this.maxSteps) {\r\n\t\t\tstack.shift();\r\n\t\t}\r\n\t\treturn action;\r\n\t}\r\n\r\n\tprivate _pop(stack: TUndoStack): IUndoCommands {\r\n\t\treturn stack.pop();\r\n\t}\r\n\r\n\tprivate _reorderCommands(action) {\r\n\t\t// firstly process tasks and only then links\r\n\t\t// in order to ensure links are added not earlier than their tasks\r\n\t\t// firstly to 'move' actions and only then updates\r\n\t\tconst weights = { any: 0, link:1, task:2 };\r\n\t\tconst actionWeights = { move: 1, any:0 };\r\n\t\taction.commands.sort(function(a, b) {\r\n\t\t\tif (a.entity === \"task\" && b.entity === \"task\") {\r\n\t\t\t\tif (a.type !== b.type) {\r\n\t\t\t\t\treturn (actionWeights[b.type] || 0) - (actionWeights[a.type] || 0);\r\n\t\t\t\t} else if (a.type === \"move\" && a.oldValue && b.oldValue && b.oldValue.parent === a.oldValue.parent) {\r\n\t\t\t\t\treturn a.oldValue.$index - b.oldValue.$index;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst weightA = weights[a.entity] || weights.any;\r\n\t\t\t\tconst weightB = weights[b.entity] || weights.any;\r\n\t\t\t\treturn weightB - weightA;\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _applyAction(action: IUndoCommands) {\r\n\t\tlet command = null;\r\n\t\tconst entities = this.command.entity;\r\n\t\tconst actions = this.command.type;\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst methods = {};\r\n\t\tmethods[entities.task] = {\r\n\t\t\tadd: \"addTask\",\r\n\t\t\tget: \"getTask\",\r\n\t\t\tupdate: \"updateTask\",\r\n\t\t\tremove: \"deleteTask\",\r\n\t\t\tmove: \"moveTask\",\r\n\t\t\tisExists: \"isTaskExists\"\r\n\t\t};\r\n\t\tmethods[entities.link] = {\r\n\t\t\tadd: \"addLink\",\r\n\t\t\tget: \"getLink\",\r\n\t\t\tupdate: \"updateLink\",\r\n\t\t\tremove: \"deleteLink\",\r\n\t\t\tisExists: \"isLinkExists\"\r\n\t\t};\r\n\r\n\t\tgantt.batchUpdate(function() {\r\n\t\t\t// it is logical to undo actions from the last one to the first one\r\n\t\t\t// but we have to do it from the first one because the order\r\n\t\t\t// of tasks ($index and $local_index) depends on the existing tasks\r\n\t\t\tfor (let i = 0; i < action.commands.length; i++) {\r\n\t\t\t\tcommand = action.commands[i];\r\n\t\t\t\tconst method = methods[command.entity][command.type];\r\n\t\t\t\tconst getMethod = methods[command.entity].get;\r\n\t\t\t\tconst check = methods[command.entity].isExists;\r\n\r\n\t\t\t\tif (command.type === actions.add) {\r\n\t\t\t\t\tgantt[method](command.oldValue, command.oldValue.parent, command.oldValue.$local_index);\r\n\t\t\t\t} else if (command.type === actions.remove) {\r\n\t\t\t\t\tif (gantt[check](command.value.id)) {\r\n\t\t\t\t\t\tgantt[method](command.value.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (command.type === actions.update) {\r\n\t\t\t\t\tconst item = gantt[getMethod](command.value.id);\r\n\t\t\t\t\tfor(const prop in command.value){\r\n\t\t\t\t\t\tif(!prop.startsWith(\"$\") && !prop.startsWith(\"_\")){\r\n\t\t\t\t\t\t\titem[prop] = command.value[prop];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgantt[method](command.value.id);\r\n\t\t\t\t} else if (command.type === actions.move) {\r\n\t\t\t\t\tgantt[method](command.value.id, command.value.$local_index, command.value.parent);\r\n\t\t\t\t\t// GS-680: We should send the changes to the server after we undo vertical reorder\r\n\t\t\t\t\tgantt.callEvent(\"onRowDragEnd\", [command.value.id]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","\r\nimport click_drag from \"./click_drag\";\r\nimport drag_timeline from \"./drag_timeline\";\r\nimport export_api from \"./export_api\";\r\nimport fullscreen from \"./fullscreen\";\r\nimport keyboard_navigation from \"./keyboard_navigation\";\r\nimport marker from \"./marker\";\r\nimport multiselect from \"./multiselect\";\r\nimport quick_info from \"./quick_info\";\r\nimport tooltip from \"./tooltip\";\r\nimport undo from \"./undo\";\r\n\r\nexport default {\r\n\tclick_drag,\r\n\tdrag_timeline,\r\n\tfullscreen,\r\n\tkeyboard_navigation,\r\n\tquick_info,\r\n\ttooltip,\r\n\tundo,\r\n\tmarker,\r\n\tmultiselect,\r\n\texport_api\r\n};","import { EventsManager } from \"./eventsManager\";\r\nimport { ISelectedRegionConfig, SelectedRegion } from \"./selectedRegion\";\r\n\r\nexport default function(gantt: any){\r\n\tif (!gantt.ext) {\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tconst defaultConfig: ISelectedRegionConfig = {\r\n\t\tclassName: \"gantt_click_drag_rect\",\r\n\t\tuseRequestAnimationFrame: true,\r\n\t\tcallback: undefined,\r\n\t\tsingleRow: false\r\n\t};\r\n\r\n\tconst eventsManager = new EventsManager(gantt);\r\n\r\n\tgantt.ext.clickDrag = eventsManager;\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", () => {\r\n\t\tconst config: ISelectedRegionConfig = { viewPort: gantt.$task_data, ...defaultConfig };\r\n\t\tif (gantt.config.click_drag){\r\n\t\t\tconst clickDrag = gantt.config.click_drag;\r\n\t\t\tconfig.render = clickDrag.render || defaultConfig.render;\r\n\t\t\tconfig.className = clickDrag.className || defaultConfig.className;\r\n\t\t\tconfig.callback = clickDrag.callback || defaultConfig.callback;\r\n\t\t\tconfig.viewPort = clickDrag.viewPort || gantt.$task_data;\r\n\t\t\tconfig.useRequestAnimationFrame = clickDrag.useRequestAnimationFrame === undefined ?\r\n\t\t\t\tdefaultConfig.useRequestAnimationFrame : clickDrag.useRequestAnimationFrame;\r\n\r\n\t\t\tconfig.singleRow = clickDrag.singleRow === undefined ? defaultConfig.singleRow : clickDrag.singleRow;\r\n\t\t\tconst timeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\tconst selectedRegion = new SelectedRegion(config, gantt, timeline);\r\n\t\t\tgantt.ext.clickDrag.attach(selectedRegion, clickDrag.useKey, clickDrag.ignore);\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", () => {\r\n\t\teventsManager.destructor();\r\n\t});\r\n\r\n}","import { EventsManager } from \"./eventsManager\";\r\nexport default function(gantt: any){\r\n\tif (!gantt.ext){\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tgantt.ext.dragTimeline = {\r\n\t\tcreate: () => EventsManager.create(gantt)\r\n\t};\r\n\r\n\tgantt.config.drag_timeline = {\r\n\t\tenabled: true,\r\n\t\trender: false\r\n\t};\r\n}","export default function(gantt: any){\r\n\r\ninterface IBody extends HTMLElement {\r\n\tmsRequestFullscreen?: () => void;\r\n\tmozRequestFullScreen?: () => void;\r\n\twebkitRequestFullscreen?: (ALLOW_KEYBOARD_INPUT: any) => void;\r\n}\r\n\r\n\r\ninterface IConsole extends Console {\r\n\twarning?: (str: string) => void;\r\n}\r\n\r\ninterface IDocument extends Document {\r\n\tfullscreenElement: Element;\r\n\tmozFullScreenElement?: Element;\r\n\twebkitFullscreenElement?: Element;\r\n\tmsFullscreenElement?: Element;\r\n\twebkitFullscreenEnabled?: boolean;\r\n\tmozFullScreenEnabled?: boolean;\r\n\tmsFullscreenEnabled?: boolean;\r\n\tmsExitFullscreen?: () => void;\r\n\tmozCancelFullScreen?: () => void;\r\n\twebkitExitFullscreen?: () => void;\r\n}\r\n\r\ninterface IElement extends Element {\r\n\tALLOW_KEYBOARD_INPUT?: boolean;\r\n}\r\n\r\ninterface IElementSizes extends ISizes {\r\n\tmodified: boolean;\r\n}\r\n\r\ninterface ISizes {\r\n\twidth: null | string;\r\n\theight: null | string;\r\n\ttop: null | string;\r\n\tleft: null | string;\r\n\tposition: null | string;\r\n\tzIndex: null | number;\r\n}\r\n\r\nfunction isExpanded() {\r\n\tconst element = ((document as IDocument).fullscreenElement ||\r\n\t\t(document as IDocument).mozFullScreenElement ||\r\n\t\t(document as IDocument).webkitFullscreenElement ||\r\n\t\t(document as IDocument).msFullscreenElement);\r\n\treturn !!(element && element === document.body);\r\n}\r\n\r\nfunction isFullscreenAvailable() {\r\n\ttry {\r\n\t\treturn (document as IDocument).fullscreenEnabled ||\r\n\t\t\t(document as IDocument).webkitFullscreenEnabled ||\r\n\t\t\t(document as IDocument).mozFullScreenEnabled ||\r\n\t\t\t(document as IDocument).msFullscreenEnabled;\r\n\t} catch (e) {\r\n\t\t// eslint-disable-next-line no-console\r\n\t\tconsole.error(\"Fullscreen is not available:\", e); \r\n\t}\r\n}\r\n\r\nconst state = gantt.$services.getService(\"state\");\r\nstate.registerProvider(\"fullscreen\", () => {\r\n\tif (isFullscreenAvailable()){\r\n\t\treturn { fullscreen: isExpanded() };\r\n\t} else {\r\n\t\treturn undefined;\r\n\t}\r\n});\r\n\r\nlet backupBodyPadding = {\r\n\toverflow: null,\r\n\tpadding: null,\r\n\tpaddingTop: null,\r\n\tpaddingRight: null,\r\n\tpaddingBottom: null,\r\n\tpaddingLeft: null\r\n};\r\n\r\nconst backupElementSizes: IElementSizes = {\r\n\twidth: null,\r\n\theight: null,\r\n\ttop: null,\r\n\tleft: null,\r\n\tposition: null,\r\n\tzIndex: null,\r\n\tmodified: false\r\n};\r\n\r\nlet backupPositioning = null;\r\nfunction resetParentPositioning(root){\r\n\tlet parent = root.parentNode;\r\n\tconst positions = [];\r\n\twhile(parent && parent.style){\r\n\t\tpositions.push({\r\n\t\t\telement: parent,\r\n\t\t\toriginalPositioning: parent.style.position\r\n\t\t});\r\n\t\tparent.style.position = \"static\";\r\n\t\tparent = parent.parentNode;\r\n\t}\r\n\treturn positions;\r\n}\r\n\r\nfunction restoreParentPositioning(positions: any[]){\r\n\tpositions.forEach(record => {\r\n\t\trecord.element.style.position = record.originalPositioning;\r\n\t});\r\n}\r\n\r\n// expand gantt root element to fullscreen automatically\r\nfunction setFullScreenSizes() {\r\n\tconst root = gantt.ext.fullscreen.getFullscreenElement();\r\n\tconst body = document.body;\r\n\tupdateSizes(root.style, backupElementSizes);\r\n\tbackupBodyPadding = {\r\n\t\toverflow: body.style.overflow,\r\n\t\tpadding: body.style.padding ? body.style.padding : null,\r\n\t\tpaddingTop: body.style.paddingTop ? body.style.paddingTop : null,\r\n\t\tpaddingRight: body.style.paddingRight ? body.style.paddingRight : null,\r\n\t\tpaddingBottom: body.style.paddingBottom ? body.style.paddingBottom : null,\r\n\t\tpaddingLeft: body.style.paddingLeft ? body.style.paddingLeft : null\r\n\t};\r\n\r\n\tif (body.style.padding) {\r\n\t\tbody.style.padding = \"0\";\r\n\t}\r\n\tif (body.style.paddingTop) {\r\n\t\tbody.style.paddingTop = \"0\";\r\n\t}\r\n\tif (body.style.paddingRight) {\r\n\t\tbody.style.paddingRight = \"0\";\r\n\t}\r\n\tif (body.style.paddingBottom) {\r\n\t\tbody.style.paddingBottom = \"0\";\r\n\t}\r\n\tif (body.style.paddingLeft) {\r\n\t\tbody.style.paddingLeft = \"0\";\r\n\t}\r\n\r\n\tbody.style.overflow = \"hidden\";\r\n\r\n\troot.style.width = \"100vw\";\r\n\troot.style.height = \"100vh\";\r\n\troot.style.top = \"0px\";\r\n\troot.style.left = \"0px\";\r\n\troot.style.position = \"absolute\";\r\n\troot.style.zIndex = 1;\r\n\tbackupElementSizes.modified = true;\r\n\tbackupPositioning = resetParentPositioning(root);\r\n}\r\n\r\nfunction restoreSizes() {\r\n\tconst root = gantt.ext.fullscreen.getFullscreenElement();\r\n\tconst body = document.body;\r\n\tif (backupElementSizes.modified) {\r\n\t\tif (backupBodyPadding.padding) {\r\n\t\t\tbody.style.padding = backupBodyPadding.padding;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingTop) {\r\n\t\t\tbody.style.paddingTop = backupBodyPadding.paddingTop;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingRight) {\r\n\t\t\tbody.style.paddingRight = backupBodyPadding.paddingRight;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingBottom) {\r\n\t\t\tbody.style.paddingBottom = backupBodyPadding.paddingBottom;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingLeft) {\r\n\t\t\tbody.style.paddingLeft = backupBodyPadding.paddingLeft;\r\n\t\t}\r\n\r\n\t\tbody.style.overflow = backupBodyPadding.overflow;\r\n\t\tbackupBodyPadding = {\r\n\t\t\toverflow: null,\r\n\t\t\tpadding: null,\r\n\t\t\tpaddingTop: null,\r\n\t\t\tpaddingRight: null,\r\n\t\t\tpaddingBottom: null,\r\n\t\t\tpaddingLeft: null\r\n\t\t};\r\n\t\tupdateSizes(backupElementSizes, root.style);\r\n\t\tbackupElementSizes.modified = false;\r\n\t}\r\n\trestoreParentPositioning(backupPositioning);\r\n\tbackupPositioning = null;\r\n}\r\n\r\nfunction updateSizes(source: ISizes, target: ISizes) {\r\n\ttarget.width = source.width;\r\n\ttarget.height = source.height;\r\n\ttarget.top = source.top;\r\n\ttarget.left = source.left;\r\n\ttarget.position = source.position;\r\n\ttarget.zIndex = source.zIndex;\r\n}\r\n\r\nfunction addDOMEvents() {\r\n\tgantt.event(document, \"webkitfullscreenchange\", onFullScreenChange);\r\n\tgantt.event(document, \"mozfullscreenchange\", onFullScreenChange);\r\n\tgantt.event(document, \"MSFullscreenChange\", onFullScreenChange);\r\n\t// For IE on Win 10\r\n\tgantt.event(document, \"fullscreenChange\", onFullScreenChange);\r\n\tgantt.event(document, \"fullscreenchange\", onFullScreenChange);\r\n}\r\n\r\nlet expandGantt = false;\r\nfunction onFullScreenChange() {\r\n\tif (!gantt.$container) {\r\n\t\t// do nothing if gantt is not yet initialized\r\n\t\treturn;\r\n\t}\r\n\tlet event: \"onExpand\" | \"onCollapse\";\r\n\tconst isBodyExpanded = isExpanded();\r\n\r\n\tif (isBodyExpanded) {\r\n\t\tif (expandGantt) {\r\n\t\t\tevent = \"onExpand\";\r\n\t\t\tsetFullScreenSizes();\r\n\t\t}\r\n\t} else if (expandGantt) {\r\n\t\texpandGantt = false;\r\n\t\tevent = \"onCollapse\";\r\n\t\trestoreSizes();\r\n\t}\r\n\tsetTimeout(() => {\r\n\t\tgantt.render();\r\n\t});\r\n\tsetTimeout(() => {\r\n\t\tgantt.callEvent(event, [gantt.ext.fullscreen.getFullscreenElement()]);\r\n\t});\r\n}\r\n\r\nfunction cantFullscreen() {\r\n\tif (!gantt.$container) { // check is gantt initialized or not\r\n\t\treturn true;\r\n\t}\r\n\tif (!gantt.ext.fullscreen.getFullscreenElement()) {\r\n\t\treturn true;\r\n\t}\r\n\tif (!isFullscreenAvailable()) {\r\n\t\t// eslint-disable-next-line no-console\r\n\t\tconst method = (console as IConsole).warning || console.log;\r\n\t\tmethod(\"The `fullscreen` feature not being allowed, or full-screen mode not being supported\");\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\ngantt.ext.fullscreen = {\r\n\texpand(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (isExpanded()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeExpand\", [this.getFullscreenElement()])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\texpandGantt = true;\r\n\r\n\t\t// we switch body to fullscreen and then expand fullscreen element to viewport\r\n\t\t// we do it to correct display common elements: lightboxes, tooltip etc.\r\n\t\tconst element = document.body as IBody;\r\n\t\tconst requestArguments = element.webkitRequestFullscreen ?\r\n\t\t\t[(Element as unknown as IElement).ALLOW_KEYBOARD_INPUT] : [];\r\n\r\n\t\tconst requestFullscreen = element.msRequestFullscreen ||\r\n\t\t\telement.mozRequestFullScreen ||\r\n\t\t\telement.webkitRequestFullscreen ||\r\n\t\t\telement.requestFullscreen;\r\n\r\n\t\tif (requestFullscreen) {\r\n\t\t\trequestFullscreen.apply(element, requestArguments);\r\n\t\t}\r\n\t},\r\n\tcollapse(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!isExpanded()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeCollapse\", [this.getFullscreenElement()])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst requestExitFullscreen = (document as IDocument).msExitFullscreen ||\r\n\t\t\t(document as IDocument).mozCancelFullScreen ||\r\n\t\t\t(document as IDocument).webkitExitFullscreen ||\r\n\t\t\t(document as IDocument).exitFullscreen;\r\n\r\n\t\tif (requestExitFullscreen) {\r\n\t\t\trequestExitFullscreen.apply(document);\r\n\t\t}\r\n\t},\r\n\ttoggle(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!isExpanded()) {\r\n\t\t\tthis.expand();\r\n\t\t} else {\r\n\t\t\tthis.collapse();\r\n\t\t}\r\n\r\n\t},\r\n\tgetFullscreenElement(): HTMLElement {\r\n\t\treturn gantt.$root;\r\n\t}\r\n};\r\n\r\ngantt.expand = function() {\r\n\tgantt.ext.fullscreen.expand();\r\n};\r\n\r\ngantt.collapse = function(){\r\n\tgantt.ext.fullscreen.collapse();\r\n};\r\n\r\ngantt.attachEvent(\"onGanttReady\", addDOMEvents);\r\n\r\n}","import eventable from \"../utils/eventable\";\r\nimport * as domHelpers from \"../core/ui/utils/dom_helpers\";\r\n\r\nimport keyboard_shortcuts from \"./keyboard_navigation/common/keyboard_shortcuts\";\r\nimport eventhandler from \"./keyboard_navigation/common/eventhandler\";\r\nimport trap_modal_focus from \"./keyboard_navigation/common/trap_modal_focus\";\r\nimport gantt_node from \"./keyboard_navigation/elements/gantt_node\";\r\nimport nav_node from \"./keyboard_navigation/elements/nav_node\";\r\nimport header_cell from \"./keyboard_navigation/elements/header_cell\";\r\nimport task_row from \"./keyboard_navigation/elements/task_row\";\r\nimport task_cell from \"./keyboard_navigation/elements/task_cell\";\r\nimport modals from \"./keyboard_navigation/modals\";\r\nimport core from \"./keyboard_navigation/core\";\r\n\r\n\r\n\r\nexport default function(gantt){\r\n\tfunction setupKeyNav(gantt){\r\n\t\tgantt.config.keyboard_navigation = true;\r\n\t\tgantt.config.keyboard_navigation_cells = false;\r\n\r\n\t\tgantt.$keyboardNavigation = {};\r\n\r\n\t\tgantt._compose = function(){\r\n\t\t\tvar parts = Array.prototype.slice.call(arguments, 0);\r\n\t\t\tvar res = {};\r\n\t\t\tfor(var i = 0; i < parts.length; i++){\r\n\t\t\t\tvar obj = parts[i];\r\n\t\t\t\tif(typeof obj == \"function\"){\r\n\t\t\t\t\tobj = new obj();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor(var p in obj){\r\n\t\t\t\t\tres[p] = obj[p];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t};\r\n\r\n\t\tkeyboard_shortcuts(gantt);\r\n\t\teventhandler(gantt);\r\n\t\ttrap_modal_focus(gantt);\r\n\t\tgantt_node(gantt);\r\n\t\tnav_node(gantt);\r\n\t\theader_cell(gantt);\r\n\t\ttask_row(gantt);\r\n\t\ttask_cell(gantt);\r\n\t\tmodals(gantt);\r\n\t\tcore(gantt);\r\n\r\n\r\n\t\t(function(){\r\n\t\t\tvar dispatcher = gantt.$keyboardNavigation.dispatcher;\r\n\r\n\t\t\tdispatcher.isTaskFocused = function(id){\r\n\t\t\t\tvar node = dispatcher.activeNode;\r\n\t\t\t\tif(node instanceof gantt.$keyboardNavigation.TaskRow || node instanceof gantt.$keyboardNavigation.TaskCell) {\r\n\t\t\t\t\tif (node.taskId == id) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\r\n\t\t\tvar keyDownHandler = function(e){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return;\r\n\t\t\t\t// GS-734 & GS-1078: we don't need keyboard navigation inside inline editors\r\n\t\t\t\tif(!gantt.config.keyboard_navigation_cells && isInlineEditorCell(e)) return;\r\n\r\n\t\t\t\tif (isNoKeyboardNavigationElement(e) || isLightboxElement(e)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dispatcher.keyDownHandler(e);\r\n\t\t\t};\r\n\r\n\t\t\tvar focusHandler = function(e){\r\n\t\t\t\tif(dispatcher.$preventDefault){\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tgantt.$container.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t// do nothing if key-nav focus is already planned\r\n\t\t\t\t} else if (!dispatcher.awaitsFocus()) {\r\n\t\t\t\t\t// otherwise - re-focus key-nav element on gantt focus\r\n\t\t\t\t\tdispatcher.focusGlobalNode();\r\n\t\t\t\t}\r\n\r\n\t\t\t};\r\n\r\n\t\t\tvar reFocusActiveNode = function(){\r\n\t\t\t\tif(!dispatcher.isEnabled())\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tconst outsideGantt = !domHelpers.isChildOf(document.activeElement, gantt.$container) && document.activeElement.localName != \"body\";\r\n\t\t\t\tvar activeNode = dispatcher.getActiveNode();\r\n\t\t\t\tif(!activeNode || outsideGantt)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar domElement = activeNode.getNode();\r\n\t\t\t\tvar top, left;\r\n\t\t\t\tif(domElement && domElement.parentNode){\r\n\t\t\t\t\ttop = domElement.parentNode.scrollTop;\r\n\t\t\t\t\tleft = domElement.parentNode.scrollLeft;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tactiveNode.focus(true);\r\n\r\n\t\t\t\tif(domElement && domElement.parentNode){\r\n\t\t\t\t\tdomElement.parentNode.scrollTop = top;\r\n\t\t\t\t\tdomElement.parentNode.scrollLeft = left;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\r\n\t\t\tgantt.attachEvent(\"onDataRender\", function(){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return;\r\n\t\t\t\treFocusActiveNode();\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onGanttRender\", function(){\r\n\t\t\t\tgantt.eventRemove(gantt.$root, \"keydown\", keyDownHandler);\r\n\t\t\t\tgantt.eventRemove(gantt.$container, \"focus\", focusHandler);\r\n\t\t\t\tgantt.eventRemove(gantt.$container, \"mousedown\", mousedownHandler);\r\n\r\n\t\t\t\tif(gantt.config.keyboard_navigation){\r\n\r\n\t\t\t\t\tgantt.event(gantt.$root, \"keydown\", keyDownHandler);\r\n\t\t\t\t\tgantt.event(gantt.$container, \"focus\", focusHandler);\r\n\t\t\t\t\tgantt.event(gantt.$container, \"mousedown\", mousedownHandler);\r\n\t\t\t\t\tgantt.$container.setAttribute(\"tabindex\", \"0\");\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tgantt.$container.removeAttribute(\"tabindex\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfunction getTaskNodeConstructor(){\r\n\t\t\t\tif (gantt.config.keyboard_navigation_cells) {\r\n\t\t\t\t\treturn gantt.$keyboardNavigation.TaskCell;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gantt.$keyboardNavigation.TaskRow;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction isInlineEditorCell(e){\r\n\t\t\t\treturn !!domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\");\r\n\t\t\t}\r\n\t\t\t// GS-1445. Cancel keyboard navigation within custom elements\r\n\t\t\tfunction isNoKeyboardNavigationElement(e){\r\n\t\t\t\treturn !!domHelpers.closest(e.target, \".no_keyboard_navigation\");\r\n\t\t\t}\r\n\t\t\tfunction isLightboxElement(e){\r\n\t\t\t\treturn !!domHelpers.closest(e.target, \".gantt_cal_light\");\r\n\t\t\t}\r\n\r\n\t\t\tfunction mousedownHandler(e){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return true;\r\n\t\t\t\t// GS-734 & GS-1078: we don't need keyboard navigation inside inline editors\r\n\t\t\t\tif(!gantt.config.keyboard_navigation_cells && isInlineEditorCell(e)) return true;\r\n\r\n\t\t\t\tif (isNoKeyboardNavigationElement(e)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar focusNode;\r\n\t\t\t\tvar locateTask = dispatcher.fromDomElement(e);\r\n\t\t\t\tif(locateTask){\r\n\t\t\t\t\t//var node = getTaskNodeConstructor();\r\n\t\t\t\t\tif(dispatcher.activeNode instanceof gantt.$keyboardNavigation.TaskCell && domHelpers.isChildOf(e.target, gantt.$task)){\r\n\t\t\t\t\t\tlocateTask = new gantt.$keyboardNavigation.TaskCell(locateTask.taskId, dispatcher.activeNode.columnIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfocusNode = locateTask;\r\n\t\t\t\t}\r\n\t\t\t\tif (focusNode) {\r\n\t\t\t\t\tif (!dispatcher.isEnabled()) {\r\n\t\t\t\t\t\tdispatcher.activeNode = focusNode;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatcher.delay(function () {\r\n\t\t\t\t\t\t\tdispatcher.setActiveNode(focusNode);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// empty click should drop focus from gantt, insert of reselecting default node\r\n\t\t\t\t\tdispatcher.$preventDefault = true;\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tdispatcher.$preventDefault = false;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar onReady = gantt.attachEvent(\"onGanttReady\", function(){\r\n\t\t\t\t// restore focus on repainted tasks\r\n\t\t\t\tgantt.detachEvent(onReady);\r\n\r\n\t\t\t\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(id){\r\n\t\t\t\t\tif (gantt.config.keyboard_navigation && dispatcher.isEnabled()) {\r\n\t\t\t\t\t\tconst currentNode = dispatcher.getActiveNode();\r\n\t\t\t\t\t\tconst grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tconst top = grid.getItemTop(id);\r\n\t\t\t\t\t\tconst gridDataTopScroll = grid.$grid_data.scrollTop;\r\n\t\t\t\t\t\tconst gridDataBottomScroll = gridDataTopScroll + grid.$grid_data.getBoundingClientRect().height;\r\n\t\t\t\t\t\tif(currentNode && currentNode.taskId == id){\r\n\t\t\t\t\t\t\t// GS-2539: Don't refocus the node if it is selected and outside the visible range in the grid\r\n\t\t\t\t\t\t\tif(gridDataTopScroll <= top && gridDataBottomScroll >= top){\r\n\t\t\t\t\t\t\t\treFocusActiveNode();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(gantt._smart_render){\r\n\t\t\t\t\tvar updateRender = gantt._smart_render._redrawTasks;\r\n\t\t\t\t\tgantt._smart_render._redrawTasks = function(renderers, items){\r\n\t\t\t\t\t\tif(gantt.config.keyboard_navigation && dispatcher.isEnabled()){\r\n\t\t\t\t\t\t\tvar currentNode = dispatcher.getActiveNode();\r\n\t\t\t\t\t\t\tif(currentNode && currentNode.taskId !== undefined){\r\n\t\t\t\t\t\t\t\tvar focusedItemVisible = false;\r\n\t\t\t\t\t\t\t\tfor(var i = 0; i < items.length; i++){\r\n\t\t\t\t\t\t\t\t\tif(items[i].id == currentNode.taskId && items[i].start_date){\r\n\t\t\t\t\t\t\t\t\t\tfocusedItemVisible = true;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif(!focusedItemVisible){\r\n\t\t\t\t\t\t\t\t\titems.push(gantt.getTask(currentNode.taskId));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar res = updateRender.apply(this, arguments);\r\n\r\n\t\t\t\t\t\treturn res;\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tlet createdTaskId = null;\r\n\t\t\tlet keepFocusOnNewTask = false;\r\n\t\t\tgantt.attachEvent(\"onTaskCreated\", function (task) {\r\n\t\t\t\tcreatedTaskId = task.id;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onAfterTaskAdd\", function(id,item){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return true;\r\n\t\t\t\tif(dispatcher.isEnabled()){\r\n\r\n\t\t\t\t\t// GS-1394. After adding a new task, the focus shouldn't change to the placeholder task\r\n\t\t\t\t\tif (id == createdTaskId) {\r\n\t\t\t\t\t\tkeepFocusOnNewTask = true;\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tkeepFocusOnNewTask = false;\r\n\t\t\t\t\t\t\tcreatedTaskId = null;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (keepFocusOnNewTask && item.type == gantt.config.types.placeholder) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar columnIndex = 0;\r\n\t\t\t\t\tvar node = dispatcher.activeNode;\r\n\t\t\t\t\tif(node instanceof gantt.$keyboardNavigation.TaskCell){\r\n\t\t\t\t\t\tcolumnIndex = node.columnIndex;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar nodeConstructor = getTaskNodeConstructor();\r\n\r\n\t\t\t\t\tif (item.type == gantt.config.types.placeholder && gantt.config.placeholder_task.focusOnCreate === false) {\r\n\t\t\t\t\t\t// do not focus on the placeholder task\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatcher.setActiveNode(new nodeConstructor(id, columnIndex));\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onTaskIdChange\", function(oldId, newId){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return true;\r\n\r\n\t\t\t\tvar node = dispatcher.activeNode;\r\n\t\t\t\tif(dispatcher.isTaskFocused(oldId)){\r\n\t\t\t\t\tnode.taskId = newId;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tvar interval = setInterval(function(){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return;\r\n\t\t\t\tif(!dispatcher.isEnabled()){\r\n\t\t\t\t\tdispatcher.enable();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}, 500);\r\n\r\n\t\t\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\t\t\tclearInterval(interval);\r\n\t\t\t});\r\n\r\n\t\t\tfunction getScopeName(obj){\r\n\t\t\t\tif(obj instanceof gantt.$keyboardNavigation.GanttNode){\r\n\t\t\t\t\treturn \"gantt\";\r\n\t\t\t\t}else if(obj instanceof gantt.$keyboardNavigation.HeaderCell){\r\n\t\t\t\t\treturn \"headerCell\";\r\n\t\t\t\t}else if(obj instanceof gantt.$keyboardNavigation.TaskRow){\r\n\t\t\t\t\treturn \"taskRow\";\r\n\t\t\t\t}else if(obj instanceof gantt.$keyboardNavigation.TaskCell){\r\n\t\t\t\t\treturn \"taskCell\";\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tfunction getScope(mode){\r\n\t\t\t\tvar scopes = {\r\n\t\t\t\t\t\"gantt\":gantt.$keyboardNavigation.GanttNode,\r\n\t\t\t\t\t\"headerCell\": gantt.$keyboardNavigation.HeaderCell,\r\n\t\t\t\t\t\"taskRow\": gantt.$keyboardNavigation.TaskRow,\r\n\t\t\t\t\t\"taskCell\": gantt.$keyboardNavigation.TaskCell\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn scopes[mode] || scopes.gantt;\r\n\t\t\t}\r\n\r\n\t\t\tfunction findVisibleColumnIndex(columnName) {\r\n\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\tfor (var i = 0; i < columns.length; i++){\r\n\t\t\t\t\tif(columns[i].name == columnName){\r\n\t\t\t\t\t\treturn i;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\tvar keyNavFacade = {};\r\n\t\t\teventable(keyNavFacade);\r\n\t\t\tgantt.mixin(keyNavFacade, {\r\n\t\t\t\taddShortcut: function(shortcut, handler, scope){\r\n\t\t\t\t\tvar scopeObject = getScope(scope);\r\n\t\t\t\t\tif(scopeObject){\r\n\t\t\t\t\t\tscopeObject.prototype.bind(shortcut, handler);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tgetShortcutHandler: function(shortcut, scope){\r\n\t\t\t\t\tvar commands = gantt.$keyboardNavigation.shortcuts.parse(shortcut);\r\n\t\t\t\t\tif(commands.length){\r\n\t\t\t\t\t\treturn keyNavFacade.getCommandHandler(commands[0], scope);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tgetCommandHandler: function(command, scope){\r\n\t\t\t\t\tvar scopeObject = getScope(scope);\r\n\t\t\t\t\tif(scopeObject){\r\n\t\t\t\t\t\tif(command){\r\n\t\t\t\t\t\t\treturn scopeObject.prototype.findHandler(command);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tremoveShortcut: function(shortcut, scope){\r\n\t\t\t\t\tvar scopeObject = getScope(scope);\r\n\t\t\t\t\tif(scopeObject){\r\n\t\t\t\t\t\tscopeObject.prototype.unbind(shortcut);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tfocus: function(config){\r\n\t\t\t\t\tvar type = config ? config.type : null;\r\n\t\t\t\t\tvar constructor = getScope(type);\r\n\t\t\t\t\tvar node;\r\n\t\t\t\t\tswitch (type){\r\n\t\t\t\t\t\tcase \"taskCell\":\r\n\t\t\t\t\t\t\tnode = new constructor(config.id, findVisibleColumnIndex(config.column));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"taskRow\":\r\n\t\t\t\t\t\t\tnode = new constructor(config.id);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"headerCell\":\r\n\t\t\t\t\t\t\tnode = new constructor(findVisibleColumnIndex(config.column));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdispatcher.delay(function(){\r\n\t\t\t\t\t\tif(node){\r\n\t\t\t\t\t\t\tdispatcher.setActiveNode(node);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tdispatcher.enable();\r\n\t\t\t\t\t\t\tif(!dispatcher.getActiveNode()){\r\n\r\n\t\t\t\t\t\t\t\tdispatcher.setDefaultNode();\r\n\t\t\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\t\t\tif(!dispatcher.awaitsFocus()){\r\n\t\t\t\t\t\t\t\t\tdispatcher.enable();\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t\tgetActiveNode: function(){\r\n\t\t\t\t\tif(dispatcher.isEnabled()){\r\n\t\t\t\t\t\tvar node = dispatcher.getActiveNode();\r\n\t\t\t\t\t\tvar scope = getScopeName(node);\r\n\t\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\t\tswitch (scope){\r\n\t\t\t\t\t\t\tcase \"taskCell\":\r\n\t\t\t\t\t\t\t\treturn {type:\"taskCell\", id:node.taskId, column:columns[node.columnIndex].name};\r\n\t\t\t\t\t\t\tcase \"taskRow\":\r\n\t\t\t\t\t\t\t\treturn {type:\"taskRow\", id:node.taskId};\r\n\t\t\t\t\t\t\tcase \"headerCell\":\r\n\t\t\t\t\t\t\t\treturn {type:\"headerCell\", column:columns[node.index].name};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgantt.$keyboardNavigation.facade = keyNavFacade;\r\n\r\n\t\t\tgantt.ext.keyboardNavigation = keyNavFacade;\r\n\t\t\tgantt.focus = function(){\r\n\t\t\t\tkeyNavFacade.focus();\r\n\t\t\t};\r\n\t\t\tgantt.addShortcut = keyNavFacade.addShortcut;\r\n\t\t\tgantt.getShortcutHandler = keyNavFacade.getShortcutHandler;\r\n\t\t\tgantt.removeShortcut = keyNavFacade.removeShortcut;\r\n\t\t})();\r\n\r\n\r\n\t}\r\n\r\n\tsetupKeyNav(gantt);\r\n\r\n\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.shortcuts = {\r\n\t\tcreateCommand: function () {\r\n\t\t\treturn {\r\n\t\t\t\tmodifiers: {\r\n\t\t\t\t\t\"shift\": false,\r\n\t\t\t\t\t\"alt\": false,\r\n\t\t\t\t\t\"ctrl\": false,\r\n\t\t\t\t\t\"meta\": false\r\n\t\t\t\t},\r\n\t\t\t\tkeyCode: null\r\n\t\t\t};\r\n\t\t},\r\n\t\tparse: function (shortcut) {\r\n\t\t\tvar commands = [];\r\n\r\n\t\t\tvar expr = this.getExpressions(this.trim(shortcut));\r\n\t\t\tfor (var i = 0; i < expr.length; i++) {\r\n\t\t\t\tvar words = this.getWords(expr[i]);\r\n\r\n\t\t\t\tvar command = this.createCommand();\r\n\r\n\t\t\t\tfor (var j = 0; j < words.length; j++) {\r\n\t\t\t\t\tif (this.commandKeys[words[j]]) {\r\n\t\t\t\t\t\tcommand.modifiers[words[j]] = true;\r\n\t\t\t\t\t} else if (this.specialKeys[words[j]]) {\r\n\t\t\t\t\t\tcommand.keyCode = this.specialKeys[words[j]];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcommand.keyCode = words[j].charCodeAt(0);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcommands.push(command);\r\n\t\t\t}\r\n\t\t\treturn commands;\r\n\t\t},\r\n\r\n\t\tgetCommandFromEvent: function (domEvent) {\r\n\t\t\tvar command = this.createCommand();\r\n\t\t\tcommand.modifiers.shift = !!domEvent.shiftKey;\r\n\t\t\tcommand.modifiers.alt = !!domEvent.altKey;\r\n\t\t\tcommand.modifiers.ctrl = !!domEvent.ctrlKey;\r\n\t\t\tcommand.modifiers.meta = !!domEvent.metaKey;\r\n\t\t\tcommand.keyCode = domEvent.which || domEvent.keyCode;\r\n\r\n\t\t\tif(command.keyCode >= 96 && command.keyCode <= 105){\r\n\t\t\t\t// numpad keys 96-105 -> 48-57\r\n\t\t\t\tcommand.keyCode -= 48;//convert numpad number code to regular number code\r\n\t\t\t}\r\n\r\n\t\t\tvar printableKey = String.fromCharCode(command.keyCode);\r\n\t\t\tif (printableKey) {\r\n\t\t\t\tcommand.keyCode = printableKey.toLowerCase().charCodeAt(0);\r\n\t\t\t}\r\n\t\t\treturn command;\r\n\t\t},\r\n\r\n\t\tgetHashFromEvent: function (domEvent) {\r\n\t\t\treturn this.getHash(this.getCommandFromEvent(domEvent));\r\n\t\t},\r\n\r\n\t\tgetHash: function (command) {\r\n\t\t\tvar parts = [];\r\n\t\t\tfor (var i in command.modifiers) {\r\n\t\t\t\tif (command.modifiers[i]) {\r\n\t\t\t\t\tparts.push(i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tparts.push(command.keyCode);\r\n\r\n\t\t\treturn parts.join(this.junctionChar);\r\n\t\t},\r\n\r\n\t\tgetExpressions: function (shortcut) {\r\n\t\t\treturn shortcut.split(this.junctionChar);\r\n\t\t},\r\n\t\tgetWords: function (term) {\r\n\t\t\treturn term.split(this.combinationChar);\r\n\t\t},\r\n\t\ttrim: function (shortcut) {\r\n\t\t\treturn shortcut.replace(/\\s/g, \"\");\r\n\t\t},\r\n\t\tjunctionChar: \",\",\r\n\t\tcombinationChar: \"+\",\r\n\t\tcommandKeys: {\r\n\t\t\t\"shift\": 16,\r\n\t\t\t\"alt\": 18,\r\n\t\t\t\"ctrl\": 17,\r\n\t\t\t\"meta\": true\r\n\t\t},\r\n\t\tspecialKeys: {\r\n\t\t\t\"backspace\": 8,\r\n\t\t\t\"tab\": 9,\r\n\t\t\t\"enter\": 13,\r\n\t\t\t\"esc\": 27,\r\n\t\t\t\"space\": 32,\r\n\t\t\t\"up\": 38,\r\n\t\t\t\"down\": 40,\r\n\t\t\t\"left\": 37,\r\n\t\t\t\"right\": 39,\r\n\t\t\t\"home\": 36,\r\n\t\t\t\"end\": 35,\r\n\t\t\t\"pageup\": 33,\r\n\t\t\t\"pagedown\": 34,\r\n\t\t\t\"delete\": 46,\r\n\t\t\t\"insert\": 45,\r\n\t\t\t\"plus\": 107,\r\n\t\t\t\"f1\": 112,\r\n\t\t\t\"f2\": 113,\r\n\t\t\t\"f3\": 114,\r\n\t\t\t\"f4\": 115,\r\n\t\t\t\"f5\": 116,\r\n\t\t\t\"f6\": 117,\r\n\t\t\t\"f7\": 118,\r\n\t\t\t\"f8\": 119,\r\n\t\t\t\"f9\": 120,\r\n\t\t\t\"f10\": 121,\r\n\t\t\t\"f11\": 122,\r\n\t\t\t\"f12\": 123\r\n\t\t}\r\n\t};\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.EventHandler = {\r\n\t\t_handlers: null,\r\n\t\tfindHandler: function (command) {\r\n\t\t\tif (!this._handlers) this._handlers = {};\r\n\t\t\tvar shortcuts = gantt.$keyboardNavigation.shortcuts;\r\n\t\t\tvar hash = shortcuts.getHash(command);\r\n\r\n\t\t\treturn this._handlers[hash];\r\n\t\t},\r\n\r\n\t\tdoAction: function (command, e) {\r\n\t\t\tvar handler = this.findHandler(command);\r\n\t\t\tif (handler) {\r\n\t\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\r\n\t\t\t\tif(eventFacade.callEvent(\"onBeforeAction\", [command, e]) === false){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\thandler.call(this, e);\r\n\r\n\t\t\t\tif (e.preventDefault) e.preventDefault();\r\n\t\t\t\telse e.returnValue = false;\r\n\r\n\t\t\t}\r\n\t\t},\r\n\t\tbind: function (shortcut, handler) {\r\n\t\t\tif (!this._handlers) this._handlers = {};\r\n\r\n\t\t\tvar shortcuts = gantt.$keyboardNavigation.shortcuts;\r\n\r\n\t\t\tvar commands = shortcuts.parse(shortcut);\r\n\t\t\tfor (var i = 0; i < commands.length; i++) {\r\n\t\t\t\tthis._handlers[shortcuts.getHash(commands[i])] = handler;\r\n\t\t\t}\r\n\t\t},\r\n\t\tunbind: function (shortcut) {\r\n\t\t\tvar shortcuts = gantt.$keyboardNavigation.shortcuts;\r\n\r\n\t\t\tvar commands = shortcuts.parse(shortcut);\r\n\t\t\tfor (var i = 0; i < commands.length; i++) {\r\n\t\t\t\tif (this._handlers[shortcuts.getHash(commands[i])]) {\r\n\t\t\t\t\tdelete this._handlers[shortcuts.getHash(commands[i])];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbindAll: function (map) {\r\n\t\t\tfor (var i in map) {\r\n\t\t\t\tthis.bind(i, map[i]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tinitKeys: function () {\r\n\t\t\tif (!this._handlers)\r\n\t\t\t\tthis._handlers = {};\r\n\t\t\tif (this.keys) {\r\n\t\t\t\tthis.bindAll(this.keys);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n};","import * as domHelpers from \"../../../core/ui/utils/dom_helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\t(function () {\r\n\t\t\r\n\t\tgantt.$keyboardNavigation.getFocusableNodes = domHelpers.getFocusableNodes;\r\n\r\n\t\tgantt.$keyboardNavigation.trapFocus = function trapFocus(root, e) {\r\n\t\t\tif (e.keyCode != 9) return false;\r\n\r\n\t\t\tvar focusable = gantt.$keyboardNavigation.getFocusableNodes(root);\r\n\t\t\tvar currentFocus = domHelpers.getActiveElement();\r\n\t\t\tvar currentIndex = -1;\r\n\t\t\tfor (var i = 0; i < focusable.length; i++) {\r\n\t\t\t\tif (focusable[i] == currentFocus) {\r\n\t\t\t\t\tcurrentIndex = i;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (e.shiftKey) {\r\n\t\t\t\t// back tab\r\n\t\t\t\tif (currentIndex <= 0) {\r\n\t\t\t\t\t// go to the last element if we focused on the first\r\n\t\t\t\t\tvar lastItem = focusable[focusable.length - 1];\r\n\t\t\t\t\tif (lastItem) {\r\n\t\t\t\t\t\tlastItem.focus();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// forward tab\r\n\t\t\t\tif (currentIndex >= focusable.length - 1) {\r\n\t\t\t\t\t// forward tab from last element should go back to the first element\r\n\t\t\t\t\tvar firstItem = focusable[0];\r\n\t\t\t\t\tif (firstItem) {\r\n\t\t\t\t\t\tfirstItem.focus();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t};\r\n\t})();\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.GanttNode = function () {\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.GanttNode.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.EventHandler,\r\n\t\t{\r\n\r\n\t\t\tfocus: function () {\r\n\t\t\t\tgantt.focus();\r\n\t\t\t},\r\n\r\n\t\t\tblur: function () {\r\n\r\n\t\t\t},\r\n\r\n\t\t\tisEnabled: function () {\r\n\t\t\t\treturn gantt.$container.hasAttribute(\"tabindex\");\r\n\t\t\t},\r\n\r\n\t\t\tscrollHorizontal: function scrollHorizontal(dir) {\r\n\t\t\t\tvar date = gantt.dateFromPos(gantt.getScrollState().x);\r\n\t\t\t\tvar scale = gantt.getScale();\r\n\t\t\t\tvar step = dir < 0 ? -scale.step : scale.step;\r\n\t\t\t\tdate = gantt.date.add(date, step, scale.unit);\r\n\t\t\t\tgantt.scrollTo(gantt.posFromDate(date));\r\n\t\t\t},\r\n\r\n\t\t\tscrollVertical: function scrollVertical(dir) {\r\n\t\t\t\tvar top = gantt.getScrollState().y;\r\n\t\t\t\tvar step = gantt.config.row_height;\r\n\t\t\t\tgantt.scrollTo(null, top + (dir < 0 ? -1 : 1) * step);\r\n\t\t\t},\r\n\r\n\t\t\tkeys: {\r\n\t\t\t\t\"alt+left\": function (e) {\r\n\t\t\t\t\tthis.scrollHorizontal(-1);\r\n\t\t\t\t},\r\n\t\t\t\t\"alt+right\": function (e) {\r\n\t\t\t\t\tthis.scrollHorizontal(1);\r\n\t\t\t\t},\r\n\t\t\t\t\"alt+up\": function (e) {\r\n\t\t\t\t\tthis.scrollVertical(-1);\r\n\t\t\t\t},\r\n\t\t\t\t\"alt+down\": function (e) {\r\n\t\t\t\t\tthis.scrollVertical(1);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// undo\r\n\t\t\t\t\"ctrl+z\": function () {\r\n\t\t\t\t\tif (gantt.undo) gantt.undo();\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// redo\r\n\t\t\t\t\"ctrl+r\": function () {\r\n\t\t\t\t\tif (gantt.redo) gantt.redo();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n\tgantt.$keyboardNavigation.GanttNode.prototype.bindAll(gantt.$keyboardNavigation.GanttNode.prototype.keys);\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.KeyNavNode = function () {\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.KeyNavNode.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.EventHandler,\r\n\t\t{\r\n\t\t\tisValid: function () {\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\r\n\t\t\tmoveTo: function (element) {\r\n\t\t\t\tgantt.$keyboardNavigation.dispatcher.setActiveNode(element);\r\n\t\t\t},\r\n\r\n\t\t\tcompareTo: function (b) {\r\n\t\t\t\t// good enough comparison of two random objects\r\n\t\t\t\tif (!b) return false;\r\n\t\t\t\tfor (var i in this) {\r\n\t\t\t\t\tif (!!this[i] != !!b[i]) return false;\r\n\r\n\t\t\t\t\tvar canStringifyThis = !!(this[i] && this[i].toString);\r\n\t\t\t\t\tvar canStringifyThat = !!(b[i] && b[i].toString);\r\n\t\t\t\t\tif (canStringifyThat != canStringifyThis) return false;\r\n\t\t\t\t\tif (!(canStringifyThat && canStringifyThis)) {\r\n\t\t\t\t\t\tif (b[i] != this[i]) return false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (b[i].toString() != this[i].toString())\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t},\r\n\t\t\tfocus: function () {\r\n\t\t\t\tvar node = this.getNode();\r\n\t\t\t\tif(!node)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\r\n\t\t\t\tif(eventFacade.callEvent(\"onBeforeFocus\", [node]) === false){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (node) {\r\n\t\t\t\t\tnode.setAttribute(\"tabindex\", \"-1\");\r\n\t\t\t\t\tif(!node.$eventAttached){\r\n\t\t\t\t\t\tnode.$eventAttached = true;\r\n\t\t\t\t\t\tgantt.event(node, \"focus\",function(e){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//node.className += \" gantt_focused\";\r\n\t\t\t\t\tif (gantt.utils.dom.isChildOf(document.activeElement, node)){\r\n\t\t\t\t\t\tnode = document.activeElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (node.focus) node.focus();\r\n\r\n\t\t\t\t\teventFacade.callEvent(\"onFocus\", [this.getNode()]);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\tblur: function () {\r\n\t\t\t\tvar node = this.getNode();\r\n\t\t\t\tif (node) {\r\n\t\t\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\t\t\t\t\teventFacade.callEvent(\"onBlur\", [node]);\r\n\t\t\t\t\tnode.setAttribute(\"tabindex\", \"-1\");\r\n\t\t\t\t\t//node.className = (node.className || \"\").replace(/ ?gantt_focused/g, \"\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n};","import * as domHelpers from \"../../../core/ui/utils/dom_helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.HeaderCell = function (index) {\r\n\t\tthis.index = index || 0;\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.HeaderCell.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.KeyNavNode,\r\n\t\t{\r\n\t\t\t_handlers: null,\r\n\r\n\t\t\tisValid: function () {\r\n\t\t\t\tif (!gantt.config.show_grid) {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount())\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn !!gantt.getGridColumns()[this.index] || !gantt.getVisibleTaskCount();\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\t\t\t\tif (!gantt.config.show_grid) {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\tvar visibleColumns = gantt.getGridColumns();\r\n\t\t\t\tvar index = this.index;\r\n\t\t\t\twhile (index >= 0) {\r\n\t\t\t\t\tif (visibleColumns[index])\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tindex--;\r\n\t\t\t\t}\r\n\t\t\t\tif (visibleColumns[index]) {\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.HeaderCell(index);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tfromDomElement: function(el){\r\n\t\t\t\tvar cellElement = domHelpers.locateClassName(el, \"gantt_grid_head_cell\");\r\n\t\t\t\tif(cellElement){\r\n\t\t\t\t\tvar index = 0;\r\n\t\t\t\t\twhile(cellElement && cellElement.previousSibling){\r\n\t\t\t\t\t\tcellElement = cellElement.previousSibling;\r\n\t\t\t\t\t\tindex += 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.HeaderCell(index);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t\tvar cells = gantt.$grid_scale.childNodes;\r\n\t\t\t\treturn cells[this.index];\r\n\t\t\t},\r\n\r\n\r\n\t\t\tkeys: {\r\n\r\n\t\t\t\t\"left\": function () {\r\n\t\t\t\t\tif (this.index > 0) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(this.index - 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"right\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tif (this.index < columns.length - 1) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(this.index + 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"down\": function () {\r\n\t\t\t\t\tvar taskRow;\r\n\t\t\t\t\tvar rootLevel = gantt.getChildren(gantt.config.root_id);\r\n\t\t\t\t\tif (gantt.isTaskExists(rootLevel[0])) {\r\n\t\t\t\t\t\ttaskRow = rootLevel[0];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (taskRow) {\r\n\t\t\t\t\t\tif (gantt.config.keyboard_navigation_cells) {\r\n\t\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(taskRow, this.index));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(taskRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t\"end\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(columns.length - 1));\r\n\t\t\t\t},\r\n\t\t\t\t\"home\": function () {\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(0));\r\n\t\t\t\t},\r\n\r\n\r\n\t\t\t\t// press header button\r\n\t\t\t\t\"enter, space\": function () {\r\n\t\t\t\t\tvar node = domHelpers.getActiveElement();\r\n\t\t\t\t\tnode.click();\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// add new task\r\n\t\t\t\t\"ctrl+enter\": function () {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.createTask({}, this.taskId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n\tgantt.$keyboardNavigation.HeaderCell.prototype.bindAll(gantt.$keyboardNavigation.HeaderCell.prototype.keys);\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.TaskRow = function (taskId) {\r\n\t\tif (!taskId) {\r\n\t\t\tvar rootLevel = gantt.getChildren(gantt.config.root_id);\r\n\t\t\tif (rootLevel[0]) {\r\n\t\t\t\ttaskId = rootLevel[0];\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.taskId = taskId;\r\n\t\tif (gantt.isTaskExists(this.taskId)) {\r\n\t\t\tthis.index = gantt.getTaskIndex(this.taskId);\r\n\t\t\tthis.globalIndex = gantt.getGlobalTaskIndex(this.taskId);\r\n\t\t\tthis.splitItem = !!gantt.getTask(this.taskId).$split_subtask;\r\n\t\t\tthis.parentId = gantt.getParent(this.taskId);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.TaskRow.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.KeyNavNode,\r\n\t\t{\r\n\t\t\t_handlers: null,\r\n\t\t\tisValid: function () {\r\n\t\t\t\treturn gantt.isTaskExists(this.taskId) && (gantt.getTaskIndex(this.taskId) > -1);\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\t\t\t\tif (!gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\tvar header = new gantt.$keyboardNavigation.HeaderCell();\r\n\t\t\t\t\tif (!header.isValid()) return null;\r\n\t\t\t\t\telse return header;\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif(!this.splitItem){\r\n\t\t\t\t\t\tvar nextIndex = -1;\r\n\t\t\t\t\t\t// GS-1393. When Gantt tries to restore the focus, it should rely on the global index\r\n\t\t\t\t\t\tif (gantt.getTaskByIndex(this.globalIndex - 1)) {\r\n\t\t\t\t\t\t\tnextIndex = this.globalIndex - 1;\r\n\t\t\t\t\t\t} else if (gantt.getTaskByIndex(this.globalIndex + 1)) {\r\n\t\t\t\t\t\t\tnextIndex = this.globalIndex + 1;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar globalIndex = this.globalIndex;\r\n\t\t\t\t\t\t\twhile (globalIndex >= 0) {\r\n\t\t\t\t\t\t\t\tif (gantt.getTaskByIndex(globalIndex)) {\r\n\t\t\t\t\t\t\t\t\tnextIndex = globalIndex;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tglobalIndex--;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (nextIndex > -1) {\r\n\t\t\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(nextIndex).id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else {\r\n\t\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow(this.parentId);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tfromDomElement: function(el){\r\n\t\t\t\tif(gantt.config.keyboard_navigation_cells){\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar taskId = gantt.locate(el);\r\n\t\t\t\tif(gantt.isTaskExists(taskId)){\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow(taskId);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t\tif (gantt.isTaskExists(this.taskId) && gantt.isTaskVisible(this.taskId)) {\r\n\t\t\t\t\tif (gantt.config.show_grid) {\r\n\t\t\t\t\t\treturn gantt.$grid.querySelector(\".gantt_row[\" + gantt.config.task_attribute + \"='\" + this.taskId + \"']\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn gantt.getTaskNode(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tfocus: function (keptFocus) {\r\n\t\t\t\tif(!keptFocus) {\r\n\t\t\t\t\tconst pos = gantt.getTaskPosition(gantt.getTask(this.taskId));\r\n\t\t\t\t\tconst height = gantt.getTaskHeight(this.taskId);\r\n\t\t\t\t\tconst scroll = gantt.getScrollState();\r\n\r\n\t\t\t\t\tlet viewWidth;\r\n\t\t\t\t\tif(gantt.$task){\r\n\t\t\t\t\t\tviewWidth = gantt.$task.offsetWidth;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tviewWidth = scroll.inner_width;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet viewHeight;\r\n\t\t\t\t\tif(gantt.$grid_data || gantt.$task_data){\r\n\t\t\t\t\t\tviewHeight = (gantt.$grid_data || gantt.$task_data).offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tviewHeight = scroll.inner_height;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (pos.top < scroll.y || pos.top + height > (scroll.y + viewHeight)) {\r\n\t\t\t\t\t\t// GS-2346: additional scrolling to be sure that the task will be in the required range\r\n\t\t\t\t\t\tgantt.scrollTo(null, pos.top - 20);\r\n\t\t\t\t\t} else if (gantt.config.scroll_on_click && gantt.config.show_chart) {\r\n\t\t\t\t\t\t// horizontal scroll activated\r\n\t\t\t\t\t\tif (pos.left > (scroll.x + viewWidth)) { // scroll forward to the start of the task\r\n\t\t\t\t\t\t\tgantt.scrollTo(pos.left - gantt.config.task_scroll_offset);\r\n\t\t\t\t\t\t} else if (pos.left + pos.width < scroll.x) { // scroll back to the end of the task\r\n\t\t\t\t\t\t\tgantt.scrollTo(pos.left + pos.width - gantt.config.task_scroll_offset);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.$keyboardNavigation.KeyNavNode.prototype.focus.apply(this, [keptFocus]);\r\n\r\n\t\t\t\t// GS-152 if there are scrollbars with custom names, change their scroll position\r\n\t\t\t\tscrollGrid();\r\n\r\n\t\t\t\tfunction scrollGrid() {\r\n\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\tvar scrollPositionX = parseInt(grid.$grid.scrollLeft);\r\n\t\t\t\t\tvar scrollPositionY = parseInt(grid.$grid_data.scrollTop);\r\n\r\n\t\t\t\t\tvar attachedScrollbarHorizontal = grid.$config.scrollX;\r\n\r\n\t\t\t\t\tif (attachedScrollbarHorizontal && grid.$config.scrollable) {\r\n\t\t\t\t\t\tvar scrollbarHorizontal = gantt.$ui.getView(attachedScrollbarHorizontal);\r\n\t\t\t\t\t\tif (scrollbarHorizontal) {\r\n\t\t\t\t\t\t\tscrollbarHorizontal.scrollTo(scrollPositionX, scrollPositionY);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar attachedScrollbarVertical = grid.$config.scrollY;\r\n\r\n\t\t\t\t\tif (attachedScrollbarVertical) {\r\n\t\t\t\t\t\tvar scrollbarVertical = gantt.$ui.getView(attachedScrollbarVertical);\r\n\t\t\t\t\t\tif (scrollbarVertical) {\r\n\t\t\t\t\t\t\tscrollbarVertical.scrollTo(scrollPositionX, scrollPositionY);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\tkeys: {\r\n\t\t\t\t\"pagedown\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(gantt.getVisibleTaskCount() - 1).id));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"pageup\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(0).id));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"up\": function () {\r\n\t\t\t\t\tvar nextElement = null;\r\n\t\t\t\t\tvar prevTask = gantt.getPrev(this.taskId);\r\n\t\t\t\t\tif (!gantt.isTaskExists(prevTask)) {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.HeaderCell();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.TaskRow(prevTask);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.moveTo(nextElement);\r\n\t\t\t\t},\r\n\t\t\t\t\"down\": function () {\r\n\t\t\t\t\tvar nextTask = gantt.getNext(this.taskId);\r\n\t\t\t\t\tif (gantt.isTaskExists(nextTask)) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(nextTask));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t\"shift+down\": function(){\r\n\t\t\t\t\tif(gantt.hasChild(this.taskId) && !gantt.getTask(this.taskId).$open){\r\n\t\t\t\t\t\tgantt.open(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"shift+up\": function(){\r\n\t\t\t\t\tif(gantt.hasChild(this.taskId) && gantt.getTask(this.taskId).$open){\r\n\t\t\t\t\t\tgantt.close(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"shift+right\": function() {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar prevId = gantt.getPrevSibling(this.taskId);\r\n\t\t\t\t\tif(gantt.isTaskExists(prevId) && !gantt.isChildOf(this.taskId, prevId)){\r\n\t\t\t\t\t\tvar parent = gantt.getTask(prevId);\r\n\t\t\t\t\t\tparent.$open = true;\r\n\t\t\t\t\t\tvar result = gantt.moveTask(this.taskId, -1, prevId);\r\n\t\t\t\t\t\tif(result !== false)\r\n\t\t\t\t\t\t\tgantt.updateTask(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"shift+left\": function() {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar parent = gantt.getParent(this.taskId);\r\n\t\t\t\t\tif(gantt.isTaskExists(parent)){\r\n\t\t\t\t\t\tvar result = gantt.moveTask(this.taskId, gantt.getTaskIndex(parent) + 1, gantt.getParent(parent));\r\n\t\t\t\t\t\tif(result !== false)\r\n\t\t\t\t\t\t\tgantt.updateTask(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// select\r\n\t\t\t\t\"space\": function (e) {\r\n\t\t\t\t\tif (!gantt.isSelectedTask(this.taskId)) {\r\n\t\t\t\t\t\tgantt.selectTask(this.taskId);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tgantt.unselectTask(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// collapse\r\n\t\t\t\t\"ctrl+left\": function (e) {\r\n\t\t\t\t\tgantt.close(this.taskId);\r\n\t\t\t\t},\r\n\t\t\t\t// expand\r\n\t\t\t\t\"ctrl+right\": function (e) {\r\n\t\t\t\t\tgantt.open(this.taskId);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// delete task\r\n\t\t\t\t\"delete\": function (e) {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.$click.buttons[\"delete\"](this.taskId);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// open lightbox\r\n\t\t\t\t\"enter\": function () {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.showLightbox(this.taskId);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// add subtask\r\n\t\t\t\t\"ctrl+enter\": function () {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.createTask({}, this.taskId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\tgantt.$keyboardNavigation.TaskRow.prototype.bindAll(gantt.$keyboardNavigation.TaskRow.prototype.keys);\r\n\r\n};","import * as domHelpers from \"../../../core/ui/utils/dom_helpers\";\r\nimport {replaceValidZeroId} from \"../../../utils/helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\r\n\tgantt.$keyboardNavigation.TaskCell = function (taskId, index) {\r\n\t\ttaskId = replaceValidZeroId(taskId, gantt.config.root_id);\r\n\t\tif (!taskId) {\r\n\t\t\tvar rootLevel = gantt.getChildren(gantt.config.root_id);\r\n\t\t\tif (rootLevel[0]) {\r\n\t\t\t\ttaskId = rootLevel[0];\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.taskId = taskId;\r\n\t\tthis.columnIndex = index || 0;\r\n\t\t// provided task may not exist, in this case node will be detectes as invalid\r\n\t\tif (gantt.isTaskExists(this.taskId)) {\r\n\t\t\tthis.index = gantt.getTaskIndex(this.taskId);\r\n\t\t\tthis.globalIndex = gantt.getGlobalTaskIndex(this.taskId);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.TaskCell.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.TaskRow,\r\n\t\t{\r\n\t\t\t_handlers: null,\r\n\t\t\tisValid: function () {\r\n\r\n\t\t\t\treturn gantt.$keyboardNavigation.TaskRow.prototype.isValid.call(this) && !!gantt.getGridColumns()[this.columnIndex];\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\r\n\t\t\t\tvar node = gantt.$keyboardNavigation.TaskRow.prototype.fallback.call(this);\r\n\t\t\t\tvar result = node;\r\n\t\t\t\tif (node instanceof gantt.$keyboardNavigation.TaskRow) {\r\n\t\t\t\t\tvar visibleColumns = gantt.getGridColumns();\r\n\t\t\t\t\tvar index = this.columnIndex;\r\n\t\t\t\t\twhile (index >= 0) {\r\n\t\t\t\t\t\tif (visibleColumns[index])\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (visibleColumns[index]) {\r\n\t\t\t\t\t\tresult = new gantt.$keyboardNavigation.TaskCell(node.taskId, index);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\tfromDomElement: function(el){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation_cells){\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar taskId = gantt.locate(el);\r\n\t\t\t\tif(gantt.isTaskExists(taskId)){\r\n\t\t\t\t\tvar index = 0;\r\n\t\t\t\t\tvar cellElement = domHelpers.locateAttribute(el, \"data-column-index\");\r\n\r\n\t\t\t\t\tif(cellElement){\r\n\t\t\t\t\t\tindex = cellElement.getAttribute(\"data-column-index\")*1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskCell(taskId, index);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t\tif (gantt.isTaskExists(this.taskId) && gantt.isTaskVisible(this.taskId)) {\r\n\t\t\t\t\tif (gantt.config.show_grid) {\r\n\t\t\t\t\t\tvar row = gantt.$grid.querySelector(\".gantt_row[\" + gantt.config.task_attribute + \"='\" + this.taskId + \"']\");\r\n\t\t\t\t\t\tif(!row)\r\n\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\treturn row.querySelector(\"[data-column-index='\"+this.columnIndex+\"']\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn gantt.getTaskNode(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tkeys: {\r\n\t\t\t\t\"up\": function () {\r\n\r\n\t\t\t\t\tvar nextElement = null;\r\n\t\t\t\t\tvar prevTask = gantt.getPrev(this.taskId);\r\n\t\t\t\t\tif (!gantt.isTaskExists(prevTask)) {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.HeaderCell(this.columnIndex);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.TaskCell(prevTask, this.columnIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.moveTo(nextElement);\r\n\t\t\t\t},\r\n\t\t\t\t\"down\": function () {\r\n\t\t\t\t\tvar nextTask = gantt.getNext(this.taskId);\r\n\t\t\t\t\tif (gantt.isTaskExists(nextTask)) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(nextTask, this.columnIndex));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"left\": function () {\r\n\t\t\t\t\tif (this.columnIndex > 0) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex - 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"right\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tif (this.columnIndex < columns.length - 1) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex + 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t\"end\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, columns.length - 1));\r\n\t\t\t\t},\r\n\t\t\t\t\"home\": function () {\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, 0));\r\n\t\t\t\t},\r\n\t\t\t\t\"pagedown\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(gantt.getTaskByIndex(gantt.getVisibleTaskCount() - 1).id, this.columnIndex));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"pageup\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(gantt.getTaskByIndex(0).id, this.columnIndex));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n\r\n\tgantt.$keyboardNavigation.TaskCell.prototype.bindAll(gantt.$keyboardNavigation.TaskRow.prototype.keys);\r\n\tgantt.$keyboardNavigation.TaskCell.prototype.bindAll(gantt.$keyboardNavigation.TaskCell.prototype.keys);\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.dispatcher = {\r\n\t\tisActive: false,\r\n\t\tactiveNode: null,\r\n\t\tglobalNode: new gantt.$keyboardNavigation.GanttNode(),\r\n\r\n\t\tenable: function () {\r\n\t\t\tthis.isActive = true;\r\n\t\t\tthis.setActiveNode(this.getActiveNode());\r\n\t\t},\r\n\r\n\t\tdisable: function () {\r\n\t\t\tthis.isActive = false;\r\n\t\t},\r\n\r\n\t\tisEnabled: function () {\r\n\t\t\treturn !!this.isActive;\r\n\t\t},\r\n\r\n\t\tgetDefaultNode: function () {\r\n\t\t\tvar node;\r\n\t\t\tif (gantt.config.keyboard_navigation_cells) {\r\n\t\t\t\tnode = new gantt.$keyboardNavigation.TaskCell();\r\n\t\t\t} else {\r\n\t\t\t\tnode = new gantt.$keyboardNavigation.TaskRow();\r\n\t\t\t}\r\n\r\n\t\t\tif (!node.isValid()) {\r\n\t\t\t\tnode = node.fallback();\r\n\t\t\t}\r\n\t\t\treturn node;\r\n\t\t},\r\n\r\n\t\tsetDefaultNode: function () {\r\n\t\t\tthis.setActiveNode(this.getDefaultNode());\r\n\t\t},\r\n\r\n\t\tgetActiveNode: function () {\r\n\t\t\tvar node = this.activeNode;\r\n\t\t\tif (node && !node.isValid()) {\r\n\t\t\t\tnode = node.fallback();\r\n\t\t\t}\r\n\t\t\treturn node;\r\n\t\t},\r\n\r\n\t\tfromDomElement: function(e){\r\n\t\t\tvar inputs = [\r\n\t\t\t\tgantt.$keyboardNavigation.TaskRow,\r\n\t\t\t\tgantt.$keyboardNavigation.TaskCell,\r\n\t\t\t\tgantt.$keyboardNavigation.HeaderCell\r\n\t\t\t];\r\n\t\t\tfor(var i = 0; i < inputs.length; i++){\r\n\t\t\t\tif(inputs[i].prototype.fromDomElement){\r\n\t\t\t\t\tvar node = inputs[i].prototype.fromDomElement(e);\r\n\t\t\t\t\tif(node) return node;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\r\n\t\tfocusGlobalNode: function () {\r\n\t\t\tthis.blurNode(this.globalNode);\r\n\t\t\tthis.focusNode(this.globalNode);\r\n\t\t},\r\n\r\n\t\tsetActiveNode: function (el) {\r\n\t\t\t//console.trace()\r\n\t\t\tvar focusChanged = true;\r\n\t\t\tif (this.activeNode) {\r\n\t\t\t\tif (this.activeNode.compareTo(el)) {\r\n\t\t\t\t\tfocusChanged = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.isEnabled()) {\r\n\t\t\t\tif(focusChanged)\r\n\t\t\t\t\tthis.blurNode(this.activeNode);\r\n\r\n\t\t\t\tthis.activeNode = el;\r\n\t\t\t\tthis.focusNode(this.activeNode, !focusChanged);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfocusNode: function (el, keptFocus) {\r\n\t\t\tif (el && el.focus) {\r\n\t\t\t\tel.focus(keptFocus);\r\n\t\t\t}\r\n\t\t},\r\n\t\tblurNode: function (el) {\r\n\t\t\tif (el && el.blur) {\r\n\t\t\t\tel.blur();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tkeyDownHandler: function (e) {\r\n\r\n\t\t\tif (gantt.$keyboardNavigation.isModal())\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (!this.isEnabled())\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif(e.defaultPrevented){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar ganttNode = this.globalNode;\r\n\r\n\t\t\tvar command = gantt.$keyboardNavigation.shortcuts.getCommandFromEvent(e);\r\n\r\n\t\t\tvar activeElement = this.getActiveNode();\r\n\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\t\t\tif(eventFacade.callEvent(\"onKeyDown\", [command, e]) === false){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!activeElement) {\r\n\t\t\t\tthis.setDefaultNode();\r\n\t\t\t} else if (activeElement.findHandler(command)) {\r\n\t\t\t\tactiveElement.doAction(command, e);\r\n\t\t\t} else if (ganttNode.findHandler(command)) {\r\n\t\t\t\tganttNode.doAction(command, e);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t_timeout: null,\r\n\t\tawaitsFocus: function(){\r\n\t\t\treturn this._timeout !== null;\r\n\t\t},\r\n\t\tdelay: function(callback, delay){\r\n\r\n\t\t\tclearTimeout(this._timeout);\r\n\t\t\tthis._timeout = setTimeout(gantt.bind(function(){\r\n\t\t\t\tthis._timeout = null;\r\n\t\t\t\tcallback();\r\n\t\t\t}, this) , delay || 1);\r\n\r\n\t\t},\r\n\t\tclearDelay: function(){\r\n\t\t\tclearTimeout(this._timeout);\r\n\t\t}\r\n\t};\r\n\r\n};","import { QuickInfo } from \"./quickInfo\";\r\n\r\nexport default function(gantt: any){\r\n\r\nif (!gantt.ext) {\r\n\tgantt.ext = {};\r\n}\r\ngantt.ext.quickInfo = new QuickInfo(gantt);\r\n\r\ngantt.config.quickinfo_buttons = [\"icon_edit\", \"icon_delete\"];\r\ngantt.config.quick_info_detached = true;\r\ngantt.config.show_quick_info = true;\r\n\r\ngantt.templates.quick_info_title = function(start, end, ev){ return ev.text.substr(0,50); };\r\ngantt.templates.quick_info_content = function(start, end, ev){ return ev.details || ev.text; };\r\ngantt.templates.quick_info_date = function(start, end, ev){\r\n\treturn gantt.templates.task_time(start, end, ev);\r\n};\r\ngantt.templates.quick_info_class = function(start, end, task){ return \"\"; };\r\n\r\ngantt.attachEvent(\"onTaskClick\", function(id,e){\r\n\t// GS-1460 Don't show Quick Info when clicking on the \"+\" button\r\n\tif (!gantt.utils.dom.closest(e.target, \".gantt_add\")){\r\n\t\tsetTimeout(function() {\r\n\t\t\tgantt.ext.quickInfo.show(id);\r\n\t\t}, 0);\r\n\t}\r\n\r\n\treturn true;\r\n});\r\n\r\nconst events = [\"onViewChange\", \"onLightbox\", \"onBeforeTaskDelete\", \"onBeforeDrag\"];\r\nconst hidingFunction = function(){\r\n\tgantt.ext.quickInfo.hide();\r\n\treturn true;\r\n};\r\nfor (let i=0; i {\r\n\t\t\tif (gantt.config.touch && !gantt.config.touch_tooltip) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst targetTaskId = gantt.locate(event);\r\n\t\t\tif(gantt.isTaskExists(targetTaskId)){\r\n\t\t\t\tconst task = gantt.getTask(targetTaskId);\r\n\t\t\t\treturn gantt.templates.tooltip_text(task.start_date, task.end_date, task);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tglobal: false\r\n\t});\r\n});\r\n\r\ngantt.attachEvent(\"onDestroy\", function() {\r\n\ttooltipManager.destructor();\r\n});\r\n\r\ngantt.attachEvent(\"onLightbox\", function() {\r\n\ttooltipManager.hideTooltip();\r\n});\r\nconst isLinkCreate = () => {\r\n\tconst state = gantt.getState();\r\n\treturn !!state.link_source_id;\r\n};\r\ngantt.attachEvent(\"onBeforeTooltip\", function() {\r\n\tif (isLinkCreate()){\r\n\t\treturn false;\r\n\t}\r\n});\r\n\r\ngantt.attachEvent(\"onGanttScroll\", function(){\r\n\ttooltipManager.hideTooltip();\r\n});\r\n\r\n}","import { Monitor } from \"./monitor\";\r\nimport { IMonitor, IUndoCommand, TEntityType, TUndoStack } from \"./types\";\r\nimport { Undo } from \"./undo\";\r\n\r\nexport default function(gantt: any){\r\n\r\nconst _undo = new Undo(gantt);\r\nconst monitor: IMonitor = new Monitor(_undo, gantt);\r\n\r\ngantt.config.undo = true;\r\ngantt.config.redo = true;\r\n\r\n/**\r\n * entities that require different processing for undoing-redoing changes\r\n * @type {{link: string, task: string}}\r\n */\r\ngantt.config.undo_types = {\r\n\tlink: \"link\",\r\n\ttask: \"task\"\r\n};\r\n\r\n/**\r\n * types of traced actions\r\n * @type {{update: string, remove: string, add: string}}\r\n */\r\ngantt.config.undo_actions = {\r\n\tupdate: \"update\",\r\n\tremove: \"remove\", // remove item from datastore\r\n\tadd: \"add\",\r\n\tmove: \"move\" // move task in grid\r\n};\r\n\r\nif (!gantt.ext) {\r\n\tgantt.ext = {};\r\n}\r\n\r\ngantt.ext.undo = {\r\n\tundo: () => _undo.undo(),\r\n\tredo: () => _undo.redo(),\r\n\tgetUndoStack: () => _undo.getUndoStack(),\r\n\tsetUndoStack: (stack:[]) => _undo.setUndoStack(stack),\r\n\tgetRedoStack: () => _undo.getRedoStack(),\r\n\tsetRedoStack: (stack:[]) => _undo.setRedoStack(stack),\r\n\tclearUndoStack: () => _undo.clearUndoStack(),\r\n\tclearRedoStack: () => _undo.clearRedoStack(),\r\n\tsaveState: (id: TaskID | LinkID, type: TEntityType) => monitor.store(id, type, true),\r\n\tgetInitialState: (id: TaskID | LinkID, type: TEntityType) => {\r\n\t\tif(type === gantt.config.undo_types.link){\r\n\t\t\treturn monitor.getInitialLink(id);\r\n\t\t}else{\r\n\t\t\treturn monitor.getInitialTask(id);\r\n\t\t}\r\n\t}\r\n};\r\n\r\ngantt.undo = gantt.ext.undo.undo;\r\ngantt.redo = gantt.ext.undo.redo;\r\ngantt.getUndoStack = gantt.ext.undo.getUndoStack;\r\ngantt.getRedoStack = gantt.ext.undo.getRedoStack;\r\ngantt.clearUndoStack = gantt.ext.undo.clearUndoStack;\r\ngantt.clearRedoStack = gantt.ext.undo.clearRedoStack;\r\n\r\nfunction updTask(task: ITask, oldId: TaskID, newId: TaskID) {\r\n\tif (!task) { return; }\r\n\r\n\tif (task.id === oldId) {\r\n\t\ttask.id = newId;\r\n\t}\r\n\r\n\tif (task.parent === oldId) {\r\n\t\ttask.parent = newId;\r\n\t}\r\n}\r\n\r\nfunction changeTaskCommandId(command: IUndoCommand, oldId: TaskID, newId: TaskID) {\r\n\tupdTask(command.value, oldId, newId);\r\n\tupdTask(command.oldValue, oldId, newId);\r\n}\r\n\r\nfunction updLink(link: ILink, oldTaskId: TaskID, newTaskId: TaskID) {\r\n\tif (!link) { return; }\r\n\tif (link.source === oldTaskId) {\r\n\t\tlink.source = newTaskId;\r\n\t}\r\n\tif (link.target === oldTaskId) {\r\n\t\tlink.target = newTaskId;\r\n\t}\r\n}\r\n\r\nfunction changeLinkCommandId(command: IUndoCommand, oldId: LinkID, newId: LinkID) {\r\n\tupdLink(command.value, oldId, newId);\r\n\tupdLink(command.oldValue, oldId, newId);\r\n}\r\n\r\nfunction updateTasksIds(log: TUndoStack, oldId: TaskID, newId: TaskID) {\r\n\tconst undo = _undo;\r\n\r\n\tfor (let i = 0; i < log.length; i++) {\r\n\t\tconst entry = log[i];\r\n\t\tfor (let j = 0; j < entry.commands.length; j++) {\r\n\t\t\tif (entry.commands[j].entity === undo.command.entity.task) {\r\n\t\t\t\tchangeTaskCommandId(entry.commands[j], oldId, newId);\r\n\t\t\t} else if (entry.commands[j].entity === undo.command.entity.link) {\r\n\t\t\t\tchangeLinkCommandId(entry.commands[j], oldId, newId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction updateLinksIds(log: TUndoStack, oldId: LinkID, newId: LinkID) {\r\n\tconst undo = _undo;\r\n\r\n\tfor (let i = 0; i < log.length; i++) {\r\n\t\tconst entry = log[i];\r\n\t\tfor (let j = 0; j < entry.commands.length; j++) {\r\n\t\t\tconst command = entry.commands[j];\r\n\t\t\tif (command.entity === undo.command.entity.link) {\r\n\t\t\t\tif (command.value && command.value.id === oldId) {\r\n\t\t\t\t\tcommand.value.id = newId;\r\n\t\t\t\t}\r\n\t\t\t\tif (command.oldValue && command.oldValue.id === oldId) {\r\n\t\t\t\t\tcommand.oldValue.id = newId;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\ngantt.attachEvent(\"onTaskIdChange\", (oldId: TaskID, newId: TaskID) => {\r\n\tconst undo = _undo;\r\n\tupdateTasksIds(undo.getUndoStack(), oldId, newId);\r\n\tupdateTasksIds(undo.getRedoStack(), oldId, newId);\r\n});\r\n\r\ngantt.attachEvent(\"onLinkIdChange\", (oldId: LinkID, newId: LinkID) => {\r\n\tconst undo = _undo;\r\n\tupdateLinksIds(undo.getUndoStack(), oldId, newId);\r\n\tupdateLinksIds(undo.getRedoStack(), oldId, newId);\r\n});\r\n\r\ngantt.attachEvent(\"onGanttReady\", () => {\r\n\t_undo.updateConfigs();\r\n});\r\n\r\n}","\r\nexport default function(gantt){\r\n\r\nif(!gantt._markers) {\r\n\tgantt._markers = gantt.createDatastore({\r\n\t\tname: \"marker\",\r\n\t\tinitItem: function (marker) {\r\n\t\t\tmarker.id = marker.id || gantt.uid();\r\n\t\t\treturn marker;\r\n\t\t}\r\n\t});\r\n}\r\n\r\ngantt.config.show_markers = true;\r\n\r\nfunction render_marker(marker){\r\n\tif(!gantt.config.show_markers)\r\n\t\treturn false;\r\n\r\n\tif(!marker.start_date)\r\n\t\treturn false;\r\n\r\n\tvar state = gantt.getState();\r\n\tif(+marker.start_date > +state.max_date)\r\n\t\treturn;\r\n\tif((!marker.end_date || +marker.end_date < +state.min_date) && +marker.start_date < +state.min_date)\r\n\t\treturn;\r\n\r\n\tvar div = document.createElement(\"div\");\r\n\r\n\tdiv.setAttribute(\"data-marker-id\", marker.id);\r\n\r\n\tvar css = \"gantt_marker\";\r\n\r\n\tif(marker.css){\r\n\t\tcss += \" \" + marker.css;\r\n\t}\r\n\r\n\tif(marker.title){\r\n\t\tdiv.title = marker.title;\r\n\t}\r\n\tdiv.className = css;\r\n\r\n\tvar start = gantt.posFromDate(marker.start_date);\r\n\tdiv.style.left = start + \"px\";\r\n\tlet markerHeight = Math.max(gantt.getRowTop(gantt.getVisibleTaskCount()), 0) + \"px\";\r\n\tif (gantt.config.timeline_placeholder && gantt.$task_data){\r\n\t\tmarkerHeight = gantt.$task_data.scrollHeight + \"px\";\r\n\t}\r\n\tdiv.style.height = markerHeight;\r\n\tif(marker.end_date){\r\n\t\tvar end = gantt.posFromDate(marker.end_date);\r\n\t\tdiv.style.width = Math.max((end - start), 0) + \"px\";\r\n\r\n\t}\r\n\r\n\tif(marker.text){\r\n\t\tdiv.innerHTML = \"\" + marker.text + \"
\";\r\n\t}\r\n\r\n\treturn div;\r\n}\r\n\r\nfunction initMarkerArea(){\r\n\tif(!gantt.$task_data)\r\n\t\treturn;\r\n\r\n\tvar markerArea = document.createElement(\"div\");\r\n\tmarkerArea.className = \"gantt_marker_area\";\r\n\tgantt.$task_data.appendChild(markerArea);\r\n\tgantt.$marker_area = markerArea;\r\n}\r\n\r\ngantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\tif(!gantt.$marker_area)\r\n\t\tinitMarkerArea();\r\n});\r\n\r\ngantt.attachEvent(\"onDataRender\", function(){\r\n\tif(!gantt.$marker_area){\r\n\t\tinitMarkerArea();\r\n\t\tgantt.renderMarkers();\r\n\t}\r\n});\r\n\r\ngantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t// GS-1304 - markers should attach when layout is initialized, both on gantt.init and gantt.resetLayout\r\n\t// wait for \"onBeforeGanttRender\", so all layout elements will be in DOM\r\n\tgantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\t\tinitMarkerArea();\r\n\r\n\t\tvar layers = gantt.$services.getService(\"layers\");\r\n\t\tvar markerRenderer = layers.createDataRender({\r\n\t\t\tname: \"marker\",\r\n\t\t\tdefaultContainer: function(){ return gantt.$marker_area;}\r\n\t\t});\r\n\t\tmarkerRenderer.addLayer(render_marker);\r\n\t}, {once: true});\r\n});\r\n\r\ngantt.getMarker = function(id){\r\n\tif(!this._markers) return null;\r\n\r\n\treturn this._markers.getItem(id);\r\n};\r\n\r\ngantt.addMarker = function(marker){\r\n\treturn this._markers.addItem(marker);\r\n};\r\n\r\ngantt.deleteMarker = function(id){\r\n\tif(!this._markers.exists(id))\r\n\t\treturn false;\r\n\r\n\tthis._markers.removeItem(id);\r\n\treturn true;\r\n};\r\ngantt.updateMarker = function(id){\r\n\tthis._markers.refresh(id);\r\n};\r\n\r\ngantt._getMarkers = function(){\r\n\treturn this._markers.getItems();\r\n};\r\n\r\ngantt.renderMarkers = function () {\r\n\tthis._markers.refresh();\r\n};\r\n\r\n};","import {replaceValidZeroId} from \"../utils/helpers\";\r\n\r\nexport default function(gantt){\r\n\r\ngantt.config.multiselect = true;\r\ngantt.config.multiselect_one_level = false;\r\n\r\ngantt._multiselect = {\r\n\t_selected: {},\r\n\t_one_level: false,\r\n\t_active: true,\r\n\t_first_selected_when_shift: null,\r\n\tgetDefaultSelected: function() {\r\n\t\tvar selected = this.getSelected();\r\n\t\treturn selected.length ? selected[selected.length - 1] : null;\r\n\t},\r\n\tsetFirstSelected: function(id) {\r\n\t\tthis._first_selected_when_shift = id;\r\n\t},\r\n\tgetFirstSelected: function() {\r\n\t\treturn this._first_selected_when_shift;\r\n\t},\r\n\tisActive: function() {\r\n\t\tthis.updateState();\r\n\t\treturn this._active;\r\n\t},\r\n\tupdateState: function() {\r\n\t\tthis._one_level = gantt.config.multiselect_one_level;\r\n\t\tvar active = this._active;\r\n\t\tthis._active = gantt.config.select_task;\r\n\t\tif (this._active != active) {\r\n\t\t\tthis.reset();\r\n\t\t}\r\n\t},\r\n\treset: function () {\r\n\t\tthis._selected = {};\r\n\t},\r\n\tsetLastSelected: function (id) {\r\n\t\tgantt.$data.tasksStore.silent(function(){\r\n\t\t\tvar store = gantt.$data.tasksStore;\r\n\t\t\tif (id)\r\n\t\t\t\tstore.select(id+\"\");\r\n\t\t\telse\r\n\t\t\t\tstore.unselect(null);\r\n\t\t});\r\n\t},\r\n\tgetLastSelected: function () {\r\n\t\tvar last = gantt.$data.tasksStore.getSelectedId();\r\n\t\tif (last && gantt.isTaskExists(last))\r\n\t\t\treturn last;\r\n\t\treturn null;\r\n\t},\r\n\tselect: function (id, e) {\r\n\t\tif (id && gantt.callEvent(\"onBeforeTaskMultiSelect\", [id, true, e]) && gantt.callEvent(\"onBeforeTaskSelected\", [id])) {\r\n\t\t\tthis._selected[id] = true;\r\n\t\t\tthis.setLastSelected(id);\r\n\t\t\tthis.afterSelect(id);\r\n\t\t\tgantt.callEvent(\"onTaskMultiSelect\", [id, true, e]);\r\n\t\t\tgantt.callEvent(\"onTaskSelected\", [id]);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\ttoggle: function (id, e) {\r\n\t\tif (this._selected[id]) {\r\n\t\t\tthis.unselect(id, e);\r\n\t\t} else {\r\n\t\t\tthis.select(id, e);\r\n\t\t}\r\n\t},\r\n\tunselect: function (id, e) {\r\n\t\tif (id && gantt.callEvent(\"onBeforeTaskMultiSelect\", [id, false, e])) {\r\n\t\t\tthis._selected[id] = false;\r\n\t\t\tif (this.getLastSelected() == id)\r\n\t\t\t\tthis.setLastSelected(this.getDefaultSelected());\r\n\t\t\tthis.afterSelect(id);\r\n\t\t\tgantt.callEvent(\"onTaskMultiSelect\", [id, false, e]);\r\n\t\t\tgantt.callEvent(\"onTaskUnselected\", [id]);\r\n\t\t}\r\n\t},\r\n\tisSelected: function (id) {\r\n\t\treturn !!(gantt.isTaskExists(id) && this._selected[id]);\r\n\t},\r\n\tgetSelected: function () {\r\n\t\tvar res = [];\r\n\t\tfor (var i in this._selected) {\r\n\t\t\tif (this._selected[i] && gantt.isTaskExists(i)) {\r\n\t\t\t\tres.push(i);\r\n\t\t\t} else {\r\n\t\t\t\tthis._selected[i] = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tres.sort(function(a, b) {\r\n\t\t\treturn gantt.getGlobalTaskIndex(a) > gantt.getGlobalTaskIndex(b) ? 1 : -1;\r\n\t\t});\r\n\t\treturn res;\r\n\t},\r\n\tforSelected: function (callback) {\r\n\t\tvar selected = this.getSelected();\r\n\t\tfor (var i = 0; i < selected.length; i++) {\r\n\t\t\tcallback(selected[i]);\r\n\t\t}\r\n\t},\r\n\tisSameLevel: function(id) {\r\n\t\tif (!this._one_level)\r\n\t\t\treturn true;\r\n\t\tvar last = this.getLastSelected();\r\n\t\tif (!last)\r\n\t\t\treturn true;\r\n\t\tif (!(gantt.isTaskExists(last) && gantt.isTaskExists(id)))\r\n\t\t\treturn true;\r\n\t\treturn !!(gantt.calculateTaskLevel(gantt.getTask(last)) == gantt.calculateTaskLevel(gantt.getTask(id)));\r\n\t},\r\n\tafterSelect: function(id) {\r\n\t\tif (gantt.isTaskExists(id)){\r\n\t\t\t// FIXME: quick workaround to prevent re-filtering inside refresh on multiselect\r\n\t\t\tgantt._quickRefresh(function(){\r\n\t\t\t\tgantt.refreshTask(id);\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\tdoSelection: function(e) {\r\n\t\tif (!this.isActive())\r\n\t\t\treturn false;\r\n\r\n\t\t// deny selection when click on 'expand' or 'collapse' icons\r\n\t\tif (gantt._is_icon_open_click(e))\r\n\t\t\treturn false;\r\n\r\n\t\tvar target_ev = gantt.locate(e);\r\n\t\tif (!target_ev)\r\n\t\t\treturn false;\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeMultiSelect\", [e]))\r\n\t\t\treturn false;\r\n\r\n\t\tvar selected = this.getSelected();\r\n\t\tvar defaultLast = this.getFirstSelected();\r\n\t\tvar isLast = false;\r\n\t\tvar last = this.getLastSelected();\r\n\t\tvar multiSelect = gantt.config.multiselect;\r\n\r\n\r\n\t\tvar singleSelection = (function () {\r\n\t\t\t// GS-719: If the multiselect extension is added we still need a way\r\n\t\t\t// to open the inline editors after clicking on the cells in the grid\r\n\t\t\tvar controller = gantt.ext.inlineEditors;\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\r\n\t\t\tif (gantt.config.inline_editors_multiselect_open && cell && controller.getEditorConfig(cell.columnName)) {\r\n\t\t\t\tif (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {\r\n\t\t\t\t\t// do nothing if editor is already active in this cell\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.setFirstSelected(target_ev);\r\n\r\n\t\t\tif (!this.isSelected(target_ev)) {\r\n\t\t\t\tthis.select(target_ev, e);\r\n\t\t\t}\r\n\t\t\tselected = this.getSelected();\r\n\t\t\tfor (var i = 0; i < selected.length; i++) {\r\n\t\t\t\tif (selected[i] !== target_ev) {\r\n\t\t\t\t\tthis.unselect(selected[i], e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).bind(this);\r\n\r\n\t\tvar blockSelection = (function(){\r\n\t\t\tif (!last)\r\n\t\t\t\tlast = target_ev;\r\n\t\t\telse if (target_ev) {\r\n\t\t\t\tvar first_indx = gantt.getGlobalTaskIndex(this.getFirstSelected());\r\n\t\t\t\tvar target_indx = gantt.getGlobalTaskIndex(target_ev);\r\n\t\t\t\tvar last_indx = gantt.getGlobalTaskIndex(last);\r\n\r\n\t\t\t\t// clear prev selection\r\n\t\t\t\tvar tmp = last;\r\n\t\t\t\twhile (gantt.getGlobalTaskIndex(tmp) !== first_indx) {\r\n\t\t\t\t\tthis.unselect(tmp, e);\r\n\t\t\t\t\ttmp = (first_indx > last_indx) ? gantt.getNext(tmp) : gantt.getPrev(tmp);\r\n\t\t\t\t}\r\n\t\t\t\ttmp = target_ev;\r\n\t\t\t\twhile (gantt.getGlobalTaskIndex(tmp) !== first_indx) {\r\n\t\t\t\t\tif (this.select(tmp, e) && !isLast) {\r\n\t\t\t\t\t\tisLast = true;\r\n\t\t\t\t\t\tdefaultLast = tmp;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttmp = (first_indx > target_indx) ? gantt.getNext(tmp) : gantt.getPrev(tmp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).bind(this);\r\n\r\n\r\n\t\tif (multiSelect && (e.ctrlKey || e.metaKey)) {\r\n\t\t\tif (!this.isSelected(target_ev))\r\n\t\t\t\tthis.setFirstSelected(target_ev);\r\n\r\n\t\t\tif (target_ev) {\r\n\t\t\t\tthis.toggle(target_ev, e);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\telse if (multiSelect && e.shiftKey) {\r\n\t\t\tif (!gantt.isTaskExists(this.getFirstSelected()) || this.getFirstSelected() === null) {\r\n\t\t\t\tthis.setFirstSelected(target_ev);\r\n\t\t\t}\r\n\r\n\t\t\tif (selected.length) { // select a group of tasks\r\n\t\t\t\tblockSelection();\r\n\t\t\t}\r\n\t\t\telse { // select a task when no task is selected and Shift is pressed\r\n\t\t\t\tsingleSelection();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\telse { // no key press or no multiple selection on the mouse click\r\n\t\t\tsingleSelection();\r\n\t\t}\r\n\r\n\r\n\t\tif (this.isSelected(target_ev)) {\r\n\t\t\tthis.setLastSelected(target_ev);\r\n\t\t} else if (defaultLast) {\r\n\t\t\tif (target_ev == last)\r\n\t\t\t\tthis.setLastSelected(e.shiftKey ? defaultLast : this.getDefaultSelected());\r\n\t\t} else {\r\n\t\t\tthis.setLastSelected(null);\r\n\t\t}\r\n\r\n\t\tif (!this.getSelected().length)\r\n\t\t\tthis.setLastSelected(null);\r\n\r\n\t\tif (!this.getLastSelected() || !this.isSelected(this.getFirstSelected()))\r\n\t\t\tthis.setFirstSelected(this.getLastSelected());\r\n\r\n\t\treturn true;\r\n\t}\r\n};\r\n\r\n(function(){\r\n\tvar old_selectTask = gantt.selectTask;\r\n\tgantt.selectTask = function(id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tif (!id)\r\n\t\t\treturn false;\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tvar res = id;\r\n\t\tif (multiselect.isActive()) {\r\n\t\t\tif (multiselect.select(id, null)) {\r\n\t\t\t\tmultiselect.setLastSelected(id);\r\n\t\t\t}\r\n\t\t\tmultiselect.setFirstSelected(multiselect.getLastSelected());\r\n\t\t} else {\r\n\t\t\tres = old_selectTask.call(this, id);\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\tvar old_unselectTask = gantt.unselectTask;\r\n\tgantt.unselectTask = function(id) {\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tvar isActive = multiselect.isActive();\r\n\t\tid = id || multiselect.getLastSelected();\r\n\t\tif(id && isActive) {\r\n\t\t\tmultiselect.unselect(id, null);\r\n\t\t\tif (id == multiselect.getLastSelected())\r\n\t\t\t\tmultiselect.setLastSelected(null);\r\n\t\t\tgantt.refreshTask(id);\r\n\t\t\tmultiselect.setFirstSelected(multiselect.getLastSelected());\r\n\t\t}\r\n\t\tvar res = id;\r\n\t\tif (!isActive)\r\n\t\t\tres = old_unselectTask.call(this, id);\r\n\t\treturn res;\r\n\t};\r\n\r\n\tgantt.toggleTaskSelection = function(id) {\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tif (id && multiselect.isActive()) {\r\n\t\t\tmultiselect.toggle(id);\r\n\t\t\tmultiselect.setFirstSelected(multiselect.getLastSelected());\r\n\t\t}\r\n\t};\r\n\tgantt.getSelectedTasks = function() {\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tmultiselect.isActive();\r\n\t\treturn multiselect.getSelected();\r\n\t};\r\n\tgantt.eachSelectedTask = function(callback){\r\n\t\treturn this._multiselect.forSelected(callback);\r\n\t};\r\n\tgantt.isSelectedTask = function(id){\r\n\t\treturn this._multiselect.isSelected(id);\r\n\t};\r\n\tgantt.getLastSelectedTask = function(){\r\n\t\treturn this._multiselect.getLastSelected();\r\n\t};\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tvar old_isSelected = gantt.$data.tasksStore.isSelected;\r\n\t\tgantt.$data.tasksStore.isSelected = function(id){\r\n\t\t\tif (gantt._multiselect.isActive()) {\r\n\t\t\t\treturn gantt._multiselect.isSelected(id);\r\n\t\t\t}\r\n\t\t\treturn old_isSelected.call(this, id);\r\n\t\t};\r\n\t});\r\n})();\r\n\r\ngantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\r\n\tvar multiselect = gantt._multiselect;\r\n\tif (!multiselect.isActive())\r\n\t\treturn true;\r\n\tif (gantt.isSelectedTask(id)) {\r\n\t\tmultiselect.unselect(id, null);\r\n\t\tmultiselect.select(new_id, null);\r\n\t}\r\n});\r\n\r\ngantt.attachEvent(\"onAfterTaskDelete\", function (id, item) {\r\n\tvar multiselect = gantt._multiselect;\r\n\tif (!multiselect.isActive())\r\n\t\treturn true;\r\n\r\n\tif (multiselect._selected[id]) {\r\n\t\t// GS-1057: don't unselect the task here because the task is already unselected \r\n\t\t// it was in the select.js file before it was deleted\r\n\t\t// multiselect.unselect(id, null);\r\n\t\tmultiselect._selected[id] = false;\r\n\t\tmultiselect.setLastSelected(multiselect.getDefaultSelected());\r\n\t}\r\n\r\n\tmultiselect.forSelected(function (task_id) {\r\n\t\tif (!gantt.isTaskExists(task_id))\r\n\t\t\tmultiselect.unselect(task_id, null);\r\n\t});\r\n});\r\n\r\ngantt.attachEvent(\"onBeforeTaskMultiSelect\", function(id, state, e){\r\n\tvar multiselect = gantt._multiselect;\r\n\tif (state && multiselect.isActive()) {\r\n\t\tif (multiselect._one_level) {\r\n\t\t\treturn multiselect.isSameLevel(id);\r\n\t\t}\r\n\t}\r\n\treturn true;\r\n});\r\n\r\ngantt.attachEvent(\"onTaskClick\", function(id, e) {\r\n\tif (gantt._multiselect.doSelection(e))\r\n\t\tgantt.callEvent(\"onMultiSelect\", [e]);\r\n\treturn true;\r\n});\r\n\r\n};","/* eslint-disable */\r\n\r\nexport default function(gantt: any) {\r\n\r\n\tgantt.ext = gantt.ext || {};\r\n\r\n\tgantt.ext.export_api = gantt.ext.export_api || {\r\n\r\n\t\t_apiUrl: \"https://export.dhtmlx.com/gantt\",\r\n\r\n\t\t_preparePDFConfigRaw(config, type){\r\n\t\t\tlet previousDateRage = null;\r\n\t\t\tif (config.start && config.end){\r\n\t\t\t\tpreviousDateRage = {\r\n\t\t\t\t\tstart_date: gantt.config.start_date,\r\n\t\t\t\t\tend_date: gantt.config.end_date,\r\n\t\t\t\t};\r\n\t\t\t\tgantt.config.start_date = gantt.date.str_to_date(gantt.config.date_format)(config.start);\r\n\t\t\t\tgantt.config.end_date = gantt.date.str_to_date(gantt.config.date_format)(config.end);\r\n\t\t\t}\r\n\r\n\t\t\tconfig = gantt.mixin(config, {\r\n\t\t\t\tname: \"gantt.\" + type, data: gantt.ext.export_api._serializeHtml()\r\n\t\t\t});\r\n\r\n\t\t\tif (previousDateRage){\r\n\t\t\t\tgantt.config.start_date = previousDateRage.start_date;\r\n\t\t\t\tgantt.config.end_date = previousDateRage.end_date;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_prepareConfigPDF(config, type){\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.\" + type,\r\n\t\t\t\tdata: gantt.ext.export_api._serializeAll(),\r\n\t\t\t\tconfig: gantt.config\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._fixColumns(config.config.columns);\r\n\t\t\treturn config;\r\n\t\t},\r\n\r\n\t\t_pdfExportRouter(config, type){\r\n\t\t\tif (config && config.raw) {\r\n\t\t\t\tgantt.ext.export_api._preparePDFConfigRaw(config, type);\r\n\t\t\t} else {\r\n\t\t\t\tconfig = gantt.ext.export_api._prepareConfigPDF(config, type);\r\n\t\t\t}\r\n\t\t\tconfig.version = gantt.version;\r\n\t\t\tgantt.ext.export_api._sendToExport(config, type);\r\n\t\t},\r\n\r\n\t\texportToPDF(config) {\r\n\t\t\tgantt.ext.export_api._pdfExportRouter(config, \"pdf\");\r\n\t\t},\r\n\r\n\t\texportToPNG(config) {\r\n\t\t\tgantt.ext.export_api._pdfExportRouter(config, \"png\");\r\n\t\t},\r\n\r\n\r\n\t\texportToICal(config) {\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.ical\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializePlain().data,\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"ical\");\r\n\t\t},\r\n\r\n\t\texportToExcel(config) {\r\n\t\t\tconfig = config || {};\r\n\r\n\t\t\tlet tasks;\r\n\t\t\tlet dates;\r\n\t\t\tlet state;\r\n\t\t\tlet scroll;\r\n\t\t\t// GS-2124, we need to get all task nodes to correctly obtain the colors\r\n\t\t\tconst smartRendering = gantt.config.smart_rendering;\r\n\t\t\tif (config.visual === \"base-colors\"){\r\n\t\t\t\tgantt.config.smart_rendering = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.start || config.end) {\r\n\t\t\t\tstate = gantt.getState();\r\n\t\t\t\tdates = [gantt.config.start_date, gantt.config.end_date];\r\n\t\t\t\tscroll = gantt.getScrollState();\r\n\t\t\t\tconst convert = gantt.date.str_to_date(gantt.config.date_format);\r\n\t\t\t\ttasks = gantt.eachTask;\r\n\r\n\t\t\t\tif (config.start){\r\n\t\t\t\t\tgantt.config.start_date = convert(config.start);\r\n\t\t\t\t}\r\n\t\t\t\tif (config.end){\r\n\t\t\t\t\tgantt.config.end_date = convert(config.end);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\r\n\t\t\t\tgantt.eachTask = gantt.ext.export_api._eachTaskTimed(gantt.config.start_date, gantt.config.end_date);\r\n\t\t\t} else if (config.visual === \"base-colors\"){\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\t\t\t}\r\n\r\n\t\t\tgantt._no_progress_colors = config.visual === \"base-colors\";\r\n\r\n\t\t\tconfig = gantt.mixin(config, {\r\n\t\t\t\tname: \"gantt.xlsx\",\r\n\t\t\t\ttitle: \"Tasks\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializeTimeline(config).data,\r\n\t\t\t\tcolumns: gantt.ext.export_api._serializeGrid({ rawDates: true }),\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\r\n\t\t\tif (config.visual){\r\n\t\t\t\tconfig.scales = gantt.ext.export_api._serializeScales(config);\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"excel\");\r\n\r\n\t\t\tif (config.start || config.end) {\r\n\t\t\t\tgantt.config.start_date = state.min_date;\r\n\t\t\t\tgantt.config.end_date = state.max_date;\r\n\t\t\t\tgantt.eachTask = tasks;\r\n\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.scrollTo(scroll.x, scroll.y);\r\n\r\n\t\t\t\tgantt.config.start_date = dates[0];\r\n\t\t\t\tgantt.config.end_date = dates[1];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\texportToJSON(config) {\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.json\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializeAll(),\r\n\t\t\t\tconfig: gantt.config,\r\n\t\t\t\tcolumns: gantt.ext.export_api._serializeGrid(),\r\n\t\t\t\tworktime: gantt.ext.export_api._getWorktimeSettings(),\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"json\");\r\n\t\t},\r\n\r\n\r\n\t\timportFromExcel(config) {\r\n\t\t\ttry {\r\n\t\t\t\tconst formData = config.data;\r\n\t\t\t\tif (formData instanceof File) {\r\n\t\t\t\t\tconst data = new FormData();\r\n\t\t\t\t\tdata.append(\"file\", formData);\r\n\t\t\t\t\tconfig.data = data;\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {}\r\n\t\t\tgantt.ext.export_api._sendImportAjaxExcel(config);\r\n\t\t},\r\n\r\n\t\timportFromMSProject(config) {\r\n\t\t\tconst formData = config.data;\r\n\t\t\ttry {\r\n\t\t\t\tif (formData instanceof File) {\r\n\t\t\t\t\tconst data = new FormData();\r\n\t\t\t\t\tdata.append(\"file\", formData);\r\n\t\t\t\t\tconfig.data = data;\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {}\r\n\t\t\tgantt.ext.export_api._sendImportAjaxMSP(config);\r\n\t\t},\r\n\r\n\t\timportFromPrimaveraP6(config) {\r\n\t\t\tconfig.type = \"primaveraP6-parse\";\r\n\t\t\treturn gantt.importFromMSProject(config);\r\n\t\t},\r\n\r\n\t\texportToMSProject(config) {\r\n\t\t\tconfig = config || {};\r\n\t\t\tconfig.skip_circular_links = config.skip_circular_links === undefined ? true : !!config.skip_circular_links;\r\n\r\n\t\t\tconst oldXmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst oldFormatDate = gantt.templates.format_date;\r\n\t\t\tconst oldXmlDate = gantt.config.xml_date;\r\n\t\t\tconst oldDateFormat = gantt.config.date_format;\r\n\r\n\t\t\tconst exportServiceDateFormat = \"%d-%m-%Y %H:%i:%s\";\r\n\r\n\t\t\tgantt.config.xml_date = exportServiceDateFormat;\r\n\t\t\tgantt.config.date_format = exportServiceDateFormat;\r\n\t\t\tgantt.templates.xml_format = gantt.date.date_to_str(exportServiceDateFormat);\r\n\t\t\tgantt.templates.format_date = gantt.date.date_to_str(exportServiceDateFormat);\r\n\t\t\tconst data = gantt.ext.export_api._serializeAll();\r\n\r\n\t\t\tgantt.ext.export_api._customProjectProperties(data, config);\r\n\r\n\t\t\tgantt.ext.export_api._customTaskProperties(data, config);\r\n\r\n\t\t\tif (config.skip_circular_links) {\r\n\t\t\t\tgantt.ext.export_api._clearRecLinks(data);\r\n\t\t\t}\r\n\r\n\t\t\tconfig = gantt.ext.export_api._exportConfig(data, config);\r\n\r\n\t\t\tgantt.ext.export_api._sendToExport(config, config.type || \"msproject\");\r\n\t\t\tgantt.config.xml_date = oldXmlDate;\r\n\t\t\tgantt.config.date_format = oldDateFormat;\r\n\t\t\tgantt.templates.xml_format = oldXmlFormat;\r\n\t\t\tgantt.templates.format_date = oldFormatDate;\r\n\r\n\t\t\tgantt.config.$custom_data = null;\r\n\t\t\tgantt.config.custom = null;\r\n\t\t},\r\n\r\n\t\texportToPrimaveraP6(config) {\r\n\t\t\tconfig = config || {};\r\n\t\t\tconfig.type = \"primaveraP6\";\r\n\t\t\treturn gantt.exportToMSProject(config);\r\n\t\t},\r\n\r\n\t\t_fixColumns(columns) {\r\n\t\t\tfor (let i = 0; i < columns.length; i++) {\r\n\t\t\t\tcolumns[i].label = columns[i].label || gantt.locale.labels[\"column_\" + columns[i].name];\r\n\t\t\t\tif (typeof columns[i].width === \"string\") {\r\n\t\t\t\t\tcolumns[i].width = columns[i].width * 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_xdr(url, pack, cb) {\r\n\t\t\tgantt.ajax.post(url, pack, cb);\r\n\t\t},\r\n\r\n\t\t_markColumns(base) {\r\n\t\t\tconst columns = base.config.columns;\r\n\t\t\tif (columns){\r\n\t\t\t\tfor (let i = 0; i < columns.length; i++) {\r\n\t\t\t\t\tif (columns[i].template){\r\n\t\t\t\t\t\tcolumns[i].$template = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_sendImportAjaxExcel(config) {\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst store = config.store || 0;\r\n\t\t\tconst formData = config.data;\r\n\t\t\tconst callback = config.callback;\r\n\r\n\t\t\tformData.append(\"type\", \"excel-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify({\r\n\t\t\t\tsheet: config.sheet || 0\r\n\t\t\t}));\r\n\r\n\t\t\tif (store){\r\n\t\t\t\tformData.append(\"store\", store);\r\n\t\t\t}\r\n\r\n\t\t\tconst xhr = new XMLHttpRequest();\r\n\t\t\txhr.onreadystatechange = function(e) {\r\n\t\t\t\tif (xhr.readyState === 4 && xhr.status === 0) {// network error\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.onload = function() {\r\n\t\t\t\tconst fail = xhr.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xhr.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(info);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.open(\"POST\", url, true);\r\n\t\t\txhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\t\t\txhr.send(formData);\r\n\t\t},\r\n\r\n\r\n\t\t_ajaxToExport(data, type, callback) {\r\n\t\t\tdelete data.callback;\r\n\r\n\t\t\tconst url = data.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst pack = \"type=\" + type + \"&store=1&data=\" + encodeURIComponent(JSON.stringify(data));\r\n\r\n\t\t\tconst cb = function(loader) {\r\n\t\t\t\tconst xdoc = loader.xmlDoc || loader;\r\n\t\t\t\tconst fail = xdoc.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xdoc.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\t\t\t\tcallback(info);\r\n\t\t\t};\r\n\r\n\t\t\tgantt.ext.export_api._xdr(url, pack, cb);\r\n\t\t},\r\n\t\t_serializableGanttConfig(config) {\r\n\t\t\tconst result = gantt.mixin({}, config);\r\n\r\n\t\t\tif (result.columns) {\r\n\t\t\t\tresult.columns = result.columns.map(function(col) {\r\n\t\t\t\t\tconst copy = gantt.mixin({}, col);\r\n\t\t\t\t\tdelete copy.editor;\r\n\t\t\t\t\treturn copy;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdelete result.editor_types;\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t_sendToExport(data, type) {\r\n\t\t\tconst convert = gantt.date.date_to_str(gantt.config.date_format || gantt.config.xml_date);\r\n\t\t\tif(!data.skin){\r\n\t\t\t\tdata.skin = gantt.skin;\r\n\t\t\t}\r\n\t\t\tif (data.config) {\r\n\t\t\t\tdata.config = gantt.copy(gantt.ext.export_api._serializableGanttConfig(data.config));\r\n\t\t\t\tgantt.ext.export_api._markColumns(data, type);\r\n\r\n\t\t\t\tif (data.config.start_date && data.config.end_date) {\r\n\t\t\t\t\tif (data.config.start_date instanceof Date) {\r\n\t\t\t\t\t\tdata.config.start_date = convert(data.config.start_date);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (data.config.end_date instanceof Date) {\r\n\t\t\t\t\t\tdata.config.end_date = convert(data.config.end_date);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (data.callback) {\r\n\t\t\t\treturn gantt.ext.export_api._ajaxToExport(data, type, data.callback);\r\n\t\t\t}\r\n\r\n\t\t\tconst form = gantt.ext.export_api._createHiddenForm();\r\n\t\t\tform.firstChild.action = data.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tform.firstChild.childNodes[0].value = JSON.stringify(data);\r\n\t\t\tform.firstChild.childNodes[1].value = type;\r\n\t\t\tform.firstChild.submit();\r\n\t\t},\r\n\r\n\t\t_createHiddenForm() {\r\n\t\t\tif (!gantt.ext.export_api._hidden_export_form) {\r\n\t\t\t\tconst t = gantt.ext.export_api._hidden_export_form = document.createElement(\"div\");\r\n\t\t\t\tt.style.display = \"none\";\r\n\t\t\t\tt.innerHTML = \"\";\r\n\t\t\t\tdocument.body.appendChild(t);\r\n\t\t\t}\r\n\t\t\treturn gantt.ext.export_api._hidden_export_form;\r\n\t\t},\r\n\r\n\r\n\t\t_copyObjectBase(obj) {\r\n\t\t\tconst copy = {\r\n\t\t\t\tstart_date: undefined,\r\n\t\t\t\tend_date: undefined,\r\n\t\t\t\tconstraint_date: undefined,\r\n\t\t\t\tdeadline: undefined\r\n\t\t\t};\r\n\t\t\tfor (const key in obj) {\r\n\t\t\t\tif (key.charAt(0) === \"$\" || key === \"baselines\"){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcopy[key] = obj[key];\r\n\t\t\t}\r\n\t\t\tconst formatDate = gantt.templates.xml_format || gantt.templates.format_date;\r\n\r\n\t\t\tcopy.start_date = formatDate(copy.start_date);\r\n\t\t\tif (copy.end_date){\r\n\t\t\t\tcopy.end_date = formatDate(copy.end_date);\r\n\t\t\t}\r\n\t\t\tif (copy.constraint_date){\r\n\t\t\t\tcopy.constraint_date = formatDate(copy.constraint_date);\r\n\t\t\t}\r\n\t\t\tif (copy.deadline){\r\n\t\t\t\tcopy.deadline = formatDate(copy.deadline);\r\n\t\t\t}\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\r\n\t\t_color_box: null,\r\n\t\t_color_hash: {},\r\n\r\n\t\t_getStyles(css) {\r\n\t\t\tif (!gantt.ext.export_api._color_box) {\r\n\t\t\t\tgantt.ext.export_api._color_box = document.createElement(\"DIV\");\r\n\t\t\t\tgantt.ext.export_api._color_box.style.cssText = \"position:absolute; display:none;\";\r\n\t\t\t\tdocument.body.appendChild(gantt.ext.export_api._color_box);\r\n\t\t\t}\r\n\t\t\tif (gantt.ext.export_api._color_hash[css]){\r\n\t\t\t\treturn gantt.ext.export_api._color_hash[css];\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._color_box.className = css;\r\n\t\t\tconst color = gantt.ext.export_api._getColor(gantt.ext.export_api._color_box, \"color\");\r\n\t\t\tconst backgroundColor = gantt.ext.export_api._getColor(gantt.ext.export_api._color_box, \"backgroundColor\");\r\n\t\t\treturn (gantt.ext.export_api._color_hash[css] = color + \";\" + backgroundColor);\r\n\t\t},\r\n\r\n\r\n\t\t_getMinutesWorktimeSettings(parsedRanges) {\r\n\t\t\tconst minutes = [];\r\n\t\t\tparsedRanges.forEach(function(range) {\r\n\t\t\t\tminutes.push(range.startMinute);\r\n\t\t\t\tminutes.push(range.endMinute);\r\n\t\t\t});\r\n\t\t\treturn minutes;\r\n\t\t},\r\n\r\n\t\t_getWorktimeSettings() {\r\n\r\n\t\t\tconst defaultWorkTimes = {\r\n\t\t\t\thours: [0, 24],\r\n\t\t\t\tminutes: null,\r\n\t\t\t\tdates: { 0: true, 1: true, 2: true, 3: true, 4: true, 5: true, 6: true }\r\n\t\t\t};\r\n\r\n\t\t\tlet time;\r\n\t\t\tif (!gantt.config.work_time) {\r\n\t\t\t\ttime = defaultWorkTimes;\r\n\t\t\t} else {\r\n\t\t\t\tconst wTime = gantt._working_time_helper;\r\n\t\t\t\tif (wTime && wTime.get_calendar) {\r\n\t\t\t\t\ttime = wTime.get_calendar();\r\n\t\t\t\t} else if (wTime) {\r\n\t\t\t\t\ttime = {\r\n\t\t\t\t\t\thours: wTime.hours,\r\n\t\t\t\t\t\tminutes: null,\r\n\t\t\t\t\t\tdates: wTime.dates\r\n\t\t\t\t\t};\r\n\t\t\t\t} else if (gantt.config.worktimes && gantt.config.worktimes.global) {\r\n\t\t\t\t\tconst settings = gantt.config.worktimes.global;\r\n\r\n\t\t\t\t\tif (settings.parsed) {\r\n\t\t\t\t\t\tconst minutes = gantt.ext.export_api._getMinutesWorktimeSettings(settings.parsed.hours);\r\n\t\t\t\t\t\ttime = {\r\n\t\t\t\t\t\t\thours: null,\r\n\t\t\t\t\t\t\tminutes,\r\n\t\t\t\t\t\t\tdates: {}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tfor (const i in settings.parsed.dates) {\r\n\t\t\t\t\t\t\tif (Array.isArray(settings.parsed.dates[i])) {\r\n\t\t\t\t\t\t\t\ttime.dates[i] = gantt.ext.export_api._getMinutesWorktimeSettings(settings.parsed.dates[i]);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttime.dates[i] = settings.parsed.dates[i];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttime = {\r\n\t\t\t\t\t\t\thours: settings.hours,\r\n\t\t\t\t\t\t\tminutes: null,\r\n\t\t\t\t\t\t\tdates: settings.dates\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttime = defaultWorkTimes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn time;\r\n\t\t},\r\n\r\n\r\n\t\t_eachTaskTimed(start, end) {\r\n\t\t\treturn function(code, parent, master) {\r\n\t\t\t\tparent = parent || gantt.config.root_id;\r\n\t\t\t\tmaster = master || gantt;\r\n\r\n\t\t\t\tconst branch = gantt.getChildren(parent);\r\n\t\t\t\tif (branch){\r\n\t\t\t\t\tfor (let i = 0; i < branch.length; i++) {\r\n\t\t\t\t\t\tconst item = gantt._pull[branch[i]];\r\n\t\t\t\t\t\tif ((!start || item.end_date > start) && (!end || item.start_date < end)){\r\n\t\t\t\t\t\t\tcode.call(master, item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (gantt.hasChild(item.id)){\r\n\t\t\t\t\t\t\tgantt.eachTask(code, item.id, master);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\r\n\r\n\t\t// patch broken json serialization in gantt 2.1\r\n\t\t_originalCopyObject: gantt.json._copyObject,\r\n\r\n\r\n\t\t_copyObjectPlain(obj) {\r\n\t\t\tconst text = gantt.templates.task_text(obj.start_date, obj.end_date, obj);\r\n\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectBase(obj);\r\n\t\t\tcopy.text = text || copy.text;\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_getColor(node, style) {\r\n\t\t\tconst value = node.currentStyle ? node.currentStyle[style] : getComputedStyle(node, null)[style];\r\n\t\t\tconst rgb = value.replace(/\\s/g, \"\").match(/^rgba?\\((\\d+),(\\d+),(\\d+)/i);\r\n\t\t\treturn ((rgb && rgb.length === 4) ?\r\n\t\t\t\t(\"0\" + parseInt(rgb[1], 10).toString(16)).slice(-2) +\r\n\t\t\t\t(\"0\" + parseInt(rgb[2], 10).toString(16)).slice(-2) +\r\n\t\t\t\t(\"0\" + parseInt(rgb[3], 10).toString(16)).slice(-2) : value).replace(\"#\", \"\");\r\n\t\t},\r\n\r\n\r\n\t\t// excel serialization\r\n\t\t_copyObjectTable(obj) {\r\n\t\t\t// Excel interprets UTC time as local time in every timezone, send local time instead of actual UTC time.\r\n\t\t\t// https://github.com/SheetJS/js-xlsx/issues/126#issuecomment-60531614\r\n\t\t\tconst toISOstring = gantt.date.date_to_str(\"%Y-%m-%dT%H:%i:%s.000Z\");\r\n\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectColumns(obj, gantt.ext.export_api._copyObjectPlain(obj));\r\n\t\t\tif (copy.start_date){\r\n\t\t\t\tcopy.start_date = toISOstring(obj.start_date);\r\n\t\t\t}\r\n\t\t\tif (copy.end_date){\r\n\t\t\t\tcopy.end_date = toISOstring(obj.end_date);\r\n\t\t\t}\r\n\r\n\t\t\t// private gantt._day_index_by_date was replaced by public gantt.columnIndexByDate in gantt 5.0\r\n\t\t\tconst getDayIndex = gantt._day_index_by_date ? gantt._day_index_by_date : gantt.columnIndexByDate;\r\n\r\n\t\t\tcopy.$start = getDayIndex.call(gantt, obj.start_date);\r\n\t\t\tcopy.$end = getDayIndex.call(gantt, obj.end_date);\r\n\r\n\t\t\t// GS-2100. Correct bar position considering hidden cells\r\n\t\t\tlet hiddenCells = 0;\r\n\t\t\tconst scaleCellsWidth = gantt.getScale().width;\r\n\t\t\tif (scaleCellsWidth.indexOf(0) > -1) {\r\n\t\t\t\tlet i = 0;\r\n\t\t\t\tfor (i; i < copy.$start; i++) {\r\n\t\t\t\t\tif (!scaleCellsWidth[i]) {\r\n\t\t\t\t\t\thiddenCells++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcopy.$start -= hiddenCells;\r\n\r\n\t\t\t\tfor (i; i < copy.$end; i++) {\r\n\t\t\t\t\tif (!scaleCellsWidth[i]) {\r\n\t\t\t\t\t\thiddenCells++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcopy.$end -= hiddenCells;\r\n\t\t\t}\r\n\r\n\t\t\tcopy.$level = obj.$level;\r\n\t\t\tcopy.$type = obj.$rendered_type;\r\n\r\n\t\t\tconst tmps = gantt.templates;\r\n\t\t\tcopy.$text = tmps.task_text(obj.start, obj.end_date, obj);\r\n\t\t\tcopy.$left = tmps.leftside_text ? tmps.leftside_text(obj.start, obj.end_date, obj) : \"\";\r\n\t\t\tcopy.$right = tmps.rightside_text ? tmps.rightside_text(obj.start, obj.end_date, obj) : \"\";\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectColors(obj) {\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectTable(obj);\r\n\r\n\t\t\tconst node = gantt.getTaskNode(obj.id);\r\n\t\t\tif (node && node.firstChild) {\r\n\t\t\t\tlet color = gantt.ext.export_api._getColor((gantt._no_progress_colors ? node : node.firstChild), \"backgroundColor\");\r\n\t\t\t\tif (color === \"363636\"){\r\n\t\t\t\t\tcolor = gantt.ext.export_api._getColor(node, \"backgroundColor\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcopy.$color = color;\r\n\t\t\t} else if (obj.color){\r\n\t\t\t\tcopy.$color = obj.color;\r\n\t\t\t}\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectColumns(obj, copy) {\r\n\t\t\tfor (let i = 0; i < gantt.config.columns.length; i++) {\r\n\t\t\t\tconst ct = gantt.config.columns[i].template;\r\n\t\t\t\tif (ct) {\r\n\t\t\t\t\tlet val = ct(obj);\r\n\t\t\t\t\tif (val instanceof Date){\r\n\t\t\t\t\t\tval = gantt.templates.date_grid(val, obj);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcopy[\"_\" + i] = val;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectAll(obj) {\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectBase(obj);\r\n\r\n\t\t\tconst templates = [\r\n\t\t\t\t\"leftside_text\",\r\n\t\t\t\t\"rightside_text\",\r\n\t\t\t\t\"task_text\",\r\n\t\t\t\t\"progress_text\",\r\n\t\t\t\t\"task_class\"\r\n\t\t\t];\r\n\r\n\t\t\t// serialize all text templates\r\n\t\t\tfor (let i = 0; i < templates.length; i++) {\r\n\t\t\t\tconst template = gantt.templates[templates[i]];\r\n\t\t\t\tif (template){\r\n\t\t\t\t\tcopy[\"$\" + i] = template(obj.start_date, obj.end_date, obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._copyObjectColumns(obj, copy);\r\n\t\t\tcopy.open = obj.$open;\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\r\n\t\t_serializeHtml() {\r\n\t\t\tconst smartScales = gantt.config.smart_scales;\r\n\t\t\tconst smartRendering = gantt.config.smart_rendering;\r\n\t\t\tif (smartScales || smartRendering) {\r\n\t\t\t\tgantt.config.smart_rendering = false;\r\n\t\t\t\tgantt.config.smart_scales = false;\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\r\n\t\t\tconst html = gantt.$container.parentNode.innerHTML;\r\n\r\n\t\t\tif (smartScales || smartRendering) {\r\n\t\t\t\tgantt.config.smart_scales = smartScales;\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\r\n\t\t\treturn html;\r\n\t\t},\r\n\r\n\t\t_serializeAll() {\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._copyObjectAll;\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_serializePlain() {\r\n\t\t\tconst oldXmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst oldFormatDate = gantt.templates.format_date;\r\n\t\t\tgantt.templates.xml_format = gantt.date.date_to_str(\"%Y%m%dT%H%i%s\", true);\r\n\t\t\tgantt.templates.format_date = gantt.date.date_to_str(\"%Y%m%dT%H%i%s\", true);\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._copyObjectPlain;\r\n\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\r\n\t\t\tgantt.templates.xml_format = oldXmlFormat;\r\n\t\t\tgantt.templates.format_date = oldFormatDate;\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\r\n\t\t\tdelete data.links;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_getRaw() {\r\n\t\t\t// support Gantt < 5.0\r\n\t\t\tif (gantt._scale_helpers) {\r\n\t\t\t\tconst scales = gantt._get_scales();\r\n\t\t\t\tconst\tminWidth = gantt.config.min_column_width;\r\n\t\t\t\tconst\tautosizeMinWidth = gantt._get_resize_options().x ? Math.max(gantt.config.autosize_min_width, 0) : gantt.config.$task.offsetWidth;\r\n\t\t\t\tconst\theight = gantt.config.config.scale_height - 1;\r\n\t\t\t\treturn gantt._scale_helpers.prepareConfigs(scales, minWidth, autosizeMinWidth, height);\r\n\t\t\t} else { // Gantt >= 5.0\r\n\t\t\t\tconst timeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\t\tif (timeline) {\r\n\t\t\t\t\tlet availWidth = timeline.$config.width;\r\n\t\t\t\t\tif (gantt.config.autosize === \"x\" || gantt.config.autosize === \"xy\") {\r\n\t\t\t\t\t\tavailWidth = Math.max(gantt.config.autosize_min_width, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst state = gantt.getState();\r\n\t\t\t\t\tconst\tscales = timeline._getScales();\r\n\t\t\t\t\tconst\tminWidth = gantt.config.min_column_width;\r\n\t\t\t\t\tconst\theight = gantt.config.scale_height - 1;\r\n\t\t\t\t\tconst\trtl = gantt.config.rtl;\r\n\t\t\t\t\treturn timeline.$scaleHelper.prepareConfigs(scales, minWidth, availWidth, height, state.min_date, state.max_date, rtl);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_serializeTimeline(config) {\r\n\t\t\tgantt.json._copyObject = config.visual ? gantt.ext.export_api._copyObjectColors : gantt.ext.export_api._copyObjectTable;\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\r\n\t\t\tdelete data.links;\r\n\r\n\t\t\tif (config.cellColors) {\r\n\t\t\t\tconst css = gantt.templates.timeline_cell_class || gantt.templates.task_cell_class;\r\n\t\t\t\tif (css) {\r\n\t\t\t\t\tconst raw = gantt.ext.export_api._getRaw();\r\n\t\t\t\t\tlet steps = raw[0].trace_x;\r\n\t\t\t\t\tfor (let i = 1; i < raw.length; i++){\r\n\t\t\t\t\t\tif (raw[i].trace_x.length > steps.length){\r\n\t\t\t\t\t\t\tsteps = raw[i].trace_x;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (let i = 0; i < data.data.length; i++) {\r\n\t\t\t\t\t\tdata.data[i].styles = [];\r\n\t\t\t\t\t\tconst task = gantt.getTask(data.data[i].id);\r\n\t\t\t\t\t\tfor (let j = 0; j < steps.length; j++) {\r\n\t\t\t\t\t\t\tconst date = steps[j];\r\n\t\t\t\t\t\t\tconst cellCss = css(task, date);\r\n\t\t\t\t\t\t\tif (cellCss){\r\n\t\t\t\t\t\t\t\tdata.data[i].styles.push({ index: j, styles: gantt.ext.export_api._getStyles(cellCss) });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_serializeScales(config) {\r\n\t\t\tconst scales = [];\r\n\t\t\tconst raw = gantt.ext.export_api._getRaw();\r\n\r\n\t\t\tlet min = Infinity;\r\n\t\t\tlet max = 0;\r\n\t\t\tfor (let i = 0; i < raw.length; i++) {\r\n\t\t\t\tmin = Math.min(min, raw[i].col_width);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < raw.length; i++) {\r\n\t\t\t\tlet start = 0;\r\n\t\t\t\tlet end = 0;\r\n\t\t\t\tconst row = [];\r\n\r\n\t\t\t\tscales.push(row);\r\n\t\t\t\tconst step = raw[i];\r\n\t\t\t\tmax = Math.max(max, step.trace_x.length);\r\n\t\t\t\tconst template = step.format || step.template || (step.date ? gantt.date.date_to_str(step.date) : gantt.config.date_scale);\r\n\r\n\t\t\t\tfor (let j = 0; j < step.trace_x.length; j++) {\r\n\t\t\t\t\tconst date = step.trace_x[j];\r\n\t\t\t\t\tend = start + Math.round(step.width[j] / min);\r\n\r\n\t\t\t\t\tconst scaleCell = { text: template(date), start, end, styles: \"\" };\r\n\r\n\t\t\t\t\tif (config.cellColors) {\r\n\t\t\t\t\t\tconst css = step.css || gantt.templates.scaleCell_class;\r\n\t\t\t\t\t\tif (css) {\r\n\t\t\t\t\t\t\tconst scaleCss = css(date);\r\n\t\t\t\t\t\t\tif (scaleCss){\r\n\t\t\t\t\t\t\t\tscaleCell.styles = gantt.ext.export_api._getStyles(scaleCss);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.push(scaleCell);\r\n\t\t\t\t\tstart = end;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn { width: max, height: scales.length, data: scales };\r\n\t\t},\r\n\r\n\t\t_serializeGrid(config) {\r\n\t\t\tgantt.exportMode = true;\r\n\r\n\t\t\tconst columns = [];\r\n\t\t\tconst cols = gantt.config.columns;\r\n\r\n\t\t\tlet ccount = 0;\r\n\t\t\tfor (let i = 0; i < cols.length; i++) {\r\n\t\t\t\tif (cols[i].name === \"add\" || cols[i].name === \"buttons\") {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolumns[ccount] = {\r\n\t\t\t\t\tid: ((cols[i].template) ? (\"_\" + i) : cols[i].name),\r\n\t\t\t\t\theader: cols[i].label || gantt.locale.labels[\"column_\" + cols[i].name],\r\n\t\t\t\t\twidth: (cols[i].width ? Math.floor(cols[i].width / 4) : \"\")\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (cols[i].name === \"duration\"){\r\n\t\t\t\t\tcolumns[ccount].type = \"number\";\r\n\t\t\t\t}\r\n\t\t\t\tif (cols[i].name === \"start_date\" || cols[i].name === \"end_date\") {\r\n\t\t\t\t\tcolumns[ccount].type = \"date\";\r\n\t\t\t\t\tif (config && config.rawDates){\r\n\t\t\t\t\t\tcolumns[ccount].id = cols[i].name;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tccount++;\r\n\t\t\t}\r\n\r\n\t\t\tgantt.exportMode = false;\r\n\t\t\treturn columns;\r\n\t\t},\r\n\r\n\t\t_exportSerialize() {\r\n\t\t\tgantt.exportMode = true;\r\n\r\n\t\t\tconst xmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst formatDate = gantt.templates.format_date;\r\n\r\n\t\t\t// use configuration date format for serialization so date could be parsed on the export\r\n\t\t\t// required when custom format date function is defined\r\n\t\t\tgantt.templates.xml_format =\r\n\t\t\t\tgantt.templates.format_date =\r\n\t\t\t\tgantt.date.date_to_str(gantt.config.date_format || gantt.config.xml_date);\r\n\r\n\t\t\tconst data = gantt.serialize();\r\n\r\n\t\t\tgantt.templates.xml_format = xmlFormat;\r\n\t\t\tgantt.templates.format_date = formatDate;\r\n\t\t\tgantt.exportMode = false;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\r\n\t\t_setLevel(data) {\r\n\t\t\tfor (let i = 0; i < data.length; i++) {\r\n\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\tif (data[i].parent == 0) {\r\n\t\t\t\t\tdata[i]._lvl = 1;\r\n\t\t\t\t}\r\n\t\t\t\tfor (let j = i + 1; j < data.length; j++) {\r\n\t\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\t\tif (data[i].id == data[j].parent) {\r\n\t\t\t\t\t\tdata[j]._lvl = data[i]._lvl + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_clearLevel(data) {\r\n\t\t\tfor (let i = 0; i < data.length; i++) {\r\n\t\t\t\tdelete data[i]._lvl;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_clearRecLinks(data) {\r\n\t\t\tgantt.ext.export_api._setLevel(data.data);\r\n\t\t\tconst tasks = {};\r\n\t\t\tfor (let i = 0; i < data.data.length; i++) {\r\n\t\t\t\ttasks[data.data[i].id] = data.data[i];\r\n\t\t\t}\r\n\r\n\t\t\tconst links = {};\r\n\r\n\t\t\tfor (let i = 0; i < data.links.length; i++) {\r\n\t\t\t\tconst link = data.links[i];\r\n\t\t\t\tif (gantt.isTaskExists(link.source) && gantt.isTaskExists(link.target) &&\r\n\t\t\t\t\ttasks[link.source] && tasks[link.target]) {\r\n\t\t\t\t\tlinks[link.id] = link;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (const j in links) {\r\n\t\t\t\tgantt.ext.export_api._makeLinksSameLevel(links[j], tasks);\r\n\t\t\t}\r\n\r\n\t\t\tconst skippedLinks = {};\r\n\t\t\tfor (const j in tasks) {\r\n\t\t\t\tgantt.ext.export_api._clearCircDependencies(tasks[j], links, tasks, {}, skippedLinks, null);\r\n\t\t\t}\r\n\r\n\t\t\tif (Object.keys(links)) {\r\n\t\t\t\tgantt.ext.export_api._clearLinksSameLevel(links, tasks);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < data.links.length; i++) {\r\n\t\t\t\tif (!links[data.links[i].id]) {\r\n\t\t\t\t\tdata.links.splice(i, 1);\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._clearLevel(data.data);\r\n\t\t},\r\n\r\n\t\t_clearCircDependencies(task, links, tasks, usedTasks, skippedLinks, prevLink) {\r\n\t\t\tconst sources = task.$_source;\r\n\t\t\tif (!sources) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (usedTasks[task.id]) {\r\n\t\t\t\tgantt.ext.export_api._onCircDependencyFind(prevLink, links, usedTasks, skippedLinks);\r\n\t\t\t}\r\n\r\n\t\t\tusedTasks[task.id] = true;\r\n\r\n\t\t\tconst targets = {};\r\n\r\n\t\t\tfor (let i = 0; i < sources.length; i++) {\r\n\t\t\t\tif (skippedLinks[sources[i]]) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst curLink = links[sources[i]];\r\n\t\t\t\tconst targetTask = tasks[curLink._target];\r\n\t\t\t\tif (targets[targetTask.id]) { // two link from one task to another\r\n\t\t\t\t\tgantt.ext.export_api._onCircDependencyFind(curLink, links, usedTasks, skippedLinks);\r\n\t\t\t\t}\r\n\t\t\t\ttargets[targetTask.id] = true;\r\n\t\t\t\tgantt.ext.export_api._clearCircDependencies(targetTask, links, tasks, usedTasks, skippedLinks, curLink);\r\n\t\t\t}\r\n\t\t\tusedTasks[task.id] = false;\r\n\t\t},\r\n\r\n\t\t_onCircDependencyFind(link, links, usedTasks, skippedLinks) {\r\n\t\t\tif (link) {\r\n\t\t\t\tif (gantt.callEvent(\"onExportCircularDependency\", [link.id, link])) {\r\n\t\t\t\t\tdelete links[link.id];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete usedTasks[link._source];\r\n\t\t\t\tdelete usedTasks[link._target];\r\n\t\t\t\tskippedLinks[link.id] = true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_makeLinksSameLevel(link, tasks) {\r\n\t\t\tlet task;\r\n\t\t\tlet targetLvl;\r\n\t\t\tconst linkT = {\r\n\t\t\t\ttarget: tasks[link.target],\r\n\t\t\t\tsource: tasks[link.source]\r\n\t\t\t};\r\n\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\tif (linkT.target._lvl != linkT.source._lvl) {\r\n\t\t\t\tif (linkT.target._lvl < linkT.source._lvl) {\r\n\t\t\t\t\ttask = \"source\";\r\n\t\t\t\t\ttargetLvl = linkT.target._lvl;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttask = \"target\";\r\n\t\t\t\t\ttargetLvl = linkT.source._lvl;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t\tconst parent = tasks[linkT[task].parent];\r\n\t\t\t\t\tif (!parent) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlinkT[task] = parent;\r\n\t\t\t\t} while (linkT[task]._lvl < targetLvl);\r\n\r\n\t\t\t\tlet sourceParent = tasks[linkT.source.parent];\r\n\t\t\t\tlet\ttargetParent = tasks[linkT.target.parent];\r\n\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\twhile (sourceParent && targetParent && sourceParent.id != targetParent.id) {\r\n\t\t\t\t\tlinkT.source = sourceParent;\r\n\t\t\t\t\tlinkT.target = targetParent;\r\n\t\t\t\t\tsourceParent = tasks[linkT.source.parent];\r\n\t\t\t\t\ttargetParent = tasks[linkT.target.parent];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlink._target = linkT.target.id;\r\n\t\t\tlink._source = linkT.source.id;\r\n\r\n\t\t\tif (!linkT.target.$_target){\r\n\t\t\t\tlinkT.target.$_target = [];\r\n\t\t\t}\r\n\t\t\tlinkT.target.$_target.push(link.id);\r\n\r\n\t\t\tif (!linkT.source.$_source){\r\n\t\t\t\tlinkT.source.$_source = [];\r\n\t\t\t}\r\n\t\t\tlinkT.source.$_source.push(link.id);\r\n\t\t},\r\n\r\n\t\t_clearLinksSameLevel(links, tasks) {\r\n\t\t\tfor (const link in links) {\r\n\t\t\t\tdelete links[link]._target;\r\n\t\t\t\tdelete links[link]._source;\r\n\t\t\t}\r\n\r\n\t\t\tfor (const task in tasks) {\r\n\t\t\t\tdelete tasks[task].$_source;\r\n\t\t\t\tdelete tasks[task].$_target;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_customProjectProperties(data, config) {\r\n\t\t\tif (config && config.project) {\r\n\t\t\t\tfor (const i in config.project) {\r\n\t\t\t\t\tif (!gantt.config.$custom_data){\r\n\t\t\t\t\t\tgantt.config.$custom_data = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.config.$custom_data[i] = typeof config.project[i] === \"function\" ? config.project[i](gantt.config) : config.project[i];\r\n\t\t\t\t}\r\n\t\t\t\tdelete config.project;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_customTaskProperties(data, config) {\r\n\t\t\tif (config && config.tasks) {\r\n\t\t\t\tdata.data.forEach(function(el) {\r\n\t\t\t\t\tfor (const i in config.tasks) {\r\n\t\t\t\t\t\tif (!el.$custom_data){\r\n\t\t\t\t\t\t\tel.$custom_data = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tel.$custom_data[i] = typeof config.tasks[i] === \"function\" ? config.tasks[i](el, gantt.config) : config.tasks[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tdelete config.tasks;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_exportConfig(data, config) {\r\n\t\t\tconst projectName = config.name || \"gantt.xml\";\r\n\t\t\tdelete config.name;\r\n\r\n\t\t\tgantt.config.custom = config;\r\n\r\n\t\t\tconst time = gantt.ext.export_api._getWorktimeSettings();\r\n\r\n\t\t\tconst projectDates = gantt.getSubtaskDates();\r\n\t\t\tif (projectDates.start_date && projectDates.end_date) {\r\n\t\t\t\tconst formatDate = gantt.templates.format_date || gantt.templates.xml_format;\r\n\t\t\t\tgantt.config.start_end = {\r\n\t\t\t\t\tstart_date: formatDate(projectDates.start_date),\r\n\t\t\t\t\tend_date: formatDate(projectDates.end_date)\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tconst manual = config.auto_scheduling === undefined ? false : !!config.auto_scheduling;\r\n\r\n\t\t\tconst res = {\r\n\t\t\t\tcallback: config.callback || null,\r\n\t\t\t\tconfig: gantt.config,\r\n\t\t\t\tdata,\r\n\t\t\t\tmanual,\r\n\t\t\t\tname: projectName,\r\n\t\t\t\tworktime: time\r\n\t\t\t};\r\n\t\t\tfor (const i in config) {\r\n\t\t\t\tres[i] = config[i];\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t},\r\n\r\n\r\n\t\t_sendImportAjaxMSP(config) {\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst store = config.store || 0;\r\n\t\t\tconst formData = config.data;\r\n\t\t\tconst callback = config.callback;\r\n\r\n\t\t\tconst settings = {\r\n\t\t\t\tdurationUnit: config.durationUnit || undefined,\r\n\t\t\t\tprojectProperties: config.projectProperties || undefined,\r\n\t\t\t\ttaskProperties: config.taskProperties || undefined\r\n\t\t\t};\r\n\r\n\t\t\tformData.append(\"type\", config.type || \"msproject-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify(settings));\r\n\r\n\t\t\tif (store){\r\n\t\t\t\tformData.append(\"store\", store);\r\n\t\t\t}\r\n\r\n\t\t\tconst xhr = new XMLHttpRequest();\r\n\t\t\txhr.onreadystatechange = function(e) {\r\n\t\t\t\tif (xhr.readyState === 4 && xhr.status === 0) {// network error\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.onload = function(){\r\n\t\t\t\tconst fail = xhr.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xhr.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(info);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.open(\"POST\", url, true);\r\n\t\t\txhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\t\t\txhr.send(formData);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\r\n\tgantt.exportToPDF = gantt.ext.export_api.exportToPDF;\r\n\tgantt.exportToPNG = gantt.ext.export_api.exportToPNG;\r\n\tgantt.exportToICal = gantt.ext.export_api.exportToICal;\r\n\tgantt.exportToExcel = gantt.ext.export_api.exportToExcel;\r\n\tgantt.exportToJSON = gantt.ext.export_api.exportToJSON;\r\n\tgantt.importFromExcel = gantt.ext.export_api.importFromExcel;\r\n\tgantt.importFromMSProject = gantt.ext.export_api.importFromMSProject;\r\n\tgantt.exportToMSProject = gantt.ext.export_api.exportToMSProject;\r\n\tgantt.importFromPrimaveraP6 = gantt.ext.export_api.importFromPrimaveraP6;\r\n\tgantt.exportToPrimaveraP6 = gantt.ext.export_api.exportToPrimaveraP6;\r\n\r\n\r\n\treturn gantt.ext.export_api;\r\n}\r\n","export default {\r\n\tKEY_CODES: {\r\n\t\tUP: 38,\r\n\t\tDOWN: 40,\r\n\t\tLEFT: 37,\r\n\t\tRIGHT: 39,\r\n\t\tSPACE: 32,\r\n\t\tENTER: 13,\r\n\t\tDELETE: 46,\r\n\t\tESC: 27,\r\n\t\tTAB: 9\r\n\t}\r\n};","export default class ExtensionsManager{\r\n\tprivate _extensions:{[key:string]: GanttPlugin };\r\n\r\n\tconstructor(config: {[key:string]: GanttPlugin }){\r\n\t\tthis._extensions = {};\r\n\t\tfor(const i in config){\r\n\t\t\tthis._extensions[i] = config[i];\r\n\t\t}\r\n\t}\r\n\r\n\taddExtension = (name: string, ext: GanttPlugin) => {\r\n\t\tthis._extensions[name] = ext;\r\n\t};\r\n\r\n\tgetExtension = (name: string): GanttPlugin => {\r\n\t\treturn this._extensions[name];\r\n\t};\r\n}","type DurationUnits = \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\";\r\ntype Align = \"left\" | \"center\" | \"right\";\r\ntype SectionType = \"textarea\"\r\n\t\t\t\t\t| \"time\"\r\n\t\t\t\t\t| \"duration\"\r\n\t\t\t\t\t| \"select\"\r\n\t\t\t\t\t| \"typeselect\"\r\n\t\t\t\t\t| \"parent\"\r\n\t\t\t\t\t| \"template\"\r\n\t\t\t\t\t| \"checkbox\"\r\n\t\t\t\t\t| \"radio\"\r\n\t\t\t\t\t| \"resources\"\r\n\t\t\t\t\t| \"constraint\";\r\n\r\ntype LightboxSection = Array;\r\n\r\ntype LayoutView = \"grid\"\r\n\t| \"timeline\"\r\n\t| \"resizer\"\r\n\t| \"scrollbar\"\r\n\t| \"resourceGrid\"\r\n\t| \"resourceTimeline\";\r\n\r\ninterface IColumnItem {\r\n\tname: string;\r\n\tlabel?: string;\r\n\ttree?: boolean;\r\n\talign?: Align;\r\n\thide?: boolean;\r\n\tmax_width?: number;\r\n\tmin_width?: number;\r\n\tresize?: boolean;\r\n\ttemplate?: (obj: any) => string;\r\n\twidth?: number | \"*\";\r\n}\r\n\r\nexport type TModifierKeys = \"metaKey\" | \"ctrlKey\" | \"altKey\" | \"shiftKey\" | false | undefined;\r\n\r\nexport interface IScale {\r\n\tcss?: () => string;\r\n\tdate?: string;\r\n\tstep: number;\r\n\ttemplate?: (date: Date) => string;\r\n\tunit: DurationUnits;\r\n}\r\n\r\ninterface ILightboxSection {\r\n\tname: string;\r\n\tmap_to: string;\r\n\ttype: SectionType;\r\n\theight?: number;\r\n\tfocus?: boolean;\r\n}\r\n\r\ninterface ILightboxTimeAndDurationSection extends ILightboxSection {\r\n\treadonly: boolean;\r\n\tyear_range: number[] | number;\r\n\tsingle_date: boolean;\r\n\ttime_format: string;\r\n}\r\n\r\ninterface ILightboxInputControl extends ILightboxSection {\r\n\tdefault_value?: any;\r\n\toptions?: Array<{key: string, label: string}>;\r\n}\r\n\r\ninterface ILightboxSelectControl extends ILightboxInputControl {\r\n\tonchange: () => boolean | undefined;\r\n}\r\n\r\ninterface ILightboxParentControl extends ILightboxSection {\r\n\tallow_root: boolean;\r\n\troot_label: string;\r\n\tsort?: (a: any, b: any) => -1 | 0 | 1;\r\n\tfilter?: (task: string | number | object) => boolean;\r\n\ttemplate?: (start: Date, end: Date, ev: object) => string;\r\n}\r\n\r\ninterface ILightboxTypeselectControl extends ILightboxSection {\r\n\tfilter?: (typeName: string) => boolean;\r\n}\r\n\r\n\r\ninterface ILayoutScrollbar {\r\n\tview: \"scrollbar\";\r\n\tscroll?: \"x\" | \"y\";\r\n\tid: string;\r\n\theight?: number;\r\n\twidth?: number;\r\n}\r\n\r\ninterface ILayoutView {\r\n\tview: LayoutView;\r\n\tid?: string;\r\n\tscrollX?: string;\r\n\tscrollY?: string;\r\n\tconfig?: object;\r\n}\r\n\r\ninterface ILayoutGrid extends ILayoutView {\r\n\tview: \"grid\";\r\n\tbind?: string;\r\n}\r\n\r\ninterface ILayoutTimeline extends ILayoutView {\r\n\tview: \"timeline\";\r\n\tbindLinks?: string;\r\n\tlayers?: any[];\r\n}\r\n\r\ninterface ILayoutResizer {\r\n\tview?: undefined;\r\n\tresizer: boolean;\r\n\twidth: number;\r\n}\r\n\r\ninterface ILayoutResourceGrid extends ILayoutView {\r\n\tview: \"resourceGrid\";\r\n\twidth: number;\r\n\tgroup: \"string\";\r\n}\r\n\r\ninterface ILayoutResourceTimeline extends ILayoutView {\r\n\tview: \"resourceTimeline\";\r\n\twidth: number;\r\n\tgroup: \"string\";\r\n}\r\n\r\ninterface ILayoutHtml {\r\n\thtml: string;\r\n\tcss: string;\r\n\twidth: number;\r\n}\r\n\r\ntype LayoutRow = ILayoutGrid\r\n\t| ILayoutTimeline\r\n\t| ILayoutResizer\r\n\t| ILayoutResourceGrid\r\n\t| ILayoutResourceTimeline\r\n\t| ILayoutHtml\r\n\t| ILayoutScrollbar\r\n\t| { cols: LayoutCol[] };\r\n\r\ntype LayoutCol = ILayoutGrid\r\n\t| ILayoutTimeline\r\n\t| ILayoutResizer\r\n\t| ILayoutResourceGrid\r\n\t| ILayoutResourceTimeline\r\n\t| ILayoutHtml\r\n\t| ILayoutScrollbar\r\n\t| { rows: LayoutRow[] };\r\n\r\ninterface ILayout {\r\n\tcss: string;\r\n\trows?: LayoutRow[];\r\n\tcols?: LayoutCol[];\r\n}\r\n\r\ntype TCsp = boolean | \"auto\";\r\n\r\ninterface IResourceConfig {\r\n\tdataprocessor_assignments?: boolean;\r\n\tdataprocessor_resources?: boolean;\r\n\teditable_resource_diagram?: boolean;\r\n\tresource_store?: {\r\n\t\ttype?: \"treeDataStore\"|\"dataStore\"|string;\r\n\t\tfetchTasks?: boolean;\r\n\t\tinitItem?: (item: any) => any;\r\n\t};\r\n\tlightbox_resources?: (resources: any[]) => any[];\r\n\r\n}\r\n\r\ninterface IGanttConfig {\r\n\tlayout: ILayout;\r\n\tlinks: {\r\n\t\tfinish_to_start: \"0\";\r\n\t\tstart_to_start: \"1\";\r\n\t\tfinish_to_finish: \"2\";\r\n\t\tstart_to_finish: \"3\";\r\n\t};\r\n\ttypes: {\r\n\t\ttask: string;\r\n\t\tproject: string;\r\n\t\tmilestone: string;\r\n\t};\r\n\tauto_types: boolean;\r\n\tduration_unit: DurationUnits;\r\n\twork_time: boolean;\r\n\tcorrect_work_time: boolean;\r\n\tdeadlines: boolean;\r\n\tskip_off_time: boolean;\r\n\tcascade_delete: boolean;\r\n\tautosize: boolean | string;\r\n\tautoscroll: boolean;\r\n\tshow_links: boolean;\r\n\tshow_task_cells: boolean;\r\n\tautosize_min_width: number;\r\n\tautoscroll_speed: number;\r\n\tdeepcopy_on_parse: boolean;\r\n\tstatic_background: boolean;\r\n\tstatic_background_cells: boolean;\r\n\tbranch_loading: boolean;\r\n\tbranch_loading_property: string;\r\n\tshow_loading: boolean;\r\n\tshow_chart: boolean;\r\n\tshow_grid: boolean;\r\n\tmin_duration: number;\r\n\tdate_format: string; // use instead xml_date\r\n\txml_date?: string; // deprecated\r\n\tstart_on_monday: boolean;\r\n\tserver_utc: boolean;\r\n\tshow_progress: boolean;\r\n\tfit_tasks: boolean;\r\n\tselect_task: boolean;\r\n\tscroll_on_click: boolean;\r\n\tsmart_rendering: boolean;\r\n\tpreserve_scroll: boolean;\r\n\treadonly: boolean;\r\n\tcontainer_resize_timeout: number;\r\n\r\n\t/*grid */\r\n\tdate_grid: string;\r\n\r\n\tdrag_links: boolean;\r\n\tdrag_progress: boolean;\r\n\tdrag_resize: boolean;\r\n\tdrag_project: boolean;\r\n\tdrag_move: boolean;\r\n\tdrag_mode: {\r\n\t\tresize: \"resize\",\r\n\t\tprogress: \"progress\",\r\n\t\tmove: \"move\",\r\n\t\tignore: \"ignore\"\r\n\t};\r\n\tround_dnd_dates: boolean;\r\n\tlink_wrapper_width: number;\r\n\troot_id: string | number;\r\n\r\n\tlink_arrow_size:number;\r\n\r\n\tautofit: boolean;\r\n\tcolumns: IColumnItem[];\r\n\r\n\t/* scale*/\r\n\t/* it will be deprecated */\r\n\tdate_scale?: string;\r\n\tstep?: number;\r\n\tscale_unit?: DurationUnits;\r\n\tsubscales?: IScale[];\r\n\t/* it will be deprecated end */\r\n\r\n\tscales: IScale[];\r\n\r\n\tscale_offset_minimal: boolean;\r\n\r\n\tinherit_scale_class: boolean;\r\n\r\n\r\n\ttime_step: number;\r\n\tduration_step: number;\r\n\r\n\r\n\ttask_date: string;\r\n\ttime_picker: string;\r\n\ttask_attribute: string;\r\n\tlink_attribute: string;\r\n\tlayer_attribute: string;\r\n\tbuttons_left: string[];\r\n\t_migrate_buttons: {\r\n\t\tdhx_save_btn: \"gantt_save_btn\",\r\n\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\r\n\t\tdhx_delete_btn: \"gantt_delete_btn\"\r\n\t};\r\n\r\n\tbuttons_right: string[];\r\n\r\n\r\n\tlightbox: {\r\n\t\tsections?: LightboxSection,\r\n\t\tproject_sections?: LightboxSection,\r\n\t\tmilestone_sections?: LightboxSection\r\n\t};\r\n\tdrag_lightbox: boolean;\r\n\tsort: boolean;\r\n\tdetails_on_create: boolean;\r\n\tdetails_on_dblclick: boolean;\r\n\tinitial_scroll: boolean;\r\n\ttask_scroll_offset: number;\r\n\r\n\torder_branch: boolean;\r\n\torder_branch_free: boolean;\r\n\r\n\t// task_height is deprecated, use 'bar_height` instead\r\n\ttask_height: number | \"full\" | undefined;\r\n\tbar_height: number | \"full\";\r\n\tmin_column_width: number;\r\n\tbar_height_padding: number,\r\n\trow_height: number,\r\n\r\n\t// min width for grid column (when resizing)\r\n\tmin_grid_column_width: number;\r\n\t// name of the attribute with column index for resize element\r\n\tgrid_resizer_column_attribute: string;\r\n\t// name of the attribute with column index for resize element\r\n\t// grid_resizer_attribute: string; // usage of this parameter is not found\r\n\r\n\t// grid width can be increased after the column has been resized\r\n\tkeep_grid_width: boolean;\r\n\r\n\t// grid width can be adjusted\r\n\tgrid_resize: boolean;\r\n\tgrid_elastic_columns: boolean;\r\n\tshow_tasks_outside_timescale: boolean;\r\n\tshow_unscheduled: boolean;\r\n\treadonly_property: string;\r\n\teditable_property: string;\r\n\tcalendar_property: string;\r\n\tresource_calendars: object;\r\n\tdynamic_resource_calendars: boolean;\r\n\tinherit_calendar: boolean;\r\n\ttype_renderers: object;\r\n\r\n\tresize_rows: boolean;\r\n\t// name of the attribute with row index for resize element\r\n\ttask_grid_row_resizer_attribute: string;\r\n\t// min height for row (when resizing)\r\n\tmin_task_grid_row_height: number;\r\n\r\n\topen_tree_initially: boolean;\r\n\toptimize_render: boolean;\r\n\tprevent_default_scroll: boolean;\r\n\tshow_errors: boolean;\r\n\twai_aria_attributes: boolean;\r\n\tsmart_scales: boolean;\r\n\trtl: boolean;\r\n\tplaceholder_task: boolean | object;\r\n\thorizontal_scroll_key: TModifierKeys;\r\n\tdrag_timeline: {\r\n\t\tuseKey: TModifierKeys;\r\n\t\tignore: string;\r\n\t\trender?: boolean;\r\n\t};\r\n\tdrag_multiple: boolean;\r\n\tcsp: TCsp;\r\n\r\n\tresources?: IResourceConfig;\r\n}\r\n\r\nexport default () => {\r\n\tconst result: IGanttConfig = {\r\n\t\tlayout: {\r\n\t\t\tcss: \"gantt_container\",\r\n\t\t\trows: [\r\n\t\t\t\t{\r\n\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t{view: \"grid\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\r\n\t\t\t\t\t\t{resizer: true, width: 1},\r\n\t\t\t\t\t\t{view: \"timeline\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\r\n\t\t\t\t\t\t{view: \"scrollbar\", id: \"scrollVer\"}\r\n\t\t\t\t\t]\r\n\t\t\t\t},\r\n\t\t\t\t{view: \"scrollbar\", id: \"scrollHor\", height: 20}\r\n\t\t\t]\r\n\t\t},\r\n\t\tlinks: {\r\n\t\t\tfinish_to_start: \"0\",\r\n\t\t\tstart_to_start: \"1\",\r\n\t\t\tfinish_to_finish: \"2\",\r\n\t\t\tstart_to_finish: \"3\"\r\n\t\t},\r\n\t\ttypes: {\r\n\t\t\ttask: \"task\",\r\n\t\t\tproject: \"project\",\r\n\t\t\tmilestone: \"milestone\"\r\n\t\t},\r\n\t\tauto_types: false,\r\n\t\tduration_unit: \"day\",\r\n\t\twork_time: false,\r\n\t\tcorrect_work_time: false,\r\n\t\tskip_off_time: false,\r\n\r\n\t\tcascade_delete: true,\r\n\r\n\t\tautosize: false,\r\n\t\tautosize_min_width: 0,\r\n\t\tautoscroll: true,\r\n\t\tautoscroll_speed: 30,\r\n\t\tdeepcopy_on_parse: false,\r\n\t\tshow_links: true,\r\n\t\tshow_task_cells: true,\r\n\t\t// replace backgroung of the task area with a canvas img\r\n\t\tstatic_background: false,\r\n\t\tstatic_background_cells: true,\r\n\t\tbranch_loading: false,\r\n\t\tbranch_loading_property: \"$has_child\",\r\n\t\tshow_loading: false,\r\n\t\tshow_chart: true,\r\n\t\tshow_grid: true,\r\n\t\tmin_duration: 60 * 60 * 1000,\r\n\t\tdate_format: \"%d-%m-%Y %H:%i\", // use instead xml_date\r\n\t\txml_date: undefined, // \"%d-%m-%Y %H:%i\", // deprecated\r\n\t\tstart_on_monday: true,\r\n\t\tserver_utc: false,\r\n\t\tshow_progress: true,\r\n\t\tfit_tasks: false,\r\n\t\tselect_task: true,\r\n\t\tscroll_on_click: true,\r\n\t\tsmart_rendering: true,\r\n\t\tpreserve_scroll: true,\r\n\t\treadonly: false,\r\n\t\tcontainer_resize_timeout: 20,\r\n\t\tdeadlines: true,\r\n\r\n\t\t/*grid */\r\n\t\tdate_grid: \"%Y-%m-%d\",\r\n\r\n\t\tdrag_links: true,\r\n\t\tdrag_progress: true,\r\n\t\tdrag_resize: true,\r\n\t\tdrag_project: false,\r\n\t\tdrag_move: true,\r\n\t\tdrag_mode: {\r\n\t\t\tresize: \"resize\",\r\n\t\t\tprogress: \"progress\",\r\n\t\t\tmove: \"move\",\r\n\t\t\tignore: \"ignore\"\r\n\t\t},\r\n\t\tround_dnd_dates: true,\r\n\t\tlink_wrapper_width: 20,\r\n\t\tlink_arrow_size:12,\r\n\t\troot_id: 0,\r\n\r\n\t\tautofit: false, // grid column automatic fit grid_width config\r\n\t\tcolumns: [\r\n\t\t\t{name: \"text\", tree: true, width: \"*\", resize: true},\r\n\t\t\t{name: \"start_date\", align: \"center\", resize: true},\r\n\t\t\t{name: \"duration\", align: \"center\"},\r\n\t\t\t{name: \"add\", width: 44}\r\n\t\t],\r\n\r\n\t\t/*scale*/\r\n\r\n\t\tscale_offset_minimal: true,\r\n\t\tinherit_scale_class: false,\r\n\r\n\t\tscales: [\r\n\t\t\t{\r\n\t\t\t\tunit: \"day\",\r\n\t\t\t\tstep: 1,\r\n\t\t\t\tdate: \"%d %M\"\r\n\t\t\t}\r\n\t\t],\r\n// \t\tdate_scale: \"%d %M\",\r\n\r\n\t\ttime_step: 60,\r\n\t\tduration_step: 1,\r\n\t\ttask_date: \"%d %F %Y\",\r\n\t\ttime_picker: \"%H:%i\",\r\n\t\ttask_attribute: \"data-task-id\",\r\n\t\tlink_attribute: \"data-link-id\",\r\n\t\tlayer_attribute: \"data-layer\",\r\n\t\tbuttons_left: [\r\n\t\t\t\"gantt_save_btn\",\r\n\t\t\t\"gantt_cancel_btn\"\r\n\t\t],\r\n\t\t_migrate_buttons: {\r\n\t\t\tdhx_save_btn: \"gantt_save_btn\",\r\n\t\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\r\n\t\t\tdhx_delete_btn: \"gantt_delete_btn\"\r\n\t\t},\r\n\t\tbuttons_right: [\r\n\t\t\t\"gantt_delete_btn\"\r\n\t\t],\r\n\t\tlightbox: {\r\n\t\t\tsections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"time\", type: \"duration\", map_to: \"auto\"}\r\n\t\t\t],\r\n\t\t\tproject_sections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\r\n\t\t\t\t{name: \"time\", type: \"duration\", readonly: true, map_to: \"auto\"}\r\n\t\t\t],\r\n\t\t\tmilestone_sections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\r\n\t\t\t\t{name: \"time\", type: \"duration\", single_date: true, map_to: \"auto\"}\r\n\t\t\t]\r\n\t\t},\r\n\t\tdrag_lightbox: true,\r\n\t\tsort: false,\r\n\t\tdetails_on_create: true,\r\n\t\tdetails_on_dblclick: true,\r\n\t\tinitial_scroll: true,\r\n\t\ttask_scroll_offset: 100,\r\n\r\n\t\torder_branch: false,\r\n\t\torder_branch_free: false,\r\n\r\n\t\t// task height is deprecated, use 'bar_height' instead\r\n\t\ttask_height: undefined,// number px of 'full' for row height\r\n\t\tbar_height: \"full\",\r\n\t\tbar_height_padding:9,\r\n\t\tmin_column_width: 70,\r\n\r\n\t\t// min width for grid column (when resizing)\r\n\t\tmin_grid_column_width: 70,\r\n\t\t// name of the attribute with column index for resize element\r\n\t\tgrid_resizer_column_attribute: \"data-column-index\",\r\n\t\t// name of the attribute with column index for resize element\r\n\t\t// grid_resizer_attribute: \"grid_resizer\", // - usage of this parameter is not found in code\r\n\r\n\t\t// grid width can be increased after the column has been resized\r\n\t\tkeep_grid_width: false,\r\n\r\n\t\t// grid width can be adjusted\r\n\t\tgrid_resize: false,\r\n\t\tgrid_elastic_columns: false,\r\n\t\tshow_tasks_outside_timescale: false,\r\n\t\tshow_unscheduled: true,\r\n\r\n\t\tresize_rows: false,\r\n\t\t// name of the attribute with row index for resize element\r\n\t\ttask_grid_row_resizer_attribute: \"data-row-index\",\r\n\t\t// min height for row (when resizing)\r\n\t\tmin_task_grid_row_height: 30,\r\n\t\trow_height: 36,\r\n\r\n\t\t//\r\n\t\treadonly_property: \"readonly\",\r\n\t\teditable_property: \"editable\",\r\n\t\tcalendar_property: \"calendar_id\",\r\n\t\tresource_calendars: {},\r\n\t\tdynamic_resource_calendars: false,\r\n\t\tinherit_calendar: false,\r\n\t\ttype_renderers: {},\r\n\r\n\t\topen_tree_initially: false,\r\n\t\toptimize_render: true,\r\n\t\tprevent_default_scroll: false,\r\n\t\tshow_errors: true,\r\n\t\twai_aria_attributes: true,\r\n\t\tsmart_scales: true,\r\n\t\trtl:false,\r\n\t\tplaceholder_task: false,\r\n\t\thorizontal_scroll_key: \"shiftKey\",\r\n\t\tdrag_timeline: {\r\n\t\t\tuseKey: undefined,\r\n\t\t\tignore: \".gantt_task_line, .gantt_task_link\",\r\n\t\t\trender: false\r\n\t\t},\r\n\t\tdrag_multiple: true,\r\n\t\tcsp: \"auto\"\r\n\t};\r\n\treturn result;\r\n};\r\n","/* eslint-disable no-restricted-globals */\r\nvar isWindowAwailable = typeof window !== \"undefined\";\r\n\r\n/* eslint-enable no-restricted-globals */\r\n\r\nexport default {\r\n\tisIE: isWindowAwailable && (navigator.userAgent.indexOf(\"MSIE\") >= 0 || navigator.userAgent.indexOf(\"Trident\") >= 0),\r\n\tisIE6: isWindowAwailable && (!XMLHttpRequest && navigator.userAgent.indexOf(\"MSIE\") >= 0),\r\n\tisIE7: isWindowAwailable && (navigator.userAgent.indexOf(\"MSIE 7.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") < 0),\r\n\tisIE8: isWindowAwailable && (navigator.userAgent.indexOf(\"MSIE 8.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") >= 0),\r\n\tisOpera: isWindowAwailable && (navigator.userAgent.indexOf(\"Opera\") >= 0),\r\n\tisChrome: isWindowAwailable && (navigator.userAgent.indexOf(\"Chrome\") >= 0),\r\n\tisKHTML: isWindowAwailable && (navigator.userAgent.indexOf(\"Safari\") >= 0 || navigator.userAgent.indexOf(\"Konqueror\") >= 0),\r\n\tisFF: isWindowAwailable && (navigator.userAgent.indexOf(\"Firefox\") >= 0),\r\n\tisIPad: isWindowAwailable && (navigator.userAgent.search(/iPad/gi) >= 0),\r\n\tisEdge: isWindowAwailable && (navigator.userAgent.indexOf(\"Edge\")!=-1),\r\n\tisNode: (!isWindowAwailable || typeof navigator == \"undefined\" || (typeof PRODUCTION !== \"undefined\" && PRODUCTION === \"test\"))\r\n};\r\n","export default function serialize(data: object | string) {\r\n\tif (typeof data === \"string\" || typeof data === \"number\") {\r\n\t\treturn data;\r\n\t}\r\n\r\n\tlet result = \"\";\r\n\r\n\tfor (const key in data) {\r\n\t\tlet serialized = \"\";\r\n\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\tif (typeof data[key] === \"string\") {\r\n\t\t\t\tserialized = encodeURIComponent(data[key]);\r\n\t\t\t} else if (typeof data[key] === \"number\") {\r\n\t\t\t\tserialized = String(data[key]);\r\n\t\t\t} else {\r\n\t\t\t\tserialized = encodeURIComponent(JSON.stringify(data[key]));\r\n\t\t\t}\r\n\t\t\tserialized = key + \"=\" + serialized;\r\n\r\n\t\t\tif (result.length) {\r\n\t\t\t\tserialized = \"&\" + serialized;\r\n\t\t\t}\r\n\t\t\tresult += serialized;\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n","import env from \"../../utils/env\";\r\nimport global from \"../../utils/global\";\r\nimport serialize from \"./serialize\";\r\n\r\nfunction createConfig(method, args) {\r\n\tvar result = {\r\n\t\tmethod: method\r\n\t};\r\n\r\n\tif (args.length === 0) {\r\n\t\tthrow new Error(\"Arguments list of query is wrong.\");\r\n\t}\r\n\tif (args.length === 1) {\r\n\t\tif (typeof args[0] === \"string\") {\r\n\t\t\tresult.url = args[0];\r\n\t\t\tresult.async = true;\r\n\t\t} else {\r\n\t\t\tresult.url = args[0].url;\r\n\t\t\tresult.async = (args[0].async || true);\r\n\t\t\tresult.callback = args[0].callback;\r\n\t\t\tresult.headers = args[0].headers;\r\n\t\t}\r\n\t\tif (method === \"POST\" || \"PUT\") {\r\n\t\t\tif (args[0].data) {\r\n\t\t\t\tif (typeof args[0].data !== \"string\") {\r\n\t\t\t\t\tresult.data = serialize(args[0].data);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.data = args[0].data;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult.data = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tresult.url = args[0];\r\n\tswitch(method) {\r\n\t\tcase \"GET\":\r\n\t\tcase \"DELETE\":\r\n\t\t\tresult.callback = args[1];\r\n\t\t\tresult.headers = args[2];\r\n\t\tbreak;\r\n\t\tcase \"POST\":\r\n\t\tcase \"PUT\":\r\n\t\t\tif (args[1]) {\r\n\t\t\t\tif (typeof args[1] !== \"string\") {\r\n\t\t\t\t\tresult.data = serialize(args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.data = args[1];\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult.data = \"\";\r\n\t\t\t}\r\n\t\t\tresult.callback = args[2];\r\n\t\t\tresult.headers = args[3];\r\n\t\tbreak;\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nexport default function(gantt) {\r\n\treturn {\r\n\r\n\t\t// if false - dhxr param will added to prevent caching on client side (default),\r\n\t\t// if true - do not add extra params\r\n\t\tcache: true,\r\n\r\n\t\t// default method for load/loadStruct, post/get allowed\r\n\t\t// get - since 4.1.1, this should fix 412 error for macos safari\r\n\t\tmethod: \"get\",\r\n\r\n\t\tparse: function(data) {\r\n\t\t\tif (typeof data !== \"string\") return data;\r\n\r\n\t\t\tvar obj;\r\n\t\t\tdata = data.replace(/^[\\s]+/,\"\");\r\n\t\t\tif (typeof DOMParser !== \"undefined\" && !env.isIE) { // ff,ie9\r\n\t\t\t\tobj = (new DOMParser()).parseFromString(data, \"text/xml\");\r\n\t\t\t} else if (typeof global.ActiveXObject !== \"undefined\") {\r\n\t\t\t\tobj = new global.ActiveXObject(\"Microsoft.XMLDOM\");\r\n\t\t\t\tobj.async = \"false\";\r\n\t\t\t\tobj.loadXML(data);\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t},\r\n\t\txmltop: function(tagname, xhr, obj) {\r\n\t\t\tif (typeof xhr.status == \"undefined\" || xhr.status < 400) {\r\n\t\t\t\tvar xml = (!xhr.responseXML) ? this.parse(xhr.responseText || xhr) : (xhr.responseXML || xhr);\r\n\t\t\t\tif (xml && xml.documentElement !== null && !xml.getElementsByTagName(\"parsererror\").length) {\r\n\t\t\t\t\treturn xml.getElementsByTagName(tagname)[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (obj !== -1) gantt.callEvent(\"onLoadXMLError\",[\"Incorrect XML\", arguments[1], obj]);\r\n\t\t\treturn document.createElement(\"DIV\");\r\n\t\t},\r\n\t\txpath: function(xpathExp, docObj) {\r\n\t\t\tif (!docObj.nodeName) docObj = docObj.responseXML || docObj;\r\n\t\t\tif (env.isIE) {\r\n\t\t\t\treturn docObj.selectNodes(xpathExp)||[];\r\n\t\t\t} else {\r\n\t\t\t\tvar rows = [];\r\n\t\t\t\tvar first;\r\n\t\t\t\tvar col = (docObj.ownerDocument||docObj).evaluate(xpathExp, docObj, null, XPathResult.ANY_TYPE, null);\r\n\r\n\t\t\t\twhile (true){\r\n\t\t\t\t\tfirst = col.iterateNext();\r\n\t\t\t\t\tif(first){\r\n\t\t\t\t\t\trows.push(first);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn rows;\r\n\t\t\t}\r\n\t\t},\r\n\t\tquery: function(config) {\r\n\t\t\treturn this._call(\r\n\t\t\t\t(config.method || \"GET\"),\r\n\t\t\t\tconfig.url,\r\n\t\t\t\tconfig.data || \"\",\r\n\t\t\t\t(config.async || true),\r\n\t\t\t\tconfig.callback,\r\n\t\t\t\tconfig.headers\r\n\t\t\t);\r\n\t\t},\r\n\t\tget: function(url, onLoad, headers) {\r\n\t\t\tvar config = createConfig(\"GET\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tgetSync: function(url, headers) {\r\n\t\t\tvar config = createConfig(\"GET\", arguments);\r\n\t\t\tconfig.async = false;\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tput: function(url, postData, onLoad, headers) {\r\n\t\t\tvar config = createConfig(\"PUT\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tdel: function(url, onLoad, headers) {\r\n\t\t\t/**\r\n\t\t\t * https://tools.ietf.org/html/rfc7231#section-4.3.5\r\n\t\t\t * A payload within a DELETE request message has no defined semantics;\r\n\t\t\t * sending a payload body on a DELETE request might cause some existing\r\n\t\t\t * implementations to reject the request.\r\n\t\t\t */\r\n\t\t\tvar config = createConfig(\"DELETE\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tpost: function(url, postData, onLoad, headers) {\r\n\t\t\tif (arguments.length == 1) {\r\n\t\t\t\tpostData = \"\";\r\n\t\t\t} else if (arguments.length == 2 && typeof(postData) == \"function\") {\r\n\t\t\t\tonLoad = postData;\r\n\t\t\t\tpostData = \"\";\r\n\t\t\t}\r\n\t\t\tvar config = createConfig(\"POST\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tpostSync: function(url, postData, headers) {\r\n\t\t\tpostData = (postData === null ? \"\" : String(postData));\r\n\r\n\t\t\tvar config = createConfig(\"POST\", arguments);\r\n\t\t\tconfig.async = false;\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\t_call: function(method, url, postData, async, onLoad, headers) {\r\n\t\t\treturn new gantt.Promise(function(resolve, reject) {\r\n\t\t\t\tvar t = (typeof XMLHttpRequest !== undefined ? new XMLHttpRequest() : new global.ActiveXObject(\"Microsoft.XMLHTTP\"));\r\n\t\t\t\tvar isQt = (navigator.userAgent.match(/AppleWebKit/) !== null && navigator.userAgent.match(/Qt/) !== null && navigator.userAgent.match(/Safari/) !== null);\r\n\r\n\t\t\t\tif (!!async) {\r\n\t\t\t\t\tt.onreadystatechange = function() {\r\n\t\t\t\t\t\tif ((t.readyState == 4) || (isQt && t.readyState == 3)) { // what for long response and status 404?\r\n\t\t\t\t\t\t\tif (t.status != 200 || t.responseText === \"\")\r\n\t\t\t\t\t\t\t\tif (!gantt.callEvent(\"onAjaxError\", [t])) return;\r\n\r\n\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\tif (typeof(onLoad) == \"function\") {\r\n\t\t\t\t\t\t\t\t\tonLoad.apply(global, [{xmlDoc:t, filePath:url}]); // dhtmlx-compat, response.xmlDoc.responseXML/responseText\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tresolve(t);\r\n\t\t\t\t\t\t\t\tif (typeof(onLoad) == \"function\") {\r\n\t\t\t\t\t\t\t\t\tonLoad = null;\r\n\t\t\t\t\t\t\t\t\tt = null;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}, 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar noCache = !this || !this.cache;\r\n\t\t\t\tif (method == \"GET\" && noCache) {\r\n\t\t\t\t\turl += (url.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime()+\"=1\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tt.open(method, url, async);\r\n\r\n\t\t\t\tif (headers){\r\n\t\t\t\t\tfor (var key in headers)\r\n\t\t\t\t\t\tt.setRequestHeader(key, headers[key]);\r\n\t\t\t\t} else if (method.toUpperCase() == \"POST\" || method == \"PUT\" || method == \"DELETE\") {\r\n\t\t\t\t\tt.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n\t\t\t\t} else if (method == \"GET\") {\r\n\t\t\t\t\tpostData = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tt.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\r\n\t\t\t\tt.send(postData);\r\n\r\n\t\t\t\tif (!async) return {xmlDoc:t, filePath:url}; // dhtmlx-compat, response.xmlDoc.responseXML/responseText\r\n\t\t\t});\r\n\t\t},\r\n\t\turlSeparator: function(str){\r\n\t\t\tif (str.indexOf(\"?\") != -1)\r\n\t\t\t\treturn \"&\";\r\n\t\t\telse\r\n\t\t\t\treturn \"?\";\r\n\t\t}\r\n\t};\r\n};\r\n","const dateToStr = (format: string, utc: boolean, gantt) => {\r\n\tformat = format.replace(/%[a-zA-Z]/g, (a) => {\r\n\t\tswitch (a) {\r\n\t\t\tcase \"%d\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Date())+\"`;\r\n\t\t\tcase \"%m\":\r\n\t\t\t\treturn `\"+to_fixed((date.get${utc?\"UTC\":\"\"}Month()+1))+\"`;\r\n\t\t\tcase \"%j\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}Date()+\"`;\r\n\t\t\tcase \"%n\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Month()+1)+\"`;\r\n\t\t\tcase \"%y\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}FullYear()%100)+\"`;\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}FullYear()+\"`;\r\n\t\t\tcase \"%D\":\r\n\t\t\t\treturn `\"+locale.date.day_short[date.get${utc?\"UTC\":\"\"}Day()]+\"`;\r\n\t\t\tcase \"%l\":\r\n\t\t\t\treturn `\"+locale.date.day_full[date.get${utc?\"UTC\":\"\"}Day()]+\"`;\r\n\t\t\tcase \"%M\":\r\n\t\t\t\treturn `\"+locale.date.month_short[date.get${utc?\"UTC\":\"\"}Month()]+\"`;\r\n\t\t\tcase \"%F\":\r\n\t\t\t\treturn `\"+locale.date.month_full[date.get${utc?\"UTC\":\"\"}Month()]+\"`;\r\n\t\t\tcase \"%h\":\r\n\t\t\t\treturn `\"+to_fixed((date.get${utc?\"UTC\":\"\"}Hours()+11)%12+1)+\"`;\r\n\t\t\tcase \"%g\":\r\n\t\t\t\treturn `\"+((date.get${utc?\"UTC\":\"\"}Hours()+11)%12+1)+\"`;\r\n\t\t\tcase \"%G\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}Hours()+\"`;\r\n\t\t\tcase \"%H\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Hours())+\"`;\r\n\t\t\tcase \"%i\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Minutes())+\"`;\r\n\t\t\tcase \"%a\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Hours()>11?\"pm\":\"am\")+\"`;\r\n\t\t\tcase \"%A\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Hours()>11?\"PM\":\"AM\")+\"`;\r\n\t\t\tcase \"%s\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Seconds())+\"`;\r\n\t\t\tcase \"%W\":\r\n\t\t\t\treturn `\"+to_fixed(getISOWeek(date))+\"`;\r\n\t\t\tcase \"%w\":\r\n\t\t\t\treturn `\"+to_fixed(getWeek(date))+\"`;\r\n\t\t\tdefault:\r\n\t\t\t\treturn a;\r\n\t\t}\r\n\t});\r\n\r\n\t// tslint:disable-next-line: function-constructor\r\n\tconst dateToStrFn = new Function(\"date\", \"to_fixed\", \"locale\", \"getISOWeek\", \"getWeek\", `return \"${format}\";`);\r\n\r\n\treturn (date: Date) => {\r\n\t\treturn dateToStrFn(date, gantt.date.to_fixed, gantt.locale, gantt.date.getISOWeek, gantt.date.getWeek);\r\n\t};\r\n};\r\n\r\n\r\nconst strToDate = (format: string, utc: boolean, gantt:any) => {\r\n\tlet splt = \"var temp=date.match(/[a-zA-Z]+|[0-9]+/g);\";\r\n\tconst mask = format.match(/%[a-zA-Z]/g);\r\n\tfor (let i = 0; i < mask.length; i++) {\r\n\t\tswitch (mask[i]) {\r\n\t\t\tcase \"%j\":\r\n\t\t\tcase \"%d\":\r\n\t\t\t\tsplt += `set[2]=temp[${i}]||1;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%n\":\r\n\t\t\tcase \"%m\":\r\n\t\t\t\tsplt += `set[1]=(temp[${i}]||1)-1;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%y\":\r\n\t\t\t\tsplt += `set[0]=temp[${i}]*1+(temp[${i}]>50?1900:2000);`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%g\":\r\n\t\t\tcase \"%G\":\r\n\t\t\tcase \"%h\":\r\n\t\t\tcase \"%H\":\r\n\t\t\t\tsplt += `set[3]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%i\":\r\n\t\t\t\tsplt += `set[4]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\tsplt += `set[0]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%a\":\r\n\t\t\tcase \"%A\":\r\n\t\t\t\tsplt += `set[3]=set[3]%12+((temp[${i}]||'').toLowerCase()=='am'?0:12);`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%s\":\r\n\t\t\t\tsplt += `set[5]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%M\":\r\n\t\t\t\tsplt += `set[1]=locale.date.month_short_hash[temp[${i}]]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%F\":\r\n\t\t\t\tsplt += `set[1]=locale.date.month_full_hash[temp[${i}]]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tlet code = \"set[0],set[1],set[2],set[3],set[4],set[5]\";\r\n\tif (utc) { code = ` Date.UTC(${code})`; }\r\n\t// tslint:disable-next-line: function-constructor\r\n\tconst strToDateFn = new Function(\"date\", \"locale\", `var set=[0,0,1,0,0,0]; ${splt} return new Date(${code});`);\r\n\r\n\treturn (dateString) => {\r\n\t\treturn strToDateFn(dateString, gantt.locale);\r\n\t};\r\n};\r\n\r\nconst fastVersion = {\r\n\tdate_to_str: dateToStr,\r\n\tstr_to_date: strToDate\r\n};\r\n\r\nexport default fastVersion;","const dateToStr = (format: string, utc: boolean, gantt) => {\r\n\treturn (date) => {\r\n\t\treturn format.replace(/%[a-zA-Z]/g, (a) => {\r\n\t\t\tswitch (a) {\r\n\t\t\t\tcase \"%d\": return utc ? gantt.date.to_fixed(date.getUTCDate()) : gantt.date.to_fixed(date.getDate());\r\n\t\t\t\tcase \"%m\": return utc ? gantt.date.to_fixed((date.getUTCMonth() + 1)) : gantt.date.to_fixed((date.getMonth() + 1));\r\n\t\t\t\tcase \"%j\": return utc ? date.getUTCDate() : date.getDate();\r\n\t\t\t\tcase \"%n\": return utc ? (date.getUTCMonth() + 1) : (date.getMonth() + 1);\r\n\t\t\t\tcase \"%y\": return utc ? gantt.date.to_fixed(date.getUTCFullYear() % 100) : gantt.date.to_fixed(date.getFullYear() % 100);\r\n\t\t\t\tcase \"%Y\": return utc ? date.getUTCFullYear() : date.getFullYear();\r\n\t\t\t\tcase \"%D\": return utc ? gantt.locale.date.day_short[date.getUTCDay()] : gantt.locale.date.day_short[date.getDay()];\r\n\t\t\t\tcase \"%l\": return utc ? gantt.locale.date.day_full[date.getUTCDay()] : gantt.locale.date.day_full[date.getDay()];\r\n\t\t\t\tcase \"%M\": return utc ? gantt.locale.date.month_short[date.getUTCMonth()] : gantt.locale.date.month_short[date.getMonth()];\r\n\t\t\t\tcase \"%F\": return utc ? gantt.locale.date.month_full[date.getUTCMonth()] : gantt.locale.date.month_full[date.getMonth()];\r\n\t\t\t\tcase \"%h\": return utc ? gantt.date.to_fixed((date.getUTCHours() + 11) % 12 + 1) : gantt.date.to_fixed((date.getHours() + 11) % 12 + 1);\r\n\t\t\t\tcase \"%g\": return utc ? ((date.getUTCHours() + 11) % 12 + 1) : ((date.getHours() + 11) % 12 + 1);\r\n\t\t\t\tcase \"%G\": return utc ? date.getUTCHours() : date.getHours();\r\n\t\t\t\tcase \"%H\": return utc ? gantt.date.to_fixed(date.getUTCHours()) : gantt.date.to_fixed(date.getHours());\r\n\t\t\t\tcase \"%i\": return utc ? gantt.date.to_fixed(date.getUTCMinutes()) : gantt.date.to_fixed(date.getMinutes());\r\n\t\t\t\tcase \"%a\": return utc ? (date.getUTCHours() > 11 ? \"pm\" : \"am\") : (date.getHours() > 11 ? \"pm\" : \"am\");\r\n\t\t\t\tcase \"%A\": return utc ? (date.getUTCHours() > 11 ? \"PM\" : \"AM\") : (date.getHours() > 11 ? \"PM\" : \"AM\");\r\n\t\t\t\tcase \"%s\": return utc ? gantt.date.to_fixed(date.getUTCSeconds()) : gantt.date.to_fixed(date.getSeconds());\r\n\t\t\t\tcase \"%W\": return utc ? gantt.date.to_fixed(gantt.date.getUTCISOWeek(date)) : gantt.date.to_fixed(gantt.date.getISOWeek(date));\r\n\t\t\t\tdefault: return a;\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n};\r\nconst strToDate = (format: string, utc: boolean, gantt:any) => {\r\n\treturn (date: string) => {\r\n\t\tconst set: Array = [0, 0, 1, 0, 0, 0];\r\n\t\tconst temp = date.match(/[a-zA-Z]+|[0-9]+/g);\r\n\t\tconst mask = format.match(/%[a-zA-Z]/g);\r\n\r\n\t\tfor (let i = 0; i < mask.length; i++) {\r\n\t\t\tswitch (mask[i]) {\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\tcase \"%d\":\r\n\t\t\t\t\tset[2] = temp[i] as unknown as number || 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%n\":\r\n\t\t\t\tcase \"%m\":\r\n\t\t\t\t\tset[1] = (temp[i] as unknown as number || 1) - 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%y\":\r\n\t\t\t\t\tset[0] = temp[i] as unknown as number * 1 + ((temp[i] as unknown as number) > 50 ? 1900 : 2000);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\tcase \"%h\":\r\n\t\t\t\tcase \"%H\":\r\n\t\t\t\t\tset[3] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%i\":\r\n\t\t\t\t\tset[4] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%Y\":\r\n\t\t\t\t\tset[0] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%a\":\r\n\t\t\t\tcase \"%A\":\r\n\t\t\t\t\tset[3] = set[3] as number % 12 + ((temp[i] || \"\").toLowerCase() === \"am\" ? 0 : 12);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%s\":\r\n\t\t\t\t\tset[5] = temp[i] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%M\":\r\n\t\t\t\t\tset[1] = gantt.locale.date.month_short_hash[temp[i]] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%F\":\r\n\t\t\t\t\tset[1] = gantt.locale.date.month_full_hash[temp[i]] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (utc) {\r\n\t\t\treturn new Date(Date.UTC(\r\n\t\t\t\tset[0] as number,\r\n\t\t\t\tset[1] as number,\r\n\t\t\t\tset[2] as number,\r\n\t\t\t\tset[3] as number,\r\n\t\t\t\tset[4] as number,\r\n\t\t\t\tset[5] as number\r\n\t\t\t));\r\n\t\t}\r\n\t\treturn new Date(\r\n\t\t\tset[0] as number,\r\n\t\t\tset[1] as number,\r\n\t\t\tset[2] as number,\r\n\t\t\tset[3] as number,\r\n\t\t\tset[4] as number,\r\n\t\t\tset[5] as number\r\n\t\t);\r\n\t};\r\n\r\n};\r\n\r\n\r\nconst cspVersion = {\r\n\tdate_to_str: dateToStr,\r\n\tstr_to_date: strToDate\r\n};\r\n\r\nexport default cspVersion;","/*\r\n %d - the day as a number with a leading zero ( 01 to 31 );\r\n %j - the day as a number without a leading zero ( 1 to 31 );\r\n %D - the day as an abbreviation ( Sun to Sat );\r\n %l - the day as a full name ( Sunday to Saturday );\r\n %W - the ISO-8601 week number of the year. Weeks start on Monday; 1)\r\n %m - the month as a number without a leading zero ( 1 to 12 );\r\n %n - the month as a number with a leading zero ( 01 to 12);\r\n %M - the month as an abbreviation ( Jan to Dec );\r\n %F - the month as a full name ( January to December );\r\n %y - the year as a two-digit number ( 00 to 99 );\r\n %Y - the year as a four-digit number ( 1900–9999 );\r\n %h - the hour based on the 12-hour clock ( 00 to 11 );\r\n %H - the hour based on the 24-hour clock ( 00 to 23 );\r\n %i - the minute as a number with a leading zero ( 00 to 59 );\r\n %s - the second as a number without a leading zero ( 00 to 59 ); 2)\r\n %a - displays am (for times from midnight until noon) and pm (for times from noon until midnight);\r\n %A - displays AM (for times from midnight until noon) and PM (for times from noon until midnight).\r\n*/\r\n\r\nimport fastVersion from \"./date_parsers/fast_version\";\r\nimport cspCompliantVersion from \"./date_parsers/csp_compliant_version\";\r\n\r\nexport default function(gantt) {\r\n\tvar canUseCsp = null;\r\n\tfunction cspAutoCheck() {\r\n\t\ttry {\r\n\t\t\tnew Function(\"canUseCsp = false;\");\r\n\t\t} catch(e) {\r\n\t\t\tcanUseCsp = true;\r\n\t\t}\r\n\t}\r\n\tfunction useCsp() {\r\n\t\tvar result = false;\r\n\t\tif (gantt.config.csp === \"auto\") {\r\n\t\t\tif(canUseCsp === null) {\r\n\t\t\t\tcspAutoCheck();\r\n\t\t\t}\r\n\t\t\tresult = canUseCsp;\r\n\t\t} else {\r\n\t\t\tresult = gantt.config.csp;\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tvar dateHelper = {\r\n\t\tinit: function () {\r\n\t\t\tvar locale = gantt.locale;\r\n\r\n\t\t\tvar s = locale.date.month_short;\r\n\t\t\tvar t = locale.date.month_short_hash = {};\r\n\t\t\tfor (var i = 0; i < s.length; i++)\r\n\t\t\t\tt[s[i]] = i;\r\n\r\n\t\t\tvar s = locale.date.month_full;\r\n\t\t\tvar t = locale.date.month_full_hash = {};\r\n\t\t\tfor (var i = 0; i < s.length; i++)\r\n\t\t\t\tt[s[i]] = i;\r\n\t\t},\r\n\t\tdate_part: function (date) {\r\n\t\t\tvar old = new Date(date);\r\n\t\t\tdate.setHours(0);\r\n\t\t\tthis.hour_start(date);\r\n\t\t\tif (date.getHours() && //shift to yesterday on dst\r\n\t\t\t\t(date.getDate() < old.getDate() || date.getMonth() < old.getMonth() || date.getFullYear() < old.getFullYear()))\r\n\t\t\t\tdate.setTime(date.getTime() + 60 * 60 * 1000 * (24 - date.getHours()));\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\ttime_part: function (date) {\r\n\t\t\treturn (date.valueOf() / 1000 - date.getTimezoneOffset() * 60) % 86400;\r\n\t\t},\r\n\t\tweek_start: function (date) {\r\n\t\t\tvar shift = date.getDay();\r\n\t\t\tif (gantt.config.start_on_monday) {\r\n\t\t\t\tif (shift === 0) shift = 6;\r\n\t\t\t\telse shift--;\r\n\t\t\t}\r\n\t\t\treturn this.date_part(this.add(date, -1 * shift, \"day\"));\r\n\t\t},\r\n\t\tmonth_start: function (date) {\r\n\t\t\tdate.setDate(1);\r\n\t\t\treturn this.date_part(date);\r\n\t\t},\r\n\t\tquarter_start: function (date) {\r\n\t\t\tthis.month_start(date);\r\n\t\t\tvar m = date.getMonth(),\r\n\t\t\t\tres_month;\r\n\r\n\t\t\tif (m >= 9) {\r\n\t\t\t\tres_month = 9;\r\n\t\t\t} else if (m >= 6) {\r\n\t\t\t\tres_month = 6;\r\n\t\t\t} else if (m >= 3) {\r\n\t\t\t\tres_month = 3;\r\n\t\t\t} else {\r\n\t\t\t\tres_month = 0;\r\n\t\t\t}\r\n\r\n\t\t\tdate.setMonth(res_month);\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\tyear_start: function (date) {\r\n\t\t\tdate.setMonth(0);\r\n\t\t\treturn this.month_start(date);\r\n\t\t},\r\n\t\tday_start: function (date) {\r\n\t\t\treturn this.date_part(date);\r\n\t\t},\r\n\t\thour_start: function (date) {\r\n\t\t\tif (date.getMinutes())\r\n\t\t\t\tdate.setMinutes(0);\r\n\t\t\tthis.minute_start(date);\r\n\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\tminute_start: function (date) {\r\n\t\t\tif (date.getSeconds())\r\n\t\t\t\tdate.setSeconds(0);\r\n\t\t\tif (date.getMilliseconds())\r\n\t\t\t\tdate.setMilliseconds(0);\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\t_add_days: function (modifiedDate, inc, originalDate) {\r\n\r\n\t\t\tmodifiedDate.setDate(modifiedDate.getDate() + inc);\r\n\t\t\tvar incCondition = inc >= 0;\r\n\t\t\tvar getHoursCondition = !originalDate.getHours() && modifiedDate.getHours(); //shift to yesterday on dst\r\n\t\t\tvar getDateCondition = (modifiedDate.getDate() <= originalDate.getDate() || modifiedDate.getMonth() < originalDate.getMonth() || modifiedDate.getFullYear() < originalDate.getFullYear());\r\n\t\t\tif (incCondition && getHoursCondition && getDateCondition){\r\n\t\t\t\tmodifiedDate.setTime(modifiedDate.getTime() + 60 * 60 * 1000 * (24 - modifiedDate.getHours()));\r\n\t\t\t}\r\n\t\t\tvar worktimeCalculation = inc > 1;\r\n\t\t\tif (worktimeCalculation && getHoursCondition){\r\n\t\t\t\t// try to shift the modified Date to 00:00\r\n\t\t\t\tmodifiedDate.setHours(0);\r\n\t\t\t}\r\n\t\t\treturn modifiedDate;\r\n\t\t},\r\n\r\n\t\tadd: function (date, inc, mode) {\r\n\t\t\t/*jsl:ignore*/\r\n\t\t\tvar ndate = new Date(date.valueOf());\r\n\t\t\tswitch (mode) {\r\n\t\t\t\tcase \"day\":\r\n\t\t\t\t\tndate = this._add_days(ndate, inc, date);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"week\":\r\n\t\t\t\t\tndate = this._add_days(ndate, inc * 7, date);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"month\":\r\n\t\t\t\t\tndate.setMonth(ndate.getMonth() + inc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"year\":\r\n\t\t\t\t\tndate.setYear(ndate.getFullYear() + inc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"hour\":\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t\tadding hours/minutes via setHour(getHour() + inc) gives weird result when\r\n\t\t\t\t\t\tadding one hour to the time before switch to a Daylight Saving time\r\n\r\n\t\t\t\t\t\texample: //Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\r\n\t\t\t\t\t\tnew Date(2014, 02, 30, 1).setHours(2)\r\n\t\t\t\t\t\t>>Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\r\n\r\n\t\t\t\t\t\tsetTime seems working as expected\r\n\t\t\t\t\t */\r\n\t\t\t\t\tndate.setTime(ndate.getTime() + inc * 60 * 60 * 1000);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"minute\":\r\n\r\n\t\t\t\t\tndate.setTime(ndate.getTime() + inc * 60 * 1000);\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn this[\"add_\" + mode](date, inc, mode);\r\n\t\t\t}\r\n\t\t\treturn ndate;\r\n\t\t\t/*jsl:end*/\r\n\t\t},\r\n\t\tadd_quarter: function (date, inc) {\r\n\t\t\treturn this.add(date, inc * 3, \"month\");\r\n\t\t},\r\n\r\n\t\tto_fixed: function (num) {\r\n\t\t\tif (num < 10) return \"0\" + num;\r\n\t\t\treturn num;\r\n\t\t},\r\n\t\tcopy: function (date) {\r\n\t\t\treturn new Date(date.valueOf());\r\n\t\t},\r\n\t\tdate_to_str: function (format, utc) {\r\n\t\t\tvar result = fastVersion;\r\n\t\t\tif (useCsp()) {\r\n\t\t\t\tresult = cspCompliantVersion;\r\n\t\t\t}\r\n\t\t\treturn result.date_to_str(format, utc, gantt);\r\n\t\t},\r\n\t\tstr_to_date: function (format, utc) {\r\n\t\t\tvar result = fastVersion;\r\n\t\t\tif (useCsp()) {\r\n\t\t\t\tresult = cspCompliantVersion;\r\n\t\t\t}\r\n\t\t\treturn result.str_to_date(format, utc, gantt);\r\n\t\t},\r\n\t\tgetISOWeek: function (ndate) {\r\n\t\t\treturn gantt.date._getWeekNumber(ndate, true);\r\n\t\t},\r\n\t\t_getWeekNumber: function(ndate, isoWeek){\r\n\t\t\tif (!ndate) return false;\r\n\t\t\tvar nday = ndate.getDay();\r\n\t\t\tif(isoWeek){\r\n\t\t\t\tif (nday === 0) {\r\n\t\t\t\t\tnday = 7;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar first_thursday = new Date(ndate.valueOf());\r\n\t\t\tfirst_thursday.setDate(ndate.getDate() + (4 - nday));\r\n\t\t\tvar year_number = first_thursday.getFullYear(); // year of the first Thursday\r\n\t\t\tvar ordinal_date = Math.round((first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date)\r\n\t\t\tvar week_number = 1 + Math.floor(ordinal_date / 7);\r\n\t\t\treturn week_number;\r\n\t\t},\r\n\r\n\t\tgetWeek: function(ndate){\r\n\t\t\treturn gantt.date._getWeekNumber(ndate, gantt.config.start_on_monday);\r\n\t\t},\r\n\t\tgetUTCISOWeek: function (ndate) {\r\n\t\t\treturn gantt.date.getISOWeek(ndate);\r\n\t\t},\r\n\t\tconvert_to_utc: function (date) {\r\n\t\t\treturn new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n\t\t},\r\n\t\tparseDate: function (date, format) {\r\n\t\t\t// raw date may be of type string, number (timestamp) or something else\r\n\t\t\t// do not check for instanceof Date explicitly, since we may swap native date with different date implementation at some point\r\n\t\t\tif (date && !date.getFullYear) {\r\n\t\t\t\tif (typeof(format) !== \"function\") {\r\n\t\t\t\t\tif (typeof(format) === \"string\") {\r\n\t\t\t\t\t\tif (format === \"parse_date\" || format === \"xml_date\") {\r\n\t\t\t\t\t\t\tformat = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date : gantt.templates.parse_date;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tformat = gantt.defined(gantt.templates[format]) ? gantt.templates[format] : gantt.date.str_to_date(format);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tformat = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date : gantt.templates.parse_date;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (date) {\r\n\t\t\t\t\tdate = format(date);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdate = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t}\r\n\t};\r\n\treturn dateHelper;\r\n};","class t{constructor(t){const{url:e,token:s}=t;this._url=e,this._token=s,this._mode=1,this._seed=1,this._queue=[],this.data={},this.api={},this._events={}}headers(){return{Accept:\"application/json\",\"Content-Type\":\"application/json\",\"Remote-Token\":this._token}}fetch(t,e){const s={credentials:\"include\",headers:this.headers()};return e&&(s.method=\"POST\",s.body=e),fetch(t,s).then(t=>t.json())}load(t){return t&&(this._url=t),this.fetch(this._url).then(t=>this.parse(t))}parse(t){const{key:e,websocket:s}=t;e&&(this._token=t.key);for(const e in t.data)this.data[e]=t.data[e];for(const e in t.api){const s=this.api[e]={},i=t.api[e];for(const t in i)s[t]=this._wrapper(e+\".\"+t)}return s&&this.connect(),this}connect(){const t=this._socket;t&&(this._socket=null,t.onclose=function(){},t.close()),this._mode=2,this._socket=function(t,e,s,i){let n=e;\"/\"===n[0]&&(n=document.location.protocol+\"//\"+document.location.host+e);n=n.replace(/^http(s|):/,\"ws$1:\");const o=-1!=n.indexOf(\"?\")?\"&\":\"?\";n=`${n}${o}token=${s}&ws=1`;const r=new WebSocket(n);return r.onclose=()=>setTimeout(()=>t.connect(),2e3),r.onmessage=e=>{const s=JSON.parse(e.data);switch(s.action){case\"result\":t.result(s.body,[]);break;case\"event\":t.fire(s.body.name,s.body.value);break;case\"start\":i();break;default:t.onError(s.data)}},r}(this,this._url,this._token,()=>(this._mode=3,this._send(),this._resubscribe(),this))}_wrapper(t){return function(){const e=[].slice.call(arguments);let s=null;const i=new Promise((i,n)=>{s={data:{id:this._uid(),name:t,args:e},status:1,resolve:i,reject:n},this._queue.push(s)});return this.onCall(s,i),3===this._mode?this._send(s):setTimeout(()=>this._send(),1),i}.bind(this)}_uid(){return(this._seed++).toString()}_send(t){if(2==this._mode)return void setTimeout(()=>this._send(),100);const e=t?[t]:this._queue.filter(t=>1===t.status);if(!e.length)return;const s=e.map(t=>(t.status=2,t.data));3!==this._mode?this.fetch(this._url,JSON.stringify(s)).catch(t=>this.onError(t)).then(t=>this.result(t,s)):this._socket.send(JSON.stringify({action:\"call\",body:s}))}result(t,e){const s={};if(t)for(let e=0;e=0;t--){const e=this._queue[t],i=s[e.data.id];i&&(this.onResponse(e,i),i.error?e.reject(i.error):e.resolve(i.data),this._queue.splice(t,1))}}on(t,e){const s=this._uid();let i=this._events[t];const n=!!i;return n||(i=this._events[t]=[]),i.push({id:s,handler:e}),n||3!=this._mode||this._socket.send(JSON.stringify({action:\"subscribe\",name:t})),{name:t,id:s}}_resubscribe(){if(3==this._mode)for(const t in this._events)this._socket.send(JSON.stringify({action:\"subscribe\",name:t}))}detach(t){if(!t){if(3==this._mode)for(const t in this._events)this._socket.send(JSON.stringify({action:\"unsubscribe\",key:t}));return void(this._events={})}const{id:e,name:s}=t,i=this._events[s];if(i){const t=i.filter(t=>t.id!=e);t.length?this._events[s]=t:(delete this._events[s],3==this._mode&&this._socket.send(JSON.stringify({action:\"unsubscribe\",name:s})))}}fire(t,e){const s=this._events[t];if(s)for(let t=0;t res.json());\r\n };\r\n\r\n this._ready = remote.load().then((back) => (this._remote = back));\r\n\r\n function ready() {\r\n return this._ready;\r\n }\r\n \r\n function on(name, handler) {\r\n this.ready().then((back) => {\r\n if (typeof name === \"string\") back.on(name, handler);\r\n else {\r\n for (const key in name) {\r\n back.on(key, name[key]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.ready = ready;\r\n this.on = on;\r\n };\r\n\r\n","function checkTimeout(host, updPerSecond){\r\n\tif (!updPerSecond)\r\n\t\treturn true;\r\n\t\r\n\tif (host._on_timeout)\r\n\t\treturn false;\r\n\t\r\n\tvar timeout = Math.ceil(1000/updPerSecond);\r\n\tif (timeout < 2) return true;\r\n\r\n\tsetTimeout(function(){\r\n\t\tdelete host._on_timeout;\r\n\t}, timeout);\r\n\r\n\thost._on_timeout = true;\r\n\treturn true;\r\n}\r\n\r\nexport default checkTimeout;","import * as utils from \"../../utils/utils\";\r\n\r\nvar StateService = (function(){\r\n\tvar stateProviders = {};\r\n\r\n\tfunction getState(name){\r\n\t\tvar provider = stateProviders[name];\r\n\t\tif(provider){\r\n\t\t\treturn stateProviders[name].method();\r\n\t\t}else{\r\n\t\t\tvar res = {};\r\n\t\t\tfor(var i in stateProviders){\r\n\t\t\t\tif(!stateProviders[i].internal)\r\n\t\t\t\t\tutils.mixin(res, stateProviders[i].method(), true);\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction registerProvider(name, provider, internal){\r\n\t\tstateProviders[name] = { method: provider, internal: internal};\r\n\t}\r\n\r\n\tfunction unregisterProvider(name){\r\n\t\tdelete stateProviders[name];\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetState: getState,\r\n\t\tregisterProvider: registerProvider,\r\n\t\tunregisterProvider: unregisterProvider\r\n\t};\r\n});\r\n\r\nexport default StateService;\r\n\r\n","// eslint-disable-next-line no-restricted-globals\r\nexport default Promise;","import * as utils from \"../../utils/utils\";\r\nimport {replaceValidZeroId} from \"../../utils/helpers\";\r\n\r\nvar createTasksDatastoreFacade = function(){\r\n\treturn {\r\n\tgetTask: function (id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tthis.assert(id, \"Invalid argument for gantt.getTask\");\r\n\t\tvar task = this.$data.tasksStore.getItem(id);\r\n\t\tthis.assert(task, \"Task not found id=\" + id);\r\n\t\treturn task;\r\n\t},\r\n\tgetTaskByTime: function (from, to) {\r\n\t\tvar p = this.$data.tasksStore.getItems();\r\n\r\n\t\tvar res = [];\r\n\r\n\t\tif (!(from || to)) {\r\n\t\t\tres = p;\r\n\t\t} else {\r\n\t\t\tfrom = +from || -Infinity;\r\n\t\t\tto = +to || Infinity;\r\n\t\t\tfor (var t = 0; t < p.length; t++){\r\n\t\t\t\tvar task = p[t];\r\n\t\t\t\tif (+task.start_date < to && +task.end_date > from)\r\n\t\t\t\t\tres.push(task);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\tisTaskExists: function (id) {\r\n\t\tif(!this.$data || !this.$data.tasksStore){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn this.$data.tasksStore.exists(id);\r\n\t},\r\n\tupdateTask: function (id, item) {\r\n\t\tif (!utils.defined(item)) item = this.getTask(id);\r\n\t\tthis.$data.tasksStore.updateItem(id, item);\r\n\t\tif(this.isTaskExists(id))\r\n\t\t\tthis.refreshTask(id);\r\n\t},\r\n\taddTask: function (item, parent, index) {\r\n\t\tif (!utils.defined(item.id))\r\n\t\t\titem.id = utils.uid();\r\n\r\n\t\t//GS-761: assert unique ID\r\n\t\tif (this.isTaskExists(item.id)){\r\n\t\t\tvar task = this.getTask(item.id);\r\n\t\t\tif (task.$index != item.$index) {\r\n\t\t\t\t// Someone may try to mistakenly add a task with the same ID, and most likely\r\n\t\t\t\t// use the string format for the dates. Gantt shouldn't break in this scenario\r\n\t\t\t\tif (item.start_date && typeof item.start_date === \"string\"){\r\n\t\t\t\t\titem.start_date = this.date.parseDate(item.start_date, \"parse_date\");\r\n\t\t\t\t}\r\n\t\t\t\tif (item.end_date && typeof item.end_date === \"string\"){\r\n\t\t\t\t\titem.end_date = this.date.parseDate(item.end_date, \"parse_date\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.$data.tasksStore.updateItem(item.id, item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (!utils.defined(parent)) parent = this.getParent(item) || 0;\r\n\t\tif (!this.isTaskExists(parent)) parent = this.config.root_id;\r\n\t\tthis.setParent(item, parent);\r\n\t\treturn this.$data.tasksStore.addItem(item, index, parent);\r\n\t},\r\n\tdeleteTask: function (id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\treturn this.$data.tasksStore.removeItem(id);\r\n\t},\r\n\tgetTaskCount: function () {\r\n\t\treturn this.$data.tasksStore.count();\r\n\t},\r\n\tgetVisibleTaskCount: function () {\r\n\t\treturn this.$data.tasksStore.countVisible();\r\n\t},\r\n\tgetTaskIndex: function (id) {\r\n\t\treturn this.$data.tasksStore.getBranchIndex(id);\r\n\t},\r\n\tgetGlobalTaskIndex: function (id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tthis.assert(id, \"Invalid argument\");\r\n\t\treturn this.$data.tasksStore.getIndexById(id);\r\n\t},\r\n\teachTask: function (code, parent, master) {\r\n\t\treturn this.$data.tasksStore.eachItem(utils.bind(code, master||this), parent);\r\n\t},\r\n\teachParent: function (callback, startTask, master) {\r\n\t\treturn this.$data.tasksStore.eachParent(utils.bind(callback, master || this), startTask);\r\n\t},\r\n\tchangeTaskId: function (oldid, newid) {\r\n\t\tthis.$data.tasksStore.changeId(oldid, newid);\r\n\t\tvar task = this.$data.tasksStore.getItem(newid);\r\n\r\n\t\tvar links = [];\r\n\r\n\t\tif (task.$source) {\r\n\t\t\tlinks = links.concat(task.$source);\r\n\t\t}\r\n\t\tif (task.$target) {\r\n\t\t\tlinks = links.concat(task.$target);\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < links.length; i++) {\r\n\t\t\tvar link = this.getLink(links[i]);\r\n\t\t\tif (link.source == oldid) {\r\n\t\t\t\tlink.source = newid;\r\n\t\t\t}\r\n\t\t\tif (link.target == oldid) {\r\n\t\t\t\tlink.target = newid;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tcalculateTaskLevel: function (item) {\r\n\t\treturn this.$data.tasksStore.calculateItemLevel(item);\r\n\t},\r\n\tgetNext: function (id) {\r\n\t\treturn this.$data.tasksStore.getNext(id);\r\n\t},\r\n\tgetPrev: function (id) {\r\n\t\treturn this.$data.tasksStore.getPrev(id);\r\n\t},\r\n\tgetParent: function (id) {\r\n\t\treturn this.$data.tasksStore.getParent(id);\r\n\t},\r\n\tsetParent: function (task, new_pid, silent) {\r\n\t\treturn this.$data.tasksStore.setParent(task, new_pid, silent);\r\n\t},\r\n\tgetSiblings: function (id) {\r\n\t\treturn this.$data.tasksStore.getSiblings(id).slice();\r\n\t},\r\n\tgetNextSibling: function (id) {\r\n\t\treturn this.$data.tasksStore.getNextSibling(id);\r\n\t},\r\n\tgetPrevSibling: function (id) {\r\n\t\treturn this.$data.tasksStore.getPrevSibling(id);\r\n\t},\r\n\tgetTaskByIndex: function(index){\r\n\t\tvar id = this.$data.tasksStore.getIdByIndex(index);\r\n\t\tif(this.isTaskExists(id)){\r\n\t\t\treturn this.getTask(id);\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t},\r\n\tgetChildren: function (id) {\r\n\t\tif(!this.hasChild(id)){\r\n\t\t\treturn [];\r\n\t\t}else{\r\n\t\t\treturn this.$data.tasksStore.getChildren(id).slice();\r\n\t\t}\r\n\t},\r\n\thasChild: function (id) {\r\n\t\treturn this.$data.tasksStore.hasChild(id);\r\n\t},\r\n\topen: function (id) {\r\n\t\tthis.$data.tasksStore.open(id);\r\n\t},\r\n\tclose: function (id) {\r\n\t\tthis.$data.tasksStore.close(id);\r\n\t},\r\n\tmoveTask: function (sid, tindex, parent) {\r\n\t\tparent = replaceValidZeroId(parent, this.config.root_id);\r\n\t\treturn this.$data.tasksStore.move.apply(this.$data.tasksStore, arguments);\r\n\t},\r\n\tsort: function(field, desc, parent, silent) {\r\n\t\tvar render = !silent;//4th argument to cancel redraw after sorting\r\n\r\n\t\tthis.$data.tasksStore.sort(field, desc, parent);\r\n\t\tthis.callEvent(\"onAfterSort\", [field, desc, parent]);\r\n\r\n\t\tif (render) {\r\n\t\t\tthis.render();\r\n\t\t}\r\n\t}\r\n};\r\n};\r\n\r\nexport default createTasksDatastoreFacade;\r\n\r\n\r\n","import * as utils from \"../../utils/utils\";\r\n\r\nvar $powerArray = {\r\n\t$create: function(array){\r\n\t\treturn utils.mixin(array || [], this);\r\n\t},\r\n\t//remove element at specified position\r\n\t$removeAt:function(pos,len){\r\n\t\tif (pos>=0) this.splice(pos,(len||1));\r\n\t},\r\n\t//find element in collection and remove it\r\n\t$remove:function(value){\r\n\t\tthis.$removeAt(this.$find(value));\r\n\t},\r\n\t//add element to collection at specific position\r\n\t$insertAt:function(data,pos){\r\n\t\tif (!pos && pos!==0) \t//add to the end by default\r\n\t\t\tthis.push(data);\r\n\t\telse {\r\n\t\t\tvar b = this.splice(pos,(this.length-pos));\r\n\t\t\tthis[pos] = data;\r\n\t\t\tthis.push.apply(this,b); //reconstruct array without loosing this pointer\r\n\t\t}\r\n\t},\r\n\t//return index of element, -1 if it doesn't exists\r\n\t$find:function(data){\r\n\t\tfor (var i=0; i data_size){\r\n\t\t\t\t//dhx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");\r\n\t\t\t\tindex = Math.min(order.length,index);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t//gantt.assert(!this.exists(id), \"Not unique ID\");\r\n\r\n\t\tthis.pull[item.id]=item;\r\n\t\tif (!this.isSilent()){\r\n\t\t\tthis._updateOrder(function(){\r\n\t\t\t\tif(this.$find(item.id) === -1)\r\n\t\t\t\t\tthis.$insertAt(item.id,index);\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.filter();\r\n\t\t//order.$insertAt(item.id,index);\r\n\t},\r\n\r\n\r\n\tisVisible: function(id){\r\n\t\treturn this.visibleOrder.$find(id) > -1;\r\n\t},\r\n\tgetVisibleItems: function(){\r\n\t\treturn this.getIndexRange();\r\n\t},\r\n\r\n\taddItem: function(item, index){\r\n\t\tif (!utils.defined(item.id))\r\n\t\t\titem.id = utils.uid();\r\n\r\n\t\tif(this.$initItem){\r\n\t\t\titem = this.$initItem(item);\r\n\t\t}\r\n\r\n\t\tif (!this.isSilent()){\r\n\t\t\tif (this.callEvent(\"onBeforeAdd\", [item.id, item]) === false) return false;\r\n\t\t}\r\n\r\n\r\n\t\tthis._addItemInner(item, index);\r\n\r\n\t\tif (!this.isSilent()){\r\n\t\t\tthis.callEvent(\"onAfterAdd\",[item.id, item]);\r\n\t\t\t//repaint signal\r\n\t\t\tthis.callEvent(\"onStoreUpdated\",[item.id,item,\"add\"]);\r\n\t\t}\r\n\t\treturn item.id;\r\n\t},\r\n\r\n\t_changeIdInner: function(oldId, newId){\r\n\t\tif(this.pull[oldId])\r\n\t\t\tthis.pull[newId] = this.pull[oldId];\r\n\r\n\t\tvar visibleOrder = this._searchVisibleOrder[oldId];\r\n\t\tthis.pull[newId].id = newId;\r\n\t\tthis._updateOrder(function(){\r\n\t\t\tthis[this.$find(oldId)] = newId;\r\n\t\t});\r\n\t\tthis._searchVisibleOrder[newId] = visibleOrder;\r\n\t\tdelete this._searchVisibleOrder[oldId];\r\n\r\n\t\t//this.visibleOrder[this.visibleOrder.$find(oldId)]=newId;\r\n\t\tdelete this.pull[oldId];\r\n\t},\r\n\tchangeId: function(oldId, newId){\r\n\t\tthis._changeIdInner(oldId, newId);\r\n\r\n\t\tthis.callEvent(\"onIdChange\", [oldId, newId]);\r\n\r\n\t},\r\n\texists: function(id){\r\n\t\treturn !!(this.pull[id]);\r\n\t},\r\n\r\n\t_moveInner: function(sindex, tindex){\r\n\t\tvar id = this.getIdByIndex(sindex);\r\n\r\n\t\tthis._updateOrder(function(){\r\n\t\t\tthis.$removeAt(sindex);\r\n\t\t\tthis.$insertAt(id,Math.min(this.length, tindex));\r\n\t\t});\r\n\t\t//this.visibleOrder.$removeAt(sindex);\t//remove at old position\r\n\t\t//if (sindex=0 && tindex>=0, \"DataStore::move\",\"Incorrect indexes\");\r\n\r\n\t\tvar id = this.getIdByIndex(sindex);\r\n\t\tvar obj = this.getItem(id);\r\n\t\tthis._moveInner(sindex, tindex);\r\n\r\n\t\tif (!this.isSilent()) {\r\n\t\t\t//repaint signal\r\n\t\t\tthis.callEvent(\"onStoreUpdated\", [obj.id, obj, \"move\"]);\r\n\t\t}\r\n\t},\r\n\tclearAll: function(){\r\n\t\tif(this.$destroyed){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// GS-956 We need to unselect the resource as its ID is cached\r\n\t\tthis.silent(function(){\r\n\t\t\tthis.unselect();\r\n\t\t});\r\n\t\tthis.pull = {};\r\n\t\tthis.visibleOrder = powerArray.$create();\r\n\t\tthis.fullOrder = powerArray.$create();\r\n\t\tif (this.isSilent()) return;\r\n\t\tthis.callEvent(\"onClearAll\",[]);\r\n\t\tthis.refresh();\r\n\t},\r\n\r\n\tsilent:function(code, master){\r\n\t\tvar alreadySilent = false;\r\n\t\tif(this.isSilent()) {\r\n\t\t\talreadySilent = true;\r\n\t\t}\r\n\t\tthis._skip_refresh = true;\r\n\t\tcode.call(master||this);\r\n\t\t\r\n\t\tif (!alreadySilent) {\r\n\t\t\tthis._skip_refresh = false;\r\n\t\t}\r\n\t},\r\n\tisSilent: function(){\r\n\t\treturn !!this._skip_refresh;\r\n\t},\r\n\r\n\tarraysEqual: function (arr1, arr2) {\r\n\t\tif(arr1.length !== arr2.length)\r\n\t\t\treturn false;\r\n\t\tfor(var i = 0; i < arr1.length; i++) {\r\n\t\t\tif(arr1[i] !== arr2[i])\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\trefresh: function(id, quick){\r\n\t\tif (this.isSilent()) return;\r\n\r\n\t\tvar item;\r\n\t\tif(id){\r\n\t\t\titem = this.getItem(id);\r\n\t\t}\r\n\r\n\t\tvar args;\r\n\t\tif (id){\r\n\t\t\targs = [id, item, \"paint\"];\r\n\t\t}else{\r\n\t\t\targs = [null,null,null];\r\n\t\t}\r\n\r\n\t\tif(this.callEvent(\"onBeforeStoreUpdate\", args) === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar skipFilter = this._quick_refresh && !this._mark_recompute;\r\n\t\tthis._mark_recompute = false;\r\n\t\tif(id){\r\n\t\t\t// if item changes visible order (e.g. expand-collapse branch) - do a complete repaint\r\n\t\t\tif(!quick && !skipFilter){\r\n\t\t\t\tvar oldOrder = this.visibleOrder;\r\n\t\t\t\tthis.filter();\r\n\t\t\t\tif(!this.arraysEqual(oldOrder, this.visibleOrder)){\r\n\t\t\t\t\tid = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(!skipFilter){\r\n\t\t\tthis.filter();\r\n\t\t}\r\n\r\n\t\tif (id){\r\n\t\t\targs = [id, item, \"paint\"];\r\n\t\t}else{\r\n\t\t\targs = [null,null,null];\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onStoreUpdated\",args);\r\n\t},\r\n\r\n\tcount: function(){\r\n\t\treturn this.fullOrder.length;\r\n\t},\r\n\tcountVisible: function(){\r\n\t\treturn this.visibleOrder.length;\r\n\t},\r\n\r\n\tsort: function(sort){},\r\n\r\n\tserialize: function(){},\r\n\r\n\teachItem: function(code){\r\n\t\tfor (var i=0; i= item.$level){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\twhile (item && this.exists(pid)) {\r\n\t\t\t\titem = this.getItem(pid);\r\n\r\n\t\t\t\tif (item && item.id == parentId)\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tpid = this.getParent(item);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tgetSiblings: function(id){\r\n\t\t\tif(!this.exists(id)){\r\n\t\t\t\treturn powerArray.$create();\r\n\t\t\t}\r\n\t\t\tvar parent = this.getParent(id);\r\n\t\t\treturn this.getChildren(parent);\r\n\r\n\t\t},\r\n\t\tgetNextSibling: function(id){\r\n\t\t\tvar siblings = this.getSiblings(id);\r\n\t\t\tfor(var i= 0, len = siblings.length; i < len; i++){\r\n\t\t\t\tif(siblings[i] == id){\r\n\t\t\t\t\tvar nextSibling = siblings[i+1];\r\n\t\t\t\t\tif (nextSibling === 0 && i > 0){\r\n\t\t\t\t\t\tnextSibling = \"0\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn nextSibling || null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tgetPrevSibling: function(id){\r\n\t\t\tvar siblings = this.getSiblings(id);\r\n\t\t\tfor(var i= 0, len = siblings.length; i < len; i++){\r\n\t\t\t\tif(siblings[i] == id){\r\n\t\t\t\t\tvar previousSibling = siblings[i-1];\r\n\t\t\t\t\tif (previousSibling === 0 && i > 0){\r\n\t\t\t\t\t\tpreviousSibling = \"0\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn previousSibling || null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tgetParent: function(id){\r\n\t\t\tvar item = null;\r\n\t\t\tif(id.id !== undefined){\r\n\t\t\t\titem = id;\r\n\t\t\t}else{\r\n\t\t\t\titem = this.getItem(id);\r\n\t\t\t}\r\n\r\n\t\t\tvar parent;\r\n\t\t\tif(item){\r\n\t\t\t\tparent = item[this.$parentProperty];\r\n\t\t\t}else{\r\n\t\t\t\tparent = this.$getRootId();\r\n\t\t\t}\r\n\t\t\treturn parent;\r\n\r\n\t\t},\r\n\r\n\t\tclearAll: function(){\r\n\t\t\tthis._branches = {};\r\n\t\t\tDataStore.prototype.clearAll.call(this);\r\n\t\t},\r\n\r\n\t\tcalculateItemLevel: function(item){\r\n\t\t\tvar level = 0;\r\n\t\t\tthis.eachParent(function(){\r\n\t\t\t\tlevel++;\r\n\t\t\t}, item);\r\n\t\t\treturn level;\r\n\t\t},\r\n\r\n\t\t_setParentInner: function(item, new_pid, silent){\r\n\t\t\tif(!silent){\r\n\t\t\t\tif(item.hasOwnProperty(\"$rendered_parent\")){\r\n\t\t\t\t\tthis._move_branch(item, item.$rendered_parent, new_pid);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._move_branch(item, item[this.$parentProperty], new_pid);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetParent: function(item, new_pid, silent){\r\n\t\t\tthis._setParentInner(item, new_pid, silent);\r\n\r\n\t\t\titem[this.$parentProperty] = new_pid;\r\n\t\t},\r\n\r\n\t\t_eachItemCached: function(code, cache){\r\n\t\t\tfor(var i = 0, len = cache.length; i < len; i++){\r\n\t\t\t\tcode.call(this, cache[i]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_eachItemIterate: function(code, startId, cache){\r\n\t\t\tvar itemsStack = this.getChildren(startId);\r\n\t\t\tif(itemsStack.length){\r\n\t\t\t\titemsStack = itemsStack.slice().reverse();\r\n\t\t\t}\r\n\t\t\twhile(itemsStack.length){\r\n\t\t\t\tvar itemId = itemsStack.pop();\r\n\t\t\t\tvar item = this.getItem(itemId);\r\n\t\t\t\tcode.call(this, item);\r\n\t\t\t\tif(cache){\r\n\t\t\t\t\tcache.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.hasChild(item.id)){\r\n\t\t\t\t\tvar children = this.getChildren(item.id);\r\n\t\t\t\t\tvar len = children.length;\r\n\t\t\t\t\tfor(var i = len - 1; i >= 0; i--){\r\n\t\t\t\t\t\titemsStack.push(children[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\teachItem: function(code, parent){\r\n\t\t\tvar rootId = this.$getRootId();\r\n\t\t\tif (!utils.defined(parent)) {\r\n\t\t\t\tparent = rootId;\r\n\t\t\t}\r\n\t\t\tvar startId = replaceValidZeroId(parent, rootId) || rootId;\r\n\r\n\t\t\tvar useCache = false;\r\n\t\t\tvar buildCache = false;\r\n\t\t\tvar cache = null;\r\n\t\t\tif(startId === rootId){\r\n\t\t\t\tif(this._eachItemMainRangeCache){\r\n\t\t\t\t\tuseCache = true;\r\n\t\t\t\t\tcache = this._eachItemMainRangeCache;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbuildCache = true;\r\n\t\t\t\t\tcache = this._eachItemMainRangeCache = [];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(useCache){\r\n\t\t\t\tthis._eachItemCached(code, cache);\r\n\t\t\t}else{\r\n\t\t\t\tthis._eachItemIterate(code, startId, buildCache ? cache : null);\r\n\t\t\t}\r\n\t\t},\r\n\t\teachParent: function(code, startItem) {\r\n\t\t\tvar parentsHash = {};\r\n\t\t\tvar item = startItem;\r\n\t\t\tvar parent = this.getParent(item);\r\n\r\n\t\t\twhile (this.exists(parent)) {\r\n\t\t\t\tif (parentsHash[parent]) {\r\n\t\t\t\t\tthrow new Error(\"Invalid tasks tree. Cyclic reference has been detected on task \" + parent);\r\n\t\t\t\t}\r\n\t\t\t\tparentsHash[parent] = true;\r\n\t\t\t\titem = this.getItem(parent);\r\n\t\t\t\tcode.call(this, item);\r\n\t\t\t\tparent = this.getParent(item);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_add_branch: function(item, index, parent){\r\n\t\t\tvar pid = parent === undefined ? this.getParent(item) : parent;\r\n\t\t\tif (!this.hasChild(pid))\r\n\t\t\t\tthis._branches[pid] = powerArray.$create();\r\n\t\t\tvar branch = this.getChildren(pid);\r\n\t\t\tvar added_already = branch.indexOf(item.id + \"\") > -1 || branch.indexOf(+item.id) > -1;\r\n\t\t\tif(!added_already){\r\n\t\t\t\tif(index*1 == index){\r\n\r\n\t\t\t\t\tbranch.splice(index, 0, item.id);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbranch.push(item.id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem.$rendered_parent = pid;\r\n\t\t\t}\r\n\t\t},\r\n\t\t_move_branch: function(item, old_parent, new_parent){\r\n\t\t\tthis._eachItemMainRangeCache = null;\r\n\t\t\t//this.setParent(item, new_parent);\r\n\t\t\t//this._sync_parent(task);\r\n\t\t\tthis._replace_branch_child(old_parent, item.id);\r\n\t\t\tif(this.exists(new_parent) || new_parent == this.$getRootId()){\r\n\r\n\t\t\t\tthis._add_branch(item, undefined, new_parent);\r\n\t\t\t}else{\r\n\t\t\t\tdelete this._branches[item.id];\r\n\t\t\t}\r\n\t\t\titem.$level = this.calculateItemLevel(item);\r\n\t\t\tthis.eachItem(function(child){\r\n\t\t\t\tchild.$level = this.calculateItemLevel(child);\r\n\t\t\t}, item.id);\r\n\t\t},\r\n\r\n\t\t_replace_branch_child: function(node, old_id, new_id){\r\n\t\t\tvar branch = this.getChildren(node);\r\n\t\t\tif (branch && node !== undefined){\r\n\t\t\t\tvar newbranch = powerArray.$create();\r\n\r\n\t\t\t\tlet index = branch.indexOf(old_id + \"\");\r\n\t\t\t\tif (index == -1 && !isNaN(+old_id)){\r\n\t\t\t\t\tindex = branch.indexOf(+old_id);\r\n\t\t\t\t} \r\n\r\n\t\t\t\tif (index > -1){\r\n\t\t\t\t\tif (new_id){\r\n\t\t\t\t\t\tbranch.splice(index, 1, new_id);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbranch.splice(index, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnewbranch = branch;\r\n\r\n\t\t\t\tthis._branches[node] = newbranch;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tsort: function(field, desc, parent){\r\n\t\t\tif (!this.exists(parent)) {\r\n\t\t\t\tparent = this.$getRootId();\r\n\t\t\t}\r\n\r\n\t\t\tif (!field) field = \"order\";\r\n\t\t\tvar criteria = (typeof(field) == \"string\") ? (function(a, b) {\r\n\t\t\t\tif (a[field] == b[field] ||\r\n\t\t\t\t\t(helpers.isDate(a[field]) && helpers.isDate(b[field]) && a[field].valueOf() == b[field].valueOf()))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar result = a[field] > b[field];\r\n\t\t\t\treturn result ? 1 : -1;\r\n\t\t\t}) : field;\r\n\r\n\t\t\tif (desc) {\r\n\t\t\t\tvar original_criteria = criteria;\r\n\t\t\t\tcriteria = function (a, b) {\r\n\t\t\t\t\treturn original_criteria(b, a);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tvar els = this.getChildren(parent);\r\n\r\n\t\t\tif (els){\r\n\t\t\t\tvar temp = [];\r\n\t\t\t\tfor (var i = els.length - 1; i >= 0; i--)\r\n\t\t\t\t\ttemp[i] = this.getItem(els[i]);\r\n\r\n\t\t\t\ttemp.sort(criteria);\r\n\r\n\t\t\t\tfor (var i = 0; i < temp.length; i++) {\r\n\t\t\t\t\tels[i] = temp[i].id;\r\n\t\t\t\t\tthis.sort(field, desc, els[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfilter: function(rule){\r\n\t\t\tfor(let i in this.pull){\r\n\t\t\t\tconst renderedParent = this.pull[i].$rendered_parent;\r\n\t\t\t\tconst actualParent = this.getParent(this.pull[i]);\r\n\t\t\t\tif(renderedParent !== actualParent){\r\n\t\t\t\t\tthis._move_branch(this.pull[i], renderedParent, actualParent);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn DataStore.prototype.filter.apply(this, arguments);\r\n\t\t},\r\n\r\n\t\topen: function(id){\r\n\t\t\tif(this.exists(id)){\r\n\t\t\t\tthis.getItem(id).$open = true;\r\n\t\t\t\t// GS-2170. Do not recalculate the indexes and dates as they will be recalculated later\r\n\t\t\t\tthis._skipTaskRecalculation = true;\r\n\t\t\t\tthis.callEvent(\"onItemOpen\", [id]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclose: function(id){\r\n\t\t\tif(this.exists(id)){\r\n\t\t\t\tthis.getItem(id).$open = false;\r\n\t\t\t\t// GS-2170. Do not recalculate the indexes and dates as they will be recalculated later\r\n\t\t\t\tthis._skipTaskRecalculation = true;\r\n\t\t\t\tthis.callEvent(\"onItemClose\", [id]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tdestructor: function(){\r\n\t\t\tDataStore.prototype.destructor.call(this);\r\n\t\t\tthis._branches = null;\r\n\t\t\tthis._indexRangeCache = {};\r\n\t\t\tthis._eachItemMainRangeCache = null;\r\n\t\t}\r\n\t},\r\n\tDataStore.prototype\r\n);\r\n\r\nexport default TreeDataStore;","import env from \"./env\";\r\n\r\nexport default function(gantt){\r\n\treturn env.isNode || !gantt.$root;\r\n};","import isHeadless from \"../../utils/is_headless\";\r\n\r\nconst storeRenderCreator = function(name, gantt){\r\n\r\n\tconst store = gantt.getDatastore(name);\r\n\r\n\tconst itemRepainter = {\r\n\t\trenderItem: function(id, renderer){\r\n\r\n\t\t\tconst renders = renderer.getLayers();\r\n\r\n\t\t\tconst item = store.getItem(id);\r\n\t\t\tif(item && store.isVisible(id)) {\r\n\t\t\t\tfor (let i = 0; i < renders.length; i++)\r\n\t\t\t\t\trenders[i].render_item(item);\r\n\t\t\t}\r\n\t\t},\r\n\t\trenderItems: function(renderer){\r\n\t\t\tconst renderers = renderer.getLayers();\r\n\t\t\tfor (let i = 0; i < renderers.length; i++) {\r\n\t\t\t\trenderers[i].clear();\r\n\t\t\t}\r\n\r\n\t\t\tlet allData = null;\r\n\r\n\t\t\tconst loadedRanges = {};\r\n\t\t\tfor (let i = 0; i < renderers.length; i++) {\r\n\t\t\t\tconst layer = renderers[i];\r\n\t\t\t\tlet layerData;\r\n\t\t\t\tif(layer.get_visible_range){\r\n\r\n\t\t\t\t\tvar range = layer.get_visible_range(store);\r\n\t\t\t\t\tif(range.start !== undefined && range.end !== undefined){\r\n\t\t\t\t\t\tvar key = range.start + \" - \" + range.end;\r\n\t\t\t\t\t\tif(loadedRanges[key]){\r\n\t\t\t\t\t\t\tlayerData = loadedRanges[key];\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tlayerData = store.getIndexRange(range.start, range.end);\r\n\t\t\t\t\t\t\tloadedRanges[key] = layerData;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else if(range.ids !== undefined){\r\n\t\t\t\t\t\tlayerData = range.ids.map(function(id){\r\n\t\t\t\t\t\t\treturn store.getItem(id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthrow new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(!allData){\r\n\t\t\t\t\t\tallData = store.getVisibleItems();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlayerData = allData;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (layer.prepare_data) {\r\n\t\t\t\t\t// GS-1605. Highlight timeline cells below tasks and in an empty chart\r\n\t\t\t\t\tlayer.prepare_data(layerData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trenderers[i].render_items(layerData);\r\n\t\t\t}\r\n\t\t},\r\n\t\tupdateItems: function(layer) {\r\n\t\t\tif(layer.update_items){\r\n\t\t\t\tlet data = [];\r\n\t\t\t\tif(layer.get_visible_range){\r\n\r\n\t\t\t\t\tvar range = layer.get_visible_range(store);\r\n\t\t\t\t\tif(range.start !== undefined && range.end !== undefined){\r\n\t\t\t\t\t\tdata = store.getIndexRange(range.start, range.end);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(range.ids !== undefined){\r\n\t\t\t\t\t\tlet extraDataArr = range.ids.map(function(id){\r\n\t\t\t\t\t\t\treturn store.getItem(id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t// GS-2502: range.ids might not exist in other datastores\r\n\t\t\t\t\t\tif(extraDataArr.length > 0){\r\n\t\t\t\t\t\t\textraDataArr = extraDataArr.filter(element => element !== undefined);\r\n\t\t\t\t\t\t\tdata = data.concat(extraDataArr);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif((range.start == undefined || range.end == undefined) && range.ids == undefined) {\r\n\t\t\t\t\t\tthrow new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdata = store.getVisibleItems();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (layer.prepare_data) {\r\n\t\t\t\t\t// GS-1605. Highlight timeline cells below tasks and in an empty chart\r\n\t\t\t\t\tlayer.prepare_data(data, layer);\r\n\t\t\t\t}\r\n\t\t\t\tlayer.update_items(data);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tstore.attachEvent(\"onStoreUpdated\", function(id, item, action){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\tif(renderer){\r\n\t\t\trenderer.onUpdateRequest = function(layer){\r\n\t\t\t\titemRepainter.updateItems(layer);\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\r\n\tfunction skipRepaint(gantt){\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tif(state.getState(\"batchUpdate\").batch_update){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tstore.attachEvent(\"onStoreUpdated\", function(id, item, action){\r\n\t\tif(skipRepaint(gantt)){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(!id || action == \"move\" || action == \"delete\"){\r\n\t\t\tstore.callEvent(\"onBeforeRefreshAll\", []);\r\n\t\t\tstore.callEvent(\"onAfterRefreshAll\", []);\r\n\t\t}else{\r\n\t\t\tstore.callEvent(\"onBeforeRefreshItem\", [item.id]);\r\n\t\t\tstore.callEvent(\"onAfterRefreshItem\", [item.id]);\r\n\t\t}\r\n\t});\r\n\r\n\tstore.attachEvent(\"onAfterRefreshAll\", function(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\tif(renderer && !skipRepaint(gantt)){\r\n\t\t\titemRepainter.renderItems(renderer);\r\n\t\t}\r\n\t});\r\n\tstore.attachEvent(\"onAfterRefreshItem\", function(id){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\tif(renderer){\r\n\t\t\titemRepainter.renderItem(id, renderer);\r\n\t\t}\r\n\t});\r\n\r\n\t// TODO: probably can be done more in a more efficient way\r\n\tstore.attachEvent(\"onItemOpen\", function(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tgantt.render();\r\n\t});\r\n\r\n\tstore.attachEvent(\"onItemClose\", function(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tgantt.render();\r\n\t});\r\n\r\n\tfunction refreshId(renders, oldId, newId, item) {\r\n\t\tfor (let i = 0; i < renders.length; i++) {\r\n\t\t\trenders[i].change_id(oldId, newId);\r\n\t\t}\r\n\t}\r\n\r\n\tstore.attachEvent(\"onIdChange\", function(oldId, newId){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// in case of linked datastores (tasks <-> links), id change should recalculate something in linked datastore before any repaint\r\n\t\t// use onBeforeIdChange for this hook.\r\n\t\t// TODO: use something more reasonable instead\r\n\t\tstore.callEvent(\"onBeforeIdChange\", [oldId, newId]);\r\n\r\n\t\tif(skipRepaint(gantt)){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(!store.isSilent()){\r\n\t\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\t\tif(renderer){ // missing check for renderer GS-1814\r\n\t\t\t\trefreshId(renderer.getLayers(), oldId, newId, store.getItem(newId));\r\n\t\t\t\titemRepainter.renderItem(newId, renderer);\r\n\t\t\t}else{\r\n\t\t\t\t// GS-1814 repaint ui to apply new id when the datastore don't have own renderer\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n};\r\n\r\nexport default {\r\n\tbindDataStore: storeRenderCreator\r\n};","import * as utils from \"../../utils/utils\";\r\nimport createTasksFacade from \"./datastore_tasks\";\r\nimport createLinksFacade from \"./datastore_links\";\r\nimport DataStore from \"../datastore/datastore\";\r\nimport TreeDataStore from \"../datastore/treedatastore\";\r\nimport createDatastoreSelect from \"../datastore/select\";\r\nimport datastoreRender from \"../datastore/datastore_render\";\r\nimport isHeadless from \"../../utils/is_headless\";\r\nimport {replaceValidZeroId} from \"../../utils/helpers\";\r\n\r\nfunction getDatastores(){\r\n\tvar storeNames = this.$services.getService(\"datastores\");\r\n\tvar res = [];\r\n\tfor(var i = 0; i < storeNames.length; i++){\r\n\t\tvar store = this.getDatastore(storeNames[i]);\r\n\t\tif(!store.$destroyed){\r\n\t\t\tres.push(store);\r\n\t\t}\r\n\t}\r\n\treturn res;\r\n}\r\n\r\nvar createDatastoreFacade = function(){\r\n\treturn {\r\n\tcreateDatastore: function(config){\r\n\r\n\t\tvar $StoreType = (config.type || \"\").toLowerCase() == \"treedatastore\" ? TreeDataStore : DataStore;\r\n\r\n\t\tif (config) {\r\n\t\t\tvar self = this;\r\n\t\t\tconfig.openInitially = function(){ return self.config.open_tree_initially; };\r\n\t\t\tconfig.copyOnParse = function(){ return self.config.deepcopy_on_parse; };\r\n\t\t}\r\n\r\n\t\tvar store = new $StoreType(config);\r\n\t\tthis.mixin(store, createDatastoreSelect(store));\r\n\r\n\t\tif (config.name) {\r\n\t\t\tvar servicePrefix = \"datastore:\";\r\n\t\t\tvar storeAccessName = servicePrefix + config.name;\r\n\r\n\t\t\tstore.attachEvent(\"onDestroy\", function(){\r\n\t\t\t\tthis.$services.dropService(storeAccessName);\r\n\t\t\t\tvar storeList = this.$services.getService(\"datastores\");\r\n\t\t\t\tfor(var i = 0; i < storeList.length; i++){\r\n\t\t\t\t\tif(storeList[i] === config.name){\r\n\t\t\t\t\t\tstoreList.splice(i, 1);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(this));\r\n\r\n\t\t\tthis.$services.dropService(storeAccessName);\r\n\t\t\tthis.$services.setService(storeAccessName, function() { return store; } );\r\n\r\n\t\t\tvar storeList = this.$services.getService(\"datastores\");\r\n\t\t\tif (!storeList) {\r\n\t\t\t\tstoreList = [];\r\n\t\t\t\tthis.$services.setService(\"datastores\", function() { return storeList; });\r\n\t\t\t\tstoreList.push(config.name);\r\n\t\t\t} else if (storeList.indexOf(config.name) < 0) {\r\n\t\t\t\tstoreList.push(config.name);\r\n\t\t\t}\r\n\r\n\t\t\tdatastoreRender.bindDataStore(config.name, this);\r\n\r\n\t\t}\r\n\r\n\t\treturn store;\r\n\t},\r\n\tgetDatastore: function(name){\r\n\t\treturn this.$services.getService(\"datastore:\" + name);\r\n\t},\r\n\t_getDatastores: getDatastores,\r\n\r\n\trefreshData: function () {\r\n\t\tvar scrollState;\r\n\t\tif(!isHeadless(this)){\r\n\t\t\tscrollState = this.getScrollState();\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onBeforeDataRender\", []);\r\n\r\n\t\tvar stores = getDatastores.call(this);\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i].refresh();\r\n\t\t}\r\n\r\n\t\tif(this.config.preserve_scroll && !isHeadless(this) && (scrollState.x || scrollState.y)){\r\n\t\t\tthis.scrollTo(scrollState.x, scrollState.y);\r\n\t\t}\r\n\t\tthis.callEvent(\"onDataRender\", []);\r\n\r\n\t},\r\n\r\n\tisChildOf: function(childId, parentId){\r\n\t\treturn this.$data.tasksStore.isChildOf(childId, parentId);\r\n\t},\r\n\r\n\trefreshTask: function (taskId, refresh_links) {\r\n\t\tvar task = this.getTask(taskId);\r\n\t\tvar self = this;\r\n\t\tfunction refreshLinks(){\r\n\t\t\tif (refresh_links !== undefined && !refresh_links)\r\n\t\t\t\treturn;\r\n\t\t\tfor (var i = 0; i < task.$source.length; i++) {\r\n\t\t\t\tself.refreshLink(task.$source[i]);\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < task.$target.length; i++) {\r\n\t\t\t\tself.refreshLink(task.$target[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (task && this.isTaskVisible(taskId)) {\r\n\t\t\tthis.$data.tasksStore.refresh(taskId, !!this.getState(\"tasksDnd\").drag_id || refresh_links === false);// do quick refresh during drag and drop\r\n\t\t\trefreshLinks();\r\n\t\t}else if(this.isTaskExists(taskId) && this.isTaskExists(this.getParent(taskId)) && !this._bulk_dnd){\r\n\t\t\tthis.refreshTask(this.getParent(taskId));\r\n\r\n\t\t\tvar hasSplitParent = false;\r\n\t\t\tthis.eachParent(function(parent){\r\n\t\t\t\tif(hasSplitParent || this.isSplitTask(parent)){\r\n\t\t\t\t\thasSplitParent = true;\r\n\t\t\t\t}\r\n\t\t\t}, taskId);\r\n\t\t\tif(hasSplitParent){\r\n\t\t\t\trefreshLinks();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t},\r\n\trefreshLink: function (linkId) {\r\n\t\tthis.$data.linksStore.refresh(linkId, !!this.getState(\"tasksDnd\").drag_id);// do quick refresh during drag and drop\r\n\t},\r\n\r\n\tsilent: function(code){\r\n\t\tvar gantt = this;\r\n\t\tgantt.$data.tasksStore.silent(function(){\r\n\t\t\tgantt.$data.linksStore.silent(function(){\r\n\t\t\t\tcode();\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\tclearAll: function () {\r\n\t\tvar stores = getDatastores.call(this);\r\n\t\t\r\n\t\t// clear all stores without invoking clearAll event\r\n\t\t// in order to prevent calling handlers when only some stores are cleared\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i].silent(function(){\r\n\t\t\t\tstores[i].clearAll();\t\r\n\t\t\t});\r\n\t\t}\r\n\t\t// run clearAll again to invoke events\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i].clearAll();\t\r\n\t\t}\r\n\r\n\t\tthis._update_flags();\r\n\t\tthis.userdata = {};\r\n\t\tthis.callEvent(\"onClear\", []);\r\n\t\tthis.render();\r\n\t},\r\n\t_clear_data: function () {\r\n\t\tthis.$data.tasksStore.clearAll();\r\n\t\tthis.$data.linksStore.clearAll();\r\n\t\tthis._update_flags();\r\n\t\tthis.userdata = {};\r\n\t},\r\n\r\n\tselectTask: function(id){\r\n\t\tvar store = this.$data.tasksStore;\r\n\t\tif(!this.config.select_task)\r\n\t\t\treturn false;\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tif (id){\r\n\t\t\tlet oldSelectId = this.getSelectedId();\r\n\t\t\t// Don't repaint the resource panel as the data didn't change\r\n\t\t\tstore._skipResourceRepaint = true;\r\n\t\t\tstore.select(id);\r\n\t\t\tstore._skipResourceRepaint = false;\r\n\t\t\t// GS-730. Split task is not included in the tree, \r\n\t\t\t// so the datastore renderer will think that the task is not visible\r\n\t\t\tif (oldSelectId && store.pull[oldSelectId].$split_subtask && oldSelectId != id) {\r\n\t\t\t\tthis.refreshTask(oldSelectId);\r\n\t\t\t}\r\n\t\t\tif (store.pull[id].$split_subtask && oldSelectId != id) {// GS-1850. Do not repaint split task after double click\r\n\t\t\t\tthis.refreshTask(id);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn store.getSelectedId();\r\n\t},\r\n\tunselectTask: function(id){\r\n\t\tvar store = this.$data.tasksStore;\r\n\t\tstore.unselect(id);\r\n\t\t// GS-730. Split task is not included in the tree, \r\n\t\t// so the datastore renderer will think that the task is not visible\r\n\t\tif (id && store.pull[id].$split_subtask) {\r\n\t\t\tthis.refreshTask(id);\r\n\t\t}\r\n\t},\r\n\tisSelectedTask: function(id){\r\n\t\treturn this.$data.tasksStore.isSelected(id);\r\n\t},\r\n\tgetSelectedId: function() {\r\n\t\treturn this.$data.tasksStore.getSelectedId();\r\n\t}\r\n};\r\n};\r\n\r\nfunction createFacade(){\r\n\tvar res = utils.mixin({}, createDatastoreFacade());\r\n\tutils.mixin(res, createTasksFacade());\r\n\tutils.mixin(res, createLinksFacade());\r\n\treturn res;\r\n}\r\n\r\n\r\n\r\n\r\nexport default {create: createFacade};","function createDataStoreSelectMixin(store){\r\n\tvar selectedId = null;\r\n\r\n\tvar deleteItem = store._removeItemInner;\r\n\t\r\n\tfunction unselect(id){\r\n\t\tselectedId = null;\r\n\t\tthis.callEvent(\"onAfterUnselect\", [id]);\r\n\t}\r\n\r\n\tstore._removeItemInner = function(id){\r\n\t\tif(selectedId == id){\r\n\t\t\tunselect.call(this, id);\r\n\t\t}\r\n\r\n\t\tif(selectedId && this.eachItem){\r\n\t\t\tthis.eachItem(function(subItem){\r\n\t\t\t\tif(subItem.id == selectedId){\r\n\t\t\t\t\tunselect.call(this, subItem.id);\r\n\t\t\t\t}\r\n\t\t\t}, id);\r\n\t\t}\r\n\r\n\t\treturn deleteItem.apply(this, arguments);\r\n\t};\r\n\r\n\tstore.attachEvent(\"onIdChange\", function(oldId, newId) {\r\n\t\tif (store.getSelectedId() == oldId) {\r\n\t\t\tstore.silent(function () {\r\n\t\t\t\tstore.unselect(oldId);\r\n\t\t\t\tstore.select(newId);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\r\n\treturn {\r\n\t\tselect: function(id){\r\n\t\t\tif (id){\r\n\r\n\t\t\t\tif(selectedId == id)\r\n\t\t\t\t\treturn selectedId;\r\n\r\n\t\t\t\tif(!this._skip_refresh) {\r\n\t\t\t\t\tif (!this.callEvent(\"onBeforeSelect\", [id])) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.unselect();\r\n\r\n\t\t\t\tselectedId = id;\r\n\r\n\t\t\t\tif(!this._skip_refresh) {\r\n\t\t\t\t\tthis.refresh(id);\r\n\t\t\t\t\tthis.callEvent(\"onAfterSelect\", [id]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn selectedId;\r\n\t\t},\r\n\t\tgetSelectedId: function(){\r\n\t\t\treturn selectedId;\r\n\t\t},\r\n\t\tisSelected: function(id){\r\n\t\t\treturn id == selectedId;\r\n\t\t},\r\n\t\tunselect: function(id){\r\n\t\t\tvar id = id || selectedId;\r\n\t\t\tif(!id)\r\n\t\t\t\treturn;\r\n\t\t\tselectedId = null;\r\n\t\t\tif(!this._skip_refresh){\r\n\t\t\t\tthis.refresh(id);\r\n\t\t\t\tunselect.call(this, id);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default createDataStoreSelectMixin;","import * as utils from \"../../utils/utils\";\r\n\r\n\r\nvar createLinksStoreFacade = function(){\r\n\treturn {\r\n\tgetLinkCount: function () {\r\n\t\treturn this.$data.linksStore.count();\r\n\t},\r\n\r\n\tgetLink : function (id) {\r\n\t\treturn this.$data.linksStore.getItem(id);\r\n\t},\r\n\r\n\tgetLinks : function () {\r\n\t\treturn this.$data.linksStore.getItems();\r\n\t},\r\n\r\n\tisLinkExists : function (id) {\r\n\t\treturn this.$data.linksStore.exists(id);\r\n\t},\r\n\r\n\taddLink : function (link) {\r\n\t\tconst newLink = this.$data.linksStore.addItem(link);\r\n\t\t// GS-1222. Update fullOrder otherwise the link won't appear after render\r\n\t\tif (this.$data.linksStore.isSilent()){\r\n\t\t\tthis.$data.linksStore.fullOrder.push(newLink);\r\n\t\t}\r\n\t\treturn newLink;\r\n\t},\r\n\r\n\tupdateLink : function (id, data) {\r\n\t\tif (!utils.defined(data))\r\n\t\t\tdata = this.getLink(id);\r\n\t\tthis.$data.linksStore.updateItem(id, data);\r\n\t},\r\n\r\n\tdeleteLink : function (id) {\r\n\t\treturn this.$data.linksStore.removeItem(id);\r\n\t},\r\n\r\n\tchangeLinkId : function (oldid, newid) {\r\n\t\treturn this.$data.linksStore.changeId(oldid, newid);\r\n\t}\r\n};\r\n};\r\n\r\nexport default createLinksStoreFacade;","import * as utils from \"../../../utils/utils\";\r\n\r\nfunction ScaleHelper(gantt){\r\n\tvar dateHelper = gantt.date;\r\n\tvar services = gantt.$services;\r\n\r\n\treturn {\r\n\t\tgetSum: function (sizes, from, to) {\r\n\t\t\tif (to === undefined)\r\n\t\t\t\tto = sizes.length - 1;\r\n\t\t\tif (from === undefined)\r\n\t\t\t\tfrom = 0;\r\n\r\n\t\t\tvar summ = 0;\r\n\t\t\tfor (var i = from; i <= to; i++)\r\n\t\t\t\tsumm += sizes[i];\r\n\r\n\t\t\treturn summ;\r\n\t\t},\r\n\t\tsetSumWidth: function (sum_width, scale, from, to) {\r\n\t\t\tvar parts = scale.width;\r\n\r\n\t\t\tif (to === undefined)\r\n\t\t\t\tto = parts.length - 1;\r\n\t\t\tif (from === undefined)\r\n\t\t\t\tfrom = 0;\r\n\t\t\tvar length = to - from + 1;\r\n\r\n\t\t\tif (from > parts.length - 1 || length <= 0 || to > parts.length - 1)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tvar oldWidth = this.getSum(parts, from, to);\r\n\r\n\t\t\tvar diff = sum_width - oldWidth;\r\n\r\n\t\t\tthis.adjustSize(diff, parts, from, to);\r\n\t\t\tthis.adjustSize(-diff, parts, to + 1);\r\n\r\n\t\t\tscale.full_width = this.getSum(parts);\r\n\t\t},\r\n\t\tsplitSize: function (width, count) {\r\n\t\t\tvar arr = [];\r\n\t\t\tfor (var i = 0; i < count; i++) arr[i] = 0;\r\n\r\n\t\t\tthis.adjustSize(width, arr);\r\n\t\t\treturn arr;\r\n\r\n\t\t},\r\n\t\tadjustSize: function (width, parts, from, to) {\r\n\t\t\tif (!from)\r\n\t\t\t\tfrom = 0;\r\n\t\t\tif (to === undefined)\r\n\t\t\t\tto = parts.length - 1;\r\n\r\n\t\t\tvar length = to - from + 1;\r\n\r\n\t\t\tvar full = this.getSum(parts, from, to);\r\n\r\n\t\t\tfor (var i = from; i <= to; i++) {\r\n\t\t\t\tvar share = Math.floor(width * (full ? (parts[i] / full) : (1 / length)));\r\n\r\n\t\t\t\tfull -= parts[i];\r\n\t\t\t\twidth -= share;\r\n\t\t\t\tlength--;\r\n\r\n\t\t\t\tparts[i] += share;\r\n\t\t\t}\r\n\t\t\tparts[parts.length - 1] += width;\r\n\t\t},\r\n\t\tsortScales: function (scales) {\r\n\t\t\tfunction cellSize(unit, step) {\r\n\t\t\t\tvar d = new Date(1970, 0, 1);\r\n\t\t\t\treturn dateHelper.add(d, step, unit) - d;\r\n\t\t\t}\r\n\r\n\t\t\tscales.sort(function (a, b) {\r\n\t\t\t\tif (cellSize(a.unit, a.step) < cellSize(b.unit, b.step)) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else if (cellSize(a.unit, a.step) > cellSize(b.unit, b.step)) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfor (var i = 0; i < scales.length; i++) {\r\n\t\t\t\tscales[i].index = i;\r\n\t\t\t}\r\n\t\t},\r\n\t\t_isLegacyMode: function(config){\r\n\t\t\tvar scaleConfig = config || gantt.config;\r\n\t\t\treturn scaleConfig.scale_unit || scaleConfig.date_scale || scaleConfig.subscales;\r\n\t\t},\r\n\t\t_prepareScaleObject: function(scale){\r\n\t\t\tvar format = scale.format;\r\n\t\t\tif(!format){\r\n\t\t\t\tformat = scale.template || scale.date || \"%d %M\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof format === \"string\"){\r\n\t\t\t\tformat = gantt.date.date_to_str(format);\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tunit: scale.unit || \"day\",\r\n\t\t\t\tstep: scale.step || 1,\r\n\t\t\t\tformat: format,\r\n\t\t\t\tcss: scale.css\r\n\t\t\t};\r\n\t\t},\r\n\t\tprimaryScale: function(config) {\r\n\t\t\tvar templates = services.getService(\"templateLoader\");\r\n\t\t\tvar legacyMode = this._isLegacyMode(config);\r\n\r\n\t\t\tvar scaleConfig = config || gantt.config;\r\n\r\n\t\t\tvar result;\r\n\t\t\tif(legacyMode){\r\n\t\t\t\ttemplates.initTemplate(\"date_scale\", undefined, undefined, scaleConfig, gantt.config.templates);\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tunit: gantt.config.scale_unit,\r\n\t\t\t\t\tstep: gantt.config.step,\r\n\t\t\t\t\ttemplate: gantt.templates.date_scale,\r\n\t\t\t\t\tdate: gantt.config.date_scale,\r\n\t\t\t\t\tcss: gantt.templates.scale_cell_class\r\n\t\t\t\t};\r\n\t\t\t}else{\r\n\t\t\t\tvar primaryScale = scaleConfig.scales[0];\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tunit: primaryScale.unit,\r\n\t\t\t\t\tstep: primaryScale.step,\r\n\t\t\t\t\ttemplate: primaryScale.template,\r\n\t\t\t\t\tformat: primaryScale.format,\r\n\t\t\t\t\tdate: primaryScale.date,\r\n\t\t\t\t\tcss: primaryScale.css || gantt.templates.scale_cell_class\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn this._prepareScaleObject(result);\r\n\t\t},\r\n\t\tgetSubScales: function(config) {\r\n\t\t\tvar legacyMode = this._isLegacyMode(config);\r\n\t\t\tvar scaleConfig = config || gantt.config;\r\n\t\t\tvar scales;\r\n\t\t\tif(legacyMode){\r\n\t\t\t\tlet docLink = \"https://docs.dhtmlx.com/gantt/migrating.html#:~:text=%3D%20false%3B-,Time%20scale%20settings,-Configuration%20of%20time\";\r\n\t\t\t\tif (gantt.env.isFF){\r\n\t\t\t\t\tdocLink = \"https://docs.dhtmlx.com/gantt/migrating.html#6162\";\r\n\t\t\t\t}\r\n\t\t\t\t// eslint-disable-next-line no-console\r\n\t\t\t\tconsole.warn(`You are using the obsolete scale configuration.\r\nIt will stop working in the future versions.\r\nPlease migrate the configuration to the newer version:\r\n${docLink}`);\r\n\t\t\t\tscales = scaleConfig.subscales || [];\r\n\t\t\t}else{\r\n\t\t\t\tscales = scaleConfig.scales.slice(1);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn scales.map(function(scale){\r\n\t\t\t\treturn this._prepareScaleObject(scale);\r\n\t\t\t}.bind(this));\r\n\t\t},\r\n\r\n\t\tprepareConfigs: function (scales, min_coll_width, container_width, scale_height, minDate, maxDate, rtl) {\r\n\t\t\tvar heights = this.splitSize(scale_height, scales.length);\r\n\t\t\tvar full_width = container_width;\r\n\r\n\t\t\tvar configs = [];\r\n\t\t\tfor (var i = scales.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar main_scale = (i == scales.length - 1);\r\n\t\t\t\tvar cfg = this.initScaleConfig(scales[i], minDate, maxDate);\r\n\t\t\t\tif (main_scale) {\r\n\t\t\t\t\tthis.processIgnores(cfg);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.initColSizes(cfg, min_coll_width, full_width, heights[i]);\r\n\t\t\t\tthis.limitVisibleRange(cfg);\r\n\r\n\t\t\t\tif (main_scale) {\r\n\t\t\t\t\tfull_width = cfg.full_width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfigs.unshift(cfg);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfor (var i = 0; i < configs.length - 1; i++) {\r\n\t\t\t\tthis.alineScaleColumns(configs[configs.length - 1], configs[i]);\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < configs.length; i++) {\r\n\r\n\t\t\t\tif(rtl){\r\n\t\t\t\t\tthis.reverseScale(configs[i]);\r\n\t\t\t\t}\r\n\t\t\t\tthis.setPosSettings(configs[i]);\r\n\t\t\t}\r\n\t\t\treturn configs;\r\n\r\n\t\t},\r\n\r\n\t\treverseScale: function(scale){\r\n\t\t\tscale.width = scale.width.reverse();\r\n\t\t\tscale.trace_x = scale.trace_x.reverse();\r\n\r\n\t\t\tvar indexes = scale.trace_indexes;\r\n\t\t\tscale.trace_indexes = {};\r\n\t\t\tscale.trace_index_transition = {};\r\n\t\t\tscale.rtl = true;\r\n\t\t\tfor(var i = 0; i < scale.trace_x.length; i++){\r\n\t\t\t\tscale.trace_indexes[scale.trace_x[i].valueOf()] = i;\r\n\t\t\t\tscale.trace_index_transition[indexes[scale.trace_x[i].valueOf()]] = i;\r\n\t\t\t}\r\n\t\t\treturn scale;\r\n\t\t},\r\n\r\n\t\tsetPosSettings: function (config) {\r\n\t\t\tfor (var i = 0, len = config.trace_x.length; i < len; i++) {\r\n\t\t\t\tconfig.left.push((config.width[i - 1] || 0) + (config.left[i - 1] || 0));\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_ignore_time_config: function (date, scale) {\r\n\r\n\t\t\tif (gantt.config.skip_off_time) {\r\n\t\t\t\tvar skip = true;\r\n\t\t\t\tvar probe = date;\r\n\r\n\t\t\t\t// check dates in case custom scale unit, e.g. {unit: \"month\", step: 3}\r\n\t\t\t\tfor (var i = 0; i < scale.step; i++) {\r\n\t\t\t\t\tif (i) {\r\n\t\t\t\t\t\tprobe = dateHelper.add(date, i, scale.unit);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tskip = skip && !this.isWorkTime(probe, scale.unit);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn skip;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\t//defined in an extension\r\n\t\tprocessIgnores: function (config) {\r\n\t\t\tconfig.ignore_x = {};\r\n\t\t\tconfig.display_count = config.count;\r\n\t\t},\r\n\t\tinitColSizes: function (config, min_col_width, full_width, line_height) {\r\n\t\t\tvar cont_width = full_width;\r\n\r\n\t\t\tconfig.height = line_height;\r\n\r\n\t\t\tvar column_count = config.display_count === undefined ? config.count : config.display_count;\r\n\r\n\t\t\tif (!column_count)\r\n\t\t\t\tcolumn_count = 1;\r\n\r\n\t\t\tconfig.col_width = Math.floor(cont_width / column_count);\r\n\r\n\t\t\tif (min_col_width) {\r\n\t\t\t\tif (config.col_width < min_col_width) {\r\n\t\t\t\t\tconfig.col_width = min_col_width;\r\n\t\t\t\t\tcont_width = config.col_width * column_count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tconfig.width = [];\r\n\t\t\tvar ignores = config.ignore_x || {};\r\n\t\t\tfor (var i = 0; i < config.trace_x.length; i++) {\r\n\t\t\t\tif (ignores[config.trace_x[i].valueOf()] || (config.display_count == config.count)) {\r\n\t\t\t\t\tconfig.width[i] = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// width of month columns should be proportional month duration\r\n\t\t\t\t\tvar width = 1;\r\n\t\t\t\t\tif (config.unit == \"month\") {\r\n\t\t\t\t\t\tvar days = Math.round((dateHelper.add(config.trace_x[i], config.step, config.unit) - config.trace_x[i]) / (1000 * 60 * 60 * 24));\r\n\t\t\t\t\t\twidth = days;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconfig.width[i] = width;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.adjustSize(cont_width - this.getSum(config.width)/* 1 width per column from the code above */, config.width);\r\n\t\t\tconfig.full_width = this.getSum(config.width);\r\n\t\t},\r\n\t\tinitScaleConfig: function (config, min_date, max_date) {\r\n\t\t\tvar cfg = utils.mixin({\r\n\t\t\t\tcount: 0,\r\n\t\t\t\tcol_width: 0,\r\n\t\t\t\tfull_width: 0,\r\n\t\t\t\theight: 0,\r\n\t\t\t\twidth: [],\r\n\t\t\t\tleft: [],\r\n\t\t\t\ttrace_x: [],\r\n\t\t\t\ttrace_indexes: {},\r\n\t\t\t\tmin_date: new Date(min_date),\r\n\t\t\t\tmax_date: new Date(max_date)\r\n\t\t\t}, config);\r\n\r\n\t\t\tthis.eachColumn(config.unit, config.step, min_date, max_date, function (date) {\r\n\t\t\t\tcfg.count++;\r\n\t\t\t\tcfg.trace_x.push(new Date(date));\r\n\t\t\t\tcfg.trace_indexes[date.valueOf()] = cfg.trace_x.length - 1;\r\n\t\t\t});\r\n\r\n\t\t\tcfg.trace_x_ascending = cfg.trace_x.slice();\r\n\t\t\treturn cfg;\r\n\t\t},\r\n\t\titerateScales: function (lower_scale, upper_scale, from, to, callback) {\r\n\t\t\tvar upper_dates = upper_scale.trace_x;\r\n\t\t\tvar lower_dates = lower_scale.trace_x;\r\n\r\n\t\t\tvar prev = from || 0;\r\n\t\t\tvar end = to || (lower_dates.length - 1);\r\n\t\t\tvar prevUpper = 0;\r\n\r\n\r\n\t\t\tfor (var up = 1; up < upper_dates.length; up++) {\r\n\t\t\t\tvar target_index = (lower_scale.trace_indexes[+upper_dates[up]]);\r\n\t\t\t\tif (target_index !== undefined && target_index <= end) {\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback.apply(this, [prevUpper, up, prev, target_index]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tprev = target_index;\r\n\t\t\t\t\tprevUpper = up;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\talineScaleColumns: function (lower_scale, upper_scale, from, to) {\r\n\t\t\tthis.iterateScales(lower_scale, upper_scale, from, to, function (upper_start, upper_end, lower_start, lower_end) {\r\n\t\t\t\tvar targetWidth = this.getSum(lower_scale.width, lower_start, lower_end - 1);\r\n\t\t\t\tvar actualWidth = this.getSum(upper_scale.width, upper_start, upper_end - 1);\r\n\t\t\t\tif (actualWidth != targetWidth) {\r\n\t\t\t\t\tthis.setSumWidth(targetWidth, upper_scale, upper_start, upper_end - 1);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\teachColumn: function (unit, step, min_date, max_date, callback) {\r\n\t\t\tvar start = new Date(min_date),\r\n\t\t\t\tend = new Date(max_date);\r\n\t\t\tif (dateHelper[unit + \"_start\"]) {\r\n\t\t\t\tstart = dateHelper[unit + \"_start\"](start);\r\n\t\t\t}\r\n\r\n\t\t\tvar curr = new Date(start);\r\n\t\t\tif (+curr >= +end) {\r\n\t\t\t\tend = dateHelper.add(curr, step, unit);\r\n\t\t\t}\r\n\t\t\twhile (+curr < +end) {\r\n\t\t\t\tcallback.call(this, new Date(curr));\r\n\t\t\t\tvar tzOffset = curr.getTimezoneOffset();\r\n\t\t\t\tcurr = dateHelper.add(curr, step, unit);\r\n\t\t\t\tcurr = gantt._correct_dst_change(curr, tzOffset, step, unit);\r\n\t\t\t\tif (dateHelper[unit + '_start'])\r\n\t\t\t\t\tcurr = dateHelper[unit + \"_start\"](curr);\r\n\t\t\t}\r\n\t\t},\r\n\t\tlimitVisibleRange: function (cfg) {\r\n\t\t\tvar dates = cfg.trace_x;\r\n\r\n\t\t\tvar left = 0, right = cfg.width.length - 1;\r\n\t\t\tvar diff = 0;\r\n\t\t\tif (+dates[0] < +cfg.min_date && left != right) {\r\n\t\t\t\tvar width = Math.floor(cfg.width[0] * ((dates[1] - cfg.min_date) / (dates[1] - dates[0])));\r\n\t\t\t\tdiff += cfg.width[0] - width;\r\n\t\t\t\tcfg.width[0] = width;\r\n\r\n\t\t\t\tdates[0] = new Date(cfg.min_date);\r\n\t\t\t}\r\n\r\n\t\t\tvar last = dates.length - 1;\r\n\t\t\tvar lastDate = dates[last];\r\n\t\t\tvar outDate = dateHelper.add(lastDate, cfg.step, cfg.unit);\r\n\t\t\tif (+outDate > +cfg.max_date && last > 0) {\r\n\t\t\t\tvar width = cfg.width[last] - Math.floor(cfg.width[last] * ((outDate - cfg.max_date) / (outDate - lastDate)));\r\n\t\t\t\tdiff += cfg.width[last] - width;\r\n\t\t\t\tcfg.width[last] = width;\r\n\t\t\t}\r\n\r\n\t\t\tif (diff) {\r\n\t\t\t\tvar full = this.getSum(cfg.width);\r\n\t\t\t\tvar shared = 0;\r\n\t\t\t\tfor (var i = 0; i < cfg.width.length; i++) {\r\n\t\t\t\t\tvar share = Math.floor(diff * (cfg.width[i] / full));\r\n\t\t\t\t\tcfg.width[i] += share;\r\n\t\t\t\t\tshared += share;\r\n\t\t\t\t}\r\n\t\t\t\tthis.adjustSize(diff - shared, cfg.width);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default ScaleHelper;\r\n","import ScaleHelper from \"./ui/timeline/scales_ignore\";\r\nimport PrimaryScaleHelper from \"./ui/timeline/scales\";\r\n\r\nfunction resolveConfigRange(unit, gantt){\r\n\tvar range = {\r\n\t\tstart_date:null,\r\n\t\tend_date:null\r\n\t};\r\n\r\n\tif (gantt.config.start_date && gantt.config.end_date) {\r\n\t\trange.start_date = gantt.date[unit + \"_start\"](new Date(gantt.config.start_date));\r\n\r\n\t\tvar end = new Date(gantt.config.end_date);\r\n\t\tvar start_interval = gantt.date[unit + \"_start\"](new Date(end));\r\n\t\tif (+end != +start_interval) {\r\n\t\t\tend = gantt.date.add(start_interval, 1, unit);\r\n\t\t} else {\r\n\t\t\tend = start_interval;\r\n\t\t}\r\n\r\n\t\trange.end_date = end;\r\n\t}\r\n\treturn range;\r\n}\r\n\r\nfunction _scale_range_unit(gantt) {\r\n\tvar primaryScale = (new PrimaryScaleHelper(gantt)).primaryScale();\r\n\tvar unit = primaryScale.unit;\r\n\tvar step = primaryScale.step;\r\n\tif (gantt.config.scale_offset_minimal) {\r\n\r\n\t\tvar helper = new ScaleHelper(gantt);\r\n\t\tvar scales = [helper.primaryScale()].concat(helper.getSubScales());\r\n\r\n\t\thelper.sortScales(scales);\r\n\t\tunit = scales[scales.length - 1].unit;\r\n\t\tstep = scales[scales.length - 1].step || 1;\r\n\t}\r\n\treturn { unit:unit, step:step };\r\n}\r\n\r\nfunction _init_tasks_range(gantt) {\r\n\tvar cfg = _scale_range_unit(gantt);\r\n\tvar unit = cfg.unit,\r\n\t\tstep = cfg.step;\r\n\tvar range = resolveConfigRange(unit, gantt);\r\n\r\n\t// GS-1544: Show correct date range if we have tasks or only projects\r\n\tif(!(range.start_date && range.end_date)){\r\n\t\tvar onlyProjectTasks = true;\r\n\t\tvar tasks = gantt.getTaskByTime();\r\n\t\tfor (var i = 0; i < tasks.length; i++) {\r\n\t\t\tvar task = tasks[i];\r\n\t\t\tif (task.type !== gantt.config.types.project){\r\n\t\t\t\tonlyProjectTasks = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (tasks.length && onlyProjectTasks){\r\n\t\t\tvar start_date = tasks[0].start_date;\r\n\t\t\tvar end_date = gantt.date.add(start_date, 1, gantt.config.duration_unit);\r\n\t\t\trange = {\r\n\t\t\t\tstart_date: new Date(start_date),\r\n\t\t\t\tend_date: new Date(end_date)\r\n\t\t\t};\r\n\t\t} else{\r\n\t\t\trange = gantt.getSubtaskDates();\r\n\t\t}\r\n\r\n\t\tif(!range.start_date || !range.end_date){\r\n\t\t\trange = {\r\n\t\t\t\tstart_date: new Date(),\r\n\t\t\t\tend_date: new Date()\r\n\t\t\t};\r\n\t\t}\r\n\t\t// extend the displayed date range including the constraints, deadlines and baselines\r\n\t\tgantt.eachTask(function(task){\r\n\t\t\tif (gantt.config.deadlines !== false && task.deadline){\r\n\t\t\t\textendRangeForDates(range, task.deadline, task.deadline);\r\n\t\t\t}\r\n\t\t\tif (task.constraint_date && task.constraint_type){\r\n\t\t\t\tif (gantt.config.constraint_types && task.constraint_type !== gantt.config.constraint_types.ASAP && task.constraint_type !== gantt.config.constraint_types.ALAP){\r\n\t\t\t\t\textendRangeForDates(range, task.constraint_date, task.constraint_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (gantt.config.baselines !== false && task.baselines){\r\n\t\t\t\ttask.baselines.forEach(function(baseline){\r\n\t\t\t\t\textendRangeForDates(range, baseline.start_date, baseline.end_date);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trange.start_date = gantt.date[unit + \"_start\"](range.start_date);\r\n\t\trange.start_date = gantt.calculateEndDate({\r\n\t\t\tstart_date: gantt.date[unit + \"_start\"](range.start_date),\r\n\t\t\tduration: -1,\r\n\t\t\tunit: unit,\r\n\t\t\tstep:step\r\n\t\t});//one free column before first task\r\n\r\n\t\trange.end_date = gantt.date[unit + \"_start\"](range.end_date);\r\n\t\trange.end_date = gantt.calculateEndDate({start_date: range.end_date, duration: 2, unit: unit, step:step});//one free column after last task\r\n\t}\r\n\r\n\tgantt._min_date = range.start_date;\r\n\tgantt._max_date = range.end_date;\r\n}\r\n\r\nfunction extendRangeForDates(range, start_date, end_date){\r\n\tif (start_date < range.start_date){\r\n\t\trange.start_date = new Date(start_date);\r\n\t}\r\n\tif (end_date > range.end_date){\r\n\t\trange.end_date = new Date(end_date);\r\n\t}\r\n}\r\n\r\nfunction _adjust_scales(gantt) {\r\n\tif (gantt.config.fit_tasks) {\r\n\t\tvar old_min = +gantt._min_date,\r\n\t\t\told_max = +gantt._max_date;\r\n\t\t//this._init_tasks_range();\r\n\t\tif (+gantt._min_date != old_min || +gantt._max_date != old_max) {\r\n\t\t\tgantt.render();\r\n\r\n\t\t\tgantt.callEvent(\"onScaleAdjusted\", []);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nexport default function updateTasksRange(gantt){\r\n\t_init_tasks_range(gantt);\r\n\t_adjust_scales(gantt);\r\n};\r\n","function copyLinkIdsArray(gantt, linkIds, targetHash){\r\n\tfor(var i = 0; i < linkIds.length; i++) {\r\n\t\tif(gantt.isLinkExists(linkIds[i])){\r\n\t\t\ttargetHash[linkIds[i]] = gantt.getLink(linkIds[i]);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction copyLinkIds(gantt, task, targetHash){\r\n\tcopyLinkIdsArray(gantt, task.$source, targetHash);\r\n\tcopyLinkIdsArray(gantt, task.$target, targetHash);\r\n}\r\n\r\nfunction getSubtreeLinks(gantt, rootId){\r\n\tvar res = {};\r\n\r\n\tif(gantt.isTaskExists(rootId)){\r\n\t\tcopyLinkIds(gantt, gantt.getTask(rootId), res);\r\n\t}\r\n\r\n\tgantt.eachTask(function(child){\r\n\t\tcopyLinkIds(gantt, child, res);\r\n\t}, rootId);\r\n\r\n\treturn res;\r\n}\r\n\r\nfunction getSubtreeTasks(gantt, rootId){\r\n\tvar res = {};\r\n\r\n\tgantt.eachTask(function(child){\r\n\t\tres[child.id] = child;\r\n\t}, rootId);\r\n\r\n\treturn res;\r\n}\r\n\r\nexport default {\r\n\tgetSubtreeLinks: getSubtreeLinks,\r\n\tgetSubtreeTasks: getSubtreeTasks\r\n};","import * as helpers from \"../../utils/helpers\";\r\nimport treeHelper from \"../../utils/task_tree_helpers\";\r\n\r\n\r\nexport default class DataProcessorEvents {\r\n\tprotected _dataProcessorHandlers: any[];\r\n\tprotected $gantt: any;\r\n\tprotected $dp: any;\r\n\r\n\tconstructor(gantt: any, dp: any) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$dp = dp;\r\n\t\tthis._dataProcessorHandlers = [];\r\n\t}\r\n\r\n\tattach() {\r\n\t\tconst dp = this.$dp;\r\n\t\tconst gantt = this.$gantt;\r\n\t\tconst cascadeDelete = {};\r\n\r\n\t\tconst clientSideDelete = (id) => {\r\n\t\t\treturn this.clientSideDelete(id, dp, gantt);\r\n\t\t};\r\n\r\n\t\tfunction getTaskLinks(task) {\r\n\t\t\tlet _links = [];\r\n\r\n\t\t\tif (task.$source) {\r\n\t\t\t\t_links = _links.concat(task.$source);\r\n\t\t\t}\r\n\t\t\tif (task.$target) {\r\n\t\t\t\t_links = _links.concat(task.$target);\r\n\t\t\t}\r\n\r\n\t\t\treturn _links;\r\n\t\t}\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskAdd\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true, \"inserted\");\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskUpdate\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\r\n\t\t\t\t// gantt can be destroyed/reinitialized after dp.setUpdated\r\n\t\t\t\tif(gantt._sendTaskOrder){\r\n\t\t\t\t\tgantt._sendTaskOrder(id, item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onBeforeTaskDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.config.cascade_delete) {\r\n\t\t\t\tcascadeDelete[id] = {\r\n\t\t\t\t\ttasks: treeHelper.getSubtreeTasks(gantt, id),\r\n\t\t\t\t\tlinks: treeHelper.getSubtreeLinks(gantt, id)\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t// GS-631. Keep the deleted item in Gantt until we receive the successful response from the server\r\n\t\t\tif (dp.deleteAfterConfirmation) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true, \"deleted\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tdp.setGanttMode(\"tasks\");\r\n\r\n\t\t\t// not send delete request if item is not inserted into the db - just remove it from the client\r\n\t\t\tconst needDbDelete = !clientSideDelete(id);\r\n\t\t\tconst needCascadeDelete = gantt.config.cascade_delete && cascadeDelete[id];\r\n\t\t\tif (!needDbDelete && !needCascadeDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (needCascadeDelete) {\r\n\t\t\t\tconst dpMode = dp.updateMode;\r\n\t\t\t\tdp.setUpdateMode(\"off\");\r\n\r\n\t\t\t\tconst cascade = cascadeDelete[id];\r\n\t\t\t\tfor (const i in cascade.tasks) {\r\n\t\t\t\t\tif (!clientSideDelete(i)) {\r\n\t\t\t\t\t\tdp.storeItem(cascade.tasks[i]);\r\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tfor (const i in cascade.links) {\r\n\t\t\t\t\tif (!clientSideDelete(i)) {\r\n\t\t\t\t\t\tdp.storeItem(cascade.links[i]);\r\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcascadeDelete[id] = null;\r\n\r\n\t\t\t\tif (dpMode !== \"off\") {\r\n\t\t\t\t\tdp.sendAllData();\r\n\t\t\t\t}\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdateMode(dpMode);\r\n\t\t\t}\r\n\r\n\t\t\tif (needDbDelete){\r\n\t\t\t\tdp.storeItem(item);\r\n\t\t\t\tif (!dp.deleteAfterConfirmation){\r\n\t\t\t\t\tdp.setUpdated(id, true, \"deleted\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif (dp.updateMode !== \"off\" && !dp._tSend) {\r\n\t\t\t\tdp.sendAllData();\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkUpdate\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isLinkExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkAdd\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isLinkExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tdp.setGanttMode(\"links\");\r\n\r\n\t\t\tconst needDbDelete = !clientSideDelete(id);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onRowDragEnd\", function(id, target) { // tslint:disable-line\r\n\t\t\tgantt._sendTaskOrder(id, gantt.getTask(id));\r\n\t\t}));\r\n\r\n\t\tlet tasks = null;\r\n\t\tlet links = null;\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onTaskIdChange\", function(oldId, newId) { // tslint:disable-line\r\n\t\t\tif (!dp._waitMode) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst children = gantt.getChildren(newId);\r\n\t\t\tif (children.length) {\r\n\t\t\t\ttasks = tasks || {};\r\n\r\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\r\n\t\t\t\t\tconst ch = this.getTask(children[i]);\r\n\t\t\t\t\ttasks[ch.id] = ch;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst item = this.getTask(newId);\r\n\t\t\tconst itemLinks = getTaskLinks(item);\r\n\r\n\t\t\tif (itemLinks.length) {\r\n\t\t\t\tlinks = links || {};\r\n\r\n\t\t\t\tfor (let i = 0; i < itemLinks.length; i++) {\r\n\t\t\t\t\tconst link = this.getLink(itemLinks[i]);\r\n\t\t\t\t\tlinks[link.id] = link;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tdp.attachEvent(\"onAfterUpdateFinish\", function() {\r\n\t\t\tif (tasks || links) {\r\n\t\t\t\tgantt.batchUpdate(function() {\r\n\t\t\t\t\tfor (const id in tasks) {\r\n\t\t\t\t\t\tgantt.updateTask(tasks[id].id);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (const id in links) {\r\n\t\t\t\t\t\tgantt.updateLink(links[id].id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttasks = null;\r\n\t\t\t\t\tlinks = null;\r\n\t\t\t\t});\r\n\t\t\t\tif (tasks) {\r\n\t\t\t\t\tgantt._dp.setGanttMode(\"tasks\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgantt._dp.setGanttMode(\"links\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"onBeforeDataSending\", function() {\r\n\t\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tlet url = this._serverProcessor;\r\n\t\t\tif (this._tMode === \"REST-JSON\" || this._tMode === \"REST\") {\r\n\t\t\t\tconst mode = this._ganttMode;\r\n\r\n\t\t\t\turl = url.substring(0, url.indexOf(\"?\") > -1 ? url.indexOf(\"?\") : url.length);\r\n\t\t\t\t// editing=true&\r\n\t\t\t\tthis.serverProcessor = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + mode;\r\n\t\t\t} else {\r\n\t\t\t\tconst pluralizedMode = this._ganttMode + \"s\";\r\n\t\t\t\tthis.serverProcessor = url + gantt.ajax.urlSeparator(url) + \"gantt_mode=\" + pluralizedMode;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"insertCallback\", function insertCallback(upd, id, parent, mode) { // tslint:disable-line\r\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\r\n\t\t\tconst methods = {\r\n\t\t\t\tadd: gantt.addTask,\r\n\t\t\t\tisExist: gantt.isTaskExists\r\n\t\t\t};\r\n\t\t\tif (mode === \"links\") {\r\n\t\t\t\tmethods.add = gantt.addLink;\r\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\r\n\t\t\t}\r\n\t\t\tif (methods.isExist.call(gantt, id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdata.id = id;\r\n\t\t\tmethods.add.call(gantt, data);\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"updateCallback\", function updateCallback(upd, id) {\r\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\r\n\t\t\tif (!gantt.isTaskExists(id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst objData = gantt.getTask(id);\r\n\t\t\tfor (const key in data) {\r\n\t\t\t\tlet property = data[key];\r\n\t\t\t\tswitch (key) {\r\n\t\t\t\t\tcase \"id\":\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tcase \"start_date\":\r\n\t\t\t\t\tcase \"end_date\":\r\n\t\t\t\t\t\tproperty = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date(property) : gantt.templates.parse_date(property);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"duration\":\r\n\t\t\t\t\t\tobjData.end_date = gantt.calculateEndDate({start_date: objData.start_date, duration: property, task:objData});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tobjData[key] = property;\r\n\t\t\t}\r\n\t\t\tgantt.updateTask(id);\r\n\t\t\tgantt.refreshData();\r\n\t\t});\r\n\t\tdp.attachEvent(\"deleteCallback\", function deleteCallback(upd, id, parent, mode) { // tslint:disable-line\r\n\t\t\tconst methods = {\r\n\t\t\t\tdelete: gantt.deleteTask,\r\n\t\t\t\tisExist: gantt.isTaskExists\r\n\t\t\t};\r\n\t\t\tif (mode === \"links\") {\r\n\t\t\t\tmethods.delete = gantt.deleteLink;\r\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\r\n\t\t\t} else if(mode === \"assignment\") {\r\n\t\t\t\tmethods.delete = function(val) {\r\n\t\t\t\t\tgantt.$data.assignmentsStore.remove(val);\r\n\t\t\t\t};\r\n\t\t\t\tmethods.isExist = function(val){\r\n\t\t\t\t\treturn gantt.$data.assignmentsStore.exists(val);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tif (methods.isExist.call(gantt, id)) {\r\n\t\t\t\tmethods.delete.call(gantt, id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.handleResourceCRUD(dp, gantt);\r\n\t\tthis.handleResourceAssignmentCRUD(dp, gantt);\r\n\t\tthis.handleBaselineCRUD(dp, gantt);\r\n\t}\r\n\r\n\tclientSideDelete(id, dp, gantt){\r\n\t\tconst updated = dp.updatedRows.slice();\r\n\t\tlet clientOnly = false;\r\n\r\n\t\tif(gantt.getUserData(id, \"!nativeeditor_status\", dp._ganttMode) === \"true_deleted\"){\r\n\t\t\tclientOnly = true;\r\n\t\t\tdp.setUpdated(id,false);\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < updated.length && !dp._in_progress[id]; i++) {\r\n\t\t\tif (updated[i] === id) {\r\n\t\t\t\tif (gantt.getUserData(id, \"!nativeeditor_status\", dp._ganttMode) === \"inserted\") {\r\n\t\t\t\t\tclientOnly = true;\r\n\t\t\t\t}\r\n\t\t\t\tdp.setUpdated(id,false);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clientOnly;\r\n\t}\r\n\r\n\thandleResourceAssignmentCRUD(dp, gantt){\r\n\t\tif(!gantt.config.resources || gantt.config.resources.dataprocessor_assignments !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst assignmentsStore = gantt.getDatastore(gantt.config.resource_assignment_store);\r\n\t\tconst insertedTasks = {};\r\n\t\tconst pendingAssignments = {};\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskAdd\", function(id, task){\r\n\t\t\tinsertedTasks[id] = true;\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tfunction putAssignmentToQueue(item){\r\n\t\t\tpendingAssignments[item.id] = item;\r\n\t\t\tinsertedTasks[item.task_id] = true;\r\n\t\t}\r\n\r\n\t\tfunction insertResourceAssignment(assignment){\r\n\t\t\tconst id = assignment.id;\r\n\t\t\tif (assignmentsStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"assignment\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t\tdelete pendingAssignments[id];\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onTaskIdChange\", function(id, newId){\r\n\t\t\tdelete insertedTasks[id];\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tif(insertedTasks[item.task_id]){\r\n\t\t\t\t// inserting assignment of new task\r\n\t\t\t\t// task is not saved yet, need to wait till it gets permanent id and save assigmnents after that\r\n\t\t\t\tputAssignmentToQueue(item);\r\n\t\t\t}else{\r\n\t\t\t\tinsertResourceAssignment(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (assignmentsStore.exists(id)) {\r\n\t\t\t\tif(pendingAssignments[id]){\r\n\t\t\t\t\tinsertResourceAssignment(item);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdp.setGanttMode(\"assignment\");\r\n\t\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"assignment\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\r\n\t}\r\n\r\n\thandleResourceCRUD(dp, gantt){\r\n\t\tif(!gantt.config.resources || gantt.config.resources.dataprocessor_resources !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst resourcesStore = gantt.getDatastore(gantt.config.resource_store);\r\n\r\n\t\tfunction insertResource(resource){\r\n\t\t\tconst id = resource.id;\r\n\t\t\tif (resourcesStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"resource\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tinsertResource(item);\r\n\t\t});\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (resourcesStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"resource\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"resource\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\r\n\t}\r\n\r\n\thandleBaselineCRUD(dp, gantt){\r\n\t\tif(!gantt.config.baselines || gantt.config.baselines.dataprocessor_baselines !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst baselineStore = gantt.getDatastore(gantt.config.baselines.datastore);\r\n\r\n\t\tfunction insertResource(resource){\r\n\t\t\tconst id = resource.id;\r\n\t\t\tif (baselineStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"baseline\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbaselineStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tinsertResource(item);\r\n\t\t});\r\n\r\n\t\tbaselineStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (baselineStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"baseline\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tbaselineStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"baseline\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\t}\r\n\r\n\tdetach() {\r\n\t\thelpers.forEach(this._dataProcessorHandlers, (e) => {\r\n\t\t\tthis.$gantt.detachEvent(e);\r\n\t\t});\r\n\t\tthis._dataProcessorHandlers = [];\r\n\t}\r\n}\r\n","import * as utils from \"../../utils/utils\";\r\n\r\nexport default class SimpleStorage {\r\n\tpublic static create = () : SimpleStorage => {\r\n\t\treturn new SimpleStorage();\r\n\t};\r\n\r\n\tprotected _storage: { [id: string]: any; };\r\n\r\n\tprotected constructor() {\r\n\t\tthis._storage = {};\r\n\t}\r\n\r\n\tpublic clear = (): void => {\r\n\t\tthis._storage = {};\r\n\t};\r\n\r\n\tpublic storeItem = (item: any): void => {\r\n\t\tthis._storage[item.id] = utils.copy(item);\r\n\t};\r\n\r\n\tpublic getStoredItem = (id: string): any => {\r\n\t\treturn this._storage[id] || null;\r\n\t};\r\n}","import eventable from \"../../utils/eventable\";\r\nimport * as helpers from \"../../utils/helpers\";\r\nimport * as utils from \"../../utils/utils\";\r\nimport DataProcessorEvents from \"./data_processor_events\";\r\nimport extendGantt from \"./extend_gantt\";\r\nimport SimpleStorage from \"./simple_storage\";\r\nimport global from \"../../utils/global\";\r\n\r\nexport interface DataProcessor { // tslint:disable-line\r\n\t$gantt: any;\r\n\tdetachAllEvents: any;\r\n\tattachEvent: any;\r\n\tcallEvent: any;\r\n\r\n\tserverProcessor: string;\r\n\taction_param: string;\r\n\tupdatedRows: any[];\r\n\tautoUpdate: boolean;\r\n\tupdateMode: string;\r\n\tmessages: any[];\r\n\tstyles: object;\r\n\tdnd: any;\r\n\tdeleteAfterConfirmation?: any;\r\n}\r\n\r\nexport function createDataProcessor(config: any) {\r\n\tlet router;\r\n\tlet tMode;\r\n\tlet headers;\r\n\tif (config instanceof Function) {\r\n\t\trouter = config;\r\n\t} else if (config.hasOwnProperty(\"router\")) {\r\n\t\trouter = config.router;\r\n\t} else if (config.hasOwnProperty(\"assignment\") || config.hasOwnProperty(\"baseline\") || config.hasOwnProperty(\"link\") || config.hasOwnProperty(\"task\")) {\r\n\t\trouter = config;\r\n\t} else if(config.hasOwnProperty(\"headers\")){\r\n\t\t// GS-2312 for custom headers\r\n\t\theaders = config.headers;\r\n\t}\r\n\tif (router) {\r\n\t\ttMode = \"CUSTOM\";\r\n\t} else {\r\n\t\ttMode = config.mode || \"REST-JSON\";\r\n\t}\r\n\tconst gantt = this; // tslint:disable-line\r\n\tconst dp = new DataProcessor(config.url);\r\n\r\n\r\n\tdp.init(gantt);\r\n\tdp.setTransactionMode({\r\n\t\tmode: tMode,\r\n\t\trouter,\r\n\t\theaders\r\n\t}, config.batchUpdate);\r\n\tif(config.deleteAfterConfirmation){\r\n\t\tdp.deleteAfterConfirmation = config.deleteAfterConfirmation;\r\n\t}\r\n\treturn dp;\r\n}\r\n\r\nexport class DataProcessor {\r\n\tpublic modes: object;\r\n\tpublic serverProcessor: string;\r\n\tpublic action_param: string; // tslint:disable-line\r\n\tpublic updatedRows: any[];\r\n\tpublic autoUpdate: boolean;\r\n\tpublic updateMode: string;\r\n\tpublic messages: any[];\r\n\tpublic styles: object;\r\n\tpublic dnd: any;\r\n\r\n\tprotected _tMode: string;\r\n\tprotected _headers: any;\r\n\tprotected _payload: any;\r\n\tprotected _postDelim: string;\r\n\tprotected _waitMode: number;\r\n\tprotected _in_progress: object; // tslint:disable-line\r\n\tprotected _invalid: object;\r\n\tprotected _storage: SimpleStorage;\r\n\tprotected _tSend: boolean;\r\n\tprotected _serializeAsJson: boolean;\r\n\tprotected _router: any;\r\n\tprotected _utf: boolean;\r\n\tprotected _methods: any[];\r\n\tprotected _user: any;\r\n\tprotected _uActions: object;\r\n\tprotected _needUpdate: boolean;\r\n\tprotected _ganttMode: \"task\"|\"link\";\r\n\tprotected _routerParametersFormat: \"parameters\"|\"object\";\r\n\r\n\tprotected _silent_mode: any; // tslint:disable-line\r\n\tprotected _updateBusy: any;\r\n\tprotected _serverProcessor: any;\r\n\tprotected _initialized: boolean;\r\n\r\n\tconstructor(serverProcessorURL?) {\r\n\t\tthis.serverProcessor = serverProcessorURL;\r\n\t\tthis.action_param = \"!nativeeditor_status\";\r\n\r\n\t\tthis.updatedRows = []; // ids of updated rows\r\n\r\n\t\tthis.autoUpdate = true;\r\n\t\tthis.updateMode = \"cell\";\r\n\t\tthis._headers = null;\r\n\t\tthis._payload = null;\r\n\t\tthis._postDelim = \"_\";\r\n\t\tthis._routerParametersFormat = \"parameters\";\r\n\r\n\t\tthis._waitMode = 0;\r\n\t\tthis._in_progress = {}; // ?\r\n\t\tthis._storage = SimpleStorage.create();\r\n\t\tthis._invalid = {};\r\n\t\tthis.messages = [];\r\n\r\n\t\tthis.styles = {\r\n\t\t\tupdated: \"font-weight:bold;\",\r\n\t\t\tinserted: \"font-weight:bold;\",\r\n\t\t\tdeleted: \"text-decoration : line-through;\",\r\n\t\t\tinvalid: \"background-color:FFE0E0;\",\r\n\t\t\tinvalid_cell: \"border-bottom:2px solid red;\",\r\n\t\t\terror: \"color:red;\",\r\n\t\t\tclear: \"font-weight:normal;text-decoration:none;\"\r\n\t\t};\r\n\t\tthis.enableUTFencoding(true);\r\n\t\teventable(this);\r\n\t}\r\n\r\n\tsetTransactionMode(mode:any, total?:any) {\r\n\t\tif (typeof mode === \"object\") {\r\n\t\t\tthis._tMode = mode.mode || this._tMode;\r\n\r\n\t\t\tif (utils.defined(mode.headers)) {\r\n\t\t\t\tthis._headers = mode.headers;\r\n\t\t\t}\r\n\r\n\t\t\tif (utils.defined(mode.payload)) {\r\n\t\t\t\tthis._payload = mode.payload;\r\n\t\t\t}\r\n\t\t\tthis._tSend = !!total;\r\n\t\t} else {\r\n\t\t\tthis._tMode = mode;\r\n\t\t\tthis._tSend = total;\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"REST\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"JSON\" || this._tMode === \"REST-JSON\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t\tthis._serializeAsJson = true;\r\n\t\t\tthis._headers = this._headers || {};\r\n\t\t\tthis._headers[\"Content-Type\"] = \"application/json\";\r\n\t\t}else{\r\n\t\t\tif(this._headers && !this._headers[\"Content-Type\"]){\r\n\t\t\t\tthis._headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t\tthis._router = mode.router;\r\n\t\t}\r\n\t}\r\n\r\n\tescape(data:any) {\r\n\t\tif (this._utf) {\r\n\t\t\treturn encodeURIComponent(data);\r\n\t\t} else {\r\n\t\t\treturn escape(data);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: allows to set escaping mode\r\n\t * @param: true - utf based escaping, simple - use current page encoding\r\n\t * @type: public\r\n\t */\r\n\tenableUTFencoding(mode:boolean) {\r\n\t\tthis._utf = !!mode;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: get state of updating\r\n\t * @returns: true - all in sync with server, false - some items not updated yet.\r\n\t * @type: public\r\n\t */\r\n\tgetSyncState() {\r\n\t\treturn !this.updatedRows.length;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: set if rows should be send to server automatically\r\n\t * @param: mode - \"row\" - based on row selection changed, \"cell\" - based on cell editing finished, \"off\" - manual data sending\r\n\t * @type: public\r\n\t */\r\n\tsetUpdateMode(mode: string, dnd: any) {\r\n\t\tthis.autoUpdate = (mode === \"cell\");\r\n\t\tthis.updateMode = mode;\r\n\t\tthis.dnd = dnd;\r\n\t}\r\n\r\n\tignore(code: any, master: any) {\r\n\t\tthis._silent_mode = true;\r\n\t\tcode.call(master || global);\r\n\t\tthis._silent_mode = false;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: mark row as updated/normal. check mandatory fields, initiate autoupdate (if turned on)\r\n\t * @param: rowId - id of row to set update-status for\r\n\t * @param: state - true for \"updated\", false for \"not updated\"\r\n\t * @param: mode - update mode name\r\n\t * @type: public\r\n\t */\r\n\tsetUpdated(rowId:number|string, state: boolean, mode?: string) {\r\n\t\tif (this._silent_mode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst ind = this.findRow(rowId);\r\n\r\n\t\tmode = mode || \"updated\";\r\n\t\tconst existing = this.$gantt.getUserData(rowId, this.action_param, this._ganttMode);\r\n\t\tif (existing && mode === \"updated\") {\r\n\t\t\tmode = existing;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tthis.set_invalid(rowId, false); // clear previous error flag\r\n\t\t\tthis.updatedRows[ind] = rowId;\r\n\t\t\tthis.$gantt.setUserData(rowId, this.action_param, mode, this._ganttMode);\r\n\t\t\tif (this._in_progress[rowId]) {\r\n\t\t\t\tthis._in_progress[rowId] = \"wait\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (!this.is_invalid(rowId)) {\r\n\t\t\t\tthis.updatedRows.splice(ind, 1);\r\n\t\t\t\tthis.$gantt.setUserData(rowId, this.action_param, \"\", this._ganttMode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.markRow(rowId, state, mode);\r\n\t\tif (state && this.autoUpdate) {\r\n\t\t\tthis.sendData(rowId);\r\n\t\t}\r\n\t}\r\n\r\n\tmarkRow(id: number | string, state: boolean, mode: string) {\r\n\t\tlet str = \"\";\r\n\t\tconst invalid = this.is_invalid(id);\r\n\t\tif (invalid) {\r\n\t\t\tstr = this.styles[invalid];\r\n\t\t\tstate = true;\r\n\t\t}\r\n\t\tif (this.callEvent(\"onRowMark\", [id, state, mode, invalid])) {\r\n\t\t\t// default logic\r\n\t\t\tstr = this.styles[state ? mode : \"clear\"] + \" \" + str;\r\n\r\n\t\t\tthis.$gantt[this._methods[0]](id, str);\r\n\r\n\t\t\tif (invalid && invalid.details) {\r\n\t\t\t\tstr += this.styles[invalid + \"_cell\"];\r\n\t\t\t\tfor (let i = 0; i < invalid.details.length; i++) {\r\n\t\t\t\t\tif (invalid.details[i]) {\r\n\t\t\t\t\t\tthis.$gantt[this._methods[1]](id, i, str);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetActionByState(state: string):string {\r\n\t\tif (state === \"inserted\") {\r\n\t\t\treturn \"create\";\r\n\t\t}\r\n\r\n\t\tif (state === \"updated\") {\r\n\t\t\treturn \"update\";\r\n\t\t}\r\n\r\n\t\tif (state === \"deleted\") {\r\n\t\t\treturn \"delete\";\r\n\t\t}\r\n\r\n\t\t// reorder\r\n\t\treturn \"update\";\r\n\t}\r\n\r\n\tgetState(id: number | string) {\r\n\t\treturn this.$gantt.getUserData(id, this.action_param, this._ganttMode);\r\n\t}\r\n\r\n\tis_invalid(id: number | string) {\r\n\t\treturn this._invalid[id];\r\n\t}\r\n\r\n\tset_invalid(id: number | string, mode: any, details?) {\r\n\t\tif (details) {\r\n\t\t\tmode = {\r\n\t\t\t\tvalue: mode,\r\n\t\t\t\tdetails,\r\n\t\t\t\ttoString: function() { // tslint:disable-line\r\n\t\t\t\t\treturn this.value.toString();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis._invalid[id] = mode;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: check mandatory fields and verify values of cells, initiate update (if specified). Can be redefined in order to provide custom validation\r\n\t * @param: rowId - id of row to set update-status for\r\n\t * @type: public\r\n\t */\r\n\t// tslint:disable-next-line\r\n\tcheckBeforeUpdate(rowId: number | string) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: send row(s) values to server\r\n\t * @param: rowId - id of row which data to send. If not specified, then all \"updated\" rows will be send\r\n\t * @type: public\r\n\t */\r\n\tsendData(rowId?: any) {\r\n\t\tif (this.$gantt.editStop) {\r\n\t\t\tthis.$gantt.editStop();\r\n\t\t}\r\n\r\n\t\tif (typeof rowId === \"undefined\" || this._tSend) {\r\n\r\n\t\t\tconst pendingUpdateModes = [];\r\n\t\t\tif(this.modes){\r\n\t\t\t\tconst knownModes = [\"task\", \"link\", \"assignment\", \"baseline\"];\r\n\t\t\t\tknownModes.forEach((mode) => {\r\n\t\t\t\t\tif(this.modes[mode] && this.modes[mode].updatedRows.length){\r\n\t\t\t\t\t\tpendingUpdateModes.push(mode);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (pendingUpdateModes.length){\r\n\t\t\t\tfor(let i = 0; i < pendingUpdateModes.length; i++){\r\n\t\t\t\t\tthis.setGanttMode(pendingUpdateModes[i]);\r\n\t\t\t\t\tthis.sendAllData();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\treturn this.sendAllData();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this._in_progress[rowId]) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.messages = [];\r\n\t\tif (!this.checkBeforeUpdate(rowId) && this.callEvent(\"onValidationError\", [rowId, this.messages])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\r\n\t}\r\n\r\n\tserialize(data: any, id: any) {\r\n\t\tif (this._serializeAsJson) {\r\n\t\t\treturn this._serializeAsJSON(data);\r\n\t\t}\r\n\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\t\tif (typeof id !== \"undefined\") {\r\n\t\t\treturn this.serialize_one(data, \"\");\r\n\t\t} else {\r\n\t\t\tconst stack = [];\r\n\t\t\tconst keys = [];\r\n\t\t\tfor (const key in data) {\r\n\t\t\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\t\t\tstack.push(this.serialize_one(data[key], key + this._postDelim));\r\n\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstack.push(\"ids=\" + this.escape(keys.join(\",\")));\r\n\t\t\tif (this.$gantt.security_key) {\r\n\t\t\t\tstack.push(\"dhx_security=\" + this.$gantt.security_key);\r\n\t\t\t}\r\n\t\t\treturn stack.join(\"&\");\r\n\t\t}\r\n\t}\r\n\r\n\tserialize_one(data: any, pref: string) {\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\t\tconst stack = [];\r\n\t\tlet serialized = \"\";\r\n\t\tfor (const key in data)\r\n\t\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\t\tif ((key === \"id\" ||\r\n\t\t\t\t\tkey == this.action_param) && // tslint:disable-line\r\n\t\t\t\t\tthis._tMode === \"REST\") {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof data[key] === \"string\" || typeof data[key] === \"number\") {\r\n\t\t\t\t\tserialized = String(data[key]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tserialized = JSON.stringify(data[key]);\r\n\t\t\t\t}\r\n\t\t\t\tstack.push(this.escape((pref || \"\") + key) + \"=\" + this.escape(serialized));\r\n\t\t\t}\r\n\t\treturn stack.join(\"&\");\r\n\t}\r\n\r\n\tsendAllData() {\r\n\t\tif (!this.updatedRows.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.messages = [];\r\n\t\tlet valid: any = true;\r\n\r\n\t\tthis._forEachUpdatedRow(function(rowId) {\r\n\t\t\tvalid = valid && this.checkBeforeUpdate(rowId);\r\n\t\t});\r\n\r\n\t\tif (!valid && !this.callEvent(\"onValidationError\", [\"\", this.messages])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._tSend) {\r\n\t\t\tthis._sendData(this._getAllData());\r\n\t\t} else {\r\n\t\t\t// this.updatedRows can be spliced from onBeforeUpdate via dp.setUpdated false\r\n\t\t\t// use an iterator instead of for(var i = 0; i < this.updatedRows; i++) then\r\n\t\t\tthis._forEachUpdatedRow(function(rowId) {\r\n\t\t\t\tif (!this._in_progress[rowId]) {\r\n\t\t\t\t\tif (this.is_invalid(rowId)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfindRow(pattern: any) {\r\n\t\tlet i = 0;\r\n\t\tfor (i = 0; i < this.updatedRows.length; i++) {\r\n\t\t\tif (pattern == this.updatedRows[i]) { // tslint:disable-line\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn i;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: define custom actions\r\n\t * @param: name - name of action, same as value of action attribute\r\n\t * @param: handler - custom function, which receives a XMl response content for action\r\n\t * @type: private\r\n\t */\r\n\tdefineAction(name: string, handler: any) {\r\n\t\tif (!this._uActions) {\r\n\t\t\tthis._uActions = {};\r\n\t\t}\r\n\t\tthis._uActions[name] = handler;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: used in combination with setOnBeforeUpdateHandler to create custom client-server transport system\r\n\t * @param: sid - id of item before update\r\n\t * @param: tid - id of item after up0ate\r\n\t * @param: action - action name\r\n\t * @type: public\r\n\t * @topic: 0\r\n\t */\r\n\tafterUpdateCallback(sid: number | string, tid: number | string, action: string, btag: any, ganttMode: string) {\r\n\t\tif(!this.$gantt){\r\n\t\t\t// destructor has been called before the callback\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setGanttMode(ganttMode);\r\n\r\n\t\tconst marker = sid;\r\n\t\tconst correct = (action !== \"error\" && action !== \"invalid\");\r\n\t\tif (!correct) {\r\n\t\t\tthis.set_invalid(sid, action);\r\n\t\t}\r\n\t\tif ((this._uActions) && (this._uActions[action]) && (!this._uActions[action](btag))) {\r\n\t\t\treturn (delete this._in_progress[marker]);\r\n\t\t}\r\n\r\n\t\tif (this._in_progress[marker] !== \"wait\") {\r\n\t\t\tthis.setUpdated(sid, false);\r\n\t\t}\r\n\r\n\t\tconst originalSid = sid;\r\n\r\n\t\tswitch (action) {\r\n\t\t\tcase \"inserted\":\r\n\t\t\tcase \"insert\":\r\n\t\t\t\tif (tid != sid) { // tslint:disable-line\r\n\t\t\t\t\tthis.setUpdated(sid, false);\r\n\t\t\t\t\tthis.$gantt[this._methods[2]](sid, tid);\r\n\t\t\t\t\tsid = tid;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"delete\":\r\n\t\t\tcase \"deleted\":\r\n\t\t\t\tif(!this.deleteAfterConfirmation || this._ganttMode !== \"task\"){\r\n\t\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"true_deleted\", this._ganttMode);\r\n\t\t\t\t\tthis.$gantt[this._methods[3]](sid);\r\n\t\t\t\t\tdelete this._in_progress[marker];\r\n\t\t\t\t\treturn this.callEvent(\"onAfterUpdate\", [sid, action, tid, btag]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif (this._ganttMode === \"task\" && this.$gantt.isTaskExists(sid)) {\r\n\t\t\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"true_deleted\", this._ganttMode);\r\n\t\t\t\t\t\tconst task = this.$gantt.getTask(sid);\r\n\t\t\t\t\t\tthis.$gantt.silent(() => {\r\n\t\t\t\t\t\t\tthis.$gantt.deleteTask(sid);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis.$gantt.callEvent(\"onAfterTaskDelete\", [sid, task]);\r\n\t\t\t\t\t\tthis.$gantt.render();\r\n\t\t\t\t\t\tdelete this._in_progress[marker];\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.callEvent(\"onAfterUpdate\", [sid, action, tid, btag]);\r\n\t\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif (this._in_progress[marker] !== \"wait\") {\r\n\t\t\tif (correct) {\r\n\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"\", this._ganttMode);\r\n\t\t\t}\r\n\t\t\tdelete this._in_progress[marker];\r\n\t\t} else {\r\n\t\t\tdelete this._in_progress[marker];\r\n\t\t\tthis.setUpdated(tid, true, this.$gantt.getUserData(sid, this.action_param, this._ganttMode));\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onAfterUpdate\", [originalSid, action, tid, btag]);\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: response from server\r\n\t * @param: xml - XMLLoader object with response XML\r\n\t * @type: private\r\n\t */\r\n\tafterUpdate(that: any, xml: any, id?:any) {\r\n\t\tlet _xml;\r\n\t\tif (arguments.length === 3) {\r\n\t\t\t_xml = arguments[1];\r\n\t\t} else {\r\n\t\t\t// old dataprocessor\r\n\t\t\t_xml = arguments[4];\r\n\t\t}\r\n\t\tlet mode = this.getGanttMode();\r\n\t\tconst reqUrl = _xml.filePath || _xml.url;\r\n\r\n\t\tif (this._tMode !== \"REST\" && this._tMode !== \"REST-JSON\") {\r\n\t\t\tif (reqUrl.indexOf(\"gantt_mode=links\") !== -1) {\r\n\t\t\t\tmode = \"link\";\r\n\t\t\t} else if (reqUrl.indexOf(\"gantt_mode=assignments\") !== -1) {\r\n\t\t\t\tmode = \"assignment\";\r\n\t\t\t} else if (reqUrl.indexOf(\"gantt_mode=baselines\") !== -1) {\r\n\t\t\t\tmode = \"baseline\";\r\n\t\t\t} else {\r\n\t\t\t\tmode = \"task\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (reqUrl.indexOf(\"/link\") >= 0) {\r\n\t\t\t\tmode = \"link\";\r\n\t\t\t} else if(reqUrl.indexOf(\"/assignment\") >= 0){\r\n\t\t\t\tmode = \"assignment\";\r\n\t\t\t} else if(reqUrl.indexOf(\"/baseline\") >= 0){\r\n\t\t\t\tmode = \"baseline\";\r\n\t\t\t} else {\r\n\t\t\t\tmode = \"task\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setGanttMode(mode);\r\n\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\t// try to use json first\r\n\t\tlet tag;\r\n\r\n\t\ttry {\r\n\t\t\ttag = JSON.parse(xml.xmlDoc.responseText);\r\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n\t\t} catch (e) {\r\n\r\n\t\t\t// empty response also can be processed by json handler\r\n\t\t\tif (!xml.xmlDoc.responseText.length) {\r\n\t\t\t\ttag = {};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst processCallback = (itemId: any) => {\r\n\t\t\tconst action = tag.action || this.getState(itemId) || \"updated\";\r\n\t\t\tconst sid = tag.sid || itemId[0];\r\n\t\t\tconst tid = tag.tid || itemId[0];\r\n\t\t\tthat.afterUpdateCallback(sid, tid, action, tag, mode);\r\n\t\t};\r\n\t\tif (tag) {\r\n\t\t\t// GS-753. When multiple tasks are updated, unhighlight all of them\r\n\t\t\tif (Array.isArray(id) && id.length > 1) {\r\n\t\t\t\tid.forEach((taskId) => processCallback(taskId));\r\n\t\t\t} else {\r\n\t\t\t\tprocessCallback(id);\r\n\t\t\t}\r\n\t\t\tthat.finalizeUpdate();\r\n\t\t\tthis.setGanttMode(mode);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// xml response\r\n\t\tconst top = ajax.xmltop(\"data\", xml.xmlDoc); // fix incorrect content type in IE\r\n\t\tif (!top) {\r\n\t\t\treturn this.cleanUpdate(id);\r\n\t\t}\r\n\t\tconst atag = ajax.xpath(\"//data/action\", top);\r\n\t\tif (!atag.length) {\r\n\t\t\treturn this.cleanUpdate(id);\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < atag.length; i++) {\r\n\t\t\tconst btag = atag[i];\r\n\t\t\tconst action = btag.getAttribute(\"type\");\r\n\t\t\tconst sid = btag.getAttribute(\"sid\");\r\n\t\t\tconst tid = btag.getAttribute(\"tid\");\r\n\r\n\t\t\tthat.afterUpdateCallback(sid, tid, action, btag, mode);\r\n\t\t}\r\n\t\tthat.finalizeUpdate();\r\n\t}\r\n\r\n\tcleanUpdate(id: any[]) {\r\n\t\tif (id) {\r\n\t\t\tfor (let i = 0; i < id.length; i++) {\r\n\t\t\t\tdelete this._in_progress[id[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfinalizeUpdate() {\r\n\t\tif (this._waitMode) {\r\n\t\t\tthis._waitMode--;\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onAfterUpdateFinish\", []);\r\n\t\tif (!this.updatedRows.length) {\r\n\t\t\tthis.callEvent(\"onFullSync\", []);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: initializes data-processor\r\n\t * @param: gantt - dhtmlxGantt object to attach this data-processor to\r\n\t * @type: public\r\n\t */\r\n\tinit(gantt: any) {\r\n\t\tif (this._initialized) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.$gantt = gantt;\r\n\t\tif (this.$gantt._dp_init) {\r\n\t\t\tthis.$gantt._dp_init(this);\r\n\t\t}\r\n\r\n\t\tthis._setDefaultTransactionMode();\r\n\r\n\t\tthis.styles = {\r\n\t\t\tupdated:\"gantt_updated\",\r\n\t\t\torder:\"gantt_updated\",\r\n\t\t\tinserted:\"gantt_inserted\",\r\n\t\t\tdeleted:\"gantt_deleted\",\r\n\t\t\tdelete_confirmation:\"gantt_deleted\",\r\n\t\t\tinvalid:\"gantt_invalid\",\r\n\t\t\terror:\"gantt_error\",\r\n\t\t\tclear:\"\"\r\n\t\t};\r\n\r\n\t\tthis._methods=[\"_row_style\",\"setCellTextStyle\",\"_change_id\",\"_delete_task\"];\r\n\t\textendGantt(this.$gantt, this);\r\n\t\tconst dataProcessorEvents = new DataProcessorEvents(this.$gantt, this);\r\n\t\tdataProcessorEvents.attach();\r\n\t\tthis.attachEvent(\"onDestroy\", function() {\r\n\t\t\tdelete this.setGanttMode;\r\n\t\t\tdelete this._getRowData;\r\n\r\n\t\t\tdelete this.$gantt._dp;\r\n\t\t\tdelete this.$gantt._change_id;\r\n\t\t\tdelete this.$gantt._row_style;\r\n\t\t\tdelete this.$gantt._delete_task;\r\n\t\t\tdelete this.$gantt._sendTaskOrder;\r\n\t\t\tdelete this.$gantt;\r\n\r\n\t\t\tdataProcessorEvents.detach();\r\n\t\t});\r\n\t\tthis.$gantt.callEvent(\"onDataProcessorReady\", [this]);\r\n\t\tthis._initialized = true;\r\n\t}\r\n\r\n\tsetOnAfterUpdate(handler) {\r\n\t\tthis.attachEvent(\"onAfterUpdate\", handler);\r\n\t}\r\n\r\n\tsetOnBeforeUpdateHandler(handler) {\r\n\t\tthis.attachEvent(\"onBeforeDataSending\", handler);\r\n\t}\r\n\r\n\t/* starts autoupdate mode\r\n\t\t@param interval time interval for sending update requests\r\n\t*/\r\n\tsetAutoUpdate(interval, user) {\r\n\t\tinterval = interval || 2000;\r\n\r\n\t\tthis._user = user || (new Date()).valueOf();\r\n\t\tthis._needUpdate = false;\r\n\r\n\t\tthis._updateBusy = false;\r\n\r\n\t\tthis.attachEvent(\"onAfterUpdate\", this.afterAutoUpdate); // arguments sid, action, tid, xml_node;\r\n\r\n\t\tthis.attachEvent(\"onFullSync\", this.fullSync);\r\n\r\n\t\tsetInterval(() => {\r\n\t\t\tthis.loadUpdate();\r\n\t\t}, interval);\r\n\t}\r\n\r\n\t/* process updating request response\r\n\t\tif status == collision version is deprecated\r\n\t\tset flag for autoupdating immediately\r\n\t*/\r\n\tafterAutoUpdate(sid, action, tid, xml_node) { // tslint:disable-line\r\n\t\tif (action === \"collision\") {\r\n\t\t\tthis._needUpdate = true;\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t/* callback function for onFillSync event\r\n\t\tcall update function if it's need\r\n\t*/\r\n\tfullSync() {\r\n\t\tif (this._needUpdate) {\r\n\t\t\tthis._needUpdate = false;\r\n\t\t\tthis.loadUpdate();\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/* sends query to the server and call callback function\r\n\t*/\r\n\tgetUpdates(url, callback) {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tif (this._updateBusy) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\tthis._updateBusy = true;\r\n\t\t}\r\n\r\n\t\tajax.get(url, callback);\r\n\r\n\t}\r\n\r\n\t/* loads updates and processes them\r\n\t*/\r\n\tloadUpdate() {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tconst version = this.$gantt.getUserData(0, \"version\", this._ganttMode);\r\n\t\tlet url = this.serverProcessor + ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, \"dhx_version=\" + version].join(\"&\");\r\n\t\turl = url.replace(\"editing=true&\", \"\");\r\n\t\tthis.getUpdates(url, (xml) => {\r\n\t\t\tconst vers = ajax.xpath(\"//userdata\", xml);\r\n\t\t\tthis.$gantt.setUserData(0, \"version\", this._getXmlNodeValue(vers[0]), this._ganttMode);\r\n\r\n\t\t\tconst updates = ajax.xpath(\"//update\", xml);\r\n\t\t\tif (updates.length) {\r\n\t\t\t\tthis._silent_mode = true;\r\n\r\n\t\t\t\tfor (let i = 0; i < updates.length; i++) {\r\n\t\t\t\t\tconst status = updates[i].getAttribute(\"status\");\r\n\t\t\t\t\tconst id = updates[i].getAttribute(\"id\");\r\n\t\t\t\t\tconst parent = updates[i].getAttribute(\"parent\");\r\n\t\t\t\t\tswitch (status) {\r\n\t\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"insertCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"updated\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"updateCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"deleteCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._silent_mode = false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateBusy = false;\r\n\t\t});\r\n\t}\r\n\r\n\tdestructor() {\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\r\n\t\tthis.updatedRows = [];\r\n\t\tthis._in_progress = {}; // ?\r\n\t\tthis._invalid = {};\r\n\t\tthis._storage.clear();\r\n\t\tthis._storage = null;\r\n\t\tthis._headers = null;\r\n\t\tthis._payload = null;\r\n\t\tdelete this._initialized;\r\n\t}\r\n\r\n\tsetGanttMode(mode) {\r\n\t\tif (mode === \"tasks\") {\r\n\t\t\tmode = \"task\";\r\n\t\t} else if (mode === \"links\") {\r\n\t\t\tmode = \"link\";\r\n\t\t}\r\n\r\n\t\tconst modes = this.modes || {};\r\n\t\tconst ganttMode = this.getGanttMode();\r\n\t\tif (ganttMode) {\r\n\t\t\tmodes[ganttMode] = {\r\n\t\t\t\t_in_progress : this._in_progress,\r\n\t\t\t\t_invalid: this._invalid,\r\n\t\t\t\t_storage: this._storage,\r\n\t\t\t\tupdatedRows : this.updatedRows\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tlet newState = modes[mode];\r\n\t\tif (!newState) {\r\n\t\t\tnewState = modes[mode] = {\r\n\t\t\t\t_in_progress : {},\r\n\t\t\t\t_invalid : {},\r\n\t\t\t\t_storage : SimpleStorage.create(),\r\n\t\t\t\tupdatedRows : []\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis._in_progress = newState._in_progress;\r\n\t\tthis._invalid = newState._invalid;\r\n\t\tthis._storage = newState._storage;\r\n\t\tthis.updatedRows = newState.updatedRows;\r\n\t\tthis.modes = modes;\r\n\t\tthis._ganttMode = mode;\r\n\t}\r\n\tgetGanttMode():string {\r\n\t\treturn this._ganttMode;\r\n\t}\r\n\r\n\tstoreItem(item) {\r\n\t\tthis._storage.storeItem(item);\r\n\t}\r\n\r\n\turl(url: string) {\r\n\t\tthis.serverProcessor = this._serverProcessor = url;\r\n\t}\r\n\r\n\tprotected _beforeSendData(data: any, rowId: any) {\r\n\t\tif (!this.callEvent(\"onBeforeUpdate\", [rowId, this.getState(rowId), data])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis._sendData(data, rowId);\r\n\t}\r\n\r\n\tprotected _serializeAsJSON(data: any) {\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\tconst copy = utils.copy(data);\r\n\t\tif (this._tMode === \"REST-JSON\") {\r\n\t\t\tdelete copy.id;\r\n\t\t\tdelete copy[this.action_param];\r\n\t\t}\r\n\r\n\t\treturn JSON.stringify(copy);\r\n\t}\r\n\r\n\tprotected _applyPayload(url: string) {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tif (this._payload) {\r\n\t\t\tfor (const key in this._payload) {\r\n\t\t\t\turl = url + ajax.urlSeparator(url) + this.escape(key) + \"=\" + this.escape(this._payload[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn url;\r\n\t}\r\n\r\n\t// GET/POST/JSON modes of the dataProcessor didn't send the whole data items in 'delete' requests\r\n\t// clear extra info from the data in order not to change the request format\r\n\tprotected _cleanupArgumentsBeforeSend(dataToSend: any) {\r\n\t\tlet processedData;\r\n\t\tif(dataToSend[this.action_param] === undefined){// hash of updated items, and not an individual item\r\n\t\t\tprocessedData = {};\r\n\t\t\tfor(const i in dataToSend) {\r\n\t\t\t\tprocessedData[i] = this._cleanupArgumentsBeforeSend(dataToSend[i]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tprocessedData = this._cleanupItemBeforeSend(dataToSend);\r\n\t\t}\r\n\t\treturn processedData;\r\n\t}\r\n\tprotected _cleanupItemBeforeSend(updatedItem: any) {\r\n\t\tlet output = null;\r\n\t\tif(updatedItem){\r\n\t\t\tif(updatedItem[this.action_param] === \"deleted\"){\r\n\t\t\t\toutput = {};\r\n\t\t\t\toutput.id = updatedItem.id;\r\n\t\t\t\toutput[this.action_param] = updatedItem[this.action_param];\r\n\t\t\t}else{\r\n\t\t\t\toutput = updatedItem;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprotected _sendData(dataToSend: any, rowId?: any) {\r\n\t\tif (!dataToSend) {\r\n\t\t\treturn; // nothing to send\r\n\t\t}\r\n\t\tif (!this.callEvent(\"onBeforeDataSending\", rowId ? [rowId, this.getState(rowId), dataToSend] : [null, null, dataToSend])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (rowId) {\r\n\t\t\tthis._in_progress[rowId] = (new Date()).valueOf();\r\n\t\t}\r\n\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\r\n\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\tconst taskState = this.getState(rowId);\r\n\t\t\tconst taskAction = this.getActionByState(taskState);\r\n\t\t\tconst ganttMode = this.getGanttMode();\r\n\t\t\tconst _onResolvedCreateUpdate = (tag) => {\r\n\t\t\t\tlet action = taskState || \"updated\";\r\n\t\t\t\tlet sid = rowId;\r\n\t\t\t\tlet tid = rowId;\r\n\r\n\t\t\t\tif (tag) {\r\n\t\t\t\t\taction = tag.action || taskState;\r\n\t\t\t\t\tsid = tag.sid || sid;\r\n\t\t\t\t\ttid = tag.id || tag.tid || tid;\r\n\t\t\t\t}\r\n\t\t\t\tthis.afterUpdateCallback(sid, tid, action, tag, ganttMode);\r\n\t\t\t};\r\n\r\n\t\t\tlet actionPromise;\r\n\t\t\tif (this._router instanceof Function) {\r\n\t\t\t\tif(this._routerParametersFormat === \"object\"){\r\n\t\t\t\t\tconst obj = {\r\n\t\t\t\t\t\tentity: ganttMode,\r\n\t\t\t\t\t\taction: taskAction,\r\n\t\t\t\t\t\tdata: dataToSend,\r\n\t\t\t\t\t\tid: rowId\r\n\t\t\t\t\t};\r\n\t\t\t\t\tactionPromise = this._router(obj);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tactionPromise = this._router(ganttMode, taskAction, dataToSend, rowId);\r\n\t\t\t\t}\r\n\t\t\t} else if (this._router[ganttMode] instanceof Function) {\r\n\t\t\t\tactionPromise = this._router[ganttMode](taskAction, dataToSend, rowId);\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconst errorMsgStart = \"Incorrect configuration of gantt.createDataProcessor\";\r\n\t\t\t\tconst errorMsgEnd = `\r\nYou need to either add missing properties to the dataProcessor router object or to use a router function.\r\nSee https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and https://docs.dhtmlx.com/gantt/api__gantt_createdataprocessor.html for details.`;\r\n\r\n\t\t\t\tif(!this._router[ganttMode]){\r\n\t\t\t\t\tthrow new Error(`${errorMsgStart}: router for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t}\r\n\t\t\t\tswitch (taskState) {\r\n\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\tif(!this._router[ganttMode].create){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **create** action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].create(dataToSend);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\tif(!this._router[ganttMode].delete){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **delete** action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].delete(rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(!this._router[ganttMode].update){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **update**\" action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].update(dataToSend, rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(actionPromise){\r\n\t\t\t\t// neither promise nor {tid: newId} response object\r\n\t\t\t\tif(!actionPromise.then &&\r\n\t\t\t\t\t(actionPromise.id === undefined && actionPromise.tid === undefined && actionPromise.action === undefined)){\r\n\t\t\t\t\tthrow new Error(\"Incorrect router return value. A Promise or a response object is expected\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(actionPromise.then){\r\n\t\t\t\t\tactionPromise.then(_onResolvedCreateUpdate).catch((error) => {\r\n\t\t\t\t\t\tif(error && error.action){\r\n\t\t\t\t\t\t\t_onResolvedCreateUpdate(error);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t_onResolvedCreateUpdate({ action: \"error\", value: error});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// custom method may return a response object in case of sync action\r\n\t\t\t\t\t_onResolvedCreateUpdate(actionPromise);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t_onResolvedCreateUpdate(null);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet queryParams: any;\r\n\t\tqueryParams = {\r\n\t\t\tcallback: (xml) => {\r\n\t\t\t\tconst ids = [];\r\n\r\n\t\t\t\tif (rowId) {\r\n\t\t\t\t\tids.push(rowId);\r\n\t\t\t\t} else if (dataToSend) {\r\n\t\t\t\t\tfor (const key in dataToSend) {\r\n\t\t\t\t\t\tids.push(key);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.afterUpdate(this, xml, ids);\r\n\t\t\t},\r\n\t\t\theaders: this._headers\r\n\t\t};\r\n\r\n\t\tconst dhxVersion = \"dhx_version=\" + this.$gantt.getUserData(0, \"version\", this._ganttMode);\r\n\t\tconst urlParams = this.serverProcessor + (this._user ? (ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, dhxVersion].join(\"&\")) : \"\");\r\n\t\tlet url: any = this._applyPayload(urlParams);\r\n\t\tlet data;\r\n\r\n\t\tswitch (this._tMode) {\r\n\t\t\tcase \"GET\":\r\n\t\t\t\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\r\n\t\t\t\tqueryParams.url = url + ajax.urlSeparator(url) + this.serialize(data, rowId);\r\n\t\t\t\tqueryParams.method = \"GET\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"POST\":\r\n\t\t\t\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\r\n\t\t\t\tqueryParams.url = url;\r\n\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\tqueryParams.data = this.serialize(data, rowId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"JSON\":\r\n\t\t\t\tdata = {};\r\n\t\t\t\tconst preprocessedData = this._cleanupItemBeforeSend(dataToSend);\r\n\t\t\t\tfor (const key in preprocessedData) {\r\n\t\t\t\t\tif (key === this.action_param || key === \"id\" || key === \"gr_id\") {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdata[key] = preprocessedData[key];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tqueryParams.url = url;\r\n\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\tqueryParams.data = JSON.stringify({\r\n\t\t\t\t\tid: rowId,\r\n\t\t\t\t\taction: dataToSend[this.action_param],\r\n\t\t\t\t\tdata\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"REST\":\r\n\t\t\tcase \"REST-JSON\":\r\n\t\t\t\turl = urlParams.replace(/(&|\\?)editing=true/, \"\");\r\n\t\t\t\tdata = \"\";\r\n\r\n\t\t\t\tswitch (this.getState(rowId)) {\r\n\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\tqueryParams.method = \"DELETE\";\r\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tqueryParams.method = \"PUT\";\r\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\r\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tqueryParams.url = this._applyPayload(url);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tthis._waitMode++;\r\n\t\treturn ajax.query(queryParams);\r\n\t}\r\n\r\n\tprotected _forEachUpdatedRow(code: any) {\r\n\t\tconst updatedRows = this.updatedRows.slice();\r\n\t\tfor (let i = 0; i < updatedRows.length; i++) {\r\n\t\t\tconst rowId = updatedRows[i];\r\n\t\t\tif (this.$gantt.getUserData(rowId, this.action_param, this._ganttMode)) {\r\n\t\t\t\tcode.call(this, rowId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _setDefaultTransactionMode() {\r\n\t\tif (this.serverProcessor) {\r\n\t\t\tthis.setTransactionMode(\"POST\", true);\r\n\t\t\tthis.serverProcessor += (this.serverProcessor.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + \"editing=true\";\r\n\t\t\tthis._serverProcessor = this.serverProcessor;\r\n\t\t}\r\n\t}\r\n\r\n\t/* returns xml node value\r\n\t\t@param node\r\n\t\t\txml node\r\n\t*/\r\n\tprotected _getXmlNodeValue(node) {\r\n\t\tif (node.firstChild) {\r\n\t\t\treturn node.firstChild.nodeValue;\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tprotected _getAllData() {\r\n\t\tconst out = {};\r\n\t\tlet hasOne = false;\r\n\r\n\t\tthis._forEachUpdatedRow(function(id) {\r\n\t\t\tif (this._in_progress[id] || this.is_invalid(id)){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst row = this._getRowData(id);\r\n\t\t\tif (!this.callEvent(\"onBeforeUpdate\", [id, this.getState(id), row])) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tout[id] = row;\r\n\t\t\thasOne = true;\r\n\t\t\tthis._in_progress[id] = (new Date()).valueOf();\r\n\t\t});\r\n\r\n\t\treturn hasOne ? out : null;\r\n\t}\r\n\r\n\tprotected _prepareDate(value: Date) : string {\r\n\t\treturn this.$gantt.defined(this.$gantt.templates.xml_format) ? this.$gantt.templates.xml_format(value) : this.$gantt.templates.format_date(value);\r\n\t}\r\n\r\n\tprotected _prepareArray(value: any[], traversedObjects: object[]) : any[] {\r\n\t\ttraversedObjects.push(value);\r\n\r\n\t\treturn value.map((item) => {\r\n\t\t\tif(helpers.isDate(item)){\r\n\t\t\t\treturn this._prepareDate(item);\r\n\t\t\t} else if (Array.isArray(item) && !helpers.arrayIncludes(traversedObjects, item)){\r\n\t\t\t\treturn this._prepareArray(item, traversedObjects);\r\n\t\t\t} else if (item && typeof item === \"object\" && !helpers.arrayIncludes(traversedObjects, item)) {\r\n\t\t\t\treturn this._prepareObject(item, traversedObjects);\r\n\t\t\t} else {\r\n\t\t\t\treturn item;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected _prepareObject(rawItem: any, traversedObjects: object[]) : any {\r\n\t\tconst processedItem = {};\r\n\t\ttraversedObjects.push(rawItem);\r\n\r\n\t\tfor (const key in rawItem) {\r\n\t\t\tif (key.substr(0, 1) === \"$\") {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst value = rawItem[key];\r\n\t\t\tif (helpers.isDate(value)) {\r\n\t\t\t\tprocessedItem[key] = this._prepareDate(value);\r\n\t\t\t} else if(value === null) {\r\n\t\t\t\tprocessedItem[key] = \"\";\r\n\t\t\t} else if (Array.isArray(value) && !helpers.arrayIncludes(traversedObjects, value)){\r\n\t\t\t\tprocessedItem[key] = this._prepareArray(value, traversedObjects);\r\n\t\t\t} else if (value && typeof value === \"object\" && !helpers.arrayIncludes(traversedObjects, value)) {\r\n\t\t\t\tprocessedItem[key] = this._prepareObject(value, traversedObjects);\r\n\t\t\t} else {\r\n\t\t\t\tprocessedItem[key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn processedItem;\r\n\t}\r\n\r\n\tprotected _prepareDataItem(rawItem: any): any {\r\n\t\tconst processedItem = this._prepareObject(rawItem, []);\r\n\r\n\t\tprocessedItem[this.action_param] = this.$gantt.getUserData(rawItem.id, this.action_param, this._ganttMode);\r\n\t\treturn processedItem;\r\n\t}\r\n\r\n\tprotected getStoredItem(id){\r\n\t\treturn this._storage.getStoredItem(id);\r\n\t}\r\n\r\n\tprotected _getRowData(id) {\r\n\t\tlet dataItem;\r\n\t\tconst gantt = this.$gantt;\r\n\t\tif (this.getGanttMode() === \"task\") {\r\n\t\t\tif(gantt.isTaskExists(id)){\r\n\t\t\t\tdataItem =this.$gantt.getTask(id);\r\n\t\t\t}\r\n\t\t} else if (this.getGanttMode() === \"assignment\") {\r\n\t\t\tif(this.$gantt.$data.assignmentsStore.exists(id)){\r\n\t\t\t\tdataItem =this.$gantt.$data.assignmentsStore.getItem(id);\r\n\t\t\t}\r\n\t\t} else if (this.getGanttMode() === \"baseline\") {\r\n\t\t\tif(this.$gantt.$data.baselineStore.exists(id)){\r\n\t\t\t\tdataItem =this.$gantt.$data.baselineStore.getItem(id);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif(gantt.isLinkExists(id)){\r\n\t\t\t\tdataItem =this.$gantt.getLink(id);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!dataItem) {\r\n\t\t\tdataItem = this.getStoredItem(id);\r\n\t\t}\r\n\r\n\t\tif (!dataItem) {\r\n\t\t\tdataItem = { id };\r\n\t\t}\r\n\r\n\t\treturn this._prepareDataItem(dataItem);\r\n\t}\r\n}","\r\nexport default function extendGantt(gantt: any, dp: any) {\r\n\tgantt.getUserData = function(id, name, store) {\r\n\t\tif (!this.userdata) {\r\n\t\t\tthis.userdata = {};\r\n\t\t}\r\n\t\tthis.userdata[store] = this.userdata[store] || {};\r\n\t\tif (this.userdata[store][id] && this.userdata[store][id][name]) {\r\n\t\t\treturn this.userdata[store][id][name];\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\tgantt.setUserData = function(id, name, value, store) {\r\n\t\tif (!this.userdata) {\r\n\t\t\tthis.userdata = {};\r\n\t\t}\r\n\t\tthis.userdata[store] = this.userdata[store] || {};\r\n\t\tthis.userdata[store][id] = this.userdata[store][id] || {};\r\n\t\tthis.userdata[store][id][name] = value;\r\n\t};\r\n\r\n\tgantt._change_id = function(oldId, newId) {\r\n\t\tswitch (this._dp._ganttMode) {\r\n\t\t\tcase \"task\":\r\n\t\t\t\tthis.changeTaskId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"link\":\r\n\t\t\t\tthis.changeLinkId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"assignment\":\r\n\t\t\t\tthis.$data.assignmentsStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"resource\":\r\n\t\t\t\tthis.$data.resourcesStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"baseline\":\r\n\t\t\t\tthis.$data.baselineStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid mode of the dataProcessor after database id is received: ${this._dp._ganttMode}, new id: ${newId}`);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt._row_style = function(rowId, classname){\r\n\t\tif (this._dp._ganttMode !== \"task\") {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!gantt.isTaskExists(rowId)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst task = gantt.getTask(rowId);\r\n\t\ttask.$dataprocessor_class = classname;\r\n\t\tgantt.refreshTask(rowId);\r\n\t};\r\n\r\n\t// fake method for dataprocessor\r\n\tgantt._delete_task = function(rowId, node) {}; // tslint:disable-line\r\n\r\n\tgantt._sendTaskOrder = function(id, item){\r\n\t\tif (item.$drop_target) {\r\n\t\t\tthis._dp.setGanttMode(\"task\");\r\n\t\t\tthis.getTask(id).target = item.$drop_target;\r\n\t\t\tthis._dp.setUpdated(id, true,\"order\");\r\n\t\t\tdelete this.getTask(id).$drop_target;\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.setDp = function() {\r\n\t\tthis._dp = dp;\r\n\t};\r\n\r\n\tgantt.setDp();\r\n}","import * as DataProcessor from \"./data_processor\";\r\nexport default {\r\n\tDEPRECATED_api: function(server) {\r\n\t\treturn new (DataProcessor.DataProcessor)(server);\r\n\t},\r\n\tcreateDataProcessor: DataProcessor.createDataProcessor\r\n};","import global from \"../../utils/global\";\r\n\r\nfunction createMethod(gantt){\r\n\tvar methods = {};\r\n\tvar isActive = false;\r\n\tfunction disableMethod(methodName, dummyMethod){\r\n\t\tdummyMethod = typeof dummyMethod == \"function\" ? dummyMethod : function(){};\r\n\r\n\t\tif(!methods[methodName]){\r\n\t\t\tmethods[methodName] = this[methodName];\r\n\t\t\tthis[methodName] = dummyMethod;\r\n\t\t}\r\n\t}\r\n\tfunction restoreMethod(methodName){\r\n\t\tif(methods[methodName]){\r\n\t\t\tthis[methodName] = methods[methodName];\r\n\t\t\tmethods[methodName] = null;\r\n\t\t}\r\n\t}\r\n\tfunction disableMethods(methodsHash){\r\n\t\tfor(var i in methodsHash){\r\n\t\t\tdisableMethod.call(this, i, methodsHash[i]);\r\n\t\t}\r\n\t}\r\n\tfunction restoreMethods(){\r\n\t\tfor(var i in methods){\r\n\t\t\trestoreMethod.call(this, i);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction batchUpdatePayload(callback){\r\n\t\ttry{\r\n\t\t\tcallback();\r\n\t\t}catch(e){\r\n\t\t\tglobal.console.error(e);\r\n\t\t}\r\n\t}\r\n\r\n\tvar state = gantt.$services.getService(\"state\");\r\n\tstate.registerProvider(\"batchUpdate\", function(){\r\n\t\treturn {\r\n\t\t\tbatch_update: isActive\r\n\t\t};\r\n\t}, false);\r\n\r\n\treturn function batchUpdate(callback, noRedraw) {\r\n\t\tif(isActive){\r\n\t\t\t// batch mode is already active\r\n\t\t\tbatchUpdatePayload(callback);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar call_dp = (this._dp && this._dp.updateMode != \"off\");\r\n\t\tvar dp_mode;\r\n\t\tif (call_dp){\r\n\t\t\tdp_mode = this._dp.updateMode;\r\n\t\t\tthis._dp.setUpdateMode(\"off\");\r\n\t\t}\r\n\r\n\t\t// temporary disable some methods while updating multiple tasks\r\n\t\tvar resetProjects = {};\r\n\t\tvar methods = {\r\n\t\t\t\"render\":true,\r\n\t\t\t\"refreshData\":true,\r\n\t\t\t\"refreshTask\":true,\r\n\t\t\t\"refreshLink\":true,\r\n\t\t\t\"resetProjectDates\":function(task){\r\n\t\t\t\tresetProjects[task.id] = task;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tdisableMethods.call(this, methods);\r\n\r\n\t\tisActive = true;\r\n\t\tthis.callEvent(\"onBeforeBatchUpdate\", []);\r\n\r\n\t\tbatchUpdatePayload(callback);\r\n\r\n\t\tthis.callEvent(\"onAfterBatchUpdate\", []);\r\n\r\n\t\trestoreMethods.call(this);\r\n\r\n\t\t// do required updates after changes applied\r\n\t\tfor(var i in resetProjects){\r\n\t\t\tthis.resetProjectDates(resetProjects[i]);\r\n\t\t}\r\n\r\n\t\tisActive = false;\r\n\r\n\t\tif(!noRedraw){\r\n\t\t\tthis.render();\r\n\t\t}\r\n\r\n\t\tif (call_dp) {\r\n\t\t\tthis._dp.setUpdateMode(dp_mode);\r\n\t\t\tthis._dp.setGanttMode(\"task\");\r\n\t\t\tthis._dp.sendData();\r\n\t\t\tthis._dp.setGanttMode(\"link\");\r\n\t\t\tthis._dp.sendData();\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n}\r\n\r\nexport default function(gantt){\r\n\tgantt.batchUpdate = createMethod(gantt);\r\n};","var createWbs = (function(gantt){\r\n\treturn {\r\n\t_needRecalc: true,\r\n\treset: function(){\r\n\t\tthis._needRecalc = true;\r\n\t},\r\n\t_isRecalcNeeded: function(){\r\n\t\treturn (!this._isGroupSort() && this._needRecalc);\r\n\t},\r\n\t_isGroupSort: function() {\r\n\t\treturn !!(gantt.getState().group_mode);\r\n\t},\r\n\t_getWBSCode: function(task) {\r\n\t\tif(!task) return \"\";\r\n\r\n\t\tif(this._isRecalcNeeded()){\r\n\t\t\tthis._calcWBS();\r\n\t\t}\r\n\r\n\t\tif(task.$virtual) return \"\";\r\n\t\tif(this._isGroupSort()) return task.$wbs || \"\";\r\n\r\n\t\tif(!task.$wbs) {\r\n\t\t\tthis.reset();\r\n\t\t\tthis._calcWBS();\r\n\t\t}\r\n\t\treturn task.$wbs;\r\n\t},\r\n\t_setWBSCode: function(task, value) {\r\n\t\ttask.$wbs = value;\r\n\t},\r\n\tgetWBSCode: function(task) {\r\n\t\treturn this._getWBSCode(task);\r\n\t},\r\n\tgetByWBSCode: function(code){\r\n\t\tvar parts = code.split(\".\");\r\n\t\tvar currentNode = gantt.config.root_id;\r\n\t\tfor(var i = 0; i < parts.length; i++){\r\n\t\t\tvar children = gantt.getChildren(currentNode);\r\n\t\t\tvar index = parts[i]*1 - 1;\r\n\t\t\tif(gantt.isTaskExists(children[index])){\r\n\t\t\t\tcurrentNode = children[index];\r\n\t\t\t}else{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(gantt.isTaskExists(currentNode)){\r\n\t\t\treturn gantt.getTask(currentNode);\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t},\r\n\t_calcWBS: function() {\r\n\t\tif(!this._isRecalcNeeded()) return;\r\n\r\n\t\tvar _isFirst = true;\r\n\t\tgantt.eachTask(function(ch) {\r\n\t\t\tif(_isFirst) {\r\n\t\t\t\t_isFirst = false;\r\n\t\t\t\tthis._setWBSCode(ch, \"1\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar _prevSibling = gantt.getPrevSibling(ch.id);\r\n\t\t\tif (_prevSibling !== null) {\r\n\t\t\t\tvar _wbs = gantt.getTask(_prevSibling).$wbs;\r\n\t\t\t\tif(_wbs) {\r\n\t\t\t\t\t_wbs = _wbs.split(\".\");\r\n\t\t\t\t\t_wbs[_wbs.length-1]++;\r\n\t\t\t\t\tthis._setWBSCode(ch, _wbs.join(\".\"));\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar _parent = gantt.getParent(ch.id);\r\n\t\t\t\tthis._setWBSCode(ch, gantt.getTask(_parent).$wbs + \".1\");\r\n\t\t\t}\r\n\t\t}, gantt.config.root_id, this);\r\n\r\n\t\tthis._needRecalc = false;\r\n\t}\r\n};\r\n});\r\n\r\nexport default function(gantt){\r\n\tvar wbs = createWbs(gantt);\r\n\tgantt.getWBSCode = function getWBSCode(task) {\r\n\t\treturn wbs.getWBSCode(task);\r\n\t};\r\n\r\n\tgantt.getTaskByWBSCode = function(code) {\r\n\t\treturn wbs.getByWBSCode(code);\r\n\t};\r\n\r\n\tfunction resetCache(){\r\n\t\twbs.reset();\r\n\t\treturn true;\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onAfterTaskMove\", resetCache);\r\n\tgantt.attachEvent(\"onBeforeParse\", resetCache);\r\n\tgantt.attachEvent(\"onAfterTaskDelete\", resetCache);\r\n\tgantt.attachEvent(\"onAfterTaskAdd\", resetCache);\r\n\tgantt.attachEvent(\"onAfterSort\", resetCache);\r\n\r\n};\r\n","import * as helpers from \"../../utils/helpers\";\r\n\r\nfunction createResourceMethods(gantt){\r\n\r\n\tvar resourceTaskCache = {};\r\n\tvar singleResourceCacheBuilt = false;\r\n\r\n\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(){\r\n\t\tresourceTaskCache = {};\r\n\t\tsingleResourceCacheBuilt = false;\r\n\t});\r\n\tgantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\t\tresourceTaskCache = {};\r\n\t});\r\n\r\n\tfunction getTaskBy(propertyName, propertyValue, typeFilter) {\r\n\t\tif (typeof propertyName == \"function\") {\r\n\t\t\treturn filterResourceTasks(propertyName);\r\n\t\t} else {\r\n\t\t\tif (helpers.isArray(propertyValue)) {\r\n\t\t\t\treturn getResourceTasks(propertyName, propertyValue, typeFilter);\r\n\t\t\t} else {\r\n\t\t\t\treturn getResourceTasks(propertyName, [propertyValue], typeFilter);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction filterResourceTasks(filter) {\r\n\t\tvar res = [];\r\n\t\tgantt.eachTask(function (task) {\r\n\t\t\tif (filter(task)) {\r\n\t\t\t\tres.push(task);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn res;\r\n\t}\r\n\r\n\tvar falsyValuePrefix = String(Math.random());\r\n\tfunction resourceHashFunction(value){\r\n\t\tif (value === null){\r\n\t\t\treturn falsyValuePrefix + String(value);\r\n\t\t}\r\n\t\treturn String(value);\r\n\t}\r\n\r\n\tfunction getCacheKey(resourceIds, property, typeFilter) {\r\n\t\tif (Array.isArray(resourceIds)) {\r\n\t\t\treturn resourceIds.map(function (value) {\r\n\t\t\t\treturn resourceHashFunction(value);\r\n\t\t\t}).join(\"_\") + `_${property}_${typeFilter}`;\r\n\t\t} else {\r\n\t\t\treturn resourceHashFunction(resourceIds) + `_${property}_${typeFilter}`;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getResourceTasks(property, resourceIds, typeFilter) {\r\n\t\tvar res;\r\n\t\tvar cacheKey = getCacheKey(resourceIds, property, JSON.stringify(typeFilter));\r\n\t\tvar matchingResources = {};\r\n\t\thelpers.forEach(resourceIds, function(resourceId) {\r\n\t\t\tmatchingResources[resourceHashFunction(resourceId)] = true;\r\n\t\t});\r\n\r\n\t\tif (!resourceTaskCache[cacheKey]) {\r\n\t\t\tres = resourceTaskCache[cacheKey] = [];\r\n\t\t\tgantt.eachTask(function (task) {\r\n\t\t\t\tif (typeFilter) {\r\n\t\t\t\t\tif (!typeFilter[gantt.getTaskType(task)]) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (task.type == gantt.config.types.project) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (property in task) {\r\n\t\t\t\t\tvar resourceValue;\r\n\t\t\t\t\tif (!helpers.isArray(task[property])) {\r\n\t\t\t\t\t\tresourceValue = [task[property]];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tresourceValue = task[property];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\thelpers.forEach(resourceValue, function(value) {\r\n\t\t\t\t\t\tvar resourceValue = (value && value.resource_id) ? value.resource_id : value;\r\n\r\n\t\t\t\t\t\tif (matchingResources[resourceHashFunction(resourceValue)]) {\r\n\t\t\t\t\t\t\tres.push(task);\r\n\t\t\t\t\t\t}else if(!singleResourceCacheBuilt){\r\n\r\n\t\t\t\t\t\t\tvar key = getCacheKey(value, property);\r\n\t\t\t\t\t\t\tif(!resourceTaskCache[key]){\r\n\t\t\t\t\t\t\t\tresourceTaskCache[key] = [];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tresourceTaskCache[key].push(task);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tsingleResourceCacheBuilt = true;\r\n\t\t} else {\r\n\t\t\tres = resourceTaskCache[cacheKey];\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t}\r\n\r\n\tfunction selectAssignments(resourceId, taskId, result){\r\n\t\tvar property = gantt.config.resource_property;\r\n\t\tvar owners = [];\r\n\t\tif (gantt.getDatastore(\"task\").exists(taskId)) {\r\n\t\t\tvar task = gantt.getTask(taskId);\r\n\t\t\towners = task[property] || [];\r\n\t\t}\r\n\r\n\t\tif (!Array.isArray(owners)) {\r\n\t\t\towners = [owners];\r\n\t\t}\r\n\t\tfor (var i = 0; i < owners.length; i++) {\r\n\t\t\tif (owners[i].resource_id == resourceId) {\r\n\t\t\t\tresult.push({task_id: task.id, resource_id:owners[i].resource_id, value:owners[i].value});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getResourceAssignments(resourceId, taskId){\r\n\t\t// resource assignment as an independent module:\r\n\t\t// {taskId:, resourceId, value}\r\n\t\t// TODO: probably should add a separate datastore for these\r\n\t\tvar assignments = [];\r\n\t\tvar property = gantt.config.resource_property;\r\n\t\tif(taskId !== undefined){\r\n\t\t\tselectAssignments(resourceId, taskId, assignments);\r\n\t\t}else{\r\n\t\t\tvar tasks = gantt.getTaskBy(property, resourceId);\r\n\t\t\ttasks.forEach(function(task){\r\n\t\t\t\tselectAssignments(resourceId, task.id, assignments);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn assignments;\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetTaskBy: getTaskBy,\r\n\t\tgetResourceAssignments: getResourceAssignments\r\n\t};\r\n}\r\n\r\nfunction createHelper(gantt){\r\n\tconst resourcePlugin = {\r\n\t\trenderEditableLabel: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tconst editable = gantt.config.readonly ? \"\" : \"contenteditable\";\r\n\t\t\tif(start_date < resource.end_date && end_date > resource.start_date){\r\n\t\t\t\tfor(let i = 0; i < assignments.length; i++){\r\n\t\t\t\t\tconst a = assignments[i];\r\n\t\t\t\t\t\treturn \"\" + a.value + \"
\";\r\n\t\t\t\t}\r\n\t\t\t\treturn \"-
\";\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t},\r\n\t\trenderSummaryLabel: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tlet sum = assignments.reduce(function(total, assignment){ \r\n\t\t\t\treturn total + Number(assignment.value);\r\n\t\t\t}, 0);\r\n\r\n\t\t\tif(sum % 1){\r\n\t\t\t\tsum = Math.round(sum * 10)/10;\r\n\t\t\t}\r\n\r\n\t\t\tif(sum){\r\n\t\t\t\treturn \"\" + sum + \"
\";\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t},\r\n\t\teditableResourceCellTemplate: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tif(resource.$role === \"task\"){\r\n\t\t\t\treturn resourcePlugin.renderEditableLabel(start_date, end_date, resource, tasks, assignments);\r\n\t\t\t}else{\r\n\t\t\t\treturn resourcePlugin.renderSummaryLabel(start_date, end_date, resource, tasks, assignments);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t\r\n\t\teditableResourceCellClass: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tconst css = [];\r\n\t\t\tcss.push(\"resource_marker\");\r\n\r\n\t\t\tif(resource.$role === \"task\"){\r\n\t\t\t\tcss.push(\"task_cell\");\r\n\t\t\t}else{\r\n\t\t\t\tcss.push(\"resource_cell\");\r\n\t\t\t}\r\n\r\n\t\t\tconst sum = assignments.reduce(function(total, assignment){ \r\n\t\t\t\treturn total + Number(assignment.value);\r\n\t\t\t}, 0);\r\n\r\n\t\t\tlet capacity = Number(resource.capacity);\r\n\t\t\tif(isNaN(capacity)){\r\n\t\t\t\tcapacity = 8;\r\n\t\t\t}\r\n\t\t\tif (sum <= capacity) {\r\n\t\t\t\tcss.push(\"workday_ok\");\r\n\t\t\t} else {\r\n\t\t\t\tcss.push(\"workday_over\");\r\n\t\t\t}\r\n\t\t\treturn css.join(\" \");\r\n\t\t},\r\n\t\tgetSummaryResourceAssignments: function getResourceAssignments(resourceId) {\r\n\t\t\tlet assignments;\r\n\t\t\tconst store = gantt.getDatastore(gantt.config.resource_store);\r\n\t\t\tconst resource = store.getItem(resourceId);\r\n\r\n\t\t\tif(resource.$role === \"task\"){\r\n\t\t\t\tassignments = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id);\r\n\t\t\t}else{\r\n\t\t\t\tassignments = gantt.getResourceAssignments(resourceId);\r\n\t\t\t\tif(store.eachItem){\r\n\t\t\t\t\tstore.eachItem(function(childResource){\r\n\t\t\t\t\t\tif(childResource.$role !== \"task\"){\r\n\t\t\t\t\t\t\tassignments = assignments.concat(gantt.getResourceAssignments(childResource.id));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, resourceId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn assignments;\r\n\t\t},\r\n\t\t\r\n\t\tinitEditableDiagram: function(){\r\n\t\t\tgantt.config.resource_render_empty_cells = true;\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t(function(){\r\n\t\t\t\t/// salesforce locker workaround\r\n\t\t\t\t// SF removes 'contenteditable' attribute from cells\r\n\t\t\t\t// restore it on render\r\n\t\t\t\tlet timeoutId = null;\r\n\t\t\t\tfunction makeEditable() {\r\n\t\t\t\t\tif (timeoutId) {\r\n\t\t\t\t\t\tcancelAnimationFrame(timeoutId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttimeoutId = requestAnimationFrame(function () {\r\n\t\t\t\t\t\tif (gantt.$container){\r\n\t\t\t\t\t\t\tvar cells = Array.prototype.slice.call(gantt.$container.querySelectorAll(\".resourceTimeline_cell [data-assignment-cell]\"));\r\n\t\t\t\t\t\t\tcells.forEach(function (cell) {\r\n\t\t\t\t\t\t\t\tcell.contentEditable = true;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\t\t\t\tgantt.getDatastore(gantt.config.resource_assignment_store).attachEvent(\"onStoreUpdated\", makeEditable);\r\n\t\t\t\t\tgantt.getDatastore(gantt.config.resource_store).attachEvent(\"onStoreUpdated\", makeEditable);\r\n\t\t\t\t}, {once: true});\r\n\t\t\t\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t\t\t\t\tconst ganttViews = gantt.$layout.getCellsByType(\"viewCell\");\r\n\t\t\t\t\tganttViews.forEach(function(view){\r\n\t\t\t\t\t\tif(view.$config && view.$config.view === \"resourceTimeline\" && view.$content){\r\n\t\t\t\t\t\t\tview.$content.attachEvent(\"onScroll\", makeEditable);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t})();\r\n\r\n\r\n\t\t\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\t\t\tlet assignmentEditInProcess = false;\r\n\t\t\t\tgantt.event(gantt.$container, \"keypress\", function(e){\r\n\t\t\t\t\tvar target = e.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\r\n\t\t\t\t\tif(target){\r\n\t\t\t\t\t\tif (e.keyCode === 13 || e.keyCode === 27) {\r\n\t\t\t\t\t\t\ttarget.blur();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgantt.event(gantt.$container, \"focusout\", function(e){\r\n\t\t\t\t\tif (assignmentEditInProcess){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tassignmentEditInProcess = true;\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tassignmentEditInProcess = false;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t\tvar target = e.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\r\n\t\t\t\t\tif(target){\r\n\t\t\t\t\t\tvar strValue = (target.innerText || \"\").trim();\r\n\t\t\t\t\t\tif(strValue == \"-\"){\r\n\t\t\t\t\t\t\tstrValue = \"0\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar value = Number(strValue);\r\n\t\t\t\t\t\tvar rowId = target.getAttribute(\"data-row-id\");\r\n\t\t\t\t\t\tvar assignmentId = target.getAttribute(\"data-assignment-id\");\r\n\t\t\t\t\t\tvar taskId = target.getAttribute(\"data-task\");\r\n\t\t\t\t\t\tvar resourceId = target.getAttribute(\"data-resource-id\");\r\n\t\t\t\t\t\tvar startDate = gantt.templates.parse_date(target.getAttribute(\"data-start-date\"));\r\n\t\t\t\t\t\tvar endDate = gantt.templates.parse_date(target.getAttribute(\"data-end-date\"));\r\n\r\n\t\t\t\t\t\tvar assignmentStore = gantt.getDatastore(gantt.config.resource_assignment_store);\r\n\t\t\t\t\t\tif(isNaN(value)){\r\n\t\t\t\t\t\t\tgantt.getDatastore(gantt.config.resource_store).refresh(rowId);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tvar task = gantt.getTask(taskId);\r\n\t\t\t\t\t\t\t// GS-2141. Track the changes by the Undo extension\r\n\t\t\t\t\t\t\tif (gantt.plugins().undo){\r\n\t\t\t\t\t\t\t\tgantt.ext.undo.saveState(taskId, \"task\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(assignmentId){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar assignment = assignmentStore.getItem(assignmentId);\r\n\t\t\t\t\t\t\t\tif(value === assignment.value){\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif(assignment.start_date.valueOf() === startDate.valueOf() && assignment.end_date.valueOf() === endDate.valueOf()){\r\n\t\t\t\t\t\t\t\t\tassignment.value = value;\r\n\t\t\t\t\t\t\t\t\tif(!value){\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.removeItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.updateItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tif(assignment.end_date.valueOf() > endDate.valueOf()){\r\n\t\t\t\t\t\t\t\t\t\tvar nextChunk = gantt.copy(assignment);\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.id = gantt.uid();\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.start_date = endDate;\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.duration = gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: nextChunk.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: nextChunk.end_date,\r\n\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.delay = gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: nextChunk.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.mode = assignment.mode || \"default\";\r\n\t\t\t\t\t\t\t\t\t\tif(nextChunk.duration !== 0){\r\n\t\t\t\t\t\t\t\t\t\t\tassignmentStore.addItem(nextChunk);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif(assignment.start_date.valueOf() < startDate.valueOf()){\r\n\t\t\t\t\t\t\t\t\t\tassignment.end_date = startDate;\r\n\t\t\t\t\t\t\t\t\t\tassignment.duration = gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: assignment.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: assignment.end_date,\r\n\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\tassignment.mode = \"fixedDuration\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(assignment.duration === 0){\r\n\t\t\t\t\t\t\t\t\t\t\tassignmentStore.removeItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tassignmentStore.updateItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.removeItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif(value){\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.addItem({\r\n\t\t\t\t\t\t\t\t\t\t\ttask_id: assignment.task_id,\r\n\t\t\t\t\t\t\t\t\t\t\tresource_id: assignment.resource_id,\r\n\t\t\t\t\t\t\t\t\t\t\tvalue: value,\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\t\t\tduration: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\tdelay: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\t\tend_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\tmode: \"fixedDuration\"\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tgantt.updateTaskAssignments(task.id);\r\n\t\t\t\t\t\t\t\tgantt.updateTask(task.id);\r\n\t\t\t\t\t\t\t}else if(value){\r\n\t\t\t\t\t\t\t\tvar assignment = {\r\n\t\t\t\t\t\t\t\t\ttask_id: taskId,\r\n\t\t\t\t\t\t\t\t\tresource_id: resourceId,\r\n\t\t\t\t\t\t\t\t\tvalue: value,\r\n\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\tduration: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tdelay: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\t\t\t\t\tend_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tmode: \"fixedDuration\"\r\n\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\tassignmentStore.addItem(assignment);\r\n\t\t\t\t\t\t\t\tgantt.updateTaskAssignments(task.id);\r\n\t\t\t\t\t\t\t\tgantt.updateTask(task.id);\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}, {once: true});\r\n\t\t}\r\n\t};\r\n\treturn resourcePlugin;\r\n}\r\n\r\nexport default function(gantt){\r\n\tvar methods = createResourceMethods(gantt);\r\n\t\r\n\tgantt.ext.resources = createHelper(gantt);\r\n\r\n\tgantt.config.resources = {\r\n\t\tdataprocessor_assignments: false,\r\n\t\tdataprocessor_resources: false,\r\n\t\teditable_resource_diagram: false,\r\n\t\tresource_store: {\r\n\t\t\ttype: \"treeDataStore\",\r\n\t\t\tfetchTasks: false,\r\n\t\t\tinitItem: function(item) {\r\n\t\t\t\titem.parent = item.parent || gantt.config.root_id;\r\n\t\t\t\titem[gantt.config.resource_property] = item.parent;\r\n\t\t\t\titem.open = true;\r\n\t\t\t\treturn item;\r\n\t\t\t}\r\n\t\t},\r\n\t\tlightbox_resources: function selectResourceControlOptions(resources){\r\n\t\t\tconst lightboxOptions = [];\r\n\t\t\tconst store = gantt.getDatastore(gantt.config.resource_store);\r\n\t\t\tresources.forEach(function(res) {\r\n\t\t\t\tif (!store.hasChild(res.id)) {\r\n\t\t\t\t\tconst copy = gantt.copy(res);\r\n\t\t\t\t\tcopy.key = res.id;\r\n\t\t\t\t\tcopy.label = res.text;\r\n\t\t\t\t\tlightboxOptions.push(copy);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn lightboxOptions;\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tif(gantt.getDatastore(gantt.config.resource_store)){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst resourceStoreConfig = gantt.config.resources ? gantt.config.resources.resource_store : undefined;\r\n\t\tlet fetchTasks = resourceStoreConfig ? resourceStoreConfig.fetchTasks : undefined;\r\n\t\tif(gantt.config.resources && gantt.config.resources.editable_resource_diagram){\r\n\t\t\tfetchTasks = true;\r\n\t\t}\r\n\r\n\t\tlet initItems = function(item) {\r\n\t\t\titem.parent = item.parent || gantt.config.root_id;\r\n\t\t\titem[gantt.config.resource_property] = item.parent;\r\n\t\t\titem.open = true;\r\n\t\t\treturn item;\r\n\t\t};\r\n\r\n\t\tif(resourceStoreConfig && resourceStoreConfig.initItem){\r\n\t\t\tinitItems = resourceStoreConfig.initItem;\r\n\t\t}\r\n\r\n\t\tconst storeType = resourceStoreConfig && resourceStoreConfig.type ? resourceStoreConfig.type : \"treeDatastore\";\r\n\r\n\t\tgantt.$resourcesStore = gantt.createDatastore({\r\n\t\t\tname: gantt.config.resource_store,\r\n\t\t\ttype: storeType,\r\n\t\t\tfetchTasks: fetchTasks !== undefined ? fetchTasks : false,\r\n\t\t\tinitItem: initItems\r\n\t\t});\r\n\r\n\t\tgantt.$data.resourcesStore = gantt.$resourcesStore;\r\n\r\n\t\tgantt.$resourcesStore.attachEvent(\"onParse\", function() {\r\n\t\t\tfunction selectResourceControlOptions(resources){\r\n\t\t\t\tconst lightboxOptions = [];\r\n\t\t\t\tresources.forEach(function(res) {\r\n\t\t\t\t\tif (!gantt.$resourcesStore.hasChild(res.id)) {\r\n\t\t\t\t\t\tvar copy = gantt.copy(res);\r\n\t\t\t\t\t\tcopy.key = res.id;\r\n\t\t\t\t\t\tcopy.label = res.text;\r\n\t\t\t\t\t\tlightboxOptions.push(copy);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn lightboxOptions;\r\n\t\t\t}\r\n\r\n\t\t\tlet lightboxOptionsFnc = selectResourceControlOptions;\r\n\t\t\tif(gantt.config.resources && gantt.config.resources.lightbox_resources){\r\n\t\t\t\tlightboxOptionsFnc = gantt.config.resources.lightbox_resources;\r\n\t\t\t}\r\n\r\n\t\t\tconst options = lightboxOptionsFnc(gantt.$resourcesStore.getItems());\r\n\r\n\t\t\tgantt.updateCollection(\"resourceOptions\", options);\r\n\t\t});\r\n\t});\r\n\r\n\tgantt.getTaskBy = methods.getTaskBy;\r\n\tgantt.getResourceAssignments = methods.getResourceAssignments;\r\n\tgantt.config.resource_property = \"owner_id\";\r\n\tgantt.config.resource_store = \"resource\";\r\n\tgantt.config.resource_render_empty_cells = false;\r\n\r\n\t/**\r\n\t * these are placeholder functions that should be redefined by the user\r\n\t*/\r\n\tgantt.templates.histogram_cell_class = function(start_date, end_date, resource, tasks, assignments) {};\r\n\tgantt.templates.histogram_cell_label = function(start_date, end_date, resource, tasks, assignments) {\r\n\t\treturn tasks.length + \"/3\";\r\n\t};\r\n\tgantt.templates.histogram_cell_allocated = function(start_date, end_date, resource, tasks, assignments) {\r\n\t\treturn tasks.length / 3;\r\n\t};\r\n\tgantt.templates.histogram_cell_capacity = function(start_date, end_date, resource, tasks, assignments) {\r\n\t\treturn 0;\r\n\t};\r\n\r\n\r\n\tconst defaultResourceCellClass = function(start, end, resource, tasks, assignments) {\r\n\t\tvar css = \"\";\r\n\t\tif (tasks.length <= 1) {\r\n\t\t\tcss = \"gantt_resource_marker_ok\";\r\n\t\t} else {\r\n\t\t\tcss = \"gantt_resource_marker_overtime\";\r\n\t\t}\r\n\t\treturn css;\r\n\t};\r\n\r\n\tconst defaultResourceCellTemplate = function(start, end, resource, tasks, assignments) {\r\n\t\treturn tasks.length * 8;\r\n\t};\r\n\r\n\tgantt.templates.resource_cell_value = defaultResourceCellTemplate;\r\n\tgantt.templates.resource_cell_class = defaultResourceCellClass;\r\n\r\n\t//editable_resource_diagram\r\n\tgantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tif(gantt.config.resources && gantt.config.resources.editable_resource_diagram){\r\n\r\n\t\t\tgantt.config.resource_render_empty_cells = true;\r\n\t\t\tif(gantt.templates.resource_cell_value === defaultResourceCellTemplate){\r\n\t\t\t\tgantt.templates.resource_cell_value = gantt.ext.resources.editableResourceCellTemplate;\r\n\t\t\t}\r\n\t\t\tif(gantt.templates.resource_cell_class === defaultResourceCellClass){\r\n\t\t\t\tgantt.templates.resource_cell_class = gantt.ext.resources.editableResourceCellClass;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tgantt.ext.resources.initEditableDiagram(gantt);\r\n\t\t}\r\n\t});\r\n};\r\n\r\n\r\n","export default function (gantt) {\r\n\tvar resourceAssignmentsProperty = \"$resourceAssignments\";\r\n\tgantt.config.resource_assignment_store = \"resourceAssignments\";\r\n\tgantt.config.process_resource_assignments = true;\r\n\r\n\tvar resourceAssignmentFormats = {\r\n\t\tauto: \"auto\",\r\n\t\tsingleValue: \"singleValue\",\r\n\t\tvalueArray: \"valueArray\",\r\n\t\tresourceValueArray: \"resourceValueArray\",\r\n\t\tassignmentsArray: \"assignmentsArray\"\r\n\t};\r\n\tvar resourceAssignmentFormat = resourceAssignmentFormats.auto;//\"primitiveSingle\";//\"primitive\";//\"object\"|\"assignment\"\r\n\r\n\tvar assignmentModes = {\r\n\t\tfixedDates: \"fixedDates\",\r\n\t\tfixedDuration: \"fixedDuration\",\r\n\t\tdefault: \"default\"\r\n\t};\r\n\r\n\r\n\tfunction initAssignmentFields(item, task){\r\n\t\tif (item.start_date) {\r\n\t\t\titem.start_date = gantt.date.parseDate(item.start_date, \"parse_date\");\r\n\t\t} else {\r\n\t\t\titem.start_date = null;\r\n\t\t}\r\n\r\n\t\tif (item.end_date) {\r\n\t\t\titem.end_date = gantt.date.parseDate(item.end_date, \"parse_date\");\r\n\t\t} else {\r\n\t\t\titem.end_date = null;\r\n\t\t}\r\n\r\n\t\tvar delay = Number(item.delay);\r\n\t\tvar initDelay = false;\r\n\t\tif (!isNaN(delay)) {\r\n\t\t\titem.delay = delay;\r\n\t\t} else {\r\n\t\t\titem.delay = 0;\r\n\t\t\tinitDelay = true;\r\n\t\t}\r\n\r\n\t\tif (!gantt.defined(item.value)) {\r\n\t\t\titem.value = null;\r\n\t\t}\r\n\r\n\t\tif (!item.task_id || !item.resource_id) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\titem.mode = item.mode || assignmentModes.default;\r\n\r\n\t\tif(item.mode === assignmentModes.fixedDuration){\r\n\t\t\tif(isNaN(Number(item.duration))){\r\n\t\t\t\ttask = task || gantt.getTask(item.task_id);\r\n\t\t\t\titem.duration = gantt.calculateDuration({\r\n\t\t\t\t\tstart_date: item.start_date,\r\n\t\t\t\t\tend_date: item.end_date,\r\n\t\t\t\t\tid: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif(initDelay){\r\n\t\t\t\ttask = task || gantt.getTask(item.task_id);\r\n\t\t\t\titem.delay = gantt.calculateDuration({\r\n\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\tend_date: item.start_date,\r\n\t\t\t\t\tid: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (item.mode !== assignmentModes.fixedDates && (task || gantt.isTaskExists(item.task_id))) {\r\n\t\t\ttask = task || gantt.getTask(item.task_id);\r\n\t\t\tvar timing = _assignmentTimeFromTask(item, task);\r\n\t\t\titem.start_date = timing.start_date;\r\n\t\t\titem.end_date = timing.end_date;\r\n\t\t\titem.duration = timing.duration;\r\n\t\t}\r\n\t}\r\n\t// gantt init\r\n\tvar resourceAssignmentsStore = gantt.createDatastore({\r\n\t\tname: gantt.config.resource_assignment_store,\r\n\t\tinitItem: function (item) {\r\n\t\t\tif (!item.id) {\r\n\t\t\t\titem.id = gantt.uid();\r\n\t\t\t}\r\n\r\n\t\t\tinitAssignmentFields(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\t});\r\n\t\r\n\tgantt.$data.assignmentsStore = resourceAssignmentsStore;\r\n\r\n\tfunction _assignmentTimeFromTask(assignment, task) {\r\n\r\n\t\tif (assignment.mode === assignmentModes.fixedDates) {\r\n\t\t\treturn {\r\n\t\t\t\tstart_date: assignment.start_date,\r\n\t\t\t\tend_date: assignment.end_date,\r\n\t\t\t\tduration: assignment.duration\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tvar start = assignment.delay ? gantt.calculateEndDate({\r\n\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\tduration: assignment.delay,\r\n\t\t\t\ttask: task\r\n\t\t\t}) : new Date(task.start_date);\r\n\r\n\t\t\tvar end;\r\n\t\t\tvar duration;\r\n\t\t\tif (assignment.mode === assignmentModes.fixedDuration) {\r\n\t\t\t\tend = gantt.calculateEndDate({\r\n\t\t\t\t\tstart_date: start,\r\n\t\t\t\t\tduration: assignment.duration,\r\n\t\t\t\t\ttask: task\r\n\t\t\t\t});\r\n\t\t\t\tduration = assignment.duration;\r\n\t\t\t} else {\r\n\t\t\t\tend = new Date(task.end_date);\r\n\t\t\t\tduration = task.duration - assignment.delay;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: start,\r\n\t\t\tend_date: end,\r\n\t\t\tduration: duration\r\n\t\t};\r\n\t}\r\n\r\n\t// data loading\r\n\r\n\tfunction _makeAssignmentsFromTask(task) {\r\n\t\tconst property = gantt.config.resource_property;\r\n\t\tlet assignments = task[property];\r\n\t\tconst resourceAssignments = [];\r\n\t\tlet detectFormat = resourceAssignmentFormat === resourceAssignmentFormats.auto;\r\n\r\n\t\tif (gantt.defined(assignments) && assignments) {\r\n\t\t\tif (!Array.isArray(assignments)) {\r\n\t\t\t\tassignments = [assignments];\r\n\t\t\t\tif (detectFormat) {\r\n\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.singleValue;\r\n\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst usedIds = {};\r\n\t\t\tassignments.forEach(function (res) {\r\n\t\t\t\tif (!res.resource_id) { // when resource is a string/number\r\n\t\t\t\t\tres = { resource_id: res };\r\n\t\t\t\t\tif (detectFormat) {\r\n\t\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.valueArray;\r\n\t\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//\tisSimpleArray = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (detectFormat) {\r\n\t\t\t\t\tif (res.id && res.resource_id) {\r\n\t\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.assignmentsArray;\r\n\t\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.resourceValueArray;\r\n\t\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet defaultMode = assignmentModes.default;\r\n\t\t\t\tif(!res.mode){\r\n\t\t\t\t\tif((res.start_date && res.end_date) || (res.start_date && res.duration)){\r\n\t\t\t\t\t\tdefaultMode = assignmentModes.fixedDuration;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet id;\r\n\t\t\t\tif(!res.id && res.$id && !usedIds[res.$id]){\r\n\t\t\t\t\tid = res.$id;\r\n\t\t\t\t} else if(res.id && !usedIds[res.id]){\r\n\t\t\t\t\tid = res.id;\r\n\t\t\t\t} else{\r\n\t\t\t\t\tid = gantt.uid();\r\n\t\t\t\t}\r\n\t\t\t\tusedIds[id] = true;\r\n\r\n\t\t\t\tconst assignment = {\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\tstart_date: res.start_date,\r\n\t\t\t\t\tduration: res.duration,\r\n\t\t\t\t\tend_date: res.end_date,\r\n\t\t\t\t\tdelay: res.delay,\r\n\t\t\t\t\ttask_id: task.id,\r\n\t\t\t\t\tresource_id: res.resource_id,\r\n\t\t\t\t\tvalue: res.value,\r\n\t\t\t\t\tmode: res.mode || defaultMode\r\n\t\t\t\t};\r\n\t\t\t\t// GS-2490: to add custom properties to assignment\r\n\t\t\t\t// need to exclude $id which incfluences on render \r\n\t\t\t\tObject.keys(res).forEach(key => {\r\n\t\t\t\t\tif(key != \"$id\") {\r\n\t\t\t\t\t\tassignment[key] = res[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!(assignment.start_date && assignment.start_date.getMonth \r\n\t\t\t\t\t&& assignment.end_date && assignment.end_date.getMonth && typeof assignment.duration === \"number\")){\r\n\t\t\t\t\tinitAssignmentFields(assignment, task);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresourceAssignments.push(assignment);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn resourceAssignments;\r\n\t}\r\n\r\n\tfunction _updateTaskBack(taskId) {\r\n\t\t// GS-1493. In some cases, the resource assignment store has the tasks that no longer exist\r\n\t\tif (!gantt.isTaskExists(taskId)){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar task = gantt.getTask(taskId);\r\n\t\tvar assignments = gantt.getTaskAssignments(task.id);\r\n\t\t_assignAssignments(task, assignments);\r\n\t}\r\n\r\n\tfunction _assignAssignments(task, assignments){\r\n\t\tassignments.sort(function(a, b){\r\n\t\t\tif(a.start_date && b.start_date && a.start_date.valueOf() != b.start_date.valueOf()){\r\n\t\t\t\treturn a.start_date - b.start_date;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (resourceAssignmentFormat == resourceAssignmentFormats.assignmentsArray) {\r\n\t\t\ttask[gantt.config.resource_property] = assignments;\r\n\t\t} else if (resourceAssignmentFormat == resourceAssignmentFormats.resourceValueArray) {\r\n\t\t\ttask[gantt.config.resource_property] = assignments.map(function (a) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t$id: a.id,\r\n\t\t\t\t\tstart_date: a.start_date,\r\n\t\t\t\t\tduration: a.duration,\r\n\t\t\t\t\tend_date: a.end_date,\r\n\t\t\t\t\tdelay: a.delay,\r\n\t\t\t\t\tresource_id: a.resource_id,\r\n\t\t\t\t\tvalue: a.value,\r\n\t\t\t\t\tmode: a.mode\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttask[resourceAssignmentsProperty] = assignments;\r\n\t}\r\n\r\n\tfunction _loadAssignmentsFromTask(task) {\r\n\t\tvar assignments = _makeAssignmentsFromTask(task);\r\n\t\tvar taskAssignments = [];\r\n\t\tassignments.forEach(function (a) {\r\n\t\t\ta.id = a.id || gantt.uid();\r\n\t\t\t//var newId = resourceAssignmentsStore.addItem(a);\r\n\t\t\ttaskAssignments.push(a);\r\n\t\t});\r\n\r\n\t\treturn assignments;\r\n\t}\r\n\r\n\tfunction diffAssignments(taskValues, assignmentsStoreValues) {\r\n\t\tvar result = {\r\n\t\t\tinBoth: [],\r\n\t\t\tinTaskNotInStore: [],\r\n\t\t\tinStoreNotInTask: []\r\n\t\t};\r\n\r\n\t\tif (resourceAssignmentFormat == resourceAssignmentFormats.singleValue) {\r\n\t\t\tvar taskOwner = taskValues[0];\r\n\t\t\tvar ownerId = taskOwner ? taskOwner.resource_id : null;\r\n\t\t\tvar foundOwnerAssignment = false;\r\n\t\t\tassignmentsStoreValues.forEach(function (a) {\r\n\t\t\t\tif (a.resource_id != ownerId) {\r\n\t\t\t\t\tresult.inStoreNotInTask.push(a);\r\n\t\t\t\t} else if (a.resource_id == ownerId) {\r\n\t\t\t\t\tresult.inBoth.push({ store: a, task: taskOwner });\r\n\t\t\t\t\tfoundOwnerAssignment = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (!foundOwnerAssignment && taskOwner) {\r\n\t\t\t\tresult.inTaskNotInStore.push(taskOwner);\r\n\t\t\t}\r\n\r\n\r\n\t\t} else if (resourceAssignmentFormat == resourceAssignmentFormats.valueArray){\r\n\r\n\t\t\tvar taskSearch = {};\r\n\t\t\tvar storeSearch = {};\r\n\t\t\tvar processedIds = {};\r\n\t\t\ttaskValues.forEach(function (a) {\r\n\t\t\t\ttaskSearch[a.resource_id] = a;\r\n\t\t\t});\r\n\t\t\tassignmentsStoreValues.forEach(function (a) {\r\n\t\t\t\tstoreSearch[a.resource_id] = a;\r\n\t\t\t});\r\n\t\t\ttaskValues.concat(assignmentsStoreValues).forEach(function (a) {\r\n\t\t\t\tif (processedIds[a.resource_id]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tprocessedIds[a.resource_id] = true;\r\n\t\t\t\tvar inTask = taskSearch[a.resource_id];\r\n\t\t\t\tvar inStore = storeSearch[a.resource_id];\r\n\r\n\t\t\t\tif (inTask && inStore) {\r\n\t\t\t\t\tresult.inBoth.push({ store: inStore, task: inTask });\r\n\t\t\t\t} else if (inTask && !inStore) {\r\n\t\t\t\t\tresult.inTaskNotInStore.push(inTask);\r\n\t\t\t\t} else if (!inTask && inStore) {\r\n\t\t\t\t\tresult.inStoreNotInTask.push(inStore);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if ((resourceAssignmentFormat == resourceAssignmentFormats.assignmentsArray)\r\n\t\t\t|| (resourceAssignmentFormat == resourceAssignmentFormats.resourceValueArray)) {\r\n\t\t\tvar taskSearch = {};\r\n\t\t\tvar storeSearch = {};\r\n\t\t\tvar processedIds = {};\r\n\t\t\ttaskValues.forEach(function (a) {\r\n\t\t\t\ttaskSearch[a.id || a.$id] = a;\r\n\t\t\t});\r\n\t\t\tassignmentsStoreValues.forEach(function (a) {\r\n\t\t\t\tstoreSearch[a.id] = a;\r\n\t\t\t});\r\n\t\t\ttaskValues.concat(assignmentsStoreValues).forEach(function (a) {\r\n\t\t\t\tvar id = a.id || a.$id;\r\n\t\t\t\tif (processedIds[id]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tprocessedIds[id] = true;\r\n\t\t\t\tvar inTask = taskSearch[id];\r\n\t\t\t\tvar inStore = storeSearch[id];\r\n\r\n\t\t\t\tif (inTask && inStore) {\r\n\t\t\t\t\tresult.inBoth.push({ store: inStore, task: inTask });\r\n\t\t\t\t} else if (inTask && !inStore) {\r\n\t\t\t\t\tresult.inTaskNotInStore.push(inTask);\r\n\t\t\t\t} else if (!inTask && inStore) {\r\n\t\t\t\t\tresult.inStoreNotInTask.push(inStore);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction assignmentHasChanged(source, target) {\r\n\t\tvar ignoreFields = {\r\n\t\t\tid: true\r\n\t\t};\r\n\r\n\t\tfor (var i in source) {\r\n\t\t\tif (!ignoreFields[i]) {\r\n\t\t\t\tif (String(source[i]) !== String(target[i])) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tfunction updateAssignment(source, target) {\r\n\t\tvar ignoreFields = {\r\n\t\t\tid: true\r\n\t\t};\r\n\r\n\t\tfor (var i in source) {\r\n\t\t\tif (!ignoreFields[i]) {\r\n\t\t\t\ttarget[i] = source[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _syncAssignments(task, storeAssignments){\r\n\t\tvar tasksAssignments = _makeAssignmentsFromTask(task);\r\n\r\n\t\tvar diff = diffAssignments(tasksAssignments, storeAssignments);\r\n\t\tdiff.inStoreNotInTask.forEach(function (a) {\r\n\t\t\tresourceAssignmentsStore.removeItem(a.id);\r\n\t\t});\r\n\t\tdiff.inTaskNotInStore.forEach(function (a) {\r\n\t\t\tresourceAssignmentsStore.addItem(a);\r\n\t\t});\r\n\r\n\t\tdiff.inBoth.forEach(function (a) {\r\n\t\t\tif (assignmentHasChanged(a.task, a.store)) {\r\n\t\t\t\tupdateAssignment(a.task, a.store);\r\n\t\t\t\tresourceAssignmentsStore.updateItem(a.store.id);\r\n\t\t\t} else {\r\n\t\t\t\tif (a.task.start_date && a.task.end_date && a.task.mode !== assignmentModes.fixedDates) {\r\n\t\t\t\t\tvar timing = _assignmentTimeFromTask(a.store, task);\r\n\t\t\t\t\tif (a.store.start_date.valueOf() != timing.start_date.valueOf() || a.store.end_date.valueOf() != timing.end_date.valueOf()) {\r\n\t\t\t\t\t\ta.store.start_date = timing.start_date;\r\n\t\t\t\t\t\ta.store.end_date = timing.end_date;\r\n\t\t\t\t\t\ta.store.duration = timing.duration;\r\n\t\t\t\t\t\tresourceAssignmentsStore.updateItem(a.store.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t_updateTaskBack(task.id);\r\n\t}\r\n\r\n\tfunction _syncOnTaskUpdate(task) {\r\n\t\tvar storeAssignments = task[resourceAssignmentsProperty] || resourceAssignmentsStore.find(function (a) {\r\n\t\t\treturn a.task_id == task.id;\r\n\t\t});\r\n\r\n\t\t_syncAssignments(task, storeAssignments);\r\n\t}\r\n\r\n\tfunction _syncOnTaskDelete(ids) {\r\n\t\tvar idsSearch = {};\r\n\t\tids.forEach(function (id) {\r\n\t\t\tidsSearch[id] = true;\r\n\t\t});\r\n\t\tvar taskResources = resourceAssignmentsStore.find(function (a) {\r\n\t\t\treturn idsSearch[a.task_id];\r\n\t\t});\r\n\t\ttaskResources.forEach(function (a) {\r\n\t\t\tresourceAssignmentsStore.removeItem(a.id);\r\n\t\t});\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\r\n\t\tif (gantt.config.process_resource_assignments) {\r\n\t\t\tgantt.attachEvent(\"onParse\", function () {\r\n\t\t\t\tgantt.silent(function () {\r\n\t\t\t\t\tresourceAssignmentsStore.clearAll();\r\n\t\t\t\t\tvar totalAssignments = [];\r\n\t\t\t\t\tgantt.eachTask(function (task) {\r\n\t\t\t\t\t\tif (task.type === gantt.config.types.project) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar assignments = _loadAssignmentsFromTask(task);\r\n\t\t\t\t\t\t_assignAssignments(task, assignments);\r\n\r\n\t\t\t\t\t\tassignments.forEach(function (a) {\r\n\t\t\t\t\t\t\ttotalAssignments.push(a);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t\tresourceAssignmentsStore.parse(totalAssignments);\r\n\t\t\t\t});\r\n\r\n\t\t\t});\r\n\r\n\t\t\tvar batchUpdate = false;\r\n\t\t\tvar needUpdate = false;\r\n\t\t\tvar needUpdateFor = {};\r\n\t\t\tvar undoBatchCancel = false;\r\n\t\t\tgantt.attachEvent(\"onBeforeBatchUpdate\", function(){\r\n\t\t\t\tbatchUpdate = true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterBatchUpdate\", function(){\r\n\t\t\t\t\r\n\t\t\t\tif(needUpdate){\r\n\t\t\t\t\tvar assignmentsHash = {};\r\n\t\t\t\t\tfor(var i in needUpdateFor){\r\n\t\t\t\t\t\tassignmentsHash[i] = gantt.getTaskAssignments(needUpdateFor[i].id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor(var i in needUpdateFor){\r\n\t\t\t\t\t\t_syncAssignments(needUpdateFor[i], assignmentsHash[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tneedUpdate = false;\r\n\t\t\t\tbatchUpdate = false;\r\n\t\t\t\tneedUpdateFor = {};\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onTaskCreated\", function (item) {\r\n\t\t\t\tvar assignments = _loadAssignmentsFromTask(item);\r\n\t\t\t\tresourceAssignmentsStore.parse(assignments);\r\n\t\t\t\t_assignAssignments(item, assignments);\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterTaskUpdate\", function (id, item) {\r\n\t\t\t\tif(batchUpdate){\r\n\t\t\t\t\tneedUpdate = true;\r\n\t\t\t\t\tneedUpdateFor[id] = item;\r\n\t\t\t\t}else if (!item.unscheduled){\r\n\t\t\t\t\t_syncOnTaskUpdate(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterTaskAdd\", function (id, item) {\r\n\t\t\t\tif(batchUpdate){\r\n\t\t\t\t\tneedUpdate = true;\r\n\t\t\t\t\tneedUpdateFor[id] = item;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t_syncOnTaskUpdate(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t/*\tgantt.attachEvent(\"onRowDragMove\", function (id) {\r\n\t\t\t\t_syncOnTaskUpdate(gantt.getTask(id));\r\n\t\t\t});*/\r\n\t\t\tgantt.attachEvent(\"onRowDragEnd\", function (id) {\r\n\t\t\t\t_syncOnTaskUpdate(gantt.getTask(id));\r\n\t\t\t});\r\n\t\t\tgantt.$data.tasksStore.attachEvent(\"onAfterDeleteConfirmed\", function (id, item) {\r\n\t\t\t\tvar deleteIds = [id];\r\n\t\t\t\tgantt.eachTask(function (task) {\r\n\t\t\t\t\tdeleteIds.push(task.id);\r\n\t\t\t\t}, id);\r\n\t\t\t\t_syncOnTaskDelete(deleteIds);\r\n\t\t\t});\r\n\t\t\tgantt.$data.tasksStore.attachEvent(\"onClearAll\", function () {\r\n\t\t\t\tresourceAssignmentsCache = null;\r\n\t\t\t\tresourceTaskAssignmentsCache = null;\r\n\t\t\t\ttaskAssignmentsCache = null;\r\n\t\t\t\tresourceAssignmentsStore.clearAll();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\r\n\t\t\t\tvar taskResources = resourceAssignmentsStore.find(function (a) {\r\n\t\t\t\t\treturn a.task_id == id;\r\n\t\t\t\t});\r\n\t\t\t\ttaskResources.forEach(function (a) {\r\n\t\t\t\t\ta.task_id = new_id;\r\n\t\t\t\t\tresourceAssignmentsStore.updateItem(a.id);\r\n\t\t\t\t});\r\n\t\t\t\t_updateTaskBack(new_id);\r\n\t\t\t\t//any custom logic here\r\n\t\t\t});\r\n\t\t\t// GS-2144. When we Undo something, the cache should be reset\r\n\t\t\t// during the `onStoreUpdated` event to properly update the assignments\r\n\t\t\tgantt.attachEvent(\"onBeforeUndo\", function (action) {\r\n\t\t\t\tundoBatchCancel = true;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterUndo\", function (action) {\r\n\t\t\t\tundoBatchCancel = true;\r\n\t\t\t});\r\n\r\n\r\n\t\t\tvar resourceAssignmentsCache = null;\r\n\t\t\tvar resourceTaskAssignmentsCache = null;\r\n\t\t\tvar taskAssignmentsCache = null;\r\n\r\n\t\t\tresourceAssignmentsStore.attachEvent(\"onStoreUpdated\", function resetCache(){\r\n\t\t\t\tif(batchUpdate && !undoBatchCancel){\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\tresourceAssignmentsCache = null;\r\n\t\t\t\tresourceTaskAssignmentsCache = null;\r\n\t\t\t\ttaskAssignmentsCache = null;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tgantt.getResourceAssignments = function (resourceId, taskId) {\r\n\t\t\t\tvar searchTaskId = gantt.defined(taskId) && taskId !== null;\r\n\r\n\t\t\t\tif(resourceAssignmentsCache === null){\r\n\t\t\t\t\tresourceAssignmentsCache = {};\r\n\t\t\t\t\tresourceTaskAssignmentsCache = {};\r\n\r\n\t\t\t\t\tresourceAssignmentsStore.eachItem(function (a) {\r\n\t\t\t\t\t\tif(!resourceAssignmentsCache[a.resource_id]){\r\n\t\t\t\t\t\t\tresourceAssignmentsCache[a.resource_id] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresourceAssignmentsCache[a.resource_id].push(a);\r\n\r\n\t\t\t\t\t\tvar resourceTaskCacheKey = a.resource_id + \"-\" + a.task_id;\r\n\t\t\t\t\t\tif(!resourceTaskAssignmentsCache[resourceTaskCacheKey]){\r\n\t\t\t\t\t\t\tresourceTaskAssignmentsCache[resourceTaskCacheKey] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresourceTaskAssignmentsCache[resourceTaskCacheKey].push(a);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif(searchTaskId){\r\n\t\t\t\t\treturn (resourceTaskAssignmentsCache[resourceId + \"-\" + taskId] || []).slice();\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn (resourceAssignmentsCache[resourceId] || []).slice();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t\r\n\t\t\tgantt.getTaskAssignments = function (taskId) {\r\n\t\t\t\tif(taskAssignmentsCache === null){\r\n\t\t\t\t\tvar result = [];\r\n\t\t\t\t\ttaskAssignmentsCache = {};\r\n\t\t\t\t\tresourceAssignmentsStore.eachItem(function (a) {\r\n\t\t\t\t\t\tif(!taskAssignmentsCache[a.task_id]){\r\n\t\t\t\t\t\t\ttaskAssignmentsCache[a.task_id] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttaskAssignmentsCache[a.task_id].push(a);\r\n\t\t\t\t\t\tif (a.task_id == taskId) {\r\n\t\t\t\t\t\t\tresult.push(a);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn (taskAssignmentsCache[taskId] || []).slice();\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tgantt.getTaskResources = function (taskId) {\r\n\t\t\t\tconst store = gantt.getDatastore(\"resource\");\r\n\t\t\t\tconst assignments = gantt.getTaskAssignments(taskId);\r\n\t\r\n\t\t\t\tconst uniqueResources = {};\r\n\t\t\t\tassignments.forEach(function(a){\r\n\t\t\t\t\tif(!uniqueResources[a.resource_id]){\r\n\t\t\t\t\t\tuniqueResources[a.resource_id] = a.resource_id;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tconst resources = [];\r\n\t\t\t\tfor(const i in uniqueResources){\r\n\t\t\t\t\tconst res = store.getItem(uniqueResources[i]);\r\n\t\t\t\t\tif(res){\r\n\t\t\t\t\t\tresources.push(res);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn resources;\r\n\t\t\t};\r\n\r\n\t\t\tgantt.updateTaskAssignments = _updateTaskBack;\r\n\t\t}\r\n\t}, {once: true});\r\n};","export default function addPlaceholder(gantt){\r\n\tfunction isEnabled(){\r\n\t\treturn gantt.config.placeholder_task;\r\n\t}\r\n\r\n\tfunction callIfEnabled(callback){\r\n\t\treturn function(){\r\n\t\t\tif(!isEnabled()){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn callback.apply(this, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction silenceDataProcessor(dataProcessor){\r\n\t\tif(dataProcessor && !dataProcessor._silencedPlaceholder){\r\n\t\t\tdataProcessor._silencedPlaceholder = true;\r\n\t\t\tdataProcessor.attachEvent(\"onBeforeUpdate\", callIfEnabled(function(id, state, data){\r\n\t\t\t\tif(data.type == gantt.config.types.placeholder){\r\n\t\t\t\t\tdataProcessor.setUpdated(id, false);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\tfunction insertPlaceholder(){\r\n\t\tvar placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\r\n\t\tif(!placeholders.length || !gantt.isTaskExists(placeholders[0].id)){\r\n\t\t\tvar placeholder = {\r\n\t\t\t\tunscheduled: true,\r\n\t\t\t\ttype: gantt.config.types.placeholder,\r\n\t\t\t\tduration:0,\r\n\t\t\t\ttext: gantt.locale.labels.new_task\r\n\t\t\t};\r\n\t\t\tif(gantt.callEvent(\"onTaskCreated\", [placeholder]) === false){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgantt.addTask(placeholder);\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tfunction afterEdit(id){\r\n\t\tvar item = gantt.getTask(id);\r\n\t\tif(item.type == gantt.config.types.placeholder) {\r\n\t\t\tif(item.start_date && item.end_date && item.unscheduled){\r\n\t\t\t\titem.unscheduled = false;\r\n\t\t\t}\r\n\r\n\t\t\tgantt.batchUpdate(function(){\r\n\t\t\t\tvar newTask = gantt.copy(item);\r\n\t\t\t\tgantt.silent(function(){\r\n\t\t\t\t\tgantt.deleteTask(item.id);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdelete newTask[\"!nativeeditor_status\"];\r\n\t\t\t\tnewTask.type = gantt.config.types.task;\r\n\t\t\t\tnewTask.id = gantt.uid();\r\n\t\t\t\tgantt.addTask(newTask);\r\n\r\n\t\t\t\t//insertPlaceholder();\r\n\t\t\t});\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.config.types.placeholder = \"placeholder\";\r\n\tgantt.attachEvent(\"onDataProcessorReady\", callIfEnabled(silenceDataProcessor));\r\n\r\n\tvar ready = false;\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(ready){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tready = true;\r\n\t\tgantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(afterEdit));\r\n\t\tgantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function(id, task){\r\n\t\t\tif(task.type != gantt.config.types.placeholder){\r\n\t\t\t\tvar placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\r\n\t\t\t\tplaceholders.forEach(function(p){\r\n\t\t\t\t\tgantt.silent(function(){\r\n\t\t\t\t\t\tif(gantt.isTaskExists(p.id))\r\n\t\t\t\t\t\t\tgantt.deleteTask(p.id);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\tinsertPlaceholder();\r\n\t\t\t}\r\n\t\t}));\r\n\t\tgantt.attachEvent(\"onParse\", callIfEnabled(insertPlaceholder));\r\n\t});\r\n\r\n\tfunction isPlaceholderTask(taskId){\r\n\t\tif(gantt.config.types.placeholder && gantt.isTaskExists(taskId)){\r\n\t\t\tvar task = gantt.getTask(taskId);\r\n\t\t\tif(task.type == gantt.config.types.placeholder){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tfunction isPlaceholderLink(link){\r\n\t\tif(isPlaceholderTask(link.source) || isPlaceholderTask(link.target)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tgantt.attachEvent(\"onLinkValidation\", function(link){\r\n\t\tif(isPlaceholderLink(link)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\tgantt.attachEvent(\"onBeforeLinkAdd\", function(id,link){\r\n\t\tif(isPlaceholderLink(link)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onBeforeUndoStack\", function(action){\r\n\t\tfor(var i = 0; i < action.commands.length; i++){\r\n\t\t\tvar command = action.commands[i];\r\n\t\t\tif(command.entity === \"task\" && command.value.type === gantt.config.types.placeholder){\r\n\t\t\t\taction.commands.splice(i,1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\r\n};","export default function(gantt) {\r\n\tfunction isEnabled() {\r\n\t\treturn gantt.config.auto_types && // if enabled\r\n\t\t\t(gantt.getTaskType(gantt.config.types.project) == gantt.config.types.project);// and supported\r\n\t}\r\n\r\n\tfunction callIfEnabled(callback) {\r\n\t\treturn function() {\r\n\t\t\tif (!isEnabled()) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn callback.apply(this, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction checkTaskType(id, changedTypes) {\r\n\t\tvar task = gantt.getTask(id);\r\n\t\tvar targetType = getTaskTypeToUpdate(task);\r\n\t\tif (targetType !== false && gantt.getTaskType(task) !== targetType) {\r\n\t\t\tchangedTypes.$needsUpdate = true;\r\n\t\t\tchangedTypes[task.id] = {task: task, type: targetType};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUpdatedTypes(id, changedTypes) {\r\n\t\tchangedTypes = changedTypes || {};\r\n\t\t\r\n\t\tcheckTaskType(id, changedTypes);\r\n\t\tgantt.eachParent(function(parent) {\r\n\t\t\tcheckTaskType(parent.id, changedTypes);\r\n\t\t}, id);\r\n\r\n\t\treturn changedTypes;\r\n\t}\r\n\r\n\tfunction applyChanges(changedTypes) {\r\n\t\tfor (var i in changedTypes) {\r\n\t\t\tif(changedTypes[i] && changedTypes[i].task){\r\n\t\t\t\tvar task = changedTypes[i].task;\r\n\t\t\t\ttask.type = changedTypes[i].type;\r\n\t\t\t\tgantt.updateTask(task.id);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction updateParentTypes(startId) {\r\n\t\tif (gantt.getState().group_mode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tvar changedTypes = getUpdatedTypes(startId);\r\n\t\tif (changedTypes.$needsUpdate) {\r\n\t\t\tgantt.batchUpdate(function() {\r\n\t\t\t\tapplyChanges(changedTypes);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tvar delTaskParent;\r\n\r\n\tfunction updateTaskType(task, targetType) {\r\n\t\tif(!gantt.getState().group_mode){\r\n\t\t\ttask.type = targetType;\r\n\t\t\tgantt.updateTask(task.id);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getTaskTypeToUpdate(task) {\r\n\t\tvar allTypes = gantt.config.types;\r\n\t\tvar hasChildren = gantt.hasChild(task.id);\r\n\t\tvar taskType = gantt.getTaskType(task.type);\r\n\r\n\t\tif (hasChildren && taskType === allTypes.task) {\r\n\t\t\treturn allTypes.project;\r\n\t\t}\r\n\r\n\t\tif (!hasChildren && taskType === allTypes.project) {\r\n\t\t\treturn allTypes.task;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar isParsingDone = true;\r\n\r\n\tgantt.attachEvent(\"onParse\", callIfEnabled(function() {\r\n\t\tisParsingDone = false;\r\n\t\tif(gantt.getState().group_mode){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tgantt.batchUpdate(function() {\r\n\t\t\tgantt.eachTask(function(task) {\r\n\t\t\t\tvar targetType = getTaskTypeToUpdate(task);\r\n\t\t\t\tif (targetType !== false) {\r\n\t\t\t\t\tupdateTaskType(task, targetType);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tisParsingDone = true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function(id) {\r\n\t\tif (isParsingDone) {\r\n\t\t\tupdateParentTypes(id);\r\n\t\t}\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(function(id) {\r\n\t\tif (isParsingDone) {\r\n\t\t\tupdateParentTypes(id);\r\n\t\t}\r\n\t}));\r\n\r\n\tfunction updateAfterRemoveChild(id){\r\n\t\tif (id != gantt.config.root_id && gantt.isTaskExists(id)) {\r\n\t\t\tupdateParentTypes(id);\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskDelete\", callIfEnabled(function(id, task) {\r\n\t\tdelTaskParent = gantt.getParent(id);\r\n\t\treturn true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskDelete\", callIfEnabled(function(id, task) {\r\n\t\tupdateAfterRemoveChild(delTaskParent);\r\n\t}));\r\n\r\n\r\n\tvar originalRowDndParent;\r\n\r\n\tgantt.attachEvent(\"onRowDragStart\", callIfEnabled(function(id, target, e) {\r\n\t\toriginalRowDndParent = gantt.getParent(id);\r\n\t\treturn true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onRowDragEnd\", callIfEnabled(function(id, target) {\r\n\t\tupdateAfterRemoveChild(originalRowDndParent);\r\n\t\tupdateParentTypes(id);\r\n\t}));\r\n\r\n\tvar originalMoveTaskParent;\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskMove\", callIfEnabled(function(sid, parent, tindex) {\r\n\t\toriginalMoveTaskParent = gantt.getParent(sid);\r\n\t\treturn true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskMove\", callIfEnabled(function(id, parent, tindex) {\r\n\t\tif (document.querySelector(\".gantt_drag_marker\")) {\r\n\t\t\t// vertical dnd in progress\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tupdateAfterRemoveChild(originalMoveTaskParent);\r\n\t\tupdateParentTypes(id);\r\n\t}));\r\n};","export default class DurationFormatterNumeric implements IDurationFormatter {\r\n\tstatic create = (settings: IDurationFormatterConfig = null): IDurationFormatter => {\r\n\t\treturn new DurationFormatterNumeric();\r\n\t};\r\n\tcanParse = (value: string) : boolean => {\r\n\t\treturn !isNaN(this.parse(value));\r\n\t};\r\n\tformat = (value: number) : string => {\r\n\t\treturn String(value);\r\n\t};\r\n\tparse = (value: string) : number => {\r\n\t\treturn parseInt(value, 10);\r\n\t};\r\n}","export default class LinkFormatterSimple implements ILinkFormatter {\r\n\tstatic create = (settings: ILinkFormatterConfig = null, gantt: any): LinkFormatterSimple => {\r\n\t\treturn new LinkFormatterSimple(gantt);\r\n\t};\r\n\tprotected _linkReg: RegExp;\r\n\tprotected _gantt: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._linkReg = /^[0-9\\.]+/;\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\tformat = (link: ILink) : string => {\r\n\t\tconst wbs = this._getWBSCode(link.source);\r\n\t\treturn wbs;\r\n\t};\r\n\r\n\tcanParse = (value: string) : boolean => {\r\n\t\treturn this._linkReg.test(value);\r\n\t};\r\n\tparse = (value: string) : ILink => {\r\n\t\tif(!this.canParse(value)){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst linkPart = this._linkReg.exec(value)[0].trim();\r\n\r\n\t\tconst source = this._findSource(linkPart) || null;\r\n\r\n\t\treturn {\r\n\t\t\tid: undefined,\r\n\t\t\tsource,\r\n\t\t\ttarget: null,\r\n\t\t\ttype: this._gantt.config.links.finish_to_start,\r\n\t\t\tlag: 0\r\n\t\t};\r\n\t};\r\n\r\n\tprotected _getWBSCode = (source: number | string) => {\r\n\t\tconst pred = this._gantt.getTask(source);\r\n\t\treturn this._gantt.getWBSCode(pred);\r\n\t};\r\n\r\n\tprotected _findSource = (value: string) => {\r\n\t\tconst reqTemplate = new RegExp(\"^[0-9\\.]+\", \"i\");\r\n\t\tif(reqTemplate.exec(value)){\r\n\t\t\tconst wbs = reqTemplate.exec(value)[0];\r\n\t\t\tconst task = this._gantt.getTaskByWBSCode(wbs);\r\n\t\t\tif(task){\r\n\t\t\t\treturn task.id;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n}","\r\nimport DurationFormatter from \"../common/duration_formatter\";\r\nimport LinkFormatter from \"../common/link_formatter\";\r\n\r\nexport default function(gantt){\r\n\tgantt.ext.formatters = {\r\n\t\tdurationFormatter: function(settings){\r\n\t\t\tif(!settings){\r\n\t\t\t\tsettings = {};\r\n\t\t\t}\r\n\t\t\tif(!settings.store){\r\n\t\t\t\tsettings.store = gantt.config.duration_unit;\r\n\t\t\t}\r\n\t\t\tif(!settings.enter){\r\n\t\t\t\tsettings.enter = gantt.config.duration_unit;\r\n\t\t\t}\r\n\t\t\treturn DurationFormatter.create(settings, gantt);\r\n\t\t},\r\n\t\tlinkFormatter: function(settings){\r\n\t\t\treturn LinkFormatter.create(settings, gantt);\r\n\t\t}\r\n\t};\r\n};","export default function(gantt: any){\r\n\r\n\tgantt.ext = gantt.ext || {};\r\n\tgantt.config.show_empty_state = false;\r\n\r\n\tgantt.ext.emptyStateElement = gantt.ext.emptyStateElement || {\r\n\t\tisEnabled() {\r\n\t\t\treturn gantt.config.show_empty_state === true;\r\n\t\t},\r\n\t\tisGanttEmpty(){\r\n\t\t\treturn !gantt.getTaskByTime().length;\r\n\t\t},\r\n\t\trenderContent(container){\r\n\t\t\tconst placeholderTextElement = `\r\n
${gantt.locale.labels.empty_state_text_link}
\r\n
${gantt.locale.labels.empty_state_text_description}
\r\n
`;\r\n\t\t\tconst placeholderImageElement = \"
\";\r\n\r\n\t\t\tconst placeholderContainer = `${placeholderImageElement}${placeholderTextElement}
`;\r\n\t\t\tcontainer.innerHTML = placeholderContainer;\r\n\t\t},\r\n\r\n\t\tclickEvents: [],\r\n\t\tattachAddTaskEvent(){\r\n\t\t\tconst id = gantt.attachEvent(\"onEmptyClick\", function(e){\r\n\t\t\t\tconst domHelpers = gantt.utils.dom;\r\n\t\t\t\tconst gridPlaceholder = domHelpers.closest(e.target, \"[data-empty-state-create-task]\");\r\n\t\t\t\tif (gridPlaceholder){\r\n\t\t\t\t\tgantt.createTask({\r\n\t\t\t\t\t\tid: gantt.uid(),\r\n\t\t\t\t\t\ttext: \"New Task\"\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.clickEvents.push(id);\r\n\t\t},\r\n\t\tdetachAddTaskEvents(){\r\n\t\t\tthis.clickEvents.forEach(function(event){\r\n\t\t\t\tgantt.detachEvent(event);\r\n\t\t\t});\r\n\t\t\tthis.clickEvents = [];\r\n\t\t},\r\n\r\n\t\tgetContainer(){\r\n\t\t\tif (gantt.$container) {\r\n\t\t\t\tconst domHelpers = gantt.utils.dom;\r\n\t\t\t\tif (gantt.$container.contains(gantt.$grid_data)) {\r\n\t\t\t\t\treturn domHelpers.closest(gantt.$grid_data, \".gantt_layout_content\");\r\n\t\t\t\t}\r\n\t\t\t\tif (gantt.$container.contains(gantt.$task_data)){\r\n\t\t\t\t\treturn domHelpers.closest(gantt.$task_data, \".gantt_layout_content\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t},\r\n\r\n\t\tgetNode(){\r\n\t\t\tconst container = this.getContainer();\r\n\t\t\tif (!container){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tconst emptyStateElementNode = container.querySelector(\".gantt_empty_state_wrapper\");\r\n\t\t\treturn emptyStateElementNode;\r\n\t\t},\r\n\r\n\t\tshow(){\r\n\t\t\tconst container = this.getContainer();\r\n\t\t\tif (!container && this.isGanttEmpty()){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tconst wrapper = document.createElement(\"div\");\r\n\t\t\twrapper.className = \"gantt_empty_state_wrapper\";\r\n\t\t\twrapper.style.marginTop = (gantt.config.scale_height - container.offsetHeight) + \"px\";\r\n\t\t\tconst oldNodes = gantt.$container.querySelectorAll(\".gantt_empty_state_wrapper\");\r\n\t\t\t// for IE11\r\n\t\t\tArray.prototype.forEach.call(oldNodes, function(node){\r\n\t\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\t});\r\n\r\n\t\t\tthis.detachAddTaskEvents();\r\n\t\t\tthis.attachAddTaskEvent();\r\n\r\n\t\t\tcontainer.appendChild(wrapper);\r\n\t\t\tthis.renderContent(wrapper);\r\n\t\t},\r\n\t\thide(){\r\n\t\t\tconst emptyStateElementNode = this.getNode();\r\n\t\t\tif (emptyStateElementNode){\r\n\t\t\t\temptyStateElementNode.parentNode.removeChild(emptyStateElementNode);\r\n\t\t\t} else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinit(){ }\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onDataRender\", function() {\r\n\t\tconst emptyStateElement = gantt.ext.emptyStateElement;\r\n\t\tif (emptyStateElement.isEnabled() && emptyStateElement.isGanttEmpty()) {\r\n\t\t\temptyStateElement.show();\r\n\t\t} else {\r\n\t\t\temptyStateElement.hide();\r\n\t\t}\r\n\t});\r\n\r\n\r\n\r\n\r\n}\r\n","export const hasBaselinesBelow = function (gantt, task) {\r\n const baselines = task.baselines && task.baselines.length;\r\n const baselinesOnDifferentRow = gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\";\r\n if (baselines && baselinesOnDifferentRow) {\r\n return true;\r\n }\r\n};\r\n\r\nexport const childrenHaveBaselines = function (gantt, taskId) {\r\n let hasBaselines = false;\r\n gantt.eachTask(function (child) {\r\n if (hasBaselines) {\r\n return;\r\n }\r\n hasBaselines = hasBaselinesBelow(gantt, child);\r\n }, taskId);\r\n return hasBaselines;\r\n};\r\n\r\nexport const isSplitChild = function (gantt, id) {\r\n let splitChild = false;\r\n gantt.eachParent(function (parent) {\r\n if (isSplitParent(parent)) {\r\n splitChild = true;\r\n }\r\n }, id);\r\n return splitChild;\r\n};\r\n\r\nexport const isSplitParent = function (task) {\r\n return task.render && task.render == \"split\" && !task.$open;\r\n};\r\n\r\nexport const getMaxParentHeight = function (gantt, view, task, heightLimit) {\r\n let maxHeight = heightLimit || view.$task_data.scrollHeight;\r\n let shrinkHeight = false;\r\n let splitChild = false;\r\n\r\n gantt.eachParent(function (parent) {\r\n if (isSplitParent(parent)) {\r\n splitChild = true;\r\n const parentSizes = view.getItemPosition(parent);\r\n const parentHeight = parentSizes.rowHeight;\r\n if (parentHeight < maxHeight) {\r\n maxHeight = parentHeight;\r\n shrinkHeight = true;\r\n }\r\n }\r\n }, task.id);\r\n\r\n return { maxHeight, shrinkHeight, splitChild };\r\n};\r\n\r\nexport const getMilestoneHeight = function (height) {\r\n return Math.sqrt(2 * height * height);\r\n};\r\n\r\nexport const getInvertedMilestoneHeight = function (height) {\r\n return Math.round(height / Math.sqrt(2));\r\n};\r\n\r\nexport const getAdjustedPosition = function (gantt, timeline, sizes, heightLimit, task, childBaselines) {\r\n const baselines = hasBaselinesBelow(gantt, task);\r\n\r\n const splitParams = getMaxParentHeight(gantt, timeline, task);\r\n let maxHeight = splitParams.maxHeight;\r\n\r\n let height = sizes.height;\r\n let largerHeight = height > heightLimit;\r\n let noNeedToShrink = sizes.rowHeight >= heightLimit && !splitParams.splitChild && !baselines;\r\n if (largerHeight || noNeedToShrink) {\r\n height = heightLimit;\r\n }\r\n\r\n if (maxHeight < height) {\r\n height = maxHeight;\r\n }\r\n\r\n let marginTop = Math.floor((sizes.rowHeight - height) / 2);\r\n\r\n if (splitParams.splitChild) {\r\n marginTop = Math.floor((maxHeight - height) / 2);\r\n }\r\n if (childBaselines || baselines) {\r\n let heightDiff = Math.min(sizes.height, maxHeight) - height;\r\n\r\n let additionalMargin = 2;\r\n let exceedBarHeight = baselines && task.bar_height >= task.row_height;\r\n let exceedParentHeight = splitParams.splitChild && sizes.height >= maxHeight;\r\n if (exceedBarHeight || exceedParentHeight){\r\n additionalMargin = 0;\r\n }\r\n\r\n marginTop = Math.floor(heightDiff / 2) + additionalMargin;\r\n const bottom = height + marginTop;\r\n if (bottom > sizes.rowHeight || bottom > maxHeight) {\r\n // marginTop = 0;\r\n }\r\n }\r\n\r\n return { height, marginTop };\r\n};\r\n\r\nexport default {\r\n hasBaselinesBelow,\r\n childrenHaveBaselines,\r\n isSplitChild,\r\n isSplitParent,\r\n getMaxParentHeight,\r\n getMilestoneHeight,\r\n getInvertedMilestoneHeight,\r\n getAdjustedPosition\r\n};\r\n","import { hasBaselinesBelow, isSplitParent } from \"../ui/render/baseline_helper\";\r\n\r\nexport default function (gantt) {\r\n gantt.config.baselines = {\r\n datastore: \"baselines\",\r\n render_mode: false,\r\n dataprocessor_baselines: false,\r\n row_height: 16,\r\n bar_height: 8\r\n };\r\n\r\n function initBaselineFields(item, task) {\r\n if (item.start_date) {\r\n item.start_date = gantt.date.parseDate(item.start_date, \"parse_date\");\r\n } else {\r\n item.start_date = null;\r\n }\r\n\r\n if (item.end_date) {\r\n item.end_date = gantt.date.parseDate(item.end_date, \"parse_date\");\r\n } else {\r\n item.end_date = null;\r\n }\r\n\r\n if (!item.task_id) {\r\n return false;\r\n }\r\n }\r\n // gantt init\r\n const baselineStore = gantt.createDatastore({\r\n name: gantt.config.baselines.datastore,\r\n initItem: function (item) {\r\n if (!item.id) {\r\n item.id = gantt.uid();\r\n }\r\n\r\n initBaselineFields(item);\r\n\r\n return item;\r\n }\r\n });\r\n\r\n gantt.$data.baselineStore = baselineStore;\r\n\r\n function _syncBaselines(task) {\r\n let shouldRepaint = false;\r\n const iteratedBaselines = {};\r\n\r\n const taskBaselines = task.baselines || [];\r\n const exisingBaselines = gantt.getTaskBaselines(task.id);\r\n\r\n if (taskBaselines.length != exisingBaselines.length) {\r\n shouldRepaint = true;\r\n }\r\n\r\n taskBaselines.forEach(function (baseline) {\r\n iteratedBaselines[baseline.id] = true;\r\n const exisingBaseline = baselineStore.getItem(baseline.id);\r\n if (exisingBaseline) {\r\n const start = +exisingBaseline.start_date !== +baseline.start_date;\r\n const end = +exisingBaseline.end_date !== +baseline.end_date;\r\n if (start || end) {\r\n baselineStore.updateItem(baseline.id, baseline);\r\n }\r\n } else {\r\n baselineStore.addItem(baseline);\r\n }\r\n });\r\n\r\n exisingBaselines.forEach(function (baseline) {\r\n if (!iteratedBaselines[baseline.id]) {\r\n baselineStore.removeItem(baseline.id);\r\n }\r\n });\r\n\r\n if (shouldRepaint) {\r\n if (isSplitParent(task)){\r\n // here we adjust the parent height, then adjust it with the total child height\r\n _adjustSplitParentHeight (task);\r\n } else {\r\n gantt.adjustTaskHeightForBaselines(task);\r\n }\r\n gantt.render();\r\n }\r\n }\r\n\r\n function _deleteOrphanBaselines() {\r\n baselineStore.eachItem(function (baseline) {\r\n if (!gantt.isTaskExists(baseline.task_id)) {\r\n baselineStore.removeItem(baseline.id);\r\n }\r\n });\r\n }\r\n\r\n function _adjustSplitParentHeight (task){\r\n let maxParentHeight = 0;\r\n\r\n gantt.adjustTaskHeightForBaselines(task);\r\n\r\n gantt.eachTask(function(child){\r\n let childHeight = child.row_height || gantt.config.row_height;\r\n\r\n maxParentHeight = maxParentHeight || childHeight;\r\n if (childHeight > maxParentHeight){\r\n maxParentHeight = childHeight;\r\n }\r\n }, task.id);\r\n\r\n if (task.row_height < maxParentHeight){\r\n task.row_height = maxParentHeight;\r\n }\r\n }\r\n\r\n gantt.adjustTaskHeightForBaselines = function (task) {\r\n let height, baselineSize, betweenBaselines;\r\n let margins = 2;\r\n let baselineAmount = task.baselines && task.baselines.length || 0;\r\n const subrowHeight = gantt.config.baselines.row_height;\r\n //const baselineBarHeight = task?.baselines.bar_height\r\n\r\n switch (gantt.config.baselines.render_mode) {\r\n case \"taskRow\":\r\n task.row_height = task.bar_height + 4;\r\n break;\r\n\r\n case \"separateRow\":\r\n height = gantt.getLayoutView(\"timeline\").getBarHeight(task.id);\r\n if (baselineAmount) {\r\n task.bar_height = task.bar_height || height;\r\n\r\n if (task.bar_height > height){\r\n height = task.bar_height;\r\n }\r\n\r\n task.row_height = height + subrowHeight;\r\n } else if (task.bar_height) {\r\n task.row_height = task.bar_height + 4;\r\n }\r\n\r\n _increaseSplitParentHeight(task);\r\n break;\r\n\r\n case \"individualRow\":\r\n height = gantt.getLayoutView(\"timeline\").getBarHeight(task.id);\r\n\r\n if (baselineAmount) {\r\n task.bar_height = task.bar_height || height;\r\n\r\n if (task.bar_height > height){\r\n height = task.bar_height;\r\n }\r\n\r\n baselineSize = subrowHeight * baselineAmount;\r\n // betweenBaselines = 3 * (baselineAmount + 1);\r\n\r\n task.row_height = height + baselineSize + margins;\r\n } else if (task.bar_height){\r\n task.row_height = task.bar_height + 4;\r\n }\r\n\r\n _increaseSplitParentHeight(task);\r\n }\r\n };\r\n\r\n function _increaseSplitParentHeight(task) {\r\n gantt.eachParent(function (parent) {\r\n if (isSplitParent(parent)) {\r\n const parentHeight = parent.row_height || gantt.getLayoutView(\"timeline\").getBarHeight(parent.id);\r\n let maxHeight = task.row_height;\r\n\r\n // iterate only direct children\r\n const subtasks = gantt.getChildren(parent.id);\r\n subtasks.forEach(function (subtaskId) {\r\n const subtask = gantt.getTask(subtaskId);\r\n if (subtask.id == task.id) {\r\n return;\r\n }\r\n const subtaskHeight = subtask.row_height || gantt.getLayoutView(\"timeline\").getBarHeight(subtask.id);\r\n maxHeight = maxHeight || subtaskHeight;\r\n if (subtaskHeight > maxHeight) {\r\n maxHeight = subtaskHeight;\r\n }\r\n });\r\n\r\n parent.row_height = maxHeight;\r\n parent.bar_height = parent.bar_height || parentHeight;\r\n }\r\n }, task.id);\r\n }\r\n\r\n gantt.attachEvent(\r\n \"onGanttReady\",\r\n function () {\r\n\r\n if(gantt.config.baselines === false){\r\n return;\r\n }\r\n\r\n gantt.attachEvent(\"onParse\", function () {\r\n baselineStore.eachItem(function (baseline) {\r\n const taskId = baseline.task_id;\r\n if (gantt.isTaskExists(taskId)) {\r\n const task = gantt.getTask(taskId);\r\n\r\n task.baselines = task.baselines || [];\r\n\r\n let newBaseline = true;\r\n for (let i = 0; i < task.baselines.length; i++) {\r\n let existingBaseline = task.baselines[i];\r\n if (existingBaseline.id == baseline.id){\r\n newBaseline = false;\r\n gantt.mixin(existingBaseline, baseline, true);\r\n break;\r\n }\r\n }\r\n if (newBaseline){\r\n task.baselines.push(baseline);\r\n }\r\n\r\n if (isSplitParent(task)){\r\n _adjustSplitParentHeight (task);\r\n } else {\r\n gantt.adjustTaskHeightForBaselines(task);\r\n }\r\n }\r\n });\r\n });\r\n\r\n gantt.attachEvent(\"onBeforeTaskUpdate\", function (id, task) {\r\n _syncBaselines(task);\r\n return true;\r\n });\r\n\r\n gantt.attachEvent(\"onAfterUndo\", function(action){\r\n const baselinesRenderedBelow = gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\";\r\n if (baselinesRenderedBelow && action){\r\n let repaint = false;\r\n action.commands.forEach(function(command){\r\n if (command.entity == \"task\"){\r\n const taskId = command.value.id;\r\n if (gantt.isTaskExists(taskId)){\r\n const task = gantt.getTask(taskId);\r\n if (task.parent && gantt.isTaskExists(task.parent)){\r\n const parent = gantt.getTask(task.parent);\r\n if (isSplitParent(parent)){\r\n _adjustSplitParentHeight (parent);\r\n repaint = true;\r\n }\r\n }\r\n } \r\n }\r\n });\r\n if (repaint){\r\n gantt.render();\r\n }\r\n }\r\n });\r\n\r\n gantt.attachEvent(\"onAfterTaskDelete\", function (id, task) {\r\n if (hasBaselinesBelow){\r\n if (task.parent && gantt.isTaskExists(task.parent)){\r\n const parent = gantt.getTask(task.parent);\r\n if (isSplitParent(parent)){\r\n _adjustSplitParentHeight (parent);\r\n }\r\n }\r\n }\r\n _deleteOrphanBaselines();\r\n });\r\n\r\n gantt.getTaskBaselines = function (taskId) {\r\n const baselines = [];\r\n baselineStore.eachItem(function (baseline) {\r\n if (baseline.task_id == taskId) {\r\n baselines.push(baseline);\r\n }\r\n });\r\n return baselines;\r\n };\r\n gantt.$data.baselineStore.attachEvent(\"onClearAll\", function () {\r\n gantt.eachTask(function(task){\r\n if (task.baselines){\r\n delete task.baselines;\r\n }\r\n });\r\n // The data should not be repainted as otherwise it causes issues when we have resource \r\n // assignments and group tasks. It should be fixed when we add a repaint stack\r\n // gantt.refreshData();\r\n return true;\r\n });\r\n\r\n gantt.$data.tasksStore.attachEvent(\"onClearAll\", function () {\r\n baselineStore.clearAll();\r\n return true;\r\n });\r\n gantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\r\n const baselines = baselineStore.find(function (a) {\r\n return a.task_id == id;\r\n });\r\n baselines.forEach(function (a) {\r\n a.task_id = new_id;\r\n baselineStore.updateItem(a.id);\r\n });\r\n });\r\n },\r\n { once: true }\r\n );\r\n};\r\n","import * as helpers from \"../../utils/helpers\";\r\n\r\nexport default function(gantt) {\r\n\tgantt.load = function(){\r\n\t\tthrow new Error(\"gantt.load() method is not available in the node.js, use gantt.parse() instead\");\r\n\t};\r\n\tgantt.parse = function (data, type) {\r\n\t\tthis.on_load({xmlDoc: {responseText: data}}, type);\r\n\t};\r\n\r\n\tgantt.serialize = function (type) {\r\n\t\ttype = type || \"json\";\r\n\t\treturn this[type].serialize();\r\n\t};\r\n\r\n\t/*\r\n\ttasks and relations\r\n\t{\r\n\tdata:[\r\n\t\t{\r\n\t\t\t\"id\":\"string\",\r\n\t\t\t\"text\":\"...\",\r\n\t\t\t\"start_date\":\"Date or string\",\r\n\t\t\t\"end_date\":\"Date or string\",\r\n\t\t\t\"duration\":\"number\",\r\n\t\t\t\"progress\":\"0..1\",\r\n\t\t\t\"parent_id\":\"string\",\r\n\t\t\t\"order\":\"number\"\r\n\t\t},...],\r\n\tlinks:[\r\n\t\t{\r\n\t\t\tid:\"string\",\r\n\t\t\tsource:\"string\",\r\n\t\t\ttarget:\"string\",\r\n\t\t\ttype:\"string\"\r\n\t\t},...],\r\n\tcollections:{\r\n\t\t\tcollectionName:[\r\n\t\t\t\t{key:, label:, optional:...},...\r\n\t\t\t],...\r\n\t\t}\r\n\t}\r\n\r\n\t* */\r\n\r\n\tgantt.on_load = function (resp, type) {\r\n\t\tif(resp.xmlDoc && resp.xmlDoc.status === 404){ // work if we don't have a file at current url\r\n\t\t\tthis.assert(false, \"Failed to load the data from \" \r\n\t\t\t\t+ resp.xmlDoc.responseURL + \" , server returns 404\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(gantt.$destroyed){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.callEvent(\"onBeforeParse\", []);\r\n\t\tif (!type)\r\n\t\t\ttype = \"json\";\r\n\t\tthis.assert(this[type], \"Invalid data type:'\" + type + \"'\");\r\n\r\n\t\tvar raw = resp.xmlDoc.responseText;\r\n\r\n\t\tvar data = this[type].parse(raw, resp);\r\n\t\tthis._process_loading(data);\r\n\t};\r\n\r\n\tfunction attachAssignmentsToTasks(tasks, assignments) {\r\n\t\tconst assignmentsByTasks = {};\r\n\t\tassignments.forEach((a)=>{\r\n\t\t\tif(!assignmentsByTasks[a.task_id]) {\r\n\t\t\t\tassignmentsByTasks[a.task_id] = [];\r\n\t\t\t}\r\n\t\t\tassignmentsByTasks[a.task_id].push(a);\r\n\t\t});\r\n\t\ttasks.forEach((t) => {\r\n\t\t\tt[gantt.config.resource_property] = assignmentsByTasks[t.id] || [];\r\n\t\t});\t\r\n\t}\r\n\t\r\n\tgantt._process_loading = function (data) {\r\n\t\tif(data.collections)\r\n\t\t\tthis._load_collections(data.collections);\r\n\r\n\t\tif(data.resources && this.$data.resourcesStore){\r\n\t\t\tthis.$data.resourcesStore.parse(data.resources);\r\n\t\t}\r\n\t\tif(gantt.config.baselines !== false && data.baselines && this.$data.baselineStore){\r\n\t\t\tthis.$data.baselineStore.parse(data.baselines);\r\n\t\t}\r\n\t\t\r\n\t\tconst tasks = data.data || data.tasks;\r\n\t\tif(data.assignments){\r\n\t\t\tattachAssignmentsToTasks(tasks, data.assignments);\r\n\t\t}\r\n\r\n\t\tthis.$data.tasksStore.parse(tasks);\r\n\t\tvar links = data.links || (data.collections ? data.collections.links : []);\r\n\t\tthis.$data.linksStore.parse(links);\r\n\r\n\t\t//this._sync_links();\r\n\t\tthis.callEvent(\"onParse\", []);\r\n\t\tthis.render();\r\n\t};\r\n\r\n\tgantt._load_collections = function (collections) {\r\n\t\tvar collections_loaded = false;\r\n\t\tfor (var key in collections) {\r\n\t\t\tif (collections.hasOwnProperty(key)) {\r\n\t\t\t\tcollections_loaded = true;\r\n\t\t\t\tvar collection = collections[key];\r\n\t\t\t\t// GS-1728. Create an empty serverList if it doesn't exist\r\n\t\t\t\tthis.serverList[key] = this.serverList[key] || [];\r\n\t\t\t\tvar arr = this.serverList[key];\r\n\t\t\t\tif (!arr) continue;\r\n\t\t\t\tarr.splice(0, arr.length); //clear old options\r\n\t\t\t\tfor (var j = 0; j < collection.length; j++) {\r\n\t\t\t\t\tvar option = collection[j];\r\n\t\t\t\t\tvar obj = this.copy(option);\r\n\t\t\t\t\tobj.key = obj.value;// resulting option object\r\n\r\n\t\t\t\t\tfor (var option_key in option) {\r\n\t\t\t\t\t\tif (option.hasOwnProperty(option_key)) {\r\n\t\t\t\t\t\t\tif (option_key == \"value\" || option_key == \"label\")\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tobj[option_key] = option[option_key]; // obj['value'] = option['value']\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tarr.push(obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (collections_loaded)\r\n\t\t\tthis.callEvent(\"onOptionsLoad\", []);\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskDisplay\", function (id, task) {\r\n\t\treturn !task.$ignore;\r\n\t});\r\n\r\n\tfunction jsonParseError(data){\r\n\t\tgantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \"\r\n\t\t\t+ \"Actual argument value: \" + JSON.stringify(data));\r\n\t\tthrow new Error(\"Invalid argument for gantt.parse or gantt.load. An object or a JSON string of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#json is expected. Actual argument value: \"\r\n\t\t\t+ JSON.stringify(data));\r\n\t}\r\n\r\n\tgantt.json = {\r\n\t\tparse: function (data) {\r\n\t\t\tif(!data){\r\n\t\t\t\tjsonParseError(data);\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof data == \"string\") {\r\n\t\t\t\tif (typeof JSON != undefined){\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(e) {\r\n\t\t\t\t\t\tjsonParseError(data);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgantt.assert(false, \"JSON is not supported\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!data.data && !data.tasks){\r\n\t\t\t\tjsonParseError(data);\r\n\t\t\t}\r\n\r\n\t\t\tif (data.dhx_security)\r\n\t\t\t\tgantt.security_key = data.dhx_security;\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\tserializeTask: function (task) {\r\n\t\t\treturn this._copyObject(task);\r\n\t\t},\r\n\t\tserializeLink: function (link) {\r\n\t\t\treturn this._copyLink(link);\r\n\t\t},\r\n\t\t_copyLink: function (obj) {\r\n\t\t\tvar copy = {};\r\n\t\t\tfor (var key in obj)\r\n\t\t\t\tcopy[key] = obj[key];\r\n\t\t\treturn copy;\r\n\t\t},\r\n\t\t_copyObject: function (obj) {\r\n\t\t\tvar copy = {};\r\n\t\t\tfor (var key in obj) {\r\n\t\t\t\tif (key.charAt(0) == \"$\")\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcopy[key] = obj[key];\r\n\r\n\t\t\t\tif (helpers.isDate(copy[key])) {\r\n\t\t\t\t\tcopy[key] = gantt.defined(gantt.templates.xml_format) ? gantt.templates.xml_format(copy[key]) : gantt.templates.format_date(copy[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn copy;\r\n\t\t},\r\n\t\tserialize: function () {\r\n\t\t\tvar tasks = [];\r\n\t\t\tvar links = [];\r\n\t\t\tlet baselines = [];\r\n\r\n\t\t\tgantt.eachTask(function (obj) {\r\n\t\t\t\tgantt.resetProjectDates(obj);\r\n\t\t\t\ttasks.push(this.serializeTask(obj));\r\n\t\t\t}, gantt.config.root_id, this);\r\n\r\n\t\t\tvar rawLinks = gantt.getLinks();\r\n\t\t\tfor (var i = 0; i < rawLinks.length; i++) {\r\n\t\t\t\tlinks.push(this.serializeLink(rawLinks[i]));\r\n\t\t\t}\r\n\r\n\t\t\tconst baselineStore = gantt.getDatastore(\"baselines\");\r\n\t\t\tbaselineStore.eachItem(function(baseline){\r\n\t\t\t\tconst baselineCopy = gantt.json.serializeTask(baseline);\r\n\t\t\t\tbaselines.push(baselineCopy);\r\n\t\t\t});\r\n\r\n\t\t\treturn {\r\n\t\t\t\tdata: tasks,\r\n\t\t\t\tlinks,\r\n\t\t\t\tbaselines\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\t/*\r\n\t\r\n\t\t\r\n\t\t\tMy task 1 \r\n\t\t\t16.08.2013 \r\n\t\t\t22.08.2013 \r\n\t\t \r\n\t\t\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t \r\n\t\t \r\n\t \r\n\t*/\r\n\r\n\tfunction xmlParseError(data){\r\n\t\tgantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \"\r\n\t\t\t+ \"Actual argument value: \" + JSON.stringify(data));\r\n\t\tthrow new Error(\"Invalid argument for gantt.parse or gantt.load. An XML of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#xmldhtmlxgantt20 is expected. Actual argument value: \"\r\n\t\t\t+ JSON.stringify(data));\r\n\t}\r\n\r\n\tgantt.xml = {\r\n\t\t_xmlNodeToJSON: function (node, attrs_only) {\r\n\t\t\tvar t = {};\r\n\t\t\tfor (var i = 0; i < node.attributes.length; i++)\r\n\t\t\t\tt[node.attributes[i].name] = node.attributes[i].value;\r\n\r\n\t\t\tif (!attrs_only) {\r\n\t\t\t\tfor (var i = 0; i < node.childNodes.length; i++) {\r\n\t\t\t\t\tvar child = node.childNodes[i];\r\n\t\t\t\t\tif (child.nodeType == 1)\r\n\t\t\t\t\t\tt[child.tagName] = child.firstChild ? child.firstChild.nodeValue : \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!t.text) t.text = node.firstChild ? node.firstChild.nodeValue : \"\";\r\n\t\t\t}\r\n\r\n\t\t\treturn t;\r\n\t\t},\r\n\t\t_getCollections: function (loader) {\r\n\t\t\tvar collection = {};\r\n\t\t\tvar opts = gantt.ajax.xpath(\"//coll_options\", loader);\r\n\t\t\tfor (var i = 0; i < opts.length; i++) {\r\n\t\t\t\tvar bind = opts[i].getAttribute(\"for\");\r\n\t\t\t\tvar arr = collection[bind] = [];\r\n\t\t\t\tvar itms = gantt.ajax.xpath(\".//item\", opts[i]);\r\n\t\t\t\tfor (var j = 0; j < itms.length; j++) {\r\n\t\t\t\t\tvar itm = itms[j];\r\n\t\t\t\t\tvar attrs = itm.attributes;\r\n\t\t\t\t\tvar obj = {key: itms[j].getAttribute(\"value\"), label: itms[j].getAttribute(\"label\")};\r\n\t\t\t\t\tfor (var k = 0; k < attrs.length; k++) {\r\n\t\t\t\t\t\tvar attr = attrs[k];\r\n\t\t\t\t\t\tif (attr.nodeName == \"value\" || attr.nodeName == \"label\")\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tobj[attr.nodeName] = attr.nodeValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tarr.push(obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn collection;\r\n\t\t},\r\n\t\t_getXML: function (text, loader, toptag) {\r\n\t\t\ttoptag = toptag || \"data\";\r\n\t\t\tif (!loader.getXMLTopNode) {\r\n\t\t\t\tloader = gantt.ajax.parse(loader);\r\n\t\t\t}\r\n\r\n\t\t\tvar xml = gantt.ajax.xmltop(toptag, loader.xmlDoc);\r\n\t\t\tif (!xml || xml.tagName != toptag) {\r\n\t\t\t\txmlParseError(text);\r\n\t\t\t}\r\n\r\n\t\t\tvar skey = xml.getAttribute(\"dhx_security\");\r\n\t\t\tif (skey)\r\n\t\t\t\tgantt.security_key = skey;\r\n\r\n\t\t\treturn xml;\r\n\t\t},\r\n\t\tparse: function (text, loader) {\r\n\t\t\tloader = this._getXML(text, loader);\r\n\t\t\tvar data = {};\r\n\r\n\t\t\tvar evs = data.data = [];\r\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\r\n\r\n\t\t\tfor (var i = 0; i < xml.length; i++)\r\n\t\t\t\tevs[i] = this._xmlNodeToJSON(xml[i]);\r\n\r\n\t\t\tdata.collections = this._getCollections(loader);\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\t_copyLink: function (obj) {\r\n\t\t\treturn \" \";\r\n\t\t},\r\n\t\t_copyObject: function (obj) {\r\n\t\t\treturn \" \";\r\n\t\t},\r\n\t\tserialize: function () {\r\n\t\t\tvar tasks = [];\r\n\t\t\tvar links = [];\r\n\r\n\t\t\tvar json = gantt.json.serialize();\r\n\t\t\tfor (var i = 0, len = json.data.length; i < len; i++) {\r\n\t\t\t\ttasks.push(this._copyObject(json.data[i]));\r\n\t\t\t}\r\n\t\t\tfor (var i = 0, len = json.links.length; i < len; i++) {\r\n\t\t\t\tlinks.push(this._copyLink(json.links[i]));\r\n\t\t\t}\r\n\t\t\treturn \"\" + tasks.join(\"\") + \"\" + links.join(\"\") + \" \";\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tgantt.oldxml = {\r\n\t\tparse: function (text, loader) {\r\n\t\t\tloader = gantt.xml._getXML(text, loader, \"projects\");\r\n\t\t\tvar data = {collections: {links: []}};\r\n\r\n\t\t\tvar evs = data.data = [];\r\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\r\n\r\n\t\t\tfor (var i = 0; i < xml.length; i++) {\r\n\t\t\t\tevs[i] = gantt.xml._xmlNodeToJSON(xml[i]);\r\n\t\t\t\tvar parent = xml[i].parentNode;\r\n\r\n\t\t\t\tif (parent.tagName == \"project\")\r\n\t\t\t\t\tevs[i].parent = \"project-\" + parent.getAttribute(\"id\");\r\n\t\t\t\telse\r\n\t\t\t\t\tevs[i].parent = parent.parentNode.getAttribute(\"id\");\r\n\t\t\t}\r\n\r\n\t\t\txml = gantt.ajax.xpath(\"//project\", loader);\r\n\t\t\tfor (var i = 0; i < xml.length; i++) {\r\n\t\t\t\tvar ev = gantt.xml._xmlNodeToJSON(xml[i], true);\r\n\t\t\t\tev.id = \"project-\" + ev.id;\r\n\t\t\t\tevs.push(ev);\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = 0; i < evs.length; i++) {\r\n\t\t\t\tvar ev = evs[i];\r\n\t\t\t\tev.start_date = ev.startdate || ev.est;\r\n\t\t\t\tev.end_date = ev.enddate;\r\n\t\t\t\tev.text = ev.name;\r\n\t\t\t\tev.duration = ev.duration / 8;\r\n\t\t\t\tev.open = 1;\r\n\t\t\t\tif (!ev.duration && !ev.end_date) ev.duration = 1;\r\n\t\t\t\tif (ev.predecessortasks)\r\n\t\t\t\t\tdata.collections.links.push({\r\n\t\t\t\t\t\ttarget: ev.id,\r\n\t\t\t\t\t\tsource: ev.predecessortasks,\r\n\t\t\t\t\t\ttype: gantt.config.links.finish_to_start\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\tserialize: function () {\r\n\t\t\tgantt.message(\"Serialization to 'old XML' is not implemented\");\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.serverList = function (name, array) {\r\n\t\tif (array) {\r\n\t\t\tthis.serverList[name] = array.slice(0);\r\n\t\t} else if (!this.serverList[name]) {\r\n\t\t\tthis.serverList[name] = [];\r\n\t\t}\r\n\t\treturn this.serverList[name];\r\n\t};\r\n\r\n};","import * as utils from \"../../utils/utils\";\r\nimport * as helpers from \"../../utils/helpers\";\r\n\r\n\r\nfunction IsWorkTimeArgument(date, unit, task, id, calendar){\r\n\tthis.date = date;\r\n\tthis.unit = unit;\r\n\tthis.task = task;\r\n\tthis.id = id;\r\n\tthis.calendar = calendar;\r\n\treturn this;\r\n}\r\n\r\nfunction ClosestWorkTimeArgument(date, dir, unit, task, id, calendar){\r\n\tthis.date = date;\r\n\tthis.dir = dir;\r\n\tthis.unit = unit;\r\n\tthis.task = task;\r\n\tthis.id = id;\r\n\tthis.calendar = calendar;\r\n\treturn this;\r\n}\r\n\r\nfunction CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar){\r\n\tthis.start_date = start_date;\r\n\tthis.duration = duration;\r\n\tthis.unit = unit;\r\n\tthis.step = step;\r\n\tthis.task = task;\r\n\tthis.id = id;\r\n\tthis.calendar = calendar;\r\n\treturn this;\r\n}\r\n\r\nfunction GetDurationArgument(start, end, task, calendar) {\r\n\tthis.start_date = start;\r\n\tthis.end_date = end;\r\n\tthis.task = task;\r\n\tthis.calendar = calendar;\r\n\tthis.unit = null;\r\n\tthis.step = null;\r\n\treturn this;\r\n}\r\n\r\nvar calendarArgumentsHelper = function(gantt){\r\n\treturn {\r\n\t\tgetWorkHoursArguments: function () {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif (helpers.isDate(config)) {\r\n\t\t\t\tconfig = {\r\n\t\t\t\t\tdate: config\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tconfig = utils.mixin({}, config);\r\n\t\t\t}\r\n\r\n\t\t\tif(!helpers.isValidDate(config.date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid date argument for getWorkHours method\");\r\n\t\t\t\tthrow new Error(\"Invalid date argument for getWorkHours method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\tsetWorkTimeArguments: function () {\r\n\t\t\treturn arguments[0];\r\n\t\t},\r\n\t\tunsetWorkTimeArguments: function () {\r\n\t\t\treturn arguments[0];\r\n\t\t},\r\n\t\tisWorkTimeArguments: function () {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif(config instanceof IsWorkTimeArgument){\r\n\t\t\t\treturn config;\r\n\t\t\t}\r\n\r\n\t\t\tvar processedConfig;\r\n\t\t\tif (!config.date) {\r\n\t\t\t\t//IsWorkTimeArgument(date, unit, task, id, calendar)\r\n\t\t\t\tprocessedConfig = new IsWorkTimeArgument(arguments[0], arguments[1], arguments[2], null, arguments[3]);\r\n\t\t\t} else {\r\n\t\t\t\tprocessedConfig = new IsWorkTimeArgument(config.date, config.unit, config.task, null, config.calendar);\r\n\t\t\t}\r\n\r\n\t\t\tprocessedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\r\n\r\n\t\t\tif(!helpers.isValidDate(processedConfig.date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid date argument for isWorkTime method\");\r\n\t\t\t\tthrow new Error(\"Invalid date argument for isWorkTime method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn processedConfig;\r\n\t\t},\r\n\t\tgetClosestWorkTimeArguments: function (arg) {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif (config instanceof ClosestWorkTimeArgument)\r\n\t\t\t\treturn config;\r\n\r\n\t\t\tvar processedConfig;\r\n\t\t\tif (helpers.isDate(config)) {\r\n\t\t\t\tprocessedConfig = new ClosestWorkTimeArgument(config);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocessedConfig = new ClosestWorkTimeArgument(\r\n\t\t\t\t\tconfig.date,\r\n\t\t\t\t\tconfig.dir,\r\n\t\t\t\t\tconfig.unit,\r\n\t\t\t\t\tconfig.task,\r\n\t\t\t\t\tnull,//config.id,\r\n\t\t\t\t\tconfig.calendar\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif(config.id){\r\n\t\t\t\tprocessedConfig.task = config;\r\n\t\t\t}\r\n\t\t\tprocessedConfig.dir = config.dir || 'any';\r\n\t\t\tprocessedConfig.unit = config.unit || gantt.config.duration_unit;\r\n\r\n\t\t\tif(!helpers.isValidDate(processedConfig.date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid date argument for getClosestWorkTime method\");\r\n\t\t\t\tthrow new Error(\"Invalid date argument for getClosestWorkTime method\");\r\n\t\t\t}\r\n\t\t\treturn processedConfig;\r\n\t\t},\r\n\r\n\t\t_getStartEndConfig: function (param) {\r\n\t\t\tvar argumentType = GetDurationArgument;\r\n\t\t\tvar config;\r\n\t\t\tif (param instanceof argumentType)\r\n\t\t\t\treturn param;\r\n\r\n\t\t\tif (helpers.isDate(param)) {\r\n\t\t\t\tconfig = new argumentType(arguments[0], arguments[1], arguments[2], arguments[3]);\r\n\t\t\t} else {\r\n\t\t\t\tconfig = new argumentType(param.start_date, param.end_date, param.task);\r\n\t\t\t\tif (param.id !== null && param.id !== undefined) {\r\n\t\t\t\t\tconfig.task = param;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconfig.unit = config.unit || gantt.config.duration_unit;\r\n\t\t\tconfig.step = config.step || gantt.config.duration_step;\r\n\t\t\tconfig.start_date = config.start_date || config.start || config.date;\r\n\r\n\t\t\tif(!helpers.isValidDate(config.start_date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid start_date argument for getDuration method\");\r\n\t\t\t\tthrow new Error(\"Invalid start_date argument for getDuration method\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!helpers.isValidDate(config.end_date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid end_date argument for getDuration method\");\r\n\t\t\t\tthrow new Error(\"Invalid end_date argument for getDuration method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\r\n\t\tgetDurationArguments: function (start, end, unit, step) {\r\n\t\t\treturn this._getStartEndConfig.apply(this, arguments);\r\n\t\t},\r\n\r\n\t\thasDurationArguments: function (start, end, unit, step) {\r\n\t\t\treturn this._getStartEndConfig.apply(this, arguments);\r\n\t\t},\r\n\r\n\t\tcalculateEndDateArguments: function (start, duration, unit, step) {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif (config instanceof CalculateEndDateArgument)\r\n\t\t\t\treturn config;\r\n\r\n\t\t\tvar processedConfig;\r\n\t\t\t//CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar)\r\n\t\t\tif (helpers.isDate(config)) {\r\n\t\t\t\tprocessedConfig = new CalculateEndDateArgument(\r\n\t\t\t\t\targuments[0],\r\n\t\t\t\t\targuments[1],\r\n\t\t\t\t\targuments[2],\r\n\t\t\t\t\tundefined,\r\n\t\t\t\t\targuments[3],\r\n\t\t\t\t\tundefined,\r\n\t\t\t\t\targuments[4]\r\n\t\t\t\t);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocessedConfig = new CalculateEndDateArgument(\r\n\t\t\t\t\tconfig.start_date,\r\n\t\t\t\t\tconfig.duration,\r\n\t\t\t\t\tconfig.unit,\r\n\t\t\t\t\tconfig.step,\r\n\t\t\t\t\tconfig.task,\r\n\t\t\t\t\tnull,//config.id,\r\n\t\t\t\t\tconfig.calendar\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tif(config.id !== null && config.id !== undefined){\r\n\t\t\t\tprocessedConfig.task = config;\r\n\r\n\t\t\t\t// received a task object as an argument\r\n\t\t\t\t// ignore 'unit' and 'step' properties in this case, since it's likely a part of data model of a task\r\n\t\t\t\tprocessedConfig.unit = null;\r\n\t\t\t\tprocessedConfig.step = null;\r\n\t\t\t}\r\n\r\n\t\t\tprocessedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\r\n\t\t\tprocessedConfig.step = processedConfig.step || gantt.config.duration_step;\r\n\r\n\t\t\tif(!helpers.isValidDate(processedConfig.start_date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid start_date argument for calculateEndDate method\");\r\n\t\t\t\tthrow new Error(\"Invalid start_date argument for calculateEndDate method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn processedConfig;\r\n\t\t}\r\n\t};\r\n};\r\n\r\n\r\nexport default calendarArgumentsHelper;","import * as utils from \"../../../utils/utils\";\r\nfunction WorkTimeCalendarMerger(){\r\n}\r\n\r\nWorkTimeCalendarMerger.prototype = {\r\n\r\n\r\n\t/**\r\n\t * convert hours array items into objects, e.g. [8, 12, 17, 18] -> [{start: 8, end: 12}, {start:17, end:18}]\r\n\t * @param {Array} hoursArray\r\n\t */\r\n\t_getIntervals: function(hoursArray){\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < hoursArray.length; i += 2){\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tstart: hoursArray[i],\r\n\t\t\t\tend: hoursArray[i+1]\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Convert ranges config into hours array\r\n\t * [{start: 8, end: 12}, {start:17, end:18}] --> [8, 12, 17, 18]\r\n\t * @param {*} intervalsArray\r\n\t */\r\n\t_toHoursArray: function(intervalsArray){\r\n\t\tvar result = [];\r\n\r\n\t\tfunction toFixed(value){\r\n\t\t\tvar str = String(value);\r\n\t\t\tif(str.length < 2){\r\n\t\t\t\tstr = \"0\" + str;\r\n\t\t\t}\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tfunction formatHHMM(secondsValue){\r\n\t\t\tvar hours = Math.floor(secondsValue / (60*60));\r\n\t\t\tvar minutePart = secondsValue - hours * 60 * 60;\r\n\r\n\t\t\tvar minutes = Math.floor(minutePart / (60));\r\n\t\t\treturn hours + \":\" + toFixed(minutes);\r\n\t\t}\r\n\t\tfor(var i = 0; i < intervalsArray.length; i++){\r\n\t\t\tresult.push(\r\n\t\t\t\tformatHHMM(intervalsArray[i].start) +\r\n\t\t\t\t\"-\" +\r\n\t\t\t\tformatHHMM(intervalsArray[i].end)\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Build intersection of hour intervals. e.g.\r\n\t * first: [{start: 8, end: 12}, {start:13, end:18}]\r\n\t * second: [{start: 10, end: 15}]\r\n\t * result: [{start: 10, end: 12}, {start: 13, end: 15}]\r\n\t * @param {Array} first\r\n\t * @param {Array} second\r\n\t */\r\n\t_intersectHourRanges: function(first, second){\r\n\t\tvar result = [];\r\n\r\n\t\tvar baseArray = first.length > second.length ? first : second;\r\n\t\tvar overridesArray = first === baseArray ? second: first;\r\n\t\tbaseArray = baseArray.slice();\r\n\t\toverridesArray = overridesArray.slice();\r\n\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < baseArray.length; i++){\r\n\t\t\tvar base = baseArray[i];\r\n\r\n\t\t\tfor(var j = 0; j < overridesArray.length; j++){\r\n\t\t\t\tvar current = overridesArray[j];\r\n\t\t\t\tif(current.start < base.end && current.end > base.start){\r\n\t\t\t\t\tresult.push({\r\n\t\t\t\t\t\tstart: Math.max(base.start, current.start),\r\n\t\t\t\t\t\tend: Math.min(base.end, current.end)\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif(base.end > current.end){\r\n\t\t\t\t\t\toverridesArray.splice(j, 1);\r\n\t\t\t\t\t\tj--;\r\n\t\t\t\t\t\ti--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Reduce the number of ranges in config when possible,\r\n\t * joins ranges that can be merged\r\n\t * parts: [{start: 8, end: 12}, {start:12, end:13}, {start: 15, end: 17}]\r\n\t * result: [{start: 8, end: 13}, {start: 15, end: 17}]\r\n\t * @param {Array} parts\r\n\t */\r\n\t_mergeAdjacentIntervals: function(parts){\r\n\t\tvar result = parts.slice();\r\n\t\tresult.sort(function(a, b){\r\n\t\t\treturn a.start - b.start;\r\n\t\t});\r\n\t\tvar base = result[0];\r\n\t\tfor(var i = 1; i < result.length; i++){\r\n\t\t\tvar current = result[i];\r\n\t\t\tif(current.start <= base.end){\r\n\t\t\t\tif(current.end > base.end){\r\n\t\t\t\t\tbase.end = current.end;\r\n\t\t\t\t}\r\n\t\t\t\tresult.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}else{\r\n\t\t\t\tbase = current;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t_mergeHoursConfig: function(firstHours, secondHours){\r\n\t\t//var firstIntervals = this._getIntervals(firstHours);\r\n\t\t//var secondIntervals = this._getIntervals(secondHours);\r\n\r\n\t\treturn this._mergeAdjacentIntervals(\r\n\t\t\tthis._intersectHourRanges(firstHours, secondHours)\r\n\t\t);\r\n\t},\r\n\r\n\tmerge: function(first, second){\r\n\t\tvar firstConfig = utils.copy(first.getConfig().parsed);\r\n\r\n\t\tvar secondConfig = utils.copy(second.getConfig().parsed);\r\n\r\n\t\tvar mergedSettings = {\r\n\t\t\thours: this._toHoursArray(this._mergeHoursConfig(firstConfig.hours, secondConfig.hours)),\r\n\t\t\tdates: {},\r\n\t\t\tcustomWeeks: {}\r\n\t\t};\r\n\r\n\t\tconst processCalendar = (config1, config2) => {\r\n\t\t\tfor (let i in config1.dates) {\r\n\t\t\t\tconst date1 = config1.dates[i];\r\n\t\r\n\t\t\t\t// dates contain day-of-week rules [0-7] and rules for specific dates (js date timestamps) - set false date rules initially\r\n\t\t\t\tif (+i > 1000) {\r\n\t\t\t\t\tmergedSettings.dates[i] = false;\r\n\t\t\t\t}\r\n\t\t\t\t// Check if the key exists in the fisrt calendar object\r\n\t\t\t\tfor (const key in config2.dates) {\r\n\t\t\t\t\tconst date2 = config2.dates[key];\r\n\t\r\n\t\t\t\t\t// Logical AND for week days\r\n\t\t\t\t\tif (key == i) {\r\n\t\t\t\t\t\tmergedSettings.dates[i] = !!(date1 && date2);\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t// Handle case where dates are arrays\r\n\t\t\t\t\tif (Array.isArray(date1)) {\r\n\t\t\t\t\t\tconst hours2 = Array.isArray(date2) ? date2 : config2.hours;\r\n\t\t\t\t\t\tmergedSettings.dates[i] = this._toHoursArray(this._mergeHoursConfig(date1, hours2));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\t// Check both calendars\r\n\t\tprocessCalendar(firstConfig, secondConfig);\r\n\t\tprocessCalendar(secondConfig, firstConfig);\r\n\r\n\t\t// transfer and overwrite custom week calendars\r\n\t\tif(firstConfig.customWeeks){\r\n\t\t\tfor(var i in firstConfig.customWeeks){\r\n\t\t\t\tmergedSettings.customWeeks[i] = firstConfig.customWeeks[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(secondConfig.customWeeks){\r\n\t\t\tfor(var i in secondConfig.customWeeks){\r\n\t\t\t\tmergedSettings.customWeeks[i] = secondConfig.customWeeks[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn mergedSettings;\r\n\r\n\t}\r\n\r\n};\r\n\r\nexport default WorkTimeCalendarMerger;","\r\n\r\nimport { IWorkUnitCache } from \"./workunit_cache_interface\";\r\n\r\nexport class WorkUnitsMapCache implements IWorkUnitCache {\r\n\tprivate _cache: Map>>;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\tgetItem(unit: string, timestamp: string, value: Date): number|boolean {\r\n\t\tif (this._cache.has(unit)) {\r\n\t\t\tconst unitCache = this._cache.get(unit);\r\n\r\n\t\t\tconst subCache = unitCache[value.getFullYear()];\r\n\t\t\tif (subCache && subCache.has(timestamp)) {\r\n\t\t\t\treturn subCache.get(timestamp);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\tsetItem(unit: string, timestamp: string, value: boolean, rawValue: Date): void {\r\n\t\tif (!unit || !timestamp) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cache = this._cache;\r\n\t\tconst year = rawValue.getFullYear();\r\n\r\n\t\tlet unitCache;\r\n\t\tif (!cache.has(unit)) {\r\n\t\t\tunitCache = [];\r\n\t\t\tcache.set(unit, unitCache);\r\n\t\t} else {\r\n\t\t\tunitCache = cache.get(unit);\r\n\t\t}\r\n\r\n\t\tlet yearCache = unitCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = unitCache[year] = new Map();\r\n\t\t}\r\n\r\n\r\n\t\tyearCache.set(timestamp, value);\r\n\t}\r\n\tclear(): void{\r\n\t\tthis._cache = new Map>>();\r\n\t}\r\n}","import { IWorkUnitCache } from \"./workunit_cache_interface\";\r\n\r\nexport class WorkUnitsObjectCache implements IWorkUnitCache {\r\n\tprivate _cache: any;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\tgetItem(unit: string, timestamp: string, value: Date): number|boolean {\r\n\t\tconst cache = this._cache;\r\n\t\tif (cache && cache[unit]) {\r\n\t\t\tconst units = cache[unit];\r\n\t\t\tif(units === undefined){\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tconst subCache = units[value.getFullYear()];\r\n\t\t\tif (subCache && subCache[timestamp] !== undefined) {\r\n\t\t\t\treturn subCache[timestamp];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\tsetItem(unit: string, timestamp: string, value: boolean, rawValue: Date): void {\r\n\t\tif (!unit || !timestamp) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cache = this._cache;\r\n\r\n\t\tif (!cache) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!cache[unit]) {\r\n\t\t\tcache[unit] = [];\r\n\t\t}\r\n\t\tconst unitCache = cache[unit];\r\n\r\n\t\tconst year = rawValue.getFullYear();\r\n\t\tlet yearCache = unitCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = unitCache[year] = {};\r\n\t\t}\r\n\t\tyearCache[timestamp] = value;\r\n\t}\r\n\tclear(): void{\r\n\t\tthis._cache = {};\r\n\t}\r\n}","\r\n\r\nexport class LargerUnitsCache {\r\n\tprivate _weekCache: Map;\r\n\tprivate _monthCache: Map;\r\n\tprivate _calendar: any;\r\n\tconstructor(calendar) {\r\n\t\tthis.clear();\r\n\t\tthis._calendar = calendar;\r\n\t}\r\n\r\n\tgetMinutesPerWeek = (weekStart: Date) => {\r\n\t\tconst key = weekStart.valueOf();\r\n\r\n\t\tif(this._weekCache.has(key)){\r\n\t\t\treturn this._weekCache.get(key);\r\n\t\t}\r\n\r\n\t\tconst calendar = this._calendar;\r\n\t\tconst gantt = this._calendar.$gantt;\r\n\r\n\t\tlet minutesPerWeek = 0;\r\n\t\tlet start = gantt.date.week_start(new Date(weekStart));\r\n\t\tfor(let i = 0; i < 7; i++){\r\n\t\t\tminutesPerWeek += calendar.getHoursPerDay(start) * 60;\r\n\t\t\tstart = gantt.date.add(start, 1, \"day\");\r\n\t\t}\r\n\r\n\t\tthis._weekCache.set(key, minutesPerWeek);\r\n\t\treturn minutesPerWeek;\r\n\t};\r\n\r\n\tgetMinutesPerMonth = (monthStart: Date) => {\r\n\t\tconst key = monthStart.valueOf();\r\n\r\n\t\tif(this._monthCache.has(key)){\r\n\t\t\treturn this._monthCache.get(key);\r\n\t\t}\r\n\r\n\t\tconst calendar = this._calendar;\r\n\t\tconst gantt = this._calendar.$gantt;\r\n\r\n\t\tlet minutesPerMonth = 0;\r\n\t\tlet start = gantt.date.week_start(new Date(monthStart));\r\n\t\tconst nextMonth = gantt.date.add(start, 1, \"month\").valueOf();\r\n\t\twhile(start.valueOf() < nextMonth){\r\n\t\t\tminutesPerMonth += calendar.getHoursPerDay(start) * 60;\r\n\t\t\tstart = gantt.date.add(start, 1, \"day\");\r\n\t\t}\r\n\r\n\t\tthis._monthCache.set(key, minutesPerMonth);\r\n\t\treturn minutesPerMonth;\r\n\t};\r\n\r\n\tclear = (): void => {\r\n\t\tthis._weekCache = new Map();\r\n\t\tthis._monthCache = new Map();\r\n\t};\r\n}","export class DateDurationCache {\r\n\tprivate _cache: any;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\t_getCacheObject(startDate: Date, unit: string, step:number){\r\n\t\tconst cache = this._cache;\r\n\t\tif (!cache[unit]) {\r\n\t\t\tcache[unit] = [];\r\n\t\t}\r\n\t\tlet unitCache = cache[unit];\r\n\t\tif(!unitCache) {\r\n\t\t\tunitCache = cache[unit] = {};\r\n\t\t}\r\n\r\n\t\tlet stepCache = unitCache[step];\r\n\t\tif(!stepCache) {\r\n\t\t\tstepCache = unitCache[step] = {};\r\n\t\t}\r\n\r\n\t\tconst year = startDate.getFullYear();\r\n\t\tlet yearCache = stepCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = stepCache[year] = {durations: {}, endDates: {}};\r\n\t\t}\r\n\r\n\t\treturn yearCache;\r\n\t}\r\n\t_endDateCacheKey(startDate: number, duration: number){\r\n\t\treturn String(startDate) + \"-\" + String(duration);\r\n\t}\r\n\t_durationCacheKey(startDate: number, endDate: number){\r\n\t\treturn String(startDate) + \"-\" + String(endDate);\r\n\t}\r\n\tgetEndDate(startDate: Date, duration: number, unit: string, step: number, compute: () => Date): number|null{\r\n\t\tconst cache = this._getCacheObject(startDate, unit, step);\r\n\r\n\t\tconst startDateTimestamp = startDate.valueOf();\r\n\t\tconst key = this._endDateCacheKey(startDateTimestamp, duration);\r\n\t\tlet endDate;\r\n\t\tif(cache.endDates[key] === undefined){\r\n\t\t\tconst result = compute();\r\n\t\t\tconst resultTimestamp = result.valueOf();\r\n\t\t\tcache.endDates[key] = resultTimestamp;\r\n\t\t\tcache.durations[this._durationCacheKey(startDateTimestamp, resultTimestamp)] = duration;\r\n\t\t\tendDate = result;\r\n\t\t}else{\r\n\t\t\tendDate = new Date(cache.endDates[key]);\r\n\t\t}\r\n\r\n\t\treturn endDate;\r\n\t}\r\n\r\n\tgetDuration(startDate: Date, endDate: Date, unit: string, step: number, compute: () => number): number|null{\r\n\t\tconst cache = this._getCacheObject(startDate, unit, step);\r\n\r\n\t\tconst startDateTimestamp = startDate.valueOf();\r\n\t\tconst endDateTimestamp = endDate.valueOf();\r\n\t\tconst key = this._durationCacheKey(startDateTimestamp, endDateTimestamp);\r\n\t\tlet duration;\r\n\t\tif(cache.durations[key] === undefined){\r\n\t\t\tconst result = compute();\r\n\t\t\tcache.durations[key] = result.valueOf();\r\n\r\n\t\t\t// can't populate end date due to logic of end date calculation, current unit tests capture it\r\n\t\t\t// cache.endDates[this._endDateCacheKey(startDateTimestamp, result)] = endDateTimestamp;\r\n\t\t\tduration = result;\r\n\t\t}else{\r\n\t\t\tduration = cache.durations[key];\r\n\t\t}\r\n\r\n\t\treturn duration;\r\n\t}\r\n\r\n\tclear(): void{\r\n\t\tthis._cache = {};\r\n\t}\r\n}","import {createCacheObject} from \"./work_unit_cache\";\r\nimport {LargerUnitsCache} from \"./work_unit_cache\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport {DateDurationCache} from \"./work_unit_cache/date_duration_cache\";\r\n\r\nfunction CalendarWorkTimeStrategy(gantt, argumentsHelper) {\r\n\tthis.argumentsHelper = argumentsHelper;\r\n\tthis.$gantt = gantt;\r\n\tthis._workingUnitsCache = createCacheObject();\r\n\tthis._largeUnitsCache = new LargerUnitsCache(this);\r\n\tthis._dateDurationCache = new DateDurationCache();\r\n\tthis._worktime = null;\r\n\tthis._cached_timestamps = {};\r\n\tthis._cached_timestamps_count = 0;\r\n}\r\n\r\nCalendarWorkTimeStrategy.prototype = {\r\n\tunits: [\r\n\t\t\"year\",\r\n\t\t\"month\",\r\n\t\t\"week\",\r\n\t\t\"day\",\r\n\t\t\"hour\",\r\n\t\t\"minute\"\r\n\t],\r\n\t_clearCaches: function(){\r\n\t\tthis._workingUnitsCache.clear();\r\n\t\tthis._largeUnitsCache.clear();\r\n\t\tthis._dateDurationCache.clear();\r\n\t},\r\n\t// cache previously calculated worktime\r\n\t_getUnitOrder: function (unit) {\r\n\t\tfor (var i = 0, len = this.units.length; i < len; i++) {\r\n\t\t\tif (this.units[i] == unit)\r\n\t\t\t\treturn i;\r\n\t\t}\r\n\t},\r\n\t_resetTimestampCache: function(){\r\n\t\tthis._cached_timestamps = {};\r\n\t\tthis._cached_timestamps_count = 0;\r\n\t},\r\n\t_timestamp: function (settings) {\r\n\t\t// minor optimization, store calculated timestamps to reduce computations\r\n\t\t// reset cache when number of keys exceeds large number where key lookup may became more expensive than the recalculation\r\n\t\tif(this._cached_timestamps_count > 1000000){\r\n\t\t\tthis._resetTimestampCache();\r\n\t\t}\r\n\r\n\t\tvar timestamp = null;\r\n\t\tif ((settings.day || settings.day === 0)) {\r\n\t\t\ttimestamp = settings.day;\r\n\t\t} else if (settings.date) {\r\n\t\t\tvar value = String(settings.date.valueOf());\r\n\t\t\tif(this._cached_timestamps[value]){\r\n\t\t\t\ttimestamp = this._cached_timestamps[value];\r\n\t\t\t}else{\r\n\t\t\t\t// store worktime datestamp in utc so it could be recognized in different timezones (e.g. opened locally and sent to the export service in different timezone)\r\n\t\t\t\ttimestamp = Date.UTC(settings.date.getFullYear(), settings.date.getMonth(), settings.date.getDate());\r\n\t\t\t\tthis._cached_timestamps[value] = timestamp;\r\n\t\t\t\tthis._cached_timestamps_count++;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn timestamp;\r\n\t},\r\n\t_checkIfWorkingUnit: function (date, unit) {\r\n\t\t// GS-596: If unit is larger than day or has a custom logic\r\n\t\tif (!this[\"_is_work_\" + unit]) {\r\n\t\t\tconst from = this.$gantt.date[`${unit}_start`](new Date(date));\r\n\t\t\tconst to = this.$gantt.date.add(from, 1, unit);\r\n\t\t\treturn this.hasDuration(from, to);\r\n\t\t}\r\n\t\treturn this[\"_is_work_\" + unit](date);\r\n\t},\r\n\t//checkings for particular time units\r\n\t//methods for month-year-week can be defined, otherwise always return 'true'\r\n\t_is_work_day: function (date) {\r\n\t\tvar val = this._getWorkHours(date);\r\n\r\n\t\tif (Array.isArray(val)) {\r\n\t\t\treturn val.length > 0;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\t_is_work_hour: function (date) {\r\n\t\tvar hours = this._getWorkHours(date); // [{start: 8*60*60, end: 12*60*60}, {start: 13*60*60, end: 17*60*60}]\r\n\t\tvar value = date.getHours();\r\n\t\tfor (var i = 0; i < hours.length; i++) {\r\n\t\t\tif(value >= hours[i].startHour && value < hours[i].endHour){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_getTimeOfDayStamp: function(date, dayEnd) {\r\n\t\tvar hours = date.getHours();\r\n\t\tif(!date.getHours() && !date.getMinutes() && dayEnd){\r\n\t\t\thours = 24;\r\n\t\t}\r\n\t\treturn hours * 60 * 60 + date.getMinutes() * 60;\r\n\t},\r\n\r\n\t_is_work_minute: function(date){\r\n\t\tvar hours = this._getWorkHours(date); // [{start: 8*60*60, end: 12*60*60}, {start: 13*60*60, end: 17*60*60}]\r\n\t\tvar checkTime = this._getTimeOfDayStamp(date);\r\n\t\tfor (var i = 0; i < hours.length; i++) {\r\n\t\t\tif(checkTime >= hours[i].start && checkTime < hours[i].end){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_nextDate: function (start, unit, step) {\r\n\t\treturn this.$gantt.date.add(start, step, unit);\r\n\t},\r\n\t_getWorkUnitsBetweenGeneric: function (from, to, unit, step) {\r\n\t\tvar dateHelper = this.$gantt.date;\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\t\tvar units = 0;\r\n\r\n\r\n\t\tvar next = null;\r\n\t\tvar stepStart,\r\n\t\t\tstepEnd;\r\n\r\n\t\t// calculating decimal durations, i.e. 2016-09-20 00:05:00 - 2016-09-20 01:00:00 ~ 0.95 instead of 1\r\n\t\t// and also 2016-09-20 00:00:00 - 2016-09-20 00:05:00 ~ 0.05 instead of 1\r\n\t\t// durations must be rounded later\r\n\t\tvar checkFirst = false;\r\n\t\tstepStart = dateHelper[unit + \"_start\"](new Date(start));\r\n\t\tif (stepStart.valueOf() != start.valueOf()) {\r\n\t\t\tcheckFirst = true;\r\n\t\t}\r\n\t\tvar checkLast = false;\r\n\t\tstepEnd = dateHelper[unit + \"_start\"](new Date(to));\r\n\t\tif (stepEnd.valueOf() != to.valueOf()) {\r\n\t\t\tcheckLast = true;\r\n\t\t}\r\n\r\n\t\tvar isLastStep = false;\r\n\t\twhile (start.valueOf() < end.valueOf()) {\r\n\t\t\tnext = this._nextDate(start, unit, step);\r\n\t\t\tisLastStep = (next.valueOf() > end.valueOf());\r\n\r\n\t\t\tif (this._isWorkTime(start, unit)) {\r\n\t\t\t\tif (checkFirst || (checkLast && isLastStep)) {\r\n\t\t\t\t\tstepStart = dateHelper[unit + \"_start\"](new Date(start));\r\n\t\t\t\t\tstepEnd = dateHelper.add(stepStart, step, unit);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (checkFirst) {\r\n\t\t\t\t\tcheckFirst = false;\r\n\t\t\t\t\tnext = this._nextDate(stepStart, unit, step);\r\n\t\t\t\t\tunits += ((stepEnd.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf()));\r\n\t\t\t\t} else if (checkLast && isLastStep) {\r\n\t\t\t\t\tcheckLast = false;\r\n\t\t\t\t\tunits += ((end.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf()));\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tunits++;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar unitOrder = this._getUnitOrder(unit);\r\n\t\t\t\tvar biggerTimeUnit = this.units[unitOrder - 1];\r\n\t\t\t\tif(biggerTimeUnit && !this._isWorkTime(start, biggerTimeUnit)){\r\n\t\t\t\t\tnext = this._getClosestWorkTimeFuture(start, biggerTimeUnit);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstart = next;\r\n\t\t}\r\n\t\treturn units;\r\n\t},\r\n\r\n\t_getMinutesPerHour: function (date) {\r\n\t\tvar hourStart = this._getTimeOfDayStamp(date);\r\n\t\tvar hourEnd = this._getTimeOfDayStamp(this._nextDate(date, \"hour\", 1));\r\n\t\tif (hourEnd === 0){\r\n\t\t\thourEnd = 24 * 60 * 60;\r\n\t\t}\r\n\t\tvar worktimes = this._getWorkHours(date);\r\n\r\n\t\tfor(var i = 0; i < worktimes.length; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(hourStart >= interval.start && hourEnd <= interval.end){\r\n\t\t\t\treturn 60;// hour inside a working interval, all hour is a work hour\r\n\t\t\t}else if(hourStart < interval.end && hourEnd > interval.start){\r\n\t\t\t\t// hour is partially work time\r\n\t\t\t\tvar duration = Math.min(hourEnd, interval.end) - Math.max(hourStart, interval.start);\r\n\t\t\t\treturn duration / 60;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t_getMinutesPerDay: function (date) {\r\n\t\tvar hours = this._getWorkHours(date);\r\n\t\tvar res = 0;\r\n\t\thours.forEach(function(interval){\r\n\t\t\tres+= interval.durationMinutes;\r\n\t\t});\r\n\t\treturn res;\r\n\t},\r\n\tgetHoursPerDay: function (date) {\r\n\t\tvar hours = this._getWorkHours(date);\r\n\t\tvar res = 0;\r\n\t\thours.forEach(function(interval){\r\n\t\t\tres+= interval.durationHours;\r\n\t\t});\r\n\t\treturn res;\r\n\t},\r\n\t_getWorkUnitsForRange: function (from, to, unit, step) {\r\n\t\tvar total = 0;\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\r\n\t\tvar getUnitsPerDay;\r\n\t\tif (unit == \"minute\") {\r\n\t\t\tgetUnitsPerDay = utils.bind(this._getMinutesPerDay, this);\r\n\t\t} else {\r\n\t\t\tgetUnitsPerDay = utils.bind(this.getHoursPerDay, this);\r\n\t\t}\r\n\r\n\t\twhile (start.valueOf() < end.valueOf()) {\r\n\t\t\tif(end - start > 1000*60*60*24*32 && start.getDate() === 0) {\r\n\t\t\t\tvar units = this._largeUnitsCache.getMinutesPerMonth(start);\r\n\t\t\t\tif(unit == \"hour\"){\r\n\t\t\t\t\tunits = units / 60;\r\n\t\t\t\t}\r\n\t\t\t\ttotal += units;\r\n\t\t\t\tstart = this.$gantt.date.add(start, 1, \"month\");\r\n\t\t\t\tcontinue;\r\n\t\t\t}else if(end - start > 1000*60*60*24*16) {\r\n\t\t\t\tvar weekStart = this.$gantt.date.week_start(new Date(start));\r\n\t\t\t\tif(start.valueOf() === weekStart.valueOf()){\r\n\t\t\t\t\tvar units = this._largeUnitsCache.getMinutesPerWeek(start);\r\n\t\t\t\t\tif(unit == \"hour\"){\r\n\t\t\t\t\t\tunits = units / 60;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal += units;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, 7, \"day\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t//\tif (this._isWorkTime(start, \"day\")) {\r\n\t\t\ttotal += getUnitsPerDay(start);\r\n\t\t//\t}\r\n\t\t\tstart = this._nextDate(start, \"day\", 1);\r\n\t\t}\r\n\r\n\t\treturn total / step;\r\n\t},\r\n\r\n\r\n\t_getMinutesBetweenSingleDay: function(from, to){\r\n\t\tvar range = this._getIntervalTimestamp(from, to);\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tvar result = 0;\r\n\r\n\t\tfor(var i = 0; i < worktimes.length; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(range.end >= interval.start && range.start <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.max(interval.start, range.start);\r\n\t\t\t\tvar minuteTo = Math.min(interval.end, range.end);\r\n\r\n\t\t\t\tresult += (minuteTo - minuteFrom) / 60;\r\n\t\t\t\trange.start = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Math.floor(result);\r\n\t},\r\n\r\n\t_getMinutesBetween: function(from, to, unit, step){\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\r\n\t\tvar firstDayStart = new Date(start);\r\n\t\tvar firstDayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(start)), 1, \"day\");\r\n\r\n\t\tif (end.valueOf() <= firstDayEnd.valueOf()) {\r\n\t\t\treturn this._getMinutesBetweenSingleDay(from, to);\r\n\t\t} else {\r\n\r\n\t\t\tvar lastDayStart = this.$gantt.date.day_start(new Date(end));\r\n\t\t\tvar lastDayEnd = end;\r\n\r\n\t\t\tvar startPart = this._getMinutesBetweenSingleDay(firstDayStart, firstDayEnd);\r\n\t\t\tvar endPart = this._getMinutesBetweenSingleDay(lastDayStart, lastDayEnd);\r\n\r\n\t\t\tvar rangePart = this._getWorkUnitsForRange(firstDayEnd, lastDayStart, unit, step);\r\n\t\t\tvar total = startPart + rangePart + endPart;\r\n\r\n\t\t\treturn total;\r\n\t\t}\r\n\t},\r\n\t// optimized method for calculating work units duration of large time spans\r\n\t// implemented for hours and minutes units, bigger time units don't benefit from the optimization so much\r\n\t_getHoursBetween: function (from, to, unit, step) {\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\r\n\t\tvar firstDayStart = new Date(start);\r\n\t\tvar firstDayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(start)), 1, \"day\");\r\n\r\n\t\tif (end.valueOf() <= firstDayEnd.valueOf()) {\r\n\t\t\treturn Math.round(this._getMinutesBetweenSingleDay(from, to) / 60);\r\n\t\t} else {\r\n\r\n\t\t\tvar lastDayStart = this.$gantt.date.day_start(new Date(end));\r\n\t\t\tvar lastDayEnd = end;\r\n\r\n\t\t\tvar startPart = this._getMinutesBetweenSingleDay(firstDayStart, firstDayEnd, unit, step) / 60;\r\n\t\t\tvar endPart = this._getMinutesBetweenSingleDay(lastDayStart, lastDayEnd, unit, step) / 60;\r\n\r\n\t\t\tvar rangePart = this._getWorkUnitsForRange(firstDayEnd, lastDayStart, unit, step);\r\n\t\t\tvar total = startPart + rangePart + endPart;\r\n\r\n\t\t\treturn Math.round(total);\r\n\t\t}\r\n\t},\r\n\r\n\tgetConfig: function () {\r\n\t\treturn this._worktime;\r\n\t},\r\n\t_setConfig: function (settings) {\r\n\t\tthis._worktime = settings;\r\n\t\tthis._parseSettings();\r\n\t\tthis._clearCaches();\r\n\t},\r\n\t_parseSettings: function() {\r\n\t\tvar settings = this.getConfig();\r\n\t\tsettings.parsed = {\r\n\t\t\tdates: {},\r\n\t\t\thours: null,\r\n\t\t\thaveCustomWeeks: false,\r\n\t\t\tcustomWeeks: {},\r\n\t\t\tcustomWeeksRangeStart: null,\r\n\t\t\tcustomWeeksRangeEnd: null,\r\n\t\t\tcustomWeeksBoundaries: []\r\n\t\t};\r\n\r\n\t\tsettings.parsed.hours = this._parseHours(settings.hours);\r\n\t\tfor(var i in settings.dates){\r\n\t\t\tsettings.parsed.dates[i] = this._parseHours(settings.dates[i]);\r\n\t\t}\r\n\r\n\t\tif(settings.customWeeks) {\r\n\t\t\tvar minCustomRangeStart = null;\r\n\t\t\tvar maxCustomRangeEnd = null;\r\n\t\t\tfor(var i in settings.customWeeks){\r\n\t\t\t\tvar customTime = settings.customWeeks[i];\r\n\r\n\t\t\t\tif(customTime.from && customTime.to){\r\n\t\t\t\t\tvar rangeStart = customTime.from;\r\n\t\t\t\t\tvar rangeEnd = customTime.to;\r\n\t\t\t\t\tif(!minCustomRangeStart || minCustomRangeStart > rangeStart.valueOf()){\r\n\t\t\t\t\t\tminCustomRangeStart = rangeStart.valueOf();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!maxCustomRangeEnd || maxCustomRangeEnd < rangeEnd.valueOf()){\r\n\t\t\t\t\t\tmaxCustomRangeEnd = rangeEnd.valueOf();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsettings.parsed.customWeeksBoundaries.push({\r\n\t\t\t\t\t\tfrom: rangeStart.valueOf(),\r\n\t\t\t\t\t\tfromReadable: new Date(rangeStart),\r\n\t\t\t\t\t\tto: rangeEnd.valueOf(),\r\n\t\t\t\t\t\ttoReadable: new Date(rangeEnd),\r\n\t\t\t\t\t\tname: i\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tsettings.parsed.haveCustomWeeks = true;\r\n\t\t\t\t\tvar currentWeek = settings.parsed.customWeeks[i] = {\r\n\t\t\t\t\t\tfrom: customTime.from,\r\n\t\t\t\t\t\tto: customTime.to,\r\n\t\t\t\t\t\thours: this._parseHours(customTime.hours),\r\n\t\t\t\t\t\tdates: {}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tfor(var d in customTime.dates){\r\n\t\t\t\t\t\tcurrentWeek.dates[d] = this._parseHours(customTime.dates[d]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsettings.parsed.customWeeksRangeStart = minCustomRangeStart;\r\n\t\t\tsettings.parsed.customWeeksRangeEnd = maxCustomRangeEnd;\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_tryChangeCalendarSettings: function (payload) {\r\n\t\tvar backup = JSON.stringify(this.getConfig());\r\n\t\tpayload();\r\n\t\tif (!this.hasWorkTime()) {\r\n\t\t//\tthis.$gantt.assert(false, \"Invalid calendar settings, no worktime available\");\r\n\t\t\tthis._setConfig(JSON.parse(backup));\r\n\t\t\tthis._clearCaches();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\t_arraysEqual: function(a, b){\r\n\t\tif (a === b) return true;\r\n\t\tif (!a || !b) return false;\r\n\t\tif (a.length != b.length) return false;\r\n\r\n\t\tfor (var i = 0; i < a.length; ++i) {\r\n\t\t\tif (a[i] !== b[i]) return false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\r\n\t_compareSettings: function (mySettings, thatSettings) {\r\n\t\tif (!this._arraysEqual(mySettings.hours, thatSettings.hours)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar myDays = Object.keys(mySettings.dates);\r\n\t\tvar otherDates = Object.keys(thatSettings.dates);\r\n\t\tmyDays.sort();\r\n\t\totherDates.sort();\r\n\r\n\t\tif (!this._arraysEqual(myDays, otherDates)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < myDays.length; i++){\r\n\t\t\tvar timestamp = myDays[i];\r\n\t\t\tvar myHours = mySettings.dates[timestamp];\r\n\t\t\tvar otherHours = mySettings.dates[timestamp];\r\n\r\n\t\t\t// day settings not equal\r\n\t\t\tif(myHours !== otherHours &&\r\n\t\t\t\t// but still can be two arrays with the equivalent hour settings\r\n\t\t\t\t!(Array.isArray(myHours) && Array.isArray(otherHours) && this._arraysEqual(myHours, otherHours))\r\n\t\t\t\t){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\tequals: function (calendar) {\r\n\t\tif(!(calendar instanceof CalendarWorkTimeStrategy)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar mySettings = this.getConfig();\r\n\t\tvar thatSettings = calendar.getConfig();\r\n\r\n\t\tif(!this._compareSettings(mySettings, thatSettings)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif(mySettings.parsed.haveCustomWeeks && thatSettings.parsed.haveCustomWeeks){\r\n\t\t\tif(mySettings.parsed.customWeeksBoundaries.length != thatSettings.parsed.customWeeksBoundaries.length){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i in mySettings.parsed.customWeeks){\r\n\t\t\t\tvar myWeek = mySettings.parsed.customWeeks[i];\r\n\t\t\t\tvar thatWeek = thatSettings.parsed.customWeeks[i];\r\n\t\t\t\tif(!thatWeek){\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!this._compareSettings(myWeek, thatWeek)){\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else if(mySettings.parse.haveCustomWeeks !== thatSettings.parsed.haveCustomWeeks){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\tgetWorkHours: function () {\r\n\t\tvar config = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\r\n\t\treturn this._getWorkHours(config.date, false);\r\n\t},\r\n\t_getWorkHours: function (date, parsed) {\r\n\t\tvar calendar = this.getConfig();\r\n\t\tif(parsed !== false){\r\n\t\t\tcalendar = calendar.parsed;\r\n\t\t}\r\n\r\n\t\tif(!date){\r\n\t\t\treturn calendar.hours;\r\n\t\t}\r\n\r\n\t\tvar dateValue = this._timestamp({date: date});\r\n\r\n\t\tif(calendar.haveCustomWeeks){\r\n\t\t\tif(calendar.customWeeksRangeStart <= dateValue && calendar.customWeeksRangeEnd > dateValue){\r\n\t\t\t\tfor(var i = 0; i < calendar.customWeeksBoundaries.length; i++){\r\n\t\t\t\t\tif(calendar.customWeeksBoundaries[i].from <= dateValue && calendar.customWeeksBoundaries[i].to > dateValue){\r\n\t\t\t\t\t\tcalendar = calendar.customWeeks[calendar.customWeeksBoundaries[i].name];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar hours = true;\r\n\r\n\t\tif (calendar.dates[dateValue] !== undefined) {\r\n\t\t\thours = calendar.dates[dateValue];//custom day\r\n\t\t} else if (calendar.dates[date.getDay()] !== undefined) {\r\n\t\t\thours = calendar.dates[date.getDay()];//week day\r\n\t\t}\r\n\t\tif (hours === true) {\r\n\t\t\treturn calendar.hours;\r\n\t\t} else if (hours) {\r\n\t\t\treturn hours;\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n\r\n\t_getIntervalTimestamp: function(from, to){\r\n\t\tvar res = {\r\n\t\t\tstart: 0,\r\n\t\t\tend: 0\r\n\t\t};\r\n\r\n\t\tres.start = from.getHours() * 60 * 60 + from.getMinutes() * 60 + from.getSeconds();\r\n\t\tvar endHours = to.getHours();\r\n\t\tif(!endHours && !to.getMinutes() && !to.getSeconds() && from.valueOf() < to.valueOf()){\r\n\t\t\tendHours = 24;\r\n\t\t}\r\n\t\tres.end = endHours * 60 * 60 + to.getMinutes() * 60 + to.getSeconds();\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_parseHours: function(hours) {\r\n\t\tif(Array.isArray(hours)){\r\n\r\n\t\t\tvar timestampRanges = [];// worktime as seconds range\r\n\t\t\thours.forEach(function(hour){\r\n\t\t\t\tif(typeof hour === \"number\"){\r\n\t\t\t\t\ttimestampRanges.push(hour*60*60);\r\n\t\t\t\t}else if(typeof hour === \"string\") {\r\n\t\t\t\t\t// \"12-13\", or \"12:00-13:00\", or \"12:00:00-13:00:00\"\r\n\t\t\t\t\thour.split(\"-\").map(function(time){\r\n\t\t\t\t\t\treturn time.trim();\r\n\t\t\t\t\t}).forEach(function(part){\r\n\t\t\t\t\t\tvar parsed = part.split(\":\").map(function(time){\r\n\t\t\t\t\t\t\treturn time.trim();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tvar value = parseInt(parsed[0]*60*60);\r\n\t\t\t\t\t\tif(parsed[1]){\r\n\t\t\t\t\t\t\tvalue += parseInt(parsed[1]*60);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(parsed[2]){\r\n\t\t\t\t\t\t\tvalue += parseInt(parsed[2]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimestampRanges.push(value);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar timerangeConfig = [];\r\n\t\t\tfor (var i = 0; i < timestampRanges.length; i += 2) {\r\n\t\t\t\tvar start = timestampRanges[i];\r\n\t\t\t\tvar end = timestampRanges[i + 1];\r\n\t\t\t\tvar duration = end - start;\r\n\r\n\t\t\t\ttimerangeConfig.push({\r\n\t\t\t\t\tstart: start,\r\n\t\t\t\t\tend: end,\r\n\t\t\t\t\tstartHour: Math.floor(start / (60*60)),\r\n\t\t\t\t\tstartMinute: Math.floor(start / (60)),\r\n\t\t\t\t\tendHour: Math.ceil(end / (60*60)),\r\n\t\t\t\t\tendMinute: Math.ceil(end / (60)),\r\n\t\t\t\t\tdurationSeconds: duration,\r\n\t\t\t\t\tdurationMinutes: duration/60,\r\n\t\t\t\t\tdurationHours: duration/(60 * 60)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn timerangeConfig;\r\n\t\t} else {\r\n\t\t\treturn hours;\r\n\t\t}\r\n\t},\r\n\r\n\tsetWorkTime: function (settings) {\r\n\t\treturn this._tryChangeCalendarSettings(utils.bind(function () {\r\n\t\t\tvar hours = settings.hours !== undefined ? settings.hours : true;\r\n\t\t\tvar timestamp = this._timestamp(settings);\r\n\t\t\tvar calendarConfig = this.getConfig();\r\n\t\t\tif (timestamp !== null) {\r\n\t\t\t\tcalendarConfig.dates[timestamp] = hours;\r\n\t\t\t} else if(!settings.customWeeks) {\r\n\t\t\t\tcalendarConfig.hours = hours;\r\n\t\t\t}\r\n\r\n\t\t\tif(settings.customWeeks){\r\n\t\t\t\tif(!calendarConfig.customWeeks){\r\n\t\t\t\t\tcalendarConfig.customWeeks = {};\r\n\t\t\t\t}\r\n\t\t\t\t// GS-1867. allow setWorkTime to exclude dates in the customWeeks range\r\n\t\t\t\tif (typeof settings.customWeeks == \"string\"){\r\n\t\t\t\t\tif (timestamp !== null) {\r\n\t\t\t\t\t\tcalendarConfig.customWeeks[settings.customWeeks].dates[timestamp] = hours;\r\n\t\t\t\t\t} else if(!settings.customWeeks) {\r\n\t\t\t\t\t\tcalendarConfig.customWeeks[settings.customWeeks].hours = hours;\r\n\t\t\t\t\t}\t\t\r\n\t\t\t\t} else if (typeof settings.customWeeks === \"object\"\r\n\t\t\t\t&& Function.prototype.toString.call(settings.customWeeks.constructor) === \"function Object() { [native code] }\"){\r\n\t\t\t\t\tfor(var i in settings.customWeeks){\r\n\t\t\t\t\t\tcalendarConfig.customWeeks[i] = settings.customWeeks[i];\r\n\t\t\t\t\t}\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._parseSettings();\r\n\t\t\tthis._clearCaches();\r\n\t\t}, this));\r\n\t},\r\n\r\n\tunsetWorkTime: function (settings) {\r\n\t\treturn this._tryChangeCalendarSettings(utils.bind(function () {\r\n\t\t\tif (!settings) {\r\n\t\t\t\tthis.reset_calendar();\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar timestamp = this._timestamp(settings);\r\n\r\n\t\t\t\tif (timestamp !== null) {\r\n\t\t\t\t\tdelete this.getConfig().dates[timestamp];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Load updated settings and clear work units cache\r\n\t\t\tthis._parseSettings();\r\n\t\t\tthis._clearCaches();\r\n\t\t}, this));\r\n\t},\r\n\r\n\t_isWorkTime: function (date, unit) {\r\n\t\t// Check if this item has in the cache\r\n\r\n\t\tvar useCache = true;//unit === \"day\"; // use cache only for days. In case of hours/minutes cache size grows too large and the overhead exceeds the gains\r\n\t\tvar isWorkUnit = -1;\r\n\t\tvar dateKey = null;\r\n\r\n\t\tif(useCache){\r\n\t\t\t// use string keys\r\n\t\t\tdateKey = String(date.valueOf());\r\n\t\t\tisWorkUnit = this._workingUnitsCache.getItem(unit, dateKey, date);\r\n\t\t}\r\n\r\n\t\tif (isWorkUnit == -1) {\r\n\t\t\t// calculate if not cached\r\n\t\t\tisWorkUnit = this._checkIfWorkingUnit(date, unit);\r\n\t\t\tif(useCache){\r\n\t\t\t\tthis._workingUnitsCache.setItem(unit, dateKey, isWorkUnit, date);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn isWorkUnit;\r\n\t},\r\n\r\n\tisWorkTime: function () {\r\n\t\tvar config = this.argumentsHelper.isWorkTimeArguments.apply( this.argumentsHelper, arguments);\r\n\t\treturn this._isWorkTime(config.date, config.unit);\r\n\t},\r\n\r\n\tcalculateDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply( this.argumentsHelper, arguments);\r\n\r\n\t\tif (!config.unit) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t//return this._calculateDuration(config.start_date, config.end_date, config.unit, config.step);\r\n\r\n\t\tvar self = this;\r\n\t\treturn this._dateDurationCache.getDuration(config.start_date, config.end_date, config.unit, config.step, function(){ \r\n\t\t\treturn self._calculateDuration(config.start_date, config.end_date, config.unit, config.step);\r\n\t\t});\r\n\t},\r\n\r\n\t_calculateDuration: function (from, to, unit, step) {\r\n\t\tvar res = 0;\r\n\r\n\t\tvar sign = 1;\r\n\t\tif(from.valueOf() > to.valueOf()){\r\n\t\t\tvar tmp = to;\r\n\t\t\tto = from;\r\n\t\t\tfrom = tmp;\r\n\t\t\tsign = -1;\r\n\t\t}\r\n\r\n\t\tif (unit == \"hour\" && step == 1) {\r\n\t\t\tres = this._getHoursBetween(from, to, unit, step);\r\n\t\t} else if(unit == \"minute\" && step == 1){\r\n\t\t\t// quick calculation for minutes with 1 minute step\r\n\t\t\tres = this._getMinutesBetween(from, to, unit, step);\r\n\t\t} else {\r\n\t\t\tres = this._getWorkUnitsBetweenGeneric(from, to, unit, step);\r\n\t\t}\r\n\r\n\t\t// getWorkUnits.. returns decimal durations\r\n\t\treturn sign * Math.round(res);\r\n\t},\r\n\thasDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply( this.argumentsHelper, arguments);\r\n\r\n\t\tvar from = config.start_date,\r\n\t\t\tto = config.end_date,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\tif (!unit) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\r\n\t\twhile (start.valueOf() < end.valueOf()) {\r\n\t\t\tif (this._isWorkTime(start, unit))\r\n\t\t\t\treturn true;\r\n\t\t\tstart = this._nextDate(start, unit, step);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tcalculateEndDate: function () {\r\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply( this.argumentsHelper, arguments);\r\n\r\n\t\tvar from = config.start_date,\r\n\t\t\tduration = config.duration,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\tif (!unit)\r\n\t\t\treturn false;\r\n\r\n\t\tvar mult = (config.duration >= 0) ? 1 : -1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\t//\tvar endDate = this._calculateEndDate(from, duration, unit, step * mult);\r\n\t//\treturn endDate;\r\n\t\tvar self = this;\r\n\t\treturn this._dateDurationCache.getEndDate(from, duration, unit, step * mult, function(){ \r\n\t\t\treturn self._calculateEndDate(from, duration, unit, step * mult);\r\n\t\t} );\r\n\t},\r\n\r\n\t_calculateEndDate: function (from, duration, unit, step) {\r\n\t\tif (!unit)\r\n\t\t\treturn false;\r\n\r\n\t\tif (step == 1 && unit == \"minute\") {\r\n\t\t\treturn this._calculateMinuteEndDate(from, duration, step);\r\n\t\t} else if(step == -1 && unit == \"minute\") {\r\n\t\t\treturn this._subtractMinuteDate(from, duration, step);\r\n\t\t} else if (step == 1 && unit == \"hour\") {\r\n\t\t\treturn this._calculateHourEndDate(from, duration, step);\r\n\t\t} else {\r\n\t\t\tvar interval = this._addInterval(from, duration, unit, step, null);\r\n\t\t\treturn interval.end;\r\n\t\t}\r\n\t},\r\n\r\n\t_addInterval: function (start, duration, unit, step, stopAction) {\r\n\t\tvar added = 0;\r\n\t\tvar current = start;\r\n\t\tvar dstShift = false;\r\n\r\n\t\twhile (added < duration && !(stopAction && stopAction(current))) {\r\n\t\t\tvar next = this._nextDate(current, unit, step);\r\n\r\n\t\t\t// GS-1501. Correct hours after DST change\r\n\t\t\tif (unit == \"day\"){\r\n\t\t\t\tdstShift = dstShift || !current.getHours() && next.getHours();\r\n\r\n\t\t\t\tif (dstShift){\r\n\t\t\t\t\tnext.setHours(0);\r\n\t\t\t\t\tif (next.getHours()){\r\n\t\t\t\t\t// the day when the timezone is changed, try to correct hours next time\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdstShift = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar dateValue = new Date(next.valueOf() + 1);\r\n\t\t\tif (step > 0) {\r\n\t\t\t\tdateValue = new Date(next.valueOf() - 1);\r\n\t\t\t}\r\n\t\t\tvar workTimeCheck = this._isWorkTime(dateValue, unit);\r\n\r\n\t\t\tif (workTimeCheck && !dstShift) {\r\n\t\t\t\tadded++;\r\n\t\t\t}\r\n\t\t\tcurrent = next;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tend: current,\r\n\t\t\tstart: start,\r\n\t\t\tadded: added\r\n\t\t};\r\n\t},\r\n\r\n\t_addHoursUntilDayEnd: function(from, duration) {\r\n\t\tvar dayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(from)), 1, \"day\");\r\n\t\tvar added = 0;\r\n\t\tvar left = duration;\r\n\r\n\t\tvar range = this._getIntervalTimestamp(from, dayEnd);\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tfor(var i = 0; i < worktimes.length && added < duration; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(range.end >= interval.start && range.start <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.max(interval.start, range.start);\r\n\t\t\t\tvar minuteTo = Math.min(interval.end, range.end);\r\n\t\t\t\tvar rangeHours = (minuteTo - minuteFrom) / (60 * 60);\r\n\t\t\t\tif(rangeHours > left){\r\n\t\t\t\t\trangeHours = left;\r\n\t\t\t\t\tminuteTo = minuteFrom + (left * 60 * 60);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar addHours = Math.round((minuteTo - minuteFrom) / (60 * 60));\r\n\t\t\t\tadded += addHours;\r\n\t\t\t\tleft -= addHours;\r\n\t\t\t\trange.start = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar intervalEnd = dayEnd;\r\n\t\tif(added === duration){\r\n\t\t\tintervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, range.start);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tadded: added,\r\n\t\t\tend: intervalEnd\r\n\t\t};\r\n\t},\r\n\r\n\t_calculateHourEndDate: function (from, duration, step) {\r\n\t\tvar start = new Date(from),\r\n\t\tadded = 0;\r\n\t\tstep = step || 1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\r\n\t\tvar interval = this._addHoursUntilDayEnd(start, duration);\r\n\t\tadded = interval.added;\r\n\t\tstart = interval.end;\r\n\r\n\t\tvar durationLeft = duration - added;\r\n\r\n\t\tif (durationLeft) {\r\n\t\t\tvar current = start;\r\n\t\t\twhile (added < duration) {\r\n\t\t\t\tvar next = this._nextDate(current, \"day\", step);\r\n\t\t\t\t// reset to day start in case DST switch happens in the process\r\n\t\t\t\tnext.setHours(0);\r\n\t\t\t\tnext.setMinutes(0);\r\n\t\t\t\tnext.setSeconds(0);\r\n\r\n\t\t\t\tvar hoursPerDay = 0;\r\n\t\t\t\tif(step > 0){\r\n\t\t\t\t\thoursPerDay = this.getHoursPerDay(new Date(next.valueOf() - 1));\r\n\t\t\t\t}else{\r\n\t\t\t\t\thoursPerDay = this.getHoursPerDay(new Date(next.valueOf() + 1));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (added + hoursPerDay >= duration) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tadded += hoursPerDay;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcurrent = next;\r\n\t\t\t}\r\n\t\t\tstart = current;\r\n\t\t}\r\n\r\n\t\tif (added < duration) {\r\n\t\t\tvar durationLeft = duration - added;\r\n\t\t\tinterval = this._addHoursUntilDayEnd(start, durationLeft);\r\n\t\t\tstart = interval.end;\r\n\t\t}\r\n\r\n\t\treturn start;\r\n\t},\r\n\r\n\t_addMinutesUntilHourEnd: function(from, duration){\r\n\t\tif(from.getMinutes() === 0) {\r\n\t\t\t// already at hour end\r\n\t\t\treturn {\r\n\t\t\t\tadded: 0,\r\n\t\t\t\tend: new Date(from)\r\n\t\t\t};\r\n\t\t}\r\n\t\tvar hourEnd = this.$gantt.date.add(this.$gantt.date.hour_start(new Date(from)), 1, \"hour\");\r\n\t\tvar added = 0;\r\n\t\tvar left = duration;\r\n\r\n\t\tvar range = this._getIntervalTimestamp(from, hourEnd);\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tfor(var i = 0; i < worktimes.length && added < duration; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(range.end >= interval.start && range.start <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.max(interval.start, range.start);\r\n\t\t\t\tvar minuteTo = Math.min(interval.end, range.end);\r\n\t\t\t\tvar rangeMinutes = (minuteTo - minuteFrom) / 60;\r\n\t\t\t\tif(rangeMinutes > left){\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom + (left * 60);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO: verify testcase https://dhtmlxsupport.teamwork.com/desk/tickets/9625700/messages\r\n\t\t\t\t/*if (rangeMinutes === 0) {\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom + (left * 60);\r\n\t\t\t\t}*/\r\n\r\n\t\t\t\tvar addMinutes = Math.round((minuteTo - minuteFrom) / 60);\r\n\t\t\t\tleft -= addMinutes;\r\n\t\t\t\tadded += addMinutes;\r\n\t\t\t\trange.start = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar intervalEnd = hourEnd;\r\n\t\tif(added === duration){\r\n\t\t\tintervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, range.start);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tadded: added,\r\n\t\t\tend: intervalEnd\r\n\t\t};\r\n\t},\r\n\r\n\t_subtractMinutesUntilHourStart: function(from, duration){\r\n\t\tvar hourStart = this.$gantt.date.hour_start(new Date(from));\r\n\t\tvar added = 0;\r\n\t\tvar left = duration;\r\n\r\n\t\tvar hourStartTimestamp = hourStart.getHours() * 60 * 60 + hourStart.getMinutes() * 60 + hourStart.getSeconds();\r\n\t\tvar initialDateTimestamp = from.getHours() * 60 * 60 + from.getMinutes() * 60 + from.getSeconds();\r\n\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tfor(var i = worktimes.length - 1; i >= 0 && added < duration; i--){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(initialDateTimestamp > interval.start && hourStartTimestamp <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.min(initialDateTimestamp, interval.end);\r\n\t\t\t\tvar minuteTo = Math.max(hourStartTimestamp, interval.start);\r\n\r\n\t\t\t//\tvar minuteFrom = Math.max(interval.start, currentHour.start);\r\n\t\t\t//\tvar minuteTo = Math.min(interval.end, currentHour.end);\r\n\t\t\t\tvar rangeMinutes = (minuteFrom - minuteTo) / 60;\r\n\t\t\t\tif(rangeMinutes > left){\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom - (left * 60);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO: verify testcase https://dhtmlxsupport.teamwork.com/desk/tickets/9625700/messages\r\n\t\t\t\t/*if (rangeMinutes === 0) {\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom - (left * 60);\r\n\t\t\t\t}*/\r\n\r\n\t\t\t\tvar addMinutes = Math.abs(Math.round((minuteFrom - minuteTo) / 60));\r\n\t\t\t\tleft -= addMinutes;\r\n\t\t\t\tadded += addMinutes;\r\n\t\t\t\tinitialDateTimestamp = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar intervalEnd = hourStart;\r\n\t\tif(added === duration){\r\n\t\t\tintervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, initialDateTimestamp);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tadded: added,\r\n\t\t\tend: intervalEnd\r\n\t\t};\r\n\t},\r\n\r\n\t_subtractMinuteDate: function (from, duration, step) {\r\n\t\tvar start = new Date(from),\r\n\t\t\tadded = 0;\r\n\t\tstep = step || -1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\t\tduration = Math.round(duration);\r\n\r\n\t\tconst minutePrecision = this._isMinutePrecision(start);\r\n\r\n\t\tlet addedInterval = this._subtractMinutesUntilHourStart(start, duration);\r\n\t\tadded += addedInterval.added;\r\n\r\n\t\tstart = addedInterval.end;\r\n\r\n\t\tvar calculatedDay = 0;\r\n\t\tvar daySchedule = [];\r\n\t\tvar minutesInDay = 0;\r\n\r\n\t\twhile (added < duration) {\r\n\t\t\tvar dayStart = this.$gantt.date.day_start(new Date(start));\r\n\r\n\t\t\tvar iterateFromDayEnd = false;\r\n\t\t\tif(start.valueOf() === dayStart.valueOf()){\r\n\t\t\t\tdayStart = this.$gantt.date.add(dayStart, -1, \"day\");\r\n\t\t\t\titerateFromDayEnd = true;\r\n\t\t\t}\r\n\t\t\t//var dayStartTimestamp = this.$gantt.date.day_start(new Date(start)).valueOf();\r\n\t\t\tvar dayEnd = new Date(dayStart.getFullYear(), dayStart.getMonth(), dayStart.getDate(), 23, 59,59,999).valueOf();\r\n\r\n\t\t\tif(dayEnd !== calculatedDay){\r\n\t\t\t\tdaySchedule = this._getWorkHours(dayStart);\r\n\t\t\t\tminutesInDay = this._getMinutesPerDay(dayStart);\r\n\t\t\t\tcalculatedDay = dayEnd;\r\n\t\t\t}\r\n\r\n\t\t\tvar left = duration - added;\r\n\t\t\tvar timestamp = this._getTimeOfDayStamp(start, iterateFromDayEnd);\r\n\r\n\t\t\tif(!daySchedule.length || !minutesInDay){\r\n\t\t\t\tstart = this.$gantt.date.add(start, -1, \"day\");\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(daySchedule[daySchedule.length - 1].end <= timestamp){\r\n\t\t\t\tif(left > minutesInDay){\r\n\t\t\t\t\tadded += minutesInDay;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, -1, \"day\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar isWorkHour = false;\r\n\t\t\tvar workInterval = null;\r\n\t\t\tvar prevInterval = null;\r\n\t\t\tfor(var i = daySchedule.length - 1; i >= 0; i--){\r\n\t\t\t\tif(daySchedule[i].start < timestamp - 1 && daySchedule[i].end >= timestamp - 1){\r\n\t\t\t\t\tisWorkHour = true;\r\n\t\t\t\t\tworkInterval = daySchedule[i];\r\n\t\t\t\t\tprevInterval = daySchedule[i-1];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(isWorkHour){\r\n\r\n\t\t\t\t// we're at the end of worktime interval and subtracting more than the duration of the interval\r\n\t\t\t\t// -> subtract the duration of the interval and move to the start of the interval (we're moving from end)\r\n\t\t\t\tif(timestamp === workInterval.end && left >= workInterval.durationMinutes){\r\n\t\t\t\t\tadded += workInterval.durationMinutes;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, -workInterval.durationMinutes, \"minute\");\r\n\t\t\t\t} // worktime is set in whole hours (no intervals like 9:15-10:00)\r\n\t\t\t\t// the amount we need to subtract lies inside the interval\r\n\t\t\t\telse if(!minutePrecision && left <= (timestamp/60 - workInterval.startMinute)){\r\n\t\t\t\t\tadded += left;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, -left, \"minute\");\r\n\t\t\t\t}else if (minutePrecision){\r\n\t\t\t\t\t// GS-2129. If the working time is set in minutes, we accumulate the working time in minutes from right to left\r\n\t\t\t\t\t\r\n\t\t\t\t\t// duration we need to subtract lies completely inside the work interval\r\n\t\t\t\t\tif(left <= (timestamp/60 - workInterval.startMinute)){\r\n\t\t\t\t\t\tadded += left;\r\n\t\t\t\t\t\tstart = this.$gantt.date.add(start, -left, \"minute\");\r\n\t\t\t\t\t}else {\r\n\t\t\t\t\t\t// we need to go trough multiple work intervals to subtract needed time\r\n\t\t\t\t\t\tadded += (timestamp/60 - workInterval.startMinute);\r\n\t\t\t\t\t\tif(prevInterval){\r\n\t\t\t\t\t\t\tstart = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, prevInterval.end);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvar minutesInHour = this._getMinutesPerHour(start);\r\n\t\t\t\t\tif(minutesInHour <= left){\r\n\t\t\t\t\t\tadded += minutesInHour;\r\n\t\t\t\t\t\tstart = this._nextDate(start, \"hour\", step);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\taddedInterval = this._subtractMinutesUntilHourStart(start, left);\r\n\t\t\t\t\t\tadded += addedInterval.added;\r\n\t\t\t\t\t\tstart = addedInterval.end;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(start.getHours() === 0 && start.getMinutes() === 0 && start.getSeconds() === 0){\r\n\t\t\t\t\tvar prev = this._getClosestWorkTimePast(start, \"hour\");\r\n\t\t\t\t\tif(prev.valueOf() === start.valueOf()){\r\n\t\t\t\t\t\tvar prev = this.$gantt.date.add(start, -1, \"day\");\r\n\t\t\t\t\t\tvar times = this._getWorkHours(prev);\r\n\t\t\t\t\t\tif(times.length){\r\n\t\t\t\t\t\t\tvar lastInterval = times[times.length - 1];\r\n\t\t\t\t\t\t\tprev.setSeconds(lastInterval.durationSeconds);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstart = prev;\r\n\r\n\t\t\t\t} else{\r\n\t\t\t\t\tstart = this._getClosestWorkTimePast(new Date(start - 1), \"hour\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (added < duration) {\r\n\t\t\tvar durationLeft = duration - added;\r\n\t\t\taddedInterval = this._subtractMinutesUntilHourStart(start, durationLeft);\r\n\t\t\tadded += addedInterval.added;\r\n\t\t\tstart = addedInterval.end;\r\n\t\t}\r\n\r\n\t\treturn start;\r\n\t},\r\n\t_calculateMinuteEndDate: function (from, duration, step) {\r\n\t\tvar start = new Date(from),\r\n\t\t\tadded = 0;\r\n\t\tstep = step || 1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\t\tduration = Math.round(duration);\r\n\r\n\t\tvar addedInterval = this._addMinutesUntilHourEnd(start, duration);\r\n\t\tadded += addedInterval.added;\r\n\r\n\t\tstart = addedInterval.end;\r\n\r\n\t\tvar calculatedDay = 0;\r\n\t\tvar daySchedule = [];\r\n\t\tvar minutesInDay = 0;\r\n\r\n\t\tvar minutePrecision = this._isMinutePrecision(start);\r\n\r\n\t\twhile (added < duration) {\r\n\t\t\tvar dayStart = this.$gantt.date.day_start(new Date(start)).valueOf();\r\n\t\t\tif(dayStart !== calculatedDay){\r\n\t\t\t\tdaySchedule = this._getWorkHours(start);\r\n\t\t\t\tminutesInDay = this._getMinutesPerDay(start);\r\n\t\t\t\tcalculatedDay = dayStart;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar left = duration - added;\r\n\t\t\tvar timestamp = this._getTimeOfDayStamp(start);\r\n\r\n\t\t\tif(!daySchedule.length || !minutesInDay){\r\n\t\t\t\tstart = this.$gantt.date.add(this.$gantt.date.day_start(start), 1, \"day\");\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(daySchedule[0].start >= timestamp){\r\n\t\t\t\tif(left >= minutesInDay){\r\n\t\t\t\t\tadded += minutesInDay;\r\n\t\t\t\t\tif (left == minutesInDay) {\r\n\t\t\t\t\t\tstart = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, daySchedule[daySchedule.length - 1].end);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tstart = this.$gantt.date.add(start, 1, \"day\");\r\n\t\t\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar isWorkHour = false;\r\n\t\t\tvar workInterval = null;\r\n\t\t\tfor(var i = 0; i < daySchedule.length; i++){\r\n\t\t\t\tif(daySchedule[i].start <= timestamp && daySchedule[i].end > timestamp){\r\n\t\t\t\t\tisWorkHour = true;\r\n\t\t\t\t\tworkInterval = daySchedule[i];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(isWorkHour){\r\n\r\n\t\t\t\tif(timestamp === workInterval.start && left >= workInterval.durationMinutes){\r\n\t\t\t\t\tadded += workInterval.durationMinutes;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, workInterval.durationMinutes, \"minute\");\r\n\t\t\t\t}else if(left <= (workInterval.endMinute - timestamp/60)){\r\n\t\t\t\t\tadded += left;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, left, \"minute\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvar minutesInHour = this._getMinutesPerHour(start);\r\n\t\t\t\t\tif(minutesInHour <= left){\r\n\t\t\t\t\t\tadded += minutesInHour;\r\n\t\t\t\t\t\t// when the working time settings are set in minutes move to the next minutes\r\n\t\t\t\t\t\tif (minutePrecision) {\r\n\t\t\t\t\t\t\tstart = this.$gantt.date.add(start, minutesInHour, \"minute\");\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstart = this._nextDate(start, \"hour\", step);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\taddedInterval = this._addMinutesUntilHourEnd(start, left);\r\n\t\t\t\t\t\tadded += addedInterval.added;\r\n\t\t\t\t\t\tstart = addedInterval.end;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tstart = this._getClosestWorkTimeFuture(start, \"hour\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (added < duration) {\r\n\t\t\tvar durationLeft = duration - added;\r\n\t\t\taddedInterval = this._addMinutesUntilHourEnd(start, durationLeft);\r\n\t\t\tadded += addedInterval.added;\r\n\t\t\tstart = addedInterval.end;\r\n\t\t}\r\n\r\n\t\treturn start;\r\n\t},\r\n\r\n\tgetClosestWorkTime: function () {\r\n\t\tvar settings = this.argumentsHelper.getClosestWorkTimeArguments.apply( this.argumentsHelper, arguments);\r\n\t\treturn this._getClosestWorkTime(settings.date, settings.unit, settings.dir);\r\n\t},\r\n\r\n\t_getClosestWorkTime: function (inputDate, unit, direction) {\r\n\t\tvar result = new Date(inputDate);\r\n\r\n\t\tif (this._isWorkTime(result, unit)) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tresult = this.$gantt.date[unit + '_start'](result);\r\n\r\n\t\tif (direction == 'any' || !direction) {\r\n\t\t\tvar closestFuture = this._getClosestWorkTimeFuture(result, unit);\r\n\t\t\tvar closestPast = this._getClosestWorkTimePast(result, unit);\r\n\t\t\tif (Math.abs(closestFuture - inputDate) <= Math.abs(inputDate - closestPast)) {\r\n\t\t\t\tresult = closestFuture;\r\n\t\t\t} else {\r\n\t\t\t\tresult = closestPast;\r\n\t\t\t}\r\n\t\t} else if (direction == \"past\") {\r\n\t\t\tresult = this._getClosestWorkTimePast(result, unit);\r\n\t\t} else {\r\n\t\t\tresult = this._getClosestWorkTimeFuture(result, unit);\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t_getClosestWorkTimeFuture: function (date, unit) {\r\n\t\treturn this._getClosestWorkTimeGeneric(date, unit, 1);\r\n\t},\r\n\r\n\t_getClosestWorkTimePast: function (date, unit) {\r\n\t\tvar result = this._getClosestWorkTimeGeneric(date, unit, -1);\r\n\t\t// should return the end of the closest work interval\r\n\t\treturn this.$gantt.date.add(result, 1, unit);\r\n\t},\r\n\r\n\t_findClosestTimeInDay: function(date, direction, worktimes) {\r\n\t\tvar start = new Date(date);\r\n\t\tvar resultDate = null;\r\n\t\tvar fromDayEnd = false;\r\n\t\tif(!this._getWorkHours(start).length){\r\n\t\t\tstart = this._getClosestWorkTime(start, \"day\", direction < 0 ? \"past\" : \"future\");\r\n\t\t\tif(direction < 0){\r\n\t\t\t\tstart = new Date(start.valueOf() - 1);\r\n\t\t\t\tfromDayEnd = true;\r\n\t\t\t}\r\n\t\t\tworktimes = this._getWorkHours(start);\r\n\t\t}\r\n\r\n\t\tvar value = this._getTimeOfDayStamp(start);\r\n\t\tif(fromDayEnd){\r\n\t\t\tvalue = this._getTimeOfDayStamp(new Date(start.valueOf() + 1), fromDayEnd);\r\n\t\t}\r\n\t\tif(direction > 0){\r\n\t\t\tfor(var i = 0; i < worktimes.length; i++){\r\n\t\t\t\tif(worktimes[i].start >= value){\r\n\t\t\t\t\tresultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, worktimes[i].start);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(var i = worktimes.length - 1; i >= 0; i--){\r\n\t\t\t\tif(worktimes[i].end <= value){\r\n\t\t\t\t\tresultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, worktimes[i].end);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}else if(worktimes[i].end > value && worktimes[i].start <= value) {\r\n\t\t\t\t\tresultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, value);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn resultDate;\r\n\t},\r\n\t_getClosestWorkMinute: function(date, unit, direction) {\r\n\t\tvar start = new Date(date);\r\n\t\tvar worktimes = this._getWorkHours(start);\r\n\t\tvar resultDate = this._findClosestTimeInDay(start, direction, worktimes);\r\n\t\tif(!resultDate){\r\n\t\t\tstart = this.calculateEndDate(start, direction, \"day\");\r\n\t\t\tif(direction > 0){\r\n\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t\tstart = this.$gantt.date.add(start, 1, \"day\");\r\n\t\t\t\tstart = new Date(start.valueOf() - 1);\r\n\t\t\t}\r\n\t\t\tworktimes = this._getWorkHours(start);\r\n\t\t\tresultDate = this._findClosestTimeInDay(start, direction, worktimes);\r\n\t\t}\r\n\t\tif(direction < 0){\r\n\t\t\t// getClosestWorkTimePast adds one time unit to the result date after this\r\n\t\t\tresultDate = this.$gantt.date.add(resultDate, -1, unit);\r\n\t\t}\r\n\t\treturn resultDate;\r\n\t},\r\n\r\n\t_getClosestWorkTimeGeneric: function (date, unit, increment) {\r\n\t\tif(unit === \"hour\" || unit === \"minute\"){\r\n\t\t\treturn this._getClosestWorkMinute(date, unit, increment);\r\n\t\t}\r\n\r\n\t\tvar unitOrder = this._getUnitOrder(unit),\r\n\t\t\tbiggerTimeUnit = this.units[unitOrder - 1];\r\n\r\n\t\tvar result = date;\r\n\r\n\t\t// be extra sure we won't fall into infinite loop, 3k seems big enough\r\n\t\tvar maximumLoop = 3000,\r\n\t\t\tcount = 0;\r\n\r\n\t\twhile (!this._isWorkTime(result, unit)) {\r\n\t\t\tif (biggerTimeUnit && !this._isWorkTime(result, biggerTimeUnit)) {\r\n\t\t\t\t// if we look for closest work hour and detect a week-end - first find the closest work day,\r\n\t\t\t\t// and continue iterations after that\r\n\t\t\t\tif (increment > 0) {\r\n\t\t\t\t\tresult = this._getClosestWorkTimeFuture(result, biggerTimeUnit);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult = this._getClosestWorkTimePast(result, biggerTimeUnit);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._isWorkTime(result, unit)) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcount++;\r\n\t\t\tif (count > maximumLoop) {\r\n\t\t\t\tthis.$gantt.assert(false, \"Invalid working time check\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tvar tzOffset = result.getTimezoneOffset();\r\n\t\t\tresult = this.$gantt.date.add(result, increment, unit);\r\n\r\n\t\t\tresult = this.$gantt._correct_dst_change(result, tzOffset, increment, unit);\r\n\t\t\tif (this.$gantt.date[unit + '_start']) {\r\n\t\t\t\tresult = this.$gantt.date[unit + '_start'](result);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Check whether this calendar has working time. Calendar has working time only if there are regular working days of week\r\n\t *\r\n\t */\r\n\thasWorkTime: function () {\r\n\t\tvar worktime = this.getConfig();\r\n\t\tvar dates = worktime.dates;\r\n\r\n\t\tvar daysOfWeek = [0, 1, 2, 3, 4, 5, 6];\r\n\t\tvar exceptions = [];\r\n\t\tfor(var i in worktime.dates){\r\n\t\t\tif(Number(i) > 6){\r\n\t\t\t\texceptions.push(Number(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar hasRegularHours = this._checkWorkHours(worktime.hours);\r\n\r\n\t\tvar result = false;\r\n\t\tdaysOfWeek.forEach((function(day){\r\n\t\t\tif(result){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar dayConfig = dates[day];\r\n\t\t\tif(dayConfig === true){\r\n\t\t\t\t// workday uses global hours\r\n\t\t\t\tresult = hasRegularHours;\r\n\t\t\t}else if(Array.isArray(dayConfig)){\r\n\t\t\t\t// workday uses custom hours\r\n\t\t\t\tresult = this._checkWorkHours(dayConfig);\r\n\t\t\t}\r\n\t\t}).bind(this));\r\n\r\n\t\treturn result;\r\n\r\n\t},\r\n\r\n\t_checkWorkHours: function(hoursArray) {\r\n\t\tif (hoursArray.length === 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tvar result = false;\r\n\t\tfor (var i = 0; i < hoursArray.length; i += 2) {\r\n\t\t\tif (hoursArray[i] !== hoursArray[i + 1]) {\r\n\t\t\t\tresult = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t_isMinutePrecision: function (date) {\r\n\t\tlet minutePrecision = false;\r\n\t\tthis._getWorkHours(date).forEach(function(interval){\r\n\t\t\tif (interval.startMinute % 60 || interval.endMinute % 60){\r\n\t\t\t\tminutePrecision = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn minutePrecision;\r\n\t}\r\n};\r\n\r\nexport default CalendarWorkTimeStrategy;","import { IWorkUnitCache } from \"./workunit_cache_interface\";\r\nimport { WorkUnitsMapCache } from \"./workunit_map_cache\";\r\nimport { WorkUnitsObjectCache } from \"./workunit_object_cache\";\r\nexport { LargerUnitsCache } from \"./larger_units_helper\";\r\n\r\nexport function createCacheObject(): IWorkUnitCache {\r\n\r\n\t// worktime hash is on the hot path,\r\n\t// Map seems to work faster than plain array, use it whenever possible\r\n\tif (typeof Map !== \"undefined\") {\r\n\t\treturn new WorkUnitsMapCache();\r\n\t} else {\r\n\t\treturn new WorkUnitsObjectCache();\r\n\t}\r\n}\r\n","export default {\r\n\tisLegacyResourceCalendarFormat: function(resourceCalendarsProperty){\r\n\t\t// modern format:\r\n\t\t//gantt.config.resource_calendars = {\r\n\t\t//\tresourceId: calendarId,\r\n\t\t//\tresourceId: calendarId,\r\n\t\t//\tresourceId: calendarId\r\n\t\t//\t};\r\n\t\t\r\n\t\t// legacy format:\r\n\t\t// gantt.config.resource_calendars = {\r\n\t\t//\t\"resourceProperty\": {\r\n\t\t//\t\tresourceId: calendarId,\r\n\t\t//\t\tresourceId: calendarId,\r\n\t\t//\t\tresourceId: calendarId\r\n\t\t//\t\t}\r\n\t\t//\t};\r\n\r\n\t\tif(!resourceCalendarsProperty){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor(var i in resourceCalendarsProperty){\r\n\t\t\tif(resourceCalendarsProperty[i] && typeof resourceCalendarsProperty[i] === \"object\"){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\tgetResourceProperty: function(config){\r\n\t\tvar resourceCalendarsConfig = config.resource_calendars;\r\n\t\tvar propertyName = config.resource_property;\r\n\t\tif(this.isLegacyResourceCalendarFormat(resourceCalendarsConfig)){\r\n\t\t\tfor(var i in config){\r\n\t\t\t\tpropertyName = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn propertyName;\r\n\t},\r\n\tgetCalendarIdFromLegacyConfig: function(task, config){\r\n\t\tif (config) {\r\n\t\t\tfor (var field in config) {\r\n\t\t\t\tvar resource = config[field];\r\n\t\t\t\tif (task[field]) {\r\n\t\t\t\t\tvar calendarId = resource[task[field]];\r\n\t\t\t\t\tif (calendarId) {\r\n\t\t\t\t\t\treturn calendarId;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n};","import * as utils from \"../../utils/utils\";\r\nimport createArgumentsHelper from \"./calendar_arguments_helper\";\r\nimport CalendarMergeHelper from \"./strategy/work_calendar_merger\";\r\nimport CalendarWorkTimeStrategy from \"./strategy/calendar_strategy\";\r\nimport legacyResourceCalendarConfig from \"./legacy_resource_config\";\r\nimport dynamicResourceCalendarsFactory from \"./dynamic_resource_calendars\";\r\n\r\nconst dynamicResourceCalendars = dynamicResourceCalendarsFactory();\r\n\r\nfunction CalendarManager (gantt){\r\n\tthis.$gantt = gantt;\r\n\tthis._calendars = {};\r\n\tthis._legacyConfig = undefined;\r\n\tthis.$gantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(this.$gantt.config.resource_calendars){\r\n\t\t\tthis._isLegacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(this.$gantt.config.resource_calendars);\r\n\t\t}\r\n\t}.bind(this));\r\n\r\n\tthis.$gantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tthis.createDefaultCalendars();\r\n\t}.bind(this));\r\n\tthis.$gantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\t\tthis.createDefaultCalendars();\r\n\t}.bind(this));\r\n}\r\n\r\nCalendarManager.prototype = {\r\n\t_calendars: {},\r\n\t_convertWorkTimeSettings: function (settings) {\r\n\t\tvar days = settings.days;\r\n\t\tif (days && !settings.dates) {\r\n\t\t\tsettings.dates = settings.dates || {};\r\n\t\t\tfor (var i = 0; i < days.length; i++) {\r\n\t\t\t\tsettings.dates[i] = days[i];\r\n\t\t\t\tif (!(days[i] instanceof Array)) {\r\n\t\t\t\t\tsettings.dates[i] = !!days[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete settings.days;\r\n\t\treturn settings;\r\n\t},\r\n\tmergeCalendars: function(){\r\n\t\tvar calendars = [];\r\n\t\tvar args = arguments;\r\n\t\tif(Array.isArray(args[0])){\r\n\t\t\tcalendars = args[0].slice();\r\n\t\t}else{\r\n\t\t\tfor(var i = 0; i < arguments.length; i++){\r\n\t\t\t\tcalendars.push(arguments[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar mergeHelper = new CalendarMergeHelper();\r\n\r\n\t\tvar result;\r\n\t\tcalendars.forEach(function(calendar){\r\n\t\t\tif(!result){\r\n\t\t\t\tresult = calendar;\r\n\t\t\t} else{\r\n\t\t\t\tresult = this._createCalendarFromConfig(mergeHelper.merge(result, calendar));\r\n\t\t\t}\r\n\r\n\t\t}.bind(this));\r\n\t\treturn this.createCalendar(result);\r\n\t},\r\n\r\n\t_createCalendarFromConfig: function(config){\r\n\t\tvar apiCore = new CalendarWorkTimeStrategy(this.$gantt, createArgumentsHelper(this.$gantt));\r\n\t\tapiCore.id = String(utils.uid());\r\n\r\n\t\tvar preparedConfig = this._convertWorkTimeSettings(config);\r\n\t\tif(preparedConfig.customWeeks){\r\n\t\t\tfor(var i in preparedConfig.customWeeks){\r\n\t\t\t\tpreparedConfig.customWeeks[i] = this._convertWorkTimeSettings(preparedConfig.customWeeks[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tapiCore._setConfig(preparedConfig);\r\n\r\n\t\treturn apiCore;\r\n\t},\r\n\r\n\tcreateCalendar: function (parentCalendar) {\r\n\t\tvar settings;\r\n\r\n\t\tif (!parentCalendar) {\r\n\t\t\tparentCalendar = {};\r\n\t\t}\r\n\r\n\t\tif (parentCalendar.getConfig){\r\n\t\t\tsettings = utils.copy(parentCalendar.getConfig());\r\n\t\t} else if (parentCalendar.worktime) {\r\n\t\t\tsettings = utils.copy(parentCalendar.worktime);\r\n\t\t} else {\r\n\t\t\tsettings = utils.copy(parentCalendar);\r\n\t\t}\r\n\r\n\t\tvar defaults = utils.copy(this.defaults.fulltime.worktime);\r\n\t\tutils.mixin(settings, defaults);\r\n\r\n\t\treturn this._createCalendarFromConfig(settings);\r\n\t},\r\n\r\n\tgetCalendar: function (id) {\r\n\t\tid = id || \"global\";\r\n\t\tvar calendar = this._calendars[id];\r\n\t\tif(!calendar){\r\n\t\t\tthis.createDefaultCalendars();\r\n\t\t\tcalendar = this._calendars[id];\r\n\t\t}\r\n\r\n\t\treturn calendar;\r\n\t},\r\n\r\n\tgetCalendars: function () {\r\n\t\tvar res = [];\r\n\t\tfor (var i in this._calendars) {\r\n\t\t\tres.push(this.getCalendar(i));\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_getOwnCalendar: function(task){\r\n\t\tvar config = this.$gantt.config;\r\n\t\tif (task[config.calendar_property]) {\r\n\t\t\treturn this.getCalendar(task[config.calendar_property]);\r\n\t\t}\r\n\r\n\t\tif (config.resource_calendars) {\r\n\t\t\tvar calendar;\r\n\t\t\tvar calendarId;\r\n\t\t\tvar resourceProperty;\r\n\t\t\tif(this._legacyConfig === false){\r\n\t\t\t\tresourceProperty = config.resource_property;\r\n\t\t\t}else{\r\n\t\t\t\tresourceProperty = legacyResourceCalendarConfig.getResourceProperty(config);\r\n\t\t\t}\r\n\t\t\tif(Array.isArray(task[resourceProperty])){\r\n\t\t\t\t// if multiple resources are attached to the task - merge their calendars\r\n\t\t\t\tif(config.dynamic_resource_calendars){\r\n\t\t\t\t\tcalendarId = dynamicResourceCalendars.getCalendarIdFromMultipleResources(task[resourceProperty], this);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this._legacyConfig === undefined){\r\n\t\t\t\t\tthis._legacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(config.resource_calendars);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this._legacyConfig){\r\n\t\t\t\t\tvar calendarId = legacyResourceCalendarConfig.getCalendarIdFromLegacyConfig(task, config.resource_calendars);\r\n\t\t\t\t}else if(resourceProperty && task[resourceProperty] && config.resource_calendars[task[resourceProperty]]){\r\n\t\t\t\t\tvar calendar = this.getResourceCalendar(task[resourceProperty]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(calendarId){\r\n\t\t\t\tcalendar = this.getCalendar(calendarId);\r\n\t\t\t}\r\n\r\n\t\t\tif(calendar){\r\n\t\t\t\treturn calendar;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns calendar assigned to the specified resource.\r\n\t * Returns the global calendar if no custom calendar is associated with the resource.\r\n\t * @param {(string|number|Object)} resource - resource object or resource id\r\n\t * @returns {object} Calendar object\r\n\t */\r\n\tgetResourceCalendar: function(resource) {\r\n\t\tif (resource === null || resource === undefined) {\r\n\t\t\treturn this.getCalendar();\r\n\t\t}\r\n\r\n\t\tvar resourceId = null;\r\n\t\t// if task id is provided\r\n\t\tif((typeof resource === \"number\" || typeof resource === \"string\")){\r\n\t\t\tresourceId = resource;\r\n\t\t}else{\r\n\t\t\tresourceId = resource.id || resource.key;\r\n\t\t}\r\n\r\n\t\tvar config = this.$gantt.config;\r\n\t\tvar calendarsConfig = config.resource_calendars;\r\n\t\tvar calendarId = null;\r\n\t\tif (calendarsConfig) {\r\n\t\t\tif(this._legacyConfig === undefined){\r\n\t\t\t\tthis._legacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(config.resource_calendars);\r\n\t\t\t}\r\n\r\n\t\t\tif(this._legacyConfig){\r\n\t\t\t\tfor(var field in calendarsConfig){\r\n\t\t\t\t\tif(calendarsConfig[field][resourceId]){\r\n\t\t\t\t\t\tcalendarId = calendarsConfig[field][resourceId];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar calendarId = calendarsConfig[resourceId];\r\n\t\t\t}\r\n\r\n\t\t\tif(calendarId){\r\n\t\t\t\treturn this.getCalendar(calendarId);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn this.getCalendar();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the calendar assigned to a task.\r\n\t * - Returns a calendar assigned via task[gantt.config.calendar_property] if specified.\r\n\t * - Returns a calendar assigned to the task resource if specified.\r\n\t * - Returns the global calendar otherwise.\r\n\t * @param {(string|number|Object)} task - task object or task id\r\n\t * @returns {object} Calendar object\r\n\t */\r\n\tgetTaskCalendar: function (task) {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar taskObject;\r\n\t\tif (task === null || task === undefined) {\r\n\t\t\treturn this.getCalendar();\r\n\t\t}\r\n\r\n\t\t// if task id is provided\r\n\t\tif((typeof task === \"number\" || typeof task === \"string\") && gantt.isTaskExists(task)){\r\n\t\t\ttaskObject = gantt.getTask(task);\r\n\t\t}else{\r\n\t\t\ttaskObject = task;\r\n\t\t}\r\n\r\n\t\tif(!taskObject){\r\n\t\t\treturn this.getCalendar();\r\n\t\t}\r\n\r\n\t\tvar calendar = this._getOwnCalendar(taskObject);\r\n\t\tvar groupMode = !!gantt.getState().group_mode;\r\n\r\n\t\tif (!calendar && gantt.config.inherit_calendar && gantt.isTaskExists(taskObject.parent)){\r\n\t\t\t// GS-1579 group mode overrides tree hierarchy, iterate using `.parent` property, instead of using eachParent iterator\r\n\t\t\tvar currentTask = taskObject;\r\n\t\t\twhile(gantt.isTaskExists(currentTask.parent)){\r\n\t\t\t\tcurrentTask = gantt.getTask(currentTask.parent);\r\n\t\t\t\tif(gantt.isSummaryTask(currentTask)){\r\n\t\t\t\t\tcalendar = this._getOwnCalendar(currentTask);\r\n\t\t\t\t\tif(calendar){\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(groupMode && !calendar){\r\n\t\t\t\t// if group mode and inherit_calendars is enabled - preserve previously applied parent calendar\r\n\t\t\t\t// we may need it when groupBy parses grouped data, old parent may be not loaded yet\r\n\t\t\t\tif(task.$effective_calendar){\r\n\t\t\t\t\tcalendar = this.getCalendar(task.$effective_calendar);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn calendar || this.getCalendar();\r\n\t},\r\n\r\n\taddCalendar: function(calendar) { // puts new calendar to Global Storage - gantt.calendarManager._calendars {}\r\n\t\tif (!(this.isCalendar(calendar))) {\r\n\t\t\tvar id = calendar.id;\r\n\t\t\tcalendar = this.createCalendar(calendar);\r\n\t\t\tcalendar.id = id;\r\n\t\t}\r\n\r\n\t\t// validate/check if empty calendar\r\n\t\tif (!calendar._tryChangeCalendarSettings(function () {\r\n\t\t\t})) {\r\n\r\n\t\t\tthis.$gantt.callEvent(\"onCalendarError\", [{message: \"Invalid calendar settings, no worktime available\"}, calendar]);\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\tvar config = this.$gantt.config;\r\n\r\n\t\t\tcalendar.id = calendar.id || utils.uid();\r\n\t\t\tthis._calendars[calendar.id] = calendar;\r\n\t\t\tif (!config.worktimes)\r\n\t\t\t\tconfig.worktimes = {};\r\n\t\t\tconfig.worktimes[calendar.id] = calendar.getConfig();\r\n\t\t\treturn calendar.id;\r\n\t\t}\r\n\t},\r\n\r\n\tdeleteCalendar: function (calendar) {\r\n\t\tvar config = this.$gantt.config;\r\n\t\tif (!calendar) return false;\r\n\t\tif (this._calendars[calendar]) {\r\n\t\t\tdelete this._calendars[calendar];\r\n\t\t\tif (config.worktimes && config.worktimes[calendar])\r\n\t\t\t\tdelete config.worktimes[calendar];\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n\r\n\trestoreConfigCalendars: function (configs) {\r\n\t\tfor (var i in configs) {\r\n\t\t\tif (this._calendars[i])\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tvar settings = configs[i];\r\n\t\t\tvar calendar = this.createCalendar(settings);\r\n\t\t\tcalendar.id = i;\r\n\t\t\tthis.addCalendar(calendar);\r\n\t\t}\r\n\t},\r\n\r\n\tdefaults: {\r\n\t\tglobal: {\r\n\t\t\tid: \"global\",\r\n\t\t\tworktime: {\r\n\t\t\t\thours: [8, 12, 13, 17],\r\n\t\t\t\tdays: [0, 1, 1, 1, 1, 1, 0]\r\n\t\t\t}\r\n\t\t},\r\n\t\tfulltime: {\r\n\t\t\tid: \"fulltime\",\r\n\t\t\tworktime: {\r\n\t\t\t\thours: [0, 24],\r\n\t\t\t\tdays: [1, 1, 1, 1, 1, 1, 1]\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcreateDefaultCalendars: function () {\r\n\t\tvar config = this.$gantt.config;\r\n\t\tthis.restoreConfigCalendars(this.defaults);\r\n\t\tthis.restoreConfigCalendars(config.worktimes);\r\n\t},\r\n\r\n\tisCalendar: function(possibleCalendar) {\r\n\t\t// because we don't have any way to check without dependency to CalendarWorkTimeStrategy\r\n\t\tvar props = [\r\n\t\t\tpossibleCalendar.isWorkTime,\r\n\t\t\tpossibleCalendar.setWorkTime,\r\n\t\t\tpossibleCalendar.getWorkHours,\r\n\t\t\tpossibleCalendar.unsetWorkTime,\r\n\t\t\tpossibleCalendar.getClosestWorkTime,\r\n\t\t\tpossibleCalendar.calculateDuration,\r\n\t\t\tpossibleCalendar.hasDuration,\r\n\t\t\tpossibleCalendar.calculateEndDate\r\n\t\t];\r\n\t\treturn props.every(function(entry) {\r\n\t\t\treturn entry instanceof Function;\r\n\t\t});\r\n\t}\r\n};\r\n\r\nexport default CalendarManager;","export default function() {\r\n\tfunction getResourcesCalendarKey(resourceAssignments){\r\n\t\treturn resourceAssignments.map(function(res){\r\n\t\t\tif(res && res.resource_id){\r\n\t\t\t\treturn res.resource_id;\r\n\t\t\t} else {\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t}).sort().join(\"-\");\r\n\t}\r\n\r\n\tvar dynamicCalendars = {};\r\n\r\n\tfunction mergeResourceCalendars(resourceAssignments, manager){\r\n\t\treturn manager.mergeCalendars(resourceAssignments.map(function(assignment){\r\n\t\t\tvar resourceId = (assignment && assignment.resource_id) ? assignment.resource_id : assignment;\r\n\t\t\treturn manager.getResourceCalendar(resourceId);\r\n\t\t}));\r\n\t}\r\n\tfunction getCalendarIdFromMultipleResources(resourceAssignments, manager){\r\n\t\tvar key = getResourcesCalendarKey(resourceAssignments);\r\n\t\tif(!resourceAssignments.length){\r\n\t\t\treturn null;\r\n\t\t}else if(resourceAssignments.length === 1){\r\n\t\t\treturn manager.getResourceCalendar(key).id;\r\n\t\t}else if (dynamicCalendars[key]){\r\n\t\t\treturn dynamicCalendars[key].id;\r\n\t\t} else {\r\n\t\t\tvar tempCalendar = mergeResourceCalendars(resourceAssignments, manager);\r\n\r\n\t\t\tdynamicCalendars[key] = tempCalendar;\r\n\t\t\treturn manager.addCalendar(tempCalendar);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetCalendarIdFromMultipleResources: getCalendarIdFromMultipleResources\r\n\t};\r\n};","function CalendarDisabledTimeStrategy(gantt, argumentsHelper){\r\n\tthis.argumentsHelper = argumentsHelper;\r\n\tthis.$gantt = gantt;\r\n}\r\n\r\nCalendarDisabledTimeStrategy.prototype = {\r\n\tgetWorkHours: function () {\r\n\t\treturn [0, 24];\r\n\t},\r\n\tsetWorkTime: function () {\r\n\t\treturn true;\r\n\t},\r\n\tunsetWorkTime: function () {\r\n\t\treturn true;\r\n\t},\r\n\tisWorkTime: function () {\r\n\t\treturn true;\r\n\t},\r\n\tgetClosestWorkTime: function (config) {\r\n\t\tvar config = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\t\treturn config.date;\r\n\t},\r\n\r\n\tcalculateDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\r\n\t\tvar from = config.start_date,\r\n\t\t\tto = config.end_date,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\treturn this._calculateDuration(from, to, unit, step);\r\n\t},\r\n\t_calculateDuration: function (start, end, unit, step) {\r\n\t\tvar dateHelper = this.$gantt.date;\r\n\t\tvar fixedUnits = {\r\n\t\t\t\"week\": 1000 * 60 * 60 * 24 * 7,\r\n\t\t\t\"day\": 1000 * 60 * 60 * 24,\r\n\t\t\t\"hour\": 1000 * 60 * 60,\r\n\t\t\t\"minute\": 1000 * 60\r\n\t\t};\r\n\r\n\t\tvar res = 0;\r\n\t\tif (fixedUnits[unit]) {\r\n\t\t\tres = Math.round((end - start) / (step * fixedUnits[unit]));\r\n\t\t} else {\r\n\t\t\tvar from = new Date(start),\r\n\t\t\t\tto = new Date(end);\r\n\t\t\twhile (from.valueOf() < to.valueOf()) {\r\n\t\t\t\tres += 1;\r\n\t\t\t\tfrom = dateHelper.add(from, step, unit);\r\n\t\t\t}\r\n\r\n\t\t\tif (from.valueOf() != end.valueOf()) {\r\n\t\t\t\tres += (to - from) / (dateHelper.add(from, step, unit) - from);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Math.round(res);\r\n\t},\r\n\r\n\thasDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\r\n\t\tvar from = config.start_date,\r\n\t\t\tto = config.end_date,\r\n\t\t\tunit = config.unit;\r\n\r\n\t\tif (!unit) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfrom = new Date(from);\r\n\t\tto = new Date(to);\r\n\r\n\t\treturn (from.valueOf() < to.valueOf());\r\n\t},\r\n\r\n\thasWorkTime: function() {\r\n\t\treturn true;\r\n\t},\r\n\r\n\tequals: function(calendar) {\r\n\t\tif(!(calendar instanceof CalendarDisabledTimeStrategy)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\tcalculateEndDate: function () {\r\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar start = config.start_date,\r\n\t\t\tduration = config.duration,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\treturn this.$gantt.date.add(start, step * duration, unit);\r\n\t}\r\n};\r\n\r\nexport default CalendarDisabledTimeStrategy;","import createArgumentsHelper from \"./calendar_arguments_helper\";\r\nimport NoWorkTimeCalendar from \"./strategy/no_work_time\";\r\n\r\nfunction TimeCalculator(calendarManager){\r\n\r\n\tthis.$gantt = calendarManager.$gantt;\r\n\tthis.argumentsHelper = createArgumentsHelper(this.$gantt);\r\n\tthis.calendarManager = calendarManager;\r\n\tthis.$disabledCalendar = new NoWorkTimeCalendar(this.$gantt, this.argumentsHelper);\r\n}\r\n\r\nTimeCalculator.prototype = {\r\n\t_getCalendar: function (config) {\r\n\t\tvar calendar;\r\n\t\tif (!this.$gantt.config.work_time) {\r\n\t\t\tcalendar = this.$disabledCalendar;\r\n\t\t} else {\r\n\t\t\tvar manager = this.calendarManager;\r\n\t\t\tif (config.task) {\r\n\t\t\t\tcalendar = manager.getTaskCalendar(config.task);\r\n\t\t\t} else if (config.id) {\r\n\t\t\t\tcalendar = manager.getTaskCalendar(config);\r\n\t\t\t} else if (config.calendar) {\r\n\t\t\t\tcalendar = config.calendar;\r\n\t\t\t}\r\n\t\t\tif (!calendar) {\r\n\t\t\t\tcalendar = manager.getTaskCalendar();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn calendar;\r\n\t},\r\n\r\n\tgetWorkHours: function (config) {\r\n\t\tconfig = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\r\n\t\treturn calendar.getWorkHours(config.date);\r\n\t},\r\n\r\n\tsetWorkTime: function (config, calendar) {\r\n\t\tconfig = this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tif (!calendar)\r\n\t\t\tcalendar = this.calendarManager.getCalendar(); // Global\r\n\t\treturn calendar.setWorkTime(config);\r\n\t},\r\n\r\n\tunsetWorkTime: function (config, calendar) {\r\n\t\tconfig = this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tif (!calendar)\r\n\t\t\tcalendar = this.calendarManager.getCalendar(); // Global\r\n\t\treturn calendar.unsetWorkTime(config);\r\n\t},\r\n\tisWorkTime: function (date, unit, task, calendar) {\r\n\t\tvar config = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tcalendar = this._getCalendar(config);\r\n\t\treturn calendar.isWorkTime(config);\r\n\t},\r\n\tgetClosestWorkTime: function (config) {\r\n\t\tconfig = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\r\n\t\treturn calendar.getClosestWorkTime(config);\r\n\t},\r\n\r\n\tcalculateDuration: function () { // start_date_date, end_date, task\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\t\treturn calendar.calculateDuration(config);\r\n\t},\r\n\thasDuration: function () {\r\n\t\tvar config = this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\r\n\t\treturn calendar.hasDuration(config);\r\n\t},\r\n\tcalculateEndDate: function (config) { // start_date, duration, unit, task\r\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\t\treturn calendar.calculateEndDate(config);\r\n\t}\r\n};\r\n\r\nexport default TimeCalculator;\r\n\r\n","// TODO: rework public api for date methods\r\nimport * as utils from \"../../utils/utils\";\r\n\r\nvar createWorkTimeFacade = function(calendarManager, timeCalculator){\r\n\treturn {\r\n\t\tgetWorkHours: function (date) {\r\n\t\t\treturn timeCalculator.getWorkHours(date);\r\n\t\t},\r\n\r\n\t\tsetWorkTime: function (config) {\r\n\t\t\treturn timeCalculator.setWorkTime(config);\r\n\t\t},\r\n\r\n\t\tunsetWorkTime: function (config) {\r\n\t\t\ttimeCalculator.unsetWorkTime(config);\r\n\t\t},\r\n\r\n\t\tisWorkTime: function (date, unit, task) {\r\n\t\t\treturn timeCalculator.isWorkTime(date, unit, task);\r\n\t\t},\r\n\r\n\t\tgetClosestWorkTime: function (config) {\r\n\t\t\treturn timeCalculator.getClosestWorkTime(config);\r\n\t\t},\r\n\r\n\t\tcalculateDuration: function (start_date, end_date, task) {\r\n\t\t\treturn timeCalculator.calculateDuration(start_date, end_date, task);\r\n\t\t},\r\n\t\t_hasDuration: function (start_date, end_date, task) {\r\n\t\t\treturn timeCalculator.hasDuration(start_date, end_date, task);\r\n\t\t},\r\n\r\n\t\tcalculateEndDate: function (start, duration, unit, task) {\r\n\t\t\treturn timeCalculator.calculateEndDate(start, duration, unit, task);\r\n\t\t},\r\n\r\n\t\tmergeCalendars: utils.bind(calendarManager.mergeCalendars, calendarManager),\r\n\t\tcreateCalendar: utils.bind(calendarManager.createCalendar, calendarManager),\r\n\t\taddCalendar: utils.bind(calendarManager.addCalendar, calendarManager),\r\n\t\tgetCalendar: utils.bind(calendarManager.getCalendar, calendarManager),\r\n\t\tgetCalendars: utils.bind(calendarManager.getCalendars, calendarManager),\r\n\t\tgetResourceCalendar: utils.bind(calendarManager.getResourceCalendar, calendarManager),\r\n\t\tgetTaskCalendar: utils.bind(calendarManager.getTaskCalendar, calendarManager),\r\n\t\tdeleteCalendar: utils.bind(calendarManager.deleteCalendar, calendarManager)\r\n\t};\r\n};\r\n\r\n\r\nexport default { create: createWorkTimeFacade };","import * as helpers from \"../utils/helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\tgantt.isUnscheduledTask = function (task) {\r\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task =\"+task+\" of gantt.isUnscheduledTask. Task object was expected\");\r\n\t\treturn (!!task.unscheduled || !task.start_date);\r\n\t};\r\n\r\n\tgantt._isAllowedUnscheduledTask = function (task) {\r\n\t\treturn !!(task.unscheduled && gantt.config.show_unscheduled);\r\n\t};\r\n\r\n\tgantt._isTaskInTimelineLimits = function(task) {\r\n\t\tvar taskStart = task.start_date ? task.start_date.valueOf() : null;\r\n\t\tvar taskEnd = task.end_date ? task.end_date.valueOf() : null;\r\n\t\treturn !!(taskStart && taskEnd && taskStart <= this._max_date.valueOf() && taskEnd >= this._min_date.valueOf());\r\n\t};\r\n\tgantt.isTaskVisible = function (id) {\r\n\t\tif (!this.isTaskExists(id)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar task = this.getTask(id);\r\n\t\tif (!(this._isAllowedUnscheduledTask(task) || this._isTaskInTimelineLimits(task))) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn !!(this.getGlobalTaskIndex(id) >= 0);\r\n\t};\r\n\r\n\tgantt._getProjectEnd = function() {\r\n\t\tif(gantt.config.project_end){\r\n\t\t\treturn gantt.config.project_end;\r\n\t\t}else{\r\n\t\t\tvar tasks = gantt.getTaskByTime();\r\n\t\t\ttasks = tasks.sort(function (a, b) {\r\n\t\t\t\treturn +a.end_date > +b.end_date ? 1 : -1;\r\n\t\t\t});\r\n\t\t\treturn tasks.length ? tasks[tasks.length - 1].end_date : null;\r\n\t\t}\r\n\t};\r\n\tgantt._getProjectStart = function() {\r\n\t\tif (gantt.config.project_start) {\r\n\t\t\treturn gantt.config.project_start;\r\n\t\t}\r\n\r\n\t\t// use timeline start if project start is not specified\r\n\t\tif (gantt.config.start_date) {\r\n\t\t\treturn gantt.config.start_date;\r\n\t\t}\r\n\t\tif (gantt.getState().min_date) {\r\n\t\t\treturn gantt.getState().min_date;\r\n\t\t}\r\n\r\n\t\t// earliest task start if neither project start nor timeline are specified\r\n\t\tvar tasks = gantt.getTaskByTime();\r\n\t\ttasks = tasks.sort(function (a, b) {\r\n\t\t\treturn +a.start_date > +b.start_date ? 1 : -1;\r\n\t\t});\r\n\t\treturn tasks.length ? tasks[0].start_date : null;\r\n\t};\r\n\r\n\tvar getDefaultTaskDate = function (item, parent_id) {\r\n\t\tvar parentExists = parent_id && parent_id != gantt.config.root_id && gantt.isTaskExists(parent_id);\r\n\t\tvar parent = parentExists ? gantt.getTask(parent_id) : false,\r\n\t\t\tstartDate = null;\r\n\t\tif (parent) {\r\n\t\t\tif(gantt.config.schedule_from_end){\r\n\t\t\t\tstartDate = gantt.calculateEndDate({\r\n\t\t\t\t\tstart_date: parent.end_date,\r\n\t\t\t\t\tduration: - gantt.config.duration_step,\r\n\t\t\t\t\ttask:item\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tif(!parent.start_date){\r\n\t\t\t\t\treturn getDefaultTaskDate(parent, gantt.getParent(parent));\r\n\t\t\t\t}\r\n\t\t\t\tstartDate = parent.start_date;\r\n\t\t\t}\r\n\r\n\t\t} else if(gantt.config.schedule_from_end) {\r\n\t\t\tstartDate = gantt.calculateEndDate({\r\n\t\t\t\tstart_date: gantt._getProjectEnd(),\r\n\t\t\t\tduration: - gantt.config.duration_step,\r\n\t\t\t\ttask:item\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tconst first = gantt.getTaskByIndex(0);\r\n\t\t\tconst minDate = gantt.config.start_date || gantt.getState().min_date;\r\n\r\n\t\t\tif (first){\r\n\t\t\t\tif (first.start_date){\r\n\t\t\t\t\tstartDate = first.start_date;\r\n\t\t\t\t}\r\n\t\t\t\telse if (first.end_date){\r\n\t\t\t\t\tstartDate = gantt.calculateEndDate({\r\n\t\t\t\t\t\tstart_date: first.end_date,\r\n\t\t\t\t\t\tduration: -gantt.config.duration_step,\r\n\t\t\t\t\t\ttask:item\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tstartDate = minDate;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tstartDate = minDate;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.assert(startDate, \"Invalid dates\");\r\n\t\treturn new Date(startDate);\r\n\t};\r\n\r\n\tgantt._set_default_task_timing = function (task) {\r\n\t\ttask.start_date = task.start_date || getDefaultTaskDate(task, gantt.getParent(task));\r\n\t\ttask.duration = task.duration || gantt.config.duration_step;\r\n\t\ttask.end_date = task.end_date || gantt.calculateEndDate(task);\r\n\t};\r\n\r\n\tgantt.createTask = function (item, parent, index) {\r\n\t\titem = item || {};\r\n\r\n\t\tif (!gantt.defined(item.id))\r\n\t\t\titem.id = gantt.uid();\r\n\r\n\t\tif (!item.start_date) {\r\n\t\t\titem.start_date = getDefaultTaskDate(item, parent);\r\n\t\t}\r\n\t\tif (item.text === undefined) {\r\n\t\t\titem.text = gantt.locale.labels.new_task;\r\n\t\t}\r\n\t\tif (item.duration === undefined) {\r\n\t\t\titem.duration = 1;\r\n\t\t}\r\n\r\n\t\tif (this.isTaskExists(parent)) {\r\n\t\t\tthis.setParent(item, parent, true);\r\n\t\t\tvar parentObj = this.getTask(parent);\r\n\t\t\tparentObj.$open = true;\r\n\t\t}\r\n\r\n\t\tif (!this.callEvent(\"onTaskCreated\", [item])) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (this.config.details_on_create) {\r\n\t\t\t//GS-761: assert unique ID\r\n\t\t\tif (gantt.isTaskExists(item.id)){\r\n\t\t\t\tvar task = gantt.getTask(item.id);\r\n\t\t\t\tif (task.$index != item.$index) {\r\n\t\t\t\t\t// Someone may try to mistakenly add a task with the same ID, and most likely\r\n\t\t\t\t\t// use the string format for the dates. Gantt shouldn't break in this scenario\r\n\t\t\t\t\tif (item.start_date && typeof item.start_date === \"string\"){\r\n\t\t\t\t\t\titem.start_date = this.date.parseDate(item.start_date, \"parse_date\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.end_date && typeof item.end_date === \"string\"){\r\n\t\t\t\t\t\titem.end_date = this.date.parseDate(item.end_date, \"parse_date\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.$data.tasksStore.updateItem(item.id, item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\titem.$new = true;\r\n\t\t\t\tthis.silent(function(){\r\n\t\t\t\t\tgantt.$data.tasksStore.addItem(item, index);\r\n\t\t\t\t});\t\r\n\t\t\t}\r\n\t\t\tthis.selectTask(item.id);\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.showLightbox(item.id);\r\n\t\t} else {\r\n\t\t\tif (this.addTask(item, parent, index)) {\r\n\t\t\t\tthis.showTask(item.id);\r\n\t\t\t\tthis.selectTask(item.id);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn item.id;\r\n\t};\r\n\r\n\tgantt._update_flags = function (oldid, newid) {\r\n\t\t// TODO: need a proper way to update all possible flags\r\n\t\tvar store = gantt.$data.tasksStore;\r\n\t\tif (oldid === undefined) {\r\n\t\t\tthis._lightbox_id = null;\r\n\r\n\t\t\tstore.silent(function(){\r\n\t\t\t\tstore.unselect();\r\n\t\t\t});\r\n\t\t\t// GS-1522. If we have multiselect, unselect all previously selected tasks\r\n\t\t\tif (this.getSelectedTasks) {\r\n\t\t\t\tthis._multiselect.reset();\r\n\t\t\t}\r\n\r\n\t\t\tif (this._tasks_dnd && this._tasks_dnd.drag) {\r\n\t\t\t\tthis._tasks_dnd.drag.id = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (this._lightbox_id == oldid)\r\n\t\t\t\tthis._lightbox_id = newid;\r\n\r\n\t\t\t// TODO: probably can be removed\r\n\t\t\tif (store.getSelectedId() == oldid) {\r\n\t\t\t\tstore.silent(function(){\r\n\t\t\t\t\tstore.unselect(oldid);\r\n\t\t\t\t\tstore.select(newid);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (this._tasks_dnd && this._tasks_dnd.drag && this._tasks_dnd.drag.id == oldid) {\r\n\t\t\t\tthis._tasks_dnd.drag.id = newid;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvar getTaskTimingMode = function (task, force) {\r\n\t\tvar task_type = gantt.getTaskType(task.type);\r\n\r\n\t\tvar state = {\r\n\t\t\ttype: task_type,\r\n\t\t\t$no_start: false,\r\n\t\t\t$no_end: false,\r\n\t\t\tscheduled_summary: false\r\n\t\t};\r\n\r\n\t\tif(task_type === gantt.config.types.project && task.auto_scheduling === false){\r\n\t\t\tstate.scheduled_summary = true;\r\n\t\t}\r\n\r\n\t\tif (!force && task_type == task.$rendered_type) {\r\n\t\t\tstate.$no_start = task.$no_start;\r\n\t\t\tstate.$no_end = task.$no_end;\r\n\t\t\treturn state;\r\n\t\t}\r\n\r\n\t\tif (task_type == gantt.config.types.project) {\r\n\t\t\t//project duration is always defined by children duration\r\n\t\t\tstate.$no_end = state.$no_start = true;\r\n\t\t} else if (task_type != gantt.config.types.milestone) {\r\n\t\t\t//tasks can have fixed duration, children duration(as projects), or one date fixed, and other defined by nested items\r\n\t\t\tstate.$no_end = !(task.end_date || task.duration);\r\n\t\t\tstate.$no_start = !task.start_date;\r\n\r\n\t\t\tif (gantt._isAllowedUnscheduledTask(task)) {\r\n\t\t\t\tstate.$no_end = state.$no_start = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn state;\r\n\t};\r\n\r\n\tgantt._init_task_timing = function (task) {\r\n\t\tvar task_mode = getTaskTimingMode(task, true);\r\n\r\n\t\tvar dirty = task.$rendered_type != task_mode.type;\r\n\r\n\t\tvar task_type = task_mode.type;\r\n\r\n\t\tif (dirty) {\r\n\t\t\ttask.$no_start = task_mode.$no_start;\r\n\t\t\ttask.$no_end = task_mode.$no_end;\r\n\t\t\ttask.$rendered_type = task_mode.type;\r\n\t\t}\r\n\r\n\t\tif (dirty && task_type != this.config.types.milestone) {\r\n\t\t\tif (task_type == this.config.types.project) {\r\n\t\t\t\t//project duration is always defined by children duration\r\n\t\t\t\tthis._set_default_task_timing(task);\r\n\t\t\t\ttask.$calculate_duration = false;// do not recalculate duration below\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (task_type == this.config.types.milestone) {\r\n\t\t\ttask.end_date = task.start_date;\r\n\t\t}\r\n\t\tif (task.start_date && task.end_date && task.$calculate_duration !== false) {\r\n\t\t\ttask.duration = this.calculateDuration(task);\r\n\t\t}\r\n\r\n\t\tif(!task.$calculate_duration){\r\n\t\t\ttask.$calculate_duration = true;\r\n\t\t}\r\n\r\n\t\tif (!task.end_date) {\r\n\t\t\ttask.end_date = task.start_date;\r\n\t\t}\r\n\r\n\t\ttask.duration = task.duration || 0;\r\n\t\t// GS-1145. We should let tasks to have 0 duration if user wants it\r\n\t\tif (this.config.min_duration === 0 && task.duration === 0){\r\n\t\t\ttask.$no_end = false;\r\n\t\t}\r\n\r\n\t\t// work calendar of task has changed\r\n\t\tvar effectiveCalendar = this.getTaskCalendar(task);\r\n\t\tif(task.$effective_calendar && task.$effective_calendar !== effectiveCalendar.id){\r\n\t\t\tupdateTaskTiming(task);\r\n\t\t\tif(this.config.inherit_calendar && this.isSummaryTask(task)){\r\n\t\t\t\tthis.eachTask(function(child){\r\n\t\t\t\t\tupdateTaskTiming(child);\r\n\t\t\t\t}, task.id);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttask.$effective_calendar = effectiveCalendar.id;\r\n\t};\r\n\r\n\tfunction updateTaskTiming(task) {\r\n\t\ttask.$effective_calendar = gantt.getTaskCalendar(task).id;\r\n\t\ttask.start_date = gantt.getClosestWorkTime({\r\n\t\t\tdir: \"future\",\r\n\t\t\tdate: task.start_date,\r\n\t\t\tunit: gantt.config.duration_unit,\r\n\t\t\ttask: task\r\n\t\t});\r\n\t\ttask.end_date = gantt.calculateEndDate(task);\r\n\t}\r\n\r\n\tgantt.isSummaryTask = function (task) {\r\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task =\"+task+\" of gantt.isSummaryTask. Task object was expected\");\r\n\r\n\t\tvar mode = getTaskTimingMode(task);\r\n\r\n\t\treturn !!(mode.$no_end || mode.$no_start);\r\n\t};\r\n\r\n// downward calculation of project duration\r\n\tgantt.resetProjectDates = function (task) {\r\n\t\tvar taskMode = getTaskTimingMode(task);\r\n\t\tif (taskMode.$no_end || taskMode.$no_start) {\r\n\t\t\tvar info = getSubtaskInfo(task.id);\r\n\t\t\tassignProjectDates.call(this, task, taskMode, info.start_date, info.end_date);\r\n\t\t\ttask.$rollup = info.rollup;\r\n\t\t}\r\n\t};\r\n\r\n\tfunction assignProjectDates(task, taskTiming, from, to) {\r\n\r\n\t\tconst summaryDateFields = {\r\n\t\t\tstart: \"start_date\",\r\n\t\t\tend: \"end_date\"\r\n\t\t};\r\n\t\tconst manuallyScheduledSummaryDateFields = {\r\n\t\t\tstart: \"$auto_start_date\",\r\n\t\t\tend: \"$auto_end_date\"\r\n\t\t};\r\n\r\n\t\tlet dateFields;\r\n\t\tif(task.type === gantt.config.types.project && task.auto_scheduling === false){\r\n\t\t\tdateFields = manuallyScheduledSummaryDateFields;\r\n\t\t}else{\r\n\t\t\tdateFields = summaryDateFields;\r\n\t\t}\r\n\r\n\t\tif (taskTiming.$no_start) {\r\n\t\t\tif (from) {\r\n\t\t\t\ttask[dateFields.start] = new Date(from);\r\n\t\t\t} else {\r\n\t\t\t\ttask[dateFields.start] = getDefaultTaskDate(task, this.getParent(task));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (taskTiming.$no_end) {\r\n\t\t\tif (to) {\r\n\t\t\t\ttask[dateFields.end] = new Date(to);\r\n\t\t\t} else {\r\n\t\t\t\ttask[dateFields.end] = this.calculateEndDate({\r\n\t\t\t\t\tstart_date: task[dateFields.start],\r\n\t\t\t\t\tduration: this.config.duration_step,\r\n\t\t\t\t\ttask: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (taskTiming.$no_start || taskTiming.$no_end) {\r\n\t\t\tthis._init_task_timing(task);\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.getSubtaskDuration = function (taskId) {\r\n\t\tvar res = 0,\r\n\t\t\troot = taskId !== undefined ? taskId : gantt.config.root_id;\r\n\r\n\t\tthis.eachTask(function (child) {\r\n\t\t\tif (this.getTaskType(child.type) == gantt.config.types.project || this.isUnscheduledTask(child))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tres += child.duration;\r\n\t\t}, root);\r\n\r\n\t\treturn res;\r\n\t};\r\n\r\n\tfunction getSubtaskInfo (taskId){\r\n\t\tvar min = null,\r\n\t\t\tmax = null,\r\n\t\t\troot = taskId !== undefined ? taskId : gantt.config.root_id,\r\n\t\t\trollup = [];\r\n\r\n\t\tgantt.eachTask(function (child) {\r\n\t\t\tconst isScheduledSummary = (gantt.getTaskType(child.type) == gantt.config.types.project && (child.auto_scheduling === false));\r\n\t\t\tif ((gantt.getTaskType(child.type) == gantt.config.types.project && !isScheduledSummary) || gantt.isUnscheduledTask(child))\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\t\tif(child.rollup){\r\n\t\t\t\trollup.push(child.id);\r\n\t\t\t}\r\n\r\n\t\t\tif ((child.start_date && (!child.$no_start || isScheduledSummary)) && (!min || min > child.start_date.valueOf()))\r\n\t\t\t\tmin = child.start_date.valueOf();\r\n\t\t\tif ((child.end_date && (!child.$no_end || isScheduledSummary)) && (!max || max < child.end_date.valueOf()))\r\n\t\t\t\tmax = child.end_date.valueOf();\r\n\t\t}, root);\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: min ? new Date(min) : null,\r\n\t\t\tend_date: max ? new Date(max) : null,\r\n\t\t\trollup: rollup\r\n\t\t};\r\n\t}\r\n\r\n\tgantt.getSubtaskDates = function (task_id) {\r\n\t\tvar info = getSubtaskInfo(task_id);\r\n\t\treturn {\r\n\t\t\tstart_date: info.start_date,\r\n\t\t\tend_date: info.end_date\r\n\t\t};\r\n\t};\r\n\r\n\r\n// upward calculation of project duration\r\n\tgantt._update_parents = function (taskId, silent, updateAll) {\r\n\t\tif (!taskId) return;\r\n\r\n\t\tvar task = this.getTask(taskId);\r\n\t\tif(task.rollup){\r\n\t\t\tupdateAll = true;\r\n\t\t}\r\n\t\tvar pid = this.getParent(task);\r\n\r\n\t\tvar taskTiming = getTaskTimingMode(task);\r\n\r\n\t\tvar has_changed = true;\r\n\t\t// GS-761 the dates check is necessary for adding empty tasks: gantt.addTask({id:\"2\"})\r\n\t\tif (updateAll || (task.start_date && task.end_date && (taskTiming.$no_start || taskTiming.$no_end))) {\r\n\r\n\t\t\tconst startDateField = task.$auto_start_date ? \"$auto_start_date\" : \"start_date\";\r\n\t\t\tconst endDateField = task.$auto_end_date ? \"$auto_end_date\" : \"end_date\";\r\n\r\n\t\t\tvar oldStart = task[startDateField].valueOf(),\r\n\t\t\t\toldEnd = task[endDateField].valueOf();\r\n\r\n\t\t\tgantt.resetProjectDates(task);\r\n\r\n\t\t\t// not refresh parent projects if dates hasn't changed\r\n\t\t\tif (!updateAll && oldStart == task[startDateField].valueOf() && oldEnd == task[endDateField].valueOf()) {\r\n\t\t\t\thas_changed = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (has_changed && !silent) {\r\n\t\t\t\tthis.refreshTask(task.id, true);\r\n\t\t\t}\r\n\r\n\t\t\tif(taskTiming.scheduled_summary){\r\n\t\t\t\thas_changed = true;//recalculate upwards from scheduled summaries\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (has_changed && pid && this.isTaskExists(pid)) {\r\n\t\t\tthis._update_parents(pid, silent, updateAll);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.roundDate = function (config) {\r\n\t\tvar scale = gantt.getScale();\r\n\r\n\t\tif (helpers.isDate(config)) {\r\n\t\t\tconfig = {\r\n\t\t\t\tdate: config,\r\n\t\t\t\tunit: scale ? scale.unit : gantt.config.duration_unit,\r\n\t\t\t\tstep: scale ? scale.step : gantt.config.duration_step\r\n\t\t\t};\r\n\t\t}\r\n\t\tvar date = config.date,\r\n\t\t\tsteps = config.step,\r\n\t\t\tunit = config.unit;\r\n\r\n\t\tif(!scale){\r\n\t\t\treturn date;\r\n\t\t}\r\n\r\n\t\tvar upper, lower, colIndex;\r\n\t\tif (unit == scale.unit && steps == scale.step &&\r\n\t\t\t+date >= +scale.min_date && +date <= +scale.max_date) {\r\n\t\t\t//find date in time scale config\r\n\t\t\tcolIndex = Math.floor(gantt.columnIndexByDate(date));\r\n\r\n\t\t\tif (!scale.trace_x[colIndex]) {\r\n\t\t\t\tcolIndex -= 1;// end of time scale\r\n\t\t\t\tif(scale.rtl){\r\n\t\t\t\t\tcolIndex = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlower = new Date(scale.trace_x[colIndex]);\r\n\t\t\tupper = gantt.date.add(lower, steps, unit);\r\n\t\t} else {\r\n\t\t\tcolIndex = Math.floor(gantt.columnIndexByDate(date));\r\n\r\n\t\t\tupper = gantt.date[unit + \"_start\"](new Date(scale.min_date));\r\n\t\t\tif (scale.trace_x[colIndex]) {\r\n\t\t\t\tupper = gantt.date[unit + \"_start\"](scale.trace_x[colIndex]);// end of time scale\r\n\t\t\t}\r\n\r\n\t\t\twhile (+upper < +date) {\r\n\t\t\t\tupper = gantt.date[unit + \"_start\"](gantt.date.add(upper, steps, unit));\r\n\r\n\t\t\t\tvar tzOffset = upper.getTimezoneOffset();\r\n\r\n\t\t\t\tupper = gantt._correct_dst_change(upper, tzOffset, upper, unit);\r\n\t\t\t\tif (gantt.date[unit + '_start'])\r\n\t\t\t\t\tupper = gantt.date[unit + '_start'](upper);\r\n\t\t\t}\r\n\r\n\t\t\tlower = gantt.date.add(upper, -1 * steps, unit);\r\n\r\n\t\t}\r\n\t\tif (config.dir && config.dir == 'future')\r\n\t\t\treturn upper;\r\n\t\tif (config.dir && config.dir == 'past')\r\n\t\t\treturn lower;\r\n\r\n\t\tif (Math.abs(date - lower) < Math.abs(upper - date)) {\r\n\t\t\treturn lower;\r\n\t\t} else {\r\n\t\t\treturn upper;\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tgantt.correctTaskWorkTime = function (task) {\r\n\t\tif (gantt.config.work_time && gantt.config.correct_work_time) {\r\n\t\t\tif (!this.isWorkTime(task.start_date, undefined, task)) {\r\n\t\t\t\ttask.start_date = this.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\r\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\r\n\t\t\t} else if (!this.isWorkTime(new Date(+task.end_date - 1), undefined, task)) {\r\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskUpdate\", function (id, task) {\r\n\t\tgantt._init_task_timing(task);\r\n\t\treturn true;\r\n\t});\r\n\tgantt.attachEvent(\"onBeforeTaskAdd\", function (id, task) {\r\n\t\tgantt._init_task_timing(task);\r\n\t\treturn true;\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onAfterTaskMove\", function (id, parent, tindex) {\r\n\t\tgantt._init_task_timing(gantt.getTask(id));\r\n\t\treturn true;\r\n\t});\r\n\r\n};","function addResizeListener(gantt){\r\n\tvar containerStyles = window.getComputedStyle(gantt.$root);\r\n\tif(containerStyles.getPropertyValue(\"position\") == \"static\"){\r\n\t\tgantt.$root.style.position = \"relative\";\r\n\t}\r\n\r\n\tvar resizeWatcher = document.createElement('iframe');\r\n\tresizeWatcher.className = \"gantt_container_resize_watcher\";\r\n\tresizeWatcher.tabIndex = -1;\r\n\tif(gantt.config.wai_aria_attributes){\r\n\t\tresizeWatcher.setAttribute(\"role\", \"none\");\r\n\t\tresizeWatcher.setAttribute(\"aria-hidden\", true);\r\n\t}\r\n\r\n\tvar salesforce_environment = !!window[\"Sfdc\"] || !!window[\"$A\"] || window[\"Aura\"];\r\n\tif (salesforce_environment){\r\n\t\tgantt.config.container_resize_method = \"timeout\";\r\n\t}\r\n\r\n\t// in some environments (namely, in SalesForce) iframe.contentWindow is not available\r\n\tgantt.$root.appendChild(resizeWatcher);\r\n\tif (resizeWatcher.contentWindow) {\r\n\t\tlistenWindowResize(gantt, resizeWatcher.contentWindow);\r\n\t} else {\r\n\t\t// if so - ditch the iframe and fallback to listening the main window resize\r\n\t\tgantt.$root.removeChild(resizeWatcher);\r\n\t\tlistenWindowResize(gantt, window);\r\n\t}\r\n}\r\n\r\nfunction listenWindowResize(gantt, window){\r\n\tvar resizeTimeout = gantt.config.container_resize_timeout || 20;\r\n\tvar resizeDelay;\r\n\tlet previousSize = getContainerSize(gantt);\r\n\r\n\tif (gantt.config.container_resize_method == \"timeout\"){\r\n\t\tlowlevelResizeWatcher();\r\n\t}\r\n\telse {\r\n\t\ttry {\r\n\t\t\tgantt.event(window, \"resize\", function () {\r\n\t\t\t\tif (gantt.$scrollbarRepaint) {\r\n\t\t\t\t\tgantt.$scrollbarRepaint = null;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// GS-2140. Don't repaint Gantt if it has the same sizes\r\n\t\t\t\t\tlet currentSize = getContainerSize(gantt);\r\n\t\t\t\t\tif (previousSize.x == currentSize.x && previousSize.y == currentSize.y){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpreviousSize = currentSize;\r\n\t\t\t\t\trepaintGantt();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tlowlevelResizeWatcher();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction repaintGantt(){\r\n\t\tclearTimeout(resizeDelay);\r\n\t\tresizeDelay = setTimeout(function(){\r\n\t\t\tif(!gantt.$destroyed){\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\t\t}, resizeTimeout);\r\n\t}\r\n\r\n\tvar previousHeight = gantt.$root.offsetHeight;\r\n\tvar previousWidth = gantt.$root.offsetWidth;\t\r\n\r\n\tfunction lowlevelResizeWatcher(){\r\n\t\tif (gantt.$root.offsetHeight != previousHeight ||\r\n\t\t\t\tgantt.$root.offsetWidth != previousWidth){\r\n\t\t\t\trepaintGantt();\r\n\t\t}\r\n\r\n\t\tpreviousHeight = gantt.$root.offsetHeight;\r\n\t\tpreviousWidth = gantt.$root.offsetWidth;\r\n\r\n\t\tsetTimeout(lowlevelResizeWatcher, resizeTimeout);\r\n\t}\r\n}\r\n\r\nfunction getContainerSize(gantt){\r\n\treturn {\r\n\t\tx: gantt.$root.offsetWidth,\r\n\t\ty: gantt.$root.offsetHeight\r\n\t};\r\n}\r\n\r\nexport default addResizeListener;","import * as domHelpers from \"./ui/utils/dom_helpers\";\r\nimport * as helpers from \"../utils/helpers\";\r\nimport isHeadless from \"../utils/is_headless\";\r\nimport addResizeListener from \"./ui/resize_listener\";\r\nimport calculateScaleRange from \"./gantt_data_range\";\r\nimport assert from \"./common/assert\";\r\n\r\nexport default function(gantt){\r\n\t\r\n\r\n\tgantt.assert = assert(gantt);\r\n\r\n\tfunction isHTMLElement(node){\r\n\t\ttry {\r\n\t\t\tnode.cloneNode(false);\r\n\t\t}\r\n\t\tcatch (e){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n\tvar invalidContainerMessage = \"Invalid value of the first argument of `gantt.init`. Supported values: HTMLElement, String (element id).\" +\r\n\t\"This error means that either invalid object is passed into `gantt.init` or that the element with the specified ID doesn't exist on the page when `gantt.init` is called.\";\r\n\r\n\tfunction validateNode(node){\r\n\t\tif (!node || (typeof node == 'string' && document.getElementById(node))) return true;\r\n\t\tif (isHTMLElement(node)) return true;\r\n\r\n\t\tgantt.assert(false, invalidContainerMessage);\r\n\t\tthrow new Error(invalidContainerMessage);\r\n\t}\r\n\r\n//initial initialization\r\n\tgantt.init = function(node, from, to){\r\n\t\tif (gantt.env.isNode) { \r\n\t\t\tnode = null; // for the nodejs version\r\n\t\t} else {\r\n\t\t\tvalidateNode(node); // for the web version\r\n\t\t}\r\n\r\n\t\tif(from && to){\r\n\t\t\tthis.config.start_date = this._min_date = new Date(from);\r\n\t\t\tthis.config.end_date = this._max_date = new Date(to);\r\n\t\t}\r\n\t\tthis.date.init();\r\n\r\n\t\t//can be called only once\r\n\t\tthis.init = function(node){\r\n\t\t\tif (gantt.env.isNode) { \r\n\t\t\t\tnode = null; // for the nodejs version\r\n\t\t\t} else {\r\n\t\t\t\tvalidateNode(node); // for the web version\r\n\t\t\t}\r\n\r\n\t\t\tif (this.$container && this.$container.parentNode){\r\n\t\t\t\tthis.$container.parentNode.removeChild(this.$container);\r\n\t\t\t\tthis.$container = null;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.$layout){\r\n\t\t\t\tthis.$layout.clear();\r\n\t\t\t}\r\n\t\t\tthis._reinit(node);\r\n\t\t};\r\n\t\tthis._reinit(node);\r\n\t};\r\n\r\n\tgantt._quickRefresh = function(code){\r\n\t\tvar stores = this._getDatastores.call(this);\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i]._quick_refresh = true;\r\n\t\t}\r\n\r\n\t\tcode();\r\n\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i]._quick_refresh = false;\r\n\t\t}\r\n\t};\r\n\r\n\tvar dropLayout = (function dropLayout(){\r\n\t\tif(this._clearTaskLayers){\r\n\t\t\tthis._clearTaskLayers();\r\n\t\t}\r\n\r\n\t\tif(this._clearLinkLayers){\r\n\t\t\tthis._clearLinkLayers();\r\n\t\t}\r\n\r\n\t\tif(this.$layout){\r\n\t\t\tthis.$layout.destructor();\r\n\t\t\tthis.$layout = null;\r\n\t\t\tthis.$ui.reset();\r\n\t\t}\r\n\t}).bind(gantt);\r\n\r\n\tvar rebuildLayout = (function rebuildLayout(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.$root.innerHTML = \"\";\r\n\r\n\t\tthis.$root.gantt = this;\r\n\t\tcalculateScaleRange(this);\r\n\t\tthis.config.layout.id = \"main\";\r\n\t\tthis.$layout = this.$ui.createView(\"layout\", this.$root, this.config.layout);\r\n\r\n\t\tthis.$layout.attachEvent(\"onBeforeResize\", function(){\r\n\t\t\tvar storeNames = gantt.$services.getService(\"datastores\");\r\n\t\t\tfor(var i = 0; i < storeNames.length; i++){\r\n\t\t\t\tgantt.getDatastore(storeNames[i]).filter();\r\n\t\t\t\tif (gantt.$data.tasksStore._skipTaskRecalculation){\r\n\t\t\t\t\t// do not repaint items, they will be repainted later in the onStoreUpdate event\r\n\t\t\t\t\tif (gantt.$data.tasksStore._skipTaskRecalculation != \"lightbox\"){\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgantt.getDatastore(storeNames[i]).callEvent(\"onBeforeRefreshAll\", []);\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.$layout.attachEvent(\"onResize\", function(){\r\n\t\t\tgantt._quickRefresh(function(){\r\n\t\t\t\tgantt.refreshData();\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.callEvent(\"onGanttLayoutReady\", []);\r\n\t\tthis.$layout.render();\r\n\r\n\t\tthis.$container = this.$layout.$container.firstChild;\r\n\r\n\t\taddResizeListener(this);\r\n\t}).bind(gantt);\r\n\r\n\tgantt.resetLayout = function(){\r\n\t\tdropLayout();\r\n\t\trebuildLayout();\r\n\t\tthis.render();\r\n\t};\r\n\r\n\tgantt._reinit = function(node){\r\n\t\tthis.callEvent(\"onBeforeGanttReady\", []);\r\n\t\tthis._update_flags();\r\n\r\n\t\tvar config = this.$services.getService(\"templateLoader\");\r\n\t\tconfig.initTemplates(this);\r\n\r\n\t\tdropLayout();\r\n\r\n\t\tthis.$root = null;\r\n\t\tif(node){\r\n\t\t\tthis.$root = domHelpers.toNode(node);\r\n\t\t\trebuildLayout();\r\n\t\t\tthis.$mouseEvents.reset(this.$root);\r\n\t\t\taddMinimalSizes(gantt);\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onTemplatesReady\",[]);\r\n\r\n\t\tthis.callEvent(\"onGanttReady\", []);\r\n\r\n\t\tthis.render();\r\n\t};\r\n\r\n\tfunction addMinimalSizes(gantt) {\r\n\t\tif (gantt.$container && !gantt.config.autosize) {\r\n\t\t\tif (gantt.$root.offsetHeight < 50) {\r\n\t\t\t\t// eslint-disable-next-line no-console\r\n\t\t\t\tconsole.warn(`The Gantt container has a small height, so you cannot see its content. If it is not intended, you need to set the 'height' style rule to the container:\r\nhttps://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.$click={\r\n\t\tbuttons:{\r\n\t\t\t\"edit\": function(id) {\r\n\t\t\t\tif (gantt.isReadonly(gantt.getTask(id))) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tgantt.showLightbox(id);\r\n\t\t\t},\r\n\t\t\t\"delete\": function(id) {\r\n\t\t\t\tvar task = gantt.getTask(id);\r\n\t\t\t\tif (gantt.isReadonly(task)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar question = gantt.locale.labels.confirm_deleting;\r\n\t\t\t\tvar title = gantt.locale.labels.confirm_deleting_title;\r\n\r\n\t\t\t\tgantt._simple_confirm(question, title, function(){\r\n\t\t\t\t\tif(!gantt.isTaskExists(id)){\r\n\t\t\t\t\t\tgantt.hideLightbox();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(task.$new){\r\n\t\t\t\t\t\t// GS-2170. Do not recalculate the indexes and dates of other tasks\r\n\t\t\t\t\t\t// as they will be recalculated in the `refreshData`\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = \"lightbox\";\r\n\t\t\t\t\t\tgantt.silent(function(){\r\n\t\t\t\t\t\t\tgantt.deleteTask(id, true);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = false;\r\n\t\t\t\t\t\tgantt.refreshData();\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = true;\r\n\t\t\t\t\t\tgantt.deleteTask(id);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgantt.hideLightbox();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n//renders self\r\n\tgantt.render = function(){\r\n\t\tthis.callEvent(\"onBeforeGanttRender\", []);\r\n\r\n\t\tvar visibleDate;\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tif (!this.config.sort && this._sort) {\r\n\t\t\t\tthis._sort = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.$root){\r\n\t\t\t\tif(this.config.rtl){\r\n\t\t\t\t\tthis.$root.classList.add(\"gantt_rtl\");\r\n\t\t\t\t\tthis.$root.firstChild.classList.add(\"gantt_rtl\"); // GS-1499\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.$root.classList.remove(\"gantt_rtl\");\r\n\t\t\t\t\tthis.$root.firstChild.classList.remove(\"gantt_rtl\"); // GS-1499\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar pos = this.getScrollState();\r\n\t\t\tvar posX = pos ? pos.x : 0;\r\n\t\t\tif(this._getHorizontalScrollbar()){\r\n\t\t\t\tvar scrollbar = this._getHorizontalScrollbar();\r\n\t\t\t\tposX = scrollbar.$config.codeScrollLeft || posX || 0;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvisibleDate = null;\r\n\t\t\tif(posX){\r\n\t\t\t\tvisibleDate = gantt.dateFromPos(posX + this.config.task_scroll_offset);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcalculateScaleRange(this);\r\n\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tthis.$layout.$config.autosize = this.config.autosize;\r\n\t\t\tvar preserveScroll = this.config.preserve_scroll;\r\n\t\t\tthis.config.preserve_scroll = false; // prevent scrolling from layout resize, scroll will be called here later on\r\n\t\t\tthis.$layout.resize();\r\n\t\t\tthis.config.preserve_scroll = preserveScroll;\r\n\r\n\t\t\tif(this.config.preserve_scroll && pos){\r\n\r\n\t\t\t\t// GS-1640: We need pos.y, otherwise part of the timeline won't be rendered if the scrollbar disappeared\r\n\t\t\t\tif (posX || pos.y) {\r\n\t\t\t\t\tvar new_pos = gantt.getScrollState();\r\n\t\t\t\t\tvar new_date = gantt.dateFromPos(new_pos.x);\r\n\t\t\t\t\tif(!(+visibleDate == +new_date && new_pos.y == pos.y)){\r\n\t\t\t\t\t\tvar posX = null;\r\n\t\t\t\t\t\tvar posY = null;\r\n\t\t\t\t\t\tif(visibleDate){\r\n\t\t\t\t\t\t\tvar posX = Math.max(gantt.posFromDate(visibleDate) - gantt.config.task_scroll_offset, 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(pos.y){\r\n\t\t\t\t\t\t\tposY = pos.y;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgantt.scrollTo(posX, posY);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// GS-1640: We need to reset the scroll position for the grid if the scrollbar disappeared and\r\n\t\t\t\t// the grid and timeline have different scrollbars\r\n\t\t\t\tvar gridCell = gantt.$ui.getView(\"grid\");\r\n\t\t\t\tif (gridCell) {\r\n\t\t\t\t\tvar attachedScrollbar = gridCell.$config.scrollY;\r\n\t\t\t\t\tvar verticalScrollbar = gantt.$ui.getView(attachedScrollbar);\r\n\t\t\t\t\tif (verticalScrollbar) {\r\n\t\t\t\t\t\tvar scrollbarNodeVisible = gantt.utils.dom.isChildOf(verticalScrollbar.$view, gantt.$container);\r\n\t\t\t\t\t\tif (!scrollbarNodeVisible) {\r\n\t\t\t\t\t\t\tgridCell.scrollTo(undefined, 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tgantt.refreshData();\r\n\t\t}\r\n\t\tthis.callEvent(\"onGanttRender\", []);\r\n\t};\r\n\r\n\t//TODO: add layout.resize method that wouldn't trigger data repaint\r\n\tgantt.setSizes = gantt.render;\r\n\r\n\r\n\tgantt.getTaskRowNode = function(id) {\r\n\t\tvar els = this.$grid_data.childNodes;\r\n\t\tvar attribute = this.config.task_attribute;\r\n\t\tfor (var i = 0; i < els.length; i++) {\r\n\t\t\tif (els[i].getAttribute) {\r\n\t\t\t\tvar value = els[i].getAttribute(attribute);\r\n\t\t\t\tif (value == id) return els[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tgantt.changeLightboxType = function(type){\r\n\t\tif(this.getLightboxType() == type)\r\n\t\t\treturn true;\r\n\t\tgantt._silent_redraw_lightbox(type);\r\n\t};\r\n\r\n\tgantt._get_link_type = function (from_start, to_start) {\r\n\t\tvar type = null;\r\n\t\tif (from_start && to_start) {\r\n\t\t\ttype = gantt.config.links.start_to_start;\r\n\t\t} else if (!from_start && to_start) {\r\n\t\t\ttype = gantt.config.links.finish_to_start;\r\n\t\t} else if (!from_start && !to_start) {\r\n\t\t\ttype = gantt.config.links.finish_to_finish;\r\n\t\t} else if (from_start && !to_start) {\r\n\t\t\ttype = gantt.config.links.start_to_finish;\r\n\t\t}\r\n\t\treturn type;\r\n\t};\r\n\r\n\tgantt.isLinkAllowed = function (from, to, from_start, to_start) {\r\n\t\tvar link = null;\r\n\t\tif (typeof(from) == \"object\") {\r\n\t\t\tlink = from;\r\n\t\t} else {\r\n\t\t\tlink = {source: from, target: to, type: this._get_link_type(from_start, to_start)};\r\n\t\t}\r\n\r\n\t\tif (!link) return false;\r\n\t\tif (!(link.source && link.target && link.type)) return false;\r\n\t\tif (link.source == link.target) return false;\r\n\r\n\t\tvar res = true;\r\n\t\t//any custom rules\r\n\t\tif (this.checkEvent(\"onLinkValidation\"))\r\n\t\t\tres = this.callEvent(\"onLinkValidation\", [link]);\r\n\r\n\t\treturn res;\r\n\t};\r\n\r\n\r\n\tgantt._correct_dst_change = function(date, prevOffset, step, unit){\r\n\t\tvar time_unit = helpers.getSecondsInUnit(unit) * step;\r\n\t\tif(time_unit > 60*60 && time_unit < 60*60*24){\r\n\t\t\t//correct dst change only if current unit is more than one hour and less than day (days have own checking), e.g. 12h\r\n\t\t\tvar offsetChanged = date.getTimezoneOffset() - prevOffset;\r\n\t\t\tif(offsetChanged){\r\n\t\t\t\tdate = gantt.date.add(date, offsetChanged, \"minute\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn date;\r\n\t};\r\n\r\n\tgantt.isSplitTask = function(task){\r\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task =\"+task+\" of gantt.isSplitTask. Task object was expected\");\r\n\t\treturn this.$data.tasksStore._isSplitItem(task);\r\n\t};\r\n\r\n\tgantt._is_icon_open_click = function(e) {\r\n\t\tif (!e)\r\n\t\t\treturn false;\r\n\t\tvar target = e.target || e.srcElement;\r\n\t\tif (!(target && target.className))\r\n\t\t\treturn false;\r\n\t\tvar className = domHelpers.getClassName(target);\r\n\t\tif (className.indexOf(\"gantt_tree_icon\") !== -1 && (className.indexOf(\"gantt_close\") !== -1 || className.indexOf(\"gantt_open\") !== -1))\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\r\n};","/*\r\n \tasserts will be removed in final code, so you can place them anythere\r\n\twithout caring about performance impacts\r\n*/\r\n\r\nexport default function(gantt){\r\n\treturn function assert(check, message){\r\n\t\tif (!check){\r\n\t\t\tif(gantt.config.show_errors && gantt.callEvent(\"onError\",[message]) !== false) {\r\n\t\t\t\tif (gantt.message) {\r\n\t\t\t\t\tgantt.message({type: \"error\", text: message, expire: -1});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// eslint-disable-next-line\r\n\t\t\t\t\tconsole.log(message);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// eslint-disable-next-line no-debugger\r\n\t\t\t\tdebugger;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n};","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"أيار\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"],\r\n\t\tmonth_short: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"],\r\n\t\tday_full: [\"الأحد\", \"الأثنين\", \"ألثلاثاء\", \"الأربعاء\", \"ألحميس\", \"ألجمعة\", \"السبت\"],\r\n\t\tday_short: [\"احد\", \"اثنين\", \"ثلاثاء\", \"اربعاء\", \"خميس\", \"جمعة\", \"سبت\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"مهمة جديد\",\r\n\t\ticon_save: \"اخزن\",\r\n\t\ticon_cancel: \"الغاء\",\r\n\t\ticon_details: \"تفاصيل\",\r\n\t\ticon_edit: \"تحرير\",\r\n\t\ticon_delete: \"حذف\",\r\n\t\tconfirm_closing: \"التغييرات سوف تضيع, هل انت متأكد؟\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟\",\r\n\t\tsection_description: \"الوصف\",\r\n\t\tsection_time: \"الفترة الزمنية\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"الغاء\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Студзень\", \"Люты\", \"Сакавік\", \"Красавік\", \"Maй\", \"Чэрвень\", \"Ліпень\", \"Жнівень\", \"Верасень\", \"Кастрычнік\", \"Лістапад\", \"Снежань\"],\r\n\t\tmonth_short: [\"Студз\", \"Лют\", \"Сак\", \"Крас\", \"Maй\", \"Чэр\", \"Ліп\", \"Жнів\", \"Вер\", \"Каст\", \"Ліст\", \"Снеж\"],\r\n\t\tday_full: [\"Нядзеля\", \"Панядзелак\", \"Аўторак\", \"Серада\", \"Чацвер\", \"Пятніца\", \"Субота\"],\r\n\t\tday_short: [\"Нд\", \"Пн\", \"Аўт\", \"Ср\", \"Чцв\", \"Пт\", \"Сб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Новае заданне\",\r\n\t\ticon_save: \"Захаваць\",\r\n\t\ticon_cancel: \"Адмяніць\",\r\n\t\ticon_details: \"Дэталі\",\r\n\t\ticon_edit: \"Змяніць\",\r\n\t\ticon_delete: \"Выдаліць\",\r\n\t\tconfirm_closing: \"\", // Унесеныя змены будуць страчаны, працягнуць?\r\n\t\tconfirm_deleting: \"Падзея будзе выдалена незваротна, працягнуць?\",\r\n\t\tsection_description: \"Апісанне\",\r\n\t\tsection_time: \"Перыяд часу\",\r\n\t\tsection_type: \"Тып\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"ІСР\",\r\n\t\tcolumn_text: \"Задача\",\r\n\t\tcolumn_start_date: \"Пачатак\",\r\n\t\tcolumn_duration: \"Працяг\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Сувязь\",\r\n\t\tconfirm_link_deleting: \"будзе выдалена\",\r\n\t\tlink_start: \"(пачатак)\",\r\n\t\tlink_end: \"(канец)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Хвiлiна\",\r\n\t\thours: \"Гадзiна\",\r\n\t\tdays: \"Дзень\",\r\n\t\tweeks: \"Тыдзень\",\r\n\t\tmonths: \"Месяц\",\r\n\t\tyears: \"Год\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Адмяніць\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n @Traducido por Vicente Adria Bohigues - vicenteadria@hotmail.com\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"],\r\n\t\tmonth_short: [\"Gen\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Oct\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"],\r\n\t\tday_short: [\"Dg\", \"Dl\", \"Dm\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova tasca\",\r\n\t\ticon_save: \"Guardar\",\r\n\t\ticon_cancel: \"Cancel·lar\",\r\n\t\ticon_details: \"Detalls\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Esborrar\",\r\n\t\tconfirm_closing: \"\", // \"Els seus canvis es perdràn, continuar ?\"\r\n\t\tconfirm_deleting: \"L'esdeveniment s'esborrarà definitivament, continuar ?\",\r\n\t\tsection_description: \"Descripció\",\r\n\t\tsection_time: \"Periode de temps\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancel·lar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\nTranslation by FreezeSoul\r\n\r\nUpdate 26/10/2015:\r\nTranslation of new labels by zwh8800\r\n https://github.com/DHTMLX/gantt/pull/7\r\n\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\r\n\t\tmonth_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tday_full: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\r\n\t\tday_short: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"新任務\",\r\n\t\ticon_save: \"保存\",\r\n\t\ticon_cancel: \"关闭\",\r\n\t\ticon_details: \"详细\",\r\n\t\ticon_edit: \"编辑\",\r\n\t\ticon_delete: \"删除\",\r\n\t\tconfirm_closing: \"请确认是否撤销修改!\", // Your changes will be lost, are your sure?\r\n\t\tconfirm_deleting: \"是否删除日程?\",\r\n\t\tsection_description: \"描述\",\r\n\t\tsection_time: \"时间范围\",\r\n\t\tsection_type: \"类型\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"工作分解结构\",\r\n\t\tcolumn_text: \"任务名\",\r\n\t\tcolumn_start_date: \"开始时间\",\r\n\t\tcolumn_duration: \"持续时间\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\r\n\t\tlink: \"关联\",\r\n\t\tconfirm_link_deleting: \"将被删除\",\r\n\t\tlink_start: \" (开始)\",\r\n\t\tlink_end: \" (结束)\",\r\n\r\n\t\ttype_task: \"任务\",\r\n\t\ttype_project: \"项目\",\r\n\t\ttype_milestone: \"里程碑\",\r\n\r\n\t\tminutes: \"分钟\",\r\n\t\thours: \"小时\",\r\n\t\tdays: \"天\",\r\n\t\tweeks: \"周\",\r\n\t\tmonths: \"月\",\r\n\t\tyears: \"年\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"关闭\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"],\r\n\t\tmonth_short: [\"Led\", \"Ún\", \"Bře\", \"Dub\", \"Kvě\", \"Čer\", \"Čec\", \"Srp\", \"Září\", \"Říj\", \"List\", \"Pro\"],\r\n\t\tday_full: [\"Neděle\", \"Pondělí\", \"Úterý\", \"Středa\", \"Čtvrtek\", \"Pátek\", \"Sobota\"],\r\n\t\tday_short: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nová práce\",\r\n\t\ticon_save: \"Uložit\",\r\n\t\ticon_cancel: \"Zpět\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edituj\",\r\n\t\ticon_delete: \"Smazat\",\r\n\t\tconfirm_closing: \"\", // Vaše změny budou ztraceny, opravdu ?\r\n\t\tconfirm_deleting: \"Událost bude trvale smazána, opravdu?\",\r\n\t\tsection_description: \"Poznámky\",\r\n\t\tsection_time: \"Doba platnosti\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Zpět\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny opgave\",\r\n\t\ticon_save: \"Gem\",\r\n\t\ticon_cancel: \"Fortryd\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Tilret\",\r\n\t\ticon_delete: \"Slet\",\r\n\t\tconfirm_closing: \"Dine rettelser vil gå tabt.. Er dy sikker?\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Bigivenheden vil blive slettet permanent. Er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Fortryd\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\" Januar\", \" Februar\", \" März \", \" April\", \" Mai\", \" Juni\", \" Juli\", \" August\", \" September \", \" Oktober\", \" November \", \" Dezember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\r\n\t\tday_full: [\"Sonntag\", \"Montag\", \"Dienstag\", \" Mittwoch\", \" Donnerstag\", \"Freitag\", \"Samstag\"],\r\n\t\tday_short: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Neue Aufgabe\",\r\n\t\ticon_save: \"Speichern\",\r\n\t\ticon_cancel: \"Abbrechen\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Ändern\",\r\n\t\ticon_delete: \"Löschen\",\r\n\t\tconfirm_closing: \"\", // \"Ihre Veränderungen werden verloren sein, wollen Sie ergänzen? \"\r\n\t\tconfirm_deleting: \"Der Eintrag wird gelöscht\",\r\n\t\tsection_description: \"Beschreibung\",\r\n\t\tsection_time: \"Zeitspanne\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"PSP\",\r\n\t\tcolumn_text: \"Task-Namen\",\r\n\t\tcolumn_start_date: \"Startzeit\",\r\n\t\tcolumn_duration: \"Dauer\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"werden gelöscht\",\r\n\t\tlink_start: \"(starten)\",\r\n\t\tlink_end: \"(ende)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuten\",\r\n\t\thours: \"Stunden\",\r\n\t\tdays: \"Tage\",\r\n\t\tweeks: \"Wochen\",\r\n\t\tmonths: \"Monate\",\r\n\t\tyears: \"Jahre\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Abbrechen\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Regel\",\r\n\t\tconstraint_type: \"Regel\",\r\n\t\tconstraint_date: \"Regel - Datum\",\r\n\t\tasap: \"So bald wie möglich\",\r\n\t\talap: \"So spät wie möglich\",\r\n\t\tsnet: \"Beginn nicht vor\",\r\n\t\tsnlt: \"Beginn nicht später als\",\r\n\t\tfnet: \"Fertigstellung nicht vor\",\r\n\t\tfnlt: \"Fertigstellung nicht später als\",\r\n\t\tmso: \"Muss beginnen am\",\r\n\t\tmfo: \"Muss fertig sein am\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάϊος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"],\r\n\t\tmonth_short: [\"ΙΑΝ\", \"ΦΕΒ\", \"ΜΑΡ\", \"ΑΠΡ\", \"ΜΑΙ\", \"ΙΟΥΝ\", \"ΙΟΥΛ\", \"ΑΥΓ\", \"ΣΕΠ\", \"ΟΚΤ\", \"ΝΟΕ\", \"ΔΕΚ\"],\r\n\t\tday_full: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Κυριακή\"],\r\n\t\tday_short: [\"ΚΥ\", \"ΔΕ\", \"ΤΡ\", \"ΤΕ\", \"ΠΕ\", \"ΠΑ\", \"ΣΑ\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Νέα εργασία\",\r\n\t\ticon_save: \"Αποθήκευση\",\r\n\t\ticon_cancel: \"Άκυρο\",\r\n\t\ticon_details: \"Λεπτομέρειες\",\r\n\t\ticon_edit: \"Επεξεργασία\",\r\n\t\ticon_delete: \"Διαγραφή\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;\",\r\n\t\tsection_description: \"Περιγραφή\",\r\n\t\tsection_time: \"Χρονική περίοδος\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Άκυρο\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n\t\tday_short: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"New task\",\r\n\t\ticon_save: \"Save\",\r\n\t\ticon_cancel: \"Cancel\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Edit\",\r\n\t\ticon_delete: \"Delete\",\r\n\t\tconfirm_closing: \"\",// Your changes will be lost, are you sure?\r\n\t\tconfirm_deleting: \"Task will be deleted permanently, are you sure?\",\r\n\t\tsection_description: \"Description\",\r\n\t\tsection_time: \"Time period\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancel\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;","/*\r\n @Autor Manuel Fernandez Panzuela - www.mfernandez.es\r\n\r\n Update 30/10/2015:\r\n Translation of new labels by Jorge Macias\r\n https://disqus.com/by/disqus_bTuZk1voC7/\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\r\n\t\tmonth_short: [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"],\r\n\t\tday_full: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"],\r\n\t\tday_short: [\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nueva tarea\",\r\n\t\ticon_save: \"Guardar\",\r\n\t\ticon_cancel: \"Cancelar\",\r\n\t\ticon_details: \"Detalles\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Eliminar\",\r\n\t\tconfirm_closing: \"\", // \"Sus cambios se perderán, continuar ?\"\r\n\t\tconfirm_deleting: \"El evento se borrará definitivamente, ¿continuar?\",\r\n\t\tsection_description: \"Descripción\",\r\n\t\tsection_time: \"Período\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"EDT\",\r\n\t\tcolumn_text: \"Tarea\",\r\n\t\tcolumn_start_date: \"Inicio\",\r\n\t\tcolumn_duration: \"Duración\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Enlace\",\r\n\t\tconfirm_link_deleting: \"será borrada\",\r\n\t\tlink_start: \" (inicio)\",\r\n\t\tlink_end: \" (fin)\",\r\n\r\n\t\ttype_task: \"Tarea\",\r\n\t\ttype_project: \"Proyecto\",\r\n\t\ttype_milestone: \"Hito\",\r\n\r\n\r\n\t\tminutes: \"Minutos\",\r\n\t\thours: \"Horas\",\r\n\t\tdays: \"Días\",\r\n\t\tweeks: \"Semanas\",\r\n\t\tmonths: \"Meses\",\r\n\t\tyears: \"Años\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancelar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n dhtmlxGantt Persian (Farsi, fa_IR) locale by Mohammad Shokri http://slashsbin.com/\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\r\n\t\t\t\"ژانویه\",\r\n\t\t\t\"فوریه\",\r\n\t\t\t\"مارس\",\r\n\t\t\t\"آوریل\",\r\n\t\t\t\"مه\",\r\n\t\t\t\"ژوئن\",\r\n\t\t\t\"ژوئیه\",\r\n\t\t\t\"اوت\",\r\n\t\t\t\"سپتامبر\",\r\n\t\t\t\"اکتبر\",\r\n\t\t\t\"نوامبر\",\r\n\t\t\t\"دسامبر\"\r\n\t\t],\r\n\t\tmonth_short: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n\t\tday_full: [\r\n\t\t\t\"يکشنبه\",\r\n\t\t\t\"دوشنبه\",\r\n\t\t\t\"سهشنبه\",\r\n\t\t\t\"چهارشنبه\",\r\n\t\t\t\"پنجشنبه\",\r\n\t\t\t\"جمعه\",\r\n\t\t\t\"شنبه\"\r\n\t\t],\r\n\t\tday_short: [\r\n\t\t\t\"ی\",\r\n\t\t\t\"د\",\r\n\t\t\t\"س\",\r\n\t\t\t\"چ\",\r\n\t\t\t\"پ\",\r\n\t\t\t\"ج\",\r\n\t\t\t\"ش\"\r\n\t\t]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"وظیفه جدید\",\r\n\t\ticon_save: \"ذخیره\",\r\n\t\ticon_cancel: \"لغو\",\r\n\t\ticon_details: \"جزییات\",\r\n\t\ticon_edit: \"ویرایش\",\r\n\t\ticon_delete: \"حذف\",\r\n\t\tconfirm_closing: \"تغییرات شما ازدست خواهد رفت، آیا مطمئن هستید؟\",\r\n\t\tconfirm_deleting: \"این مورد برای همیشه حذف خواهد شد، آیا مطمئن هستید؟\",\r\n\t\tsection_description: \"توضیحات\",\r\n\t\tsection_time: \"مدت زمان\",\r\n\t\tsection_type: \"نوع\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"عنوان\",\r\n\t\tcolumn_start_date: \"زمان شروع\",\r\n\t\tcolumn_duration: \"مدت\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"ارتباط\",\r\n\t\tconfirm_link_deleting: \"حذف خواهد شد\",\r\n\t\tlink_start: \" (آغاز)\",\r\n\t\tlink_end: \" (پایان)\",\r\n\r\n\t\ttype_task: \"وظیفه\",\r\n\t\ttype_project: \"پروژه\",\r\n\t\ttype_milestone: \"نگارش\",\r\n\r\n\t\tminutes: \"دقایق\",\r\n\t\thours: \"ساعات\",\r\n\t\tdays: \"روزها\",\r\n\t\tweeks: \"هفته\",\r\n\t\tmonths: \"ماهها\",\r\n\t\tyears: \"سالها\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"تایید\",\r\n\t\tmessage_cancel: \"لغو\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"],\r\n\t\tmonth_short: [\"Tam\", \"Hel\", \"Maa\", \"Huh\", \"Tou\", \"Kes\", \"Hei\", \"Elo\", \"Syy\", \"Lok\", \"Mar\", \"Jou\"],\r\n\t\tday_full: [\"Sunnuntai\", \"Maanantai\", \"Tiistai\", \"Keskiviikko\", \"Torstai\", \"Perjantai\", \"Lauantai\"],\r\n\t\tday_short: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Uusi tehtävä\",\r\n\t\ticon_save: \"Tallenna\",\r\n\t\ticon_cancel: \"Peru\",\r\n\t\ticon_details: \"Tiedot\",\r\n\t\ticon_edit: \"Muokkaa\",\r\n\t\ticon_delete: \"Poista\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Haluatko varmasti poistaa tapahtuman?\",\r\n\t\tsection_description: \"Kuvaus\",\r\n\t\tsection_time: \"Aikajakso\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Peru\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"],\r\n\t\tmonth_short: [\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Juin\", \"Juil\", \"Aoû\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"],\r\n\t\tday_full: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\"],\r\n\t\tday_short: [\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nouvelle tâche\",\r\n\t\ticon_save: \"Enregistrer\",\r\n\t\ticon_cancel: \"Annuler\",\r\n\t\ticon_details: \"Détails\",\r\n\t\ticon_edit: \"Modifier\",\r\n\t\ticon_delete: \"Effacer\",\r\n\t\tconfirm_closing: \"\",// Vos modifications seront perdus, êtes-vous sûr ?\r\n\t\tconfirm_deleting: \"L'événement sera effacé sans appel, êtes-vous sûr ?\",\r\n\r\n\t\tsection_description: \"Description\",\r\n\t\tsection_time: \"Période\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"OTP\",\r\n\t\tcolumn_text: \"Nom de la tâche\",\r\n\t\tcolumn_start_date: \"Date initiale\",\r\n\t\tcolumn_duration: \"Durée\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Le lien\",\r\n\t\tconfirm_link_deleting: \"sera supprimé\",\r\n\t\tlink_start: \"(début)\",\r\n\t\tlink_end: \"(fin)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Heures\",\r\n\t\tdays: \"Jours\",\r\n\t\tweeks: \"Semaines\",\r\n\t\tmonths: \"Mois\",\r\n\t\tyears: \"Années\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Annuler\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\r\n\t\tmonth_short: [\"ינו\", \"פבר\", \"מרץ\", \"אפר\", \"מאי\", \"יונ\", \"יול\", \"אוג\", \"ספט\", \"אוק\", \"נוב\", \"דצמ\"],\r\n\t\tday_full: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\r\n\t\tday_short: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"משימה חדש\",\r\n\t\ticon_save: \"שמור\",\r\n\t\ticon_cancel: \"בטל\",\r\n\t\ticon_details: \"פרטים\",\r\n\t\ticon_edit: \"ערוך\",\r\n\t\ticon_delete: \"מחק\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"ארוע ימחק סופית.להמשיך?\",\r\n\t\tsection_description: \"הסבר\",\r\n\t\tsection_time: \"תקופה\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"בטל\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Translation by Davor\r\n http://docs.dhtmlx.com/gantt/desktop__localization.html#comment-2569116291\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"],\r\n\t\tmonth_short: [\"Sij\", \"Velj\", \"Ožu\", \"Tra\", \"Svi\", \"Lip\", \"Srp\", \"Kol\", \"Ruj\", \"Lis\", \"Stu\", \"Pro\"],\r\n\t\tday_full: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"],\r\n\t\tday_short: [\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Novi Zadatak\",\r\n\t\ticon_save: \"Spremi\",\r\n\t\ticon_cancel: \"Odustani\",\r\n\t\ticon_details: \"Detalji\",\r\n\t\ticon_edit: \"Izmjeni\",\r\n\t\ticon_delete: \"Obriši\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"Zadatak će biti trajno izbrisan, jeste li sigurni?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Vremenski Period\",\r\n\t\tsection_type: \"Tip\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Naziv Zadatka\",\r\n\t\tcolumn_start_date: \"Početno Vrijeme\",\r\n\t\tcolumn_duration: \"Trajanje\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Poveznica\",\r\n\t\tconfirm_link_deleting: \"će biti izbrisan\",\r\n\t\tlink_start: \" (početak)\",\r\n\t\tlink_end: \" (kraj)\",\r\n\r\n\t\ttype_task: \"Zadatak\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minute\",\r\n\t\thours: \"Sati\",\r\n\t\tdays: \"Dani\",\r\n\t\tweeks: \"Tjedni\",\r\n\t\tmonths: \"Mjeseci\",\r\n\t\tyears: \"Godine\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Odustani\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Már\", \"Ápr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Vasárnap\", \"Hétfõ\", \"Kedd\", \"Szerda\", \"Csütörtök\", \"Péntek\", \"szombat\"],\r\n\t\tday_short: [\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Csü\", \"Pé\", \"Szo\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Új feladat\",\r\n\t\ticon_save: \"Mentés\",\r\n\t\ticon_cancel: \"Mégse\",\r\n\t\ticon_details: \"Részletek\",\r\n\t\ticon_edit: \"Szerkesztés\",\r\n\t\ticon_delete: \"Törlés\",\r\n\t\tconfirm_closing: \"\", // A változások elvesznek, biztosan folytatja? \"\r\n\t\tconfirm_deleting: \"Az esemény törölve lesz, biztosan folytatja?\",\r\n\t\tsection_description: \"Leírás\",\r\n\t\tsection_time: \"Idõszak\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Mégse\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ags\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\"],\r\n\t\tday_short: [\"Ming\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Tugas baru\",\r\n\t\ticon_save: \"Simpan\",\r\n\t\ticon_cancel: \"Batal\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edit\",\r\n\t\ticon_delete: \"Hapus\",\r\n\t\tconfirm_closing: \"\", /* Perubahan tidak akan disimpan ? */\r\n\t\tconfirm_deleting: \"Acara akan dihapus\",\r\n\t\tsection_description: \"Keterangan\",\r\n\t\tsection_time: \"Periode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Batal\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Update 29/12/2015:\r\n New labels translation by ARCANGELI CLAUDIO\r\n\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\r\n\t\tmonth_short: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"],\r\n\t\tday_full: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"],\r\n\t\tday_short: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nuovo compito\",\r\n\t\ticon_save: \"Salva\",\r\n\t\ticon_cancel: \"Chiudi\",\r\n\t\ticon_details: \"Dettagli\",\r\n\t\ticon_edit: \"Modifica\",\r\n\t\ticon_delete: \"Elimina\",\r\n\t\tconfirm_closing: \"\",// \"Sei sicuro di confermare la chiusura?\",\r\n\t\tconfirm_deleting: \"Sei sicuro di confermare l'eliminazione?\",\r\n\t\tsection_description: \"Descrizione\",\r\n\t\tsection_time: \"Periodo di tempo\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Nome Attività\",\r\n\t\tcolumn_start_date: \"Inizio\",\r\n\t\tcolumn_duration: \"Durata\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"sarà eliminato\",\r\n\t\tlink_start: \" (inizio)\",\r\n\t\tlink_end: \" (fine)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuti\",\r\n\t\thours: \"Ore\",\r\n\t\tdays: \"Giorni\",\r\n\t\tweeks: \"Settimane\",\r\n\t\tmonths: \"Mesi\",\r\n\t\tyears: \"Anni\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Chiudi\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Translation by Genexus Japan Inc.\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tmonth_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tday_full: [\"日曜日\", \"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\"],\r\n\t\tday_short: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"新しい仕事\",\r\n\t\ticon_save: \"保存\",\r\n\t\ticon_cancel: \"キャンセル\",\r\n\t\ticon_details: \"詳細\",\r\n\t\ticon_edit: \"編集\",\r\n\t\ticon_delete: \"削除\",\r\n\t\tconfirm_closing: \"\", // 変更が取り消されます、宜しいですか?\r\n\t\tconfirm_deleting: \"イベント完全に削除されます、宜しいですか?\",\r\n\t\tsection_description: \"デスクリプション\",\r\n\t\tsection_time: \"期間\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"キャンセル\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTranslated by cjkim@dbvalley.com\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\r\n\t\tmonth_short: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\r\n\t\tday_full: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"],\r\n\t\tday_short: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"이름없는 작업\",\r\n\t\ticon_save: \"저장\",\r\n\t\ticon_cancel: \"취소\",\r\n\t\ticon_details: \"세부 사항\",\r\n\t\ticon_edit: \"수정\",\r\n\t\ticon_delete: \"삭제\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"작업을 삭제하시겠습니까?\",\r\n\t\tsection_description: \"설명\",\r\n\t\tsection_time: \"기간\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"작업명\",\r\n\t\tcolumn_start_date: \"시작일\",\r\n\t\tcolumn_duration: \"기간\",\r\n\t\tcolumn_add: \"\",\r\n\t\tlink: \"전제\",\r\n\t\tconfirm_link_deleting: \"삭제 하시겠습니까?\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\t\ttype_task: \"작업\",\r\n\t\ttype_project: \"프로젝트\",\r\n\t\ttype_milestone: \"마일스톤\",\r\n\t\tminutes: \"분\",\r\n\t\thours: \"시간\",\r\n\t\tdays: \"일\",\r\n\t\tweeks: \"주\",\r\n\t\tmonths: \"달\",\r\n\t\tyears: \"년\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"취소\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","export default class LocaleManager{\r\n\tprivate _locales:{[key:string]: IGanttLocale };\r\n\r\n\tconstructor(config: {[key:string]: IGanttLocale }){\r\n\t\tthis._locales = {};\r\n\t\tfor(const i in config){\r\n\t\t\tthis._locales[i] = config[i];\r\n\t\t}\r\n\t}\r\n\r\n\taddLocale = (name: string, locale: IGanttLocale) => {\r\n\t\tthis._locales[name] = locale;\r\n\t};\r\n\r\n\tgetLocale = (name: string): IGanttLocale => {\r\n\t\treturn this._locales[name];\r\n\t};\r\n}","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Mon\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny oppgave\",\r\n\t\ticon_save: \"Lagre\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Rediger\",\r\n\t\ticon_delete: \"Slett\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Hendelsen vil bli slettet permanent. Er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\"],\r\n\t\tday_short: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nieuwe taak\",\r\n\t\ticon_save: \"Opslaan\",\r\n\t\ticon_cancel: \"Annuleren\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Bewerken\",\r\n\t\ticon_delete: \"Verwijderen\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Item zal permanent worden verwijderd, doorgaan?\",\r\n\t\tsection_description: \"Beschrijving\",\r\n\t\tsection_time: \"Tijd periode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Taak omschrijving\",\r\n\t\tcolumn_start_date: \"Startdatum\",\r\n\t\tcolumn_duration: \"Duur\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Koppeling\",\r\n\t\tconfirm_link_deleting: \"zal worden verwijderd\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (eind)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"minuten\",\r\n\t\thours: \"uren\",\r\n\t\tdays: \"dagen\",\r\n\t\tweeks: \"weken\",\r\n\t\tmonths: \"maanden\",\r\n\t\tyears: \"jaren\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Annuleren\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny oppgave\",\r\n\t\ticon_save: \"Lagre\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Endre\",\r\n\t\ticon_delete: \"Slett\",\r\n\t\tconfirm_closing: \"Endringer blir ikke lagret, er du sikker?\", // Endringer blir ikke lagret, er du sikker?\r\n\t\tconfirm_deleting: \"Oppføringen vil bli slettet, er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\r\n\t\tmonth_short: [\"Sty\", \"Lut\", \"Mar\", \"Kwi\", \"Maj\", \"Cze\", \"Lip\", \"Sie\", \"Wrz\", \"Paź\", \"Lis\", \"Gru\"],\r\n\t\tday_full: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\r\n\t\tday_short: [\"Nie\", \"Pon\", \"Wto\", \"Śro\", \"Czw\", \"Pią\", \"Sob\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nowe zadanie\",\r\n\t\ticon_save: \"Zapisz\",\r\n\t\ticon_cancel: \"Anuluj\",\r\n\t\ticon_details: \"Szczegóły\",\r\n\t\ticon_edit: \"Edytuj\",\r\n\t\ticon_delete: \"Usuń\",\r\n\t\tconfirm_closing: \"\", // Zmiany zostaną usunięte, jesteś pewien?\r\n\t\tconfirm_deleting: \"Zdarzenie zostanie usunięte na zawsze, kontynuować?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Okres czasu\",\r\n\t\tsection_type: \"Typ\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Nazwa zadania\",\r\n\t\tcolumn_start_date: \"Początek\",\r\n\t\tcolumn_duration: \"Czas trwania\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"zostanie usunięty\",\r\n\t\tlink_start: \" (początek)\",\r\n\t\tlink_end: \" (koniec)\",\r\n\r\n\t\ttype_task: \"Zadanie\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuty\",\r\n\t\thours: \"Godziny\",\r\n\t\tdays: \"Dni\",\r\n\t\tweeks: \"Tydzień\",\r\n\t\tmonths: \"Miesiące\",\r\n\t\tyears: \"Lata\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Anuluj\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\r\n TRANSLATION BY MATTHEUS PIROVANI RORIZ GONЗALVES\r\n\r\n mattheusroriz@hotmail.com / mattheus.pirovani@gmail.com /\r\n\r\n www.atrixian.com.br\r\n\r\n\r\n Updated by Jorge Albernaz Martins\r\n\r\n jorgefox@hotmail.com\r\n\r\n www.redfox.inf.br\r\n\r\n JorgeFox\r\n\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\r\n\t\tmonth_short: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\r\n\t\tday_full: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\r\n\t\tday_short: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova tarefa\",\r\n\t\ticon_save: \"Salvar\",\r\n\t\ticon_cancel: \"Cancelar\",\r\n\t\ticon_details: \"Detalhes\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Excluir\",\r\n\t\tconfirm_closing: \"\",// Suas alterações serão perdidas, confirme?\r\n\t\tconfirm_deleting: \"As tarefas serão excluidas permanentemente, confirme?\",\r\n\t\tsection_description: \"Descrição\",\r\n\t\tsection_time: \"Período\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"EAP\",\r\n\t\tcolumn_text: \"Nome tarefa\",\r\n\t\tcolumn_start_date: \"Data início\",\r\n\t\tcolumn_duration: \"Duração\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"Será excluído!\",\r\n\t\tlink_start: \" (início)\",\r\n\t\tlink_end: \" (fim)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Projeto\",\r\n\t\ttype_milestone: \"Marco\",\r\n\r\n\r\n\t\tminutes: \"Minutos\",\r\n\t\thours: \"Horas\",\r\n\t\tdays: \"Dias\",\r\n\t\tweeks: \"Semanas\",\r\n\t\tmonths: \"Meses\",\r\n\t\tyears: \"Anos\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancelar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Restrição\",\r\n\t\tconstraint_type: \"Tipo Restrição\",\r\n\t\tconstraint_date: \"Data restrição\",\r\n\t\tasap: \"Mais breve possível\",\r\n\t\talap: \"Mais tarde possível\",\r\n\t\tsnet: \"Não começar antes de\",\r\n\t\tsnlt: \"Não começar depois de\",\r\n\t\tfnet: \"Não terminar antes de\",\r\n\t\tfnlt: \"Não terminar depois de\",\r\n\t\tmso: \"Precisa começar em\",\r\n\t\tmfo: \"Precisa terminar em\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"Tipo de filtros\",\r\n\t\tresources_filter_label: \"Ocultar vazios\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTraducere de Ovidiu Lixandru: http://www.madball.ro\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Ian\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Iun\", \"Iul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Duminica\", \"Luni\", \"Marti\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sambata\"],\r\n\t\tday_short: [\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sa\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Sarcina noua\",\r\n\t\ticon_save: \"Salveaza\",\r\n\t\ticon_cancel: \"Anuleaza\",\r\n\t\ticon_details: \"Detalii\",\r\n\t\ticon_edit: \"Editeaza\",\r\n\t\ticon_delete: \"Sterge\",\r\n\t\tconfirm_closing: \"Schimbarile nu vor fi salvate, esti sigur?\",// Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Evenimentul va fi sters permanent, esti sigur?\",\r\n\t\tsection_description: \"Descriere\",\r\n\t\tsection_time: \"Interval\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Anuleaza\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Maй\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Oктябрь\", \"Ноябрь\", \"Декабрь\"],\r\n\t\tmonth_short: [\"Янв\", \"Фев\", \"Maр\", \"Aпр\", \"Maй\", \"Июн\", \"Июл\", \"Aвг\", \"Сен\", \"Окт\", \"Ноя\", \"Дек\"],\r\n\t\tday_full: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"],\r\n\t\tday_short: [\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Новое задание\",\r\n\t\ticon_save: \"Сохранить\",\r\n\t\ticon_cancel: \"Отменить\",\r\n\t\ticon_details: \"Детали\",\r\n\t\ticon_edit: \"Изменить\",\r\n\t\ticon_delete: \"Удалить\",\r\n\t\tconfirm_closing: \"\", // Ваши изменения будут потеряны, продолжить?\r\n\t\tconfirm_deleting: \"Событие будет удалено безвозвратно, продолжить?\",\r\n\t\tsection_description: \"Описание\",\r\n\t\tsection_time: \"Период времени\",\r\n\t\tsection_type: \"Тип\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"ИСР\",\r\n\t\tcolumn_text: \"Задача\",\r\n\t\tcolumn_start_date: \"Начало\",\r\n\t\tcolumn_duration: \"Длительность\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Связь\",\r\n\t\tconfirm_link_deleting: \"будет удалена\",\r\n\t\tlink_start: \" (начало)\",\r\n\t\tlink_end: \" (конец)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Минута\",\r\n\t\thours: \"Час\",\r\n\t\tdays: \"День\",\r\n\t\tweeks: \"Неделя\",\r\n\t\tmonths: \"Месяц\",\r\n\t\tyears: \"Год\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Отменить\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"начните вводить слово для фильтрации\",\r\n\t\tresources_filter_label: \"спрятать не установленные\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\"],\r\n\t\tday_short: [\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova naloga\",\r\n\t\ticon_save: \"Shrani\",\r\n\t\ticon_cancel: \"Prekliči\",\r\n\t\ticon_details: \"Podrobnosti\",\r\n\t\ticon_edit: \"Uredi\",\r\n\t\ticon_delete: \"Izbriši\",\r\n\t\tconfirm_closing: \"\", // Spremembe ne bodo shranjene. Želite nadaljevati ?\r\n\t\tconfirm_deleting: \"Dogodek bo izbrisan. Želite nadaljevati?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Časovni okvir\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Prekliči\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sept\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\"],\r\n\t\tday_short: [\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nová úloha\",\r\n\t\ticon_save: \"Uložiť\",\r\n\t\ticon_cancel: \"Späť\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edituj\",\r\n\t\ticon_delete: \"Zmazať\",\r\n\t\tconfirm_closing: \"Vaše zmeny nebudú uložené. Skutočne?\", // Vaše změny budou ztraceny, opravdu ?\r\n\t\tconfirm_deleting: \"Udalosť bude natrvalo vymazaná. Skutočne?\",\r\n\t\tsection_description: \"Poznámky\",\r\n\t\tsection_time: \"Doba platnosti\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Späť\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTranslation by Peter Eriksson\r\n */\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"],\r\n\t\tday_short: [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny uppgift\",\r\n\t\ticon_save: \"Spara\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detajer\",\r\n\t\ticon_edit: \"Ändra\",\r\n\t\ticon_delete: \"Ta bort\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"Är du säker på att du vill ta bort händelsen permanent?\",\r\n\t\tsection_description: \"Beskrivning\",\r\n\t\tsection_time: \"Tid\",\r\n\t\tsection_type: \"Typ\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Uppgiftsnamn\",\r\n\t\tcolumn_start_date: \"Starttid\",\r\n\t\tcolumn_duration: \"Varaktighet\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\r\n\t\tlink: \"Länk\",\r\n\t\tconfirm_link_deleting: \"kommer tas bort\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (slut)\",\r\n\t\ttype_task: \"Uppgift\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milstolpe\",\r\n\r\n\t\tminutes: \"Minuter\",\r\n\t\thours: \"Timmar\",\r\n\t\tdays: \"Dagar\",\r\n\t\tweeks: \"Veckor\",\r\n\t\tmonths: \"Månader\",\r\n\t\tyears: \"År\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n * updated by @levkar at https://github.com/DHTMLX/gantt/pull/10\r\n */\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"],\r\n\t\tmonth_short: [\"Oca\", \"Şub\", \"Mar\", \"Nis\", \"May\", \"Haz\", \"Tem\", \"Ağu\", \"Eyl\", \"Eki\", \"Kas\", \"Ara\"],\r\n\t\tday_full: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"],\r\n\t\tday_short: [\"Paz\", \"Pzt\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cmt\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Yeni görev\",\r\n\t\ticon_save: \"Kaydet\",\r\n\t\ticon_cancel: \"İptal\",\r\n\t\ticon_details: \"Detaylar\",\r\n\t\ticon_edit: \"Düzenle\",\r\n\t\ticon_delete: \"Sil\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Görev silinecek, emin misiniz?\",\r\n\t\tsection_description: \"Açıklama\",\r\n\t\tsection_time: \"Zaman Aralığı\",\r\n\t\tsection_type: \"Tip\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Görev Adı\",\r\n\t\tcolumn_start_date: \"Başlangıç\",\r\n\t\tcolumn_duration: \"Süre\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Bağlantı\",\r\n\t\tconfirm_link_deleting: \"silinecek\",\r\n\t\tlink_start: \" (başlangıç)\",\r\n\t\tlink_end: \" (bitiş)\",\r\n\r\n\t\ttype_task: \"Görev\",\r\n\t\ttype_project: \"Proje\",\r\n\t\ttype_milestone: \"Kilometretaşı\",\r\n\r\n\r\n\t\tminutes: \"Dakika\",\r\n\t\thours: \"Saat\",\r\n\t\tdays: \"Gün\",\r\n\t\tweeks: \"Hafta\",\r\n\t\tmonths: \"Ay\",\r\n\t\tyears: \"Yıl\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Ýptal\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Січень\", \"Лютий\", \"Березень\", \"Квітень\", \"Травень\", \"Червень\", \"Липень\", \"Серпень\", \"Вересень\", \"Жовтень\", \"Листопад\", \"Грудень\"],\r\n\t\tmonth_short: [\"Січ\", \"Лют\", \"Бер\", \"Кві\", \"Тра\", \"Чер\", \"Лип\", \"Сер\", \"Вер\", \"Жов\", \"Лис\", \"Гру\"],\r\n\t\tday_full: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\"],\r\n\t\tday_short: [\"Нед\", \"Пон\", \"Вів\", \"Сер\", \"Чет\", \"Птн\", \"Суб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Нове завдання\",\r\n\t\ticon_save: \"Зберегти\",\r\n\t\ticon_cancel: \"Відміна\",\r\n\t\ticon_details: \"Деталі\",\r\n\t\ticon_edit: \"Редагувати\",\r\n\t\ticon_delete: \"Вилучити\",\r\n\t\tconfirm_closing: \"\", // Ваші зміни втратяться. Ви впевнені ?\r\n\t\tconfirm_deleting: \"Подія вилучиться назавжди. Ви впевнені?\",\r\n\t\tsection_description: \"Опис\",\r\n\t\tsection_time: \"Часовий проміжок\",\r\n\t\tsection_type: \"Тип\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Відміна\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","import * as utils from \"../utils/utils\";\r\nimport constants from \"../constants\";\r\nimport ExtensionManager from \"../ext/extension_manager\";\r\n\r\nimport services from \"../core/common/services\";\r\nimport config from \"../core/common/config\";\r\nimport ajax from \"../core/common/ajax\";\r\nimport date from \"../core/common/date\";\r\nimport {remoteEvents} from \"../core/remote/remote_events\";\r\n\r\nimport DnD from \"../core/common/dnd\";\r\nimport templates from \"../core/common/templates\";\r\nimport eventable from \"../utils/eventable\";\r\n\r\nimport StateService from \"../core/common/state\";\r\n\r\nimport Promise from \"../utils/promise\";\r\nimport env from \"../utils/env\";\r\nimport datastoreHooks from \"../core/datastore/datastore_hooks\";\r\nimport DataProcessor from \"../core/dataprocessor\";\r\n\r\nimport plugins from \"../core/plugins\";\r\n\r\nimport grid_column_api from \"../core/grid_column_api\";\r\nimport tasks from \"../core/tasks\";\r\nimport parsing from \"../core/loading/parsing\";\r\nimport work_time from \"../core/worktime/work_time\";\r\nimport data from \"../core/data\";\r\n\r\nimport void_script_second from \"../publish_helpers/void_script_second\";\r\n\r\nimport data_task_types from \"../core/data_task_types\";\r\nimport cached_functions from \"../core/cached_functions\";\r\n\r\nimport gantt_core from \"../core/gantt_core\";\r\nimport destructor from \"../core/destructor\";\r\nimport void_script_third from \"../publish_helpers/void_script_third\";\r\n\r\nimport i18nFactory from \"../locale\";\r\n\r\nfunction DHXGantt(){\r\n\tthis.constants = constants;\r\n\tthis.version = VERSION;\r\n\tthis.license = LICENSE;\r\n\tthis.templates = {};\r\n\tthis.ext = {};\r\n\tthis.keys = {\r\n\t\tedit_save: this.constants.KEY_CODES.ENTER,\r\n\t\tedit_cancel: this.constants.KEY_CODES.ESC\r\n\t};\r\n}\r\n\r\nexport default function(supportedExtensions) {\r\n\t// use a named constructor to make gantt instance discoverable in heap snapshots\r\n\tvar gantt = new DHXGantt();\r\n\r\n\tvar extensionManager = new ExtensionManager(supportedExtensions);\r\n\tvar activePlugins = {};\r\n\tgantt.plugins = function(config){\r\n\t\tfor(var i in config){\r\n\t\t\tif(config[i] && !activePlugins[i]){\r\n\t\t\t\tvar plugin = extensionManager.getExtension(i);\r\n\t\t\t\tif(plugin){\r\n\t\t\t\t\tplugin(gantt);\r\n\t\t\t\t\tactivePlugins[i] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn activePlugins;\r\n\t};\r\n\r\n\tgantt.$services = services();\r\n\tgantt.config = config();\r\n\tgantt.ajax = ajax(gantt);\r\n\tgantt.date = date(gantt);\r\n\tgantt.RemoteEvents = remoteEvents;\r\n\r\n\tvar dnd = DnD(gantt);\r\n\tgantt.$services.setService(\"dnd\", function(){return dnd;});\r\n\r\n\tvar templatesLoader = templates(gantt);\r\n\tgantt.$services.setService(\"templateLoader\", function () {\r\n\t\treturn templatesLoader;\r\n\t});\r\n\r\n\teventable(gantt);\r\n\r\n\t\r\n\tvar stateService = new StateService();\r\n\r\n\tstateService.registerProvider(\"global\", function () {\r\n\t\tvar res = {\r\n\t\t\tmin_date: gantt._min_date,\r\n\t\t\tmax_date: gantt._max_date,\r\n\t\t\tselected_task: null\r\n\t\t};\r\n\r\n\t\t// do not throw error if getState called from non-initialized gantt\r\n\t\tif(gantt.$data && gantt.$data.tasksStore){\r\n\t\t\tres.selected_task = gantt.$data.tasksStore.getSelectedId();\r\n\t\t}\r\n\t\treturn res;\r\n\t});\r\n\tgantt.getState = stateService.getState;\r\n\tgantt.$services.setService(\"state\", function () {\r\n\t\treturn stateService;\r\n\t});\r\n\r\n\tutils.mixin(gantt, utils);\r\n\r\n\tgantt.Promise = Promise;\r\n\tgantt.env = env;\r\n\r\n\tdatastoreHooks(gantt);\r\n\r\n\tgantt.dataProcessor = DataProcessor.DEPRECATED_api;\r\n\tgantt.createDataProcessor = DataProcessor.createDataProcessor;\r\n\r\n\tplugins(gantt);\r\n\r\n\tgrid_column_api(gantt);\r\n\ttasks(gantt);\r\n\tparsing(gantt);\r\n\twork_time(gantt);\r\n\tdata(gantt);\r\n\r\n\tvoid_script_second(gantt);\r\n\r\n\tdata_task_types(gantt);\r\n\tcached_functions(gantt);\r\n\r\n\tgantt_core(gantt);\r\n\tdestructor(gantt);\r\n\tvoid_script_third(gantt);\r\n\r\n\tvar i18n = i18nFactory();\r\n\tgantt.i18n = {\r\n\t\taddLocale: i18n.addLocale,\r\n\t\tsetLocale: function(locale){\r\n\t\t\tif(typeof locale === \"string\"){\r\n\t\t\t\tvar localeObject = i18n.getLocale(locale);\r\n\t\t\t\tif(!localeObject){\r\n\t\t\t\t\tlocaleObject = i18n.getLocale(\"en\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.locale = localeObject;\r\n\t\t\t}else if(locale){\r\n\t\t\t\tif(!gantt.locale){\r\n\t\t\t\t\tgantt.locale = locale;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfor(var i in locale){\r\n\t\t\t\t\t\tif(locale[i] && typeof locale[i] === \"object\"){\r\n\t\t\t\t\t\t\tif(!gantt.locale[i]){\r\n\t\t\t\t\t\t\t\tgantt.locale[i] = {};\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tgantt.mixin(gantt.locale[i], locale[i], true);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tgantt.locale[i] = locale[i];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetLocale: i18n.getLocale\r\n\t};\r\n\tgantt.i18n.setLocale(\"en\");\r\n\treturn gantt;\r\n};","export default function(){\r\n\tvar services = {};\r\n\tfunction register (name, getter){\r\n\t\tservices[name] = getter;\r\n\t}\r\n\r\n\tfunction getService(name){\r\n\t\tif(!services[name]){\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn services[name]();\r\n\t}\r\n\r\n\tfunction dropService(name) {\r\n\t\tif (services[name]) {\r\n\t\t\tdelete services[name];\r\n\t\t}\r\n\t}\r\n\r\n\tvar servicesEnum = {};\r\n\r\n\treturn {\r\n\t\tservices: servicesEnum,\r\n\t\tsetService: register,\r\n\t\tgetService: getService,\r\n\t\tdropService: dropService,\r\n\t\tdestructor: function(){\r\n\t\t\tfor(var i in services){\r\n\t\t\t\tif(services[i]){\r\n\t\t\t\t\tvar service = services[i];\r\n\t\t\t\t\tif(service && service.destructor){\r\n\t\t\t\t\t\tservice.destructor();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tservices = null;\r\n\t\t}\r\n\t};\r\n};\r\n","import eventable from \"../../utils/eventable\";\r\nimport * as utils from \"../../utils/utils\";\r\nimport timeout from \"../../utils/timeout\";\r\nimport global from \"../../utils/global\";\r\nimport * as domHelpers from \"../ui/utils/dom_helpers\";\r\n\r\nexport default function(gantt){\r\n\r\n\tfunction copyDomEvent(e){\r\n\t\treturn {\r\n\t\t\ttarget: e.target || e.srcElement,\r\n\t\t\tpageX: e.pageX,\r\n\t\t\tpageY: e.pageY,\r\n\t\t\tclientX: e.clientX,\r\n\t\t\tclientY: e.clientY,\r\n\t\t\tmetaKey: e.metaKey,\r\n\t\t\tshiftKey: e.shiftKey,\r\n\t\t\tctrlKey: e.ctrlKey,\r\n\t\t\taltKey: e.altKey\r\n\t\t};\r\n\t}\r\n\r\n\tfunction DnD(obj, config) {\r\n\t\tthis._obj = obj;\r\n\t\tthis._settings = config || {};\r\n\t\teventable(this);\r\n\r\n\t\tvar inputMethods = this.getInputMethods();\r\n\r\n\t\tthis._drag_start_timer = null;\r\n\t\tgantt.attachEvent(\"onGanttScroll\", utils.bind(function (left, top) {\r\n\t\t\tthis.clearDragTimer();\r\n\t\t}, this));\r\n\r\n\t\tvar lastDown = 0;\r\n\t\tvar eventParams = {passive: false};\r\n\t\tfor(var i = 0; i < inputMethods.length; i++){\r\n\t\t\t(utils.bind(function(input){\r\n\r\n\t\t\t\tgantt.event(obj, input.down, utils.bind(function (e) {\r\n\t\t\t\t\tif(!input.accessor(e)){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(config.preventDefault && config.selector && domHelpers.closest(e.target, config.selector)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (gantt.config.touch && e.timeStamp && e.timeStamp - lastDown < 300) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._settings.original_target = copyDomEvent(e);\r\n\r\n\t\t\t\t\tthis._settings.original_element_sizes = {\r\n\t\t\t\t\t\t...domHelpers.getRelativeNodePosition(e.target, domHelpers.getClosestSizedElement(obj)), \r\n\t\t\t\t\t\twidth: e.target.offsetWidth,\r\n\t\t\t\t\t\theight: e.target.offsetHeight\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (gantt.config.touch) {\r\n\t\t\t\t\t\tthis.clearDragTimer();\r\n\t\t\t\t\t\tthis._drag_start_timer = setTimeout(utils.bind(function () {\r\n\t\t\t\t\t\t\tif(gantt.getState().lightbox){\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.dragStart(obj, e, input);\r\n\t\t\t\t\t\t}, this), gantt.config.touch_drag);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.dragStart(obj, e, input);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this), eventParams);\r\n\t\t\t\tvar eventElement = document.body;\r\n\t\t\t\tgantt.event(eventElement, input.up, utils.bind(function (e) {\r\n\t\t\t\t\tif(!input.accessor(e)){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.clearDragTimer();\r\n\t\t\t\t}, this), eventParams);\r\n\r\n\t\t\t}, this))(inputMethods[i]);\r\n\t\t}\r\n\t}\r\n\r\n\tDnD.prototype = {\r\n\t\ttraceDragEvents: function (domElement, inputMethod) {\r\n\t\t\tvar mousemove = utils.bind(function (e) {\r\n\t\t\t\treturn this.dragMove(domElement, e, inputMethod.accessor);\r\n\t\t\t}, this);\r\n\t\t\tutils.bind(function (e) {\r\n\t\t\t\treturn this.dragScroll(domElement, e);\r\n\t\t\t}, this);\r\n\r\n\t\t\tvar limited_mousemove = utils.bind(function (e) {\r\n\t\t\t\tif (this.config.started && utils.defined(this.config.updates_per_second)) {\r\n\t\t\t\t\tif (!timeout(this, this.config.updates_per_second))\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar dndActive = mousemove(e);\r\n\r\n\t\t\t\tif (dndActive) {\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tif (e && e.preventDefault && e.cancelable){//e.cancelable condition - because navigator.vibrate is blocked by Chrome\r\n\t\t\t\t\t\t\te.preventDefault();//Cancel default action on DND\r\n\t\t\t\t\t\t} //Cancel default action on DND\r\n\t\t\t\t\t}catch (e){\r\n\t\t\t\t\t\t// just suppress the exception, nothing needed to be done here\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//e.cancelBubble = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dndActive;\r\n\t\t\t}, this);\r\n\t\t\tvar eventElement = domHelpers.getRootNode(gantt.$root);\r\n\t\t\tvar mousemoveContainer = this.config.mousemoveContainer || domHelpers.getRootNode(gantt.$root);\r\n\r\n\t\t\tvar eventParams = {passive: false};\r\n\t\t\tvar mouseup = utils.bind(function (e) {\r\n\t\t\t\tgantt.eventRemove(mousemoveContainer, inputMethod.move, limited_mousemove);\r\n\t\t\t\tgantt.eventRemove(eventElement, inputMethod.up, mouseup, eventParams);\r\n\t\t\t\treturn this.dragEnd(domElement);\r\n\t\t\t}, this);\r\n\r\n\t\t\tgantt.event(mousemoveContainer, inputMethod.move, limited_mousemove, eventParams);\r\n\t\t\tgantt.event(eventElement, inputMethod.up, mouseup, eventParams);\r\n\t\t},\r\n\t\tcheckPositionChange: function (pos) {\r\n\t\t\tvar diff_x = pos.x - this.config.pos.x;\r\n\t\t\tvar diff_y = pos.y - this.config.pos.y;\r\n\t\t\tvar distance = Math.sqrt(Math.pow(Math.abs(diff_x), 2) + Math.pow(Math.abs(diff_y), 2));\r\n\r\n\t\t\tif (distance > this.config.sensitivity) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tinitDnDMarker: function () {\r\n\t\t\t// create dnd placeholder and put it in dom\r\n\t\t\tvar marker = this.config.marker = document.createElement(\"div\");\r\n\t\t\tmarker.className = \"gantt_drag_marker\";\r\n\t\t\t// GS-1333: don't show any message when we resize grid columns\r\n\t\t\tmarker.innerHTML = \"\";\r\n\t\t\tdocument.body.appendChild(marker);\r\n\t\t},\r\n\t\tbackupEventTarget: function (domEvent, getEvent) {\r\n\t\t\tif (!gantt.config.touch) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// keep original event target in DOM in order to keep dnd on touchmove event\r\n\t\t\tvar e = getEvent(domEvent);\r\n\r\n\t\t\tvar el = e.target || e.srcElement;\r\n\t\t\tvar copy = el.cloneNode(true);\r\n\t\t\t//this.config.target.target = copy;\r\n\t\t\tthis.config.original_target = copyDomEvent(e);\r\n\t\t\tthis.config.original_target.target = copy;\r\n\t\t\tthis.config.backup_element = el;\r\n\t\t\tel.parentNode.appendChild(copy);\r\n\r\n\t\t\tel.style.display = \"none\";\r\n\t\t\tvar mousemoveContainer = this.config.mousemoveContainer || document.body;\r\n\t\t\tmousemoveContainer.appendChild(el);\r\n\t\t},\r\n\t\tgetInputMethods: function () {\r\n\t\t\t// bind actions to browser events\r\n\t\t\tvar inputMethods = [];\r\n\r\n\t\t\tinputMethods.push({\r\n\t\t\t\t\"move\": \"mousemove\",\r\n\t\t\t\t\"down\": \"mousedown\",\r\n\t\t\t\t\"up\": \"mouseup\",\r\n\t\t\t\t\"accessor\": function (e) {\r\n\t\t\t\t\treturn e;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (gantt.config.touch) {\r\n\r\n\t\t\t\tvar touchEventsSupported = true;\r\n\t\t\t\ttry{\r\n\t\t\t\t\tdocument.createEvent(\"TouchEvent\");\r\n\t\t\t\t}catch (e){\r\n\t\t\t\t\ttouchEventsSupported = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(touchEventsSupported){\r\n\t\t\t\t\tinputMethods.push({\r\n\t\t\t\t\t\t\"move\": \"touchmove\",\r\n\t\t\t\t\t\t\"down\": \"touchstart\",\r\n\t\t\t\t\t\t\"up\": \"touchend\",\r\n\t\t\t\t\t\t\"accessor\": function (ev) {\r\n\t\t\t\t\t\t\tif (ev.touches && ev.touches.length > 1) return null;\r\n\t\t\t\t\t\t\tif (ev.touches[0])\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\ttarget: document.elementFromPoint(ev.touches[0].clientX, ev.touches[0].clientY),\r\n\t\t\t\t\t\t\t\t\tpageX: ev.touches[0].pageX,\r\n\t\t\t\t\t\t\t\t\tpageY: ev.touches[0].pageY,\r\n\t\t\t\t\t\t\t\t\tclientX: ev.touches[0].clientX,\r\n\t\t\t\t\t\t\t\t\tclientY: ev.touches[0].clientY\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\treturn ev;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else if(global.navigator.pointerEnabled){\r\n\t\t\t\t\tinputMethods.push({\r\n\t\t\t\t\t\t\"move\": \"pointermove\",\r\n\t\t\t\t\t\t\"down\": \"pointerdown\",\r\n\t\t\t\t\t\t\"up\": \"pointerup\",\r\n\t\t\t\t\t\t\"accessor\": function (ev) {\r\n\t\t\t\t\t\t\tif (ev.pointerType == \"mouse\") return null;\r\n\t\t\t\t\t\t\treturn ev;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}else if (global.navigator.msPointerEnabled){\r\n\t\t\t\t\tinputMethods.push({\r\n\t\t\t\t\t\t\"move\": \"MSPointerMove\",\r\n\t\t\t\t\t\t\"down\": \"MSPointerDown\",\r\n\t\t\t\t\t\t\"up\": \"MSPointerUp\",\r\n\t\t\t\t\t\t\"accessor\": function (ev) {\r\n\t\t\t\t\t\t\tif (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\r\n\t\t\t\t\t\t\treturn ev;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn inputMethods;\r\n\t\t},\r\n\t\tclearDragTimer: function () {\r\n\t\t\tif (this._drag_start_timer) {\r\n\t\t\t\tclearTimeout(this._drag_start_timer);\r\n\t\t\t\tthis._drag_start_timer = null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tdragStart: function (obj, e, inputMethod) {\r\n\t\t\tif (this.config && this.config.started) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.config = {\r\n\t\t\t\tobj: obj,\r\n\t\t\t\tmarker: null,\r\n\t\t\t\tstarted: false,\r\n\t\t\t\tpos: this.getPosition(e),\r\n\t\t\t\tsensitivity: 4\r\n\t\t\t};\r\n\t\t\tif (this._settings)\r\n\t\t\t\tutils.mixin(this.config, this._settings, true);\r\n\r\n\r\n\t\t\tthis.traceDragEvents(obj, inputMethod);\r\n\r\n\t\t\tgantt._prevent_touch_scroll = true;\r\n\t\t\tdocument.body.className += \" gantt_noselect\";\r\n\r\n\t\t\tif (gantt.config.touch) {\r\n\t\t\t\tthis.dragMove(obj, e, inputMethod.accessor);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tdragMove: function (obj, e, getEvent) {\r\n\t\t\tvar source = getEvent(e);\r\n\t\t\tif (!source) return false;\r\n\r\n\t\t\tif (!this.config.marker && !this.config.started) {\r\n\t\t\t\tvar pos = this.getPosition(source);\r\n\r\n\t\t\t\tif (gantt.config.touch || this.checkPositionChange(pos)) {\r\n\t\t\t\t\t// real drag starts here,\r\n\t\t\t\t\t// when user moves mouse at first time after onmousedown\r\n\t\t\t\t\tthis.config.started = true;\r\n\t\t\t\t\tthis.config.ignore = false;\r\n\t\t\t\t\tgantt._touch_drag = true;\r\n\t\t\t\t\tif (this.callEvent(\"onBeforeDragStart\", [obj, this.config.original_target]) === false) {\r\n\t\t\t\t\t\tthis.config.ignore = true;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.backupEventTarget(e, getEvent);\r\n\t\t\t\t\tthis.initDnDMarker();\r\n\t\t\t\t\tgantt._touch_feedback();\r\n\t\t\t\t\tthis.callEvent(\"onAfterDragStart\", [obj, this.config.original_target]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.config.ignore = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.config.ignore) {\r\n\t\t\t\t// GS-1279 Gantt crashes on Mobile Firefox after starting to create a link and moving finger outisde the page.\r\n\t\t\t\tif (e.targetTouches && !source.target) return;\r\n\t\t\t\t\r\n\t\t\t\tsource.pos = this.getPosition(source);\r\n\t\t\t\tthis.config.marker.style.left = source.pos.x + \"px\";\r\n\t\t\t\tthis.config.marker.style.top = source.pos.y + \"px\";\r\n\t\t\t\tthis.callEvent(\"onDragMove\", [obj, source]);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tdragEnd: function (obj) {\r\n\t\t\tvar target = this.config.backup_element;\r\n\t\t\tif (target && target.parentNode) {\r\n\t\t\t\ttarget.parentNode.removeChild(target);\r\n\t\t\t}\r\n\t\t\tgantt._prevent_touch_scroll = false;\r\n\t\t\tif (this.config.marker) {\r\n\t\t\t\tthis.config.marker.parentNode.removeChild(this.config.marker);\r\n\t\t\t\tthis.config.marker = null;\r\n\r\n\t\t\t\tthis.callEvent(\"onDragEnd\", []);\r\n\t\t\t}\r\n\t\t\tthis.config.started = false;\r\n\t\t\tgantt._touch_drag = false;\r\n\t\t\tdocument.body.className = document.body.className.replace(\" gantt_noselect\", \"\");\r\n\t\t},\r\n\r\n\t\tgetPosition: function (e) {\r\n\t\t\tvar x = 0, y = 0;\r\n\t\t\tif (e.pageX || e.pageY) {\r\n\t\t\t\tx = e.pageX;\r\n\t\t\t\ty = e.pageY;\r\n\t\t\t} else if (e.clientX || e.clientY) {\r\n\t\t\t\tx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\r\n\t\t\t\ty = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\r\n\t\t\t}\r\n\t\t\treturn {x: x, y: y};\r\n\t\t}\r\n\t};\r\n\r\n\treturn DnD;\r\n};\r\n","export default function(gantt) {\r\n\r\n\tvar regTemplates = {};\r\n\r\n\tfunction initTemplate(name, initial, template_name) {\r\n\t\ttemplate_name = template_name || name;\r\n\t\tvar config = gantt.config,\r\n\t\t\ttemplates = gantt.templates;\r\n\r\n\t\tif (gantt.config[name] && regTemplates[template_name] != config[name]) {\r\n\t\t\tif (!(initial && templates[template_name])) {\r\n\t\t\t\ttemplates[template_name] = gantt.date.date_to_str(config[name]);\r\n\t\t\t\tregTemplates[template_name] = config[name];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction initTemplates() {\r\n\t\tvar labels = gantt.locale.labels;\r\n\t\tlabels.gantt_save_btn = labels.icon_save;\r\n\t\tlabels.gantt_cancel_btn = labels.icon_cancel;\r\n\t\tlabels.gantt_delete_btn = labels.icon_delete;\r\n\r\n\r\n\t\tvar date = gantt.date;\r\n\r\n\t\t//build configuration based templates\r\n\t\tvar d = date.date_to_str;\r\n\t\tvar c = gantt.config;\r\n\t\tvar format_date = d(c.xml_date || c.date_format, c.server_utc);\r\n\t\tvar parse_date = date.str_to_date(c.xml_date || c.date_format, c.server_utc);\r\n\r\n\t\tinitTemplate(\"date_scale\", true, undefined, gantt.config, gantt.templates);\r\n\t\tinitTemplate(\"date_grid\", true, \"grid_date_format\", gantt.config, gantt.templates);\r\n\t\tinitTemplate(\"task_date\", true, undefined, gantt.config, gantt.templates);\r\n\r\n\t\tgantt.mixin(gantt.templates, {\r\n\t\t\txml_format: undefined, // deprecated\r\n\t\t\tformat_date: format_date,\r\n\r\n\t\t\txml_date: undefined, // deprecated\r\n\t\t\tparse_date: parse_date,\r\n\r\n\t\t\tprogress_text: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tgrid_header_class: function (column, config) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\r\n\t\t\ttask_text: function (start, end, task) {\r\n\t\t\t\treturn task.text;\r\n\t\t\t},\r\n\t\t\ttask_class: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttask_end_date: function (date) {\r\n\t\t\t\treturn gantt.templates.task_date(date);\r\n\t\t\t},\r\n\t\t\tgrid_row_class: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttask_row_class: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttimeline_cell_class: function (item, date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttimeline_cell_content: function (item, date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tscale_cell_class: function (date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tscale_row_class: function (date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\r\n\t\t\tgrid_indent: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_folder: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_file: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_open: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_blank: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tdate_grid: function (date, item, column) {\r\n\t\t\t\tif (item && gantt.isUnscheduledTask(item) && gantt.config.show_unscheduled) {\r\n\t\t\t\t\treturn gantt.templates.task_unscheduled_time(item);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gantt.templates.grid_date_format(date, column);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\ttask_time: function (start, end, ev) {\r\n\t\t\t\tif (gantt.isUnscheduledTask(ev) && gantt.config.show_unscheduled) {\r\n\t\t\t\t\treturn gantt.templates.task_unscheduled_time(ev);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gantt.templates.task_date(start) + \" - \" + gantt.templates.task_end_date(end);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\ttask_unscheduled_time: function (task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\r\n\t\t\ttime_picker: d(c.time_picker),\r\n\t\t\tlink_class: function (link) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tlink_description: function (link) {\r\n\t\t\t\tvar from = gantt.getTask(link.source),\r\n\t\t\t\t\tto = gantt.getTask(link.target);\r\n\r\n\t\t\t\treturn \"\" + from.text + \" – \" + to.text + \" \";\r\n\t\t\t},\r\n\r\n\t\t\tdrag_link: function (from, from_start, to, to_start) {\r\n\t\t\t\tfrom = gantt.getTask(from);\r\n\t\t\t\tvar labels = gantt.locale.labels;\r\n\r\n\t\t\t\tvar text = \"\" + from.text + \" \" + (from_start ? labels.link_start : labels.link_end) + \" \";\r\n\t\t\t\tif (to) {\r\n\t\t\t\t\tto = gantt.getTask(to);\r\n\t\t\t\t\ttext += \" \" + to.text + \" \" + (to_start ? labels.link_start : labels.link_end) + \" \";\r\n\t\t\t\t}\r\n\t\t\t\treturn text;\r\n\t\t\t},\r\n\t\t\tdrag_link_class: function (from, from_start, to, to_start) {\r\n\t\t\t\tvar add = \"\";\r\n\r\n\t\t\t\tif (from && to) {\r\n\t\t\t\t\tvar allowed = gantt.isLinkAllowed(from, to, from_start, to_start);\r\n\t\t\t\t\tadd = \" \" + (allowed ? \"gantt_link_allow\" : \"gantt_link_deny\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn \"gantt_link_tooltip\" + add;\r\n\t\t\t},\r\n\r\n\t\t\t/* used for aria-labels of bar elements and for tooltip.js */\r\n\t\t\ttooltip_date_format: date.date_to_str(\"%Y-%m-%d\"),\r\n\t\t\ttooltip_text: function (start, end, event) {\r\n\t\t\t\treturn `Task: ${event.text}
\r\n\t\t\t\tStart date: ${gantt.templates.tooltip_date_format(start)}
\r\n\t\t\t\tEnd date: ${gantt.templates.tooltip_date_format(end)}
`;\r\n\t\t\t},\r\n\t\t\tbaseline_text: function (task, baseline, index) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn {\r\n\t\tinitTemplates: initTemplates,\r\n\t\tinitTemplate: initTemplate\r\n\t};\r\n\r\n};","import * as utils from \"../../utils/utils\";\r\nimport facadeFactory from \"./../facades/datastore\";\r\nimport calculateScaleRange from \"../gantt_data_range\";\r\nimport isPlaceholderTask from \"../../utils/placeholder_task\";\r\n\r\nimport treeHelper from \"../../utils/task_tree_helpers\";\r\n\r\nfunction initDataStores(gantt){\r\n\r\n\tvar facade = facadeFactory.create();\r\n\tutils.mixin(gantt, facade);\r\n\tvar tasksStore = gantt.createDatastore({\r\n\t\tname: \"task\",\r\n\t\ttype: \"treeDatastore\",\r\n\t\trootId: function() { return gantt.config.root_id; },\r\n\t\tinitItem: utils.bind(_init_task, gantt),\r\n\t\tgetConfig: function() { return gantt.config; }\r\n\t});\r\n\r\n\tvar linksStore = gantt.createDatastore({\r\n\t\tname: \"link\",\r\n\t\tinitItem: utils.bind(_init_link, gantt)\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\ttasksStore.destructor();\r\n\t\tlinksStore.destructor();\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onLinkValidation\", function(link){\r\n\t\tif(gantt.isLinkExists(link.id) || link.id === \"predecessor_generated\"){\r\n\t\t\t// link was already added into gantt\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar source = gantt.getTask(link.source);\r\n\t\tvar taskLinks = source.$source;\r\n\t\tfor (var i = 0; i < taskLinks.length; i++) {\r\n\t\t\tvar existingLink = gantt.getLink(taskLinks[i]);\r\n\r\n\t\t\tvar sourceMatch = link.source == existingLink.source;\r\n\t\t\tvar targetMatch = link.target == existingLink.target;\r\n\t\t\tvar typeMatch = link.type == existingLink.type;\r\n\r\n\t\t\t// prevent creating duplicated links from the UI\r\n\t\t\tif (sourceMatch && targetMatch && typeMatch) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onBeforeRefreshAll\", function(){\r\n\r\n\t\t// GS-2170 do not recalculate indexes and dates as the event will be called later in the onStoreUpdate event\r\n\t\tif (tasksStore._skipTaskRecalculation){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar order = tasksStore.getVisibleItems();\r\n\r\n\t\tfor(var i=0; i < order.length; i++){\r\n\t\t\tvar item = order[i];\r\n\t\t\titem.$index = i;\r\n\t\t\titem.$local_index = gantt.getTaskIndex(item.id);\r\n\t\t\tgantt.resetProjectDates(item);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onFilterItem\", function(id, task) {\r\n\t\tif (gantt.config.show_tasks_outside_timescale) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar min = null, max = null;\r\n\t\tif (gantt.config.start_date && gantt.config.end_date) {\r\n\t\t\tif (gantt._isAllowedUnscheduledTask(task)) return true;\r\n\t\t\tmin = gantt.config.start_date.valueOf();\r\n\t\t\tmax = gantt.config.end_date.valueOf();\r\n\r\n\t\t\tif (+task.start_date > max || +task.end_date < +min)\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onIdChange\", function(oldId, newId){\r\n\t\tgantt._update_flags(oldId, newId);\r\n\r\n\t\tvar changedTask = gantt.getTask(newId);\r\n\t\tif(!tasksStore.isSilent()){\r\n\t\t\tif(changedTask.$split_subtask || changedTask.rollup){\r\n\t\t\t\tgantt.eachParent(function(parent){\r\n\t\t\t\t\tgantt.refreshTask(parent.id);\r\n\t\t\t\t}, newId);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onAfterUpdate\", function(id){\r\n\t\tgantt._update_parents(id);\r\n\t\tif(gantt.getState(\"batchUpdate\").batch_update){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tvar task = tasksStore.getItem(id);\r\n\t\tif (!task.$source) task.$source = [];\r\n\t\tfor (var i = 0; i < task.$source.length; i++) {\r\n\t\t\tlinksStore.refresh(task.$source[i]);\r\n\t\t}\r\n\t\tif (!task.$target) task.$target = [];\r\n\t\tfor (var i = 0; i < task.$target.length; i++) {\r\n\t\t\tlinksStore.refresh(task.$target[i]);\r\n\t\t}\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onBeforeItemMove\", function(sid, parent, tindex){\r\n\t\t// GS-125. Don't allow users to move the placeholder task\r\n\t\tif (isPlaceholderTask(sid, gantt, tasksStore)){\r\n\t\t\t//eslint-disable-next-line\r\n\t\t\tconsole.log(\"The placeholder task cannot be moved to another position.\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onAfterItemMove\", function(sid, parent, tindex){\r\n\t\tvar source = gantt.getTask(sid);\r\n\r\n\t\tif(this.getNextSibling(sid) !== null){\r\n\t\t\tsource.$drop_target = this.getNextSibling(sid);\r\n\t\t} else if(this.getPrevSibling(sid) !== null){\r\n\t\t\tsource.$drop_target = \"next:\" + this.getPrevSibling(sid);\r\n\t\t}else{\r\n\t\t\tsource.$drop_target = \"next:null\";\r\n\t\t}\r\n\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onStoreUpdated\", function(id, item, action){\r\n\t\tif(action == \"delete\"){\r\n\t\t\tgantt._update_flags(id, null);\r\n\t\t}\r\n\r\n\t\tvar state = gantt.$services.getService(\"state\");\r\n\t\tif(state.getState(\"batchUpdate\").batch_update){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(gantt.config.fit_tasks && action !== \"paint\"){\r\n\t\t\tvar oldState = gantt.getState();\r\n\t\t\tcalculateScaleRange(gantt);\r\n\t\t\tvar newState = gantt.getState();\r\n\r\n\t\t\t//this._init_tasks_range();\r\n\t\t\tif (+oldState.min_date != +newState.min_date || +oldState.max_date != +newState.max_date) {\r\n\t\t\t\tgantt.render();\r\n\r\n\t\t\t\tgantt.callEvent(\"onScaleAdjusted\", []);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(action == \"add\" || action == \"move\" || action == \"delete\"){\r\n\t\t\tif(gantt.$layout){\r\n\t\t\t\t// GS-2170. Do not recalculate the indexes and dates of other tasks in the\r\n\t\t\t\t// onBeforeResize layout event, but do it later. If lightbox is opened, it will\r\n\t\t\t\t// trigger the refreshData, so the indexes and dates will be recalculated there\r\n\t\t\t\tif (this.$config.name == \"task\" && (action == \"add\" || action == \"delete\")){\r\n\t\t\t\t\tif (this._skipTaskRecalculation != \"lightbox\"){\r\n\t\t\t\t\t\tthis._skipTaskRecalculation = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tgantt.$layout.resize();\r\n\t\t\t}\r\n\r\n\t\t}else if(!id){\r\n\t\t\tlinksStore.refresh();\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tlinksStore.attachEvent(\"onAfterAdd\", function(id, link){\r\n\t\tsync_link(link);\r\n\t});\r\n\tlinksStore.attachEvent(\"onAfterUpdate\", function(id, link){\r\n\t\tsync_links();\r\n\t});\r\n\tlinksStore.attachEvent(\"onAfterDelete\", function(id, link){\r\n\t\tsync_link_delete(link);\r\n\t});\r\n\tlinksStore.attachEvent(\"onAfterSilentDelete\", function(id, link){\r\n\t\tsync_link_delete(link);\r\n\t});\r\n\tlinksStore.attachEvent(\"onBeforeIdChange\", function(oldId, newId){\r\n\t\tsync_link_delete(gantt.mixin({id:oldId}, gantt.$data.linksStore.getItem(newId)));\r\n\t\tsync_link(gantt.$data.linksStore.getItem(newId));\r\n\t});\r\n\r\n\tfunction checkLinkedTaskVisibility(taskId){\r\n\t\tvar isVisible = gantt.isTaskVisible(taskId);\r\n\t\tif(!isVisible && gantt.isTaskExists(taskId)){\r\n\t\t\tvar parent = gantt.getParent(taskId);\r\n\t\t\tif(gantt.isTaskExists(parent) && gantt.isTaskVisible(parent)){\r\n\t\t\t\tparent = gantt.getTask(parent);\r\n\t\t\t\tif(gantt.isSplitTask(parent)){\r\n\t\t\t\t\tisVisible = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn isVisible;\r\n\t}\r\n\r\n\tlinksStore.attachEvent(\"onFilterItem\", function(id, link){\r\n\t\tif (!gantt.config.show_links) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar sourceVisible = checkLinkedTaskVisibility(link.source);\r\n\t\tvar targetVisible = checkLinkedTaskVisibility(link.target);\r\n\r\n\t\tif (!(sourceVisible && targetVisible) ||\r\n\t\t\tgantt._isAllowedUnscheduledTask(gantt.getTask(link.source)) || gantt._isAllowedUnscheduledTask(gantt.getTask(link.target)))\r\n\t\t\treturn false;\r\n\r\n\t\treturn gantt.callEvent(\"onBeforeLinkDisplay\", [id, link]);\r\n\t});\r\n\r\n\r\n\t(function(){\r\n\t\t// delete all connected links after task is deleted\r\n\t\tvar deletedLinks = {};\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskDelete\", function(id, item){\r\n\t\t\tdeletedLinks[id] = treeHelper.getSubtreeLinks(gantt, id);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onAfterTaskDelete\", function(id, item) {\r\n\t\t\tif(deletedLinks[id]){\r\n\t\t\t\tgantt.$data.linksStore.silent(function(){\r\n\t\t\t\t\tfor(var i in deletedLinks[id]){\r\n\t\t\t\t\t\tif (gantt.isLinkExists(i)){\r\n\t\t\t\t\t\t\tgantt.$data.linksStore.removeItem(i);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsync_link_delete(deletedLinks[id][i]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdeletedLinks[id] = null;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t})();\r\n\r\n\tgantt.attachEvent(\"onAfterLinkDelete\", function(id, link) {\r\n\t\tgantt.refreshTask(link.source);\r\n\t\tgantt.refreshTask(link.target);\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onParse\", sync_links);\r\n\r\n\tmapEvents({\r\n\t\tsource: linksStore,\r\n\t\ttarget: gantt,\r\n\t\tevents:{\r\n\t\t\t\"onItemLoading\":\"onLinkLoading\",\r\n\t\t\t\"onBeforeAdd\":\"onBeforeLinkAdd\",\r\n\t\t\t\"onAfterAdd\":\"onAfterLinkAdd\",\r\n\t\t\t\"onBeforeUpdate\":\"onBeforeLinkUpdate\",\r\n\t\t\t\"onAfterUpdate\":\"onAfterLinkUpdate\",\r\n\t\t\t\"onBeforeDelete\":\"onBeforeLinkDelete\",\r\n\t\t\t\"onAfterDelete\":\"onAfterLinkDelete\",\r\n\t\t\t\"onIdChange\":\"onLinkIdChange\"\r\n\t\t}\r\n\t});\r\n\r\n\tmapEvents({\r\n\t\tsource: tasksStore,\r\n\t\ttarget: gantt,\r\n\t\tevents:{\r\n\t\t\t\"onItemLoading\":\"onTaskLoading\",\r\n\t\t\t\"onBeforeAdd\":\"onBeforeTaskAdd\",\r\n\t\t\t\"onAfterAdd\":\"onAfterTaskAdd\",\r\n\t\t\t\"onBeforeUpdate\":\"onBeforeTaskUpdate\",\r\n\t\t\t\"onAfterUpdate\":\"onAfterTaskUpdate\",\r\n\t\t\t\"onBeforeDelete\":\"onBeforeTaskDelete\",\r\n\t\t\t\"onAfterDelete\":\"onAfterTaskDelete\",\r\n\t\t\t\"onIdChange\":\"onTaskIdChange\",\r\n\t\t\t\"onBeforeItemMove\":\"onBeforeTaskMove\",\r\n\t\t\t\"onAfterItemMove\":\"onAfterTaskMove\",\r\n\t\t\t\"onFilterItem\":\"onBeforeTaskDisplay\",\r\n\t\t\t\"onItemOpen\":\"onTaskOpened\",\r\n\t\t\t\"onItemClose\":\"onTaskClosed\",\r\n\t\t\t\"onBeforeSelect\":\"onBeforeTaskSelected\",\r\n\t\t\t\"onAfterSelect\":\"onTaskSelected\",\r\n\t\t\t\"onAfterUnselect\":\"onTaskUnselected\"\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.$data = {\r\n\t\ttasksStore: tasksStore,\r\n\t\tlinksStore: linksStore\r\n\t};\r\n\r\n\tfunction sync_link(link){\r\n\t\tif(gantt.isTaskExists(link.source)){\r\n\t\t\tvar sourceTask = gantt.getTask(link.source);\r\n\t\t\tsourceTask.$source = sourceTask.$source || [];\r\n\t\t\tsourceTask.$source.push(link.id);\r\n\t\t}\r\n\t\tif(gantt.isTaskExists(link.target)){\r\n\t\t\tvar targetTask = gantt.getTask(link.target);\r\n\t\t\ttargetTask.$target = targetTask.$target || [];\r\n\t\t\ttargetTask.$target.push(link.id);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction sync_link_delete(link){\r\n\t\tif(gantt.isTaskExists(link.source)){\r\n\t\t\tvar sourceTask = gantt.getTask(link.source);\r\n\t\t\tfor(var i = 0; i < sourceTask.$source.length; i++){\r\n\t\t\t\tif(sourceTask.$source[i] == link.id){\r\n\t\t\t\t\tsourceTask.$source.splice(i, 1);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(gantt.isTaskExists(link.target)){\r\n\t\t\tvar targetTask = gantt.getTask(link.target);\r\n\t\t\tfor(var i = 0; i < targetTask.$target.length; i++){\r\n\t\t\t\tif(targetTask.$target[i] == link.id){\r\n\t\t\t\t\ttargetTask.$target.splice(i, 1);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction sync_links() {\r\n\t\tvar task = null;\r\n\t\tvar tasks = gantt.$data.tasksStore.getItems();\r\n\r\n\t\tfor(var i = 0, len = tasks.length; i < len; i++){\r\n\t\t\ttask = tasks[i];\r\n\t\t\ttask.$source = [];\r\n\t\t\ttask.$target = [];\r\n\t\t}\r\n\r\n\t\tvar links = gantt.$data.linksStore.getItems();\r\n\t\tfor (var i = 0, len = links.length; i < len; i++) {\r\n\r\n\t\t\tvar link = links[i];\r\n\t\t\tsync_link(link);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction mapEvents(conf){\r\n\t\tvar mapFrom = conf.source;\r\n\t\tvar mapTo = conf.target;\r\n\t\tfor(var i in conf.events){\r\n\t\t\t(function(sourceEvent, targetEvent){\r\n\t\t\t\tmapFrom.attachEvent(sourceEvent, function(){\r\n\t\t\t\t\treturn mapTo.callEvent(targetEvent, Array.prototype.slice.call(arguments));\r\n\t\t\t\t}, targetEvent);\r\n\t\t\t})(i, conf.events[i]);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _init_task(task) {\r\n\t\tif (!this.defined(task.id))\r\n\t\t\ttask.id = this.uid();\r\n\r\n\t\tif (task.start_date)\r\n\t\t\ttask.start_date = gantt.date.parseDate(task.start_date, \"parse_date\");\r\n\t\tif (task.end_date)\r\n\t\t\ttask.end_date = gantt.date.parseDate(task.end_date, \"parse_date\");\r\n\r\n\r\n\t\tvar duration = null;\r\n\t\tif (task.duration || task.duration === 0) {\r\n\t\t\ttask.duration = duration = task.duration * 1;\r\n\t\t}\r\n\r\n\t\tif (duration) {\r\n\t\t\tif (task.start_date && !task.end_date) {\r\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\r\n\t\t\t} else if (!task.start_date && task.end_date) {\r\n\t\t\t\ttask.start_date = this.calculateEndDate({\r\n\t\t\t\t\tstart_date: task.end_date,\r\n\t\t\t\t\tduration: -task.duration,\r\n\t\t\t\t\ttask: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t//task.$calculate_duration = false;\r\n\t\t}\r\n\r\n\t\tif (gantt.config.deadlines !== false && task.deadline){\r\n\t\t\ttask.deadline = gantt.date.parseDate(task.deadline, \"parse_date\");\r\n\t\t}\r\n\r\n\t\ttask.progress = Number(task.progress) || 0;\r\n\r\n\t\tif (this._isAllowedUnscheduledTask(task)) {\r\n\t\t\tthis._set_default_task_timing(task);\r\n\t\t}\r\n\t\tthis._init_task_timing(task);\r\n\t\tif (task.start_date && task.end_date)\r\n\t\t\tthis.correctTaskWorkTime(task);\r\n\r\n\t\ttask.$source = [];\r\n\t\ttask.$target = [];\r\n\r\n\t\tvar originalTask = this.$data.tasksStore.getItem(task.id);\r\n\t\tif (originalTask && !utils.defined(task.open)) {\r\n\t\t\t// if a task with the same id is already in the gantt and the new object doesn't specify the `open` state -\r\n\t\t\t// restore the `open` state we already have in the chart\r\n\t\t\ttask.$open = originalTask.$open;\r\n\t\t}\r\n\r\n\t\tif (task.parent === undefined) {\r\n\t\t\ttask.parent = this.config.root_id;\r\n\t\t}\r\n\t\treturn task;\r\n\t}\r\n\r\n\tfunction _init_link(link) {\r\n\t\tif (!this.defined(link.id))\r\n\t\t\tlink.id = this.uid();\r\n\t\treturn link;\r\n\t}\r\n}\r\n\r\n\r\nexport default initDataStores;\r\n","import batch_update from \"./batch_update\";\r\nimport wbs from \"./wbs\";\r\nimport resources from \"./resources\";\r\nimport resource_assignments from \"./resource_assignments\";\r\nimport new_task_placeholder from \"./new_task_placeholder\";\r\nimport auto_task_types from \"./auto_task_types\";\r\nimport formatters from \"./formatters\";\r\nimport empty_state_screen from \"./empty_state_screen\";\r\nimport baselines from \"./baselines\";\r\n\r\nexport default function(gantt){\r\n\tif(!gantt.ext){\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tvar modules = [\r\n\t\tbatch_update,\r\n\t\twbs,\r\n\t\tresources,\r\n\t\tresource_assignments,\r\n\t\tnew_task_placeholder,\r\n\t\tauto_task_types,\r\n\t\tformatters,\r\n\t\tempty_state_screen,\r\n\t\tbaselines\r\n\t];\r\n\r\n\tfor(var i = 0; i < modules.length; i++){\r\n\t\tif(modules[i])\r\n\t\t\tmodules[i](gantt);\r\n\t}\r\n};","export default function(gantt) {\r\n\tgantt.getGridColumn = function(name) {\r\n\t\tvar columns = gantt.config.columns;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tif (columns[i].name == name)\r\n\t\t\t\treturn columns[i];\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\tgantt.getGridColumns = function() {\r\n\t\treturn gantt.config.columns.slice();\r\n\t};\r\n};","export default function(gantt) {\r\n\tgantt.isReadonly = function (item) {\r\n\r\n\t\tif((typeof item == \"number\" || typeof item == \"string\") && gantt.isTaskExists(item)){\r\n\t\t\titem = gantt.getTask(item);\r\n\t\t}\r\n\t\tif (item && item[this.config.editable_property]) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn (item && item[this.config.readonly_property]) || this.config.readonly;\r\n\t\t}\r\n\t};\r\n};","import CalendarManager from \"./calendar_manager\";\r\nimport TimeCalculator from \"./time_calculator\";\r\nimport worktimeFacadeFactory from \"../facades/worktime_calendars\";\r\nimport * as utils from \"../../utils/utils\";\r\n\r\nexport default function (gantt) {\r\n\tvar manager = new CalendarManager(gantt),\r\n\ttimeCalculator = new TimeCalculator(manager);\r\n\tvar facade = worktimeFacadeFactory.create(manager, timeCalculator);\r\n\tutils.mixin(gantt, facade);\r\n};\r\n","export default function(gantt) {\r\n\r\n\tgantt.getTaskType = function (type) {\r\n\t\treturn \"task\";\r\n\t};\r\n};","/*\r\n reuse results of functions that can be recalculated during rendering\r\n greatly increases the rendering speed when critical path enabled\r\n Sample - 94_dev/critical_path.html\r\n\r\n */\r\nexport default function(gantt){\r\n\r\ngantt._cached_functions = {\r\n\tcache: {},\r\n\tmode: false,\r\n\tcritical_path_mode: false,\r\n\twrap_methods : function(methods, object){\r\n\t\tif(object._prefetch_originals){\r\n\t\t\tfor(var i in object._prefetch_originals){\r\n\t\t\t\tobject[i] = object._prefetch_originals[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\tobject._prefetch_originals = {};\r\n\t\tfor(var i = 0; i < methods.length; i++)\r\n\t\t\tthis.prefetch(methods[i], object);\r\n\r\n\t},\r\n\tprefetch : function(methodname, host){\r\n\t\tvar original = host[methodname];\r\n\t\tif(original){\r\n\t\t\tvar optimizer = this;\r\n\r\n\t\t\thost._prefetch_originals[methodname] = original;\r\n\t\t\thost[methodname] = function get_prefetched_value(){\r\n\r\n\t\t\t\tvar argumentsArray = new Array(arguments.length);\r\n\t\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\r\n\t\t\t\t\targumentsArray[i] = arguments[i];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(optimizer.active){\r\n\t\t\t\t\tvar args = optimizer.get_arguments_hash(Array.prototype.slice.call(argumentsArray));\r\n\t\t\t\t\tif(!optimizer.cache[methodname]){\r\n\t\t\t\t\t\toptimizer.cache[methodname] = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar cached_values = optimizer.cache[methodname];\r\n\r\n\t\t\t\t\tif(optimizer.has_cached_value(cached_values, args)){\r\n\t\t\t\t\t\treturn optimizer.get_cached_value(cached_values, args);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tvar value = original.apply(this, argumentsArray);\r\n\t\t\t\t\t\toptimizer.cache_value(cached_values, args, value);\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn original.apply(this, argumentsArray);\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn original;\r\n\t},\r\n\tcache_value: function(cache, arguments_hash, value){\r\n\t\tif(this.is_date(value))\r\n\t\t\tvalue = new Date(value);\r\n\t\tcache[arguments_hash] = value;\r\n\t},\r\n\thas_cached_value: function(cache, arguments_hash){\r\n\t\treturn cache.hasOwnProperty(arguments_hash);\r\n\t},\r\n\tget_cached_value: function(cache, arguments_hash){\r\n\t\tvar data = cache[arguments_hash];\r\n\r\n\t\t//for cached dates - return copy\r\n\t\tif(this.is_date(data)){\r\n\t\t\tdata = new Date(data);\r\n\t\t}\r\n\t\treturn data;\r\n\t},\r\n\tis_date: function(value){\r\n\t\treturn (value && value.getUTCDate);\r\n\t},\r\n\tget_arguments_hash:function(args){\r\n\t\tvar values = [];\r\n\t\tfor(var i = 0; i < args.length; i++){\r\n\t\t\tvalues.push(this.stringify_argument(args[i]));\r\n\t\t}\r\n\t\treturn \"(\" + values.join(\";\") + \")\";\r\n\t},\r\n\tstringify_argument: function(value){\r\n\t\t//expecting task or link, or any other data entries, dates and primitive values\r\n\t\tvar ret = \"\";\r\n\t\tif(value.id){\r\n\t\t\tret = value.id;\r\n\t\t}else if(this.is_date(value)){\r\n\t\t\tret = value.valueOf();\r\n\t\t}else{\r\n\t\t\tret = value;\r\n\t\t}\r\n\t\treturn ret + \"\";\r\n\t},\r\n\tactivate: function(){\r\n\t\tthis.clear();\r\n\t\tthis.active = true;\r\n\t},\r\n\tdeactivate: function(){\r\n\t\tthis.clear();\r\n\t\tthis.active = false;\r\n\t},\r\n\tclear: function(){\r\n\t\tthis.cache = {};\r\n\t},\r\n\r\n\tsetup: function(gantt){\r\n\t\tvar override_gantt = [];\r\n\r\n\t\tvar gantt_methods = [\r\n\t\t\t'_isProjectEnd',\r\n\t\t\t'_getProjectEnd',\r\n\t\t\t'_getSlack'\r\n\t\t];\r\n\r\n\r\n\r\n\t\tif(this.mode == 'auto'){\r\n\t\t\tif(gantt.config.highlight_critical_path){\r\n\t\t\t\toverride_gantt = gantt_methods;\r\n\t\t\t}\r\n\t\t}else if(this.mode === true){\r\n\t\t\toverride_gantt = gantt_methods;\r\n\t\t}\r\n\r\n\t\tthis.wrap_methods(override_gantt, gantt);\r\n\r\n\t},\r\n\tupdate_if_changed: function(gantt){\r\n\t\tvar changed = (this.critical_path_mode != gantt.config.highlight_critical_path ||\r\n\t\t\t\t\t\tthis.mode !== gantt.config.optimize_render);\r\n\t\tif(changed){\r\n\t\t\tthis.critical_path_mode = gantt.config.highlight_critical_path;\r\n\t\t\tthis.mode = gantt.config.optimize_render;\r\n\t\t\tthis.setup(gantt);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfunction activate(){\r\n\tgantt._cached_functions.update_if_changed(gantt);\r\n\tif(!gantt._cached_functions.active){\r\n\t\tgantt._cached_functions.activate();\r\n\t}\r\n\treturn true;\r\n}\r\ngantt.attachEvent(\"onBeforeGanttRender\", activate);\r\ngantt.attachEvent(\"onBeforeDataRender\", activate);\r\ngantt.attachEvent(\"onBeforeSmartRender\", function(){\r\n\tactivate();\r\n});\r\ngantt.attachEvent(\"onBeforeParse\", activate);\r\ngantt.attachEvent(\"onDataRender\", function(){\r\n\tgantt._cached_functions.deactivate();\r\n});\r\nvar deactivTimeout = null;\r\ngantt.attachEvent(\"onSmartRender\", function(){\r\n\tif(deactivTimeout)\r\n\t\tclearTimeout(deactivTimeout);\r\n\tdeactivTimeout = setTimeout(function(){\r\n\t\tgantt._cached_functions.deactivate();\r\n\t}, 1000);\r\n});\r\n\r\ngantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\tgantt._cached_functions.update_if_changed(gantt);\r\n\treturn true;\r\n});\r\n\r\n};","function extend(gantt){\r\n\r\n\tgantt.destructor = function(){\r\n\t\tthis.clearAll();\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\r\n\t\tif(this.$root){\r\n\t\t\tdelete this.$root.gantt;\r\n\t\t}\r\n\r\n\t\tif(this._eventRemoveAll){\r\n\t\t\tthis._eventRemoveAll();\r\n\t\t}\r\n\r\n\t\tif(this.$layout){\r\n\t\t\tthis.$layout.destructor();\r\n\t\t}\r\n\r\n\t\tif(this.resetLightbox){\r\n\t\t\tthis.resetLightbox();\r\n\t\t}\r\n\r\n\r\n\t\tif(this._dp && this._dp.destructor){\r\n\t\t\tthis._dp.destructor();\r\n\t\t}\r\n\t\tthis.$services.destructor();\r\n\r\n\t\t// detachAllEvents should be called last, because in components may be attached events\r\n\t\tthis.detachAllEvents();\r\n\r\n\t\tfor(var i in this){\r\n\t\t\tif(i.indexOf(\"$\") === 0){\r\n\t\t\t\tdelete this[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.$destroyed = true;\r\n\t};\r\n}\r\n\r\nexport default extend;\r\n","import ar from \"./locale_ar\";\r\nimport be from \"./locale_be\";\r\nimport ca from \"./locale_ca\";\r\nimport cn from \"./locale_cn\";\r\nimport cs from \"./locale_cs\";\r\nimport da from \"./locale_da\";\r\nimport de from \"./locale_de\";\r\nimport el from \"./locale_el\";\r\nimport en from \"./locale_en\";\r\nimport es from \"./locale_es\";\r\nimport fa from \"./locale_fa\";\r\nimport fi from \"./locale_fi\";\r\nimport fr from \"./locale_fr\";\r\nimport he from \"./locale_he\";\r\nimport hr from \"./locale_hr\";\r\nimport hu from \"./locale_hu\";\r\nimport id from \"./locale_id\";\r\nimport it from \"./locale_it\";\r\nimport jp from \"./locale_jp\";\r\nimport kr from \"./locale_kr\";\r\n\r\nimport LocaleManager from \"./locale_manager\";\r\n\r\nimport nb from \"./locale_nb\";\r\nimport nl from \"./locale_nl\";\r\nimport no from \"./locale_no\";\r\nimport pl from \"./locale_pl\";\r\nimport pt from \"./locale_pt\";\r\nimport ro from \"./locale_ro\";\r\nimport ru from \"./locale_ru\";\r\nimport si from \"./locale_si\";\r\nimport sk from \"./locale_sk\";\r\nimport sv from \"./locale_sv\";\r\nimport tr from \"./locale_tr\";\r\nimport ua from \"./locale_ua\";\r\n\r\nexport default function(){\r\n\treturn new LocaleManager({\r\n\t\ten,\r\n\t\tar,\r\n\t\tbe,\r\n\t\tca,\r\n\t\tcn,\r\n\t\tcs,\r\n\t\tda,\r\n\t\tde,\r\n\t\tel,\r\n\t\tes,\r\n\t\tfa,\r\n\t\tfi,\r\n\t\tfr,\r\n\t\the,\r\n\t\thr,\r\n\t\thu,\r\n\t\tid,\r\n\t\tit,\r\n\t\tjp,\r\n\t\tkr,\r\n\t\tnb,\r\n\t\tnl,\r\n\t\tno,\r\n\t\tpl,\r\n\t\tpt,\r\n\t\tro,\r\n\t\tru,\r\n\t\tsi,\r\n\t\tsk,\r\n\t\tsv,\r\n\t\ttr,\r\n\t\tua\r\n\t});\r\n}","import * as utils from \"../../utils/utils\";\r\nimport * as domHelpers from \"./utils/dom_helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar boxAttribute = \"data-dhxbox\";\r\n\r\n\tvar _dhx_msg_cfg = null;\r\n\r\n\tfunction callback(config, result) {\r\n\t\tvar usercall = config.callback;\r\n\t\tmodalBox.hide(config.box);\r\n\r\n\t\t_dhx_msg_cfg = config.box = null;\r\n\t\tif (usercall)\r\n\t\t\tusercall(result);\r\n\t}\r\n\r\n\tfunction modal_key(event) {\r\n\t\tif (_dhx_msg_cfg) {\r\n\r\n\t\t\tvar code = event.which || event.keyCode;\r\n\t\t\tvar preventDefault = false;\r\n\r\n\t\t\tif (messageBox.keyboard) {\r\n\t\t\t\tif (code == 13 || code == 32) {\r\n\t\t\t\t\t// default behavior is to confirm/submit popup on space/enter\r\n\t\t\t\t\t// if browser focus is set on button element - do button click instead of default behavior\r\n\t\t\t\t\tvar target = event.target || event.srcElement;\r\n\t\t\t\t\tif (domHelpers.getClassName(target).indexOf(\"gantt_popup_button\") > -1 && target.click) {\r\n\t\t\t\t\t\ttarget.click();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcallback(_dhx_msg_cfg, true);\r\n\t\t\t\t\t\tpreventDefault = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (code == 27) {\r\n\t\t\t\t\tcallback(_dhx_msg_cfg, false);\r\n\t\t\t\t\tpreventDefault = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (preventDefault) {\r\n\t\t\t\tif (event.preventDefault){\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t\treturn !(event.cancelBubble = true);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\tvar eventElement = domHelpers.getRootNode(gantt.$root) || document;\r\n\tgantt.event(eventElement, \"keydown\", modal_key, true);\r\n\r\n\tfunction modality(mode) {\r\n\t\tif (!modality.cover) {\r\n\t\t\tmodality.cover = document.createElement(\"div\");\r\n\t\t\t//necessary for IE only\r\n\t\t\tmodality.cover.onkeydown = modal_key;\r\n\t\t\tmodality.cover.className = \"dhx_modal_cover\";\r\n\t\t\tdocument.body.appendChild(modality.cover);\r\n\t\t}\r\n\r\n\t\tmodality.cover.style.display = mode ? \"inline-block\" : \"none\";\r\n\t}\r\n\r\n\tfunction button(text, className, result) {\r\n\t\tvar buttonAriaAttrs = gantt._waiAria.messageButtonAttrString(text);\r\n\t\tvar name = className.toLowerCase().replace(/ /g, \"_\");\r\n\t\tvar button_css = \"gantt_\" + name + \"_button\";\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tfunction info(text) {\r\n\t\tif (!messageBox.area) {\r\n\t\t\tmessageBox.area = document.createElement(\"div\");\r\n\t\t\tmessageBox.area.className = \"gantt_message_area\";\r\n\t\t\tmessageBox.area.style[messageBox.position] = \"5px\";\r\n\t\t\tdocument.body.appendChild(messageBox.area);\r\n\t\t}\r\n\r\n\t\tmessageBox.hide(text.id);\r\n\t\tvar message = document.createElement(\"div\");\r\n\t\tmessage.innerHTML = \"\" + text.text + \"
\";\r\n\t\tmessage.className = \"gantt-info gantt-\" + text.type;\r\n\t\tmessage.onclick = function () {\r\n\t\t\tmessageBox.hide(text.id);\r\n\t\t\ttext = null;\r\n\t\t};\r\n\r\n\t\tgantt._waiAria.messageInfoAttr(message);\r\n\r\n\t\tif (messageBox.position == \"bottom\" && messageBox.area.firstChild)\r\n\t\t\tmessageBox.area.insertBefore(message, messageBox.area.firstChild);\r\n\t\telse\r\n\t\t\tmessageBox.area.appendChild(message);\r\n\r\n\t\tif (text.expire > 0)\r\n\t\t\tmessageBox.timers[text.id] = window.setTimeout(function () {\r\n\t\t\t\t// GS-1213: We need that when Gantt is destroyed\r\n\t\t\t\tif (messageBox) messageBox.hide(text.id);\r\n\t\t\t}, text.expire);\r\n\r\n\t\tmessageBox.pull[text.id] = message;\r\n\t\tmessage = null;\r\n\r\n\t\treturn text.id;\r\n\t}\r\n\r\n\tfunction getFirstDefined() {\r\n\t\tvar values = [].slice.apply(arguments, [0]);\r\n\r\n\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\tif (values[i]) {\r\n\t\t\t\treturn values[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction _boxStructure(config, ok, cancel) {\r\n\t\tvar box = document.createElement(\"div\");\r\n\r\n\t\tvar contentId = utils.uid();\r\n\t\tgantt._waiAria.messageModalAttr(box, contentId);\r\n\r\n\r\n\t\tbox.className = \" gantt_modal_box gantt-\" + config.type;\r\n\t\tbox.setAttribute(boxAttribute, 1);\r\n\r\n\t\tvar inner = '';\r\n\r\n\t\tif (config.width)\r\n\t\t\tbox.style.width = config.width;\r\n\t\tif (config.height)\r\n\t\t\tbox.style.height = config.height;\r\n\t\tif (config.title)\r\n\t\t\tinner += '';\r\n\t\tinner += '';\r\n\t\tbox.innerHTML = inner;\r\n\r\n\t\tif (config.content) {\r\n\t\t\tvar node = config.content;\r\n\t\t\tif (typeof node == \"string\")\r\n\t\t\t\tnode = document.getElementById(node);\r\n\t\t\tif (node.style.display == 'none')\r\n\t\t\t\tnode.style.display = \"\";\r\n\t\t\tbox.childNodes[config.title ? 1 : 0].appendChild(node);\r\n\t\t}\r\n\r\n\t\tbox.onclick = function (event) {\r\n\t\t\tvar source = event.target || event.srcElement;\r\n\t\t\tif (!source.className) source = source.parentNode;\r\n\t\t\tif (domHelpers.closest(source, \".gantt_popup_button\")) {\r\n\t\t\t\tvar result = source.getAttribute(\"data-result\");\r\n\t\t\t\tresult = (result == \"true\") || (result == \"false\" ? false : result);\r\n\t\t\t\tcallback(config, result);\r\n\t\t\t}\r\n\t\t};\r\n\t\tconfig.box = box;\r\n\t\tif (ok || cancel)\r\n\t\t\t_dhx_msg_cfg = config;\r\n\r\n\t\treturn box;\r\n\t}\r\n\r\n\tfunction _createBox(config, ok, cancel) {\r\n\t\tvar box = config.tagName ? config : _boxStructure(config, ok, cancel);\r\n\r\n\t\tif (!config.hidden)\r\n\t\t\tmodality(true);\r\n\t\tdocument.body.appendChild(box);\r\n\t\tvar x = Math.abs(Math.floor(((window.innerWidth || document.documentElement.offsetWidth) - box.offsetWidth) / 2));\r\n\t\tvar y = Math.abs(Math.floor(((window.innerHeight || document.documentElement.offsetHeight) - box.offsetHeight) / 2));\r\n\t\tif (config.position == \"top\")\r\n\t\t\tbox.style.top = \"-3px\";\r\n\t\telse\r\n\t\t\tbox.style.top = y + 'px';\r\n\t\tbox.style.left = x + 'px';\r\n\t\t//necessary for IE only\r\n\t\tbox.onkeydown = modal_key;\r\n\r\n\t\tmodalBox.focus(box);\r\n\r\n\t\tif (config.hidden)\r\n\t\t\tmodalBox.hide(box);\r\n\r\n\t\tgantt.callEvent(\"onMessagePopup\", [box]);\r\n\t\treturn box;\r\n\t}\r\n\r\n\tfunction alertPopup(config) {\r\n\t\treturn _createBox(config, true, false);\r\n\t}\r\n\r\n\tfunction confirmPopup(config) {\r\n\t\treturn _createBox(config, true, true);\r\n\t}\r\n\r\n\tfunction boxPopup(config) {\r\n\t\treturn _createBox(config);\r\n\t}\r\n\r\n\tfunction box_params(text, type, callback) {\r\n\t\tif (typeof text != \"object\") {\r\n\t\t\tif (typeof type == \"function\") {\r\n\t\t\t\tcallback = type;\r\n\t\t\t\ttype = \"\";\r\n\t\t\t}\r\n\t\t\ttext = {text: text, type: type, callback: callback};\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\tfunction params(text, type, expire, id) {\r\n\t\tif (typeof text != \"object\")\r\n\t\t\ttext = {text: text, type: type, expire: expire, id: id};\r\n\t\ttext.id = text.id || utils.uid();\r\n\t\ttext.expire = text.expire || messageBox.expire;\r\n\t\treturn text;\r\n\t}\r\n\r\n\tvar alertBox = function () {\r\n\t\tvar text = box_params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"confirm\";\r\n\t\treturn alertPopup(text);\r\n\t};\r\n\tvar confirmBox = function () {\r\n\t\tvar text = box_params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"alert\";\r\n\t\treturn confirmPopup(text);\r\n\t};\r\n\tvar modalBox = function () {\r\n\t\tvar text = box_params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"alert\";\r\n\t\treturn boxPopup(text);\r\n\t};\r\n\tmodalBox.hide = function (node) {\r\n\t\twhile (node && node.getAttribute && !node.getAttribute(boxAttribute))\r\n\t\t\tnode = node.parentNode;\r\n\t\tif (node) {\r\n\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\tmodality(false);\r\n\r\n\t\t\tgantt.callEvent(\"onAfterMessagePopup\", [node]);\r\n\t\t}\r\n\t};\r\n\r\n\tmodalBox.focus = function (node) {\r\n\t\tsetTimeout(function () {\r\n\t\t\tvar focusable = domHelpers.getFocusableNodes(node);\r\n\t\t\tif (focusable.length) {\r\n\t\t\t\tif (focusable[0].focus) focusable[0].focus();\r\n\t\t\t}\r\n\t\t}, 1);\r\n\t};\r\n\r\n\tvar messageBox = function (text, type, expire, id) {\r\n\t\ttext = params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"info\";\r\n\r\n\t\tvar subtype = text.type.split(\"-\")[0];\r\n\t\tswitch (subtype) {\r\n\t\t\tcase \"alert\":\r\n\t\t\t\treturn alertPopup(text);\r\n\t\t\tcase \"confirm\":\r\n\t\t\t\treturn confirmPopup(text);\r\n\t\t\tcase \"modalbox\":\r\n\t\t\t\treturn boxPopup(text);\r\n\t\t\tdefault:\r\n\t\t\t\treturn info(text);\r\n\t\t}\r\n\t};\r\n\r\n\tmessageBox.seed = (new Date()).valueOf();\r\n\tmessageBox.uid = utils.uid;\r\n\tmessageBox.expire = 4000;\r\n\tmessageBox.keyboard = true;\r\n\tmessageBox.position = \"top\";\r\n\tmessageBox.pull = {};\r\n\tmessageBox.timers = {};\r\n\r\n\tmessageBox.hideAll = function () {\r\n\t\tfor (var key in messageBox.pull)\r\n\t\t\tmessageBox.hide(key);\r\n\t};\r\n\tmessageBox.hide = function (id) {\r\n\t\tvar obj = messageBox.pull[id];\r\n\t\tif (obj && obj.parentNode) {\r\n\t\t\twindow.setTimeout(function () {\r\n\t\t\t\tobj.parentNode.removeChild(obj);\r\n\t\t\t\tobj = null;\r\n\t\t\t}, 2000);\r\n\t\t\tobj.className += \" hidden\";\r\n\r\n\t\t\tif (messageBox.timers[id])\r\n\t\t\t\twindow.clearTimeout(messageBox.timers[id]);\r\n\t\t\tdelete messageBox.pull[id];\r\n\t\t}\r\n\t};\r\n\r\n\tvar popups = [];\r\n\tgantt.attachEvent(\"onMessagePopup\", function(box){\r\n\t\tpopups.push(box);\r\n\t});\r\n\tgantt.attachEvent(\"onAfterMessagePopup\", function(box){\r\n\t\tfor(var i = 0; i < popups.length; i++){\r\n\t\t\tif(popups[i] === box){\r\n\t\t\t\tpopups.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\tif(modality.cover && modality.cover.parentNode){\r\n\t\t\tmodality.cover.parentNode.removeChild(modality.cover);\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < popups.length; i++){\r\n\t\t\tif(popups[i].parentNode){\r\n\t\t\t\tpopups[i].parentNode.removeChild(popups[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpopups = null;\r\n\r\n\t\tif(messageBox.area && messageBox.area.parentNode){\r\n\t\t\tmessageBox.area.parentNode.removeChild(messageBox.area);\r\n\t\t}\r\n\t\tmessageBox = null;\r\n\t});\r\n\r\n\treturn {\r\n\t\talert: alertBox,\r\n\t\tconfirm: confirmBox,\r\n\t\tmessage: messageBox,\r\n\t\tmodalbox: modalBox\r\n\t};\r\n};","import * as utils from \"../../utils/utils\";\r\n\r\nfunction extendSettings (store, parentSettings){\r\n\tvar own = this.$config[store];\r\n\r\n\tif(own){\r\n\t\tif(!own.$extendedConfig){\r\n\t\t\town.$extendedConfig = true;\r\n\t\t\tObject.setPrototypeOf(own, parentSettings);\r\n\t\t}\r\n\t\treturn own;\r\n\t}else{\r\n\t\treturn parentSettings;\r\n\t}\r\n}\r\n\r\nvar configurable = function(parentView){\r\n\tvar parentConfig,\r\n\t\tparentTemplates;\r\n\r\n\treturn {\r\n\t\t$getConfig: function(){\r\n\t\t\tif(!parentConfig){\r\n\t\t\t\tparentConfig = parentView ? parentView.$getConfig() : this.$gantt.config;\r\n\t\t\t}\r\n\t\t\tif(!this.$config.config){\r\n\t\t\t\treturn parentConfig;\r\n\t\t\t}else{\r\n\t\t\t\treturn extendSettings.call(this, \"config\", parentConfig);\r\n\t\t\t}\r\n\t\t},\r\n\t\t$getTemplates: function(){\r\n\t\t\tif(!parentTemplates){\r\n\t\t\t\tparentTemplates = parentView ? parentView.$getTemplates() : this.$gantt.templates;\r\n\t\t\t}\r\n\t\t\tif(!this.$config.templates){\r\n\t\t\t\treturn parentTemplates;\r\n\t\t\t}else{\r\n\t\t\t\treturn extendSettings.call(this, \"templates\", parentTemplates);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n};\r\n\r\nexport default function(obj, parent){\r\n\tutils.mixin(obj, configurable(parent));\r\n};","import * as utils from \"../../utils/utils\";\r\nimport configurable from \"./configurable\";\r\n\r\nvar uiFactory = function createFactory(gantt){\r\n\tvar views = {};\r\n\r\n\tfunction ui(cell, parentView) {\r\n\t\tvar content;\r\n\t\tvar view = \"cell\";\r\n\t\tif (cell.view){\r\n\t\t\tview = \"viewcell\";\r\n\t\t}else if (cell.resizer) {\r\n\t\t\tview = \"resizer\";\r\n\t\t}\r\n\t\telse if (cell.rows || cell.cols) {\r\n\t\t\tview = \"layout\";\r\n\t\t}\r\n\t\telse if (cell.views) {\r\n\t\t\tview = \"multiview\";\r\n\t\t}\r\n\r\n\t\tcontent = createView.call(this, view, null, cell, parentView);\r\n\t\treturn content;\r\n\t}\r\n\t\r\n\tvar createdViews = {};\r\n\r\n\tfunction createView(name, parent, config, parentView) {\r\n\t\tvar creator = views[name];\r\n\r\n\t\tif(!creator || !creator.create)\r\n\t\t\treturn false;\r\n\r\n\t\tif(name == \"resizer\" && !config.mode){\r\n\t\t\tif(parentView.$config.cols){\r\n\t\t\t\tconfig.mode = \"x\";\r\n\t\t\t}else{\r\n\t\t\t\tconfig.mode = \"y\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(name == \"viewcell\" && config.view == \"scrollbar\" && !config.scroll){\r\n\t\t\tif(parentView.$config.cols){\r\n\t\t\t\tconfig.scroll = \"y\";\r\n\t\t\t}else{\r\n\t\t\t\tconfig.scroll = \"x\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar config = utils.copy(config);\r\n\r\n\t\tif(!config.id && !createdViews[config.view]){\r\n\t\t\tconfig.id = config.view;\r\n\t\t}\r\n\r\n\t\tif(config.id && !config.css){\r\n\t\t\tconfig.css = config.id+\"_cell\";\r\n\t\t}\r\n\r\n\t\tvar view = new creator.create(parent, config, this, gantt);\r\n\r\n\t\tif(creator.configure){\r\n\t\t\tcreator.configure(view);\r\n\t\t}\r\n\r\n\t\tconfigurable(view, parentView);\r\n\t\tif(!view.$id){\r\n\t\t\tview.$id = config.id || gantt.uid();\r\n\t\t}\r\n\r\n\t\tif(!view.$parent && typeof parent == \"object\"){\r\n\t\t\tview.$parent = parent;\r\n\t\t}\r\n\t\tif(!view.$config){\r\n\t\t\tview.$config = config;\r\n\t\t}\r\n\r\n\t\tif(createdViews[view.$id]){\r\n\t\t\tview.$id = gantt.uid();\r\n\t\t}\r\n\r\n\t\tcreatedViews[view.$id] = view;\r\n\r\n\t\treturn view;\r\n\t}\r\n\r\n\tfunction reset(){\r\n\t\tcreatedViews = {};\r\n\t}\r\n\r\n\tfunction register(name, viewConstructor, configure){\r\n\t\tviews[name] = {create: viewConstructor, configure: configure};\r\n\t}\r\n\r\n\tfunction getView(id){\r\n\t\treturn createdViews[id];\r\n\t}\r\n\r\n\tvar factory = {\r\n\t\tinitUI:ui,\r\n\t\treset: reset,\r\n\t\tregisterView: register,\r\n\t\tcreateView: createView,\r\n\t\tgetView: getView\r\n\t};\r\n\r\n\treturn factory;\r\n};\r\n\r\nexport default {\r\n\tcreateFactory: uiFactory\r\n};\r\n\r\n","import * as domHelpers from \"./utils/dom_helpers\";\r\n\r\nvar createMouseHandler = (function(domHelpers) {\r\n\treturn function (gantt) {\r\n\t\tvar eventHandlers = {\r\n\t\t\t\"click\": {},\r\n\t\t\t\"doubleclick\": {},\r\n\t\t\t\"contextMenu\": {}\r\n\t\t};\r\n\r\n\t\tfunction addEventTarget(event, className, handler, root) {\r\n\t\t\tif(!eventHandlers[event][className]){\r\n\t\t\t\teventHandlers[event][className] = [];\r\n\t\t\t}\r\n\r\n\t\t\teventHandlers[event][className].push({\r\n\t\t\t\thandler: handler,\r\n\t\t\t\troot: root\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction callHandler(eventName, className, root, args) {\r\n\t\t\tvar handlers = eventHandlers[eventName][className];\r\n\t\t\tif(handlers){\r\n\t\t\t\tfor(var i = 0; i < handlers.length; i++){\r\n\t\t\t\t\tif(!(root || handlers[i].root) || handlers[i].root === root){\r\n\t\t\t\t\t\thandlers[i].handler.apply(this, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onClick(e) {\r\n\t\t\te = e || window.event;\r\n\t\t\tvar id = gantt.locate(e);\r\n\r\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.click);\r\n\t\t\tvar res = true;\r\n\t\t\tif (id !== null) {\r\n\t\t\t\tres = !gantt.checkEvent(\"onTaskClick\") || gantt.callEvent(\"onTaskClick\", [id, e]);\r\n\t\t\t} else {\r\n\t\t\t\tgantt.callEvent(\"onEmptyClick\", [e]);\r\n\t\t\t}\r\n\r\n\t\t\tif (res) {\r\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\r\n\t\t\t\tif (!default_action)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t// GS-1025: if we don't do that, the dropdown or date select will be closed for unselected tasks\r\n\t\t\t\t// GS-1078: or for the built-in select inline editor\r\n\t\t\t\tswitch(e.target.nodeName) {\r\n\t\t\t\t\tcase \"SELECT\":\r\n\t\t\t\t\tcase 'INPUT':\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//allow task selection when the multiselect plugin is not enabled\r\n\t\t\t\tif (id && gantt.getTask(id) && !gantt._multiselect && gantt.config.select_task) {\r\n\t\t\t\t\tgantt.selectTask(id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onContextMenu(e) {\r\n\t\t\te = e || window.event;\r\n\t\t\tvar src = e.target || e.srcElement,\r\n\t\t\t\ttaskId = gantt.locate(src),\r\n\t\t\t\tlinkId = gantt.locate(src, gantt.config.link_attribute);\r\n\r\n\t\t\tvar res = !gantt.checkEvent(\"onContextMenu\") || gantt.callEvent(\"onContextMenu\", [taskId, linkId, e]);\r\n\t\t\tif (!res) {\r\n\t\t\t\tif (e.preventDefault)\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\telse\r\n\t\t\t\t\te.returnValue = false;\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t}\r\n\r\n\t\tfunction findEventHandlers(e, hash){\r\n\t\t\tvar trg = e.target || e.srcElement;\r\n\t\t\tvar handlers = [];\r\n\t\t\twhile (trg) {\r\n\t\t\t\tvar css = domHelpers.getClassName(trg);\r\n\t\t\t\tif (css) {\r\n\t\t\t\t\tcss = css.split(\" \");\r\n\t\t\t\t\tfor (var i = 0; i < css.length; i++) {\r\n\t\t\t\t\t\tif (!css[i]) continue;\r\n\t\t\t\t\t\tif (hash[css[i]]) {\r\n\t\t\t\t\t\t\tvar delegateHandlers = hash[css[i]];\r\n\r\n\t\t\t\t\t\t\tfor(var h = 0; h < delegateHandlers.length; h++){\r\n\t\t\t\t\t\t\t\tif(delegateHandlers[h].root){\r\n\t\t\t\t\t\t\t\t\tif(!domHelpers.isChildOf(trg, delegateHandlers[h].root)){\r\n\t\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\thandlers.push(delegateHandlers[h].handler);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttrg = trg.parentNode;\r\n\t\t\t}\r\n\t\t\treturn handlers;\r\n\t\t}\r\n\r\n\t\tfunction callEventHandlers(handlers, e, id){\r\n\t\t\tvar res = true;\r\n\r\n\t\t\tfor(var i = 0; i < handlers.length; i++){\r\n\t\t\t\tvar handlerResult = handlers[i].call(gantt, e, id, e.target || e.srcElement);\r\n\t\t\t\tres = res && !(typeof handlerResult != \"undefined\" && handlerResult !== true);\r\n\t\t\t}\r\n\r\n\t\t\treturn res;\r\n\t\t}\r\n\r\n\r\n\t\tfunction onDoubleClick(e) {\r\n\t\t\te = e || window.event;\r\n\t\t\tvar id = gantt.locate(e);\r\n\r\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.doubleclick);\r\n\t\t\t// when doubleclick fired not on task, id === null\r\n\t\t\tvar res = !gantt.checkEvent(\"onTaskDblClick\") || id === null || gantt.callEvent(\"onTaskDblClick\", [id, e]);\r\n\t\t\tif (res) {\r\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\r\n\t\t\t\tif (!default_action)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tif (id !== null && gantt.getTask(id)) {\r\n\t\t\t\t\tif (res && gantt.config.details_on_dblclick && !gantt.isReadonly(id)) {\r\n\t\t\t\t\t\tgantt.showLightbox(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onMouseMove(e) {\r\n\t\t\tif (gantt.checkEvent(\"onMouseMove\")) {\r\n\t\t\t\tvar id = gantt.locate(e);\r\n\t\t\t\tgantt._last_move_event = e;\r\n\t\t\t\tgantt.callEvent(\"onMouseMove\", [id, e]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction detach(eventName, className, handler, root) {\r\n\t\t\tif (eventHandlers[eventName] && eventHandlers[eventName][className]) {\r\n\t\t\t\tvar handlers = eventHandlers[eventName];\r\n\t\t\t\tvar elementHandlers = handlers[className];\r\n\t\t\t\tfor(var i = 0; i < elementHandlers.length; i++){\r\n\t\t\t\t\tif(elementHandlers[i].root == root){\r\n\t\t\t\t\t\telementHandlers.splice(i, 1);\r\n\t\t\t\t\t\ti--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(!elementHandlers.length){\r\n\t\t\t\t\tdelete handlers[className];\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar domEvents = gantt._createDomEventScope();\r\n\r\n\t\tfunction reset(node){\r\n\r\n\t\t\tdomEvents.detachAll();\r\n\r\n\t\t\tif(node){\r\n\t\t\t\tdomEvents.attach(node, \"click\", onClick);\r\n\t\t\t\tdomEvents.attach(node, \"dblclick\", onDoubleClick);\r\n\t\t\t\tdomEvents.attach(node, \"mousemove\", onMouseMove);\r\n\t\t\t\tdomEvents.attach(node, \"contextmenu\", onContextMenu);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\r\n\t\treturn {\r\n\t\t\treset: reset,\r\n\t\t\tglobal: function(event, classname, handler){\r\n\t\t\t\taddEventTarget(event, classname, handler, null);\r\n\t\t\t},\r\n\t\t\tdelegate: addEventTarget,\r\n\t\t\tdetach: detach,\r\n\t\t\tcallHandler: callHandler,\r\n\t\t\tonDoubleClick: onDoubleClick,\r\n\t\t\tonMouseMove: onMouseMove,\r\n\t\t\tonContextMenu: onContextMenu,\r\n\t\t\tonClick: onClick,\r\n\t\t\tdestructor: function(){\r\n\t\t\t\treset();\r\n\t\t\t\teventHandlers = null;\r\n\t\t\t\tdomEvents = null;\r\n\t\t\t}\r\n\r\n\t\t};\r\n\t};\r\n\r\n})(domHelpers);\r\n\r\n\r\nexport default {\r\n\tinit:createMouseHandler\r\n};","export default function(viewport, box, gantt){\r\n\tif(!box){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(box.left > viewport.x_end || box.left + box.width < viewport.x){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(box.top > viewport.y_end || box.top + box.height < viewport.y){\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\treturn true;\r\n};","export default function(gantt){\r\n\treturn gantt.config.smart_rendering && gantt._smart_render;\r\n};","export default function(item, view, config){\r\n\treturn {\r\n\t\ttop: view.getItemTop(item.id),\r\n\t\theight: view.getItemHeight(item.id),\r\n\t\tleft: 0,\r\n\t\tright: Infinity\r\n\t};\r\n};","export default function getVisibleTasksRange(gantt, view, config, datastore, viewport){\r\n\tvar buffer = 1;\r\n\tvar start = view.getItemIndexByTopPosition(viewport.y) || 0;\r\n\tvar end = view.getItemIndexByTopPosition(viewport.y_end) || datastore.count();\r\n\tvar indexStart = Math.max(0, start - buffer);\r\n\tvar indexEnd = Math.min(datastore.count(), end + buffer);\r\n\t// GS-2481 and GS-1715, need to take into account selected task when using keyboard shortcuts and when the inline editor is opened \r\n\tconst extraTasksIds= [];\r\n\tif (gantt.config.keyboard_navigation && gantt.getSelectedId()) {\r\n\t\textraTasksIds.push(gantt.getSelectedId());\r\n\t}\r\n\tif (gantt.$ui.getView(\"grid\") && gantt.ext.inlineEditors && gantt.ext.inlineEditors.getState().id) {\r\n\t\tlet inlineEditorId = gantt.ext.inlineEditors.getState().id;\r\n\t\tif (datastore.exists(inlineEditorId)){\r\n\t\t\textraTasksIds.push(inlineEditorId);\r\n\t\t}\r\n\t}\r\n\treturn {\r\n\t\tstart: indexStart,\r\n\t\tend: indexEnd,\r\n\t\tids: extraTasksIds \r\n\t};\r\n};","import genericViewPortChecker from \"./viewport/is_in_viewport\";\r\nimport isLegacyRender from \"./is_legacy_smart_render\";\r\nimport basicGetRectangle from \"./viewport/get_grid_row_rectangle\";\r\nimport basicGetRange from \"./viewport/get_visible_bars_range\";\r\nvar rendererFactory = function(gantt){\r\n\r\n\t//hash of dom elements is needed to redraw single bar/link\r\n\tvar task_area_pulls = {},\r\n\t\ttask_area_renderers = {};\r\n\r\n\tfunction getView(layer){\r\n\t\tvar view = null;\r\n\t\tif (typeof layer.view === \"string\") {\r\n\t\t\tview = gantt.$ui.getView(layer.view);\r\n\t\t} else if (layer.view) {\r\n\t\t\tview = layer.view;\r\n\t\t}\r\n\t\treturn view;\r\n\t}\r\n\r\n\tfunction getRenderer(id, layer, node) {\r\n\t\t\r\n\t\tif (task_area_renderers[id])\r\n\t\t\treturn task_area_renderers[id];\r\n\r\n\t\tif (!layer.renderer)\r\n\t\t\tgantt.assert(false, \"Invalid renderer call\");\r\n\r\n\t\tvar renderMethod = null;\r\n\t\tvar updateMethod = null;\r\n\t\tvar getRectangle = null;\r\n\t\tvar renderCallbackMethod = null;\r\n\t\tvar specializedViewPortChecker = null;\r\n\r\n\t\tif(typeof layer.renderer === \"function\"){\r\n\t\t\trenderMethod = layer.renderer;\r\n\t\t\tgetRectangle = basicGetRectangle;\r\n\t\t}else{\r\n\t\t\trenderMethod = layer.renderer.render;\r\n\t\t\tupdateMethod = layer.renderer.update;\r\n\t\t\trenderCallbackMethod = layer.renderer.onrender;\r\n\t\t\t\r\n\t\t\tif(layer.renderer.isInViewPort){\r\n\t\t\t\tspecializedViewPortChecker = layer.renderer.isInViewPort;\r\n\t\t\t}else{\r\n\t\t\t\tgetRectangle = layer.renderer.getRectangle;\r\n\t\t\t}\r\n\r\n\t\t\tif (!getRectangle && getRectangle !== null) {\r\n\t\t\t\tgetRectangle = basicGetRectangle;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar filter = layer.filter;\r\n\r\n\t\tif (node)\r\n\t\t\tnode.setAttribute(gantt.config.layer_attribute, true);\r\n\r\n\t\ttask_area_renderers[id] = {\r\n\t\t\trender_item: function (item, container, viewPort, layerView, viewConfig) {\r\n\t\t\t\tcontainer = container || node;\r\n\t\t\t\tif (filter) {\r\n\t\t\t\t\tif (!filter(item)) {\r\n\t\t\t\t\t\tthis.remove_item(item.id);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar view = layerView || getView(layer);\r\n\t\t\t\tvar config = viewConfig || (view ? view.$getConfig() : null);\r\n\t\t\t\tvar rendererViewPort = viewPort;\r\n\t\t\t\tif(!rendererViewPort && config && config.smart_rendering){\r\n\t\t\t\t\trendererViewPort = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar dom = null;\r\n\t\t\t\tif(!isLegacyRender(gantt) && (getRectangle || specializedViewPortChecker) && rendererViewPort){\r\n\t\t\t\t\tvar isVisible = false;\r\n\t\t\t\t\tif(specializedViewPortChecker){\r\n\t\t\t\t\t\tisVisible = specializedViewPortChecker(item, rendererViewPort, view, config, gantt);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tisVisible = genericViewPortChecker(rendererViewPort, getRectangle(item, view, config, gantt), gantt);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(isVisible){\r\n\t\t\t\t\t\tdom = renderMethod.call(gantt, item, view, config, rendererViewPort);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdom = renderMethod.call(gantt, item, view, config, rendererViewPort);\r\n\t\t\t\t}\r\n\t\t\t\tthis.append(item, dom, container);\r\n\r\n\t\t\t\tvar useBuffer = container.nodeType == 11;//DocumentFragment\r\n\t\t\t\tif(renderCallbackMethod && !useBuffer && dom) {\r\n\t\t\t\t\trenderCallbackMethod.call(gantt, item, dom, view);\r\n\t\t\t\t} \r\n\t\t\t},\r\n\r\n\t\t\tclear: function (container) {\r\n\r\n\t\t\t\tthis.rendered = task_area_pulls[id] = {};\r\n\t\t\t\tif(!layer.append)\r\n\t\t\t\t\tthis.clear_container(container);\r\n\t\t\t},\r\n\t\t\tclear_container: function (container) {\r\n\t\t\t\tcontainer = container || node;\r\n\t\t\t\tif (container){\r\n\t\t\t\t\tcontainer.innerHTML = \"\";\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget_visible_range: function(datastore){\r\n\t\t\t\tvar view = getView(layer);\r\n\t\t\t\tvar viewport;\r\n\t\t\t\tvar viewConfig = view ? view.$getConfig() : null;\r\n\t\t\t\tif(viewConfig && viewConfig.smart_rendering){\r\n\t\t\t\t\tviewport = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar range;\r\n\t\t\t\tif(view && viewport){\r\n\t\t\t\t\tif(typeof layer.renderer === \"function\"){\r\n\t\t\t\t\t\trange = basicGetRange(gantt, view, viewConfig, datastore, viewport);\r\n\t\t\t\t\t}else if(layer.renderer && layer.renderer.getVisibleRange){\r\n\t\t\t\t\t\trange = layer.renderer.getVisibleRange(gantt, view, viewConfig, datastore, viewport);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(!range){\r\n\t\t\t\t\trange = {\r\n\t\t\t\t\t\tstart: 0,\r\n\t\t\t\t\t\tend: datastore.count()\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn range;\r\n\t\t\t},\r\n\t\t\tprepare_data: function(items){\r\n\t\t\t\tif(layer.renderer && layer.renderer.prepareData){\r\n\t\t\t\t\treturn layer.renderer.prepareData(items, gantt, layer);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\trender_items: function (items, container) {\r\n\t\t\t\tcontainer = container || node;\r\n\r\n\t\t\t\tvar buffer = document.createDocumentFragment();\r\n\t\t\t\tthis.clear(container);\r\n\r\n\t\t\t\tvar viewPort = null;\r\n\t\t\t\tvar view = getView(layer);\r\n\t\t\t\tvar viewConfig = view ? view.$getConfig() : null;\r\n\t\t\t\tif(viewConfig && viewConfig.smart_rendering){\r\n\t\t\t\t\tviewPort = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\r\n\t\t\t\t\tthis.render_item(items[i], buffer, viewPort, view, viewConfig);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontainer.appendChild(buffer, container);\r\n\r\n\t\t\t\tvar itemsSearch = {};\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\titemsSearch[item.id] = item;\r\n\t\t\t\t});\r\n\t\t\t\tvar renderedItems = {};\r\n\t\t\t\tif (renderCallbackMethod) {\r\n\t\t\t\t\tvar newElements = {};\r\n\t\t\t\t\tfor(var i in this.rendered) {\r\n\t\t\t\t\t\tif(!renderedItems[i]){\r\n\t\t\t\t\t\t\tnewElements[i] = this.rendered[i];\r\n\t\t\t\t\t\t\trenderCallbackMethod.call(gantt, itemsSearch[i], this.rendered[i], view);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tupdate_items: function (items, container) {\r\n\t\t\t\tvar view = getView(layer);\r\n\t\t\t\tvar viewConfig = view ? view.$getConfig() : null;\r\n\t\t\t\tif(!view || !view.$getConfig().smart_rendering || isLegacyRender(gantt)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!this.rendered){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(getRectangle || specializedViewPortChecker)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontainer = container || node;\r\n\r\n\t\t\t\tvar buffer = document.createDocumentFragment();\r\n\r\n\t\t\t\tvar viewPort = null;\r\n\t\t\t\tif(view){\r\n\t\t\t\t\tviewPort = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar itemsSearch = {};\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\titemsSearch[item.id] = item;\r\n\t\t\t\t});\r\n\t\t\t\tvar renderedItems = {};\r\n\r\n\t\t\t\tvar nodesToRemove = {};\r\n\t\t\t\tfor(var i in this.rendered){\r\n\t\t\t\t\tnodesToRemove[i] = true;\r\n\t\t\t\t\trenderedItems[i] = true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar renderCalledFor = {};\r\n\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\r\n\t\t\t\t\tvar item = items[i];\r\n\t\t\t\t\tvar itemNode = this.rendered[item.id];\r\n\t\t\t\t\tnodesToRemove[item.id] = false;\r\n\t\t\t\t\tif (itemNode && itemNode.parentNode) {\r\n\t\t\t\t\t\tvar isVisible = false;\r\n\t\t\t\t\t\tif(specializedViewPortChecker){\r\n\t\t\t\t\t\t\tisVisible = specializedViewPortChecker(item, viewPort, view, viewConfig, gantt);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tisVisible = genericViewPortChecker(viewPort, getRectangle(item, view, viewConfig, gantt), gantt);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!isVisible) {\r\n\t\t\t\t\t\t\tnodesToRemove[item.id] = true;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif(updateMethod){\r\n\t\t\t\t\t\t\t\tupdateMethod.call(gantt, item, itemNode, view, viewConfig, viewPort);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.restore(item, buffer);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trenderCalledFor[items[i].id] = true;\r\n\t\t\t\t\t\tthis.render_item(items[i], buffer, viewPort, view, viewConfig);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor(var i in nodesToRemove){\r\n\t\t\t\t\tif(nodesToRemove[i]){\r\n\t\t\t\t\t\tthis.hide(i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(buffer.childNodes.length){\r\n\t\t\t\t\tcontainer.appendChild(buffer, container);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (renderCallbackMethod) {\r\n\t\t\t\t\tvar newElements = {};\r\n\t\t\t\t\tfor(var i in this.rendered) {\r\n\t\t\t\t\t\tif(!renderedItems[i] || renderCalledFor[i]){\r\n\t\t\t\t\t\t\tnewElements[i] = this.rendered[i];\r\n\t\t\t\t\t\t\trenderCallbackMethod.call(gantt, itemsSearch[i], this.rendered[i], view);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tappend: function (item, node, container) {\r\n\t\t\t\tif(!this.rendered){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!node) {\r\n\t\t\t\t\tif (this.rendered[item.id]) {\r\n\t\t\t\t\t\tthis.remove_item(item.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.rendered[item.id] && this.rendered[item.id].parentNode) {\r\n\t\t\t\t\tthis.replace_item(item.id, node);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontainer.appendChild(node);\r\n\t\t\t\t}\r\n\t\t\t\tthis.rendered[item.id] = node;\r\n\t\t\t},\r\n\t\t\treplace_item: function (item_id, newNode) {\r\n\t\t\t\tvar item = this.rendered[item_id];\r\n\t\t\t\tif (item && item.parentNode) {\r\n\t\t\t\t\titem.parentNode.replaceChild(newNode, item);\r\n\r\n\t\t\t\t}\r\n\t\t\t\tthis.rendered[item_id] = newNode;\r\n\t\t\t},\r\n\t\t\tremove_item: function (item_id) {\r\n\t\t\t\tthis.hide(item_id);\r\n\t\t\t\tdelete this.rendered[item_id];\r\n\t\t\t},\r\n\t\t\thide: function (item_id) {\r\n\t\t\t\tvar item = this.rendered[item_id];\r\n\t\t\t\tif (item && item.parentNode) {\r\n\t\t\t\t\titem.parentNode.removeChild(item);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\trestore: function (item, container) {\r\n\t\t\t\tvar dom = this.rendered[item.id];\r\n\t\t\t\tif (dom) {\r\n\t\t\t\t\tif (!dom.parentNode) {\r\n\t\t\t\t\t\tthis.append(item, dom, container || node);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.render_item(item, container || node);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tchange_id: function (oldid, newid) {\r\n\t\t\t\tthis.rendered[newid] = this.rendered[oldid];\r\n\t\t\t\tdelete this.rendered[oldid];\r\n\t\t\t},\r\n\t\t\trendered: task_area_pulls[id],\r\n\t\t\tnode: node,\r\n\t\t\tdestructor: function () {\r\n\t\t\t\tthis.clear();\r\n\t\t\t\tdelete task_area_renderers[id];\r\n\t\t\t\tdelete task_area_pulls[id];\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn task_area_renderers[id];\r\n\t}\r\n\r\n\r\n\tfunction clearRenderers() {\r\n\t\tfor (var i in task_area_renderers) {\r\n\t\t\tgetRenderer(i).destructor();\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetRenderer: getRenderer,\r\n\t\tclearRenderers: clearRenderers\r\n\t};\r\n\r\n};\r\n\r\nexport default rendererFactory;","import renderFactoryProvider from \"./render_factory\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport isLegacyRender from \"./is_legacy_smart_render\";\r\n\r\nvar layerFactory = function(gantt){\r\n\r\n\tvar renderFactory = renderFactoryProvider(gantt);\r\n\treturn {\r\n\tcreateGroup: function (getContainer, relativeRoot, defaultFilters, initLayer) {\r\n\r\n\t\tvar renderGroup = {\r\n\t\t\ttempCollection: [],\r\n\t\t\trenderers: {},\r\n\t\t\tcontainer: getContainer,\r\n\t\t\tfilters: [],\r\n\t\t\tgetLayers: function () {\r\n\t\t\t\tthis._add();// add pending layers\r\n\r\n\t\t\t\tvar res = [];\r\n\t\t\t\tfor (var i in this.renderers) {\r\n\t\t\t\t\tres.push(this.renderers[i]);\r\n\t\t\t\t}\r\n\t\t\t\treturn res;\r\n\t\t\t},\r\n\t\t\tgetLayer: function (id) {\r\n\t\t\t\treturn this.renderers[id];\r\n\t\t\t},\r\n\t\t\t_add: function (layer) {\r\n\t\t\t\tif (layer) {\r\n\t\t\t\t\tlayer.id = layer.id || utils.uid();\r\n\t\t\t\t\tthis.tempCollection.push(layer);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar container = this.container();\r\n\r\n\t\t\t\tvar pending = this.tempCollection;\r\n\t\t\t\tfor (var i = 0; i < pending.length; i++) {\r\n\t\t\t\t\tlayer = pending[i];\r\n\r\n\t\t\t\t\tif (!this.container() && !(layer && layer.container && domHelpers.isChildOf(layer.container, document.body))) continue;\r\n\r\n\t\t\t\t\tvar node = layer.container,\r\n\t\t\t\t\t\tid = layer.id,\r\n\t\t\t\t\t\ttopmost = layer.topmost;\r\n\t\t\t\t\tif (!node.parentNode) {\r\n\t\t\t\t\t\t//insert on top or below the tasks\r\n\t\t\t\t\t\tif (topmost) {\r\n\t\t\t\t\t\t\tcontainer.appendChild(node);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar rel = relativeRoot ? relativeRoot() : container.firstChild;\r\n\t\t\t\t\t\t\t// GS-1274: if we don't add the second check, Gantt stops working if\r\n\t\t\t\t\t\t\t// we add the task layer without the timeline and switch to a layout with the timeline\r\n\t\t\t\t\t\t\tif (rel && rel.parentNode == container)\r\n\t\t\t\t\t\t\t\tcontainer.insertBefore(node, rel);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcontainer.appendChild(node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.renderers[id] = renderFactory.getRenderer(\r\n\t\t\t\t\t\tid,\r\n\t\t\t\t\t\tlayer,\r\n\t\t\t\t\t\tnode\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (initLayer) {\r\n\t\t\t\t\t\tinitLayer(layer, gantt);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.tempCollection.splice(i, 1);\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\taddLayer: function (config) {\r\n\t\t\t\tif(config){\r\n\t\t\t\t\tif(typeof config == \"function\"){\r\n\t\t\t\t\t\tconfig = {renderer: config};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(config.filter === undefined){\r\n\t\t\t\t\t\tconfig.filter = mergeFilters(defaultFilters || []);\r\n\t\t\t\t\t}else if(config.filter instanceof Array){\r\n\t\t\t\t\t\tconfig.filter.push(defaultFilters);\r\n\t\t\t\t\t\tconfig.filter = mergeFilters(config.filter);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!config.container){\r\n\t\t\t\t\t\tconfig.container = document.createElement(\"div\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar self = this;\r\n\t\t\t\t\tconfig.requestUpdate = function(){\r\n\t\t\t\t\t\tif(gantt.config.smart_rendering && !isLegacyRender(gantt)){\r\n\t\t\t\t\t\t\tif(self.renderers[config.id]){\r\n\t\t\t\t\t\t\t\tself.onUpdateRequest(self.renderers[config.id]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._add(config);\r\n\t\t\t\treturn (config ? config.id : undefined);\r\n\t\t\t},\r\n\t\t\tonUpdateRequest: function(layer){\r\n\r\n\t\t\t},\r\n\r\n\t\t\teachLayer: function(code){\r\n\t\t\t\tfor (var i in this.renderers) {\r\n\t\t\t\t\tcode(this.renderers[i]);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tremoveLayer: function (id) {\r\n\t\t\t\tif(!this.renderers[id])\r\n\t\t\t\t\treturn;\r\n\t\t\t\tthis.renderers[id].destructor();\r\n\t\t\t\tdelete this.renderers[id];\r\n\t\t\t},\r\n\t\t\tclear: function () {\r\n\t\t\t\tfor (var i in this.renderers) {\r\n\t\t\t\t\tthis.renderers[i].destructor();\r\n\t\t\t\t}\r\n\t\t\t\tthis.renderers = {};\r\n\t\t\t}//,\r\n\t\t\t//prepareConfig: prepareConfig\r\n\t\t};\r\n\r\n\t\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\t\trenderGroup.clear();\r\n\t\t\trenderGroup = null;\r\n\t\t});\r\n\r\n\t\treturn renderGroup;\r\n\t}\r\n};};\r\n\r\n\r\nfunction mergeFilters(filter_methods){\r\n\tif(!(filter_methods instanceof Array)){\r\n\t\tfilter_methods = Array.prototype.slice.call(arguments, 0);\r\n\t}\r\n\r\n\treturn function(obj){\r\n\t\tvar res = true;\r\n\t\tfor(var i = 0, len = filter_methods.length; i < len; i++){\r\n\t\t\tvar filter_method = filter_methods[i];\r\n\t\t\tif(filter_method){\r\n\t\t\t\tres = res && (filter_method(obj.id, obj) !== false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t};\r\n}\r\n\r\n\r\nexport default layerFactory;\r\n","export default function(item, view, config){\r\n\tif(!item.start_date || !item.end_date){\r\n\t\treturn null;\r\n\t}\r\n\tvar padding = 200;\r\n\tvar startCoord = view.posFromDate(item.start_date);\r\n\tvar endCoord = view.posFromDate(item.end_date);\r\n\tvar left = Math.min(startCoord, endCoord) - padding;\r\n\tvar right = Math.max(startCoord, endCoord) + padding;\r\n\treturn {\r\n\t\ttop: view.getItemTop(item.id),\r\n\t\theight: view.getItemHeight(item.id),\r\n\t\tleft: left,\r\n\t\twidth: right - left\r\n\t};\r\n};","import getLinkRectangle from \"../get_link_rectangle\";\r\n\r\nexport default function(){\r\n\tvar coordinates = [];\r\n\tvar calculated = false;\r\n\r\n\tfunction clearCache(){\r\n\t\tcoordinates = [];\r\n\t\tcalculated = false;\r\n\t}\r\n\r\n\tfunction buildCache(datastore, view, gantt){\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar visibleItems = datastore.getVisibleItems();\r\n\t\t//datastore.eachItem(function(link){\r\n\t\tvisibleItems.forEach(function(link){\r\n\t\t\tvar rec = getLinkRectangle(link, view, config, gantt);\r\n\t\t\tif(!rec){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcoordinates.push({id: link.id, rec: rec});\r\n\t\t});\r\n\r\n\t\tcoordinates.sort(function(a, b){\r\n\t\t\tif(a.rec.right < b.rec.right){\r\n\t\t\t\treturn -1;\r\n\t\t\t}else {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcalculated = true;\r\n\t}\r\n\r\n\tvar initialized = false;\r\n\tfunction init(datastore){\r\n\t\tif(initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tinitialized = true;\r\n\t\tdatastore.attachEvent(\"onPreFilter\", clearCache);\r\n\t\tdatastore.attachEvent(\"onStoreUpdated\", clearCache);\r\n\t\tdatastore.attachEvent(\"onClearAll\", clearCache);\r\n\t\tdatastore.attachEvent(\"onBeforeStoreUpdate\", clearCache);\r\n\t}\r\n\r\n\treturn function getVisibleLinksRange(gantt, view, config, datastore, viewport){\r\n\t\tinit(datastore);\r\n\t\tif(!calculated){\r\n\t\t\tbuildCache(datastore, view, gantt);\r\n\t\t}\r\n\r\n\t\tvar visibleBoxes = [];\r\n\t\tfor(var i = 0; i < coordinates.length; i++){\r\n\t\t\tvar item = coordinates[i];\r\n\t\t\tvar box = item.rec;\r\n\t\t\tif(box.right < viewport.x){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif(box.left < viewport.x_end && box.right > viewport.x && box.top < viewport.y_end && box.bottom > viewport.y){\r\n\t\t\t\tvisibleBoxes.push(item.id);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn {\r\n\t\t\tids: visibleBoxes\r\n\t\t};\r\n\t};\r\n};","\r\n\r\nimport barRectangle from \"./get_bar_rectangle\";\r\n\r\nexport default function getLinkBox(item, view, config, gantt){\r\n\tif(!gantt.isTaskExists(item.source)){\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif(!gantt.isTaskExists(item.target)){\r\n\t\treturn null;\r\n\t}\r\n\tvar sourceBox = barRectangle(gantt.getTask(item.source), view, gantt);\r\n\tvar targetBox = barRectangle(gantt.getTask(item.target), view, gantt);\r\n\r\n\tif(!sourceBox || !targetBox){\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar padding = 100;\r\n\tvar left = Math.min(sourceBox.left, targetBox.left) - padding;\r\n\tvar right = Math.max(sourceBox.left + sourceBox.width, targetBox.left + targetBox.width) + padding;\r\n\tvar top = Math.min(sourceBox.top, targetBox.top) - padding;\r\n\tvar bottom = Math.max(sourceBox.top + sourceBox.height, targetBox.top + targetBox.height) + padding;\r\n\r\n\treturn {\r\n\t\ttop: top,\r\n\t\theight: bottom - top,\r\n\t\tbottom,\r\n\t\tleft: left,\r\n\t\twidth: right - left,\r\n\t\tright\r\n\t};\r\n};\r\n","\r\n// optimized checker for links smart rendering\r\n\r\n// first check the vertical position since it's easier to calculate\r\n\r\nexport default function isLinkInViewPort(item, viewport, view, config, gantt){\r\n\tvar source = view.$gantt.getTask(item.source);\r\n\tvar target = view.$gantt.getTask(item.target);\r\n\t// check vertical visibility first since it's a lighter check\r\n\tvar sourceTop = view.getItemTop(source.id);\r\n\tvar sourceHeight = view.getItemHeight(source.id);\r\n\r\n\tvar targetTop = view.getItemTop(target.id);\r\n\tvar targetHeight = view.getItemHeight(target.id);\r\n\r\n\tif(viewport.y > sourceTop + sourceHeight &&\r\n\t\tviewport.y > targetTop + targetHeight){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(viewport.y_end < targetTop &&\r\n\t\tviewport.y_end < sourceTop){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar padding = 100;\r\n\tvar sourceLeft = view.posFromDate(source.start_date);\r\n\tvar sourceRight = view.posFromDate(source.end_date);\r\n\tvar targetLeft = view.posFromDate(target.start_date);\r\n\tvar targetRight = view.posFromDate(target.end_date);\r\n\r\n\tif(sourceLeft > sourceRight){\r\n\t\t// rtl\r\n\t\tvar tmp = sourceRight;\r\n\t\tsourceRight = sourceLeft;\r\n\t\tsourceLeft = tmp;\r\n\t}\r\n\tif(targetLeft > targetRight){\r\n\t\t// rtl\r\n\t\tvar tmp = targetRight;\r\n\t\ttargetRight = targetLeft;\r\n\t\ttargetLeft = tmp;\r\n\t}\r\n\tsourceLeft += -padding; // add buffer for custom elements\r\n\tsourceRight += padding;\r\n\ttargetLeft += -padding; // add buffer for custom elements\r\n\ttargetRight += padding;\r\n\r\n\tif(viewport.x > sourceRight &&\r\n\t\tviewport.x > targetRight){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(viewport.x_end < sourceLeft &&\r\n\t\tviewport.x_end < targetLeft){\r\n\t\treturn false;\r\n\t}\r\n\treturn true;\r\n};\r\n","import createLayerFactory from \"./render/layer_engine\";\r\n\r\nimport getVisibleTaskRange from \"./render/viewport/get_visible_bars_range\";\r\nimport getVisibleLinksRangeFactory from \"./render/viewport/factory/get_visible_link_range\";\r\n\r\nimport isLinkInViewport from \"./render/viewport/is_link_in_viewport\";\r\n\r\nfunction initLayer(layer, gantt){\r\n\tif(!layer.view){\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar view = layer.view;\r\n\tif(typeof view === \"string\"){\r\n\t\tview = gantt.$ui.getView(view);\r\n\t}\r\n\r\n\tif(view && view.attachEvent){\r\n\t\tview.attachEvent(\"onScroll\", function(){\r\n\t\t\tvar state = gantt.$services.getService(\"state\");\r\n\t\t\t// don't repaint if we're inside batchUpdate, a complete repaint will be called afterwards\r\n\t\t\tif(!state.getState(\"batchUpdate\").batch_update && !view.$config.$skipSmartRenderOnScroll){\r\n\t\t\t\tif(layer.requestUpdate){\r\n\t\t\t\t\tlayer.requestUpdate();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nvar createLayerEngine = function(gantt){\r\n\tvar factory = createLayerFactory(gantt);\r\n\treturn {\r\n\t\tgetDataRender: function(name){\r\n\t\t\treturn gantt.$services.getService(\"layer:\" + name) || null;\r\n\t\t},\r\n\t\tcreateDataRender: function(config){\r\n\t\t\tvar name = config.name,\r\n\t\t\t\tdefaultContainer = config.defaultContainer,\r\n\t\t\t\tpreviusSiblingContainer = config.defaultContainerSibling;\r\n\r\n\t\t\tvar layers = factory.createGroup(\r\n\t\t\t\tdefaultContainer,\r\n\t\t\t\tpreviusSiblingContainer,\r\n\t\t\t\tfunction(itemId, item){\r\n\t\t\t\t\tif(layers.filters){\r\n\t\t\t\t\t\tfor(var i = 0; i < layers.filters.length; i++){\r\n\t\t\t\t\t\t\tif(layers.filters[i](itemId, item) === false){\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tinitLayer\r\n\t\t\t);\r\n\r\n\t\t\tgantt.$services.setService(\"layer:\" + name, function(){\r\n\t\t\t\treturn layers;\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onGanttReady\", function () {\r\n\t\t\t\tlayers.addLayer();// init layers on start\r\n\t\t\t});\r\n\r\n\t\t\treturn layers;\r\n\t\t},\r\n\t\tinit: function(){\r\n\t\t\tvar taskLayers = this.createDataRender({\r\n\t\t\t\tname: \"task\",\r\n\t\t\t\tdefaultContainer: function(){\r\n\t\t\t\t\tif(gantt.$task_data){\r\n\t\t\t\t\t\treturn gantt.$task_data;\r\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\r\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_data;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tdefaultContainerSibling: function(){\r\n\t\t\t\t\tif(gantt.$task_links){\r\n\t\t\t\t\t\treturn gantt.$task_links;\r\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\r\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_links;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tfilter: function(item){\r\n\r\n\t\t\t\t}\r\n\t\t\t}, gantt);\r\n\r\n\t\t\tvar linkLayers = this.createDataRender({\r\n\t\t\t\tname: \"link\",\r\n\t\t\t\tdefaultContainer: function(){\r\n\t\t\t\t\tif(gantt.$task_data){\r\n\t\t\t\t\t\treturn gantt.$task_data;\r\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\r\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, gantt);\r\n\r\n\t\t\treturn {\r\n\t\t\t\taddTaskLayer: function(config){\r\n\t\t\t\t\tconst rangeFunction = getVisibleTaskRange;\r\n\t\t\t\t\tif(typeof config === \"function\"){\r\n\t\t\t\t\t\tconfig = {\r\n\t\t\t\t\t\t\trenderer: {\r\n\t\t\t\t\t\t\t\trender: config,\r\n\t\t\t\t\t\t\t\tgetVisibleRange: rangeFunction\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(config.renderer && !config.renderer.getVisibleRange){\r\n\t\t\t\t\t\t\tconfig.renderer.getVisibleRange = rangeFunction;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconfig.view = \"timeline\";\r\n\r\n\t\t\t\t\treturn taskLayers.addLayer(config);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_getTaskLayers: function(){\r\n\t\t\t\t\treturn taskLayers.getLayers();\r\n\t\t\t\t},\r\n\t\t\t\tremoveTaskLayer: function(id){\r\n\t\t\t\t\ttaskLayers.removeLayer(id);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_clearTaskLayers: function(){\r\n\t\t\t\t\ttaskLayers.clear();\r\n\t\t\t\t},\r\n\t\t\t\taddLinkLayer: function(config){\r\n\t\t\t\t\tconst rangeFunction = getVisibleLinksRangeFactory();\r\n\t\t\t\t\tif(typeof config === \"function\"){\r\n\t\t\t\t\t\tconfig = {\r\n\t\t\t\t\t\t\trenderer: {\r\n\t\t\t\t\t\t\t\trender: config,\r\n\t\t\t\t\t\t\t\tgetVisibleRange: rangeFunction\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(config.renderer && !config.renderer.getVisibleRange){\r\n\t\t\t\t\t\t\tconfig.renderer.getVisibleRange = rangeFunction;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconfig.view = \"timeline\";\r\n\t\t\t\t\tif(config && config.renderer){\r\n\t\t\t\t\t\tif(!config.renderer.getRectangle && !config.renderer.isInViewPort){\r\n\t\t\t\t\t\t\tconfig.renderer.isInViewPort = isLinkInViewport;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn linkLayers.addLayer(config);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_getLinkLayers: function(){\r\n\t\t\t\t\treturn linkLayers.getLayers();\r\n\t\t\t\t},\r\n\t\t\t\tremoveLinkLayer: function(id){\r\n\t\t\t\t\tlinkLayers.removeLayer(id);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_clearLinkLayers: function(){\r\n\t\t\t\t\tlinkLayers.clear();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n};\r\n\r\nexport default createLayerEngine;","import * as utils from \"../../../utils/utils\";\r\nimport eventable from \"../../../utils/eventable\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\n\r\nvar Cell = (function () {\r\n\t\"use strict\";\r\n\r\n\tfunction Cell(parent, config, factory, gantt) {\r\n\t\tif (parent) {\r\n\t\t\tthis.$container = domHelpers.toNode(parent);\r\n\t\t\tthis.$parent = parent;\r\n\t\t}\r\n\t\t// save config\r\n\t\tthis.$config = utils.mixin(config, {\r\n\t\t\theaderHeight: 33\r\n\t\t});\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$domEvents = gantt._createDomEventScope();\r\n\t\t// set id\r\n\t\tthis.$id = config.id || \"c\" + utils.uid();\r\n\r\n\t\tthis.$name = \"cell\";\r\n\t\tthis.$factory = factory;\r\n\r\n\t\teventable(this);\r\n\r\n\t}\r\n\r\n\tCell.prototype.destructor = function () {\r\n\t\tthis.$parent = this.$container = this.$view = null;\r\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\r\n\t\tmouse.detach(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\r\n\t\tthis.$domEvents.detachAll();\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\t};\r\n\tCell.prototype.cell = function (id) {\r\n\t\treturn null;\r\n\t};\r\n\r\n\tCell.prototype.scrollTo = function(left, top){\r\n\r\n\t\t//GS-333 Add a way to scroll the HTML views:\r\n\t\tvar cell = this.$view;\r\n\t\tif (this.$config.html) cell = this.$view.firstChild;\r\n\r\n\t\tif (left*1 == left){\r\n\t\t\tcell.scrollLeft = left;\r\n\t\t}\r\n\t\tif(top*1 == top){\r\n\t\t\tcell.scrollTop = top;\r\n\t\t}\r\n\t};\r\n\r\n\tCell.prototype.clear = function(){\r\n\t\tthis.getNode().innerHTML = \"\";\r\n\t\tthis.getNode().className = \"gantt_layout_content\";\r\n\t\tthis.getNode().style.padding = \"0\";\r\n\t};\r\n\r\n\tCell.prototype.resize = function (final) {\r\n\t\tif (this.$parent) {\r\n\t\t\treturn this.$parent.resize(final);\r\n\t\t}\r\n\r\n\t\tif(final === false){\r\n\t\t\tthis.$preResize = true;\r\n\t\t}\r\n\r\n\t\tvar topCont = this.$container;\r\n\t\tvar x = topCont.offsetWidth;\r\n\t\tvar y = topCont.offsetHeight;\r\n\t\tvar topSize = this.getSize();\r\n\t\tif (topCont === document.body) {\r\n\t\t\tx = document.body.offsetWidth;\r\n\t\t\ty = document.body.offsetHeight;\r\n\t\t}\r\n\t\tif (x < topSize.minWidth) {\r\n\t\t\tx = topSize.minWidth;\r\n\t\t}\r\n\t\tif (x > topSize.maxWidth) {\r\n\t\t\tx = topSize.maxWidth;\r\n\t\t}\r\n\t\tif (y < topSize.minHeight) {\r\n\t\t\ty = topSize.minHeight;\r\n\t\t}\r\n\t\tif (y > topSize.maxHeight) {\r\n\t\t\ty = topSize.maxHeight;\r\n\t\t}\r\n\t\tthis.setSize(x, y);\r\n\r\n\t\tif(!this.$preResize){\r\n\t\t//\tself.callEvent(\"onResize\", [x, y]);\r\n\t\t}\r\n\t\tthis.$preResize = false;\r\n\t};\r\n\r\n\tCell.prototype.hide = function () {\r\n\t\tthis._hide(true);\r\n\t\tthis.resize();\r\n\t};\r\n\tCell.prototype.show = function (force) {\r\n\t\tthis._hide(false);\r\n\t\tif (force && this.$parent) {\r\n\t\t\tthis.$parent.show();\r\n\t\t}\r\n\t\tthis.resize();\r\n\t};\r\n\tCell.prototype._hide = function (mode) {\r\n\t\tif (mode === true && this.$view.parentNode) {\r\n\t\t\tthis.$view.parentNode.removeChild(this.$view);\r\n\t\t}\r\n\t\telse if (mode === false && !this.$view.parentNode) {\r\n\t\t\tvar index = this.$parent.cellIndex(this.$id);\r\n\t\t\tthis.$parent.moveView(this, index);\r\n\t\t}\r\n\t\tthis.$config.hidden = mode;\r\n\t};\r\n\tCell.prototype.$toHTML = function (content, css) {\r\n\t\tif (content === void 0) { content = \"\"; }\r\n\t\tcss = [(css || \"\"), (this.$config.css || \"\")].join(\" \");\r\n\t\tvar obj = this.$config;\r\n\t\tvar header = \"\";\r\n\t\tif (obj.raw) {\r\n\t\t\tcontent = typeof obj.raw === \"string\" ? obj.raw : \"\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (!content) {\r\n\t\t\t\tcontent = \"\" + (obj.html || \"\") + \"
\";\r\n\t\t\t}\r\n\t\t\tif (obj.header) {\r\n\t\t\t\tvar collapseIcon = obj.canCollapse ? \"\" : \"\";\r\n\t\t\t\theader = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\" + header + content + \"
\";\r\n\t};\r\n\tCell.prototype.$fill = function (node, parent) {\r\n\t\tthis.$view = node;\r\n\t\tthis.$parent = parent;\r\n\t\tthis.init();\r\n\t};\r\n\tCell.prototype.getNode = function () {\r\n\t\treturn (this.$view.querySelector(\"gantt_layout_cell\") || this.$view);\r\n\t};\r\n\tCell.prototype.init = function () {\r\n\t\t// [NOT-GOOD] code is executed for each component, while it still has only one handler, it is no good\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tthis._headerClickHandler = function(e){\r\n\t\t\tvar cellId = domHelpers.locateAttribute(e, \"data-cell-id\");\r\n\t\t\tif(cellId == self.$id){\r\n\t\t\t\tself.toggle();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\r\n\t\tmouse.delegate(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\r\n\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t};\r\n\tCell.prototype.toggle = function () {\r\n\t\tthis.$config.collapsed = !this.$config.collapsed;\r\n\t\tthis.resize();\r\n\t};\r\n\tCell.prototype.getSize = function () {\r\n\t\tvar size = {\r\n\t\t\theight: this.$config.height || 0,\r\n\t\t\twidth: this.$config.width || 0,\r\n\t\t\tgravity: this.$config.gravity || 1,\r\n\t\t\tminHeight: this.$config.minHeight || 0,\r\n\t\t\tminWidth: this.$config.minWidth || 0,\r\n\t\t\tmaxHeight: this.$config.maxHeight || 100000000000,\r\n\t\t\tmaxWidth: this.$config.maxWidth || 100000000000\r\n\t\t};\r\n\t\tif (this.$config.collapsed) {\r\n\t\t\tvar mode = this.$config.mode === \"x\";\r\n\t\t\tsize[mode ? \"width\" : \"height\"] = size[mode ? \"maxWidth\" : \"maxHeight\"] = this.$config.headerHeight;\r\n\t\t}\r\n\t\treturn size;\r\n\t};\r\n\r\n\tCell.prototype.getContentSize = function(){\r\n\r\n\t\tvar width = this.$lastSize.contentX;\r\n\t\tif(width !== width*1){\r\n\t\t\twidth = this.$lastSize.width;\r\n\t\t}\r\n\r\n\t\tvar height = this.$lastSize.contentY;\r\n\t\tif(height !== height*1){\r\n\t\t\theight = this.$lastSize.height;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\twidth: width,\r\n\t\t\theight: height\r\n\t\t};\r\n\t};\r\n\r\n\tCell.prototype._getBorderSizes = function(){\r\n\t\tvar borders = {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0,\r\n\t\t\thorizontal: 0,\r\n\t\t\tvertical: 0\r\n\t\t};\r\n\t\tif(this._currentBorders){\r\n\t\t\tif(this._currentBorders[this._borders.left]){\r\n\t\t\t\tborders.left = 1;\r\n\t\t\t\tborders.horizontal++;\r\n\t\t\t}\r\n\r\n\t\t\tif(this._currentBorders[this._borders.right]){\r\n\t\t\t\tborders.right = 1;\r\n\t\t\t\tborders.horizontal++;\r\n\t\t\t}\r\n\r\n\t\t\tif(this._currentBorders[this._borders.top]){\r\n\t\t\t\tborders.top = 1;\r\n\t\t\t\tborders.vertical++;\r\n\t\t\t}\r\n\r\n\t\t\tif(this._currentBorders[this._borders.bottom]){\r\n\t\t\t\tborders.bottom = 1;\r\n\t\t\t\tborders.vertical++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn borders;\r\n\r\n\t};\r\n\r\n\tCell.prototype.setSize = function (x, y) {\r\n\t\tthis.$view.style.width = x + \"px\";\r\n\t\tthis.$view.style.height = y + \"px\";\r\n\r\n\t\tvar borders = this._getBorderSizes();\r\n\t\tvar contentY = y - borders.vertical;\r\n\t\tvar contentX = x - borders.horizontal;\r\n\r\n\t\tthis.$lastSize = { x: x, y: y, contentX: contentX, contentY: contentY };\r\n\t\tif (this.$config.header) {\r\n\t\t\tthis._sizeHeader();\r\n\t\t}else{\r\n\t\t\tthis._sizeContent();\r\n\t\t}\r\n\t};\r\n\r\n\tCell.prototype._borders = {\r\n\t\t\"left\":\"gantt_layout_cell_border_left\",\r\n\t\t\"right\":\"gantt_layout_cell_border_right\",\r\n\t\t\"top\":\"gantt_layout_cell_border_top\",\r\n\t\t\"bottom\":\"gantt_layout_cell_border_bottom\"\r\n\t};\r\n\r\n\tCell.prototype._setBorders = function(css, view){\r\n\t\tif(!view) {\r\n\t\t\tview = this;\r\n\t\t}\r\n\t\tvar node = view.$view;\r\n\r\n\t\tfor( var i in this._borders){\r\n\t\t\tdomHelpers.removeClassName(node, this._borders[i]);\r\n\t\t}\r\n\r\n\t\tif(typeof css == \"string\"){\r\n\t\t\tcss = [css];\r\n\t\t}\r\n\r\n\t\tvar cssHash = {};\r\n\r\n\t\tfor(var i = 0; i < css.length; i++){\r\n\t\t\tdomHelpers.addClassName(node, css[i]);\r\n\t\t\tcssHash[css[i]] = true;\r\n\t\t}\r\n\r\n\t\tview._currentBorders = cssHash;\r\n\t};\r\n\r\n\r\n\tCell.prototype._sizeContent = function(){\r\n\t\tvar content = this.$view.childNodes[0];\r\n\t\tif(content && content.className == \"gantt_layout_content\"){\r\n\t\t\tcontent.style.height = this.$lastSize.contentY + \"px\";\r\n\t\t}\r\n\t};\r\n\r\n\tCell.prototype._sizeHeader = function () {\r\n\t\tvar size = this.$lastSize;\r\n\t\tsize.contentY -= this.$config.headerHeight;\r\n\t\tvar header = this.$view.childNodes[0];\r\n\t\tvar content = this.$view.childNodes[1];\r\n\t\tvar xLayout = this.$config.mode === \"x\";\r\n\t\tif (this.$config.collapsed) {\r\n\t\t\tcontent.style.display = \"none\";\r\n\t\t\tif (xLayout) {\r\n\t\t\t\theader.className = \"gantt_layout_header collapsed_x\";\r\n\t\t\t\theader.style.width = size.y + \"px\";\r\n\t\t\t\tvar d = Math.floor(size.y / 2 - size.x / 2);\r\n\t\t\t\theader.style.transform = \"rotate(90deg) translate(\" + d + \"px, \" + d + \"px)\";\r\n\t\t\t\tcontent.style.display = \"none\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\theader.className = \"gantt_layout_header collapsed_y\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (xLayout) {\r\n\t\t\t\theader.className = \"gantt_layout_header\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\theader.className = \"gantt_layout_header vertical\";\r\n\t\t\t}\r\n\t\t\theader.style.width = 'auto';\r\n\t\t\theader.style.transform = '';\r\n\t\t\tcontent.style.display = \"\";\r\n\t\t\tcontent.style.height = size.contentY + \"px\";\r\n\t\t}\r\n\t\theader.style.height = this.$config.headerHeight + \"px\";\r\n\t};\r\n\treturn Cell;\r\n}());\r\n\r\nexport default Cell;\r\n","export default function (d, b) {\r\n\tfor (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\tfunction __() { this.constructor = d; }\r\n\td.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};","import __extends from \"../../../utils/extends\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport Cell from \"./cell\";\r\n\r\nvar Layout = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\t__extends(Layout, _super);\r\n\tfunction Layout(parent, config, factory) {\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\r\n\t\tif(parent)\r\n\t\t\t_this.$root = true;\r\n\r\n\t\t_this._parseConfig(config);\r\n\t\t_this.$name = \"layout\";\r\n\t\treturn _this;\r\n\t}\r\n\r\n\tLayout.prototype.destructor = function () {\r\n\t\tif (this.$container && this.$view) {\r\n\t\t\tdomHelpers.removeNode(this.$view);\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tvar child = this.$cells[i];\r\n\t\t\tchild.destructor();\r\n\t\t}\r\n\t\tthis.$cells = [];\r\n\r\n\t\t_super.prototype.destructor.call(this);\r\n\t};\r\n\r\n\tLayout.prototype._resizeScrollbars = function(autosize, scrollbars){\r\n\t\tvar scrollChanged = false;\r\n\t\tvar visibleScrollbars = [],\r\n\t\t\thiddenScrollbars = [];\r\n\r\n\t\tconst scrollbarsToHide = [];\r\n\r\n\t\tfunction showScrollbar(scrollbar){\r\n\t\t\tscrollbar.$parent.show();\r\n\t\t\tscrollChanged = true;\r\n\t\t\tvisibleScrollbars.push(scrollbar);\r\n\t\t}\r\n\t\tfunction hideScrollbar(scrollbar){\r\n\t\t\tscrollbar.$parent.hide();\r\n\t\t\tscrollChanged = true;\r\n\t\t\thiddenScrollbars.push(scrollbar);\r\n\t\t}\r\n\r\n\t\tvar scrollbar;\r\n\t\tfor(var i = 0; i < scrollbars.length; i++){\r\n\t\t\tscrollbar = scrollbars[i];\r\n\r\n\t\t\tif(autosize[scrollbar.$config.scroll]) {\r\n\t\t\t\thideScrollbar(scrollbar);\r\n\t\t\t}else if(scrollbar.shouldHide()){\r\n\t\t\t\t//hideScrollbar(scrollbar);\r\n\t\t\t\tscrollbarsToHide.push(scrollbar);\r\n\t\t\t}else if(scrollbar.shouldShow()){\r\n\t\t\t\tshowScrollbar(scrollbar);\r\n\t\t\t}else{\r\n\t\t\t\tif(scrollbar.isVisible()){\r\n\t\t\t\t\tvisibleScrollbars.push(scrollbar);\r\n\t\t\t\t}else{\r\n\t\t\t\t\thiddenScrollbars.push(scrollbar);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar visibleGroups = {};\r\n\t\tfor(var i = 0; i < visibleScrollbars.length; i++){\r\n\t\t\tif(visibleScrollbars[i].$config.group){\r\n\t\t\t\tvisibleGroups[visibleScrollbars[i].$config.group] = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// GS-2220\r\n\t\tscrollbarsToHide.forEach(function(scrollbar){\r\n\t\t\tif(!(scrollbar.$config.group && visibleGroups[scrollbar.$config.group])){\r\n\t\t\t\thideScrollbar(scrollbar);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfor(var i = 0; i < hiddenScrollbars.length; i++){\r\n\t\t\tscrollbar = hiddenScrollbars[i];\r\n\r\n\t\t\tif(scrollbar.$config.group && visibleGroups[scrollbar.$config.group]){\r\n\t\t\t\tshowScrollbar(scrollbar);\r\n\t\t\t\t// GS-707 If the scrollbar was hidden then showed, the container resize shouldn't happen because of that\r\n\t\t\t\tfor(var j = 0; j < visibleScrollbars.length; j++){\r\n\t\t\t\t\tif(visibleScrollbars[j] == scrollbar){\r\n\t\t\t\t\t\tthis.$gantt.$scrollbarRepaint = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn scrollChanged;\r\n\t};\r\n\r\n\tLayout.prototype._syncCellSizes = function(groupName, newSize){\r\n\t\tif(!groupName)\r\n\t\t\treturn;\r\n\r\n\t\tvar groups = {};\r\n\r\n\t\tthis._eachChild(function(cell){\r\n\t\t\tif(cell.$config.group && cell.$name != \"scrollbar\" && cell.$name != \"resizer\"){\r\n\t\t\t\tif(!groups[cell.$config.group]){\r\n\t\t\t\t\tgroups[cell.$config.group] = [];\r\n\t\t\t\t}\r\n\t\t\t\tgroups[cell.$config.group].push(cell);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(groups[groupName]){\r\n\t\t\tthis._syncGroupSize(groups[groupName], newSize);\r\n\t\t}\r\n\t\treturn groups[groupName];\r\n\t};\r\n\r\n\tLayout.prototype._syncGroupSize = function(cells, newSize){\r\n\t\tif(!cells.length) return;\r\n\r\n\t\tvar property = cells[0].$parent._xLayout ? \"width\" : \"height\";\r\n\t\tvar direction = cells[0].$parent.getNextSibling(cells[0].$id) ? 1 : -1;\r\n\r\n\t\tvar newSizeValue = newSize.value;\r\n\t\tvar isGravity = newSize.isGravity;\r\n\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\tvar ownSize = cells[i].getSize();\r\n\r\n\t\t\tvar resizeSibling = direction > 0 ? cells[i].$parent.getNextSibling(cells[i].$id) : cells[i].$parent.getPrevSibling(cells[i].$id);\r\n\t\t\tif(resizeSibling.$name == \"resizer\"){\r\n\t\t\t\tresizeSibling = direction > 0 ? resizeSibling.$parent.getNextSibling(resizeSibling.$id) : resizeSibling.$parent.getPrevSibling(resizeSibling.$id);\r\n\t\t\t}\r\n\t\t\tvar siblingSize = resizeSibling.getSize();\r\n\r\n\t\t\tif(!isGravity) {\r\n\t\t\t\tif(resizeSibling[property]){\r\n\t\t\t\t\tvar totalGravity = ownSize.gravity + siblingSize.gravity;\r\n\t\t\t\t\tvar totalSize = ownSize[property] + siblingSize[property];\r\n\t\t\t\t\tvar k = totalGravity / totalSize;\r\n\t\t\t\t\tcells[i].$config.gravity = k * newSizeValue;\r\n\r\n\t\t\t\t\tresizeSibling.$config[property] = totalSize - newSizeValue;\r\n\t\t\t\t\tresizeSibling.$config.gravity = totalGravity - k * newSizeValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcells[i].$config[property] = newSizeValue;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tcells[i].$config.gravity = newSizeValue;\r\n\t\t\t}\r\n\r\n\t\t\tvar mainGrid = this.$gantt.$ui.getView(\"grid\");\r\n\t\t\tif(mainGrid && cells[i].$content === mainGrid && !mainGrid.$config.scrollable && !isGravity){\r\n\t\t\t\tthis.$gantt.config.grid_width = newSizeValue;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.resize = function(startStage){\r\n\t\tvar mainCall = false;\r\n\t\tif(this.$root && !this._resizeInProgress){\r\n\t\t\tthis.callEvent(\"onBeforeResize\", []);\r\n\t\t\tmainCall = true;\r\n\t\t\tthis._resizeInProgress = true;\r\n\t\t}\r\n\r\n\t\t_super.prototype.resize.call(this, true);\r\n\t\t_super.prototype.resize.call(this, false);\r\n\r\n\t\tif(mainCall){\r\n\r\n\t\t\tvar contentViews = [];\r\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"viewCell\"));\r\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"viewLayout\"));\r\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"hostCell\"));\r\n\r\n\t\t\tvar scrollbars = this.getCellsByType(\"scroller\");\r\n\r\n\t\t\tfor(var i = 0; i < contentViews.length; i++){\r\n\t\t\t\tif(!contentViews[i].$config.hidden)\r\n\t\t\t\t\tcontentViews[i].setContentSize();\r\n\t\t\t}\r\n\r\n\t\t\tvar autosize = this._getAutosizeMode(this.$config.autosize);\r\n\r\n\t/* // possible to rollback set content size when autisize is disabled, not sure if need to\r\n\t\t\tcontentViews.forEach(function(view){\r\n\t\t\t\tconst parent = view.$parent;\r\n\t\t\t\tif(!autosize.x){\r\n\t\t\t\t\tif(parent.$config.$originalWidthStored){\r\n\t\t\t\t\t\tparent.$config.$originalWidthStored = false;\r\n\t\t\t\t\t\tparent.$config.width = parent.$config.$originalWidth;\r\n\t\t\t\t\t\tparent.$config.$originalWidth = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!autosize.y){\r\n\t\t\t\t\tif(parent.$config.$originalHeightStored){\r\n\t\t\t\t\t\tparent.$config.$originalHeightStored = false;\r\n\t\t\t\t\t\tparent.$config.height = parent.$config.$originalHeight;\r\n\t\t\t\t\t\tparent.$config.$originalHeight = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});*/\r\n\t\t\t\r\n\t\t\tvar scrollChanged = this._resizeScrollbars(autosize, scrollbars);\r\n\r\n\t\t\tif(this.$config.autosize){\r\n\t\t\t\tthis.autosize(this.$config.autosize);\r\n\t\t\t\tcontentViews.forEach(function(view){\r\n\t\t\t\t\tconst parent = view.$parent;\r\n\t\t\t\t\tconst sizes = parent.getContentSize(autosize);\r\n\t\t\t\t\tif(autosize.x){\r\n\t\t\t\t\t\tif(!parent.$config.$originalWidthStored){\r\n\t\t\t\t\t\t\tparent.$config.$originalWidthStored = true;\r\n\t\t\t\t\t\t\tparent.$config.$originalWidth = parent.$config.width;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tparent.$config.width = sizes.width;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(autosize.y){\r\n\t\t\t\t\t\tif(!parent.$config.$originalHeightStored){\r\n\t\t\t\t\t\t\tparent.$config.$originalHeightStored = true;\r\n\t\t\t\t\t\t\tparent.$config.$originalHeight = parent.$config.height;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tparent.$config.height = sizes.height;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tscrollChanged = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(scrollChanged){\r\n\t\t\t\tthis.resize();\r\n\t\t\t\tfor(var i = 0; i < contentViews.length; i++){\r\n\t\t\t\t\tif(!contentViews[i].$config.hidden)\r\n\t\t\t\t\t\tcontentViews[i].setContentSize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.callEvent(\"onResize\", []);\r\n\t\t}\r\n\t\tif(mainCall){\r\n\t\t\tthis._resizeInProgress = false;\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype._eachChild = function(code, cell){\r\n\t\tcell = cell || this;\r\n\t\tcode(cell);\r\n\t\tif(cell.$cells){\r\n\t\t\tfor(var i = 0; i < cell.$cells.length; i++){\r\n\t\t\t\tthis._eachChild(code, cell.$cells[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.isChild = function(view){\r\n\t\tvar res = false;\r\n\t\tthis._eachChild(function(child){\r\n\t\t\tif(child === view || child.$content === view){\r\n\t\t\t\tres = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn res;\r\n\t};\r\n\r\n\tLayout.prototype.getCellsByType = function(type){\r\n\t\tvar res = [];\r\n\t\tif(type === this.$name){\r\n\t\t\tres.push(this);\r\n\t\t}\r\n\r\n\t\tif(this.$content && this.$content.$name == type){\r\n\t\t\tres.push(this.$content);\r\n\t\t}\r\n\r\n\t\tif(this.$cells){\r\n\t\t\tfor(var i = 0; i < this.$cells.length; i++){\r\n\t\t\t\tvar children = Layout.prototype.getCellsByType.call(this.$cells[i], type);\r\n\t\t\t\tif(children.length){\r\n\t\t\t\t\tres.push.apply(res, children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\tLayout.prototype.getNextSibling = function(cellId){\r\n\t\tvar index = this.cellIndex(cellId);\r\n\t\tif(index >= 0 && this.$cells[index + 1]){\r\n\t\t\treturn this.$cells[index + 1];\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.getPrevSibling = function(cellId){\r\n\t\tvar index = this.cellIndex(cellId);\r\n\t\tif(index >= 0 && this.$cells[index - 1]){\r\n\t\t\treturn this.$cells[index - 1];\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tLayout.prototype.cell = function (id) {\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tvar child = this.$cells[i];\r\n\t\t\tif (child.$id === id) {\r\n\t\t\t\treturn child;\r\n\t\t\t}\r\n\t\t\tvar sub = child.cell(id);\r\n\t\t\tif (sub) {\r\n\t\t\t\treturn sub;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype.cellIndex = function (id) {\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tif (this.$cells[i].$id === id) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t};\r\n\tLayout.prototype.moveView = function (view, ind) {\r\n\t\tif (this.$cells[ind] !== view) {\r\n\t\t\treturn window.alert(\"Not implemented\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\tind += this.$config.header ? 1 : 0;\r\n\t\t\tvar node = this.$view;\r\n\t\t\tif (ind >= node.childNodes.length) {\r\n\t\t\t\tnode.appendChild(view.$view);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tnode.insertBefore(view.$view, node.childNodes[ind]);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype._parseConfig = function (config) {\r\n\t\tthis.$cells = [];\r\n\t\tthis._xLayout = !config.rows;\r\n\t\tvar cells = config.rows || config.cols || config.views;\r\n\t\tfor (var i = 0; i < cells.length; i++) {\r\n\t\t\tvar cell = cells[i];\r\n\t\t\tcell.mode = this._xLayout ? \"x\" : \"y\";\r\n\t\t\tvar $content = this.$factory.initUI(cell, this);\r\n\t\t\tif(!$content){\r\n\t\t\t\tcells.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}else{\r\n\t\t\t\t$content.$parent = this;\r\n\t\t\t\tthis.$cells.push($content);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype.getCells = function () {\r\n\t\treturn this.$cells;\r\n\t};\r\n\tLayout.prototype.render = function () {\r\n\t\tvar view = domHelpers.insertNode(this.$container, this.$toHTML());\r\n\t\tthis.$fill(view, null);\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t\tthis.resize();\r\n\r\n\t\t// do simple repaint after the first call\r\n\t\tthis.render = this.resize;\r\n\t};\r\n\tLayout.prototype.$fill = function (node, parent) {\r\n\t\tthis.$view = node;\r\n\t\tthis.$parent = parent;\r\n\t\tvar cells = domHelpers.getChildNodes(node, \"gantt_layout_cell\");\r\n\t\tfor (var i = cells.length - 1; i >= 0; i--) {\r\n\t\t\tvar sub = this.$cells[i];\r\n\t\t\tsub.$fill(cells[i], this);\r\n\t\t\t// initially hidden cell\r\n\t\t\tif (sub.$config.hidden) {\r\n\t\t\t\tsub.$view.parentNode.removeChild(sub.$view);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype.$toHTML = function () {\r\n\t\tvar mode = this._xLayout ? \"x\" : \"y\";\r\n\t\tvar html = [];\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\thtml.push(this.$cells[i].$toHTML());\r\n\t\t}\r\n\t\treturn _super.prototype.$toHTML.call(this, html.join(\"\"), (this.$root ? \"gantt_layout_root \" : \"\") + \"gantt_layout gantt_layout_\" + mode);\r\n\t};\r\n\r\n\tLayout.prototype.getContentSize = function(mode){\r\n\t\tvar contentWidth = 0,\r\n\t\t\tcontentHeight = 0;\r\n\r\n\t\tvar cellSize, cell, borders;\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\t\t\tif(cell.$config.hidden)\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tcellSize = cell.getContentSize(mode);\r\n\r\n\t\t\tif(cell.$config.view === \"scrollbar\" && mode[cell.$config.scroll]){\r\n\t\t\t\tcellSize.height = 0;\r\n\t\t\t\tcellSize.width = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.$config.resizer){\r\n\t\t\t\tif(this._xLayout){\r\n\t\t\t\t\tcellSize.height = 0;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellSize.width = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborders = cell._getBorderSizes();\r\n\r\n\t\t\tif(this._xLayout){\r\n\t\t\t\tcontentWidth += (cellSize.width + borders.horizontal);\r\n\t\t\t\tcontentHeight = Math.max(contentHeight, (cellSize.height + borders.vertical));\r\n\t\t\t}else{\r\n\t\t\t\tcontentWidth = Math.max(contentWidth, cellSize.width + borders.horizontal);\r\n\t\t\t\tcontentHeight += cellSize.height + borders.vertical;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tborders = this._getBorderSizes();\r\n\t\tcontentWidth += borders.horizontal;\r\n\t\tcontentHeight += borders.vertical;\r\n\r\n\t\t// GS-149 & GS-150: By default this code only increases the container sizes, because of that, the cell sizes\r\n\t\t// are also increased. Keep this code here in the case if something goes wrong\r\n\t\t/*\r\n\t\tif(this.$root){\r\n\t\t\tcontentWidth += 1;\r\n\t\t\tcontentHeight += 1;\r\n\t\t}\r\n\t\t*/\r\n\t\treturn {\r\n\t\t\twidth: contentWidth,\r\n\t\t\theight: contentHeight\r\n\t\t};\r\n\t};\r\n\r\n\tLayout.prototype._cleanElSize = function(value){\r\n\t\treturn ((value || \"\").toString().replace(\"px\", \"\") * 1 || 0);\r\n\t};\r\n\tLayout.prototype._getBoxStyles = function(div){\r\n\t\tvar computed = null;\r\n\t\tif(window.getComputedStyle){\r\n\t\t\tcomputed = window.getComputedStyle(div, null);\r\n\t\t}else{\r\n\t\t\t//IE with elem.currentStyle does not calculate sizes from %, so will use the default approach\r\n\t\t\tcomputed = {\r\n\t\t\t\t\"width\":div.clientWidth,\r\n\t\t\t\t\"height\":div.clientHeight\r\n\t\t\t};\r\n\t\t}\r\n\t\tvar properties = [\r\n\t\t\t\"width\",\r\n\t\t\t\"height\",\r\n\r\n\t\t\t\"paddingTop\",\r\n\t\t\t\"paddingBottom\",\r\n\t\t\t\"paddingLeft\",\r\n\t\t\t\"paddingRight\",\r\n\r\n\t\t\t\"borderLeftWidth\",\r\n\t\t\t\"borderRightWidth\",\r\n\t\t\t\"borderTopWidth\",\r\n\t\t\t\"borderBottomWidth\"\r\n\t\t];\r\n\t\tvar styles = {\r\n\t\t\tboxSizing:(computed.boxSizing == \"border-box\")\r\n\t\t};\r\n\r\n\t\tif(computed.MozBoxSizing){\r\n\t\t\tstyles.boxSizing = (computed.MozBoxSizing == \"border-box\");\r\n\t\t}\r\n\t\tfor(var i =0; i < properties.length; i++){\r\n\t\t\tstyles[properties[i]] = computed[properties[i]] ? this._cleanElSize(computed[properties[i]]) : 0;\r\n\t\t}\r\n\r\n\r\n\t\tvar box = {\r\n\t\t\thorPaddings : (styles.paddingLeft + styles.paddingRight + styles.borderLeftWidth + styles.borderRightWidth),\r\n\t\t\tvertPaddings : (styles.paddingTop + styles.paddingBottom + styles.borderTopWidth + styles.borderBottomWidth),\r\n\t\t\tborderBox: styles.boxSizing,\r\n\t\t\tinnerWidth : styles.width,\r\n\t\t\tinnerHeight : styles.height,\r\n\t\t\touterWidth : styles.width,\r\n\t\t\touterHeight : styles.height\r\n\t\t};\r\n\r\n\r\n\t\tif(box.borderBox){\r\n\t\t\tbox.innerWidth -= box.horPaddings;\r\n\t\t\tbox.innerHeight -= box.vertPaddings;\r\n\t\t}else{\r\n\t\t\tbox.outerWidth += box.horPaddings;\r\n\t\t\tbox.outerHeight += box.vertPaddings;\r\n\t\t}\r\n\r\n\t\treturn box;\r\n\t};\r\n\r\n\tLayout.prototype._getAutosizeMode = function(config){\r\n\t\tvar res = {x:false, y:false};\r\n\t\tif(config === \"xy\"){\r\n\t\t\tres.x = res.y = true;\r\n\t\t}else if(config === \"y\" || config === true){\r\n\t\t\tres.y = true;\r\n\t\t}else if(config === \"x\"){\r\n\t\t\tres.x = true;\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\tLayout.prototype.autosize = function(mode) {\r\n\t\tvar res = this._getAutosizeMode(mode);\r\n\t\tvar boxSizes = this._getBoxStyles(this.$container);\r\n\t\tvar contentSizes = this.getContentSize(mode);\r\n\r\n\t\tvar node = this.$container;\r\n\t\tif(res.x){\r\n\t\t\tif(boxSizes.borderBox){\r\n\t\t\t\tcontentSizes.width += boxSizes.horPaddings;\r\n\t\t\t}\r\n\t\t\tnode.style.width = contentSizes.width + \"px\";\r\n\t\t}\r\n\t\tif(res.y){\r\n\t\t\tif(boxSizes.borderBox){\r\n\t\t\t\tcontentSizes.height += boxSizes.vertPaddings;\r\n\t\t\t}\r\n\t\t\tnode.style.height = contentSizes.height + \"px\";\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.getSize = function () {\r\n\t\tthis._sizes = [];\r\n\t\tvar width = 0;\r\n\t\tvar minWidth = 0;\r\n\t\tvar maxWidth = 100000000000;\r\n\t\tvar height = 0;\r\n\t\tvar maxHeight = 100000000000;\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\r\n\t\t\tvar size = this._sizes[i] = this.$cells[i].getSize();\r\n\t\t\tif (this.$cells[i].$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tif (!size.width && size.minWidth) {\r\n\t\t\t\t\twidth += size.minWidth;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\twidth += size.width;\r\n\t\t\t\t}\r\n\t\t\t\tmaxWidth += size.maxWidth;\r\n\t\t\t\tminWidth += size.minWidth;\r\n\t\t\t\theight = Math.max(height, size.height);\r\n\t\t\t\tmaxHeight = Math.min(maxHeight, size.maxHeight); // min of maxHeight\r\n\t\t\t\tminHeight = Math.max(minHeight, size.minHeight); // max of minHeight\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (!size.height && size.minHeight) {\r\n\t\t\t\t\theight += size.minHeight;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\theight += size.height;\r\n\t\t\t\t}\r\n\t\t\t\tmaxHeight += size.maxHeight;\r\n\t\t\t\tminHeight += size.minHeight;\r\n\t\t\t\twidth = Math.max(width, size.width);\r\n\t\t\t\tmaxWidth = Math.min(maxWidth, size.maxWidth); // min of maxWidth\r\n\t\t\t\tminWidth = Math.max(minWidth, size.minWidth); // max of minWidth\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar self = _super.prototype.getSize.call(this);\r\n\t\t// maxWidth\r\n\t\tif (self.maxWidth >= 100000) {\r\n\t\t\tself.maxWidth = maxWidth;\r\n\t\t}\r\n\t\t// maxHeight\r\n\t\tif (self.maxHeight >= 100000) {\r\n\t\t\tself.maxHeight = maxHeight;\r\n\t\t}\r\n\t\t// minWidth\r\n\t\tself.minWidth = self.minWidth !== self.minWidth ? 0 : self.minWidth;// || self.width || Math.max(minWidth, width);\r\n\t\t// minHeight\r\n\t\tself.minHeight = self.minHeight !== self.minHeight ? 0 : self.minHeight;//self.minHeight || self.height || Math.max(minHeight, height);\r\n\t\t// sizes with paddings and margins\r\n\t\tif (this._xLayout) {\r\n\t\t\tself.minWidth += this.$config.margin * (this.$cells.length) || 0;\r\n\t\t\tself.minWidth += this.$config.padding * 2 || 0;\r\n\t\t\tself.minHeight += (this.$config.padding * 2) || 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tself.minHeight += this.$config.margin * (this.$cells.length) || 0;\r\n\t\t\tself.minHeight += (this.$config.padding * 2) || 0;\r\n\t\t}\r\n\t\t\r\n\t\treturn self;\r\n\t};\r\n\t// calc total gravity and free space\r\n\tLayout.prototype._calcFreeSpace = function (s, cell, xLayout) {\r\n\t\tvar min = xLayout ? cell.minWidth : cell.minHeight;\r\n\t\tvar max = xLayout ? cell.maxWidth : cell.maxWidth;\r\n\t\tvar side = s;\r\n\t\tif (!side) {\r\n\t\t\tside = Math.floor(this._free / this._gravity * cell.gravity);\r\n\t\t\tif (side > max) {\r\n\t\t\t\tside = max;\r\n\t\t\t\tthis._free -= side;\r\n\t\t\t\tthis._gravity -= cell.gravity;\r\n\t\t\t}\r\n\t\t\tif (side < min) {\r\n\t\t\t\tside = min;\r\n\t\t\t\tthis._free -= side;\r\n\t\t\t\tthis._gravity -= cell.gravity;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (side > max) {\r\n\t\t\t\tside = max;\r\n\t\t\t}\r\n\t\t\tif (side < min) {\r\n\t\t\t\tside = min;\r\n\t\t\t}\r\n\t\t\tthis._free -= side;\r\n\t\t}\r\n\t\treturn side;\r\n\t};\r\n\tLayout.prototype._calcSize = function (s, size, xLayout) {\r\n\t\tvar side = s;\r\n\t\tvar min = xLayout ? size.minWidth : size.minHeight;\r\n\t\tvar max = xLayout ? size.maxWidth : size.maxHeight;\r\n\t\tif (!side) {\r\n\t\t\tside = Math.floor(this._free / this._gravity * size.gravity);\r\n\t\t}\r\n\t\tif (side > max) {\r\n\t\t\tside = max;\r\n\t\t}\r\n\t\tif (side < min) {\r\n\t\t\tside = min;\r\n\t\t}\r\n\t\treturn side;\r\n\t};\r\n\r\n\tLayout.prototype._configureBorders = function(){\r\n\t\tif(this.$root){\r\n\t\t\tthis._setBorders([\r\n\t\t\t\tthis._borders.left,\r\n\t\t\t\tthis._borders.top,\r\n\t\t\t\tthis._borders.right,\r\n\t\t\t\tthis._borders.bottom\r\n\t\t\t],\r\n\t\t\tthis);\r\n\t\t}\r\n\r\n\t\tvar borderClass = this._xLayout ? this._borders.right : this._borders.bottom;\r\n\r\n\t\tvar cells = this.$cells;\r\n\r\n\t\tvar lastVisibleIndex = cells.length - 1;\r\n\t\tfor(var i = lastVisibleIndex; i >= 0; i--){\r\n\t\t\tif (!cells[i].$config.hidden) {\r\n\t\t\t\tlastVisibleIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < cells.length; i++) {\r\n\t\t\tif (cells[i].$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tvar lastCell = i >= lastVisibleIndex;\r\n\t\t\tvar borderColorClass = \"\";\r\n\t\t\tif(!lastCell && cells[i + 1]){\r\n\t\t\t\tif(cells[i + 1].$config.view == \"scrollbar\"){\r\n\t\t\t\t\tif(this._xLayout){\r\n\t\t\t\t\t\tlastCell = true;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tborderColorClass = \"gantt_layout_cell_border_transparent\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setBorders(lastCell ? [] : [borderClass, borderColorClass], cells[i]);\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype._updateCellVisibility = function(){\r\n\t\tvar oldVisibleCells = this._visibleCells || {};\r\n\t\tvar firstCall = !this._visibleCells;\r\n\t\tvar visibleCells = {};\r\n\t\tvar cell = null;\r\n\t\tvar parentVisibility = [];\r\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\t\t\tif (cell.$config.hide_empty){\r\n\t\t\t\tparentVisibility.push(cell);\r\n\t\t\t}\r\n\r\n\t\t\tif (!firstCall && cell.$config.hidden && oldVisibleCells[cell.$id]) {\r\n\t\t\t\tcell._hide(true);\r\n\t\t\t}else if(!cell.$config.hidden && !oldVisibleCells[cell.$id]){\r\n\t\t\t\tcell._hide(false);\r\n\t\t\t}\r\n\r\n\t\t\tif(!cell.$config.hidden){\r\n\t\t\t\tvisibleCells[cell.$id] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._visibleCells = visibleCells;\r\n\r\n\t\t// GS-27. A way to hide the whole cell if all its children are hidden\r\n\t\tfor (var i = 0; i < parentVisibility.length; i++) {\r\n\t\t\tvar cell = parentVisibility[i];\r\n\t\t\tvar children = cell.$cells;\r\n\t\t\tvar hideCell = true;\r\n\t\t\tchildren.forEach(function(child){\r\n\t\t\t\tif (!child.$config.hidden && !child.$config.resizer){\r\n\t\t\t\t\thideCell = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tcell.$config.hidden = hideCell;\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.setSize = function (x, y) {\r\n\t\tthis._configureBorders();\r\n\t\t_super.prototype.setSize.call(this, x, y);\r\n\t\ty = this.$lastSize.contentY;\r\n\t\tx = this.$lastSize.contentX;\r\n\r\n\t\tvar padding = (this.$config.padding || 0);\r\n\t\tthis.$view.style.padding = padding + \"px\";\r\n\t\tthis._gravity = 0;\r\n\t\tthis._free = this._xLayout ? x : y;\r\n\t\tthis._free -= padding * 2;\r\n\t\t// calc all gravity\r\n\r\n\t\tvar cell,\r\n\t\t\tsize;\r\n\r\n\t\tthis._updateCellVisibility();\r\n\r\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\r\n\t\t\tif (cell.$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tvar margin = (this.$config.margin || 0);\r\n\t\t\tif(cell.$name == \"resizer\" && !margin){\r\n\t\t\t\tmargin = -1;\r\n\t\t\t}\r\n\r\n\t\t\t// set margins to child cell\r\n\t\t\tvar cellView = cell.$view;\r\n\r\n\t\t\tvar marginSide = this._xLayout ? \"marginRight\" : \"marginBottom\";\r\n\t\t\tif (i !== this.$cells.length - 1) {\r\n\t\t\t\tcellView.style[marginSide] = margin + \"px\";\r\n\t\t\t\tthis._free -= margin; // calc free space without margin\r\n\t\t\t}\r\n\t\t\tsize = this._sizes[i];\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tif (!size.width) {\r\n\t\t\t\t\tthis._gravity += size.gravity;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (!size.height) {\r\n\t\t\t\t\tthis._gravity += size.gravity;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\r\n\t\t\tif (cell.$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tsize = this._sizes[i];\r\n\t\t\tvar width = size.width;\r\n\t\t\tvar height = size.height;\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tthis._calcFreeSpace(width, size, true);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._calcFreeSpace(height, size, false);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\r\n\t\t\tif (cell.$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tsize = this._sizes[i];\r\n\t\t\tvar dx = void 0;\r\n\t\t\tvar dy = void 0;\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tdx = this._calcSize(size.width, size, true);\r\n\t\t\t\tdy = y - padding * 2; // layout height without paddings\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = x - padding * 2; // layout width without paddings\r\n\t\t\t\tdy = this._calcSize(size.height, size, false);\r\n\t\t\t}\r\n\r\n\t\t\tcell.setSize(dx, dy);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\treturn Layout;\r\n}(Cell));\r\n\r\nexport default Layout;","import __extends from \"../../../utils/extends\";\r\nimport Layout from \"./layout\";\r\nimport Cell from \"./cell\";\r\n\r\nvar ViewLayout = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\t__extends(ViewLayout, _super);\r\n\tfunction ViewLayout(parent, config, factory) {\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\t\tfor (var i = 0; i < _this.$cells.length; i++) {\r\n\t\t\t_this.$cells[i].$config.hidden = (i !== 0);\r\n\t\t}\r\n\t\t_this.$cell = _this.$cells[0];\r\n\t\t_this.$name = \"viewLayout\";\r\n\r\n\t\treturn _this;\r\n\t}\r\n\tViewLayout.prototype.cell = function (id) {\r\n\t\tvar cell = _super.prototype.cell.call(this, id);\r\n\t\tif (!cell.$view) {\r\n\t\t\tthis.$fill(null, this);\r\n\t\t}\r\n\t\treturn cell;\r\n\t};\r\n\tViewLayout.prototype.moveView = function (view) {\r\n\t\tvar body = this.$view;\r\n\t\tif (this.$cell) {\r\n\t\t\tthis.$cell.$config.hidden = true;\r\n\t\t\tbody.removeChild(this.$cell.$view);\r\n\t\t}\r\n\t\tthis.$cell = view;\r\n\t\tbody.appendChild(view.$view);\r\n\t};\r\n\tViewLayout.prototype.setSize = function (x, y) {\r\n\t\tCell.prototype.setSize.call(this, x, y);\r\n\t};\r\n\r\n\tViewLayout.prototype.setContentSize = function(){\r\n\t\tvar size = this.$lastSize;\r\n\t\tthis.$cell.setSize(size.contentX, size.contentY);\r\n\t};\r\n\r\n\tViewLayout.prototype.getSize = function () {\r\n\t\tvar sizes = _super.prototype.getSize.call(this);\r\n\t\tif (this.$cell) {\r\n\t\t\tvar cellSize = this.$cell.getSize();\r\n\t\t\tif (this.$config.byMaxSize) {\r\n\t\t\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\t\t\tvar otherCell = this.$cells[i].getSize();\r\n\t\t\t\t\tfor (var cell in cellSize) {\r\n\t\t\t\t\t\tcellSize[cell] = Math.max(cellSize[cell], otherCell[cell]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor (var size in sizes) {\r\n\t\t\t\tsizes[size] = sizes[size] || cellSize[size];\r\n\t\t\t}\r\n\t\t\tsizes.gravity = Math.max(sizes.gravity, cellSize.gravity);\r\n\t\t}\r\n\t\treturn sizes;\r\n\t};\r\n\treturn ViewLayout;\r\n}(Layout));\r\n\r\nexport default ViewLayout;","import __extends from \"../../../utils/extends\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport Cell from \"./cell\";\r\n\r\nvar ViewCell = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\t__extends(ViewCell, _super);\r\n\tfunction ViewCell(parent, config, factory) {\r\n\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\r\n\t\tif(config.view){\r\n\t\t\tif(config.id){\r\n\t\t\t\t// pass id to the nested view\r\n\t\t\t\tthis.$id = utils.uid();\r\n\t\t\t}\r\n\t\t\tvar childConfig = utils.copy(config);\r\n\t\t\tdelete childConfig.config;\r\n\t\t\tdelete childConfig.templates;\r\n\r\n\t\t\tthis.$content = this.$factory.createView(config.view, this, childConfig, this);\r\n\t\t\tif(!this.$content)\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t_this.$name = \"viewCell\";\r\n\t\treturn _this;\r\n\t}\r\n\r\n\tViewCell.prototype.destructor = function(){\r\n\t\tthis.clear();\r\n\t\t_super.prototype.destructor.call(this);\r\n\t};\r\n\r\n\tViewCell.prototype.clear = function(){\r\n\r\n\t\tthis.$initialized = false;\r\n\r\n\t\t// call destructor\r\n\t\tif (this.$content){\r\n\t\t\tvar method = this.$content.unload || this.$content.destructor;\r\n\t\t\tif (method){\r\n\t\t\t\tmethod.call(this.$content);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t_super.prototype.clear.call(this);\r\n\r\n\t};\r\n\r\n\tViewCell.prototype.scrollTo = function(left, top){\r\n\r\n\t\tif(this.$content && this.$content.scrollTo){\r\n\t\t\tthis.$content.scrollTo(left, top);\r\n\t\t}else{\r\n\t\t\t_super.prototype.scrollTo.call(this, left, top);\r\n\t\t}\r\n\t};\r\n\r\n\tViewCell.prototype._setContentSize = function(x, y){\r\n\t\tvar borders = this._getBorderSizes();\r\n\t\tif(typeof x === \"number\"){\r\n\t\t\tvar outerX = x + borders.horizontal;\r\n\t\t\tthis.$config.width = outerX;\r\n\t\t}\r\n\t\tif(typeof y === \"number\"){\r\n\t\t\tvar outerY = y + borders.vertical;\r\n\t\t\tthis.$config.height = outerY;\r\n\t\t}\r\n\t};\r\n\r\n\tViewCell.prototype.setSize = function(x, y){\r\n\t\t_super.prototype.setSize.call(this, x, y);\r\n\r\n\t\tif(!this.$preResize && this.$content) {\r\n\t\t\tif (!this.$initialized) {\r\n\t\t\t\tthis.$initialized = true;\r\n\t\t\t\tvar header = this.$view.childNodes[0];\r\n\t\t\t\tvar content = this.$view.childNodes[1];\r\n\t\t\t\tif(!content) content = header;\r\n\r\n\t\t\t\t/*if(this.$content.$config){\r\n\t\t\t\t\tthis.$content.$config.width = this.$lastSize.contentX;\r\n\t\t\t\t\tthis.$content.$config.height = this.$lastSize.contentY;\r\n\t\t\t\t}*/\r\n\t\t\t\tthis.$content.init(content);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tViewCell.prototype.setContentSize = function(){\r\n\t\tif(!this.$preResize && this.$content) {\r\n\t\t\tif (this.$initialized) {\r\n\t\t\t\tthis.$content.setSize(this.$lastSize.contentX, this.$lastSize.contentY);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tViewCell.prototype.getContentSize = function(){\r\n\t\tvar size = _super.prototype.getContentSize.call(this);\r\n\r\n\t\tif(this.$content && this.$initialized){\r\n\t\t\tvar childSize = this.$content.getSize();\r\n\t\t\tsize.width = childSize.contentX === undefined ? childSize.width : childSize.contentX;\r\n\t\t\tsize.height = childSize.contentY === undefined ? childSize.height : childSize.contentY;\r\n\t\t}\r\n\r\n\t\tvar borders = this._getBorderSizes();\r\n\t\tsize.width += borders.horizontal;\r\n\t\tsize.height += borders.vertical;\r\n\r\n\t\treturn size;\r\n\t};\r\n\r\n\treturn ViewCell;\r\n}(Cell));\r\n\r\nexport default ViewCell;","import __extends from \"../../../utils/extends\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport env from \"../../../utils/env\";\r\nimport Cell from \"./cell\";\r\n\r\nvar ScrollbarCell = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\tvar SCROLL_MODIFIER_KEYS = [\"altKey\", \"shiftKey\", \"metaKey\"]; // it's no way to disable ctrl+wheel\r\n\t__extends(ScrollbarCell, _super);\r\n\tfunction ScrollbarCell(parent, config, factory, gantt) {\r\n\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\t\tthis.$config = utils.mixin(config, {scroll: \"x\"});\r\n\t\t_this._scrollHorizontalHandler = utils.bind(_this._scrollHorizontalHandler, _this);\r\n\t\t_this._scrollVerticalHandler = utils.bind(_this._scrollVerticalHandler, _this);\r\n\t\t_this._outerScrollVerticalHandler = utils.bind(_this._outerScrollVerticalHandler, _this);\r\n\t\t_this._outerScrollHorizontalHandler = utils.bind(_this._outerScrollHorizontalHandler, _this);\r\n\t\t_this._mouseWheelHandler = utils.bind(_this._mouseWheelHandler, _this);\r\n\r\n\t\tthis.$config.hidden = true;\r\n\t\tvar size = gantt.config.scroll_size;\r\n\r\n\t\tif(gantt.env.isIE){\r\n\t\t\t// full element height/width must be bigger than just a browser scrollbar,\r\n\t\t\t// otherwise the scrollbar element won't be scrolled on click\r\n\t\t\tsize += 1;\r\n\t\t}\r\n\r\n\t\tif(this._isHorizontal()){\r\n\t\t\t_this.$config.height = size;\r\n\t\t\t_this.$parent.$config.height = size;\r\n\t\t}else{\r\n\t\t\t_this.$config.width = size;\r\n\t\t\t_this.$parent.$config.width = size;\r\n\t\t}\r\n\r\n\t\tthis.$config.scrollPosition = 0;\r\n\r\n\t\t_this.$name = \"scroller\";\r\n\t\treturn _this;\r\n\t}\r\n\r\n\tScrollbarCell.prototype.init = function(container){\r\n\t\tcontainer.innerHTML = this.$toHTML();\r\n\t\tthis.$view = container.firstChild;\r\n\r\n\t\tif(!this.$view){\r\n\t\t\tthis.init();\r\n\t\t}\r\n\t\tif(this._isVertical()){\r\n\t\t\tthis._initVertical();\r\n\t\t}else{\r\n\t\t\tthis._initHorizontal();\r\n\t\t}\r\n\t\tthis._initMouseWheel();\r\n\t\tthis._initLinkedViews();\r\n\t};\r\n\r\n\tScrollbarCell.prototype.$toHTML = function () {\r\n\t\tvar className = this._isHorizontal() ? \"gantt_hor_scroll\" : \"gantt_ver_scroll\";\r\n\t\treturn \"\";\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getRootParent = function(){\r\n\t\tvar parent = this.$parent;\r\n\t\twhile(parent && parent.$parent){\r\n\t\t\tparent = parent.$parent;\r\n\t\t}\r\n\t\tif(parent){\r\n\t\t\treturn parent;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tfunction eachCell(root, res){\r\n\t\tres.push(root);\r\n\t\tif(root.$cells){\r\n\t\t\tfor(var i = 0; i < root.$cells.length; i++){\r\n\t\t\t\teachCell(root.$cells[i], res);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tScrollbarCell.prototype._eachView = function(){\r\n\t\tvar res = [];\r\n\t\teachCell(this._getRootParent(), res);\r\n\t\treturn res;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getLinkedViews = function(){\r\n\t\tvar views = this._eachView();\r\n\t\tvar res = [];\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\tif(views[i].$config && ((this._isVertical() && views[i].$config.scrollY == this.$id) || (this._isHorizontal() && views[i].$config.scrollX == this.$id)) ){\r\n\t\t\t\tres.push(views[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\r\n\tScrollbarCell.prototype._initHorizontal = function(){\r\n\t\tthis.$scroll_hor = this.$view;\r\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollHorizontalHandler);\r\n\r\n\t};\r\n\r\n\tScrollbarCell.prototype._initLinkedViews = function(){\r\n\t\tvar views = this._getLinkedViews();\r\n\t\tvar css = this._isVertical() ?\"gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical\" : \"gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal\";\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\t//views[i].$config.css = [views[i].$config.css || \"\", css].join(\" \");\r\n\t\t\tdomHelpers.addClassName(views[i].$view || views[i].getNode(), css);\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype._initVertical = function(){\r\n\t\tthis.$scroll_ver = this.$view;\r\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollVerticalHandler);\r\n\t};\r\n\r\n\tScrollbarCell.prototype._updateLinkedViews = function(){\r\n\t};\r\n\r\n\tScrollbarCell.prototype._initMouseWheel = function(){\r\n\t\tvar ff = env.isFF;\r\n\t\tif (ff)\r\n\t\t\tthis.$domEvents.attach(this._getRootParent().$view, \"wheel\", this._mouseWheelHandler, {passive: false});\r\n\t\telse\r\n\t\t\tthis.$domEvents.attach(this._getRootParent().$view, \"mousewheel\", this._mouseWheelHandler, {passive: false});\r\n\t};\r\n\r\n\r\n\r\n\r\n\tScrollbarCell.prototype.scrollHorizontally = function(left){\r\n\t\tif(this._scrolling) return;\r\n\t\tthis._scrolling = true;\r\n\r\n\t\tthis.$scroll_hor.scrollLeft = left;\r\n\t\tthis.$config.codeScrollLeft = left;\r\n\t\tleft = this.$scroll_hor.scrollLeft;\r\n\r\n\t\tvar views = this._getLinkedViews();\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\tif(views[i].scrollTo){\r\n\t\t\t\tviews[i].scrollTo(left, undefined);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar oldSize = this.$config.scrollPosition;\r\n\t\tthis.$config.scrollPosition = left;\r\n\t\tthis.callEvent(\"onScroll\", [oldSize, left, this.$config.scroll]);\r\n\t\tthis._scrolling = false;\r\n\t};\r\n\tScrollbarCell.prototype.scrollVertically = function(top){\r\n\t\tif(this._scrolling) return;\r\n\t\tthis._scrolling = true;\r\n\r\n\t\tthis.$scroll_ver.scrollTop = top;\r\n\t\ttop = this.$scroll_ver.scrollTop;\r\n\r\n\t\tvar views = this._getLinkedViews();\r\n\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\tif(views[i].scrollTo){\r\n\t\t\t\tviews[i].scrollTo(undefined, top);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar oldSize = this.$config.scrollPosition;\r\n\t\tthis.$config.scrollPosition = top;\r\n\t\tthis.callEvent(\"onScroll\", [oldSize, top, this.$config.scroll]);\r\n\t\tthis._scrolling = false;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._isVertical = function(){\r\n\t\treturn this.$config.scroll == \"y\";\r\n\t};\r\n\tScrollbarCell.prototype._isHorizontal = function(){\r\n\t\treturn this.$config.scroll == \"x\";\r\n\t};\r\n\tScrollbarCell.prototype._scrollHorizontalHandler = function (e) {\r\n\t\tif(this._isVertical() || this._scrolling){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//in safari we can catch previous onscroll after setting new value from mouse-wheel event\r\n\t\t//set delay to prevent value drifiting\r\n\t\tif ((new Date()) - ( this._wheel_time || 0 ) < 100) return true;\r\n\t\t//if (this.$gantt._touch_scroll_active) return;\r\n\t\tvar left = this.$scroll_hor.scrollLeft;\r\n\r\n\t\tthis.scrollHorizontally(left);\r\n\r\n\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\r\n\t};\r\n\tScrollbarCell.prototype._outerScrollHorizontalHandler = function(e){\r\n\t\tif(this._isVertical()){\r\n\t\t\treturn;\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype.show = function(){\r\n\t\tthis.$parent.show();\r\n\t};\r\n\tScrollbarCell.prototype.hide = function(){\r\n\t\tthis.$parent.hide();\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getScrollSize = function(){\r\n\t\tvar scrollSize = 0;\r\n\t\tvar outerSize = 0;\r\n\t\tvar isHorizontal = this._isHorizontal();\r\n\r\n\t\tvar linked = this._getLinkedViews();\r\n\t\tvar view;\r\n\t\tvar scrollProperty = isHorizontal ? \"scrollWidth\" : \"scrollHeight\",\r\n\t\t\tinnerSizeProperty = isHorizontal ? \"contentX\" : \"contentY\";\r\n\t\tvar outerProperty = isHorizontal ? \"x\" : \"y\";\r\n\t\tvar offset = this._getScrollOffset();\r\n\r\n\t\tfor(var i = 0; i < linked.length; i++){\r\n\t\t\tview = linked[i];\r\n\t\t\tif(!(view && view.$content && view.$content.getSize && !view.$config.hidden)) continue;\r\n\r\n\t\t\tvar sizes = view.$content.getSize();\r\n\t\t\tvar cellScrollSize;\r\n\t\t\tif(sizes.hasOwnProperty(scrollProperty)){\r\n\t\t\t\tcellScrollSize = sizes[scrollProperty];\r\n\t\t\t}else{\r\n\t\t\t\tcellScrollSize = sizes[innerSizeProperty];\r\n\t\t\t}\r\n\r\n\t\t\tif(offset){\r\n\t\t\t\t// precalculated vertical/horizontal offsets of scrollbar to emulate 4.x look\r\n\t\t\t\tif(sizes[innerSizeProperty] > sizes[outerProperty] && sizes[innerSizeProperty] > scrollSize && (cellScrollSize > (sizes[outerProperty] - offset + 2))){\r\n\t\t\t\t\tscrollSize = cellScrollSize + (isHorizontal ? 0 : 2);\r\n\t\t\t\t\touterSize = sizes[outerProperty];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar nonScrollableSize = Math.max(sizes[innerSizeProperty] - cellScrollSize, 0);\r\n\t\t\t\tvar scrollableViewPortSize = Math.max(sizes[outerProperty] - nonScrollableSize, 0);\r\n\t\t\t\tcellScrollSize = cellScrollSize + nonScrollableSize;\r\n\r\n\t\t\t\tif(cellScrollSize > scrollableViewPortSize && (cellScrollSize > scrollSize) ){\r\n\t\t\t\t\t//|| (cellScrollSize === scrollSize && sizes[outerProperty] < outerSize) // same scroll width but smaller scrollable view port\r\n\r\n\t\t\t\t\tscrollSize = cellScrollSize;\r\n\t\t\t\t\touterSize = sizes[outerProperty];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\touterScroll: outerSize,\r\n\t\t\tinnerScroll: scrollSize\r\n\t\t};\r\n\t};\r\n\r\n\tScrollbarCell.prototype.scroll = function(position){\r\n\t\tif(this._isHorizontal()){\r\n\t\t\tthis.scrollHorizontally(position);\r\n\t\t}else{\r\n\t\t\tthis.scrollVertically(position);\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype.getScrollState = function(){\r\n\t\treturn {\r\n\t\t\tvisible: this.isVisible(),\r\n\t\t\tdirection: this.$config.scroll,\r\n\t\t\tsize: this.$config.outerSize,\r\n\t\t\tscrollSize: this.$config.scrollSize || 0,\r\n\t\t\tposition: this.$config.scrollPosition || 0\r\n\t\t};\r\n\t};\r\n\r\n\tScrollbarCell.prototype.setSize = function(width, height){\r\n\t\t_super.prototype.setSize.apply(this, arguments);\r\n\r\n\t\tvar scrollSizes = this._getScrollSize();\r\n\r\n\t\tvar ownSize = (this._isVertical() ? height : width) - this._getScrollOffset() + (this._isHorizontal() ? 1 : 0);\r\n\r\n\t\tif(scrollSizes.innerScroll && ownSize > scrollSizes.outerScroll){\r\n\t\t\tscrollSizes.innerScroll += (ownSize - scrollSizes.outerScroll);\r\n\t\t}\r\n\t\tthis.$config.scrollSize = scrollSizes.innerScroll;\r\n\r\n\t\tthis.$config.width = width;\r\n\t\tthis.$config.height = height;\r\n\t\tthis._setScrollSize(scrollSizes.innerScroll);\r\n\t};\r\n\r\n\tScrollbarCell.prototype.isVisible = function(){\r\n\t\treturn !!(this.$parent && this.$parent.$view.parentNode);\r\n\t};\r\n\r\n\tScrollbarCell.prototype.shouldShow = function(){\r\n\t\tvar scrollSizes = this._getScrollSize();\r\n\t\tif(!scrollSizes.innerScroll && (this.$parent && this.$parent.$view.parentNode)){\r\n\t\t\treturn false;\r\n\t\t}else if(scrollSizes.innerScroll && !(this.$parent && this.$parent.$view.parentNode)){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype.shouldHide = function(){\r\n\t\tvar scrollSizes = this._getScrollSize();\r\n\t\tif(!scrollSizes.innerScroll && (this.$parent && this.$parent.$view.parentNode)){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tScrollbarCell.prototype.toggleVisibility = function(){\r\n\t\tif(this.shouldHide()){\r\n\t\t\tthis.hide();\r\n\t\t}else if(this.shouldShow()){\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getScaleOffset = function(view){\r\n\t\tvar offset = 0;\r\n\t\tif(view && (view.$config.view == \"timeline\" || view.$config.view == \"grid\")){\r\n\t\t\toffset = view.$content.$getConfig().scale_height;\r\n\t\t}\r\n\t\treturn offset;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getScrollOffset = function(){\r\n\t\tvar offset = 0;\r\n\t\tif(this._isVertical()){\r\n\t\t\tvar parentLayout = this.$parent.$parent;\r\n\t\t\toffset = Math.max(\r\n\t\t\t\tthis._getScaleOffset(parentLayout.getPrevSibling(this.$parent.$id)),\r\n\t\t\t\tthis._getScaleOffset(parentLayout.getNextSibling(this.$parent.$id))\r\n\t\t\t\t);\r\n\t\t}else{\r\n\t\t\tvar linked = this._getLinkedViews();\r\n\r\n\t\t\tfor (var i = 0; i < linked.length; i++) {\r\n\t\t\t\tvar view = linked[i],\r\n\t\t\t\t\tvparent = view.$parent;\r\n\t\t\t\tvar cells = vparent.$cells;\r\n\r\n\t\t\t\tvar last = cells[cells.length - 1];\r\n\r\n\t\t\t\tif (last && last.$config.view == \"scrollbar\" && last.$config.hidden === false) {\r\n\t\t\t\t\toffset = last.$config.width;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn offset || 0;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._setScrollSize = function(size){\r\n\t\tvar property = this._isHorizontal() ? \"width\" : \"height\";\r\n\t\tvar scrollbar = this._isHorizontal() ? this.$scroll_hor : this.$scroll_ver;\r\n\r\n\t\tvar offset = this._getScrollOffset();\r\n\r\n\t\tvar node = scrollbar.firstChild;\r\n\r\n\t\tif(offset){\r\n\t\t\tif(this._isVertical()){\r\n\r\n\t\t\t\tthis.$config.outerSize = (this.$config.height - offset + 3);\r\n\t\t\t\tscrollbar.style.height = this.$config.outerSize + \"px\";\r\n\t\t\t\tscrollbar.style.top = (offset-1) + \"px\";\r\n\t\t\t\tdomHelpers.addClassName(scrollbar, this.$parent._borders.top);\r\n\t\t\t\tdomHelpers.addClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\r\n\t\t\t}else{\r\n\t\t\t\tthis.$config.outerSize = (this.$config.width - offset + 1);\r\n\t\t\t\tscrollbar.style.width = this.$config.outerSize + \"px\";\r\n\t\t\t\t//domHelpers.addClassName(scrollbar, this.$parent._borders.right);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tscrollbar.style.top = \"auto\";\r\n\t\t\tdomHelpers.removeClassName(scrollbar, this.$parent._borders.top);\r\n\t\t\tdomHelpers.removeClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\r\n\t\t\tthis.$config.outerSize = this.$config.height;\r\n\t\t}\r\n\r\n\t\tnode.style[property] = size + \"px\";\r\n\t};\r\n\r\n\tScrollbarCell.prototype._scrollVerticalHandler = function (e) {\r\n\t\tif(this._scrollHorizontalHandler() || this._scrolling){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//if (this.$gantt._touch_scroll_active) return;\r\n\t\tvar top = this.$scroll_ver.scrollTop;\r\n\t\tvar prev = this._oldTop;\r\n\t\tif(top == prev) return;\r\n\r\n\t\tthis.scrollVertically(top);\r\n\r\n\t\tthis._oldTop = this.$scroll_ver.scrollTop;\r\n\r\n\t};\r\n\tScrollbarCell.prototype._outerScrollVerticalHandler = function(e){\r\n\t\tif(this._scrollHorizontalHandler()){\r\n\t\t\treturn;\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype._checkWheelTarget = function(targetNode){\r\n\t\tvar connectedViews = this._getLinkedViews().concat(this);\r\n\r\n\t\tfor(var i = 0; i < connectedViews.length; i++){\r\n\t\t\tvar node = connectedViews[i].$view;\r\n\t\t\tif(domHelpers.isChildOf(targetNode, node)){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._mouseWheelHandler = function(e){\r\n\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\tif(!this._checkWheelTarget(target))\r\n\t\t\treturn;\r\n\r\n\t\tthis._wheel_time = new Date();\r\n\r\n\t\tvar res = {};\r\n\r\n\t\tvar wheelSpeed = {x: 1, y: 1};\r\n\t\tvar wheelSpeedConfig = this.$gantt.config.wheel_scroll_sensitivity;\r\n\r\n\t\tif (typeof wheelSpeedConfig == \"number\" && !!wheelSpeedConfig) {\r\n\t\t\twheelSpeed = {x: wheelSpeedConfig, y: wheelSpeedConfig};\r\n\t\t}\r\n\t\telse if (({}).toString.apply(wheelSpeedConfig) == \"[object Object]\") {\r\n\t\t\twheelSpeed = {x: wheelSpeedConfig.x, y: wheelSpeedConfig.y};\r\n\t\t}\r\n\r\n\t\tvar ff = env.isFF;\r\n\t\tvar deltaX = ff ? (e.deltaX) : e.wheelDeltaX;\r\n\t\tvar deltaY = ff ? (e.deltaY) : e.wheelDelta;\r\n\r\n\t\tvar multiplier = -20;\r\n\t\tif (ff) {\r\n\t\t\tif (e.deltaMode !== 0) {\r\n\t\t\t\tmultiplier = -40;\r\n\t\t\t} else {\r\n\t\t\t\tmultiplier = -10;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar wx = ff ? (deltaX * multiplier * wheelSpeed.x) : deltaX * 2 * wheelSpeed.x;\r\n\t\tvar wy = ff ? (deltaY * multiplier * wheelSpeed.y) : deltaY * wheelSpeed.y;\r\n\r\n\t\tvar horizontalScrollModifier = this.$gantt.config.horizontal_scroll_key;\r\n\r\n\t\tif (horizontalScrollModifier !== false) {\r\n\t\t\tif (SCROLL_MODIFIER_KEYS.indexOf(horizontalScrollModifier) >= 0) {\r\n\t\t\t\tif(e[horizontalScrollModifier] && !(e.deltaX || e.wheelDeltaX)){\r\n\t\t\t\t\t// shift+mousewheel for horizontal scroll\r\n\t\t\t\t\twx = wy*2;\r\n\t\t\t\t\twy = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (wx && Math.abs(wx) > Math.abs(wy)){\r\n\t\t\tif(this._isVertical()){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(res.x) return true;//no horisontal scroll, must not block scrolling\r\n\t\t\tif(!this.$scroll_hor || !this.$scroll_hor.offsetWidth) return true;\r\n\r\n\t\t\tvar dir = wx/-40;\r\n\t\t\tvar oldLeft = this._oldLeft;\r\n\t\t\tvar left = oldLeft+dir*30;\r\n\t\t\tthis.scrollHorizontally(left);\r\n\t\t\tthis.$scroll_hor.scrollLeft = left;\r\n\t\t\t// not block scroll if position hasn't changed\r\n\t\t\tif(oldLeft == this.$scroll_hor.scrollLeft){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\r\n\t\t} else {\r\n\t\t\tif(this._isHorizontal()){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(res.y) return true;//no vertical scroll, must not block scrolling\r\n\t\t\tif(!this.$scroll_ver || !this.$scroll_ver.offsetHeight) return true;\r\n\r\n\t\t\tvar dir = wy/-40;\r\n\t\t\tif (typeof wy == \"undefined\")\r\n\t\t\t\tdir = e.detail;\r\n\r\n\t\t\tvar oldTop = this._oldTop;\r\n\t\t\tvar top = this.$scroll_ver.scrollTop+dir*30;\r\n\r\n\t\t\t//if(!this.$gantt.config.prevent_default_scroll &&\r\n\t\t\t//\t(this.$gantt._cached_scroll_pos && ((this.$gantt._cached_scroll_pos.y == top) || (this.$gantt._cached_scroll_pos.y <= 0 && top <= 0)))) return true;\r\n\r\n\r\n\t\t\tthis.scrollVertically(top);\r\n\t\t\tthis.$scroll_ver.scrollTop = top;\r\n\r\n\t\t\t// not block scroll if position hasn't changed\r\n\t\t\tif(oldTop == this.$scroll_ver.scrollTop){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tthis._oldTop = this.$scroll_ver.scrollTop;\r\n\t\t}\r\n\r\n\t\tif (e.preventDefault)\r\n\t\t\te.preventDefault();\r\n\t\te.cancelBubble=true;\r\n\t\treturn false;\r\n\t};\r\n\r\n\treturn ScrollbarCell;\r\n})(Cell);\r\n\r\nexport default ScrollbarCell;","import quickPositionHelperFactory from \"./row_position_fixed_height\";\r\n\r\nfunction createMixin(view){\r\n\tvar getItemTopCache = {};\r\n\tvar getRowTopCache = {};\r\n\tvar getItemHeightCache = null;\r\n\tvar totalHeightCache = -1;\r\n\tvar getItemHeightCacheState = null;\r\n\r\n\tvar quickPosition = quickPositionHelperFactory(view);\r\n\r\n\treturn {\r\n\t\t_resetTopPositionHeight: function(){\r\n\t\t\tgetItemTopCache = {};\r\n\t\t\tgetRowTopCache = {};\r\n\t\t\tquickPosition.resetCache();\r\n\t\t},\r\n\t\t_resetHeight: function(){\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tvar newState = this.getCacheStateTotalHeight(store);\r\n\t\t\tif(!getItemHeightCacheState){\r\n\t\t\t\tgetItemHeightCacheState = newState;\r\n\t\t\t}else if(this.shouldClearHeightCache(getItemHeightCacheState, newState)){\r\n\t\t\t\tgetItemHeightCacheState = newState;\r\n\t\t\t\tgetItemHeightCache = null;\r\n\t\t\t}\r\n\r\n\t\t\ttotalHeightCache = -1;\r\n\t\t\tquickPosition.resetCache();\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get top coordinate by row index (order)\r\n\t\t * @param {number} index\r\n\t\t */\r\n\t\tgetRowTop: function(index){\r\n\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\treturn quickPosition.getRowTop(index);\r\n\t\t\t}\r\n\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tif(!store){\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tif(getRowTopCache[index] !== undefined){\r\n\t\t\t\treturn getRowTopCache[index];\r\n\t\t\t}else {\r\n\t\t\t\tvar all = store.getIndexRange();\r\n\t\t\t\tvar top = 0;\r\n\t\t\t\tvar result = 0;\r\n\t\t\t\tfor(var i = 0; i < all.length; i++){\r\n\t\t\t\t\tgetRowTopCache[i] = top;\r\n\t\t\t\t\ttop += this.getItemHeight(all[i].id);\r\n\t\t\t\t\tif(i < index){\r\n\t\t\t\t\t\tresult = top;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get top coordinate by item id\r\n\t\t * @param {*} task_id\r\n\t\t */\r\n\t\tgetItemTop: function (taskId) {\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tif(getItemTopCache[taskId] !== undefined){\r\n\t\t\t\t\treturn getItemTopCache[taskId];\r\n\t\t\t\t}\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tif(!store) return 0;\r\n\r\n\t\t\t\tvar itemIndex = store.getIndexById(taskId);\r\n\r\n\t\t\t\tif (itemIndex === -1 && store.getParent && store.exists(taskId)) {\r\n\t\t\t\t\tvar parentId = store.getParent(taskId);\r\n\t\t\t\t\tif (store.exists(parentId)) {\r\n\t\t\t\t\t\t// if task is not found in list - maybe it's parent is a split task and we should use parents index instead\r\n\t\t\t\t\t\tvar parent = store.getItem(parentId);\r\n\t\t\t\t\t\tif (this.$gantt.isSplitTask(parent)) {\r\n\t\t\t\t\t\t\treturn this.getItemTop(parentId);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tgetItemTopCache[taskId] = this.getRowTop(itemIndex);\r\n\t\t\t\treturn getItemTopCache[taskId];\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get height of the item by item id\r\n\t\t * @param {*} itemId\r\n\t\t */\r\n\t\tgetItemHeight: function (itemId) {\r\n\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\treturn quickPosition.getItemHeight(itemId);\r\n\t\t\t}\r\n\r\n\t\t\tif(!getItemHeightCache && this.$config.rowStore){\r\n\t\t\t\tthis._fillHeightCache(this.$config.rowStore);\r\n\t\t\t}\r\n\r\n\t\t\tif(getItemHeightCache[itemId] !== undefined){\r\n\t\t\t\treturn getItemHeightCache[itemId];\r\n\t\t\t}\r\n\r\n\t\t\tvar defaultHeight = this.$getConfig().row_height;\r\n\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tif(!store) return defaultHeight;\r\n\r\n\t\t\t\tvar item = store.getItem(itemId);\r\n\r\n\t\t\t\treturn getItemHeightCache[itemId] = item && item.row_height || defaultHeight;\r\n\t\t\t}else{\r\n\t\t\t\treturn defaultHeight;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_fillHeightCache: function(store){\r\n\t\t\tif(!store){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tgetItemHeightCache = {};\r\n\t\t\tvar defaultHeight = this.$getConfig().row_height;\r\n\t\t\tstore.eachItem(function(item){\r\n\t\t\t\treturn getItemHeightCache[item.id] = item && item.row_height || defaultHeight;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tgetCacheStateTotalHeight: function(store){\r\n\r\n\t\t\tvar globalHeight = this.$getConfig().row_height;\r\n\t\t\tvar itemHeightCache = {};\r\n\t\t\tvar items = [];\r\n\t\t\tvar sumHeight = 0;\r\n\t\t\tif(store){\r\n\t\t\t\tstore.eachItem(function(item){\r\n\t\t\t\t\titems.push(item);\r\n\t\t\t\t\titemHeightCache[item.id] = item.row_height;\r\n\t\t\t\t\tsumHeight += item.row_height || globalHeight;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\r\n\t\t\treturn {\r\n\t\t\t\tglobalHeight: globalHeight,\r\n\t\t\t\titems: items,\r\n\t\t\t\tcount: items.length,\r\n\t\t\t\tsumHeight: sumHeight\r\n\t\t\t};\r\n\t\t},\r\n\t\tshouldClearHeightCache: function(oldState, newState){\r\n\r\n\t\t\tif(oldState.count != newState.count){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tif(oldState.globalHeight != newState.globalHeight){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif(oldState.sumHeight != newState.sumHeight){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i in oldState.items){\r\n\t\t\t\tvar newValue = newState.items[i];\r\n\t\t\t\tif(newValue !== undefined && newValue != oldState.items[i]){\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\t/**\r\n\t\t * Get total height of items\r\n\t\t */\r\n\t\tgetTotalHeight: function () {\r\n\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\treturn quickPosition.getTotalHeight();\r\n\t\t\t}\r\n\r\n\t\t\tif(totalHeightCache != -1){\r\n\t\t\t\treturn totalHeightCache;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tthis._fillHeightCache(store);\r\n\t\t\t\tvar getHeight = this.getItemHeight.bind(this);\r\n\t\t\t\tvar visibleItems = store.getVisibleItems();\r\n\t\t\t\tvar totalHeight = 0;\r\n\r\n\t\t\t\tvisibleItems.forEach(function(item){\r\n\t\t\t\t\ttotalHeight += getHeight(item.id);\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttotalHeightCache = totalHeight;\r\n\t\t\t\treturn totalHeight;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get item by top position\r\n\t\t * @param {*} top\r\n\t\t */\r\n\t\tgetItemIndexByTopPosition: function (top) {\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\t\treturn quickPosition.getItemIndexByTopPosition(top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tfor(var i = 0; i < store.countVisible(); i++){\r\n\t\t\t\t\tvar current = this.getRowTop(i);\r\n\t\t\t\t\tvar next = this.getRowTop(i+1);\r\n\t\t\t\t\tif(!next){\r\n\t\t\t\t\t\tvar taskId = store.getIdByIndex(i);\r\n\t\t\t\t\t\tnext = current + this.getItemHeight(taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(top >= current && top < next){\r\n\t\t\t\t\t\treturn i;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// GS-1723: If we iterated all tasks and didn't find the position, the target is below all other tasks\r\n\t\t\t\treturn store.countVisible() + 2;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default createMixin;","function createHelper(view){\r\n\tvar cachedRowHeight = -1;\r\n\tvar canUseSimpleCalc = -1;\r\n\treturn {\r\n\t\tresetCache: function(){\r\n\t\t\tcachedRowHeight = -1;\r\n\t\t\tcanUseSimpleCalc = -1;\r\n\t\t},\r\n\t\t_getRowHeight: function(){\r\n\t\t\tif(cachedRowHeight === -1){\r\n\t\t\t\tcachedRowHeight = view.$getConfig().row_height;\r\n\t\t\t}\r\n\t\t\treturn cachedRowHeight;\r\n\t\t},\r\n\t\t_refreshState: function(){\r\n\t\t\tthis.resetCache();\r\n\t\t\tcanUseSimpleCalc = true;\r\n\t\t\tvar store = view.$config.rowStore;\r\n\t\t\tif(!store){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar globalRowHeight = this._getRowHeight();\r\n\t\t\tfor (var i=0; i\";\r\n\t\tthis.$task = container.childNodes[0];\r\n\r\n\t\tthis.$task.innerHTML = \"
\";\r\n\t\tthis.$task_scale = this.$task.childNodes[0];\r\n\r\n\t\tthis.$task_data = this.$task.childNodes[1];\r\n\t\tconst taskBg = \"
\";\r\n\t\tconst links = \"
\";\r\n\t\tconst taskBars = \"
\";\r\n\r\n\t\tconst taskConstraints = \"
\";\r\n\t\tconst taskDeadlines = \"
\";\r\n\t\tconst taskBaselines = \"
\";\r\n\r\n\t\tthis.$task_data.innerHTML = taskBg + taskBaselines + links + taskBars + taskConstraints + taskDeadlines;\r\n\r\n\t\tthis.$task_bg = this.$task_data.childNodes[0];\r\n\t\tthis.$task_baselines = this.$task_data.childNodes[1];\r\n\t\tthis.$task_links = this.$task_data.childNodes[2];\r\n\t\tthis.$task_bars = this.$task_data.childNodes[3];\r\n\t\tthis.$task_constraints = this.$task_data.childNodes[4];\r\n\t\tthis.$task_deadlines = this.$task_data.childNodes[5];\r\n\r\n\t\tthis._tasks = {\r\n\t\t\tcol_width: 0,\r\n\t\t\twidth: [], // width of each column\r\n\t\t\tfull_width: 0, // width of all columns\r\n\t\t\ttrace_x: [],\r\n\t\t\trendered: {}\r\n\t\t};\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar attr = config[this.$config.bind + \"_attribute\"];\r\n\t\tvar linksAttr = config[this.$config.bindLinks + \"_attribute\"];\r\n\t\tif(!attr && this.$config.bind){\r\n\t\t\tattr = \"data-\" + this.$config.bind + \"-id\";\r\n\t\t}\r\n\t\tif(!linksAttr && this.$config.bindLinks){\r\n\t\t\tlinksAttr = \"data-\" + this.$config.bindLinks + \"-id\";\r\n\t\t}\r\n\t\tthis.$config.item_attribute = attr || null;\r\n\t\tthis.$config.link_attribute = linksAttr || null;\r\n\r\n\t\tvar layers = this._createLayerConfig();\r\n\t\tif(!this.$config.layers){\r\n\t\t\tthis.$config.layers = layers.tasks;\r\n\t\t}\r\n\t\tif(!this.$config.linkLayers){\r\n\t\t\tthis.$config.linkLayers = layers.links;\r\n\t\t}\r\n\r\n\t\tthis._attachLayers(this.$gantt);\r\n\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t\t//this.refresh();\r\n\t\tif (this.$gantt.ext.dragTimeline) {\r\n\t\t\tthis._timelineDragScroll = this.$gantt.ext.dragTimeline.create();\r\n\t\t\tthis._timelineDragScroll.attach(this);\r\n\t\t}\r\n\t},\r\n\r\n\tsetSize: function(width, height){\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tif(width*1 === width){\r\n\t\t\tthis.$config.width = width;\r\n\t\t}\r\n\t\tif(height*1 === height){\r\n\r\n\t\t\tthis.$config.height = height;\r\n\t\t\tvar dataHeight = Math.max(this.$config.height - config.scale_height);\r\n\t\t\tthis.$task_data.style.height = dataHeight + 'px';\r\n\t\t}\r\n\r\n\t\tthis.refresh();\r\n\t\tthis.$task_bg.style.backgroundImage = \"\";\r\n\r\n\t\tif(config.smart_rendering && this.$config.rowStore){\r\n\t\t\tthis.$task_bg.style.height = this.getTotalHeight() +\"px\";\r\n\t\t}else{\r\n\t\t\tthis.$task_bg.style.height = \"\";\r\n\t\t}\r\n\r\n\t\tvar scale = this._tasks;\r\n\t\t//timeline area layers\r\n\t\tvar data_els = this.$task_data.childNodes;\r\n\t\tfor(var i= 0, len = data_els.length; i < len; i++){\r\n\t\t\tvar el = data_els[i];\r\n\t\t\tif(el.hasAttribute(\"data-layer\") && el.style)\r\n\t\t\t\tel.style.width = scale.full_width + \"px\";\r\n\t\t}\r\n\t},\r\n\r\n\tisVisible: function(){\r\n\t\tif(this.$parent && this.$parent.$config){\r\n\t\t\treturn !this.$parent.$config.hidden;\r\n\t\t}else{\r\n\t\t\treturn this.$task.offsetWidth;\r\n\t\t}\r\n\t},\r\n\r\n\tgetSize: function(){\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar store = this.$config.rowStore;\r\n\r\n\t\tvar contentHeight = store ? this.getTotalHeight() : 0,\r\n\t\t\tcontentWidth = this.isVisible() ? this._tasks.full_width : 0;\r\n\r\n\t\treturn {\r\n\t\t\tx: this.isVisible() ? this.$config.width : 0,\r\n\t\t\ty: this.isVisible() ? this.$config.height : 0,\r\n\t\t\tcontentX: this.isVisible() ? contentWidth : 0,\r\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\r\n\t\t\tscrollHeight: this.isVisible() ? contentHeight : 0,\r\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\r\n\t\t};\r\n\t},\r\n\r\n\tscrollTo: function(left, top){\r\n\t\tif(!this.isVisible())\r\n\t\t\treturn;\r\n\r\n\t\tvar scrolled = false;\r\n\r\n\t\tthis.$config.scrollTop = this.$config.scrollTop || 0;\r\n\t\tthis.$config.scrollLeft = this.$config.scrollLeft || 0;\r\n\t\tif(top*1 === top){\r\n\t\t\tthis.$config.scrollTop = top;\r\n\t\t\tthis.$task_data.scrollTop = this.$config.scrollTop;\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\t\tif (left*1 === left){\r\n\t\t\tthis.$task.scrollLeft = left;\r\n\t\t\tthis.$config.scrollLeft = this.$task.scrollLeft;\r\n\t\t\tthis._refreshScales();\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\r\n\t\tif(scrolled){\r\n\t\t\tthis.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\r\n\t\t}\r\n\t},\r\n\r\n\t_refreshScales: function _refreshScales() {\r\n\t\tif(!this.isVisible())\r\n\t\t\treturn;\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tif (!config.smart_scales) return;\r\n\r\n\t\tvar viewPort = this.getViewPort();\r\n\r\n\t\tvar scales = this._scales;\r\n\t\tthis.$task_scale.innerHTML = this._getScaleChunkHtml(scales, viewPort.x, viewPort.x_end);\r\n\t},\r\n\r\n\tgetViewPort: function(){\r\n\t\tvar scrollLeft = this.$config.scrollLeft || 0;\r\n\t\tvar scrollTop = this.$config.scrollTop || 0;\r\n\t\tvar height = this.$config.height || 0;\r\n\t\tvar width = this.$config.width || 0;\r\n\t\treturn {\r\n\t\t\ty: scrollTop,\r\n\t\t\ty_end: scrollTop + height,\r\n\t\t\tx: scrollLeft,\r\n\t\t\tx_end: scrollLeft + width,\r\n\t\t\theight: height,\r\n\t\t\twidth: width\r\n\t\t};\r\n\t},\r\n\r\n\t_createLayerConfig: createLayerConfig,\r\n\r\n\t_attachLayers: function(gantt){\r\n\t\tthis._taskLayers = [];\r\n\t\tthis._linkLayers = [];\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\r\n\t\tif(this.$config.bind){\r\n\r\n\t\t\tthis._bindStore();\r\n\t\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\r\n\t\t\tif(!taskRenderer){\r\n\t\t\t\ttaskRenderer = layers.createDataRender({\r\n\t\t\t\t\tname: this.$config.bind,\r\n\t\t\t\t\tdefaultContainer: function(){ return self.$task_data;}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\ttaskRenderer.container = function(){ return self.$task_data;};\r\n\r\n\t\t\tvar taskLayers = this.$config.layers;\r\n\t\t\tfor(var i = 0; taskLayers && i < taskLayers.length; i++){\r\n\t\t\t\tvar layer = taskLayers[i];\r\n\r\n\t\t\t\tif(typeof layer == \"string\"){\r\n\t\t\t\t\tlayer = this.$gantt.$ui.layers[layer]();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof layer == \"function\" || (layer && layer.render && layer.update)){\r\n\t\t\t\t\tlayer = {renderer: layer};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlayer.view = this;\r\n\r\n\t\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\r\n\t\t\t\tthis._taskLayers.push(bar_layer);\r\n\t\t\t\tif(layer.expose){\r\n\t\t\t\t\tthis._taskRenderer = taskRenderer.getLayer(bar_layer);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._initStaticBackgroundRender();\r\n\t\t}\r\n\r\n\t\tif(this.$config.bindLinks){\r\n\t\t\tself.$config.linkStore = self.$gantt.getDatastore(self.$config.bindLinks);\r\n\r\n\t\t\tvar linkRenderer = layers.getDataRender(this.$config.bindLinks);\r\n\r\n\t\t\tif(!linkRenderer){\r\n\t\t\t\tlinkRenderer = layers.createDataRender({\r\n\t\t\t\t\tname: this.$config.bindLinks,\r\n\t\t\t\t\tdefaultContainer: function(){ return self.$task_data;}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tvar linkLayers = this.$config.linkLayers;\r\n\t\t\tfor(var i = 0; linkLayers && i < linkLayers.length; i++){\r\n\r\n\t\t\t\tif(typeof layer == \"string\"){\r\n\t\t\t\t\tlayer = this.$gantt.$ui.layers[layer]();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar layer = linkLayers[i];\r\n\t\t\t\tlayer.view = this;\r\n\t\t\t//\tlayer.getViewPort = getViewPort;\r\n\t\t\t//\tsubscribeSmartRender(layer);\r\n\t\t\t\tvar linkLayer = linkRenderer.addLayer(layer);\r\n\t\t\t\tthis._taskLayers.push(linkLayer);\r\n\t\t\t\tif(linkLayers[i].expose){\r\n\t\t\t\t\tthis._linkRenderer = linkRenderer.getLayer(linkLayer);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_initStaticBackgroundRender: function(){\r\n\t\tvar self = this;\r\n\t\tvar staticRender = canvasRender.create();\r\n\t\tvar store = self.$config.rowStore;\r\n\t\tif(!store) return;\r\n\r\n\t\tthis._staticBgHandler = store.attachEvent(\"onStoreUpdated\", function(id, item, mode){\r\n\t\t\tif(id !== null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.isVisible())\r\n\t\t\t\treturn;\r\n\t\t\tvar config = self.$getConfig();\r\n\t\t\tif(config.static_background || config.timeline_placeholder) {\r\n\t\t\t\tvar store = self.$gantt.getDatastore(self.$config.bind);\r\n\t\t\t\tvar staticBgContainer = self.$task_bg_static;\r\n\t\t\t\tif(!staticBgContainer){\r\n\t\t\t\t\tstaticBgContainer = document.createElement(\"div\");\r\n\t\t\t\t\tstaticBgContainer.className = \"gantt_task_bg\";\r\n\t\t\t\t\tself.$task_bg_static = staticBgContainer;\r\n\t\t\t\t\tif(self.$task_bg.nextSibling){\r\n\t\t\t\t\t\tself.$task_data.insertBefore(staticBgContainer, self.$task_bg.nextSibling);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tself.$task_data.appendChild(staticBgContainer);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (store) {\r\n\t\t\t\t\tvar staticBackgroundHeight = self.getTotalHeight();\r\n\t\t\t\t\tif (config.timeline_placeholder){\r\n\t\t\t\t\t\tstaticBackgroundHeight = config.timeline_placeholder.height || self.$task_data.offsetHeight || 99999;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstaticRender.render(staticBgContainer, config, self.getScale(), staticBackgroundHeight, self.getItemHeight(item ? item.id : null));\r\n\t\t\t\t}\r\n\t\t\t}else if(config.static_background){\r\n\t\t\t\tif(self.$task_bg_static && self.$task_bg_static.parentNode){\r\n\t\t\t\t\tself.$task_bg_static.parentNode.removeChild(self.$task_bg_static);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.attachEvent(\"onDestroy\", function () {\r\n\t\t\tstaticRender.destroy();\r\n\t\t});\r\n\t\tthis._initStaticBackgroundRender = function(){};//init once\r\n\t},\r\n\r\n\t_clearLayers: function(gantt){\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\t\tvar linkRenderer = layers.getDataRender(this.$config.bindLinks);\r\n\r\n\t\tif (this._taskLayers) {\r\n\t\t\tfor(var i = 0; i < this._taskLayers.length; i++){\r\n\t\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this._linkLayers) {\r\n\t\t\tfor(var i = 0; i < this._linkLayers.length; i++){\r\n\t\t\t\tlinkRenderer.removeLayer(this._linkLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._linkLayers = [];\r\n\t\tthis._taskLayers = [];\r\n\t},\r\n\r\n\t_render_tasks_scales: function _render_tasks_scales() {\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tvar scales_html = \"\",\r\n\t\t\touter_width = 0,\r\n\t\t\tscale_height = 0;\r\n\r\n\t\tvar state = this.$gantt.getState();\r\n\r\n\t\tif (this.isVisible()) {\r\n\t\t\tvar helpers = this.$scaleHelper;\r\n\t\t\tvar scales = this._getScales();\r\n\t\t\tscale_height = config.scale_height;\r\n\r\n\t\t\tvar availWidth = this.$config.width;\r\n\t\t\tif(config.autosize == \"x\" || config.autosize == \"xy\"){\r\n\t\t\t\tavailWidth = Math.max(config.autosize_min_width, 0);\r\n\t\t\t}\r\n\r\n\t\t\tvar cfgs = helpers.prepareConfigs(scales, config.min_column_width, availWidth, scale_height - 1, state.min_date, state.max_date, config.rtl);\r\n\t\t\tvar cfg = this._tasks = cfgs[cfgs.length - 1];\r\n\t\t\tthis._scales = cfgs;\r\n\t\t\tthis._posFromDateCache = {};\r\n\r\n\t\t\tscales_html = this._getScaleChunkHtml(cfgs, 0, this.$config.width);\r\n\r\n\t\t\touter_width = cfg.full_width + \"px\";//cfg.full_width + (this._scroll_sizes().y ? scrollSizes.scroll_size : 0) + \"px\";\r\n\t\t\tscale_height += \"px\";\r\n\t\t}\r\n\r\n\t\tthis.$task_scale.style.height = scale_height;\r\n\r\n\t\tthis.$task_data.style.width =\r\n\t\t\tthis.$task_scale.style.width = outer_width;\r\n\r\n\t\tthis.$task_scale.innerHTML = scales_html;\r\n\r\n\t},\r\n\r\n\t_getScaleChunkHtml: function _get_scale_chunk_html (scales, fromPos, toPos) {\r\n\t\tvar templates = this.$gantt.templates;\r\n\t\tvar html = [];\r\n\r\n\t\tvar css = templates.scale_row_class;\r\n\t\tfor (var i = 0; i < scales.length; i++) {\r\n\t\t\tvar cssClass = \"gantt_scale_line\";\r\n\t\t\tvar tplClass = css(scales[i]);\r\n\t\t\tif (tplClass) {\r\n\t\t\t\tcssClass += \" \" + tplClass;\r\n\t\t\t}\r\n\r\n\t\t\thtml.push(\"\" + this._prepareScaleHtml(scales[i], fromPos, toPos, i) + \"
\");\r\n\t\t}\r\n\r\n\t\treturn html.join(\"\");\r\n\t},\r\n\t_prepareScaleHtml: function _prepare_scale_html(config, fromPos, toPos, index) {\r\n\t\tvar globalConfig = this.$getConfig();\r\n\t\tvar globalTemplates = this.$gantt.templates;\r\n\r\n\t\tvar cells = [];\r\n\t\tvar date = null, css = null;\r\n\r\n\t\tvar content = config.format || config.template || config.date;\r\n\r\n\t\tif(typeof content === \"string\"){\r\n\t\t\tcontent = this.$gantt.date.date_to_str(content);\r\n\t\t}\r\n\r\n\t\tvar startIndex = 0,\r\n\t\t\tendIndex = config.count;\r\n\r\n\t\tif (globalConfig.smart_scales && (!isNaN(fromPos) && !isNaN(toPos))) {\r\n\t\t\tstartIndex = helpers.findBinary(config.left, fromPos);\r\n\t\t\tendIndex = helpers.findBinary(config.left, toPos) + 1;\r\n\t\t}\r\n\r\n\t\tcss = config.css || function () {\r\n\t\t\t};\r\n\t\tif (!config.css && globalConfig.inherit_scale_class) {\r\n\t\t\tcss = globalTemplates.scale_cell_class;\r\n\t\t}\r\n\r\n\t\tfor (var i = startIndex; i < endIndex; i++) {\r\n\t\t\tif (!config.trace_x[i]) break;\r\n\r\n\t\t\tdate = new Date(config.trace_x[i]);\r\n\t\t\tvar value = content.call(this, date),\r\n\t\t\t\twidth = config.width[i],\r\n\t\t\t\theight = config.height,\r\n\t\t\t\tleft = config.left[i],\r\n\t\t\t\tstyle = \"\",\r\n\t\t\t\ttemplate = \"\",\r\n\t\t\t\tcssclass = \"\";\r\n\r\n\t\t\tif (width) {\r\n\t\t\t\tvar position = globalConfig.smart_scales ? (\"position:absolute;left:\" + left + \"px\") : \"\";\r\n\r\n\t\t\t\tstyle = \"width:\" + (width) + \"px;height:\" + height + \"px;\" + position;\r\n\t\t\t\t// GS-1188: Display the scale value in the viewport for long cells\r\n\t\t\t\tconst viewPort = this.getViewPort();\r\n\t\t\t\tconst floatConfig = (globalConfig.scales[index] || {}).sticky; // for old scale settings\r\n\r\n\t\t\t\tlet labelPosition = '';\r\n\t\t\t\tconst approxLabelWidth = 70;\r\n\t\t\t\t// if sticky config is not specified - sticky labels are enabled for long cells only\r\n\t\t\t\tif ((floatConfig !== false && width > approxLabelWidth) || floatConfig === true) {\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (left < viewPort.x && left + width/2 - approxLabelWidth/2 < viewPort.x){\r\n\t\t\t\t\t\tlabelPosition = ` style='position:absolute;left: ${viewPort.x - left + 10}px;' `;\r\n\t\t\t\t\t} else if(left + width/2 + approxLabelWidth/2 > viewPort.x_end && width > approxLabelWidth){\r\n\t\t\t\t\t\tlet labelPos = viewPort.x_end - left - 10;\r\n\t\t\t\t\t\tlet translateValue = \"-100%\";\r\n\t\t\t\t\t\tif(labelPos < approxLabelWidth) {\r\n\t\t\t\t\t\t\tlabelPos = approxLabelWidth;\r\n\t\t\t\t\t\t\ttranslateValue = `-${labelPos}px`;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlabelPosition = ` style='position:absolute;left: ${labelPos}px;transform: translate(${translateValue},0);' `;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcssclass = \"gantt_scale_cell\" + (i == config.count - 1 ? \" gantt_last_cell\" : \"\");\r\n\r\n\t\t\t\ttemplate = css.call(this, date);\r\n\t\t\t\tif (template) cssclass += \" \" + template;\r\n\r\n\t\t\t\tvar ariaAttr = this.$gantt._waiAria.getTimelineCellAttr(value);\r\n\t\t\t\tvar cell = `${value}
`;\r\n\t\t\t\tcells.push(cell);\r\n\t\t\t} else {\r\n\t\t\t\t//do not render ignored cells\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn cells.join(\"\");\r\n\t},\r\n\tdateFromPos: function dateFromPos(x) {\r\n\t\tvar scale = this._tasks;\r\n\t\tif (x < 0 || x > scale.full_width || !scale.full_width) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar ind = helpers.findBinary(this._tasks.left, x);\r\n\t\tvar summ = this._tasks.left[ind];\r\n\r\n\t\tvar col_width = scale.width[ind] || scale.col_width;\r\n\t\tvar part = 0;\r\n\t\tif (col_width) {\r\n\t\t\tpart = (x - summ) / col_width;\r\n\t\t\tif(scale.rtl){\r\n\t\t\t\tpart = 1 - part;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar unit = 0;\r\n\t\tif (part) {\r\n\t\t\tunit = this._getColumnDuration(scale, scale.trace_x[ind]);\r\n\t\t}\r\n\r\n\t\tvar date = new Date(scale.trace_x[ind].valueOf() + Math.round(part * unit));\r\n\t\treturn date;\r\n\t},\r\n\tposFromDate: function posFromDate(date) {\r\n\t\tif (!this.isVisible())\r\n\t\t\treturn 0;\r\n\r\n\t\tif(!date){\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tvar dateValue = String(date.valueOf());\r\n\r\n\t\tif(this._posFromDateCache[dateValue] !== undefined){\r\n\t\t\treturn this._posFromDateCache[dateValue];\r\n\t\t}\r\n\t\tvar ind = this.columnIndexByDate(date);\r\n\t\tthis.$gantt.assert(ind >= 0, \"Invalid day index\");\r\n\r\n\t\tvar wholeCells = Math.floor(ind);\r\n\t\tvar partCell = ind % 1;\r\n\r\n\t\tvar pos = this._tasks.left[Math.min(wholeCells, this._tasks.width.length - 1)];\r\n\t\tif (wholeCells == this._tasks.width.length)\r\n\t\t\tpos += this._tasks.width[this._tasks.width.length - 1];\r\n\t\t//for(var i=1; i <= wholeCells; i++)\r\n\t\t//\tpos += gantt._tasks.width[i-1];\r\n\r\n\t\tif (partCell) {\r\n\t\t\tif (wholeCells < this._tasks.width.length) {\r\n\t\t\t\tpos += this._tasks.width[wholeCells] * (partCell % 1);\r\n\t\t\t} else {\r\n\t\t\t\tpos += 1;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar roundPos = Math.round(pos);\r\n\t\tthis._posFromDateCache[dateValue] = roundPos;\r\n\t\treturn Math.round(roundPos);\r\n\t},\r\n\r\n\t_getNextVisibleColumn: function (startIndex, columns, ignores) {\r\n\t\t// iterate columns to the right\r\n\t\tvar date = +columns[startIndex];\r\n\t\tvar visibleDateIndex = startIndex;\r\n\t\twhile (ignores[date]) {\r\n\t\t\tvisibleDateIndex++;\r\n\t\t\tdate = +columns[visibleDateIndex];\r\n\t\t}\r\n\r\n\t\treturn visibleDateIndex;\r\n\t},\r\n\t_getPrevVisibleColumn: function (startIndex, columns, ignores) {\r\n\t\t// iterate columns to the left\r\n\t\tvar date = +columns[startIndex];\r\n\t\tvar visibleDateIndex = startIndex;\r\n\t\twhile (ignores[date]) {\r\n\t\t\tvisibleDateIndex--;\r\n\t\t\tdate = +columns[visibleDateIndex];\r\n\t\t}\r\n\t\treturn visibleDateIndex;\r\n\t},\r\n\t_getClosestVisibleColumn: function (startIndex, columns, ignores) {\r\n\t\tvar visibleDateIndex = this._getNextVisibleColumn(startIndex, columns, ignores);\r\n\t\tif (!columns[visibleDateIndex]) {\r\n\t\t\tvisibleDateIndex = this._getPrevVisibleColumn(startIndex, columns, ignores);\r\n\t\t}\r\n\t\treturn visibleDateIndex;\r\n\t},\r\n\tcolumnIndexByDate: function columnIndexByDate(date) {\r\n\t\tvar pos = new Date(date).valueOf();\r\n\t\tvar days = this._tasks.trace_x_ascending,\r\n\t\t\tignores = this._tasks.ignore_x;\r\n\r\n\t\tvar state = this.$gantt.getState();\r\n\r\n\t\tif (pos <= state.min_date) {\r\n\t\t\tif(this._tasks.rtl){\r\n\t\t\t\treturn days.length;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif (pos >= state.max_date) {\r\n\t\t\tif(this._tasks.rtl){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn days.length;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar dateIndex = helpers.findBinary(days, pos);\r\n\r\n\t\tvar visibleIndex = this._getClosestVisibleColumn(dateIndex, days, ignores);\r\n\t\tvar visibleDate = days[visibleIndex];\r\n\t\tvar transition = this._tasks.trace_index_transition;\r\n\r\n\t\tif(!visibleDate){\r\n\t\t\tif(transition){\r\n\t\t\t\treturn transition[0];\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar part = ((date - days[visibleIndex]) / this._getColumnDuration(this._tasks, days[visibleIndex]));\r\n\t\tif(transition){\r\n\t\t\treturn transition[visibleIndex] + (1 - part);\r\n\t\t}else{\r\n\t\t\treturn visibleIndex + part;\r\n\t\t}\r\n\t},\r\n\tgetItemPosition:function (task, start_date, end_date) {\r\n\t\tvar xLeft, xRight, width;\r\n\r\n\t\tlet displayStart = start_date || task.start_date || task.$auto_start_date;\r\n\t\tlet displayEnd = end_date || task.end_date || task.$auto_end_date;\r\n\t\tif(this._tasks.rtl){\r\n\t\t\txRight = this.posFromDate(displayStart);\r\n\t\t\txLeft = this.posFromDate(displayEnd);\r\n\t\t}else{\r\n\t\t\txLeft = this.posFromDate(displayStart);\r\n\t\t\txRight = this.posFromDate(displayEnd);\r\n\t\t}\r\n\t\twidth = Math.max((xRight - xLeft), 0);\r\n\r\n\t\tvar y = this.getItemTop(task.id);\r\n\r\n\t\tvar height = this.getBarHeight(task.id);\r\n\t\tvar rowHeight = this.getItemHeight(task.id);\r\n\t\treturn {\r\n\t\t\tleft: xLeft,\r\n\t\t\ttop: y,\r\n\t\t\theight: height,\r\n\t\t\twidth: width,\r\n\t\t\trowHeight: rowHeight\r\n\t\t};\r\n\t},\r\n\r\n\tgetBarHeight: function(taskId, isMilestoneRender){\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tvar task = this.$config.rowStore.getItem(taskId);\r\n\t\t// height of the bar item\r\n\t\tvar height = task.task_height || task.bar_height || config.bar_height || config.task_height;\r\n\t\tvar rowHeight = this.getItemHeight(taskId);\r\n\r\n\t\tif (height == \"full\") {\r\n\t\t\tvar offset = config.bar_height_padding || 3;\r\n\t\t\theight = rowHeight - offset;\r\n\t\t}\r\n\t\t//item height cannot be bigger than row height\r\n\t\theight = Math.min(height, rowHeight);\r\n\t\tif (isMilestoneRender) { // to get correct height for addapting Milestone to the row\r\n\t\t\theight = Math.round(height / Math.sqrt(2));\r\n\t\t}\r\n\t\treturn Math.max(height, 0);\r\n\t},\r\n\r\n\tgetScale: function(){\r\n\t\treturn this._tasks;\r\n\t},\r\n\r\n\t_getScales: function _get_scales() {\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar helpers = this.$scaleHelper;\r\n\t\tvar scales = [helpers.primaryScale(config)].concat(helpers.getSubScales(config));\r\n\r\n\t\thelpers.sortScales(scales);\r\n\t\treturn scales;\r\n\t},\r\n\r\n\t_getColumnDuration: function _get_coll_duration(scale, date) {\r\n\t\treturn this.$gantt.date.add(date, scale.step, scale.unit) - date;\r\n\t},\r\n\t_bindStore: function () {\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tthis.$config.rowStore = rowStore;\r\n\t\t\tif(rowStore && !rowStore._timelineCacheAttached){\r\n\t\t\t\tvar self = this;\r\n\t\t\t\trowStore._timelineCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function(){\r\n\t\t\t\t\tself._resetTopPositionHeight();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t_unbindStore: function(){\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tif(rowStore && rowStore._timelineCacheAttached){\r\n\t\t\t\trowStore.detachEvent(rowStore._timelineCacheAttached);\r\n\t\t\t\trowStore._timelineCacheAttached = false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\trefresh: function(){\r\n\t\tthis._bindStore();\r\n\r\n\t\tif(this.$config.bindLinks) {\r\n\t\t\tthis.$config.linkStore = this.$gantt.getDatastore(this.$config.bindLinks);\r\n\t\t}\r\n\r\n\t\tthis._resetTopPositionHeight();\r\n\t\tthis._resetHeight();\r\n\t\tthis._initStaticBackgroundRender();\r\n\t\tthis._render_tasks_scales();\r\n\t},\r\n\r\n\tdestructor: function(){\r\n\t\tvar gantt = this.$gantt;\r\n\t\tthis._clearLayers(gantt);\r\n\t\tthis._unbindStore();\r\n\t\tthis.$task = null;\r\n\t\tthis.$task_scale = null;\r\n\t\tthis.$task_data = null;\r\n\t\tthis.$task_bg = null;\r\n\t\tthis.$task_links = null;\r\n\t\tthis.$task_bars = null;\r\n\r\n\t\tthis.$gantt = null;\r\n\r\n\t\tif(this.$config.rowStore){\r\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\r\n\t\t\tthis.$config.rowStore = null;\r\n\t\t}\r\n\t\tif(this.$config.linkStore){\r\n\t\t\tthis.$config.linkStore = null;\r\n\t\t}\r\n\r\n\t\tif(this._timelineDragScroll) {\r\n\t\t\tthis._timelineDragScroll.destructor();\r\n\t\t\tthis._timelineDragScroll = null;\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\r\n\t}\r\n};\r\n\r\nexport default Timeline;","\r\nexport default function(){\r\n\tvar self = this;\r\n\tvar taskFilter = function(){\r\n\t\treturn self.isVisible();\r\n\t};\r\n\r\n\tvar barVisible = function(id, task){\r\n\t\treturn !task.hide_bar;\r\n\t};\r\n\r\n\tconst gantt = this.$gantt;\r\n\r\n\tvar taskLayers = [\r\n\t\t{\r\n\t\t\texpose: true,\r\n\t\t\trenderer: this.$gantt.$ui.layers.taskBar(),\r\n\t\t\tcontainer: this.$task_bars,\r\n\t\t\tfilter: [taskFilter, barVisible]\r\n\t\t}\r\n\t];\r\n\r\n\ttaskLayers.push({\r\n\t\trenderer: this.$gantt.$ui.layers.taskBg(),\r\n\t\tcontainer: this.$task_bg,\r\n\t\tfilter: [\r\n\t\t\t//function(){\r\n\t\t\t//\treturn !self.$getConfig().static_background;\r\n\t\t\t//},\r\n\t\t\ttaskFilter\r\n\t\t]\r\n\t});\r\n\r\n\tvar linkLayers = [\r\n\t\t{\r\n\t\t\texpose: true,\r\n\t\t\trenderer: this.$gantt.$ui.layers.link(),\r\n\t\t\tcontainer: this.$task_links,\r\n\t\t\tfilter: [taskFilter]\r\n\t\t}\r\n\t];\r\n\r\n\treturn {\r\n\t\ttasks: taskLayers,\r\n\t\tlinks: linkLayers\r\n\t};\r\n\r\n};","const SENSITIVITY = 20;\r\nconst TIMEOUT = 50;\r\nconst SCROLLSTEP = 10;\r\n\r\nexport default class ScrollableGrid {\r\n\tpublic getCurrentX;\r\n\tprivate $gantt;\r\n\tprivate $grid;\r\n\tprivate _dnd;\r\n\tprivate _scrollView;\r\n\tprivate _scrollOrder: 0 | 1 | -1 = 0;\r\n\r\n\tconstructor(params) {\r\n\t\tconst {gantt, grid, dnd, getCurrentX} = params;\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$grid = grid;\r\n\t\tthis._dnd = dnd;\r\n\t\tthis.getCurrentX = getCurrentX;\r\n\t\tthis._scrollView = this.$gantt.$ui.getView(this.$grid.$config.scrollX);\r\n\t\tthis.attachEvents();\r\n\t}\r\n\tattachEvents() {\r\n\t\tif (this.isScrollable()) {\r\n\t\t\tthis._dnd.attachEvent(\"onDragMove\", (obj, e) => {\r\n\t\t\t\tconst gridBoundingRect = this.$grid.$grid.getBoundingClientRect();\r\n\t\t\t\tconst maxLeft = gridBoundingRect.right;\r\n\t\t\t\tconst minLeft = gridBoundingRect.left;\r\n\t\t\t\tconst currentX = this.getCurrentX(e.clientX);\r\n\r\n\t\t\t\tif (currentX >= maxLeft - SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollRight();\r\n\t\t\t\t\tthis.autoscrollStart();\r\n\t\t\t\t}\r\n\t\t\t\tif (currentX <= minLeft + SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollLeft();\r\n\t\t\t\t\tthis.autoscrollStart();\r\n\t\t\t\t}\r\n\t\t\t\tif (currentX < maxLeft - SENSITIVITY && currentX > minLeft + SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollStop();\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tthis._dnd.attachEvent(\"onDragEnd\", () => {\r\n\t\t\t\tthis.autoscrollStop();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\tautoscrollStart() {\r\n\t\tif (this._scrollOrder === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst scrollStep = SCROLLSTEP * this._scrollOrder;\r\n\t\tconst scrollState = this._scrollView.getScrollState();\r\n\t\tthis._scrollView.scrollTo(scrollState.position + scrollStep);\r\n\t\tsetTimeout(() => { this.autoscrollStart(); }, TIMEOUT);\r\n\t}\r\n\tautoscrollRight() {\r\n\t\tthis._scrollOrder = 1;\r\n\t}\r\n\tautoscrollLeft() {\r\n\t\tthis._scrollOrder = -1;\r\n\t}\r\n\tautoscrollStop() {\r\n\t\tthis._scrollOrder = 0;\r\n\t}\r\n\tgetCorrection() {\r\n\t\tif (!this.isScrollable()) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\treturn this._scrollView.getScrollState().position;\r\n\t}\r\n\tisScrollable() {\r\n\t\treturn !!this.$grid.$config.scrollable;\r\n\t}\r\n}","import * as domHelpers from \"../../utils/dom_helpers\";\r\nimport ScrollableGrid from \"./scrollable_grid\";\r\n\r\nconst COLUMN_ID_ATTR_NAME = \"data-column-id\";\r\n\r\nexport class ColumnsGridDnd {\r\n\tprivate $gantt;\r\n\tprivate $grid;\r\n\tprivate _dragX;\r\n\tprivate _dnd;\r\n\tprivate _originAutoscroll;\r\n\tprivate _scrollableGrid: ScrollableGrid;\r\n\tprivate _draggedCell;\r\n\tprivate _targetMarker = null;\r\n\tprivate _gridConfig;\r\n\tconstructor(gantt, grid) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$grid = grid;\r\n\t}\r\n\tinit() {\r\n\t\tconst DND = this.$gantt.$services.getService(\"dnd\");\r\n\t\tthis._dnd = new DND(this.$grid.$grid_scale, { updates_per_second: 60 });\r\n\t\tthis._scrollableGrid = new ScrollableGrid({\r\n\t\t\tgantt: this.$gantt,\r\n\t\t\tgrid: this.$grid,\r\n\t\t\tdnd: this._dnd,\r\n\t\t\tgetCurrentX: this.calculateCurrentPosition\r\n\t\t});\r\n\t\tthis.attachEvents();\r\n\t}\r\n\tattachEvents() {\r\n\t\tthis._dnd.attachEvent(\"onBeforeDragStart\", (obj, e) => {\r\n\t\t\tthis._draggedCell = this.$gantt.utils.dom.closest(e.target, \".gantt_grid_head_cell\");\r\n\t\t\tif(!this._draggedCell){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\t\tconst columnName = this._draggedCell.getAttribute(COLUMN_ID_ATTR_NAME);\r\n\t\t\tlet draggedColumn;\r\n\t\t\tlet draggedIndex;\r\n\t\t\tcolumns.map(function(column, index){\r\n\t\t\t\tif(column.name === columnName){\r\n\t\t\t\t\tdraggedColumn = column;\r\n\t\t\t\t\tdraggedIndex = index;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.$grid.callEvent(\"onBeforeColumnDragStart\", [{ draggedColumn, draggedIndex}]) === false) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._draggedCell || !draggedColumn) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._gridConfig = this.$grid.$getConfig();\r\n\t\t\tthis._originAutoscroll = this.$gantt.config.autoscroll;\r\n\t\t\tthis.$gantt.config.autoscroll = false;\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onAfterDragStart\", (obj, e) => {\r\n\t\t\tif (!this._draggedCell) {\r\n\t\t\t\treturn; // GS-1333: don't try to reorder a column when we resize it\r\n\t\t\t}\r\n\t\t\tthis._dnd.config.column = this._draggedCell.getAttribute(COLUMN_ID_ATTR_NAME);\r\n\t\t\tthis._dnd.config.marker.innerHTML = this._draggedCell.outerHTML;\r\n\t\t\tthis._dnd.config.marker.classList.add(\"gantt_column_drag_marker\");\r\n\t\t\tthis._dnd.config.marker.style.height = this._gridConfig.scale_height + \"px\";\r\n\t\t\tthis._dnd.config.marker.style.lineHeight = this._gridConfig.scale_height + \"px\";\r\n\t\t\tthis._draggedCell.classList.add(\"gantt_grid_head_cell_dragged\");\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onDragMove\", (obj, e) => {\r\n\t\t\tif(!this._draggedCell){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._dragX = e.clientX;\r\n\t\t\tconst x = this.calculateCurrentPosition(e.clientX);\r\n\t\t\tconst columnIndexes = this.findColumnsIndexes();\r\n\t\t\tconst targetIndex = columnIndexes.targetIndex;\r\n\t\t\tconst draggedIndex = columnIndexes.draggedIndex;\r\n\t\t\tconst columns = this.$grid.$getConfig().columns;\r\n\r\n\t\t\tconst draggedColumn = columns[draggedIndex];\r\n\t\t\tconst targetColumn = columns[targetIndex];\r\n\t\t\tif (this.$grid.callEvent(\"onColumnDragMove\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]) === false) {\r\n\t\t\t\tthis.cleanTargetMarker();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tthis.setMarkerPosition(x);\r\n\t\t\tthis.drawTargetMarker(columnIndexes);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onDragEnd\", () => {\r\n\t\t\tif (!this._draggedCell) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.$gantt.config.autoscroll = this._originAutoscroll;\r\n\t\t\tthis._draggedCell.classList.remove(\"gantt_grid_head_cell_dragged\");\r\n\t\t\tthis.cleanTargetMarker();\r\n\t\t\tthis.reorderColumns();\r\n\t\t});\r\n\r\n\t}\r\n\treorderColumns() {\r\n\t\tconst { targetIndex, draggedIndex } = this.findColumnsIndexes();\r\n\r\n\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\tconst draggedColumn = columns[draggedIndex];\r\n\t\tconst targetColumn = columns[targetIndex];\r\n\r\n\t\tif (this.$grid.callEvent(\"onBeforeColumnReorder\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (targetIndex === draggedIndex) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tcolumns.splice(draggedIndex, 1);\r\n\t\tcolumns.splice(targetIndex, 0, draggedColumn);\r\n\t\tthis.$gantt.render();\r\n\t\tthis.$grid.callEvent(\"onAfterColumnReorder\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]);\r\n\t}\r\n\tfindColumnsIndexes() {\r\n\t\tconst draggedId = this._dnd.config.column;\r\n\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\tlet targetIndex: number;\r\n\t\tlet draggedIndex: number;\r\n\t\tlet xBefore: number;\r\n\t\tlet xAfter: number;\r\n\t\tconst currentColumn = { startX: 0, endX: 0 };\r\n\r\n\t\tlet start = 0;\r\n\t\tlet end = columns.length - 1;\r\n\t\tlet compare = (a, b) => a <= b;\r\n\t\tlet next = (index) => ++index;\r\n\t\tif (this.$gantt.config.rtl) {\r\n\t\t\tstart = columns.length - 1;\r\n\t\t\tend = 0;\r\n\t\t\tcompare = (a, b) => a >= b;\r\n\t\t\tnext = (index) => --index;\r\n\t\t}\r\n\r\n\t\tlet columnRelativePos: number;\r\n\r\n\t\tconst relativeX = this._dragX - this.$grid.$grid.getBoundingClientRect().left + this._scrollableGrid.getCorrection();\r\n\t\tfor (let i = start; compare(i, end); i = next(i)) {\r\n\t\t\tif (targetIndex !== undefined && draggedIndex !== undefined) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif(!columns[i].hide) {\r\n\t\t\t\tcurrentColumn.startX = currentColumn.endX;\r\n\t\t\t\tcurrentColumn.endX += columns[i].width;\r\n\r\n\t\t\t\t// if drop on a column or drop after the last column\r\n\t\t\t\tif (relativeX >= currentColumn.startX && (relativeX <= currentColumn.endX || !compare(next(i), end))) {\r\n\t\t\t\t\ttargetIndex = i;\r\n\t\t\t\t\txBefore = currentColumn.startX;\r\n\t\t\t\t\txAfter = currentColumn.endX;\r\n\t\t\t\t\tcolumnRelativePos = (relativeX - currentColumn.startX) / (currentColumn.endX - currentColumn.startX);\r\n\t\t\t\t}\r\n\t\t\t\tif (draggedId === columns[i].name) {\r\n\t\t\t\t\tdraggedIndex = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttargetIndex,\r\n\t\t\tdraggedIndex,\r\n\t\t\txBefore,\r\n\t\t\txAfter,\r\n\t\t\tcolumnRelativePos\r\n\t\t};\r\n\t}\r\n\tsetMarkerPosition(x: number, y: number = 10) {\r\n\t\tconst { marker } = this._dnd.config;\r\n\t\tconst gridOffset = this._dnd._obj.getBoundingClientRect();\r\n\t\tmarker.style.top = `${gridOffset.y + y}px`;\r\n\t\tmarker.style.left = `${x}px`;\r\n\t}\r\n\tcalculateCurrentPosition = (eventX: number) => {\r\n\t\tconst gridBoundingRect = this.$grid.$grid.getBoundingClientRect();\r\n\t\tconst maxLeft = gridBoundingRect.right;\r\n\t\tconst minLeft = gridBoundingRect.left;\r\n\t\tlet x = eventX;\r\n\t\tif (x > maxLeft) {\r\n\t\t\tx = maxLeft;\r\n\t\t}\r\n\t\tif (x < minLeft) {\r\n\t\t\tx = minLeft;\r\n\t\t}\r\n\t\treturn x;\r\n\t};\r\n\tdrawTargetMarker({ targetIndex, draggedIndex, xBefore, xAfter, columnRelativePos }) {\r\n\t\tif (!this._targetMarker) {\r\n\t\t\tthis._targetMarker = document.createElement(\"div\");\r\n\t\t\tdomHelpers.addClassName(this._targetMarker, \"gantt_grid_target_marker\");\r\n\t\t\tthis._targetMarker.style.display = \"none\";\r\n\t\t\tthis._targetMarker.style.height = `${this._gridConfig.scale_height}px`;\r\n\t\t}\r\n\r\n\t\t// marker can be detached after gantt.render\r\n\t\tif(!this._targetMarker.parentNode){\r\n\t\t\tthis.$grid.$grid_scale.appendChild(this._targetMarker);\r\n\t\t}\r\n\r\n\t\tlet nextPosition: number;\r\n\t\tif (targetIndex > draggedIndex) {\r\n\t\t\tnextPosition = xAfter;\r\n\t\t} else if (targetIndex < draggedIndex) {\r\n\t\t\tnextPosition = xBefore;\r\n\t\t} else {\r\n\t\t\tif(columnRelativePos > 0.5){\r\n\t\t\t\tnextPosition = xAfter;\r\n\t\t\t}else{\r\n\t\t\t\tnextPosition = xBefore;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._targetMarker.style.left = `${nextPosition}px`;\r\n\t\tthis._targetMarker.style.display = \"block\";\r\n\t}\r\n\tcleanTargetMarker() {\r\n\t\tif (this._targetMarker && this._targetMarker.parentNode) {\r\n\t\t\tthis.$grid.$grid_scale.removeChild(this._targetMarker);\r\n\t\t}\r\n\t\tthis._targetMarker = null;\r\n\t}\r\n}","function create(gantt){\r\n\tvar events = [];\r\n\r\n\treturn {\r\n\t\tdelegate:function(event, className, handler, root) {\r\n\t\t\tevents.push([event, className, handler, root]);\r\n\r\n\t\t\tvar helper = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\thelper.delegate(event, className, handler, root);\r\n\t\t},\r\n\t\tdestructor: function(){\r\n\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\tfor(var i = 0; i < events.length; i++){\r\n\t\t\t\tvar h = events[i];\r\n\t\t\t\tmouseEvents.detach(h[0], h[1], h[2], h[3]);\r\n\t\t\t}\r\n\t\t\tevents = [];\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default create;","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport eventable from \"../../../utils/eventable\";\r\nimport gridResize from \"./grid_resize\";\r\nimport topPositionMixin from \"../row_position_mixin\";\r\nimport rowResize from \"./task_grid_row_resize\";\r\n\r\nimport ColumnDnd from \"../plugins/column_grid_dnd\";\r\n\r\nimport mouseEventContainer from \"../mouse_event_container\";\r\n\r\nvar Grid = function (parent, config, factory, gantt) {\r\n\tthis.$config = utils.mixin({}, config || {});\r\n\tthis.$gantt = gantt;\r\n\tthis.$parent = parent;\r\n\teventable(this);\r\n\tthis.$state = {};\r\n\tutils.mixin(this, topPositionMixin(this));\r\n};\r\n\r\n\r\nGrid.prototype = {\r\n\tinit: function(container) {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar gridAriaAttr = gantt._waiAria.gridAttrString();\r\n\t\tvar gridDataAriaAttr = gantt._waiAria.gridDataAttrString();\r\n\t\tvar _ganttConfig = this.$getConfig();\r\n\t\tvar reorderColumns = _ganttConfig.reorder_grid_columns || false;\r\n\t\tif (this.$config.reorder_grid_columns !== undefined) {\r\n\t\t\treorderColumns = this.$config.reorder_grid_columns;\r\n\t\t}\r\n\r\n\r\n\t\tcontainer.innerHTML = \"
\";\r\n\t\tthis.$grid = container.childNodes[0];\r\n\r\n\t\tthis.$grid.innerHTML = \"
\";\r\n\r\n\t\tthis.$grid_scale = this.$grid.childNodes[0];\r\n\t\tthis.$grid_data = this.$grid.childNodes[1];\r\n\r\n\t\tvar attr = _ganttConfig[this.$config.bind + \"_attribute\"];\r\n\t\tif (!attr && this.$config.bind) {\r\n\t\t\tattr = \"data-\" + this.$config.bind + \"-id\";\r\n\t\t}\r\n\t\tthis.$config.item_attribute = attr || null;\r\n\r\n\t\tif (!this.$config.layers) {\r\n\t\t\tvar layers = this._createLayerConfig();\r\n\t\t\tthis.$config.layers = layers;\r\n\t\t}\r\n\r\n\t\tvar resizer = gridResize(gantt, this);\r\n\t\tresizer.init();\r\n\t\tthis._renderHeaderResizers = resizer.doOnRender;\r\n\t\tthis._mouseDelegates = mouseEventContainer(gantt);\r\n\r\n\t\tvar resizerrow = rowResize(gantt, this);\r\n\t\tresizerrow.init();\r\n\r\n\t\tthis._addLayers(this.$gantt);\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (reorderColumns) {\r\n\t\t\tthis._columnDND = new ColumnDnd(gantt, this);\r\n\t\t\tthis._columnDND.init();\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t\t//this.refresh();\r\n\t},\r\n\r\n\t_validateColumnWidth: function (column, property) {\r\n\t\t// user can set {name:\"text\", width:\"200\",...} for some reason,\r\n\t\t// check and convert it to number when possible\r\n\t\tvar value = column[property];\r\n\t\tif (value && value != \"*\") {\r\n\t\t\tvar gantt = this.$gantt;\r\n\t\t\tvar numericWidth = value * 1;\r\n\t\t\tif (isNaN(numericWidth)) {\r\n\t\t\t\tgantt.assert(false, \"Wrong \" + property + \" value of column \" + column.name);\r\n\t\t\t} else {\r\n\t\t\t\tcolumn[property] = numericWidth;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tsetSize: function (width, height) {\r\n\t\tthis.$config.width = this.$state.width = width;\r\n\t\tthis.$config.height = this.$state.height = height;\r\n\r\n\t\t// TODO: maybe inherit and override in a subclass instead of extending here\r\n\r\n\t\tvar columns = this.getGridColumns(),\r\n\t\t\tinnerWidth = 0;\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar elasticColumns = config.grid_elastic_columns;\r\n\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tthis._validateColumnWidth(columns[i], \"min_width\");\r\n\t\t\tthis._validateColumnWidth(columns[i], \"max_width\");\r\n\t\t\tthis._validateColumnWidth(columns[i], \"width\");\r\n\r\n\t\t\tinnerWidth += columns[i].width * 1;\r\n\t\t}\r\n\r\n\t\tvar outerWidth;\r\n\t\tif (isNaN(innerWidth) || !this.$config.scrollable) {\r\n\t\t\touterWidth = this._setColumnsWidth(width + 1);\r\n\t\t\tinnerWidth = outerWidth;\r\n\t\t}\r\n\r\n\t\tif(this.$config.scrollable && elasticColumns && !isNaN(innerWidth)){\r\n\t\t\t// GS-1352: Allow resizing the grid columns, then the grid width is increased\r\n\t\t\t// or keep the grid width, but don't allow column resize to affect the grid width\r\n\t\t\tlet columnProperty = \"width\";\r\n\t\t\tif (elasticColumns == \"min_width\"){\r\n\t\t\t\tcolumnProperty = \"min_width\";\r\n\t\t\t}\r\n\t\t\tlet newColumnWidth = 0;\r\n\t\t\tcolumns.forEach(function(col){\r\n\t\t\t\tnewColumnWidth += col[columnProperty] || config.min_grid_column_width;\r\n\t\t\t});\r\n\t\t\t//newColumnWidth--; // the total column width shouldn't match the outerWidth // GS-2190 reducing width seems to be not needed\r\n\t\t\tvar columnsWidth = Math.max(newColumnWidth, width);\r\n\t\t\tinnerWidth = this._setColumnsWidth(columnsWidth);\r\n\t\t\touterWidth = width;\r\n\t\t}\r\n\r\n\t\tif (this.$config.scrollable) {\r\n\t\t\tthis.$grid_scale.style.width = innerWidth + \"px\";\r\n\t\t\tthis.$grid_data.style.width = innerWidth + \"px\";\r\n\t\t} else {\r\n\t\t\tthis.$grid_scale.style.width = \"inherit\";\r\n\t\t\tthis.$grid_data.style.width = \"inherit\";\r\n\t\t}\r\n\t\tthis.$config.width -= 1;\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tif (outerWidth !== width) {\r\n\t\t\tif(outerWidth !== undefined){\r\n\t\t\t\tconfig.grid_width = outerWidth;\r\n\t\t\t\tthis.$config.width = outerWidth - 1;\r\n\t\t\t}else{\r\n\t\t\t\tif(!isNaN(innerWidth)){\r\n\t\t\t\t\tthis._setColumnsWidth(innerWidth);\r\n\t\t\t\t\tconfig.grid_width = innerWidth;\r\n\t\t\t\t\tthis.$config.width = innerWidth - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar dataHeight = Math.max(this.$state.height - config.scale_height, 0);\r\n\t\tthis.$grid_data.style.height = dataHeight + \"px\";\r\n\t\tthis.refresh();\r\n\t},\r\n\tgetSize: function () {\r\n\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tvar store = this.$config.rowStore;\r\n\r\n\t\tvar contentHeight = store ? this.getTotalHeight() : 0,\r\n\t\t\tcontentWidth = this._getGridWidth();\r\n\r\n\t\tvar size = {\r\n\t\t\tx: this.$state.width,\r\n\t\t\ty: this.$state.height,\r\n\t\t\tcontentX: this.isVisible() ? contentWidth : 0,\r\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\r\n\t\t\tscrollHeight: this.isVisible() ? contentHeight : 0,\r\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\r\n\t\t};\r\n\r\n\t\treturn size;\r\n\t},\r\n\r\n\t_bindStore: function () {\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tthis.$config.rowStore = rowStore;\r\n\t\t\tif(rowStore && !rowStore._gridCacheAttached){\r\n\t\t\t\tvar self = this;\r\n\t\t\t\trowStore._gridCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function(){\r\n\t\t\t\t\tself._resetTopPositionHeight();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t_unbindStore: function(){\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tif(rowStore && rowStore._gridCacheAttached){\r\n\t\t\t\trowStore.detachEvent(rowStore._gridCacheAttached);\r\n\t\t\t\trowStore._gridCacheAttached = false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\trefresh: function () {\r\n\t\tthis._bindStore();\r\n\r\n\t\tthis._resetTopPositionHeight();\r\n\t\tthis._resetHeight();\r\n\t\tthis._initSmartRenderingPlaceholder();\r\n\r\n\t\tthis._calculateGridWidth();\r\n\t\tthis._renderGridHeader();\r\n\t},\r\n\r\n\tgetViewPort: function(){\r\n\t\tvar scrollLeft = this.$config.scrollLeft || 0;\r\n\t\tvar scrollTop = this.$config.scrollTop || 0;\r\n\t\tvar height = this.$config.height || 0;\r\n\t\tvar width = this.$config.width || 0;\r\n\t\treturn {\r\n\t\t\ty: scrollTop,\r\n\t\t\ty_end: scrollTop + height,\r\n\t\t\tx: scrollLeft,\r\n\t\t\tx_end: scrollLeft + width,\r\n\t\t\theight: height,\r\n\t\t\twidth: width\r\n\t\t};\r\n\t},\r\n\r\n\tscrollTo: function (left, top) {\r\n\t\tif (!this.isVisible())\r\n\t\t\treturn;\r\n\r\n\t\tvar scrolled = false;\r\n\r\n\t\tthis.$config.scrollTop = this.$config.scrollTop || 0;\r\n\t\tthis.$config.scrollLeft = this.$config.scrollLeft || 0;\r\n\r\n\t\tif (left * 1 == left) {\r\n\t\t\tthis.$config.scrollLeft = this.$state.scrollLeft = this.$grid.scrollLeft = left;\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\r\n\t\t// var config = this.$getConfig();\r\n\t\tif (top * 1 == top) {\r\n\t\t\tthis.$config.scrollTop = this.$state.scrollTop = this.$grid_data.scrollTop = top;\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\r\n\t\tif(scrolled){\r\n\t\t\tthis.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\r\n\t\t}\r\n\t},\r\n\r\n\tgetColumnIndex: function (name, excludeHidden) {\r\n\t\tvar columns = this.$getConfig().columns;\r\n\t\tvar hiddenIndexShift = 0;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\t// GS-1257. If the cell is hidden, the target column index should be correct\r\n\t\t\tif (excludeHidden && columns[i].hide){\r\n\t\t\t\thiddenIndexShift++;\r\n\t\t\t}\r\n\t\t\tif (columns[i].name == name) {\r\n\t\t\t\treturn i - hiddenIndexShift;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\tgetColumn: function (name) {\r\n\t\tvar index = this.getColumnIndex(name);\r\n\t\tif (index === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.$getConfig().columns[index];\r\n\t},\r\n\r\n\tgetGridColumns: function () {\r\n\t\tvar config = this.$getConfig();\r\n\t\treturn config.columns.slice();\r\n\t},\r\n\tisVisible: function () {\r\n\t\tif (this.$parent && this.$parent.$config) {\r\n\t\t\treturn !this.$parent.$config.hidden;\r\n\t\t} else {\r\n\t\t\treturn this.$grid.offsetWidth;\r\n\t\t}\r\n\t},\r\n\r\n\t// getItemHeight: function () {\r\n\t// \tvar config = this.$getConfig();\r\n\t// \treturn config.row_height;\r\n\t// },\r\n\r\n\t_createLayerConfig: function () {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar self = this;\r\n\t\tvar layers = [\r\n\t\t\t{\r\n\t\t\t\trenderer: gantt.$ui.layers.gridLine(),\r\n\t\t\t\tcontainer: this.$grid_data,\r\n\t\t\t\tfilter: [function () {\r\n\t\t\t\t\treturn self.isVisible();\r\n\t\t\t\t}]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\trenderer: gantt.$ui.layers.gridTaskRowResizer(),\r\n\t\t\t\tcontainer: this.$grid_data,\r\n\t\t\t\tappend: true,\r\n\t\t\t\tfilter: [function () {\r\n\t\t\t\t\treturn gantt.config.resize_rows;\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t];\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t_addLayers: function (gantt) {\r\n\t\tif (!this.$config.bind)\r\n\t\t\treturn;\r\n\r\n\t\tthis._taskLayers = [];\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\r\n\t\tif (!taskRenderer) {\r\n\t\t\ttaskRenderer = layers.createDataRender({\r\n\t\t\t\tname: this.$config.bind,\r\n\t\t\t\tdefaultContainer: function () { return self.$grid_data; }\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar taskLayers = this.$config.layers;\r\n\t\tfor (var i = 0; taskLayers && i < taskLayers.length; i++) {\r\n\t\t\tvar layer = taskLayers[i];\r\n\t\t\tlayer.view = this;\r\n\r\n\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\r\n\t\t\tthis._taskLayers.push(bar_layer);\r\n\t\t}\r\n\r\n\t\tthis._bindStore();\r\n\r\n\t\tthis._initSmartRenderingPlaceholder();\r\n\t},\r\n\r\n\t_refreshPlaceholderOnStoreUpdate: function (id) {\r\n\t\tvar config = this.$getConfig(),\r\n\t\t\tstore = this.$config.rowStore;\r\n\r\n\t\tif (!store || id !== null || !this.isVisible() || !config.smart_rendering) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar contentHeight;\r\n\t\tif (this.$config.scrollY) {\r\n\t\t\tvar scroll = this.$gantt.$ui.getView(this.$config.scrollY);\r\n\t\t\tif (scroll)\r\n\t\t\t\tcontentHeight = scroll.getScrollState().scrollSize;\r\n\t\t}\r\n\r\n\t\tif (!contentHeight) {\r\n\t\t\tcontentHeight = store ? this.getTotalHeight() : 0;\r\n\t\t}\r\n\r\n\t\tif (contentHeight) {\r\n\t\t\tif (this.$rowsPlaceholder && this.$rowsPlaceholder.parentNode) {\r\n\t\t\t\tthis.$rowsPlaceholder.parentNode.removeChild(this.$rowsPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tvar placeholder = this.$rowsPlaceholder = document.createElement(\"div\");\r\n\t\t\tplaceholder.style.visibility = \"hidden\";\r\n\t\t\tplaceholder.style.height = contentHeight + \"px\";\r\n\t\t\tplaceholder.style.width = \"1px\";\r\n\t\t\tthis.$grid_data.appendChild(placeholder);\r\n\t\t}\r\n\t},\r\n\r\n\t_initSmartRenderingPlaceholder: function () {\r\n\t\tvar store = this.$config.rowStore;\r\n\t\tif (!store) {\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tthis._initSmartRenderingPlaceholder = function () { };\r\n\t\t}\r\n\t\tthis._staticBgHandler = store.attachEvent(\"onStoreUpdated\", utils.bind(this._refreshPlaceholderOnStoreUpdate, this));\r\n\t},\r\n\r\n\t_initEvents: function () {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_close\", gantt.bind(function (e, id, trg) {\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tif (!store) return true;\r\n\r\n\t\t\tvar target = domHelpers.locateAttribute(e, this.$config.item_attribute);\r\n\t\t\tif (target) {\r\n\t\t\t\tstore.close(target.getAttribute(this.$config.item_attribute));\r\n\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}, this), this.$grid);\r\n\r\n\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_open\", gantt.bind(function (e, id, trg) {\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tif (!store) return true;\r\n\r\n\t\t\tvar target = domHelpers.locateAttribute(e, this.$config.item_attribute);\r\n\t\t\tif (target) {\r\n\t\t\t\tstore.open(target.getAttribute(this.$config.item_attribute));\r\n\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}, this), this.$grid);\r\n\t},\r\n\r\n\t_clearLayers: function (gantt) {\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\r\n\t\tif (this._taskLayers) {\r\n\t\t\tfor (var i = 0; i < this._taskLayers.length; i++) {\r\n\t\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._taskLayers = [];\r\n\t},\r\n\r\n\t_getColumnWidth: function (column, config, width) {\r\n\t\tvar min_width = column.min_width || config.min_grid_column_width;\r\n\t\tvar new_width = Math.max(width, min_width || 10);\r\n\t\tif (column.max_width)\r\n\t\t\tnew_width = Math.min(new_width, column.max_width);\r\n\t\treturn new_width;\r\n\t},\r\n\t// set min width only if width < than config.min_grid_column_width\r\n\t_checkGridColumnMinWidthLimits: function (columns, config) {\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tvar width = columns[i].width * 1;\r\n\t\t\tif (!columns[i].min_width && width < config.min_grid_column_width){\r\n\t\t\t\tcolumns[i].min_width = width;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t// return min and max possible grid width according to restricts\r\n\t_getGridWidthLimits: function () {\r\n\t\tvar config = this.$getConfig(),\r\n\t\t\tcolumns = this.getGridColumns(),\r\n\t\t\tmin_limit = 0,\r\n\t\t\tmax_limit = 0;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tmin_limit += columns[i].min_width ? columns[i].min_width : config.min_grid_column_width;\r\n\t\t\tif (max_limit !== undefined) {\r\n\t\t\t\tmax_limit = columns[i].max_width ? (max_limit + columns[i].max_width) : undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._checkGridColumnMinWidthLimits(columns, config); // FIX ME: should it be before calculating limits?\r\n\t\treturn [min_limit, max_limit];\r\n\t},\r\n\t// resize columns to get total newWidth, starting from columns[start_index]\r\n\t_setColumnsWidth: function (newWidth, start_index) {\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar columns = this.getGridColumns(),\r\n\t\t\tcolumns_width = 0,\r\n\t\t\tfinal_width = newWidth;\r\n\r\n\t\tstart_index = !window.isNaN(start_index) ? start_index : -1;\r\n\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tcolumns_width += columns[i].width * 1;\r\n\t\t}\r\n\r\n\t\tif (window.isNaN(columns_width)) {\r\n\t\t\tthis._calculateGridWidth();\r\n\t\t\tcolumns_width = 0;\r\n\t\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\t\tcolumns_width += columns[i].width * 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar extra_width = final_width - columns_width;\r\n\r\n\t\tvar start_width = 0;\r\n\t\tfor (var i = 0; i < start_index + 1; i++) {\r\n\t\t\tstart_width += columns[i].width;\r\n\t\t}\r\n\r\n\t\tcolumns_width -= start_width;\r\n\r\n\t\tfor (var i = start_index + 1; i < columns.length; i++) {\r\n\r\n\t\t\tvar col = columns[i];\r\n\t\t\tvar share = Math.round(extra_width * (col.width / columns_width));\r\n\r\n\t\t\t// columns have 2 additional restrict fields - min_width & max_width that are set by user\r\n\t\t\tif (extra_width < 0) {\r\n\t\t\t\tif (col.min_width && col.width + share < col.min_width)\r\n\t\t\t\t\tshare = col.min_width - col.width;\r\n\t\t\t\telse if (!col.min_width && config.min_grid_column_width && col.width + share < config.min_grid_column_width)\r\n\t\t\t\t\tshare = config.min_grid_column_width - col.width;\r\n\t\t\t} else if (col.max_width && col.width + share > col.max_width)\r\n\t\t\t\tshare = col.max_width - col.width;\r\n\r\n\t\t\tcolumns_width -= col.width;\r\n\t\t\tcol.width += share;\r\n\t\t\textra_width -= share;\r\n\r\n\t\t}\r\n\r\n\t\tvar iterator = extra_width > 0 ? 1 : -1;\r\n\t\twhile ((extra_width > 0 && iterator === 1) || (extra_width < 0 && iterator === -1)) {\r\n\t\t\tvar curExtra = extra_width;\r\n\t\t\tfor (i = start_index + 1; i < columns.length; i++) {\r\n\t\t\t\tvar new_width = columns[i].width + iterator;\r\n\r\n\t\t\t\tif (new_width == this._getColumnWidth(columns[i], config, new_width)) {\r\n\t\t\t\t\textra_width -= iterator;\r\n\t\t\t\t\tcolumns[i].width = new_width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!extra_width)\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif (curExtra == extra_width)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t// if impossible to resize the right-side columns, resize the start column\r\n\t\tif (extra_width && start_index > -1) {\r\n\t\t\tvar new_width = columns[start_index].width + extra_width;\r\n\t\t\tif (new_width == this._getColumnWidth(columns[start_index], config, new_width))\r\n\t\t\t\tcolumns[start_index].width = new_width;\r\n\t\t}\r\n\r\n\t\t//if (this.callEvent(\"onGridResizeEnd\", [config.grid_width, final_width]) === false)\r\n\t\t//\treturn;\r\n\r\n\t\treturn this._getColsTotalWidth();\r\n\t},\r\n\r\n\t_getColsTotalWidth: function () {\r\n\t\tvar columns = this.getGridColumns();\r\n\t\tvar cols_width = 0;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar v = parseFloat(columns[i].width);\r\n\t\t\tif (window.isNaN(v)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tcols_width += v;\r\n\t\t}\r\n\t\treturn cols_width;\r\n\t},\r\n\t_calculateGridWidth: function () {\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar columns = this.getGridColumns();\r\n\t\tvar cols_width = 0;\r\n\t\tvar unknown = [];\r\n\t\tvar width = [];\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar v = parseFloat(columns[i].width);\r\n\t\t\tif (window.isNaN(v)) {\r\n\t\t\t\tv = config.min_grid_column_width || 10;\r\n\t\t\t\tunknown.push(i);\r\n\t\t\t}\r\n\t\t\twidth[i] = v;\r\n\t\t\tcols_width += v;\r\n\t\t}\r\n\t\tvar gridWidth = this._getGridWidth() + 1;\r\n\t\tif (config.autofit || unknown.length) {\r\n\t\t\tvar diff = gridWidth - cols_width;\r\n\t\t\t// TODO: logic may be improved for proportional changing of width\r\n\r\n\t\t\t// autofit adjusts columns widths to the outer grid width\r\n\t\t\t// it doesn't makes sense if grid has inner scroll with elastic columns\r\n\t\t\tif (config.autofit && !config.grid_elastic_columns) {\r\n\t\t\t\t// delta must be added for all columns\r\n\t\t\t\tfor (var i = 0; i < width.length; i++) {\r\n\t\t\t\t\tvar delta = Math.round(diff / (width.length - i));\r\n\t\t\t\t\twidth[i] += delta;\r\n\t\t\t\t\tvar new_width = this._getColumnWidth(columns[i], config, width[i]);\r\n\r\n\t\t\t\t\tif (new_width != width[i]) {\r\n\t\t\t\t\t\tdelta = new_width - width[i];\r\n\t\t\t\t\t\twidth[i] = new_width;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdiff -= delta;\r\n\t\t\t\t}\r\n\t\t\t} else if (unknown.length) {\r\n\t\t\t\t// there are several columns with undefined width\r\n\t\t\t\tfor (var i = 0; i < unknown.length; i++) {\r\n\t\t\t\t\tvar delta = Math.round(diff / (unknown.length - i)); // no float values, just integer\r\n\t\t\t\t\tvar index = unknown[i];\r\n\t\t\t\t\twidth[index] += delta;\r\n\t\t\t\t\tvar new_width = this._getColumnWidth(columns[index], config, width[index]);\r\n\t\t\t\t\tif (new_width != width[index]) {\r\n\t\t\t\t\t\tdelta = new_width - width[index];\r\n\t\t\t\t\t\twidth[index] = new_width;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdiff -= delta;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = 0; i < width.length; i++) {\r\n\t\t\t\tcolumns[i].width = width[i];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar changed = (gridWidth != cols_width);\r\n\t\t\tthis.$config.width = cols_width - 1;\r\n\t\t\tconfig.grid_width = cols_width;\r\n\t\t\tif (changed) {\r\n\t\t\t\tthis.$parent._setContentSize(this.$config.width, null);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_renderGridHeader: function () {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar locale = this.$gantt.locale;\r\n\t\tvar templates = this.$gantt.templates;\r\n\r\n\t\tvar columns = this.getGridColumns();\r\n\t\tif (config.rtl) {\r\n\t\t\tcolumns = columns.reverse();\r\n\t\t}\r\n\t\tvar cells = [];\r\n\t\tvar width = 0,\r\n\t\t\tlabels = locale.labels;\r\n\r\n\t\tvar lineHeigth = config.scale_height - 1;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar last = i == columns.length - 1;\r\n\t\t\tvar col = columns[i];\r\n\r\n\t\t\t// ensure columns have non-empty names\r\n\t\t\tif (!col.name) {\r\n\t\t\t\tcol.name = gantt.uid() + \"\";\r\n\t\t\t}\r\n\r\n\t\t\tvar colWidth = col.width * 1;\r\n\r\n\t\t\tvar gridWidth = this._getGridWidth();\r\n\t\t\tif (last && gridWidth > width + colWidth)\r\n\t\t\t\tcol.width = colWidth = gridWidth - width;\r\n\t\t\twidth += colWidth;\r\n\t\t\tvar sort = (gantt._sort && col.name == gantt._sort.name) ? (`
`) : \"\";\r\n\t\t\tvar cssClass = [\"gantt_grid_head_cell\",\r\n\t\t\t\t(\"gantt_grid_head_\" + col.name),\r\n\t\t\t\t(last ? \"gantt_last_cell\" : \"\"),\r\n\t\t\t\ttemplates.grid_header_class(col.name, col)].join(\" \");\r\n\r\n\t\t\tvar style = \"width:\" + (colWidth - (last ? 1 : 0)) + \"px;\";\r\n\t\t\tvar label = (col.label || labels[\"column_\" + col.name] || labels[col.name]);\r\n\t\t\tlabel = label || \"\";\r\n\r\n\t\t\tvar ariaAttrs = gantt._waiAria.gridScaleCellAttrString(col, label);\r\n\r\n\t\t\tvar cell = \"\" + label + sort + \"
\";\r\n\t\t\tcells.push(cell);\r\n\t\t}\r\n\t\tthis.$grid_scale.style.height = (config.scale_height) + \"px\";\r\n\t\tthis.$grid_scale.style.lineHeight = lineHeigth + \"px\";\r\n\t\t//this.$grid_scale.style.width = \"inherit\";\r\n\t\tthis.$grid_scale.innerHTML = cells.join(\"\");\r\n\r\n\t\tif (this._renderHeaderResizers) {\r\n\t\t\tthis._renderHeaderResizers();\r\n\t\t}\r\n\t},\r\n\r\n\t_getGridWidth: function () {\r\n\t\t// TODO: refactor/remove/comment some of _getGridWidth/this.$config.width/this.$state.width, it's not clear what they do\r\n\t\treturn this.$config.width;\r\n\t},\r\n\r\n\tdestructor: function () {\r\n\t\tthis._clearLayers(this.$gantt);\r\n\t\tif (this._mouseDelegates) {\r\n\t\t\tthis._mouseDelegates.destructor();\r\n\t\t\tthis._mouseDelegates = null;\r\n\t\t}\r\n\t\tthis._unbindStore();\r\n\t\tthis.$grid = null;\r\n\t\tthis.$grid_scale = null;\r\n\t\tthis.$grid_data = null;\r\n\t\tthis.$gantt = null;\r\n\t\tif (this.$config.rowStore) {\r\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\r\n\t\t\tthis.$config.rowStore = null;\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\t}\r\n};\r\n\r\nexport default Grid;\r\n","function createResizer(gantt, grid){\r\n\treturn {\r\n\t\tinit: function(){},\r\n\t\tdoOnRender: function(){}\r\n\t};\r\n}\r\n\r\nexport default createResizer;","import * as domHelpers from \"../utils/dom_helpers\";\r\n\r\nfunction createRowResizer(gantt, grid){\r\n\r\n\tvar _task_grid_row_resize = {\r\n\t\trow_before_start: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar store = grid.$config.rowStore;\r\n\r\n\t\t\tvar el = domHelpers.locateAttribute(e, config.task_grid_row_resizer_attribute);\r\n\t\t\tif (!el) return false;\r\n\r\n\t\t\tvar row_id = this.locate(e, config.task_grid_row_resizer_attribute),\r\n\t\t\t\trow = store.getItem(row_id);\r\n\r\n\t\t\tif (grid.callEvent(\"onBeforeRowResize\", [row]) === false)\r\n\t\t\t\treturn false;\r\n\t\t}, gantt),\r\n\r\n\t\trow_after_start: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\r\n\t\t\tvar row_id = this.locate(e, config.task_grid_row_resizer_attribute);\r\n\t\t\tdnd.config.marker.innerHTML = \"\";\r\n\r\n\t\t\tdnd.config.marker.className += \" gantt_row_grid_resize_area\";\r\n\t\t\tdnd.config.marker.style.width = grid.$grid.offsetWidth + \"px\";\r\n\t\t\tdnd.config.drag_id = row_id;\r\n\r\n\t\t}, gantt),\r\n\r\n\t\trow_drag_move: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar store = grid.$config.rowStore;\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar dd = dnd.config;\r\n\t\t\tvar id = dd.drag_id,\r\n\t\t\t\titemHeight = grid.getItemHeight(id),\r\n\t\t\t\titemTop = grid.getItemTop(id) - obj.scrollTop;\r\n\t\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data),\r\n\t\t\t\tpointerPosition = parseInt(dd.marker.style.top, 10),\r\n\t\t\t\tmarkerStartPosition = itemTop + pos.y,\r\n\t\t\t\tmarker_height = 0,\r\n\t\t\t\tminPointerPosition = config.min_task_grid_row_height;\r\n\r\n\t\t\tmarker_height = pointerPosition - markerStartPosition;\r\n\t\t\tif(marker_height < minPointerPosition){\r\n\t\t\t\tmarker_height = minPointerPosition;\r\n\t\t\t}\r\n\r\n\t\t\tdd.marker.style.left = pos.x + \"px\";\r\n\t\t\tdd.marker.style.top = markerStartPosition - 1 + \"px\";\r\n\t\t\tdd.marker.style.height = Math.abs(marker_height) + 1 + \"px\";\r\n\r\n\t\t\tdd.marker_height = marker_height;\r\n\t\t\t\r\n\t\t\tgrid.callEvent(\"onRowResize\", [id, store.getItem(id), marker_height + itemHeight]);\r\n\t\t\treturn true;\r\n\t\t}, gantt),\r\n\r\n\t\trow_drag_end: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar store = grid.$config.rowStore;\r\n\t\t\tvar dd = dnd.config;\r\n\t\t\tvar id = dd.drag_id,\r\n\t\t\t\titem = store.getItem(id),\r\n\t\t\t\toldItemHeight = grid.getItemHeight(id);\r\n\r\n\t\t\tvar finalHeight = dd.marker_height;\r\n\r\n\t\t\tif (grid.callEvent(\"onBeforeRowResizeEnd\", [id, item, finalHeight]) === false)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (item.row_height == finalHeight)\r\n\t\t\t\treturn;\r\n\r\n\t\t\titem.row_height = finalHeight;\r\n\t\t\tgantt.updateTask(id);\r\n\r\n\t\t\tgrid.callEvent(\"onAfterRowResize\", [id, item, oldItemHeight, finalHeight]);\r\n\r\n\t\t\tthis.render();\r\n\t\t}, gantt)\r\n\t};\r\n\r\n\t// calls the initialization of the D'n'D events for resize elements\r\n\tvar _init_resize = function () {\r\n\r\n\t\tvar DnD = gantt.$services.getService(\"dnd\");\r\n\r\n\t\tvar config = grid.$getConfig();\r\n\r\n\t\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\r\n\t\tif (gantt.defined(config.dnd_sensitivity))\r\n\t\t\tdnd.config.sensitivity = config.dnd_sensitivity;\r\n\r\n\t\tdnd.attachEvent(\"onBeforeDragStart\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_before_start(dnd, obj, e);\r\n\t\t});\r\n\t\tdnd.attachEvent(\"onAfterDragStart\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_after_start(dnd, obj, e);\r\n\t\t});\r\n\t\tdnd.attachEvent(\"onDragMove\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_drag_move(dnd, obj, e);\r\n\t\t});\r\n\t\tdnd.attachEvent(\"onDragEnd\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_drag_end(dnd, obj, e);\r\n\t\t});\r\n\r\n\t};\r\n\r\n\treturn {\r\n\t\tinit: _init_resize\r\n\t};\r\n}\r\n\r\nexport default createRowResizer;","export default {\r\n\tinit: function (controller, grid) {\r\n\t\tvar gantt = grid.$gantt;\r\n\r\n\t\tgantt.attachEvent(\"onTaskClick\", function (id, e) {\r\n\t\t\tif (gantt._is_icon_open_click(e))\r\n\t\t\t\treturn true;\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\r\n\t\t\tif (cell && controller.getEditorConfig(cell.columnName)) {\r\n\t\t\t\tif (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {\r\n\t\t\t\t\t// do nothing if editor is already active in this cell\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onEmptyClick\", function () {\r\n\t\t\tif (controller.isVisible() && controller.isChanged()) {\r\n\t\t\t\tcontroller.save();\r\n\t\t\t} else {\r\n\t\t\t\tcontroller.hide();\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onTaskDblClick\", function (id, e) {\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\t\t\tif (cell && controller.isVisible() && cell.columnName == state.columnName) {\r\n\t\t\t\t//GS-933 probably, we don't need to hide the inline editor because the lightbox cannot be opened if you double-click on an inline editor\r\n\t\t\t\t//remove this code later if people don't complain\r\n\t\t\t\t//controller.hide();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\t},\r\n\r\n\tonShow: function (controller, placeholder, grid) {\r\n\t\tvar gantt = grid.$gantt;\r\n\t\t\r\n\r\n\t\tif(gantt.ext && gantt.ext.keyboardNavigation){\r\n\t\t\tvar keyNav = gantt.ext.keyboardNavigation;\r\n\t\t\tkeyNav.attachEvent(\"onKeyDown\", function(command, e){\r\n\t\t\t\tvar keyboard = gantt.constants.KEY_CODES;\r\n\t\t\t\tvar keyCode = e.keyCode;\r\n\t\t\t\tvar preventKeyNav = false;\r\n\r\n\t\t\t\tswitch (keyCode){\r\n\t\t\t\t\tcase keyboard.SPACE:\r\n\t\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (preventKeyNav){\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tplaceholder.onkeydown = function (e) {\r\n\t\t\te = e || window.event;\r\n\r\n\t\t\tvar keyboard = gantt.constants.KEY_CODES;\r\n\t\t\tif (e.defaultPrevented || (e.shiftKey && e.keyCode != keyboard.TAB)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar shouldPrevent = true;\r\n\t\t\tswitch (e.keyCode) {\r\n\t\t\t\tcase gantt.keys.edit_save:\r\n\t\t\t\t\tcontroller.save();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase gantt.keys.edit_cancel:\r\n\t\t\t\t\tcontroller.hide();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.UP:\r\n\t\t\t\tcase keyboard.DOWN:\r\n\t\t\t\t\tif (controller.isVisible()) {\r\n\t\t\t\t\t\tcontroller.hide();\r\n\t\t\t\t\t\tshouldPrevent = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.TAB:\r\n\t\t\t\t\tif (e.shiftKey) {\r\n\t\t\t\t\t\tcontroller.editPrevCell(true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontroller.editNextCell(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tshouldPrevent = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (shouldPrevent) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t};\r\n\t},\r\n\tonHide: function () {\r\n\r\n\t},\r\n\r\n\tdestroy: function () {\r\n\r\n\t}\r\n};\r\n\r\n","export default {\r\n\tinit: function(controller, grid){\r\n\t\tvar self = controller;\r\n\t\tvar gantt = grid.$gantt;\r\n\r\n\t\tvar onBlurDelay = null;\r\n\t\tvar keyNav = gantt.ext.keyboardNavigation;\r\n\t\tkeyNav.attachEvent(\"onBeforeFocus\", function (node) {\r\n\t\t\tvar activeCell = controller.locateCell(node);\r\n\t\t\tclearTimeout(onBlurDelay);\r\n\t\t\tif (activeCell) {\r\n\t\t\t\tvar columnName = activeCell.columnName;\r\n\t\t\t\tvar id = activeCell.id;\r\n\r\n\t\t\t\tvar editorState = self.getState();\r\n\t\t\t\tif(self.isVisible()){\r\n\t\t\t\t\tif(editorState.id == id && editorState.columnName === columnName) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tkeyNav.attachEvent(\"onFocus\", function (node) {\r\n\t\t\tvar activeCell = controller.locateCell(node);\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tclearTimeout(onBlurDelay);\r\n\t\t\tif (activeCell && !(activeCell.id == state.id && activeCell.columnName == state.columnName)) {\r\n\t\t\t\tif(self.isVisible()){\r\n\t\t\t\t\tself.save();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tcontroller.attachEvent(\"onHide\", function(){\r\n\t\t\tclearTimeout(onBlurDelay);\r\n\t\t});\r\n\r\n\t\tkeyNav.attachEvent(\"onBlur\", function () {\r\n\t\t\tonBlurDelay = setTimeout(function(){\r\n\t\t\t\tself.save();\r\n\t\t\t});\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onTaskDblClick\", function(id,e){\r\n\t\t\t// block lightbox on double click inside editor\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\t\t\tif(cell && controller.isVisible() && cell.columnName == state.columnName){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onTaskClick\", function (id, e) {\r\n\t\t\tif(gantt._is_icon_open_click(e))\r\n\t\t\t\treturn true;\r\n\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\r\n\t\t\tif (cell && controller.getEditorConfig(cell.columnName)) {\r\n\t\t\t\tif(controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName){\r\n\t\t\t\t\t// do nothing if editor is already active in this cell\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onEmptyClick\", function () {\r\n\t\t\tself.save();\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tkeyNav.attachEvent(\"onKeyDown\", function(command, e){\r\n\t\t\tvar activeCell = controller.locateCell(e.target);\r\n\t\t\tvar hasEditor = activeCell ? controller.getEditorConfig(activeCell.columnName) : false;\r\n\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar keyboard = gantt.constants.KEY_CODES;\r\n\t\t\tvar keyCode = e.keyCode;\r\n\t\t\tvar preventKeyNav = false;\r\n\r\n\t\t\tswitch (keyCode){\r\n\t\t\t\tcase keyboard.ENTER:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\tcontroller.save();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}else if(hasEditor && !(e.ctrlKey || e.metaKey || e.shiftKey)){\r\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.ESC:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\tcontroller.hide();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.UP:\r\n\t\t\t\tcase keyboard.DOWN:\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.LEFT:\r\n\t\t\t\tcase keyboard.RIGHT:\r\n\t\t\t\t\tif((hasEditor && controller.isVisible()) || state.editorType === \"date\"){\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.SPACE:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(hasEditor && !controller.isVisible()){\r\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.DELETE:\r\n\t\t\t\t\tif(hasEditor && !controller.isVisible()){\r\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t} else if(hasEditor && controller.isVisible()){\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.TAB:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tcontroller.editPrevCell(true);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tcontroller.editNextCell(true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar newState = controller.getState();\r\n\t\t\t\t\t\tif(newState.id){\r\n\t\t\t\t\t\t\tkeyNav.focus({type:\"taskCell\", id: newState.id, column:newState.columnName});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif(controller.isVisible())\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\telse{\r\n\r\n\t\t\t\t\t\t// start editing on character key\r\n\t\t\t\t\t\tif((keyCode >= 48 && keyCode <= 57) || // [0-9]\r\n\t\t\t\t\t\t\t(keyCode > 95 && keyCode < 112) || // numpad\r\n\t\t\t\t\t\t\t(keyCode >= 64 && keyCode <= 91) || // [a-z]\r\n\t\t\t\t\t\t\t(keyCode > 185 && keyCode < 193) || //;=-,etc\r\n\t\t\t\t\t\t\t(keyCode > 218 && keyCode < 223)\r\n\t\t\t\t\t\t){\r\n\t\t\t\t\t\t\tvar modifiers = command.modifiers;\r\n\r\n\t\t\t\t\t\t\tvar anyModifier = modifiers.alt || modifiers.ctrl || modifiers.meta || modifiers.shift;\r\n\t\t\t\t\t\t\tif(modifiers.alt){\r\n\t\t\t\t\t\t\t\t// don't start editing on alt+key\r\n\t\t\t\t\t\t\t}else if (anyModifier && keyNav.getCommandHandler(command, \"taskCell\")){\r\n\t\t\t\t\t\t\t\t// don't start editing if command already have a keyboard shortcut\r\n\t\t\t\t\t\t\t}else if(hasEditor && !controller.isVisible()){\r\n\t\t\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (preventKeyNav){\r\n\t\t\t\treturn false;\r\n\t\t\t} else{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t},\r\n\tonShow: function(controller, placeholder, grid){},\r\n\tonHide: function(controller, placeholder, grid){\r\n\t\tconst gantt = grid.$gantt;\r\n\t\tif (gantt){\r\n\t\t\tgantt.focus();\r\n\t\t}\r\n\r\n\t},\r\n\tdestroy: function(){}\r\n};\r\n\r\n","export default function (gantt) {\r\n\r\n\tvar BaseEditor = function () {\r\n\t};\r\n\r\n\tBaseEditor.prototype = {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t},\r\n\t\thide: function () {\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tthis.get_input(node).value = value;\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn this.get_input(node).value || \"\";\r\n\t\t},\r\n\t\tis_changed: function (value, id, column, node) {\r\n\t\t\tvar currentValue = this.get_value(id, column, node);\r\n\t\t\tif (currentValue && value && currentValue.valueOf && value.valueOf) {\r\n\t\t\t\treturn currentValue.valueOf() != value.valueOf();\r\n\t\t\t} else {\r\n\t\t\t\treturn currentValue != value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tis_valid: function (value, id, column, node) {\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\tsave: function (id, column, node) {\r\n\r\n\t\t},\r\n\t\tget_input: function (node) {\r\n\t\t\treturn node.querySelector(\"input\");\r\n\t\t},\r\n\t\tfocus: function (node) {\r\n\t\t\tvar input = this.get_input(node);\r\n\t\t\tif (!input) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (input.focus) {\r\n\t\t\t\tinput.focus();\r\n\t\t\t}\r\n\r\n\t\t\tif (input.select) {\r\n\t\t\t\tinput.select();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn BaseEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction TextEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TextEditor, BaseEditor);\r\n\r\n\tutils.mixin(TextEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn TextEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction NumberEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(NumberEditor, BaseEditor);\r\n\r\n\tutils.mixin(NumberEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar min = config.min || 0,\r\n\t\t\t\tmax = config.max || 100;\r\n\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\r\n\t\t\t// GS-1914. Do not allow entering alues beyond min and max via keyboard\r\n\t\t\tplaceholder.oninput = function (e) {\r\n\t\t\t\tif (+e.target.value < min) {\r\n\t\t\t\t\te.target.value = min;\r\n\t\t\t\t}\r\n\t\t\t\tif (+e.target.value > max) {\r\n\t\t\t\t\te.target.value = max;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn this.get_input(node).value || \"\";\r\n\t\t},\r\n\t\tis_valid: function (value, id, column, node) {\r\n\t\t\treturn !isNaN(parseInt(value, 10));\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn NumberEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction SelectEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(SelectEditor, BaseEditor);\r\n\r\n\tutils.mixin(SelectEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = ``;\r\n\t\t\tvar optionsHtml = [],\r\n\t\t\t\toptions = config.options || [];\r\n\r\n\t\t\tfor (var i = 0; i < options.length; i++) {\r\n\t\t\t\toptionsHtml.push(\"\" + options[i].label + \" \");\r\n\t\t\t}\r\n\r\n\t\t\thtml += optionsHtml.join(\"\") + \"
\";\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t},\r\n\t\tget_input: function (node) {\r\n\t\t\treturn node.querySelector(\"select\");\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn SelectEditor;\r\n};","import * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\nimport BaseFactory from \"./base\";\r\n\r\nexport default function (gantt) {\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\t\r\n\t\r\n\r\n\tvar html5DateFormat = \"%Y-%m-%d\";\r\n\r\n\tvar dateToStr = null;\r\n\tvar strToDate = null;\r\n\r\n\tfunction init() {\r\n\t\tif (!dateToStr) {\r\n\t\t\tdateToStr = gantt.date.date_to_str(html5DateFormat);\r\n\t\t}\r\n\t\tif (!strToDate) {\r\n\t\t\tstrToDate = gantt.date.str_to_date(html5DateFormat);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction DateEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(DateEditor, BaseEditor);\r\n\r\n\tutils.mixin(DateEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tinit();\r\n\t\t\tvar minValue = null;\r\n\t\t\tvar maxValue = null;\r\n\r\n\t\t\tif(typeof config.min === \"function\"){\r\n\t\t\t\tminValue = config.min(id, column);\r\n\t\t\t}else{\r\n\t\t\t\tminValue = config.min;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.max === \"function\"){\r\n\t\t\t\tmaxValue = config.max(id, column);\r\n\t\t\t}else{\r\n\t\t\t\tmaxValue = config.max;\r\n\t\t\t}\r\n\r\n\t\t\tvar minAttr = minValue ? \" min='\" + dateToStr(minValue)+\"' \" : \"\";\r\n\t\t\tvar maxAttr = maxValue ? \" max='\" + dateToStr(maxValue)+\"' \" : \"\";\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\r\n\t\t\t// GS-1914. Do not allow entering alues beyond min and max via keyboard\r\n\t\t\tplaceholder.oninput = function (e) {\r\n\t\t\t\tif (+gantt.date.str_to_date(\"%Y-%m-%d\")(e.target.value) < +minValue) {\r\n\t\t\t\t\te.target.value = gantt.date.date_to_str(\"%Y-%m-%d\")(minValue);\r\n\t\t\t\t}\r\n\t\t\t\tif (+gantt.date.str_to_date(\"%Y-%m-%d\")(e.target.value) > +maxValue) {\r\n\t\t\t\t\te.target.value = gantt.date.date_to_str(\"%Y-%m-%d\")(maxValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tif (value && value.getFullYear) {\r\n\t\t\t\tthis.get_input(node).value = dateToStr(value);\r\n\t\t\t} else {\r\n\t\t\t\tthis.get_input(node).value = value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tis_valid: function (value, id, column, node) {\r\n\t\t\tif (!value || isNaN(value.getTime()))\r\n\t\t\t\treturn false;\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\tvar parsed;\r\n\t\t\ttry {\r\n\t\t\t\tparsed = strToDate(this.get_input(node).value || \"\");\r\n\t\t\t} catch (e) {\r\n\t\t\t\tparsed = null;// return null will cancel changes\r\n\t\t\t}\r\n\r\n\t\t\treturn parsed;\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn DateEditor;\r\n};\r\n","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction PredecessorEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(PredecessorEditor, BaseEditor);\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || gantt.ext.formatters.linkFormatter();\r\n\t}\r\n\r\n\tfunction parseInputString(value, config) {\r\n\t\tvar predecessors = (value || \"\").split(config.delimiter || \",\");\r\n\t\tfor (var i = 0; i < predecessors.length; i++) {\r\n\t\t\tvar val = predecessors[i].trim();\r\n\t\t\tif (val) {\r\n\t\t\t\tpredecessors[i] = val;\r\n\t\t\t} else {\r\n\t\t\t\tpredecessors.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpredecessors.sort();\r\n\t\treturn predecessors;\r\n\t}\r\n\r\n\tfunction formatPredecessors(task, config, gantt) {\r\n\t\tvar links = task.$target;\r\n\t\tvar labels = [];\r\n\t\tfor (var i = 0; i < links.length; i++) {\r\n\t\t\tvar link = gantt.getLink(links[i]);\r\n\t\t\tlabels.push(getFormatter(config).format(link));\r\n\t\t}\r\n\t\treturn labels.join((config.delimiter || \",\") + \" \");\r\n\t}\r\n\r\n\tfunction getSelectedLinks(taskId, predecessorCodes, config) {\r\n\t\tvar links = [];\r\n\t\tpredecessorCodes.forEach(function (code) {\r\n\t\t\tvar link = getFormatter(config).parse(code);\r\n\t\t\tif(link){\r\n\t\t\t\tlink.target = taskId;\r\n\t\t\t\t// GS-1290 A way to preserve the link. Otherwise validation will return false\r\n\t\t\t\t// because the existing link ID is not passed there\r\n\t\t\t\tlink.id = \"predecessor_generated\";\r\n\t\t\t\tif (gantt.isLinkAllowed(link)) {\r\n\t\t\t\t\tlink.id = undefined;\r\n\t\t\t\t\tlinks.push(link);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn links;\r\n\t}\r\n\r\n\tfunction formatLinkKey(link){\r\n\t\treturn link.source + \"_\" + link.target + \"_\" + link.type + \"_\" + (link.lag||0);\r\n\t}\r\n\r\n\tfunction getLinksDiff(task, predecessorCodes, config) {\r\n\t\tvar selectedLinks = getSelectedLinks(task.id, predecessorCodes, config);\r\n\t\tvar existingLinksSearch = {};\r\n\t\ttask.$target.forEach(function (linkId) {\r\n\t\t\tvar link = gantt.getLink(linkId);\r\n\t\t\texistingLinksSearch[formatLinkKey(link)] = link.id;\r\n\t\t});\r\n\r\n\t\tvar linksToAdd = [];\r\n\t\tselectedLinks.forEach(function (link) {\r\n\t\t\tvar linkKey = formatLinkKey(link);\r\n\t\t\tif (!existingLinksSearch[linkKey]) {\r\n\t\t\t\tlinksToAdd.push(link);\r\n\t\t\t} else {\r\n\t\t\t\tdelete existingLinksSearch[linkKey];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar linksToDelete = [];\r\n\t\tfor (var i in existingLinksSearch) {\r\n\t\t\tlinksToDelete.push(existingLinksSearch[i]);\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tadd: linksToAdd,\r\n\t\t\tremove: linksToDelete\r\n\t\t};\r\n\t}\r\n\r\n\tutils.mixin(PredecessorEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t},\r\n\t\thide: function () {\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tthis.get_input(node).value = formatPredecessors(value, column.editor, gantt);\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn parseInputString((this.get_input(node).value || \"\"), column.editor);\r\n\t\t},\r\n\t\tsave: function (id, column, node) {\r\n\t\t\tvar task = gantt.getTask(id);\r\n\r\n\t\t\tvar linksDiff = getLinksDiff(task, this.get_value(id, column, node), column.editor);\r\n\r\n\t\t\tif (linksDiff.add.length || linksDiff.remove.length) {\r\n\t\t\t\tgantt.batchUpdate(function () {\r\n\t\t\t\t\tlinksDiff.add.forEach(function (link) {\r\n\t\t\t\t\t\tgantt.addLink(link);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tlinksDiff.remove.forEach(function (linkId) {\r\n\t\t\t\t\t\tgantt.deleteLink(linkId);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (gantt.autoSchedule)\r\n\t\t\t\t\t\tgantt.autoSchedule();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tis_changed: function (value, id, column, node) {\r\n\t\t\tvar inputPredecessors = this.get_value(id, column, node);\r\n\t\t\tvar taskPredecessors = parseInputString(formatPredecessors(value, column.editor, gantt), column.editor);\r\n\r\n\t\t\treturn inputPredecessors.join() !== taskPredecessors.join();\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn PredecessorEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction TextEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TextEditor, BaseEditor);\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || gantt.ext.formatters.durationFormatter();\r\n\t}\r\n\tutils.mixin(TextEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tthis.get_input(node).value = getFormatter(column.editor).format(value);\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn getFormatter(column.editor).parse(this.get_input(node).value || \"\");\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn TextEditor;\r\n};","export default function (gantt) {\r\n\treturn function processTaskDateProperties(item, mapTo, mode) {\r\n\t\tif (mode == \"keepDates\") {\r\n\t\t\tkeepDatesOnEdit(item, mapTo);\r\n\t\t} else if (mode == \"keepDuration\") {\r\n\t\t\tkeepDurationOnEdit(item, mapTo);\r\n\t\t} else {\r\n\t\t\tdefaultActionOnEdit(item, mapTo);\r\n\t\t}\r\n\t};\r\n\r\n\t// resize task\r\n\t// resize task when start/end/duration changes\r\n\tfunction keepDatesOnEdit(item, mapTo) {\r\n\t\tif (mapTo == \"duration\") {\r\n\t\t\titem.end_date = gantt.calculateEndDate(item);\r\n\t\t} else if (mapTo == \"end_date\" || mapTo == \"start_date\") {\r\n\t\t\titem.duration = gantt.calculateDuration(item);\r\n\t\t}\r\n\t}\r\n\r\n\t// move task(before 6.2)\r\n\t// move task when start/end dates changes\r\n\t// resize task when duration changes\r\n\tfunction keepDurationOnEdit(item, mapTo) {\r\n\t\tif (mapTo == \"end_date\") {\r\n\t\t\titem.start_date = decreaseStartDate(item);\r\n\t\t} else if (mapTo == \"start_date\" || mapTo == \"duration\") {\r\n\t\t\titem.end_date = gantt.calculateEndDate(item);\r\n\t\t}\r\n\t}\r\n\r\n\t// default behavior\r\n\t// move task when start date changes\r\n\t// resize task when end date/duration changes\r\n\tfunction defaultActionOnEdit(item, mapTo) {\r\n\t\tif (gantt.config.schedule_from_end){\r\n\t\t\tif (mapTo == \"end_date\" || mapTo == \"duration\") {\r\n\t\t\t\titem.start_date = decreaseStartDate(item);\r\n\t\t\t} else if (mapTo == \"start_date\") {\r\n\t\t\t\titem.duration = gantt.calculateDuration(item);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (mapTo == \"start_date\" || mapTo == \"duration\") {\r\n\t\t\t\titem.end_date = gantt.calculateEndDate(item);\r\n\t\t\t} else if (mapTo == \"end_date\") {\r\n\t\t\t\titem.duration = gantt.calculateDuration(item);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction decreaseStartDate(item){\r\n\t\treturn gantt.calculateEndDate({\r\n\t\t\tstart_date: item.end_date,\r\n\t\t\tduration: -item.duration,\r\n\t\t\ttask: item\r\n\t\t});\r\n\t}\r\n};","import getKeyboardMapping from \"./keyboard_mappings\";\r\nimport textEditorFactory from \"./editors/text\";\r\nimport numberEditorFactory from \"./editors/number\";\r\nimport selectEditorFactory from \"./editors/select\";\r\nimport dateEditorFactory from \"./editors/date\";\r\nimport predecessorEditorFactory from \"./editors/predecessor\";\r\nimport durationEditorFactory from \"./editors/duration\";\r\nimport * as utils from \"../../../../utils/utils\";\r\nimport * as domHelpers from \"../../utils/dom_helpers\";\r\nimport eventable from \"../../../../utils/eventable\";\r\nimport linkedPropertiesProcessor from \"./linked_properties\";\r\n\r\nfunction initConfigs(gantt){\r\n\tgantt.config.editor_types = {\r\n\t\ttext: new (textEditorFactory(gantt))(),\r\n\t\tnumber: new (numberEditorFactory(gantt))(),\r\n\t\tselect: new (selectEditorFactory(gantt))(),\r\n\t\tdate: new (dateEditorFactory(gantt))(),\r\n\t\tpredecessor: new (predecessorEditorFactory(gantt))(),\r\n\t\tduration: new (durationEditorFactory(gantt))()\r\n\t};\r\n}\r\n\r\nfunction create(gantt){\r\n\tvar keyboardMapping = getKeyboardMapping(gantt);\r\n\r\n\tvar eventBus = {};\r\n\teventable(eventBus);\r\n\r\n\tfunction createGridEditors(grid) {\r\n\r\n\t\tfunction _getGridCellFromNode(node){\r\n\t\t\tif(!domHelpers.isChildOf(node, grid.$grid)){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar row = domHelpers.locateAttribute(node, grid.$config.item_attribute);\r\n\t\t\tvar cell = domHelpers.locateAttribute(node, \"data-column-name\");\r\n\t\t\tif(row && cell){\r\n\t\t\t\tvar columnName = cell.getAttribute(\"data-column-name\");\r\n\t\t\t\tvar id = row.getAttribute(grid.$config.item_attribute);\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\tcolumnName: columnName\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\tfunction _getEditorPosition(itemId, columnName) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar top = grid.getItemTop(itemId);\r\n\t\t\tvar height = grid.getItemHeight(itemId);\r\n\t\t\tvar cols = grid.getGridColumns();\r\n\t\t\tvar left = 0,\r\n\t\t\t\tright = 0,\r\n\t\t\t\twidth = 0;\r\n\r\n\t\t\tfor (var i = 0; i < cols.length; i++) {\r\n\t\t\t\tif (cols[i].name == columnName) {\r\n\t\t\t\t\twidth = cols[i].width;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (config.rtl) {\r\n\t\t\t\t\tright += cols[i].width;\r\n\t\t\t\t}\telse {\r\n\t\t\t\t\tleft += cols[i].width;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (config.rtl) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttop: top,\r\n\t\t\t\t\tright: right,\r\n\t\t\t\t\theight: height,\r\n\t\t\t\t\twidth: width\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttop: top,\r\n\t\t\t\t\tleft: left,\r\n\t\t\t\t\theight: height,\r\n\t\t\t\t\twidth: width\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction findVisibleIndex(grid, columnName) {\r\n\t\t\tvar columns = grid.getGridColumns();\r\n\t\t\tfor (var i = 0; i < columns.length; i++){\r\n\t\t\t\tif(columns[i].name == columnName){\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfunction _createPlaceholder(itemId, columnName) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar pos = _getEditorPosition(itemId, columnName);\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.className = \"gantt_grid_editor_placeholder\";\r\n\t\t\tel.setAttribute(grid.$config.item_attribute, itemId);\r\n\t\t\tel.setAttribute(grid.$config.bind + \"_id\", itemId);// for backward compatibility\r\n\r\n\t\t\tel.setAttribute(\"data-column-name\", columnName);\r\n\r\n\t\t\tvar visibleIndex = findVisibleIndex(grid, columnName);\r\n\t\t\tel.setAttribute(\"data-column-index\", visibleIndex);\r\n\r\n\t\t\tgantt._waiAria.inlineEditorAttr(el);\r\n\r\n\t\t\tif (config.rtl) {\r\n\t\t\t\tel.style.cssText = [\r\n\t\t\t\t\t\"top:\" + pos.top + \"px\",\r\n\t\t\t\t\t\"right:\" + pos.right + \"px\",\r\n\t\t\t\t\t\"width:\" + pos.width + \"px\",\r\n\t\t\t\t\t\"height:\" + pos.height + \"px\"\r\n\t\t\t\t].join(\";\");\r\n\t\t\t} else {\r\n\t\t\t\tel.style.cssText = [\r\n\t\t\t\t\t\"top:\" + pos.top + \"px\",\r\n\t\t\t\t\t\"left:\" + pos.left + \"px\",\r\n\t\t\t\t\t\"width:\" + pos.width + \"px\",\r\n\t\t\t\t\t\"height:\" + pos.height + \"px\"\r\n\t\t\t\t].join(\";\");\r\n\t\t\t}\r\n\r\n\t\t\treturn el;\r\n\t\t}\r\n\r\n\t\tvar updateTaskDateProperties = linkedPropertiesProcessor(gantt);\r\n\r\n\t\tvar handlers = [];\r\n\t\tvar ganttHandlers = [];\r\n\t\tvar store = null;\r\n\t\tvar controller = {\r\n\t\t\t_itemId: null,\r\n\t\t\t_columnName: null,\r\n\t\t\t_editor: null,\r\n\t\t\t_editorType: null,\r\n\t\t\t_placeholder: null,\r\n\r\n\t\t\tlocateCell: _getGridCellFromNode,\r\n\t\t\tgetEditorConfig: function (columnName) {\r\n\t\t\t\tvar column = grid.getColumn(columnName);\r\n\t\t\t\treturn column.editor;\r\n\t\t\t},\r\n\r\n\t\t\tinit: function () {\r\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\r\n\t\t\t\tif(mapping.init){\r\n\t\t\t\t\tmapping.init(this, grid);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstore = grid.$gantt.getDatastore(grid.$config.bind);\r\n\r\n\t\t\t\tvar self = this;\r\n\r\n\t\t\t\thandlers.push(store.attachEvent(\"onIdChange\", function(oldId, newId){\r\n\t\t\t\t\tif(self._itemId == oldId){\r\n\t\t\t\t\t\tself._itemId = newId;\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t\thandlers.push(store.attachEvent(\"onStoreUpdated\", function(){\r\n\t\t\t\t\tif(grid.$gantt.getState(\"batchUpdate\").batch_update){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(self.isVisible() && !store.isVisible(self._itemId)){\r\n\t\t\t\t\t\tself.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\r\n\t\t\t\tganttHandlers.push(gantt.attachEvent(\"onDataRender\", function(){\r\n\t\t\t\t\tif(self._editor && self._placeholder && !domHelpers.isChildOf(self._placeholder, gantt.$root)){\r\n\t\t\t\t\t\tgrid.$grid_data.appendChild(self._placeholder);\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\r\n\t\t\t\tthis.init = function(){};\r\n\t\t\t},\r\n\r\n\t\t\tgetState: function(){\r\n\t\t\t\treturn {\r\n\t\t\t\t\teditor: this._editor,\r\n\t\t\t\t\teditorType: this._editorType,\r\n\t\t\t\t\tplaceholder: this._placeholder,\r\n\t\t\t\t\tid: this._itemId,\r\n\t\t\t\t\tcolumnName: this._columnName\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tstartEdit: function(itemId, columnName) {\r\n\t\t\t\tif (this.isVisible()) {\r\n\t\t\t\t\tthis.save();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!store.exists(itemId)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar editorState = {id: itemId, columnName: columnName};\r\n\t\t\t\tif (gantt.isReadonly(store.getItem(itemId))) {\r\n\t\t\t\t\tthis.callEvent(\"onEditPrevent\", [editorState]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.callEvent(\"onBeforeEditStart\", [editorState]) === false) {\r\n\t\t\t\t\tthis.callEvent(\"onEditPrevent\", [editorState]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.show(editorState.id, editorState.columnName);\r\n\t\t\t\tthis.setValue();\r\n\r\n\t\t\t\tthis.callEvent(\"onEditStart\", [editorState]);\r\n\t\t\t},\r\n\t\t\tisVisible: function(){\r\n\t\t\t\treturn !!(this._editor && domHelpers.isChildOf(this._placeholder, gantt.$root));\r\n\t\t\t},\r\n\t\t\tshow: function (itemId, columnName) {\r\n\t\t\t\tif (this.isVisible()) {\r\n\t\t\t\t\tthis.save();\r\n\t\t\t\t}\r\n\t\t\t\tvar editorState = {id: itemId, columnName: columnName};\r\n\r\n\t\t\t\tvar column = grid.getColumn(editorState.columnName);\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(column.name);\r\n\t\t\t\tif(!editorConfig)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar editor = grid.$getConfig().editor_types[editorConfig.type];\r\n\r\n\t\t\t\tvar placeholder = _createPlaceholder(editorState.id, editorState.columnName);\r\n\t\t\t\tgrid.$grid_data.appendChild(placeholder);\r\n\t\t\t\teditor.show(editorState.id, column, editorConfig, placeholder);\r\n\t\t\t\tthis._editor = editor;\r\n\t\t\t\tthis._placeholder = placeholder;\r\n\t\t\t\tthis._itemId = editorState.id;\r\n\t\t\t\tthis._columnName = editorState.columnName;\r\n\t\t\t\tthis._editorType = editorConfig.type;\r\n\r\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\r\n\t\t\t\tif(mapping.onShow){\r\n\t\t\t\t\tmapping.onShow(this, placeholder, grid);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tsetValue: function () {\r\n\t\t\t\tvar state = this.getState();\r\n\t\t\t\tvar itemId = state.id,\r\n\t\t\t\t\tcolumnName = state.columnName;\r\n\r\n\t\t\t\tvar column = grid.getColumn(columnName);\r\n\t\t\t\tvar item = store.getItem(itemId);\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(columnName);\r\n\r\n\t\t\t\tif(!editorConfig)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar value = item[editorConfig.map_to];\r\n\t\t\t\tif(editorConfig.map_to == \"auto\"){\r\n\t\t\t\t\tvalue = store.getItem(itemId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._editor.set_value(value, itemId, column, this._placeholder);\r\n\t\t\t\tthis.focus();\r\n\t\t\t},\r\n\r\n\t\t\tfocus: function(){\r\n\t\t\t\tthis._editor.focus(this._placeholder);\r\n\t\t\t},\r\n\r\n\t\t\tgetValue: function () {\r\n\t\t\t\tvar column = grid.getColumn(this._columnName);\r\n\t\t\t\treturn this._editor.get_value(this._itemId, column, this._placeholder);\r\n\t\t\t},\r\n\r\n\t\t\t_getItemValue: function() {\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(this._columnName);\r\n\r\n\t\t\t\tif(!editorConfig)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar item = gantt.getTask(this._itemId);\r\n\t\t\t\tvar value = item[editorConfig.map_to];\r\n\t\t\t\tif(editorConfig.map_to == \"auto\"){\r\n\t\t\t\t\tvalue = store.getItem(this._itemId);\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t},\r\n\r\n\t\t\tisChanged: function(){\r\n\r\n\t\t\t\tvar column = grid.getColumn(this._columnName);\r\n\r\n\t\t\t\tvar value = this._getItemValue();\r\n\r\n\t\t\t\treturn this._editor.is_changed(value, this._itemId, column, this._placeholder);\r\n\t\t\t},\r\n\r\n\t\t\thide: function () {\r\n\t\t\t\tif(!this._itemId)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar itemId = this._itemId,\r\n\t\t\t\t\tcolumnName = this._columnName;\r\n\r\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\r\n\t\t\t\tif(mapping.onHide){\r\n\t\t\t\t\tmapping.onHide(this, this._placeholder, grid);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._itemId = null;\r\n\t\t\t\tthis._columnName = null;\r\n\t\t\t\tthis._editorType = null;\r\n\t\t\t\tif (!this._placeholder) return;\r\n\r\n\t\t\t\tif (this._editor && this._editor.hide) {\r\n\t\t\t\t\tthis._editor.hide(this._placeholder);\r\n\t\t\t\t}\r\n\t\t\t\tthis._editor = null;\r\n\t\t\t\tif (this._placeholder.parentNode) {\r\n\t\t\t\t\tthis._placeholder.parentNode.removeChild(this._placeholder);\r\n\t\t\t\t}\r\n\t\t\t\tthis._placeholder = null;\r\n\r\n\t\t\t\tthis.callEvent(\"onEditEnd\", [{id: itemId, columnName: columnName}]);\r\n\t\t\t},\r\n\t\t\tsave: function () {\r\n\t\t\t\tif(!(this.isVisible() && store.exists(this._itemId) && this.isChanged())) {\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar itemId = this._itemId,\r\n\t\t\t\t\tcolumnName = this._columnName;\r\n\r\n\t\t\t\tif(!store.exists(itemId)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar item = store.getItem(itemId);\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(columnName);\r\n\t\t\t\tvar editorState = {\r\n\t\t\t\t\tid: itemId,\r\n\t\t\t\t\tcolumnName: columnName,\r\n\t\t\t\t\tnewValue: this.getValue(),\r\n\t\t\t\t\toldValue: this._getItemValue()\r\n\t\t\t\t};\r\n\t\t\t\tif (this.callEvent(\"onBeforeSave\", [editorState]) !== false) {\r\n\t\t\t\t\tif (!this._editor.is_valid || this._editor.is_valid(editorState.newValue, editorState.id, grid.getColumn(columnName), this._placeholder)) {\r\n\r\n\t\t\t\t\t\tvar mapTo = editorConfig.map_to;\r\n\t\t\t\t\t\tvar value = editorState.newValue;\r\n\t\t\t\t\t\tif (mapTo != \"auto\") {\r\n\t\t\t\t\t\t\titem[mapTo] = value;\r\n\t\t\t\t\t\t\tupdateTaskDateProperties(item, mapTo, gantt.config.inline_editors_date_processing);\r\n\r\n\t\t\t\t\t\t\tstore.updateItem(itemId);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis._editor.save(itemId, grid.getColumn(columnName), this._placeholder);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.callEvent(\"onSave\", [editorState]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.hide();\r\n\t\t\t},\r\n\r\n\t\t\t_findEditableCell: function findEditableCell(start, direction){\r\n\t\t\t\tvar nextIndex = start;\r\n\t\t\t\tvar columns = grid.getGridColumns();\r\n\t\t\t\tvar nextColumn = columns[nextIndex];\r\n\r\n\t\t\t\tvar columnName = nextColumn ? nextColumn.name : null;\r\n\t\t\t\tif(columnName){\r\n\t\t\t\t\twhile(columnName && !this.getEditorConfig(columnName)){\r\n\t\t\t\t\t\tcolumnName = this._findEditableCell(start + direction, direction);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn columnName;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\r\n\t\t\tgetNextCell: function moveCell(dir){\r\n\t\t\t\t// GS-1257. true means to exclude hidden columns\r\n\t\t\t\treturn this._findEditableCell(grid.getColumnIndex(this._columnName, true) + dir, dir);\r\n\t\t\t},\r\n\r\n\t\t\tgetFirstCell: function getFirstCell(){\r\n\t\t\t\treturn this._findEditableCell(0, 1);\r\n\t\t\t},\r\n\r\n\t\t\tgetLastCell: function getLastCell(){\r\n\t\t\t\treturn this._findEditableCell(grid.getGridColumns().length - 1, -1);\r\n\t\t\t},\r\n\r\n\t\t\teditNextCell: function nextCell(canChangeRow){\r\n\t\t\t\tvar cell = this.getNextCell(1);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tvar nextColumn = this.getNextCell(1);\r\n\t\t\t\t\tif(nextColumn && this.getEditorConfig(nextColumn)){\r\n\t\t\t\t\t\tthis.startEdit(this._itemId, nextColumn);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(canChangeRow && this.moveRow(1)){\r\n\t\t\t\t\tvar task = this.moveRow(1);\r\n\t\t\t\t\tcell = this.getFirstCell();\r\n\t\t\t\t\tif(cell && this.getEditorConfig(cell)){\r\n\t\t\t\t\t\tthis.startEdit(task, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\teditPrevCell: function prevCell(canChangeRow){\r\n\t\t\t\tvar cell = this.getNextCell(-1);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tvar nextColumn = this.getNextCell(-1);\r\n\t\t\t\t\tif(nextColumn && this.getEditorConfig(nextColumn)){\r\n\t\t\t\t\t\tthis.startEdit(this._itemId, nextColumn);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(canChangeRow && this.moveRow(-1)){\r\n\t\t\t\t\tvar task = this.moveRow(-1);\r\n\t\t\t\t\tcell = this.getLastCell();\r\n\t\t\t\t\tif(cell && this.getEditorConfig(cell)){\r\n\t\t\t\t\t\tthis.startEdit(task, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tmoveRow: function moveRow(dir) {\r\n\t\t\t\tvar moveTask = dir > 0 ? gantt.getNext : gantt.getPrev;\r\n\t\t\t\tmoveTask = gantt.bind(moveTask, gantt);\r\n\r\n\t\t\t\tvar nextItem = moveTask(this._itemId);\r\n\t\t\t\t// skip readonly rows\r\n\t\t\t\twhile (gantt.isTaskExists(nextItem) && gantt.isReadonly(gantt.getTask(nextItem))) {\r\n\t\t\t\t\tnextItem = moveTask(nextItem);\r\n\t\t\t\t}\r\n\t\t\t\treturn nextItem;\r\n\t\t\t},\r\n\r\n\t\t\teditNextRow: function nextRow(skipReadonly){\r\n\t\t\t\tvar id = this.getState().id;\r\n\t\t\t\tif (!gantt.isTaskExists(id)) return;\r\n\r\n\t\t\t\tvar next = null;\r\n\t\t\t\tif (skipReadonly){\r\n\t\t\t\t\tnext = this.moveRow(1);\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\tnext = gantt.getNext(id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gantt.isTaskExists(next)){\r\n\t\t\t\t\tthis.startEdit(next, this._columnName);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\teditPrevRow: function prevRow(skipReadonly){\r\n\t\t\t\tvar id = this.getState().id;\r\n\t\t\t\tif (!gantt.isTaskExists(id)) return;\r\n\r\n\t\t\t\tvar prev = null;\r\n\t\t\t\tif (skipReadonly){\r\n\t\t\t\t\tprev = this.moveRow(-1);\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\tprev = gantt.getPrev(id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gantt.isTaskExists(prev)){\r\n\t\t\t\t\tthis.startEdit(prev, this._columnName);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdestructor: function(){\r\n\t\t\t\thandlers.forEach(function(handlerId){\r\n\t\t\t\t\tstore.detachEvent(handlerId);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tganttHandlers.forEach(function(handlerId){\r\n\t\t\t\t\tgantt.detachEvent(handlerId);\r\n\t\t\t\t});\r\n\t\t\t\thandlers = [];\r\n\t\t\t\tganttHandlers = [];\r\n\r\n\t\t\t\tstore = null;\r\n\t\t\t\tthis.hide();\r\n\t\t\t\tthis.detachAllEvents();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tutils.mixin(controller, keyboardMapping);\r\n\t\tutils.mixin(controller, eventBus);\r\n\r\n\t\treturn controller;\r\n\t}\r\n\r\n\r\n\tvar inlineEditController = {\r\n\t\tinit: initConfigs,\r\n\t\tcreateEditors: createGridEditors\r\n\t};\r\n\r\n\tutils.mixin(inlineEditController, keyboardMapping);\r\n\tutils.mixin(inlineEditController, eventBus);\r\n\r\n\treturn inlineEditController;\r\n}\r\n\r\n\r\n\r\n\r\nexport default create;","import defaultMapping from \"./keyboard_mappings/default\";\r\nimport keyNavMappings from \"./keyboard_mappings/keyboard_navigation\";\r\n\r\nexport default function(gantt){\r\n\r\n\tvar mapping = null;\r\n\r\n\treturn {\r\n\t\tsetMapping: function(map){\r\n\t\t\tmapping = map;\r\n\t\t},\r\n\t\tgetMapping: function(){\r\n\r\n\t\t\tif(mapping){\r\n\t\t\t\treturn mapping;\r\n\t\t\t}else if(gantt.config.keyboard_navigation_cells && gantt.ext.keyboardNavigation){\r\n\t\t\t\treturn keyNavMappings;\r\n\t\t\t}else{\r\n\t\t\t\treturn defaultMapping;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n};\r\n","// optimized checker for task bars smart rendering\r\n\r\n// first check the vertical position since it's easier to calculate\r\nexport default function isBarInViewport(item, viewport, view, config, gantt){\r\n\tif(!item.start_date || !item.end_date){\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar top = view.getItemTop(item.id);\r\n\tvar height = view.getItemHeight(item.id);\r\n\r\n\tif(top > viewport.y_end || top + height < viewport.y){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar padding = 200;\r\n\tvar startCoord = view.posFromDate(item.start_date);\r\n\tvar endCoord = view.posFromDate(item.end_date);\r\n\tvar left = Math.min(startCoord, endCoord) - padding;\r\n\tvar right = Math.max(startCoord, endCoord) + padding;\r\n\r\n\tif(left > viewport.x_end || right < viewport.x){\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn true;\r\n};","function createTaskRenderer(gantt) {\r\n\r\n\tfunction _render_task_element(task, view, config) {\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar painters = config.type_renderers;\r\n\t\tvar renderer = painters[gantt.getTaskType(task.type)],\r\n\t\t\tdefaultRenderer = _task_default_render;\r\n\r\n\t\tif (!renderer) {\r\n\t\t\treturn defaultRenderer.call(gantt, task, view, config);\r\n\t\t}else{\r\n\t\t\treturn renderer.call(gantt, task, function(task){ return defaultRenderer.call(gantt, task, view, config);}, view);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _task_default_render(task, view, config) {\r\n\t\tif (gantt._isAllowedUnscheduledTask(task))\r\n\t\t\treturn;\r\n\r\n\t\tif (!gantt._isTaskInTimelineLimits(task)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar pos = view.getItemPosition(task);\r\n\r\n\t\tvar cfg = config,\r\n\t\t\ttemplates = view.$getTemplates();\r\n\r\n\t\tvar taskType = gantt.getTaskType(task.type);\r\n\t\tvar height = view.getBarHeight(task.id, taskType == cfg.types.milestone);\r\n\r\n\t\tvar controlsMargin = 0;\r\n\t\tif (taskType == cfg.types.milestone) {\r\n\t\t\tcontrolsMargin = (height - pos.height)/2;\r\n\t\t}\r\n\r\n\t\tvar padd = Math.floor((view.getItemHeight(task.id) - height) / 2);\r\n\t\tconst hasBaselines = gantt.config.baselines !== false && task.baselines && task.baselines.length;\r\n\t\tconst baselinesOnDifferentRow = gantt.config.baselines !== false && (gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\");\r\n\t\tif (hasBaselines && baselinesOnDifferentRow){\r\n\t\t\tif (task.bar_height !== \"full\" && task.bar_height < task.row_height){\r\n\t\t\t\tif (taskType === cfg.types.milestone){\r\n\t\t\t\t\tlet milestoneHeight = view.getBarHeight(task.id, true);\r\n\t\t\t\t\tlet milestoneWidth = Math.sqrt(2 * milestoneHeight * milestoneHeight);\r\n\t\t\t\t\tpadd = Math.floor((milestoneWidth - height) / 2) + 2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpadd = 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t//\tif(task.type == cfg.types.milestone){\r\n\t//\t\tpadd -= 1;\r\n\t//\t}\r\n\t//\tif (taskType == cfg.types.milestone && cfg.link_line_width > 1) {\r\n\t//\t\t//little adjust milestone position, so horisontal corners would match link arrow when thickness of link line is more than 1px\r\n\t//\t\tpadd += 1;\r\n\t//\t}\r\n\r\n\t\tif (taskType == cfg.types.milestone) {\r\n\t\t\tpos.left -= Math.round(height / 2);\r\n\t\t\tpos.width = height;\r\n\t\t}\r\n\r\n\t\tvar div = document.createElement(\"div\");\r\n\r\n\t\tvar width = Math.round(pos.width);\r\n\r\n\t\tif(view.$config.item_attribute) {\r\n\t\t\tdiv.setAttribute(view.$config.item_attribute, task.id);\r\n\t\t\tdiv.setAttribute(view.$config.bind + \"_id\", task.id); // 'task_id'/'resource_id' for backward compatibility\r\n\t\t}\r\n\r\n\t\tif (cfg.show_progress && taskType != cfg.types.milestone) {\r\n\t\t\t_render_task_progress(task, div, width, cfg, templates);\r\n\t\t}\r\n\r\n\t\t//use separate div to display content above progress bar\r\n\t\tvar content = _render_task_content(task, width, templates);\r\n\t\tif (task.textColor) {\r\n\t\t\tcontent.style.color = task.textColor;\r\n\t\t}\r\n\t\tdiv.appendChild(content);\r\n\r\n\t\tvar css = _combine_item_class(\"gantt_task_line\",\r\n\t\t\ttemplates.task_class(task.start_date, task.end_date, task),\r\n\t\t\ttask.id,\r\n\t\t\tview);\r\n\t\tif (task.color || task.progressColor || task.textColor) {\r\n\t\t\tcss += \" gantt_task_inline_color\";\r\n\t\t}\r\n\t\tif (pos.width < 20){\r\n\t\t\tcss += \" gantt_thin_task\";\r\n\t\t}\r\n\t\tdiv.className = css;\r\n\r\n\t\tvar styles = [\r\n\t\t\t\"left:\" + pos.left + \"px\",\r\n\t\t\t\"top:\" + (padd + pos.top) + 'px',\r\n\t\t\t\"height:\" + (height) + 'px',\r\n\t\t\t\"line-height:\" + (Math.max(height < 30 ? height - 2 : height, 0)) + 'px',\r\n\t\t\t\"width:\" + width + 'px'\r\n\t\t];\r\n\r\n\t\tdiv.style.cssText = styles.join(\";\");\r\n\t\tif (task.color) {\r\n\t\t\tdiv.style.setProperty(\"--dhx-gantt-task-background\", task.color);\r\n\t\t}\r\n\t\tif (task.textColor) {\r\n\t\t\tdiv.style.setProperty(\"--dhx-gantt-task-color\", task.textColor);\r\n\t\t}\r\n\r\n\t\tif (task.progressColor) {\r\n\t\t\tdiv.style.setProperty(\"--dhx-gantt-task-progress-color\", task.progressColor);\r\n\t\t}\r\n\r\n\t\t\r\n\t\tvar side = _render_leftside_content(task, cfg, templates, controlsMargin);\r\n\t\tif (side) div.appendChild(side);\r\n\r\n\t\tside = _render_rightside_content(task, cfg, templates, controlsMargin);\r\n\t\tif (side) div.appendChild(side);\r\n\r\n\t\tgantt._waiAria.setTaskBarAttr(task, div);\r\n\r\n\t\tvar state = gantt.getState();\r\n\r\n\t\tif (!gantt.isReadonly(task)) {\r\n\t\t\tif (cfg.drag_resize && !gantt.isSummaryTask(task) && taskType != cfg.types.milestone) {\r\n\t\t\t\t_render_pair(div, \"gantt_task_drag\", task, function (css) {\r\n\t\t\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\t\t\tel.className = css;\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}, cfg);\r\n\t\t\t}\r\n\t\t\tif (cfg.drag_links && cfg.show_links) {\r\n\t\t\t\t_render_pair(div, \"gantt_link_control\", task, function (css) {\r\n\t\t\t\t\tvar outer = document.createElement(\"div\");\r\n\t\t\t\t\touter.className = css;\r\n\t\t\t\t\touter.style.cssText = [\r\n\t\t\t\t\t\t\"height:\" + height + 'px',\r\n\t\t\t\t\t\t\"line-height:\" + height + 'px'\r\n\t\t\t\t\t].join(\";\");\r\n\t\t\t\t\tvar inner = document.createElement(\"div\");\r\n\t\t\t\t\tinner.className = \"gantt_link_point\";\r\n\r\n\t\t\t\t\tvar showLinkPoints = false;\r\n\t\t\t\t\tif(state.link_source_id && cfg.touch){\r\n\t\t\t\t\t\tshowLinkPoints = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinner.style.display = showLinkPoints ? \"block\" : \"\";\r\n\t\t\t\t\touter.appendChild(inner);\r\n\t\t\t\t\treturn outer;\r\n\t\t\t\t}, cfg, controlsMargin);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn div;\r\n\t}\r\n\r\n\tfunction _render_side_content(task, template, cssClass, marginStyle) {\r\n\t\tif (!template) return null;\r\n\r\n\t\tvar text = template(task.start_date, task.end_date, task);\r\n\t\tif (!text) return null;\r\n\t\tvar content = document.createElement(\"div\");\r\n\t\tcontent.className = \"gantt_side_content \" + cssClass;\r\n\t\tcontent.innerHTML = text;\r\n\t\tif(marginStyle){\r\n\t\t\tcontent.style[marginStyle.type] = Math.abs(marginStyle.value) + \"px\";\r\n\t\t}\r\n\t\treturn content;\r\n\t}\r\n\r\n\tfunction _render_leftside_content(task, cfg, templates, margin) {\r\n\t\tvar css = \"gantt_left \" + _get_link_crossing_css(!cfg.rtl ? true : false, task, cfg);\r\n\t\tvar marginStyle = null;\r\n\t\tif(margin){\r\n\t\t\tmarginStyle = { type: \"marginRight\", value: margin };\r\n\t\t}\r\n\t\treturn _render_side_content(task, templates.leftside_text, css, marginStyle);\r\n\t}\r\n\r\n\tfunction _render_rightside_content(task, cfg, templates, margin) {\r\n\t\tvar css = \"gantt_right \" + _get_link_crossing_css(!cfg.rtl ? false : true, task, cfg);\r\n\t\tvar marginStyle = null;\r\n\t\tif(margin){\r\n\t\t\tmarginStyle = { type: \"marginLeft\", value: margin };\r\n\t\t}\r\n\t\treturn _render_side_content(task, templates.rightside_text, css, marginStyle);\r\n\t}\r\n\r\n\tfunction _get_link_crossing_css(left, task) {\r\n\t\tvar cond = _get_conditions(left);\r\n\r\n\t\tfor (var i in cond) {\r\n\t\t\tvar links = task[i];\r\n\t\t\tfor (var ln = 0; ln < links.length; ln++) {\r\n\t\t\t\tvar link = gantt.getLink(links[ln]);\r\n\r\n\t\t\t\tfor (var tp = 0; tp < cond[i].length; tp++) {\r\n\t\t\t\t\tif (link.type == cond[i][tp]) {\r\n\t\t\t\t\t\treturn \"gantt_link_crossing\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\r\n\tfunction _render_task_content(task, width, templates) {\r\n\t\tvar content = document.createElement(\"div\");\r\n\t\tif (gantt.getTaskType(task.type) != gantt.config.types.milestone){\r\n\t\t\tcontent.innerHTML = templates.task_text(task.start_date, task.end_date, task);\r\n\t\t} else if(gantt.getTaskType(task.type) == gantt.config.types.milestone && width) {\r\n\t\t\tcontent.style.height = content.style.width = width + \"px\";\r\n\t\t}\r\n\t\tcontent.className = \"gantt_task_content\";\r\n\t\t//content.style.width = width + 'px';\r\n\t\treturn content;\r\n\t}\r\n\r\n\tfunction _render_task_progress(task, element, maxWidth, cfg, templates) {\r\n\t\tvar done = task.progress * 1 || 0;\r\n\r\n\t\tmaxWidth = Math.max(maxWidth - 2, 0);//2px for borders\r\n\t\tvar pr = document.createElement(\"div\");\r\n\t\tvar width = Math.round(maxWidth * done);\r\n\r\n\t\twidth = Math.min(maxWidth, width);\r\n\r\n\t\tpr.style.width = width + 'px';\r\n\t\tpr.className = \"gantt_task_progress\";\r\n\t\tpr.innerHTML = templates.progress_text(task.start_date, task.end_date, task);\r\n\r\n\t\tif(cfg.rtl){\r\n\t\t\tpr.style.position = \"absolute\";\r\n\t\t\tpr.style.right = \"0px\";\r\n\t\t}\r\n\r\n\t\tvar wrapper = document.createElement(\"div\");\r\n\t\twrapper.className = \"gantt_task_progress_wrapper\";\r\n\t\twrapper.appendChild(pr);\r\n\t\telement.appendChild(wrapper);\r\n\r\n\t\tif (gantt.config.drag_progress && !gantt.isReadonly(task)) {\r\n\t\t\tvar drag = document.createElement(\"div\");\r\n\r\n\t\t\tvar markerPos = width;\r\n\t\t\tif(cfg.rtl){\r\n\t\t\t\tmarkerPos = maxWidth - width;\r\n\t\t\t}\r\n\r\n\t\t\tdrag.style.left = markerPos + 'px';\r\n\t\t\tdrag.className = \"gantt_task_progress_drag\";\r\n\t\t\tdrag.innerHTML = `\r\n\r\n `;\r\n\t\t\tpr.appendChild(drag);\r\n\t\t\telement.appendChild(drag);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _get_conditions(leftside) {\r\n\t\tif (leftside) {\r\n\t\t\treturn {\r\n\t\t\t\t$source: [\r\n\t\t\t\t\tgantt.config.links.start_to_start\r\n\t\t\t\t],\r\n\t\t\t\t$target: [\r\n\t\t\t\t\tgantt.config.links.start_to_start,\r\n\t\t\t\t\tgantt.config.links.finish_to_start\r\n\t\t\t\t]\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\t$source: [\r\n\t\t\t\t\tgantt.config.links.finish_to_start,\r\n\t\t\t\t\tgantt.config.links.finish_to_finish\r\n\t\t\t\t],\r\n\t\t\t\t$target: [\r\n\t\t\t\t\tgantt.config.links.finish_to_finish\r\n\t\t\t\t]\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _combine_item_class(basic, template, itemId, view) {\r\n\t\tvar cfg = view.$getConfig();\r\n\t\tvar css = [basic];\r\n\t\tif (template)\r\n\t\t\tcss.push(template);\r\n\r\n\t\tvar state = gantt.getState();\r\n\r\n\t\tvar task = gantt.getTask(itemId);\r\n\r\n\t\tif (gantt.getTaskType(task.type) == cfg.types.milestone) {\r\n\t\t\tcss.push(\"gantt_milestone\");\r\n\t\t}else if (gantt.getTaskType(task.type) == cfg.types.project) {\r\n\t\t\tcss.push(\"gantt_project\");\r\n\t\t}\r\n\r\n\t\tcss.push(\"gantt_bar_\" + gantt.getTaskType(task.type));\r\n\r\n\r\n\t\tif (gantt.isSummaryTask(task))\r\n\t\t\tcss.push(\"gantt_dependent_task\");\r\n\r\n\t\tif (gantt.isSplitTask(task) && ((cfg.open_split_tasks && !task.$open) || !cfg.open_split_tasks)) {\r\n\t\t\tcss.push(\"gantt_split_parent\");\r\n\t\t}\r\n\r\n\t\tif (cfg.select_task && gantt.isSelectedTask(itemId)) {\r\n\t\t\tcss.push(\"gantt_selected\");\r\n\t\t}\r\n\r\n\t\tif (itemId == state.drag_id) {\r\n\t\t\tcss.push(\"gantt_drag_\" + state.drag_mode);\r\n\t\t\tif (state.touch_drag) {\r\n\t\t\t\tcss.push(\"gantt_touch_\" + state.drag_mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (state.link_source_id == itemId){\r\n\t\t\tcss.push(\"gantt_link_source\");\r\n\t\t\tif(state.link_from_start) {\r\n\t\t\t\tcss.push(\"gantt_link_from_start\");\r\n\t\t\t}else{\r\n\t\t\t\tcss.push(\"gantt_link_from_end\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (state.link_target_id == itemId)\r\n\t\t\tcss.push(\"gantt_link_target\");\r\n\r\n\r\n\t\tif (cfg.highlight_critical_path && gantt.isCriticalTask) {\r\n\t\t\tif (gantt.isCriticalTask(task))\r\n\t\t\t\tcss.push(\"gantt_critical_task\");\r\n\t\t}\r\n\r\n\t\tif (state.link_landing_area &&\r\n\t\t\t(state.link_target_id && state.link_source_id) &&\r\n\t\t\t(state.link_target_id != state.link_source_id) &&\r\n\t\t\t(state.link_target_id == itemId || state.link_source_id == itemId)) {\r\n\r\n\t\t\tvar from_id = state.link_source_id;\r\n\t\t\tvar from_start = state.link_from_start;\r\n\t\t\tvar to_start = state.link_to_start;\r\n\r\n\t\t\tvar allowDrag = gantt.isLinkAllowed(from_id, itemId, from_start, to_start);\r\n\r\n\t\t\tvar dragClass = \"\";\r\n\t\t\tif (allowDrag) {\r\n\t\t\t\tif (to_start)\r\n\t\t\t\t\tdragClass = \"link_start_allow\";\r\n\t\t\t\telse\r\n\t\t\t\t\tdragClass = \"link_finish_allow\";\r\n\t\t\t} else {\r\n\t\t\t\tif (to_start)\r\n\t\t\t\t\tdragClass = \"link_start_deny\";\r\n\t\t\t\telse\r\n\t\t\t\t\tdragClass = \"link_finish_deny\";\r\n\t\t\t}\r\n\t\t\tcss.push(dragClass);\r\n\t\t}\r\n\t\treturn css.join(\" \");\r\n\t}\r\n\r\n\tfunction _render_pair(parent, css, task, content, config, margin) {\r\n\t\tvar state = gantt.getState();\r\n\t\tvar className, element;\r\n\t\tif (+task.start_date >= +state.min_date) {\r\n\t\t\tclassName = [css, config.rtl ? \"task_right\" : \"task_left\", \"task_start_date\"];\r\n\t\t\telement = content(className.join(\" \"));\r\n\t\t\telement.setAttribute(\"data-bind-property\", \"start_date\");\r\n\t\t\tif(margin){\r\n\t\t\t\telement.style.marginLeft = margin + \"px\";\r\n\t\t\t}\r\n\t\t\tparent.appendChild(element);\r\n\t\t}\r\n\r\n\t\tif (+task.end_date <= +state.max_date){\r\n\t\t\tclassName = [css, config.rtl ? \"task_left\" : \"task_right\", \"task_end_date\"];\r\n\t\t\telement = content(className.join(\" \"));\r\n\t\t\telement.setAttribute(\"data-bind-property\", \"end_date\");\r\n\t\t\tif(margin){\r\n\t\t\t\telement.style.marginRight = margin + \"px\";\r\n\t\t\t}\r\n\t\t\tparent.appendChild(element);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn _render_task_element;\r\n}\r\n\r\nexport default createTaskRenderer;","import isInViewPort from \"./viewport/is_bar_in_viewport\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport createBaseBarRender from \"./task_bar_render\";\r\n\r\nexport default function createTaskRenderer(gantt){\r\n\tvar defaultRender = createBaseBarRender(gantt);\r\n\treturn {\r\n\t\trender: defaultRender,\r\n\t\tupdate: null,\r\n\t\t//getRectangle: getBarRectangle\r\n\t\tisInViewPort: isInViewPort,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n};","export default function () {\r\n // eslint-disable-next-line no-console\r\n console.error(\"You are trying to use a Pro feature that is not available in the GPL version.\");\r\n return {\r\n render: function (){},\r\n isInViewPort: function (){},\r\n getVisibleRange: function (){}\r\n };\r\n};\r\n","export default function(item, view, config){\r\n\treturn {\r\n\t\ttop: view.getItemTop(item.id),\r\n\t\theight: view.getItemHeight(item.id),\r\n\t\tleft: 0,\r\n\t\tright: Infinity\r\n\t};\r\n};","export default function getVisibleCellsRange(scale, viewport){\r\n\tvar firstCellIndex = 0;\r\n\tvar lastCellIndex = scale.left.length - 1;\r\n\tif(viewport){\r\n\t\tfor(var i = 0; i < scale.left.length; i++){\r\n\t\t\tvar left = scale.left[i];\r\n\t\t\tif(left < viewport.x){\r\n\t\t\t\tfirstCellIndex = i;\r\n\t\t\t}\r\n\t\t\tif(left > viewport.x_end){\r\n\t\t\t\tlastCellIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart: firstCellIndex,\r\n\t\tend: lastCellIndex\r\n\t};\r\n};","import isLegacyRender from \"../is_legacy_smart_render\";\r\n\r\nexport default function isColumnVisible(columnIndex, scale, viewPort, gantt){\r\n\tvar width = scale.width[columnIndex];\r\n\tif(width <= 0){\r\n\t\treturn false;\r\n\t}\r\n\tif(!gantt.config.smart_rendering || isLegacyRender(gantt)){\r\n\t\treturn true;\r\n\t}\r\n\tvar cellLeftCoord = scale.left[columnIndex] - width;\r\n\tvar cellRightCoord = scale.left[columnIndex] + width;\r\n\treturn (cellLeftCoord <= viewPort.x_end && cellRightCoord >= viewPort.x);//do not render skipped columns\r\n};","export default function (items, gantt){\r\n\tvar placeholderConfig = gantt.config.timeline_placeholder;\r\n\titems = items || [];\r\n\tif (placeholderConfig && items.filter(e => e.id === 'timeline_placeholder_task').length === 0){\r\n\t\tvar state = gantt.getState();\r\n\t\tvar lastTaskId = null;\r\n\t\tvar start_date = state.min_date;\r\n\t\tvar end_date = state.max_date;\r\n\t\tif (items.length){\r\n\t\t\tlastTaskId = items[items.length -1].id;\r\n\t\t}\r\n\t\tvar placeholderTask = {\r\n\t\t\tstart_date: start_date, \r\n\t\t\tend_date: end_date, \r\n\t\t\trow_height: placeholderConfig.height || 0,\r\n\t\t\tid: \"timeline_placeholder_task\", \r\n\t\t\tunscheduled: true,\r\n\t\t\tlastTaskId: lastTaskId, \r\n\t\t\tcalendar_id: placeholderConfig.calendar || \"global\",\r\n\t\t\t$source:[], \r\n\t\t\t$target: []\r\n\t\t};\r\n\t\titems.push(placeholderTask);\r\n\t}\r\n};","import isInViewPort from \"./viewport/is_link_in_viewport\";\r\nimport getVisibleRange from \"./viewport/factory/get_visible_link_range\";\r\nimport { childrenHaveBaselines, getMaxParentHeight } from \"./baseline_helper\";\r\n\r\n\r\nfunction createLinkRender(gantt){\r\n\r\nfunction _render_link_element(link, view, config) {\r\n\tvar source = gantt.getTask(link.source);\r\n\tif(source.hide_bar){\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar target = gantt.getTask(link.target);\r\n\tif(target.hide_bar){\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar pt = path_builder.get_endpoint(link, view, source, target);\r\n\tvar dy = pt.e_y - pt.y;\r\n\tvar dx = pt.e_x - pt.x;\r\n\tif(!dx && !dy){\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tvar dots = path_builder.get_points(link, view, source, target);\r\n\tconst lines = drawer.get_lines(dots, view);\r\n\r\n\tconst shapes = transform_lines_to_shapes(lines.filter(l => l.size > 0), config);\r\n \r\n\tconst div = render_shapes(shapes, view, link, config);\r\n\r\n\r\n\tvar css = \"gantt_task_link\";\r\n\r\n\tif (link.color) {\r\n\t\tcss += \" gantt_link_inline_color\";\r\n\t}\r\n\tvar cssTemplate = gantt.templates.link_class ? gantt.templates.link_class(link) : \"\";\r\n\tif (cssTemplate) {\r\n\t\tcss += \" \" + cssTemplate;\r\n\t}\r\n\r\n\tif (config.highlight_critical_path && gantt.isCriticalLink) {\r\n\t\tif (gantt.isCriticalLink(link))\r\n\t\t\tcss += \" gantt_critical_link\";\r\n\t}\r\n\r\n\tdiv.className = css;\r\n\r\n\tif(view.$config.link_attribute){\r\n\t\tdiv.setAttribute(view.$config.link_attribute, link.id);\r\n\t\tdiv.setAttribute(\"link_id\", link.id);\r\n\t}\r\n\tif (link.color) {\r\n\t\tdiv.style.setProperty(\"--dhx-gantt-link-background\", link.color);\r\n\t}\r\n\r\n\tgantt._waiAria.linkAttr(link, div);\r\n\r\n\treturn div;\r\n}\r\n\r\n\tfunction render_shapes(shapes, view, link, config) {\r\n\t\tconst container = document.createElement(\"div\");\r\n\r\n\t\tshapes.forEach(shape => {\r\n\t\t\tlet element;\r\n\t\t\tif (shape.type === 'line') {\r\n\t\t\t\telement = drawer.render_line(shape.data, null, view, link.source);\r\n\t\t\t} else if (shape.type === 'corner') {\r\n\t\t\t\telement = drawer.render_corner(shape.data, view);\r\n\t\t\t}else if (shape.type === 'arrow') {\r\n\t\t\t\telement = drawer.render_arrow(shape.data, config);\r\n\t\t\t}\r\n\r\n\t\t\tcontainer.appendChild(element);\r\n\t\t});\r\n\r\n\t\treturn container;\r\n\t}\r\n\r\n\tfunction transform_lines_to_shapes(lines, config) {\r\n\t\tconst radius = config.link_radius || 4;\r\n\t\tconst arrowSize = config.link_arrow_size || 6; // Arrow size from config\r\n\t\tconst shapes = [];\r\n\t\r\n\t\tfor (let i = 0; i < lines.length; i++) {\r\n\t\t\tconst line = lines[i];\r\n\t\t\tconst nextLine = lines[i + 1];\r\n\t\r\n\t\t\tif (!nextLine || config.link_radius <= 1) {\r\n\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\r\n\t\t\tif (line.direction !== nextLine.direction) {\r\n\t\t\t\tif(line.size < radius || nextLine.size < radius){\r\n\t\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tline.size -= radius;\r\n\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\r\n\t\t\t\tlet cornerX = line.x;\r\n\t\t\t\tlet cornerY = line.y - config.link_line_width / 2;\r\n\t\r\n\t\t\t\tswitch (line.direction) {\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\tcornerX += line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\tcornerX -= line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'down':\r\n\t\t\t\t\t\tcornerY += line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'up':\r\n\t\t\t\t\t\tcornerY -= line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\tconst corner = {\r\n\t\t\t\t\tx: cornerX,\r\n\t\t\t\t\ty: cornerY,\r\n\t\t\t\t\tdirection: { from: line.direction, to: nextLine.direction },\r\n\t\t\t\t\tradius\r\n\t\t\t\t};\r\n\t\t\t\tshapes.push({ type: 'corner', data: corner });\r\n\t\r\n\t\t\t\tswitch (nextLine.direction) {\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\tnextLine.x += radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\tnextLine.x -= radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'down':\r\n\t\t\t\t\t\tnextLine.y += radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'up':\r\n\t\t\t\t\t\tnextLine.y -= radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tconst lastLine = lines[lines.length - 1];\r\n\t\r\n\t\tif (lastLine.direction === 'right' || lastLine.direction === 'left') {\r\n\t\t\tlastLine.size -= arrowSize*3/4; \r\n\t\r\n\t\t\tlet arrowX = lastLine.direction === 'right' ? (lastLine.x + lastLine.size) : lastLine.x - lastLine.size - arrowSize/2;\r\n\t\t\tlet arrowY = lastLine.y - (config.link_line_width / 2) - (arrowSize / 2) + 1;\r\n\t\r\n\t\t\tif(lastLine.direction === 'left'){\r\n\t\t\t\tarrowY -= 1;// left pointing arrows for some reason need adjustments\r\n\t\t\t\tarrowX -= 2;\r\n\t\t\t}else{\r\n\t\t\t\tarrowX -= 1;\r\n\t\t\t}\r\n\t\t\tconst arrow = {\r\n\t\t\t\tx: arrowX,\r\n\t\t\t\ty: arrowY,\r\n\t\t\t\tsize: arrowSize,\r\n\t\t\t\tdirection: lastLine.direction\r\n\t\t\t};\r\n\t\r\n\t\t\tshapes.push({ type: 'line', data: lastLine });\r\n\t\t\tshapes.push({ type: 'arrow', data: arrow });\r\n\t\t} else {\r\n\t\t\tshapes.push({ type: 'line', data: lastLine });\r\n\t\t}\r\n\t\r\n\t\treturn shapes;\r\n\t}\r\n\t\r\n\r\n\r\nvar drawer = {\r\n\tcurrent_pos: null,\r\n\tdirs: {\"left\": 'left', \"right\": 'right', \"up\": 'up', \"down\": 'down'},\r\n\tpath: [],\r\n\tclear: function () {\r\n\t\tthis.current_pos = null;\r\n\t\tthis.path = [];\r\n\t},\r\n\tpoint: function (pos) {\r\n\t\tthis.current_pos = gantt.copy(pos);\r\n\t},\r\n\tget_lines: function (dots) {\r\n\t\tthis.clear();\r\n\t\tthis.point(dots[0]);\r\n\t\tfor (var i = 1; i < dots.length; i++) {\r\n\t\t\tthis.line_to(dots[i]);\r\n\t\t}\r\n\t\treturn this.get_path();\r\n\t},\r\n\tline_to: function (pos) {\r\n\t\tvar next = gantt.copy(pos);\r\n\t\tvar prev = this.current_pos;\r\n\r\n\t\tvar line = this._get_line(prev, next);\r\n\t\tthis.path.push(line);\r\n\t\tthis.current_pos = next;\r\n\t},\r\n\tget_path: function () {\r\n\t\treturn this.path;\r\n\t},\r\n\tget_wrapper_sizes: function (v, view, itemId) {\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar res,\r\n\t\t\twrapper_size = config.link_wrapper_width,\r\n\t\t\ty = v.y - (wrapper_size) / 2;\r\n\t\tswitch (v.direction) {\r\n\t\t\tcase this.dirs.left:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y,\r\n\t\t\t\t\theight: wrapper_size,\r\n\t\t\t\t\tlineHeight: wrapper_size,\r\n\t\t\t\t\tleft: v.x - v.size - wrapper_size / 2,\r\n\t\t\t\t\twidth: v.size + wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.right:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y,\r\n\t\t\t\t\tlineHeight: wrapper_size,\r\n\t\t\t\t\theight: wrapper_size,\r\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\r\n\t\t\t\t\twidth: v.size + wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.up:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y - v.size,\r\n\t\t\t\t\tlineHeight: v.size + wrapper_size,\r\n\t\t\t\t\theight: v.size + wrapper_size,\r\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\r\n\t\t\t\t\twidth: wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.down:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y /*- wrapper_size/2*/,\r\n\t\t\t\t\tlineHeight: v.size + wrapper_size,\r\n\t\t\t\t\theight: v.size + wrapper_size,\r\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\r\n\t\t\t\t\twidth: wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t},\r\n\tget_line_sizes: function (v, view) {\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar res,\r\n\t\t\tline_size = config.link_line_width,\r\n\t\t\twrapper_size = config.link_wrapper_width,\r\n\t\t\tsize = v.size + line_size;\r\n\t\tswitch (v.direction) {\r\n\t\t\tcase this.dirs.left:\r\n\t\t\tcase this.dirs.right:\r\n\t\t\t\tres = {\r\n\t\t\t\t\theight: line_size,\r\n\t\t\t\t\twidth: size,\r\n\t\t\t\t\tmarginTop: (wrapper_size - line_size) / 2,\r\n\t\t\t\t\tmarginLeft: (wrapper_size - line_size) / 2\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.up:\r\n\t\t\tcase this.dirs.down:\r\n\t\t\t\tres = {\r\n\t\t\t\t\theight: size,\r\n\t\t\t\t\twidth: line_size,\r\n\t\t\t\t\tmarginTop: (wrapper_size - line_size) / 2,\r\n\t\t\t\t\tmarginLeft: (wrapper_size - line_size) / 2\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\r\n\t\treturn res;\r\n\t},\r\n\trender_line: function (v, end, view, itemId) {\r\n\t\tvar pos = this.get_wrapper_sizes(v, view, itemId);\r\n\t\tvar wrapper = document.createElement(\"div\");\r\n\t\twrapper.style.cssText = [\r\n\t\t\t\"top:\" + pos.top + \"px\",\r\n\t\t\t\"left:\" + pos.left + \"px\",\r\n\t\t\t\"height:\" + pos.height + \"px\",\r\n\t\t\t\"width:\" + pos.width + \"px\"\r\n\t\t].join(';');\r\n\t\twrapper.className = \"gantt_line_wrapper\";\r\n\r\n\t\tvar innerPos = this.get_line_sizes(v, view);\r\n\t\tvar inner = document.createElement(\"div\");\r\n\t\tinner.style.cssText = [\r\n\t\t\t\"height:\" + innerPos.height + \"px\",\r\n\t\t\t\"width:\" + innerPos.width + \"px\",\r\n\t\t\t\"margin-top:\" + innerPos.marginTop + \"px\",\r\n\t\t\t\"margin-left:\" + innerPos.marginLeft + \"px\"\r\n\t\t].join(\";\");\r\n\r\n\t\tinner.className = \"gantt_link_line_\" + v.direction;\r\n\t\twrapper.appendChild(inner);\r\n\r\n\t\treturn wrapper;\r\n\t},\r\n\r\n\trender_corner: function (corner, view) {\r\n\t\tconst radius = corner.radius;\r\n\t\tconst config = view.$getConfig();\r\n\t\tconst lineWidth = config.link_line_width || 2;\r\n\t\tconst cornerDiv = document.createElement(\"div\");\r\n\t\r\n\t\tcornerDiv.classList.add(\"gantt_link_corner\");\r\n\t\tcornerDiv.classList.add(`gantt_link_corner_${corner.direction.from}_${corner.direction.to}`);\r\n\t\r\n\t\tcornerDiv.style.width = `${radius}px`;\r\n\t\tcornerDiv.style.height = `${radius}px`;\r\n\t\r\n\t\tlet borderVertical;\r\n\t\tlet borderHorizontal;\r\n\r\n\t\tif (corner.direction.from === 'right' && corner.direction.to === 'down') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'down' && corner.direction.to === 'right') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'right' && corner.direction.to === 'up') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t} else if (corner.direction.from === 'up' && corner.direction.to === 'right') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t} else if (corner.direction.from === 'left' && corner.direction.to === 'down') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'down' && corner.direction.to === 'left') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'left' && corner.direction.to === 'up') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t} else if (corner.direction.from === 'up' && corner.direction.to === 'left') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t}\r\n\r\n\t\tcornerDiv.style[`border${borderHorizontal}Width`] = `${lineWidth}px`;\r\n\t\tcornerDiv.style[`border${borderVertical}Width`] = `${lineWidth}px`;\r\n\t\tcornerDiv.style[`border${borderVertical}Style`] = `solid`;\r\n\t\tcornerDiv.style[`border${borderHorizontal}Style`] = `solid`;\r\n\t\tcornerDiv.style[`border${borderHorizontal}${borderVertical}Radius`] = `${radius}px`;\r\n\r\n\t\r\n\t\treturn cornerDiv;\r\n\t},\r\n\r\n\trender_arrow(arrow, config) {\r\n\t\tvar div = document.createElement(\"div\");\r\n\t\tvar top = arrow.y;\r\n\t\tvar left = arrow.x;\r\n\t\r\n\t\tvar size = config.link_arrow_size;\r\n\t\tdiv.style.setProperty(\"--dhx-gantt-icon-size\", `${size}px`);\r\n\t\r\n\t\tvar className = \"gantt_link_arrow gantt_link_arrow_\" + arrow.direction;\r\n\r\n\t\tdiv.style.top = top + \"px\";\r\n\t\tdiv.style.left = left + 'px';\r\n\t\tdiv.className = className;\r\n\t\r\n\t\treturn div;\r\n\t},\r\n\t\r\n\t_get_line: function (from, to) {\r\n\t\tvar direction = this.get_direction(from, to);\r\n\t\tvar vect = {\r\n\t\t\tx: from.x,\r\n\t\t\ty: from.y,\r\n\t\t\tdirection: this.get_direction(from, to)\r\n\t\t};\r\n\t\tif (direction == this.dirs.left || direction == this.dirs.right) {\r\n\t\t\tvect.size = Math.abs(from.x - to.x);\r\n\t\t} else {\r\n\t\t\tvect.size = Math.abs(from.y - to.y);\r\n\t\t}\r\n\t\treturn vect;\r\n\t},\r\n\tget_direction: function (from, to) {\r\n\t\tvar direction = 0;\r\n\t\tif (to.x < from.x) {\r\n\t\t\tdirection = this.dirs.left;\r\n\t\t} else if (to.x > from.x) {\r\n\t\t\tdirection = this.dirs.right;\r\n\t\t} else if (to.y > from.y) {\r\n\t\t\tdirection = this.dirs.down;\r\n\t\t} else {\r\n\t\t\tdirection = this.dirs.up;\r\n\t\t}\r\n\t\treturn direction;\r\n\t}\r\n\r\n};\r\n\r\nvar path_builder = {\r\n\r\n\tpath: [],\r\n\tclear: function () {\r\n\t\tthis.path = [];\r\n\t},\r\n\tcurrent: function () {\r\n\t\treturn this.path[this.path.length - 1];\r\n\t},\r\n\tpoint: function (next) {\r\n\t\tif (!next)\r\n\t\t\treturn this.current();\r\n\r\n\t\tthis.path.push(gantt.copy(next));\r\n\t\treturn next;\r\n\t},\r\n\tpoint_to: function (direction, diff, point) {\r\n\t\tif (!point)\r\n\t\t\tpoint = gantt.copy(this.point());\r\n\t\telse\r\n\t\t\tpoint = {x: point.x, y: point.y};\r\n\t\tvar dir = drawer.dirs;\r\n\t\tswitch (direction) {\r\n\t\t\tcase (dir.left):\r\n\t\t\t\tpoint.x -= diff;\r\n\t\t\t\tbreak;\r\n\t\t\tcase (dir.right):\r\n\t\t\t\tpoint.x += diff;\r\n\t\t\t\tbreak;\r\n\t\t\tcase (dir.up):\r\n\t\t\t\tpoint.y -= diff;\r\n\t\t\t\tbreak;\r\n\t\t\tcase (dir.down):\r\n\t\t\t\tpoint.y += diff;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn this.point(point);\r\n\t},\r\n\tget_points: function (link, view, source, target) {\r\n\t\tvar pt = this.get_endpoint(link, view, source, target);\r\n\t\tvar xy = gantt.config;\r\n\r\n\t\tvar dy = pt.e_y - pt.y;\r\n\t\tvar dx = pt.e_x - pt.x;\r\n\r\n\t\tvar dir = drawer.dirs;\r\n\r\n\t\tvar rowHeight = view.getItemHeight(link.source);\r\n\r\n\t\tthis.clear();\r\n\t\tthis.point({x: pt.x, y: pt.y});\r\n\r\n\t\tvar shiftX = 2 * xy.link_arrow_size;//just random size for first line\r\n\t\tvar lineType = this.get_line_type(link, view.$getConfig());\r\n\r\n\t\tvar forward = (pt.e_x > pt.x);\r\n\t\tif (lineType.from_start && lineType.to_start) {\r\n\t\t\tthis.point_to(dir.left, shiftX);\r\n\t\t\tif (forward) {\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t} else {\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t}\r\n\t\t\tthis.point_to(dir.right, shiftX);\r\n\r\n\t\t} else if (!lineType.from_start && lineType.to_start) {\r\n\t\t\tforward = (pt.e_x > (pt.x + 2 * shiftX));\r\n\t\t\tthis.point_to(dir.right, shiftX);\r\n\t\t\tif (forward) {\r\n\t\t\t\tdx -= shiftX;\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t} else {\r\n\t\t\t\tdx -= 2 * shiftX;\r\n\t\t\t\tvar sign = dy > 0 ? 1 : -1;\r\n\r\n\t\t\t\tthis.point_to(dir.down, sign * (rowHeight / 2));\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, sign * ( Math.abs(dy) - (rowHeight / 2)));\r\n\t\t\t\tthis.point_to(dir.right, shiftX);\r\n\t\t\t}\r\n\r\n\t\t} else if (!lineType.from_start && !lineType.to_start) {\r\n\t\t\tthis.point_to(dir.right, shiftX);\r\n\t\t\tif (forward) {\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t} else {\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t}\r\n\t\t\tthis.point_to(dir.left, shiftX);\r\n\t\t} else if (lineType.from_start && !lineType.to_start) {\r\n\r\n\t\t\tforward = (pt.e_x > (pt.x - 2 * shiftX));\r\n\t\t\tthis.point_to(dir.left, shiftX);\r\n\r\n\t\t\tif (!forward) {\r\n\t\t\t\tdx += shiftX;\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t} else {\r\n\t\t\t\tdx += 2 * shiftX;\r\n\t\t\t\tvar sign = dy > 0 ? 1 : -1;\r\n\t\t\t\tthis.point_to(dir.down, sign * (rowHeight / 2));\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, sign * ( Math.abs(dy) - (rowHeight / 2)));\r\n\t\t\t\tthis.point_to(dir.left, shiftX);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this.path;\r\n\t},\r\n\tget_line_type: function(link, config){\r\n\t\tvar types = config.links;\r\n\t\tvar from_start = false, to_start = false;\r\n\t\tif (link.type == types.start_to_start) {\r\n\t\t\tfrom_start = to_start = true;\r\n\t\t} else if (link.type == types.finish_to_finish) {\r\n\t\t\tfrom_start = to_start = false;\r\n\t\t} else if (link.type == types.finish_to_start) {\r\n\t\t\tfrom_start = false;\r\n\t\t\tto_start = true;\r\n\t\t} else if (link.type == types.start_to_finish) {\r\n\t\t\tfrom_start = true;\r\n\t\t\tto_start = false;\r\n\t\t} else {\r\n\t\t\tgantt.assert(false, \"Invalid link type\");\r\n\t\t}\r\n\r\n\t\tif(config.rtl){\r\n\t\t\tfrom_start = !from_start;\r\n\t\t\tto_start = !to_start;\r\n\t\t}\r\n\r\n\t\treturn {from_start: from_start, to_start: to_start};\r\n\t},\r\n\r\n\tget_endpoint: function (link, view, source, target) {\r\n\t\tvar config = view.$getConfig();\r\n\r\n\t\tvar lineType = this.get_line_type(link, config);\r\n\t\tvar from_start = lineType.from_start,\r\n\t\t\tto_start = lineType.to_start;\r\n\r\n\t\tvar from = getMilestonePosition(source, view, config),\r\n\t\t\tto = getMilestonePosition(target, view, config);\r\n\r\n\t\treturn {\r\n\t\t\tx: from_start ? from.left : (from.left + from.width),\r\n\t\t\te_x: to_start ? to.left : (to.left + to.width),\r\n\t\t\ty: from.top + (from.rowHeight/2) - 1,\r\n\t\t\te_y: to.top + (to.rowHeight/2) - 1\r\n\t\t};\r\n\t}\r\n};\r\n\r\nfunction getMilestonePosition(task, view, config){\r\n\tvar pos = view.getItemPosition(task);\r\n\r\n\t// GS-2270: Link to the split children shouldn't exceed the parent row height\r\n\tlet splitParams = getMaxParentHeight(gantt, view, task);\r\n\tlet maxHeight = splitParams.maxHeight;\r\n\r\n\tlet splitChild = splitParams.splitChild;\r\n\tconst baselinesOnDifferentRow = gantt.config.baselines !== false && (gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\");\r\n\tconst baselines = baselinesOnDifferentRow && task.baselines && task.baselines.length;\r\n\r\n\tif (splitParams.shrinkHeight){\r\n\t\tpos.rowHeight = maxHeight;\r\n\t}\r\n\r\n\tlet milestoneWidth;\r\n\tlet milestoneTask = gantt.getTaskType(task.type) == config.types.milestone;\r\n\tif(milestoneTask){\r\n\t\tlet milestoneHeight = view.getBarHeight(task.id, true);\r\n\t\tmilestoneWidth = Math.sqrt(2*milestoneHeight*milestoneHeight);\r\n\t\tif (splitParams.shrinkHeight && maxHeight < milestoneHeight){\r\n\t\t\tmilestoneHeight = maxHeight;\r\n\t\t\tmilestoneWidth = maxHeight;\r\n\t\t}\r\n\t\tpos.left -= milestoneWidth / 2;\r\n\t\tpos.width = milestoneWidth;\r\n\t} \r\n\tif (splitChild){\r\n\t\tif (maxHeight >= pos.height) {\r\n\t\t\tconst siblingBaselines = childrenHaveBaselines(gantt, task.parent);\r\n\t\t\tif (baselines || siblingBaselines){\r\n\t\t\t\tif (milestoneTask){\r\n\t\t\t\t\tpos.rowHeight = pos.height + 4;\r\n\t\t\t\t\tpos.left += (pos.width - pos.rowHeight + 4) / 2;\r\n\t\t\t\t\tpos.width = pos.rowHeight - 3;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tpos.rowHeight = pos.height + 6;\r\n\t\t\t\t}\r\n\t\t\t} else if (milestoneTask) {\r\n\t\t\t\tpos.left += (milestoneWidth - pos.height) / 2;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tpos.rowHeight = maxHeight + 2;\r\n\t\t\tif (milestoneTask){\r\n\t\t\t\tpos.left += (pos.width - pos.rowHeight + 4) / 2;\r\n\t\t\t\tpos.width = pos.rowHeight - 3;\r\n\t\t\t}\r\n\t\t}\r\n\t} else if (baselines){\r\n\t\tpos.rowHeight = pos.height + 4;\r\n\t}\r\n\r\n\treturn pos;\r\n}\r\n\r\n\r\nreturn {\r\n\trender: _render_link_element,\r\n\tupdate: null,\r\n\t//getRectangle: getLinkRectangle\r\n\tisInViewPort: isInViewPort,\r\n\tgetVisibleRange: getVisibleRange()\r\n};\r\n}\r\n\r\nexport default createLinkRender;","export default function(item, viewport, view, config, gantt){\r\n // GS-2481 and GS-1715, don't remove selected task when using keyboard shortcuts and when the inline editor is opened\r\n if(gantt.$ui.getView(\"grid\") && ((gantt.config.keyboard_navigation && gantt.getSelectedId()) || (gantt.ext.inlineEditors && gantt.ext.inlineEditors.getState().id))) {\r\n\t\treturn true;\r\n\t}\r\n var top = view.getItemTop(item.id);\r\n\tvar height = view.getItemHeight(item.id);\r\n\r\n\tif(top > viewport.y_end || top + height < viewport.y){\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn true;\r\n};","import * as helpers from \"../utils/helpers\";\r\n\r\nexport default function createResourceTimelineBuilder(gantt){\r\n\r\n\tlet resourceTaskCache = {};\r\n\r\n\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(){\r\n\t\tresourceTaskCache = {};\r\n\t});\r\n\r\n\tfunction getResourceLoad(resource, resourceProperty, scale, timeline){\r\n\t\tconst cacheKey = resource.id + \"_\" + resourceProperty + \"_\" + scale.unit + \"_\" + scale.step;\r\n\t\tlet res;\r\n\t\tif (!resourceTaskCache[cacheKey]) {\r\n\t\t\tres = resourceTaskCache[cacheKey] = calculateResourceLoad(resource, resourceProperty, scale, timeline);\r\n\r\n\t\t} else {\r\n\t\t\tres = resourceTaskCache[cacheKey];\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tfunction calculateResourceLoadFromAssignments(items, scale, assignmentsPassed){\r\n\t\tconst scaleUnit = scale.unit;\r\n\t\tconst scaleStep = scale.step;\r\n\t\tconst timegrid = {};\r\n\r\n\t\tconst precalculatedTimes = {};\r\n\t\tfor (let i = 0; i < items.length; i++) {\r\n\t\t\tconst item = items[i];\r\n\t\t\tlet task = item;\r\n\t\t\tif(assignmentsPassed){\r\n\t\t\t\ttask = gantt.getTask(item.task_id);\r\n\t\t\t}\r\n\t\t\tif (task.unscheduled){\r\n\t\t\t\tcontinue; // do not process assignments for unscheduled tasks\r\n\t\t\t}\r\n\t\t\tlet minDate = (item.start_date || task.start_date);\r\n\t\t\tlet maxDate = (item.end_date || task.end_date);\r\n\t\t\tif(assignmentsPassed){\r\n\t\t\t\tif(item.start_date){\r\n\t\t\t\t\tminDate = new Date(Math.max(item.start_date.valueOf(), task.start_date.valueOf()));\r\n\t\t\t\t}\r\n\t\t\t\tif(item.end_date){\r\n\t\t\t\t\tmaxDate = new Date(Math.min(item.end_date.valueOf(), task.end_date.valueOf()));\r\n\t\t\t\t}\r\n\t\t\t\t// GS-2063: handle case with fixedDates mode\r\n\t\t\t\tif(item.mode && item.mode == \"fixedDates\"){\r\n\t\t\t\t\tminDate = item.start_date;\r\n\t\t\t\t\tmaxDate = item.end_date;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet firstColumn = helpers.findBinary(scale.trace_x, minDate.valueOf());\r\n\t\t\tlet minScaleDate = new Date(scale.trace_x[firstColumn] || gantt.date[scaleUnit + \"_start\"](new Date(minDate)));\r\n\t\t\t// GS-2307: need to take into account that task could start before the min scale date\r\n\t\t\t// so the task would be added to timegrid\r\n\t\t\tlet currDate = new Date(Math.min(minDate.valueOf(), minScaleDate.valueOf())); \r\n\r\n\t\t\tlet calendar = gantt.config.work_time ? gantt.getTaskCalendar(task) : gantt;\r\n\t\t\tprecalculatedTimes[calendar.id] = {};\r\n\t\t\twhile (currDate < maxDate) {\r\n\t\t\t\tconst cachedTimes = precalculatedTimes[calendar.id];\r\n\r\n\t\t\t\tlet date = currDate;\r\n\t\t\t\tconst timestamp = date.valueOf();\r\n\r\n\t\t\t\tcurrDate = gantt.date.add(currDate, scaleStep, scaleUnit);\r\n\r\n\t\t\t\tif(cachedTimes[timestamp] === false){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar isWorkTime = calendar.isWorkTime({date: date, task: task, unit: scaleUnit});\r\n\t\t\t\tif(!isWorkTime){\r\n\t\t\t\t\tcachedTimes[timestamp] = false;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!timegrid[timestamp]){\r\n\t\t\t\t\ttimegrid[timestamp] = {tasks: [], assignments: []};\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttimegrid[timestamp].tasks.push(task);\r\n\t\t\t\tif(assignmentsPassed){\r\n\t\t\t\t\ttimegrid[timestamp].assignments.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn timegrid;\r\n\t}\r\n\r\n\tfunction calculateResourceLoad(resource, resourceProperty, scale, timeline) {\r\n\r\n\t\tlet items;\r\n\t\tlet assignmentsPassed = false;\r\n\t\tlet timegrid = {};\r\n\r\n\t\tif(gantt.config.process_resource_assignments && resourceProperty === gantt.config.resource_property){\r\n\t\t\tif(resource.$role == \"task\"){\r\n\t\t\t\titems = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id);\r\n\t\t\t}else{\r\n\t\t\t\titems = gantt.getResourceAssignments(resource.id);\r\n\t\t\t}\r\n\r\n\t\t\tassignmentsPassed = true;\r\n\t\t}else if(resource.$role == \"task\"){\r\n\t\t\titems = [];\r\n\t\t}else{\r\n\t\t\titems = gantt.getTaskBy(resourceProperty, resource.id);\r\n\t\t}\r\n\r\n\t\ttimegrid = calculateResourceLoadFromAssignments(items, scale, assignmentsPassed);\r\n\t\tconst scaleUnit = scale.unit;\r\n\t\tconst scaleStep = scale.step;\r\n\r\n\t\tconst timetable = [];\r\n\t\tlet start, end, tasks, assignments, cell;\r\n\t\tconst config = timeline.$getConfig();\r\n\r\n\t\tfor(let i = 0; i < scale.trace_x.length; i++){\r\n\t\t\tstart = new Date(scale.trace_x[i]);\r\n\t\t\tend = gantt.date.add(start, scaleStep, scaleUnit);\r\n\t\t\tcell = timegrid[start.valueOf()] || {};\r\n\t\t\ttasks = cell.tasks || [];\r\n\t\t\tassignments = cell.assignments || [];\r\n\t\t\tif(tasks.length || config.resource_render_empty_cells){\r\n\t\t\t\ttimetable.push({\r\n\t\t\t\t\tstart_date: start,\r\n\t\t\t\t\tend_date: end,\r\n\t\t\t\t\ttasks: tasks,\r\n\t\t\t\t\tassignments: assignments\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttimetable.push(null);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn timetable;\r\n\t}\r\n\r\n\r\n\r\n\treturn getResourceLoad;\r\n};","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport isPlaceholderTask from \"../../../utils/placeholder_task\";\r\n\r\nfunction _init_dnd(gantt, grid) {\r\n\tvar DnD = gantt.$services.getService(\"dnd\");\r\n\r\n\tif(!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)){\r\n\t\treturn;\r\n\t}\r\n\r\n\tfunction locate(e){\r\n\t\treturn domHelpers.locateAttribute(e, grid.$config.item_attribute);\r\n\t}\r\n\r\n\tfunction getStore(){\r\n\t\treturn gantt.getDatastore(grid.$config.bind);\r\n\t}\r\n\r\n\tfunction checkPlaceholderTask(id){\r\n\t\treturn isPlaceholderTask(id, gantt, getStore());\r\n\t}\r\n\r\n\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\r\n\tif (gantt.defined(grid.$getConfig().dnd_sensitivity))\r\n\t\tdnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\r\n\r\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\t\tif (!el) return false;\r\n\t\tif (gantt.hideQuickInfo) gantt.hideQuickInfo();\r\n\r\n\t\tif (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar id = el.getAttribute(grid.$config.item_attribute);\r\n\t\tif (checkPlaceholderTask(id)) return false;\r\n\r\n\t\tvar datastore = getStore();\r\n\r\n\t\tvar task = datastore.getItem(id);\r\n\r\n\t\tif (gantt.isReadonly(task))\r\n\t\t\treturn false;\r\n\r\n\t\tdnd.config.initial_open_state = task.$open;\r\n\t\tif (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\t\tdnd.config.marker.innerHTML = el.outerHTML;\r\n\t\tvar element = dnd.config.marker.firstChild;\r\n\t\tif(element){\r\n\t\t\telement.style.position = \"static\";\r\n\t\t}\r\n\r\n\t\tdnd.config.id = el.getAttribute(grid.$config.item_attribute);\r\n\r\n\t\tvar store = getStore();\r\n\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\t\tdnd.config.index = store.getBranchIndex(dnd.config.id);\r\n\t\tdnd.config.parent = task.parent;\r\n\t\ttask.$open = false;\r\n\t\ttask.$transparent = true;\r\n\t\tthis.refreshData();\r\n\t}, gantt));\r\n\r\n\tdnd.lastTaskOfLevel = function (level) {\r\n\t\tvar last_item = null;\r\n\t\tvar store = getStore();\r\n\t\tvar tasks = store.getItems();\r\n\t\tfor (var i = 0, len = tasks.length; i < len; i++) {\r\n\t\t\tif (tasks[i].$level == level) {\r\n\t\t\t\tlast_item = tasks[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn last_item ? last_item.id : null;\r\n\t};\r\n\tdnd._getGridPos = gantt.bind(function (e) {\r\n\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\r\n\t\t// row offset\r\n\t\tvar x = pos.x + grid.$grid.scrollLeft;\r\n\t\tvar y = e.pos.y - 10;\r\n\r\n\t\tvar rowHeight = grid.getItemHeight(dnd.config.id);\r\n\t\t// prevent moving row out of grid_data container\r\n\t\tif (y < pos.y) y = pos.y;\r\n\t\tvar gridHeight = grid.getTotalHeight();\r\n\t\tif (y > pos.y + gridHeight - rowHeight) y = pos.y + gridHeight - rowHeight;\r\n\t\tconst maxBottom = pos.y + pos.height;\r\n\t\tif (y > maxBottom - rowHeight) {\r\n\t\t\ty = maxBottom - rowHeight;\r\n\t\t}\r\n\r\n\t\tpos.x = x;\r\n\t\tpos.y = y;\r\n\t\treturn pos;\r\n\t}, gantt);\r\n\tdnd._getTargetY = gantt.bind(function (e) {\r\n\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\r\n\t\tvar scrollPos = grid.$state.scrollTop || 0;\r\n\t\tvar maxBottom = gantt.$grid_data.getBoundingClientRect().height + scrollPos;\r\n\r\n\t\tvar y = e.pageY - pos.y + scrollPos;\r\n\t\tif (y > maxBottom) {\r\n\t\t\ty = maxBottom;\r\n\t\t} else if (y < scrollPos) {\r\n\t\t\ty = scrollPos;\r\n\t\t}\r\n\t\treturn y;\r\n\t}, gantt);\r\n\tdnd._getTaskByY = gantt.bind(function (y, dropIndex) {\r\n\r\n\t\tvar store = getStore();\r\n\r\n\t\ty = y || 0;\r\n\r\n\t\tvar index = grid.getItemIndexByTopPosition(y);\r\n\t\tindex = dropIndex < index ? index - 1 : index;\r\n\r\n\t\tif (index > store.countVisible() - 1)\r\n\t\t\treturn null;\r\n\r\n\t\treturn store.getIdByIndex(index);\r\n\t}, gantt);\r\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\r\n\t\tvar gridDataSizes = gantt.$grid_data.getBoundingClientRect();\r\n\t\tvar maxBottom = gridDataSizes.height + gridDataSizes.y + (grid.$state.scrollTop || 0) + window.scrollY;\r\n\t\tvar dd = dnd.config;\r\n\t\tvar pos = dnd._getGridPos(e);\r\n\r\n\t\tgantt._waiAria.reorderMarkerAttr(dd.marker);\r\n\r\n\t\tvar config = grid.$getConfig(),\r\n\t\t\tstore = getStore();\r\n\r\n\t\t// setting position of row\r\n\t\tif (pos.y < maxBottom) {\r\n\t\t\tdd.marker.style.top = pos.y + \"px\";\r\n\t\t} else {\r\n\t\t\tdd.marker.style.top = maxBottom + \"px\";\r\n\t\t}\r\n\t\tdd.marker.style.left = pos.x + 10 + \"px\";\r\n\t\tconst containerSize = domHelpers.getNodePosition(gantt.$root);\r\n\t\tif (pos.width > containerSize.width){\r\n\t\t\tdd.marker.style.width = containerSize.width - 10 - 2 + \"px\";\r\n\t\t\tdd.marker.style.overflow = \"hidden\";\t\r\n\t\t}\r\n\r\n\t\t// highlight row when mouseover\r\n\t\tvar item = store.getItem(dnd.config.id);\r\n\t\tvar targetY = dnd._getTargetY(e);\r\n\t\tvar el = dnd._getTaskByY(targetY, store.getIndexById(item.id));\r\n\r\n\t\tif (!store.exists(el)) {\r\n\t\t\tel = dnd.lastTaskOfLevel(config.order_branch_free ? item.$level : 0);\r\n\t\t\tif (el == dnd.config.id) {\r\n\t\t\t\tel = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction allowedLevel(next, item) {\r\n\t\t\treturn (!(store.isChildOf(over.id, item.id)) && (next.$level == item.$level || config.order_branch_free));\r\n\t\t}\r\n\r\n\t\tif (store.exists(el)) {\r\n\t\t\tvar over = store.getItem(el);\r\n\r\n\t\t\tvar itemTop = grid.getItemTop(over.id);\r\n\t\t\tvar itemHeight = grid.getItemHeight(over.id);\r\n\t\t\tif (itemTop + itemHeight / 2 < targetY) {\r\n\t\t\t\t//hovering over bottom part of item, check can be drop to bottom\r\n\t\t\t\tvar index = store.getIndexById(over.id);\r\n\t\t\t\tvar nextId = store.getNext(over.id);//adds +1 when hovering over placeholder\r\n\t\t\t\tvar next = store.getItem(nextId);\r\n\t\t\t\tif (checkPlaceholderTask(nextId)){\r\n\t\t\t\t\tvar prevId = store.getPrev(next.id);\r\n\t\t\t\t\tnext = store.getItem(prevId);\r\n\t\t\t\t}\r\n\t\t\t\tif (next) {\r\n\t\t\t\t\tif (next.id != item.id) {\r\n\t\t\t\t\t\tover = next; //there is a valid target\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (config.order_branch_free) {\r\n\t\t\t\t\t\t\tif (!(store.isChildOf(item.id, over.id) && store.getChildren(over.id).length == 1))\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tstore.move(item.id, store.getBranchIndex(over.id) + 1, store.getParent(over.id));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//we at end of the list, check and drop at the end of list\r\n\t\t\t\t\tnextId = store.getIdByIndex(index);\r\n\t\t\t\t\tnext = store.getItem(nextId);\r\n\r\n\t\t\t\t\tif (checkPlaceholderTask(nextId)){\r\n\t\t\t\t\t\tvar prevId = store.getPrev(next.id);\r\n\t\t\t\t\t\tnext = store.getItem(prevId);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (allowedLevel(next, item) && next.id != item.id) {\r\n\t\t\t\t\t\tstore.move(item.id, -1, store.getParent(next.id));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (config.order_branch_free) {\r\n\t\t\t\tif (over.id != item.id && allowedLevel(over, item) && !checkPlaceholderTask(over.id)) {\r\n\t\t\t\t\tif (!store.hasChild(over.id)) {\r\n\t\t\t\t\t\tover.$open = true;\r\n\t\t\t\t\t\tstore.move(item.id, -1, over.id);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (store.getIndexById(over.id) || itemHeight / 3 < targetY) return;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//if item is on different level, check the one before it\r\n\t\t\tvar index = store.getIndexById(over.id),\r\n\t\t\t\tprevId = store.getIdByIndex(index - 1);\r\n\r\n\t\t\tvar prev = store.getItem(prevId);\r\n\r\n\t\t\tvar shift = 1;\r\n\t\t\twhile ((!prev || prev.id == over.id) && index - shift >= 0) {\r\n\r\n\t\t\t\tprevId = store.getIdByIndex(index - shift);\r\n\t\t\t\tprev = store.getItem(prevId);\r\n\t\t\t\tshift++;\r\n\t\t\t}\r\n\r\n\t\t\tif (item.id == over.id || checkPlaceholderTask(over.id)) return;\r\n\t\t\t//replacing item under cursor\r\n\t\t\tif (allowedLevel(over, item) && item.id != over.id) {\r\n\t\t\t\tstore.move(item.id, 0, 0, over.id);\r\n\r\n\t\t\t} else if (over.$level == item.$level - 1 && !store.getChildren(over.id).length) {\r\n\t\t\t\tstore.move(item.id, 0, over.id);\r\n\r\n\t\t\t} else if (prev && (allowedLevel(prev, item)) && (item.id != prev.id)) {\r\n\t\t\t\tstore.move(item.id, -1, store.getParent(prev.id));\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\r\n\t\tvar store = getStore();\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\t\ttask.$transparent = false;\r\n\t\ttask.$open = dnd.config.initial_open_state;\r\n\r\n\t\tif (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, dnd.config.parent, dnd.config.index]) === false) {\r\n\t\t\tstore.move(dnd.config.id, dnd.config.index, dnd.config.parent);\r\n\t\t\ttask.$drop_target = null;\r\n\t\t} else {\r\n\t\t\tthis.callEvent(\"onRowDragEnd\", [dnd.config.id, task.$drop_target]);\r\n\t\t}\r\n\t\tgantt.render();\r\n\t\tthis.refreshData();\r\n\t}, gantt));\r\n}\r\n\r\nexport default {\r\n\tinit: _init_dnd\r\n};","/**\r\n * The state object for order branch drag and drop\r\n */\r\n\r\nimport * as utils from \"../../../../utils/utils\";\r\n\r\nexport default {\r\n\tcreateDropTargetObject: function createDropTargetObject(parent) {\r\n\t\tvar res = {\r\n\t\t\ttargetParent: null,\r\n\t\t\ttargetIndex: 0,\r\n\t\t\ttargetId: null,\r\n\t\t\tchild: false,\r\n\t\t\tnextSibling: false,\r\n\t\t\tprevSibling: false\r\n\t\t};\r\n\r\n\t\tif (parent) {\r\n\t\t\tutils.mixin(res, parent, true);\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\tnextSiblingTarget: function nextSiblingTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = targetTaskId;\r\n\t\tresult.nextSibling = true;\r\n\t\tresult.targetParent = store.getParent(result.targetId);\r\n\t\tresult.targetIndex = store.getBranchIndex(result.targetId);\r\n\t\tif(store.getParent(dndTaskId) != result.targetParent || result.targetIndex < store.getBranchIndex(dndTaskId)){\r\n\t\t\tresult.targetIndex += 1;\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\tprevSiblingTarget: function prevSiblingTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = targetTaskId;\r\n\t\tresult.prevSibling = true;\r\n\t\tresult.targetParent = store.getParent(result.targetId);\r\n\t\tresult.targetIndex = store.getBranchIndex(result.targetId);\r\n\t\tif(store.getParent(dndTaskId) == result.targetParent && result.targetIndex > store.getBranchIndex(dndTaskId)){\r\n\t\t\tresult.targetIndex -= 1;\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\tfirstChildTarget: function firstChildTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = targetTaskId;\r\n\t\tresult.targetParent = result.targetId;\r\n\t\tresult.targetIndex = 0;\r\n\t\tresult.child = true;\r\n\t\treturn result;\r\n\t},\r\n\tlastChildTarget: function lastChildTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar children = store.getChildren(targetTaskId);\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = children[children.length - 1];\r\n\t\tresult.targetParent = targetTaskId;\r\n\t\tresult.targetIndex = children.length;\r\n\t\tresult.nextSibling = true;\r\n\t\treturn result;\r\n\t}\r\n};","/**\r\n * resolve dnd position of the task when gantt.config.order_branch_free = false\r\n */\r\n\r\nimport dropTarget from \"./drop_target\";\r\n\r\nfunction getLast(store){\r\n\tvar current = store.getNext();\r\n\twhile(store.exists(current)){\r\n\r\n\t\tvar next = store.getNext(current);\r\n\t\tif(!store.exists(next)){\r\n\t\t\treturn current;\r\n\t\t}else{\r\n\t\t\tcurrent = next;\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction findClosesTarget(dndTaskId, taskId, allowedLevel, store, up){\r\n\tvar prev = taskId;\r\n\twhile(store.exists(prev)){\r\n\t\tvar targetLevel = store.calculateItemLevel(store.getItem(prev));\r\n\t\tif((targetLevel === allowedLevel || targetLevel === (allowedLevel - 1)) && store.getBranchIndex(prev) > -1){\r\n\t\t\tbreak;\r\n\t\t}else {\r\n\t\t\tprev = up ? store.getPrev(prev) : store.getNext(prev);\r\n\t\t}\r\n\t}\r\n\r\n\tif(store.exists(prev)){\r\n\t\tif(store.calculateItemLevel(store.getItem(prev)) === allowedLevel){\r\n\t\t\treturn up ? dropTarget.nextSiblingTarget(dndTaskId, prev, store) : dropTarget.prevSiblingTarget(dndTaskId, prev, store);\r\n\t\t}else{\r\n\t\t\treturn dropTarget.firstChildTarget(dndTaskId, prev, store);\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction findTargetAbove(dndTaskId, taskId, allowedLevel, store){\r\n\treturn findClosesTarget(dndTaskId, taskId, allowedLevel, store, true);\r\n}\r\nfunction findTargetBelow(dndTaskId, taskId, allowedLevel, store){\r\n\treturn findClosesTarget(dndTaskId, taskId, allowedLevel, store, false);\r\n}\r\n\r\nexport default function getSameLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store, level){\r\n\tvar result;\r\n\tif(targetTaskId !== store.$getRootId()){\r\n\t\tvar targetTask = store.getItem(targetTaskId);\r\n\t\tvar targetLevel = store.calculateItemLevel(targetTask);\r\n\t\tif(targetLevel === level){\r\n\t\t\tvar prevSibling = store.getPrevSibling(targetTaskId);\r\n\t\t\tif(relTargetPos < 0.5 && !prevSibling){\r\n\t\t\t\tresult = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t\t}else{\r\n\t\t\t\tif(relTargetPos < 0.5){\r\n\t\t\t\t\ttargetTaskId = prevSibling;\r\n\t\t\t\t}\r\n\t\t\t\tresult = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t\t}\r\n\t\t}else if(targetLevel > level){\r\n\t\t\tstore.eachParent(function(parent){\r\n\t\t\t\tif(store.calculateItemLevel(parent) === level){\r\n\t\t\t\t\ttargetTaskId = parent.id;\r\n\t\t\t\t}\r\n\t\t\t}, targetTask); \r\n\t\t\tresult = findTargetAbove(dndTaskId, targetTaskId, level, store);\r\n\t\t}else{\r\n\t\t\tvar targetAbove = findTargetAbove(dndTaskId, targetTaskId, level, store);\r\n\t\t\tvar targetBelow = findTargetBelow(dndTaskId, targetTaskId, level, store);\r\n\t\t\tresult = (relTargetPos < 0.5) ? targetAbove : targetBelow;\r\n\t\t}\r\n\t}else{\r\n\t\tvar rootId = store.$getRootId();\r\n\t\tvar rootLevel = store.getChildren(rootId);\r\n\t\tresult = dropTarget.createDropTargetObject();\r\n\t\tif(rootLevel.length && eventTop >= 0){\r\n\t\t\tresult = findTargetAbove(dndTaskId, getLast(store), level, store);\r\n\t\t}else{\r\n\t\t\tresult = findTargetBelow(dndTaskId, rootId, level, store);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n","import * as domHelpers from \"../../utils/dom_helpers\";\r\n\r\n/**\r\n * methods for highlighting current drag and drop position\r\n */\r\n\r\nfunction highlightPosition(target, root, grid){\r\n\tvar markerPos = getTaskMarkerPosition(target, grid);\r\n\t// setting position of row\r\n\troot.marker.style.left = markerPos.x + 9 + \"px\";\r\n\troot.marker.style.width = markerPos.width + \"px\";\r\n\troot.marker.style.overflow = \"hidden\";\r\n\tvar markerLine = root.markerLine;\r\n\tif(!markerLine){\r\n\t\tmarkerLine = document.createElement(\"div\");\r\n\t\tmarkerLine.className = \"gantt_drag_marker gantt_grid_dnd_marker\";\r\n\t\tmarkerLine.innerHTML = \"
\";\r\n\t\tmarkerLine.style.pointerEvents = \"none\";\r\n\t}\r\n\r\n\tif(target.child){\r\n\t\thighlightFolder(target, markerLine, grid);\r\n\t}else{\r\n\t\thighlightRow(target, markerLine, grid);\r\n\t}\r\n\r\n\tif(!root.markerLine){\r\n\t\tdocument.body.appendChild(markerLine);\r\n\t\troot.markerLine = markerLine;\r\n\t}\r\n}\r\n\r\nfunction removeLineHighlight(root){\r\n\tif(root.markerLine && root.markerLine.parentNode){\r\n\t\troot.markerLine.parentNode.removeChild(root.markerLine);\r\n\t}\r\n\troot.markerLine = null;\r\n}\r\n\r\nfunction highlightRow(target, markerLine, grid){\r\n\tvar linePos = getLineMarkerPosition(target, grid);\r\n\tvar maxBottom = grid.$grid_data.getBoundingClientRect().bottom + window.scrollY;\r\n\r\n\tmarkerLine.innerHTML = \"
\";\r\n\tmarkerLine.style.left = linePos.x + \"px\";\r\n\tmarkerLine.style.height = \"4px\";\r\n\r\n\tvar markerLineTop = linePos.y - 2;\r\n\tmarkerLine.style.top = markerLineTop + \"px\";\r\n\tmarkerLine.style.width = linePos.width + \"px\";\r\n\r\n\tif (markerLineTop > maxBottom) {\r\n\t\tmarkerLine.style.top = maxBottom + 'px';\r\n\t}\r\n\r\n\treturn markerLine;\r\n}\r\nfunction highlightFolder(target, markerFolder, grid){\r\n\tvar id = target.targetParent;\r\n\tvar pos = gridToPageCoordinates({x: 0, y: grid.getItemTop(id)}, grid);\r\n\tvar maxBottom = grid.$grid_data.getBoundingClientRect().bottom + window.scrollY;\r\n\r\n\tlet folderHighlightWidth = setWidthWithinContainer(grid.$gantt, grid.$grid_data.offsetWidth);\t\r\n\r\n\tmarkerFolder.innerHTML = \"
\";\r\n\tmarkerFolder.style.width = folderHighlightWidth + \"px\";\r\n\tmarkerFolder.style.top = pos.y + \"px\";\r\n\tmarkerFolder.style.left = pos.x + \"px\";\r\n\tmarkerFolder.style.height = grid.getItemHeight(id) + \"px\";\r\n\tif (pos.y > maxBottom) {\r\n\t\tmarkerFolder.style.top = maxBottom + 'px';\r\n\t}\r\n\r\n\treturn markerFolder;\r\n}\r\n\r\nfunction getLineMarkerPosition(target, grid){\r\n\tvar store = grid.$config.rowStore;\r\n\tvar pos = {x:0, y:0};\r\n\tvar indentNode = grid.$grid_data.querySelector(\".gantt_tree_indent\");\r\n\tvar indent = 15;\r\n\tvar level = 0;\r\n\tif(indentNode){\r\n\t\tindent = indentNode.offsetWidth;\r\n\t}\r\n\tvar iconWidth = 40;\r\n\tif(target.targetId !== store.$getRootId()){\r\n\t\tvar itemTop = grid.getItemTop(target.targetId);\r\n\t\tvar itemHeight = grid.getItemHeight(target.targetId);\r\n\t\tlevel = store.exists(target.targetId) ? store.calculateItemLevel(store.getItem(target.targetId)) : 0;\r\n\r\n\t\tif(target.prevSibling){\r\n\t\t\tpos.y = itemTop;\r\n\t\t}else if(target.nextSibling){\r\n\t\t\tvar childCount = 0;\r\n\t\t\tstore.eachItem(function(child){\r\n\t\t\t\tif(store.getIndexById(child.id) !== -1)\r\n\t\t\t\t\tchildCount++;\r\n\t\t\t}, target.targetId);\r\n\r\n\t\t\tpos.y = itemTop + itemHeight + childCount*itemHeight;\r\n\t\t}else {\r\n\t\t\tpos.y = itemTop + itemHeight;\r\n\t\t\tlevel += 1;\r\n\t\t}\r\n\t}\r\n\tpos.x = iconWidth + level * indent;\r\n\tpos.width = setWidthWithinContainer(grid.$gantt, Math.max(grid.$grid_data.offsetWidth - pos.x, 0), pos.x);\r\n\treturn gridToPageCoordinates(pos, grid);\r\n}\r\n\r\nfunction gridToPageCoordinates(pos, grid){\r\n\tvar gridPos = domHelpers.getNodePosition(grid.$grid_data);\r\n\tpos.x += gridPos.x + grid.$grid.scrollLeft;\r\n\tpos.y += gridPos.y - grid.$grid_data.scrollTop;\r\n\treturn pos;\r\n}\r\n\r\nfunction getTaskMarkerPosition(e, grid) {\r\n\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\r\n\tvar ePos = domHelpers.getRelativeEventPosition(e, grid.$grid_data);\r\n\t// row offset\r\n\tvar x = pos.x + grid.$grid.scrollLeft;\r\n\tvar y = ePos.y - 10;\r\n\r\n\tvar rowHeight = grid.getItemHeight(e.targetId);\r\n\t// prevent moving row out of grid_data container\r\n\tif (y < pos.y) y = pos.y;\r\n\tvar gridHeight = grid.getTotalHeight();\r\n\tif (y > pos.y + gridHeight - rowHeight) y = pos.y + gridHeight - rowHeight;\r\n\r\n\tpos.x = x;\r\n\tpos.y = y;\r\n\tpos.width = setWidthWithinContainer(grid.$gantt, pos.width, 9);\r\n\treturn pos;\r\n}\r\n\r\nfunction setWidthWithinContainer(gantt, width, offset = 0){\r\n\tconst containerSize = domHelpers.getNodePosition(gantt.$root);\r\n\tif (width > containerSize.width){\r\n\t\twidth = containerSize.width - offset - 2;\r\n\t}\r\n\treturn width;\r\n}\r\n\r\nexport default {\r\n\tremoveLineHighlight: removeLineHighlight,\r\n\thighlightPosition: highlightPosition\r\n};\r\n","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport dropTarget from \"./tasks_grid_dnd_marker_helpers/drop_target\";\r\nimport getLockedLevelTarget from \"./tasks_grid_dnd_marker_helpers/locked_level\";\r\nimport getMultiLevelTarget from \"./tasks_grid_dnd_marker_helpers/multi_level\";\r\nimport higlighter from \"./tasks_grid_dnd_marker_helpers/highlight\";\r\nimport isPlaceholderTask from \"../../../utils/placeholder_task\";\r\n\r\nfunction _init_dnd(gantt, grid) {\r\n\tvar DnD = gantt.$services.getService(\"dnd\");\r\n\r\n\tif(!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)){\r\n\t\treturn;\r\n\t}\r\n\r\n\tfunction locate(e){\r\n\t\treturn domHelpers.locateAttribute(e, grid.$config.item_attribute);\r\n\t}\r\n\r\n\tfunction getStore(){\r\n\t\treturn gantt.getDatastore(grid.$config.bind);\r\n\t}\r\n\r\n\tfunction checkPlaceholderTask(id){\r\n\t\treturn isPlaceholderTask(id, gantt, getStore());\r\n\t}\r\n\r\n\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\r\n\tif (gantt.defined(grid.$getConfig().dnd_sensitivity))\r\n\t\tdnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\r\n\r\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\t\tif (!el) return false;\r\n\t\tif (gantt.hideQuickInfo) gantt.hideQuickInfo();\r\n\t\tif (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar id = el.getAttribute(grid.$config.item_attribute);\r\n\t\tvar datastore = grid.$config.rowStore;\r\n\t\tvar task = datastore.getItem(id);\r\n\r\n\t\tif (gantt.isReadonly(task) || checkPlaceholderTask(id))\r\n\t\t\treturn false;\r\n\r\n\t\tdnd.config.initial_open_state = task.$open;\r\n\t\tif (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\r\n\t\tdnd.config.marker.innerHTML = el.outerHTML;\r\n\t\tvar element = dnd.config.marker.firstChild;\r\n\t\tif(element){\r\n\t\t\tdnd.config.marker.style.opacity = 0.4;\r\n\t\t\telement.style.position = \"static\";\r\n\t\t\telement.style.pointerEvents = \"none\";\r\n\t\t}\r\n\r\n\t\tdnd.config.id = el.getAttribute(grid.$config.item_attribute);\r\n\r\n\t\tvar store = grid.$config.rowStore;\r\n\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\t\tdnd.config.level = store.calculateItemLevel(task);\r\n\t\tdnd.config.drop_target = dropTarget.createDropTargetObject({\r\n\t\t\ttargetParent: store.getParent(task.id),\r\n\t\t\ttargetIndex: store.getBranchIndex(task.id),\r\n\t\t\ttargetId: task.id,\r\n\t\t\tnextSibling: true\r\n\t\t});\r\n\r\n\t\ttask.$open = false;\r\n\t\ttask.$transparent = true;\r\n\t\tthis.refreshData();\r\n\t}, gantt));\r\n\r\n\tfunction getTargetTaskId(e){\r\n\t\tvar y = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\r\n\t\tvar store = grid.$config.rowStore;\r\n\r\n\t\tif (!document.doctype){\r\n\t\t\ty += window.scrollY;\r\n\t\t}\r\n\t\ty = y || 0;\r\n\r\n\t\t// limits for the marker according to the layout layer\r\n\t\tvar scrollPos = grid.$state.scrollTop || 0;\r\n\t\tvar maxBottom = gantt.$grid_data.getBoundingClientRect().height + scrollPos + window.scrollY;\r\n\t\tvar minTop = scrollPos;\r\n\r\n\t\tvar firstVisibleTaskIndex = grid.getItemIndexByTopPosition(grid.$state.scrollTop);\r\n\t\tif (!store.exists(firstVisibleTaskIndex)){\r\n\t\t\tfirstVisibleTaskIndex = store.countVisible() - 1;\r\n\t\t}\r\n\t\tif (firstVisibleTaskIndex < 0) {\r\n\t\t\treturn store.$getRootId();\r\n\t\t}\r\n\r\n\t\tvar firstVisibleTaskId = store.getIdByIndex(firstVisibleTaskIndex);\r\n\r\n\t\tvar firstVisibleTaskPos = grid.$state.scrollTop / grid.getItemHeight(firstVisibleTaskId);\r\n\t\tvar hiddenTaskPart = firstVisibleTaskPos - Math.floor(firstVisibleTaskPos);\r\n\t\tif (hiddenTaskPart > 0.1 && hiddenTaskPart < 0.9) {\r\n\t\t\tmaxBottom = maxBottom - grid.getItemHeight(firstVisibleTaskId) * hiddenTaskPart;\r\n\t\t\tminTop = minTop + grid.getItemHeight(firstVisibleTaskId) * (1 - hiddenTaskPart);\r\n\t\t}\r\n\r\n\t\t// GS-715. The placeholder task row shouldn't be draggable below the Gantt container\r\n\t\tconst gridPosition = domHelpers.getNodePosition(grid.$grid_data);\r\n\t\tconst gridBottom = gridPosition.y + gridPosition.height;\r\n\t\tconst placeholderRowHeight = dnd.config.marker.offsetHeight;\r\n\t\tif (y + placeholderRowHeight + window.scrollY >= maxBottom){\r\n\t\t\tdnd.config.marker.style.top = gridBottom - placeholderRowHeight\t+ \"px\";\r\n\t\t}\r\n\r\n\t\tif (y >= maxBottom) {\r\n\t\t\ty = maxBottom;\r\n\t\t} else if (y <= minTop) {\r\n\t\t\ty = minTop;\r\n\t\t\tdnd.config.marker.style.top = gridPosition.y + \"px\";\r\n\t\t}\r\n\r\n\t\tvar index = grid.getItemIndexByTopPosition(y);\r\n\r\n\t\tif (index > store.countVisible() - 1 || index < 0) {\r\n\t\t\treturn store.$getRootId();\r\n\t\t}\r\n\r\n\t\tvar targetId = store.getIdByIndex(index);\r\n\t\tif (checkPlaceholderTask(targetId)) {\r\n\t\t\treturn store.getPrevSibling(targetId);\r\n\t\t}\r\n\r\n\t\treturn store.getIdByIndex(index);\r\n\t}\r\n\r\n\tfunction getDropPosition(e){\r\n\t\tvar targetTaskId = getTargetTaskId(e);\r\n\t\tvar relTargetPos = null;\r\n\t\tvar store = grid.$config.rowStore;\r\n\t\tvar config = grid.$getConfig();\r\n\t\tvar lockLevel = !config.order_branch_free;\r\n\r\n\t\tvar eventTop = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\r\n\t\tif (!document.doctype){\r\n\t\t\teventTop += window.scrollY;\r\n\t\t}\r\n\r\n\t\tif(targetTaskId !== store.$getRootId()) {\r\n\t\t\tvar rowTop = grid.getItemTop(targetTaskId);\r\n\t\t\tvar rowHeight = grid.getItemHeight(targetTaskId);\r\n\t\t\trelTargetPos = (eventTop - rowTop) / rowHeight;\r\n\t\t}\r\n\r\n\t\tvar result;\r\n\t\tif(!lockLevel){\r\n\t\t\tresult = getMultiLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store);\r\n\t\t}else{\r\n\t\t\tresult = getLockedLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store, dnd.config.level);\r\n\t\t\tif(result && result.targetParent && checkPlaceholderTask(result.targetParent)){\r\n\t\t\t\ttargetTaskId = store.getPrevSibling(result.targetParent);\r\n\t\t\t\tresult = getLockedLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store, dnd.config.level);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\r\n\t\tvar target = getDropPosition(e);\r\n\r\n\t\tif(!target ||\r\n\t\t\tgantt.callEvent(\"onBeforeRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]) === false){\r\n\t\t\t\ttarget = dropTarget.createDropTargetObject(dnd.config.drop_target);\r\n\t\t\t}\r\n\r\n\t\thiglighter.highlightPosition(target, dnd.config, grid);\r\n\t\tdnd.config.drop_target = target;\r\n\t\tgantt._waiAria.reorderMarkerAttr(dnd.config.marker);\r\n\r\n\t\tthis.callEvent(\"onRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]);\r\n\t\treturn true;\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\r\n\t\tvar store = grid.$config.rowStore;\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\r\n\t\thiglighter.removeLineHighlight(dnd.config);\r\n\r\n\t\ttask.$transparent = false;\r\n\t\ttask.$open = dnd.config.initial_open_state;\r\n\t\tvar target = dnd.config.drop_target;\r\n\r\n\t\tif (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]) === false) {\r\n\t\t\ttask.$drop_target = null;\r\n\t\t} else {\r\n\t\t\tstore.move(dnd.config.id, target.targetIndex, target.targetParent);\r\n\t\t\tgantt.render();\r\n\t\t\tthis.callEvent(\"onRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]);\r\n\t\t}\r\n\t\tstore.refresh(task.id);\r\n\t}, gantt));\r\n}\r\n\r\nexport default {\r\n\tinit: _init_dnd\r\n};","/**\r\n * resolve dnd position of the task when gantt.config.order_branch_free = true\r\n */\r\n\r\nimport dropTarget from \"./drop_target\";\r\n\r\nexport default function getMultiLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store){\r\n\tvar result;\r\n\r\n\tif(targetTaskId !== store.$getRootId()){\r\n\t\tif(relTargetPos < 0.25){\r\n\t\t\tresult = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t}else if(relTargetPos > 0.60 && !(store.hasChild(targetTaskId) && store.getItem(targetTaskId).$open)){\r\n\t\t\tresult = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t}else {\r\n\t\t\tresult = dropTarget.firstChildTarget(dndTaskId, targetTaskId, store);\r\n\t\t}\r\n\t}else{\r\n\t\tvar rootId = store.$getRootId();\r\n\t\tif(store.hasChild(rootId) && eventTop >= 0){\r\n\t\t\tresult = dropTarget.lastChildTarget(dndTaskId, rootId, store);\r\n\t\t}else{\r\n\t\t\tresult = dropTarget.firstChildTarget(dndTaskId, rootId, store);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n};","import * as utils from \"../../../utils/utils\";\r\nimport rowDnd from \"./tasks_grid_dnd\";\r\nimport rowDndMarker from \"./tasks_grid_dnd_marker\";\r\nimport mouseEventContainer from \"../mouse_event_container\";\r\n\r\nvar initializer = (function(){\r\n\treturn function(gantt){\r\n\t\treturn {\r\n\t\t\tonCreated: function (grid) {\r\n\t\t\t\tgrid.$config = utils.mixin(grid.$config, {\r\n\t\t\t\t\tbind: \"task\"\r\n\t\t\t\t});\r\n\t\t\t\tif(grid.$config.id == \"grid\") {\r\n\t\t\t\t\tthis.extendGantt(grid);\r\n\t\t\t\t\tgantt.ext.inlineEditors = gantt.ext._inlineEditors.createEditors(grid);\r\n\t\t\t\t\tgantt.ext.inlineEditors.init();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._mouseDelegates = mouseEventContainer(gantt);\r\n\t\t\t},\r\n\t\t\tonInitialized: function (grid) {\r\n\t\t\t\tvar config = grid.$getConfig();\r\n\t\t\t\tif (config.order_branch) {\r\n\t\t\t\t\tif(config.order_branch == \"marker\"){\r\n\t\t\t\t\t\trowDndMarker.init(grid.$gantt, grid);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trowDnd.init(grid.$gantt, grid);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.initEvents(grid, gantt);\r\n\t\t\t\tif(grid.$config.id == \"grid\") {\r\n\t\t\t\t\tthis.extendDom(grid);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonDestroyed: function (grid) {\r\n\t\t\t\tif(grid.$config.id == \"grid\") {\r\n\t\t\t\t\tgantt.ext.inlineEditors.destructor();\r\n\t\t\t\t}\r\n\t\t\t\tthis.clearEvents(grid, gantt);\r\n\t\t\t},\r\n\r\n\t\t\tinitEvents: function (grid, gantt) {\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_row\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar config = grid.$getConfig();\r\n\t\t\t\t\tif (id !== null) {\r\n\t\t\t\t\t\tvar task = this.getTask(id);\r\n\t\t\t\t\t\tif (config.scroll_on_click && !gantt._is_icon_open_click(e))\r\n\t\t\t\t\t\t\tthis.showDate(task.start_date);\r\n\t\t\t\t\t\tgantt.callEvent(\"onTaskRowClick\", [id, trg]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, gantt), grid.$grid);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_grid_head_cell\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar column = trg.getAttribute(\"data-column-id\");\r\n\r\n\t\t\t\t\tif (!gantt.callEvent(\"onGridHeaderClick\", [column, e]))\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\tvar config = grid.$getConfig();\r\n\r\n\t\t\t\t\tif (column == \"add\") {\r\n\t\t\t\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\t\t\t\tmouseEvents.callHandler(\"click\", \"gantt_add\", grid.$grid, [e, config.root_id]);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (config.sort && column) { // GS-929: if there is no column name, we cannot sort the column\r\n\t\t\t\t\t\tvar sorting_method = column,\r\n\t\t\t\t\t\t\tconf;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < config.columns.length; i++) {\r\n\t\t\t\t\t\t\tif (config.columns[i].name == column) {\r\n\t\t\t\t\t\t\t\tconf = config.columns[i];\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (conf && conf.sort !== undefined && conf.sort !== true) {\r\n\t\t\t\t\t\t\tsorting_method = conf.sort;\r\n\r\n\t\t\t\t\t\t\tif (!sorting_method) { // column sort property 'false', no sorting\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar sort = (this._sort && this._sort.direction && this._sort.name == column) ? this._sort.direction : \"desc\";\r\n\t\t\t\t\t\t// invert sort direction\r\n\t\t\t\t\t\tsort = (sort == \"desc\") ? \"asc\" : \"desc\";\r\n\t\t\t\t\t\tthis._sort = {\r\n\t\t\t\t\t\t\tname: column,\r\n\t\t\t\t\t\t\tdirection: sort\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tthis.sort(sorting_method, sort == \"desc\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}, gantt), grid.$grid);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_add\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar config = grid.$getConfig();\r\n\t\t\t\t\tif (config.readonly) return;\r\n\r\n\t\t\t\t\tvar item = {};\r\n\t\t\t\t\tthis.createTask(item, id ? id : gantt.config.root_id);\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}, gantt), grid.$grid);\r\n\r\n\t\t\t},\r\n\r\n\t\t\tclearEvents: function(grid, gantt){\r\n\t\t\t\tthis._mouseDelegates.destructor();\r\n\t\t\t\tthis._mouseDelegates = null;\r\n\t\t\t},\r\n\r\n\t\t\textendDom: function(grid){\r\n\t\t\t\tgantt.$grid = grid.$grid;\r\n\t\t\t\tgantt.$grid_scale = grid.$grid_scale;\r\n\t\t\t\tgantt.$grid_data = grid.$grid_data;\r\n\t\t\t},\r\n\t\t\textendGantt: function(grid){\r\n\t\t\t\tgantt.getGridColumns = gantt.bind(grid.getGridColumns, grid);\r\n\r\n\t\t\t\tgrid.attachEvent(\"onColumnResizeStart\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResizeStart\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onColumnResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onColumnResizeEnd\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResizeEnd\", arguments);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgrid.attachEvent(\"onColumnResizeComplete\", function(columns, totalWidth){\r\n\t\t\t\t\tgantt.config.grid_width = totalWidth;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgrid.attachEvent(\"onBeforeRowResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onBeforeRowResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onRowResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onRowResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onBeforeRowResizeEnd\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onBeforeRowResizeEnd\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onAfterRowResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onAfterRowResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n})();\r\n\r\nexport default initializer;","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport timeout from \"../../../utils/timeout\";\r\nimport * as helpers from \"../../../utils/helpers\";\r\n\r\nfunction createTaskDND(timeline, gantt) {\r\n\tvar services = gantt.$services;\r\n\treturn {\r\n\t\tdrag: null,\r\n\t\tdragMultiple: {},\r\n\t\t_events: {\r\n\t\t\tbefore_start: {},\r\n\t\t\tbefore_finish: {},\r\n\t\t\tafter_finish: {}\r\n\t\t},\r\n\t\t_handlers: {},\r\n\t\tinit: function() {\r\n\t\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t\t\tthis.clear_drag_state();\r\n\t\t\tvar drag = gantt.config.drag_mode;\r\n\t\t\tthis.set_actions();\r\n\r\n\t\t\tvar stateService = services.getService(\"state\");\r\n\t\t\tstateService.registerProvider(\"tasksDnd\", utils.bind(function() {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdrag_id : this.drag ? this.drag.id : undefined,\r\n\t\t\t\t\tdrag_mode : this.drag ? this.drag.mode : undefined,\r\n\t\t\t\t\tdrag_from_start : this.drag ? this.drag.left : undefined\r\n\t\t\t\t};\r\n\t\t\t}, this));\r\n\r\n\t\t\tvar evs = {\r\n\t\t\t\t\"before_start\": \"onBeforeTaskDrag\",\r\n\t\t\t\t\"before_finish\": \"onBeforeTaskChanged\",\r\n\t\t\t\t\"after_finish\": \"onAfterTaskDrag\"\r\n\t\t\t};\r\n\t\t\t//for now, all drag operations will trigger the same events\r\n\t\t\tfor (var stage in this._events) {\r\n\t\t\t\tfor (var mode in drag) {\r\n\t\t\t\t\tthis._events[stage][mode] = evs[stage];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._handlers[drag.move] = this._move;\r\n\t\t\tthis._handlers[drag.resize] = this._resize;\r\n\t\t\tthis._handlers[drag.progress] = this._resize_progress;\r\n\t\t},\r\n\t\tset_actions: function() {\r\n\t\t\tvar data = timeline.$task_data;\r\n\t\t\tthis._domEvents.attach(data, \"mousemove\", gantt.bind(function(e) {\r\n\t\t\t\tthis.on_mouse_move(e);\r\n\t\t\t}, this));\r\n\t\t\tthis._domEvents.attach(data, \"mousedown\", gantt.bind(function(e) {\r\n\t\t\t\tthis.on_mouse_down(e);\r\n\t\t\t}, this));\r\n\t\t\tthis._domEvents.attach(document.body, \"mouseup\", gantt.bind(function(e) {\r\n\t\t\t\tthis.on_mouse_up(e);\r\n\t\t\t}, this));\r\n\t\t},\r\n\r\n\t\tclear_drag_state: function() {\r\n\t\t\tthis.drag = {\r\n\t\t\t\tid: null,\r\n\t\t\t\tmode: null,\r\n\t\t\t\tpos: null,\r\n\t\t\t\tstart_x: null,\r\n\t\t\t\tstart_y: null,\r\n\t\t\t\tobj: null,\r\n\t\t\t\tleft: null\r\n\t\t\t};\r\n\t\t\tthis.dragMultiple = {};\r\n\t\t},\r\n\t\t_resize: function(task, shift, drag) {\r\n\t\t\tvar cfg = timeline.$getConfig();\r\n\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\t\t\tif (drag.left) {\r\n\t\t\t\ttask.start_date = gantt.dateFromPos(coords_x.start + shift);\r\n\t\t\t\tif (!task.start_date) {\r\n\t\t\t\t\ttask.start_date = new Date(gantt.getState().min_date);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttask.end_date = gantt.dateFromPos(coords_x.end + shift);\r\n\t\t\t\tif (!task.end_date) {\r\n\t\t\t\t\ttask.end_date = new Date(gantt.getState().max_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar minDurationInUnits = this._calculateMinDuration(cfg.min_duration, cfg.duration_unit);\r\n\t\t\tif (task.end_date - task.start_date < cfg.min_duration) {\r\n\t\t\t\tif (drag.left)\r\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate(task.end_date, -minDurationInUnits, cfg.duration_unit, task);\r\n\t\t\t\telse\r\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate(task.start_date, minDurationInUnits, cfg.duration_unit, task);\r\n\t\t\t}\r\n\t\t\tgantt._init_task_timing(task);\r\n\t\t},\r\n\t\t_calculateMinDuration: function(duration, unit) {\r\n\t\t\tvar inMs = {\r\n\t\t\t\t\"minute\": 60000,\r\n\t\t\t\t\"hour\": 3600000,\r\n\t\t\t\t\"day\": 86400000,\r\n\t\t\t\t\"week\": 604800000,\r\n\t\t\t\t\"month\": 2419200000,\r\n\t\t\t\t\"year\": 31356000000\r\n\t\t\t};\r\n\t\t\treturn Math.ceil(duration / inMs[unit]);\r\n\t\t},\r\n\t\t_resize_progress: function(task, shift, drag) {\r\n\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar diffValue = !config.rtl ? (drag.pos.x - coords_x.start) : (coords_x.start - drag.pos.x);\r\n\r\n\t\t\tvar diff = Math.max(0, diffValue);\r\n\t\t\ttask.progress = Math.min(1, diff / Math.abs(coords_x.end - coords_x.start));\r\n\t\t},\r\n\t\t_find_max_shift: function(dragItems, shift) {\r\n\t\t\tvar correctShift;\r\n\t\t\tfor (var i in dragItems) {\r\n\t\t\t\tvar drag = dragItems[i];\r\n\t\t\t\tvar task = gantt.getTask(drag.id);\r\n\r\n\t\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\t\t\t\tvar minX = gantt.posFromDate(new Date(gantt.getState().min_date));\r\n\t\t\t\tvar maxX = gantt.posFromDate(new Date(gantt.getState().max_date));\r\n\r\n\t\t\t\tif (coords_x.end + shift > maxX) {\r\n\t\t\t\t\tvar maxShift = maxX - coords_x.end;\r\n\t\t\t\t\tif (maxShift < correctShift || correctShift === undefined) {\r\n\t\t\t\t\t\tcorrectShift = maxShift;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (coords_x.start + shift < minX) {\r\n\t\t\t\t\tvar minShift = minX - coords_x.start;\r\n\t\t\t\t\tif (minShift > correctShift || correctShift === undefined) {\r\n\t\t\t\t\t\tcorrectShift = minShift;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn correctShift;\r\n\t\t},\r\n\t\t_move: function(task, shift, drag, multipleDragShift) {\r\n\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\t\t\tvar new_start = null,\r\n\t\t\tnew_end = null;\r\n\t\t\t// GS-454: If we drag multiple tasks, rely on the dates instead of timeline coordinates\r\n\t\t\tif (multipleDragShift){\r\n\t\t\t\tnew_start = new Date(+drag.obj.start_date + multipleDragShift),\r\n\t\t\t\tnew_end = new Date(+drag.obj.end_date + multipleDragShift);\r\n\t\t\t} else {\r\n\t\t\t\tnew_start = gantt.dateFromPos(coords_x.start + shift),\r\n\t\t\t\tnew_end = gantt.dateFromPos(coords_x.end + shift);\r\n\t\t\t}\r\n\t\t\tif (!new_start) {\r\n\t\t\t\ttask.start_date = new Date(gantt.getState().min_date);\r\n\t\t\t\ttask.end_date = gantt.dateFromPos(gantt.posFromDate(task.start_date) + (coords_x.end - coords_x.start));\r\n\t\t\t} else if (!new_end) {\r\n\t\t\t\ttask.end_date = new Date(gantt.getState().max_date);\r\n\t\t\t\ttask.start_date = gantt.dateFromPos(gantt.posFromDate(task.end_date) - (coords_x.end - coords_x.start));\r\n\t\t\t} else {\r\n\t\t\t\ttask.start_date = new_start;\r\n\t\t\t\ttask.end_date = new_end;\r\n\t\t\t}\r\n\t\t},\r\n\t\t_drag_task_coords: function(t, drag) {\r\n\t\t\tvar start = drag.obj_s_x = drag.obj_s_x || gantt.posFromDate(t.start_date);\r\n\t\t\tvar end = drag.obj_e_x = drag.obj_e_x || gantt.posFromDate(t.end_date);\r\n\t\t\treturn {\r\n\t\t\t\tstart: start,\r\n\t\t\t\tend: end\r\n\t\t\t};\r\n\t\t},\r\n\t\t_mouse_position_change: function(oldPos, newPos) {\r\n\t\t\tvar dx = oldPos.x - newPos.x,\r\n\t\t\t\tdy = oldPos.y - newPos.y;\r\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\r\n\t\t},\r\n\t\t_is_number: function(n) {\r\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\r\n\t\t},\r\n\r\n\t\ton_mouse_move: function(e) {\r\n\t\t\tif (this.drag.start_drag) {\r\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\r\n\r\n\t\t\t\tvar sX = this.drag.start_drag.start_x,\r\n\t\t\t\t\tsY = this.drag.start_drag.start_y;\r\n\r\n\t\t\t\tif ((Date.now() - this.drag.timestamp > 50) ||\r\n\t\t\t\t\t(this._is_number(sX) && this._is_number(sY) && this._mouse_position_change({\r\n\t\t\t\t\t\tx: sX,\r\n\t\t\t\t\t\ty: sY\r\n\t\t\t\t\t}, pos) > 20)) {\r\n\t\t\t\t\tthis._start_dnd(e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar drag = this.drag;\r\n\r\n\t\t\tif (drag.mode) {\r\n\t\t\t\tif (!timeout(this, 40))//limit update frequency\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tthis._update_on_move(e);\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_update_item_on_move: function(shift, id, mode, drag, e, multipleDragShift) {\r\n\t\t\tvar task = gantt.getTask(id);\r\n\t\t\tvar original = gantt.mixin({}, task);\r\n\t\t\tvar copy = gantt.mixin({}, task);\r\n\t\t\tthis._handlers[mode].apply(this, [copy, shift, drag, multipleDragShift]);\r\n\t\t\tgantt.mixin(task, copy, true);\r\n\t\t\t//gantt._update_parents(drag.id, true);\r\n\t\t\tgantt.callEvent(\"onTaskDrag\", [task.id, mode, copy, original, e]);\r\n\t\t\tgantt.mixin(task, copy, true);\r\n\t\t\tgantt.refreshTask(id);\r\n\t\t},\r\n\r\n\t\t_update_on_move: function(e) {\r\n\t\t\tvar drag = this.drag;\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tif (drag.mode) {\r\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\r\n\t\t\t\tif (drag.pos && drag.pos.x == pos.x)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tdrag.pos = pos;\r\n\r\n\t\t\t\tvar curr_date = gantt.dateFromPos(pos.x);\r\n\t\t\t\tif (!curr_date || isNaN(curr_date.getTime()))\r\n\t\t\t\t\treturn;\r\n\r\n\r\n\t\t\t\tvar shift = pos.x - drag.start_x;\r\n\t\t\t\tvar task = gantt.getTask(drag.id);\r\n\t\t\t\tif (this._handlers[drag.mode]) {\r\n\t\t\t\t\tif (drag.mode === config.drag_mode.move) {\r\n\t\t\t\t\t\tvar dragHash = {};\r\n\r\n\t\t\t\t\t\tif (this._isMultiselect()) {\r\n\t\t\t\t\t\t\tvar selectedTasksIds = gantt.getSelectedTasks();\r\n\t\t\t\t\t\t\tif (selectedTasksIds.indexOf(drag.id) >= 0) {\r\n\t\t\t\t\t\t\t\tdragHash = this.dragMultiple;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar dragProject = false;\r\n\t\t\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project) {\r\n\t\t\t\t\t\t\tvar initialDrag = {};\r\n\t\t\t\t\t\t\tinitialDrag[drag.id] = utils.copy(drag);\r\n\t\t\t\t\t\t\tdragProject = true;\r\n\t\t\t\t\t\t\tdragHash = utils.mixin(initialDrag, this.dragMultiple);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar maxShift = this._find_max_shift(dragHash, shift);\r\n\t\t\t\t\t\tif (maxShift !== undefined) {\r\n\t\t\t\t\t\t\tshift = maxShift;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\r\n\r\n\t\t\t\t\t\tfor (var i in dragHash) {\r\n\t\t\t\t\t\t\tvar childDrag = dragHash[i];\r\n\t\t\t\t\t\t\tif(dragProject && childDrag.id != drag.id){\r\n\t\t\t\t\t\t\t\tgantt._bulk_dnd = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// GS-454: Calculate the date shift in milliseconds instead of pixels\r\n\t\t\t\t\t\t\tif (maxShift === undefined && (dragProject || Object.keys(dragHash).length > 1)) {\r\n\t\t\t\t\t\t\t\tvar shiftDate = gantt.dateFromPos(drag.start_x);\r\n\t\t\t\t\t\t\t\tvar multipleDragShift = curr_date - shiftDate;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis._update_item_on_move(shift, childDrag.id, childDrag.mode, childDrag, e, multipleDragShift);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgantt._bulk_dnd = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// for resize and progress\r\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt._update_parents(drag.id);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ton_mouse_down: function(e, src) {\r\n\t\t\t// on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state\r\n\t\t\t// let's ignore right mouse button then\r\n\t\t\tif (e.button == 2 && e.button !== undefined)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar id = gantt.locate(e);\r\n\t\t\tvar task = null;\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\ttask = gantt.getTask(id);\r\n\t\t\t}\r\n\r\n\t\t\tif (gantt.isReadonly(task) || this.drag.mode) return;\r\n\r\n\t\t\tthis.clear_drag_state();\r\n\r\n\t\t\tsrc = src || (e.target || e.srcElement);\r\n\r\n\t\t\tvar className = domHelpers.getClassName(src);\r\n\t\t\tvar drag = this._get_drag_mode(className, src);\r\n\r\n\t\t\tif (!className || !drag) {\r\n\t\t\t\tif (src.parentNode)\r\n\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!drag) {\r\n\t\t\t\tif (gantt.checkEvent(\"onMouseDown\") && gantt.callEvent(\"onMouseDown\", [className.split(\" \")[0]])) {\r\n\t\t\t\t\tif (src.parentNode)\r\n\t\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\r\n\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (drag.mode && drag.mode != config.drag_mode.ignore && config[\"drag_\" + drag.mode]) {\r\n\t\t\t\t\tid = gantt.locate(src);\r\n\t\t\t\t\ttask = gantt.copy(gantt.getTask(id) || {});\r\n\r\n\t\t\t\t\tif (gantt.isReadonly(task)) {\r\n\t\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && !(task.auto_scheduling === false) && !config.drag_project) && drag.mode != config.drag_mode.progress) {//only progress drag is allowed for tasks with flexible duration\r\n\t\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdrag.id = id;\r\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\r\n\r\n\t\t\t\t\tdrag.start_x = pos.x;\r\n\t\t\t\t\tdrag.start_y = pos.y;\r\n\t\t\t\t\tdrag.obj = task;\r\n\t\t\t\t\tthis.drag.start_drag = drag;\r\n\t\t\t\t\tthis.drag.timestamp = Date.now();\r\n\r\n\t\t\t\t} else\r\n\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t}\r\n\t\t},\r\n\t\t_fix_dnd_scale_time: function(task, drag) {\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar unit = gantt.getScale().unit,\r\n\t\t\t\tstep = gantt.getScale().step;\r\n\t\t\tif (!config.round_dnd_dates) {\r\n\t\t\t\tunit = 'minute';\r\n\t\t\t\tstep = config.time_step;\r\n\t\t\t}\r\n\r\n\t\t\tfunction fixStart(task) {\r\n\t\t\t\tif (!gantt.config.correct_work_time)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tvar config = timeline.$getConfig();\r\n\t\t\t\tif (!gantt.isWorkTime(task.start_date, undefined, task))\r\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate({\r\n\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\tduration: -1,\r\n\t\t\t\t\t\tunit: config.duration_unit,\r\n\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfunction fixEnd(task) {\r\n\t\t\t\tif (!gantt.config.correct_work_time)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tvar config = timeline.$getConfig();\r\n\t\t\t\tif (!gantt.isWorkTime(new Date(task.end_date - 1), undefined, task))\r\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate({\r\n\t\t\t\t\t\tstart_date: task.end_date,\r\n\t\t\t\t\t\tduration: 1,\r\n\t\t\t\t\t\tunit: config.duration_unit,\r\n\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (drag.mode == config.drag_mode.resize) {\r\n\t\t\t\tif (drag.left) {\r\n\t\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\r\n\t\t\t\t\tfixStart(task);\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttask.end_date = gantt.roundDate({date: task.end_date, unit: unit, step: step});\r\n\t\t\t\t\tfixEnd(task);\r\n\t\t\t\t}\r\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\r\n\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\r\n\t\t\t\tfixStart(task);\r\n\t\t\t\ttask.end_date = gantt.calculateEndDate(task);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_fix_working_times: function(task, drag) {\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar drag = drag || {mode: config.drag_mode.move};\r\n\r\n\t\t\tif (drag.mode == config.drag_mode.resize) {\r\n\t\t\t\tif (drag.left) {\r\n\t\t\t\t\ttask.start_date = gantt.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttask.end_date = gantt.getClosestWorkTime({date: task.end_date, dir: 'past', task: task});\r\n\t\t\t\t}\r\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\r\n\t\t\t\tgantt.correctTaskWorkTime(task);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_finalize_mouse_up: function(taskId, config, drag, e) {\r\n\t\t\tvar task = gantt.getTask(taskId);\r\n\r\n\t\t\tif (config.work_time && config.correct_work_time) {\r\n\t\t\t\tthis._fix_working_times(task, drag);\r\n\t\t\t}\r\n\r\n\t\t\tthis._fix_dnd_scale_time(task, drag);\r\n\r\n\t\t\tif (!this._fireEvent(\"before_finish\", drag.mode, [taskId, drag.mode, gantt.copy(drag.obj), e])) {\r\n\t\t\t\t//drag.obj._dhx_changed = false;\r\n\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\tif (taskId == drag.id) {\r\n\t\t\t\t\tdrag.obj._dhx_changed = false;\r\n\t\t\t\t\tgantt.mixin(task, drag.obj, true);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tgantt.refreshTask(task.id);\r\n\t\t\t} else {\r\n\t\t\t\tvar drag_id = taskId;\r\n\r\n\t\t\t\tgantt._init_task_timing(task);\r\n\r\n\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\tgantt.updateTask(task.id);\r\n\t\t\t\tthis._fireEvent(\"after_finish\", drag.mode, [drag_id, drag.mode, e]);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\ton_mouse_up: function(e) {\r\n\r\n\t\t\tvar drag = this.drag;\r\n\t\t\tif (drag.mode && drag.id) {\r\n\t\t\t\tvar config = timeline.$getConfig();\r\n\t\t\t\t//drop\r\n\t\t\t\tvar task = gantt.getTask(drag.id);\r\n\t\t\t\tvar dragMultiple = this.dragMultiple;\r\n\r\n\t\t\t\tvar finalizingBulkMove = false;\r\n\t\t\t\tvar moveCount = 0;\r\n\t\t\t\tif (drag.mode === config.drag_mode.move) {\r\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && config.drag_project) || (this._isMultiselect())) {\r\n\t\t\t\t\t\tfinalizingBulkMove = true;\r\n\t\t\t\t\t\tmoveCount = Object.keys(dragMultiple).length;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar doFinalize = function doFinalize(){\r\n\t\t\t\t\tif(finalizingBulkMove){\r\n\t\t\t\t\t\tfor (var i in dragMultiple) {\r\n\t\t\t\t\t\t\t// GS-1057: Don't call drag events for the dragged task as they will be called later\r\n\t\t\t\t\t\t\tif (dragMultiple[i].id != drag.id){\r\n\t\t\t\t\t\t\t\tthis._finalize_mouse_up(dragMultiple[i].id, config, dragMultiple[i], e);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._finalize_mouse_up(drag.id, config, drag, e);\r\n\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(finalizingBulkMove && moveCount > 10){// 10 - arbitrary threshold for bulk dnd at which we start doing complete repaint to refresh\r\n\t\t\t\t\tgantt.batchUpdate(function(){\r\n\t\t\t\t\t\tdoFinalize.call(this);\r\n\t\t\t\t\t}.bind(this));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdoFinalize.call(this);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tthis.clear_drag_state();\r\n\t\t},\r\n\t\t_get_drag_mode: function(className, el) {\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar modes = config.drag_mode;\r\n\t\t\tvar classes = (className || \"\").split(\" \");\r\n\t\t\tvar classname = classes[0];\r\n\t\t\tvar drag = {mode: null, left: null};\r\n\t\t\tswitch (classname) {\r\n\t\t\t\tcase \"gantt_task_line\":\r\n\t\t\t\tcase \"gantt_task_content\":\r\n\t\t\t\t\tdrag.mode = modes.move;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"gantt_task_drag\":\r\n\t\t\t\t\tdrag.mode = modes.resize;\r\n\r\n\t\t\t\t\tvar dragProperty = el.getAttribute(\"data-bind-property\");\r\n\r\n\t\t\t\t\tif (dragProperty == \"start_date\") {\r\n\t\t\t\t\t\tdrag.left = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdrag.left = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"gantt_task_progress_drag\":\r\n\t\t\t\t\tdrag.mode = modes.progress;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"gantt_link_control\":\r\n\t\t\t\tcase \"gantt_link_point\":\r\n\t\t\t\t\tdrag.mode = modes.ignore;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tdrag = null;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn drag;\r\n\r\n\t\t},\r\n\r\n\t\t_start_dnd: function(e) {\r\n\t\t\tvar drag = this.drag = this.drag.start_drag;\r\n\t\t\tdelete drag.start_drag;\r\n\r\n\t\t\tvar cfg = timeline.$getConfig();\r\n\t\t\tvar id = drag.id;\r\n\r\n\t\t\tif (!cfg[\"drag_\" + drag.mode] || !gantt.callEvent(\"onBeforeDrag\", [id, drag.mode, e]) || !this._fireEvent(\"before_start\", drag.mode, [id, drag.mode, e])) {\r\n\t\t\t\tthis.clear_drag_state();\r\n\t\t\t} else {\r\n\t\t\t\tdelete drag.start_drag;\r\n\t\t\t\tvar task = gantt.getTask(id);\r\n\t\t\t\tif (gantt.isReadonly(task)){\r\n\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (this._isMultiselect()) {\r\n\t\t\t\t\t// for don't move selected tasks when drag unselected task\r\n\t\t\t\t\tvar selectedTasksIds = gantt.getSelectedTasks();\r\n\t\t\t\t\tif (selectedTasksIds.indexOf(drag.id) >= 0) {\r\n\t\t\t\t\t\thelpers.forEach(selectedTasksIds, gantt.bind(function(taskId) {\r\n\t\t\t\t\t\t\tvar selectedTask = gantt.getTask(taskId);\r\n\t\t\t\t\t\t\tif (gantt.isSummaryTask(selectedTask) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\r\n\t\t\t\t\t\t\t\tthis._addSubtasksToDragMultiple(selectedTask.id);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.dragMultiple[taskId] = gantt.mixin({\r\n\t\t\t\t\t\t\t\tid: selectedTask.id,\r\n\t\t\t\t\t\t\t\tobj: gantt.copy(selectedTask)\r\n\t\t\t\t\t\t\t}, this.drag);\r\n\t\t\t\t\t\t}, this));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// for move unselected summary\r\n\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\r\n\t\t\t\t\tthis._addSubtasksToDragMultiple(task.id);\r\n\t\t\t\t}\r\n\t\t\t\tgantt.callEvent(\"onTaskDragStart\", []);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t_fireEvent: function(stage, mode, params) {\r\n\t\t\tgantt.assert(this._events[stage], \"Invalid stage:{\" + stage + \"}\");\r\n\r\n\t\t\tvar trigger = this._events[stage][mode];\r\n\r\n\t\t\tgantt.assert(trigger, \"Unknown after drop mode:{\" + mode + \"}\");\r\n\t\t\tgantt.assert(params, \"Invalid event arguments\");\r\n\r\n\r\n\t\t\tif (!gantt.checkEvent(trigger))\r\n\t\t\t\treturn true;\r\n\r\n\t\t\treturn gantt.callEvent(trigger, params);\r\n\t\t},\r\n\r\n\t\tround_task_dates: function(task) {\r\n\t\t\tvar drag_state = this.drag;\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tif (!drag_state) {\r\n\t\t\t\tdrag_state = {mode: config.drag_mode.move};\r\n\t\t\t}\r\n\t\t\tthis._fix_dnd_scale_time(task, drag_state);\r\n\t\t},\r\n\t\tdestructor: function() {\r\n\t\t\tthis._domEvents.detachAll();\r\n\t\t},\r\n\t\t_isMultiselect: function() {\r\n\t\t\treturn gantt.config.drag_multiple && !!(gantt.getSelectedTasks && gantt.getSelectedTasks().length > 0);\r\n\t\t},\r\n\t\t_addSubtasksToDragMultiple: function(summaryId) {\r\n\t\t\tgantt.eachTask(function(child) {\r\n\t\t\t\tthis.dragMultiple[child.id] = gantt.mixin({\r\n\t\t\t\t\tid: child.id,\r\n\t\t\t\t\tobj: gantt.copy(child)\r\n\t\t\t\t}, this.drag);\r\n\t\t\t}, summaryId, this);\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction initTaskDND() {\r\n\tvar _tasks_dnd;\r\n\treturn {\r\n\t\textend: function(timeline) {\r\n\t\t\ttimeline.roundTaskDates = function(task) {\r\n\t\t\t\t_tasks_dnd.round_task_dates(task);\r\n\t\t\t};\r\n\r\n\t\t},\r\n\t\tinit: function(timeline, gantt) {\r\n\t\t\t_tasks_dnd = createTaskDND(timeline, gantt);\r\n\t\t\t// TODO: entry point for touch handlers, move touch to timeline\r\n\t\t\ttimeline._tasks_dnd = _tasks_dnd;\r\n\t\t\treturn _tasks_dnd.init(gantt);\r\n\t\t},\r\n\t\tdestructor: function() {\r\n\t\t\tif (_tasks_dnd) {\r\n\t\t\t\t_tasks_dnd.destructor();\r\n\t\t\t\t_tasks_dnd = null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default {\r\n\tcreateTaskDND: initTaskDND\r\n};","import * as domHelpers from \"../utils/dom_helpers\";\r\n\r\nvar initLinksDND = function(timeline, gantt) {\r\n\tvar _link_landing,\r\n\t\t_link_target_task,\r\n\t\t_link_target_task_start,\r\n\t\t_link_source_task,\r\n\t\t_link_source_task_start,\r\n\t\tmarkerDefaultOffset = 10,\r\n\t\tscrollDefaultSize = 18;\r\n\r\n\tfunction getDndState(){\r\n\t\treturn {\r\n\t\t\tlink_source_id : _link_source_task,\r\n\t\t\tlink_target_id : _link_target_task,\r\n\t\t\tlink_from_start : _link_source_task_start,\r\n\t\t\tlink_to_start : _link_target_task_start,\r\n\t\t\tlink_landing_area : _link_landing\r\n\t\t};\r\n\t}\r\n\r\n\tvar services = gantt.$services;\r\n\r\n\tvar state = services.getService(\"state\");\r\n\tvar DnD = services.getService(\"dnd\");\r\n\r\n\tstate.registerProvider(\"linksDnD\", getDndState);\r\n\r\n\tvar start_marker = \"task_start_date\",\r\n\t\tend_marker = \"task_end_date\",\r\n\t\tlink_edge_marker = \"gantt_link_point\",\r\n\t\tlink_landing_hover_area = \"gantt_link_control\";\r\n\r\n\tvar dnd = new DnD(timeline.$task_bars, {\r\n\t\tsensitivity : 0,\r\n\t\tupdates_per_second : 60,\r\n\t\tmousemoveContainer: gantt.$root,\r\n\t\tselector: \".\" + link_edge_marker,\r\n\t\tpreventDefault: true\r\n\t});\r\n\r\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function(obj,e) {\r\n\t\tvar target = (e.target||e.srcElement);\r\n\t\tresetDndState();\r\n\t\tif(gantt.getState(\"tasksDnd\").drag_id)\r\n\t\t\treturn false;\r\n\r\n\t\tif(domHelpers.locateClassName(target, link_edge_marker)){\r\n\t\t\tif(domHelpers.locateClassName(target, start_marker))\r\n\t\t\t\t_link_source_task_start = true;\r\n\r\n\t\t\tvar sid = gantt.locate(e);\r\n\t\t\t_link_source_task = sid;\r\n\r\n\t\t\tvar t = gantt.getTask(sid);\r\n\t\t\tif(gantt.isReadonly(t)){\r\n\t\t\t\tresetDndState();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._dir_start = {\r\n\t\t\t\tx: dnd.config.original_element_sizes.x + dnd.config.original_element_sizes.width/2,\r\n\t\t\t\ty: dnd.config.original_element_sizes.y + dnd.config.original_element_sizes.height/2\r\n\t\t\t};\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}, this));\r\n\r\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function(obj,e) {\r\n\t\tif(gantt.config.touch) {\r\n\t\t\tgantt.refreshData();\r\n\t\t}\r\n\t\tupdateMarkedHtml(dnd.config.marker);\r\n\t}, this));\r\n\r\n\tfunction getVieportSize(){\r\n\t\tvar root = gantt.$root;\r\n\t\treturn { right: root.offsetWidth, bottom: root.offsetHeight };\r\n\t}\r\n\tfunction getMarkerSize (marker){\r\n\t\tvar width = 0, height = 0;\r\n\t\tif(marker){\r\n\t\t\twidth = marker.offsetWidth || 0;\r\n\t\t\theight = marker.offsetHeight || 0;\r\n\t\t}\r\n\t\treturn { width: width, height: height };\r\n\t}\r\n\r\n\tfunction getPosition(e, marker){\r\n\t\tvar oldPos = dnd.getPosition(e);\r\n\r\n\t\tvar markerSize = getMarkerSize(marker);\r\n\t\tvar viewportSize = getVieportSize();\r\n\r\n\t\tvar offsetX = gantt.config.tooltip_offset_x || markerDefaultOffset;\r\n\t\tvar offsetY = gantt.config.tooltip_offset_y || markerDefaultOffset;\r\n\r\n\t\tvar scrollSize = gantt.config.scroll_size || scrollDefaultSize;\r\n\r\n\t\t// GS-1315: Add offset if there are elements above Gantt\r\n\t\tvar ganttOffsetY = gantt.$container.getBoundingClientRect().y + window.scrollY;\r\n\r\n\t\tvar position = {\r\n\t\t\ty: oldPos.y + offsetY,\r\n\t\t\tx: oldPos.x + offsetX,\r\n\t\t\tbottom: oldPos.y + markerSize.height + offsetY + scrollSize,\r\n\t\t\tright: oldPos.x + markerSize.width + offsetX + scrollSize\r\n\t\t};\r\n\r\n\t\tif(position.bottom > viewportSize.bottom + ganttOffsetY){\r\n\t\t\tposition.y = viewportSize.bottom + ganttOffsetY - markerSize.height - offsetY;\r\n\t\t}\r\n\r\n\t\tif(position.right > viewportSize.right){\r\n\t\t\tposition.x = viewportSize.right - markerSize.width - offsetX;\r\n\t\t}\r\n\t\treturn position;\r\n\t}\r\n\r\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function(obj,e) {\r\n\t\tvar dd = dnd.config;\r\n\t\tvar pos = getPosition(e, dd.marker);\r\n\t\tadvanceMarker(dd.marker, pos);\r\n\t\tvar landing = !!domHelpers.locateClassName(e, link_landing_hover_area);\r\n\r\n\t\tvar prevTarget = _link_target_task;\r\n\t\tvar prevLanding = _link_landing;\r\n\t\tvar prevToStart = _link_target_task_start;\r\n\r\n\t\tvar targ = gantt.locate(e),\r\n\t\t\tto_start = true;\r\n\r\n\t\t// can drag and drop link to another gantt on the page, such links are not supported\r\n\t\tvar eventTarget = domHelpers.getTargetNode(e);\r\n\r\n\t\tvar sameGantt = domHelpers.isChildOf(eventTarget, gantt.$root);\r\n\t\tif(!sameGantt){\r\n\t\t\tlanding = false;\r\n\t\t\ttarg = null;\r\n\t\t}\r\n\r\n\t\tif(landing){\r\n\t\t\t//refreshTask\r\n\t\t\tto_start = !domHelpers.locateClassName(e, end_marker);\r\n\t\t\tlanding = !!targ;\r\n\t\t}\r\n\r\n\t\t_link_target_task = targ;\r\n\t\t_link_landing = landing;\r\n\t\t_link_target_task_start = to_start;\r\n\r\n\t\tif(landing){\r\n\r\n\t\t\tvar node = domHelpers.locateClassName(e, link_landing_hover_area);\r\n\t\t\r\n\t\t\tconst point = node.querySelector(`.${link_edge_marker}`);\r\n\t\t\tif(point){\r\n\t\t\t\tconst absCoords = domHelpers.getRelativeNodePosition(point, timeline.$task_data);\r\n\t\t\t\tthis._dir_end = {\r\n\t\t\t\t\tx: absCoords.x + point.offsetWidth/2,\r\n\t\t\t\t\ty: absCoords.y + point.offsetHeight/2\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis._dir_end = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\r\n\t\t\tif(gantt.env.isEdge){ // to fix margin collapsing\r\n\t\t\t\tthis._dir_end.y += window.scrollY;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar targetChanged = !(prevLanding == landing && prevTarget == targ && prevToStart == to_start);\r\n\t\tif(targetChanged){\r\n\t\t\tif(prevTarget)\r\n\t\t\t\tgantt.refreshTask(prevTarget, false);\r\n\t\t\tif(targ)\r\n\t\t\t\tgantt.refreshTask(targ, false);\r\n\t\t}\r\n\r\n\t\tif(targetChanged){\r\n\t\t\tupdateMarkedHtml(dd.marker);\r\n\t\t}\r\n\r\n\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\r\n\r\n\t\treturn true;\r\n\t}, this));\r\n\r\n\r\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function() {\r\n\t\tvar drag = getDndState();\r\n\r\n\t\tif(drag.link_source_id && drag.link_target_id && drag.link_source_id != drag.link_target_id){\r\n\t\t\tvar type = gantt._get_link_type(drag.link_from_start, drag.link_to_start);\r\n\r\n\t\t\tvar link = {source : drag.link_source_id, target: drag.link_target_id, type:type};\r\n\t\t\tif(link.type && gantt.isLinkAllowed(link)) {\r\n\t\t\t\tif(gantt.callEvent(\"onLinkCreated\", [link])){\r\n\t\t\t\t\tgantt.addLink(link);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresetDndState();\r\n\r\n\t\tif(gantt.config.touch) {\r\n\t\t\tgantt.refreshData();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (drag.link_source_id)\r\n\t\t\t\tgantt.refreshTask(drag.link_source_id, false);\r\n\t\t\tif (drag.link_target_id)\r\n\t\t\t\tgantt.refreshTask(drag.link_target_id, false);\r\n\t\t}\r\n\t\tremoveDirectionLine();\r\n\t}, this));\r\n\r\n\tfunction updateMarkedHtml(marker){\r\n\t\tvar link = getDndState();\r\n\r\n\t\tvar css = [\"gantt_link_tooltip\"];\r\n\t\tif(link.link_source_id && link.link_target_id){\r\n\t\t\tif(gantt.isLinkAllowed(link.link_source_id, link.link_target_id, link.link_from_start, link.link_to_start)){\r\n\t\t\t\tcss.push(\"gantt_allowed_link\");\r\n\t\t\t}else{\r\n\t\t\t\tcss.push(\"gantt_invalid_link\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar className = gantt.templates.drag_link_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start);\r\n\t\tif(className)\r\n\t\t\tcss.push(className);\r\n\r\n\t\tvar html = \"\" +\r\n\t\t\tgantt.templates.drag_link(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start) +\r\n\t\t\t\"
\";\r\n\t\tmarker.innerHTML = html;\r\n\t}\r\n\r\n\tfunction advanceMarker(marker, pos){\r\n\t\tmarker.style.left = pos.x + \"px\";\r\n\t\tmarker.style.top = pos.y + \"px\";\r\n\t}\r\n\r\n\tfunction resetDndState(){\r\n\t\t_link_source_task =\r\n\t\t\t_link_source_task_start =\r\n\t\t\t\t_link_target_task = null;\r\n\t\t_link_target_task_start = true;\r\n\t}\r\n\tfunction showDirectingLine(s_x, s_y, e_x, e_y){\r\n\t\tvar div = getDirectionLine();\r\n\r\n\t\tvar link = getDndState();\r\n\r\n\t\tvar css = [\"gantt_link_direction\"];\r\n\t\tif(gantt.templates.link_direction_class){\r\n\t\t\tcss.push(gantt.templates.link_direction_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start));\r\n\t\t}\r\n\r\n\t\tvar dist =Math.sqrt( (Math.pow(e_x - s_x, 2)) + (Math.pow(e_y - s_y, 2)) );\r\n\t\tdist = Math.max(0, dist - 3);\r\n\t\tif(!dist)\r\n\t\t\treturn;\r\n\r\n\t\tdiv.className = css.join(\" \");\r\n\t\tvar tan = (e_y - s_y)/(e_x - s_x),\r\n\t\t\tangle = Math.atan(tan);\r\n\r\n\t\tif(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 2){\r\n\t\t\tangle += Math.PI;\r\n\t\t}else if(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 3){\r\n\t\t\tangle -= Math.PI;\r\n\t\t}\r\n\r\n\r\n\r\n\t\tvar sin = Math.sin(angle),\r\n\t\t\tcos = Math.cos(angle),\r\n\t\t\ttop = Math.round(s_y),\r\n\t\t\tleft = Math.round(s_x);\r\n\r\n\r\n\t\tvar style = [\r\n\t\t\t\"-webkit-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"-moz-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"-ms-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"-o-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"width:\" + Math.round(dist) + \"px\"\r\n\t\t];\r\n\r\n\t\tif(window.navigator.userAgent.indexOf(\"MSIE 8.0\") != -1){\r\n\t\t\t//ms-filter breaks styles in ie9, so add it only for 8th\r\n\t\t\tstyle.push(\"-ms-filter: \\\"\" + ieTransform(sin, cos) + \"\\\"\");\r\n\r\n\t\t\tvar shiftLeft = Math.abs(Math.round(s_x - e_x)),\r\n\t\t\t\tshiftTop = Math.abs(Math.round(e_y - s_y));\r\n\t\t\t//fix rotation axis\r\n\t\t\tswitch(coordinateCircleQuarter(s_x, e_x, s_y, e_y)){\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\ttop -= shiftTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tleft -= shiftLeft;\r\n\t\t\t\t\ttop -= shiftTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\tleft -= shiftLeft;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tstyle.push(\"top:\" + top + \"px\");\r\n\t\tstyle.push(\"left:\" + left + \"px\");\r\n\r\n\t\tdiv.style.cssText = style.join(\";\");\r\n\t}\r\n\r\n\tfunction ieTransform(sin, cos){\r\n\t\treturn \"progid:DXImageTransform.Microsoft.Matrix(\"+\r\n\t\t\t\"M11 = \"+cos+\",\"+\r\n\t\t\t\"M12 = -\"+sin+\",\"+\r\n\t\t\t\"M21 = \"+sin+\",\"+\r\n\t\t\t\"M22 = \"+cos+\",\"+\r\n\t\t\t\"SizingMethod = 'auto expand'\"+\r\n\t\t\")\";\r\n\t}\r\n\tfunction coordinateCircleQuarter(sX, eX, sY, eY){\r\n\t\tif(eX >= sX){\r\n\t\t\tif(eY <= sY){\r\n\t\t\t\treturn 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn 4;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(eY <= sY){\r\n\t\t\t\treturn 2;\r\n\t\t\t}else{\r\n\t\t\t\treturn 3;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\tfunction getDirectionLine(){\r\n\t\tif(!dnd._direction || !dnd._direction.parentNode){\r\n\t\t\tdnd._direction = document.createElement(\"div\");\r\n\t\t\ttimeline.$task_links.appendChild(dnd._direction);\r\n\t\t}\r\n\t\treturn dnd._direction;\r\n\t}\r\n\tfunction removeDirectionLine(){\r\n\t\tif(dnd._direction){\r\n\t\t\tif (dnd._direction.parentNode)\t//the event line can be detached because of data refresh\r\n\t\t\t\tdnd._direction.parentNode.removeChild(dnd._direction);\r\n\r\n\t\t\tdnd._direction = null;\r\n\t\t}\r\n\t}\r\n\tgantt.attachEvent(\"onGanttRender\", gantt.bind(function() {\r\n\t\tif(dnd._direction){\r\n\t\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\r\n\t\t}\r\n\t}, this));\r\n};\r\n\r\nexport default {\r\n\tcreateLinkDND: function(){\r\n\t\treturn {\r\n\t\t\tinit: initLinksDND\r\n\t\t};\r\n\t}\r\n};","import * as utils from \"../../../utils/utils\";\r\nimport taskDnD from \"./tasks_dnd\";\r\nimport linkDnD from \"./links_dnd\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport MouseDelegates from \"../mouse_event_container\";\r\n\r\nvar initializer = (function(){\r\n\treturn function(gantt){\r\n\t\tvar services = gantt.$services;\r\n\t\treturn {\r\n\t\t\tonCreated: function (timeline) {\r\n\t\t\t\tvar config = timeline.$config;\r\n\t\t\t\tconfig.bind = utils.defined(config.bind) ? config.bind : \"task\";\r\n\t\t\t\tconfig.bindLinks = utils.defined(config.bindLinks) ? config.bindLinks : \"link\";\r\n\r\n\t\t\t\ttimeline._linksDnD = linkDnD.createLinkDND();\r\n\t\t\t\ttimeline._tasksDnD = taskDnD.createTaskDND();\r\n\t\t\t\ttimeline._tasksDnD.extend(timeline);\r\n\r\n\t\t\t\tthis._mouseDelegates = MouseDelegates(gantt);\r\n\t\t\t},\r\n\t\t\tonInitialized: function (timeline) {\r\n\t\t\t\tthis._attachDomEvents(gantt);\r\n\r\n\t\t\t\tthis._attachStateProvider(gantt, timeline);\r\n\r\n\t\t\t\ttimeline._tasksDnD.init(timeline, gantt);\r\n\t\t\t\ttimeline._linksDnD.init(timeline, gantt);\r\n\r\n\t\t\t\tif(timeline.$config.id == \"timeline\"){\r\n\t\t\t\t\tthis.extendDom(timeline);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\tonDestroyed: function (timeline) {\r\n\t\t\t\tthis._clearDomEvents(gantt);\r\n\t\t\t\tthis._clearStateProvider(gantt);\r\n\t\t\t\tif (timeline._tasksDnD) {\r\n\t\t\t\t\ttimeline._tasksDnD.destructor();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\textendDom: function(timeline){\r\n\t\t\t\tgantt.$task = timeline.$task;\r\n\t\t\t\tgantt.$task_scale = timeline.$task_scale;\r\n\t\t\t\tgantt.$task_data = timeline.$task_data;\r\n\t\t\t\tgantt.$task_bg = timeline.$task_bg;\r\n\t\t\t\tgantt.$task_links = timeline.$task_links;\r\n\t\t\t\tgantt.$task_bars = timeline.$task_bars;\r\n\t\t\t},\r\n\r\n\t\t\t_clearDomEvents: function(){\r\n\t\t\t\tthis._mouseDelegates.destructor();\r\n\t\t\t\tthis._mouseDelegates = null;\r\n\t\t\t},\r\n\r\n\t\t\t_attachDomEvents: function(gantt){\r\n\t\t\t\tfunction _delete_link_handler(id, e) {\r\n\t\t\t\t\tif (id && this.callEvent(\"onLinkDblClick\", [id, e])) {\r\n\r\n\t\t\t\t\t\tvar link = this.getLink(id);\r\n\t\t\t\t\t\tif (this.isReadonly(link)) return;\r\n\r\n\t\t\t\t\t\tvar title = \"\";\r\n\t\t\t\t\t\tvar question = this.locale.labels.link + \" \" + this.templates.link_description(this.getLink(id)) + \" \" + this.locale.labels.confirm_link_deleting;\r\n\r\n\t\t\t\t\t\twindow.setTimeout(function () {\r\n\t\t\t\t\t\t\tgantt._simple_confirm(question, title, function () {\r\n\t\t\t\t\t\t\t\tgantt.deleteLink(id);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}, (this.config.touch ? 300 : 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_task_link\", gantt.bind(function (e, trg) {\r\n\t\t\t\t\tvar id = this.locate(e, this.config.link_attribute);\r\n\t\t\t\t\tif (id) {\r\n\t\t\t\t\t\tthis.callEvent(\"onLinkClick\", [id, e]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, gantt), this.$task);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_scale_cell\", gantt.bind(function (e, trg) {\r\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\r\n\t\t\t\t\tvar date = gantt.dateFromPos(pos.x);\r\n\t\t\t\t\tvar coll = Math.floor(gantt.columnIndexByDate(date));\r\n\r\n\t\t\t\t\tvar coll_date = gantt.getScale().trace_x[coll];\r\n\r\n\t\t\t\t\tgantt.callEvent(\"onScaleClick\", [e, coll_date]);\r\n\t\t\t\t}, gantt), this.$task);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"doubleclick\", \"gantt_task_link\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar id = this.locate(e, gantt.config.link_attribute);\r\n\t\t\t\t\t_delete_link_handler.call(this, id, e);\r\n\t\t\t\t}, gantt), this.$task);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"doubleclick\", \"gantt_link_point\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar id = this.locate(e),\r\n\t\t\t\t\t\ttask = this.getTask(id);\r\n\r\n\t\t\t\t\tvar link = null;\r\n\t\t\t\t\tif (trg.parentNode && domHelpers.getClassName(trg.parentNode)) {\r\n\t\t\t\t\t\tif (domHelpers.getClassName(trg.parentNode).indexOf(\"_left\") > -1) {\r\n\t\t\t\t\t\t\tlink = task.$target[0];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlink = task.$source[0];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (link)\r\n\t\t\t\t\t\t_delete_link_handler.call(this, link, e);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}, gantt), this.$task);\r\n\t\t\t},\r\n\r\n\t\t\t_attachStateProvider: function(gantt, timeline){\r\n\t\t\t\tvar self = timeline;\r\n\t\t\t\tvar state = services.getService(\"state\");\r\n\t\t\t\tstate.registerProvider(\"tasksTimeline\", function(){\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tscale_unit: self._tasks ? self._tasks.unit : undefined,\r\n\t\t\t\t\t\tscale_step: self._tasks ? self._tasks.step : undefined\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t_clearStateProvider: function(){\r\n\t\t\t\tvar state = services.getService(\"state\");\r\n\t\t\t\tstate.unregisterProvider(\"tasksTimeline\");\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n})();\r\n\r\nexport default initializer;","import * as domHelpers from \"./utils/dom_helpers\";\r\n\r\nvar initializer = (function() {\r\n\treturn function (gantt) {\r\n\t\treturn {\r\n\r\n\t\t\tgetVerticalScrollbar: function(){\r\n\t\t\t\treturn gantt.$ui.getView(\"scrollVer\");\r\n\t\t\t},\r\n\t\t\tgetHorizontalScrollbar: function(){\r\n\t\t\t\treturn gantt.$ui.getView(\"scrollHor\");\r\n\t\t\t},\r\n\r\n\t\t\t_legacyGridResizerClass: function(layout){\r\n\t\t\t\tvar resizers = layout.getCellsByType(\"resizer\");\r\n\t\t\t\tfor(var i = 0; i < resizers.length; i++){\r\n\t\t\t\t\tvar r = resizers[i];\r\n\t\t\t\t\tvar gridResizer = false;\r\n\r\n\t\t\t\t\tvar prev = r.$parent.getPrevSibling(r.$id);\r\n\t\t\t\t\tif(prev && prev.$config && prev.$config.id === \"grid\"){\r\n\t\t\t\t\t\tgridResizer= true;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tvar next = r.$parent.getNextSibling(r.$id);\r\n\t\t\t\t\t\tif(next && next.$config && next.$config.id === \"grid\"){\r\n\t\t\t\t\t\t\tgridResizer= true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(gridResizer){\r\n\t\t\t\t\t\tr.$config.css = (r.$config.css ? r.$config.css + \" \" : \"\") + \"gantt_grid_resize_wrap\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tonCreated: function(layout) {\r\n\t\t\t\tvar first = true;\r\n\r\n\t\t\t\tthis._legacyGridResizerClass(layout);\r\n\r\n\t\t\t\tlayout.attachEvent(\"onBeforeResize\", function() {\r\n\t\t\t\t\tvar mainTimeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\t\t\tif (mainTimeline)\r\n\t\t\t\t\t\tmainTimeline.$config.hidden = mainTimeline.$parent.$config.hidden = !gantt.config.show_chart;\r\n\r\n\t\t\t\t\tvar mainGrid = gantt.$ui.getView(\"grid\");\r\n\r\n\t\t\t\t\tif(!mainGrid)\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\tvar colsWidth = mainGrid._getColsTotalWidth();\r\n\t\t\t\t\tvar hideGrid = !gantt.config.show_grid || !gantt.config.grid_width || colsWidth === 0;\r\n\t\t\t\t\tif (first && !hideGrid && colsWidth !== false){\r\n\t\t\t\t\t\t\tgantt.config.grid_width = colsWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmainGrid.$config.hidden = mainGrid.$parent.$config.hidden = hideGrid;\r\n\r\n\t\t\t\t\tif (!mainGrid.$config.hidden) {\r\n\t\t\t\t\t\t/* restrict grid width due to min_width, max_width, min_grid_column_width */\r\n\t\t\t\t\t\tvar grid_limits = mainGrid._getGridWidthLimits();\r\n\t\t\t\t\t\tif (grid_limits[0] && gantt.config.grid_width < grid_limits[0])\r\n\t\t\t\t\t\t\tgantt.config.grid_width = grid_limits[0];\r\n\t\t\t\t\t\tif (grid_limits[1] && gantt.config.grid_width > grid_limits[1])\r\n\t\t\t\t\t\t\tgantt.config.grid_width = grid_limits[1];\r\n\t\t\t\t\t\tif (mainTimeline && gantt.config.show_chart){\r\n\r\n\t\t\t\t\t\t\tmainGrid.$config.width = gantt.config.grid_width - 1;\r\n\r\n\t\t\t\t\t\t\t// GS-1314: Don't let the non-scrollable grid to be larger than the container with the correct width\r\n\t\t\t\t\t\t\tif (!mainGrid.$config.scrollable && mainGrid.$config.scrollY && gantt.$root.offsetWidth){\r\n\t\t\t\t\t\t\t\tvar ganttContainerWidth = mainGrid.$gantt.$layout.$container.offsetWidth;\r\n\t\t\t\t\t\t\t\tvar verticalScrollbar = gantt.$ui.getView(mainGrid.$config.scrollY);\r\n\t\t\t\t\t\t\t\tvar verticalScrollbarWidth = verticalScrollbar.$config.width;\r\n\r\n\t\t\t\t\t\t\t\t// GS-2488: to prevent grid from occupying the whole gantt container(timeline will be disabled) \r\n\t\t\t\t\t\t\t\t// need to leave min width for timeline\r\n\t\t\t\t\t\t\t\tvar gridOverflow = ganttContainerWidth - (mainGrid.$config.width + verticalScrollbarWidth) - 4;\r\n\t\t\t\t\t\t\t\tif (gridOverflow < 0){\r\n\t\t\t\t\t\t\t\t\tmainGrid.$config.width += gridOverflow;\r\n\t\t\t\t\t\t\t\t\tgantt.config.grid_width += gridOverflow;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (!first) {\r\n\t\t\t\t\t\t\t\tif (mainTimeline && !domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\r\n\t\t\t\t\t\t\t\t\t// timeline is being displayed after being not visible, reset grid with from full screen\r\n\t\t\t\t\t\t\t\t\tif (!mainGrid.$config.original_grid_width) {\r\n\t\t\t\t\t\t\t\t\t\tvar skinSettings = gantt.skins[gantt.skin];\r\n\t\t\t\t\t\t\t\t\t\tif(skinSettings && skinSettings.config && skinSettings.config.grid_width){\r\n\t\t\t\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = skinSettings.config.grid_width;\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = 0;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tgantt.config.grid_width = mainGrid.$config.original_grid_width;\r\n\t\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tmainGrid.$parent._setContentSize(mainGrid.$config.width, null);\r\n\t\t\t\t\t\t\t\t\tgantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, {value: gantt.config.grid_width, isGravity: false});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\r\n\t\t\t\t\t\t\t\tif (mainGrid.$parent.$config.group) {\r\n\t\t\t\t\t\t\t\t\tgantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, {value: mainGrid.$parent.$config.width, isGravity: false});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (mainTimeline && domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\r\n\t\t\t\t\t\t\t\t// hiding timeline, remember grid with to restore it when timeline is displayed again\r\n\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = gantt.config.grid_width;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (!first) {\r\n\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfirst = false;\r\n\t\t\t\t});\r\n\t\t\t\tthis._initScrollStateEvents(layout);\r\n\t\t\t},\r\n\r\n\t\t\t_initScrollStateEvents: function(layout) {\r\n\t\t\t\tgantt._getVerticalScrollbar = this.getVerticalScrollbar;\r\n\t\t\t\tgantt._getHorizontalScrollbar = this.getHorizontalScrollbar;\r\n\r\n\t\t\t\tvar vertical = this.getVerticalScrollbar();\r\n\t\t\t\tvar horizontal = this.getHorizontalScrollbar();\r\n\t\t\t\tif (vertical) {\r\n\t\t\t\t\tvertical.attachEvent(\"onScroll\", function(oldPos, newPos, dir){\r\n\t\t\t\t\t\tvar scrollState = gantt.getScrollState();\r\n\t\t\t\t\t\tgantt.callEvent(\"onGanttScroll\", [scrollState.x, oldPos, scrollState.x, newPos]);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (horizontal) {\r\n\t\t\t\t\thorizontal.attachEvent(\"onScroll\", function(oldPos, newPos, dir){\r\n\t\t\t\t\t\tvar scrollState = gantt.getScrollState();\r\n\t\t\t\t\t\tgantt.callEvent(\"onGanttScroll\", [oldPos, scrollState.y, newPos, scrollState.y]);\r\n\r\n\t\t\t\t\t\t// if the grid doesn't fit the width, scroll the row container\r\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tif (grid && grid.$grid_data && !grid.$config.scrollable){\r\n\t\t\t\t\t\t\tgrid.$grid_data.style.left = grid.$grid.scrollLeft + \"px\";\r\n\t\t\t\t\t\t\tgrid.$grid_data.scrollLeft = grid.$grid.scrollLeft;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlayout.attachEvent(\"onResize\", function(){\r\n\t\t\t\t\tif (vertical && !gantt.$scroll_ver){\r\n\t\t\t\t\t\tgantt.$scroll_ver = vertical.$scroll_ver;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (horizontal && !gantt.$scroll_hor){\r\n\t\t\t\t\t\tgantt.$scroll_hor = horizontal.$scroll_hor;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t_findGridResizer: function(layout, grid){\r\n\t\t\t\tvar resizers = layout.getCellsByType(\"resizer\");\r\n\r\n\t\t\t\tvar gridFirst = true;\r\n\t\t\t\tvar gridResizer;\r\n\t\t\t\tfor(var i = 0; i < resizers.length; i++){\r\n\t\t\t\t\tvar res = resizers[i];\r\n\t\t\t\t\tres._getSiblings();\r\n\t\t\t\t\tvar prev = res._behind;\r\n\t\t\t\t\tvar next = res._front;\r\n\t\t\t\t\tif(prev && prev.$content === grid || (prev.isChild && prev.isChild(grid))){\r\n\t\t\t\t\t\tgridResizer = res;\r\n\t\t\t\t\t\tgridFirst = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}else if(next && next.$content === grid || (next.isChild && next.isChild(grid))){\r\n\t\t\t\t\t\tgridResizer = res;\r\n\t\t\t\t\t\tgridFirst = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn {\r\n\t\t\t\t\tresizer: gridResizer,\r\n\t\t\t\t\tgridFirst: gridFirst\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tonInitialized: function (layout) {\r\n\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\r\n\t\t\t\tvar resizeInfo = this._findGridResizer(layout, grid);\r\n\r\n\t\t\t\t// expose grid resize events\r\n\t\t\t\tif(resizeInfo.resizer){\r\n\t\t\t\t\tvar gridFirst = resizeInfo.gridFirst,\r\n\t\t\t\t\t\tnext = resizeInfo.resizer;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\tif(next.$config.mode !== \"x\"){\r\n\t\t\t\t\t\treturn;// track only horizontal resize\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar initialWidth;\r\n\t\t\t\t\tnext.attachEvent(\"onResizeStart\", function(prevCellWidth, nextCellWidth){\r\n\r\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tvar viewCell = grid ? grid.$parent : null;\r\n\t\t\t\t\t\tif(viewCell){\r\n\t\t\t\t\t\t\tvar limits = grid._getGridWidthLimits();\r\n\r\n\t\t\t\t\t\t\t// min grid width is defined by min widths of its columns, unless grid has horizontal scroll\r\n\t\t\t\t\t\t\tif(!grid.$config.scrollable)\r\n\t\t\t\t\t\t\t\tviewCell.$config.minWidth = limits[0];\r\n\r\n\t\t\t\t\t\t\tviewCell.$config.maxWidth = limits[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tinitialWidth = gridFirst ? prevCellWidth : nextCellWidth;\r\n\t\t\t\t\t\treturn gantt.callEvent(\"onGridResizeStart\", [initialWidth]);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tnext.attachEvent(\"onResize\", function(newBehindSize, newFrontSize){\r\n\t\t\t\t\t\tvar newSize = gridFirst ? newBehindSize : newFrontSize;\r\n\t\t\t\t\t\treturn gantt.callEvent(\"onGridResize\", [initialWidth, newSize]);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tnext.attachEvent(\"onResizeEnd\", function(oldBackSize, oldFrontSize, newBackSize, newFrontSize){\r\n\r\n\t\t\t\t\t\tvar oldSize = gridFirst ? oldBackSize : oldFrontSize;\r\n\t\t\t\t\t\tvar newSize = gridFirst ? newBackSize : newFrontSize;\r\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tvar viewCell = grid ? grid.$parent : null;\r\n\t\t\t\t\t\tif(viewCell){\r\n\t\t\t\t\t\t\tviewCell.$config.minWidth = undefined;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar res = gantt.callEvent(\"onGridResizeEnd\", [oldSize, newSize]);\r\n\t\t\t\t\t\tif(res && newSize !== 0){// new size may be numeric zero when cell size is defined by 'gravity', actual size will be calculated by layout later\r\n\t\t\t\t\t\t\tgantt.config.grid_width = newSize;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn res;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\tonDestroyed: function (timeline) {\r\n\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t};\r\n})();\r\n\r\nexport default initializer;","import uiFactory from \"./ui_factory\";\r\nimport mouseEvents from \"./mouse\";\r\nimport createLayers from \"./gantt_layers\";\r\nimport Cell from \"./layout/cell\";\r\nimport Layout from \"./layout/layout\";\r\nimport ViewLayout from \"./layout/view_layout\";\r\nimport ViewCell from \"./layout/view_cell\";\r\nimport Resizer from \"./layout/resizer_cell\";\r\nimport Scrollbar from \"./layout/scrollbar_cell\";\r\nimport Timeline from \"./timeline/timeline\";\r\nimport Grid from \"./grid/grid\";\r\nimport ResourceGrid from \"./grid/resource_grid\";\r\nimport ResourceTimeline from \"./timeline/resource_timeline\";\r\nimport ResourceHistogram from \"./timeline/resource_histogram\";\r\n\r\n\r\nimport gridEditorsFactory from \"./grid/editors/controller\";\r\n\r\nimport renderTaskBar from \"./render/task_bar_smart_render\";\r\nimport renderTimedProjectBar from \"./render/task_project_smart_render\";\r\nimport renderSplitTaskBar from \"./render/task_split_render\";\r\nimport renderRollupTaskBar from \"./render/task_rollup_render\";\r\nimport renderTaskBg from \"./render/task_bg_render\";\r\nimport renderLink from \"./render/link_render\";\r\nimport gridRenderer from \"./render/task_grid_line_render\";\r\nimport resourceMatrixRenderer from \"./render/resource_matrix_render\";\r\nimport resourceHistogramRenderer from \"./render/resource_histogram_render\";\r\nimport gridTaskRowResizerRenderer from \"./render/task_grid_row_resize_render\";\r\nimport renderConstraints from \"./render/task_constraints_render\";\r\nimport renderDeadline from \"./render/task_deadline_render\";\r\nimport renderBaselines from \"./render/task_baselines_render\";\r\nimport mainGridInitializer from \"./grid/main_grid_initializer\";\r\nimport mainTimelineInitializer from \"./timeline/main_timeline_initializer\";\r\nimport mainLayoutInitializer from \"./main_layout_initializer\";\r\n\r\nfunction initUI(gantt){\r\n\tfunction attachInitializer(view, initializer){\r\n\t\tvar ext = initializer(gantt);\r\n\t\tif(ext.onCreated)\r\n\t\t\text.onCreated(view);\r\n\t\tview.attachEvent(\"onReady\", function(){\r\n\t\t\tif(ext.onInitialized)\r\n\t\t\t\text.onInitialized(view);\r\n\t\t});\r\n\t\tview.attachEvent(\"onDestroy\", function(){\r\n\t\t\tif(ext.onDestroyed)\r\n\t\t\t\text.onDestroyed(view);\r\n\t\t});\r\n\t}\r\n\r\n\tvar factory = uiFactory.createFactory(gantt);\r\n\tfactory.registerView(\"cell\", Cell);\r\n\tfactory.registerView(\"resizer\", Resizer);\r\n\tfactory.registerView(\"scrollbar\", Scrollbar);\r\n\tfactory.registerView(\"layout\", Layout, function(view){\r\n\t\tvar id = view.$config ? view.$config.id : null;\r\n\t\tif(id === \"main\"){\r\n\t\t\tattachInitializer(view, mainLayoutInitializer);\r\n\t\t}\r\n\t});\r\n\tfactory.registerView(\"viewcell\", ViewCell);\r\n\tfactory.registerView(\"multiview\", ViewLayout);\r\n\tfactory.registerView(\"timeline\", Timeline, function(view){\r\n\t\tvar id = view.$config ? view.$config.id : null;\r\n\t\tif(id === \"timeline\" || view.$config.bind == \"task\"){\r\n\t\t\tattachInitializer(view, mainTimelineInitializer);\r\n\t\t}\r\n\t});\r\n\tfactory.registerView(\"grid\", Grid, function(view){\r\n\t\tvar id = view.$config ? view.$config.id : null;\r\n\t\tif(id === \"grid\" || view.$config.bind == \"task\"){\r\n\t\t\tattachInitializer(view, mainGridInitializer);\r\n\t\t}\r\n\t});\r\n\r\n\tfactory.registerView(\"resourceGrid\", ResourceGrid);\r\n\tfactory.registerView(\"resourceTimeline\", ResourceTimeline);\r\n\tfactory.registerView(\"resourceHistogram\", ResourceHistogram);\r\n\r\n\tvar layersEngine = createLayers(gantt);\r\n\r\n\tvar inlineEditors = gridEditorsFactory(gantt);\r\n\r\n\tgantt.ext.inlineEditors = inlineEditors;\r\n\tgantt.ext._inlineEditors = inlineEditors;\r\n\tinlineEditors.init(gantt);\r\n\r\n\treturn {\r\n\t\tfactory:factory,\r\n\t\tmouseEvents: mouseEvents.init(gantt),\r\n\t\tlayersApi: layersEngine.init(),\r\n\t\trender:{\r\n\t\t\tgridLine: function(){\r\n\t\t\t\treturn gridRenderer(gantt);\r\n\t\t\t},\r\n\t\t\ttaskBg: function(){\r\n\t\t\t\treturn renderTaskBg(gantt);\r\n\t\t\t},\r\n\t\t\ttaskBar: function(){\r\n\t\t\t\treturn renderTaskBar(gantt);\r\n\t\t\t},\r\n\t\t\ttimedProjectBar: function(){\r\n\t\t\t\treturn renderTimedProjectBar(gantt);\r\n\t\t\t},\r\n\t\t\ttaskRollupBar: function() {\r\n\t\t\t\treturn renderRollupTaskBar(gantt);\r\n\t\t\t},\r\n\t\t\ttaskSplitBar: function(){\r\n\t\t\t\treturn renderSplitTaskBar(gantt);\r\n\t\t\t},\r\n\t\t\ttaskConstraints: function(){\r\n\t\t\t\treturn renderConstraints(gantt);\r\n\t\t\t},\r\n\t\t\ttaskDeadline: function(){\r\n\t\t\t\treturn renderDeadline(gantt);\r\n\t\t\t},\r\n\t\t\ttaskBaselines: function(){\r\n\t\t\t\treturn renderBaselines(gantt);\r\n\t\t\t},\r\n\t\t\tlink: function(){\r\n\t\t\t\treturn renderLink(gantt);\r\n\t\t\t},\r\n\t\t\tresourceRow: function(){\r\n\t\t\t\treturn resourceMatrixRenderer(gantt);\r\n\t\t\t},\r\n\t\t\tresourceHistogram: function(){\r\n\t\t\t\treturn resourceHistogramRenderer(gantt);\r\n\t\t\t},\r\n\t\t\tgridTaskRowResizer: function(){\r\n\t\t\t\treturn gridTaskRowResizerRenderer(gantt);\r\n\t\t\t}\r\n\t\t},\r\n\t\tlayersService: {\r\n\t\t\tgetDataRender: function(name){\r\n\t\t\t\treturn layersEngine.getDataRender(name, gantt);\r\n\t\t\t},\r\n\t\t\tcreateDataRender: function(config){\r\n\t\t\t\treturn layersEngine.createDataRender(config, gantt);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default {\r\n\tinit: initUI\r\n};","export default null;","import * as helpers from \"../../../utils/helpers\";\r\nimport getRowRectangle from \"./viewport/get_grid_row_rectangle\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport isInViewPort from \"./viewport/is_grid_row_in_viewport\";\r\n\r\nfunction createGridLineRender(gantt){\r\n\r\n\tfunction _render_grid_item(item, view, config, viewport) {\r\n\t\tvar columns = view.getGridColumns();\r\n\t\tvar templates = view.$getTemplates();\r\n\r\n\t\tvar store = view.$config.rowStore;\r\n\r\n\t\tvar cells = [];\r\n\t\tvar has_child;\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar last = i == columns.length - 1;\r\n\t\t\tvar col = columns[i];\r\n\t\t\tvar cell;\r\n\r\n\t\t\tvar value;\r\n\t\t\tvar textValue;\r\n\t\t\tif (col.name == \"add\") {\r\n\t\t\t\tvar aria = gantt._waiAria.gridAddButtonAttrString(col);\r\n\r\n\t\t\t\tvalue = \"
\";\r\n\t\t\t\ttextValue = \"\";\r\n\t\t\t} else {\r\n\t\t\t\tif (col.template)\r\n\t\t\t\t\tvalue = col.template(item);\r\n\t\t\t\telse\r\n\t\t\t\t\tvalue = item[col.name];\r\n\r\n\t\t\t\tif (helpers.isDate(value)){\r\n\t\t\t\t\tvalue = templates.date_grid(value, item, col.name);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value === null || value === undefined) {\r\n\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttextValue = value;\r\n\t\t\t\tvalue = \"\" + value + \"
\";\r\n\t\t\t}\r\n\t\t\tvar css = \"gantt_cell\" + (last ? \" gantt_last_cell\" : \"\");\r\n\r\n\t\t\tvar tree = [];\r\n\t\t\tif (col.tree) {\r\n\t\t\t\tcss += \" gantt_cell_tree\";\r\n\t\t\t\tfor (var j = 0; j < item.$level; j++)\r\n\t\t\t\t\ttree.push(templates.grid_indent(item));\r\n\r\n\t\t\t\thas_child = store.hasChild(item.id) && !(gantt.isSplitTask(item) && !gantt.config.open_split_tasks);\r\n\t\t\t\tif (has_child) {\r\n\t\t\t\t\ttree.push(templates.grid_open(item));\r\n\t\t\t\t\ttree.push(templates.grid_folder(item));\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttree.push(templates.grid_blank(item));\r\n\t\t\t\t\ttree.push(templates.grid_file(item));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar style = \"width:\" + (col.width - (last ? 1 : 0)) + \"px;\";\r\n\t\t\tif (this.defined(col.align)){\r\n\t\t\t\tvar flexAlign = {\r\n\t\t\t\t\tright: \"flex-end\",\r\n\t\t\t\t\tleft: \"flex-start\",\r\n\t\t\t\t\tcenter: \"center\"\r\n\t\t\t\t};\r\n\t\t\t\tvar justifyContent = flexAlign[col.align];\r\n\r\n\t\t\t\tstyle += \"text-align:\" + col.align + \";justify-content:\" + justifyContent + \";\";\r\n\t\t\t}\r\n\r\n\t\t\tvar aria = gantt._waiAria.gridCellAttrString(col, textValue, item);\r\n\r\n\t\t\ttree.push(value);\r\n\t\t\tcell = \"\" + tree.join(\"\") + \"
\";\r\n\t\t\tcells.push(cell);\r\n\t\t}\r\n\t\t// GS-291. The odd class should be assigned correctly\r\n\t\tcss = \"\";\r\n\t\tconst storeName = store.$config.name;\r\n\t\tswitch (storeName) {\r\n\t\t\tcase \"task\":\r\n\t\t\t\tcss = gantt.getGlobalTaskIndex(item.id) % 2 === 0 ? \"\" : \" odd\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"resource\":\r\n\t\t\t\tcss = store.visibleOrder.indexOf(item.id) % 2 === 0 ? \"\" : \" odd\";\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcss += (item.$transparent) ? \" gantt_transparent\" : \"\";\r\n\r\n\t\tcss += (item.$dataprocessor_class ? \" \" + item.$dataprocessor_class : \"\");\r\n\r\n\t\tif (templates.grid_row_class) {\r\n\t\t\tvar css_template = templates.grid_row_class.call(gantt, item.start_date, item.end_date, item);\r\n\t\t\tif (css_template)\r\n\t\t\t\tcss += \" \" + css_template;\r\n\t\t}\r\n\r\n\t\tif(store.isSelected(item.id)) {\r\n\t\t\tcss += \" gantt_selected\";\r\n\t\t}\r\n\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.className = \"gantt_row\" + css + \" gantt_row_\" + gantt.getTaskType(item.type);\r\n\t\tvar height = view.getItemHeight(item.id);\r\n\t\tel.style.height = height + \"px\";\r\n\t\tel.style.lineHeight = height + \"px\";\r\n\r\n\t\tif(config.smart_rendering){\r\n\t\t\tel.style.position = \"absolute\";\r\n\t\t\tel.style.left = \"0px\";\r\n\t\t\tel.style.top = view.getItemTop(item.id) + \"px\";\r\n\t\t}\r\n\r\n\t\tif(view.$config.item_attribute){\r\n\t\t\tel.setAttribute(view.$config.item_attribute, item.id);\r\n\t\t\tel.setAttribute(view.$config.bind + \"_id\", item.id); // 'task_id'/'resource_id' for backward compatibility\r\n\t\t}\r\n\r\n\t\tgantt._waiAria.taskRowAttr(item, el);\r\n\r\n\t\tel.innerHTML = cells.join(\"\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tfunction onrender(item, rowNode, view){\r\n\t\tvar columns = view.getGridColumns();\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar column = columns[i];\r\n\t\t\tif (column.onrender){\r\n\r\n\t\t\t\t// find cell node for current column\r\n\t\t\t\tvar cellNode = rowNode.querySelector(\"[data-column-name=\" + column.name + \"]\");\r\n\t\t\t\tif (cellNode) {\r\n\t\t\t\t\tvar content = column.onrender(item, cellNode);\r\n\t\t\t\t\tif (content && typeof content === \"string\") {\r\n\t\t\t\t\t\tcellNode.innerHTML = content;\r\n\t\t\t\t\t} else if (content && typeof content === \"object\") {\r\n\t\t\t\t\t\t// render object to node using additional functionality\r\n\t\t\t\t\t\tif (gantt.config.external_render){\r\n\t\t\t\t\t\t\tvar adapter = gantt.config.external_render;\r\n\t\t\t\t\t\t\tif (adapter.isElement(content)){\r\n\t\t\t\t\t\t\t\tadapter.renderElement(content, cellNode);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: _render_grid_item,\r\n\t\tupdate: null,\r\n\t\tgetRectangle: getRowRectangle,\r\n\t\tisInViewPort: isInViewPort,\r\n\t\tgetVisibleRange: getVisibleRange,\r\n\t\tonrender: onrender\r\n\t};\r\n}\r\n\r\nexport default createGridLineRender;","import getRowRectangle from \"./viewport/get_bg_row_rectangle\";\r\nimport isLegacyRender from \"./is_legacy_smart_render\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport getVisibleCellsRange from \"./viewport/get_visible_cells_range\";\r\nimport isColumnVisible from \"./viewport/is_column_visible\";\r\nimport bgPlaceholder from \"./prerender/task_bg_placeholder\";\r\n\r\nfunction createTaskBgRender(gantt){\r\n\tvar renderedCells = {};\r\n\tvar visibleCells = {};\r\n\r\n\tfunction isRendered(item, columnIndex){\r\n\t\tif(renderedCells[item.id][columnIndex] && renderedCells[item.id][columnIndex].parentNode){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction detachRenderedCell(itemId, columnIndex){\r\n\t\tif(renderedCells[itemId] && renderedCells[itemId][columnIndex] &&\r\n\t\t\trenderedCells[itemId][columnIndex].parentNode\r\n\t\t\t){\r\n\t\t\t\trenderedCells[itemId][columnIndex].parentNode.removeChild(renderedCells[itemId][columnIndex]);\r\n\t\t\t}\r\n\t}\r\n\r\n\tfunction getCellClassTemplate(view){\r\n\t\tvar templates = view.$getTemplates();\r\n\t\tvar cssTemplate;\r\n\t\tif (typeof templates.task_cell_class !== \"undefined\") {\r\n\t\t\tcssTemplate = templates.task_cell_class;\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tvar log = console.warn || console.log;\r\n\t\t\tlog('gantt.templates.task_cell_class template is deprecated and will be removed soon. Please use gantt.templates.timeline_cell_class instead.');\r\n\t\t} else {\r\n\t\t\tcssTemplate = templates.timeline_cell_class;\r\n\t\t}\r\n\t\treturn cssTemplate;\r\n\t}\r\n\tfunction getCellContentTemplate(view){\r\n\t\tvar templates = view.$getTemplates();\r\n\t\tvar contentTemplate = templates.timeline_cell_content;\r\n\t\treturn contentTemplate;\r\n\t}\r\n\r\n\tfunction renderCells(item, node, view, config, viewPort){\r\n\t\tvar cfg = view.getScale();\r\n\t\tvar count = cfg.count;\r\n\t\tvar cssTemplate = getCellClassTemplate(view);\r\n\t\tvar contentTemplate = getCellContentTemplate(view);\r\n\r\n\t\tif (config.show_task_cells) {\r\n\t\t\tif(!renderedCells[item.id]){\r\n\t\t\t\trenderedCells[item.id] = {};\r\n\t\t\t}\r\n\t\t\tif(!visibleCells[item.id]){\r\n\t\t\t\tvisibleCells[item.id] = {};\r\n\t\t\t}\r\n\r\n\t\t\tvar range = getVisibleCellsRange(cfg, viewPort);\r\n\r\n\t\t\tfor(var i in visibleCells[item.id]){\r\n\t\t\t\tvar index = visibleCells[item.id][i];\r\n\r\n\t\t\t\tif(Number(index) < range.start || Number(index) > range.end){\r\n\t\t\t\t\tdetachRenderedCell(item.id, index);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvisibleCells[item.id] = {};\r\n\t\t\t// TODO: do not iterate all cell, only ones in the viewport and once that are already rendered\r\n\t\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\t\t\t\tvar cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cssTemplate, contentTemplate, config);\r\n\t\t\t\tif(!cell && isRendered(item, columnIndex)){\r\n\t\t\t\t\tdetachRenderedCell(item.id, columnIndex);\r\n\t\t\t\t}else if (cell && !cell.parentNode){\r\n\t\t\t\t\tnode.appendChild(cell);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction renderOneCell(scale, columnIndex, item, viewPort, count, cssTemplate, contentTemplate, config){\r\n\t\tvar width = scale.width[columnIndex],\r\n\t\t\tcssclass = \"\";\r\n\r\n\t\tif (isColumnVisible(columnIndex, scale, viewPort, gantt)) {//do not render skipped columns\r\n\r\n\t\t\tvar cssTemplateContent = cssTemplate(item, scale.trace_x[columnIndex]);\r\n\t\t\tvar htmlTemplateContent = \"\";\r\n\t\t\tif (contentTemplate) {// for backward compatibility, contentTemplate was added in 7.2.0+, will be undefined if someone used copy of old config/template object\r\n\t\t\t\thtmlTemplateContent = contentTemplate(item, scale.trace_x[columnIndex]);\r\n\t\t\t}\r\n\r\n\t\t\tif(config.static_background){\r\n\t\t\t\t// if cell render in static background is not allowed, or if it's a blank cell\r\n\t\t\t\tvar customCell = !!(cssTemplateContent || htmlTemplateContent);\r\n\t\t\t\tif(!(config.static_background_cells && customCell)){\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(renderedCells[item.id][columnIndex]){\r\n\t\t\t\tvisibleCells[item.id][columnIndex] = columnIndex;\r\n\t\t\t\treturn renderedCells[item.id][columnIndex];\r\n\t\t\t}\r\n\t\t\tvar cell = document.createElement(\"div\");\r\n\t\t\tcell.style.width = (width) + \"px\";\r\n\r\n\t\t\tcssclass = \"gantt_task_cell\" + (columnIndex == count - 1 ? \" gantt_last_cell\" : \"\");\r\n\t\t\tif (cssTemplateContent) {\r\n\t\t\t\tcssclass += \" \" + cssTemplateContent;\r\n\t\t\t}\r\n\t\t\tcell.className = cssclass;\r\n\r\n\t\t\tif (htmlTemplateContent) {\r\n\t\t\t\tcell.innerHTML = htmlTemplateContent;\r\n\t\t\t}\r\n\r\n\t\t\tcell.style.position = \"absolute\";\r\n\t\t\tcell.style.left = scale.left[columnIndex] + \"px\";\r\n\t\t\trenderedCells[item.id][columnIndex] = cell;\r\n\t\t\tvisibleCells[item.id][columnIndex] = columnIndex;\r\n\r\n\t\t\treturn cell;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction _render_bg_line(item, view, config, viewPort) {\r\n\t\tvar templates = view.$getTemplates();\r\n\t\tvar cfg = view.getScale();\r\n\t\tvar count = cfg.count;\r\n\r\n\t\tif(config.static_background && !config.static_background_cells){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar row = document.createElement(\"div\");\r\n\r\n\t\tvar cellCssTemplate = getCellClassTemplate(view);\r\n\t\tvar cellHtmlTemplate = getCellContentTemplate(view);\r\n\r\n\t\tvar range;\r\n\r\n\t\tif(!viewPort || !config.smart_rendering || isLegacyRender(gantt)){\r\n\t\t\trange = {\r\n\t\t\t\tstart: 0,\r\n\t\t\t\tend: count - 1\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\trange = getVisibleCellsRange(cfg, viewPort.x);\r\n\t\t}\r\n\t\tif (config.show_task_cells) {\r\n\t\t\trenderedCells[item.id] = {};\r\n\t\t\tvisibleCells[item.id] = {};\r\n\t\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\t\t\t\tvar cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cellCssTemplate, cellHtmlTemplate, config);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\trow.appendChild(cell);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// GS-291. The odd class should be assigned correctly\r\n\t\tconst store = view.$config.rowStore;\r\n\t\tconst odd = store.getIndexById(item.id) % 2 !== 0;\r\n\r\n\t\tvar cssTemplate = templates.task_row_class(item.start_date, item.end_date, item);\r\n\t\tvar css = \"gantt_task_row\" + (odd ? \" odd\" : \"\") + (cssTemplate ? ' ' + cssTemplate : '');\r\n\r\n\t\tif(store.isSelected(item.id)) {\r\n\t\t\tcss += \" gantt_selected\";\r\n\t\t}\r\n\r\n\t\trow.className = css;\r\n\r\n\t\tif (config.smart_rendering) {\r\n\t\t\trow.style.position = \"absolute\";\r\n\t\t\trow.style.top = view.getItemTop(item.id) + \"px\";\r\n\t\t\trow.style.width = \"100%\";\r\n\t\t}else{\r\n\t\t\trow.style.position = \"relative\";\r\n\t\t}\r\n\t\trow.style.height = (view.getItemHeight(item.id)) + \"px\";\r\n\r\n\t\tif (item.id == \"timeline_placeholder_task\"){\r\n\t\t\tvar placeholderTop = 0;\r\n\t\t\tif (item.lastTaskId){\r\n\t\t\t\tvar lastTaskTop = view.getItemTop(item.lastTaskId);\r\n\t\t\t\tvar lastTaskHeight = view.getItemHeight(item.lastTaskId);\r\n\t\t\t\tplaceholderTop = lastTaskTop + lastTaskHeight;\t\r\n\t\t\t}\r\n\r\n\t\t\tvar maxHeight = item.row_height || view.$task_data.offsetHeight;\r\n\r\n\t\t\tvar placeholderHeight = maxHeight - placeholderTop;\r\n\t\t\t// So that it won't exceed the placeholder timeline height\r\n\t\t\tif (placeholderHeight < 0){\r\n\t\t\t\tplaceholderHeight = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.smart_rendering) {\r\n\t\t\t\trow.style.top = placeholderTop + \"px\";\t\r\n\t\t\t}\r\n\t\t\trow.style.height = placeholderHeight + \"px\";\r\n\t\t}\r\n\r\n\r\n\t\tif(view.$config.item_attribute){\r\n\t\t\trow.setAttribute(view.$config.item_attribute, item.id);\r\n\t\t\trow.setAttribute(view.$config.bind + \"_id\", item.id); // 'task_id'/'resource_id' for backward compatibility\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: _render_bg_line,\r\n\t\tupdate: renderCells,\r\n\t\tgetRectangle: getRowRectangle,\r\n\t\tgetVisibleRange: getVisibleRange,\r\n\t\tprepareData: bgPlaceholder\r\n\t};\r\n}\r\n\r\nexport default createTaskBgRender;\r\n","import createBaseBarRender from \"./task_bar_render\";\r\nimport isInViewPort from \"./viewport/is_bar_in_viewport\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\n\r\nfunction createTaskRenderer(gantt){\r\n\tconst defaultRender = createBaseBarRender(gantt);\r\n\r\n\tconst renderedNodes = {};\r\n\r\n\tfunction checkVisibility(child, viewPort, timeline, config, gantt){\r\n\t\tlet isVisible = true;\r\n\t\t// GS-2123. Don't render rollup tasks that are outside the viewport\r\n\t\tif (config.smart_rendering){\r\n\t\t\tisVisible = isInViewPort(child, viewPort, timeline, config, gantt);\r\n\t\t}\r\n\t\treturn isVisible;\r\n\t}\r\n\r\n\tfunction generateChildElement(task, child, timeline, sizes){\r\n\t\tconst childCopy = gantt.copy(gantt.getTask(child.id));\r\n\t\tchildCopy.$rendered_at = task.id;\r\n\t\t// a way to filter rollup tasks:\r\n\t\tconst displayRollup = gantt.callEvent(\"onBeforeRollupTaskDisplay\", [childCopy.id, childCopy, task.id]);\r\n\t\tif (displayRollup === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst element = defaultRender(childCopy, timeline);\r\n\t\tif(!element){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst height = timeline.getBarHeight(task.id, child.type == gantt.config.types.milestone);\r\n\t\tconst padding = Math.floor((timeline.getItemHeight(task.id) - height) / 2);\r\n\r\n\t\telement.style.top = (sizes.top + padding) + \"px\";\r\n\t\telement.classList.add(\"gantt_rollup_child\");\r\n\t\telement.setAttribute(\"data-rollup-parent-id\", task.id);\r\n\r\n\t\treturn element;\r\n\t}\r\n\r\n\tfunction getKey(childId, renderParentId){\r\n\t\treturn childId + \"_\" + renderParentId;\r\n\t}\r\n\r\n\r\n\tfunction renderRollupTask(task, timeline, config, viewPort) {\r\n\t\tif (task.rollup !== false && task.$rollup && task.$rollup.length) {\r\n\t\t\tconst el = document.createElement('div'),\r\n\t\t\t\tsizes = gantt.getTaskPosition(task);\r\n\r\n\t\t\t// vertical position is not important for the rollup tasks as long as the parent is rendered\r\n\t\t\tif (viewPort){\r\n\t\t\t\tviewPort.y = 0;\r\n\t\t\t\tviewPort.y_end = gantt.$task_bg.scrollHeight;\r\n\t\t\t}\r\n\r\n\t\t\ttask.$rollup.forEach(function(itemId){\r\n\t\t\t\tif (!gantt.isTaskExists(itemId)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst child = gantt.getTask(itemId);\r\n\t\t\t\tlet isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\r\n\t\t\t\tif (!isVisible){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst element = generateChildElement(task, child, timeline, sizes);\r\n\t\t\t\tif (element) {\r\n\t\t\t\t\trenderedNodes[getKey(child.id, task.id)] = element;\r\n\t\t\t\t\tel.appendChild(element);\r\n\t\t\t\t} else{\r\n\t\t\t\t\trenderedNodes[getKey(child.id, task.id)] = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\treturn el;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction repaintRollupTask(task, itemNode, timeline, config, viewPort) {\r\n\t\tconst el = document.createElement(\"div\"),\r\n\t\tsizes = gantt.getTaskPosition(task);\r\n\r\n\t\t// vertical position is not important for the rollup tasks as long as the parent is rendered\r\n\t\tviewPort.y = 0;\r\n\t\tviewPort.y_end = gantt.$task_bg.scrollHeight;\r\n\r\n\t\ttask.$rollup.forEach(function(itemId){\r\n\t\t\tconst child = gantt.getTask(itemId);\r\n\t\t\tconst rollupKey = getKey(child.id, task.id);\r\n\t\t\tlet isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\r\n\t\t\tif (isVisible !== !!renderedNodes[rollupKey]) {\r\n\r\n\t\t\t\tif (isVisible) {\r\n\t\t\t\t\tconst element = generateChildElement(task, child, timeline, sizes);\r\n\t\t\t\t\trenderedNodes[rollupKey] = element || false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderedNodes[rollupKey] = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!!renderedNodes[rollupKey]) {\r\n\t\t\t\tel.appendChild(renderedNodes[rollupKey]);\r\n\t\t\t}\r\n\t\t\titemNode.innerHTML = \"\";\r\n\t\t\titemNode.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\treturn {\r\n\t\trender: renderRollupTask,\r\n\t\tupdate: repaintRollupTask,\r\n\t\t//getRectangle: getBarRectangle\r\n\t\tisInViewPort: isInViewPort,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n}\r\n\r\nexport default createTaskRenderer;","import getRectangle from \"./viewport/get_bg_row_rectangle\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport getVisibleCellsRange from \"./viewport/get_visible_cells_range\";\r\nimport isColumnVisible from \"./viewport/is_column_visible\";\r\nimport resourceTimetable from \"../../resource_timetable_builder\";\r\n\r\nfunction generateRenderResourceLine(gantt){\r\n\tvar getResourceLoad = resourceTimetable(gantt);\r\n\tvar renderedResourceLines = {};\r\n\r\n\tfunction renderResourceLineCell(resource, day, templates, config, timeline){\r\n\t\tvar css = templates.resource_cell_class(day.start_date, day.end_date, resource, day.tasks, day.assignments);\r\n\t\tvar content = templates.resource_cell_value(day.start_date, day.end_date, resource, day.tasks, day.assignments);\r\n\t\tvar height = timeline.getItemHeight(resource.id) - 1;\r\n\r\n\t\tif (css || content){\r\n\t\t\tvar sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\r\n\t\t\tvar el = document.createElement('div');\r\n\t\t\tel.setAttribute(timeline.$config.item_attribute, resource.id);\r\n\t\t\tel.className = [\"gantt_resource_marker\", css].join(\" \");\r\n\r\n\t\t\tel.style.cssText = [\r\n\t\t\t\t'left:' + sizes.left + 'px',\r\n\t\t\t\t'width:' + sizes.width + 'px',\r\n\t\t\t\t'height:' + (height) + 'px',\r\n\t\t\t\t'line-height:' + (height) + 'px',\r\n\t\t\t\t'top:' + sizes.top + 'px'\r\n\t\t\t].join(\";\");\r\n\r\n\t\t\tif(content)\r\n\t\t\t\tel.innerHTML = content;\r\n\r\n\t\t\treturn el;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction detachRenderedResourceLine(id, index){\r\n\t\tif(renderedResourceLines[id] && renderedResourceLines[id][index] &&\r\n\t\t\trenderedResourceLines[id][index].parentNode\r\n\t\t\t){\r\n\t\t\t\trenderedResourceLines[id][index].parentNode.removeChild(renderedResourceLines[id][index]);\r\n\t\t\t}\r\n\t}\r\n\r\n\tfunction renderResourceLine(resource, timeline, config, viewport) {\r\n\t\tvar templates = timeline.$getTemplates();\r\n\t\tvar scale = timeline.getScale();\r\n\t\tvar timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\r\n\t\tvar smartRendering = !!viewport;//no viewport means smart rendering is disabled\r\n\t\tvar cells = [];\r\n\t\trenderedResourceLines[resource.id] = {};\r\n\r\n\t\tvar range = getVisibleCellsRange(scale, viewport);\r\n\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\r\n\t\t\tvar day = timetable[columnIndex];\r\n\t\t\tif(!day){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(smartRendering && !isColumnVisible(columnIndex, scale, viewport, gantt)){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tvar cell = renderResourceLineCell(resource, day, templates, config, timeline);\r\n\t\t\tif(cell){\r\n\t\t\t\tcells.push(cell);\r\n\t\t\t\trenderedResourceLines[resource.id][columnIndex] = cell;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = null;\r\n\t\tif(cells.length){\r\n\t\t\trow = document.createElement(\"div\");\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\trow.appendChild(cells[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn row;\r\n\t}\r\n\r\n\tfunction updateResourceLine(resource, node, timeline, config, viewport) {\r\n\t\tvar templates = timeline.$getTemplates();\r\n\t\tvar scale = timeline.getScale();\r\n\t\tvar timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\r\n\r\n\t\tvar range = getVisibleCellsRange(scale, viewport);\r\n\r\n\t\tvar checkedColumns = {};\r\n\t\tif(renderedResourceLines && renderedResourceLines[resource.id]){\r\n\t\t\tfor(var i in renderedResourceLines[resource.id]){\r\n\t\t\t\tcheckedColumns[i] = i;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\t\t\tvar day = timetable[columnIndex];\r\n\t\t\tcheckedColumns[columnIndex] = false;\r\n\t\t\tif(!day){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(!isColumnVisible(columnIndex, scale, viewport, gantt)){\r\n\t\t\t\tdetachRenderedResourceLine(resource.id, columnIndex);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(!renderedResourceLines[resource.id] || !renderedResourceLines[resource.id][columnIndex]){\r\n\t\t\t\tvar cell = renderResourceLineCell(resource, day, templates, config, timeline);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tnode.appendChild(cell);\r\n\t\t\t\t\trenderedResourceLines[resource.id][columnIndex] = cell;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(renderedResourceLines[resource.id] && renderedResourceLines[resource.id][columnIndex] && !renderedResourceLines[resource.id][columnIndex].parentNode){\r\n\t\t\t\tnode.appendChild(renderedResourceLines[resource.id][columnIndex]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor(var i in checkedColumns){\r\n\t\t\tif(checkedColumns[i] !== false){\r\n\t\t\t\tdetachRenderedResourceLine(resource.id, i);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: renderResourceLine,\r\n\t\tupdate: updateResourceLine,\r\n\t\tgetRectangle: getRectangle,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n}\r\n\r\nexport default generateRenderResourceLine;","import getRowRectangle from \"./viewport/get_grid_row_rectangle\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\n\r\nfunction createGridTaskRowResizerRender(gantt){\r\n\r\n\tfunction _render_grid_item(item, view, viewport) {\r\n\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar resize_el = document.createElement(\"div\");\r\n\t\tresize_el.className = \"gantt_task_grid_row_resize_wrap\";\r\n\r\n\t\tresize_el.style.top = (view.getItemTop(item.id) + view.getItemHeight(item.id)) + \"px\";\r\n\r\n\t\tresize_el.innerHTML = \"
\";\r\n\t\tresize_el.setAttribute(config.task_grid_row_resizer_attribute, item.id);\r\n\r\n\t\tgantt._waiAria.rowResizerAttr(resize_el);\r\n\t\treturn resize_el;\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: _render_grid_item,\r\n\t\tupdate: null,\r\n\t\tgetRectangle: getRowRectangle,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n}\r\n\r\nexport default createGridTaskRowResizerRender;","function _configure(col, data, force) {\r\n\tfor (var key in data)\r\n\t\tif (typeof col[key] == \"undefined\" || force)\r\n\t\t\tcol[key] = data[key];\r\n}\r\n\r\nfunction _get_skin(force, gantt) {\r\n\r\n\tconst styles = getComputedStyle(gantt.$root);\r\n\tconst themeVar = styles.getPropertyValue(\"--dhx-gantt-theme\");\r\n\tlet isCssVarTheme = !!themeVar;\r\n\tlet themeName;\r\n\r\n\t\r\n\tif(isCssVarTheme){\r\n\t\tthemeName = themeVar;\r\n\t}else{\r\n\t\tvar skin = gantt.skin;\r\n\t\tthemeName = skin;\r\n\t\tif (!skin || force) {\r\n\t\t\tvar links = document.getElementsByTagName(\"link\");\r\n\t\t\tfor (var i = 0; i < links.length; i++) {\r\n\t\t\t\tvar res = links[i].href.match(\"dhtmlxgantt_([a-z_]+).css\");\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tif (gantt.skins[res[1]] || !skin) {\r\n\t\t\t\t\t\tthemeName = res[1];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tgantt._theme_info = {\r\n\t\ttheme: themeName,\r\n\t\tcssVarTheme: isCssVarTheme\r\n\t};\r\n\r\n\r\n\r\n\tgantt.skin = themeName || \"terrace\";\r\n\tvar skinset = gantt.skins[gantt.skin] || gantt.skins[\"terrace\"];\r\n\r\n\t//apply skin related settings\r\n\t_configure(gantt.config, skinset.config, force);\r\n\r\n\tif(!isCssVarTheme){\r\n\t\tgantt.config.link_radius = 1;\r\n\t}\r\n\r\n\tvar config = gantt.getGridColumns();\r\n\tif (config[1] && !gantt.defined(config[1].width))\r\n\t\tconfig[1].width = skinset._second_column_width;\r\n\tif (config[2] && !gantt.defined(config[2].width))\r\n\t\tconfig[2].width = skinset._third_column_width;\r\n\t\r\n\tfor (var i=0; i column.width) ? column.min_width : column.width;\r\n\t\t\t\tcolumn.width = (column.max_width && column.max_width < column.width) ? column.max_width : column.width;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (skinset.config.task_height){\r\n\t\tgantt.config.task_height = skinset.config.task_height || \"full\";\r\n\t}\r\n\tif (skinset.config.bar_height){\r\n\t\tgantt.config.bar_height = skinset.config.bar_height || \"full\";\r\n\t}\r\n\r\n\tif (skinset._lightbox_template)\r\n\t\tgantt._lightbox_template = skinset._lightbox_template;\r\n\r\n\tif (skinset._redefine_lightbox_buttons) {\r\n\t\tgantt.config.buttons_right = skinset._redefine_lightbox_buttons[\"buttons_right\"];\r\n\t\tgantt.config.buttons_left = skinset._redefine_lightbox_buttons[\"buttons_left\"];\r\n\t}\r\n\r\n\r\n\tgantt.resetLightbox();\r\n}\r\n\r\n\r\n\r\nexport default function(gantt) {\r\n\t\r\n\tif(!gantt.resetSkin){\r\n\t\tgantt.resetSkin = function () {\r\n\t\t\tthis.skin = \"\";\r\n\t\t\t_get_skin(true, this);\r\n\t\t};\r\n\t\tgantt.skins = {};\r\n\r\n\t\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t\t\t_get_skin(false, this);\r\n\t\t\tmonitorThemeChange();\r\n\t\t});\r\n\t}\r\n\r\n\tgantt._addThemeClass = function(){\r\n\t\tdocument.documentElement.setAttribute(\"data-gantt-theme\", gantt.skin);\r\n\t};\r\n\r\n\tgantt.setSkin = function(value){\r\n\t\tthis.skin = value;\r\n\t\tgantt._addThemeClass();\r\n\t\tmonitorThemeChange();\r\n\t\tif(gantt.$root){\r\n\t\t\t_get_skin(true, gantt);\r\n\t\t\tthis.render();\r\n\t\t}\r\n\t\t\r\n\t\t//\r\n\t};\r\n\r\n\r\n\tlet monitorIntervalId = null;\r\n\tfunction monitorThemeChange(){\r\n\t\tconst container = gantt.$root;\r\n\t\t\r\n\t\tif(monitorIntervalId){\r\n\t\t\tclearInterval(monitorIntervalId);\r\n\t\t}\r\n\t\t\r\n\t\tif(container){\r\n\t\t\tmonitorIntervalId = setInterval(() => {\r\n\t\t\t\tconst csstheme = getComputedStyle(container).getPropertyValue('--dhx-gantt-theme');\r\n\t\t\t\tif(csstheme && csstheme !== gantt.skin){\r\n\t\t\t\t\tgantt.setSkin(csstheme);\r\n\t\t\t\t}\r\n\r\n\t\t\t}, 100);\r\n\t\t}\r\n\t}\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\tclearInterval(monitorIntervalId);\r\n\t});\r\n};","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport isHeadless from \"../../../utils/is_headless\";\r\n\r\nexport default function(gantt){\r\n\r\n\tvar scrollRange = 50,\r\n\t\tscrollStep = 30,\r\n\t\tscrollDelay = 10,\r\n\t\tscrollSpeed = 50;\r\n\r\n\tvar interval = null,\r\n\t\tisMove = false,\r\n\t\tdelayTimeout = null,\r\n\t\tstartPos = {\r\n\t\t\tstarted: false\r\n\t\t},\r\n\t\teventPos = {};\r\n\r\n\r\n\tfunction isDisplayed(element){\r\n\t\treturn element &&\r\n\t\t\tdomHelpers.isChildOf(element, gantt.$root) &&\r\n\t\t\telement.offsetHeight;\r\n\t}\r\n\r\n\tfunction getAutoscrollContainer(){\r\n\t\tvar element;\r\n\t\tif(isDisplayed(gantt.$task)){\r\n\t\t\telement = gantt.$task;\r\n\t\t}else if(isDisplayed(gantt.$grid)){\r\n\t\t\telement = gantt.$grid;\r\n\t\t}else{\r\n\t\t\telement = gantt.$root;\r\n\t\t}\r\n\r\n\t\treturn element;\r\n\t}\r\n\r\n\tfunction isScrollState() {\r\n\t\tvar dragMarker = !!document.querySelector(\".gantt_drag_marker\");\r\n\t\tvar isResize = !!document.querySelector(\".gantt_drag_marker.gantt_grid_resize_area\")\r\n\t\t\t|| !!document.querySelector(\".gantt_drag_marker.gantt_row_grid_resize_area\") ;\r\n\t\tvar isLink = !!document.querySelector(\".gantt_link_direction\");\r\n\t\tvar state = gantt.getState();\r\n\t\tvar isClickDrag = state.autoscroll;\r\n\t\tisMove = dragMarker && !isResize && !isLink;\r\n\r\n\t\treturn !((!state.drag_mode && !dragMarker) || isResize) || isClickDrag;\r\n\t}\r\n\r\n\tfunction defineDelayTimeout(state) {\r\n\t\tif (delayTimeout) {\r\n\t\t\tclearTimeout(delayTimeout);\r\n\t\t\tdelayTimeout = null;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tvar speed = gantt.config.autoscroll_speed;\r\n\t\t\tif (speed && speed < 10) // limit speed value to 10\r\n\t\t\t\tspeed = 10;\r\n\r\n\t\t\tdelayTimeout = setTimeout(function() {\r\n\t\t\t\tinterval = setInterval(tick, speed || scrollSpeed);\r\n\t\t\t}, gantt.config.autoscroll_delay || scrollDelay);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction defineScrollInterval(state) {\r\n\t\tif (state) {\r\n\t\t\tdefineDelayTimeout(true);\r\n\t\t\tif (!startPos.started) {\r\n\t\t\t\tstartPos.x = eventPos.x;\r\n\t\t\t\tstartPos.y = eventPos.y;\r\n\t\t\t\tstartPos.started = true;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (interval) {\r\n\t\t\t\tclearInterval(interval);\r\n\t\t\t\tinterval = null;\r\n\t\t\t}\r\n\t\t\tdefineDelayTimeout(false);\r\n\t\t\tstartPos.started = false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction autoscrollInterval(event) {\r\n\t\tvar isScroll = isScrollState();\r\n\r\n\t\tif ((interval || delayTimeout) && !isScroll) {\r\n\t\t\tdefineScrollInterval(false);\r\n\t\t}\r\n\r\n\t\tif (!gantt.config.autoscroll || !isScroll) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\teventPos = {\r\n\t\t\tx: event.clientX,\r\n\t\t\ty: event.clientY\r\n\t\t};\r\n\r\n\t\t// if it is a mobile device, we need to detect the touch event coords\r\n\t\tif (event.type == \"touchmove\"){\r\n\t\t\teventPos.x = event.targetTouches[0].clientX;\r\n\t\t\teventPos.y = event.targetTouches[0].clientY;\r\n\t\t}\r\n\r\n\t\tif (!interval && isScroll) {\r\n\t\t\tdefineScrollInterval(true);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction tick() {\r\n\r\n\t\tif (!isScrollState()) {\r\n\t\t\tdefineScrollInterval(false);\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar container = getAutoscrollContainer();\r\n\t\tif(!container){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// GS-1150: if we reorder or resize something in the grid, we should obtain the grid container\r\n\t\tvar gridDrag = false;\r\n\t\tvar gridMarkers = [\r\n\t\t\t\".gantt_drag_marker.gantt_grid_resize_area\",\r\n\t\t\t\".gantt_drag_marker .gantt_row.gantt_row_task\",\r\n\t\t\t\".gantt_drag_marker.gantt_grid_dnd_marker\"\r\n\t\t];\r\n\t\tgridMarkers.forEach(function (selector) {\r\n\t\t\tgridDrag = gridDrag || !!document.querySelector(selector);\r\n\t\t});\r\n\t\tif (gridDrag){\r\n\t\t\tcontainer = gantt.$grid;\r\n\t\t}\r\n\r\n\t\tvar box = domHelpers.getNodePosition(container);\r\n\r\n\t\tvar posX = eventPos.x - box.x;\r\n\t\tvar posY = eventPos.y - box.y + window.scrollY; // GS-1315: window.scrollY here and below for the elements above Gantt\r\n\r\n\t\tvar scrollLeft = isMove ? 0 : need_scroll(posX, box.width, startPos.x - box.x);\r\n\t\tvar scrollTop = need_scroll(posY, box.height, startPos.y - box.y + window.scrollY);\r\n\r\n\t\tvar scrollState = gantt.getScrollState();\r\n\r\n\t\tvar currentScrollTop = scrollState.y,\r\n\t\t\tscrollOuterHeight = scrollState.inner_height,\r\n\t\t\tscrollInnerHeight = scrollState.height,\r\n\t\t\tcurrentScrollLeft = scrollState.x,\r\n\t\t\tscrollOuterWidth = scrollState.inner_width,\r\n\t\t\tscrollInnerWidth = scrollState.width;\r\n\r\n\t\t// do scrolling only if we have scrollable area to do so\r\n\t\tif (scrollTop && !scrollOuterHeight) {\r\n\t\t\tscrollTop = 0;\r\n\t\t} else if (scrollTop < 0 && !currentScrollTop) {\r\n\t\t\tscrollTop = 0;\r\n\t\t} else if (scrollTop > 0 && currentScrollTop + scrollOuterHeight >= scrollInnerHeight + 2) {\r\n\t\t\tscrollTop = 0;\r\n\t\t}\r\n\r\n\t\tif (scrollLeft && !scrollOuterWidth) {\r\n\t\t\tscrollLeft = 0;\r\n\t\t} else if (scrollLeft < 0 && !currentScrollLeft) {\r\n\t\t\tscrollLeft = 0;\r\n\t\t} else if (scrollLeft > 0 && currentScrollLeft + scrollOuterWidth >= scrollInnerWidth) {\r\n\t\t\tscrollLeft = 0;\r\n\t\t}\r\n\r\n\t\tvar step = gantt.config.autoscroll_step;\r\n\r\n\t\tif (step && step < 2) // limit step value to 2\r\n\t\t\tstep = 2;\r\n\r\n\t\tscrollLeft = scrollLeft * (step || scrollStep);\r\n\t\tscrollTop = scrollTop * (step || scrollStep);\r\n\r\n\t\tif (scrollLeft || scrollTop) {\r\n\t\t\tscroll(scrollLeft, scrollTop);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction need_scroll(pos, boxSize, startCoord) {\r\n\t\tif ((pos - scrollRange < 0) && (pos < startCoord))\r\n\t\t\treturn -1;\r\n\t\telse if ((pos > boxSize - scrollRange) && (pos > startCoord))\r\n\t\t\treturn 1;\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfunction scroll(left, top) {\r\n\t\tvar scrollState = gantt.getScrollState();\r\n\r\n\t\tvar scrollLeft = null,\r\n\t\t\tscrollTop = null;\r\n\r\n\t\tif (left) {\r\n\t\t\tscrollLeft = scrollState.x + left;\r\n\t\t\tscrollLeft = Math.min(scrollState.width, scrollLeft);\r\n\t\t\tscrollLeft = Math.max(0, scrollLeft);\r\n\t\t}\r\n\r\n\t\tif (top) {\r\n\t\t\tscrollTop = scrollState.y + top;\r\n\t\t\tscrollTop = Math.min(scrollState.height, scrollTop);\r\n\t\t\tscrollTop = Math.max(0, scrollTop);\r\n\t\t}\r\n\r\n\t\tgantt.scrollTo(scrollLeft, scrollTop);\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", function() {\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tvar eventElement = domHelpers.getRootNode(gantt.$root) || document.body;\r\n\t\t\tgantt.eventRemove(eventElement, \"mousemove\", autoscrollInterval);\r\n\t\t\tgantt.event(eventElement, \"mousemove\", autoscrollInterval);\r\n\r\n\t\t\tgantt.eventRemove(eventElement, \"touchmove\", autoscrollInterval);\r\n\t\t\tgantt.event(eventElement, \"touchmove\", autoscrollInterval);\r\n\r\n\t\t\tgantt.eventRemove(eventElement, \"pointermove\", autoscrollInterval);\r\n\t\t\tgantt.event(eventElement, \"pointermove\", autoscrollInterval);\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\tdefineScrollInterval(false);\r\n\t});\r\n\r\n};","if (window.jQuery){\r\n\r\n\t(function( $ ){\r\n\r\n\t\tvar methods = [];\r\n\t\t$.fn.dhx_gantt = function(config){\r\n\t\t\tconfig = config || {};\r\n\t\t\tif (typeof(config) === 'string') {\r\n\t\t\t\tif (methods[config] ) {\r\n\t\t\t\t\treturn methods[config].apply(this, []);\r\n\t\t\t\t}else {\r\n\t\t\t\t\t$.error('Method ' + config + ' does not exist on jQuery.dhx_gantt');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar views = [];\r\n\t\t\t\tthis.each(function() {\r\n\t\t\t\t\tif (this && this.getAttribute){\r\n\t\t\t\t\t\tif (!this.gantt && !(window.gantt.$root == this)){\r\n\r\n\t\t\t\t\t\t\tvar newgantt = (window.gantt.$container && window.Gantt) ? window.Gantt.getGanttInstance():window.gantt;\r\n\t\t\t\t\t\t\tfor (var key in config)\r\n\t\t\t\t\t\t\t\tif (key!=\"data\")\r\n\t\t\t\t\t\t\t\t\tnewgantt.config[key] = config[key];\r\n\r\n\t\t\t\t\t\t\tnewgantt.init(this);\r\n\t\t\t\t\t\t\tif (config.data)\r\n\t\t\t\t\t\t\t\tnewgantt.parse(config.data);\r\n\r\n\t\t\t\t\t\t\tviews.push(newgantt);\r\n\t\t\t\t\t\t} else\r\n\t\t\t\t\t\t\tviews.push(typeof this.gantt == \"object\" ? this.gantt : window.gantt);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\tif (views.length === 1) return views[0];\r\n\t\t\t\treturn views;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t})(window.jQuery);\r\n\r\n}\r\n\r\n\r\nexport default null;","if (window.dhtmlx){\r\n\r\n\tif (!window.dhtmlx.attaches)\r\n\twindow.dhtmlx.attaches = {};\r\n\r\n\twindow.dhtmlx.attaches.attachGantt=function(start, end, gantt){\r\n\t\tvar obj = document.createElement(\"DIV\");\r\n\r\n\t\tgantt = gantt || window.gantt;\r\n\r\n\t\tobj.id = \"gantt_\"+ gantt.uid();\r\n\t\tobj.style.width = \"100%\";\r\n\t\tobj.style.height = \"100%\";\r\n\t\tobj.cmp = \"grid\";\r\n\r\n\t\tdocument.body.appendChild(obj);\r\n\t\tthis.attachObject(obj.id);\r\n\t\tthis.dataType = \"gantt\";\r\n\t\tthis.dataObj = gantt;\r\n\r\n\t\tvar that = this.vs[this.av];\r\n\t\tthat.grid = gantt;\r\n\r\n\t\tgantt.init(obj.id, start, end);\r\n\t\tobj.firstChild.style.border = \"none\";\r\n\r\n\t\tthat.gridId = obj.id;\r\n\t\tthat.gridObj = obj;\r\n\r\n\t\tvar method_name=\"_viewRestore\";\r\n\t\treturn this.vs[this[method_name]()].grid;\r\n\t};\r\n\r\n}\r\nif (typeof(window.dhtmlXCellObject) != \"undefined\") {\r\n\r\n\twindow.dhtmlXCellObject.prototype.attachGantt=function(start, end, gantt){\r\n\t\tgantt = gantt || window.gantt;\r\n\r\n\t\tvar obj = document.createElement(\"DIV\");\r\n\t\tobj.id = \"gantt_\"+gantt.uid();\r\n\t\tobj.style.width = \"100%\";\r\n\t\tobj.style.height = \"100%\";\r\n\t\tobj.cmp = \"grid\";\r\n\r\n\t\tdocument.body.appendChild(obj);\r\n\t\tthis.attachObject(obj.id);\r\n\r\n\t\tthis.dataType = \"gantt\";\r\n\t\tthis.dataObj = gantt;\r\n\r\n\t\tgantt.init(obj.id, start, end);\r\n\t\tobj.firstChild.style.border = \"none\";\r\n\r\n\t\tobj = null;\r\n\t\tthis.callEvent(\"_onContentAttach\",[]);\r\n\r\n\t\treturn this.dataObj;\r\n\t};\r\n}\r\n\r\nexport default null;","import env from \"../../../utils/env\";\r\nimport eventable from \"../../../utils/eventable\";\r\nimport { IScale, TModifierKeys } from \"../../common/config\";\r\n\r\ninterface ITimelineZoomConfig {\r\n\thandler?: (e: Event) => {};\r\n\tstartDate?: Date;\r\n\tendDate?: Date;\r\n\tlevels: IZoomLevel[];\r\n\tactiveLevelIndex?: number;\r\n\twidthStep?: number;\r\n\tminColumnWidth?: number;\r\n\tmaxColumnWidth?: number;\r\n\tuseKey?: \"ctrlKey\" | \"altKey\" | \"shiftKey\";\r\n\ttrigger?: \"wheel\" | null | undefined;\r\n\telement?: Element | (() => Element);\r\n}\r\n\r\nconst USE_KEY = [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\"];\r\n\r\ninterface IZoomLevel {\r\n\tname?: string;\r\n\tscale_height?: number;\r\n\tmin_column_width: number;\r\n\tscales: IScale[];\r\n}\r\n\r\nconst _defaultScales = [\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"month\",\r\n\t\t\tdate: \"%M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"hour\",\r\n\t\t\tdate: \"%H:00\",\r\n\t\t\tstep: 8\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"hour\",\r\n\t\t\tdate: \"%H:00\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t]\r\n];\r\n\r\nexport default class TimelineZoom {\r\n\tpublic attachEvent: (eventName: string, handler: () => void) => string;\r\n\tpublic callEvent: (eventName: string, args: any[]) => any;\r\n\tpublic detachEvent: (eventName: string) => any;\r\n\tprotected _initialStartDate: Date;\r\n\tprotected _initialEndDate: Date;\r\n\tprotected _activeLevelIndex: number;\r\n\tprotected _levels: IZoomLevel[];\r\n\tprotected _handler: (e: any) => void;\r\n\tprotected $gantt;\r\n\tprotected _widthStep: number;\r\n\tprotected _minColumnWidth: number;\r\n\tprotected _maxColumnWidth: number;\r\n\tprotected _useKey: TModifierKeys;\r\n\tprotected _visibleDate: Date;\r\n\tprotected _initialized: boolean;\r\n\tprotected _domEvents: any;\r\n\r\n\tconstructor(gantt) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis._domEvents = this.$gantt._createDomEventScope();\r\n\t}\r\n\r\n\tpublic init(config: ITimelineZoomConfig) {\r\n\t\t// GS-1354 and GS-1318. If we check the headless mode using the function,\r\n\t\t// it will return false when Gantt is not initialized, but we may want to do it later\r\n\t\tif(this.$gantt.env.isNode){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._initialStartDate = config.startDate;\r\n\t\tthis._initialEndDate = config.endDate;\r\n\t\tthis._activeLevelIndex = config.activeLevelIndex ? config.activeLevelIndex : 0;\r\n\t\tthis._levels = this._mapScales(config.levels || _defaultScales);\r\n\t\tthis._handler = config.handler || this._defaultHandler;\r\n\t\tthis._minColumnWidth = config.minColumnWidth || 60;\r\n\t\tthis._maxColumnWidth = config.maxColumnWidth || 240;\r\n\t\tthis._widthStep = config.widthStep || 3/8 * config.minColumnWidth;\r\n\t\tthis._useKey = config.useKey;\r\n\r\n\t\tif(!this._initialized){\r\n\t\t\teventable(this);\r\n\t\t\tthis.$gantt.attachEvent(\"onGanttScroll\", () => {\r\n\t\t\t\tthis._getVisibleDate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._domEvents.detachAll();\r\n\r\n\t\tif(config.trigger === \"wheel\"){\r\n\t\t\tif(this.$gantt.$root){\r\n\t\t\t\tthis._attachWheelEvent(config);\r\n\t\t\t}else{\r\n\t\t\t\tthis.$gantt.attachEvent(\"onGanttReady\", () => {\r\n\t\t\t\t\tthis._attachWheelEvent(config);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._initialized = true;\r\n\t\tthis.setLevel(this._activeLevelIndex);\r\n\t}\r\n\r\n\tpublic zoomIn = () => {\r\n\t\tconst index = this.getCurrentLevel() - 1;\r\n\t\tif(index < 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setLevel(index);\r\n\t};\r\n\r\n\tpublic zoomOut = () => {\r\n\t\tconst index = this.getCurrentLevel() + 1;\r\n\t\tif(index > this._levels.length - 1){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setLevel(index);\r\n\t};\r\n\r\n\tpublic getCurrentLevel = () => {\r\n\t\treturn this._activeLevelIndex;\r\n\t};\r\n\r\n\tpublic getLevels = () => {\r\n\t\treturn this._levels;\r\n\t};\r\n\r\n\tpublic setLevel = (level: number|string) => {\r\n\t\tconst zoomLevel = this._getZoomIndexByName(level);\r\n\r\n\t\tif(zoomLevel === -1){\r\n\t\t\tthis.$gantt.assert(zoomLevel !== -1, \"Invalid zoom level for gantt.ext.zoom.setLevel. \" + level + \" is not an expected value.\");\r\n\t\t}\r\n\t\tthis._setLevel(zoomLevel, 0);\r\n\t};\r\n\r\n\tprotected _getZoomIndexByName = (levelName: number|string) => {\r\n\t\tlet zoomLevel:number = -1;\r\n\t\tif(typeof levelName === \"string\"){\r\n\t\t\tif(!isNaN(Number(levelName)) && this._levels[Number(levelName)]){\r\n\t\t\t\tzoomLevel = Number(levelName);\r\n\t\t\t}else{\r\n\t\t\t\tfor(let i = 0; i < this._levels.length; i++){\r\n\t\t\t\t\tif(this._levels[i].name === levelName){\r\n\t\t\t\t\t\tzoomLevel = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tzoomLevel = levelName;\r\n\t\t}\r\n\t\treturn zoomLevel;\r\n\t};\r\n\r\n\tprotected _mapScales(levels: IScale[][] | any): IZoomLevel[]{\r\n\t\treturn levels.map((l) => {\r\n\t\t\tif(Array.isArray(l)){\r\n\t\t\t\treturn {\r\n\t\t\t\t\tscales: l\r\n\t\t\t\t};\r\n\t\t\t}else{\r\n\t\t\t\treturn l;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected _getVisibleDate = () => {\r\n\t\t// GS-1450. Don't try to get the visible date if there is no timeline\r\n\t\tif (!this.$gantt.$task){\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst scrollPos = this.$gantt.getScrollState().x;\r\n\t\tconst viewPort = this.$gantt.$task.offsetWidth;\r\n\t\tthis._visibleDate = this.$gantt.dateFromPos(scrollPos + viewPort/2);\r\n\t};\r\n\r\n\tprotected _setLevel = (level: number, cursorOffset: number) => {\r\n\t\tthis._activeLevelIndex = level;\r\n\r\n\t\tconst gantt = this.$gantt;\r\n\t\tconst nextConfig = gantt.copy(this._levels[this._activeLevelIndex]);\r\n\t\tconst chartConfig = gantt.copy(nextConfig);\r\n\t\tdelete chartConfig.name;\r\n\r\n\t\tgantt.mixin(gantt.config, chartConfig, true);\r\n\r\n\t\tconst isRendered = !!gantt.$root && !!gantt.$task;\r\n\r\n\t\tif(isRendered){\r\n\t\t\tif(cursorOffset){\r\n\t\t\t\tconst cursorDate = this.$gantt.dateFromPos(cursorOffset + this.$gantt.getScrollState().x);\r\n\t\t\t\tthis.$gantt.render();\r\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(cursorDate);\r\n\t\t\t\tthis.$gantt.scrollTo(newPosition - cursorOffset);\r\n\t\t\t}else{\r\n\t\t\t\tconst viewPort = this.$gantt.$task.offsetWidth;\r\n\t\t\t\tif(!this._visibleDate){\r\n\t\t\t\t\tthis._getVisibleDate();\r\n\t\t\t\t}\r\n\t\t\t\tconst middleDate = this._visibleDate;\r\n\t\t\t\tthis.$gantt.render();\r\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(middleDate);\r\n\t\t\t\tthis.$gantt.scrollTo(newPosition - viewPort/2);\r\n\t\t\t}\r\n\r\n\t\t\tthis.callEvent(\"onAfterZoom\", [this._activeLevelIndex, nextConfig]);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _attachWheelEvent = (config) => {\r\n\t\tconst event = env.isFF ? \"wheel\" : \"mousewheel\";\r\n\t\tlet el: Element;\r\n\t\tif(typeof config.element === \"function\"){\r\n\t\t\tel = config.element();\r\n\t\t}else{\r\n\t\t\tel = config.element as Element;\r\n\t\t}\r\n\t\tif (!el){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._domEvents.attach(el, event, this.$gantt.bind(function(e) {\r\n\t\t\tif (this._useKey) {\r\n\t\t\t\tif (USE_KEY.indexOf(this._useKey) < 0) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (!e[this._useKey]) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (typeof this._handler === \"function\") {\r\n\t\t\t\tthis._handler.apply(this, [e]);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}, this), {passive: false});\r\n\t};\r\n\r\n\tprivate _defaultHandler = (e: any):void => {\r\n\t\tconst timelineOffset = this.$gantt.$task.getBoundingClientRect().x;\r\n\t\tconst cursorOffset = e.clientX - timelineOffset;\r\n\t\tconst wheelY = this.$gantt.env.isFF ? (e.deltaY*-40) : e.wheelDelta;\r\n\t\tlet wheelUp = false;\r\n\t\tif (wheelY > 0) {\r\n\t\t\twheelUp = true;\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tthis._setScaleSettings(wheelUp, cursorOffset);\r\n\t};\r\n\r\n\tprivate _setScaleSettings(wheelUp: boolean, cursorOffset: number) {\r\n\t\tif (wheelUp) {\r\n\t\t\tthis._stepUp(cursorOffset);\r\n\t\t} else {\r\n\t\t\tthis._stepDown(cursorOffset);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _setScaleDates = () => {\r\n\t\tif(this._initialStartDate && this._initialEndDate){\r\n\t\t\tthis.$gantt.config.start_date = this._initialStartDate;\r\n\t\t\tthis.$gantt.config.end_date = this._initialEndDate;\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _stepUp(cursorOffset) {\r\n\t\tif (this._activeLevelIndex >= this._levels.length - 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet nextLevel = this._activeLevelIndex;\r\n\t\tthis._setScaleDates();\r\n\r\n\t\tif(this._widthStep){\r\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width + this._widthStep;\r\n\t\t\tif (newColumnWidth > this._maxColumnWidth) {\r\n\t\t\t\tnewColumnWidth = this._minColumnWidth;\r\n\t\t\t\tnextLevel++;\r\n\t\t\t}\r\n\r\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\r\n\t\t}else{\r\n\t\t\tnextLevel++;\r\n\t\t}\r\n\t\tthis._setLevel(nextLevel, cursorOffset);\r\n\t}\r\n\tprivate _stepDown(cursorOffset) {\r\n\t\tif (this._activeLevelIndex < 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet nextLevel = this._activeLevelIndex;\r\n\t\tthis._setScaleDates();\r\n\r\n\t\tif(this._widthStep){\r\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width - this._widthStep;\r\n\t\t\tif (newColumnWidth < this._minColumnWidth) {\r\n\t\t\t\tnewColumnWidth = this._maxColumnWidth;\r\n\t\t\t\tnextLevel--;\r\n\t\t\t}\r\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\r\n\t\t}else{\r\n\t\t\tnextLevel--;\r\n\t\t}\r\n\t\tthis._setLevel(nextLevel, cursorOffset);\r\n\t}\r\n}","export default function(gantt) {\r\n\r\n\tgantt.config.touch_drag = 75; //nearly immediate dnd\r\n\tgantt.config.touch = true;\r\n\tgantt.config.touch_feedback = true;\r\n\tgantt.config.touch_feedback_duration = 1;\r\n\tgantt._prevent_touch_scroll = false;\r\n\r\n\r\n\tgantt._touch_feedback = function () {\r\n\t\tif (gantt.config.touch_feedback) {\r\n\t\t\tif (navigator.vibrate)\r\n\t\t\t\tnavigator.vibrate(gantt.config.touch_feedback_duration);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif (gantt.$container)\t{\r\n\t\t\taddTouchEvents();\r\n\t\t}\r\n\t});\r\n\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t\tif (gantt.$container)\t{\r\n\t\t\t\tgantt.attachEvent(\"onGanttRender\", addTouchEvents, {once: true});\r\n\t\t}\r\n\t});\r\n\r\n\tfunction addTouchEvents(){\r\n\t\tif (gantt.config.touch != \"force\")\r\n\t\t\tgantt.config.touch = gantt.config.touch &&\r\n\t\t\t\t((navigator.userAgent.indexOf(\"Mobile\") != -1) ||\r\n\t\t\t\t\t(navigator.userAgent.indexOf(\"iPad\") != -1) ||\r\n\t\t\t\t\t(navigator.userAgent.indexOf(\"Android\") != -1) ||\r\n\t\t\t\t\t(navigator.userAgent.indexOf(\"Touch\") != -1)) ||\r\n\t\t\t\t\t((navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\r\n\r\n\t\tif (gantt.config.touch) {\r\n\r\n\t\t\tvar touchEventsSupported = true;\r\n\t\t\ttry {\r\n\t\t\t\tdocument.createEvent(\"TouchEvent\");\r\n\t\t\t} catch (e) {\r\n\t\t\t\ttouchEventsSupported = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (touchEventsSupported) {\r\n\t\t\t\tgantt._touch_events([\"touchmove\", \"touchstart\", \"touchend\"], function (ev) {\r\n\t\t\t\t\tif (ev.touches && ev.touches.length > 1) return null;\r\n\t\t\t\t\tif (ev.touches[0])\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttarget: ev.target,\r\n\t\t\t\t\t\t\tpageX: ev.touches[0].pageX,\r\n\t\t\t\t\t\t\tpageY: ev.touches[0].pageY,\r\n\t\t\t\t\t\t\tclientX: ev.touches[0].clientX,\r\n\t\t\t\t\t\t\tclientY: ev.touches[0].clientY\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn ev;\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t\t} else if (window.navigator.pointerEnabled) {\r\n\t\t\t\tgantt._touch_events([\"pointermove\", \"pointerdown\", \"pointerup\"], function (ev) {\r\n\t\t\t\t\tif (ev.pointerType == \"mouse\") return null;\r\n\t\t\t\t\treturn ev;\r\n\t\t\t\t}, function (ev) {\r\n\t\t\t\t\treturn (!ev || (ev.pointerType == \"mouse\" ));\r\n\t\t\t\t});\r\n\t\t\t} else if (window.navigator.msPointerEnabled) {\r\n\t\t\t\tgantt._touch_events([\"MSPointerMove\", \"MSPointerDown\", \"MSPointerUp\"], function (ev) {\r\n\t\t\t\t\tif (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\r\n\t\t\t\t\treturn ev;\r\n\t\t\t\t}, function (ev) {\r\n\t\t\t\t\treturn (!ev || ev.pointerType == ev.MSPOINTER_TYPE_MOUSE);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction findTargetView(event){\r\n\t\tvar allViews = gantt.$layout.getCellsByType(\"viewCell\");\r\n\r\n\t\tfor(var i = 0; i < allViews.length; i++){\r\n\t\t\tvar box = allViews[i].$view.getBoundingClientRect();\r\n\t\t\tif(event.clientX >= box.left && event.clientX <= box.right &&\r\n\t\t\t\tevent.clientY <= box.bottom && event.clientY >= box.top){\r\n\t\t\t\t\treturn allViews[i];\r\n\t\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getScrollState(view){\r\n\t\tvar scrollX = view.$config.scrollX ? gantt.$ui.getView(view.$config.scrollX) : null;\r\n\t\tvar scrollY = view.$config.scrollY ? gantt.$ui.getView(view.$config.scrollY) : null;\r\n\r\n\t\tvar scrollState = {x: null, y: null};\r\n\t\tif(scrollX){\r\n\t\t\tvar state = scrollX.getScrollState();\r\n\t\t\tif(state.visible){\r\n\t\t\t\tscrollState.x = scrollX.$view.scrollLeft;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(scrollY){\r\n\t\t\tvar state = scrollY.getScrollState();\r\n\t\t\tif(state.visible){\r\n\t\t\t\tscrollState.y = scrollY.$view.scrollTop;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn scrollState;\r\n\t}\r\n\r\n\tfunction scrollView(view, left, top){\r\n\t\tvar scrollX = view.$config.scrollX ? gantt.$ui.getView(view.$config.scrollX) : null;\r\n\t\tvar scrollY = view.$config.scrollY ? gantt.$ui.getView(view.$config.scrollY) : null;\r\n\r\n\t\tif(scrollX){\r\n\t\t\tscrollX.scrollTo(left, null);\r\n\t\t}\r\n\t\tif(scrollY){\r\n\t\t\tscrollY.scrollTo(null, top);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getTaskDND(){\r\n\t\tvar tasksDnD;\r\n\t\tif(gantt.$ui.getView(\"timeline\")){\r\n\t\t\ttasksDnD = gantt.$ui.getView(\"timeline\")._tasks_dnd;\r\n\t\t}\r\n\t\treturn tasksDnD;\r\n\t}\r\n\r\n\tvar touchHandlers = [];\r\n\r\n//we can't use native scrolling, as we need to sync momentum between different parts\r\n//so we will block native scroll and use the custom one\r\n//in future we can add custom momentum\r\n\tgantt._touch_events = function (names, accessor, ignore) {\r\n\t\t//webkit on android need to be handled separately\r\n\t\tvar dblclicktime = 0;\r\n\t\tvar actionMode = false;\r\n\t\tvar scrollMode = false;\r\n\t\tvar actionStart = null;\r\n\t\tvar scrollState;\r\n\t\tvar longTapTimer = null;\r\n\t\tvar currentDndId = null;\r\n\t\tvar dndNodes = [];\r\n\t\tvar targetView = null;\r\n\t\tlet multiTouchEvents = {};\r\n\r\n\t\tfor(var i = 0; i < touchHandlers.length; i++){\r\n\t\t\tgantt.eventRemove(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\r\n\t\t}\r\n\t\ttouchHandlers = [];\r\n\r\n\t\t//touch move\r\n\t\ttouchHandlers.push([gantt.$container, names[0], function (e) {\r\n\t\t\tvar tasksDnD = getTaskDND();\r\n\r\n\t\t\t\tif (ignore(e)) return;\r\n\r\n\t\t\t\t//ignore common and scrolling moves\r\n\t\t\t\tif (!actionMode) return;\r\n\r\n\t\t\t\tif (longTapTimer) clearTimeout(longTapTimer);\r\n\r\n\t\t\t\tvar source = accessor(e);\r\n\t\t\t\tif (tasksDnD && (tasksDnD.drag.id || tasksDnD.drag.start_drag)) {\r\n\t\t\t\t\ttasksDnD.on_mouse_move(source);\r\n\t\t\t\t\tif (e.preventDefault)\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.cancelBubble = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (!gantt._prevent_touch_scroll) {\r\n\t\t\t\t\tif (source && actionStart) {\r\n\t\t\t\t\t\tvar dx = actionStart.pageX - source.pageX;\r\n\t\t\t\t\t\tvar dy = actionStart.pageY - source.pageY;\r\n\t\t\t\t\t\tif (!scrollMode && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\r\n\t\t\t\t\t\t\tscrollMode = true;\r\n\t\t\t\t\t\t\t//gantt._touch_scroll_active = scroll_mode = true;\r\n\t\t\t\t\t\t\tdblclicktime = 0;\r\n\r\n\t\t\t\t\t\t\tif(targetView){\r\n\t\t\t\t\t\t\t\tscrollState = getScrollState(targetView);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tscrollState = gantt.getScrollState();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (scrollMode) {\r\n\r\n\t\t\t\t\t\t\tvar newScrollState;\r\n\t\t\t\t\t\t\tvar scrollX = scrollState.x + dx;\r\n\t\t\t\t\t\t\tvar scrollY = scrollState.y + dy;\r\n\t\t\t\t\t\t\tif(targetView){\r\n\t\t\t\t\t\t\t\tscrollView(targetView, scrollX, scrollY);\r\n\t\t\t\t\t\t\t\tnewScrollState = getScrollState(targetView);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tgantt.scrollTo(scrollX, scrollY);\r\n\t\t\t\t\t\t\t\tnewScrollState = gantt.getScrollState();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ((scrollState.x != newScrollState.x && dy > 2 * dx) ||\r\n\t\t\t\t\t\t\t\t(scrollState.y != newScrollState.y && dx > 2 * dy )) {\r\n\t\t\t\t\t\t\t\treturn block_action(e);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn block_action(e);\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}]);\r\n\r\n\t\t// prevent page drag on touch move\r\n\t\ttry{\r\n\t\t\tdocument.addEventListener('touchmove', function(e) {\r\n\t\t\t\tif (gantt._touch_drag) {\r\n\t\t\t\t\tblock_action(e);\r\n\t\t\t\t}\r\n\t\t\t}, { passive: false });\r\n\t\t}\r\n\t\tcatch(e){\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tconsole.warn(\"Cannot prevent touch event for the page drag\");\r\n\t\t}\r\n\r\n\t\t//block touch context menu in IE10\r\n\t\ttouchHandlers.push([this.$container, \"contextmenu\", function (e) {\r\n\t\t\tif (actionMode)\r\n\t\t\t\treturn block_action(e);\r\n\t\t}]);\r\n\r\n\t\t//touch start\r\n\t\ttouchHandlers.push([this.$container, names[1], function (e) {\r\n\t\t\tmultiTouchEvents = e.touches.length;\r\n\t\t\t// block pull-to-refresh\r\n\t\t\tif(document && document.body){\r\n\t\t\t\tdocument.body.classList.add(\"gantt_touch_active\");\r\n\t\t\t}\r\n\r\n\t\t\tif (ignore(e)) return;\r\n\t\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\t\tactionMode = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tactionStart = accessor(e);\r\n\t\t\ttargetView = findTargetView(actionStart);\r\n\t\t\tif (!gantt._locate_css(actionStart, \"gantt_hor_scroll\") && !gantt._locate_css(actionStart, \"gantt_ver_scroll\")) {\r\n\t\t\t\tactionMode = true;\r\n\t\t\t}\r\n\t\t\tvar tasksDnD = getTaskDND();\r\n\r\n\t\t\t//long tap\r\n\t\t\tlongTapTimer = setTimeout(function () {\r\n\t\t\t\tvar taskId = gantt.locate(actionStart);\r\n\t\t\t\tif (tasksDnD && (taskId && !gantt._locate_css(actionStart, \"gantt_link_control\") && !gantt._locate_css(actionStart, \"gantt_grid_data\"))) {\r\n\t\t\t\t\ttasksDnD.on_mouse_down(actionStart);\r\n\r\n\t\t\t\t\tif (tasksDnD.drag && tasksDnD.drag.start_drag) {\r\n\t\t\t\t\t\t// we need that as touch events break if the target node is removed from the DOM\r\n\t\t\t\t\t\tcloneTaskRendered(taskId);\r\n\t\t\t\t\t\ttasksDnD._start_dnd(actionStart);\r\n\t\t\t\t\t\tgantt._touch_drag = true;\r\n\r\n\t\t\t\t\t\tgantt.refreshTask(taskId);\r\n\r\n\t\t\t\t\t\tgantt._touch_feedback();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlongTapTimer = null;\r\n\t\t\t}, gantt.config.touch_drag);\r\n\t\t}]);\r\n\r\n\t\t//touch end\r\n\t\ttouchHandlers.push([this.$container, names[2], function (e) {\r\n\t\t\tif(document && document.body){\r\n\t\t\t\tdocument.body.classList.remove(\"gantt_touch_active\");\r\n\t\t\t}\r\n\t\t\tif (ignore(e)) return;\r\n\t\t\tif (longTapTimer) clearTimeout(longTapTimer);\r\n\t\t\tgantt._touch_drag = false;\r\n\t\t\tactionMode = false;\r\n\t\t\tvar source = accessor(e);\r\n\r\n\t\t\tvar tasksDnD = getTaskDND();\r\n\r\n\t\t\tif(tasksDnD)\r\n\t\t\t\ttasksDnD.on_mouse_up(source);\r\n\r\n\t\t\tif (currentDndId && gantt.isTaskExists(currentDndId)) {\r\n\t\t\t\tgantt.refreshTask(currentDndId);\r\n\t\t\t\tif(dndNodes.length){\r\n\t\t\t\t\tdndNodes.forEach(function(node){\r\n\t\t\t\t\t\tif(node.parentNode){\r\n\t\t\t\t\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tgantt._touch_feedback();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//gantt._touch_scroll_active = action_mode = scroll_mode = false;\r\n\t\t\tactionMode = scrollMode = false;\r\n\t\t\tdndNodes = [];\r\n\t\t\tcurrentDndId = null;\r\n\r\n\t\t\t//dbl-tap handling\r\n\t\t\tif (actionStart && dblclicktime) {\r\n\t\t\t\tvar now = new Date();\r\n\t\t\t\t// doubletap shouldn't happen with multitouch\r\n\t\t\t\tif ((now - dblclicktime) < 500 && multiTouchEvents <= 1) {\r\n\r\n\t\t\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\t\t\tmouseEvents.onDoubleClick(actionStart);\r\n\t\t\t\t\tblock_action(e);\r\n\t\t\t\t} else\r\n\t\t\t\t\tdblclicktime = now;\r\n\t\t\t} else {\r\n\t\t\t\tdblclicktime = new Date();\r\n\t\t\t}\r\n\t\t}]);\r\n\r\n\t\tfor(var i = 0; i < touchHandlers.length; i++){\r\n\t\t\tgantt.event(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\r\n\t\t}\r\n\r\n\t\t//common helper, prevents event\r\n\t\tfunction block_action(e) {\r\n\t\t\tif (e && e.preventDefault && e.cancelable){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\te.cancelBubble = true;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfunction cloneTaskRendered(taskId) {\r\n\t\t\tconst renders = gantt._getTaskLayers();\r\n\t\t\tlet task = gantt.getTask(taskId);\r\n\t\t\tif (task) {\r\n\t\t\t\tlet visible = gantt.isTaskVisible(taskId);\r\n\t\t\t\tif (visible){\r\n\t\t\t\t\tcurrentDndId = taskId;\r\n\t\t\t\t\tfor (let i = 0; i < renders.length; i++) {\r\n\t\t\t\t\t\ttask = renders[i].rendered[taskId];\r\n\t\t\t\t\t\tif (task && task.getAttribute(gantt.config.task_attribute) && task.getAttribute(gantt.config.task_attribute) == taskId) {\r\n\t\t\t\t\t\t\tconst copy = task.cloneNode(true);\r\n\t\t\t\t\t\t\tdndNodes.push(task);\r\n\t\t\t\t\t\t\trenders[i].rendered[taskId] = copy;\r\n\t\t\t\t\t\t\ttask.style.display = \"none\";\r\n\t\t\t\t\t\t\tcopy.className += \" gantt_drag_move \";\r\n\t\t\t\t\t\t\ttask.parentNode.appendChild(copy);\r\n\t\t\t\t\t\t\t//return copy;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (task.$split_subtask){\r\n\t\t\t\t\tlet renderedParent = task.$rendered_parent;\r\n\t\t\t\t\tvisible = gantt.isTaskVisible(renderedParent);\r\n\t\t\t\t\tif (!visible){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcurrentDndId = taskId;\r\n\t\t\t\t\tfor (let i = 0; i < renders.length; i++) {\r\n\t\t\t\t\t\tconst parent = renders[i].rendered[renderedParent];\r\n\t\t\t\t\t\tlet taskNode;\r\n\t\t\t\t\t\tif (parent && parent.childNodes){\r\n\t\t\t\t\t\t\ttaskNode = parent.querySelector(`[${gantt.config.task_attribute}=\"${task.id}\"]`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (taskNode) {\r\n\t\t\t\t\t\t\t// move the child node to a different parent as the task bar will be repainted\r\n\t\t\t\t\t\t\t// and the initial node will be lost\r\n\t\t\t\t\t\t\tconst copy = taskNode.cloneNode(true);\r\n\t\t\t\t\t\t\ttaskNode.parentNode.appendChild(copy);\r\n\r\n\t\t\t\t\t\t\tgantt.$task_bars.appendChild(taskNode);\r\n\t\t\t\t\t\t\ttaskNode.style.display = \"none\";\r\n\r\n\t\t\t\t\t\t\t// don't add the node as rendered otherwise it will be lost:\r\n\t\t\t\t\t\t\t// renders[i].rendered[taskId] = taskNode;\r\n\t\t\t\t\t\t\t// instead, add it to dndNodes as its elements will be removed after drag\r\n\t\t\t\t\t\t\tdndNodes.push(taskNode);\r\n\r\n\t\t\t\t\t\t\ttaskNode = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n};","function dummy() {\r\n\t// eslint-disable-next-line\r\n\tconsole.log(\"Method is not implemented.\"); \r\n}\r\nfunction BaseControl() {\r\n}\r\n\r\n// base methods will be runned in gantt context\r\nBaseControl.prototype.render = dummy; // arguments: sns\r\nBaseControl.prototype.set_value = dummy; // arguments: node, value, ev, sns(config)\r\nBaseControl.prototype.get_value = dummy; // arguments node, ev, sns(config)\r\nBaseControl.prototype.focus = dummy; // arguments: node\r\n\r\nexport default function(gantt) { // we could send current instance of gantt to module\r\n\treturn BaseControl;\r\n};","import * as helpers from \"../../../utils/helpers\";\r\n\r\nvar htmlHelpers = {\r\n\tgetHtmlSelect: function(options, attributes, value) {\r\n\t\tvar innerHTML = \"\";\r\n\t\tvar _this = this;\r\n\r\n\t\toptions = options || [];\r\n\t\t\r\n\t\thelpers.forEach(options, function(entry) {\r\n\t\t\tvar _attributes = [{ key: \"value\", value: entry.key }];\r\n\r\n\t\t\tif (value == entry.key) {\r\n\t\t\t\t_attributes[_attributes.length] = { key: \"selected\", value: \"selected\" };\r\n\t\t\t}\r\n\t\t\tif (entry.attributes) {\r\n\t\t\t\t_attributes = _attributes.concat(entry.attributes);\r\n\t\t\t}\r\n\t\t\tinnerHTML += _this.getHtmlOption({ innerHTML: entry.label }, _attributes);\r\n\t\t});\r\n\r\n\t\treturn _getHtmlContainer(\"select\", { innerHTML: innerHTML }, attributes);\r\n\t},\r\n\tgetHtmlOption: function(options, attributes) { return _getHtmlContainer(\"option\", options, attributes); },\r\n\tgetHtmlButton: function(options, attributes) { return _getHtmlContainer(\"button\", options, attributes); },\r\n\tgetHtmlDiv: function(options, attributes) { return _getHtmlContainer(\"div\", options, attributes); },\r\n\tgetHtmlLabel: function(options, attributes) { return _getHtmlContainer(\"label\", options, attributes); },\r\n\tgetHtmlInput: function(attributes) {\r\n\t\treturn \" \";\r\n\t}\r\n};\r\n\r\nfunction _getHtmlContainer(tag, options, attributes) {\r\n\tvar html;\r\n\r\n\toptions = options || [];\r\n\t\r\n\thtml = \"<\" + tag + _getHtmlAttributes(attributes || []) + \">\" + (options.innerHTML || \"\") + \"\" + tag +\">\";\r\n\treturn html;\r\n\r\n}\r\n\r\nfunction _getHtmlAttributes(attributes) {\r\n\tvar html = \"\";\r\n\r\n\thelpers.forEach(attributes, function(entry) {\r\n\t\thtml += \" \" + entry.key + \"='\" + entry.value + \"'\";\r\n\t});\r\n\treturn html;\r\n}\r\n\r\nexport default htmlHelpers;","import __extends from \"../../../../utils/extends\";\r\nimport htmlHelpers from \"../../utils/html_helpers\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction SelectControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\t\r\n\t\treturn self; \r\n\t}\r\n\t\r\n\t__extends(SelectControl, _super);\r\n\t\r\n\tSelectControl.prototype.render = function(sns) {\r\n\t\tconst height = sns.height ? `height:${sns.height}px;` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\thtml += htmlHelpers.getHtmlSelect(sns.options, [{ key: \"style\", value: \"width:100%;\" }, { key: \"title\", value: sns.name }]);\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tSelectControl.prototype.set_value = function(node, value, ev, sns) {\r\n\t\tvar select = node.firstChild;\r\n\t\tif (!select._dhx_onchange && sns.onchange) {\r\n\t\t\tselect.onchange = sns.onchange;\r\n\t\t\tselect._dhx_onchange = true;\r\n\t\t}\r\n\t\tif (typeof value === \"undefined\")\r\n\t\t\tvalue = (select.options[0] || {}).value;\r\n\t\tselect.value = value || \"\";\r\n\t};\r\n\t\r\n\tSelectControl.prototype.get_value = function(node) {\r\n\t\treturn node.firstChild.value;\r\n\t};\r\n\t\r\n\tSelectControl.prototype.focus = function(node) {\r\n\t\tvar a = node.firstChild;\r\n\t\tgantt._focus(a, true);\r\n\t};\r\n\t\r\n\treturn SelectControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\nimport SelectControl from \"./select_control\";\r\nexport default function(gantt) {\r\n\tvar _super = SelectControl(gantt);\r\n\r\n\tfunction ParentControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(ParentControl, _super);\r\n\r\n\r\n\tParentControl.prototype.render = function(sns) {\r\n\t\treturn _display(sns, false);\r\n\t};\r\n\r\n\tParentControl.prototype.set_value = function(node, value, ev, config) {\r\n\t\t// GS-1051. If the value is `0`, the set_value function in the select control won't select \r\n\t\t// the first child because (0 || '') = '';\r\n\t\tif (value === 0) value = \"0\";\r\n\r\n\t\tvar tmpDom = document.createElement(\"div\");\r\n\t\ttmpDom.innerHTML = _display(config, ev.id);\r\n\t\tvar newOptions = tmpDom.removeChild(tmpDom.firstChild);\r\n\t\tnode.onselect = null;\r\n\t\tnode.parentNode.replaceChild(newOptions, node);\r\n\r\n\t\treturn gantt.form_blocks.select.set_value.apply(gantt, [newOptions, value, ev, config]);\r\n\t};\r\n\r\n\tfunction _display(config, item_id) {\r\n\t\tvar tasks = [],\r\n\t\t\toptions = [];\r\n\t\tif (item_id) {\r\n\t\t\ttasks = gantt.getTaskByTime();\r\n\t\t\tif (config.allow_root) {\r\n\t\t\t\ttasks.unshift({id: gantt.config.root_id, text: config.root_label || \"\"});\r\n\t\t\t}\r\n\t\t\ttasks = _filter(tasks, config, item_id);\r\n\t\t\tif (config.sort) {\r\n\t\t\t\ttasks.sort(config.sort);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar text = config.template || gantt.templates.task_text;\r\n\t\tfor (var i = 0; i < tasks.length; i++) {\r\n\t\t\tvar label = text.apply(gantt, [tasks[i].start_date, tasks[i].end_date, tasks[i]]);\r\n\t\t\tif (label === undefined) {\r\n\t\t\t\tlabel = \"\";\r\n\t\t\t}\r\n\t\t\toptions.push({\r\n\t\t\t\tkey: tasks[i].id,\r\n\t\t\t\tlabel: label\r\n\t\t\t});\r\n\t\t}\r\n\t\tconfig.options = options;\r\n\t\tconfig.map_to = config.map_to || \"parent\";\r\n\t\treturn gantt.form_blocks.select.render.apply(this, arguments);\r\n\t}\r\n\r\n\tfunction _filter(options, config, item_id) {\r\n\t\tvar filter = config.filter || function() {\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\t\toptions = options.slice(0);\r\n\r\n\t\tfor (var i = 0; i < options.length; i++) {\r\n\t\t\tvar task = options[i];\r\n\t\t\tif (task.id == item_id || gantt.isChildOf(task.id, item_id) || filter(task.id, task) === false) {\r\n\t\t\t\toptions.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn options;\r\n\t}\r\n\treturn ParentControl;\r\n};","import TemplateControlConstructor from \"./controls/template_control\";\r\nimport TextareaControlConstructor from \"./controls/textarea_control\";\r\nimport TimeControlConstructor from \"./controls/time_control\";\r\nimport SelectControlConstructor from \"./controls/select_control\";\r\nimport CheckboxControlConstructor from \"./controls/checkbox_control\";\r\nimport RadioControlConstructor from \"./controls/radio_control\";\r\nimport DurationControlConstructor from \"./controls/duration_control\";\r\nimport ParentControlConstructor from \"./controls/parent_control\";\r\nimport ResourcesControlConstructor from \"./controls/resources_control\";\r\nimport ConstraintControlConstructor from \"./controls/constraint_control\";\r\nimport TypeselectControlConstructor from \"./controls/typeselect_control\";\r\nimport BaselineControlConstructor from \"./controls/baseline_control\";\r\n\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as helpers from \"../../../utils/helpers\";\r\n\t\r\n\r\nexport default function (gantt) {\r\n\r\n\r\n\tvar TemplateControl = TemplateControlConstructor(gantt);\r\n\tvar TextareaControl = TextareaControlConstructor(gantt);\r\n\tvar TimeControl = TimeControlConstructor(gantt);\r\n\tvar SelectControl = SelectControlConstructor(gantt);\r\n\tvar CheckboxControl = CheckboxControlConstructor(gantt);\r\n\tvar RadioControl = RadioControlConstructor(gantt);\r\n\tvar DurationControl = DurationControlConstructor(gantt);\r\n\tvar ParentControl = ParentControlConstructor(gantt);\r\n\tvar ResourcesControl = ResourcesControlConstructor(gantt);\r\n\tvar ConstraintControl = ConstraintControlConstructor(gantt);\r\n\tvar TypeselectControl = TypeselectControlConstructor(gantt);\r\n\tvar BaselineControl = BaselineControlConstructor(gantt);\r\n\r\n\tgantt._lightbox_methods = {};\r\n\tgantt._lightbox_template = \"
\";\r\n\tgantt._lightbox_template = `
`;\r\n\r\n\t// GS-1952. Attaching the lightbox to the BODY element is not considered secure.\r\n\t// Attach it to Gantt container for Salesforce and other secure environments\r\n\tgantt._lightbox_root = gantt.$root;\r\n\tfunction setParentNode() {\r\n\t\tconst cspEnvironment = gantt.config.csp === true;\r\n\t\tconst salesforceEnvironment = !!window[\"Sfdc\"] || !!window[\"$A\"] || window[\"Aura\"] || ('$shadowResolver$' in document.body);\r\n\t\tif (cspEnvironment || salesforceEnvironment) {\r\n\t\t\tgantt._lightbox_root = gantt.$root;\r\n\t\t} else {\r\n\t\t\tgantt._lightbox_root = document.body;\r\n\t\t}\r\n\t}\r\n\r\n\t//TODO: gantt._lightbox_id is changed from data.js and accessed from autoscheduling, check if it can be removed from gantt object\r\n\tvar state = gantt.$services.getService(\"state\");\r\n\tstate.registerProvider(\"lightbox\", function () {\r\n\t\treturn {\r\n\t\t\tlightbox: gantt._lightbox_id\r\n\t\t};\r\n\t});\r\n\r\n\tgantt.showLightbox = function (id) {\r\n\t\tvar task = this.getTask(id);\r\n\t\tif (!this.callEvent(\"onBeforeLightbox\", [id])) {\r\n\t\t\tif(gantt.isTaskExists(id) && gantt.getTask(id).$new){\r\n\t\t\t\t//GS-2340 if 'onBeforeLightbox' returns 'false' need update the order in datastore\r\n\t\t\t\tthis.$data.tasksStore._updateOrder();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar box = this.getLightbox(this.getTaskType(task.type));\r\n\r\n\t\tthis.showCover(box);\r\n\t\tthis._fill_lightbox(id, box);\r\n\t\tthis._setLbPosition(box);\r\n\t\tthis._waiAria.lightboxVisibleAttr(box);\r\n\r\n\t\tthis.callEvent(\"onLightbox\", [id]);\r\n\t};\r\n\r\n\tfunction _is_chart_visible(gantt) {\r\n\t\tvar timeline = gantt.$ui.getView(\"timeline\");\r\n\t\tif (timeline && timeline.isVisible()) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgantt._get_timepicker_step = function () {\r\n\t\tif (this.config.round_dnd_dates) {\r\n\t\t\tvar step;\r\n\t\t\tif (_is_chart_visible(this)) {\r\n\t\t\t\tvar scale = gantt.getScale();\r\n\t\t\t\tstep = (helpers.getSecondsInUnit(scale.unit) * scale.step) / 60;//timepicker step is measured in minutes\r\n\t\t\t}\r\n\r\n\t\t\tif (!step || step >= 60 * 24) {\r\n\t\t\t\tstep = this.config.time_step;\r\n\t\t\t}\r\n\t\t\treturn step;\r\n\t\t}\r\n\t\treturn this.config.time_step;\r\n\t};\r\n\tgantt.getLabel = function (property, key) {\r\n\t\tvar sections = this._get_typed_lightbox_config();\r\n\t\tfor (var i = 0; i < sections.length; i++) {\r\n\t\t\tif (sections[i].map_to == property) {\r\n\t\t\t\tvar options = sections[i].options;\r\n\t\t\t\tfor (var j = 0; j < options.length; j++) {\r\n\t\t\t\t\tif (options[j].key == key) {\r\n\t\t\t\t\t\treturn options[j].label;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\r\n\tgantt.updateCollection = function (list_name, collection) {\r\n\t\tcollection = collection.slice(0);\r\n\t\tvar list = gantt.serverList(list_name);\r\n\t\tif (!list) return false;\r\n\t\tlist.splice(0, list.length);\r\n\t\tlist.push.apply(list, collection || []);\r\n\t\tgantt.resetLightbox();\r\n\t};\r\n\tgantt.getLightboxType = function () {\r\n\t\treturn this.getTaskType(this._lightbox_type);\r\n\t};\r\n\tgantt.getLightbox = function (type) {\r\n\t\tvar lightboxDiv;\r\n\t\tvar fullWidth;\r\n\t\tvar html;\r\n\t\tvar sns;\r\n\t\tvar ds;\r\n\t\tvar classNames = \"\";\r\n\t\tsetParentNode();\r\n\r\n\t\tif (type === undefined)\r\n\t\t\ttype = this.getLightboxType();\r\n\r\n\t\tif (!this._lightbox || this.getLightboxType() != this.getTaskType(type)) {\r\n\t\t\tthis._lightbox_type = this.getTaskType(type);\r\n\t\t\tlightboxDiv = document.createElement(\"div\");\r\n\t\t\tclassNames = \"gantt_cal_light\";\r\n\t\t\tfullWidth = this._is_lightbox_timepicker();\r\n\r\n\t\t\tif (gantt.config.wide_form)\r\n\t\t\t\tclassNames += \" gantt_cal_light_wide\";\r\n\r\n\t\t\tif (fullWidth) {\r\n\t\t\t\tclassNames += \" gantt_cal_light_full\";\r\n\t\t\t}\r\n\r\n\t\t\tlightboxDiv.className = classNames;\r\n\r\n\t\t\tlightboxDiv.style.visibility = \"hidden\";\r\n\t\t\thtml = this._lightbox_template;\r\n\t\t\thtml += \"\";\r\n\t\t\thtml += getHtmlButtons(this.config.buttons_left);\r\n\t\t\thtml += \"
\";\r\n\t\t\thtml += getHtmlButtons(this.config.buttons_right, true);\r\n\t\t\thtml += \"
\";\r\n\r\n\t\t\tlightboxDiv.innerHTML = html;\r\n\r\n\t\t\tgantt._waiAria.lightboxAttr(lightboxDiv);\r\n\r\n\t\t\tif (gantt.config.drag_lightbox) {\r\n\t\t\t\tlightboxDiv.firstChild.onmousedown = gantt._ready_to_dnd;\r\n\t\t\t\tlightboxDiv.firstChild.ontouchstart = function (e){\r\n\t\t\t\t\tgantt._ready_to_dnd(e.touches[0]);\r\n\t\t\t\t};\r\n\t\t\t\tlightboxDiv.firstChild.onselectstart = function () {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t};\r\n\t\t\t\tlightboxDiv.firstChild.style.cursor = \"pointer\";\r\n\t\t\t\tgantt._init_dnd_events();\r\n\t\t\t}\r\n\r\n\t\t\t// GS-1428: If there is lightbox node, we need to remove it from the DOM\r\n\t\t\tif (this._lightbox){\r\n\t\t\t\tthis.resetLightbox();\r\n\t\t\t}\r\n\t\t\tshow_cover();\r\n\t\t\tthis._cover.insertBefore(lightboxDiv, this._cover.firstChild);\r\n\t\t\tthis._lightbox = lightboxDiv;\r\n\r\n\t\t\tsns = this._get_typed_lightbox_config(type);\r\n\t\t\thtml = this._render_sections(sns);\r\n\r\n\t\t\tds = lightboxDiv.querySelector(\"div.gantt_cal_larea\");\r\n\t\t\t\r\n\t\t\t//GS-1131. If gantt_cal_larea is displayed, Firefox renders buttons incorrectly;\r\n\t\t\tvar backup_overflow = ds.style.overflow;\r\n\t\t\tds.style.overflow = 'hidden';\r\n\r\n\t\t\tds.innerHTML = html;\r\n\r\n\t\t\t\r\n\r\n\t\t\tbindLabelsToInputs(sns);\r\n\r\n\t\t\tds.style.overflow = backup_overflow;\r\n\r\n\t\t\tthis._init_lightbox_events(this);\r\n\t\t\tlightboxDiv.style.display = \"none\";\r\n\t\t\tlightboxDiv.style.visibility = \"visible\";\r\n\t\t}\r\n\t\treturn this._lightbox;\r\n\t};\r\n\r\n\tgantt._render_sections = function (sns) {\r\n\t\tvar html = \"\";\r\n\t\tfor (var i = 0; i < sns.length; i++) {\r\n\t\t\tvar block = this.form_blocks[sns[i].type];\r\n\t\t\tif (!block) continue; //ignore incorrect blocks\r\n\t\t\tsns[i].id = \"area_\" + this.uid();\r\n\r\n\t\t\tvar display = sns[i].hidden ? \" style='display:none'\" : \"\";\r\n\t\t\tvar button = \"\";\r\n\t\t\tif (sns[i].button) {\r\n\t\t\t\tbutton = \"\";\r\n\t\t\t}\r\n\t\t\tif (sns[i].type == \"baselines\") {\r\n\t\t\t\tbutton = \"\" +\r\n\t\t\t\t\"\";\r\n\t\t\t}\r\n\t\t\tif (this.config.wide_form) {\r\n\t\t\t\thtml += \"\";\r\n\t\t\t}\r\n\t\t\thtml += \"
\" + button + this.locale.labels[\"section_\" + sns[i].name] + \"
\" + block.render.call(this, sns[i]);\r\n\t\t\thtml += \"
\";\r\n\t\t}\r\n\t\treturn html;\r\n\t};\r\n\r\n\tgantt._center_lightbox = function(box){\r\n\t\tgantt._setLbPosition(box);\r\n\t};\r\n\tgantt._setLbPosition = function(box) {\r\n\t\tif(!box){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst rootElement = gantt._lightbox_root || gantt.$root;\r\n\t\tbox.style.top = Math.max(rootElement.offsetHeight / 2 - box.offsetHeight/2, 0) + \"px\";\r\n\t\tbox.style.left = Math.max(rootElement.offsetWidth / 2 - box.offsetWidth/2, 0) + \"px\";\r\n\t};\r\n\r\n\tgantt.showCover = function (box) {\r\n\t\tif (box){\r\n\t\t\tbox.style.display=\"block\";\r\n\t\r\n\t\t\tthis._setLbPosition(box);\r\n\t\t}\r\n\t\tshow_cover();\r\n\t\tthis._cover.style.display = \"\";\r\n\t};\r\n\tconst show_cover=function(){\r\n\t\tif(gantt._cover) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\r\n\t\tgantt._cover=document.createElement(\"div\");\r\n\t\tgantt._cover.className=\"gantt_cal_cover\";\r\n\t\tgantt._cover.style.display = \"none\";\r\n\t\r\n\t\tgantt.event(gantt._cover, \"mousemove\", gantt._move_while_dnd);\r\n\t\tgantt.event(gantt._cover, \"mouseup\", gantt._finish_dnd);\r\n\t\r\n\t\tconst rootElement = gantt._lightbox_root || gantt.$root;\r\n\t\trootElement.appendChild(gantt._cover);\r\n\t};\r\n\r\n\tgantt._init_lightbox_events = function () {\r\n\t\tgantt.lightbox_events = {};\r\n\r\n\r\n\t\tgantt.lightbox_events.gantt_save_btn = function () {\r\n\t\t\tgantt._save_lightbox();\r\n\t\t};\r\n\r\n\r\n\t\tgantt.lightbox_events.gantt_delete_btn = function () {\r\n\t\t\tgantt._lightbox_current_type = null;\r\n\t\t\tif (!gantt.callEvent(\"onLightboxDelete\", [gantt._lightbox_id]))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (gantt.isTaskExists(gantt._lightbox_id)) {\r\n\t\t\t\tgantt.$click.buttons[\"delete\"](gantt._lightbox_id);\r\n\t\t\t} else {\r\n\t\t\t\tgantt.hideLightbox();\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\r\n\t\tgantt.lightbox_events.gantt_cancel_btn = function () {\r\n\t\t\tgantt._cancel_lightbox();\r\n\t\t};\r\n\r\n\r\n\t\tgantt.lightbox_events[\"default\"] = function (e, src) {\r\n\t\t\tif (src.getAttribute(\"data-dhx-button\")) {\r\n\t\t\t\tgantt.callEvent(\"onLightboxButton\", [src.className, src, e]);\r\n\t\t\t} else {\r\n\t\t\t\tvar index, block, sec;\r\n\r\n\t\t\t\tvar className = domHelpers.getClassName(src);\r\n\t\t\t\tif (className.indexOf(\"gantt_custom_button\") != -1) {\r\n\t\t\t\t\tif (className.indexOf(\"gantt_custom_button_\") != -1) {\r\n\t\t\t\t\t\tindex = src.parentNode.getAttribute(\"data-index\");\r\n\t\t\t\t\t\tsec = src;\r\n\t\t\t\t\t\twhile (sec && domHelpers.getClassName(sec).indexOf(\"gantt_cal_lsection\") == -1) {\r\n\t\t\t\t\t\t\tsec = sec.parentNode;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tindex = src.getAttribute(\"data-index\");\r\n\t\t\t\t\t\tsec = src.parentNode;\r\n\t\t\t\t\t\tsrc = src.firstChild;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar sections = gantt._get_typed_lightbox_config();\r\n\r\n\t\t\t\tif (index) {\r\n\t\t\t\t\tindex = index * 1;\r\n\t\t\t\t\tblock = gantt.form_blocks[sections[index * 1].type];\r\n\t\t\t\t\tblock.button_click(index, src, sec, sec.nextSibling);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.event(gantt.getLightbox(), \"click\", function (e) {\r\n\t\t\tif(e.target.closest(\".gantt_cal_ltitle_close_btn\")){\r\n\t\t\t\tgantt._cancel_lightbox();\r\n\t\t\t}\r\n\t\t\tvar src = domHelpers.getTargetNode(e);\r\n\r\n\t\t\tvar className = domHelpers.getClassName(src);\r\n\t\t\tif (!className) {\r\n\t\t\t\tsrc = src.previousSibling;\r\n\t\t\t\tclassName = domHelpers.getClassName(src);\r\n\t\t\t}\r\n\t\t\tif (src && className && className.indexOf(\"gantt_btn_set\") === 0) {\r\n\t\t\t\tsrc = src.firstChild;\r\n\t\t\t\tclassName = domHelpers.getClassName(src);\r\n\t\t\t}\r\n\t\t\tif (src && className) {\r\n\t\t\t\tvar func = gantt.defined(gantt.lightbox_events[src.className]) ? gantt.lightbox_events[src.className] : gantt.lightbox_events[\"default\"];\r\n\t\t\t\treturn func(e, src);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\tgantt.getLightbox().onkeydown = function (e) {\r\n\t\t\tvar event = e || window.event;\r\n\t\t\tvar target = e.target || e.srcElement;\r\n\t\t\tvar buttonTarget = domHelpers.getClassName(target).indexOf(\"gantt_btn_set\") > -1;\r\n\r\n\t\t\tswitch ((e || event).keyCode) {\r\n\t\t\t\tcase gantt.constants.KEY_CODES.SPACE: {\r\n\t\t\t\t\tif ((e || event).shiftKey) return;\r\n\t\t\t\t\tif (buttonTarget && target.click) {\r\n\t\t\t\t\t\ttarget.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase gantt.keys.edit_save:\r\n\t\t\t\t\tif ((e || event).shiftKey) return;\r\n\t\t\t\t\tif (buttonTarget && target.click) {\r\n\t\t\t\t\t\ttarget.click();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tgantt._save_lightbox();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase gantt.keys.edit_cancel:\r\n\t\t\t\t\tgantt._cancel_lightbox();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\tgantt._cancel_lightbox = function () {\r\n\t\tvar task = this.getLightboxValues();\r\n\t\tgantt._lightbox_current_type = null;\r\n\t\tthis.callEvent(\"onLightboxCancel\", [this._lightbox_id, task.$new]);\r\n\t\tif (gantt.isTaskExists(task.id) && task.$new) {\r\n\t\t\tthis.silent(function () {\r\n\t\t\t\tgantt.$data.tasksStore.removeItem(task.id);\r\n\t\t\t\tgantt._update_flags(task.id, null);\r\n\t\t\t});\r\n\t\t\tthis.refreshData();\r\n\t\t}\r\n\r\n\t\tthis.hideLightbox();\r\n\t};\r\n\r\n\tgantt._save_lightbox = function () {\r\n\t\tvar task = this.getLightboxValues();\r\n\t\tgantt._lightbox_current_type = null;\r\n\t\tif (!this.callEvent(\"onLightboxSave\", [this._lightbox_id, task, !!task.$new]))\r\n\t\t\treturn;\r\n\r\n\t\t// GS-2170. Do not recalculate the indexes and dates of other tasks\r\n\t\t// as they will be recalculated in the `refreshData`\r\n\t\tgantt.$data.tasksStore._skipTaskRecalculation = \"lightbox\";\r\n\t\tif (task.$new) {\r\n\t\t\tdelete task.$new;\r\n\t\t\tthis.addTask(task, task.parent, this.getTaskIndex(task.id));\r\n\t\t} else if (this.isTaskExists(task.id)) {\r\n\t\t\tthis.mixin(this.getTask(task.id), task, true);\r\n\t\t\tthis.refreshTask(task.id);\r\n\t\t\tthis.updateTask(task.id);\r\n\t\t}\r\n\t\tgantt.$data.tasksStore._skipTaskRecalculation = false;\r\n\t\tthis.refreshData();\r\n\r\n\t\t// TODO: do we need any blockable events here to prevent closing lightbox?\r\n\t\tthis.hideLightbox();\r\n\t};\r\n\r\n\tgantt._resolve_default_mapping = function (section) {\r\n\t\tvar mapping = section.map_to;\r\n\t\tvar time_controls = { \"time\": true, \"time_optional\": true, \"duration\": true, \"duration_optional\": true };\r\n\t\tif (time_controls[section.type]) {\r\n\t\t\tif (section.map_to == \"auto\") {\r\n\t\t\t\tmapping = { start_date: \"start_date\", end_date: \"end_date\", duration: \"duration\" };\r\n\t\t\t} else if (typeof (section.map_to) === \"string\") {\r\n\t\t\t\tmapping = { start_date: section.map_to };\r\n\t\t\t}\r\n\t\t} else if (section.type === \"constraint\") {\r\n\t\t\tif (!section.map_to || typeof (section.map_to) === \"string\") {\r\n\t\t\t\tmapping = { constraint_type: \"constraint_type\", constraint_date: \"constraint_date\" };\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn mapping;\r\n\t};\r\n\r\n\tgantt.getLightboxValues = function () {\r\n\t\tvar task = {};\r\n\r\n\t\tif (gantt.isTaskExists(this._lightbox_id)) {\r\n\t\t\ttask = this.mixin({}, this.getTask(this._lightbox_id));\r\n\t\t}\r\n\r\n\t\tvar sns = this._get_typed_lightbox_config();\r\n\t\tfor (var i = 0; i < sns.length; i++) {\r\n\t\t\tvar node = gantt._lightbox_root.querySelector(\"#\" + sns[i].id);\r\n\t\t\tnode = (node ? node.nextSibling : node);\r\n\t\t\tvar block = this.form_blocks[sns[i].type];\r\n\t\t\tif (!block) continue;\r\n\t\t\tvar res = block.get_value.call(this, node, task, sns[i]);\r\n\t\t\tvar map_to = gantt._resolve_default_mapping(sns[i]);\r\n\t\t\tif (typeof map_to == \"string\" && map_to != \"auto\") {\r\n\t\t\t\ttask[map_to] = res;\r\n\t\t\t} else if (typeof map_to == \"object\") {\r\n\t\t\t\tfor (var property in map_to) {\r\n\t\t\t\t\tif (map_to[property])\r\n\t\t\t\t\t\ttask[map_to[property]] = res[property];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// GS-1282 We need to preserve the task type even if the lightbox doesn't have the typeselect section\r\n\t\t// GS-2460 set the current type from selector\r\n\t\tif (gantt._lightbox_current_type) {\r\n\t\t\ttask.type = gantt._lightbox_current_type;\r\n\t\t}\r\n\r\n\t\treturn task;\r\n\t};\r\n\r\n\r\n\tgantt.hideLightbox = function () {\r\n\t\tvar box = this.getLightbox();\r\n\t\tif (box) box.style.display = \"none\";\r\n\r\n\t\tthis._waiAria.lightboxHiddenAttr(box);\r\n\t\tthis._lightbox_id = null;\r\n\r\n\t\tthis.hideCover(box);\r\n\t\tthis.resetLightbox();\r\n\t\tthis.callEvent(\"onAfterLightbox\", []);\r\n\t};\r\n\tgantt.hideCover = function (box) {\r\n\t\tif(box){\r\n\t\t\tbox.style.display = \"none\";\r\n\t\t}\r\n\t\tif (this._cover)\r\n\t\t\tthis._cover.parentNode.removeChild(this._cover);\r\n\t\tthis._cover = null;\r\n\t};\r\n\r\n\tgantt.resetLightbox = function () {\r\n\t\tif (gantt._lightbox && !gantt._custom_lightbox)\r\n\t\t\tgantt._lightbox.remove();\r\n\t\tgantt._lightbox = null;\r\n\t};\r\n\tgantt._set_lightbox_values = function (data, box) {\r\n\t\tvar task = data;\r\n\t\tvar s = box.getElementsByTagName(\"span\");\r\n\t\tvar lightboxHeader = [];\r\n\t\tif (gantt.templates.lightbox_header) {\r\n\t\t\tlightboxHeader.push(\"\");\r\n\t\t\tlightboxHeader.push(gantt.templates.lightbox_header(task.start_date, task.end_date, task));\r\n\t\t\ts[1].innerHTML = \"\";\r\n\t\t\ts[2].innerHTML = gantt.templates.lightbox_header(task.start_date, task.end_date, task);\r\n\t\t} else {\r\n\t\t\tlightboxHeader.push(this.templates.task_time(task.start_date, task.end_date, task));\r\n\t\t\tlightboxHeader.push(String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70)); //IE6 fix\r\n\t\t\ts[1].innerHTML = this.templates.task_time(task.start_date, task.end_date, task);\r\n\t\t\ts[2].innerHTML = String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70); //IE6 fix\r\n\t\t}\r\n\t\ts[1].innerHTML = lightboxHeader[0];\r\n\t\ts[2].innerHTML = lightboxHeader[1];\r\n\r\n\t\tgantt._waiAria.lightboxHeader(box, lightboxHeader.join(\" \"));\r\n\r\n\t\tvar sns = this._get_typed_lightbox_config(this.getLightboxType());\r\n\t\tfor (var i = 0; i < sns.length; i++) {\r\n\t\t\tvar section = sns[i];\r\n\r\n\t\t\tif (!this.form_blocks[section.type]) {\r\n\t\t\t\tcontinue;//skip incorrect sections, same check is done during rendering\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar node = gantt._lightbox_root.querySelector(\"#\" + section.id).nextSibling;\r\n\t\t\tvar block = this.form_blocks[section.type];\r\n\t\t\tvar map_to = gantt._resolve_default_mapping(sns[i]);\r\n\t\t\tvar value = this.defined(task[map_to]) ? task[map_to] : section.default_value;\r\n\t\t\tblock.set_value.call(gantt, node, value, task, section);\r\n\r\n\t\t\tif (section.focus)\r\n\t\t\t\tblock.focus.call(gantt, node);\r\n\t\t}\r\n\t\tif (gantt.isTaskExists(data.id)){\r\n\t\t\tgantt._lightbox_id = data.id;\r\n\t\t}\r\n\t};\r\n\tgantt._fill_lightbox = function (id, box) {\r\n\t\tvar task = this.getTask(id);\r\n\t\tthis._set_lightbox_values(task, box);\r\n\t};\r\n\r\n\r\n\tgantt.getLightboxSection = function (name) {\r\n\t\tvar config = this._get_typed_lightbox_config();\r\n\t\tvar i = 0;\r\n\t\tfor (i; i < config.length; i++)\r\n\t\t\tif (config[i].name == name)\r\n\t\t\t\tbreak;\r\n\t\tvar section = config[i];\r\n\t\tif (!section)\r\n\t\t\treturn null;\r\n\r\n\t\tif (!this._lightbox)\r\n\t\t\tthis.getLightbox();\r\n\t\tvar header = gantt._lightbox_root.querySelector(\"#\" + section.id);\r\n\t\tvar node = header.nextSibling;\r\n\r\n\t\tvar result = {\r\n\t\t\tsection: section,\r\n\t\t\theader: header,\r\n\t\t\tnode: node,\r\n\t\t\tgetValue: function (ev) {\r\n\t\t\t\treturn gantt.form_blocks[section.type].get_value.call(gantt, node, (ev || {}), section);\r\n\t\t\t},\r\n\t\t\tsetValue: function (value, ev) {\r\n\t\t\t\treturn gantt.form_blocks[section.type].set_value.call(gantt, node, value, (ev || {}), section);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar handler = this._lightbox_methods[\"get_\" + section.type + \"_control\"];\r\n\t\treturn handler ? handler(result) : result;\r\n\t};\r\n\r\n\tgantt._lightbox_methods.get_template_control = function (result) {\r\n\t\tresult.control = result.node;\r\n\t\treturn result;\r\n\t};\r\n\tgantt._lightbox_methods.get_select_control = function (result) {\r\n\t\tresult.control = result.node.getElementsByTagName(\"select\")[0];\r\n\t\treturn result;\r\n\t};\r\n\tgantt._lightbox_methods.get_textarea_control = function (result) {\r\n\t\tresult.control = result.node.getElementsByTagName(\"textarea\")[0];\r\n\t\treturn result;\r\n\t};\r\n\tgantt._lightbox_methods.get_time_control = function (result) {\r\n\t\tresult.control = result.node.getElementsByTagName(\"select\"); // array\r\n\t\treturn result;\r\n\t};\r\n\r\n\r\n\tgantt._init_dnd_events = function () {\r\n\t\tvar eventElement = gantt._lightbox_root;\r\n\t\tthis.event(eventElement, \"mousemove\", gantt._move_while_dnd);\r\n\t\tthis.event(eventElement, \"mouseup\", gantt._finish_dnd);\r\n\t\tthis.event(eventElement, \"touchmove\", function (e){\r\n\t\t\tgantt._move_while_dnd(e.touches[0]);\r\n\t\t});\r\n\t\tthis.event(eventElement, \"touchend\", function (e){\r\n\t\t\tgantt._finish_dnd(e.touches[0]);\r\n\t\t});\r\n\t\t// GS-1952: In Salesforce environment, the lightbox is attached to the Gantt container. \r\n\t\t// So when Gantt is reinitialized, the events are no longer attached to the Gantt container.\r\n\t\t// gantt._init_dnd_events = function () {\r\n\t\t// };\r\n\t};\r\n\tgantt._move_while_dnd = function (event) {\r\n\t\tif (gantt._dnd_start_lb) {\r\n\t\t\tif (!document.gantt_unselectable) {\r\n\t\t\t\tgantt._lightbox_root.className += \" gantt_unselectable\";\r\n\t\t\t\tdocument.gantt_unselectable = true;\r\n\t\t\t}\r\n\t\t\tvar lb = gantt.getLightbox();\r\n\t\t\tvar now = [event.pageX, event.pageY];\r\n\t\t\tlb.style.top = gantt._lb_start[1] + now[1] - gantt._dnd_start_lb[1] + \"px\";\r\n\t\t\tlb.style.left = gantt._lb_start[0] + now[0] - gantt._dnd_start_lb[0] + \"px\";\r\n\t\t}\r\n\t};\r\n\tgantt._ready_to_dnd = function (event) {\r\n\t\tvar lb = gantt.getLightbox();\r\n\t\tgantt._lb_start = [lb.offsetLeft, lb.offsetTop];\r\n\t\tgantt._dnd_start_lb = [event.pageX, event.pageY];\r\n\t};\r\n\tgantt._finish_dnd = function () {\r\n\t\tif (gantt._lb_start) {\r\n\t\t\tgantt._lb_start = gantt._dnd_start_lb = false;\r\n\t\t\tgantt._lightbox_root.className = gantt._lightbox_root.className.replace(\" gantt_unselectable\", \"\");\r\n\t\t\tdocument.gantt_unselectable = false;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tgantt._focus = function (node, select) {\r\n\t\tif (node && node.focus) {\r\n\t\t\tif (gantt.config.touch) {\r\n\t\t\t\t//do not focus editor, to prevent auto-zoom\r\n\t\t\t} else {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (select && node.select) node.select();\r\n\t\t\t\t\tnode.focus();\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\t// silent errors\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tgantt.form_blocks = {\r\n\t\tgetTimePicker: function (sns, hidden) {\r\n\t\t\tvar html = \"\";\r\n\t\t\tvar cfg = this.config;\r\n\t\t\tvar i;\r\n\t\t\tvar options;\r\n\t\t\tvar ariaAttrs;\r\n\t\t\tvar readonly;\r\n\t\t\tvar display;\r\n\t\t\tvar settings = {\r\n\t\t\t\tfirst: 0,\r\n\t\t\t\tlast: 24 * 60,\r\n\t\t\t\tdate: this.date.date_part(new Date(gantt._min_date.valueOf())),\r\n\t\t\t\ttimeFormat: getTimeFormat(sns)\r\n\t\t\t};\r\n\r\n\t\t\t// map: default order => real one\r\n\t\t\tsns._time_format_order = { size: 0 };\r\n\r\n\t\t\tif (gantt.config.limit_time_select) {\r\n\t\t\t\tsettings.first = 60 * cfg.first_hour;\r\n\t\t\t\tsettings.last = 60 * cfg.last_hour + 1;\r\n\t\t\t\tsettings.date.setHours(cfg.first_hour);\r\n\t\t\t}\r\n\r\n\t\t\tfor (i = 0; i < settings.timeFormat.length; i++) {\r\n\t\t\t\t// adding spaces between selects\r\n\t\t\t\tif (i > 0) {\r\n\t\t\t\t\thtml += \" \";\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions = getHtmlTimePickerOptions(sns, i, settings);\r\n\r\n\t\t\t\tif (options) {\r\n\t\t\t\t\tariaAttrs = gantt._waiAria.lightboxSelectAttrString(settings.timeFormat[i]);\r\n\t\t\t\t\treadonly = sns.readonly ? \"disabled='disabled'\" : \"\";\r\n\t\t\t\t\tdisplay = hidden ? \" style='display:none' \" : \"\";\r\n\t\t\t\t\thtml += \"\" + options + \" \";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn html;\r\n\t\t},\r\n\t\tgetTimePickerValue: function (selects, config, offset) {\r\n\t\t\tvar map = config._time_format_order;\r\n\t\t\tvar needSetTime = gantt.defined(map[3]);\r\n\r\n\t\t\tvar time;\r\n\t\t\tvar hours = 0;\r\n\t\t\tvar minutes = 0;\r\n\r\n\t\t\tvar mapOffset = offset || 0;\r\n\r\n\t\t\tif (needSetTime) {\r\n\t\t\t\ttime = parseInt(selects[map[3] + mapOffset].value, 10);\r\n\t\t\t\thours = Math.floor(time / 60);\r\n\t\t\t\tminutes = time % 60;\r\n\t\t\t}\r\n\t\t\treturn new Date(selects[map[2] + mapOffset].value, selects[map[1] + mapOffset].value, selects[map[0] + mapOffset].value, hours, minutes);\r\n\t\t},\r\n\r\n\t\t_fill_lightbox_select: function (s, i, d, map) {\r\n\t\t\ts[i + map[0]].value = d.getDate();\r\n\t\t\ts[i + map[1]].value = d.getMonth();\r\n\t\t\ts[i + map[2]].value = d.getFullYear();\r\n\t\t\tif (gantt.defined(map[3])) {\r\n\t\t\t\tvar v = d.getHours() * 60 + d.getMinutes();\r\n\t\t\t\tv = Math.round(v / gantt._get_timepicker_step()) * gantt._get_timepicker_step();\r\n\t\t\t\tvar input = s[i + map[3]];\r\n\t\t\t\tinput.value = v;\r\n\t\t\t\t//in case option not shown\r\n\t\t\t\tinput.setAttribute(\"data-value\", v);\r\n\t\t\t}\r\n\t\t},\r\n\t\ttemplate: new TemplateControl(),\r\n\t\ttextarea: new TextareaControl(),\r\n\t\tselect: new SelectControl(),\r\n\t\ttime: new TimeControl(),\r\n\t\tduration: new DurationControl(),\r\n\t\tparent: new ParentControl(),\r\n\t\tradio: new RadioControl(),\r\n\t\tcheckbox: new CheckboxControl(),\r\n\t\tresources: new ResourcesControl(),\r\n\t\tconstraint: new ConstraintControl(),\r\n\t\tbaselines: new BaselineControl(),\r\n\t\ttypeselect: new TypeselectControl()\r\n\t};\r\n\r\n\tgantt._is_lightbox_timepicker = function () {\r\n\t\tvar s = this._get_typed_lightbox_config();\r\n\t\tfor (var i = 0; i < s.length; i++)\r\n\t\t\tif (s[i].name == \"time\" && s[i].type == \"time\")\r\n\t\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\r\n\tgantt._simple_confirm = function (message, title, callback, ok) {\r\n\t\tif (!message)\r\n\t\t\treturn callback();\r\n\t\tvar opts = { text: message };\r\n\t\tif (title)\r\n\t\t\topts.title = title;\r\n\t\tif (ok) {\r\n\t\t\topts.ok = ok;\r\n\t\t}\r\n\t\tif (callback) {\r\n\t\t\topts.callback = function (result) {\r\n\t\t\t\tif (result)\r\n\t\t\t\t\tcallback();\r\n\t\t\t};\r\n\t\t}\r\n\t\tgantt.confirm(opts);\r\n\t};\r\n\r\n\tfunction _get_type_name(type_value) {\r\n\t\tfor (var i in this.config.types) {\r\n\t\t\tif (this.config.types[i] == type_value) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"task\";\r\n\t}\r\n\r\n\tgantt._get_typed_lightbox_config = function (type) {\r\n\t\tif (type === undefined) {\r\n\t\t\ttype = this.getLightboxType();\r\n\t\t}\r\n\r\n\t\tvar field = _get_type_name.call(this, type);\r\n\r\n\t\tif (gantt.config.lightbox[field + \"_sections\"]) {\r\n\t\t\treturn gantt.config.lightbox[field + \"_sections\"];\r\n\t\t} else {\r\n\t\t\treturn gantt.config.lightbox.sections;\r\n\t\t}\r\n\t};\r\n\r\n\tgantt._silent_redraw_lightbox = function (type) {\r\n\t\tvar oldType = this.getLightboxType();\r\n\r\n\t\tif (this.getState().lightbox) {\r\n\t\t\tvar taskId = this.getState().lightbox;\r\n\t\t\tvar formData = this.getLightboxValues(),\r\n\t\t\t\ttask = this.copy(this.getTask(taskId));\r\n\r\n\t\t\tthis.resetLightbox();\r\n\r\n\t\t\tvar updTask = this.mixin(task, formData, true);\r\n\t\t\tvar box = this.getLightbox(type ? type : undefined);\r\n\t\t\tthis._set_lightbox_values(updTask, box);\r\n\t\t\tthis.showCover(box);\r\n\t\t} else {\r\n\t\t\tthis.resetLightbox();\r\n\t\t\tthis.getLightbox(type ? type : undefined);\r\n\t\t}\r\n\t\tthis.callEvent(\"onLightboxChange\", [oldType, this.getLightboxType()]);\r\n\t};\r\n\r\n\tfunction bindLabelsToInputs(sns) {\r\n\t\tvar section;\r\n\t\tvar label;\r\n\t\tvar labelBlock;\r\n\t\tvar inputBlock;\r\n\t\tvar input;\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 0; i < sns.length; i++) {\r\n\t\t\tsection = sns[i];\r\n\t\t\tlabelBlock = gantt._lightbox_root.querySelector(\"#\" + section.id);\r\n\r\n\t\t\tif (!section.id || !labelBlock) continue;\r\n\r\n\t\t\tlabel = labelBlock.querySelector(\"label\");\r\n\t\t\tinputBlock = labelBlock.nextSibling;\r\n\r\n\t\t\tif (!inputBlock) continue;\r\n\r\n\t\t\tinput = inputBlock.querySelector(\"input, select, textarea\");\r\n\t\t\tif (input) {\r\n\t\t\t\tinput.id = input.id || \"input_\" + gantt.uid();\r\n\t\t\t\tsection.inputId = input.id;\r\n\t\t\t\tlabel.setAttribute(\"for\", section.inputId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getHtmlButtons(buttons, floatRight) {\r\n\t\tvar button;\r\n\t\tvar ariaAttr;\r\n\t\tvar html = \"\";\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 0; i < buttons.length; i++) {\r\n\t\t\t// needed to migrate from 'dhx_something' to 'gantt_something' naming in a lightbox\r\n\t\t\tbutton = gantt.config._migrate_buttons[buttons[i]] ? gantt.config._migrate_buttons[buttons[i]] : buttons[i];\r\n\r\n\t\t\tariaAttr = gantt._waiAria.lightboxButtonAttrString(button);\r\n\t\t\thtml += \"\";\r\n\t\t}\r\n\t\treturn html;\r\n\t}\r\n\r\n\tfunction getTimeFormat(sns) {\r\n\t\tvar scale;\r\n\t\tvar unit;\r\n\t\tvar result;\r\n\r\n\t\tif (sns.time_format) return sns.time_format;\r\n\r\n\t\t// default order\r\n\t\tresult = [\"%d\", \"%m\", \"%Y\"];\r\n\t\tscale = gantt.getScale();\r\n\t\tunit = scale ? scale.unit : gantt.config.duration_unit;\r\n\t\tif (helpers.getSecondsInUnit(unit) < helpers.getSecondsInUnit(\"day\")) {\r\n\t\t\tresult.push(\"%H:%i\");\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction getHtmlTimePickerOptions(sns, index, settings) {\r\n\t\tvar range;\r\n\t\tvar offset;\r\n\t\tvar start_year;\r\n\t\tvar end_year;\r\n\t\tvar i;\r\n\t\tvar time;\r\n\t\tvar diff;\r\n\t\tvar tdate;\r\n\t\tvar html = \"\";\r\n\r\n\t\tswitch (settings.timeFormat[index]) {\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\tsns._time_format_order[2] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//year\r\n\r\n\t\t\t\tif (sns.year_range) {\r\n\t\t\t\t\tif (!isNaN(sns.year_range)) {\r\n\t\t\t\t\t\trange = sns.year_range;\r\n\t\t\t\t\t} else if (sns.year_range.push) {\r\n\t\t\t\t\t\t// if\r\n\t\t\t\t\t\tstart_year = sns.year_range[0];\r\n\t\t\t\t\t\tend_year = sns.year_range[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trange = range || 10;\r\n\t\t\t\toffset = offset || Math.floor(range / 2);\r\n\t\t\t\tstart_year = start_year || settings.date.getFullYear() - offset;\r\n\t\t\t\tend_year = end_year || gantt.getState().max_date.getFullYear() + offset;\r\n\r\n\t\t\t\tfor (i = start_year; i < end_year; i++)\r\n\t\t\t\t\thtml += \"\" + (i) + \" \";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%m\":\r\n\t\t\t\tsns._time_format_order[1] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//month\r\n\t\t\t\tfor (i = 0; i < 12; i++)\r\n\t\t\t\t\thtml += \"\" + gantt.locale.date.month_full[i] + \" \";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%d\":\r\n\t\t\t\tsns._time_format_order[0] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//days\r\n\t\t\t\tfor (i = 1; i < 32; i++)\r\n\t\t\t\t\thtml += \"\" + i + \" \";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%H:%i\":\r\n\t\t\t\t// var last = 24*60, first = 0;\r\n\t\t\t\tsns._time_format_order[3] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//hours\r\n\t\t\t\ti = settings.first;\r\n\t\t\t\ttdate = settings.date.getDate();\r\n\t\t\t\tsns._time_values = [];\r\n\r\n\t\t\t\twhile (i < settings.last) {\r\n\t\t\t\t\ttime = gantt.templates.time_picker(settings.date);\r\n\t\t\t\t\thtml += \"\" + time + \" \";\r\n\t\t\t\t\tsns._time_values.push(i);\r\n\t\t\t\t\tsettings.date.setTime(settings.date.valueOf() + gantt._get_timepicker_step() * 60 * 1000);\r\n\t\t\t\t\tdiff = (settings.date.getDate() != tdate) ? 1 : 0; // moved or not to the next day\r\n\t\t\t\t\ti = diff * 24 * 60 + settings.date.getHours() * 60 + settings.date.getMinutes();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn html;\r\n\t}\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TemplateControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(TemplateControl, _super);\r\n\r\n\r\n\tTemplateControl.prototype.render = function(sns) {\r\n\t\tlet height = sns.height ? `${sns.height}px` : '';\r\n\t\treturn `
`;\r\n\t};\r\n\r\n\tTemplateControl.prototype.set_value = function(node, value) {\r\n\t\tnode.innerHTML = value || \"\";\r\n\t};\r\n\r\n\tTemplateControl.prototype.get_value = function(node) {\r\n\t\treturn node.innerHTML || \"\";\r\n\t};\r\n\r\n\tTemplateControl.prototype.focus = function() {};\r\n\r\n\treturn TemplateControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TextareaControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(TextareaControl, _super);\r\n\r\n\tTextareaControl.prototype.render = function(sns) {\r\n\t\tconst height = (sns.height || \"130\") + \"px\";\r\n\t\tconst placeholder = sns.placeholder ? `placeholder='${sns.placeholder}'` : \"\";\r\n\t\treturn `
`;\r\n\t};\r\n\r\n\tTextareaControl.prototype.set_value = function(node, value) {\r\n\t\tgantt.form_blocks.textarea._get_input(node).value = value || \"\";\r\n\t};\r\n\r\n\tTextareaControl.prototype.get_value = function(node) {\r\n\t\treturn gantt.form_blocks.textarea._get_input(node).value;\r\n\t};\r\n\r\n\tTextareaControl.prototype.focus = function(node) {\r\n\t\tvar a = gantt.form_blocks.textarea._get_input(node);\r\n\t\tgantt._focus(a, true);\r\n\t};\r\n\r\n\tTextareaControl.prototype._get_input = function(node) {\r\n\t\treturn node.querySelector(\"textarea\");\r\n\t};\r\n\r\n\treturn TextareaControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TimeControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TimeControl, _super);\r\n\r\n\tTimeControl.prototype.render = function (sns) {\r\n\t\tvar time = gantt.form_blocks.getTimePicker.call(this, sns);\r\n\t\tlet sectionClassName = \"gantt_section_time\";\r\n\t\tif (sns.name !== \"time\"){\r\n\t\t\tsectionClassName += \" gantt_section_\" + sns.name;\r\n\t\t}\r\n\t\tvar html = \"\";\r\n\t\thtml += time;\r\n\r\n\t\tif (sns.single_date) {\r\n\t\t\ttime = gantt.form_blocks.getTimePicker.call(this, sns, true);\r\n\t\t\thtml += \" \";\r\n\t\t} else {\r\n\t\t\thtml += \" – \";\r\n\t\t}\r\n\r\n\t\thtml += time;\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tTimeControl.prototype.set_value = function (node, value, ev, config) {\r\n\t\tvar cfg = config;\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar map = config._time_format_order;\r\n\r\n\t\tif (cfg.auto_end_date) {\r\n\t\t\tvar _update_lightbox_select = function () {\r\n\t\t\t\tstart_date = new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, 0, 0);\r\n\t\t\t\tend_date = gantt.calculateEndDate({ start_date: start_date, duration: 1, task: ev });\r\n\t\t\t\tgantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\r\n\t\t\t};\r\n\t\t\tfor (var i = 0; i < 4; i++) {\r\n\t\t\t\ts[i].onchange = _update_lightbox_select;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar mapping = gantt._resolve_default_mapping(config);\r\n\r\n\t\tif (typeof (mapping) === \"string\") mapping = { start_date: mapping };\r\n\r\n\t\tvar start_date = ev[mapping.start_date] || new Date();\r\n\t\tvar end_date = ev[mapping.end_date] || gantt.calculateEndDate({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tduration: 1,\r\n\t\t\ttask: ev\r\n\t\t});\r\n\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\r\n\t};\r\n\r\n\tTimeControl.prototype.get_value = function (node, ev, config) {\r\n\t\tvar selects = node.getElementsByTagName(\"select\");\r\n\t\tvar startDate;\r\n\t\tvar map = config._time_format_order;\r\n\t\tfunction _getEndDate(selects, map, startDate) {\r\n\t\t\tvar endDate = gantt.form_blocks.getTimePickerValue(selects, config, map.size);\r\n\t\t\t// GS-1010: We need to add a way to obtain exact end_date for validation\r\n\t\t\tif (endDate <= startDate) { // when end date seems wrong\r\n\t\t\t\tif (config.autofix_end !== false || config.single_date) { // auto correct it in two cases - when the auto correction is not disabled, or when we have 'single date' control and the user don't have the UI to specify the end date\r\n\t\t\t\t\treturn gantt.date.add(startDate, gantt._get_timepicker_step(), \"minute\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn endDate;\r\n\t\t}\r\n\r\n\t\tstartDate = gantt.form_blocks.getTimePickerValue(selects, config);\r\n\r\n\t\tif (typeof gantt._resolve_default_mapping(config) === \"string\") {\r\n\t\t\treturn startDate;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: startDate,\r\n\t\t\tend_date: _getEndDate(selects, map, startDate)\r\n\t\t};\r\n\t};\r\n\r\n\tTimeControl.prototype.focus = function (node) {\r\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\r\n\t};\r\n\r\n\treturn TimeControl;\r\n};","import * as helpers from \"../../../../utils/helpers\";\r\nimport __extends from \"../../../../utils/extends\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction CheckboxControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(CheckboxControl, _super);\r\n\r\n\tCheckboxControl.prototype.render = function(sns) {\r\n\t\tconst height = sns.height ? `height:${sns.height}px;` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\tif (sns.options && sns.options.length) {\r\n\t\t\tfor (var i = 0; i < sns.options.length; i++) {\r\n\t\t\t\thtml += \" \" + sns.options[i].label + \" \";\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tsns.single_value = true;\r\n\t\t\thtml += \" \";\r\n\t\t}\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tCheckboxControl.prototype.set_value = function(node, value, ev, sns) {\r\n\t\tvar checkboxes = Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]\"));\r\n\r\n\t\tif (!node._dhx_onchange && sns.onchange) {\r\n\t\t\tnode.onchange = sns.onchange;\r\n\t\t\tnode._dhx_onchange = true;\r\n\t\t}\r\n\r\n\t\tif(sns.single_value){\r\n\t\t\tvar box = checkboxes[0];\r\n\t\t\tbox.checked = !!value;\r\n\t\t}else{\r\n\t\t\thelpers.forEach(checkboxes, function(entry) {\r\n\t\t\t\tentry.checked = value ? value.indexOf(entry.value) >= 0 : false;\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tCheckboxControl.prototype.get_value = function(node, task, sns) {\r\n\t\tif(sns.single_value){\r\n\t\t\tvar box = node.querySelector(\"input[type=checkbox]\");\r\n\t\t\treturn box.checked;\r\n\t\t}else{\r\n\t\t\treturn helpers.arrayMap(Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]:checked\")), function(entry) {\r\n\t\t\t\treturn entry.value;\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tCheckboxControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.querySelector(\"input[type=checkbox]\"));\r\n\t};\r\n\r\n\treturn CheckboxControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction RadioControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(RadioControl, _super);\r\n\r\n\tRadioControl.prototype.render = function(sns) {\r\n\t\tconst height = sns.height ? `${sns.height}px` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\tif (sns.options && sns.options.length) {\r\n\t\t\tfor (var i = 0; i < sns.options.length; i++) {\r\n\t\t\t\thtml += \" \" + sns.options[i].label + \" \";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tRadioControl.prototype.set_value = function(node, value, ev, sns) {\r\n\t\tvar radio;\r\n\r\n\t\tif (!sns.options || !sns.options.length) return;\r\n\r\n\t\tradio = node.querySelector(\"input[type=radio][value='\" + value + \"']\") ||\r\n\t\t\t\tnode.querySelector(\"input[type=radio][value='\" + sns.default_value + \"']\");\r\n\r\n\t\tif (!radio) return;\r\n\r\n\t\tif (!node._dhx_onchange && sns.onchange) {\r\n\t\t\tnode.onchange = sns.onchange;\r\n\t\t\tnode._dhx_onchange = true;\r\n\t\t}\r\n\r\n\t\tradio.checked = true;\r\n\t};\r\n\r\n\tRadioControl.prototype.get_value = function(node, ev) {\r\n\t\tvar result = node.querySelector(\"input[type=radio]:checked\");\r\n\r\n\t\treturn result ? result.value : \"\";\r\n\t};\r\n\r\n\tRadioControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.querySelector(\"input[type=radio]\"));\r\n\t};\r\n\r\n\treturn RadioControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport DurationFormatterNumeric from \"../../../common/duration_formatter_numeric\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction DurationControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || new DurationFormatterNumeric();\r\n\t}\r\n\r\n\t__extends(DurationControl, _super);\r\n\r\n\tDurationControl.prototype.render = function(sns) {\r\n\t\tvar time = \"\" + gantt.form_blocks.getTimePicker.call(this, sns) + \"
\";\r\n\t\tvar label = \" \"+ gantt.locale.labels[gantt.config.duration_unit + \"s\"] +\" \";\r\n\t\tvar singleDate = sns.single_date ? \" style='display:none'\" : \"\";\r\n\t\tvar readonly = sns.readonly ? \" disabled='disabled'\" : \"\";\r\n\t\tvar ariaAttr = gantt._waiAria.lightboxDurationInputAttrString(sns);\r\n\r\n\t\tvar durationInputClass = \"gantt_duration_value\";\r\n\t\tif(sns.formatter) {\r\n\t\t\tlabel = \"\";\r\n\t\t\tdurationInputClass += \" gantt_duration_value_formatted\" ;\r\n\t\t}\r\n\r\n\t\tvar duration = \"\" +\r\n\t\t\t\"\";\r\n\t\tlet sectionClassName = \"gantt_section_time gantt_section_duration\";\r\n\t\tif (sns.name !== \"time\"){\r\n\t\t\tsectionClassName += \" gantt_section_\" + sns.name;\r\n\t\t}\t\r\n\t\tvar html = \"\" + time + \" \" + duration + \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tDurationControl.prototype.set_value = function(node, value, ev, config) {\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar inps = node.getElementsByTagName(\"input\");\r\n\t\tvar duration = inps[1];\r\n\t\tvar btns = [inps[0], inps[2]];\r\n\t\tvar endspan = node.getElementsByTagName(\"span\")[0];\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar mapping;\r\n\t\tvar start_date;\r\n\t\tvar end_date;\r\n\t\tvar duration_val;\r\n\r\n\t\tfunction _calc_date() {\r\n\t\t\tvar start_date = _getStartDate.call(gantt, node, config);\r\n\t\t\tvar duration = _getDuration.call(gantt, node, config);\r\n\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: ev});\r\n\r\n\t\t\tvar template = gantt.templates.task_end_date || gantt.templates.task_date;\r\n\t\t\tendspan.innerHTML = template(end_date);\r\n\t\t}\r\n\r\n\t\tfunction _change_duration(step) {\r\n\t\t\tvar value = duration.value;\r\n\r\n\t\t\tvalue = getFormatter(config).parse(value);\r\n\t\t\tif (window.isNaN(value))\r\n\t\t\t\tvalue = 0;\r\n\t\t\tvalue += step;\r\n\t\t\tif (value < 1) value = 1;\r\n\t\t\tduration.value = getFormatter(config).format(value);\r\n\t\t\t_calc_date();\r\n\t\t}\r\n\r\n\t\tbtns[0].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t}, this);\r\n\t\tbtns[1].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t}, this);\r\n\t\ts[0].onchange = _calc_date;\r\n\t\ts[1].onchange = _calc_date;\r\n\t\ts[2].onchange = _calc_date;\r\n\t\tif (s[3]) s[3].onchange = _calc_date;\r\n\r\n\t\tduration.onkeydown = gantt.bind(function(e) {\r\n\t\t\tvar code; \r\n\r\n\t\t\te = e || window.event;\r\n\t\t\tcode = (e.charCode || e.keyCode || e.which);\r\n\t\t\t\r\n\t\t\tif (code == gantt.constants.KEY_CODES.DOWN) {\r\n\t\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (code == gantt.constants.KEY_CODES.UP) {\r\n\t\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\twindow.setTimeout(_calc_date, 1);\r\n\t\t}, this);\r\n\r\n\t\tduration.onchange = gantt.bind(_calc_date, this);\r\n\r\n\t\tmapping = gantt._resolve_default_mapping(config);\r\n\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\r\n\r\n\t\tstart_date = ev[mapping.start_date] || new Date();\r\n\t\tend_date = ev[mapping.end_date] || gantt.calculateEndDate({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tduration: 1,\r\n\t\t\ttask: ev\r\n\t\t});\r\n\t\tduration_val = Math.round(ev[mapping.duration]) || gantt.calculateDuration({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tend_date: end_date,\r\n\t\t\ttask: ev\r\n\t\t});\r\n\t\tduration_val = getFormatter(config).format(duration_val);\r\n\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, config);\r\n\t\tduration.value = duration_val;\r\n\t\t_calc_date();\r\n\t};\r\n\r\n\tDurationControl.prototype.get_value = function(node, ev, config) {\r\n\t\tvar startDate = _getStartDate(node, config);\r\n\t\tvar duration = _getDuration(node, config);\r\n\t\tvar endDate = gantt.calculateEndDate({start_date: startDate, duration: duration, task: ev});\r\n\r\n\t\tif (typeof gantt._resolve_default_mapping(config) == \"string\") {\r\n\t\t\treturn startDate;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: startDate,\r\n\t\t\tend_date: endDate,\r\n\t\t\tduration: duration\r\n\t\t};\r\n\t};\r\n\r\n\tDurationControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\r\n\t};\r\n\r\n\r\n\tfunction _getStartDate(node, config) {\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar hours = 0;\r\n\t\tvar minutes = 0;\r\n\r\n\t\tif (gantt.defined(map[3])) {\r\n\t\t\tvar input = s[map[3]];\r\n\t\t\tvar time = parseInt(input.value, 10);\r\n\t\t\tif (isNaN(time) && input.hasAttribute(\"data-value\")) {\r\n\t\t\t\ttime = parseInt(input.getAttribute(\"data-value\"), 10);\r\n\t\t\t}\r\n\r\n\t\t\thours = Math.floor(time / 60);\r\n\t\t\tminutes = time % 60;\r\n\t\t}\r\n\t\treturn new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\r\n\t}\r\n\r\n\tfunction _getDuration(node, config) {\r\n\t\tvar duration = node.getElementsByTagName(\"input\")[1];\r\n\r\n\t\tduration = getFormatter(config).parse(duration.value);\r\n\t\tif (!duration || window.isNaN(duration)) duration = 1;\r\n\t\tif (duration < 0) duration *= -1;\r\n\t\treturn duration;\r\n\t}\r\n\r\n\treturn DurationControl; \r\n};","import __extends from \"../../../../utils/extends\";\r\nimport htmlHelpers from \"../../utils/html_helpers\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction ConstraintControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(ConstraintControl, _super);\r\n\r\n\tfunction isNonTimedConstraint(value) {\r\n\t\tif (!value || value === gantt.config.constraint_types.ASAP || value === gantt.config.constraint_types.ALAP) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleTimeSelect(timeSelects, typeValue) {\r\n\t\tvar isNonTimed = isNonTimedConstraint(typeValue);\r\n\t\tfor (var i = 0; i < timeSelects.length; i++) {\r\n\t\t\ttimeSelects[i].disabled = isNonTimed;\r\n\t\t}\r\n\t}\r\n\r\n\tConstraintControl.prototype.render = function (sns) {\r\n\t\tconst height = sns.height ? `height:${sns.height}px;` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\tvar options = [];\r\n\t\tfor (var i in gantt.config.constraint_types) {\r\n\t\t\toptions.push({ key: gantt.config.constraint_types[i], label: gantt.locale.labels[gantt.config.constraint_types[i]] });\r\n\t\t}\r\n\r\n\t\tsns.options = sns.options || options;\r\n\r\n\t\thtml += \"\" + htmlHelpers.getHtmlSelect(sns.options, [{ key: \"data-type\", value: \"constraint-type\" }]) + \" \";\r\n\r\n\t\tvar timeLabel = gantt.locale.labels[\"constraint_date\"] || \"Constraint date\";\r\n\t\thtml += \"\" + timeLabel + \": \" + gantt.form_blocks.getTimePicker.call(this, sns) + \" \";\r\n\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tConstraintControl.prototype.set_value = function (node, value, task, config) {\r\n\t\tvar typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\r\n\t\tvar timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\r\n\t\tvar map = config._time_format_order;\r\n\r\n\t\tvar mapping = gantt._resolve_default_mapping(config);\r\n\r\n\t\tif (!typeSelect._eventsInitialized) {\r\n\t\t\ttypeSelect.addEventListener(\"change\", function (e) {\r\n\t\t\t\ttoggleTimeSelect(timeSelects, e.target.value);\r\n\t\t\t});\r\n\t\t\ttypeSelect._eventsInitialized = true;\r\n\t\t}\r\n\r\n\t\tvar constraintDate = task[mapping.constraint_date] || new Date();\r\n\t\tgantt.form_blocks._fill_lightbox_select(timeSelects, 0, constraintDate, map, config);\r\n\r\n\t\tvar constraintType = task[mapping.constraint_type] || gantt.getConstraintType(task);\r\n\t\ttypeSelect.value = constraintType;\r\n\t\ttoggleTimeSelect(timeSelects, constraintType);\r\n\t};\r\n\r\n\tConstraintControl.prototype.get_value = function (node, task, config) {\r\n\t\tvar typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\r\n\t\tvar timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\r\n\r\n\t\tvar constraintType = typeSelect.value;\r\n\t\tvar constraintDate = null;\r\n\t\tif (!isNonTimedConstraint(constraintType)) {\r\n\t\t\tconstraintDate = gantt.form_blocks.getTimePickerValue(timeSelects, config);\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tconstraint_type: constraintType,\r\n\t\t\tconstraint_date: constraintDate\r\n\t\t};\r\n\t};\r\n\r\n\tConstraintControl.prototype.focus = function (node) {\r\n\t\tgantt._focus(node.querySelector(\"select\"));\r\n\t};\r\n\r\n\treturn ConstraintControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./select_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TypeselectControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TypeselectControl, _super);\r\n\r\n\tTypeselectControl.prototype.render = function(sns) {\r\n\t\tvar types = gantt.config.types,\r\n\t\t\tlocale = gantt.locale.labels,\r\n\t\t\toptions = [];\r\n\r\n\t\tvar filter = sns.filter || function (typeKey, typeValue) {\r\n\t\t\tif (!types.placeholder || typeValue !== types.placeholder) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\t\tfor (var i in types) {\r\n\t\t\tif (!filter(i, types[i]) === false) {\r\n\t\t\t\toptions.push({ key: types[i], label: locale[\"type_\" + i] });\r\n\t\t\t}\r\n\t\t}\r\n\t\tsns.options = options;\r\n\r\n\t\tvar oldOnChange = sns.onchange;\r\n\t\tsns.onchange = function () {\r\n\t\t\tgantt._lightbox_current_type = this.value;\r\n\t\t\tgantt.changeLightboxType(this.value);\r\n\t\t\tif (typeof oldOnChange == 'function') {\r\n\t\t\t\toldOnChange.apply(this, arguments);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn _super.prototype.render.apply(this, arguments);\r\n\t};\r\n\r\n\treturn TypeselectControl;\r\n};\r\n","\r\nimport __extends from \"../../../../utils/extends\";\r\nimport DurationFormatterNumeric from \"../../../common/duration_formatter_numeric\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction DurationControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || new DurationFormatterNumeric();\r\n\t}\r\n\r\n\tfunction _generateBaselineRow (node, baseline, task, config){\r\n\t\tconst time = \"\" + gantt.form_blocks.getTimePicker.call(gantt, config) + \"
\";\r\n\t\tlet durationLabel = \" \"+ gantt.locale.labels[gantt.config.duration_unit + \"s\"] +\" \";\r\n\t\tconst singleDate = config.single_date ? \" style='display:none'\" : \"\";\r\n\t\tconst readonly = config.readonly ? \" disabled='disabled'\" : \"\";\r\n\t\tconst ariaAttr = gantt._waiAria.lightboxDurationInputAttrString(config);\r\n\t\tconst deleteLabel = gantt.locale.labels.baselines_remove_button;\r\n\r\n\t\tlet durationInputClass = \"gantt_duration_value\";\r\n\t\tif(config.formatter) {\r\n\t\t\tdurationLabel = \"\";\r\n\t\t\tdurationInputClass += \" gantt_duration_value_formatted\";\r\n\t\t}\r\n\r\n\t\tconst durationEl = \"\" +\r\n\t\t\t\"\";\r\n\r\n\t\tconst deleteButton = ``;\r\n\r\n\t\tconst baselineRow = document.createElement(\"div\");\r\n\t\tbaselineRow.className = \"gantt_section_time gantt_section_duration\";\r\n\t\tbaselineRow.setAttribute(\"data-baseline-id\", baseline.id);\r\n\t\tbaselineRow.innerHTML = time + durationEl + deleteButton + \" \";\r\n\t\tnode.appendChild(baselineRow);\r\n\r\n\t\tvar s = baselineRow.getElementsByTagName(\"select\");\r\n\t\tvar inps = baselineRow.getElementsByTagName(\"input\");\r\n\t\tvar duration = inps[1];\r\n\t\tvar btns = [inps[0], inps[2]];\r\n\t\tvar endspan = baselineRow.getElementsByTagName(\"span\")[0];\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar mapping;\r\n\t\tvar start_date;\r\n\t\tvar end_date;\r\n\t\tvar duration_val;\r\n\r\n\t\tconst deleteEl = baselineRow.querySelector(\".baseline_delete_button\");\r\n\t\tdeleteEl.onclick = function(e){\r\n\t\t\tconst section = baselineRow.parentNode;\r\n\t\t\tbaselineRow.innerHTML = \"\";\r\n\t\t\tbaselineRow.remove();\r\n\t\t\tif (section.innerHTML === \"\"){\r\n\t\t\t\tsection.innerHTML = gantt.locale.labels.baselines_section_placeholder;\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\r\n\t\tfunction _calc_date() {\r\n\t\t\tvar start_date = _getStartDate.call(gantt, baselineRow, config);\r\n\t\t\tvar duration = _getDuration.call(gantt, baselineRow, config);\r\n\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: task});\r\n\r\n\t\t\tvar template = gantt.templates.task_end_date || gantt.templates.task_date;\r\n\t\t\tendspan.innerHTML = template(end_date);\r\n\t\t}\r\n\r\n\t\tfunction _change_duration(step) {\r\n\t\t\tvar value = duration.value;\r\n\r\n\t\t\tvalue = getFormatter(config).parse(value);\r\n\t\t\tif (window.isNaN(value))\r\n\t\t\t\tvalue = 0;\r\n\t\t\tvalue += step;\r\n\t\t\tif (value < 1) value = 1;\r\n\t\t\tduration.value = getFormatter(config).format(value);\r\n\t\t\t_calc_date();\r\n\t\t}\r\n\r\n\t\tbtns[0].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t}, gantt);\r\n\t\tbtns[1].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t}, gantt);\r\n\t\ts[0].onchange = _calc_date;\r\n\t\ts[1].onchange = _calc_date;\r\n\t\ts[2].onchange = _calc_date;\r\n\t\tif (s[3]) s[3].onchange = _calc_date;\r\n\r\n\t\tduration.onkeydown = gantt.bind(function(e) {\r\n\t\t\tvar code; \r\n\r\n\t\t\te = e || window.event;\r\n\t\t\tcode = (e.charCode || e.keyCode || e.which);\r\n\t\t\t\r\n\t\t\tif (code == gantt.constants.KEY_CODES.DOWN) {\r\n\t\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (code == gantt.constants.KEY_CODES.UP) {\r\n\t\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\twindow.setTimeout(_calc_date, 1);\r\n\t\t}, gantt);\r\n\r\n\t\tduration.onchange = gantt.bind(_calc_date, gantt);\r\n\r\n\t\tmapping = gantt._resolve_default_mapping(config);\r\n\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\r\n\r\n\t\tstart_date = baseline.start_date || new Date();\r\n\t\tend_date = baseline.end_date || gantt.calculateEndDate({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tduration: 1,\r\n\t\t\ttask\r\n\t\t});\r\n\t\tduration_val = gantt.calculateDuration({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tend_date: end_date,\r\n\t\t\ttask\r\n\t\t});\r\n\t\tduration_val = getFormatter(config).format(duration_val);\r\n\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, config);\r\n\t\tduration.value = duration_val;\r\n\t\t_calc_date();\r\n\t}\r\n\r\n\t__extends(DurationControl, _super);\r\n\r\n\tDurationControl.prototype.render = function(sns) {\r\n\t\tconst baselineSection = `
`;\r\n\t\treturn baselineSection;\r\n\t};\r\n\r\n\tDurationControl.prototype.set_value = function(node, value, task, config) {\r\n\t\tif (task.baselines){\r\n\t\t\tnode.innerHTML = \"\";\r\n\r\n\t\t\ttask.baselines.forEach((baseline)=>{\r\n\t\t\t\t_generateBaselineRow(node, baseline, task, config);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tnode.innerHTML = gantt.locale.labels.baselines_section_placeholder;\r\n\t\t}\t\t\r\n\r\n\t};\r\n\r\n\tDurationControl.prototype.get_value = function(node, task, config) {\r\n\t\tconst baselines = [];\r\n\t\tconst baselineRows = node.querySelectorAll(`[data-baseline-id]`);\r\n\t\tbaselineRows.forEach((baselineNode)=>{\r\n\t\t\tconst baselineId = baselineNode.dataset.baselineId;\r\n\t\t\tconst baselineStore = gantt.getDatastore(\"baselines\");\r\n\t\t\tlet baseline = baselineStore.getItem(baselineId);\r\n\t\t\tlet updatedBaseline;\r\n\t\t\tif (baseline){\r\n\t\t\t\tupdatedBaseline = gantt.copy(baseline);\r\n\t\t\t} else {\r\n\t\t\t\tupdatedBaseline = {\r\n\t\t\t\t\tid: gantt.uid(),\r\n\t\t\t\t\ttask_id: task.id,\r\n\t\t\t\t\ttext: \"Baseline 1\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tupdatedBaseline.start_date = _getStartDate(baselineNode, config);\r\n\t\t\tupdatedBaseline.duration = _getDuration(baselineNode, config);\r\n\t\t\tupdatedBaseline.end_date = gantt.calculateEndDate({start_date: updatedBaseline.start_date, duration: updatedBaseline.duration, task});\r\n\r\n\t\t\tbaselines.push(updatedBaseline);\r\n\t\t});\r\n\r\n\t\treturn baselines;\r\n\t};\r\n\r\n\tDurationControl.prototype.button_click = function (index, el, section, container) {\r\n\t\tif (gantt.callEvent(\"onSectionButton\", [gantt._lightbox_id, section]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (el.closest(\".gantt_custom_button.gantt_remove_baselines\")){\r\n\t\t\tcontainer.innerHTML = gantt.locale.labels.baselines_section_placeholder;\r\n\t\t}\r\n\t\tif (el.closest(\".gantt_custom_button.gantt_add_baselines\")){\r\n\t\t\tif (container.innerHTML == gantt.locale.labels.baselines_section_placeholder){\r\n\t\t\t\tcontainer.innerHTML = \"\";\r\n\t\t\t}\r\n\t\t\tconst task = gantt.getTask(gantt._lightbox_id);\r\n\t\t\tconst baseline = {\r\n\t\t\t\tid: gantt.uid(),\r\n\t\t\t\ttask_id: task.id,\r\n\t\t\t\ttext: \"Baseline 1\",\r\n\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\tend_date: task.end_date\r\n\t\t\t};\r\n\t\t\tconst config = gantt._get_typed_lightbox_config()[index];\r\n\t\t\t_generateBaselineRow(container, baseline, task, config);\r\n\t\t}\r\n\t};\r\n\r\n\tDurationControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\r\n\t};\r\n\r\n\r\n\tfunction _getStartDate(node, config) {\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar hours = 0;\r\n\t\tvar minutes = 0;\r\n\r\n\t\tif (gantt.defined(map[3])) {\r\n\t\t\tvar input = s[map[3]];\r\n\t\t\tvar time = parseInt(input.value, 10);\r\n\t\t\tif (isNaN(time) && input.hasAttribute(\"data-value\")) {\r\n\t\t\t\ttime = parseInt(input.getAttribute(\"data-value\"), 10);\r\n\t\t\t}\r\n\r\n\t\t\thours = Math.floor(time / 60);\r\n\t\t\tminutes = time % 60;\r\n\t\t}\r\n\t\treturn new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\r\n\t}\r\n\r\n\tfunction _getDuration(node, config) {\r\n\t\tvar duration = node.getElementsByTagName(\"input\")[1];\r\n\r\n\t\tduration = getFormatter(config).parse(duration.value);\r\n\t\tif (!duration || window.isNaN(duration)) duration = 1;\r\n\t\tif (duration < 0) duration *= -1;\r\n\t\treturn duration;\r\n\t}\r\n\r\n\treturn DurationControl; \r\n};","import * as utils from \"../utils/utils\";\r\nimport env from \"../utils/env\";\r\nimport isHeadless from \"../utils/is_headless\";\r\nimport * as domHelpers from \"./ui/utils/dom_helpers\";\r\nimport * as codeHelpers from \"../utils/helpers\";\r\nimport domEventScope from \"./ui/utils/dom_event_scope\";\r\nimport messages from \"./ui/message\";\r\nimport ui from \"./ui/index\";\r\nimport createLayoutFacade from \"./facades/layout\";\r\nimport taskLayers from \"./data_task_layers\";\r\n\r\nimport skin from \"./ui/skin\";\r\nimport skyblue from \"../css/skins/skyblue\";\r\nimport meadow from \"../css/skins/meadow\";\r\nimport terrace from \"../css/skins/terrace\";\r\nimport broadway from \"../css/skins/broadway\";\r\nimport material from \"../css/skins/material\";\r\nimport dark from \"../css/skins/dark\";\r\nimport contrast_black from \"../css/skins/contrast_black\";\r\nimport contrast_white from \"../css/skins/contrast_white\";\r\nimport plugins from \"./ui/plugins\";\r\nimport touch from \"./ui/touch\";\r\nimport lightbox from \"./ui/lightbox\";\r\nimport lightbox_optional_time from \"./ui/lightbox/lightbox_optional_time\";\r\nimport wai_aria from \"./ui/wai_aria\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tif(!env.isNode){\r\n\r\n\t\tgantt.utils = {\r\n\t\t\tarrayFind: codeHelpers.arrayFind,\r\n\t\t\tdom: domHelpers\r\n\t\t};\r\n\r\n\t\tvar domEvents = domEventScope();\r\n\t\tgantt.event = domEvents.attach;\r\n\t\tgantt.eventRemove = domEvents.detach;\r\n\t\tgantt._eventRemoveAll = domEvents.detachAll;\r\n\t\tgantt._createDomEventScope = domEvents.extend;\r\n\r\n\t\tutils.mixin(gantt, messages(gantt));\r\n\t\tvar uiApi = ui.init(gantt);\r\n\t\tgantt.$ui = uiApi.factory;\r\n\t\tgantt.$ui.layers = uiApi.render;\r\n\t\tgantt.$mouseEvents = uiApi.mouseEvents;\r\n\t\tgantt.$services.setService(\"mouseEvents\", function () {\r\n\t\t\treturn gantt.$mouseEvents;\r\n\t\t});\r\n\t\tgantt.mixin(gantt, uiApi.layersApi);\r\n\r\n\t\ttaskLayers(gantt);\r\n\r\n\t\tgantt.$services.setService(\"layers\", function () {\r\n\t\t\treturn uiApi.layersService;\r\n\t\t});\r\n\r\n\t\tgantt.mixin(gantt, createLayoutFacade());\r\n\t\tskin(gantt);\r\n\t\tskyblue(gantt);\r\n\t\tdark(gantt);\r\n\t\tmeadow(gantt);\r\n\t\tterrace(gantt);\r\n\t\tbroadway(gantt);\r\n\t\tmaterial(gantt);\r\n\t\tcontrast_black(gantt);\r\n\t\tcontrast_white(gantt);\r\n\t\tplugins(gantt);\r\n\t\ttouch(gantt);\r\n\t\tlightbox(gantt);\r\n\t\tlightbox_optional_time(gantt);\r\n\t\twai_aria(gantt);\r\n\r\n\t\tgantt.locate = function(e) {\r\n\t\t\tvar trg = domHelpers.getTargetNode(e);\r\n\r\n\t\t\t// ignore empty rows/cells of the timeline\r\n\t\t\tif(domHelpers.closest(trg, \".gantt_task_row\")){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar targetAttribute = arguments[1] || this.config.task_attribute;\r\n\r\n\t\t\tvar node = domHelpers.locateAttribute(trg, targetAttribute);\r\n\t\t\tif(node){\r\n\t\t\t\treturn node.getAttribute(targetAttribute);\r\n\t\t\t}else{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tgantt._locate_css = function(e, classname, strict){\r\n\t\t\treturn domHelpers.locateClassName(e, classname, strict);\r\n\t\t};\r\n\r\n\t\tgantt._locateHTML = function(e, attribute) {\r\n\t\t\treturn domHelpers.locateAttribute(e, attribute || this.config.task_attribute);\r\n\t\t};\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onParse\", function(){\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tgantt.attachEvent(\"onGanttRender\", function(){\r\n\t\t\t\tif(gantt.config.initial_scroll){\r\n\t\t\t\t\tvar firstTask = gantt.getTaskByIndex(0);\r\n\t\t\t\t\tvar id = firstTask ? firstTask.id : gantt.config.root_id;\r\n\t\t\t\t\t// GS-1450. Don't scroll to the task if there is no timeline\r\n\t\t\t\t\tif(gantt.isTaskExists(id) && gantt.$task && gantt.utils.dom.isChildOf(gantt.$task, gantt.$container)){\r\n\t\t\t\t\t\tgantt.showTask(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, {once: true});\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tif (!this.config.scroll_size)\r\n\t\t\tthis.config.scroll_size = domHelpers.getScrollSize() || 15;\r\n\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\t// detach listeners before clearing old DOM, possible IE errors when accessing detached nodes\r\n\t\t\tthis._eventRemoveAll();\r\n\t\t\tthis.$mouseEvents.reset();\r\n\r\n\t\t\tthis.resetLightbox();\r\n\t\t}\r\n\r\n\t});\r\n\r\n\t// GS-1261: scroll the views to the right side when RTL is enabled\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(!isHeadless(gantt) && gantt.config.rtl){\r\n\t\t\tgantt.$layout.getCellsByType(\"viewCell\").forEach(function(cell){ \r\n\t\t\t\tvar attachedScrollbar = cell.$config.scrollX;\r\n\t\t\t\tif (!attachedScrollbar) return;\r\n\r\n\t\t\t\tvar scrollbar = gantt.$ui.getView(attachedScrollbar);\r\n\t\t\t\tif (scrollbar) scrollbar.scrollTo(scrollbar.$config.scrollSize,0);\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\r\n\t// GS-1649: check if extensions are connected via files\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(!isHeadless(gantt)){\r\n\r\n\t\t\tvar activePlugins = gantt.plugins();\r\n\r\n\t\t\tvar availablePlugins = {\r\n\t\t\t\tauto_scheduling: gantt.autoSchedule,\r\n\t\t\t\tclick_drag: gantt.ext.clickDrag,\r\n\t\t\t\tcritical_path: gantt.isCriticalTask,\r\n\t\t\t\tdrag_timeline: gantt.ext.dragTimeline,\r\n\t\t\t\texport_api: gantt.exportToPDF,\r\n\t\t\t\tfullscreen: gantt.ext.fullscreen,\r\n\t\t\t\tgrouping: gantt.groupBy,\r\n\t\t\t\tkeyboard_navigation: gantt.ext.keyboardNavigation,\r\n\t\t\t\tmarker: gantt.addMarker,\r\n\t\t\t\tmultiselect: gantt.eachSelectedTask,\r\n\t\t\t\toverlay: gantt.ext.overlay,\r\n\t\t\t\tquick_info: gantt.templates.quick_info_content,\r\n\t\t\t\ttooltip: gantt.ext.tooltips,\r\n\t\t\t\tundo: gantt.undo\r\n\t\t\t};\r\n\r\n\t\t\tfor (let plugin in availablePlugins){\r\n\t\t\t\tif (availablePlugins[plugin] && !activePlugins[plugin]){\r\n\t\t\t\t\t// eslint-disable-next-line no-console\r\n\t\t\t\t\tconsole.warn(`You connected the '${plugin}' extension via an obsolete file. \r\nTo fix it, you need to remove the obsolete file and connect the extension via the plugins method: https://docs.dhtmlx.com/gantt/api__gantt_plugins.html`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n};","export default function(gantt) {\r\n\tdelete gantt.addTaskLayer;\r\n\tdelete gantt.addLinkLayer;\r\n};","function createLayoutFacade(){\r\n\r\n\tfunction getTimeline(gantt){\r\n\t\treturn gantt.$ui.getView(\"timeline\");\r\n\t}\r\n\r\n\tfunction getGrid(gantt){\r\n\t\treturn gantt.$ui.getView(\"grid\");\r\n\t}\r\n\r\n\tfunction getBaseCell(gantt){\r\n\t\tvar timeline = getTimeline(gantt);\r\n\t\tif (timeline && !timeline.$config.hidden){\r\n\t\t\treturn timeline;\r\n\t\t} else{\r\n\t\t\tvar grid = getGrid(gantt);\r\n\t\t\tif (grid && !grid.$config.hidden){\r\n\t\t\t\treturn grid;\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getVerticalScrollbar(gantt){\r\n\t\tvar baseCell = null;\r\n\t\t// GS-1150: if we reorder or resize something in the grid, we should obtain the grid container\r\n\t\tvar gridDrag = false;\r\n\t\tvar gridMarkers = [\r\n\t\t\t\".gantt_drag_marker.gantt_grid_resize_area\",\r\n\t\t\t\".gantt_drag_marker .gantt_row.gantt_row_task\",\r\n\t\t\t\".gantt_drag_marker.gantt_grid_dnd_marker\"\r\n\t\t];\r\n\t\tgridMarkers.forEach(function (selector) {\r\n\t\t\tgridDrag = gridDrag || !!document.querySelector(selector);\r\n\t\t});\r\n\t\tif (gridDrag){\r\n\t\t\tbaseCell = getGrid(gantt);\r\n\t\t} else{\r\n\t\t\tbaseCell = getBaseCell(gantt);\r\n\t\t}\r\n\r\n\t\t// GS-1827. If there is no grid and timeline, there is no scrollbar for them\r\n\t\tif (!baseCell){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar verticalScrollbar = getAttachedScrollbar(gantt, baseCell, \"scrollY\");\r\n\t\treturn verticalScrollbar;\r\n\t}\r\n\r\n\tfunction getHorizontalScrollbar(gantt){\r\n\t\tvar baseCell = getBaseCell(gantt);\r\n\t\tif (!baseCell || baseCell.id == \"grid\"){\r\n\t\t\treturn null; // if the timeline is not displayed, do not return the scrollbar\r\n\t\t}\r\n\t\tvar horizontalScrollbar = getAttachedScrollbar(gantt, baseCell, \"scrollX\");\r\n\t\treturn horizontalScrollbar;\r\n\t}\r\n\r\n\tfunction getAttachedScrollbar(gantt, cell, type){\r\n\t\tvar attachedScrollbar = cell.$config[type];\r\n\t\tvar scrollbarView = gantt.$ui.getView(attachedScrollbar);\r\n\t\treturn scrollbarView;\r\n\t}\r\n\r\n\tvar DEFAULT_VALUE = \"DEFAULT_VALUE\";\r\n\r\n\tfunction tryCall(getView, method, args, fallback){\r\n\t\tvar view = getView(this);\r\n\t\tif (!(view && view.isVisible())) {\r\n\t\t\tif(fallback){\r\n\t\t\t\treturn fallback();\r\n\t\t\t}else{\r\n\t\t\t\treturn DEFAULT_VALUE;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn view[method].apply(view, args);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\r\n\t\tgetColumnIndex: function(name) {\r\n\t\t\tvar res = tryCall.call(this, getGrid, \"getColumnIndex\", [name]);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tdateFromPos: function(x) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"dateFromPos\", Array.prototype.slice.call(arguments));\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn this.getState().min_date;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tposFromDate: function(date) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"posFromDate\", [date]);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetRowTop: function(index) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getRowTop\", [index],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getRowTop\", [index]);}\r\n\t\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskTop: function(id) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getItemTop\", [id],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemTop\", [id]);}\r\n\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\tgetTaskPosition: function(task, start_date, end_date) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"getItemPosition\", [task, start_date, end_date]);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\tvar top = this.getTaskTop(task.id);\r\n\t\t\t\tvar height = this.getTaskBarHeight(task.id);\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: top,\r\n\t\t\t\t\theight: height,\r\n\t\t\t\t\twidth: 0\r\n\t\t\t\t};\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskBarHeight: function(taskId, isMilestoneRender) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getBarHeight\", [taskId, isMilestoneRender],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemHeight\", [taskId]);}\r\n\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskHeight: function(taskId) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getItemHeight\", [taskId],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemHeight\", [taskId]);}\r\n\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\tcolumnIndexByDate: function(date) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"columnIndexByDate\", [date]);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\troundTaskDates: function() {\r\n\t\t\ttryCall.call(this, getTimeline, \"roundTaskDates\", []);\r\n\t\t},\r\n\r\n\t\tgetScale: function() {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"getScale\", []);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn null;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskNode: function(id) {\r\n\t\t\tvar timeline = getTimeline(this);\r\n\t\t\tif (!timeline || !timeline.isVisible()) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\tvar node = timeline._taskRenderer.rendered[id];\r\n\t\t\t\tif(!node){\r\n\t\t\t\t\tvar domAttr = timeline.$config.item_attribute;\r\n\t\t\t\t\tnode = timeline.$task_bars.querySelector(\"[\" +domAttr+ \"='\"+id+\"']\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn node || null;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\tgetLinkNode: function(id) {\r\n\t\t\tvar timeline = getTimeline(this);\r\n\t\t\tif (!timeline.isVisible()) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\treturn timeline._linkRenderer.rendered[id];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tscrollTo: function(left, top){\r\n\t\t\tvar vertical = getVerticalScrollbar(this);\r\n\t\t\tvar horizontal = getHorizontalScrollbar(this);\r\n\r\n\t\t\tvar oldH = {position: 0},\r\n\t\t\t\toldV = {position: 0};\r\n\r\n\t\t\tif(vertical){\r\n\t\t\t\toldV = vertical.getScrollState();\r\n\t\t\t}\r\n\t\t\tif(horizontal){\r\n\t\t\t\toldH = horizontal.getScrollState();\r\n\t\t\t}\r\n\r\n\t\t\tvar scrollHorizontal = (horizontal && left*1 == left);\r\n\t\t\tvar scrollVertical = (vertical && top*1 == top);\r\n\t\t\tvar scrollBoth = scrollHorizontal && scrollVertical;\r\n\r\n\t\t\tif(scrollBoth){\r\n\t\t\t\t// some views will be scrolled both horizontally and vertically and smart rendering can be called twice\r\n\t\t\t\t// set flag in order not to invoke smart rendering at the horizontal scroll stage\r\n\t\t\t\t// so it will repaint only once when the scroll is completed\r\n\t\t\t\tvar verticalViews = vertical._getLinkedViews();\r\n\t\t\t\tvar horizontalViews = horizontal._getLinkedViews();\r\n\r\n\t\t\t\tvar commonViews = [];\r\n\t\t\t\tfor(var i = 0; i < verticalViews.length; i++){\r\n\t\t\t\t\tfor(var j = 0; j < horizontalViews.length; j++){\r\n\r\n\t\t\t\t\t\tif(verticalViews[i].$config.id && horizontalViews[j].$config.id && verticalViews[i].$config.id === horizontalViews[j].$config.id){\r\n\t\t\t\t\t\t\tcommonViews.push(verticalViews[i].$config.id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (scrollHorizontal){\r\n\t\t\t\tif(commonViews){\r\n\t\t\t\t\tcommonViews.forEach((function(viewId){\r\n\t\t\t\t\t\tthis.$ui.getView(viewId).$config.$skipSmartRenderOnScroll = true;\r\n\t\t\t\t\t}).bind(this));\r\n\t\t\t\t}\r\n\r\n\t\t\t\thorizontal.scroll(left);\r\n\t\t\t\tif(commonViews){\r\n\t\t\t\t\tcommonViews.forEach((function(viewId){\r\n\t\t\t\t\t\tthis.$ui.getView(viewId).$config.$skipSmartRenderOnScroll = false;\r\n\t\t\t\t\t}).bind(this));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(scrollVertical){\r\n\t\t\t\tvertical.scroll(top);\r\n\t\t\t}\r\n\r\n\t\t\tvar newV = {position: 0},\r\n\t\t\t\tnewH = {position: 0};\r\n\t\t\tif(vertical){\r\n\t\t\t\tnewV = vertical.getScrollState();\r\n\t\t\t}\r\n\t\t\tif(horizontal){\r\n\t\t\t\tnewH = horizontal.getScrollState();\r\n\t\t\t}\r\n\r\n\t\t\tthis.callEvent(\"onGanttScroll\", [oldH.position, oldV.position, newH.position, newV.position]);\r\n\t\t},\r\n\r\n\t\tshowDate: function(date){\r\n\t\t\tvar date_x = this.posFromDate(date);\r\n\t\t\tvar scroll_to = Math.max(date_x - this.config.task_scroll_offset, 0);\r\n\t\t\tthis.scrollTo(scroll_to);\r\n\t\t},\r\n\t\tshowTask: function(id) {\r\n\t\t\tvar pos = this.getTaskPosition(this.getTask(id));\r\n\r\n\t\t\t// GS-1261: we need to show the start_date even in the RTL mode\r\n\t\t\tvar leftPos = pos.left;\r\n\t\t\tif (this.config.rtl) leftPos = pos.left + pos.width;\r\n\r\n\t\t\tvar left = Math.max(leftPos - this.config.task_scroll_offset, 0);\r\n\r\n\t\t\tvar dataHeight = this._scroll_state().y;\r\n\t\t\tvar top;\r\n\t\t\tif(!dataHeight){\r\n\t\t\t\ttop = pos.top;\r\n\t\t\t}else{\r\n\t\t\t\ttop = pos.top - (dataHeight - this.getTaskBarHeight(id))/2;\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTo(left, top);\r\n\t\t\t// GS-1150: if the grid and timeline have different scrollbars, we need to scroll thegrid to show the task\r\n\t\t\tvar gridCell = getGrid(this);\r\n\t\t\tvar timelineCell = getTimeline(this);\r\n\t\t\tif (gridCell && timelineCell && gridCell.$config.scrollY != timelineCell.$config.scrollY){\r\n\t\t\t\tvar gridScrollbar = getAttachedScrollbar(this, gridCell, \"scrollY\");\r\n\t\t\t\tgridScrollbar.scrollTo(null, top);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_scroll_state: function(){\r\n\t\t\tvar result = {\r\n\t\t\t\tx: false,\r\n\t\t\t\ty: false,\r\n\t\t\t\tx_pos: 0,\r\n\t\t\t\ty_pos: 0,\r\n\t\t\t\tscroll_size: this.config.scroll_size + 1,//1px for inner content\r\n\t\t\t\tx_inner: 0,\r\n\t\t\t\ty_inner: 0\r\n\t\t\t};\r\n\r\n\t\t\tvar scrollVer = getVerticalScrollbar(this),\r\n\t\t\t\tscrollHor = getHorizontalScrollbar(this);\r\n\t\t\tif(scrollHor){\r\n\t\t\t\tvar horState = scrollHor.getScrollState();\r\n\t\t\t\tif(horState.visible){\r\n\t\t\t\t\tresult.x = horState.size;\r\n\t\t\t\t\tresult.x_inner = horState.scrollSize;\r\n\t\t\t\t}\r\n\t\t\t\tresult.x_pos = horState.position || 0;\r\n\t\t\t}\r\n\r\n\t\t\tif(scrollVer){\r\n\t\t\t\tvar verState = scrollVer.getScrollState();\r\n\t\t\t\tif(verState.visible){\r\n\t\t\t\t\tresult.y = verState.size;\r\n\r\n\t\t\t\t\tresult.y_inner = verState.scrollSize;\r\n\t\t\t\t}\r\n\t\t\t\tresult.y_pos = verState.position || 0;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t},\r\n\t\tgetScrollState: function(){\r\n\t\t\tvar state = this._scroll_state();\r\n\t\t\treturn { x:state.x_pos, y:state.y_pos, inner_width:state.x, inner_height:state.y, width: state.x_inner, height: state.y_inner };\r\n\t\t},\r\n\r\n\t\tgetLayoutView: function(cellName){\r\n\t\t\treturn this.$ui.getView(cellName);\r\n\t\t},\r\n\r\n\t\tscrollLayoutCell: function(cellName, left, top){\r\n\t\t\tconst cell = this.$ui.getView(cellName);\r\n\t\t\tif (!cell){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (left !== null){\r\n\t\t\t\tconst horizontalScroll = this.$ui.getView(cell.$config.scrollX);\r\n\t\t\t\tif (horizontalScroll){\r\n\t\t\t\t\thorizontalScroll.scrollTo(left, null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (top !== null){\r\n\t\t\t\tconst verticalScroll = this.$ui.getView(cell.$config.scrollY);\r\n\t\t\t\tif (verticalScroll){\r\n\t\t\t\t\tverticalScroll.scrollTo(null, top);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t};\r\n\r\n}\r\n\r\nexport default createLayoutFacade;","export default function(gantt) {\r\ngantt.skins.skyblue = {\r\n\tconfig:{\r\n\t\tgrid_width:370,\r\n\t\trow_height: 27,\r\n\t\tbar_height_padding:4,\r\n\t\tscale_height: 27,\r\n\t\tlink_line_width:1,\r\n\t\tlink_arrow_size:8,\r\n\t\tlink_radius:2,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:95,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins.dark = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 36,\r\n\t\tscale_height: 36,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tbar_height_padding:9,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:70\t\t\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins.meadow = {\r\n\tconfig:{\r\n\t\tgrid_width:380,\r\n\t\trow_height: 27,\r\n\t\tscale_height: 30,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:10,\r\n\t\tbar_height_padding:4,\r\n\t\tlightbox_additional_height:72\r\n\t},\r\n\t_second_column_width:95,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins.terrace = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 36,\r\n\t\tscale_height: 36,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tbar_height_padding:9,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:70\t\t\r\n};\r\n\r\n};","export default function(gantt) {\r\n\tgantt.skins.broadway = {\r\n\t\tconfig: {\r\n\t\t\tgrid_width: 390,\r\n\t\t\trow_height: 35,\r\n\t\t\tscale_height: 35,\r\n\t\t\tlink_line_width: 1,\r\n\t\t\tlink_arrow_size: 9,\r\n\t\t\tbar_height_padding:4,\r\n\t\t\tlightbox_additional_height: 86\r\n\t\t},\r\n\t\t_second_column_width: 100,\r\n\t\t_third_column_width: 80,\r\n\r\n\t\t_lightbox_template: \"
\",\r\n\t\t_config_buttons_left: {},\r\n\t\t_config_buttons_right: {\r\n\t\t\t\"gantt_delete_btn\": \"icon_delete\",\r\n\t\t\t\"gantt_save_btn\": \"icon_save\"\r\n\t\t}\r\n\t};\r\n};","export default function(gantt) {\r\n\tgantt.skins.material = {\r\n\t\tconfig: {\r\n\t\t\tgrid_width: 411,\r\n\t\t\trow_height: 34,\r\n\t\t\tscale_height: 36,\r\n\t\t\tlink_line_width: 2,\r\n\t\t\tlink_arrow_size: 12,\r\n\t\t\tbar_height_padding:9,\r\n\t\t\tlightbox_additional_height: 80\r\n\t\t},\r\n\t\t_second_column_width: 110,\r\n\t\t_third_column_width: 75,\r\n\t\t_redefine_lightbox_buttons: {\r\n\t\t\t\"buttons_left\": [\"dhx_delete_btn\"],\r\n\t\t\t\"buttons_right\": [\"dhx_cancel_btn\", \"dhx_save_btn\"]\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onAfterTaskDrag\", function (id) {\r\n\t\tvar t = gantt.getTaskNode(id);\r\n\t\tif (t) {\r\n\t\t\tt.className += \" gantt_drag_animation\";\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tvar indx = t.className.indexOf(\" gantt_drag_animation\");\r\n\t\t\t\tif (indx > -1) {\r\n\t\t\t\t\tt.className = t.className.slice(0, indx);\r\n\t\t\t\t}\r\n\t\t\t}, 200);\r\n\t\t}\r\n\t});\r\n\r\n};","export default function(gantt) {\r\ngantt.skins[\"contrast_black\"] = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 35,\r\n\t\tscale_height: 35,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins[\"contrast_white\"] = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 35,\r\n\t\tscale_height: 35,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","import autoscroll from \"./autoscroll\";\r\nimport jquery_hooks from \"./jquery_hooks\";\r\nimport dhtmlx_hooks from \"./dhtmlx_hooks\";\r\nimport TimelineZoom from \"./timeline_zoom\";\r\n\r\n\r\nexport default function(gantt){\r\n\tif(!gantt.ext){\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tvar modules = [\r\n\t\tautoscroll,\r\n\t\tjquery_hooks,\r\n\t\tdhtmlx_hooks\r\n\t];\r\n\r\n\tfor(var i = 0; i < modules.length; i++){\r\n\t\tif(modules[i])\r\n\t\t\tmodules[i](gantt);\r\n\t}\r\n\r\n\tgantt.ext.zoom = new TimelineZoom(gantt);\r\n};","export default function(gantt) {\r\n\r\n\tgantt._extend_to_optional = function (lightbox_block) {\r\n\r\n\t\tvar duration = lightbox_block;\r\n\t\tvar optional_time = {\r\n\t\t\trender: duration.render,\r\n\t\t\tfocus: duration.focus,\r\n\t\t\tset_value: function (node, value, task, section) {\r\n\t\t\t\tvar mapping = gantt._resolve_default_mapping(section);\r\n\t\t\t\tif (!task[mapping.start_date] || (mapping.start_date == \"start_date\" && this._isAllowedUnscheduledTask(task))) {\r\n\t\t\t\t\toptional_time.disable(node, section);\r\n\t\t\t\t\tvar val = {};\r\n\r\n\t\t\t\t\tfor (var i in mapping) {\r\n\t\t\t\t\t\t//take default values from the time control from task start/end dates\r\n\t\t\t\t\t\tval[mapping[i]] = task[i];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn duration.set_value.call(gantt, node, value, val, section);//set default value\r\n\t\t\t\t} else {\r\n\t\t\t\t\toptional_time.enable(node, section);\r\n\t\t\t\t\treturn duration.set_value.call(gantt, node, value, task, section);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget_value: function (node, task, section) {\r\n\t\t\t\tif (section.disabled) {\r\n\t\t\t\t\treturn {start_date: null};\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn duration.get_value.call(gantt, node, task, section);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tupdate_block: function (node, section) {\r\n\t\t\t\tgantt.callEvent(\"onSectionToggle\", [gantt._lightbox_id, section]);\r\n\t\t\t\tnode.style.display = section.disabled ? \"none\" : \"\";\r\n\r\n\t\t\t\tif (section.button) {\r\n\t\t\t\t\tvar button = node.previousSibling.querySelector(\".gantt_custom_button_label\"),\r\n\t\t\t\t\t\tlabels = gantt.locale.labels;\r\n\r\n\t\t\t\t\tvar button_text = section.disabled ? labels[section.name + \"_enable_button\"] : labels[section.name + \"_disable_button\"];\r\n\r\n\t\t\t\t\tbutton.innerHTML = button_text;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdisable: function (node, section) {\r\n\t\t\t\tsection.disabled = true;\r\n\t\t\t\toptional_time.update_block(node, section);\r\n\r\n\t\t\t},\r\n\t\t\tenable: function (node, section) {\r\n\t\t\t\tsection.disabled = false;\r\n\t\t\t\toptional_time.update_block(node, section);\r\n\t\t\t},\r\n\t\t\tbutton_click: function (index, el, section, container) {\r\n\t\t\t\tif (gantt.callEvent(\"onSectionButton\", [gantt._lightbox_id, section]) === false) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar config = gantt._get_typed_lightbox_config()[index];\r\n\t\t\t\tif (config.disabled) {\r\n\t\t\t\t\toptional_time.enable(container, config);\r\n\t\t\t\t} else {\r\n\t\t\t\t\toptional_time.disable(container, config);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn optional_time;\r\n\t};\r\n\r\n\tgantt.form_blocks.duration_optional = gantt._extend_to_optional(gantt.form_blocks.duration);\r\n\tgantt.form_blocks.time_optional = gantt._extend_to_optional(gantt.form_blocks.time);\r\n\r\n};","export default function(gantt){\r\n\tvar htmlTags = new RegExp(\"<(?:.|\\n)*?>\", \"gm\");\r\n\tvar extraSpaces = new RegExp(\" +\", \"gm\");\r\n\r\n\tfunction stripHTMLLite(htmlText){\r\n\t\treturn (htmlText + \"\")\r\n\t\t\t.replace(htmlTags, \" \").\r\n\t\t\treplace(extraSpaces, \" \");\r\n\t}\r\n\r\n\tvar singleQuotes = new RegExp(\"'\", \"gm\");\r\n\tfunction escapeQuotes(text){\r\n\t\treturn (text + \"\").replace(singleQuotes, \"'\");\r\n\t}\r\n\r\n\tgantt._waiAria = {\r\n\t\tgetAttributeString: function(attr){\r\n\t\t\tvar attributes = [\" \"];\r\n\t\t\tfor(var i in attr){\r\n\t\t\t\tvar text = escapeQuotes(stripHTMLLite(attr[i]));\r\n\t\t\t\tattributes.push(i + \"='\" + text + \"'\");\r\n\t\t\t}\r\n\t\t\tattributes.push(\" \");\r\n\t\t\treturn attributes.join(\" \");\r\n\r\n\t\t},\r\n\r\n\t\tgetTimelineCellAttr:function(dateString){\r\n\r\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": dateString});\r\n\t\t},\r\n\r\n\t\t_taskCommonAttr: function(task, div){\r\n\r\n\t\t\tif(!(task.start_date && task.end_date))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(gantt.templates.tooltip_text(task.start_date, task.end_date, task)));\r\n\r\n\t\t\tif(task.$dataprocessor_class){\r\n\t\t\t\tdiv.setAttribute(\"aria-busy\", true);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tsetTaskBarAttr: function(task, div){\r\n\t\t\tthis._taskCommonAttr(task, div);\r\n\r\n\t\t\t// task bars are complex elements that should be treated as a single element\r\n\t\t\tdiv.setAttribute(\"role\", \"img\");\r\n\r\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.drag_move){\r\n\t\t\t\tif(task.id != gantt.getState(\"tasksDnd\").drag_id){\r\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttaskRowAttr: function(task, div){\r\n\r\n\t\t\tthis._taskCommonAttr(task, div);\r\n\r\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.order_branch){\r\n\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\r\n\t\t\t}\r\n\r\n\t\t\tdiv.setAttribute(\"role\", \"row\");\r\n\t\t\t// selected attribute should be added only to the grid because\r\n\t\t\t// other parts don't have the keyboard navigation\r\n\t\t\tdiv.setAttribute(\"aria-selected\", gantt.isSelectedTask(task.id) ? \"true\" : \"false\");\r\n\r\n\t\t\t// allowed values start from 1, set 1 for non-tree datastores\r\n\t\t\tdiv.setAttribute(\"aria-level\", task.$level + 1 || 1);\r\n\r\n\t\t\tif(gantt.hasChild(task.id)){\r\n\t\t\t\tdiv.setAttribute(\"aria-expanded\", task.$open ? \"true\" : \"false\");\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tlinkAttr: function(link, div){\r\n\r\n\t\t\tvar linkTypes = gantt.config.links;\r\n\r\n\t\t\tvar toStart = link.type == linkTypes.finish_to_start || link.type == linkTypes.start_to_start;\r\n\t\t\tvar fromStart = link.type == linkTypes.start_to_start || link.type == linkTypes.start_to_finish;\r\n\r\n\t\t\tvar content = gantt.locale.labels.link + \" \" + gantt.templates.drag_link(link.source, fromStart, link.target, toStart);\r\n\r\n\t\t\t// links are complex elements that should be treated as a single element\r\n\t\t\tdiv.setAttribute(\"role\", \"img\");\r\n\r\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(content));\r\n\t\t\tif(gantt.isReadonly(link)){\r\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgridSeparatorAttr: function(div){\r\n\t\t\t// the only valid role for the grid header\r\n\t\t\tdiv.setAttribute(\"role\", \"columnheader\");\r\n\t\t},\r\n\t\trowResizerAttr: function(div){\r\n\t\t\t// the only valid role for the grid header\r\n\t\t\tdiv.setAttribute(\"role\", \"row\");\r\n\t\t},\r\n\r\n\t\tlightboxHiddenAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\r\n\t\t},\r\n\r\n\t\tlightboxVisibleAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\r\n\t\t},\r\n\r\n\t\tlightboxAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\r\n\t\t\tdiv.firstChild.setAttribute(\"role\", \"heading\");\r\n\t\t\tdiv.firstChild.setAttribute(\"aria-level\", \"1\");\r\n\t\t},\r\n\r\n\t\tlightboxButtonAttrString:function(buttonName){\r\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\":gantt.locale.labels[buttonName], \"tabindex\":\"0\"});\r\n\t\t},\r\n\r\n\t\tlightboxHeader: function(div, headerText){\r\n\t\t\tdiv.setAttribute(\"aria-label\", headerText);\r\n\t\t},\r\n\r\n\t\tlightboxSelectAttrString: function(time_option){\r\n\t\t\tvar label = \"\";\r\n\r\n\t\t\tswitch (time_option) {\r\n\t\t\t\tcase \"%Y\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.years;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%m\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.months;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%d\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.days;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%H:%i\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.hours + gantt.locale.labels.minutes;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": label});\r\n\t\t},\r\n\r\n\t\tlightboxDurationInputAttrString: function(section){\r\n\t\t\treturn this.getAttributeString({\r\n\t\t\t\t\"aria-label\": gantt.locale.labels.column_duration,\r\n\t\t\t\t\"aria-valuemin\": \"0\",\r\n\t\t\t\t\"role\": \"spinbutton\"\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tinlineEditorAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"row\");\r\n\t\t},\r\n\r\n\t\tgridAttrString: function(){\r\n\t\t\treturn [\" role='treegrid'\", gantt.config.multiselect ? \"aria-multiselectable='true'\" : \"aria-multiselectable='false'\", \" \"].join(\" \");\r\n\t\t},\r\n\r\n\r\n\t\tgridScaleRowAttrString: function(){\r\n\t\t\treturn \"role='row'\";\r\n\t\t},\r\n\r\n\t\tgridScaleCellAttrString: function(column, label){\r\n\t\t\tvar attrs = \"\";\r\n\t\t\tif(column.name == \"add\"){\r\n\t\t\t\t// a more precise role is button, but it is not valid for the grid header\r\n\t\t\t\tattrs = this.getAttributeString({\"role\":\"columnheader\", \"aria-label\": gantt.locale.labels.new_task});\r\n\t\t\t}else{\r\n\r\n\t\t\t\tvar attributes = {\r\n\t\t\t\t\t\"role\":\"columnheader\",\r\n\t\t\t\t\t\"aria-label\": label\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(gantt._sort && gantt._sort.name == column.name){\r\n\t\t\t\t\tif(gantt._sort.direction == \"asc\"){\r\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"ascending\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"descending\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tattrs = this.getAttributeString(attributes);\r\n\t\t\t}\r\n\t\t\treturn attrs;\r\n\t\t},\r\n\r\n\t\tgridDataAttrString: function(){\r\n\t\t\treturn \"role='rowgroup'\";\r\n\t\t},\r\n\r\n\t\treorderMarkerAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"grid\");\r\n\t\t\tdiv.firstChild.removeAttribute(\"aria-level\");\r\n\t\t\tdiv.firstChild.setAttribute(\"aria-grabbed\", \"true\");\r\n\t\t},\r\n\r\n\t\tgridCellAttrString: function(column, textValue, task){\r\n\t\t\tvar attributes = {\"role\":\"gridcell\", \"aria-label\": textValue};\r\n\t\t\tif(!column.editor || gantt.isReadonly(task)){\r\n\t\t\t\tattributes[\"aria-readonly\"] = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn this.getAttributeString(attributes);\r\n\t\t},\r\n\r\n\t\tgridAddButtonAttrString: function(column){\r\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\r\n\t\t},\r\n\r\n\t\tmessageButtonAttrString: function(buttonLabel){\r\n\t\t\treturn \"tabindex='0' role='button' aria-label='\"+buttonLabel+\"'\";\r\n\t\t},\r\n\r\n\t\tmessageInfoAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"alert\");\r\n\t\t\t//div.setAttribute(\"tabindex\", \"-1\");\r\n\t\t},\r\n\r\n\t\tmessageModalAttr: function(div, uid){\r\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\r\n\t\t\tif(uid){\r\n\t\t\t\tdiv.setAttribute(\"aria-labelledby\", uid);\r\n\t\t\t}\r\n\r\n\t\t//\tdiv.setAttribute(\"tabindex\", \"-1\");\r\n\t\t},\r\n\r\n\t\tquickInfoAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\r\n\t\t},\r\n\r\n\t\tquickInfoHeaderAttrString: function(){\r\n\t\t\treturn \" role='heading' aria-level='1' \";\r\n\t\t},\r\n\r\n\t\tquickInfoHeader: function(div, header){\r\n\t\t\tdiv.setAttribute(\"aria-label\", header);\r\n\t\t},\r\n\r\n\t\tquickInfoButtonAttrString: function(label){\r\n\t\t\treturn gantt._waiAria.getAttributeString({\"role\":\"button\", \"aria-label\":label, \"tabindex\":\"0\"});\r\n\t\t},\r\n\r\n\t\ttooltipAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"tooltip\");\r\n\t\t},\r\n\r\n\t\ttooltipVisibleAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\r\n\t\t},\r\n\r\n\t\ttooltipHiddenAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\r\n\t\t}\r\n\t};\r\n\r\n\tfunction isDisabled(){\r\n\t\treturn !gantt.config.wai_aria_attributes;\r\n\t}\r\n\r\n\tfor(var i in gantt._waiAria){\r\n\t\tgantt._waiAria[i] = (function(payload){\r\n\t\t\treturn function(){\r\n\t\t\t\tif(isDisabled()){\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\t}\r\n\t\t\t\treturn payload.apply(this, arguments);\r\n\t\t\t};\r\n\t\t})(gantt._waiAria[i]);\r\n\t}\r\n\r\n\r\n};","import extensions from \"./ext/extensions_gpl\";\r\nimport base from \"./factory/make_instance_web\";\r\nimport scope from \"./utils/global\";\r\nconst gantt = (scope as any).gantt = base(extensions);\r\n\r\nexport default gantt;\r\nexport { gantt };","import \"../css/dhtmlxgantt.less\";\r\n\r\nimport factory from \"./make_instance_common\";\r\nimport ui from \"../core/ui_core\";\r\nimport ajaxLoading from \"../core/loading/ajax_loading\";\r\nimport dynamicLoading from \"../core/loading/dynamic_loading\";\r\n\r\nexport default function(supportedExtensions) {\r\n\tvar gantt = factory(supportedExtensions);\r\n\r\n\tif(!gantt.env.isNode){\r\n\t\tui(gantt);\r\n\t\tajaxLoading(gantt);\r\n\t\tdynamicLoading(gantt);\r\n\t}\r\n\r\n\treturn gantt;\r\n};","export default function(gantt) {\r\n\tgantt.load = function (url, type, callback) {\r\n\t\tthis._load_url = url;\r\n\t\tthis.assert(arguments.length, \"Invalid load arguments\");\r\n\r\n\t\tvar tp = 'json', cl = null;\r\n\t\tif (arguments.length >= 3) {\r\n\t\t\ttp = type;\r\n\t\t\tcl = callback;\r\n\t\t} else {\r\n\t\t\tif (typeof arguments[1] == \"string\")\r\n\t\t\t\ttp = arguments[1];\r\n\t\t\telse if (typeof arguments[1] == \"function\")\r\n\t\t\t\tcl = arguments[1];\r\n\t\t}\r\n\r\n\t\tthis._load_type = tp;\r\n\r\n\t\tthis.callEvent(\"onLoadStart\", [url, tp]);\r\n\r\n\t\treturn this.ajax.get(url, gantt.bind(function (l) {\r\n\t\t\tthis.on_load(l, tp);\r\n\t\t\tthis.callEvent(\"onLoadEnd\", [url, tp]);\r\n\t\t\tif (typeof cl == \"function\")\r\n\t\t\t\tcl.call(this);\r\n\t\t}, this));\r\n\t};\r\n};"],"names":["getNodePosition","elem","top","left","right","bottom","getBoundingClientRect","box","body","document","docElem","documentElement","parentNode","scrollTop","window","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","offsetWidth","offsetHeight","parseInt","offsetTop","offsetLeft","offsetParent","y","Math","round","x","width","height","isVisible","node","display","visibility","getComputedStyle","style","currentStyle","hasNonNegativeTabIndex","isNaN","getAttribute","hasHref","a","area","nodeName","loLowerCase","isEnabled","input","select","textarea","button","object","toLowerCase","hasAttribute","getFocusableNodes","root","nodes","querySelectorAll","join","nodesArray","Array","prototype","slice","call","i","length","$position","sort","b","tabIndex","splice","getScrollSize","div","createElement","cssText","appendChild","clientWidth","removeChild","max","getClassName","className","baseVal","indexOf","_trimString","addClassName","removeClassName","name","split","regEx","RegExp","replace","toNode","getElementById","querySelector","_slave","insertNode","newone","innerHTML","child","firstChild","removeNode","getChildNodes","css","ch","childNodes","len","out","obj","push","getTargetNode","e","trg","tagName","event","target","srcElement","shadowRoot","composedPath","locateAttribute","attribute","str","String","trim","this","apply","locateClassName","classname","strict","ind","charAt","getRelativeEventPosition","ev","d","clientX","clientY","getRelativeNodePosition","parent","childPos","parentPos","isChildOf","closest","element","selector","matches","msMatchesSelector","webkitMatchesSelector","el","contains","parentElement","nodeType","console","error","getClosestSizedElement","isShadowDomSupported","head","createShadowRoot","attachShadow","getActiveElement","activeElement","getSelection","focusNode","getRootNode","ShadowRoot","host","classList","test","scope","global","EventsManager$1","gantt","_mouseDown","_gantt","_domEvents","_createDomEventScope","selectedRegion","useKey","ignore","_target","getViewPort","_originPosition","_restoreOriginPosition","position","state","$services","getService","registerProvider","autoscroll","scheduledDndCoordinates","startDragAndDrop","setStart","copy","setPosition","setEnd","attach","filterTargets","utils","dom","_getCoordinates","eventElement","domHelpers.getRootNode","$root","coordinates","dragEnd","dragTimeline","ext","clickDrag","dragTimelineUseKey","config","drag_timeline","abs","relative","render","detachAll","unregisterProvider","detach","viewPort","viewPortBounds","absolute","EventHost","_silent_mode","listeners","_silentStart","_silentEnd","createEventStorage","handlers","index","eventStorage","combinedResult","handlerResult","arguments","addEvent","handler","settings","t","handlerId","id","once","originalHandler","removeEvent","clear","makeEventable","eventHost","attachEvent","eventName","thisObject","bind","attachAll","callback","callEvent","eventArguments","handlerName","concat","checkEvent","detachEvent","list","eventId","detachAllEvents","units","second","minute","hour","day","week","month","quarter","year","getSecondsInUnit","unit","forEach","arr","workArray","arrayFind","find","arrayIncludes","item","includes","isArray","pop","isDate","getFullYear","getMonth","getDate","isValidDate","getTime","delay","timeout","timer","result","$cancelTimeout","$pending","args","setTimeout","clearTimeout","$execute","replaceValidZeroId","rootId","checkZeroId","findBinary","array","prev","low","high","floor","SelectedRegion","view","_el","defaultRender","start","end","min","_singleRow","pos","_getTaskPositionByTop","_startPoint","_view","_viewPort","add","_callback","_endPoint","draw","eventable","singleRow","_useRequestAnimationFrame","useRequestAnimationFrame","requestAnimationFrame","getElement","startPoint","_startDate","dateFromPos","endPoint","_endDate","_positionPoint","positionPoint","getState","max_date","valueOf","tasksByTime","getTaskByTime","tasksByIndex","_getTasksByTop","startValue","endValue","startIndex","endIndex","getTaskByIndex","getItemIndexByTopPosition","task","getItemHeight","getItemTop","dataHeight","getTotalHeight","row_height","getTaskCount","EventsManager","_calculateDirectionVector","_trace","dots","vectors","resultVector","vector","magnitude","sqrt","angleDegrees","atan2","PI","_applyDndReadyStyles","_timeline","$task","_clearDndReadyStyles","remove","_getScrollPosition","timeline","$ui","getView","$config","scrollX","getScrollState","scrollY","_countNewScrollPosition","coords","shiftX","shiftY","_scrollState","_setScrollPosition","scrollLayoutCell","$id","_stopDrag","_originalReadonly","readonly","_originAutoscroll","_startDrag","enabled","clickDragUseKey","click_drag","scrollPosition","modals","modalsStack","isModal","afterPopup","$destroyed","focus","startModal","eventRemove","trapFocus","endModal","currentTarget","$keyboardNavigation","traceLightbox","getLightbox","focusElement","QuickInfo","show","_showForTask","_showAtCoordinates","hide","forced","qi","_quickInfoBox","_quickInfoBoxId","taskId","_quickInfoTask","quick_info_detached","getNode","setContainer","container","_container","setContent","content","defaultContent","header","title","date","buttons","quickinfo_buttons","_createQuickInfoElement","titleBox","titleContent","titleDate","main","controls","_waiAria","quickInfoHeader","html","ariaAttr","quickInfoButtonAttrString","locale","labels","_qiButtonClickHandler","_qiKeyPressHandler","_qi_button_click","code","which","_appendAtCoordinates","show_quick_info","_getContainer","_get_event_counter_part","xViewport","yViewport","_init_quick_info","_prepare_quick_info_classname","_fill_quick_data","_show_quick_info","offset","domEv","getTaskNode","getTaskRowNode","scroll","dx","dy","quickInfoAttr","quickInfoHeaderAttrString","getTask","_quickInfoReadonly","isReadonly","getTaskType","template","templates","quick_info_class","start_date","end_date","allowedButtons","isEditor","icon_delete","icon_edit","quick_info_title","quick_info_date","quick_info_content","popupHeight","scrolls","screenWidth","relativePopupBottom","mask","$click","$task_data","$grid_data","$grid","$layout","seed","plainObjectConstructor","constructor","toString","helpers.isDate","Date","helpers.isArray","Object","create","hasOwnProperty","mixin","source","force","f","undefined","defined","uid","functor","capture","addEventListener","removeEventListener","createScope","utils.event","utils.eventRemove","eventScope","staticArray","extend","Tooltip","_tooltipNode","tooltipAttr","_root","domHelpers.isChildOf","_isLikeMouseEvent","_calculateTooltipPosition","tooltipVisibleAttr","tooltipHiddenAttr","viewport","_getViewPortSize","tooltipNode","tooltip","offsetX","tooltip_offset_x","offsetY","tooltip_offset_y","mouse","domHelpers.getRelativeEventPosition","containerPos","domHelpers.getNodePosition","_getViewPort","TooltipManager","_listeners","domEventsScope","_initDelayedFunctions","delayHide","watchableTarget","eventTarget","domHelpers.getTargetNode","targetNode","domHelpers.closest","doOnMouseEnter","onmouseenter","onmousemove","onmouseleave","listener","cloneDomEvent","clone","createEvent","delayShow","helpers.delay","tooltip_timeout","tooltip_hide_timeout","noTrack","onBeforeUndo","onBeforeRedo","batchActions","Monitor","undo","_batchAction","_batchMode","_ignore","_ignoreMoveEvents","_initialTasks","_initialLinks","_nestedTasks","_nestedLinks","_undo","_attachEvents","type","overwrite","undo_types","_storeTask","link","_storeLink","isMoveEventsIgnored","newValue","_timeout","stopBatchAction","action","logAction","_storeTaskCommand","command","update","$local_index","getTaskIndex","oldValue","getInitialTask","getParent","_storeEntityCommand","move","entity","children","childrenLinks","_storeLinkCommand","taskIds","tasks","linkIds","_getLinks","setInitialTask","uniqueLinks","links","setInitialLink","$index","getGlobalTaskIndex","setInitialTaskObject","getLink","deleteCacheCooldown","saveInitialAll","clearInitialTasks","eachTask","clearInitialLinks","getLinks","getMoveObjectByTaskId","startIgnore","stopIgnore","startBatchAction","clearUndoStack","clearRedoStack","onTaskAdded","onTaskUpdated","onTaskDeleted","onLinkAdded","onLinkUpdated","onLinkDeleted","onTaskMoved","toggleIgnoreMoveEvents","store","nested","setNestedTasks","datastore","getDatastore","tindex","dragId","projectDrag","drag_id","isSummaryTask","drag_project","plugins","multiselect","selectedIds","getSelectedTasks","inlineEditors","onBeforeEditStartId","onEditStart","updateConfigs","undoEnabled","commands","old","actionType","entityType","_storeCommand","isTaskExists","getInitialLink","$source","$target","linkId","Undo","maxSteps","redoEnabled","invert","revert","value","inverseCommands","types","assert","_undoStack","_redoStack","getUndoStack","stack","undo_steps","undo_actions","redo","_pop","_reorderCommands","_applyAction","_push","shift","weights","any","actionWeights","weightA","entities","actions","methods","get","isExists","batchUpdate","method","getMethod","check","prop","startsWith","extensions","defaultConfig","eventsManager","destructor","fullscreen","isExpanded","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","isFullscreenAvailable","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","backupBodyPadding","overflow","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","backupElementSizes","zIndex","modified","backupPositioning","updateSizes","expandGantt","onFullScreenChange","$container","getFullscreenElement","positions","originalPositioning","setFullScreenSizes","record","cantFullscreen","warning","log","requestArguments","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","requestExitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen","exitFullscreen","collapse","expand","keyboard_navigation","keyboard_navigation_cells","_compose","parts","res","p","shortcuts","createCommand","modifiers","alt","ctrl","meta","keyCode","parse","shortcut","expr","getExpressions","words","getWords","j","commandKeys","specialKeys","charCodeAt","getCommandFromEvent","domEvent","shiftKey","altKey","ctrlKey","metaKey","printableKey","fromCharCode","getHashFromEvent","getHash","junctionChar","term","combinationChar","backspace","tab","enter","esc","space","up","down","home","pageup","pagedown","delete","insert","plus","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","EventHandler","_handlers","findHandler","hash","doAction","facade","preventDefault","returnValue","unbind","bindAll","map","initKeys","keys","domHelpers.getFocusableNodes","focusable","currentFocus","domHelpers.getActiveElement","currentIndex","lastItem","firstItem","GanttNode","blur","scrollHorizontal","dir","scale","getScale","step","scrollTo","posFromDate","scrollVertical","KeyNavNode","isValid","fallback","moveTo","dispatcher","setActiveNode","compareTo","canStringifyThis","canStringifyThat","eventFacade","setAttribute","$eventAttached","HeaderCell","show_grid","getVisibleTaskCount","getGridColumns","TaskRow","visibleColumns","fromDomElement","cellElement","domHelpers.locateClassName","previousSibling","$grid_scale","columns","taskRow","rootLevel","getChildren","root_id","TaskCell","click","createTask","globalIndex","splitItem","$split_subtask","parentId","nextIndex","locate","isTaskVisible","task_attribute","keptFocus","getTaskPosition","getTaskHeight","viewWidth","viewHeight","inner_width","inner_height","scroll_on_click","show_chart","task_scroll_offset","grid","scrollPositionX","scrollPositionY","attachedScrollbarHorizontal","scrollable","scrollbarHorizontal","attachedScrollbarVertical","scrollbarVertical","scrollGrid","nextElement","prevTask","getPrev","nextTask","getNext","hasChild","$open","open","close","prevId","getPrevSibling","moveTask","updateTask","isSelectedTask","unselectTask","selectTask","showLightbox","columnIndex","domHelpers.locateAttribute","row","isActive","activeNode","globalNode","enable","getActiveNode","disable","getDefaultNode","setDefaultNode","inputs","focusGlobalNode","blurNode","focusChanged","keyDownHandler","defaultPrevented","ganttNode","awaitsFocus","clearDelay","isTaskFocused","isInlineEditorCell","isNoKeyboardNavigationElement","focusHandler","$preventDefault","reFocusActiveNode","outsideGantt","localName","domElement","mousedownHandler","locateTask","removeAttribute","onReady","$data","tasksStore","currentNode","gridDataTopScroll","gridDataBottomScroll","_smart_render","updateRender","_redrawTasks","renderers","items","focusedItemVisible","createdTaskId","keepFocusOnNewTask","placeholder","nodeConstructor","placeholder_task","focusOnCreate","oldId","newId","interval","setInterval","getScope","mode","scopes","headerCell","taskCell","findVisibleColumnIndex","columnName","clearInterval","keyNavFacade","addShortcut","scopeObject","getShortcutHandler","getCommandHandler","removeShortcut","column","keyboardNavigation","quick_info","quickInfo","text","substr","details","task_time","events","hidingFunction","clearQuickInfo","hideQuickInfo","showQuickInfo","tooltipManager","tooltips","tooltipFor","touch","touch_tooltip","targetTaskId","tooltip_text","hideTooltip","link_source_id","monitor","updTask","changeTaskCommandId","updLink","oldTaskId","newTaskId","changeLinkCommandId","updateTasksIds","entry","updateLinksIds","setUndoStack","getRedoStack","setRedoStack","saveState","getInitialState","marker","render_marker","show_markers","min_date","markerHeight","getRowTop","timeline_placeholder","scrollHeight","initMarkerArea","markerArea","$marker_area","_markers","createDatastore","initItem","renderMarkers","createDataRender","defaultContainer","addLayer","getMarker","getItem","addMarker","addItem","deleteMarker","exists","removeItem","updateMarker","refresh","_getMarkers","getItems","multiselect_one_level","_multiselect","_selected","_one_level","_active","_first_selected_when_shift","getDefaultSelected","selected","getSelected","setFirstSelected","getFirstSelected","updateState","active","select_task","reset","setLastSelected","silent","unselect","getLastSelected","last","getSelectedId","afterSelect","toggle","isSelected","forSelected","isSameLevel","calculateTaskLevel","_quickRefresh","refreshTask","doSelection","_is_icon_open_click","target_ev","defaultLast","isLast","multiSelect","singleSelection","controller","cell","locateCell","inline_editors_multiselect_open","getEditorConfig","startEdit","blockSelection","first_indx","target_indx","last_indx","tmp","old_selectTask","old_unselectTask","toggleTaskSelection","eachSelectedTask","getLastSelectedTask","old_isSelected","new_id","task_id","export_api","_apiUrl","previousDateRage","str_to_date","date_format","data","_serializeHtml","_prepareConfigPDF","_serializeAll","_fixColumns","raw","_preparePDFConfigRaw","version","_sendToExport","_pdfExportRouter","_serializePlain","dates","smartRendering","smart_rendering","visual","convert","_eachTaskTimed","_no_progress_colors","_serializeTimeline","_serializeGrid","rawDates","scales","_serializeScales","worktime","_getWorktimeSettings","formData","File","FormData","append","_sendImportAjaxExcel","_sendImportAjaxMSP","importFromPrimaveraP6","importFromMSProject","skip_circular_links","oldXmlFormat","xml_format","oldFormatDate","format_date","oldXmlDate","xml_date","oldDateFormat","exportServiceDateFormat","date_to_str","_customProjectProperties","_customTaskProperties","_clearRecLinks","_exportConfig","$custom_data","custom","exportToPrimaveraP6","exportToMSProject","label","url","pack","cb","ajax","post","base","$template","server","JSON","stringify","sheet","xhr","XMLHttpRequest","onreadystatechange","readyState","status","onload","info","responseText","setRequestHeader","send","encodeURIComponent","_xdr","loader","xdoc","xmlDoc","col","editor","editor_types","skin","_serializableGanttConfig","_markColumns","_ajaxToExport","form","_createHiddenForm","submit","_hidden_export_form","constraint_date","deadline","key","formatDate","_color_box","_color_hash","color","_getColor","backgroundColor","parsedRanges","minutes","range","startMinute","endMinute","defaultWorkTimes","hours","time","work_time","wTime","_working_time_helper","get_calendar","worktimes","parsed","_getMinutesWorktimeSettings","master","branch","_pull","_originalCopyObject","json","_copyObject","task_text","_copyObjectBase","rgb","match","toISOstring","_copyObjectColumns","_copyObjectPlain","getDayIndex","_day_index_by_date","columnIndexByDate","$start","$end","hiddenCells","scaleCellsWidth","$level","$type","$rendered_type","tmps","$text","$left","leftside_text","$right","rightside_text","_copyObjectTable","$color","ct","val","date_grid","smartScales","smart_scales","_copyObjectAll","_exportSerialize","_getRaw","_scale_helpers","_get_scales","minWidth","min_column_width","autosizeMinWidth","_get_resize_options","autosize_min_width","scale_height","prepareConfigs","availWidth","autosize","_getScales","rtl","$scaleHelper","_copyObjectColors","cellColors","timeline_cell_class","task_cell_class","steps","trace_x","styles","cellCss","_getStyles","Infinity","col_width","format","date_scale","scaleCell","scaleCell_class","scaleCss","exportMode","cols","ccount","xmlFormat","serialize","_lvl","_setLevel","_makeLinksSameLevel","skippedLinks","_clearCircDependencies","_clearLinksSameLevel","_clearLevel","usedTasks","prevLink","sources","$_source","_onCircDependencyFind","targets","curLink","targetTask","_source","targetLvl","linkT","sourceParent","targetParent","$_target","project","projectName","projectDates","getSubtaskDates","start_end","manual","auto_scheduling","durationUnit","projectProperties","taskProperties","exportToPDF","exportToPNG","exportToICal","exportToExcel","exportToJSON","importFromExcel","constants","KEY_CODES","UP","DOWN","LEFT","RIGHT","SPACE","ENTER","DELETE","ESC","TAB","ExtensionsManager","addExtension","_extensions","getExtension","layout","rows","resizer","finish_to_start","start_to_start","finish_to_finish","start_to_finish","milestone","auto_types","duration_unit","correct_work_time","skip_off_time","cascade_delete","autoscroll_speed","deepcopy_on_parse","show_links","show_task_cells","static_background","static_background_cells","branch_loading","branch_loading_property","show_loading","min_duration","start_on_monday","server_utc","show_progress","fit_tasks","preserve_scroll","container_resize_timeout","deadlines","drag_links","drag_progress","drag_resize","drag_move","drag_mode","resize","progress","round_dnd_dates","link_wrapper_width","link_arrow_size","autofit","tree","align","scale_offset_minimal","inherit_scale_class","time_step","duration_step","task_date","time_picker","link_attribute","layer_attribute","buttons_left","_migrate_buttons","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","buttons_right","lightbox","sections","map_to","project_sections","milestone_sections","single_date","drag_lightbox","details_on_create","details_on_dblclick","initial_scroll","order_branch","order_branch_free","task_height","bar_height","bar_height_padding","min_grid_column_width","grid_resizer_column_attribute","keep_grid_width","grid_resize","grid_elastic_columns","show_tasks_outside_timescale","show_unscheduled","resize_rows","task_grid_row_resizer_attribute","min_task_grid_row_height","readonly_property","editable_property","calendar_property","resource_calendars","dynamic_resource_calendars","inherit_calendar","type_renderers","open_tree_initially","optimize_render","prevent_default_scroll","show_errors","wai_aria_attributes","horizontal_scroll_key","drag_multiple","csp","isWindowAwailable","env","isIE","navigator","userAgent","isIE6","isIE7","isIE8","isOpera","isChrome","isKHTML","isFF","isIPad","search","isEdge","isNode","serialized","createConfig","Error","async","headers","fastVersion","utc","dateToStrFn","Function","to_fixed","getISOWeek","getWeek","splt","strToDateFn","dateString","cspVersion","getUTCDate","getUTCMonth","getUTCFullYear","day_short","getUTCDay","getDay","day_full","month_short","month_full","getUTCHours","getHours","getUTCMinutes","getMinutes","getUTCSeconds","getSeconds","getUTCISOWeek","set","temp","month_short_hash","month_full_hash","UTC","canUseCsp","useCsp","cspAutoCheck","dateHelper","init","s","date_part","setHours","hour_start","setTime","time_part","getTimezoneOffset","week_start","month_start","setDate","quarter_start","res_month","m","setMonth","year_start","day_start","setMinutes","minute_start","setSeconds","getMilliseconds","setMilliseconds","_add_days","modifiedDate","inc","originalDate","incCondition","getHoursCondition","getDateCondition","ndate","setYear","add_quarter","num","cspCompliantVersion","_getWeekNumber","isoWeek","nday","first_thursday","year_number","ordinal_date","convert_to_utc","parseDate","parse_date","token","_url","_token","_mode","_seed","_queue","api","_events","Accept","credentials","fetch","then","websocket","_wrapper","connect","_socket","onclose","n","location","protocol","o","r","WebSocket","onmessage","fire","onError","_send","_resubscribe","Promise","_uid","resolve","reject","onCall","filter","catch","onResponse","remoteEvents","remote","remote_client.Client","req","_ready","load","back","_remote","ready","on","checkTimeout","updPerSecond","_on_timeout","ceil","StateService","stateProviders","internal","utils.mixin","provider","Promise$1","$powerArray","$create","$removeAt","$remove","$find","$insertAt","$each","$map","$filter","isPlaceholderTask","DataStore","pull","$initItem","visibleOrder","powerArray","fullOrder","_skip_refresh","_filterRule","_searchVisibleOrder","_indexRangeCache","_getItemsCache","_attachDataChange","_parseInner","loaded","copyOnParse","utils.copy","isSilent","_updateOrder","updateItem","utils.defined","_removeItemInner","_addItemInner","order","data_size","getVisibleItems","getIndexRange","utils.uid","_changeIdInner","changeId","_moveInner","sindex","getIdByIndex","clearAll","alreadySilent","arraysEqual","arr1","arr2","quick","skipFilter","_quick_refresh","_mark_recompute","oldOrder","count","countVisible","eachItem","rule","filteredOrder","placeholderIds","_ganttConfig","from","to","cacheKey","ret","getIndexById","_getNullIfUndefined","getFirst","getLast","TreeDataStore","_branches","loadedItem","existingItem","$parentProperty","parentProperty","$getRootId","$openInitially","openInitially","_eachItemMainRangeCache","getConfig","splitParents","splitItems","taskOpenState","taskVisibility","haveSplitItems","_isSplitItem","canOpenSplitTasks","open_split_tasks","$expanded_branch","isHeadless","_buildTree","setParent","_add_branch","calculateItemLevel","getBranchIndex","targetIndex","_move_branch","$rendered_parent","_replace_branch_child","_traverseBranches","itemId","sid","source_pid","tbranch","tid","diff","childId","pid","getSiblings","getNextSibling","siblings","nextSibling","level","eachParent","_setParentInner","new_pid","_eachItemCached","cache","_eachItemIterate","startId","itemsStack","reverse","useCache","buildCache","startItem","parentsHash","old_parent","new_parent","old_id","newbranch","field","desc","criteria","original_criteria","els","renderedParent","actualParent","_skipTaskRecalculation","datastoreRender","itemRepainter","renderer","renders","getLayers","render_item","allData","loadedRanges","layer","layerData","get_visible_range","ids","prepare_data","render_items","update_items","extraDataArr","skipRepaint","batch_update","getDataRender","onUpdateRequest","change_id","getDatastores","storeNames","facadeFactory","$StoreType","self","selectedId","deleteItem","subItem","storeAccessName","dropService","storeList","setService","_getDatastores","refreshData","scrollState","stores","refresh_links","refreshLinks","refreshLink","_bulk_dnd","hasSplitParent","isSplitTask","linksStore","_update_flags","userdata","_clear_data","oldSelectId","_skipResourceRepaint","addTask","deleteTask","utils.bind","startTask","changeTaskId","oldid","newid","getLinkCount","isLinkExists","addLink","newLink","updateLink","deleteLink","changeLinkId","ScaleHelper","services","getSum","sizes","summ","setSumWidth","sum_width","adjustSize","full_width","splitSize","full","share","sortScales","cellSize","_isLegacyMode","scaleConfig","scale_unit","subscales","_prepareScaleObject","primaryScale","legacyMode","initTemplate","scale_cell_class","getSubScales","docLink","warn","min_coll_width","container_width","minDate","maxDate","heights","configs","main_scale","cfg","initScaleConfig","processIgnores","initColSizes","limitVisibleRange","unshift","alineScaleColumns","reverseScale","setPosSettings","indexes","trace_indexes","trace_index_transition","_ignore_time_config","skip","probe","isWorkTime","ignore_x","display_count","min_col_width","line_height","cont_width","column_count","ignores","eachColumn","trace_x_ascending","iterateScales","lower_scale","upper_scale","upper_dates","lower_dates","prevUpper","target_index","upper_start","upper_end","lower_start","lower_end","targetWidth","curr","tzOffset","_correct_dst_change","lastDate","outDate","shared","_init_tasks_range","PrimaryScaleHelper","helper","start_interval","onlyProjectTasks","extendRangeForDates","constraint_type","constraint_types","ASAP","ALAP","baselines","baseline","calculateEndDate","duration","_min_date","_max_date","updateTasksRange","old_min","old_max","copyLinkIdsArray","targetHash","copyLinkIds","treeHelper","getSubtreeLinks","getSubtreeTasks","DataProcessorEvents","dp","$gantt","$dp","_dataProcessorHandlers","cascadeDelete","clientSideDelete","setGanttMode","setUpdated","_sendTaskOrder","deleteAfterConfirmation","needDbDelete","needCascadeDelete","dpMode","updateMode","setUpdateMode","cascade","storeItem","sendAllData","_tSend","_waitMode","itemLinks","_links","_dp","_tMode","_serverProcessor","_ganttMode","substring","serverProcessor","pluralizedMode","urlSeparator","upd","xml","_xmlNodeToJSON","isExist","objData","property","assignmentsStore","handleResourceCRUD","handleResourceAssignmentCRUD","handleBaselineCRUD","updated","updatedRows","clientOnly","getUserData","_in_progress","resources","dataprocessor_assignments","resource_assignment_store","insertedTasks","pendingAssignments","insertResourceAssignment","assignment","dataprocessor_resources","resourcesStore","resource_store","resource","dataprocessor_baselines","baselineStore","helpers.forEach","SimpleStorage","_storage","getStoredItem","_Vt","DataProcessor$1","serverProcessorURL","action_param","autoUpdate","_headers","_payload","_postDelim","_routerParametersFormat","_invalid","messages","inserted","deleted","invalid","invalid_cell","enableUTFencoding","total","payload","_serializeAsJson","_router","router","_utf","escape","getSyncState","dnd","rowId","findRow","existing","set_invalid","setUserData","is_invalid","markRow","sendData","_methods","editStop","pendingUpdateModes","modes","checkBeforeUpdate","_beforeSendData","_getRowData","_serializeAsJSON","serialize_one","security_key","pref","valid","_forEachUpdatedRow","_sendData","_getAllData","pattern","_uActions","btag","ganttMode","correct","originalSid","that","_xml","getGanttMode","reqUrl","filePath","tag","processCallback","afterUpdateCallback","finalizeUpdate","xmltop","cleanUpdate","atag","xpath","_initialized","_dp_init","_setDefaultTransactionMode","delete_confirmation","_change_id","_row_style","$dataprocessor_class","_delete_task","$drop_target","setDp","dataProcessorEvents","user","_user","_needUpdate","_updateBusy","afterAutoUpdate","fullSync","loadUpdate","xml_node","getUpdates","vers","_getXmlNodeValue","updates","newState","dataToSend","processedData","_cleanupArgumentsBeforeSend","_cleanupItemBeforeSend","updatedItem","output","taskState","taskAction","getActionByState","_onResolvedCreateUpdate","actionPromise","errorMsgStart","errorMsgEnd","queryParams","afterUpdate","dhxVersion","urlParams","_applyPayload","preprocessedData","query","setTransactionMode","nodeValue","hasOne","traversedObjects","_prepareDate","helpers.arrayIncludes","_prepareArray","_prepareObject","rawItem","processedItem","dataItem","_prepareDataItem","DataProcessor","DEPRECATED_api","DataProcessor.DataProcessor","createDataProcessor","tMode","createMethod","disableMethod","methodName","dummyMethod","restoreMethod","disableMethods","methodsHash","restoreMethods","batchUpdatePayload","noRedraw","dp_mode","call_dp","resetProjects","resetProjectDates","createWbs","_needRecalc","_isRecalcNeeded","_isGroupSort","_getWBSCode","_calcWBS","$virtual","$wbs","_setWBSCode","getWBSCode","getByWBSCode","_isFirst","_prevSibling","_wbs","_parent","wbs","resetCache","getTaskByWBSCode","createResourceMethods","resourceTaskCache","singleResourceCacheBuilt","falsyValuePrefix","random","resourceHashFunction","getCacheKey","resourceIds","typeFilter","getResourceTasks","matchingResources","resourceId","resourceValue","resource_id","selectAssignments","resource_property","owners","getTaskBy","propertyName","propertyValue","getResourceAssignments","assignments","resourcePlugin","renderEditableLabel","editable","$task_id","$resource_id","renderSummaryLabel","sum","reduce","Number","editableResourceCellTemplate","$role","editableResourceCellClass","capacity","getSummaryResourceAssignments","childResource","initEditableDiagram","resource_render_empty_cells","timeoutId","makeEditable","cancelAnimationFrame","contentEditable","getCellsByType","$content","assignmentEditInProcess","strValue","innerText","assignmentId","startDate","endDate","assignmentStore","nextChunk","calculateDuration","updateTaskAssignments","editable_resource_diagram","fetchTasks","lightbox_resources","lightboxOptions","resourceStoreConfig","initItems","storeType","$resourcesStore","lightboxOptionsFnc","options","updateCollection","histogram_cell_class","histogram_cell_label","histogram_cell_allocated","histogram_cell_capacity","defaultResourceCellClass","defaultResourceCellTemplate","resource_cell_value","resource_cell_class","resource_assignments","resourceAssignmentsProperty","process_resource_assignments","resourceAssignmentFormats","auto","singleValue","valueArray","resourceValueArray","assignmentsArray","resourceAssignmentFormat","assignmentModes","fixedDates","fixedDuration","default","initAssignmentFields","initDelay","timing","_assignmentTimeFromTask","resourceAssignmentsStore","_makeAssignmentsFromTask","resourceAssignments","detectFormat","usedIds","defaultMode","_updateTaskBack","_assignAssignments","getTaskAssignments","_loadAssignmentsFromTask","_syncAssignments","storeAssignments","taskValues","assignmentsStoreValues","inBoth","inTaskNotInStore","inStoreNotInTask","taskOwner","ownerId","foundOwnerAssignment","taskSearch","storeSearch","processedIds","inTask","inStore","ignoreFields","_syncOnTaskUpdate","totalAssignments","needUpdate","needUpdateFor","undoBatchCancel","assignmentsHash","unscheduled","idsSearch","deleteIds","resourceAssignmentsCache","resourceTaskAssignmentsCache","taskAssignmentsCache","searchTaskId","resourceTaskCacheKey","getTaskResources","uniqueResources","addPlaceholder","callIfEnabled","insertPlaceholder","placeholders","new_task","afterEdit","newTask","dataProcessor","_silencedPlaceholder","isPlaceholderLink","auto_task_types","checkTaskType","changedTypes","targetType","getTaskTypeToUpdate","$needsUpdate","updateParentTypes","group_mode","delTaskParent","allTypes","hasChildren","taskType","originalRowDndParent","originalMoveTaskParent","isParsingDone","updateAfterRemoveChild","DurationFormatterNumeric","canParse","_ie","LinkFormatterSimple","_linkReg","linkPart","exec","_findSource","lag","pred","reqTemplate","_ne","formatters","durationFormatter","DurationFormatter","linkFormatter","LinkFormatter","empty_state_screen","show_empty_state","emptyStateElement","isGanttEmpty","placeholderContainer","empty_state_text_link","empty_state_text_description","clickEvents","attachAddTaskEvent","domHelpers","getContainer","wrapper","marginTop","oldNodes","detachAddTaskEvents","renderContent","emptyStateElementNode","hasBaselinesBelow","baselinesOnDifferentRow","render_mode","childrenHaveBaselines","hasBaselines","isSplitParent","getMaxParentHeight","heightLimit","maxHeight","shrinkHeight","splitChild","parentHeight","getItemPosition","rowHeight","_adjustSplitParentHeight","maxParentHeight","adjustTaskHeightForBaselines","childHeight","_increaseSplitParentHeight","getLayoutView","getBarHeight","subtaskId","subtask","subtaskHeight","baselineSize","baselineAmount","subrowHeight","newBaseline","existingBaseline","shouldRepaint","iteratedBaselines","taskBaselines","exisingBaselines","getTaskBaselines","exisingBaseline","repaint","parsing","jsonParseError","on_load","resp","responseURL","_process_loading","collections","_load_collections","assignmentsByTasks","collections_loaded","collection","serverList","option","option_key","$ignore","dhx_security","serializeTask","serializeLink","_copyLink","rawLinks","baselineCopy","attrs_only","attributes","_getCollections","opts","itms","attrs","k","attr","_getXML","toptag","getXMLTopNode","skey","evs","oldxml","startdate","est","enddate","predecessortasks","message","IsWorkTimeArgument","calendar","ClosestWorkTimeArgument","CalculateEndDateArgument","GetDurationArgument","calendarArgumentsHelper","getWorkHoursArguments","helpers.isValidDate","setWorkTimeArguments","unsetWorkTimeArguments","isWorkTimeArguments","processedConfig","getClosestWorkTimeArguments","arg","_getStartEndConfig","param","argumentType","getDurationArguments","hasDurationArguments","calculateEndDateArguments","WorkTimeCalendarMerger","_getIntervals","hoursArray","_toHoursArray","intervalsArray","formatHHMM","secondsValue","minutePart","_intersectHourRanges","first","baseArray","overridesArray","current","_mergeAdjacentIntervals","_mergeHoursConfig","firstHours","secondHours","merge","firstConfig","secondConfig","mergedSettings","customWeeks","processCalendar","config1","config2","date1","date2","hours2","WorkUnitsMapCache","timestamp","_cache","has","subCache","rawValue","unitCache","yearCache","Map","WorkUnitsObjectCache","LargerUnitsCache","getMinutesPerWeek","weekStart","_weekCache","_calendar","minutesPerWeek","getHoursPerDay","getMinutesPerMonth","monthStart","_monthCache","minutesPerMonth","nextMonth","DateDurationCache","stepCache","durations","endDates","compute","_getCacheObject","startDateTimestamp","_endDateCacheKey","resultTimestamp","_durationCacheKey","endDateTimestamp","CalendarWorkTimeStrategy","argumentsHelper","_workingUnitsCache","_largeUnitsCache","_dateDurationCache","_worktime","_cached_timestamps","_cached_timestamps_count","_clearCaches","_getUnitOrder","_resetTimestampCache","_timestamp","_checkIfWorkingUnit","hasDuration","_is_work_day","_getWorkHours","_is_work_hour","startHour","endHour","_getTimeOfDayStamp","dayEnd","_is_work_minute","checkTime","_nextDate","_getWorkUnitsBetweenGeneric","stepStart","stepEnd","next","checkFirst","checkLast","isLastStep","_isWorkTime","unitOrder","biggerTimeUnit","_getClosestWorkTimeFuture","_getMinutesPerHour","hourStart","hourEnd","_getMinutesPerDay","durationMinutes","durationHours","_getWorkUnitsForRange","getUnitsPerDay","_getMinutesBetweenSingleDay","_getIntervalTimestamp","minuteFrom","minuteTo","_getMinutesBetween","firstDayStart","firstDayEnd","lastDayStart","lastDayEnd","startPart","endPart","_getHoursBetween","_setConfig","_parseSettings","haveCustomWeeks","customWeeksRangeStart","customWeeksRangeEnd","customWeeksBoundaries","_parseHours","minCustomRangeStart","maxCustomRangeEnd","customTime","rangeStart","rangeEnd","fromReadable","toReadable","currentWeek","_tryChangeCalendarSettings","backup","hasWorkTime","_arraysEqual","_compareSettings","mySettings","thatSettings","myDays","otherDates","myHours","otherHours","equals","myWeek","thatWeek","getWorkHours","dateValue","endHours","timestampRanges","part","timerangeConfig","durationSeconds","setWorkTime","calendarConfig","unsetWorkTime","reset_calendar","dateKey","isWorkUnit","setItem","getDuration","_calculateDuration","sign","mult","getEndDate","_calculateEndDate","_calculateMinuteEndDate","_subtractMinuteDate","_calculateHourEndDate","_addInterval","stopAction","added","dstShift","_addHoursUntilDayEnd","rangeHours","addHours","intervalEnd","durationLeft","hoursPerDay","_addMinutesUntilHourEnd","rangeMinutes","addMinutes","_subtractMinutesUntilHourStart","hourStartTimestamp","initialDateTimestamp","minutePrecision","_isMinutePrecision","addedInterval","calculatedDay","daySchedule","minutesInDay","dayStart","iterateFromDayEnd","isWorkHour","workInterval","prevInterval","minutesInHour","_getClosestWorkTimePast","times","lastInterval","getClosestWorkTime","_getClosestWorkTime","inputDate","direction","closestFuture","closestPast","_getClosestWorkTimeGeneric","_findClosestTimeInDay","resultDate","fromDayEnd","_getClosestWorkMinute","increment","hasRegularHours","_checkWorkHours","dayConfig","legacyResourceCalendarConfig","isLegacyResourceCalendarFormat","resourceCalendarsProperty","getResourceProperty","resourceCalendarsConfig","getCalendarIdFromLegacyConfig","calendarId","dynamicResourceCalendars","dynamicCalendars","getCalendarIdFromMultipleResources","manager","getResourceCalendar","tempCalendar","mergeCalendars","addCalendar","CalendarManager","_calendars","_legacyConfig","_isLegacyConfig","createDefaultCalendars","CalendarDisabledTimeStrategy","TimeCalculator","calendarManager","createArgumentsHelper","$disabledCalendar","NoWorkTimeCalendar","_convertWorkTimeSettings","days","calendars","mergeHelper","CalendarMergeHelper","_createCalendarFromConfig","createCalendar","apiCore","preparedConfig","parentCalendar","defaults","fulltime","getCalendar","getCalendars","_getOwnCalendar","resourceProperty","calendarsConfig","getTaskCalendar","taskObject","groupMode","currentTask","$effective_calendar","isCalendar","deleteCalendar","restoreConfigCalendars","possibleCalendar","every","fixedUnits","_getCalendar","worktimeFacadeFactory","timeCalculator","_hasDuration","isUnscheduledTask","_isAllowedUnscheduledTask","_isTaskInTimelineLimits","taskStart","taskEnd","_getProjectEnd","project_end","_getProjectStart","project_start","getDefaultTaskDate","parent_id","schedule_from_end","_set_default_task_timing","$new","showTask","_lightbox_id","_tasks_dnd","drag","getTaskTimingMode","task_type","$no_start","$no_end","scheduled_summary","updateTaskTiming","assignProjectDates","taskTiming","summaryDateFields","manuallyScheduledSummaryDateFields","dateFields","_init_task_timing","getSubtaskInfo","rollup","isScheduledSummary","task_mode","dirty","$calculate_duration","effectiveCalendar","taskMode","$rollup","getSubtaskDuration","_update_parents","updateAll","has_changed","startDateField","$auto_start_date","endDateField","$auto_end_date","oldStart","oldEnd","roundDate","upper","lower","colIndex","correctTaskWorkTime","listenWindowResize","resizeDelay","resizeTimeout","previousSize","getContainerSize","container_resize_method","lowlevelResizeWatcher","$scrollbarRepaint","currentSize","repaintGantt","previousHeight","previousWidth","gantt_core","expire","invalidContainerMessage","validateNode","cloneNode","_reinit","dropLayout","_clearTaskLayers","_clearLinkLayers","rebuildLayout","calculateScaleRange","createView","getPropertyValue","resizeWatcher","contentWindow","resetLayout","initTemplates","domHelpers.toNode","$mouseEvents","edit","question","confirm_deleting","confirm_deleting_title","_simple_confirm","hideLightbox","visibleDate","_sort","posX","_getHorizontalScrollbar","codeScrollLeft","preserveScroll","new_pos","posY","gridCell","attachedScrollbar","verticalScrollbar","$view","setSizes","changeLightboxType","getLightboxType","_silent_redraw_lightbox","_get_link_type","from_start","to_start","isLinkAllowed","prevOffset","time_unit","helpers.getSecondsInUnit","offsetChanged","domHelpers.getClassName","icon_save","icon_cancel","icon_details","confirm_closing","section_description","section_time","section_type","section_deadline","section_baselines","column_wbs","column_text","column_start_date","column_duration","column_add","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","weeks","months","years","message_ok","message_cancel","section_constraint","asap","alap","snet","snlt","fnet","fnlt","mso","mfo","resources_filter_placeholder","resources_filter_label","baselines_section_placeholder","baselines_add_button","baselines_remove_button","baselines_remove_all_button","deadline_enable_button","deadline_disable_button","LocaleManager","addLocale","_locales","getLocale","DHXGantt","license","edit_save","edit_cancel","factory","supportedExtensions","extensionManager","ExtensionManager","activePlugins","plugin","getter","service","DOMParser","ActiveXObject","loadXML","parseFromString","tagname","responseXML","getElementsByTagName","xpathExp","docObj","selectNodes","ownerDocument","evaluate","XPathResult","ANY_TYPE","iterateNext","_call","onLoad","getSync","put","postData","del","postSync","isQt","noCache","toUpperCase","RemoteEvents","copyDomEvent","pageX","pageY","DnD","_obj","_settings","inputMethods","getInputMethods","_drag_start_timer","clearDragTimer","eventParams","passive","accessor","timeStamp","original_target","original_element_sizes","domHelpers.getRelativeNodePosition","domHelpers.getClosestSizedElement","dragStart","touch_drag","traceDragEvents","inputMethod","mousemove","dragMove","dragScroll","limited_mousemove","started","updates_per_second","dndActive","cancelable","mousemoveContainer","mouseup","checkPositionChange","diff_x","diff_y","pow","sensitivity","initDnDMarker","backupEventTarget","getEvent","backup_element","touchEventsSupported","touches","elementFromPoint","pointerEnabled","pointerType","msPointerEnabled","MSPOINTER_TYPE_MOUSE","getPosition","_prevent_touch_scroll","_touch_drag","_touch_feedback","targetTouches","templatesLoader","regTemplates","initial","template_name","gantt_save_btn","gantt_cancel_btn","gantt_delete_btn","c","progress_text","grid_header_class","task_class","task_end_date","grid_row_class","task_row_class","timeline_cell_content","scale_row_class","grid_indent","grid_folder","grid_file","grid_open","grid_blank","task_unscheduled_time","grid_date_format","link_class","link_description","drag_link","drag_link_class","tooltip_date_format","baseline_text","stateService","selected_task","deletedLinks","originalTask","checkLinkedTaskVisibility","sync_link","sourceTask","sync_link_delete","sync_links","mapEvents","conf","mapFrom","mapTo","sourceEvent","targetEvent","taskLinks","existingLink","sourceMatch","targetMatch","typeMatch","changedTask","oldState","sourceVisible","targetVisible","onItemLoading","onBeforeAdd","onAfterAdd","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onIdChange","onBeforeItemMove","onAfterItemMove","onFilterItem","onItemOpen","onItemClose","onBeforeSelect","onAfterSelect","onAfterUnselect","modules","new_task_placeholder","getGridColumn","activate","_cached_functions","update_if_changed","critical_path_mode","wrap_methods","_prefetch_originals","prefetch","methodname","original","optimizer","argumentsArray","l","get_arguments_hash","cached_values","has_cached_value","get_cached_value","cache_value","arguments_hash","is_date","values","stringify_argument","deactivate","setup","override_gantt","gantt_methods","highlight_critical_path","deactivTimeout","_eventRemoveAll","resetLightbox","i18n","en","ar","be","ca","cn","cs","da","de","es","fa","fi","fr","he","hr","hu","it","jp","kr","nb","nl","no","pl","pt","ro","ru","si","sk","sv","tr","ua","setLocale","localeObject","boxAttribute","_dhx_msg_cfg","usercall","modalBox","modal_key","messageBox","keyboard","cancelBubble","modality","cover","onkeydown","messageButtonAttrString","getFirstDefined","_createBox","ok","cancel","contentId","messageModalAttr","inner","btn","onclick","hidden","innerWidth","innerHeight","alertPopup","confirmPopup","boxPopup","box_params","params","messageInfoAttr","insertBefore","timers","hideAll","popups","alert","confirm","modalbox","extendSettings","parentSettings","own","$extendedConfig","setPrototypeOf","configurable$1","parentView","parentConfig","parentTemplates","$getConfig","$getTemplates","uiFactory$1","views","createdViews","creator","configure","configurable","$parent","initUI","registerView","viewConstructor","createMouseHandler","eventHandlers","doubleclick","contextMenu","addEventTarget","onClick","findEventHandlers","callEventHandlers","onContextMenu","src","delegateHandlers","h","onDoubleClick","onMouseMove","_last_move_event","domEvents","delegate","elementHandlers","callHandler","mouseEvents","genericViewPortChecker","x_end","y_end","isLegacyRender","getRowRectangle","getVisibleTasksRange","indexStart","indexEnd","extraTasksIds","inlineEditorId","layerFactory","renderFactory","task_area_pulls","task_area_renderers","getRenderer","renderMethod","updateMethod","getRectangle","renderCallbackMethod","specializedViewPortChecker","basicGetRectangle","onrender","isInViewPort","layerView","viewConfig","rendererViewPort","useBuffer","remove_item","rendered","clear_container","basicGetRange","getVisibleRange","prepareData","buffer","createDocumentFragment","vis","itemsSearch","renderedItems","newElements","nodesToRemove","renderCalledFor","itemNode","restore","replace_item","item_id","newNode","replaceChild","clearRenderers","createGroup","relativeRoot","defaultFilters","initLayer","renderGroup","tempCollection","filters","_add","getLayer","pending","topmost","rel","mergeFilters","requestUpdate","eachLayer","removeLayer","filter_methods","filter_method","barRectangle","startCoord","endCoord","calculated","clearCache","rec","sourceBox","targetBox","initialized","visibleBoxes","isLinkInViewPort","sourceTop","sourceHeight","targetTop","targetHeight","sourceLeft","sourceRight","targetLeft","targetRight","$skipSmartRenderOnScroll","Cell","headerHeight","$domEvents","$name","$factory","_headerClickHandler","final","$preResize","topCont","topSize","getSize","maxWidth","minHeight","setSize","_hide","cellIndex","moveView","$toHTML","canCollapse","$fill","collapsed","size","gravity","getContentSize","$lastSize","contentX","contentY","_getBorderSizes","borders","horizontal","vertical","_currentBorders","_borders","_sizeHeader","_sizeContent","_setBorders","domHelpers.removeClassName","cssHash","domHelpers.addClassName","xLayout","transform","__extends","__","Layout","_super","_this","_parseConfig","domHelpers.removeNode","$cells","_resizeScrollbars","scrollbars","scrollChanged","visibleScrollbars","hiddenScrollbars","scrollbarsToHide","showScrollbar","scrollbar","hideScrollbar","shouldHide","shouldShow","visibleGroups","group","_syncCellSizes","groupName","newSize","groups","_eachChild","_syncGroupSize","cells","_xLayout","newSizeValue","isGravity","ownSize","resizeSibling","siblingSize","totalGravity","totalSize","mainGrid","grid_width","startStage","mainCall","_resizeInProgress","contentViews","setContentSize","_getAutosizeMode","$originalWidthStored","$originalWidth","$originalHeightStored","$originalHeight","isChild","cellId","sub","getCells","domHelpers.insertNode","domHelpers.getChildNodes","contentWidth","contentHeight","_cleanElSize","_getBoxStyles","computed","properties","boxSizing","clientHeight","MozBoxSizing","horPaddings","borderLeftWidth","borderRightWidth","vertPaddings","borderTopWidth","borderBottomWidth","borderBox","outerWidth","outerHeight","boxSizes","contentSizes","_sizes","margin","_calcFreeSpace","side","_free","_gravity","_calcSize","_configureBorders","borderClass","lastVisibleIndex","lastCell","borderColorClass","_updateCellVisibility","oldVisibleCells","_visibleCells","firstCall","visibleCells","parentVisibility","hide_empty","hideCell","cellView","marginSide","ViewLayout","$cell","byMaxSize","otherCell","ViewCell","childConfig","$initialized","unload","_setContentSize","outerX","outerY","childSize","ScrollbarCell","SCROLL_MODIFIER_KEYS","_scrollHorizontalHandler","_scrollVerticalHandler","_outerScrollVerticalHandler","_outerScrollHorizontalHandler","_mouseWheelHandler","scroll_size","_isHorizontal","eachCell","_isVertical","_initVertical","_initHorizontal","_initMouseWheel","_initLinkedViews","_getRootParent","_eachView","_getLinkedViews","$scroll_hor","$scroll_ver","_updateLinkedViews","scrollHorizontally","_scrolling","oldSize","scrollVertically","_wheel_time","_oldLeft","_getScrollSize","scrollSize","outerSize","isHorizontal","linked","scrollProperty","innerSizeProperty","outerProperty","_getScrollOffset","cellScrollSize","nonScrollableSize","outerScroll","innerScroll","visible","scrollSizes","_setScrollSize","toggleVisibility","_getScaleOffset","parentLayout","_oldTop","_checkWheelTarget","connectedViews","wheelSpeed","wheelSpeedConfig","wheel_scroll_sensitivity","ff","deltaX","wheelDeltaX","deltaY","wheelDelta","multiplier","deltaMode","wx","wy","horizontalScrollModifier","oldLeft","detail","oldTop","createMixin","getItemTopCache","getRowTopCache","getItemHeightCache","totalHeightCache","getItemHeightCacheState","quickPosition","cachedRowHeight","canUseSimpleCalc","_getRowHeight","_refreshState","rowStore","globalRowHeight","canUseSimpleCalculation","_resetTopPositionHeight","_resetHeight","getCacheStateTotalHeight","shouldClearHeightCache","all","itemIndex","_fillHeightCache","defaultHeight","globalHeight","itemHeightCache","sumHeight","getHeight","visibleItems","totalHeight","canvasRender","destroy","Timeline","_posFromDateCache","_timelineDragScroll","topPositionMixin","$task_scale","taskBg","$task_bg","$task_baselines","$task_links","$task_bars","$task_constraints","$task_deadlines","_tasks","linksAttr","bindLinks","item_attribute","layers","_createLayerConfig","linkLayers","_attachLayers","backgroundImage","data_els","scrollWidth","scrolled","_refreshScales","_scales","_getScaleChunkHtml","taskFilter","taskLayers","expose","taskBar","hide_bar","_taskLayers","_linkLayers","_bindStore","taskRenderer","bar_layer","_taskRenderer","_initStaticBackgroundRender","linkStore","linkRenderer","linkLayer","_linkRenderer","staticRender","_staticBgHandler","staticBgContainer","$task_bg_static","staticBackgroundHeight","_clearLayers","_render_tasks_scales","scales_html","outer_width","helpers","cfgs","fromPos","toPos","cssClass","tplClass","_prepareScaleHtml","globalConfig","globalTemplates","helpers.findBinary","cssclass","g","floatConfig","sticky","labelPosition","approxLabelWidth","labelPos","translateValue","getTimelineCellAttr","_getColumnDuration","wholeCells","partCell","roundPos","_getNextVisibleColumn","visibleDateIndex","_getPrevVisibleColumn","_getClosestVisibleColumn","dateIndex","visibleIndex","transition","xLeft","xRight","displayStart","displayEnd","isMilestoneRender","_timelineCacheAttached","_unbindStore","ScrollableGrid","_scrollOrder","getCurrentX","_dnd","_scrollView","attachEvents","isScrollable","gridBoundingRect","maxLeft","minLeft","currentX","autoscrollRight","autoscrollStart","autoscrollLeft","autoscrollStop","scrollStep","COLUMN_ID_ATTR_NAME","ColumnsGridDnd","_targetMarker","calculateCurrentPosition","eventX","DND","_scrollableGrid","_draggedCell","draggedColumn","draggedIndex","_gridConfig","outerHTML","lineHeight","_dragX","columnIndexes","findColumnsIndexes","targetColumn","cleanTargetMarker","setMarkerPosition","drawTargetMarker","reorderColumns","draggedId","xBefore","xAfter","currentColumn","startX","endX","columnRelativePos","compare","relativeX","getCorrection","gridOffset","nextPosition","Grid","$state","gridAriaAttr","gridAttrString","gridDataAriaAttr","gridDataAttrString","reorder_grid_columns","gridScaleRowAttrString","doOnRender","_renderHeaderResizers","_mouseDelegates","mouseEventContainer","resizerrow","_task_grid_row_resize","row_before_start","row_id","row_after_start","row_drag_move","dd","itemHeight","itemTop","pointerPosition","markerStartPosition","marker_height","minPointerPosition","row_drag_end","oldItemHeight","finalHeight","dnd_sensitivity","_addLayers","_initEvents","_columnDND","ColumnDnd","_validateColumnWidth","numericWidth","elasticColumns","_setColumnsWidth","columnProperty","newColumnWidth","columnsWidth","_getGridWidth","_gridCacheAttached","_initSmartRenderingPlaceholder","_calculateGridWidth","_renderGridHeader","getColumnIndex","excludeHidden","hiddenIndexShift","getColumn","gridLine","gridTaskRowResizer","_refreshPlaceholderOnStoreUpdate","$rowsPlaceholder","_getColumnWidth","min_width","new_width","max_width","_checkGridColumnMinWidthLimits","_getGridWidthLimits","min_limit","max_limit","newWidth","start_index","columns_width","final_width","extra_width","start_width","iterator","curExtra","_getColsTotalWidth","cols_width","v","parseFloat","unknown","gridWidth","delta","changed","lineHeigth","colWidth","gridScaleCellAttrString","defaultMapping","isChanged","save","onShow","preventKeyNav","shouldPrevent","editPrevCell","editNextCell","onHide","keyNavMappings","onBlurDelay","keyNav","activeCell","editorState","hasEditor","editorType","anyModifier","BaseFactory","BaseEditor","set_value","get_input","get_value","is_changed","currentValue","is_valid","textEditorFactory","TextEditor","numberEditorFactory","NumberEditor","oninput","selectEditorFactory","SelectEditor","optionsHtml","dateEditorFactory","html5DateFormat","dateToStr","strToDate","DateEditor","minValue","maxValue","predecessorEditorFactory","PredecessorEditor","getFormatter","formatter","parseInputString","predecessors","delimiter","formatPredecessors","formatLinkKey","getLinksDiff","predecessorCodes","selectedLinks","existingLinksSearch","linksToAdd","linkKey","linksToDelete","linksDiff","autoSchedule","inputPredecessors","taskPredecessors","durationEditorFactory","linkedPropertiesProcessor","decreaseStartDate","initConfigs","number","predecessor","keyboardMapping","mapping","setMapping","getMapping","eventBus","inlineEditController","createEditors","_createPlaceholder","inlineEditorAttr","updateTaskDateProperties","ganttHandlers","_itemId","_columnName","_editor","_editorType","_placeholder","setValue","editorConfig","getValue","_getItemValue","inline_editors_date_processing","_findEditableCell","nextColumn","getNextCell","getFirstCell","getLastCell","canChangeRow","moveRow","nextItem","editNextRow","skipReadonly","editPrevRow","isBarInViewport","createTaskRenderer","_task_default_render","controlsMargin","padd","milestoneHeight","milestoneWidth","done","pr","markerPos","textColor","basic","link_from_start","link_target_id","isCriticalTask","link_landing_area","from_id","link_to_start","dragClass","progressColor","u","setProperty","_get_link_crossing_css","marginStyle","_render_side_content","setTaskBarAttr","_render_pair","outer","showLinkPoints","cond","ln","tp","marginLeft","marginRight","defaultRenderer","createBaseBarRender","resourceHistogramRenderer","getVisibleCellsRange","firstCellIndex","lastCellIndex","isColumnVisible","cellLeftCoord","cellRightCoord","bgPlaceholder","placeholderConfig","lastTaskId","placeholderTask","calendar_id","createLinkRender","drawer","current_pos","dirs","path","point","get_lines","line_to","get_path","line","_get_line","get_wrapper_sizes","wrapper_size","get_line_sizes","line_size","link_line_width","render_line","innerPos","render_corner","corner","radius","lineWidth","cornerDiv","borderVertical","borderHorizontal","arrow","get_direction","vect","path_builder","point_to","get_points","get_endpoint","xy","e_y","e_x","lineType","get_line_type","forward","getMilestonePosition","splitParams","milestoneTask","siblingBaselines","shapes","lines","link_radius","arrowSize","nextLine","cornerX","cornerY","lastLine","arrowX","arrowY","shape","render_arrow","cssTemplate","isCriticalLink","linkAttr","createResourceTimelineBuilder","assignmentsPassed","timegrid","scaleUnit","scaleStep","precalculatedTimes","firstColumn","minScaleDate","currDate","cachedTimes","timetable","rowDnd","checkPlaceholderTask","getStore","initial_open_state","$transparent","lastTaskOfLevel","last_item","_getGridPos","gridHeight","maxBottom","_getTargetY","scrollPos","_getTaskByY","dropIndex","gridDataSizes","reorderMarkerAttr","containerSize","targetY","allowedLevel","over","nextId","dropTarget","createDropTargetObject","targetId","prevSibling","nextSiblingTarget","dndTaskId","prevSiblingTarget","firstChildTarget","lastChildTarget","findClosesTarget","targetLevel","findTargetAbove","findTargetBelow","getSameLevelDropPosition","relTargetPos","eventTop","targetAbove","targetBelow","gridToPageCoordinates","gridPos","setWidthWithinContainer","higlighter","removeLineHighlight","markerLine","highlightPosition","ePos","pointerEvents","markerFolder","folderHighlightWidth","linePos","indentNode","indent","iconWidth","childCount","markerLineTop","rowDndMarker","opacity","drop_target","getDropPosition","doctype","minTop","firstVisibleTaskIndex","firstVisibleTaskId","firstVisibleTaskPos","hiddenTaskPart","gridPosition","gridBottom","placeholderRowHeight","lockLevel","getLockedLevelTarget","initializer","onCreated","extendGantt","_inlineEditors","onInitialized","initEvents","extendDom","onDestroyed","clearEvents","showDate","sorting_method","totalWidth","taskDnD","createTaskDND","roundTaskDates","round_task_dates","dragMultiple","before_start","before_finish","after_finish","clear_drag_state","set_actions","drag_from_start","stage","_move","_resize","_resize_progress","on_mouse_move","on_mouse_down","on_mouse_up","start_x","start_y","coords_x","_drag_task_coords","minDurationInUnits","_calculateMinDuration","diffValue","_find_max_shift","dragItems","correctShift","minX","maxX","maxShift","minShift","multipleDragShift","new_start","new_end","obj_s_x","obj_e_x","_mouse_position_change","oldPos","newPos","_is_number","isFinite","start_drag","sX","sY","now","_start_dnd","_update_on_move","_update_item_on_move","curr_date","dragHash","_isMultiselect","dragProject","initialDrag","childDrag","_get_drag_mode","_fix_dnd_scale_time","fixStart","_fix_working_times","_finalize_mouse_up","_fireEvent","_dhx_changed","finalizingBulkMove","moveCount","doFinalize","dragProperty","selectedTasksIds","selectedTask","_addSubtasksToDragMultiple","trigger","drag_state","summaryId","initLinksDND","_link_landing","_link_target_task","_link_target_task_start","_link_source_task","_link_source_task_start","getDndState","link_edge_marker","link_landing_hover_area","markerSize","viewportSize","ganttOffsetY","updateMarkedHtml","resetDndState","showDirectingLine","s_x","s_y","_direction","getDirectionLine","link_direction_class","dist","tan","angle","atan","coordinateCircleQuarter","sin","cos","shiftLeft","shiftTop","eX","eY","_dir_start","landing","prevTarget","prevLanding","prevToStart","targ","absCoords","_dir_end","targetChanged","linkDnD","_linksDnD","_tasksDnD","MouseDelegates","_attachDomEvents","_attachStateProvider","_clearDomEvents","_clearStateProvider","_delete_link_handler","coll","coll_date","scale_step","getVerticalScrollbar","getHorizontalScrollbar","_legacyGridResizerClass","resizers","gridResizer","mainTimeline","colsWidth","hideGrid","grid_limits","ganttContainerWidth","verticalScrollbarWidth","gridOverflow","original_grid_width","skinSettings","skins","_initScrollStateEvents","_getVerticalScrollbar","_findGridResizer","gridFirst","_getSiblings","_behind","_front","resizeInfo","initialWidth","prevCellWidth","nextCellWidth","viewCell","limits","newBehindSize","newFrontSize","oldBackSize","oldFrontSize","newBackSize","ui$1","attachInitializer","uiFactory","Scrollbar","mainLayoutInitializer","mainTimelineInitializer","mainGridInitializer","ResourceGrid","ResourceTimeline","ResourceHistogram","layersEngine","createLayerFactory","previusSiblingContainer","defaultContainerSibling","addTaskLayer","rangeFunction","getVisibleTaskRange","_getTaskLayers","removeTaskLayer","addLinkLayer","getVisibleLinksRangeFactory","isLinkInViewport","_getLinkLayers","removeLinkLayer","gridEditorsFactory","layersApi","textValue","aria","gridAddButtonAttrString","justifyContent","center","gridCellAttrString","css_template","taskRowAttr","rowNode","cellNode","external_render","adapter","isElement","renderElement","renderedCells","isRendered","detachRenderedCell","getCellClassTemplate","getCellContentTemplate","renderOneCell","contentTemplate","cssTemplateContent","htmlTemplateContent","customCell","cellCssTemplate","cellHtmlTemplate","odd","placeholderTop","placeholderHeight","renderTaskBar","timedProjectBar","renderTimedProjectBar","taskRollupBar","renderedNodes","checkVisibility","generateChildElement","childCopy","$rendered_at","getKey","renderParentId","rollupKey","taskSplitBar","renderSplitTaskBar","taskConstraints","renderConstraints","taskDeadline","renderDeadline","renderBaselines","renderLink","resourceRow","getResourceLoad","resourceTimetable","renderedResourceLines","renderResourceLineCell","detachRenderedResourceLine","checkedColumns","resourceHistogram","resize_el","rowResizerAttr","layersService","_get_skin","themeVar","themeName","isCssVarTheme","href","_theme_info","theme","cssVarTheme","skinset","_second_column_width","_third_column_width","_lightbox_template","_redefine_lightbox_buttons","scrollRange","scrollDelay","scrollSpeed","isMove","delayTimeout","startPos","eventPos","isDisplayed","isScrollState","dragMarker","isResize","isLink","isClickDrag","defineDelayTimeout","speed","tick","autoscroll_delay","defineScrollInterval","autoscrollInterval","isScroll","gridDrag","need_scroll","currentScrollTop","scrollOuterHeight","scrollInnerHeight","currentScrollLeft","scrollOuterWidth","scrollInnerWidth","autoscroll_step","boxSize","$","jQuery","fn","dhx_gantt","each","newgantt","Gantt","getGanttInstance","jquery_hooks","dhtmlx","attaches","attachGantt","cmp","attachObject","dataType","dataObj","vs","av","border","gridId","gridObj","dhtmlXCellObject","dhtmlx_hooks","USE_KEY","_defaultScales","TimelineZoom","zoomIn","getCurrentLevel","setLevel","zoomOut","_levels","_activeLevelIndex","getLevels","zoomLevel","_getZoomIndexByName","levelName","_getVisibleDate","_visibleDate","cursorOffset","nextConfig","chartConfig","cursorDate","newPosition","middleDate","_attachWheelEvent","_useKey","_handler","_defaultHandler","timelineOffset","wheelUp","stopPropagation","_setScaleSettings","_setScaleDates","_initialStartDate","_initialEndDate","activeLevelIndex","_mapScales","levels","_minColumnWidth","minColumnWidth","_maxColumnWidth","maxColumnWidth","_widthStep","widthStep","_stepUp","_stepDown","nextLevel","addTouchEvents","platform","maxTouchPoints","_touch_events","getTaskDND","tasksDnD","touch_feedback","touch_feedback_duration","vibrate","touchHandlers","names","dblclicktime","actionMode","scrollMode","actionStart","longTapTimer","currentDndId","dndNodes","targetView","multiTouchEvents","newScrollState","block_action","allViews","_locate_css","taskNode","dummy","BaseControl","BaseConstrutor","htmlHelpers","getHtmlSelect","_attributes","getHtmlOption","_getHtmlContainer","getHtmlButton","getHtmlDiv","getHtmlLabel","getHtmlInput","_getHtmlAttributes","ResourcesControlConstructor","Super","SelectControl","sns","_dhx_onchange","onchange","_focus","ParentControlConstructor","ParentControl","_display","allow_root","root_label","form_blocks","tmpDom","newOptions","onselect","TemplateControl","TextareaControl","_get_input","TimeControl","getTimePicker","sectionClassName","_time_format_order","auto_end_date","_update_lightbox_select","_fill_lightbox_select","_resolve_default_mapping","selects","getTimePickerValue","autofix_end","_get_timepicker_step","SelectControlConstructor","CheckboxControl","single_value","checkboxes","checked","resArray","RadioControl","radio","default_value","DurationControl","_getStartDate","_getDuration","singleDate","lightboxDurationInputAttrString","durationInputClass","duration_val","inps","btns","endspan","_calc_date","_change_duration","charCode","ResourcesControl","ConstraintControl","isNonTimedConstraint","toggleTimeSelect","timeSelects","typeValue","isNonTimed","disabled","typeSelect","_eventsInitialized","constraintDate","constraintType","getConstraintType","TypeselectControl","typeKey","oldOnChange","_lightbox_current_type","BaselineControl","_generateBaselineRow","durationLabel","deleteLabel","durationEl","deleteButton","baselineRow","section","baselineNode","baselineId","dataset","updatedBaseline","button_click","_get_typed_lightbox_config","_lightbox_methods","_lightbox_root","showCover","_fill_lightbox","_setLbPosition","lightboxVisibleAttr","getLabel","list_name","_lightbox_type","lightboxDiv","fullWidth","ds","classNames","cspEnvironment","salesforceEnvironment","_lightbox","_is_lightbox_timepicker","wide_form","getHtmlButtons","lightboxAttr","onmousedown","_ready_to_dnd","ontouchstart","onselectstart","cursor","_init_dnd_events","show_cover","_cover","_render_sections","backup_overflow","labelBlock","inputBlock","inputId","_init_lightbox_events","block","_center_lightbox","rootElement","_move_while_dnd","_finish_dnd","_get_type_name","type_value","floatRight","lightboxButtonAttrString","getTimeFormat","time_format","getHtmlTimePickerOptions","start_year","end_year","tdate","timeFormat","year_range","_time_values","lightbox_events","_save_lightbox","_cancel_lightbox","sec","buttonTarget","getLightboxValues","time_optional","duration_optional","lightboxHiddenAttr","hideCover","_custom_lightbox","_set_lightbox_values","lightboxHeader","lightbox_header","getLightboxSection","get_template_control","control","get_select_control","get_textarea_control","get_time_control","_dnd_start_lb","gantt_unselectable","lb","_lb_start","ariaAttrs","limit_time_select","first_hour","last_hour","lightboxSelectAttrString","mapOffset","checkbox","constraint","typeselect","oldType","ui","codeHelpers.arrayFind","domEventScope","uiApi","getTimeline","getGrid","getBaseCell","baseCell","getAttachedScrollbar","DEFAULT_VALUE","tryCall","getTaskTop","getTaskBarHeight","domAttr","getLinkNode","oldH","oldV","verticalViews","horizontalViews","commonViews","viewId","newV","newH","date_x","scroll_to","leftPos","_scroll_state","timelineCell","x_pos","y_pos","x_inner","y_inner","scrollVer","scrollHor","horState","verState","cellName","horizontalScroll","verticalScroll","createLayoutFacade","resetSkin","monitorThemeChange","_addThemeClass","setSkin","monitorIntervalId","csstheme","skyblue","lightbox_additional_height","dark","meadow","terrace","broadway","_config_buttons_left","_config_buttons_right","material","indx","zoom","_extend_to_optional","lightbox_block","optional_time","update_block","button_text","htmlTags","extraSpaces","stripHTMLLite","htmlText","singleQuotes","escapeQuotes","getAttributeString","_taskCommonAttr","linkTypes","toStart","fromStart","gridSeparatorAttr","buttonName","role","tabindex","headerText","time_option","buttonLabel","targetAttribute","_locateHTML","firstTask","domHelpers.getScrollSize","availablePlugins","critical_path","grouping","groupBy","overlay","_load_url","cl","_load_type"],"mappings":"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","x_google_ignoreList":[44]}
\ No newline at end of file
+{"version":3,"file":"dhtmlxgantt.es.js","sources":["../sources/core/ui/utils/dom_helpers.js","../sources/utils/global.js","../sources/ext/click_drag/eventsManager.ts","../sources/utils/eventable.js","../sources/utils/helpers.js","../sources/ext/click_drag/selectedRegion.ts","../sources/ext/drag_timeline/eventsManager.ts","../sources/ext/keyboard_navigation/modals.js","../sources/ext/quick_info/quickInfo.ts","../sources/utils/utils.js","../sources/core/ui/utils/dom_event_scope.js","../sources/ext/tooltip/tooltip.ts","../sources/ext/tooltip/tooltipManager.ts","../sources/ext/undo/monitor.ts","../sources/ext/undo/undo.ts","../sources/ext/extensions_gpl.ts","../sources/ext/click_drag/index.ts","../sources/ext/drag_timeline/index.ts","../sources/ext/fullscreen/index.ts","../sources/ext/keyboard_navigation.js","../sources/ext/keyboard_navigation/common/keyboard_shortcuts.js","../sources/ext/keyboard_navigation/common/eventhandler.js","../sources/ext/keyboard_navigation/common/trap_modal_focus.js","../sources/ext/keyboard_navigation/elements/gantt_node.js","../sources/ext/keyboard_navigation/elements/nav_node.js","../sources/ext/keyboard_navigation/elements/header_cell.js","../sources/ext/keyboard_navigation/elements/task_row.js","../sources/ext/keyboard_navigation/elements/task_cell.js","../sources/ext/keyboard_navigation/core.js","../sources/ext/quick_info/index.ts","../sources/ext/tooltip/index.ts","../sources/ext/undo/index.ts","../sources/ext/marker.js","../sources/ext/multiselect.js","../sources/ext/export_api/index.ts","../sources/constants/index.js","../sources/ext/extension_manager.ts","../sources/core/common/config.ts","../sources/utils/env.js","../sources/core/common/serialize.ts","../sources/core/common/ajax.js","../sources/core/common/date_parsers/fast_version.ts","../sources/core/common/date_parsers/csp_compliant_version.ts","../sources/core/common/date.js","../node_modules/remote-client/dist/remote.es6.js","../sources/core/remote/remote_events.js","../sources/utils/timeout.js","../sources/core/common/state.js","../sources/utils/promise.js","../sources/core/facades/datastore_tasks.js","../sources/core/datastore/power_array.js","../sources/utils/placeholder_task.js","../sources/core/datastore/datastore.js","../sources/core/datastore/treedatastore.js","../sources/utils/is_headless.js","../sources/core/datastore/datastore_render.js","../sources/core/facades/datastore.js","../sources/core/datastore/select.js","../sources/core/facades/datastore_links.js","../sources/core/ui/timeline/scales.js","../sources/core/gantt_data_range.js","../sources/utils/task_tree_helpers.js","../sources/core/dataprocessor/data_processor_events.ts","../sources/core/dataprocessor/simple_storage.ts","../sources/core/dataprocessor/data_processor.ts","../sources/core/dataprocessor/extend_gantt.ts","../sources/core/dataprocessor/index.js","../sources/core/plugins/batch_update.js","../sources/core/plugins/wbs.js","../sources/core/plugins/resources.js","../sources/core/plugins/resource_assignments.js","../sources/core/plugins/new_task_placeholder.js","../sources/core/plugins/auto_task_types.js","../sources/core/common/duration_formatter_numeric.ts","../sources/core/common/link_formatter_simple.ts","../sources/core/plugins/formatters.js","../sources/core/plugins/empty_state_screen.ts","../sources/core/ui/render/baseline_helper.js","../sources/core/plugins/baselines.js","../sources/core/loading/parsing.js","../sources/core/worktime/calendar_arguments_helper.js","../sources/core/worktime/strategy/work_calendar_merger.js","../sources/core/worktime/strategy/work_unit_cache/workunit_map_cache.ts","../sources/core/worktime/strategy/work_unit_cache/workunit_object_cache.ts","../sources/core/worktime/strategy/work_unit_cache/larger_units_helper.ts","../sources/core/worktime/strategy/work_unit_cache/date_duration_cache.ts","../sources/core/worktime/strategy/calendar_strategy.js","../sources/core/worktime/strategy/work_unit_cache/index.ts","../sources/core/worktime/legacy_resource_config.js","../sources/core/worktime/calendar_manager.js","../sources/core/worktime/dynamic_resource_calendars.js","../sources/core/worktime/strategy/no_work_time.js","../sources/core/worktime/time_calculator.js","../sources/core/facades/worktime_calendars.js","../sources/core/data.js","../sources/core/ui/resize_listener.js","../sources/core/gantt_core.js","../sources/core/common/assert.js","../sources/locale/locale_ar.ts","../sources/locale/locale_be.ts","../sources/locale/locale_ca.ts","../sources/locale/locale_cn.ts","../sources/locale/locale_cs.ts","../sources/locale/locale_da.ts","../sources/locale/locale_de.ts","../sources/locale/locale_el.ts","../sources/locale/locale_en.ts","../sources/locale/locale_es.ts","../sources/locale/locale_fa.ts","../sources/locale/locale_fi.ts","../sources/locale/locale_fr.ts","../sources/locale/locale_he.ts","../sources/locale/locale_hr.ts","../sources/locale/locale_hu.ts","../sources/locale/locale_id.ts","../sources/locale/locale_it.ts","../sources/locale/locale_jp.ts","../sources/locale/locale_kr.ts","../sources/locale/locale_manager.ts","../sources/locale/locale_nb.ts","../sources/locale/locale_nl.ts","../sources/locale/locale_no.ts","../sources/locale/locale_pl.ts","../sources/locale/locale_pt.ts","../sources/locale/locale_ro.ts","../sources/locale/locale_ru.ts","../sources/locale/locale_si.ts","../sources/locale/locale_sk.ts","../sources/locale/locale_sv.ts","../sources/locale/locale_tr.ts","../sources/locale/locale_ua.ts","../sources/factory/make_instance_common.js","../sources/core/common/services.js","../sources/core/common/dnd.js","../sources/core/common/templates.js","../sources/core/datastore/datastore_hooks.js","../sources/core/plugins/index.js","../sources/core/grid_column_api.gpl.js","../sources/core/tasks.js","../sources/core/worktime/work_time.js","../sources/core/data_task_types.gpl.js","../sources/core/cached_functions.js","../sources/core/destructor.js","../sources/locale/index.ts","../sources/core/ui/message.js","../sources/core/ui/configurable.js","../sources/core/ui/ui_factory.js","../sources/core/ui/mouse.js","../sources/core/ui/render/viewport/is_in_viewport.js","../sources/core/ui/render/is_legacy_smart_render.js","../sources/core/ui/render/viewport/get_grid_row_rectangle.js","../sources/core/ui/render/viewport/get_visible_bars_range.js","../sources/core/ui/render/render_factory.js","../sources/core/ui/render/layer_engine.js","../sources/core/ui/render/viewport/get_bar_rectangle.js","../sources/core/ui/render/viewport/factory/get_visible_link_range.js","../sources/core/ui/render/viewport/get_link_rectangle.js","../sources/core/ui/render/viewport/is_link_in_viewport.js","../sources/core/ui/gantt_layers.js","../sources/core/ui/layout/cell.js","../sources/utils/extends.js","../sources/core/ui/layout/layout.js","../sources/core/ui/layout/view_layout.js","../sources/core/ui/layout/view_cell.js","../sources/core/ui/layout/scrollbar_cell.js","../sources/core/ui/row_position_mixin.js","../sources/core/ui/row_position_fixed_height.js","../sources/core/ui/timeline/tasks_canvas_render.gpl.js","../sources/core/ui/timeline/timeline.js","../sources/core/ui/timeline/timeline_layers_gpl.js","../sources/core/ui/plugins/column_grid_dnd/scrollable_grid.ts","../sources/core/ui/plugins/column_grid_dnd/column_grid_dnd.ts","../sources/core/ui/mouse_event_container.js","../sources/core/ui/grid/grid.js","../sources/core/ui/grid/grid_resize.gpl.js","../sources/core/ui/grid/task_grid_row_resize.js","../sources/core/ui/grid/editors/keyboard_mappings/default.js","../sources/core/ui/grid/editors/keyboard_mappings/keyboard_navigation.js","../sources/core/ui/grid/editors/editors/base.js","../sources/core/ui/grid/editors/editors/text.js","../sources/core/ui/grid/editors/editors/number.js","../sources/core/ui/grid/editors/editors/select.js","../sources/core/ui/grid/editors/editors/date.js","../sources/core/ui/grid/editors/editors/predecessor.js","../sources/core/ui/grid/editors/editors/duration.js","../sources/core/ui/grid/editors/linked_properties.js","../sources/core/ui/grid/editors/controller.js","../sources/core/ui/grid/editors/keyboard_mappings.js","../sources/core/ui/render/viewport/is_bar_in_viewport.js","../sources/core/ui/render/task_bar_render.js","../sources/core/ui/render/task_bar_smart_render.js","../sources/core/ui/render/dummy_layer.js","../sources/core/ui/render/viewport/get_bg_row_rectangle.js","../sources/core/ui/render/viewport/get_visible_cells_range.js","../sources/core/ui/render/viewport/is_column_visible.js","../sources/core/ui/render/prerender/task_bg_placeholder.js","../sources/core/ui/render/link_render.js","../sources/core/ui/render/viewport/is_grid_row_in_viewport.js","../sources/core/resource_timetable_builder.js","../sources/core/ui/grid/tasks_grid_dnd.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/drop_target.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/locked_level.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/highlight.js","../sources/core/ui/grid/tasks_grid_dnd_marker.js","../sources/core/ui/grid/tasks_grid_dnd_marker_helpers/multi_level.js","../sources/core/ui/grid/main_grid_initializer.js","../sources/core/ui/timeline/tasks_dnd.js","../sources/core/ui/timeline/links_dnd.js","../sources/core/ui/timeline/main_timeline_initializer.js","../sources/core/ui/main_layout_initializer.js","../sources/core/ui/index.js","../sources/core/ui/layout/resizer_cell.gpl.js","../sources/core/ui/render/task_grid_line_render.js","../sources/core/ui/render/task_bg_render.js","../sources/core/ui/render/task_rollup_render.js","../sources/core/ui/render/resource_matrix_render.js","../sources/core/ui/render/task_grid_row_resize_render.js","../sources/core/ui/skin.js","../sources/core/ui/plugins/autoscroll.js","../sources/core/ui/plugins/jquery_hooks.js","../sources/core/ui/plugins/dhtmlx_hooks.js","../sources/core/ui/plugins/timeline_zoom.ts","../sources/core/ui/touch.js","../sources/core/ui/lightbox/controls/base_control.js","../sources/core/ui/utils/html_helpers.js","../sources/core/ui/lightbox/controls/select_control.js","../sources/core/ui/lightbox/controls/parent_control.js","../sources/core/ui/lightbox/index.js","../sources/core/ui/lightbox/controls/template_control.js","../sources/core/ui/lightbox/controls/textarea_control.js","../sources/core/ui/lightbox/controls/time_control.js","../sources/core/ui/lightbox/controls/checkbox_control.js","../sources/core/ui/lightbox/controls/radio_control.js","../sources/core/ui/lightbox/controls/duration_control.js","../sources/core/ui/lightbox/controls/constraint_control.js","../sources/core/ui/lightbox/controls/typeselect_control.js","../sources/core/ui/lightbox/controls/baseline_control.js","../sources/core/ui_core.js","../sources/core/data_task_layers.gpl.js","../sources/core/facades/layout.js","../sources/css/skins/skyblue.js","../sources/css/skins/dark.js","../sources/css/skins/meadow.js","../sources/css/skins/terrace.js","../sources/css/skins/broadway.js","../sources/css/skins/material.js","../sources/css/skins/contrast_black.js","../sources/css/skins/contrast_white.js","../sources/core/ui/plugins/index.js","../sources/core/ui/lightbox/lightbox_optional_time.js","../sources/core/ui/wai_aria.js","../sources/dhtmlxgantt.gpl.ts","../sources/factory/make_instance_web.js","../sources/core/loading/ajax_loading.js"],"sourcesContent":["//returns position of html element on the page\r\nfunction getNodePosition(elem) {\r\n\tvar top=0, left=0, right=0, bottom=0;\r\n\tif (elem.getBoundingClientRect) { //HTML5 method\r\n\t\tvar box = elem.getBoundingClientRect();\r\n\t\tvar body = document.body;\r\n\t\tvar docElem = (document.documentElement ||\r\n\t\t\tdocument.body.parentNode ||\r\n\t\t\tdocument.body);\r\n\r\n\t\tvar scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\r\n\t\tvar scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\r\n\t\tvar clientTop = docElem.clientTop || body.clientTop || 0;\r\n\t\tvar clientLeft = docElem.clientLeft || body.clientLeft || 0;\r\n\t\ttop = box.top + scrollTop - clientTop;\r\n\t\tleft = box.left + scrollLeft - clientLeft;\r\n\r\n\t\tright = document.body.offsetWidth - box.right;\r\n\t\tbottom = document.body.offsetHeight - box.bottom;\r\n\t} else { //fallback to naive approach\r\n\t\twhile(elem) {\r\n\t\t\ttop = top + parseInt(elem.offsetTop,10);\r\n\t\t\tleft = left + parseInt(elem.offsetLeft,10);\r\n\t\t\telem = elem.offsetParent;\r\n\t\t}\r\n\r\n\t\tright = document.body.offsetWidth - elem.offsetWidth - left;\r\n\t\tbottom = document.body.offsetHeight - elem.offsetHeight - top;\r\n\t}\r\n\treturn { y: Math.round(top), x: Math.round(left), width:elem.offsetWidth, height:elem.offsetHeight, right: Math.round(right), bottom: Math.round(bottom) };\r\n}\r\n\r\nfunction isVisible(node){\r\n\tvar display = false,\r\n\t\tvisibility = false;\r\n\tif(window.getComputedStyle){\r\n\t\tvar style = window.getComputedStyle(node, null);\r\n\t\tdisplay = style[\"display\"];\r\n\t\tvisibility = style[\"visibility\"];\r\n\t}else if(node.currentStyle){\r\n\t\tdisplay = node.currentStyle[\"display\"];\r\n\t\tvisibility = node.currentStyle[\"visibility\"];\r\n\t}\r\n\treturn (display != \"none\" && visibility != \"hidden\");\r\n}\r\n\r\nfunction hasNonNegativeTabIndex(node){\r\n\treturn !isNaN(node.getAttribute(\"tabindex\")) && (node.getAttribute(\"tabindex\")*1 >= 0);\r\n}\r\n\r\nfunction hasHref(node){\r\n\tvar canHaveHref = {\"a\": true, \"area\": true};\r\n\tif(canHaveHref[node.nodeName.loLowerCase()]){\r\n\t\treturn !!node.getAttribute(\"href\");\r\n\t}\r\n\treturn true;\r\n}\r\n\r\nfunction isEnabled(node){\r\n\tvar canDisable = {\"input\":true, \"select\":true, \"textarea\":true, \"button\":true, \"object\":true};\r\n\tif(canDisable[node.nodeName.toLowerCase()]){\r\n\t\treturn !node.hasAttribute(\"disabled\");\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nfunction getFocusableNodes(root){\r\n\tvar nodes = root.querySelectorAll([\r\n\t\t\"a[href]\",\r\n\t\t\"area[href]\",\r\n\t\t\"input\",\r\n\t\t\"select\",\r\n\t\t\"textarea\",\r\n\t\t\"button\",\r\n\t\t\"iframe\",\r\n\t\t\"object\",\r\n\t\t\"embed\",\r\n\t\t\"[tabindex]\",\r\n\t\t\"[contenteditable]\"\r\n\t].join(\", \"));\r\n\r\n\tvar nodesArray = Array.prototype.slice.call(nodes, 0);\r\n\t\r\n\tfor(var i = 0; i < nodesArray.length; i++){\r\n\t\tnodesArray[i].$position = i;\r\n\t\t// we remember original nodes order, \r\n\t\t// so when we sort them by tabindex we ensure order of nodes with same tabindex is preserved, \r\n\t\t// since some browsers do unstable sort\r\n\t}\r\n\t\r\n\t// use tabindex to sort focusable nodes\r\n\tnodesArray.sort(function(a, b) {\r\n\t\tif(a.tabIndex === 0 && b.tabIndex !== 0){\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif(a.tabIndex !== 0 && b.tabIndex === 0){\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\t\r\n\t\tif (a.tabIndex === b.tabIndex){\r\n\t\t\t// ensure we do stable sort\r\n\t\t\treturn a.$position - b.$position;\r\n\t\t}\r\n\t\tif (a.tabIndex < b.tabIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\treturn 1;\r\n\t});\r\n\t\r\n\tfor(var i = 0; i < nodesArray.length; i++){\r\n\t\tvar node = nodesArray[i];\r\n\t\tvar isValid = (hasNonNegativeTabIndex(node) || isEnabled(node) || hasHref(node)) && isVisible(node);\r\n\t\tif(!isValid){\r\n\t\t\tnodesArray.splice(i, 1);\r\n\t\t\ti--;\r\n\t\t}\r\n\t}\r\n\treturn nodesArray;\r\n}\r\n\r\nfunction getScrollSize(){\r\n\tvar div = document.createElement(\"div\");\r\n\tdiv.style.cssText=\"visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;\";\r\n\r\n\tdocument.body.appendChild(div);\r\n\tvar width = div.offsetWidth-div.clientWidth;\r\n\tdocument.body.removeChild(div);\r\n\r\n\treturn Math.max(width, 15);\r\n}\r\n\r\nfunction getClassName(node){\r\n\tif(!node) return \"\";\r\n\r\n\tvar className = node.className || \"\";\r\n\tif(className.baseVal)//'className' exist but not a string - IE svg element in DOM\r\n\t\tclassName = className.baseVal;\r\n\r\n\tif(!className.indexOf)\r\n\t\tclassName = \"\";\r\n\r\n\treturn _trimString(className);\r\n}\r\n\r\nfunction addClassName(node, className){\r\n\tif (className && node.className.indexOf(className) === -1) {\r\n\t\tnode.className += \" \" + className;\r\n\t}\r\n}\r\n\r\nfunction removeClassName(node, name) {\r\n\tname = name.split(\" \");\r\n\tfor (var i = 0; i < name.length; i++) {\r\n\t\tvar regEx = new RegExp(\"\\\\s?\\\\b\" + name[i] + \"\\\\b(?![-_.])\", \"\");\r\n\t\tnode.className = node.className.replace(regEx, \"\");\r\n\t}\r\n}\r\n\r\nfunction hasClass(element, className){\r\n\tif ('classList' in element) {\r\n\t\treturn element.classList.contains(className);\r\n\t} else { \r\n\t\treturn new RegExp(\"\\\\b\" + className + \"\\\\b\").test(element.className);\r\n\t}\r\n}\r\n\r\nfunction toNode(node) {\r\n\tif (typeof node === \"string\") {\r\n\t\treturn (document.getElementById(node) || document.querySelector(node) || document.body);\r\n\t}\r\n\treturn node || document.body;\r\n}\r\n\r\nvar _slave;\r\nfunction insertNode(node, newone) {\r\n\tif(!_slave){\r\n\t\t_slave = document.createElement(\"div\");\r\n\t}\r\n\t_slave.innerHTML = newone;\r\n\tvar child = _slave.firstChild;\r\n\tnode.appendChild(child);\r\n\treturn child;\r\n}\r\n\r\nfunction removeNode(node) {\r\n\tif (node && node.parentNode) {\r\n\t\tnode.parentNode.removeChild(node);\r\n\t}\r\n}\r\n\r\nfunction getChildNodes(node, css) {\r\n\tvar ch = node.childNodes;\r\n\tvar len = ch.length;\r\n\tvar out = [];\r\n\tfor (var i = 0; i < len; i++) {\r\n\t\tvar obj = ch[i];\r\n\t\tif (obj.className && obj.className.indexOf(css) !== -1) {\r\n\t\t\tout.push(obj);\r\n\t\t}\r\n\t}\r\n\treturn out;\r\n}\r\n\r\nfunction getTargetNode(e) {\r\n\tvar trg;\r\n\tif (e.tagName)\r\n\t\ttrg = e;\r\n\telse {\r\n\t\te = e || window.event;\r\n\t\ttrg = e.target || e.srcElement;\r\n\t\tif (trg.shadowRoot && e.composedPath) {\r\n\t\t\ttrg = e.composedPath()[0];\r\n\t\t}\r\n\t}\r\n\treturn trg;\r\n}\r\n\r\nfunction locateAttribute(e, attribute) {\r\n\tif(!attribute) return;\r\n\r\n\tvar trg = getTargetNode(e);\r\n\r\n\twhile (trg){\r\n\t\tif (trg.getAttribute){\t//text nodes has not getAttribute\r\n\t\t\tvar test = trg.getAttribute(attribute);\r\n\t\t\tif (test) return trg;\r\n\t\t}\r\n\t\ttrg=trg.parentNode;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction _trimString(str){\r\n\tvar func = String.prototype.trim || function(){ return this.replace(/^\\s+|\\s+$/g, \"\"); };\r\n\treturn func.apply(str);\r\n}\r\n\r\nfunction locateClassName(e, classname, strict){\r\n\tvar trg = getTargetNode(e);\r\n\tvar css = \"\";\r\n\r\n\tif(strict === undefined)\r\n\t\tstrict = true;\r\n\r\n\twhile (trg){\r\n\t\tcss = getClassName(trg);\r\n\t\tif(css){\r\n\t\t\tvar ind = css.indexOf(classname);\r\n\t\t\tif (ind >= 0){\r\n\t\t\t\tif (!strict)\r\n\t\t\t\t\treturn trg;\r\n\r\n\t\t\t\t//check that we have exact match\r\n\t\t\t\tvar left = (ind === 0) || (!_trimString(css.charAt(ind - 1)));\r\n\t\t\t\tvar right = ((ind + classname.length >= css.length)) || (!_trimString(css.charAt(ind + classname.length)));\r\n\r\n\t\t\t\tif (left && right)\r\n\t\t\t\t\treturn trg;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttrg=trg.parentNode;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\n/*\r\nevent position relatively to DOM element\r\n */\r\nfunction getRelativeEventPosition(ev, node){\r\n\tvar d = document.documentElement;\r\n\tvar box = getNodePosition(node);\r\n\r\n\treturn {\r\n\t\tx: ev.clientX + d.scrollLeft - d.clientLeft - box.x + node.scrollLeft,\r\n\t\ty: ev.clientY + d.scrollTop - d.clientTop - box.y + node.scrollTop\r\n\t};\r\n}\r\n\r\nfunction getRelativeNodePosition(child, parent){\r\n\tconst childPos = getNodePosition(child);\r\n\tconst parentPos = getNodePosition(parent);\r\n\treturn {\r\n\t\tx: childPos.x - parentPos.x,\r\n\t\ty: childPos.y - parentPos.y\r\n\t};\r\n}\r\n\r\nfunction isChildOf(child, parent){\r\n\tif(!child || !parent){\r\n\t\treturn false;\r\n\t}\r\n\r\n\twhile(child && child != parent) {\r\n\t\tchild = child.parentNode;\r\n\t}\r\n\r\n\treturn child === parent;\r\n}\r\n\r\nfunction closest(element, selector){\r\n\tif(element.closest){\r\n\t\treturn element.closest(selector);\r\n\t}else if(element.matches || element.msMatchesSelector || element.webkitMatchesSelector){\r\n\t\tvar el = element;\r\n\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\tdo {\r\n\t\t\tvar method = el.matches || el.msMatchesSelector || el.webkitMatchesSelector;\r\n\r\n\t\t\tif (method.call(el, selector)) return el;\r\n\t\t\tel = el.parentElement || el.parentNode;\r\n\t\t} while (el !== null && el.nodeType === 1); \r\n\t\treturn null;\r\n\t}else{\r\n\t\t// eslint-disable-next-line no-console\r\n\t\tconsole.error(\"Your browser is not supported\");\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\nfunction getClosestSizedElement(element) {\r\n\twhile (element) {\r\n\t\tif (element.offsetWidth > 0 && element.offsetHeight > 0) {\r\n\t\t\treturn element;\r\n\t\t}\r\n\t\telement = element.parentElement;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction isShadowDomSupported() {\r\n\treturn document.head.createShadowRoot || document.head.attachShadow;\r\n}\r\n\r\n/**\r\n * Returns element that has the browser focus, or null if no element has focus.\r\n * Works with shadow DOM, so it's prefereed to use this function instead of document.activeElement directly.\r\n * @returns HTMLElement\r\n */\r\nfunction getActiveElement(){\r\n\tvar activeElement = document.activeElement;\r\n\tif (activeElement.shadowRoot) {\r\n\t\tactiveElement = activeElement.shadowRoot.activeElement;\r\n\t}\r\n\tif (activeElement === document.body && document.getSelection) {\r\n\t\tactiveElement = document.getSelection().focusNode || document.body;\r\n\t}\r\n\r\n\treturn activeElement;\r\n}\r\n\r\n/**\r\n * Returns document.body or the host node of the ShadowRoot, if the element is attached to ShadowDom\r\n * @param {HTMLElement} element \r\n * @returns HTMLElement\r\n */\r\nfunction getRootNode(element) {\r\n\tif (!element) {\r\n\t\treturn document.body;\r\n\t}\r\n\tif (!isShadowDomSupported()) {\r\n\t\treturn document.body;\r\n\t}\r\n\twhile (element.parentNode && (element = element.parentNode)) {\r\n\t\tif (element instanceof ShadowRoot) {\r\n\t\t\treturn element.host;\r\n\t\t}\r\n\t}\r\n\treturn document.body;\r\n}\r\n\r\nfunction hasShadowParent(element) {\r\n\treturn !!getRootNode(element);\r\n}\r\n\r\nexport {\r\n\tgetNodePosition,\r\n\tgetFocusableNodes,\r\n\tgetScrollSize,\r\n\tgetClassName,\r\n\taddClassName,\r\n\tremoveClassName,\r\n\tinsertNode,\r\n\tremoveNode,\r\n\tgetChildNodes,\r\n\ttoNode,\r\n\tlocateClassName,\r\n\tlocateAttribute,\r\n\tgetTargetNode,\r\n\tgetRelativeEventPosition,\r\n\tisChildOf,\r\n\thasClass,\r\n\tclosest,\r\n\tgetRootNode,\r\n\thasShadowParent,\r\n\tisShadowDomSupported,\r\n\tgetActiveElement,\r\n\tgetRelativeNodePosition,\r\n\tgetClosestSizedElement\r\n};","\r\n/* eslint-disable no-restricted-globals */\r\nvar globalScope;\r\nif(typeof window !== \"undefined\"){\r\n\tglobalScope = window;\r\n}else{\r\n\tglobalScope = global;\r\n}\r\n/* eslint-enable no-restricted-globals */\r\n\r\nexport default globalScope;","import * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\nimport global from \"../../utils/global\";\r\nimport { SelectedRegion } from \"./selectedRegion\";\r\n\r\nexport class EventsManager {\r\n\tprivate _mouseDown: boolean = false;\r\n\tprivate _domEvents: any;\r\n\tprivate _originPosition: string;\r\n\tprivate _gantt: any;\r\n\tprivate _restoreOriginPosition: () => void;\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t}\r\n\r\n\tattach(selectedRegion: SelectedRegion, useKey?: \"shiftKey\" | \"ctrlKey\" | \"altKey\", ignore?: any): void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst _target = selectedRegion.getViewPort();\r\n\t\tthis._originPosition = global.getComputedStyle(_target).display;\r\n\t\tthis._restoreOriginPosition = () => {\r\n\t\t\t_target.style.position = this._originPosition;\r\n\t\t};\r\n\t\tif (this._originPosition === \"static\") {\r\n\t\t\t_target.style.position = \"relative\";\r\n\t\t}\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tstate.registerProvider(\"clickDrag\", () => {\r\n\t\t\tconst result = { autoscroll: false };\r\n\t\t\treturn result;\r\n\t\t});\r\n\r\n\r\n\t\tlet scheduledDndCoordinates = null;\r\n\t\tconst startDragAndDrop = () => {\r\n\t\t\tif (!scheduledDndCoordinates) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._mouseDown = true;\r\n\t\t\tselectedRegion.setStart(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tselectedRegion.setPosition(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tselectedRegion.setEnd(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t};\r\n\r\n\t\tthis._domEvents.attach(_target, \"mousedown\", (event) => {\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\r\n\t\t\tif (ignore !== undefined) {\r\n\t\t\t\tif (ignore instanceof Array) {\r\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilterTargets = ignore;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (filterTargets) {\r\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstate.registerProvider(\"clickDrag\", () => {\r\n\t\t\t\tconst result = { autoscroll: this._mouseDown };\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\tscheduledDndCoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t});\r\n\t\tconst eventElement = domHelpers.getRootNode(gantt.$root) || document.body;\r\n\t\tthis._domEvents.attach(eventElement, \"mouseup\", (event) => {\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tthis._mouseDown = false;\r\n\t\t\t\tconst coordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tselectedRegion.dragEnd(coordinates);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._domEvents.attach(_target, \"mousemove\", (event) => {\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\t// GS-854. If we don't have useKey for the click_drag extension,\r\n\t\t\t// check the drag_timeline to not simultaneously use both extensions\r\n\t\t\tconst dragTimeline = this._gantt.ext.clickDrag;\r\n\t\t\tconst dragTimelineUseKey = (this._gantt.config.drag_timeline || {}).useKey;\r\n\t\t\tif (dragTimeline && dragTimelineUseKey) {\r\n\t\t\t\tif (!useKey && event[dragTimelineUseKey]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet coordinates = null;\r\n\t\t\tif(!this._mouseDown && scheduledDndCoordinates){\r\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tif(Math.abs(scheduledDndCoordinates.relative.left - coordinates.relative.left) > 5){\r\n\t\t\t\t\t// add small threshold not to start dnd on simple click\r\n\t\t\t\t\tstartDragAndDrop();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tselectedRegion.setEnd(coordinates);\r\n\t\t\t\tselectedRegion.render();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdetach(): void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._domEvents.detachAll();\r\n\t\tif(this._restoreOriginPosition){\r\n\t\t\tthis._restoreOriginPosition();\r\n\t\t}\r\n\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tstate.unregisterProvider(\"clickDrag\");\r\n\t}\r\n\r\n\tdestructor(): void {\r\n\t\tthis.detach();\r\n\t}\r\n\r\n\tprivate _getCoordinates(event: MouseEvent, selectedRegion: SelectedRegion) {\r\n\t\tconst viewPort = selectedRegion.getViewPort();\r\n\t\tconst viewPortBounds = viewPort.getBoundingClientRect();\r\n\t\tconst { clientX, clientY } = event;\r\n\t\tconst result = {\r\n\t\t\tabsolute: {\r\n\t\t\t\tleft: clientX,\r\n\t\t\t\ttop: clientY\r\n\t\t\t},\r\n\t\t\trelative: {\r\n\t\t\t\tleft: clientX - viewPortBounds.left + viewPort.scrollLeft,\r\n\t\t\t\ttop: clientY - viewPortBounds.top + viewPort.scrollTop\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn result;\r\n\t}\r\n}","var EventHost = function(){\r\n\tthis._silent_mode = false;\r\n\tthis.listeners = {};\r\n};\r\n\r\nEventHost.prototype = {\r\n\t_silentStart: function() {\r\n\t\tthis._silent_mode = true;\r\n\t},\r\n\t_silentEnd: function() {\r\n\t\tthis._silent_mode = false;\r\n\t}\r\n};\r\n\r\nvar\tcreateEventStorage = function(obj) {\r\n\tvar handlers = {};\r\n\tvar index = 0;\r\n\tvar eventStorage = function(){\r\n\t\tvar combinedResult = true;\r\n\t\tfor(var i in handlers){\r\n\t\t\tvar handlerResult = handlers[i].apply(obj, arguments);\r\n\t\t\tcombinedResult=combinedResult && handlerResult;\r\n\t\t}\r\n\t\treturn combinedResult;\r\n\t};\r\n\teventStorage.addEvent=function(handler, settings){\r\n\t\tif (typeof (handler) == \"function\"){\r\n\t\t\tvar handlerId;\r\n\t\t\tif(settings && settings.id){\r\n\t\t\t\thandlerId = settings.id;\r\n\t\t\t}else{\r\n\t\t\t\thandlerId = index;\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\r\n\t\t\tif(settings && settings.once){\r\n\t\t\t\tvar originalHandler = handler;\r\n\t\t\t\thandler = function(){\r\n\t\t\t\t\toriginalHandler();\r\n\t\t\t\t\teventStorage.removeEvent(handlerId);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\thandlers[handlerId] = handler;\r\n\t\t\treturn handlerId;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\teventStorage.removeEvent=function(id){\r\n\t\tdelete handlers[id];\r\n\t};\r\n\r\n\teventStorage.clear = function(){\r\n\t\thandlers = {};\r\n\t};\r\n\r\n\treturn eventStorage;\r\n};\r\n\r\nfunction makeEventable(obj){\r\n\r\n\tvar eventHost = new EventHost();\r\n\tobj.attachEvent=function(eventName, handler, settings){\r\n\t\teventName = 'ev_'+eventName.toLowerCase();\r\n\t\tif (!eventHost.listeners[eventName]){\r\n\t\t\teventHost.listeners[eventName] = createEventStorage(this);\r\n\t\t}\r\n\r\n\t\tif(settings && settings.thisObject){\r\n\t\t\thandler = handler.bind(settings.thisObject);\r\n\t\t}\r\n\r\n\t\tvar innerId = eventHost.listeners[eventName].addEvent(handler, settings);\r\n\r\n\t\tvar handlerId = (eventName+':'+innerId); //return ID (ev_eventname:1)\r\n\t\tif(settings && settings.id){\r\n\t\t\thandlerId = settings.id;\r\n\t\t}\r\n\t\treturn handlerId;\r\n\t};\r\n\r\n\tobj.attachAll = function(callback){\r\n\t\tthis.attachEvent('listen_all', callback);\r\n\t};\r\n\r\n\tobj.callEvent=function(name, eventArguments){\r\n\t\tif (eventHost._silent_mode) return true;\r\n\r\n\t\tvar handlerName = 'ev_'+name.toLowerCase();\r\n\r\n\t\tvar listeners = eventHost.listeners;\r\n\t\tif (listeners['ev_listen_all']){\r\n\t\t\tlisteners['ev_listen_all'].apply(this, [name].concat(eventArguments));\r\n\t\t}\r\n\r\n\t\tif (listeners[handlerName])\r\n\t\t\treturn listeners[handlerName].apply(this, eventArguments);\r\n\t\treturn true;\r\n\t};\r\n\r\n\tobj.checkEvent=function(name){\r\n\t\tvar listeners = eventHost.listeners;\r\n\t\treturn (!!listeners['ev_'+name.toLowerCase()]);\r\n\t};\r\n\r\n\tobj.detachEvent=function(id){\r\n\t\tif (id){\r\n\t\t\tvar listeners = eventHost.listeners;\r\n\t\t\tfor(var i in listeners){\r\n\t\t\t\tlisteners[i].removeEvent(id); //remove event\r\n\t\t\t}\r\n\r\n\t\t\tvar list = id.split(':');//get EventName and ID\r\n\t\t\tvar listeners = eventHost.listeners;\r\n\t\t\tif(list.length === 2){\r\n\t\t\t\tvar eventName = list[0];\r\n\t\t\t\tvar eventId = list[1];\r\n\t\t\t\tif(listeners[eventName]){\r\n\t\t\t\t\tlisteners[eventName].removeEvent(eventId); //remove event\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tobj.detachAllEvents = function(){\r\n\t\tfor (var name in eventHost.listeners) {\r\n\t\t\teventHost.listeners[name].clear();\r\n\t\t}\r\n\t};\r\n\r\n}\r\n\r\nexport default makeEventable;","var units = {\r\n\t\"second\": 1,\r\n\t\"minute\": 60,\r\n\t\"hour\": 60 * 60,\r\n\t\"day\": 60 * 60 * 24,\r\n\t\"week\": 60 * 60 * 24 * 7,\r\n\t\"month\": 60 * 60 * 24 * 30,\r\n\t\"quarter\": 60 * 60 * 24 * 30 * 3,\r\n\t\"year\": 60 * 60 * 24 * 365\r\n};\r\nfunction getSecondsInUnit(unit){\r\n\treturn units[unit] || units.hour;\r\n}\r\n\r\nfunction forEach(arr, callback) {\r\n\tif (arr.forEach) {\r\n\t\tarr.forEach(callback);\r\n\t} else {\r\n\t\tvar workArray = arr.slice();\r\n\t\tfor (var i = 0; i < workArray.length; i++) {\r\n\t\t\tcallback(workArray[i], i);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction arrayMap(arr, callback) {\r\n\tif (arr.map) {\r\n\t\treturn arr.map(callback);\r\n\t} else {\r\n\t\tvar workArray = arr.slice();\r\n\t\tvar resArray = [];\r\n\r\n\t\tfor (var i = 0; i < workArray.length; i++) {\r\n\t\t\tresArray.push(callback(workArray[i], i));\r\n\t\t}\r\n\t\treturn resArray;\r\n\t}\r\n}\r\n\r\n\r\nfunction arrayFind(arr, callback) {\r\n\tif (arr.find) {\r\n\t\treturn arr.find(callback);\r\n\t} else {\r\n\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\tif (callback(arr[i], i)) {\r\n\t\t\t\treturn arr[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction arrayIncludes(arr, item) {\r\n\tif(arr.includes){\r\n\t\treturn arr.includes(item);\r\n\t}else{\r\n\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\tif (arr[i] === item) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\n// iframe-safe array type check instead of using instanceof\r\nfunction isArray(obj){\r\n\tif(Array.isArray){\r\n\t\treturn Array.isArray(obj);\r\n\t}else{\r\n\t\t// close enough\r\n\t\treturn (obj && obj.length !== undefined && obj.pop && obj.push);\r\n\t}\r\n}\r\n\r\n// non-primitive string object, e.g. new String(\"abc\")\r\nfunction isStringObject(obj){\r\n\treturn obj && typeof obj === \"object\"\r\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function String() { [native code] }\";\r\n}\r\n\r\n// non-primitive number object, e.g. new Number(5)\r\nfunction isNumberObject(obj){\r\n\treturn obj && typeof obj === \"object\"\r\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Number() { [native code] }\";\r\n}\r\n\r\n// non-primitive number object, e.g. new Boolean(true)\r\nfunction isBooleanObject(obj){\r\n\treturn obj && typeof obj === \"object\"\r\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Boolean() { [native code] }\";\r\n}\r\n\r\nfunction isDate(obj) {\r\n\tif (obj && typeof obj === \"object\") {\r\n\t\treturn !!(obj.getFullYear && obj.getMonth && obj.getDate);\r\n\t} else {\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nfunction isValidDate(obj){\r\n\treturn isDate(obj) && !isNaN(obj.getTime());\r\n}\r\n\r\nfunction arrayFilter(arr, callback) {\r\n\tvar result = [];\r\n\r\n\tif (arr.filter) {\r\n\t\treturn arr.filter(callback);\r\n\t} else {\r\n\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\tif (callback(arr[i], i)) {\r\n\t\t\t\tresult[result.length] = arr[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\nfunction hashToArray(hash) {\r\n\tvar result = [];\r\n\r\n\tfor (var key in hash) {\r\n\t\tif (hash.hasOwnProperty(key)) {\r\n\t\t\tresult.push(hash[key]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction arraySome(arr, callback) {\r\n\tif (arr.length === 0) return false;\r\n\r\n\tfor (var i = 0; i < arr.length; i++) {\r\n\t\tif (callback(arr[i], i, arr)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nfunction arrayDifference(arr, callback) {\r\n\treturn arrayFilter(arr, function(item, i) {\r\n\t\treturn !callback(item, i);\r\n\t});\r\n}\r\n\r\nfunction throttle (callback, timeout) {\r\n\tvar wait = false;\r\n\r\n\treturn function () {\r\n\t\tif (!wait) {\r\n\t\t\tcallback.apply(null, arguments);\r\n\t\t\twait = true;\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\twait = false;\r\n\t\t\t}, timeout);\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction delay (callback, timeout){\r\n\tvar timer;\r\n\r\n\tvar result = function() {\r\n\t\tresult.$cancelTimeout();\r\n\t\tresult.$pending = true;\r\n\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\ttimer = setTimeout(function(){\r\n\t\t\tcallback.apply(this, args);\r\n\t\t\tresult.$pending = false;\r\n\t\t}, timeout);\r\n\t};\r\n\r\n\tresult.$pending = false;\r\n\tresult.$cancelTimeout = function(){\r\n\t\tclearTimeout(timer);\r\n\t\tresult.$pending = false;\r\n\t};\r\n\tresult.$execute = function(){\r\n\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\tcallback.apply(this, args);\r\n\t\tresult.$cancelTimeout();\r\n\t};\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction sortArrayOfHash(arr, field, desc) {\r\n\tvar compare = function(a, b) {\r\n\t\treturn a < b;\r\n\t};\r\n\r\n\tarr.sort(function(a, b) {\r\n\t\tif (a[field] === b[field]) return 0;\r\n\r\n\t\treturn desc ? compare(a[field], b[field]) : compare(b[field], a[field]);\r\n\t});\r\n}\r\n\r\nfunction objectKeys(obj) {\r\n\tif (Object.keys) {\r\n\t\treturn Object.keys(obj);\r\n\t}\r\n\tvar result = [];\r\n\tvar key;\r\n\tfor (key in obj) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n\t\t\tresult.push(key);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction isEventable(obj) {\r\n\treturn obj.attachEvent && obj.detachEvent;\r\n}\r\n\r\n//GS-1090: A task should be able to have the id = 0\r\nfunction replaceValidZeroId(id, rootId) {\r\n\tif (checkZeroId(id) && !checkZeroId(rootId)){\r\n\t\tid = \"0\";\r\n\t}\r\n\treturn id;\r\n}\r\n\r\nfunction checkZeroId(id) {\r\n\tif (id === 0){\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nfunction findBinary(array, target) {\r\n\t// modified binary search, target value not exactly match array elements, looking for closest one\r\n\r\n\tvar low = 0, high = array.length - 1, i, item, prev;\r\n\twhile (low <= high) {\r\n\r\n\t\ti = Math.floor((low + high) / 2);\r\n\t\titem = +array[i];\r\n\t\tprev = +array[i - 1];\r\n\t\tif (item < target) {\r\n\t\t\tlow = i + 1;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (item > target) {\r\n\t\t\tif (!(!isNaN(prev) && prev < target)) {\r\n\t\t\t\thigh = i - 1;\r\n\t\t\t\tcontinue;\r\n\t\t\t} else {\r\n\t\t\t\t// if target is between 'i' and 'i-1' return 'i - 1'\r\n\t\t\t\treturn i - 1;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\twhile (+array[i] == +array[i + 1]) i++;\r\n\r\n\t\treturn i;\r\n\t}\r\n\treturn array.length - 1;\r\n}\r\n\r\nexport {\r\n\tgetSecondsInUnit,\r\n\tforEach,\r\n\tarrayMap,\r\n\tarrayIncludes,\r\n\tarrayFind,\r\n\tarrayFilter,\r\n\tarrayDifference,\r\n\tarraySome,\r\n\thashToArray,\r\n\tsortArrayOfHash,\r\n\tthrottle,\r\n\tisArray,\r\n\tisDate,\r\n\tisValidDate,\r\n\tisStringObject,\r\n\tisNumberObject,\r\n\tisBooleanObject,\r\n\tdelay,\r\n\tobjectKeys,\r\n\tisEventable,\r\n\treplaceValidZeroId,\r\n\tcheckZeroId,\r\n\tfindBinary\r\n};","import eventable from \"../../utils/eventable\";\r\nimport { isEventable } from \"../../utils/helpers\";\r\n\r\nexport interface ISelectedRegionConfig {\r\n\tclassName?: string;\r\n\trender?: (startPoint: IPoint, endPoint: IPoint) => HTMLElement;\r\n\tviewPort?: HTMLElement;\r\n\tuseRequestAnimationFrame: boolean;\r\n\tcallback?: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\r\n\tsingleRow: boolean;\r\n}\r\n\r\ninterface ICoordinates {\r\n\tleft: number;\r\n\ttop: number;\r\n}\r\n\r\nexport interface IPoint {\r\n\tabsolute: ICoordinates;\r\n\trelative: ICoordinates;\r\n}\r\n\r\nexport class SelectedRegion {\r\n\trender: () => void;\r\n\tprivate _viewPort: HTMLElement & eventable;\r\n\tprivate _el: HTMLElement = document.createElement(\"div\");\r\n\tprivate _callback: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\r\n\tprivate _startPoint: IPoint;\r\n\tprivate _endPoint: IPoint;\r\n\tprivate _positionPoint: IPoint;\r\n\tprivate _useRequestAnimationFrame: boolean;\r\n\tprivate _startDate: Date;\r\n\tprivate _endDate: Date;\r\n\tprivate _singleRow: boolean;\r\n\tprivate _gantt: any;\r\n\tprivate _view: any;\r\n\r\n\tconstructor(config: ISelectedRegionConfig, gantt: any, view: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._view = view;\r\n\t\tthis._viewPort = config.viewPort;\r\n\t\tthis._el.classList.add(config.className);\r\n\t\tif (typeof config.callback === \"function\") {\r\n\t\t\tthis._callback = config.callback;\r\n\t\t}\r\n\r\n\t\tthis.render = () => {\r\n\t\t\tlet node;\r\n\t\t\tif(config.render){\r\n\t\t\t\tnode = config.render(this._startPoint, this._endPoint);\r\n\t\t\t}else{\r\n\t\t\t\tnode = this.defaultRender(this._startPoint, this._endPoint);\r\n\t\t\t}\r\n\r\n\t\t\tif(node !== this._el){\r\n\t\t\t\tif(this._el && this._el.parentNode){\r\n\t\t\t\t\tthis._el.parentNode.removeChild(this._el);\r\n\t\t\t\t}\r\n\t\t\t\tthis._el = node;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.className !== \"\") {\r\n\t\t\t\tthis._el.classList.add(config.className);\r\n\t\t\t}\r\n\t\t\tthis.draw();\r\n\t\t};\r\n\r\n\t\tif (!isEventable(this._viewPort)) {\r\n\t\t\teventable(this._viewPort);\r\n\t\t}\r\n\t\tthis._singleRow = config.singleRow;\r\n\t\tthis._useRequestAnimationFrame = config.useRequestAnimationFrame;\r\n\t}\r\n\r\n\tdefaultRender = (start: IPoint, end: IPoint) => {\r\n\t\tif(!this._el){\r\n\t\t\tthis._el = document.createElement(\"div\");\r\n\t\t}\r\n\t\tconst node = this._el;\r\n\t\t// const gantt = this._gantt;\r\n\r\n\t\tconst top = Math.min(start.relative.top, end.relative.top);\r\n\t\tconst bottom = Math.max(start.relative.top, end.relative.top);\r\n\t\tconst left = Math.min(start.relative.left, end.relative.left);\r\n\t\tconst right = Math.max(start.relative.left, end.relative.left);\r\n\r\n\t\tif (this._singleRow) {\r\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\r\n\t\t\tnode.style.height = pos.height + \"px\";\r\n\t\t\tnode.style.top = pos.top + \"px\";\r\n\t\t} else {\r\n\t\t\tnode.style.height = Math.abs(bottom - top) + \"px\";\r\n\t\t\tnode.style.top = top + \"px\";\r\n\t\t}\r\n\t\tnode.style.width = Math.abs(right - left) + \"px\";\r\n\t\tnode.style.left = left + \"px\";\r\n\t\treturn node;\r\n\t};\r\n\r\n\tdraw() {\r\n\t\tif (this._useRequestAnimationFrame) {\r\n\t\t\treturn requestAnimationFrame(() => {\r\n\t\t\t\tthis._viewPort.appendChild(this.getElement());\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._viewPort.appendChild(this.getElement());\r\n\t\t}\r\n\t}\r\n\r\n\tclear() {\r\n\t\tif (this._useRequestAnimationFrame) {\r\n\t\t\treturn requestAnimationFrame(() => {\r\n\t\t\t\tif (!this._el.parentNode) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._viewPort.removeChild(this._el);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (!this._el.parentNode) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._viewPort.removeChild(this._el);\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement() {\r\n\t\treturn this._el;\r\n\t}\r\n\r\n\tgetViewPort() {\r\n\t\treturn this._viewPort;\r\n\t}\r\n\r\n\tsetStart(startPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._startPoint = startPoint;\r\n\t\tthis._startDate = gantt.dateFromPos(this._startPoint.relative.left);\r\n\t\tthis._viewPort.callEvent(\"onBeforeDrag\", [this._startPoint]);\r\n\t}\r\n\r\n\tsetEnd(endPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._endPoint = endPoint;\r\n\t\tif (this._singleRow) {\r\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\r\n\t\t\tthis._endPoint.relative.top = pos.top;\r\n\t\t}\r\n\t\tthis._endDate = gantt.dateFromPos(this._endPoint.relative.left);\r\n\t\tif (this._startPoint.relative.left > this._endPoint.relative.left) {\r\n\t\t\tthis._positionPoint = {\r\n\t\t\t\trelative: { left: this._endPoint.relative.left, top: this._positionPoint.relative.top },\r\n\t\t\t\tabsolute: { left: this._endPoint.absolute.left, top: this._positionPoint.absolute.top }\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (this._startPoint.relative.top > this._endPoint.relative.top) {\r\n\t\t\tthis._positionPoint = {\r\n\t\t\t\trelative: { left: this._positionPoint.relative.left, top: this._endPoint.relative.top },\r\n\t\t\t\tabsolute: { left: this._positionPoint.absolute.left, top: this._endPoint.absolute.top }\r\n\t\t\t};\r\n\t\t}\r\n\r\n\r\n\t\tthis._viewPort.callEvent(\"onDrag\", [this._startPoint, this._endPoint]);\r\n\t}\r\n\r\n\tsetPosition(positionPoint: IPoint) {\r\n\t\tthis._positionPoint = positionPoint;\r\n\t}\r\n\r\n\tdragEnd(endPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif(endPoint.relative.left < 0){\r\n\t\t\tendPoint.relative.left = 0;\r\n\t\t}\r\n\t\tthis._viewPort.callEvent(\"onBeforeDragEnd\", [this._startPoint, endPoint]);\r\n\t\tthis.setEnd(endPoint);\r\n\t\t// GS-1422. The endDate can be null if we drag the mouse outside the Gantt container\r\n\t\tthis._endDate = this._endDate || gantt.getState().max_date;\r\n\r\n\t\tif (this._startDate.valueOf() > this._endDate.valueOf()) {\r\n\t\t\t[ this._startDate, this._endDate ] = [ this._endDate, this._startDate ];\r\n\t\t}\r\n\t\tthis.clear();\r\n\t\tconst tasksByTime = gantt.getTaskByTime(this._startDate, this._endDate);\r\n\t\tconst tasksByIndex = this._getTasksByTop(this._startPoint.relative.top, this._endPoint.relative.top);\r\n\r\n\t\tthis._viewPort.callEvent(\"onDragEnd\", [this._startPoint, this._endPoint]);\r\n\t\tif (this._callback) {\r\n\t\t\tthis._callback(this._startPoint, this._endPoint, this._startDate, this._endDate, tasksByTime, tasksByIndex);\r\n\t\t}\r\n\t}\r\n\r\n\tgetInBounds() {\r\n\t\treturn this._singleRow;\r\n\t}\r\n\r\n\tprivate _getTasksByTop(start: number, end:number) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet startValue = start;\r\n\t\tlet endValue = end;\r\n\t\tif (start > end) {\r\n\t\t\tstartValue = end;\r\n\t\t\tendValue = start;\r\n\t\t}\r\n\t\tconst startIndex = this._getTaskPositionByTop(startValue).index;\r\n\t\tconst endIndex = this._getTaskPositionByTop(endValue).index;\r\n\t\tconst result = [];\r\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\r\n\t\t\tconst task = gantt.getTaskByIndex(i);\r\n\t\t\tif (task) {\r\n\t\t\t\tresult.push(gantt.getTaskByIndex(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getTaskPositionByTop(top: number){\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst view = this._view;\r\n\t\tconst index = view.getItemIndexByTopPosition(top);\r\n\t\tconst task = gantt.getTaskByIndex(index);\r\n\t\tif(task){\r\n\t\t\tconst height = view.getItemHeight(task.id);\r\n\t\t\tconst itemTop = view.getItemTop(task.id);\r\n\t\t\treturn {\r\n\t\t\t\ttop: itemTop || 0,\r\n\t\t\t\theight: height || 0,\r\n\t\t\t\tindex\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tconst dataHeight = view.getTotalHeight();\r\n\t\t\treturn {\r\n\t\t\t\ttop: top > dataHeight ? dataHeight : 0,\r\n\t\t\t\theight: gantt.config.row_height,\r\n\t\t\t\tindex: top > dataHeight ? gantt.getTaskCount() : 0\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n}","interface IPoint {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport class EventsManager {\r\n\tstatic create(gantt: any) {\r\n\t\treturn new EventsManager(gantt);\r\n\t}\r\n\tprivate _mouseDown: boolean = false;\r\n\tprivate _startPoint: IPoint;\r\n\tprivate _scrollState: IPoint;\r\n\tprivate _originAutoscroll: boolean;\r\n\tprivate _domEvents: any;\r\n\tprivate _timeline: any;\r\n\tprivate _gantt: any;\r\n\tprivate _trace: IPoint[];\r\n\tprivate _originalReadonly: boolean;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t\tthis._trace = [];\r\n\t}\r\n\r\n\tdestructor() {\r\n\t\tthis._domEvents.detachAll();\r\n\t}\r\n\r\n\tattach(timeline: any): void {\r\n\t\tthis._timeline = timeline;\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._domEvents.attach(timeline.$task, \"mousedown\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey,ignore, enabled } = gantt.config.drag_timeline;\r\n\t\t\tif(enabled === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\r\n\t\t\tif(ignore !== undefined) {\r\n\t\t\t\tif(ignore instanceof Array){\r\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilterTargets = ignore;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (filterTargets) {\r\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\r\n\t\t\tthis._startDrag(event);\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(document, \"keydown\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] === true) {\r\n\t\t\t\tthis._applyDndReadyStyles();\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._domEvents.attach(document, \"keyup\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] === false) {\r\n\t\t\t\tthis._clearDndReadyStyles();\r\n\t\t\t\tthis._stopDrag(event);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(document, \"mouseup\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(gantt.$root, \"mouseup\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(document, \"mouseleave\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(gantt.$root, \"mouseleave\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(gantt.$root, \"mousemove\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\t// GS-854. If we don't have useKey for the drag_timeline extension,\r\n\t\t\t// check the click_drag to not simultaneously use both extensions\r\n\t\t\tconst clickDrag = this._gantt.ext.clickDrag;\r\n\t\t\tconst clickDragUseKey = (this._gantt.config.click_drag || {}).useKey;\r\n\t\t\tif (clickDrag && clickDragUseKey) {\r\n\t\t\t\tif (!useKey && event[clickDragUseKey]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tthis._trace.push({ x: event.clientX, y: event.clientY });\r\n\t\t\t\tconst scrollPosition: IPoint = this._countNewScrollPosition({ x: event.clientX, y: event.clientY });\r\n\t\t\t\tthis._setScrollPosition(timeline, scrollPosition);\r\n\t\t\t\tthis._scrollState = scrollPosition;\r\n\t\t\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _calculateDirectionVector = () => {\r\n\t\tconst traceSteps = 10;\r\n\t\tif(this._trace.length >= traceSteps) {\r\n\t\t\tconst dots = this._trace.slice(this._trace.length - traceSteps);\r\n\r\n\t\t\tconst vectors = [];\r\n\t\t\tfor(let i = 1; i < dots.length; i++) {\r\n\t\t\t\tvectors.push({\r\n\t\t\t\t\tx: dots[i].x - dots[i - 1].x,\r\n\t\t\t\t\ty: dots[i].y - dots[i - 1].y\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tconst resultVector = {x:0, y:0};\r\n\r\n\t\t\tvectors.forEach((vector) => {\r\n\t\t\t\tresultVector.x += vector.x;\r\n\t\t\t\tresultVector.y += vector.y;\r\n\t\t\t});\r\n\r\n\t\t\tconst magnitude = Math.sqrt(resultVector.x*resultVector.x + resultVector.y*resultVector.y);\r\n\t\t\tconst angleDegrees = Math.atan2(Math.abs(resultVector.y), Math.abs(resultVector.x)) * 180 / Math.PI;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tmagnitude,\r\n\t\t\t\tangleDegrees\r\n\t\t\t};\r\n\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tprivate _applyDndReadyStyles = (): void => {\r\n\t\tthis._timeline.$task.classList.add(\"gantt_timeline_move_available\");\r\n\t};\r\n\r\n\tprivate _clearDndReadyStyles = (): void => {\r\n\t\tthis._timeline.$task.classList.remove(\"gantt_timeline_move_available\");\r\n\t};\r\n\r\n\tprivate _getScrollPosition = (timeline: any): IPoint => {\r\n\t\tconst gantt = this._gantt;\r\n\t\treturn {\r\n\t\t\tx: gantt.$ui.getView(timeline.$config.scrollX).getScrollState().position,\r\n\t\t\ty: gantt.$ui.getView(timeline.$config.scrollY).getScrollState().position\r\n\t\t};\r\n\t};\r\n\tprivate _countNewScrollPosition = (coords: IPoint): IPoint => {\r\n\t\tconst vector = this._calculateDirectionVector();\r\n\t\tlet shiftX = this._startPoint.x - coords.x;\r\n\t\tlet shiftY = this._startPoint.y - coords.y;\r\n\t\tif(vector){\r\n\t\t\tif(vector.angleDegrees < 15){\r\n\t\t\t\tshiftY = 0;\r\n\t\t\t} else if(vector.angleDegrees > 75){\r\n\t\t\t\tshiftX = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst result = {\r\n\t\t\tx: this._scrollState.x + shiftX,\r\n\t\t\ty: this._scrollState.y + shiftY\r\n\t\t};\r\n\t\treturn result;\r\n\t};\r\n\tprivate _setScrollPosition = (timeline: any, coords: IPoint): void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tgantt.scrollLayoutCell(timeline.$id, coords.x, coords.y);\r\n\t\t});\r\n\t};\r\n\tprivate _stopDrag = (event: Event): void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._trace = [];\r\n\t\tgantt.$root.classList.remove(\"gantt_noselect\");\r\n\r\n\t\tif(this._originalReadonly !== undefined){\r\n\t\t\tgantt.config.readonly = this._originalReadonly;\r\n\t\t\tif(this._mouseDown && gantt.config.drag_timeline && gantt.config.drag_timeline.render){\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this._originAutoscroll !== undefined){\r\n\t\t\tgantt.config.autoscroll = this._originAutoscroll;\r\n\t\t}\r\n\r\n\t\tif(gantt.config.drag_timeline){\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] !== true) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._mouseDown = false;\r\n\t};\r\n\r\n\tprivate _startDrag = (event: any) : void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._originAutoscroll = gantt.config.autoscroll;\r\n\t\tgantt.config.autoscroll = false;\r\n\r\n\t\tgantt.$root.classList.add(\"gantt_noselect\");\r\n\t\tthis._originalReadonly = gantt.config.readonly;\r\n\t\tgantt.config.readonly = true;\r\n\r\n\t\tif(gantt.config.drag_timeline && gantt.config.drag_timeline.render){\r\n\t\t\tgantt.render();\r\n\t\t}\r\n\r\n\t\tthis._trace = [];\r\n\t\tthis._mouseDown = true;\r\n\t\tconst { x, y } = this._getScrollPosition(this._timeline);\r\n\t\tthis._scrollState = { x, y };\r\n\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\r\n\t\tthis._trace.push(this._startPoint);\r\n\t};\r\n}","export default function(gantt) {\r\n\r\n\t(function () {\r\n\t\tvar modalsStack = [];\r\n\r\n\t\tfunction isModal() {\r\n\t\t\treturn !!modalsStack.length;\r\n\t\t}\r\n\r\n\t\tfunction afterPopup(box) {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tif (!isModal()){\r\n\t\t\t\t\tif(!gantt.$destroyed){\r\n\t\t\t\t\t\tgantt.focus();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, 1);\r\n\t\t}\r\n\r\n\t\tfunction startModal(box) {\r\n\t\t\tgantt.eventRemove(box, \"keydown\", trapFocus);\r\n\t\t\tgantt.event(box, \"keydown\", trapFocus);\r\n\t\t\tmodalsStack.push(box);\r\n\t\t\t//gantt.$keyboardNavigation.dispatcher.disable();\r\n\t\t}\r\n\r\n\t\tfunction endModal() {\r\n\t\t\tvar box = modalsStack.pop();\r\n\t\t\tif (box) {\r\n\t\t\t\tgantt.eventRemove(box, \"keydown\", trapFocus);\r\n\t\t\t}\r\n\t\t\tafterPopup(box);\r\n\r\n\t\t}\r\n\r\n\r\n\t\tfunction isTopModal(box) {\r\n\t\t\treturn box == modalsStack[modalsStack.length - 1];\r\n\t\t}\r\n\r\n\t\tfunction trapFocus(event) {\r\n\t\t\tvar target = event.currentTarget;\r\n\t\t\tif (!isTopModal(target)) return;\r\n\r\n\t\t\tgantt.$keyboardNavigation.trapFocus(target, event);\r\n\t\t}\r\n\r\n\t\tfunction traceLightbox() {\r\n\t\t\tstartModal(gantt.getLightbox());\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onLightbox\", traceLightbox);\r\n\t\tgantt.attachEvent(\"onAfterLightbox\", endModal);\r\n\t\tgantt.attachEvent(\"onLightboxChange\", function () {\r\n\t\t\tendModal();\r\n\t\t\ttraceLightbox();\r\n\t\t});\r\n\r\n\r\n\t\tgantt.attachEvent(\"onAfterQuickInfo\", function () {\r\n\t\t\tafterPopup();\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onMessagePopup\", function (box) {\r\n\t\t\tsaveFocus();\r\n\t\t\tstartModal(box);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterMessagePopup\", function () {\r\n\t\t\tendModal();\r\n\t\t\trestoreFocus();\r\n\t\t});\r\n\r\n\t\tvar focusElement = null;\r\n\r\n\t\tfunction saveFocus() {\r\n\t\t\tfocusElement = gantt.utils.dom.getActiveElement();\r\n\t\t}\r\n\r\n\t\tfunction restoreFocus() {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tif (focusElement) {\r\n\t\t\t\t\tfocusElement.focus();\r\n\t\t\t\t\tfocusElement = null;\r\n\t\t\t\t}\r\n\t\t\t}, 1);\r\n\t\t}\r\n\r\n\t\tgantt.$keyboardNavigation.isModal = isModal;\r\n\r\n\r\n\t})();\r\n\r\n};","\r\ninterface IQuickInfoContainer{\r\n\tparent: HTMLElement;\r\n\txViewport: HTMLElement;\r\n\tyViewport: HTMLElement;\r\n}\r\n\r\nexport class QuickInfo {\r\n\tprivate _quickInfoTask: TaskID;\r\n\tprivate _quickInfoBoxId: number | string;\r\n\tprivate _quickInfoBox: HTMLElement;\r\n\tprivate _quickInfoReadonly: boolean | null;\r\n\tprivate _container: HTMLElement;\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\t// show at coordinates:\r\n\t// show(x: number, y: number)\r\n\t// show for a task:\r\n\t// show(id: TaskID)\r\n\tshow : {\r\n\t\t(x: number, y: number) : void;\r\n\t\t(id: TaskID) : void;\r\n\t} = (id: TaskID | number, y? : number) : void => {\r\n\t\tif (y === undefined) {\r\n\t\t\tthis._showForTask(id);\r\n\t\t} else {\r\n\t\t\tthis._showAtCoordinates(id as number, y);\r\n\t\t}\r\n\t};\r\n\r\n\thide = (forced?: boolean) : any => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tthis._quickInfoBoxId = 0;\r\n\t\tconst taskId = this._quickInfoTask;\r\n\t\tthis._quickInfoTask = null;\r\n\r\n\t\tif (qi && qi.parentNode){\r\n\r\n\t\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\r\n\t\t\t\treturn qi.parentNode.removeChild(qi);\r\n\t\t\t}\r\n\r\n\t\t\tqi.className += \" gantt_qi_hidden\";\r\n\t\t\tif (qi.style.right === \"auto\"){\r\n\t\t\t\tqi.style.left = \"-350px\";\r\n\t\t\t} else {\r\n\t\t\t\tqi.style.right = \"-350px\";\r\n\t\t\t}\r\n\r\n\t\t\tif (forced) {\r\n\t\t\t\tqi.style.left = qi.style.right = \"\";\r\n\t\t\t\tqi.parentNode.removeChild(qi);\r\n\t\t\t}\r\n\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\r\n\t\t}\r\n\t};\r\n\r\n\tgetNode = (): HTMLElement => {\r\n\t\tif(this._quickInfoBox) {\r\n\t\t\treturn this._quickInfoBox;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tsetContainer = (container: string|HTMLElement): void => {\r\n\t\tif(container){\r\n\t\t\tthis._container = typeof container === \"string\" ? document.getElementById(container) : container;\r\n\t\t}\r\n\t};\r\n\r\n\tsetContent = (content?: IQuickInfoContent) => {\r\n\t\tconst gantt = this._gantt;\r\n\r\n\t\tconst defaultContent = {\r\n\t\t\ttaskId: null,\r\n\t\t\theader: {\r\n\t\t\t\ttitle: \"\",\r\n\t\t\t\tdate: \"\"\r\n\t\t\t},\r\n\t\t\tcontent: \"\",\r\n\t\t\tbuttons: gantt.config.quickinfo_buttons\r\n\t\t};\r\n\r\n\t\tif(!content){\r\n\t\t\tcontent = defaultContent;\r\n\t\t}\r\n\r\n\t\tif(!content.taskId){\r\n\t\t\tcontent.taskId = defaultContent.taskId;\r\n\t\t}\r\n\r\n\t\tif(!content.header){\r\n\t\t\tcontent.header = defaultContent.header;\r\n\t\t}\r\n\r\n\t\tif(!content.header.title){\r\n\t\t\tcontent.header.title = defaultContent.header.title;\r\n\t\t}\r\n\t\tif(!content.header.date){\r\n\t\t\tcontent.header.date = defaultContent.header.date;\r\n\t\t}\r\n\t\tif(!content.content){\r\n\t\t\tcontent.content = defaultContent.content;\r\n\t\t}\r\n\t\tif(!content.buttons){\r\n\t\t\tcontent.buttons = defaultContent.buttons;\r\n\t\t}\r\n\r\n\r\n\t\tlet qi = this.getNode();\r\n\t\tif(!qi){\r\n\t\t\tqi = this._createQuickInfoElement();\r\n\t\t}\r\n\r\n\t\tif(content.taskId){\r\n\t\t\tthis._quickInfoBoxId = content.taskId;\r\n\t\t}\r\n\r\n\t\tconst titleBox = qi.querySelector(\".gantt_cal_qi_title\") as HTMLElement;\r\n\t\tconst titleContent = titleBox.querySelector(\".gantt_cal_qi_tcontent\");\r\n\t\tconst titleDate = titleBox.querySelector(\".gantt_cal_qi_tdate\");\r\n\t\tconst main = qi.querySelector(\".gantt_cal_qi_content\");\r\n\t\tconst controls = qi.querySelector(\".gantt_cal_qi_controls\") as HTMLElement;\r\n\r\n\t\tgantt._waiAria.quickInfoHeader(qi, [content.header.title, content.header.date].join(\" \"));\r\n\r\n\t\ttitleContent.innerHTML = content.header.title;\r\n\t\ttitleDate.innerHTML = content.header.date;\r\n\r\n\t\tif(!content.header.title && !content.header.date){\r\n\t\t\ttitleBox.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\ttitleBox.style.display = \"\";\r\n\t\t}\r\n\t\tmain.innerHTML = content.content;\r\n\r\n\t\tconst buttons = content.buttons;\r\n\t\tif(!buttons.length){\r\n\t\t\tcontrols.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tcontrols.style.display = \"\";\r\n\t\t}\r\n\t\tlet html = \"\";\r\n\t\tfor (let i = 0; i < buttons.length; i++){\r\n\r\n\t\t\tconst ariaAttr = gantt._waiAria.quickInfoButtonAttrString(gantt.locale.labels[buttons[i]]);\r\n\r\n\t\t\thtml += `\r\n \r\n
${gantt.locale.labels[buttons[i]]}
\r\n
`;\r\n\t\t}\r\n\t\tcontrols.innerHTML = html;\r\n\r\n\t\tgantt.eventRemove(qi, \"click\", this._qiButtonClickHandler);\r\n\t\tgantt.eventRemove(qi, \"keypress\", this._qiKeyPressHandler);\r\n\r\n\t\tgantt.event(qi, \"click\", this._qiButtonClickHandler);\r\n\t\tgantt.event(qi, \"keypress\", this._qiKeyPressHandler);\r\n\t};\r\n\r\n\tprivate _qiButtonClickHandler = (ev) => {\r\n\t\tthis._qi_button_click(ev.target);\r\n\t};\r\n\r\n\tprivate _qiKeyPressHandler = (e) => {\r\n\r\n\t\tconst code = e.which;\r\n\t\tif (code === 13 || code === 32){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._qi_button_click(e.target);\r\n\t\t\t},1);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _showAtCoordinates(x: number, y: number) : void {\r\n\t\tthis.hide(true);\r\n\t\tthis._quickInfoBoxId = 0;\r\n\t\tthis._quickInfoTask = null;\r\n\t\tif(!this._quickInfoBox){\r\n\t\t\tthis._createQuickInfoElement();\r\n\t\t\tthis.setContent();\r\n\t\t}\r\n\r\n\t\tthis._appendAtCoordinates(x, y);\r\n\t\tthis._gantt.callEvent(\"onQuickInfo\", [null]);\r\n\t}\r\n\r\n\tprivate _showForTask(id: TaskID) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif ((\r\n\t\t\tid === this._quickInfoBoxId &&\r\n\t\t\tgantt.utils.dom.isChildOf(this._quickInfoBox, document.body)\r\n\t\t) || !gantt.config.show_quick_info) {\r\n\t\t\t// not show if the quick info is already displayed for this task, or if it shouldn't be displayed\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.hide(true);\r\n\t\tconst offset = 6; // offset TASK <> QI-BOX in 'px'\r\n\t\tconst container = this._getContainer();\r\n\t\tconst pos = this._get_event_counter_part(id, offset, container.xViewport, container.yViewport);\r\n\r\n\t\tif (pos){\r\n\t\t\tthis._quickInfoBox = this._init_quick_info(id);\r\n\t\t\tthis._quickInfoTask = id;\r\n\t\t\tthis._quickInfoBox.className = this._prepare_quick_info_classname(id);\r\n\r\n\t\t\tthis._fill_quick_data(id);\r\n\t\t\tthis._show_quick_info(pos, offset);\r\n\t\t\tgantt.callEvent(\"onQuickInfo\", [id]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _get_event_counter_part(id: TaskID, offset: number, xViewport: HTMLElement, yViewport: HTMLElement) : any {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet domEv = gantt.getTaskNode(id);\r\n\t\tif (!domEv) {\r\n\t\t\tdomEv = gantt.getTaskRowNode(id);\r\n\t\t\tif (!domEv) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet left = 0;\r\n\t\tconst top = offset + domEv.offsetTop + domEv.offsetHeight;\r\n\r\n\t\tlet node = domEv;\r\n\r\n\t\tif (gantt.utils.dom.isChildOf(node, xViewport)) {\r\n\t\t\twhile (node && node !== xViewport){\r\n\t\t\t\tleft += node.offsetLeft;\r\n\t\t\t\tnode = node.offsetParent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst scroll = gantt.getScrollState();\r\n\r\n\t\tif(node){\r\n\t\t\tconst dx = (left + domEv.offsetWidth/2) - scroll.x > (xViewport.offsetWidth/2) ? 1 : 0;\r\n\t\t\tconst dy = (top + domEv.offsetHeight/2) - scroll.y > (yViewport.offsetHeight/2) ? 1 : 0;\r\n\r\n\t\t\treturn { left, top, dx, dy, width:domEv.offsetWidth, height:domEv.offsetHeight };\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate _createQuickInfoElement() : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = document.createElement(\"div\");\r\n\t\tqi.className += \"gantt_cal_quick_info\";\r\n\t\tgantt._waiAria.quickInfoAttr(qi);\r\n\r\n\t\t// title\r\n\t\tconst ariaAttr = gantt._waiAria.quickInfoHeaderAttrString();\r\n\t\tvar html = `\r\n\t\t\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
`;\r\n\r\n\t\t//buttons\r\n\t\thtml += \"\";\r\n\r\n\t\thtml += \"
\";\r\n\r\n\t\tqi.innerHTML = html;\r\n\r\n\r\n\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\tconst container = this._getContainer();\r\n\t\t\tgantt.event(container.parent, \"scroll\", () => { this.hide(); });\r\n\t\t}\r\n\r\n\t\tthis._quickInfoBox = qi;\r\n\t\treturn qi;\r\n\t}\r\n\r\n\tprivate _init_quick_info(id: TaskID) : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst task = gantt.getTask(id);\r\n\t\t\r\n\r\n\t\tif(typeof this._quickInfoReadonly === \"boolean\"){\r\n\t\t\tif(gantt.isReadonly(task) !== this._quickInfoReadonly){\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t\tthis._quickInfoBox = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._quickInfoReadonly = gantt.isReadonly(task);\r\n\r\n\t\tif (!this._quickInfoBox){\r\n\t\t\tthis._quickInfoBox = this._createQuickInfoElement();\r\n\t\t}\r\n\r\n\t\treturn this._quickInfoBox;\r\n\t}\r\n\r\n\tprivate _prepare_quick_info_classname(id: TaskID) : string {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst task = gantt.getTask(id);\r\n\t\tconst taskType = gantt.getTaskType(task);\r\n\r\n\t\tlet css = `gantt_cal_quick_info gantt_${taskType}`;\r\n\t\tconst template = gantt.templates.quick_info_class(task.start_date, task.end_date, task);\r\n\r\n\t\tif(template){\r\n\t\t\tcss += \" \" + template;\r\n\t\t}\r\n\t\treturn css;\r\n\t}\r\n\r\n\tprivate _fill_quick_data(id: TaskID) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst ev = gantt.getTask(id);\r\n\r\n\t\tthis._quickInfoBoxId = id;\r\n\r\n\t\tlet allowedButtons = [];\r\n\t\tif (this._quickInfoReadonly){\r\n\t\t\tconst buttons = gantt.config.quickinfo_buttons;\r\n\t\t\tconst isEditor = {icon_delete: true, icon_edit: true};\r\n\t\t\tfor (let i = 0; i < buttons.length; i++){\r\n\t\t\t\tif(this._quickInfoReadonly && isEditor[buttons[i]]){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tallowedButtons.push(buttons[i]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tallowedButtons = gantt.config.quickinfo_buttons;\r\n\t\t}\r\n\r\n\t\tthis.setContent({\r\n\t\t\theader: {\r\n\t\t\t\ttitle: gantt.templates.quick_info_title(ev.start_date, ev.end_date, ev),\r\n\t\t\t\tdate: gantt.templates.quick_info_date(ev.start_date, ev.end_date, ev)\r\n\t\t\t},\r\n\t\t\tcontent: gantt.templates.quick_info_content(ev.start_date, ev.end_date, ev),\r\n\t\t\tbuttons: allowedButtons\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _appendAtCoordinates(x: number, y: number): void {\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tconst container = this._getContainer();\r\n\t\tif (!qi.parentNode ||\r\n\t\t\tqi.parentNode.nodeName.toLowerCase() === \"#document-fragment\"){ // IE8\r\n\t\t\tcontainer.parent.appendChild(qi);\r\n\t\t}\r\n\r\n\t\tqi.style.left = x + \"px\";\r\n\t\tqi.style.top = y + \"px\";\r\n\t}\r\n\r\n\tprivate _show_quick_info(pos: any, offset: number) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\tconst container = this._getContainer();\r\n\t\t\tif (!qi.parentNode ||\r\n\t\t\t\tqi.parentNode.nodeName.toLowerCase() === \"#document-fragment\"){ // IE8\r\n\t\t\t\tcontainer.parent.appendChild(qi);\r\n\t\t\t}\r\n\t\t\tconst width = qi.offsetWidth;\r\n\t\t\tconst popupHeight = qi.offsetHeight;\r\n\r\n\t\t\tconst scrolls = gantt.getScrollState();\r\n\t\t\tconst xViewport = container.xViewport;\r\n\t\t\tconst yViewport = container.yViewport;\r\n\t\t\tconst screenWidth = xViewport.offsetWidth + scrolls.x - width;\r\n\r\n\t\t\tconst relativePopupTop = pos.top - scrolls.y;\r\n\t\t\tconst relativePopupBottom = relativePopupTop + popupHeight;\r\n\r\n\t\t\tlet top = pos.top;\r\n\t\t\tif(relativePopupBottom > yViewport.offsetHeight / 2){\r\n\t\t\t\ttop = pos.top - (popupHeight + pos.height + 2*offset);\r\n\t\t\t\tif(top < scrolls.y && relativePopupBottom <= yViewport.offsetHeight){\r\n\t\t\t\t\ttop = pos.top;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (top < scrolls.y) {\r\n\t\t\t\ttop = scrolls.y;\r\n\t\t\t}\r\n\r\n\t\t\tconst x = Math.min(Math.max(scrolls.x, pos.left - pos.dx*(width - pos.width)), screenWidth);\r\n\t\t\tconst y = top;\r\n\r\n\t\t\tthis._appendAtCoordinates(x, y);\r\n\t\t} else {\r\n\t\t\tqi.style.top = 20 + \"px\";\r\n\t\t\tif (pos.dx === 1){\r\n\t\t\t\tqi.style.right = \"auto\";\r\n\t\t\t\tqi.style.left = \"-300px\";\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tqi.style.left = \"10px\";\r\n\t\t\t\t},1);\r\n\t\t\t} else {\r\n\t\t\t\tqi.style.left = \"auto\";\r\n\t\t\t\tqi.style.right = \"-300px\";\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tqi.style.right = \"10px\";\r\n\t\t\t\t},1);\r\n\t\t\t}\r\n\t\t\tqi.className += \" gantt_qi_\"+(pos.dx === 1 ? \"left\" : \"right\");\r\n\t\t\tgantt.$root.appendChild(qi);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _qi_button_click(node: any) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst box = this._quickInfoBox;\r\n\t\tif (!node || node === box){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(node.closest(\".gantt_cal_qi_close_btn\")){\r\n\t\t\tthis.hide();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst mask = node.className;\r\n\t\tif (mask.indexOf(\"_icon\") !== -1){\r\n\t\t\tconst id = this._quickInfoBoxId;\r\n\t\t\tgantt.$click.buttons[mask.split(\" \")[1].replace(\"icon_\",\"\")](id);\r\n\t\t} else {\r\n\t\t\tthis._qi_button_click(node.parentNode);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getContainer(): IQuickInfoContainer{\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet container = this._container ? this._container : gantt.$task_data;\r\n\t\tif (container && container.offsetHeight && container.offsetWidth) {\r\n\t\t\treturn {\r\n\t\t\t\tparent: container,\r\n\t\t\t\txViewport: gantt.$task,\r\n\t\t\t\tyViewport: gantt.$task_data\r\n\t\t\t};\r\n\t\t}\r\n\t\tcontainer = this._container ? this._container : gantt.$grid_data;\r\n\t\tif (container && container.offsetHeight && container.offsetWidth) {\r\n\t\t\treturn {\r\n\t\t\t\tparent: container,\r\n\t\t\t\txViewport: gantt.$grid,\r\n\t\t\t\tyViewport: gantt.$grid_data\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tparent: this._container ? this._container : gantt.$layout,\r\n\t\t\txViewport: gantt.$layout,\r\n\t\t\tyViewport: gantt.$layout\r\n\t\t};\r\n\t}\r\n}\r\n","import * as helpers from \"./helpers\";\r\n\r\nvar plainObjectConstructor = ({}).constructor.toString();\r\nfunction isCustomType(object){\r\n\tvar constructorString = object.constructor.toString();\r\n\r\n\treturn constructorString !== plainObjectConstructor;\r\n}\r\n\r\nfunction copy(object) {\r\n\tvar i, result; // iterator, types array, result\r\n\r\n\tif (object && typeof object == \"object\") {\r\n\r\n\t\tswitch (true){\r\n\t\t\tcase (helpers.isDate(object)):\r\n\t\t\t\tresult = new Date(object);\r\n\t\t\t\tbreak;\r\n\t\t\tcase (helpers.isArray(object)):\r\n\t\t\t\tresult = new Array(object.length);\r\n\t\t\t\tfor(i = 0; i < object.length; i++){\r\n\t\t\t\t\tresult[i] = copy(object[i]);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t/*\t\tcase (helpers.isStringObject(object)):\r\n\t\t\t\tresult = new String(object);\r\n\t\t\t\tbreak;\r\n\t\t\tcase (helpers.isNumberObject(object)):\r\n\t\t\t\tresult = new Number(object);\r\n\t\t\t\tbreak;\r\n\t\t\tcase (helpers.isBooleanObject(object)):\r\n\t\t\t\tresult = new Boolean(object);\r\n\t\t\t\tbreak;*/\r\n\t\t\tdefault:\r\n\t\t\t\tif(isCustomType(object)){\r\n\t\t\t\t\tresult = Object.create(object);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tresult = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (i in object) {\r\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.apply(object, [i]))\r\n\t\t\t\t\t\tresult[i] = copy(object[i]);\r\n\t\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn result || object;\r\n}\r\n\r\nfunction mixin (target, source, force){\r\n\tfor (var f in source)\r\n\t\tif (((target[f] === undefined) || force)) target[f]=source[f];\r\n\treturn target;\r\n}\r\n\r\nfunction defined(obj) {\r\n\treturn typeof(obj) != \"undefined\";\r\n}\r\n\r\nvar seed;\r\nfunction uid() {\r\n\tif (!seed)\r\n\t\tseed = (new Date()).valueOf();\r\n\r\n\tseed++;\r\n\treturn seed;\r\n}\r\n\r\n//creates function with specified \"this\" pointer\r\nfunction bind(functor, object){\r\n\tif(functor.bind)\r\n\t\treturn functor.bind(object);\r\n\telse\r\n\t\treturn function(){ return functor.apply(object,arguments); };\r\n}\r\n\r\nfunction event(el, event, handler, capture){\r\n\tif (el.addEventListener)\r\n\t\tel.addEventListener(event, handler, capture === undefined ? false : capture);\r\n\r\n\telse if (el.attachEvent)\r\n\t\tel.attachEvent(\"on\"+event, handler);\r\n}\r\n\r\nfunction eventRemove(el, event, handler, capture){\r\n\tif (el.removeEventListener)\r\n\t\tel.removeEventListener(event, handler, capture === undefined ? false : capture);\r\n\r\n\telse if (el.detachEvent)\r\n\t\tel.detachEvent(\"on\"+event, handler);\r\n}\r\n\r\nexport {\r\n\tcopy,\r\n\tdefined,\r\n\tmixin,\r\n\tuid,\r\n\tbind,\r\n\tevent,\r\n\teventRemove\r\n};","import * as utils from \"../../../utils/utils\";\r\n\r\nfunction createScope(addEvent, removeEvent) {\r\n\taddEvent = addEvent || utils.event;\r\n\tremoveEvent = removeEvent || utils.eventRemove;\r\n\r\n\tvar handlers = [];\r\n\r\n\tvar eventScope = {\r\n\t\tattach: function(el, event, callback, capture){\r\n\t\t\thandlers.push({element: el, event:event, callback: callback, capture: capture});\r\n\t\t\taddEvent(el, event, callback, capture);\r\n\t\t},\r\n\t\tdetach: function(el, event, callback, capture){\r\n\t\t\tremoveEvent(el, event, callback, capture);\r\n\t\t\tfor(var i = 0; i < handlers.length; i++){\r\n\t\t\t\tvar handler = handlers[i];\r\n\t\t\t\tif (handler.element === el && handler.event === event && handler.callback === callback && handler.capture === capture) {\r\n\t\t\t\t\thandlers.splice(i, 1);\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tdetachAll: function () {\r\n\t\t\tvar staticArray = handlers.slice();\r\n\t\t\t// original handlers array can be spliced on every iteration\r\n\t\t\tfor (var i = 0; i < staticArray.length; i++){\r\n\t\t\t\tvar handler = staticArray[i];\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, handler.capture);\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, undefined);\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, false);\r\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, true);\r\n\t\t\t}\r\n\t\t\thandlers.splice(0, handlers.length);\r\n\t\t},\r\n\t\textend: function(){\r\n\t\t\treturn createScope(this.event, this.eventRemove);\r\n\t\t}\r\n\t};\r\n\r\n\treturn eventScope;\r\n}\r\n\r\nexport default createScope;","import * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\n\r\n/* eslint-disable no-restricted-globals */\r\n\r\ninterface IViewPosition{\r\n\ttop: number;\r\n\tleft: number;\r\n}\r\n\r\ninterface IViewBox extends IViewPosition{\r\n\twidth: number;\r\n\theight: number;\r\n\tbottom: number;\r\n\tright: number;\r\n}\r\n\r\nexport class Tooltip {\r\n\tprivate _root: HTMLElement;\r\n\tprivate _tooltipNode: HTMLElement;\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any){\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\tgetNode() : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (!this._tooltipNode){\r\n\t\t\tthis._tooltipNode = document.createElement(\"div\");\r\n\t\t\tthis._tooltipNode.className = \"gantt_tooltip\";\r\n\t\t\tgantt._waiAria.tooltipAttr(this._tooltipNode);\r\n\t\t}\r\n\t\treturn this._tooltipNode;\r\n\t}\r\n\r\n\tsetViewport(node: HTMLElement):Tooltip{\r\n\t\tthis._root = node;\r\n\t\treturn this;\r\n\t}\r\n\r\n\tshow(left: number, top: number): Tooltip;\r\n\tshow(event: MouseEvent): Tooltip;\r\n\tshow(left: number | MouseEvent, top?: number): Tooltip {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst container = document.body;\r\n\t\tconst node = this.getNode();\r\n\r\n\t\tif(!domHelpers.isChildOf(node, container)){\r\n\t\t\tthis.hide();\r\n\t\t\t// GS-2463. Don't put the node beyond the body coordinates\r\n\t\t\t// as it may trigger the resize event\r\n\t\t\tnode.style.top = node.style.top || \"0px\";\r\n\t\t\tnode.style.left = node.style.left || \"0px\";\r\n\t\t\tcontainer.appendChild(node);\r\n\t\t}\r\n\r\n\t\tif (this._isLikeMouseEvent(left)) {\r\n\t\t\tconst position = this._calculateTooltipPosition(left as MouseEvent);\r\n\t\t\ttop = position.top;\r\n\t\t\tleft = position.left;\r\n\t\t}\r\n\r\n\t\tnode.style.top = top + \"px\";\r\n\t\tnode.style.left = left + \"px\";\r\n\r\n\t\tgantt._waiAria.tooltipVisibleAttr(node);\r\n\t\treturn this;\r\n\t}\r\n\thide() : Tooltip{\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst node = this.getNode();\r\n\t\tif(node && node.parentNode){\r\n\t\t\tnode.parentNode.removeChild(node);\r\n\t\t}\r\n\t\tgantt._waiAria.tooltipHiddenAttr(node);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tsetContent(html: string) : Tooltip{\r\n\t\tconst node = this.getNode();\r\n\t\tnode.innerHTML = html;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// it is for salesforce, because it proxies event to it own events\r\n\tprivate _isLikeMouseEvent(event: any): boolean {\r\n\t\tif (!event || typeof event !== \"object\") {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn \"clientX\" in event && \"clientY\" in event;\r\n\t}\r\n\r\n\tprivate _getViewPort() : HTMLElement {\r\n\t\treturn this._root || document.body;\r\n\t}\r\n\r\n\r\n\tprivate _calculateTooltipPosition(event: MouseEvent): IViewPosition{\r\n\t\tconst gantt = this._gantt;\r\n\t\t// top/left coordinates inside the viewport by mouse position\r\n\t\tconst viewport = this._getViewPortSize();\r\n\t\tconst tooltipNode = this.getNode();\r\n\t\tconst tooltip: IViewBox = {\r\n\t\t\ttop:0,\r\n\t\t\tleft: 0,\r\n\t\t\twidth: tooltipNode.offsetWidth,\r\n\t\t\theight: tooltipNode.offsetHeight,\r\n\t\t\tbottom: 0,\r\n\t\t\tright: 0\r\n\t\t};\r\n\r\n\t\tconst offsetX = gantt.config.tooltip_offset_x;\r\n\t\tconst offsetY = gantt.config.tooltip_offset_y;\r\n\r\n\t\tconst container = document.body;\r\n\t\tconst mouse = domHelpers.getRelativeEventPosition(event, container);\r\n\t\tconst containerPos = domHelpers.getNodePosition(container);\r\n\t\tmouse.y += containerPos.y; // to fix margin collapsing\r\n\r\n\t\ttooltip.top = mouse.y;\r\n\t\ttooltip.left = mouse.x;\r\n\t\ttooltip.top += offsetY;\r\n\t\ttooltip.left += offsetX;\r\n\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\ttooltip.right = tooltip.left + tooltip.width;\r\n\r\n\t\tconst scrollTop = window.scrollY + container.scrollTop; // to fix margin collapsing\r\n\t\t// edge cases when the tooltip element can be partially hidden by edges of the viewport\r\n\t\tif(tooltip.top < viewport.top - scrollTop){\r\n\t\t\ttooltip.top = viewport.top;\r\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\t}else if(tooltip.bottom > viewport.bottom){\r\n\t\t\ttooltip.bottom = viewport.bottom;\r\n\t\t\ttooltip.top = tooltip.bottom - tooltip.height;\r\n\t\t}\r\n\r\n\t\tif(tooltip.left < viewport.left){\r\n\t\t\ttooltip.left = viewport.left;\r\n\t\t\ttooltip.right = viewport.left + tooltip.width;\r\n\t\t}else if(tooltip.right > viewport.right){\r\n\t\t\ttooltip.right = viewport.right;\r\n\t\t\ttooltip.left = tooltip.right - tooltip.width;\r\n\t\t}\r\n\r\n\t\tif(mouse.x >= tooltip.left && mouse.x <= tooltip.right) {\r\n\t\t\ttooltip.left = mouse.x - tooltip.width - offsetX;\r\n\t\t\ttooltip.right = tooltip.left + tooltip.width;\r\n\t\t}\r\n\r\n\t\tif(mouse.y >= tooltip.top && mouse.y <= tooltip.bottom) {\r\n\t\t\ttooltip.top = mouse.y - tooltip.height - offsetY;\r\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\t}\r\n\r\n\t\treturn tooltip;\r\n\t}\r\n\r\n\tprivate _getViewPortSize() : IViewBox {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst container = this._getViewPort();\r\n\t\tlet viewport = container;\r\n\t\tlet scrollTop = window.scrollY + document.body.scrollTop;\r\n\t\tlet scrollLeft = window.scrollX + document.body.scrollLeft;\r\n\t\tlet pos;\r\n\t\t// support for the initial tooltip mode where the tooltip element was attached to the data area of gantt\r\n\t\tif(container === gantt.$task_data){\r\n\t\t\tviewport = gantt.$task;\r\n\t\t\tscrollTop = 0;\r\n\t\t\tscrollLeft = 0;\r\n\t\t\tpos = domHelpers.getNodePosition(gantt.$task);\r\n\t\t}else{\r\n\t\t\tpos = domHelpers.getNodePosition(viewport);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tleft:pos.x + scrollLeft,\r\n\t\t\ttop: pos.y + scrollTop,\r\n\t\t\twidth: pos.width,\r\n\t\t\theight: pos.height,\r\n\t\t\tbottom: pos.y + pos.height + scrollTop,\r\n\t\t\tright: pos.x + pos.width + scrollLeft\r\n\t\t};\r\n\t}\r\n}\r\n","import domEventsScope from \"../../core/ui/utils/dom_event_scope\";\r\nimport * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\nimport * as helpers from \"../../utils/helpers\";\r\nimport { Tooltip } from \"./tooltip\";\r\n\r\ninterface ITrackerTarget {\r\n\tselector: string;\r\n\tonmouseenter: (event: MouseEvent, node: HTMLElement) => void;\r\n\tonmousemove: (event: MouseEvent, node: HTMLElement) => void;\r\n\tonmouseleave: (event: MouseEvent, node: HTMLElement) => void;\r\n\tglobal: boolean;\r\n}\r\n\r\ninterface ITooltipConfig {\r\n\tselector: string;\r\n\thtml: (event: MouseEvent, node: HTMLElement) => string;\r\n\tglobal: boolean;\r\n}\r\n\r\nexport class TooltipManager{\r\n\ttooltip: Tooltip;\r\n\tprotected _domEvents: any;\r\n\tprivate _listeners: object = {};\r\n\tprivate _gantt: any;\r\n\tprivate delayShow: any;\r\n\tprivate delayHide: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis.tooltip = new Tooltip(gantt);\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = domEventsScope();\r\n\t\tthis._initDelayedFunctions();\r\n\t}\r\n\r\n\tdestructor(): void{\r\n\t\tthis.tooltip.hide();\r\n\t\tthis._domEvents.detachAll();\r\n\t}\r\n\thideTooltip(): void{\r\n\t\tthis.delayHide();\r\n\t}\r\n\tattach(config: ITrackerTarget): void {\r\n\t\tlet root = document.body;\r\n\t\tconst gantt = this._gantt;\r\n\t\tif(!config.global){\r\n\t\t\troot = gantt.$root;\r\n\t\t}\r\n\r\n\t\tlet watchableTarget = null;\r\n\t\tconst handler = (event) => {\r\n\t\t\tconst eventTarget = domHelpers.getTargetNode(event);\r\n\t\t\tconst targetNode = domHelpers.closest(eventTarget, config.selector);\r\n\t\t\tif(domHelpers.isChildOf(eventTarget, this.tooltip.getNode())){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst doOnMouseEnter = () => {\r\n\t\t\t\twatchableTarget = targetNode;\r\n\t\t\t\tconfig.onmouseenter(event, targetNode);\r\n\t\t\t};\r\n\r\n\t\t\tif(watchableTarget){\r\n\t\t\t\tif(targetNode && targetNode === watchableTarget){\r\n\t\t\t\t\tconfig.onmousemove(event, targetNode);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.onmouseleave(event, watchableTarget);\r\n\t\t\t\t\twatchableTarget = null;\r\n\r\n\t\t\t\t\tif(targetNode && targetNode !== watchableTarget){\r\n\t\t\t\t\t\tdoOnMouseEnter();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(targetNode){\r\n\t\t\t\t\tdoOnMouseEnter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.detach(config.selector);\r\n\t\tthis._domEvents.attach(root, \"mousemove\", handler);\r\n\t\tthis._listeners[config.selector] = {\r\n\t\t\tnode: root,\r\n\t\t\thandler\r\n\t\t};\r\n\t}\r\n\r\n\tdetach(selector: string): void {\r\n\t\tconst listener = this._listeners[selector];\r\n\t\tif(listener){\r\n\t\t\tthis._domEvents.detach(listener.node, \"mousemove\", listener.handler);\r\n\t\t}\r\n\t}\r\n\r\n\ttooltipFor(config: ITooltipConfig): void {\r\n\t\tconst cloneDomEvent = (event: MouseEvent) => {\r\n\t\t\tlet clone = event;\r\n\t\t\t// making events survive timeout in ie\r\n\t\t\t// tslint:disable-next-line no-string-literal\r\n\t\t\tif(document[\"createEventObject\"] && !document.createEvent){\r\n\t\t\t\t// tslint:disable-next-line no-string-literal\r\n\t\t\t\tclone = document[\"createEventObject\"](event);\r\n\t\t\t}\r\n\t\t\treturn clone;\r\n\t\t};\r\n\t\tthis._initDelayedFunctions();\r\n\t\tthis.attach({\r\n\t\t\tselector: config.selector,\r\n\t\t\tglobal: config.global,\r\n\t\t\tonmouseenter:(event: MouseEvent, node: HTMLElement) => {\r\n\t\t\t\tconst html = config.html(event, node);\r\n\t\t\t\tif(html){\r\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonmousemove:(event: MouseEvent, node: HTMLElement) => {\r\n\t\t\t\tconst html = config.html(event, node);\r\n\t\t\t\tif(html){\r\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\t\t\tthis.delayHide();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonmouseleave:() => {\r\n\t\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\t\tthis.delayHide();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initDelayedFunctions(){\r\n\t\tconst gantt = this._gantt;\r\n\t\t// reset delayed functions in order to apply current values of tooltip_timeout\r\n\t\tif(this.delayShow){\r\n\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t}\r\n\t\tif(this.delayHide){\r\n\t\t\tthis.delayHide.$cancelTimeout();\r\n\t\t}\r\n\t\tthis.tooltip.hide();\r\n\r\n\t\tthis.delayShow = helpers.delay((event: MouseEvent, html: string) => {\r\n\t\t\tif(gantt.callEvent(\"onBeforeTooltip\", [event]) === false) {\r\n\t\t\t\tthis.tooltip.hide();\r\n\t\t\t} else {\r\n\t\t\t\tthis.tooltip.setContent(html);\r\n\t\t\t\tthis.tooltip.show(event);\r\n\t\t\t}\r\n\t\t}, gantt.config.tooltip_timeout || 1);\r\n\r\n\t\tthis.delayHide = helpers.delay(() => {\r\n\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\tthis.tooltip.hide();\r\n\t\t}, gantt.config.tooltip_hide_timeout || 1);\r\n\t}\r\n\r\n}","import { IInlineEditState, IMonitor, IUndo, IUndoCommand, TActionType, TEntityType, TUndoValue } from \"./types\";\r\n\r\nconst noTrack = {\r\n\tonBeforeUndo: \"onAfterUndo\",\r\n\tonBeforeRedo: \"onAfterRedo\"\r\n};\r\n\r\nconst batchActions = [\r\n\t\"onTaskDragStart\",\r\n\t\"onAfterTaskUpdate\",\r\n\t\"onAfterTaskDelete\",\r\n\t\"onBeforeBatchUpdate\"\r\n];\r\n\r\nexport class Monitor implements IMonitor {\r\n\tprivate _batchAction = null;\r\n\tprivate _batchMode = false;\r\n\tprivate _ignore = false;\r\n\tprivate _ignoreMoveEvents = false;\r\n\tprivate _initialTasks = {};\r\n\tprivate _initialLinks = {};\r\n\tprivate _nestedTasks = {};\r\n\tprivate _nestedLinks = {};\r\n\tprivate _timeout;\r\n\tprivate _gantt: any;\r\n\tprivate _undo: IUndo;\r\n\r\n\tconstructor(undo: IUndo, gantt: any) {\r\n\t\tthis._undo = undo;\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._attachEvents();\r\n\t}\r\n\r\n\tstore(id: TaskID | LinkID, type: TEntityType, overwrite: boolean = false) {\r\n\t\tif (type === this._gantt.config.undo_types.task) {\r\n\t\t\treturn this._storeTask(id, overwrite);\r\n\t\t}\r\n\t\tif (type === this._gantt.config.undo_types.link) {\r\n\t\t\treturn this._storeLink(id, overwrite);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tisMoveEventsIgnored() {\r\n\t\treturn this._ignoreMoveEvents;\r\n\t}\r\n\ttoggleIgnoreMoveEvents(newValue?: boolean) {\r\n\t\tthis._ignoreMoveEvents = newValue || false;\r\n\t}\r\n\tstartIgnore() {\r\n\t\tthis._ignore = true;\r\n\t}\r\n\tstopIgnore() {\r\n\t\tthis._ignore = false;\r\n\t}\r\n\tstartBatchAction() {\r\n\t\t// try catching updates made from event handlers using timeout\r\n\t\tif (!this._timeout){\r\n\t\t\tthis._timeout = setTimeout(() => {\r\n\t\t\t\tthis.stopBatchAction();\r\n\t\t\t\tthis._timeout = null;\r\n\t\t\t}, 10);\r\n\t\t}\r\n\r\n\r\n\t\tif (this._ignore || this._batchMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._batchMode = true;\r\n\t\tthis._batchAction = this._undo.action.create();\r\n\t}\r\n\tstopBatchAction() {\r\n\t\tif (this._ignore) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst undo = this._undo;\r\n\t\tif (this._batchAction) {\r\n\t\t\tundo.logAction(this._batchAction);\r\n\t\t}\r\n\t\tthis._batchMode = false;\r\n\t\tthis._batchAction = null;\r\n\t}\r\n\tonTaskAdded(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.add);\r\n\t\t}\r\n\t}\r\n\tonTaskUpdated(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.update);\r\n\t\t}\r\n\t}\r\n\tonTaskMoved(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\t(task as any).$local_index = this._gantt.getTaskIndex(task.id);\r\n\t\t\tconst oldValue = this.getInitialTask(task.id);\r\n\t\t\tif((task as any).$local_index === oldValue.$local_index &&\r\n\t\t\t\tthis._gantt.getParent(task) === this._gantt.getParent(oldValue)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\tthis._storeEntityCommand(\r\n\t\t\t\ttask,\r\n\t\t\t\tthis.getInitialTask(task.id),\r\n\t\t\t\tthis._undo.command.type.move,\r\n\t\t\t\tthis._undo.command.entity.task\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\tonTaskDeleted(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.remove);\r\n\t\t\tif (this._nestedTasks[task.id]) {\r\n\t\t\t\tconst children = this._nestedTasks[task.id];\r\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\r\n\t\t\t\t\tthis._storeTaskCommand(children[i], this._undo.command.type.remove);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this._nestedLinks[task.id]) {\r\n\t\t\t\tconst childrenLinks = this._nestedLinks[task.id];\r\n\t\t\t\tfor (let i = 0; i < childrenLinks.length; i++) {\r\n\t\t\t\t\tthis._storeLinkCommand(childrenLinks[i], this._undo.command.type.remove);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tonLinkAdded(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.add);\r\n\t\t}\r\n\t}\r\n\tonLinkUpdated(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.update);\r\n\t\t}\r\n\t}\r\n\tonLinkDeleted(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.remove);\r\n\t\t}\r\n\t}\r\n\tsetNestedTasks(id: TaskID, taskIds: TaskID[]) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet task = null;\r\n\t\tconst tasks = [];\r\n\t\tlet\tlinkIds = this._getLinks(gantt.getTask(id));\r\n\r\n\t\tfor (let i = 0; i < taskIds.length; i++) {\r\n\t\t\ttask = this.setInitialTask(taskIds[i]);\r\n\t\t\tlinkIds = linkIds.concat(this._getLinks(task));\r\n\t\t\ttasks.push(task);\r\n\t\t}\r\n\r\n\t\tconst uniqueLinks = {};\r\n\t\tfor (let i = 0; i < linkIds.length; i++) {\r\n\t\t\tuniqueLinks[linkIds[i]] = true;\r\n\t\t}\r\n\t\tconst links = [];\r\n\t\tfor (const i in uniqueLinks) {\r\n\t\t\tlinks.push(this.setInitialLink(i));\r\n\t\t}\r\n\t\tthis._nestedTasks[id] = tasks;\r\n\t\tthis._nestedLinks[id] = links;\r\n\t}\r\n\tsetInitialTask(id: TaskID, overwrite?: boolean) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (overwrite || (!this._initialTasks[id] || !this._batchMode)) {\r\n\t\t\tconst task = gantt.copy(gantt.getTask(id));\r\n\t\t\ttask.$index = gantt.getGlobalTaskIndex(id);\r\n\t\t\ttask.$local_index = gantt.getTaskIndex(id);\r\n\t\t\tthis.setInitialTaskObject(id, task);\r\n\t\t}\r\n\t\treturn this._initialTasks[id];\r\n\t}\r\n\tgetInitialTask(id: TaskID) {\r\n\t\treturn this._initialTasks[id];\r\n\t}\r\n\tclearInitialTasks() {\r\n\t\tthis._initialTasks = {};\r\n\t}\r\n\tsetInitialTaskObject(id: TaskID, object: ITask) {\r\n\t\tthis._initialTasks[id] = object;\r\n\t}\r\n\tsetInitialLink(id: LinkID, overwrite?: boolean) {\r\n\t\tif (!this._initialLinks[id] || !this._batchMode) {\r\n\t\t\tthis._initialLinks[id] = this._gantt.copy(this._gantt.getLink(id));\r\n\t\t}\r\n\t\treturn this._initialLinks[id];\r\n\t}\r\n\tgetInitialLink(id: LinkID) {\r\n\t\treturn this._initialLinks[id];\r\n\t}\r\n\tclearInitialLinks() {\r\n\t\tthis._initialLinks = {};\r\n\t}\r\n\tprivate _attachEvents() {\r\n\t\tlet deleteCacheCooldown = null;\r\n\t\tconst gantt = this._gantt;\r\n\r\n\t\tconst saveInitialAll = () => {\r\n\t\t\tif (!deleteCacheCooldown) {\r\n\t\t\t\tdeleteCacheCooldown = setTimeout(() => {\r\n\t\t\t\t\tdeleteCacheCooldown = null;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.clearInitialTasks();\r\n\t\t\t\tgantt.eachTask((task: ITask) => {\r\n\t\t\t\t\tthis.setInitialTask(task.id);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.clearInitialLinks();\r\n\t\t\t\tgantt.getLinks().forEach((link: ILink) => {\r\n\t\t\t\t\tthis.setInitialLink(link.id);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t\tconst getMoveObjectByTaskId = (id: TaskID) => {\r\n\t\t\treturn gantt.copy(gantt.getTask(id));\r\n\t\t};\r\n\r\n\t\tfor (const i in noTrack) {\r\n\t\t\tgantt.attachEvent(i, () => {\r\n\t\t\t\tthis.startIgnore();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(noTrack[i], () => {\r\n\t\t\t\tthis.stopIgnore();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < batchActions.length; i++) {\r\n\t\t\tgantt.attachEvent(batchActions[i], () => {\r\n\t\t\t\tthis.startBatchAction();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onParse\", () => {\r\n\t\t\tthis._undo.clearUndoStack();\r\n\t\t\tthis._undo.clearRedoStack();\r\n\t\t\tsaveInitialAll();\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskAdd\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.setInitialTask(id, true);\r\n\t\t\tthis.onTaskAdded(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskUpdate\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.onTaskUpdated(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskDelete\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.onTaskDeleted(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkAdd\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.setInitialLink(id, true);\r\n\t\t\tthis.onLinkAdded(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkUpdate\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.onLinkUpdated(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkDelete\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.onLinkDeleted(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onRowDragEnd\", (id: TaskID, target: TaskID) => {\r\n\t\t\tthis.onTaskMoved(getMoveObjectByTaskId(id));\r\n\t\t\tthis.toggleIgnoreMoveEvents();\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onBeforeTaskDelete\", (id: TaskID) => {\r\n\t\t\tthis.store(id, gantt.config.undo_types.task);\r\n\t\t\tconst nested = [];\r\n\r\n\t\t\t// remember task indexes in case their being deleted in a loop, so they could be restored in the correct order\r\n\t\t\tsaveInitialAll();\r\n\r\n\t\t\tgantt.eachTask((task: ITask) => {\r\n\t\t\t\tnested.push(task.id);\r\n\t\t\t}, id);\r\n\t\t\tthis.setNestedTasks(id, nested);\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tconst datastore = gantt.getDatastore(\"task\");\r\n\r\n\t\tdatastore.attachEvent(\"onBeforeItemMove\", (id: TaskID, parent: TaskID, tindex: number) => {\r\n\t\t\tif (!this.isMoveEventsIgnored()) {\r\n\t\t\t\tsaveInitialAll();\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tdatastore.attachEvent(\"onAfterItemMove\", (id: TaskID, parent: TaskID, tindex: number) => {\r\n\t\t\tif (!this.isMoveEventsIgnored()) {\r\n\t\t\t\tthis.onTaskMoved(getMoveObjectByTaskId(id));\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onRowDragStart\", (id: TaskID, target: TaskID, e: Event) => {\r\n\t\t\tthis.toggleIgnoreMoveEvents(true);\r\n\t\t\tsaveInitialAll();\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tlet dragId = null;\r\n\t\tlet projectDrag = false;\r\n\t\tgantt.attachEvent(\"onBeforeTaskDrag\", (taskId: TaskID) => {\r\n\t\t\tdragId = gantt.getState().drag_id;\r\n\t\t\tif (dragId === taskId){\r\n\t\t\t\tconst task = gantt.getTask(taskId);\r\n\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project){\r\n\t\t\t\t\tprojectDrag = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// GS-99. Store the initial task dates before multiple drag\r\n\t\t\tif (gantt.plugins().multiselect){\r\n\t\t\t\tconst selectedIds = gantt.getSelectedTasks();\r\n\t\t\t\tif (selectedIds.length > 1){\r\n\t\t\t\t\tselectedIds.forEach((id)=>{\r\n\t\t\t\t\t\tthis.store(id, gantt.config.undo_types.task, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this.store(taskId, gantt.config.undo_types.task);\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onAfterTaskDrag\", (taskId: TaskID) => {\r\n\t\t\t// if we drag multiple tasks and other tasks move to another date after that,\r\n\t\t\t// auto-scheduling/correct work time should occur in anoher command.\r\n\t\t\t// otherwise, when we undo the changes, the task constraint is not restored correctly\r\n\t\t\tconst multipleDrag = projectDrag || (gantt.plugins().multiselect && gantt.getSelectedTasks().length > 1);\r\n\t\t\tif (multipleDrag && dragId === taskId){\r\n\t\t\t\tprojectDrag = false;\r\n\t\t\t\tdragId = null;\r\n\t\t\t\tthis.stopBatchAction();\r\n\t\t\t}\r\n\t\t\t// GS-99. When dragging multiple tasks, we need to store the initial tasks\r\n\t\t\tthis.store(taskId, gantt.config.undo_types.task, true);\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onLightbox\", (taskId: TaskID) => this.store(taskId, gantt.config.undo_types.task));\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskAutoSchedule\", (task: ITask) => {\r\n\t\t\tthis.store(task.id, gantt.config.undo_types.task, true);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tif (gantt.ext.inlineEditors) {\r\n\t\t\t// remove the onGanttLayoutReady wrapper when GS-1288 is merged\r\n\t\t\tlet onBeforeEditStartId = null;\r\n\t\t\tlet onEditStart = null;\r\n\t\t\tgantt.attachEvent(\"onGanttLayoutReady\", () => {\r\n\t\t\t\tif (onBeforeEditStartId) {\r\n\t\t\t\t\tgantt.ext.inlineEditors.detachEvent(onBeforeEditStartId);\r\n\t\t\t\t}\r\n\t\t\t\tif (onEditStart) {\r\n\t\t\t\t\tgantt.ext.inlineEditors.detachEvent(onEditStart);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tonEditStart = gantt.ext.inlineEditors.attachEvent(\"onEditStart\", (state: IInlineEditState) => {\r\n\t\t\t\t\tthis.store(state.id, gantt.config.undo_types.task);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// GS-99. If another inline editor is opened and we open a new inline editor,\r\n\t\t\t\t// we shouldn't use the batchAction\r\n\t\t\t\tonBeforeEditStartId = gantt.ext.inlineEditors.attachEvent(\"onBeforeEditStart\", (state: IInlineEditState) => {\r\n\t\t\t\t\tthis.stopBatchAction();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _storeCommand(command: IUndoCommand) {\r\n\t\tconst undo = this._undo;\r\n\t\tundo.updateConfigs();\r\n\r\n\t\tif (!undo.undoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._batchMode) {\r\n\t\t\tthis._batchAction.commands.push(command);\r\n\t\t} else {\r\n\t\t\tconst action = undo.action.create([command]);\r\n\t\t\tundo.logAction(action);\r\n\t\t}\r\n\t}\r\n\tprivate _storeEntityCommand(obj: TUndoValue, old: TUndoValue, actionType: TActionType, entityType: TEntityType) {\r\n\t\tconst undo = this._undo;\r\n\t\tconst command = undo.command.create(obj, old, actionType, entityType);\r\n\t\tthis._storeCommand(command);\r\n\t}\r\n\tprivate _storeTaskCommand(obj: ITask, type: TActionType) {\r\n\t\tif(this._gantt.isTaskExists(obj.id)){\r\n\t\t\t(obj as any).$local_index = this._gantt.getTaskIndex(obj.id);\r\n\t\t}\r\n\r\n\t\tthis._storeEntityCommand(obj, this.getInitialTask(obj.id), type, this._undo.command.entity.task);\r\n\t}\r\n\tprivate _storeLinkCommand(obj: ILink, type: TActionType) {\r\n\t\tthis._storeEntityCommand(obj, this.getInitialLink(obj.id), type, this._undo.command.entity.link);\r\n\t}\r\n\tprivate _getLinks(task: ITask) {\r\n\t\treturn task.$source.concat(task.$target);\r\n\t}\r\n\tprivate _storeTask(taskId: TaskID, overwrite: boolean = false) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.setInitialTask(taskId, overwrite);\r\n\t\tgantt.eachTask((child: ITask) => {\r\n\t\t\tthis.setInitialTask(child.id);\r\n\t\t}, taskId);\r\n\t\treturn true;\r\n\t}\r\n\tprivate _storeLink(linkId: LinkID, overwrite: boolean = false) {\r\n\t\tthis.setInitialLink(linkId, overwrite);\r\n\t\treturn true;\r\n\t}\r\n}","import { IUndo, IUndoCommand, IUndoCommands, IUndoPropAction, IUndoPropCommand, TActionType, TEntityType, TUndoStack, TUndoValue } from \"./types\";\r\n\r\nconst MAX_UNDO_STEPS = 100;\r\n\r\nexport class Undo implements IUndo {\r\n\r\n\tmaxSteps = MAX_UNDO_STEPS;\r\n\tundoEnabled = true;\r\n\tredoEnabled = true;\r\n\taction: IUndoPropAction = {\r\n\t\tcreate: (commands?: IUndoCommand[]): IUndoCommands => {\r\n\t\t\treturn { commands: (commands ? commands.slice() : []) };\r\n\t\t},\r\n\t\tinvert: (action: IUndoCommands): IUndoCommands => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst revert = gantt.copy(action);\r\n\t\t\tconst commands = this.command;\r\n\t\t\tfor (let i = 0; i < action.commands.length; i++) {\r\n\t\t\t\tconst command = revert.commands[i] = commands.invert(revert.commands[i]);\r\n\t\t\t\tif (command.type === commands.type.update || command.type === commands.type.move) {\r\n\t\t\t\t\t[command.value, command.oldValue] = [command.oldValue, command.value];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn revert as IUndoCommands;\r\n\t\t}\r\n\t};\r\n\tcommand: IUndoPropCommand = {\r\n\t\t// entities that require different processing for undoing-redoing changes (gantt.config.undo_types)\r\n\t\tentity: null,\r\n\r\n\t\t// types of traced actions (gantt.config.undo_actions)\r\n\t\ttype: null,\r\n\r\n\t\tcreate: (value: TUndoValue, oldValue: TUndoValue, type: TActionType, entity: TEntityType): IUndoCommand => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\treturn {\r\n\t\t\t\tentity,\r\n\t\t\t\ttype,\r\n\t\t\t\tvalue: gantt.copy(value),\r\n\t\t\t\toldValue: gantt.copy(oldValue || value)\r\n\t\t\t};\r\n\t\t},\r\n\t\tinvert: (command: IUndoCommand): IUndoCommand => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst revert = gantt.copy(command);\r\n\t\t\trevert.type = this.command.inverseCommands(command.type);\r\n\t\t\treturn revert;\r\n\t\t},\r\n\t\tinverseCommands: (command: TActionType): TActionType => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst types = this.command.type;\r\n\t\t\tswitch (command) {\r\n\t\t\t\tcase types.update:\r\n\t\t\t\t\treturn types.update;\r\n\t\t\t\tcase types.remove:\r\n\t\t\t\t\treturn types.add;\r\n\t\t\t\tcase types.add:\r\n\t\t\t\t\treturn types.remove;\r\n\t\t\t\tcase types.move:\r\n\t\t\t\t\treturn types.move;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgantt.assert(false, \"Invalid command \"+ command);\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _undoStack = [];\r\n\tprivate _redoStack = [];\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any){\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\tgetUndoStack() {\r\n\t\treturn this._undoStack;\r\n\t}\r\n\tsetUndoStack(stack: []) {\r\n\t\tthis._undoStack = stack;\r\n\t}\r\n\r\n\tgetRedoStack() {\r\n\t\treturn this._redoStack;\r\n\t}\r\n\tsetRedoStack(stack: []) {\r\n\t\tthis._redoStack = stack;\r\n\t}\r\n\r\n\tclearUndoStack() {\r\n\t\tthis._undoStack = [];\r\n\t}\r\n\r\n\tclearRedoStack() {\r\n\t\tthis._redoStack = [];\r\n\t}\r\n\r\n\tupdateConfigs() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.maxSteps = gantt.config.undo_steps || MAX_UNDO_STEPS;\r\n\t\tthis.command.entity = gantt.config.undo_types;\r\n\t\tthis.command.type = gantt.config.undo_actions;\r\n\t\tthis.undoEnabled = !!gantt.config.undo;\r\n\t\tthis.redoEnabled = !!gantt.config.redo; // GS-873, Redo should work even when the `gantt.config.undo` is disabled.\r\n\t}\r\n\r\n\tundo() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.updateConfigs();\r\n\t\tif (!this.undoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst action = this._pop(this._undoStack);\r\n\t\tif (action) {\r\n\t\t\tthis._reorderCommands(action);\r\n\t\t}\r\n\t\tif (gantt.callEvent(\"onBeforeUndo\", [action]) !== false) {\r\n\t\t\tif (action) {\r\n\t\t\t\tthis._applyAction(this.action.invert(action));\r\n\t\t\t\tthis._push(this._redoStack, gantt.copy(action));\r\n\t\t\t\tgantt.callEvent(\"onAfterUndo\", [action]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.callEvent(\"onAfterUndo\", [null]);\r\n\t}\r\n\r\n\tredo() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.updateConfigs();\r\n\t\tif (!this.redoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst action = this._pop(this._redoStack);\r\n\t\tif (action) {\r\n\t\t\tthis._reorderCommands(action);\r\n\t\t}\r\n\r\n\t\tif (gantt.callEvent(\"onBeforeRedo\", [action]) !== false) {\r\n\t\t\tif (action) {\r\n\t\t\t\tthis._applyAction(action);\r\n\t\t\t\tthis._push(this._undoStack, gantt.copy(action));\r\n\t\t\t\tgantt.callEvent(\"onAfterRedo\", [action]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.callEvent(\"onAfterRedo\", [null]);\r\n\t}\r\n\r\n\t// storeUndo:\r\n\tlogAction(action: IUndoCommands) {\r\n\t\tthis._push(this._undoStack, action);\r\n\t\tthis._redoStack = [];\r\n\t}\r\n\r\n\tprivate _push(stack: TUndoStack, action: IUndoCommands): IUndoCommands {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (!action.commands.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst event = stack === this._undoStack ? \"onBeforeUndoStack\" : \"onBeforeRedoStack\";\r\n\t\tif (gantt.callEvent(event, [action]) === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// commands can be removed from event handler\r\n\t\tif (!action.commands.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstack.push(action);\r\n\t\twhile (stack.length > this.maxSteps) {\r\n\t\t\tstack.shift();\r\n\t\t}\r\n\t\treturn action;\r\n\t}\r\n\r\n\tprivate _pop(stack: TUndoStack): IUndoCommands {\r\n\t\treturn stack.pop();\r\n\t}\r\n\r\n\tprivate _reorderCommands(action) {\r\n\t\t// firstly process tasks and only then links\r\n\t\t// in order to ensure links are added not earlier than their tasks\r\n\t\t// firstly to 'move' actions and only then updates\r\n\t\tconst weights = { any: 0, link:1, task:2 };\r\n\t\tconst actionWeights = { move: 1, any:0 };\r\n\t\taction.commands.sort(function(a, b) {\r\n\t\t\tif (a.entity === \"task\" && b.entity === \"task\") {\r\n\t\t\t\tif (a.type !== b.type) {\r\n\t\t\t\t\treturn (actionWeights[b.type] || 0) - (actionWeights[a.type] || 0);\r\n\t\t\t\t} else if (a.type === \"move\" && a.oldValue && b.oldValue && b.oldValue.parent === a.oldValue.parent) {\r\n\t\t\t\t\treturn a.oldValue.$index - b.oldValue.$index;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst weightA = weights[a.entity] || weights.any;\r\n\t\t\t\tconst weightB = weights[b.entity] || weights.any;\r\n\t\t\t\treturn weightB - weightA;\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _applyAction(action: IUndoCommands) {\r\n\t\tlet command = null;\r\n\t\tconst entities = this.command.entity;\r\n\t\tconst actions = this.command.type;\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst methods = {};\r\n\t\tmethods[entities.task] = {\r\n\t\t\tadd: \"addTask\",\r\n\t\t\tget: \"getTask\",\r\n\t\t\tupdate: \"updateTask\",\r\n\t\t\tremove: \"deleteTask\",\r\n\t\t\tmove: \"moveTask\",\r\n\t\t\tisExists: \"isTaskExists\"\r\n\t\t};\r\n\t\tmethods[entities.link] = {\r\n\t\t\tadd: \"addLink\",\r\n\t\t\tget: \"getLink\",\r\n\t\t\tupdate: \"updateLink\",\r\n\t\t\tremove: \"deleteLink\",\r\n\t\t\tisExists: \"isLinkExists\"\r\n\t\t};\r\n\r\n\t\tgantt.batchUpdate(function() {\r\n\t\t\t// it is logical to undo actions from the last one to the first one\r\n\t\t\t// but we have to do it from the first one because the order\r\n\t\t\t// of tasks ($index and $local_index) depends on the existing tasks\r\n\t\t\tfor (let i = 0; i < action.commands.length; i++) {\r\n\t\t\t\tcommand = action.commands[i];\r\n\t\t\t\tconst method = methods[command.entity][command.type];\r\n\t\t\t\tconst getMethod = methods[command.entity].get;\r\n\t\t\t\tconst check = methods[command.entity].isExists;\r\n\r\n\t\t\t\tif (command.type === actions.add) {\r\n\t\t\t\t\tgantt[method](command.oldValue, command.oldValue.parent, command.oldValue.$local_index);\r\n\t\t\t\t} else if (command.type === actions.remove) {\r\n\t\t\t\t\tif (gantt[check](command.value.id)) {\r\n\t\t\t\t\t\tgantt[method](command.value.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (command.type === actions.update) {\r\n\t\t\t\t\tconst item = gantt[getMethod](command.value.id);\r\n\t\t\t\t\tfor(const prop in command.value){\r\n\t\t\t\t\t\tif(!prop.startsWith(\"$\") && !prop.startsWith(\"_\")){\r\n\t\t\t\t\t\t\titem[prop] = command.value[prop];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgantt[method](command.value.id);\r\n\t\t\t\t} else if (command.type === actions.move) {\r\n\t\t\t\t\tgantt[method](command.value.id, command.value.$local_index, command.value.parent);\r\n\t\t\t\t\t// GS-680: We should send the changes to the server after we undo vertical reorder\r\n\t\t\t\t\tgantt.callEvent(\"onRowDragEnd\", [command.value.id]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","\r\nimport click_drag from \"./click_drag\";\r\nimport drag_timeline from \"./drag_timeline\";\r\nimport export_api from \"./export_api\";\r\nimport fullscreen from \"./fullscreen\";\r\nimport keyboard_navigation from \"./keyboard_navigation\";\r\nimport marker from \"./marker\";\r\nimport multiselect from \"./multiselect\";\r\nimport quick_info from \"./quick_info\";\r\nimport tooltip from \"./tooltip\";\r\nimport undo from \"./undo\";\r\n\r\nexport default {\r\n\tclick_drag,\r\n\tdrag_timeline,\r\n\tfullscreen,\r\n\tkeyboard_navigation,\r\n\tquick_info,\r\n\ttooltip,\r\n\tundo,\r\n\tmarker,\r\n\tmultiselect,\r\n\texport_api\r\n};","import { EventsManager } from \"./eventsManager\";\r\nimport { ISelectedRegionConfig, SelectedRegion } from \"./selectedRegion\";\r\n\r\nexport default function(gantt: any){\r\n\tif (!gantt.ext) {\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tconst defaultConfig: ISelectedRegionConfig = {\r\n\t\tclassName: \"gantt_click_drag_rect\",\r\n\t\tuseRequestAnimationFrame: true,\r\n\t\tcallback: undefined,\r\n\t\tsingleRow: false\r\n\t};\r\n\r\n\tconst eventsManager = new EventsManager(gantt);\r\n\r\n\tgantt.ext.clickDrag = eventsManager;\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", () => {\r\n\t\tconst config: ISelectedRegionConfig = { viewPort: gantt.$task_data, ...defaultConfig };\r\n\t\tif (gantt.config.click_drag){\r\n\t\t\tconst clickDrag = gantt.config.click_drag;\r\n\t\t\tconfig.render = clickDrag.render || defaultConfig.render;\r\n\t\t\tconfig.className = clickDrag.className || defaultConfig.className;\r\n\t\t\tconfig.callback = clickDrag.callback || defaultConfig.callback;\r\n\t\t\tconfig.viewPort = clickDrag.viewPort || gantt.$task_data;\r\n\t\t\tconfig.useRequestAnimationFrame = clickDrag.useRequestAnimationFrame === undefined ?\r\n\t\t\t\tdefaultConfig.useRequestAnimationFrame : clickDrag.useRequestAnimationFrame;\r\n\r\n\t\t\tconfig.singleRow = clickDrag.singleRow === undefined ? defaultConfig.singleRow : clickDrag.singleRow;\r\n\t\t\tconst timeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\tconst selectedRegion = new SelectedRegion(config, gantt, timeline);\r\n\t\t\tgantt.ext.clickDrag.attach(selectedRegion, clickDrag.useKey, clickDrag.ignore);\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", () => {\r\n\t\teventsManager.destructor();\r\n\t});\r\n\r\n}","import { EventsManager } from \"./eventsManager\";\r\nexport default function(gantt: any){\r\n\tif (!gantt.ext){\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tgantt.ext.dragTimeline = {\r\n\t\tcreate: () => EventsManager.create(gantt)\r\n\t};\r\n\r\n\tgantt.config.drag_timeline = {\r\n\t\tenabled: true,\r\n\t\trender: false\r\n\t};\r\n}","export default function(gantt: any){\r\n\r\ninterface IBody extends HTMLElement {\r\n\tmsRequestFullscreen?: () => void;\r\n\tmozRequestFullScreen?: () => void;\r\n\twebkitRequestFullscreen?: (ALLOW_KEYBOARD_INPUT: any) => void;\r\n}\r\n\r\n\r\ninterface IConsole extends Console {\r\n\twarning?: (str: string) => void;\r\n}\r\n\r\ninterface IDocument extends Document {\r\n\tfullscreenElement: Element;\r\n\tmozFullScreenElement?: Element;\r\n\twebkitFullscreenElement?: Element;\r\n\tmsFullscreenElement?: Element;\r\n\twebkitFullscreenEnabled?: boolean;\r\n\tmozFullScreenEnabled?: boolean;\r\n\tmsFullscreenEnabled?: boolean;\r\n\tmsExitFullscreen?: () => void;\r\n\tmozCancelFullScreen?: () => void;\r\n\twebkitExitFullscreen?: () => void;\r\n}\r\n\r\ninterface IElement extends Element {\r\n\tALLOW_KEYBOARD_INPUT?: boolean;\r\n}\r\n\r\ninterface IElementSizes extends ISizes {\r\n\tmodified: boolean;\r\n}\r\n\r\ninterface ISizes {\r\n\twidth: null | string;\r\n\theight: null | string;\r\n\ttop: null | string;\r\n\tleft: null | string;\r\n\tposition: null | string;\r\n\tzIndex: null | number;\r\n}\r\n\r\nfunction isExpanded() {\r\n\tconst element = ((document as IDocument).fullscreenElement ||\r\n\t\t(document as IDocument).mozFullScreenElement ||\r\n\t\t(document as IDocument).webkitFullscreenElement ||\r\n\t\t(document as IDocument).msFullscreenElement);\r\n\treturn !!(element && element === document.body);\r\n}\r\n\r\nfunction isFullscreenAvailable() {\r\n\ttry {\r\n\t\treturn (document as IDocument).fullscreenEnabled ||\r\n\t\t\t(document as IDocument).webkitFullscreenEnabled ||\r\n\t\t\t(document as IDocument).mozFullScreenEnabled ||\r\n\t\t\t(document as IDocument).msFullscreenEnabled;\r\n\t} catch (e) {\r\n\t\t// eslint-disable-next-line no-console\r\n\t\tconsole.error(\"Fullscreen is not available:\", e); \r\n\t}\r\n}\r\n\r\nconst state = gantt.$services.getService(\"state\");\r\nstate.registerProvider(\"fullscreen\", () => {\r\n\tif (isFullscreenAvailable()){\r\n\t\treturn { fullscreen: isExpanded() };\r\n\t} else {\r\n\t\treturn undefined;\r\n\t}\r\n});\r\n\r\nlet backupBodyPadding = {\r\n\toverflow: null,\r\n\tpadding: null,\r\n\tpaddingTop: null,\r\n\tpaddingRight: null,\r\n\tpaddingBottom: null,\r\n\tpaddingLeft: null\r\n};\r\n\r\nconst backupElementSizes: IElementSizes = {\r\n\twidth: null,\r\n\theight: null,\r\n\ttop: null,\r\n\tleft: null,\r\n\tposition: null,\r\n\tzIndex: null,\r\n\tmodified: false\r\n};\r\n\r\nlet backupPositioning = null;\r\nfunction resetParentPositioning(root){\r\n\tlet parent = root.parentNode;\r\n\tconst positions = [];\r\n\twhile(parent && parent.style){\r\n\t\tpositions.push({\r\n\t\t\telement: parent,\r\n\t\t\toriginalPositioning: parent.style.position\r\n\t\t});\r\n\t\tparent.style.position = \"static\";\r\n\t\tparent = parent.parentNode;\r\n\t}\r\n\treturn positions;\r\n}\r\n\r\nfunction restoreParentPositioning(positions: any[]){\r\n\tpositions.forEach(record => {\r\n\t\trecord.element.style.position = record.originalPositioning;\r\n\t});\r\n}\r\n\r\n// expand gantt root element to fullscreen automatically\r\nfunction setFullScreenSizes() {\r\n\tconst root = gantt.ext.fullscreen.getFullscreenElement();\r\n\tconst body = document.body;\r\n\tupdateSizes(root.style, backupElementSizes);\r\n\tbackupBodyPadding = {\r\n\t\toverflow: body.style.overflow,\r\n\t\tpadding: body.style.padding ? body.style.padding : null,\r\n\t\tpaddingTop: body.style.paddingTop ? body.style.paddingTop : null,\r\n\t\tpaddingRight: body.style.paddingRight ? body.style.paddingRight : null,\r\n\t\tpaddingBottom: body.style.paddingBottom ? body.style.paddingBottom : null,\r\n\t\tpaddingLeft: body.style.paddingLeft ? body.style.paddingLeft : null\r\n\t};\r\n\r\n\tif (body.style.padding) {\r\n\t\tbody.style.padding = \"0\";\r\n\t}\r\n\tif (body.style.paddingTop) {\r\n\t\tbody.style.paddingTop = \"0\";\r\n\t}\r\n\tif (body.style.paddingRight) {\r\n\t\tbody.style.paddingRight = \"0\";\r\n\t}\r\n\tif (body.style.paddingBottom) {\r\n\t\tbody.style.paddingBottom = \"0\";\r\n\t}\r\n\tif (body.style.paddingLeft) {\r\n\t\tbody.style.paddingLeft = \"0\";\r\n\t}\r\n\r\n\tbody.style.overflow = \"hidden\";\r\n\r\n\troot.style.width = \"100vw\";\r\n\troot.style.height = \"100vh\";\r\n\troot.style.top = \"0px\";\r\n\troot.style.left = \"0px\";\r\n\troot.style.position = \"absolute\";\r\n\troot.style.zIndex = 1;\r\n\tbackupElementSizes.modified = true;\r\n\tbackupPositioning = resetParentPositioning(root);\r\n}\r\n\r\nfunction restoreSizes() {\r\n\tconst root = gantt.ext.fullscreen.getFullscreenElement();\r\n\tconst body = document.body;\r\n\tif (backupElementSizes.modified) {\r\n\t\tif (backupBodyPadding.padding) {\r\n\t\t\tbody.style.padding = backupBodyPadding.padding;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingTop) {\r\n\t\t\tbody.style.paddingTop = backupBodyPadding.paddingTop;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingRight) {\r\n\t\t\tbody.style.paddingRight = backupBodyPadding.paddingRight;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingBottom) {\r\n\t\t\tbody.style.paddingBottom = backupBodyPadding.paddingBottom;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingLeft) {\r\n\t\t\tbody.style.paddingLeft = backupBodyPadding.paddingLeft;\r\n\t\t}\r\n\r\n\t\tbody.style.overflow = backupBodyPadding.overflow;\r\n\t\tbackupBodyPadding = {\r\n\t\t\toverflow: null,\r\n\t\t\tpadding: null,\r\n\t\t\tpaddingTop: null,\r\n\t\t\tpaddingRight: null,\r\n\t\t\tpaddingBottom: null,\r\n\t\t\tpaddingLeft: null\r\n\t\t};\r\n\t\tupdateSizes(backupElementSizes, root.style);\r\n\t\tbackupElementSizes.modified = false;\r\n\t}\r\n\trestoreParentPositioning(backupPositioning);\r\n\tbackupPositioning = null;\r\n}\r\n\r\nfunction updateSizes(source: ISizes, target: ISizes) {\r\n\ttarget.width = source.width;\r\n\ttarget.height = source.height;\r\n\ttarget.top = source.top;\r\n\ttarget.left = source.left;\r\n\ttarget.position = source.position;\r\n\ttarget.zIndex = source.zIndex;\r\n}\r\n\r\nfunction addDOMEvents() {\r\n\tgantt.event(document, \"webkitfullscreenchange\", onFullScreenChange);\r\n\tgantt.event(document, \"mozfullscreenchange\", onFullScreenChange);\r\n\tgantt.event(document, \"MSFullscreenChange\", onFullScreenChange);\r\n\t// For IE on Win 10\r\n\tgantt.event(document, \"fullscreenChange\", onFullScreenChange);\r\n\tgantt.event(document, \"fullscreenchange\", onFullScreenChange);\r\n}\r\n\r\nlet expandGantt = false;\r\nfunction onFullScreenChange() {\r\n\tif (!gantt.$container) {\r\n\t\t// do nothing if gantt is not yet initialized\r\n\t\treturn;\r\n\t}\r\n\tlet event: \"onExpand\" | \"onCollapse\";\r\n\tconst isBodyExpanded = isExpanded();\r\n\r\n\tif (isBodyExpanded) {\r\n\t\tif (expandGantt) {\r\n\t\t\tevent = \"onExpand\";\r\n\t\t\tsetFullScreenSizes();\r\n\t\t}\r\n\t} else if (expandGantt) {\r\n\t\texpandGantt = false;\r\n\t\tevent = \"onCollapse\";\r\n\t\trestoreSizes();\r\n\t}\r\n\tsetTimeout(() => {\r\n\t\tgantt.render();\r\n\t});\r\n\tsetTimeout(() => {\r\n\t\tgantt.callEvent(event, [gantt.ext.fullscreen.getFullscreenElement()]);\r\n\t});\r\n}\r\n\r\nfunction cantFullscreen() {\r\n\tif (!gantt.$container) { // check is gantt initialized or not\r\n\t\treturn true;\r\n\t}\r\n\tif (!gantt.ext.fullscreen.getFullscreenElement()) {\r\n\t\treturn true;\r\n\t}\r\n\tif (!isFullscreenAvailable()) {\r\n\t\t// eslint-disable-next-line no-console\r\n\t\tconst method = (console as IConsole).warning || console.log;\r\n\t\tmethod(\"The `fullscreen` feature not being allowed, or full-screen mode not being supported\");\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\ngantt.ext.fullscreen = {\r\n\texpand(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (isExpanded()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeExpand\", [this.getFullscreenElement()])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\texpandGantt = true;\r\n\r\n\t\t// we switch body to fullscreen and then expand fullscreen element to viewport\r\n\t\t// we do it to correct display common elements: lightboxes, tooltip etc.\r\n\t\tconst element = document.body as IBody;\r\n\t\tconst requestArguments = element.webkitRequestFullscreen ?\r\n\t\t\t[(Element as unknown as IElement).ALLOW_KEYBOARD_INPUT] : [];\r\n\r\n\t\tconst requestFullscreen = element.msRequestFullscreen ||\r\n\t\t\telement.mozRequestFullScreen ||\r\n\t\t\telement.webkitRequestFullscreen ||\r\n\t\t\telement.requestFullscreen;\r\n\r\n\t\tif (requestFullscreen) {\r\n\t\t\trequestFullscreen.apply(element, requestArguments);\r\n\t\t}\r\n\t},\r\n\tcollapse(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!isExpanded()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeCollapse\", [this.getFullscreenElement()])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst requestExitFullscreen = (document as IDocument).msExitFullscreen ||\r\n\t\t\t(document as IDocument).mozCancelFullScreen ||\r\n\t\t\t(document as IDocument).webkitExitFullscreen ||\r\n\t\t\t(document as IDocument).exitFullscreen;\r\n\r\n\t\tif (requestExitFullscreen) {\r\n\t\t\trequestExitFullscreen.apply(document);\r\n\t\t}\r\n\t},\r\n\ttoggle(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!isExpanded()) {\r\n\t\t\tthis.expand();\r\n\t\t} else {\r\n\t\t\tthis.collapse();\r\n\t\t}\r\n\r\n\t},\r\n\tgetFullscreenElement(): HTMLElement {\r\n\t\treturn gantt.$root;\r\n\t}\r\n};\r\n\r\ngantt.expand = function() {\r\n\tgantt.ext.fullscreen.expand();\r\n};\r\n\r\ngantt.collapse = function(){\r\n\tgantt.ext.fullscreen.collapse();\r\n};\r\n\r\ngantt.attachEvent(\"onGanttReady\", addDOMEvents);\r\n\r\n}","import eventable from \"../utils/eventable\";\r\nimport * as domHelpers from \"../core/ui/utils/dom_helpers\";\r\n\r\nimport keyboard_shortcuts from \"./keyboard_navigation/common/keyboard_shortcuts\";\r\nimport eventhandler from \"./keyboard_navigation/common/eventhandler\";\r\nimport trap_modal_focus from \"./keyboard_navigation/common/trap_modal_focus\";\r\nimport gantt_node from \"./keyboard_navigation/elements/gantt_node\";\r\nimport nav_node from \"./keyboard_navigation/elements/nav_node\";\r\nimport header_cell from \"./keyboard_navigation/elements/header_cell\";\r\nimport task_row from \"./keyboard_navigation/elements/task_row\";\r\nimport task_cell from \"./keyboard_navigation/elements/task_cell\";\r\nimport modals from \"./keyboard_navigation/modals\";\r\nimport core from \"./keyboard_navigation/core\";\r\n\r\n\r\n\r\nexport default function(gantt){\r\n\tfunction setupKeyNav(gantt){\r\n\t\tgantt.config.keyboard_navigation = true;\r\n\t\tgantt.config.keyboard_navigation_cells = false;\r\n\r\n\t\tgantt.$keyboardNavigation = {};\r\n\r\n\t\tgantt._compose = function(){\r\n\t\t\tvar parts = Array.prototype.slice.call(arguments, 0);\r\n\t\t\tvar res = {};\r\n\t\t\tfor(var i = 0; i < parts.length; i++){\r\n\t\t\t\tvar obj = parts[i];\r\n\t\t\t\tif(typeof obj == \"function\"){\r\n\t\t\t\t\tobj = new obj();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor(var p in obj){\r\n\t\t\t\t\tres[p] = obj[p];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t};\r\n\r\n\t\tkeyboard_shortcuts(gantt);\r\n\t\teventhandler(gantt);\r\n\t\ttrap_modal_focus(gantt);\r\n\t\tgantt_node(gantt);\r\n\t\tnav_node(gantt);\r\n\t\theader_cell(gantt);\r\n\t\ttask_row(gantt);\r\n\t\ttask_cell(gantt);\r\n\t\tmodals(gantt);\r\n\t\tcore(gantt);\r\n\r\n\r\n\t\t(function(){\r\n\t\t\tvar dispatcher = gantt.$keyboardNavigation.dispatcher;\r\n\r\n\t\t\tdispatcher.isTaskFocused = function(id){\r\n\t\t\t\tvar node = dispatcher.activeNode;\r\n\t\t\t\tif(node instanceof gantt.$keyboardNavigation.TaskRow || node instanceof gantt.$keyboardNavigation.TaskCell) {\r\n\t\t\t\t\tif (node.taskId == id) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\r\n\t\t\tvar keyDownHandler = function(e){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return;\r\n\t\t\t\t// GS-734 & GS-1078: we don't need keyboard navigation inside inline editors\r\n\t\t\t\tif(!gantt.config.keyboard_navigation_cells && isInlineEditorCell(e)) return;\r\n\r\n\t\t\t\tif (isNoKeyboardNavigationElement(e) || isLightboxElement(e)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dispatcher.keyDownHandler(e);\r\n\t\t\t};\r\n\r\n\t\t\tvar focusHandler = function(e){\r\n\t\t\t\tif(dispatcher.$preventDefault){\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tgantt.$container.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t// do nothing if key-nav focus is already planned\r\n\t\t\t\t} else if (!dispatcher.awaitsFocus()) {\r\n\t\t\t\t\t// otherwise - re-focus key-nav element on gantt focus\r\n\t\t\t\t\tdispatcher.focusGlobalNode();\r\n\t\t\t\t}\r\n\r\n\t\t\t};\r\n\r\n\t\t\tvar reFocusActiveNode = function(){\r\n\t\t\t\tif(!dispatcher.isEnabled())\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tconst outsideGantt = !domHelpers.isChildOf(document.activeElement, gantt.$container) && document.activeElement.localName != \"body\";\r\n\t\t\t\tvar activeNode = dispatcher.getActiveNode();\r\n\t\t\t\tif(!activeNode || outsideGantt)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar domElement = activeNode.getNode();\r\n\t\t\t\tvar top, left;\r\n\t\t\t\tif(domElement && domElement.parentNode){\r\n\t\t\t\t\ttop = domElement.parentNode.scrollTop;\r\n\t\t\t\t\tleft = domElement.parentNode.scrollLeft;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tactiveNode.focus(true);\r\n\r\n\t\t\t\tif(domElement && domElement.parentNode){\r\n\t\t\t\t\tdomElement.parentNode.scrollTop = top;\r\n\t\t\t\t\tdomElement.parentNode.scrollLeft = left;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\r\n\t\t\tgantt.attachEvent(\"onDataRender\", function(){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return;\r\n\t\t\t\treFocusActiveNode();\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onGanttRender\", function(){\r\n\t\t\t\tgantt.eventRemove(gantt.$root, \"keydown\", keyDownHandler);\r\n\t\t\t\tgantt.eventRemove(gantt.$container, \"focus\", focusHandler);\r\n\t\t\t\tgantt.eventRemove(gantt.$container, \"mousedown\", mousedownHandler);\r\n\r\n\t\t\t\tif(gantt.config.keyboard_navigation){\r\n\r\n\t\t\t\t\tgantt.event(gantt.$root, \"keydown\", keyDownHandler);\r\n\t\t\t\t\tgantt.event(gantt.$container, \"focus\", focusHandler);\r\n\t\t\t\t\tgantt.event(gantt.$container, \"mousedown\", mousedownHandler);\r\n\t\t\t\t\tgantt.$container.setAttribute(\"tabindex\", \"0\");\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tgantt.$container.removeAttribute(\"tabindex\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfunction getTaskNodeConstructor(){\r\n\t\t\t\tif (gantt.config.keyboard_navigation_cells) {\r\n\t\t\t\t\treturn gantt.$keyboardNavigation.TaskCell;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gantt.$keyboardNavigation.TaskRow;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction isInlineEditorCell(e){\r\n\t\t\t\treturn !!domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\");\r\n\t\t\t}\r\n\t\t\t// GS-1445. Cancel keyboard navigation within custom elements\r\n\t\t\tfunction isNoKeyboardNavigationElement(e){\r\n\t\t\t\treturn !!domHelpers.closest(e.target, \".no_keyboard_navigation\");\r\n\t\t\t}\r\n\t\t\tfunction isLightboxElement(e){\r\n\t\t\t\treturn !!domHelpers.closest(e.target, \".gantt_cal_light\");\r\n\t\t\t}\r\n\r\n\t\t\tfunction mousedownHandler(e){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return true;\r\n\t\t\t\t// GS-734 & GS-1078: we don't need keyboard navigation inside inline editors\r\n\t\t\t\tif(!gantt.config.keyboard_navigation_cells && isInlineEditorCell(e)) return true;\r\n\r\n\t\t\t\tif (isNoKeyboardNavigationElement(e)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar focusNode;\r\n\t\t\t\tvar locateTask = dispatcher.fromDomElement(e);\r\n\t\t\t\tif(locateTask){\r\n\t\t\t\t\t//var node = getTaskNodeConstructor();\r\n\t\t\t\t\tif(dispatcher.activeNode instanceof gantt.$keyboardNavigation.TaskCell && domHelpers.isChildOf(e.target, gantt.$task)){\r\n\t\t\t\t\t\tlocateTask = new gantt.$keyboardNavigation.TaskCell(locateTask.taskId, dispatcher.activeNode.columnIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfocusNode = locateTask;\r\n\t\t\t\t}\r\n\t\t\t\tif (focusNode) {\r\n\t\t\t\t\tif (!dispatcher.isEnabled()) {\r\n\t\t\t\t\t\tdispatcher.activeNode = focusNode;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatcher.delay(function () {\r\n\t\t\t\t\t\t\tdispatcher.setActiveNode(focusNode);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// empty click should drop focus from gantt, insert of reselecting default node\r\n\t\t\t\t\tdispatcher.$preventDefault = true;\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tdispatcher.$preventDefault = false;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar onReady = gantt.attachEvent(\"onGanttReady\", function(){\r\n\t\t\t\t// restore focus on repainted tasks\r\n\t\t\t\tgantt.detachEvent(onReady);\r\n\r\n\t\t\t\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(id){\r\n\t\t\t\t\tif (gantt.config.keyboard_navigation && dispatcher.isEnabled()) {\r\n\t\t\t\t\t\tconst currentNode = dispatcher.getActiveNode();\r\n\t\t\t\t\t\tconst grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tconst top = grid.getItemTop(id);\r\n\t\t\t\t\t\tconst gridDataTopScroll = grid.$grid_data.scrollTop;\r\n\t\t\t\t\t\tconst gridDataBottomScroll = gridDataTopScroll + grid.$grid_data.getBoundingClientRect().height;\r\n\t\t\t\t\t\tif(currentNode && currentNode.taskId == id){\r\n\t\t\t\t\t\t\t// GS-2539: Don't refocus the node if it is selected and outside the visible range in the grid\r\n\t\t\t\t\t\t\tif(gridDataTopScroll <= top && gridDataBottomScroll >= top){\r\n\t\t\t\t\t\t\t\treFocusActiveNode();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(gantt._smart_render){\r\n\t\t\t\t\tvar updateRender = gantt._smart_render._redrawTasks;\r\n\t\t\t\t\tgantt._smart_render._redrawTasks = function(renderers, items){\r\n\t\t\t\t\t\tif(gantt.config.keyboard_navigation && dispatcher.isEnabled()){\r\n\t\t\t\t\t\t\tvar currentNode = dispatcher.getActiveNode();\r\n\t\t\t\t\t\t\tif(currentNode && currentNode.taskId !== undefined){\r\n\t\t\t\t\t\t\t\tvar focusedItemVisible = false;\r\n\t\t\t\t\t\t\t\tfor(var i = 0; i < items.length; i++){\r\n\t\t\t\t\t\t\t\t\tif(items[i].id == currentNode.taskId && items[i].start_date){\r\n\t\t\t\t\t\t\t\t\t\tfocusedItemVisible = true;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif(!focusedItemVisible){\r\n\t\t\t\t\t\t\t\t\titems.push(gantt.getTask(currentNode.taskId));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar res = updateRender.apply(this, arguments);\r\n\r\n\t\t\t\t\t\treturn res;\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tlet createdTaskId = null;\r\n\t\t\tlet keepFocusOnNewTask = false;\r\n\t\t\tgantt.attachEvent(\"onTaskCreated\", function (task) {\r\n\t\t\t\tcreatedTaskId = task.id;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onAfterTaskAdd\", function(id,item){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return true;\r\n\t\t\t\tif(dispatcher.isEnabled()){\r\n\r\n\t\t\t\t\t// GS-1394. After adding a new task, the focus shouldn't change to the placeholder task\r\n\t\t\t\t\tif (id == createdTaskId) {\r\n\t\t\t\t\t\tkeepFocusOnNewTask = true;\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tkeepFocusOnNewTask = false;\r\n\t\t\t\t\t\t\tcreatedTaskId = null;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (keepFocusOnNewTask && item.type == gantt.config.types.placeholder) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar columnIndex = 0;\r\n\t\t\t\t\tvar node = dispatcher.activeNode;\r\n\t\t\t\t\tif(node instanceof gantt.$keyboardNavigation.TaskCell){\r\n\t\t\t\t\t\tcolumnIndex = node.columnIndex;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar nodeConstructor = getTaskNodeConstructor();\r\n\r\n\t\t\t\t\tif (item.type == gantt.config.types.placeholder && gantt.config.placeholder_task.focusOnCreate === false) {\r\n\t\t\t\t\t\t// do not focus on the placeholder task\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdispatcher.setActiveNode(new nodeConstructor(id, columnIndex));\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onTaskIdChange\", function(oldId, newId){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return true;\r\n\r\n\t\t\t\tvar node = dispatcher.activeNode;\r\n\t\t\t\tif(dispatcher.isTaskFocused(oldId)){\r\n\t\t\t\t\tnode.taskId = newId;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tvar interval = setInterval(function(){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation) return;\r\n\t\t\t\tif(!dispatcher.isEnabled()){\r\n\t\t\t\t\tdispatcher.enable();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}, 500);\r\n\r\n\t\t\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\t\t\tclearInterval(interval);\r\n\t\t\t});\r\n\r\n\t\t\tfunction getScopeName(obj){\r\n\t\t\t\tif(obj instanceof gantt.$keyboardNavigation.GanttNode){\r\n\t\t\t\t\treturn \"gantt\";\r\n\t\t\t\t}else if(obj instanceof gantt.$keyboardNavigation.HeaderCell){\r\n\t\t\t\t\treturn \"headerCell\";\r\n\t\t\t\t}else if(obj instanceof gantt.$keyboardNavigation.TaskRow){\r\n\t\t\t\t\treturn \"taskRow\";\r\n\t\t\t\t}else if(obj instanceof gantt.$keyboardNavigation.TaskCell){\r\n\t\t\t\t\treturn \"taskCell\";\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tfunction getScope(mode){\r\n\t\t\t\tvar scopes = {\r\n\t\t\t\t\t\"gantt\":gantt.$keyboardNavigation.GanttNode,\r\n\t\t\t\t\t\"headerCell\": gantt.$keyboardNavigation.HeaderCell,\r\n\t\t\t\t\t\"taskRow\": gantt.$keyboardNavigation.TaskRow,\r\n\t\t\t\t\t\"taskCell\": gantt.$keyboardNavigation.TaskCell\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn scopes[mode] || scopes.gantt;\r\n\t\t\t}\r\n\r\n\t\t\tfunction findVisibleColumnIndex(columnName) {\r\n\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\tfor (var i = 0; i < columns.length; i++){\r\n\t\t\t\t\tif(columns[i].name == columnName){\r\n\t\t\t\t\t\treturn i;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\tvar keyNavFacade = {};\r\n\t\t\teventable(keyNavFacade);\r\n\t\t\tgantt.mixin(keyNavFacade, {\r\n\t\t\t\taddShortcut: function(shortcut, handler, scope){\r\n\t\t\t\t\tvar scopeObject = getScope(scope);\r\n\t\t\t\t\tif(scopeObject){\r\n\t\t\t\t\t\tscopeObject.prototype.bind(shortcut, handler);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tgetShortcutHandler: function(shortcut, scope){\r\n\t\t\t\t\tvar commands = gantt.$keyboardNavigation.shortcuts.parse(shortcut);\r\n\t\t\t\t\tif(commands.length){\r\n\t\t\t\t\t\treturn keyNavFacade.getCommandHandler(commands[0], scope);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tgetCommandHandler: function(command, scope){\r\n\t\t\t\t\tvar scopeObject = getScope(scope);\r\n\t\t\t\t\tif(scopeObject){\r\n\t\t\t\t\t\tif(command){\r\n\t\t\t\t\t\t\treturn scopeObject.prototype.findHandler(command);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tremoveShortcut: function(shortcut, scope){\r\n\t\t\t\t\tvar scopeObject = getScope(scope);\r\n\t\t\t\t\tif(scopeObject){\r\n\t\t\t\t\t\tscopeObject.prototype.unbind(shortcut);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tfocus: function(config){\r\n\t\t\t\t\tvar type = config ? config.type : null;\r\n\t\t\t\t\tvar constructor = getScope(type);\r\n\t\t\t\t\tvar node;\r\n\t\t\t\t\tswitch (type){\r\n\t\t\t\t\t\tcase \"taskCell\":\r\n\t\t\t\t\t\t\tnode = new constructor(config.id, findVisibleColumnIndex(config.column));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"taskRow\":\r\n\t\t\t\t\t\t\tnode = new constructor(config.id);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"headerCell\":\r\n\t\t\t\t\t\t\tnode = new constructor(findVisibleColumnIndex(config.column));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdispatcher.delay(function(){\r\n\t\t\t\t\t\tif(node){\r\n\t\t\t\t\t\t\tdispatcher.setActiveNode(node);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tdispatcher.enable();\r\n\t\t\t\t\t\t\tif(!dispatcher.getActiveNode()){\r\n\r\n\t\t\t\t\t\t\t\tdispatcher.setDefaultNode();\r\n\t\t\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\t\t\tif(!dispatcher.awaitsFocus()){\r\n\t\t\t\t\t\t\t\t\tdispatcher.enable();\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\t\t\t\tgetActiveNode: function(){\r\n\t\t\t\t\tif(dispatcher.isEnabled()){\r\n\t\t\t\t\t\tvar node = dispatcher.getActiveNode();\r\n\t\t\t\t\t\tvar scope = getScopeName(node);\r\n\t\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\t\tswitch (scope){\r\n\t\t\t\t\t\t\tcase \"taskCell\":\r\n\t\t\t\t\t\t\t\treturn {type:\"taskCell\", id:node.taskId, column:columns[node.columnIndex].name};\r\n\t\t\t\t\t\t\tcase \"taskRow\":\r\n\t\t\t\t\t\t\t\treturn {type:\"taskRow\", id:node.taskId};\r\n\t\t\t\t\t\t\tcase \"headerCell\":\r\n\t\t\t\t\t\t\t\treturn {type:\"headerCell\", column:columns[node.index].name};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgantt.$keyboardNavigation.facade = keyNavFacade;\r\n\r\n\t\t\tgantt.ext.keyboardNavigation = keyNavFacade;\r\n\t\t\tgantt.focus = function(){\r\n\t\t\t\tkeyNavFacade.focus();\r\n\t\t\t};\r\n\t\t\tgantt.addShortcut = keyNavFacade.addShortcut;\r\n\t\t\tgantt.getShortcutHandler = keyNavFacade.getShortcutHandler;\r\n\t\t\tgantt.removeShortcut = keyNavFacade.removeShortcut;\r\n\t\t})();\r\n\r\n\r\n\t}\r\n\r\n\tsetupKeyNav(gantt);\r\n\r\n\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.shortcuts = {\r\n\t\tcreateCommand: function () {\r\n\t\t\treturn {\r\n\t\t\t\tmodifiers: {\r\n\t\t\t\t\t\"shift\": false,\r\n\t\t\t\t\t\"alt\": false,\r\n\t\t\t\t\t\"ctrl\": false,\r\n\t\t\t\t\t\"meta\": false\r\n\t\t\t\t},\r\n\t\t\t\tkeyCode: null\r\n\t\t\t};\r\n\t\t},\r\n\t\tparse: function (shortcut) {\r\n\t\t\tvar commands = [];\r\n\r\n\t\t\tvar expr = this.getExpressions(this.trim(shortcut));\r\n\t\t\tfor (var i = 0; i < expr.length; i++) {\r\n\t\t\t\tvar words = this.getWords(expr[i]);\r\n\r\n\t\t\t\tvar command = this.createCommand();\r\n\r\n\t\t\t\tfor (var j = 0; j < words.length; j++) {\r\n\t\t\t\t\tif (this.commandKeys[words[j]]) {\r\n\t\t\t\t\t\tcommand.modifiers[words[j]] = true;\r\n\t\t\t\t\t} else if (this.specialKeys[words[j]]) {\r\n\t\t\t\t\t\tcommand.keyCode = this.specialKeys[words[j]];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcommand.keyCode = words[j].charCodeAt(0);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcommands.push(command);\r\n\t\t\t}\r\n\t\t\treturn commands;\r\n\t\t},\r\n\r\n\t\tgetCommandFromEvent: function (domEvent) {\r\n\t\t\tvar command = this.createCommand();\r\n\t\t\tcommand.modifiers.shift = !!domEvent.shiftKey;\r\n\t\t\tcommand.modifiers.alt = !!domEvent.altKey;\r\n\t\t\tcommand.modifiers.ctrl = !!domEvent.ctrlKey;\r\n\t\t\tcommand.modifiers.meta = !!domEvent.metaKey;\r\n\t\t\tcommand.keyCode = domEvent.which || domEvent.keyCode;\r\n\r\n\t\t\tif(command.keyCode >= 96 && command.keyCode <= 105){\r\n\t\t\t\t// numpad keys 96-105 -> 48-57\r\n\t\t\t\tcommand.keyCode -= 48;//convert numpad number code to regular number code\r\n\t\t\t}\r\n\r\n\t\t\tvar printableKey = String.fromCharCode(command.keyCode);\r\n\t\t\tif (printableKey) {\r\n\t\t\t\tcommand.keyCode = printableKey.toLowerCase().charCodeAt(0);\r\n\t\t\t}\r\n\t\t\treturn command;\r\n\t\t},\r\n\r\n\t\tgetHashFromEvent: function (domEvent) {\r\n\t\t\treturn this.getHash(this.getCommandFromEvent(domEvent));\r\n\t\t},\r\n\r\n\t\tgetHash: function (command) {\r\n\t\t\tvar parts = [];\r\n\t\t\tfor (var i in command.modifiers) {\r\n\t\t\t\tif (command.modifiers[i]) {\r\n\t\t\t\t\tparts.push(i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tparts.push(command.keyCode);\r\n\r\n\t\t\treturn parts.join(this.junctionChar);\r\n\t\t},\r\n\r\n\t\tgetExpressions: function (shortcut) {\r\n\t\t\treturn shortcut.split(this.junctionChar);\r\n\t\t},\r\n\t\tgetWords: function (term) {\r\n\t\t\treturn term.split(this.combinationChar);\r\n\t\t},\r\n\t\ttrim: function (shortcut) {\r\n\t\t\treturn shortcut.replace(/\\s/g, \"\");\r\n\t\t},\r\n\t\tjunctionChar: \",\",\r\n\t\tcombinationChar: \"+\",\r\n\t\tcommandKeys: {\r\n\t\t\t\"shift\": 16,\r\n\t\t\t\"alt\": 18,\r\n\t\t\t\"ctrl\": 17,\r\n\t\t\t\"meta\": true\r\n\t\t},\r\n\t\tspecialKeys: {\r\n\t\t\t\"backspace\": 8,\r\n\t\t\t\"tab\": 9,\r\n\t\t\t\"enter\": 13,\r\n\t\t\t\"esc\": 27,\r\n\t\t\t\"space\": 32,\r\n\t\t\t\"up\": 38,\r\n\t\t\t\"down\": 40,\r\n\t\t\t\"left\": 37,\r\n\t\t\t\"right\": 39,\r\n\t\t\t\"home\": 36,\r\n\t\t\t\"end\": 35,\r\n\t\t\t\"pageup\": 33,\r\n\t\t\t\"pagedown\": 34,\r\n\t\t\t\"delete\": 46,\r\n\t\t\t\"insert\": 45,\r\n\t\t\t\"plus\": 107,\r\n\t\t\t\"f1\": 112,\r\n\t\t\t\"f2\": 113,\r\n\t\t\t\"f3\": 114,\r\n\t\t\t\"f4\": 115,\r\n\t\t\t\"f5\": 116,\r\n\t\t\t\"f6\": 117,\r\n\t\t\t\"f7\": 118,\r\n\t\t\t\"f8\": 119,\r\n\t\t\t\"f9\": 120,\r\n\t\t\t\"f10\": 121,\r\n\t\t\t\"f11\": 122,\r\n\t\t\t\"f12\": 123\r\n\t\t}\r\n\t};\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.EventHandler = {\r\n\t\t_handlers: null,\r\n\t\tfindHandler: function (command) {\r\n\t\t\tif (!this._handlers) this._handlers = {};\r\n\t\t\tvar shortcuts = gantt.$keyboardNavigation.shortcuts;\r\n\t\t\tvar hash = shortcuts.getHash(command);\r\n\r\n\t\t\treturn this._handlers[hash];\r\n\t\t},\r\n\r\n\t\tdoAction: function (command, e) {\r\n\t\t\tvar handler = this.findHandler(command);\r\n\t\t\tif (handler) {\r\n\t\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\r\n\t\t\t\tif(eventFacade.callEvent(\"onBeforeAction\", [command, e]) === false){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\thandler.call(this, e);\r\n\r\n\t\t\t\tif (e.preventDefault) e.preventDefault();\r\n\t\t\t\telse e.returnValue = false;\r\n\r\n\t\t\t}\r\n\t\t},\r\n\t\tbind: function (shortcut, handler) {\r\n\t\t\tif (!this._handlers) this._handlers = {};\r\n\r\n\t\t\tvar shortcuts = gantt.$keyboardNavigation.shortcuts;\r\n\r\n\t\t\tvar commands = shortcuts.parse(shortcut);\r\n\t\t\tfor (var i = 0; i < commands.length; i++) {\r\n\t\t\t\tthis._handlers[shortcuts.getHash(commands[i])] = handler;\r\n\t\t\t}\r\n\t\t},\r\n\t\tunbind: function (shortcut) {\r\n\t\t\tvar shortcuts = gantt.$keyboardNavigation.shortcuts;\r\n\r\n\t\t\tvar commands = shortcuts.parse(shortcut);\r\n\t\t\tfor (var i = 0; i < commands.length; i++) {\r\n\t\t\t\tif (this._handlers[shortcuts.getHash(commands[i])]) {\r\n\t\t\t\t\tdelete this._handlers[shortcuts.getHash(commands[i])];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbindAll: function (map) {\r\n\t\t\tfor (var i in map) {\r\n\t\t\t\tthis.bind(i, map[i]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tinitKeys: function () {\r\n\t\t\tif (!this._handlers)\r\n\t\t\t\tthis._handlers = {};\r\n\t\t\tif (this.keys) {\r\n\t\t\t\tthis.bindAll(this.keys);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n};","import * as domHelpers from \"../../../core/ui/utils/dom_helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\t(function () {\r\n\t\t\r\n\t\tgantt.$keyboardNavigation.getFocusableNodes = domHelpers.getFocusableNodes;\r\n\r\n\t\tgantt.$keyboardNavigation.trapFocus = function trapFocus(root, e) {\r\n\t\t\tif (e.keyCode != 9) return false;\r\n\r\n\t\t\tvar focusable = gantt.$keyboardNavigation.getFocusableNodes(root);\r\n\t\t\tvar currentFocus = domHelpers.getActiveElement();\r\n\t\t\tvar currentIndex = -1;\r\n\t\t\tfor (var i = 0; i < focusable.length; i++) {\r\n\t\t\t\tif (focusable[i] == currentFocus) {\r\n\t\t\t\t\tcurrentIndex = i;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (e.shiftKey) {\r\n\t\t\t\t// back tab\r\n\t\t\t\tif (currentIndex <= 0) {\r\n\t\t\t\t\t// go to the last element if we focused on the first\r\n\t\t\t\t\tvar lastItem = focusable[focusable.length - 1];\r\n\t\t\t\t\tif (lastItem) {\r\n\t\t\t\t\t\tlastItem.focus();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// forward tab\r\n\t\t\t\tif (currentIndex >= focusable.length - 1) {\r\n\t\t\t\t\t// forward tab from last element should go back to the first element\r\n\t\t\t\t\tvar firstItem = focusable[0];\r\n\t\t\t\t\tif (firstItem) {\r\n\t\t\t\t\t\tfirstItem.focus();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t};\r\n\t})();\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.GanttNode = function () {\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.GanttNode.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.EventHandler,\r\n\t\t{\r\n\r\n\t\t\tfocus: function () {\r\n\t\t\t\tgantt.focus();\r\n\t\t\t},\r\n\r\n\t\t\tblur: function () {\r\n\r\n\t\t\t},\r\n\r\n\t\t\tisEnabled: function () {\r\n\t\t\t\treturn gantt.$container.hasAttribute(\"tabindex\");\r\n\t\t\t},\r\n\r\n\t\t\tscrollHorizontal: function scrollHorizontal(dir) {\r\n\t\t\t\tvar date = gantt.dateFromPos(gantt.getScrollState().x);\r\n\t\t\t\tvar scale = gantt.getScale();\r\n\t\t\t\tvar step = dir < 0 ? -scale.step : scale.step;\r\n\t\t\t\tdate = gantt.date.add(date, step, scale.unit);\r\n\t\t\t\tgantt.scrollTo(gantt.posFromDate(date));\r\n\t\t\t},\r\n\r\n\t\t\tscrollVertical: function scrollVertical(dir) {\r\n\t\t\t\tvar top = gantt.getScrollState().y;\r\n\t\t\t\tvar step = gantt.config.row_height;\r\n\t\t\t\tgantt.scrollTo(null, top + (dir < 0 ? -1 : 1) * step);\r\n\t\t\t},\r\n\r\n\t\t\tkeys: {\r\n\t\t\t\t\"alt+left\": function (e) {\r\n\t\t\t\t\tthis.scrollHorizontal(-1);\r\n\t\t\t\t},\r\n\t\t\t\t\"alt+right\": function (e) {\r\n\t\t\t\t\tthis.scrollHorizontal(1);\r\n\t\t\t\t},\r\n\t\t\t\t\"alt+up\": function (e) {\r\n\t\t\t\t\tthis.scrollVertical(-1);\r\n\t\t\t\t},\r\n\t\t\t\t\"alt+down\": function (e) {\r\n\t\t\t\t\tthis.scrollVertical(1);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// undo\r\n\t\t\t\t\"ctrl+z\": function () {\r\n\t\t\t\t\tif (gantt.undo) gantt.undo();\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// redo\r\n\t\t\t\t\"ctrl+r\": function () {\r\n\t\t\t\t\tif (gantt.redo) gantt.redo();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n\tgantt.$keyboardNavigation.GanttNode.prototype.bindAll(gantt.$keyboardNavigation.GanttNode.prototype.keys);\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.KeyNavNode = function () {\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.KeyNavNode.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.EventHandler,\r\n\t\t{\r\n\t\t\tisValid: function () {\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\r\n\t\t\tmoveTo: function (element) {\r\n\t\t\t\tgantt.$keyboardNavigation.dispatcher.setActiveNode(element);\r\n\t\t\t},\r\n\r\n\t\t\tcompareTo: function (b) {\r\n\t\t\t\t// good enough comparison of two random objects\r\n\t\t\t\tif (!b) return false;\r\n\t\t\t\tfor (var i in this) {\r\n\t\t\t\t\tif (!!this[i] != !!b[i]) return false;\r\n\r\n\t\t\t\t\tvar canStringifyThis = !!(this[i] && this[i].toString);\r\n\t\t\t\t\tvar canStringifyThat = !!(b[i] && b[i].toString);\r\n\t\t\t\t\tif (canStringifyThat != canStringifyThis) return false;\r\n\t\t\t\t\tif (!(canStringifyThat && canStringifyThis)) {\r\n\t\t\t\t\t\tif (b[i] != this[i]) return false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (b[i].toString() != this[i].toString())\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t},\r\n\t\t\tfocus: function () {\r\n\t\t\t\tvar node = this.getNode();\r\n\t\t\t\tif(!node)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\r\n\t\t\t\tif(eventFacade.callEvent(\"onBeforeFocus\", [node]) === false){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (node) {\r\n\t\t\t\t\tnode.setAttribute(\"tabindex\", \"-1\");\r\n\t\t\t\t\tif(!node.$eventAttached){\r\n\t\t\t\t\t\tnode.$eventAttached = true;\r\n\t\t\t\t\t\tgantt.event(node, \"focus\",function(e){\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//node.className += \" gantt_focused\";\r\n\t\t\t\t\tif (gantt.utils.dom.isChildOf(document.activeElement, node)){\r\n\t\t\t\t\t\tnode = document.activeElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (node.focus) node.focus();\r\n\r\n\t\t\t\t\teventFacade.callEvent(\"onFocus\", [this.getNode()]);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\tblur: function () {\r\n\t\t\t\tvar node = this.getNode();\r\n\t\t\t\tif (node) {\r\n\t\t\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\t\t\t\t\teventFacade.callEvent(\"onBlur\", [node]);\r\n\t\t\t\t\tnode.setAttribute(\"tabindex\", \"-1\");\r\n\t\t\t\t\t//node.className = (node.className || \"\").replace(/ ?gantt_focused/g, \"\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n};","import * as domHelpers from \"../../../core/ui/utils/dom_helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.HeaderCell = function (index) {\r\n\t\tthis.index = index || 0;\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.HeaderCell.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.KeyNavNode,\r\n\t\t{\r\n\t\t\t_handlers: null,\r\n\r\n\t\t\tisValid: function () {\r\n\t\t\t\tif (!gantt.config.show_grid) {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount())\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn !!gantt.getGridColumns()[this.index] || !gantt.getVisibleTaskCount();\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\t\t\t\tif (!gantt.config.show_grid) {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\tvar visibleColumns = gantt.getGridColumns();\r\n\t\t\t\tvar index = this.index;\r\n\t\t\t\twhile (index >= 0) {\r\n\t\t\t\t\tif (visibleColumns[index])\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tindex--;\r\n\t\t\t\t}\r\n\t\t\t\tif (visibleColumns[index]) {\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.HeaderCell(index);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tfromDomElement: function(el){\r\n\t\t\t\tvar cellElement = domHelpers.locateClassName(el, \"gantt_grid_head_cell\");\r\n\t\t\t\tif(cellElement){\r\n\t\t\t\t\tvar index = 0;\r\n\t\t\t\t\twhile(cellElement && cellElement.previousSibling){\r\n\t\t\t\t\t\tcellElement = cellElement.previousSibling;\r\n\t\t\t\t\t\tindex += 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.HeaderCell(index);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t\tvar cells = gantt.$grid_scale.childNodes;\r\n\t\t\t\treturn cells[this.index];\r\n\t\t\t},\r\n\r\n\r\n\t\t\tkeys: {\r\n\r\n\t\t\t\t\"left\": function () {\r\n\t\t\t\t\tif (this.index > 0) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(this.index - 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"right\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tif (this.index < columns.length - 1) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(this.index + 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"down\": function () {\r\n\t\t\t\t\tvar taskRow;\r\n\t\t\t\t\tvar rootLevel = gantt.getChildren(gantt.config.root_id);\r\n\t\t\t\t\tif (gantt.isTaskExists(rootLevel[0])) {\r\n\t\t\t\t\t\ttaskRow = rootLevel[0];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (taskRow) {\r\n\t\t\t\t\t\tif (gantt.config.keyboard_navigation_cells) {\r\n\t\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(taskRow, this.index));\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(taskRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t\"end\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(columns.length - 1));\r\n\t\t\t\t},\r\n\t\t\t\t\"home\": function () {\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.HeaderCell(0));\r\n\t\t\t\t},\r\n\r\n\r\n\t\t\t\t// press header button\r\n\t\t\t\t\"enter, space\": function () {\r\n\t\t\t\t\tvar node = domHelpers.getActiveElement();\r\n\t\t\t\t\tnode.click();\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// add new task\r\n\t\t\t\t\"ctrl+enter\": function () {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.createTask({}, this.taskId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n\tgantt.$keyboardNavigation.HeaderCell.prototype.bindAll(gantt.$keyboardNavigation.HeaderCell.prototype.keys);\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.TaskRow = function (taskId) {\r\n\t\tif (!taskId) {\r\n\t\t\tvar rootLevel = gantt.getChildren(gantt.config.root_id);\r\n\t\t\tif (rootLevel[0]) {\r\n\t\t\t\ttaskId = rootLevel[0];\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.taskId = taskId;\r\n\t\tif (gantt.isTaskExists(this.taskId)) {\r\n\t\t\tthis.index = gantt.getTaskIndex(this.taskId);\r\n\t\t\tthis.globalIndex = gantt.getGlobalTaskIndex(this.taskId);\r\n\t\t\tthis.splitItem = !!gantt.getTask(this.taskId).$split_subtask;\r\n\t\t\tthis.parentId = gantt.getParent(this.taskId);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.TaskRow.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.KeyNavNode,\r\n\t\t{\r\n\t\t\t_handlers: null,\r\n\t\t\tisValid: function () {\r\n\t\t\t\treturn gantt.isTaskExists(this.taskId) && (gantt.getTaskIndex(this.taskId) > -1);\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\t\t\t\tif (!gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\tvar header = new gantt.$keyboardNavigation.HeaderCell();\r\n\t\t\t\t\tif (!header.isValid()) return null;\r\n\t\t\t\t\telse return header;\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif(!this.splitItem){\r\n\t\t\t\t\t\tvar nextIndex = -1;\r\n\t\t\t\t\t\t// GS-1393. When Gantt tries to restore the focus, it should rely on the global index\r\n\t\t\t\t\t\tif (gantt.getTaskByIndex(this.globalIndex - 1)) {\r\n\t\t\t\t\t\t\tnextIndex = this.globalIndex - 1;\r\n\t\t\t\t\t\t} else if (gantt.getTaskByIndex(this.globalIndex + 1)) {\r\n\t\t\t\t\t\t\tnextIndex = this.globalIndex + 1;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar globalIndex = this.globalIndex;\r\n\t\t\t\t\t\t\twhile (globalIndex >= 0) {\r\n\t\t\t\t\t\t\t\tif (gantt.getTaskByIndex(globalIndex)) {\r\n\t\t\t\t\t\t\t\t\tnextIndex = globalIndex;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tglobalIndex--;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (nextIndex > -1) {\r\n\t\t\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(nextIndex).id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else {\r\n\t\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow(this.parentId);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tfromDomElement: function(el){\r\n\t\t\t\tif(gantt.config.keyboard_navigation_cells){\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar taskId = gantt.locate(el);\r\n\t\t\t\tif(gantt.isTaskExists(taskId)){\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskRow(taskId);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t\tif (gantt.isTaskExists(this.taskId) && gantt.isTaskVisible(this.taskId)) {\r\n\t\t\t\t\tif (gantt.config.show_grid) {\r\n\t\t\t\t\t\treturn gantt.$grid.querySelector(\".gantt_row[\" + gantt.config.task_attribute + \"='\" + this.taskId + \"']\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn gantt.getTaskNode(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tfocus: function (keptFocus) {\r\n\t\t\t\tif(!keptFocus) {\r\n\t\t\t\t\tconst pos = gantt.getTaskPosition(gantt.getTask(this.taskId));\r\n\t\t\t\t\tconst height = gantt.getTaskHeight(this.taskId);\r\n\t\t\t\t\tconst scroll = gantt.getScrollState();\r\n\r\n\t\t\t\t\tlet viewWidth;\r\n\t\t\t\t\tif(gantt.$task){\r\n\t\t\t\t\t\tviewWidth = gantt.$task.offsetWidth;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tviewWidth = scroll.inner_width;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet viewHeight;\r\n\t\t\t\t\tif(gantt.$grid_data || gantt.$task_data){\r\n\t\t\t\t\t\tviewHeight = (gantt.$grid_data || gantt.$task_data).offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tviewHeight = scroll.inner_height;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (pos.top < scroll.y || pos.top + height > (scroll.y + viewHeight)) {\r\n\t\t\t\t\t\t// GS-2346: additional scrolling to be sure that the task will be in the required range\r\n\t\t\t\t\t\tgantt.scrollTo(null, pos.top - 20);\r\n\t\t\t\t\t} else if (gantt.config.scroll_on_click && gantt.config.show_chart) {\r\n\t\t\t\t\t\t// horizontal scroll activated\r\n\t\t\t\t\t\tif (pos.left > (scroll.x + viewWidth)) { // scroll forward to the start of the task\r\n\t\t\t\t\t\t\tgantt.scrollTo(pos.left - gantt.config.task_scroll_offset);\r\n\t\t\t\t\t\t} else if (pos.left + pos.width < scroll.x) { // scroll back to the end of the task\r\n\t\t\t\t\t\t\tgantt.scrollTo(pos.left + pos.width - gantt.config.task_scroll_offset);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.$keyboardNavigation.KeyNavNode.prototype.focus.apply(this, [keptFocus]);\r\n\r\n\t\t\t\t// GS-152 if there are scrollbars with custom names, change their scroll position\r\n\t\t\t\tscrollGrid();\r\n\r\n\t\t\t\tfunction scrollGrid() {\r\n\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\tvar scrollPositionX = parseInt(grid.$grid.scrollLeft);\r\n\t\t\t\t\tvar scrollPositionY = parseInt(grid.$grid_data.scrollTop);\r\n\r\n\t\t\t\t\tvar attachedScrollbarHorizontal = grid.$config.scrollX;\r\n\r\n\t\t\t\t\tif (attachedScrollbarHorizontal && grid.$config.scrollable) {\r\n\t\t\t\t\t\tvar scrollbarHorizontal = gantt.$ui.getView(attachedScrollbarHorizontal);\r\n\t\t\t\t\t\tif (scrollbarHorizontal) {\r\n\t\t\t\t\t\t\tscrollbarHorizontal.scrollTo(scrollPositionX, scrollPositionY);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar attachedScrollbarVertical = grid.$config.scrollY;\r\n\r\n\t\t\t\t\tif (attachedScrollbarVertical) {\r\n\t\t\t\t\t\tvar scrollbarVertical = gantt.$ui.getView(attachedScrollbarVertical);\r\n\t\t\t\t\t\tif (scrollbarVertical) {\r\n\t\t\t\t\t\t\tscrollbarVertical.scrollTo(scrollPositionX, scrollPositionY);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\tkeys: {\r\n\t\t\t\t\"pagedown\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(gantt.getVisibleTaskCount() - 1).id));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"pageup\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(0).id));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"up\": function () {\r\n\t\t\t\t\tvar nextElement = null;\r\n\t\t\t\t\tvar prevTask = gantt.getPrev(this.taskId);\r\n\t\t\t\t\tif (!gantt.isTaskExists(prevTask)) {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.HeaderCell();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.TaskRow(prevTask);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.moveTo(nextElement);\r\n\t\t\t\t},\r\n\t\t\t\t\"down\": function () {\r\n\t\t\t\t\tvar nextTask = gantt.getNext(this.taskId);\r\n\t\t\t\t\tif (gantt.isTaskExists(nextTask)) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskRow(nextTask));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t\"shift+down\": function(){\r\n\t\t\t\t\tif(gantt.hasChild(this.taskId) && !gantt.getTask(this.taskId).$open){\r\n\t\t\t\t\t\tgantt.open(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"shift+up\": function(){\r\n\t\t\t\t\tif(gantt.hasChild(this.taskId) && gantt.getTask(this.taskId).$open){\r\n\t\t\t\t\t\tgantt.close(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"shift+right\": function() {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar prevId = gantt.getPrevSibling(this.taskId);\r\n\t\t\t\t\tif(gantt.isTaskExists(prevId) && !gantt.isChildOf(this.taskId, prevId)){\r\n\t\t\t\t\t\tvar parent = gantt.getTask(prevId);\r\n\t\t\t\t\t\tparent.$open = true;\r\n\t\t\t\t\t\tvar result = gantt.moveTask(this.taskId, -1, prevId);\r\n\t\t\t\t\t\tif(result !== false)\r\n\t\t\t\t\t\t\tgantt.updateTask(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"shift+left\": function() {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar parent = gantt.getParent(this.taskId);\r\n\t\t\t\t\tif(gantt.isTaskExists(parent)){\r\n\t\t\t\t\t\tvar result = gantt.moveTask(this.taskId, gantt.getTaskIndex(parent) + 1, gantt.getParent(parent));\r\n\t\t\t\t\t\tif(result !== false)\r\n\t\t\t\t\t\t\tgantt.updateTask(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// select\r\n\t\t\t\t\"space\": function (e) {\r\n\t\t\t\t\tif (!gantt.isSelectedTask(this.taskId)) {\r\n\t\t\t\t\t\tgantt.selectTask(this.taskId);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tgantt.unselectTask(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// collapse\r\n\t\t\t\t\"ctrl+left\": function (e) {\r\n\t\t\t\t\tgantt.close(this.taskId);\r\n\t\t\t\t},\r\n\t\t\t\t// expand\r\n\t\t\t\t\"ctrl+right\": function (e) {\r\n\t\t\t\t\tgantt.open(this.taskId);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// delete task\r\n\t\t\t\t\"delete\": function (e) {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.$click.buttons[\"delete\"](this.taskId);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// open lightbox\r\n\t\t\t\t\"enter\": function () {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.showLightbox(this.taskId);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// add subtask\r\n\t\t\t\t\"ctrl+enter\": function () {\r\n\t\t\t\t\tif (gantt.isReadonly(this)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.createTask({}, this.taskId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\tgantt.$keyboardNavigation.TaskRow.prototype.bindAll(gantt.$keyboardNavigation.TaskRow.prototype.keys);\r\n\r\n};","import * as domHelpers from \"../../../core/ui/utils/dom_helpers\";\r\nimport {replaceValidZeroId} from \"../../../utils/helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\r\n\tgantt.$keyboardNavigation.TaskCell = function (taskId, index) {\r\n\t\ttaskId = replaceValidZeroId(taskId, gantt.config.root_id);\r\n\t\tif (!taskId) {\r\n\t\t\tvar rootLevel = gantt.getChildren(gantt.config.root_id);\r\n\t\t\tif (rootLevel[0]) {\r\n\t\t\t\ttaskId = rootLevel[0];\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.taskId = taskId;\r\n\t\tthis.columnIndex = index || 0;\r\n\t\t// provided task may not exist, in this case node will be detectes as invalid\r\n\t\tif (gantt.isTaskExists(this.taskId)) {\r\n\t\t\tthis.index = gantt.getTaskIndex(this.taskId);\r\n\t\t\tthis.globalIndex = gantt.getGlobalTaskIndex(this.taskId);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.$keyboardNavigation.TaskCell.prototype = gantt._compose(\r\n\t\tgantt.$keyboardNavigation.TaskRow,\r\n\t\t{\r\n\t\t\t_handlers: null,\r\n\t\t\tisValid: function () {\r\n\r\n\t\t\t\treturn gantt.$keyboardNavigation.TaskRow.prototype.isValid.call(this) && !!gantt.getGridColumns()[this.columnIndex];\r\n\t\t\t},\r\n\t\t\tfallback: function () {\r\n\r\n\t\t\t\tvar node = gantt.$keyboardNavigation.TaskRow.prototype.fallback.call(this);\r\n\t\t\t\tvar result = node;\r\n\t\t\t\tif (node instanceof gantt.$keyboardNavigation.TaskRow) {\r\n\t\t\t\t\tvar visibleColumns = gantt.getGridColumns();\r\n\t\t\t\t\tvar index = this.columnIndex;\r\n\t\t\t\t\twhile (index >= 0) {\r\n\t\t\t\t\t\tif (visibleColumns[index])\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (visibleColumns[index]) {\r\n\t\t\t\t\t\tresult = new gantt.$keyboardNavigation.TaskCell(node.taskId, index);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\tfromDomElement: function(el){\r\n\t\t\t\tif(!gantt.config.keyboard_navigation_cells){\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar taskId = gantt.locate(el);\r\n\t\t\t\tif(gantt.isTaskExists(taskId)){\r\n\t\t\t\t\tvar index = 0;\r\n\t\t\t\t\tvar cellElement = domHelpers.locateAttribute(el, \"data-column-index\");\r\n\r\n\t\t\t\t\tif(cellElement){\r\n\t\t\t\t\t\tindex = cellElement.getAttribute(\"data-column-index\")*1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn new gantt.$keyboardNavigation.TaskCell(taskId, index);\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetNode: function () {\r\n\t\t\t\tif (gantt.isTaskExists(this.taskId) && gantt.isTaskVisible(this.taskId)) {\r\n\t\t\t\t\tif (gantt.config.show_grid) {\r\n\t\t\t\t\t\tvar row = gantt.$grid.querySelector(\".gantt_row[\" + gantt.config.task_attribute + \"='\" + this.taskId + \"']\");\r\n\t\t\t\t\t\tif(!row)\r\n\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\treturn row.querySelector(\"[data-column-index='\"+this.columnIndex+\"']\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn gantt.getTaskNode(this.taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tkeys: {\r\n\t\t\t\t\"up\": function () {\r\n\r\n\t\t\t\t\tvar nextElement = null;\r\n\t\t\t\t\tvar prevTask = gantt.getPrev(this.taskId);\r\n\t\t\t\t\tif (!gantt.isTaskExists(prevTask)) {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.HeaderCell(this.columnIndex);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnextElement = new gantt.$keyboardNavigation.TaskCell(prevTask, this.columnIndex);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.moveTo(nextElement);\r\n\t\t\t\t},\r\n\t\t\t\t\"down\": function () {\r\n\t\t\t\t\tvar nextTask = gantt.getNext(this.taskId);\r\n\t\t\t\t\tif (gantt.isTaskExists(nextTask)) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(nextTask, this.columnIndex));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"left\": function () {\r\n\t\t\t\t\tif (this.columnIndex > 0) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex - 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"right\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tif (this.columnIndex < columns.length - 1) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex + 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\r\n\t\t\t\t\"end\": function () {\r\n\t\t\t\t\tvar columns = gantt.getGridColumns();\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, columns.length - 1));\r\n\t\t\t\t},\r\n\t\t\t\t\"home\": function () {\r\n\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, 0));\r\n\t\t\t\t},\r\n\t\t\t\t\"pagedown\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(gantt.getTaskByIndex(gantt.getVisibleTaskCount() - 1).id, this.columnIndex));\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"pageup\": function () {\r\n\t\t\t\t\tif (gantt.getVisibleTaskCount()) {\r\n\t\t\t\t\t\tthis.moveTo(new gantt.$keyboardNavigation.TaskCell(gantt.getTaskByIndex(0).id, this.columnIndex));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t);\r\n\r\n\r\n\tgantt.$keyboardNavigation.TaskCell.prototype.bindAll(gantt.$keyboardNavigation.TaskRow.prototype.keys);\r\n\tgantt.$keyboardNavigation.TaskCell.prototype.bindAll(gantt.$keyboardNavigation.TaskCell.prototype.keys);\r\n\r\n};","export default function(gantt) {\r\n\r\n\tgantt.$keyboardNavigation.dispatcher = {\r\n\t\tisActive: false,\r\n\t\tactiveNode: null,\r\n\t\tglobalNode: new gantt.$keyboardNavigation.GanttNode(),\r\n\r\n\t\tenable: function () {\r\n\t\t\tthis.isActive = true;\r\n\t\t\tthis.setActiveNode(this.getActiveNode());\r\n\t\t},\r\n\r\n\t\tdisable: function () {\r\n\t\t\tthis.isActive = false;\r\n\t\t},\r\n\r\n\t\tisEnabled: function () {\r\n\t\t\treturn !!this.isActive;\r\n\t\t},\r\n\r\n\t\tgetDefaultNode: function () {\r\n\t\t\tvar node;\r\n\t\t\tif (gantt.config.keyboard_navigation_cells) {\r\n\t\t\t\tnode = new gantt.$keyboardNavigation.TaskCell();\r\n\t\t\t} else {\r\n\t\t\t\tnode = new gantt.$keyboardNavigation.TaskRow();\r\n\t\t\t}\r\n\r\n\t\t\tif (!node.isValid()) {\r\n\t\t\t\tnode = node.fallback();\r\n\t\t\t}\r\n\t\t\treturn node;\r\n\t\t},\r\n\r\n\t\tsetDefaultNode: function () {\r\n\t\t\tthis.setActiveNode(this.getDefaultNode());\r\n\t\t},\r\n\r\n\t\tgetActiveNode: function () {\r\n\t\t\tvar node = this.activeNode;\r\n\t\t\tif (node && !node.isValid()) {\r\n\t\t\t\tnode = node.fallback();\r\n\t\t\t}\r\n\t\t\treturn node;\r\n\t\t},\r\n\r\n\t\tfromDomElement: function(e){\r\n\t\t\tvar inputs = [\r\n\t\t\t\tgantt.$keyboardNavigation.TaskRow,\r\n\t\t\t\tgantt.$keyboardNavigation.TaskCell,\r\n\t\t\t\tgantt.$keyboardNavigation.HeaderCell\r\n\t\t\t];\r\n\t\t\tfor(var i = 0; i < inputs.length; i++){\r\n\t\t\t\tif(inputs[i].prototype.fromDomElement){\r\n\t\t\t\t\tvar node = inputs[i].prototype.fromDomElement(e);\r\n\t\t\t\t\tif(node) return node;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\r\n\t\tfocusGlobalNode: function () {\r\n\t\t\tthis.blurNode(this.globalNode);\r\n\t\t\tthis.focusNode(this.globalNode);\r\n\t\t},\r\n\r\n\t\tsetActiveNode: function (el) {\r\n\t\t\t//console.trace()\r\n\t\t\tvar focusChanged = true;\r\n\t\t\tif (this.activeNode) {\r\n\t\t\t\tif (this.activeNode.compareTo(el)) {\r\n\t\t\t\t\tfocusChanged = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.isEnabled()) {\r\n\t\t\t\tif(focusChanged)\r\n\t\t\t\t\tthis.blurNode(this.activeNode);\r\n\r\n\t\t\t\tthis.activeNode = el;\r\n\t\t\t\tthis.focusNode(this.activeNode, !focusChanged);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfocusNode: function (el, keptFocus) {\r\n\t\t\tif (el && el.focus) {\r\n\t\t\t\tel.focus(keptFocus);\r\n\t\t\t}\r\n\t\t},\r\n\t\tblurNode: function (el) {\r\n\t\t\tif (el && el.blur) {\r\n\t\t\t\tel.blur();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tkeyDownHandler: function (e) {\r\n\r\n\t\t\tif (gantt.$keyboardNavigation.isModal())\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (!this.isEnabled())\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif(e.defaultPrevented){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar ganttNode = this.globalNode;\r\n\r\n\t\t\tvar command = gantt.$keyboardNavigation.shortcuts.getCommandFromEvent(e);\r\n\r\n\t\t\tvar activeElement = this.getActiveNode();\r\n\t\t\tvar eventFacade = gantt.$keyboardNavigation.facade;\r\n\t\t\tif(eventFacade.callEvent(\"onKeyDown\", [command, e]) === false){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!activeElement) {\r\n\t\t\t\tthis.setDefaultNode();\r\n\t\t\t} else if (activeElement.findHandler(command)) {\r\n\t\t\t\tactiveElement.doAction(command, e);\r\n\t\t\t} else if (ganttNode.findHandler(command)) {\r\n\t\t\t\tganttNode.doAction(command, e);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t_timeout: null,\r\n\t\tawaitsFocus: function(){\r\n\t\t\treturn this._timeout !== null;\r\n\t\t},\r\n\t\tdelay: function(callback, delay){\r\n\r\n\t\t\tclearTimeout(this._timeout);\r\n\t\t\tthis._timeout = setTimeout(gantt.bind(function(){\r\n\t\t\t\tthis._timeout = null;\r\n\t\t\t\tcallback();\r\n\t\t\t}, this) , delay || 1);\r\n\r\n\t\t},\r\n\t\tclearDelay: function(){\r\n\t\t\tclearTimeout(this._timeout);\r\n\t\t}\r\n\t};\r\n\r\n};","import { QuickInfo } from \"./quickInfo\";\r\n\r\nexport default function(gantt: any){\r\n\r\nif (!gantt.ext) {\r\n\tgantt.ext = {};\r\n}\r\ngantt.ext.quickInfo = new QuickInfo(gantt);\r\n\r\ngantt.config.quickinfo_buttons = [\"icon_edit\", \"icon_delete\"];\r\ngantt.config.quick_info_detached = true;\r\ngantt.config.show_quick_info = true;\r\n\r\ngantt.templates.quick_info_title = function(start, end, ev){ return ev.text.substr(0,50); };\r\ngantt.templates.quick_info_content = function(start, end, ev){ return ev.details || ev.text; };\r\ngantt.templates.quick_info_date = function(start, end, ev){\r\n\treturn gantt.templates.task_time(start, end, ev);\r\n};\r\ngantt.templates.quick_info_class = function(start, end, task){ return \"\"; };\r\n\r\ngantt.attachEvent(\"onTaskClick\", function(id,e){\r\n\t// GS-1460 Don't show Quick Info when clicking on the \"+\" button\r\n\tif (!gantt.utils.dom.closest(e.target, \".gantt_add\")){\r\n\t\tsetTimeout(function() {\r\n\t\t\tgantt.ext.quickInfo.show(id);\r\n\t\t}, 0);\r\n\t}\r\n\r\n\treturn true;\r\n});\r\n\r\nconst events = [\"onViewChange\", \"onLightbox\", \"onBeforeTaskDelete\", \"onBeforeDrag\"];\r\nconst hidingFunction = function(){\r\n\tgantt.ext.quickInfo.hide();\r\n\treturn true;\r\n};\r\nfor (let i=0; i {\r\n\t\t\tif (gantt.config.touch && !gantt.config.touch_tooltip) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst targetTaskId = gantt.locate(event);\r\n\t\t\tif(gantt.isTaskExists(targetTaskId)){\r\n\t\t\t\tconst task = gantt.getTask(targetTaskId);\r\n\t\t\t\treturn gantt.templates.tooltip_text(task.start_date, task.end_date, task);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tglobal: false\r\n\t});\r\n});\r\n\r\ngantt.attachEvent(\"onDestroy\", function() {\r\n\ttooltipManager.destructor();\r\n});\r\n\r\ngantt.attachEvent(\"onLightbox\", function() {\r\n\ttooltipManager.hideTooltip();\r\n});\r\nconst isLinkCreate = () => {\r\n\tconst state = gantt.getState();\r\n\treturn !!state.link_source_id;\r\n};\r\ngantt.attachEvent(\"onBeforeTooltip\", function() {\r\n\tif (isLinkCreate()){\r\n\t\treturn false;\r\n\t}\r\n});\r\n\r\ngantt.attachEvent(\"onGanttScroll\", function(){\r\n\ttooltipManager.hideTooltip();\r\n});\r\n\r\n}","import { Monitor } from \"./monitor\";\r\nimport { IMonitor, IUndoCommand, TEntityType, TUndoStack } from \"./types\";\r\nimport { Undo } from \"./undo\";\r\n\r\nexport default function(gantt: any){\r\n\r\nconst _undo = new Undo(gantt);\r\nconst monitor: IMonitor = new Monitor(_undo, gantt);\r\n\r\ngantt.config.undo = true;\r\ngantt.config.redo = true;\r\n\r\n/**\r\n * entities that require different processing for undoing-redoing changes\r\n * @type {{link: string, task: string}}\r\n */\r\ngantt.config.undo_types = {\r\n\tlink: \"link\",\r\n\ttask: \"task\"\r\n};\r\n\r\n/**\r\n * types of traced actions\r\n * @type {{update: string, remove: string, add: string}}\r\n */\r\ngantt.config.undo_actions = {\r\n\tupdate: \"update\",\r\n\tremove: \"remove\", // remove item from datastore\r\n\tadd: \"add\",\r\n\tmove: \"move\" // move task in grid\r\n};\r\n\r\nif (!gantt.ext) {\r\n\tgantt.ext = {};\r\n}\r\n\r\ngantt.ext.undo = {\r\n\tundo: () => _undo.undo(),\r\n\tredo: () => _undo.redo(),\r\n\tgetUndoStack: () => _undo.getUndoStack(),\r\n\tsetUndoStack: (stack:[]) => _undo.setUndoStack(stack),\r\n\tgetRedoStack: () => _undo.getRedoStack(),\r\n\tsetRedoStack: (stack:[]) => _undo.setRedoStack(stack),\r\n\tclearUndoStack: () => _undo.clearUndoStack(),\r\n\tclearRedoStack: () => _undo.clearRedoStack(),\r\n\tsaveState: (id: TaskID | LinkID, type: TEntityType) => monitor.store(id, type, true),\r\n\tgetInitialState: (id: TaskID | LinkID, type: TEntityType) => {\r\n\t\tif(type === gantt.config.undo_types.link){\r\n\t\t\treturn monitor.getInitialLink(id);\r\n\t\t}else{\r\n\t\t\treturn monitor.getInitialTask(id);\r\n\t\t}\r\n\t}\r\n};\r\n\r\ngantt.undo = gantt.ext.undo.undo;\r\ngantt.redo = gantt.ext.undo.redo;\r\ngantt.getUndoStack = gantt.ext.undo.getUndoStack;\r\ngantt.getRedoStack = gantt.ext.undo.getRedoStack;\r\ngantt.clearUndoStack = gantt.ext.undo.clearUndoStack;\r\ngantt.clearRedoStack = gantt.ext.undo.clearRedoStack;\r\n\r\nfunction updTask(task: ITask, oldId: TaskID, newId: TaskID) {\r\n\tif (!task) { return; }\r\n\r\n\tif (task.id === oldId) {\r\n\t\ttask.id = newId;\r\n\t}\r\n\r\n\tif (task.parent === oldId) {\r\n\t\ttask.parent = newId;\r\n\t}\r\n}\r\n\r\nfunction changeTaskCommandId(command: IUndoCommand, oldId: TaskID, newId: TaskID) {\r\n\tupdTask(command.value, oldId, newId);\r\n\tupdTask(command.oldValue, oldId, newId);\r\n}\r\n\r\nfunction updLink(link: ILink, oldTaskId: TaskID, newTaskId: TaskID) {\r\n\tif (!link) { return; }\r\n\tif (link.source === oldTaskId) {\r\n\t\tlink.source = newTaskId;\r\n\t}\r\n\tif (link.target === oldTaskId) {\r\n\t\tlink.target = newTaskId;\r\n\t}\r\n}\r\n\r\nfunction changeLinkCommandId(command: IUndoCommand, oldId: LinkID, newId: LinkID) {\r\n\tupdLink(command.value, oldId, newId);\r\n\tupdLink(command.oldValue, oldId, newId);\r\n}\r\n\r\nfunction updateTasksIds(log: TUndoStack, oldId: TaskID, newId: TaskID) {\r\n\tconst undo = _undo;\r\n\r\n\tfor (let i = 0; i < log.length; i++) {\r\n\t\tconst entry = log[i];\r\n\t\tfor (let j = 0; j < entry.commands.length; j++) {\r\n\t\t\tif (entry.commands[j].entity === undo.command.entity.task) {\r\n\t\t\t\tchangeTaskCommandId(entry.commands[j], oldId, newId);\r\n\t\t\t} else if (entry.commands[j].entity === undo.command.entity.link) {\r\n\t\t\t\tchangeLinkCommandId(entry.commands[j], oldId, newId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction updateLinksIds(log: TUndoStack, oldId: LinkID, newId: LinkID) {\r\n\tconst undo = _undo;\r\n\r\n\tfor (let i = 0; i < log.length; i++) {\r\n\t\tconst entry = log[i];\r\n\t\tfor (let j = 0; j < entry.commands.length; j++) {\r\n\t\t\tconst command = entry.commands[j];\r\n\t\t\tif (command.entity === undo.command.entity.link) {\r\n\t\t\t\tif (command.value && command.value.id === oldId) {\r\n\t\t\t\t\tcommand.value.id = newId;\r\n\t\t\t\t}\r\n\t\t\t\tif (command.oldValue && command.oldValue.id === oldId) {\r\n\t\t\t\t\tcommand.oldValue.id = newId;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\ngantt.attachEvent(\"onTaskIdChange\", (oldId: TaskID, newId: TaskID) => {\r\n\tconst undo = _undo;\r\n\tupdateTasksIds(undo.getUndoStack(), oldId, newId);\r\n\tupdateTasksIds(undo.getRedoStack(), oldId, newId);\r\n});\r\n\r\ngantt.attachEvent(\"onLinkIdChange\", (oldId: LinkID, newId: LinkID) => {\r\n\tconst undo = _undo;\r\n\tupdateLinksIds(undo.getUndoStack(), oldId, newId);\r\n\tupdateLinksIds(undo.getRedoStack(), oldId, newId);\r\n});\r\n\r\ngantt.attachEvent(\"onGanttReady\", () => {\r\n\t_undo.updateConfigs();\r\n});\r\n\r\n}","\r\nexport default function(gantt){\r\n\r\nif(!gantt._markers) {\r\n\tgantt._markers = gantt.createDatastore({\r\n\t\tname: \"marker\",\r\n\t\tinitItem: function (marker) {\r\n\t\t\tmarker.id = marker.id || gantt.uid();\r\n\t\t\treturn marker;\r\n\t\t}\r\n\t});\r\n}\r\n\r\ngantt.config.show_markers = true;\r\n\r\nfunction render_marker(marker){\r\n\tif(!gantt.config.show_markers)\r\n\t\treturn false;\r\n\r\n\tif(!marker.start_date)\r\n\t\treturn false;\r\n\r\n\tvar state = gantt.getState();\r\n\tif(+marker.start_date > +state.max_date)\r\n\t\treturn;\r\n\tif((!marker.end_date || +marker.end_date < +state.min_date) && +marker.start_date < +state.min_date)\r\n\t\treturn;\r\n\r\n\tvar div = document.createElement(\"div\");\r\n\r\n\tdiv.setAttribute(\"data-marker-id\", marker.id);\r\n\r\n\tvar css = \"gantt_marker\";\r\n\r\n\tif(marker.css){\r\n\t\tcss += \" \" + marker.css;\r\n\t}\r\n\r\n\tif(marker.title){\r\n\t\tdiv.title = marker.title;\r\n\t}\r\n\tdiv.className = css;\r\n\r\n\tvar start = gantt.posFromDate(marker.start_date);\r\n\tdiv.style.left = start + \"px\";\r\n\tlet markerHeight = Math.max(gantt.getRowTop(gantt.getVisibleTaskCount()), 0) + \"px\";\r\n\tif (gantt.config.timeline_placeholder && gantt.$task_data){\r\n\t\tmarkerHeight = gantt.$task_data.scrollHeight + \"px\";\r\n\t}\r\n\tdiv.style.height = markerHeight;\r\n\tif(marker.end_date){\r\n\t\tvar end = gantt.posFromDate(marker.end_date);\r\n\t\tdiv.style.width = Math.max((end - start), 0) + \"px\";\r\n\r\n\t}\r\n\r\n\tif(marker.text){\r\n\t\tdiv.innerHTML = \"\" + marker.text + \"
\";\r\n\t}\r\n\r\n\treturn div;\r\n}\r\n\r\nfunction initMarkerArea(){\r\n\tif(!gantt.$task_data)\r\n\t\treturn;\r\n\r\n\tvar markerArea = document.createElement(\"div\");\r\n\tmarkerArea.className = \"gantt_marker_area\";\r\n\tgantt.$task_data.appendChild(markerArea);\r\n\tgantt.$marker_area = markerArea;\r\n}\r\n\r\ngantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\tif(!gantt.$marker_area)\r\n\t\tinitMarkerArea();\r\n});\r\n\r\ngantt.attachEvent(\"onDataRender\", function(){\r\n\tif(!gantt.$marker_area){\r\n\t\tinitMarkerArea();\r\n\t\tgantt.renderMarkers();\r\n\t}\r\n});\r\n\r\ngantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t// GS-1304 - markers should attach when layout is initialized, both on gantt.init and gantt.resetLayout\r\n\t// wait for \"onBeforeGanttRender\", so all layout elements will be in DOM\r\n\tgantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\t\tinitMarkerArea();\r\n\r\n\t\tvar layers = gantt.$services.getService(\"layers\");\r\n\t\tvar markerRenderer = layers.createDataRender({\r\n\t\t\tname: \"marker\",\r\n\t\t\tdefaultContainer: function(){ return gantt.$marker_area;}\r\n\t\t});\r\n\t\tmarkerRenderer.addLayer(render_marker);\r\n\t}, {once: true});\r\n});\r\n\r\ngantt.getMarker = function(id){\r\n\tif(!this._markers) return null;\r\n\r\n\treturn this._markers.getItem(id);\r\n};\r\n\r\ngantt.addMarker = function(marker){\r\n\treturn this._markers.addItem(marker);\r\n};\r\n\r\ngantt.deleteMarker = function(id){\r\n\tif(!this._markers.exists(id))\r\n\t\treturn false;\r\n\r\n\tthis._markers.removeItem(id);\r\n\treturn true;\r\n};\r\ngantt.updateMarker = function(id){\r\n\tthis._markers.refresh(id);\r\n};\r\n\r\ngantt._getMarkers = function(){\r\n\treturn this._markers.getItems();\r\n};\r\n\r\ngantt.renderMarkers = function () {\r\n\tthis._markers.refresh();\r\n};\r\n\r\n};","import {replaceValidZeroId} from \"../utils/helpers\";\r\n\r\nexport default function(gantt){\r\n\r\ngantt.config.multiselect = true;\r\ngantt.config.multiselect_one_level = false;\r\n\r\ngantt._multiselect = {\r\n\t_selected: {},\r\n\t_one_level: false,\r\n\t_active: true,\r\n\t_first_selected_when_shift: null,\r\n\tgetDefaultSelected: function() {\r\n\t\tvar selected = this.getSelected();\r\n\t\treturn selected.length ? selected[selected.length - 1] : null;\r\n\t},\r\n\tsetFirstSelected: function(id) {\r\n\t\tthis._first_selected_when_shift = id;\r\n\t},\r\n\tgetFirstSelected: function() {\r\n\t\treturn this._first_selected_when_shift;\r\n\t},\r\n\tisActive: function() {\r\n\t\tthis.updateState();\r\n\t\treturn this._active;\r\n\t},\r\n\tupdateState: function() {\r\n\t\tthis._one_level = gantt.config.multiselect_one_level;\r\n\t\tvar active = this._active;\r\n\t\tthis._active = gantt.config.select_task;\r\n\t\tif (this._active != active) {\r\n\t\t\tthis.reset();\r\n\t\t}\r\n\t},\r\n\treset: function () {\r\n\t\tthis._selected = {};\r\n\t},\r\n\tsetLastSelected: function (id) {\r\n\t\tgantt.$data.tasksStore.silent(function(){\r\n\t\t\tvar store = gantt.$data.tasksStore;\r\n\t\t\tif (id)\r\n\t\t\t\tstore.select(id+\"\");\r\n\t\t\telse\r\n\t\t\t\tstore.unselect(null);\r\n\t\t});\r\n\t},\r\n\tgetLastSelected: function () {\r\n\t\tvar last = gantt.$data.tasksStore.getSelectedId();\r\n\t\tif (last && gantt.isTaskExists(last))\r\n\t\t\treturn last;\r\n\t\treturn null;\r\n\t},\r\n\tselect: function (id, e) {\r\n\t\tif (id && gantt.callEvent(\"onBeforeTaskMultiSelect\", [id, true, e]) && gantt.callEvent(\"onBeforeTaskSelected\", [id])) {\r\n\t\t\tthis._selected[id] = true;\r\n\t\t\tthis.setLastSelected(id);\r\n\t\t\tthis.afterSelect(id);\r\n\t\t\tgantt.callEvent(\"onTaskMultiSelect\", [id, true, e]);\r\n\t\t\tgantt.callEvent(\"onTaskSelected\", [id]);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\ttoggle: function (id, e) {\r\n\t\tif (this._selected[id]) {\r\n\t\t\tthis.unselect(id, e);\r\n\t\t} else {\r\n\t\t\tthis.select(id, e);\r\n\t\t}\r\n\t},\r\n\tunselect: function (id, e) {\r\n\t\tif (id && gantt.callEvent(\"onBeforeTaskMultiSelect\", [id, false, e])) {\r\n\t\t\tthis._selected[id] = false;\r\n\t\t\tif (this.getLastSelected() == id)\r\n\t\t\t\tthis.setLastSelected(this.getDefaultSelected());\r\n\t\t\tthis.afterSelect(id);\r\n\t\t\tgantt.callEvent(\"onTaskMultiSelect\", [id, false, e]);\r\n\t\t\tgantt.callEvent(\"onTaskUnselected\", [id]);\r\n\t\t}\r\n\t},\r\n\tisSelected: function (id) {\r\n\t\treturn !!(gantt.isTaskExists(id) && this._selected[id]);\r\n\t},\r\n\tgetSelected: function () {\r\n\t\tvar res = [];\r\n\t\tfor (var i in this._selected) {\r\n\t\t\tif (this._selected[i] && gantt.isTaskExists(i)) {\r\n\t\t\t\tres.push(i);\r\n\t\t\t} else {\r\n\t\t\t\tthis._selected[i] = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tres.sort(function(a, b) {\r\n\t\t\treturn gantt.getGlobalTaskIndex(a) > gantt.getGlobalTaskIndex(b) ? 1 : -1;\r\n\t\t});\r\n\t\treturn res;\r\n\t},\r\n\tforSelected: function (callback) {\r\n\t\tvar selected = this.getSelected();\r\n\t\tfor (var i = 0; i < selected.length; i++) {\r\n\t\t\tcallback(selected[i]);\r\n\t\t}\r\n\t},\r\n\tisSameLevel: function(id) {\r\n\t\tif (!this._one_level)\r\n\t\t\treturn true;\r\n\t\tvar last = this.getLastSelected();\r\n\t\tif (!last)\r\n\t\t\treturn true;\r\n\t\tif (!(gantt.isTaskExists(last) && gantt.isTaskExists(id)))\r\n\t\t\treturn true;\r\n\t\treturn !!(gantt.calculateTaskLevel(gantt.getTask(last)) == gantt.calculateTaskLevel(gantt.getTask(id)));\r\n\t},\r\n\tafterSelect: function(id) {\r\n\t\tif (gantt.isTaskExists(id)){\r\n\t\t\t// FIXME: quick workaround to prevent re-filtering inside refresh on multiselect\r\n\t\t\tgantt._quickRefresh(function(){\r\n\t\t\t\tgantt.refreshTask(id);\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\tdoSelection: function(e) {\r\n\t\tif (!this.isActive())\r\n\t\t\treturn false;\r\n\r\n\t\t// deny selection when click on 'expand' or 'collapse' icons\r\n\t\tif (gantt._is_icon_open_click(e))\r\n\t\t\treturn false;\r\n\r\n\t\tvar target_ev = gantt.locate(e);\r\n\t\tif (!target_ev)\r\n\t\t\treturn false;\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeMultiSelect\", [e]))\r\n\t\t\treturn false;\r\n\r\n\t\tvar selected = this.getSelected();\r\n\t\tvar defaultLast = this.getFirstSelected();\r\n\t\tvar isLast = false;\r\n\t\tvar last = this.getLastSelected();\r\n\t\tvar multiSelect = gantt.config.multiselect;\r\n\r\n\r\n\t\tvar singleSelection = (function () {\r\n\t\t\t// GS-719: If the multiselect extension is added we still need a way\r\n\t\t\t// to open the inline editors after clicking on the cells in the grid\r\n\t\t\tvar controller = gantt.ext.inlineEditors;\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\r\n\t\t\tif (gantt.config.inline_editors_multiselect_open && cell && controller.getEditorConfig(cell.columnName)) {\r\n\t\t\t\tif (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {\r\n\t\t\t\t\t// do nothing if editor is already active in this cell\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.setFirstSelected(target_ev);\r\n\r\n\t\t\tif (!this.isSelected(target_ev)) {\r\n\t\t\t\tthis.select(target_ev, e);\r\n\t\t\t}\r\n\t\t\tselected = this.getSelected();\r\n\t\t\tfor (var i = 0; i < selected.length; i++) {\r\n\t\t\t\tif (selected[i] !== target_ev) {\r\n\t\t\t\t\tthis.unselect(selected[i], e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).bind(this);\r\n\r\n\t\tvar blockSelection = (function(){\r\n\t\t\tif (!last)\r\n\t\t\t\tlast = target_ev;\r\n\t\t\telse if (target_ev) {\r\n\t\t\t\tvar first_indx = gantt.getGlobalTaskIndex(this.getFirstSelected());\r\n\t\t\t\tvar target_indx = gantt.getGlobalTaskIndex(target_ev);\r\n\t\t\t\tvar last_indx = gantt.getGlobalTaskIndex(last);\r\n\r\n\t\t\t\t// clear prev selection\r\n\t\t\t\tvar tmp = last;\r\n\t\t\t\twhile (gantt.getGlobalTaskIndex(tmp) !== first_indx) {\r\n\t\t\t\t\tthis.unselect(tmp, e);\r\n\t\t\t\t\ttmp = (first_indx > last_indx) ? gantt.getNext(tmp) : gantt.getPrev(tmp);\r\n\t\t\t\t}\r\n\t\t\t\ttmp = target_ev;\r\n\t\t\t\twhile (gantt.getGlobalTaskIndex(tmp) !== first_indx) {\r\n\t\t\t\t\tif (this.select(tmp, e) && !isLast) {\r\n\t\t\t\t\t\tisLast = true;\r\n\t\t\t\t\t\tdefaultLast = tmp;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttmp = (first_indx > target_indx) ? gantt.getNext(tmp) : gantt.getPrev(tmp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).bind(this);\r\n\r\n\r\n\t\tif (multiSelect && (e.ctrlKey || e.metaKey)) {\r\n\t\t\tif (!this.isSelected(target_ev))\r\n\t\t\t\tthis.setFirstSelected(target_ev);\r\n\r\n\t\t\tif (target_ev) {\r\n\t\t\t\tthis.toggle(target_ev, e);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\telse if (multiSelect && e.shiftKey) {\r\n\t\t\tif (!gantt.isTaskExists(this.getFirstSelected()) || this.getFirstSelected() === null) {\r\n\t\t\t\tthis.setFirstSelected(target_ev);\r\n\t\t\t}\r\n\r\n\t\t\tif (selected.length) { // select a group of tasks\r\n\t\t\t\tblockSelection();\r\n\t\t\t}\r\n\t\t\telse { // select a task when no task is selected and Shift is pressed\r\n\t\t\t\tsingleSelection();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\telse { // no key press or no multiple selection on the mouse click\r\n\t\t\tsingleSelection();\r\n\t\t}\r\n\r\n\r\n\t\tif (this.isSelected(target_ev)) {\r\n\t\t\tthis.setLastSelected(target_ev);\r\n\t\t} else if (defaultLast) {\r\n\t\t\tif (target_ev == last)\r\n\t\t\t\tthis.setLastSelected(e.shiftKey ? defaultLast : this.getDefaultSelected());\r\n\t\t} else {\r\n\t\t\tthis.setLastSelected(null);\r\n\t\t}\r\n\r\n\t\tif (!this.getSelected().length)\r\n\t\t\tthis.setLastSelected(null);\r\n\r\n\t\tif (!this.getLastSelected() || !this.isSelected(this.getFirstSelected()))\r\n\t\t\tthis.setFirstSelected(this.getLastSelected());\r\n\r\n\t\treturn true;\r\n\t}\r\n};\r\n\r\n(function(){\r\n\tvar old_selectTask = gantt.selectTask;\r\n\tgantt.selectTask = function(id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tif (!id)\r\n\t\t\treturn false;\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tvar res = id;\r\n\t\tif (multiselect.isActive()) {\r\n\t\t\tif (multiselect.select(id, null)) {\r\n\t\t\t\tmultiselect.setLastSelected(id);\r\n\t\t\t}\r\n\t\t\tmultiselect.setFirstSelected(multiselect.getLastSelected());\r\n\t\t} else {\r\n\t\t\tres = old_selectTask.call(this, id);\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\tvar old_unselectTask = gantt.unselectTask;\r\n\tgantt.unselectTask = function(id) {\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tvar isActive = multiselect.isActive();\r\n\t\tid = id || multiselect.getLastSelected();\r\n\t\tif(id && isActive) {\r\n\t\t\tmultiselect.unselect(id, null);\r\n\t\t\tif (id == multiselect.getLastSelected())\r\n\t\t\t\tmultiselect.setLastSelected(null);\r\n\t\t\tgantt.refreshTask(id);\r\n\t\t\tmultiselect.setFirstSelected(multiselect.getLastSelected());\r\n\t\t}\r\n\t\tvar res = id;\r\n\t\tif (!isActive)\r\n\t\t\tres = old_unselectTask.call(this, id);\r\n\t\treturn res;\r\n\t};\r\n\r\n\tgantt.toggleTaskSelection = function(id) {\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tif (id && multiselect.isActive()) {\r\n\t\t\tmultiselect.toggle(id);\r\n\t\t\tmultiselect.setFirstSelected(multiselect.getLastSelected());\r\n\t\t}\r\n\t};\r\n\tgantt.getSelectedTasks = function() {\r\n\t\tvar multiselect = gantt._multiselect;\r\n\t\tmultiselect.isActive();\r\n\t\treturn multiselect.getSelected();\r\n\t};\r\n\tgantt.eachSelectedTask = function(callback){\r\n\t\treturn this._multiselect.forSelected(callback);\r\n\t};\r\n\tgantt.isSelectedTask = function(id){\r\n\t\treturn this._multiselect.isSelected(id);\r\n\t};\r\n\tgantt.getLastSelectedTask = function(){\r\n\t\treturn this._multiselect.getLastSelected();\r\n\t};\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tvar old_isSelected = gantt.$data.tasksStore.isSelected;\r\n\t\tgantt.$data.tasksStore.isSelected = function(id){\r\n\t\t\tif (gantt._multiselect.isActive()) {\r\n\t\t\t\treturn gantt._multiselect.isSelected(id);\r\n\t\t\t}\r\n\t\t\treturn old_isSelected.call(this, id);\r\n\t\t};\r\n\t});\r\n})();\r\n\r\ngantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\r\n\tvar multiselect = gantt._multiselect;\r\n\tif (!multiselect.isActive())\r\n\t\treturn true;\r\n\tif (gantt.isSelectedTask(id)) {\r\n\t\tmultiselect.unselect(id, null);\r\n\t\tmultiselect.select(new_id, null);\r\n\t}\r\n});\r\n\r\ngantt.attachEvent(\"onAfterTaskDelete\", function (id, item) {\r\n\tvar multiselect = gantt._multiselect;\r\n\tif (!multiselect.isActive())\r\n\t\treturn true;\r\n\r\n\tif (multiselect._selected[id]) {\r\n\t\t// GS-1057: don't unselect the task here because the task is already unselected \r\n\t\t// it was in the select.js file before it was deleted\r\n\t\t// multiselect.unselect(id, null);\r\n\t\tmultiselect._selected[id] = false;\r\n\t\tmultiselect.setLastSelected(multiselect.getDefaultSelected());\r\n\t}\r\n\r\n\tmultiselect.forSelected(function (task_id) {\r\n\t\tif (!gantt.isTaskExists(task_id))\r\n\t\t\tmultiselect.unselect(task_id, null);\r\n\t});\r\n});\r\n\r\ngantt.attachEvent(\"onBeforeTaskMultiSelect\", function(id, state, e){\r\n\tvar multiselect = gantt._multiselect;\r\n\tif (state && multiselect.isActive()) {\r\n\t\tif (multiselect._one_level) {\r\n\t\t\treturn multiselect.isSameLevel(id);\r\n\t\t}\r\n\t}\r\n\treturn true;\r\n});\r\n\r\ngantt.attachEvent(\"onTaskClick\", function(id, e) {\r\n\tif (gantt._multiselect.doSelection(e))\r\n\t\tgantt.callEvent(\"onMultiSelect\", [e]);\r\n\treturn true;\r\n});\r\n\r\n};","/* eslint-disable */\r\n\r\nexport default function(gantt: any) {\r\n\r\n\tgantt.ext = gantt.ext || {};\r\n\r\n\tgantt.ext.export_api = gantt.ext.export_api || {\r\n\r\n\t\t_apiUrl: \"https://export.dhtmlx.com/gantt\",\r\n\r\n\t\t_preparePDFConfigRaw(config, type){\r\n\t\t\tlet previousDateRage = null;\r\n\t\t\tif (config.start && config.end){\r\n\t\t\t\tpreviousDateRage = {\r\n\t\t\t\t\tstart_date: gantt.config.start_date,\r\n\t\t\t\t\tend_date: gantt.config.end_date,\r\n\t\t\t\t};\r\n\t\t\t\tgantt.config.start_date = gantt.date.str_to_date(gantt.config.date_format)(config.start);\r\n\t\t\t\tgantt.config.end_date = gantt.date.str_to_date(gantt.config.date_format)(config.end);\r\n\t\t\t}\r\n\r\n\t\t\tconfig = gantt.mixin(config, {\r\n\t\t\t\tname: \"gantt.\" + type, data: gantt.ext.export_api._serializeHtml()\r\n\t\t\t});\r\n\r\n\t\t\tif (previousDateRage){\r\n\t\t\t\tgantt.config.start_date = previousDateRage.start_date;\r\n\t\t\t\tgantt.config.end_date = previousDateRage.end_date;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_prepareConfigPDF(config, type){\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.\" + type,\r\n\t\t\t\tdata: gantt.ext.export_api._serializeAll(),\r\n\t\t\t\tconfig: gantt.config\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._fixColumns(config.config.columns);\r\n\t\t\treturn config;\r\n\t\t},\r\n\r\n\t\t_pdfExportRouter(config, type){\r\n\t\t\tif (config && config.raw) {\r\n\t\t\t\tgantt.ext.export_api._preparePDFConfigRaw(config, type);\r\n\t\t\t} else {\r\n\t\t\t\tconfig = gantt.ext.export_api._prepareConfigPDF(config, type);\r\n\t\t\t}\r\n\t\t\tconfig.version = gantt.version;\r\n\t\t\tgantt.ext.export_api._sendToExport(config, type);\r\n\t\t},\r\n\r\n\t\texportToPDF(config) {\r\n\t\t\tgantt.ext.export_api._pdfExportRouter(config, \"pdf\");\r\n\t\t},\r\n\r\n\t\texportToPNG(config) {\r\n\t\t\tgantt.ext.export_api._pdfExportRouter(config, \"png\");\r\n\t\t},\r\n\r\n\r\n\t\texportToICal(config) {\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.ical\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializePlain().data,\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"ical\");\r\n\t\t},\r\n\r\n\t\texportToExcel(config) {\r\n\t\t\tconfig = config || {};\r\n\r\n\t\t\tlet tasks;\r\n\t\t\tlet dates;\r\n\t\t\tlet state;\r\n\t\t\tlet scroll;\r\n\t\t\t// GS-2124, we need to get all task nodes to correctly obtain the colors\r\n\t\t\tconst smartRendering = gantt.config.smart_rendering;\r\n\t\t\tif (config.visual === \"base-colors\"){\r\n\t\t\t\tgantt.config.smart_rendering = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.start || config.end) {\r\n\t\t\t\tstate = gantt.getState();\r\n\t\t\t\tdates = [gantt.config.start_date, gantt.config.end_date];\r\n\t\t\t\tscroll = gantt.getScrollState();\r\n\t\t\t\tconst convert = gantt.date.str_to_date(gantt.config.date_format);\r\n\t\t\t\ttasks = gantt.eachTask;\r\n\r\n\t\t\t\tif (config.start){\r\n\t\t\t\t\tgantt.config.start_date = convert(config.start);\r\n\t\t\t\t}\r\n\t\t\t\tif (config.end){\r\n\t\t\t\t\tgantt.config.end_date = convert(config.end);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\r\n\t\t\t\tgantt.eachTask = gantt.ext.export_api._eachTaskTimed(gantt.config.start_date, gantt.config.end_date);\r\n\t\t\t} else if (config.visual === \"base-colors\"){\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\t\t\t}\r\n\r\n\t\t\tgantt._no_progress_colors = config.visual === \"base-colors\";\r\n\r\n\t\t\tconfig = gantt.mixin(config, {\r\n\t\t\t\tname: \"gantt.xlsx\",\r\n\t\t\t\ttitle: \"Tasks\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializeTimeline(config).data,\r\n\t\t\t\tcolumns: gantt.ext.export_api._serializeGrid({ rawDates: true }),\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\r\n\t\t\tif (config.visual){\r\n\t\t\t\tconfig.scales = gantt.ext.export_api._serializeScales(config);\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"excel\");\r\n\r\n\t\t\tif (config.start || config.end) {\r\n\t\t\t\tgantt.config.start_date = state.min_date;\r\n\t\t\t\tgantt.config.end_date = state.max_date;\r\n\t\t\t\tgantt.eachTask = tasks;\r\n\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.scrollTo(scroll.x, scroll.y);\r\n\r\n\t\t\t\tgantt.config.start_date = dates[0];\r\n\t\t\t\tgantt.config.end_date = dates[1];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\texportToJSON(config) {\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.json\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializeAll(),\r\n\t\t\t\tconfig: gantt.config,\r\n\t\t\t\tcolumns: gantt.ext.export_api._serializeGrid(),\r\n\t\t\t\tworktime: gantt.ext.export_api._getWorktimeSettings(),\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"json\");\r\n\t\t},\r\n\r\n\r\n\t\timportFromExcel(config) {\r\n\t\t\ttry {\r\n\t\t\t\tconst formData = config.data;\r\n\t\t\t\tif (formData instanceof File) {\r\n\t\t\t\t\tconst data = new FormData();\r\n\t\t\t\t\tdata.append(\"file\", formData);\r\n\t\t\t\t\tconfig.data = data;\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {}\r\n\t\t\tgantt.ext.export_api._sendImportAjaxExcel(config);\r\n\t\t},\r\n\r\n\t\timportFromMSProject(config) {\r\n\t\t\tconst formData = config.data;\r\n\t\t\ttry {\r\n\t\t\t\tif (formData instanceof File) {\r\n\t\t\t\t\tconst data = new FormData();\r\n\t\t\t\t\tdata.append(\"file\", formData);\r\n\t\t\t\t\tconfig.data = data;\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {}\r\n\t\t\tgantt.ext.export_api._sendImportAjaxMSP(config);\r\n\t\t},\r\n\r\n\t\timportFromPrimaveraP6(config) {\r\n\t\t\tconfig.type = \"primaveraP6-parse\";\r\n\t\t\treturn gantt.importFromMSProject(config);\r\n\t\t},\r\n\r\n\t\texportToMSProject(config) {\r\n\t\t\tconfig = config || {};\r\n\t\t\tconfig.skip_circular_links = config.skip_circular_links === undefined ? true : !!config.skip_circular_links;\r\n\r\n\t\t\tconst oldXmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst oldFormatDate = gantt.templates.format_date;\r\n\t\t\tconst oldXmlDate = gantt.config.xml_date;\r\n\t\t\tconst oldDateFormat = gantt.config.date_format;\r\n\r\n\t\t\tconst exportServiceDateFormat = \"%d-%m-%Y %H:%i:%s\";\r\n\r\n\t\t\tgantt.config.xml_date = exportServiceDateFormat;\r\n\t\t\tgantt.config.date_format = exportServiceDateFormat;\r\n\t\t\tgantt.templates.xml_format = gantt.date.date_to_str(exportServiceDateFormat);\r\n\t\t\tgantt.templates.format_date = gantt.date.date_to_str(exportServiceDateFormat);\r\n\t\t\tconst data = gantt.ext.export_api._serializeAll();\r\n\r\n\t\t\tgantt.ext.export_api._customProjectProperties(data, config);\r\n\r\n\t\t\tgantt.ext.export_api._customTaskProperties(data, config);\r\n\r\n\t\t\tif (config.skip_circular_links) {\r\n\t\t\t\tgantt.ext.export_api._clearRecLinks(data);\r\n\t\t\t}\r\n\r\n\t\t\tconfig = gantt.ext.export_api._exportConfig(data, config);\r\n\r\n\t\t\tgantt.ext.export_api._sendToExport(config, config.type || \"msproject\");\r\n\t\t\tgantt.config.xml_date = oldXmlDate;\r\n\t\t\tgantt.config.date_format = oldDateFormat;\r\n\t\t\tgantt.templates.xml_format = oldXmlFormat;\r\n\t\t\tgantt.templates.format_date = oldFormatDate;\r\n\r\n\t\t\tgantt.config.$custom_data = null;\r\n\t\t\tgantt.config.custom = null;\r\n\t\t},\r\n\r\n\t\texportToPrimaveraP6(config) {\r\n\t\t\tconfig = config || {};\r\n\t\t\tconfig.type = \"primaveraP6\";\r\n\t\t\treturn gantt.exportToMSProject(config);\r\n\t\t},\r\n\r\n\t\t_fixColumns(columns) {\r\n\t\t\tfor (let i = 0; i < columns.length; i++) {\r\n\t\t\t\tcolumns[i].label = columns[i].label || gantt.locale.labels[\"column_\" + columns[i].name];\r\n\t\t\t\tif (typeof columns[i].width === \"string\") {\r\n\t\t\t\t\tcolumns[i].width = columns[i].width * 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_xdr(url, pack, cb) {\r\n\t\t\tgantt.ajax.post(url, pack, cb);\r\n\t\t},\r\n\r\n\t\t_markColumns(base) {\r\n\t\t\tconst columns = base.config.columns;\r\n\t\t\tif (columns){\r\n\t\t\t\tfor (let i = 0; i < columns.length; i++) {\r\n\t\t\t\t\tif (columns[i].template){\r\n\t\t\t\t\t\tcolumns[i].$template = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_sendImportAjaxExcel(config) {\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst store = config.store || 0;\r\n\t\t\tconst formData = config.data;\r\n\t\t\tconst callback = config.callback;\r\n\r\n\t\t\tformData.append(\"type\", \"excel-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify({\r\n\t\t\t\tsheet: config.sheet || 0\r\n\t\t\t}));\r\n\r\n\t\t\tif (store){\r\n\t\t\t\tformData.append(\"store\", store);\r\n\t\t\t}\r\n\r\n\t\t\tconst xhr = new XMLHttpRequest();\r\n\t\t\txhr.onreadystatechange = function(e) {\r\n\t\t\t\tif (xhr.readyState === 4 && xhr.status === 0) {// network error\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.onload = function() {\r\n\t\t\t\tconst fail = xhr.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xhr.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(info);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.open(\"POST\", url, true);\r\n\t\t\txhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\t\t\txhr.send(formData);\r\n\t\t},\r\n\r\n\r\n\t\t_ajaxToExport(data, type, callback) {\r\n\t\t\tdelete data.callback;\r\n\r\n\t\t\tconst url = data.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst pack = \"type=\" + type + \"&store=1&data=\" + encodeURIComponent(JSON.stringify(data));\r\n\r\n\t\t\tconst cb = function(loader) {\r\n\t\t\t\tconst xdoc = loader.xmlDoc || loader;\r\n\t\t\t\tconst fail = xdoc.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xdoc.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\t\t\t\tcallback(info);\r\n\t\t\t};\r\n\r\n\t\t\tgantt.ext.export_api._xdr(url, pack, cb);\r\n\t\t},\r\n\t\t_serializableGanttConfig(config) {\r\n\t\t\tconst result = gantt.mixin({}, config);\r\n\r\n\t\t\tif (result.columns) {\r\n\t\t\t\tresult.columns = result.columns.map(function(col) {\r\n\t\t\t\t\tconst copy = gantt.mixin({}, col);\r\n\t\t\t\t\tdelete copy.editor;\r\n\t\t\t\t\treturn copy;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdelete result.editor_types;\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t_sendToExport(data, type) {\r\n\t\t\tconst convert = gantt.date.date_to_str(gantt.config.date_format || gantt.config.xml_date);\r\n\t\t\tif(!data.skin){\r\n\t\t\t\tdata.skin = gantt.skin;\r\n\t\t\t}\r\n\t\t\tif (data.config) {\r\n\t\t\t\tdata.config = gantt.copy(gantt.ext.export_api._serializableGanttConfig(data.config));\r\n\t\t\t\tgantt.ext.export_api._markColumns(data, type);\r\n\r\n\t\t\t\tif (data.config.start_date && data.config.end_date) {\r\n\t\t\t\t\tif (data.config.start_date instanceof Date) {\r\n\t\t\t\t\t\tdata.config.start_date = convert(data.config.start_date);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (data.config.end_date instanceof Date) {\r\n\t\t\t\t\t\tdata.config.end_date = convert(data.config.end_date);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (data.callback) {\r\n\t\t\t\treturn gantt.ext.export_api._ajaxToExport(data, type, data.callback);\r\n\t\t\t}\r\n\r\n\t\t\tconst form = gantt.ext.export_api._createHiddenForm();\r\n\t\t\tform.firstChild.action = data.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tform.firstChild.childNodes[0].value = JSON.stringify(data);\r\n\t\t\tform.firstChild.childNodes[1].value = type;\r\n\t\t\tform.firstChild.submit();\r\n\t\t},\r\n\r\n\t\t_createHiddenForm() {\r\n\t\t\tif (!gantt.ext.export_api._hidden_export_form) {\r\n\t\t\t\tconst t = gantt.ext.export_api._hidden_export_form = document.createElement(\"div\");\r\n\t\t\t\tt.style.display = \"none\";\r\n\t\t\t\tt.innerHTML = \" \";\r\n\t\t\t\tdocument.body.appendChild(t);\r\n\t\t\t}\r\n\t\t\treturn gantt.ext.export_api._hidden_export_form;\r\n\t\t},\r\n\r\n\r\n\t\t_copyObjectBase(obj) {\r\n\t\t\tconst copy = {\r\n\t\t\t\tstart_date: undefined,\r\n\t\t\t\tend_date: undefined,\r\n\t\t\t\tconstraint_date: undefined,\r\n\t\t\t\tdeadline: undefined\r\n\t\t\t};\r\n\t\t\tfor (const key in obj) {\r\n\t\t\t\tif (key.charAt(0) === \"$\" || key === \"baselines\"){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcopy[key] = obj[key];\r\n\t\t\t}\r\n\t\t\tconst formatDate = gantt.templates.xml_format || gantt.templates.format_date;\r\n\r\n\t\t\tcopy.start_date = formatDate(copy.start_date);\r\n\t\t\tif (copy.end_date){\r\n\t\t\t\tcopy.end_date = formatDate(copy.end_date);\r\n\t\t\t}\r\n\t\t\tif (copy.constraint_date){\r\n\t\t\t\tcopy.constraint_date = formatDate(copy.constraint_date);\r\n\t\t\t}\r\n\t\t\tif (copy.deadline){\r\n\t\t\t\tcopy.deadline = formatDate(copy.deadline);\r\n\t\t\t}\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\r\n\t\t_color_box: null,\r\n\t\t_color_hash: {},\r\n\r\n\t\t_getStyles(css) {\r\n\t\t\tif (!gantt.ext.export_api._color_box) {\r\n\t\t\t\tgantt.ext.export_api._color_box = document.createElement(\"DIV\");\r\n\t\t\t\tgantt.ext.export_api._color_box.style.cssText = \"position:absolute; display:none;\";\r\n\t\t\t\tdocument.body.appendChild(gantt.ext.export_api._color_box);\r\n\t\t\t}\r\n\t\t\tif (gantt.ext.export_api._color_hash[css]){\r\n\t\t\t\treturn gantt.ext.export_api._color_hash[css];\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._color_box.className = css;\r\n\t\t\tconst color = gantt.ext.export_api._getColor(gantt.ext.export_api._color_box, \"color\");\r\n\t\t\tconst backgroundColor = gantt.ext.export_api._getColor(gantt.ext.export_api._color_box, \"backgroundColor\");\r\n\t\t\treturn (gantt.ext.export_api._color_hash[css] = color + \";\" + backgroundColor);\r\n\t\t},\r\n\r\n\r\n\t\t_getMinutesWorktimeSettings(parsedRanges) {\r\n\t\t\tconst minutes = [];\r\n\t\t\tparsedRanges.forEach(function(range) {\r\n\t\t\t\tminutes.push(range.startMinute);\r\n\t\t\t\tminutes.push(range.endMinute);\r\n\t\t\t});\r\n\t\t\treturn minutes;\r\n\t\t},\r\n\r\n\t\t_getWorktimeSettings() {\r\n\r\n\t\t\tconst defaultWorkTimes = {\r\n\t\t\t\thours: [0, 24],\r\n\t\t\t\tminutes: null,\r\n\t\t\t\tdates: { 0: true, 1: true, 2: true, 3: true, 4: true, 5: true, 6: true }\r\n\t\t\t};\r\n\r\n\t\t\tlet time;\r\n\t\t\tif (!gantt.config.work_time) {\r\n\t\t\t\ttime = defaultWorkTimes;\r\n\t\t\t} else {\r\n\t\t\t\tconst wTime = gantt._working_time_helper;\r\n\t\t\t\tif (wTime && wTime.get_calendar) {\r\n\t\t\t\t\ttime = wTime.get_calendar();\r\n\t\t\t\t} else if (wTime) {\r\n\t\t\t\t\ttime = {\r\n\t\t\t\t\t\thours: wTime.hours,\r\n\t\t\t\t\t\tminutes: null,\r\n\t\t\t\t\t\tdates: wTime.dates\r\n\t\t\t\t\t};\r\n\t\t\t\t} else if (gantt.config.worktimes && gantt.config.worktimes.global) {\r\n\t\t\t\t\tconst settings = gantt.config.worktimes.global;\r\n\r\n\t\t\t\t\tif (settings.parsed) {\r\n\t\t\t\t\t\tconst minutes = gantt.ext.export_api._getMinutesWorktimeSettings(settings.parsed.hours);\r\n\t\t\t\t\t\ttime = {\r\n\t\t\t\t\t\t\thours: null,\r\n\t\t\t\t\t\t\tminutes,\r\n\t\t\t\t\t\t\tdates: {}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tfor (const i in settings.parsed.dates) {\r\n\t\t\t\t\t\t\tif (Array.isArray(settings.parsed.dates[i])) {\r\n\t\t\t\t\t\t\t\ttime.dates[i] = gantt.ext.export_api._getMinutesWorktimeSettings(settings.parsed.dates[i]);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttime.dates[i] = settings.parsed.dates[i];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttime = {\r\n\t\t\t\t\t\t\thours: settings.hours,\r\n\t\t\t\t\t\t\tminutes: null,\r\n\t\t\t\t\t\t\tdates: settings.dates\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttime = defaultWorkTimes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn time;\r\n\t\t},\r\n\r\n\r\n\t\t_eachTaskTimed(start, end) {\r\n\t\t\treturn function(code, parent, master) {\r\n\t\t\t\tparent = parent || gantt.config.root_id;\r\n\t\t\t\tmaster = master || gantt;\r\n\r\n\t\t\t\tconst branch = gantt.getChildren(parent);\r\n\t\t\t\tif (branch){\r\n\t\t\t\t\tfor (let i = 0; i < branch.length; i++) {\r\n\t\t\t\t\t\tconst item = gantt._pull[branch[i]];\r\n\t\t\t\t\t\tif ((!start || item.end_date > start) && (!end || item.start_date < end)){\r\n\t\t\t\t\t\t\tcode.call(master, item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (gantt.hasChild(item.id)){\r\n\t\t\t\t\t\t\tgantt.eachTask(code, item.id, master);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\r\n\r\n\t\t// patch broken json serialization in gantt 2.1\r\n\t\t_originalCopyObject: gantt.json._copyObject,\r\n\r\n\r\n\t\t_copyObjectPlain(obj) {\r\n\t\t\tconst text = gantt.templates.task_text(obj.start_date, obj.end_date, obj);\r\n\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectBase(obj);\r\n\t\t\tcopy.text = text || copy.text;\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_getColor(node, style) {\r\n\t\t\tconst value = node.currentStyle ? node.currentStyle[style] : getComputedStyle(node, null)[style];\r\n\t\t\tconst rgb = value.replace(/\\s/g, \"\").match(/^rgba?\\((\\d+),(\\d+),(\\d+)/i);\r\n\t\t\treturn ((rgb && rgb.length === 4) ?\r\n\t\t\t\t(\"0\" + parseInt(rgb[1], 10).toString(16)).slice(-2) +\r\n\t\t\t\t(\"0\" + parseInt(rgb[2], 10).toString(16)).slice(-2) +\r\n\t\t\t\t(\"0\" + parseInt(rgb[3], 10).toString(16)).slice(-2) : value).replace(\"#\", \"\");\r\n\t\t},\r\n\r\n\r\n\t\t// excel serialization\r\n\t\t_copyObjectTable(obj) {\r\n\t\t\t// Excel interprets UTC time as local time in every timezone, send local time instead of actual UTC time.\r\n\t\t\t// https://github.com/SheetJS/js-xlsx/issues/126#issuecomment-60531614\r\n\t\t\tconst toISOstring = gantt.date.date_to_str(\"%Y-%m-%dT%H:%i:%s.000Z\");\r\n\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectColumns(obj, gantt.ext.export_api._copyObjectPlain(obj));\r\n\t\t\tif (copy.start_date){\r\n\t\t\t\tcopy.start_date = toISOstring(obj.start_date);\r\n\t\t\t}\r\n\t\t\tif (copy.end_date){\r\n\t\t\t\tcopy.end_date = toISOstring(obj.end_date);\r\n\t\t\t}\r\n\r\n\t\t\t// private gantt._day_index_by_date was replaced by public gantt.columnIndexByDate in gantt 5.0\r\n\t\t\tconst getDayIndex = gantt._day_index_by_date ? gantt._day_index_by_date : gantt.columnIndexByDate;\r\n\r\n\t\t\tcopy.$start = getDayIndex.call(gantt, obj.start_date);\r\n\t\t\tcopy.$end = getDayIndex.call(gantt, obj.end_date);\r\n\r\n\t\t\t// GS-2100. Correct bar position considering hidden cells\r\n\t\t\tlet hiddenCells = 0;\r\n\t\t\tconst scaleCellsWidth = gantt.getScale().width;\r\n\t\t\tif (scaleCellsWidth.indexOf(0) > -1) {\r\n\t\t\t\tlet i = 0;\r\n\t\t\t\tfor (i; i < copy.$start; i++) {\r\n\t\t\t\t\tif (!scaleCellsWidth[i]) {\r\n\t\t\t\t\t\thiddenCells++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcopy.$start -= hiddenCells;\r\n\r\n\t\t\t\tfor (i; i < copy.$end; i++) {\r\n\t\t\t\t\tif (!scaleCellsWidth[i]) {\r\n\t\t\t\t\t\thiddenCells++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcopy.$end -= hiddenCells;\r\n\t\t\t}\r\n\r\n\t\t\tcopy.$level = obj.$level;\r\n\t\t\tcopy.$type = obj.$rendered_type;\r\n\r\n\t\t\tconst tmps = gantt.templates;\r\n\t\t\tcopy.$text = tmps.task_text(obj.start, obj.end_date, obj);\r\n\t\t\tcopy.$left = tmps.leftside_text ? tmps.leftside_text(obj.start, obj.end_date, obj) : \"\";\r\n\t\t\tcopy.$right = tmps.rightside_text ? tmps.rightside_text(obj.start, obj.end_date, obj) : \"\";\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectColors(obj) {\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectTable(obj);\r\n\r\n\t\t\tconst node = gantt.getTaskNode(obj.id);\r\n\t\t\tif (node && node.firstChild) {\r\n\t\t\t\tlet color = gantt.ext.export_api._getColor((gantt._no_progress_colors ? node : node.firstChild), \"backgroundColor\");\r\n\t\t\t\tif (color === \"363636\"){\r\n\t\t\t\t\tcolor = gantt.ext.export_api._getColor(node, \"backgroundColor\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcopy.$color = color;\r\n\t\t\t} else if (obj.color){\r\n\t\t\t\tcopy.$color = obj.color;\r\n\t\t\t}\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectColumns(obj, copy) {\r\n\t\t\tfor (let i = 0; i < gantt.config.columns.length; i++) {\r\n\t\t\t\tconst ct = gantt.config.columns[i].template;\r\n\t\t\t\tif (ct) {\r\n\t\t\t\t\tlet val = ct(obj);\r\n\t\t\t\t\tif (val instanceof Date){\r\n\t\t\t\t\t\tval = gantt.templates.date_grid(val, obj);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcopy[\"_\" + i] = val;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectAll(obj) {\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectBase(obj);\r\n\r\n\t\t\tconst templates = [\r\n\t\t\t\t\"leftside_text\",\r\n\t\t\t\t\"rightside_text\",\r\n\t\t\t\t\"task_text\",\r\n\t\t\t\t\"progress_text\",\r\n\t\t\t\t\"task_class\"\r\n\t\t\t];\r\n\r\n\t\t\t// serialize all text templates\r\n\t\t\tfor (let i = 0; i < templates.length; i++) {\r\n\t\t\t\tconst template = gantt.templates[templates[i]];\r\n\t\t\t\tif (template){\r\n\t\t\t\t\tcopy[\"$\" + i] = template(obj.start_date, obj.end_date, obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._copyObjectColumns(obj, copy);\r\n\t\t\tcopy.open = obj.$open;\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\r\n\t\t_serializeHtml() {\r\n\t\t\tconst smartScales = gantt.config.smart_scales;\r\n\t\t\tconst smartRendering = gantt.config.smart_rendering;\r\n\t\t\tif (smartScales || smartRendering) {\r\n\t\t\t\tgantt.config.smart_rendering = false;\r\n\t\t\t\tgantt.config.smart_scales = false;\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\r\n\t\t\tconst html = gantt.$container.parentNode.innerHTML;\r\n\r\n\t\t\tif (smartScales || smartRendering) {\r\n\t\t\t\tgantt.config.smart_scales = smartScales;\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\r\n\t\t\treturn html;\r\n\t\t},\r\n\r\n\t\t_serializeAll() {\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._copyObjectAll;\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_serializePlain() {\r\n\t\t\tconst oldXmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst oldFormatDate = gantt.templates.format_date;\r\n\t\t\tgantt.templates.xml_format = gantt.date.date_to_str(\"%Y%m%dT%H%i%s\", true);\r\n\t\t\tgantt.templates.format_date = gantt.date.date_to_str(\"%Y%m%dT%H%i%s\", true);\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._copyObjectPlain;\r\n\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\r\n\t\t\tgantt.templates.xml_format = oldXmlFormat;\r\n\t\t\tgantt.templates.format_date = oldFormatDate;\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\r\n\t\t\tdelete data.links;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_getRaw() {\r\n\t\t\t// support Gantt < 5.0\r\n\t\t\tif (gantt._scale_helpers) {\r\n\t\t\t\tconst scales = gantt._get_scales();\r\n\t\t\t\tconst\tminWidth = gantt.config.min_column_width;\r\n\t\t\t\tconst\tautosizeMinWidth = gantt._get_resize_options().x ? Math.max(gantt.config.autosize_min_width, 0) : gantt.config.$task.offsetWidth;\r\n\t\t\t\tconst\theight = gantt.config.config.scale_height - 1;\r\n\t\t\t\treturn gantt._scale_helpers.prepareConfigs(scales, minWidth, autosizeMinWidth, height);\r\n\t\t\t} else { // Gantt >= 5.0\r\n\t\t\t\tconst timeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\t\tif (timeline) {\r\n\t\t\t\t\tlet availWidth = timeline.$config.width;\r\n\t\t\t\t\tif (gantt.config.autosize === \"x\" || gantt.config.autosize === \"xy\") {\r\n\t\t\t\t\t\tavailWidth = Math.max(gantt.config.autosize_min_width, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst state = gantt.getState();\r\n\t\t\t\t\tconst\tscales = timeline._getScales();\r\n\t\t\t\t\tconst\tminWidth = gantt.config.min_column_width;\r\n\t\t\t\t\tconst\theight = gantt.config.scale_height - 1;\r\n\t\t\t\t\tconst\trtl = gantt.config.rtl;\r\n\t\t\t\t\treturn timeline.$scaleHelper.prepareConfigs(scales, minWidth, availWidth, height, state.min_date, state.max_date, rtl);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_serializeTimeline(config) {\r\n\t\t\tgantt.json._copyObject = config.visual ? gantt.ext.export_api._copyObjectColors : gantt.ext.export_api._copyObjectTable;\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\r\n\t\t\tdelete data.links;\r\n\r\n\t\t\tif (config.cellColors) {\r\n\t\t\t\tconst css = gantt.templates.timeline_cell_class || gantt.templates.task_cell_class;\r\n\t\t\t\tif (css) {\r\n\t\t\t\t\tconst raw = gantt.ext.export_api._getRaw();\r\n\t\t\t\t\tlet steps = raw[0].trace_x;\r\n\t\t\t\t\tfor (let i = 1; i < raw.length; i++){\r\n\t\t\t\t\t\tif (raw[i].trace_x.length > steps.length){\r\n\t\t\t\t\t\t\tsteps = raw[i].trace_x;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (let i = 0; i < data.data.length; i++) {\r\n\t\t\t\t\t\tdata.data[i].styles = [];\r\n\t\t\t\t\t\tconst task = gantt.getTask(data.data[i].id);\r\n\t\t\t\t\t\tfor (let j = 0; j < steps.length; j++) {\r\n\t\t\t\t\t\t\tconst date = steps[j];\r\n\t\t\t\t\t\t\tconst cellCss = css(task, date);\r\n\t\t\t\t\t\t\tif (cellCss){\r\n\t\t\t\t\t\t\t\tdata.data[i].styles.push({ index: j, styles: gantt.ext.export_api._getStyles(cellCss) });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_serializeScales(config) {\r\n\t\t\tconst scales = [];\r\n\t\t\tconst raw = gantt.ext.export_api._getRaw();\r\n\r\n\t\t\tlet min = Infinity;\r\n\t\t\tlet max = 0;\r\n\t\t\tfor (let i = 0; i < raw.length; i++) {\r\n\t\t\t\tmin = Math.min(min, raw[i].col_width);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < raw.length; i++) {\r\n\t\t\t\tlet start = 0;\r\n\t\t\t\tlet end = 0;\r\n\t\t\t\tconst row = [];\r\n\r\n\t\t\t\tscales.push(row);\r\n\t\t\t\tconst step = raw[i];\r\n\t\t\t\tmax = Math.max(max, step.trace_x.length);\r\n\t\t\t\tconst template = step.format || step.template || (step.date ? gantt.date.date_to_str(step.date) : gantt.config.date_scale);\r\n\r\n\t\t\t\tfor (let j = 0; j < step.trace_x.length; j++) {\r\n\t\t\t\t\tconst date = step.trace_x[j];\r\n\t\t\t\t\tend = start + Math.round(step.width[j] / min);\r\n\r\n\t\t\t\t\tconst scaleCell = { text: template(date), start, end, styles: \"\" };\r\n\r\n\t\t\t\t\tif (config.cellColors) {\r\n\t\t\t\t\t\tconst css = step.css || gantt.templates.scaleCell_class;\r\n\t\t\t\t\t\tif (css) {\r\n\t\t\t\t\t\t\tconst scaleCss = css(date);\r\n\t\t\t\t\t\t\tif (scaleCss){\r\n\t\t\t\t\t\t\t\tscaleCell.styles = gantt.ext.export_api._getStyles(scaleCss);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.push(scaleCell);\r\n\t\t\t\t\tstart = end;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn { width: max, height: scales.length, data: scales };\r\n\t\t},\r\n\r\n\t\t_serializeGrid(config) {\r\n\t\t\tgantt.exportMode = true;\r\n\r\n\t\t\tconst columns = [];\r\n\t\t\tconst cols = gantt.config.columns;\r\n\r\n\t\t\tlet ccount = 0;\r\n\t\t\tfor (let i = 0; i < cols.length; i++) {\r\n\t\t\t\tif (cols[i].name === \"add\" || cols[i].name === \"buttons\") {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolumns[ccount] = {\r\n\t\t\t\t\tid: ((cols[i].template) ? (\"_\" + i) : cols[i].name),\r\n\t\t\t\t\theader: cols[i].label || gantt.locale.labels[\"column_\" + cols[i].name],\r\n\t\t\t\t\twidth: (cols[i].width ? Math.floor(cols[i].width / 4) : \"\")\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (cols[i].name === \"duration\"){\r\n\t\t\t\t\tcolumns[ccount].type = \"number\";\r\n\t\t\t\t}\r\n\t\t\t\tif (cols[i].name === \"start_date\" || cols[i].name === \"end_date\") {\r\n\t\t\t\t\tcolumns[ccount].type = \"date\";\r\n\t\t\t\t\tif (config && config.rawDates){\r\n\t\t\t\t\t\tcolumns[ccount].id = cols[i].name;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tccount++;\r\n\t\t\t}\r\n\r\n\t\t\tgantt.exportMode = false;\r\n\t\t\treturn columns;\r\n\t\t},\r\n\r\n\t\t_exportSerialize() {\r\n\t\t\tgantt.exportMode = true;\r\n\r\n\t\t\tconst xmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst formatDate = gantt.templates.format_date;\r\n\r\n\t\t\t// use configuration date format for serialization so date could be parsed on the export\r\n\t\t\t// required when custom format date function is defined\r\n\t\t\tgantt.templates.xml_format =\r\n\t\t\t\tgantt.templates.format_date =\r\n\t\t\t\tgantt.date.date_to_str(gantt.config.date_format || gantt.config.xml_date);\r\n\r\n\t\t\tconst data = gantt.serialize();\r\n\r\n\t\t\tgantt.templates.xml_format = xmlFormat;\r\n\t\t\tgantt.templates.format_date = formatDate;\r\n\t\t\tgantt.exportMode = false;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\r\n\t\t_setLevel(data) {\r\n\t\t\tfor (let i = 0; i < data.length; i++) {\r\n\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\tif (data[i].parent == 0) {\r\n\t\t\t\t\tdata[i]._lvl = 1;\r\n\t\t\t\t}\r\n\t\t\t\tfor (let j = i + 1; j < data.length; j++) {\r\n\t\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\t\tif (data[i].id == data[j].parent) {\r\n\t\t\t\t\t\tdata[j]._lvl = data[i]._lvl + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_clearLevel(data) {\r\n\t\t\tfor (let i = 0; i < data.length; i++) {\r\n\t\t\t\tdelete data[i]._lvl;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_clearRecLinks(data) {\r\n\t\t\tgantt.ext.export_api._setLevel(data.data);\r\n\t\t\tconst tasks = {};\r\n\t\t\tfor (let i = 0; i < data.data.length; i++) {\r\n\t\t\t\ttasks[data.data[i].id] = data.data[i];\r\n\t\t\t}\r\n\r\n\t\t\tconst links = {};\r\n\r\n\t\t\tfor (let i = 0; i < data.links.length; i++) {\r\n\t\t\t\tconst link = data.links[i];\r\n\t\t\t\tif (gantt.isTaskExists(link.source) && gantt.isTaskExists(link.target) &&\r\n\t\t\t\t\ttasks[link.source] && tasks[link.target]) {\r\n\t\t\t\t\tlinks[link.id] = link;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (const j in links) {\r\n\t\t\t\tgantt.ext.export_api._makeLinksSameLevel(links[j], tasks);\r\n\t\t\t}\r\n\r\n\t\t\tconst skippedLinks = {};\r\n\t\t\tfor (const j in tasks) {\r\n\t\t\t\tgantt.ext.export_api._clearCircDependencies(tasks[j], links, tasks, {}, skippedLinks, null);\r\n\t\t\t}\r\n\r\n\t\t\tif (Object.keys(links)) {\r\n\t\t\t\tgantt.ext.export_api._clearLinksSameLevel(links, tasks);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < data.links.length; i++) {\r\n\t\t\t\tif (!links[data.links[i].id]) {\r\n\t\t\t\t\tdata.links.splice(i, 1);\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._clearLevel(data.data);\r\n\t\t},\r\n\r\n\t\t_clearCircDependencies(task, links, tasks, usedTasks, skippedLinks, prevLink) {\r\n\t\t\tconst sources = task.$_source;\r\n\t\t\tif (!sources) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (usedTasks[task.id]) {\r\n\t\t\t\tgantt.ext.export_api._onCircDependencyFind(prevLink, links, usedTasks, skippedLinks);\r\n\t\t\t}\r\n\r\n\t\t\tusedTasks[task.id] = true;\r\n\r\n\t\t\tconst targets = {};\r\n\r\n\t\t\tfor (let i = 0; i < sources.length; i++) {\r\n\t\t\t\tif (skippedLinks[sources[i]]) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst curLink = links[sources[i]];\r\n\t\t\t\tconst targetTask = tasks[curLink._target];\r\n\t\t\t\tif (targets[targetTask.id]) { // two link from one task to another\r\n\t\t\t\t\tgantt.ext.export_api._onCircDependencyFind(curLink, links, usedTasks, skippedLinks);\r\n\t\t\t\t}\r\n\t\t\t\ttargets[targetTask.id] = true;\r\n\t\t\t\tgantt.ext.export_api._clearCircDependencies(targetTask, links, tasks, usedTasks, skippedLinks, curLink);\r\n\t\t\t}\r\n\t\t\tusedTasks[task.id] = false;\r\n\t\t},\r\n\r\n\t\t_onCircDependencyFind(link, links, usedTasks, skippedLinks) {\r\n\t\t\tif (link) {\r\n\t\t\t\tif (gantt.callEvent(\"onExportCircularDependency\", [link.id, link])) {\r\n\t\t\t\t\tdelete links[link.id];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete usedTasks[link._source];\r\n\t\t\t\tdelete usedTasks[link._target];\r\n\t\t\t\tskippedLinks[link.id] = true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_makeLinksSameLevel(link, tasks) {\r\n\t\t\tlet task;\r\n\t\t\tlet targetLvl;\r\n\t\t\tconst linkT = {\r\n\t\t\t\ttarget: tasks[link.target],\r\n\t\t\t\tsource: tasks[link.source]\r\n\t\t\t};\r\n\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\tif (linkT.target._lvl != linkT.source._lvl) {\r\n\t\t\t\tif (linkT.target._lvl < linkT.source._lvl) {\r\n\t\t\t\t\ttask = \"source\";\r\n\t\t\t\t\ttargetLvl = linkT.target._lvl;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttask = \"target\";\r\n\t\t\t\t\ttargetLvl = linkT.source._lvl;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t\tconst parent = tasks[linkT[task].parent];\r\n\t\t\t\t\tif (!parent) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlinkT[task] = parent;\r\n\t\t\t\t} while (linkT[task]._lvl < targetLvl);\r\n\r\n\t\t\t\tlet sourceParent = tasks[linkT.source.parent];\r\n\t\t\t\tlet\ttargetParent = tasks[linkT.target.parent];\r\n\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\twhile (sourceParent && targetParent && sourceParent.id != targetParent.id) {\r\n\t\t\t\t\tlinkT.source = sourceParent;\r\n\t\t\t\t\tlinkT.target = targetParent;\r\n\t\t\t\t\tsourceParent = tasks[linkT.source.parent];\r\n\t\t\t\t\ttargetParent = tasks[linkT.target.parent];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlink._target = linkT.target.id;\r\n\t\t\tlink._source = linkT.source.id;\r\n\r\n\t\t\tif (!linkT.target.$_target){\r\n\t\t\t\tlinkT.target.$_target = [];\r\n\t\t\t}\r\n\t\t\tlinkT.target.$_target.push(link.id);\r\n\r\n\t\t\tif (!linkT.source.$_source){\r\n\t\t\t\tlinkT.source.$_source = [];\r\n\t\t\t}\r\n\t\t\tlinkT.source.$_source.push(link.id);\r\n\t\t},\r\n\r\n\t\t_clearLinksSameLevel(links, tasks) {\r\n\t\t\tfor (const link in links) {\r\n\t\t\t\tdelete links[link]._target;\r\n\t\t\t\tdelete links[link]._source;\r\n\t\t\t}\r\n\r\n\t\t\tfor (const task in tasks) {\r\n\t\t\t\tdelete tasks[task].$_source;\r\n\t\t\t\tdelete tasks[task].$_target;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_customProjectProperties(data, config) {\r\n\t\t\tif (config && config.project) {\r\n\t\t\t\tfor (const i in config.project) {\r\n\t\t\t\t\tif (!gantt.config.$custom_data){\r\n\t\t\t\t\t\tgantt.config.$custom_data = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.config.$custom_data[i] = typeof config.project[i] === \"function\" ? config.project[i](gantt.config) : config.project[i];\r\n\t\t\t\t}\r\n\t\t\t\tdelete config.project;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_customTaskProperties(data, config) {\r\n\t\t\tif (config && config.tasks) {\r\n\t\t\t\tdata.data.forEach(function(el) {\r\n\t\t\t\t\tfor (const i in config.tasks) {\r\n\t\t\t\t\t\tif (!el.$custom_data){\r\n\t\t\t\t\t\t\tel.$custom_data = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tel.$custom_data[i] = typeof config.tasks[i] === \"function\" ? config.tasks[i](el, gantt.config) : config.tasks[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tdelete config.tasks;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_exportConfig(data, config) {\r\n\t\t\tconst projectName = config.name || \"gantt.xml\";\r\n\t\t\tdelete config.name;\r\n\r\n\t\t\tgantt.config.custom = config;\r\n\r\n\t\t\tconst time = gantt.ext.export_api._getWorktimeSettings();\r\n\r\n\t\t\tconst projectDates = gantt.getSubtaskDates();\r\n\t\t\tif (projectDates.start_date && projectDates.end_date) {\r\n\t\t\t\tconst formatDate = gantt.templates.format_date || gantt.templates.xml_format;\r\n\t\t\t\tgantt.config.start_end = {\r\n\t\t\t\t\tstart_date: formatDate(projectDates.start_date),\r\n\t\t\t\t\tend_date: formatDate(projectDates.end_date)\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tconst manual = config.auto_scheduling === undefined ? false : !!config.auto_scheduling;\r\n\r\n\t\t\tconst res = {\r\n\t\t\t\tcallback: config.callback || null,\r\n\t\t\t\tconfig: gantt.config,\r\n\t\t\t\tdata,\r\n\t\t\t\tmanual,\r\n\t\t\t\tname: projectName,\r\n\t\t\t\tworktime: time\r\n\t\t\t};\r\n\t\t\tfor (const i in config) {\r\n\t\t\t\tres[i] = config[i];\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t},\r\n\r\n\r\n\t\t_sendImportAjaxMSP(config) {\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst store = config.store || 0;\r\n\t\t\tconst formData = config.data;\r\n\t\t\tconst callback = config.callback;\r\n\r\n\t\t\tconst settings = {\r\n\t\t\t\tdurationUnit: config.durationUnit || undefined,\r\n\t\t\t\tprojectProperties: config.projectProperties || undefined,\r\n\t\t\t\ttaskProperties: config.taskProperties || undefined\r\n\t\t\t};\r\n\r\n\t\t\tformData.append(\"type\", config.type || \"msproject-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify(settings));\r\n\r\n\t\t\tif (store){\r\n\t\t\t\tformData.append(\"store\", store);\r\n\t\t\t}\r\n\r\n\t\t\tconst xhr = new XMLHttpRequest();\r\n\t\t\txhr.onreadystatechange = function(e) {\r\n\t\t\t\tif (xhr.readyState === 4 && xhr.status === 0) {// network error\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.onload = function(){\r\n\t\t\t\tconst fail = xhr.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xhr.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(info);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.open(\"POST\", url, true);\r\n\t\t\txhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\t\t\txhr.send(formData);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\r\n\tgantt.exportToPDF = gantt.ext.export_api.exportToPDF;\r\n\tgantt.exportToPNG = gantt.ext.export_api.exportToPNG;\r\n\tgantt.exportToICal = gantt.ext.export_api.exportToICal;\r\n\tgantt.exportToExcel = gantt.ext.export_api.exportToExcel;\r\n\tgantt.exportToJSON = gantt.ext.export_api.exportToJSON;\r\n\tgantt.importFromExcel = gantt.ext.export_api.importFromExcel;\r\n\tgantt.importFromMSProject = gantt.ext.export_api.importFromMSProject;\r\n\tgantt.exportToMSProject = gantt.ext.export_api.exportToMSProject;\r\n\tgantt.importFromPrimaveraP6 = gantt.ext.export_api.importFromPrimaveraP6;\r\n\tgantt.exportToPrimaveraP6 = gantt.ext.export_api.exportToPrimaveraP6;\r\n\r\n\r\n\treturn gantt.ext.export_api;\r\n}\r\n","export default {\r\n\tKEY_CODES: {\r\n\t\tUP: 38,\r\n\t\tDOWN: 40,\r\n\t\tLEFT: 37,\r\n\t\tRIGHT: 39,\r\n\t\tSPACE: 32,\r\n\t\tENTER: 13,\r\n\t\tDELETE: 46,\r\n\t\tESC: 27,\r\n\t\tTAB: 9\r\n\t}\r\n};","export default class ExtensionsManager{\r\n\tprivate _extensions:{[key:string]: GanttPlugin };\r\n\r\n\tconstructor(config: {[key:string]: GanttPlugin }){\r\n\t\tthis._extensions = {};\r\n\t\tfor(const i in config){\r\n\t\t\tthis._extensions[i] = config[i];\r\n\t\t}\r\n\t}\r\n\r\n\taddExtension = (name: string, ext: GanttPlugin) => {\r\n\t\tthis._extensions[name] = ext;\r\n\t};\r\n\r\n\tgetExtension = (name: string): GanttPlugin => {\r\n\t\treturn this._extensions[name];\r\n\t};\r\n}","type DurationUnits = \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\";\r\ntype Align = \"left\" | \"center\" | \"right\";\r\ntype SectionType = \"textarea\"\r\n\t\t\t\t\t| \"time\"\r\n\t\t\t\t\t| \"duration\"\r\n\t\t\t\t\t| \"select\"\r\n\t\t\t\t\t| \"typeselect\"\r\n\t\t\t\t\t| \"parent\"\r\n\t\t\t\t\t| \"template\"\r\n\t\t\t\t\t| \"checkbox\"\r\n\t\t\t\t\t| \"radio\"\r\n\t\t\t\t\t| \"resources\"\r\n\t\t\t\t\t| \"constraint\";\r\n\r\ntype LightboxSection = Array;\r\n\r\ntype LayoutView = \"grid\"\r\n\t| \"timeline\"\r\n\t| \"resizer\"\r\n\t| \"scrollbar\"\r\n\t| \"resourceGrid\"\r\n\t| \"resourceTimeline\";\r\n\r\ninterface IColumnItem {\r\n\tname: string;\r\n\tlabel?: string;\r\n\ttree?: boolean;\r\n\talign?: Align;\r\n\thide?: boolean;\r\n\tmax_width?: number;\r\n\tmin_width?: number;\r\n\tresize?: boolean;\r\n\ttemplate?: (obj: any) => string;\r\n\twidth?: number | \"*\";\r\n}\r\n\r\nexport type TModifierKeys = \"metaKey\" | \"ctrlKey\" | \"altKey\" | \"shiftKey\" | false | undefined;\r\n\r\nexport interface IScale {\r\n\tcss?: () => string;\r\n\tdate?: string;\r\n\tstep: number;\r\n\ttemplate?: (date: Date) => string;\r\n\tunit: DurationUnits;\r\n}\r\n\r\ninterface ILightboxSection {\r\n\tname: string;\r\n\tmap_to: string;\r\n\ttype: SectionType;\r\n\theight?: number;\r\n\tfocus?: boolean;\r\n}\r\n\r\ninterface ILightboxTimeAndDurationSection extends ILightboxSection {\r\n\treadonly: boolean;\r\n\tyear_range: number[] | number;\r\n\tsingle_date: boolean;\r\n\ttime_format: string;\r\n}\r\n\r\ninterface ILightboxInputControl extends ILightboxSection {\r\n\tdefault_value?: any;\r\n\toptions?: Array<{key: string, label: string}>;\r\n}\r\n\r\ninterface ILightboxSelectControl extends ILightboxInputControl {\r\n\tonchange: () => boolean | undefined;\r\n}\r\n\r\ninterface ILightboxParentControl extends ILightboxSection {\r\n\tallow_root: boolean;\r\n\troot_label: string;\r\n\tsort?: (a: any, b: any) => -1 | 0 | 1;\r\n\tfilter?: (task: string | number | object) => boolean;\r\n\ttemplate?: (start: Date, end: Date, ev: object) => string;\r\n}\r\n\r\ninterface ILightboxTypeselectControl extends ILightboxSection {\r\n\tfilter?: (typeName: string) => boolean;\r\n}\r\n\r\n\r\ninterface ILayoutScrollbar {\r\n\tview: \"scrollbar\";\r\n\tscroll?: \"x\" | \"y\";\r\n\tid: string;\r\n\theight?: number;\r\n\twidth?: number;\r\n}\r\n\r\ninterface ILayoutView {\r\n\tview: LayoutView;\r\n\tid?: string;\r\n\tscrollX?: string;\r\n\tscrollY?: string;\r\n\tconfig?: object;\r\n}\r\n\r\ninterface ILayoutGrid extends ILayoutView {\r\n\tview: \"grid\";\r\n\tbind?: string;\r\n}\r\n\r\ninterface ILayoutTimeline extends ILayoutView {\r\n\tview: \"timeline\";\r\n\tbindLinks?: string;\r\n\tlayers?: any[];\r\n}\r\n\r\ninterface ILayoutResizer {\r\n\tview?: undefined;\r\n\tresizer: boolean;\r\n\twidth: number;\r\n}\r\n\r\ninterface ILayoutResourceGrid extends ILayoutView {\r\n\tview: \"resourceGrid\";\r\n\twidth: number;\r\n\tgroup: \"string\";\r\n}\r\n\r\ninterface ILayoutResourceTimeline extends ILayoutView {\r\n\tview: \"resourceTimeline\";\r\n\twidth: number;\r\n\tgroup: \"string\";\r\n}\r\n\r\ninterface ILayoutHtml {\r\n\thtml: string;\r\n\tcss: string;\r\n\twidth: number;\r\n}\r\n\r\ntype LayoutRow = ILayoutGrid\r\n\t| ILayoutTimeline\r\n\t| ILayoutResizer\r\n\t| ILayoutResourceGrid\r\n\t| ILayoutResourceTimeline\r\n\t| ILayoutHtml\r\n\t| ILayoutScrollbar\r\n\t| { cols: LayoutCol[] };\r\n\r\ntype LayoutCol = ILayoutGrid\r\n\t| ILayoutTimeline\r\n\t| ILayoutResizer\r\n\t| ILayoutResourceGrid\r\n\t| ILayoutResourceTimeline\r\n\t| ILayoutHtml\r\n\t| ILayoutScrollbar\r\n\t| { rows: LayoutRow[] };\r\n\r\ninterface ILayout {\r\n\tcss: string;\r\n\trows?: LayoutRow[];\r\n\tcols?: LayoutCol[];\r\n}\r\n\r\ntype TCsp = boolean | \"auto\";\r\n\r\ninterface IResourceConfig {\r\n\tdataprocessor_assignments?: boolean;\r\n\tdataprocessor_resources?: boolean;\r\n\teditable_resource_diagram?: boolean;\r\n\tresource_store?: {\r\n\t\ttype?: \"treeDataStore\"|\"dataStore\"|string;\r\n\t\tfetchTasks?: boolean;\r\n\t\tinitItem?: (item: any) => any;\r\n\t};\r\n\tlightbox_resources?: (resources: any[]) => any[];\r\n\r\n}\r\n\r\ninterface IGanttConfig {\r\n\tlayout: ILayout;\r\n\tlinks: {\r\n\t\tfinish_to_start: \"0\";\r\n\t\tstart_to_start: \"1\";\r\n\t\tfinish_to_finish: \"2\";\r\n\t\tstart_to_finish: \"3\";\r\n\t};\r\n\ttypes: {\r\n\t\ttask: string;\r\n\t\tproject: string;\r\n\t\tmilestone: string;\r\n\t};\r\n\tauto_types: boolean;\r\n\tduration_unit: DurationUnits;\r\n\twork_time: boolean;\r\n\tcorrect_work_time: boolean;\r\n\tdeadlines: boolean;\r\n\tskip_off_time: boolean;\r\n\tcascade_delete: boolean;\r\n\tautosize: boolean | string;\r\n\tautoscroll: boolean;\r\n\tshow_links: boolean;\r\n\tshow_task_cells: boolean;\r\n\tautosize_min_width: number;\r\n\tautoscroll_speed: number;\r\n\tdeepcopy_on_parse: boolean;\r\n\tstatic_background: boolean;\r\n\tstatic_background_cells: boolean;\r\n\tbranch_loading: boolean;\r\n\tbranch_loading_property: string;\r\n\tshow_loading: boolean;\r\n\tshow_chart: boolean;\r\n\tshow_grid: boolean;\r\n\tmin_duration: number;\r\n\tdate_format: string; // use instead xml_date\r\n\txml_date?: string; // deprecated\r\n\tstart_on_monday: boolean;\r\n\tserver_utc: boolean;\r\n\tshow_progress: boolean;\r\n\tfit_tasks: boolean;\r\n\tselect_task: boolean;\r\n\tscroll_on_click: boolean;\r\n\tsmart_rendering: boolean;\r\n\tpreserve_scroll: boolean;\r\n\treadonly: boolean;\r\n\tcontainer_resize_timeout: number;\r\n\r\n\t/*grid */\r\n\tdate_grid: string;\r\n\r\n\tdrag_links: boolean;\r\n\tdrag_progress: boolean;\r\n\tdrag_resize: boolean;\r\n\tdrag_project: boolean;\r\n\tdrag_move: boolean;\r\n\tdrag_mode: {\r\n\t\tresize: \"resize\",\r\n\t\tprogress: \"progress\",\r\n\t\tmove: \"move\",\r\n\t\tignore: \"ignore\"\r\n\t};\r\n\tround_dnd_dates: boolean;\r\n\tlink_wrapper_width: number;\r\n\troot_id: string | number;\r\n\r\n\tlink_arrow_size:number;\r\n\r\n\tautofit: boolean;\r\n\tcolumns: IColumnItem[];\r\n\r\n\t/* scale*/\r\n\t/* it will be deprecated */\r\n\tdate_scale?: string;\r\n\tstep?: number;\r\n\tscale_unit?: DurationUnits;\r\n\tsubscales?: IScale[];\r\n\t/* it will be deprecated end */\r\n\r\n\tscales: IScale[];\r\n\r\n\tscale_offset_minimal: boolean;\r\n\r\n\tinherit_scale_class: boolean;\r\n\r\n\r\n\ttime_step: number;\r\n\tduration_step: number;\r\n\r\n\r\n\ttask_date: string;\r\n\ttime_picker: string;\r\n\ttask_attribute: string;\r\n\tlink_attribute: string;\r\n\tlayer_attribute: string;\r\n\tbuttons_left: string[];\r\n\t_migrate_buttons: {\r\n\t\tdhx_save_btn: \"gantt_save_btn\",\r\n\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\r\n\t\tdhx_delete_btn: \"gantt_delete_btn\"\r\n\t};\r\n\r\n\tbuttons_right: string[];\r\n\r\n\r\n\tlightbox: {\r\n\t\tsections?: LightboxSection,\r\n\t\tproject_sections?: LightboxSection,\r\n\t\tmilestone_sections?: LightboxSection\r\n\t};\r\n\tdrag_lightbox: boolean;\r\n\tsort: boolean;\r\n\tdetails_on_create: boolean;\r\n\tdetails_on_dblclick: boolean;\r\n\tinitial_scroll: boolean;\r\n\ttask_scroll_offset: number;\r\n\r\n\torder_branch: boolean;\r\n\torder_branch_free: boolean;\r\n\r\n\t// task_height is deprecated, use 'bar_height` instead\r\n\ttask_height: number | \"full\" | undefined;\r\n\tbar_height: number | \"full\";\r\n\tmin_column_width: number;\r\n\tbar_height_padding: number,\r\n\trow_height: number,\r\n\r\n\t// min width for grid column (when resizing)\r\n\tmin_grid_column_width: number;\r\n\t// name of the attribute with column index for resize element\r\n\tgrid_resizer_column_attribute: string;\r\n\t// name of the attribute with column index for resize element\r\n\t// grid_resizer_attribute: string; // usage of this parameter is not found\r\n\r\n\t// grid width can be increased after the column has been resized\r\n\tkeep_grid_width: boolean;\r\n\r\n\t// grid width can be adjusted\r\n\tgrid_resize: boolean;\r\n\tgrid_elastic_columns: boolean;\r\n\tshow_tasks_outside_timescale: boolean;\r\n\tshow_unscheduled: boolean;\r\n\treadonly_property: string;\r\n\teditable_property: string;\r\n\tcalendar_property: string;\r\n\tresource_calendars: object;\r\n\tdynamic_resource_calendars: boolean;\r\n\tinherit_calendar: boolean;\r\n\ttype_renderers: object;\r\n\r\n\tresize_rows: boolean;\r\n\t// name of the attribute with row index for resize element\r\n\ttask_grid_row_resizer_attribute: string;\r\n\t// min height for row (when resizing)\r\n\tmin_task_grid_row_height: number;\r\n\r\n\topen_tree_initially: boolean;\r\n\toptimize_render: boolean;\r\n\tprevent_default_scroll: boolean;\r\n\tshow_errors: boolean;\r\n\twai_aria_attributes: boolean;\r\n\tsmart_scales: boolean;\r\n\trtl: boolean;\r\n\tplaceholder_task: boolean | object;\r\n\thorizontal_scroll_key: TModifierKeys;\r\n\tdrag_timeline: {\r\n\t\tuseKey: TModifierKeys;\r\n\t\tignore: string;\r\n\t\trender?: boolean;\r\n\t};\r\n\tdrag_multiple: boolean;\r\n\tcsp: TCsp;\r\n\r\n\tresources?: IResourceConfig;\r\n}\r\n\r\nexport default () => {\r\n\tconst result: IGanttConfig = {\r\n\t\tlayout: {\r\n\t\t\tcss: \"gantt_container\",\r\n\t\t\trows: [\r\n\t\t\t\t{\r\n\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t{view: \"grid\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\r\n\t\t\t\t\t\t{resizer: true, width: 1},\r\n\t\t\t\t\t\t{view: \"timeline\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\r\n\t\t\t\t\t\t{view: \"scrollbar\", id: \"scrollVer\"}\r\n\t\t\t\t\t]\r\n\t\t\t\t},\r\n\t\t\t\t{view: \"scrollbar\", id: \"scrollHor\", height: 20}\r\n\t\t\t]\r\n\t\t},\r\n\t\tlinks: {\r\n\t\t\tfinish_to_start: \"0\",\r\n\t\t\tstart_to_start: \"1\",\r\n\t\t\tfinish_to_finish: \"2\",\r\n\t\t\tstart_to_finish: \"3\"\r\n\t\t},\r\n\t\ttypes: {\r\n\t\t\ttask: \"task\",\r\n\t\t\tproject: \"project\",\r\n\t\t\tmilestone: \"milestone\"\r\n\t\t},\r\n\t\tauto_types: false,\r\n\t\tduration_unit: \"day\",\r\n\t\twork_time: false,\r\n\t\tcorrect_work_time: false,\r\n\t\tskip_off_time: false,\r\n\r\n\t\tcascade_delete: true,\r\n\r\n\t\tautosize: false,\r\n\t\tautosize_min_width: 0,\r\n\t\tautoscroll: true,\r\n\t\tautoscroll_speed: 30,\r\n\t\tdeepcopy_on_parse: false,\r\n\t\tshow_links: true,\r\n\t\tshow_task_cells: true,\r\n\t\t// replace backgroung of the task area with a canvas img\r\n\t\tstatic_background: false,\r\n\t\tstatic_background_cells: true,\r\n\t\tbranch_loading: false,\r\n\t\tbranch_loading_property: \"$has_child\",\r\n\t\tshow_loading: false,\r\n\t\tshow_chart: true,\r\n\t\tshow_grid: true,\r\n\t\tmin_duration: 60 * 60 * 1000,\r\n\t\tdate_format: \"%d-%m-%Y %H:%i\", // use instead xml_date\r\n\t\txml_date: undefined, // \"%d-%m-%Y %H:%i\", // deprecated\r\n\t\tstart_on_monday: true,\r\n\t\tserver_utc: false,\r\n\t\tshow_progress: true,\r\n\t\tfit_tasks: false,\r\n\t\tselect_task: true,\r\n\t\tscroll_on_click: true,\r\n\t\tsmart_rendering: true,\r\n\t\tpreserve_scroll: true,\r\n\t\treadonly: false,\r\n\t\tcontainer_resize_timeout: 20,\r\n\t\tdeadlines: true,\r\n\r\n\t\t/*grid */\r\n\t\tdate_grid: \"%Y-%m-%d\",\r\n\r\n\t\tdrag_links: true,\r\n\t\tdrag_progress: true,\r\n\t\tdrag_resize: true,\r\n\t\tdrag_project: false,\r\n\t\tdrag_move: true,\r\n\t\tdrag_mode: {\r\n\t\t\tresize: \"resize\",\r\n\t\t\tprogress: \"progress\",\r\n\t\t\tmove: \"move\",\r\n\t\t\tignore: \"ignore\"\r\n\t\t},\r\n\t\tround_dnd_dates: true,\r\n\t\tlink_wrapper_width: 20,\r\n\t\tlink_arrow_size:12,\r\n\t\troot_id: 0,\r\n\r\n\t\tautofit: false, // grid column automatic fit grid_width config\r\n\t\tcolumns: [\r\n\t\t\t{name: \"text\", tree: true, width: \"*\", resize: true},\r\n\t\t\t{name: \"start_date\", align: \"center\", resize: true},\r\n\t\t\t{name: \"duration\", align: \"center\"},\r\n\t\t\t{name: \"add\", width: 44}\r\n\t\t],\r\n\r\n\t\t/*scale*/\r\n\r\n\t\tscale_offset_minimal: true,\r\n\t\tinherit_scale_class: false,\r\n\r\n\t\tscales: [\r\n\t\t\t{\r\n\t\t\t\tunit: \"day\",\r\n\t\t\t\tstep: 1,\r\n\t\t\t\tdate: \"%d %M\"\r\n\t\t\t}\r\n\t\t],\r\n// \t\tdate_scale: \"%d %M\",\r\n\r\n\t\ttime_step: 60,\r\n\t\tduration_step: 1,\r\n\t\ttask_date: \"%d %F %Y\",\r\n\t\ttime_picker: \"%H:%i\",\r\n\t\ttask_attribute: \"data-task-id\",\r\n\t\tlink_attribute: \"data-link-id\",\r\n\t\tlayer_attribute: \"data-layer\",\r\n\t\tbuttons_left: [\r\n\t\t\t\"gantt_save_btn\",\r\n\t\t\t\"gantt_cancel_btn\"\r\n\t\t],\r\n\t\t_migrate_buttons: {\r\n\t\t\tdhx_save_btn: \"gantt_save_btn\",\r\n\t\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\r\n\t\t\tdhx_delete_btn: \"gantt_delete_btn\"\r\n\t\t},\r\n\t\tbuttons_right: [\r\n\t\t\t\"gantt_delete_btn\"\r\n\t\t],\r\n\t\tlightbox: {\r\n\t\t\tsections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"time\", type: \"duration\", map_to: \"auto\"}\r\n\t\t\t],\r\n\t\t\tproject_sections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\r\n\t\t\t\t{name: \"time\", type: \"duration\", readonly: true, map_to: \"auto\"}\r\n\t\t\t],\r\n\t\t\tmilestone_sections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\r\n\t\t\t\t{name: \"time\", type: \"duration\", single_date: true, map_to: \"auto\"}\r\n\t\t\t]\r\n\t\t},\r\n\t\tdrag_lightbox: true,\r\n\t\tsort: false,\r\n\t\tdetails_on_create: true,\r\n\t\tdetails_on_dblclick: true,\r\n\t\tinitial_scroll: true,\r\n\t\ttask_scroll_offset: 100,\r\n\r\n\t\torder_branch: false,\r\n\t\torder_branch_free: false,\r\n\r\n\t\t// task height is deprecated, use 'bar_height' instead\r\n\t\ttask_height: undefined,// number px of 'full' for row height\r\n\t\tbar_height: \"full\",\r\n\t\tbar_height_padding:9,\r\n\t\tmin_column_width: 70,\r\n\r\n\t\t// min width for grid column (when resizing)\r\n\t\tmin_grid_column_width: 70,\r\n\t\t// name of the attribute with column index for resize element\r\n\t\tgrid_resizer_column_attribute: \"data-column-index\",\r\n\t\t// name of the attribute with column index for resize element\r\n\t\t// grid_resizer_attribute: \"grid_resizer\", // - usage of this parameter is not found in code\r\n\r\n\t\t// grid width can be increased after the column has been resized\r\n\t\tkeep_grid_width: false,\r\n\r\n\t\t// grid width can be adjusted\r\n\t\tgrid_resize: false,\r\n\t\tgrid_elastic_columns: false,\r\n\t\tshow_tasks_outside_timescale: false,\r\n\t\tshow_unscheduled: true,\r\n\r\n\t\tresize_rows: false,\r\n\t\t// name of the attribute with row index for resize element\r\n\t\ttask_grid_row_resizer_attribute: \"data-row-index\",\r\n\t\t// min height for row (when resizing)\r\n\t\tmin_task_grid_row_height: 30,\r\n\t\trow_height: 36,\r\n\r\n\t\t//\r\n\t\treadonly_property: \"readonly\",\r\n\t\teditable_property: \"editable\",\r\n\t\tcalendar_property: \"calendar_id\",\r\n\t\tresource_calendars: {},\r\n\t\tdynamic_resource_calendars: false,\r\n\t\tinherit_calendar: false,\r\n\t\ttype_renderers: {},\r\n\r\n\t\topen_tree_initially: false,\r\n\t\toptimize_render: true,\r\n\t\tprevent_default_scroll: false,\r\n\t\tshow_errors: true,\r\n\t\twai_aria_attributes: true,\r\n\t\tsmart_scales: true,\r\n\t\trtl:false,\r\n\t\tplaceholder_task: false,\r\n\t\thorizontal_scroll_key: \"shiftKey\",\r\n\t\tdrag_timeline: {\r\n\t\t\tuseKey: undefined,\r\n\t\t\tignore: \".gantt_task_line, .gantt_task_link\",\r\n\t\t\trender: false\r\n\t\t},\r\n\t\tdrag_multiple: true,\r\n\t\tcsp: \"auto\"\r\n\t};\r\n\treturn result;\r\n};\r\n","/* eslint-disable no-restricted-globals */\r\nvar isWindowAwailable = typeof window !== \"undefined\";\r\n\r\n/* eslint-enable no-restricted-globals */\r\n\r\nexport default {\r\n\tisIE: isWindowAwailable && (navigator.userAgent.indexOf(\"MSIE\") >= 0 || navigator.userAgent.indexOf(\"Trident\") >= 0),\r\n\tisIE6: isWindowAwailable && (!XMLHttpRequest && navigator.userAgent.indexOf(\"MSIE\") >= 0),\r\n\tisIE7: isWindowAwailable && (navigator.userAgent.indexOf(\"MSIE 7.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") < 0),\r\n\tisIE8: isWindowAwailable && (navigator.userAgent.indexOf(\"MSIE 8.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") >= 0),\r\n\tisOpera: isWindowAwailable && (navigator.userAgent.indexOf(\"Opera\") >= 0),\r\n\tisChrome: isWindowAwailable && (navigator.userAgent.indexOf(\"Chrome\") >= 0),\r\n\tisKHTML: isWindowAwailable && (navigator.userAgent.indexOf(\"Safari\") >= 0 || navigator.userAgent.indexOf(\"Konqueror\") >= 0),\r\n\tisFF: isWindowAwailable && (navigator.userAgent.indexOf(\"Firefox\") >= 0),\r\n\tisIPad: isWindowAwailable && (navigator.userAgent.search(/iPad/gi) >= 0),\r\n\tisEdge: isWindowAwailable && (navigator.userAgent.indexOf(\"Edge\")!=-1),\r\n\tisNode: (!isWindowAwailable || typeof navigator == \"undefined\" || (typeof PRODUCTION !== \"undefined\" && PRODUCTION === \"test\"))\r\n};\r\n","export default function serialize(data: object | string) {\r\n\tif (typeof data === \"string\" || typeof data === \"number\") {\r\n\t\treturn data;\r\n\t}\r\n\r\n\tlet result = \"\";\r\n\r\n\tfor (const key in data) {\r\n\t\tlet serialized = \"\";\r\n\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\tif (typeof data[key] === \"string\") {\r\n\t\t\t\tserialized = encodeURIComponent(data[key]);\r\n\t\t\t} else if (typeof data[key] === \"number\") {\r\n\t\t\t\tserialized = String(data[key]);\r\n\t\t\t} else {\r\n\t\t\t\tserialized = encodeURIComponent(JSON.stringify(data[key]));\r\n\t\t\t}\r\n\t\t\tserialized = key + \"=\" + serialized;\r\n\r\n\t\t\tif (result.length) {\r\n\t\t\t\tserialized = \"&\" + serialized;\r\n\t\t\t}\r\n\t\t\tresult += serialized;\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n","import env from \"../../utils/env\";\r\nimport global from \"../../utils/global\";\r\nimport serialize from \"./serialize\";\r\n\r\nfunction createConfig(method, args) {\r\n\tvar result = {\r\n\t\tmethod: method\r\n\t};\r\n\r\n\tif (args.length === 0) {\r\n\t\tthrow new Error(\"Arguments list of query is wrong.\");\r\n\t}\r\n\tif (args.length === 1) {\r\n\t\tif (typeof args[0] === \"string\") {\r\n\t\t\tresult.url = args[0];\r\n\t\t\tresult.async = true;\r\n\t\t} else {\r\n\t\t\tresult.url = args[0].url;\r\n\t\t\tresult.async = (args[0].async || true);\r\n\t\t\tresult.callback = args[0].callback;\r\n\t\t\tresult.headers = args[0].headers;\r\n\t\t}\r\n\t\tif (method === \"POST\" || \"PUT\") {\r\n\t\t\tif (args[0].data) {\r\n\t\t\t\tif (typeof args[0].data !== \"string\") {\r\n\t\t\t\t\tresult.data = serialize(args[0].data);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.data = args[0].data;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult.data = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tresult.url = args[0];\r\n\tswitch(method) {\r\n\t\tcase \"GET\":\r\n\t\tcase \"DELETE\":\r\n\t\t\tresult.callback = args[1];\r\n\t\t\tresult.headers = args[2];\r\n\t\tbreak;\r\n\t\tcase \"POST\":\r\n\t\tcase \"PUT\":\r\n\t\t\tif (args[1]) {\r\n\t\t\t\tif (typeof args[1] !== \"string\") {\r\n\t\t\t\t\tresult.data = serialize(args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.data = args[1];\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresult.data = \"\";\r\n\t\t\t}\r\n\t\t\tresult.callback = args[2];\r\n\t\t\tresult.headers = args[3];\r\n\t\tbreak;\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nexport default function(gantt) {\r\n\treturn {\r\n\r\n\t\t// if false - dhxr param will added to prevent caching on client side (default),\r\n\t\t// if true - do not add extra params\r\n\t\tcache: true,\r\n\r\n\t\t// default method for load/loadStruct, post/get allowed\r\n\t\t// get - since 4.1.1, this should fix 412 error for macos safari\r\n\t\tmethod: \"get\",\r\n\r\n\t\tparse: function(data) {\r\n\t\t\tif (typeof data !== \"string\") return data;\r\n\r\n\t\t\tvar obj;\r\n\t\t\tdata = data.replace(/^[\\s]+/,\"\");\r\n\t\t\tif (typeof DOMParser !== \"undefined\" && !env.isIE) { // ff,ie9\r\n\t\t\t\tobj = (new DOMParser()).parseFromString(data, \"text/xml\");\r\n\t\t\t} else if (typeof global.ActiveXObject !== \"undefined\") {\r\n\t\t\t\tobj = new global.ActiveXObject(\"Microsoft.XMLDOM\");\r\n\t\t\t\tobj.async = \"false\";\r\n\t\t\t\tobj.loadXML(data);\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t},\r\n\t\txmltop: function(tagname, xhr, obj) {\r\n\t\t\tif (typeof xhr.status == \"undefined\" || xhr.status < 400) {\r\n\t\t\t\tvar xml = (!xhr.responseXML) ? this.parse(xhr.responseText || xhr) : (xhr.responseXML || xhr);\r\n\t\t\t\tif (xml && xml.documentElement !== null && !xml.getElementsByTagName(\"parsererror\").length) {\r\n\t\t\t\t\treturn xml.getElementsByTagName(tagname)[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (obj !== -1) gantt.callEvent(\"onLoadXMLError\",[\"Incorrect XML\", arguments[1], obj]);\r\n\t\t\treturn document.createElement(\"DIV\");\r\n\t\t},\r\n\t\txpath: function(xpathExp, docObj) {\r\n\t\t\tif (!docObj.nodeName) docObj = docObj.responseXML || docObj;\r\n\t\t\tif (env.isIE) {\r\n\t\t\t\treturn docObj.selectNodes(xpathExp)||[];\r\n\t\t\t} else {\r\n\t\t\t\tvar rows = [];\r\n\t\t\t\tvar first;\r\n\t\t\t\tvar col = (docObj.ownerDocument||docObj).evaluate(xpathExp, docObj, null, XPathResult.ANY_TYPE, null);\r\n\r\n\t\t\t\twhile (true){\r\n\t\t\t\t\tfirst = col.iterateNext();\r\n\t\t\t\t\tif(first){\r\n\t\t\t\t\t\trows.push(first);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn rows;\r\n\t\t\t}\r\n\t\t},\r\n\t\tquery: function(config) {\r\n\t\t\treturn this._call(\r\n\t\t\t\t(config.method || \"GET\"),\r\n\t\t\t\tconfig.url,\r\n\t\t\t\tconfig.data || \"\",\r\n\t\t\t\t(config.async || true),\r\n\t\t\t\tconfig.callback,\r\n\t\t\t\tconfig.headers\r\n\t\t\t);\r\n\t\t},\r\n\t\tget: function(url, onLoad, headers) {\r\n\t\t\tvar config = createConfig(\"GET\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tgetSync: function(url, headers) {\r\n\t\t\tvar config = createConfig(\"GET\", arguments);\r\n\t\t\tconfig.async = false;\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tput: function(url, postData, onLoad, headers) {\r\n\t\t\tvar config = createConfig(\"PUT\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tdel: function(url, onLoad, headers) {\r\n\t\t\t/**\r\n\t\t\t * https://tools.ietf.org/html/rfc7231#section-4.3.5\r\n\t\t\t * A payload within a DELETE request message has no defined semantics;\r\n\t\t\t * sending a payload body on a DELETE request might cause some existing\r\n\t\t\t * implementations to reject the request.\r\n\t\t\t */\r\n\t\t\tvar config = createConfig(\"DELETE\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tpost: function(url, postData, onLoad, headers) {\r\n\t\t\tif (arguments.length == 1) {\r\n\t\t\t\tpostData = \"\";\r\n\t\t\t} else if (arguments.length == 2 && typeof(postData) == \"function\") {\r\n\t\t\t\tonLoad = postData;\r\n\t\t\t\tpostData = \"\";\r\n\t\t\t}\r\n\t\t\tvar config = createConfig(\"POST\", arguments);\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\tpostSync: function(url, postData, headers) {\r\n\t\t\tpostData = (postData === null ? \"\" : String(postData));\r\n\r\n\t\t\tvar config = createConfig(\"POST\", arguments);\r\n\t\t\tconfig.async = false;\r\n\t\t\treturn this.query(config);\r\n\t\t},\r\n\t\t_call: function(method, url, postData, async, onLoad, headers) {\r\n\t\t\treturn new gantt.Promise(function(resolve, reject) {\r\n\t\t\t\tvar t = (typeof XMLHttpRequest !== undefined ? new XMLHttpRequest() : new global.ActiveXObject(\"Microsoft.XMLHTTP\"));\r\n\t\t\t\tvar isQt = (navigator.userAgent.match(/AppleWebKit/) !== null && navigator.userAgent.match(/Qt/) !== null && navigator.userAgent.match(/Safari/) !== null);\r\n\r\n\t\t\t\tif (!!async) {\r\n\t\t\t\t\tt.onreadystatechange = function() {\r\n\t\t\t\t\t\tif ((t.readyState == 4) || (isQt && t.readyState == 3)) { // what for long response and status 404?\r\n\t\t\t\t\t\t\tif (t.status != 200 || t.responseText === \"\")\r\n\t\t\t\t\t\t\t\tif (!gantt.callEvent(\"onAjaxError\", [t])) return;\r\n\r\n\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\tif (typeof(onLoad) == \"function\") {\r\n\t\t\t\t\t\t\t\t\tonLoad.apply(global, [{xmlDoc:t, filePath:url}]); // dhtmlx-compat, response.xmlDoc.responseXML/responseText\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tresolve(t);\r\n\t\t\t\t\t\t\t\tif (typeof(onLoad) == \"function\") {\r\n\t\t\t\t\t\t\t\t\tonLoad = null;\r\n\t\t\t\t\t\t\t\t\tt = null;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}, 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar noCache = !this || !this.cache;\r\n\t\t\t\tif (method == \"GET\" && noCache) {\r\n\t\t\t\t\turl += (url.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime()+\"=1\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tt.open(method, url, async);\r\n\r\n\t\t\t\tif (headers){\r\n\t\t\t\t\tfor (var key in headers)\r\n\t\t\t\t\t\tt.setRequestHeader(key, headers[key]);\r\n\t\t\t\t} else if (method.toUpperCase() == \"POST\" || method == \"PUT\" || method == \"DELETE\") {\r\n\t\t\t\t\tt.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n\t\t\t\t} else if (method == \"GET\") {\r\n\t\t\t\t\tpostData = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tt.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\r\n\t\t\t\tt.send(postData);\r\n\r\n\t\t\t\tif (!async) return {xmlDoc:t, filePath:url}; // dhtmlx-compat, response.xmlDoc.responseXML/responseText\r\n\t\t\t});\r\n\t\t},\r\n\t\turlSeparator: function(str){\r\n\t\t\tif (str.indexOf(\"?\") != -1)\r\n\t\t\t\treturn \"&\";\r\n\t\t\telse\r\n\t\t\t\treturn \"?\";\r\n\t\t}\r\n\t};\r\n};\r\n","const dateToStr = (format: string, utc: boolean, gantt) => {\r\n\tformat = format.replace(/%[a-zA-Z]/g, (a) => {\r\n\t\tswitch (a) {\r\n\t\t\tcase \"%d\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Date())+\"`;\r\n\t\t\tcase \"%m\":\r\n\t\t\t\treturn `\"+to_fixed((date.get${utc?\"UTC\":\"\"}Month()+1))+\"`;\r\n\t\t\tcase \"%j\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}Date()+\"`;\r\n\t\t\tcase \"%n\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Month()+1)+\"`;\r\n\t\t\tcase \"%y\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}FullYear()%100)+\"`;\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}FullYear()+\"`;\r\n\t\t\tcase \"%D\":\r\n\t\t\t\treturn `\"+locale.date.day_short[date.get${utc?\"UTC\":\"\"}Day()]+\"`;\r\n\t\t\tcase \"%l\":\r\n\t\t\t\treturn `\"+locale.date.day_full[date.get${utc?\"UTC\":\"\"}Day()]+\"`;\r\n\t\t\tcase \"%M\":\r\n\t\t\t\treturn `\"+locale.date.month_short[date.get${utc?\"UTC\":\"\"}Month()]+\"`;\r\n\t\t\tcase \"%F\":\r\n\t\t\t\treturn `\"+locale.date.month_full[date.get${utc?\"UTC\":\"\"}Month()]+\"`;\r\n\t\t\tcase \"%h\":\r\n\t\t\t\treturn `\"+to_fixed((date.get${utc?\"UTC\":\"\"}Hours()+11)%12+1)+\"`;\r\n\t\t\tcase \"%g\":\r\n\t\t\t\treturn `\"+((date.get${utc?\"UTC\":\"\"}Hours()+11)%12+1)+\"`;\r\n\t\t\tcase \"%G\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}Hours()+\"`;\r\n\t\t\tcase \"%H\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Hours())+\"`;\r\n\t\t\tcase \"%i\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Minutes())+\"`;\r\n\t\t\tcase \"%a\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Hours()>11?\"pm\":\"am\")+\"`;\r\n\t\t\tcase \"%A\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Hours()>11?\"PM\":\"AM\")+\"`;\r\n\t\t\tcase \"%s\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Seconds())+\"`;\r\n\t\t\tcase \"%W\":\r\n\t\t\t\treturn `\"+to_fixed(getISOWeek(date))+\"`;\r\n\t\t\tcase \"%w\":\r\n\t\t\t\treturn `\"+to_fixed(getWeek(date))+\"`;\r\n\t\t\tdefault:\r\n\t\t\t\treturn a;\r\n\t\t}\r\n\t});\r\n\r\n\t// tslint:disable-next-line: function-constructor\r\n\tconst dateToStrFn = new Function(\"date\", \"to_fixed\", \"locale\", \"getISOWeek\", \"getWeek\", `return \"${format}\";`);\r\n\r\n\treturn (date: Date) => {\r\n\t\treturn dateToStrFn(date, gantt.date.to_fixed, gantt.locale, gantt.date.getISOWeek, gantt.date.getWeek);\r\n\t};\r\n};\r\n\r\n\r\nconst strToDate = (format: string, utc: boolean, gantt:any) => {\r\n\tlet splt = \"var temp=date.match(/[a-zA-Z]+|[0-9]+/g);\";\r\n\tconst mask = format.match(/%[a-zA-Z]/g);\r\n\tfor (let i = 0; i < mask.length; i++) {\r\n\t\tswitch (mask[i]) {\r\n\t\t\tcase \"%j\":\r\n\t\t\tcase \"%d\":\r\n\t\t\t\tsplt += `set[2]=temp[${i}]||1;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%n\":\r\n\t\t\tcase \"%m\":\r\n\t\t\t\tsplt += `set[1]=(temp[${i}]||1)-1;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%y\":\r\n\t\t\t\tsplt += `set[0]=temp[${i}]*1+(temp[${i}]>50?1900:2000);`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%g\":\r\n\t\t\tcase \"%G\":\r\n\t\t\tcase \"%h\":\r\n\t\t\tcase \"%H\":\r\n\t\t\t\tsplt += `set[3]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%i\":\r\n\t\t\t\tsplt += `set[4]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\tsplt += `set[0]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%a\":\r\n\t\t\tcase \"%A\":\r\n\t\t\t\tsplt += `set[3]=set[3]%12+((temp[${i}]||'').toLowerCase()=='am'?0:12);`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%s\":\r\n\t\t\t\tsplt += `set[5]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%M\":\r\n\t\t\t\tsplt += `set[1]=locale.date.month_short_hash[temp[${i}]]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%F\":\r\n\t\t\t\tsplt += `set[1]=locale.date.month_full_hash[temp[${i}]]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tlet code = \"set[0],set[1],set[2],set[3],set[4],set[5]\";\r\n\tif (utc) { code = ` Date.UTC(${code})`; }\r\n\t// tslint:disable-next-line: function-constructor\r\n\tconst strToDateFn = new Function(\"date\", \"locale\", `var set=[0,0,1,0,0,0]; ${splt} return new Date(${code});`);\r\n\r\n\treturn (dateString) => {\r\n\t\treturn strToDateFn(dateString, gantt.locale);\r\n\t};\r\n};\r\n\r\nconst fastVersion = {\r\n\tdate_to_str: dateToStr,\r\n\tstr_to_date: strToDate\r\n};\r\n\r\nexport default fastVersion;","const dateToStr = (format: string, utc: boolean, gantt) => {\r\n\treturn (date) => {\r\n\t\treturn format.replace(/%[a-zA-Z]/g, (a) => {\r\n\t\t\tswitch (a) {\r\n\t\t\t\tcase \"%d\": return utc ? gantt.date.to_fixed(date.getUTCDate()) : gantt.date.to_fixed(date.getDate());\r\n\t\t\t\tcase \"%m\": return utc ? gantt.date.to_fixed((date.getUTCMonth() + 1)) : gantt.date.to_fixed((date.getMonth() + 1));\r\n\t\t\t\tcase \"%j\": return utc ? date.getUTCDate() : date.getDate();\r\n\t\t\t\tcase \"%n\": return utc ? (date.getUTCMonth() + 1) : (date.getMonth() + 1);\r\n\t\t\t\tcase \"%y\": return utc ? gantt.date.to_fixed(date.getUTCFullYear() % 100) : gantt.date.to_fixed(date.getFullYear() % 100);\r\n\t\t\t\tcase \"%Y\": return utc ? date.getUTCFullYear() : date.getFullYear();\r\n\t\t\t\tcase \"%D\": return utc ? gantt.locale.date.day_short[date.getUTCDay()] : gantt.locale.date.day_short[date.getDay()];\r\n\t\t\t\tcase \"%l\": return utc ? gantt.locale.date.day_full[date.getUTCDay()] : gantt.locale.date.day_full[date.getDay()];\r\n\t\t\t\tcase \"%M\": return utc ? gantt.locale.date.month_short[date.getUTCMonth()] : gantt.locale.date.month_short[date.getMonth()];\r\n\t\t\t\tcase \"%F\": return utc ? gantt.locale.date.month_full[date.getUTCMonth()] : gantt.locale.date.month_full[date.getMonth()];\r\n\t\t\t\tcase \"%h\": return utc ? gantt.date.to_fixed((date.getUTCHours() + 11) % 12 + 1) : gantt.date.to_fixed((date.getHours() + 11) % 12 + 1);\r\n\t\t\t\tcase \"%g\": return utc ? ((date.getUTCHours() + 11) % 12 + 1) : ((date.getHours() + 11) % 12 + 1);\r\n\t\t\t\tcase \"%G\": return utc ? date.getUTCHours() : date.getHours();\r\n\t\t\t\tcase \"%H\": return utc ? gantt.date.to_fixed(date.getUTCHours()) : gantt.date.to_fixed(date.getHours());\r\n\t\t\t\tcase \"%i\": return utc ? gantt.date.to_fixed(date.getUTCMinutes()) : gantt.date.to_fixed(date.getMinutes());\r\n\t\t\t\tcase \"%a\": return utc ? (date.getUTCHours() > 11 ? \"pm\" : \"am\") : (date.getHours() > 11 ? \"pm\" : \"am\");\r\n\t\t\t\tcase \"%A\": return utc ? (date.getUTCHours() > 11 ? \"PM\" : \"AM\") : (date.getHours() > 11 ? \"PM\" : \"AM\");\r\n\t\t\t\tcase \"%s\": return utc ? gantt.date.to_fixed(date.getUTCSeconds()) : gantt.date.to_fixed(date.getSeconds());\r\n\t\t\t\tcase \"%W\": return utc ? gantt.date.to_fixed(gantt.date.getUTCISOWeek(date)) : gantt.date.to_fixed(gantt.date.getISOWeek(date));\r\n\t\t\t\tdefault: return a;\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n};\r\nconst strToDate = (format: string, utc: boolean, gantt:any) => {\r\n\treturn (date: string) => {\r\n\t\tconst set: Array = [0, 0, 1, 0, 0, 0];\r\n\t\tconst temp = date.match(/[a-zA-Z]+|[0-9]+/g);\r\n\t\tconst mask = format.match(/%[a-zA-Z]/g);\r\n\r\n\t\tfor (let i = 0; i < mask.length; i++) {\r\n\t\t\tswitch (mask[i]) {\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\tcase \"%d\":\r\n\t\t\t\t\tset[2] = temp[i] as unknown as number || 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%n\":\r\n\t\t\t\tcase \"%m\":\r\n\t\t\t\t\tset[1] = (temp[i] as unknown as number || 1) - 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%y\":\r\n\t\t\t\t\tset[0] = temp[i] as unknown as number * 1 + ((temp[i] as unknown as number) > 50 ? 1900 : 2000);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\tcase \"%h\":\r\n\t\t\t\tcase \"%H\":\r\n\t\t\t\t\tset[3] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%i\":\r\n\t\t\t\t\tset[4] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%Y\":\r\n\t\t\t\t\tset[0] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%a\":\r\n\t\t\t\tcase \"%A\":\r\n\t\t\t\t\tset[3] = set[3] as number % 12 + ((temp[i] || \"\").toLowerCase() === \"am\" ? 0 : 12);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%s\":\r\n\t\t\t\t\tset[5] = temp[i] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%M\":\r\n\t\t\t\t\tset[1] = gantt.locale.date.month_short_hash[temp[i]] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%F\":\r\n\t\t\t\t\tset[1] = gantt.locale.date.month_full_hash[temp[i]] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (utc) {\r\n\t\t\treturn new Date(Date.UTC(\r\n\t\t\t\tset[0] as number,\r\n\t\t\t\tset[1] as number,\r\n\t\t\t\tset[2] as number,\r\n\t\t\t\tset[3] as number,\r\n\t\t\t\tset[4] as number,\r\n\t\t\t\tset[5] as number\r\n\t\t\t));\r\n\t\t}\r\n\t\treturn new Date(\r\n\t\t\tset[0] as number,\r\n\t\t\tset[1] as number,\r\n\t\t\tset[2] as number,\r\n\t\t\tset[3] as number,\r\n\t\t\tset[4] as number,\r\n\t\t\tset[5] as number\r\n\t\t);\r\n\t};\r\n\r\n};\r\n\r\n\r\nconst cspVersion = {\r\n\tdate_to_str: dateToStr,\r\n\tstr_to_date: strToDate\r\n};\r\n\r\nexport default cspVersion;","/*\r\n %d - the day as a number with a leading zero ( 01 to 31 );\r\n %j - the day as a number without a leading zero ( 1 to 31 );\r\n %D - the day as an abbreviation ( Sun to Sat );\r\n %l - the day as a full name ( Sunday to Saturday );\r\n %W - the ISO-8601 week number of the year. Weeks start on Monday; 1)\r\n %m - the month as a number without a leading zero ( 1 to 12 );\r\n %n - the month as a number with a leading zero ( 01 to 12);\r\n %M - the month as an abbreviation ( Jan to Dec );\r\n %F - the month as a full name ( January to December );\r\n %y - the year as a two-digit number ( 00 to 99 );\r\n %Y - the year as a four-digit number ( 1900–9999 );\r\n %h - the hour based on the 12-hour clock ( 00 to 11 );\r\n %H - the hour based on the 24-hour clock ( 00 to 23 );\r\n %i - the minute as a number with a leading zero ( 00 to 59 );\r\n %s - the second as a number without a leading zero ( 00 to 59 ); 2)\r\n %a - displays am (for times from midnight until noon) and pm (for times from noon until midnight);\r\n %A - displays AM (for times from midnight until noon) and PM (for times from noon until midnight).\r\n*/\r\n\r\nimport fastVersion from \"./date_parsers/fast_version\";\r\nimport cspCompliantVersion from \"./date_parsers/csp_compliant_version\";\r\n\r\nexport default function(gantt) {\r\n\tvar canUseCsp = null;\r\n\tfunction cspAutoCheck() {\r\n\t\ttry {\r\n\t\t\tnew Function(\"canUseCsp = false;\");\r\n\t\t} catch(e) {\r\n\t\t\tcanUseCsp = true;\r\n\t\t}\r\n\t}\r\n\tfunction useCsp() {\r\n\t\tvar result = false;\r\n\t\tif (gantt.config.csp === \"auto\") {\r\n\t\t\tif(canUseCsp === null) {\r\n\t\t\t\tcspAutoCheck();\r\n\t\t\t}\r\n\t\t\tresult = canUseCsp;\r\n\t\t} else {\r\n\t\t\tresult = gantt.config.csp;\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tvar dateHelper = {\r\n\t\tinit: function () {\r\n\t\t\tvar locale = gantt.locale;\r\n\r\n\t\t\tvar s = locale.date.month_short;\r\n\t\t\tvar t = locale.date.month_short_hash = {};\r\n\t\t\tfor (var i = 0; i < s.length; i++)\r\n\t\t\t\tt[s[i]] = i;\r\n\r\n\t\t\tvar s = locale.date.month_full;\r\n\t\t\tvar t = locale.date.month_full_hash = {};\r\n\t\t\tfor (var i = 0; i < s.length; i++)\r\n\t\t\t\tt[s[i]] = i;\r\n\t\t},\r\n\t\tdate_part: function (date) {\r\n\t\t\tvar old = new Date(date);\r\n\t\t\tdate.setHours(0);\r\n\t\t\tthis.hour_start(date);\r\n\t\t\tif (date.getHours() && //shift to yesterday on dst\r\n\t\t\t\t(date.getDate() < old.getDate() || date.getMonth() < old.getMonth() || date.getFullYear() < old.getFullYear()))\r\n\t\t\t\tdate.setTime(date.getTime() + 60 * 60 * 1000 * (24 - date.getHours()));\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\ttime_part: function (date) {\r\n\t\t\treturn (date.valueOf() / 1000 - date.getTimezoneOffset() * 60) % 86400;\r\n\t\t},\r\n\t\tweek_start: function (date) {\r\n\t\t\tvar shift = date.getDay();\r\n\t\t\tif (gantt.config.start_on_monday) {\r\n\t\t\t\tif (shift === 0) shift = 6;\r\n\t\t\t\telse shift--;\r\n\t\t\t}\r\n\t\t\treturn this.date_part(this.add(date, -1 * shift, \"day\"));\r\n\t\t},\r\n\t\tmonth_start: function (date) {\r\n\t\t\tdate.setDate(1);\r\n\t\t\treturn this.date_part(date);\r\n\t\t},\r\n\t\tquarter_start: function (date) {\r\n\t\t\tthis.month_start(date);\r\n\t\t\tvar m = date.getMonth(),\r\n\t\t\t\tres_month;\r\n\r\n\t\t\tif (m >= 9) {\r\n\t\t\t\tres_month = 9;\r\n\t\t\t} else if (m >= 6) {\r\n\t\t\t\tres_month = 6;\r\n\t\t\t} else if (m >= 3) {\r\n\t\t\t\tres_month = 3;\r\n\t\t\t} else {\r\n\t\t\t\tres_month = 0;\r\n\t\t\t}\r\n\r\n\t\t\tdate.setMonth(res_month);\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\tyear_start: function (date) {\r\n\t\t\tdate.setMonth(0);\r\n\t\t\treturn this.month_start(date);\r\n\t\t},\r\n\t\tday_start: function (date) {\r\n\t\t\treturn this.date_part(date);\r\n\t\t},\r\n\t\thour_start: function (date) {\r\n\t\t\tif (date.getMinutes())\r\n\t\t\t\tdate.setMinutes(0);\r\n\t\t\tthis.minute_start(date);\r\n\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\tminute_start: function (date) {\r\n\t\t\tif (date.getSeconds())\r\n\t\t\t\tdate.setSeconds(0);\r\n\t\t\tif (date.getMilliseconds())\r\n\t\t\t\tdate.setMilliseconds(0);\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\t_add_days: function (modifiedDate, inc, originalDate) {\r\n\r\n\t\t\tmodifiedDate.setDate(modifiedDate.getDate() + inc);\r\n\t\t\tvar incCondition = inc >= 0;\r\n\t\t\tvar getHoursCondition = !originalDate.getHours() && modifiedDate.getHours(); //shift to yesterday on dst\r\n\t\t\tvar getDateCondition = (modifiedDate.getDate() <= originalDate.getDate() || modifiedDate.getMonth() < originalDate.getMonth() || modifiedDate.getFullYear() < originalDate.getFullYear());\r\n\t\t\tif (incCondition && getHoursCondition && getDateCondition){\r\n\t\t\t\tmodifiedDate.setTime(modifiedDate.getTime() + 60 * 60 * 1000 * (24 - modifiedDate.getHours()));\r\n\t\t\t}\r\n\t\t\tvar worktimeCalculation = inc > 1;\r\n\t\t\tif (worktimeCalculation && getHoursCondition){\r\n\t\t\t\t// try to shift the modified Date to 00:00\r\n\t\t\t\tmodifiedDate.setHours(0);\r\n\t\t\t}\r\n\t\t\treturn modifiedDate;\r\n\t\t},\r\n\r\n\t\tadd: function (date, inc, mode) {\r\n\t\t\t/*jsl:ignore*/\r\n\t\t\tvar ndate = new Date(date.valueOf());\r\n\t\t\tswitch (mode) {\r\n\t\t\t\tcase \"day\":\r\n\t\t\t\t\tndate = this._add_days(ndate, inc, date);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"week\":\r\n\t\t\t\t\tndate = this._add_days(ndate, inc * 7, date);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"month\":\r\n\t\t\t\t\tndate.setMonth(ndate.getMonth() + inc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"year\":\r\n\t\t\t\t\tndate.setYear(ndate.getFullYear() + inc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"hour\":\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t\tadding hours/minutes via setHour(getHour() + inc) gives weird result when\r\n\t\t\t\t\t\tadding one hour to the time before switch to a Daylight Saving time\r\n\r\n\t\t\t\t\t\texample: //Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\r\n\t\t\t\t\t\tnew Date(2014, 02, 30, 1).setHours(2)\r\n\t\t\t\t\t\t>>Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\r\n\r\n\t\t\t\t\t\tsetTime seems working as expected\r\n\t\t\t\t\t */\r\n\t\t\t\t\tndate.setTime(ndate.getTime() + inc * 60 * 60 * 1000);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"minute\":\r\n\r\n\t\t\t\t\tndate.setTime(ndate.getTime() + inc * 60 * 1000);\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn this[\"add_\" + mode](date, inc, mode);\r\n\t\t\t}\r\n\t\t\treturn ndate;\r\n\t\t\t/*jsl:end*/\r\n\t\t},\r\n\t\tadd_quarter: function (date, inc) {\r\n\t\t\treturn this.add(date, inc * 3, \"month\");\r\n\t\t},\r\n\r\n\t\tto_fixed: function (num) {\r\n\t\t\tif (num < 10) return \"0\" + num;\r\n\t\t\treturn num;\r\n\t\t},\r\n\t\tcopy: function (date) {\r\n\t\t\treturn new Date(date.valueOf());\r\n\t\t},\r\n\t\tdate_to_str: function (format, utc) {\r\n\t\t\tvar result = fastVersion;\r\n\t\t\tif (useCsp()) {\r\n\t\t\t\tresult = cspCompliantVersion;\r\n\t\t\t}\r\n\t\t\treturn result.date_to_str(format, utc, gantt);\r\n\t\t},\r\n\t\tstr_to_date: function (format, utc) {\r\n\t\t\tvar result = fastVersion;\r\n\t\t\tif (useCsp()) {\r\n\t\t\t\tresult = cspCompliantVersion;\r\n\t\t\t}\r\n\t\t\treturn result.str_to_date(format, utc, gantt);\r\n\t\t},\r\n\t\tgetISOWeek: function (ndate) {\r\n\t\t\treturn gantt.date._getWeekNumber(ndate, true);\r\n\t\t},\r\n\t\t_getWeekNumber: function(ndate, isoWeek){\r\n\t\t\tif (!ndate) return false;\r\n\t\t\tvar nday = ndate.getDay();\r\n\t\t\tif(isoWeek){\r\n\t\t\t\tif (nday === 0) {\r\n\t\t\t\t\tnday = 7;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar first_thursday = new Date(ndate.valueOf());\r\n\t\t\tfirst_thursday.setDate(ndate.getDate() + (4 - nday));\r\n\t\t\tvar year_number = first_thursday.getFullYear(); // year of the first Thursday\r\n\t\t\tvar ordinal_date = Math.round((first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date)\r\n\t\t\tvar week_number = 1 + Math.floor(ordinal_date / 7);\r\n\t\t\treturn week_number;\r\n\t\t},\r\n\r\n\t\tgetWeek: function(ndate){\r\n\t\t\treturn gantt.date._getWeekNumber(ndate, gantt.config.start_on_monday);\r\n\t\t},\r\n\t\tgetUTCISOWeek: function (ndate) {\r\n\t\t\treturn gantt.date.getISOWeek(ndate);\r\n\t\t},\r\n\t\tconvert_to_utc: function (date) {\r\n\t\t\treturn new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n\t\t},\r\n\t\tparseDate: function (date, format) {\r\n\t\t\t// raw date may be of type string, number (timestamp) or something else\r\n\t\t\t// do not check for instanceof Date explicitly, since we may swap native date with different date implementation at some point\r\n\t\t\tif (date && !date.getFullYear) {\r\n\t\t\t\tif (typeof(format) !== \"function\") {\r\n\t\t\t\t\tif (typeof(format) === \"string\") {\r\n\t\t\t\t\t\tif (format === \"parse_date\" || format === \"xml_date\") {\r\n\t\t\t\t\t\t\tformat = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date : gantt.templates.parse_date;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tformat = gantt.defined(gantt.templates[format]) ? gantt.templates[format] : gantt.date.str_to_date(format);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tformat = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date : gantt.templates.parse_date;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (date) {\r\n\t\t\t\t\tdate = format(date);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdate = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t}\r\n\t};\r\n\treturn dateHelper;\r\n};","class t{constructor(t){const{url:e,token:s}=t;this._url=e,this._token=s,this._mode=1,this._seed=1,this._queue=[],this.data={},this.api={},this._events={}}headers(){return{Accept:\"application/json\",\"Content-Type\":\"application/json\",\"Remote-Token\":this._token}}fetch(t,e){const s={credentials:\"include\",headers:this.headers()};return e&&(s.method=\"POST\",s.body=e),fetch(t,s).then(t=>t.json())}load(t){return t&&(this._url=t),this.fetch(this._url).then(t=>this.parse(t))}parse(t){const{key:e,websocket:s}=t;e&&(this._token=t.key);for(const e in t.data)this.data[e]=t.data[e];for(const e in t.api){const s=this.api[e]={},i=t.api[e];for(const t in i)s[t]=this._wrapper(e+\".\"+t)}return s&&this.connect(),this}connect(){const t=this._socket;t&&(this._socket=null,t.onclose=function(){},t.close()),this._mode=2,this._socket=function(t,e,s,i){let n=e;\"/\"===n[0]&&(n=document.location.protocol+\"//\"+document.location.host+e);n=n.replace(/^http(s|):/,\"ws$1:\");const o=-1!=n.indexOf(\"?\")?\"&\":\"?\";n=`${n}${o}token=${s}&ws=1`;const r=new WebSocket(n);return r.onclose=()=>setTimeout(()=>t.connect(),2e3),r.onmessage=e=>{const s=JSON.parse(e.data);switch(s.action){case\"result\":t.result(s.body,[]);break;case\"event\":t.fire(s.body.name,s.body.value);break;case\"start\":i();break;default:t.onError(s.data)}},r}(this,this._url,this._token,()=>(this._mode=3,this._send(),this._resubscribe(),this))}_wrapper(t){return function(){const e=[].slice.call(arguments);let s=null;const i=new Promise((i,n)=>{s={data:{id:this._uid(),name:t,args:e},status:1,resolve:i,reject:n},this._queue.push(s)});return this.onCall(s,i),3===this._mode?this._send(s):setTimeout(()=>this._send(),1),i}.bind(this)}_uid(){return(this._seed++).toString()}_send(t){if(2==this._mode)return void setTimeout(()=>this._send(),100);const e=t?[t]:this._queue.filter(t=>1===t.status);if(!e.length)return;const s=e.map(t=>(t.status=2,t.data));3!==this._mode?this.fetch(this._url,JSON.stringify(s)).catch(t=>this.onError(t)).then(t=>this.result(t,s)):this._socket.send(JSON.stringify({action:\"call\",body:s}))}result(t,e){const s={};if(t)for(let e=0;e=0;t--){const e=this._queue[t],i=s[e.data.id];i&&(this.onResponse(e,i),i.error?e.reject(i.error):e.resolve(i.data),this._queue.splice(t,1))}}on(t,e){const s=this._uid();let i=this._events[t];const n=!!i;return n||(i=this._events[t]=[]),i.push({id:s,handler:e}),n||3!=this._mode||this._socket.send(JSON.stringify({action:\"subscribe\",name:t})),{name:t,id:s}}_resubscribe(){if(3==this._mode)for(const t in this._events)this._socket.send(JSON.stringify({action:\"subscribe\",name:t}))}detach(t){if(!t){if(3==this._mode)for(const t in this._events)this._socket.send(JSON.stringify({action:\"unsubscribe\",key:t}));return void(this._events={})}const{id:e,name:s}=t,i=this._events[s];if(i){const t=i.filter(t=>t.id!=e);t.length?this._events[s]=t:(delete this._events[s],3==this._mode&&this._socket.send(JSON.stringify({action:\"unsubscribe\",name:s})))}}fire(t,e){const s=this._events[t];if(s)for(let t=0;t res.json());\r\n };\r\n\r\n this._ready = remote.load().then((back) => (this._remote = back));\r\n\r\n function ready() {\r\n return this._ready;\r\n }\r\n \r\n function on(name, handler) {\r\n this.ready().then((back) => {\r\n if (typeof name === \"string\") back.on(name, handler);\r\n else {\r\n for (const key in name) {\r\n back.on(key, name[key]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.ready = ready;\r\n this.on = on;\r\n };\r\n\r\n","function checkTimeout(host, updPerSecond){\r\n\tif (!updPerSecond)\r\n\t\treturn true;\r\n\t\r\n\tif (host._on_timeout)\r\n\t\treturn false;\r\n\t\r\n\tvar timeout = Math.ceil(1000/updPerSecond);\r\n\tif (timeout < 2) return true;\r\n\r\n\tsetTimeout(function(){\r\n\t\tdelete host._on_timeout;\r\n\t}, timeout);\r\n\r\n\thost._on_timeout = true;\r\n\treturn true;\r\n}\r\n\r\nexport default checkTimeout;","import * as utils from \"../../utils/utils\";\r\n\r\nvar StateService = (function(){\r\n\tvar stateProviders = {};\r\n\r\n\tfunction getState(name){\r\n\t\tvar provider = stateProviders[name];\r\n\t\tif(provider){\r\n\t\t\treturn stateProviders[name].method();\r\n\t\t}else{\r\n\t\t\tvar res = {};\r\n\t\t\tfor(var i in stateProviders){\r\n\t\t\t\tif(!stateProviders[i].internal)\r\n\t\t\t\t\tutils.mixin(res, stateProviders[i].method(), true);\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction registerProvider(name, provider, internal){\r\n\t\tstateProviders[name] = { method: provider, internal: internal};\r\n\t}\r\n\r\n\tfunction unregisterProvider(name){\r\n\t\tdelete stateProviders[name];\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetState: getState,\r\n\t\tregisterProvider: registerProvider,\r\n\t\tunregisterProvider: unregisterProvider\r\n\t};\r\n});\r\n\r\nexport default StateService;\r\n\r\n","// eslint-disable-next-line no-restricted-globals\r\nexport default Promise;","import * as utils from \"../../utils/utils\";\r\nimport {replaceValidZeroId} from \"../../utils/helpers\";\r\n\r\nvar createTasksDatastoreFacade = function(){\r\n\treturn {\r\n\tgetTask: function (id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tthis.assert(id, \"Invalid argument for gantt.getTask\");\r\n\t\tvar task = this.$data.tasksStore.getItem(id);\r\n\t\tthis.assert(task, \"Task not found id=\" + id);\r\n\t\treturn task;\r\n\t},\r\n\tgetTaskByTime: function (from, to) {\r\n\t\tvar p = this.$data.tasksStore.getItems();\r\n\r\n\t\tvar res = [];\r\n\r\n\t\tif (!(from || to)) {\r\n\t\t\tres = p;\r\n\t\t} else {\r\n\t\t\tfrom = +from || -Infinity;\r\n\t\t\tto = +to || Infinity;\r\n\t\t\tfor (var t = 0; t < p.length; t++){\r\n\t\t\t\tvar task = p[t];\r\n\t\t\t\tif (+task.start_date < to && +task.end_date > from)\r\n\t\t\t\t\tres.push(task);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\tisTaskExists: function (id) {\r\n\t\tif(!this.$data || !this.$data.tasksStore){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn this.$data.tasksStore.exists(id);\r\n\t},\r\n\tupdateTask: function (id, item) {\r\n\t\tif (!utils.defined(item)) item = this.getTask(id);\r\n\t\tthis.$data.tasksStore.updateItem(id, item);\r\n\t\tif(this.isTaskExists(id))\r\n\t\t\tthis.refreshTask(id);\r\n\t},\r\n\taddTask: function (item, parent, index) {\r\n\t\tif (!utils.defined(item.id))\r\n\t\t\titem.id = utils.uid();\r\n\r\n\t\t//GS-761: assert unique ID\r\n\t\tif (this.isTaskExists(item.id)){\r\n\t\t\tvar task = this.getTask(item.id);\r\n\t\t\tif (task.$index != item.$index) {\r\n\t\t\t\t// Someone may try to mistakenly add a task with the same ID, and most likely\r\n\t\t\t\t// use the string format for the dates. Gantt shouldn't break in this scenario\r\n\t\t\t\tif (item.start_date && typeof item.start_date === \"string\"){\r\n\t\t\t\t\titem.start_date = this.date.parseDate(item.start_date, \"parse_date\");\r\n\t\t\t\t}\r\n\t\t\t\tif (item.end_date && typeof item.end_date === \"string\"){\r\n\t\t\t\t\titem.end_date = this.date.parseDate(item.end_date, \"parse_date\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.$data.tasksStore.updateItem(item.id, item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (!utils.defined(parent)) parent = this.getParent(item) || 0;\r\n\t\tif (!this.isTaskExists(parent)) parent = this.config.root_id;\r\n\t\tthis.setParent(item, parent);\r\n\t\treturn this.$data.tasksStore.addItem(item, index, parent);\r\n\t},\r\n\tdeleteTask: function (id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\treturn this.$data.tasksStore.removeItem(id);\r\n\t},\r\n\tgetTaskCount: function () {\r\n\t\treturn this.$data.tasksStore.count();\r\n\t},\r\n\tgetVisibleTaskCount: function () {\r\n\t\treturn this.$data.tasksStore.countVisible();\r\n\t},\r\n\tgetTaskIndex: function (id) {\r\n\t\treturn this.$data.tasksStore.getBranchIndex(id);\r\n\t},\r\n\tgetGlobalTaskIndex: function (id) {\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tthis.assert(id, \"Invalid argument\");\r\n\t\treturn this.$data.tasksStore.getIndexById(id);\r\n\t},\r\n\teachTask: function (code, parent, master) {\r\n\t\treturn this.$data.tasksStore.eachItem(utils.bind(code, master||this), parent);\r\n\t},\r\n\teachParent: function (callback, startTask, master) {\r\n\t\treturn this.$data.tasksStore.eachParent(utils.bind(callback, master || this), startTask);\r\n\t},\r\n\tchangeTaskId: function (oldid, newid) {\r\n\t\tthis.$data.tasksStore.changeId(oldid, newid);\r\n\t\tvar task = this.$data.tasksStore.getItem(newid);\r\n\r\n\t\tvar links = [];\r\n\r\n\t\tif (task.$source) {\r\n\t\t\tlinks = links.concat(task.$source);\r\n\t\t}\r\n\t\tif (task.$target) {\r\n\t\t\tlinks = links.concat(task.$target);\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < links.length; i++) {\r\n\t\t\tvar link = this.getLink(links[i]);\r\n\t\t\tif (link.source == oldid) {\r\n\t\t\t\tlink.source = newid;\r\n\t\t\t}\r\n\t\t\tif (link.target == oldid) {\r\n\t\t\t\tlink.target = newid;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tcalculateTaskLevel: function (item) {\r\n\t\treturn this.$data.tasksStore.calculateItemLevel(item);\r\n\t},\r\n\tgetNext: function (id) {\r\n\t\treturn this.$data.tasksStore.getNext(id);\r\n\t},\r\n\tgetPrev: function (id) {\r\n\t\treturn this.$data.tasksStore.getPrev(id);\r\n\t},\r\n\tgetParent: function (id) {\r\n\t\treturn this.$data.tasksStore.getParent(id);\r\n\t},\r\n\tsetParent: function (task, new_pid, silent) {\r\n\t\treturn this.$data.tasksStore.setParent(task, new_pid, silent);\r\n\t},\r\n\tgetSiblings: function (id) {\r\n\t\treturn this.$data.tasksStore.getSiblings(id).slice();\r\n\t},\r\n\tgetNextSibling: function (id) {\r\n\t\treturn this.$data.tasksStore.getNextSibling(id);\r\n\t},\r\n\tgetPrevSibling: function (id) {\r\n\t\treturn this.$data.tasksStore.getPrevSibling(id);\r\n\t},\r\n\tgetTaskByIndex: function(index){\r\n\t\tvar id = this.$data.tasksStore.getIdByIndex(index);\r\n\t\tif(this.isTaskExists(id)){\r\n\t\t\treturn this.getTask(id);\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t},\r\n\tgetChildren: function (id) {\r\n\t\tif(!this.hasChild(id)){\r\n\t\t\treturn [];\r\n\t\t}else{\r\n\t\t\treturn this.$data.tasksStore.getChildren(id).slice();\r\n\t\t}\r\n\t},\r\n\thasChild: function (id) {\r\n\t\treturn this.$data.tasksStore.hasChild(id);\r\n\t},\r\n\topen: function (id) {\r\n\t\tthis.$data.tasksStore.open(id);\r\n\t},\r\n\tclose: function (id) {\r\n\t\tthis.$data.tasksStore.close(id);\r\n\t},\r\n\tmoveTask: function (sid, tindex, parent) {\r\n\t\tparent = replaceValidZeroId(parent, this.config.root_id);\r\n\t\treturn this.$data.tasksStore.move.apply(this.$data.tasksStore, arguments);\r\n\t},\r\n\tsort: function(field, desc, parent, silent) {\r\n\t\tvar render = !silent;//4th argument to cancel redraw after sorting\r\n\r\n\t\tthis.$data.tasksStore.sort(field, desc, parent);\r\n\t\tthis.callEvent(\"onAfterSort\", [field, desc, parent]);\r\n\r\n\t\tif (render) {\r\n\t\t\tthis.render();\r\n\t\t}\r\n\t}\r\n};\r\n};\r\n\r\nexport default createTasksDatastoreFacade;\r\n\r\n\r\n","import * as utils from \"../../utils/utils\";\r\n\r\nvar $powerArray = {\r\n\t$create: function(array){\r\n\t\treturn utils.mixin(array || [], this);\r\n\t},\r\n\t//remove element at specified position\r\n\t$removeAt:function(pos,len){\r\n\t\tif (pos>=0) this.splice(pos,(len||1));\r\n\t},\r\n\t//find element in collection and remove it\r\n\t$remove:function(value){\r\n\t\tthis.$removeAt(this.$find(value));\r\n\t},\r\n\t//add element to collection at specific position\r\n\t$insertAt:function(data,pos){\r\n\t\tif (!pos && pos!==0) \t//add to the end by default\r\n\t\t\tthis.push(data);\r\n\t\telse {\r\n\t\t\tvar b = this.splice(pos,(this.length-pos));\r\n\t\t\tthis[pos] = data;\r\n\t\t\tthis.push.apply(this,b); //reconstruct array without loosing this pointer\r\n\t\t}\r\n\t},\r\n\t//return index of element, -1 if it doesn't exists\r\n\t$find:function(data){\r\n\t\tfor (var i=0; i data_size){\r\n\t\t\t\t//dhx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");\r\n\t\t\t\tindex = Math.min(order.length,index);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t//gantt.assert(!this.exists(id), \"Not unique ID\");\r\n\r\n\t\tthis.pull[item.id]=item;\r\n\t\tif (!this.isSilent()){\r\n\t\t\tthis._updateOrder(function(){\r\n\t\t\t\tif(this.$find(item.id) === -1)\r\n\t\t\t\t\tthis.$insertAt(item.id,index);\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.filter();\r\n\t\t//order.$insertAt(item.id,index);\r\n\t},\r\n\r\n\r\n\tisVisible: function(id){\r\n\t\treturn this.visibleOrder.$find(id) > -1;\r\n\t},\r\n\tgetVisibleItems: function(){\r\n\t\treturn this.getIndexRange();\r\n\t},\r\n\r\n\taddItem: function(item, index){\r\n\t\tif (!utils.defined(item.id))\r\n\t\t\titem.id = utils.uid();\r\n\r\n\t\tif(this.$initItem){\r\n\t\t\titem = this.$initItem(item);\r\n\t\t}\r\n\r\n\t\tif (!this.isSilent()){\r\n\t\t\tif (this.callEvent(\"onBeforeAdd\", [item.id, item]) === false) return false;\r\n\t\t}\r\n\r\n\r\n\t\tthis._addItemInner(item, index);\r\n\r\n\t\tif (!this.isSilent()){\r\n\t\t\tthis.callEvent(\"onAfterAdd\",[item.id, item]);\r\n\t\t\t//repaint signal\r\n\t\t\tthis.callEvent(\"onStoreUpdated\",[item.id,item,\"add\"]);\r\n\t\t}\r\n\t\treturn item.id;\r\n\t},\r\n\r\n\t_changeIdInner: function(oldId, newId){\r\n\t\tif(this.pull[oldId])\r\n\t\t\tthis.pull[newId] = this.pull[oldId];\r\n\r\n\t\tvar visibleOrder = this._searchVisibleOrder[oldId];\r\n\t\tthis.pull[newId].id = newId;\r\n\t\tthis._updateOrder(function(){\r\n\t\t\tthis[this.$find(oldId)] = newId;\r\n\t\t});\r\n\t\tthis._searchVisibleOrder[newId] = visibleOrder;\r\n\t\tdelete this._searchVisibleOrder[oldId];\r\n\r\n\t\t//this.visibleOrder[this.visibleOrder.$find(oldId)]=newId;\r\n\t\tdelete this.pull[oldId];\r\n\t},\r\n\tchangeId: function(oldId, newId){\r\n\t\tthis._changeIdInner(oldId, newId);\r\n\r\n\t\tthis.callEvent(\"onIdChange\", [oldId, newId]);\r\n\r\n\t},\r\n\texists: function(id){\r\n\t\treturn !!(this.pull[id]);\r\n\t},\r\n\r\n\t_moveInner: function(sindex, tindex){\r\n\t\tvar id = this.getIdByIndex(sindex);\r\n\r\n\t\tthis._updateOrder(function(){\r\n\t\t\tthis.$removeAt(sindex);\r\n\t\t\tthis.$insertAt(id,Math.min(this.length, tindex));\r\n\t\t});\r\n\t\t//this.visibleOrder.$removeAt(sindex);\t//remove at old position\r\n\t\t//if (sindex=0 && tindex>=0, \"DataStore::move\",\"Incorrect indexes\");\r\n\r\n\t\tvar id = this.getIdByIndex(sindex);\r\n\t\tvar obj = this.getItem(id);\r\n\t\tthis._moveInner(sindex, tindex);\r\n\r\n\t\tif (!this.isSilent()) {\r\n\t\t\t//repaint signal\r\n\t\t\tthis.callEvent(\"onStoreUpdated\", [obj.id, obj, \"move\"]);\r\n\t\t}\r\n\t},\r\n\tclearAll: function(){\r\n\t\tif(this.$destroyed){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// GS-956 We need to unselect the resource as its ID is cached\r\n\t\tthis.silent(function(){\r\n\t\t\tthis.unselect();\r\n\t\t});\r\n\t\tthis.pull = {};\r\n\t\tthis.visibleOrder = powerArray.$create();\r\n\t\tthis.fullOrder = powerArray.$create();\r\n\t\tif (this.isSilent()) return;\r\n\t\tthis.callEvent(\"onClearAll\",[]);\r\n\t\tthis.refresh();\r\n\t},\r\n\r\n\tsilent:function(code, master){\r\n\t\tvar alreadySilent = false;\r\n\t\tif(this.isSilent()) {\r\n\t\t\talreadySilent = true;\r\n\t\t}\r\n\t\tthis._skip_refresh = true;\r\n\t\tcode.call(master||this);\r\n\t\t\r\n\t\tif (!alreadySilent) {\r\n\t\t\tthis._skip_refresh = false;\r\n\t\t}\r\n\t},\r\n\tisSilent: function(){\r\n\t\treturn !!this._skip_refresh;\r\n\t},\r\n\r\n\tarraysEqual: function (arr1, arr2) {\r\n\t\tif(arr1.length !== arr2.length)\r\n\t\t\treturn false;\r\n\t\tfor(var i = 0; i < arr1.length; i++) {\r\n\t\t\tif(arr1[i] !== arr2[i])\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\trefresh: function(id, quick){\r\n\t\tif (this.isSilent()) return;\r\n\r\n\t\tvar item;\r\n\t\tif(id){\r\n\t\t\titem = this.getItem(id);\r\n\t\t}\r\n\r\n\t\tvar args;\r\n\t\tif (id){\r\n\t\t\targs = [id, item, \"paint\"];\r\n\t\t}else{\r\n\t\t\targs = [null,null,null];\r\n\t\t}\r\n\r\n\t\tif(this.callEvent(\"onBeforeStoreUpdate\", args) === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar skipFilter = this._quick_refresh && !this._mark_recompute;\r\n\t\tthis._mark_recompute = false;\r\n\t\tif(id){\r\n\t\t\t// if item changes visible order (e.g. expand-collapse branch) - do a complete repaint\r\n\t\t\tif(!quick && !skipFilter){\r\n\t\t\t\tvar oldOrder = this.visibleOrder;\r\n\t\t\t\tthis.filter();\r\n\t\t\t\tif(!this.arraysEqual(oldOrder, this.visibleOrder)){\r\n\t\t\t\t\tid = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(!skipFilter){\r\n\t\t\tthis.filter();\r\n\t\t}\r\n\r\n\t\tif (id){\r\n\t\t\targs = [id, item, \"paint\"];\r\n\t\t}else{\r\n\t\t\targs = [null,null,null];\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onStoreUpdated\",args);\r\n\t},\r\n\r\n\tcount: function(){\r\n\t\treturn this.fullOrder.length;\r\n\t},\r\n\tcountVisible: function(){\r\n\t\treturn this.visibleOrder.length;\r\n\t},\r\n\r\n\tsort: function(sort){},\r\n\r\n\tserialize: function(){},\r\n\r\n\teachItem: function(code){\r\n\t\tfor (var i=0; i= item.$level){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\twhile (item && this.exists(pid)) {\r\n\t\t\t\titem = this.getItem(pid);\r\n\r\n\t\t\t\tif (item && item.id == parentId)\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tpid = this.getParent(item);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tgetSiblings: function(id){\r\n\t\t\tif(!this.exists(id)){\r\n\t\t\t\treturn powerArray.$create();\r\n\t\t\t}\r\n\t\t\tvar parent = this.getParent(id);\r\n\t\t\treturn this.getChildren(parent);\r\n\r\n\t\t},\r\n\t\tgetNextSibling: function(id){\r\n\t\t\tvar siblings = this.getSiblings(id);\r\n\t\t\tfor(var i= 0, len = siblings.length; i < len; i++){\r\n\t\t\t\tif(siblings[i] == id){\r\n\t\t\t\t\tvar nextSibling = siblings[i+1];\r\n\t\t\t\t\tif (nextSibling === 0 && i > 0){\r\n\t\t\t\t\t\tnextSibling = \"0\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn nextSibling || null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tgetPrevSibling: function(id){\r\n\t\t\tvar siblings = this.getSiblings(id);\r\n\t\t\tfor(var i= 0, len = siblings.length; i < len; i++){\r\n\t\t\t\tif(siblings[i] == id){\r\n\t\t\t\t\tvar previousSibling = siblings[i-1];\r\n\t\t\t\t\tif (previousSibling === 0 && i > 0){\r\n\t\t\t\t\t\tpreviousSibling = \"0\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn previousSibling || null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tgetParent: function(id){\r\n\t\t\tvar item = null;\r\n\t\t\tif(id.id !== undefined){\r\n\t\t\t\titem = id;\r\n\t\t\t}else{\r\n\t\t\t\titem = this.getItem(id);\r\n\t\t\t}\r\n\r\n\t\t\tvar parent;\r\n\t\t\tif(item){\r\n\t\t\t\tparent = item[this.$parentProperty];\r\n\t\t\t}else{\r\n\t\t\t\tparent = this.$getRootId();\r\n\t\t\t}\r\n\t\t\treturn parent;\r\n\r\n\t\t},\r\n\r\n\t\tclearAll: function(){\r\n\t\t\tthis._branches = {};\r\n\t\t\tDataStore.prototype.clearAll.call(this);\r\n\t\t},\r\n\r\n\t\tcalculateItemLevel: function(item){\r\n\t\t\tvar level = 0;\r\n\t\t\tthis.eachParent(function(){\r\n\t\t\t\tlevel++;\r\n\t\t\t}, item);\r\n\t\t\treturn level;\r\n\t\t},\r\n\r\n\t\t_setParentInner: function(item, new_pid, silent){\r\n\t\t\tif(!silent){\r\n\t\t\t\tif(item.hasOwnProperty(\"$rendered_parent\")){\r\n\t\t\t\t\tthis._move_branch(item, item.$rendered_parent, new_pid);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis._move_branch(item, item[this.$parentProperty], new_pid);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetParent: function(item, new_pid, silent){\r\n\t\t\tthis._setParentInner(item, new_pid, silent);\r\n\r\n\t\t\titem[this.$parentProperty] = new_pid;\r\n\t\t},\r\n\r\n\t\t_eachItemCached: function(code, cache){\r\n\t\t\tfor(var i = 0, len = cache.length; i < len; i++){\r\n\t\t\t\tcode.call(this, cache[i]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_eachItemIterate: function(code, startId, cache){\r\n\t\t\tvar itemsStack = this.getChildren(startId);\r\n\t\t\tif(itemsStack.length){\r\n\t\t\t\titemsStack = itemsStack.slice().reverse();\r\n\t\t\t}\r\n\t\t\twhile(itemsStack.length){\r\n\t\t\t\tvar itemId = itemsStack.pop();\r\n\t\t\t\tvar item = this.getItem(itemId);\r\n\t\t\t\tcode.call(this, item);\r\n\t\t\t\tif(cache){\r\n\t\t\t\t\tcache.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.hasChild(item.id)){\r\n\t\t\t\t\tvar children = this.getChildren(item.id);\r\n\t\t\t\t\tvar len = children.length;\r\n\t\t\t\t\tfor(var i = len - 1; i >= 0; i--){\r\n\t\t\t\t\t\titemsStack.push(children[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\teachItem: function(code, parent){\r\n\t\t\tvar rootId = this.$getRootId();\r\n\t\t\tif (!utils.defined(parent)) {\r\n\t\t\t\tparent = rootId;\r\n\t\t\t}\r\n\t\t\tvar startId = replaceValidZeroId(parent, rootId) || rootId;\r\n\r\n\t\t\tvar useCache = false;\r\n\t\t\tvar buildCache = false;\r\n\t\t\tvar cache = null;\r\n\t\t\tif(startId === rootId){\r\n\t\t\t\tif(this._eachItemMainRangeCache){\r\n\t\t\t\t\tuseCache = true;\r\n\t\t\t\t\tcache = this._eachItemMainRangeCache;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbuildCache = true;\r\n\t\t\t\t\tcache = this._eachItemMainRangeCache = [];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(useCache){\r\n\t\t\t\tthis._eachItemCached(code, cache);\r\n\t\t\t}else{\r\n\t\t\t\tthis._eachItemIterate(code, startId, buildCache ? cache : null);\r\n\t\t\t}\r\n\t\t},\r\n\t\teachParent: function(code, startItem) {\r\n\t\t\tvar parentsHash = {};\r\n\t\t\tvar item = startItem;\r\n\t\t\tvar parent = this.getParent(item);\r\n\r\n\t\t\twhile (this.exists(parent)) {\r\n\t\t\t\tif (parentsHash[parent]) {\r\n\t\t\t\t\tthrow new Error(\"Invalid tasks tree. Cyclic reference has been detected on task \" + parent);\r\n\t\t\t\t}\r\n\t\t\t\tparentsHash[parent] = true;\r\n\t\t\t\titem = this.getItem(parent);\r\n\t\t\t\tcode.call(this, item);\r\n\t\t\t\tparent = this.getParent(item);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_add_branch: function(item, index, parent){\r\n\t\t\tvar pid = parent === undefined ? this.getParent(item) : parent;\r\n\t\t\tif (!this.hasChild(pid))\r\n\t\t\t\tthis._branches[pid] = powerArray.$create();\r\n\t\t\tvar branch = this.getChildren(pid);\r\n\t\t\tvar added_already = branch.indexOf(item.id + \"\") > -1 || branch.indexOf(+item.id) > -1;\r\n\t\t\tif(!added_already){\r\n\t\t\t\tif(index*1 == index){\r\n\r\n\t\t\t\t\tbranch.splice(index, 0, item.id);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbranch.push(item.id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem.$rendered_parent = pid;\r\n\t\t\t}\r\n\t\t},\r\n\t\t_move_branch: function(item, old_parent, new_parent){\r\n\t\t\tthis._eachItemMainRangeCache = null;\r\n\t\t\t//this.setParent(item, new_parent);\r\n\t\t\t//this._sync_parent(task);\r\n\t\t\tthis._replace_branch_child(old_parent, item.id);\r\n\t\t\tif(this.exists(new_parent) || new_parent == this.$getRootId()){\r\n\r\n\t\t\t\tthis._add_branch(item, undefined, new_parent);\r\n\t\t\t}else{\r\n\t\t\t\tdelete this._branches[item.id];\r\n\t\t\t}\r\n\t\t\titem.$level = this.calculateItemLevel(item);\r\n\t\t\tthis.eachItem(function(child){\r\n\t\t\t\tchild.$level = this.calculateItemLevel(child);\r\n\t\t\t}, item.id);\r\n\t\t},\r\n\r\n\t\t_replace_branch_child: function(node, old_id, new_id){\r\n\t\t\tvar branch = this.getChildren(node);\r\n\t\t\tif (branch && node !== undefined){\r\n\t\t\t\tvar newbranch = powerArray.$create();\r\n\r\n\t\t\t\tlet index = branch.indexOf(old_id + \"\");\r\n\t\t\t\tif (index == -1 && !isNaN(+old_id)){\r\n\t\t\t\t\tindex = branch.indexOf(+old_id);\r\n\t\t\t\t} \r\n\r\n\t\t\t\tif (index > -1){\r\n\t\t\t\t\tif (new_id){\r\n\t\t\t\t\t\tbranch.splice(index, 1, new_id);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbranch.splice(index, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnewbranch = branch;\r\n\r\n\t\t\t\tthis._branches[node] = newbranch;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tsort: function(field, desc, parent){\r\n\t\t\tif (!this.exists(parent)) {\r\n\t\t\t\tparent = this.$getRootId();\r\n\t\t\t}\r\n\r\n\t\t\tif (!field) field = \"order\";\r\n\t\t\tvar criteria = (typeof(field) == \"string\") ? (function(a, b) {\r\n\t\t\t\tif (a[field] == b[field] ||\r\n\t\t\t\t\t(helpers.isDate(a[field]) && helpers.isDate(b[field]) && a[field].valueOf() == b[field].valueOf()))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar result = a[field] > b[field];\r\n\t\t\t\treturn result ? 1 : -1;\r\n\t\t\t}) : field;\r\n\r\n\t\t\tif (desc) {\r\n\t\t\t\tvar original_criteria = criteria;\r\n\t\t\t\tcriteria = function (a, b) {\r\n\t\t\t\t\treturn original_criteria(b, a);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tvar els = this.getChildren(parent);\r\n\r\n\t\t\tif (els){\r\n\t\t\t\tvar temp = [];\r\n\t\t\t\tfor (var i = els.length - 1; i >= 0; i--)\r\n\t\t\t\t\ttemp[i] = this.getItem(els[i]);\r\n\r\n\t\t\t\ttemp.sort(criteria);\r\n\r\n\t\t\t\tfor (var i = 0; i < temp.length; i++) {\r\n\t\t\t\t\tels[i] = temp[i].id;\r\n\t\t\t\t\tthis.sort(field, desc, els[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfilter: function(rule){\r\n\t\t\tfor(let i in this.pull){\r\n\t\t\t\tconst renderedParent = this.pull[i].$rendered_parent;\r\n\t\t\t\tconst actualParent = this.getParent(this.pull[i]);\r\n\t\t\t\tif(renderedParent !== actualParent){\r\n\t\t\t\t\tthis._move_branch(this.pull[i], renderedParent, actualParent);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn DataStore.prototype.filter.apply(this, arguments);\r\n\t\t},\r\n\r\n\t\topen: function(id){\r\n\t\t\tif(this.exists(id)){\r\n\t\t\t\tthis.getItem(id).$open = true;\r\n\t\t\t\t// GS-2170. Do not recalculate the indexes and dates as they will be recalculated later\r\n\t\t\t\tthis._skipTaskRecalculation = true;\r\n\t\t\t\tthis.callEvent(\"onItemOpen\", [id]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclose: function(id){\r\n\t\t\tif(this.exists(id)){\r\n\t\t\t\tthis.getItem(id).$open = false;\r\n\t\t\t\t// GS-2170. Do not recalculate the indexes and dates as they will be recalculated later\r\n\t\t\t\tthis._skipTaskRecalculation = true;\r\n\t\t\t\tthis.callEvent(\"onItemClose\", [id]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tdestructor: function(){\r\n\t\t\tDataStore.prototype.destructor.call(this);\r\n\t\t\tthis._branches = null;\r\n\t\t\tthis._indexRangeCache = {};\r\n\t\t\tthis._eachItemMainRangeCache = null;\r\n\t\t}\r\n\t},\r\n\tDataStore.prototype\r\n);\r\n\r\nexport default TreeDataStore;","import env from \"./env\";\r\n\r\nexport default function(gantt){\r\n\treturn env.isNode || !gantt.$root;\r\n};","import isHeadless from \"../../utils/is_headless\";\r\n\r\nconst storeRenderCreator = function(name, gantt){\r\n\r\n\tconst store = gantt.getDatastore(name);\r\n\r\n\tconst itemRepainter = {\r\n\t\trenderItem: function(id, renderer){\r\n\r\n\t\t\tconst renders = renderer.getLayers();\r\n\r\n\t\t\tconst item = store.getItem(id);\r\n\t\t\tif(item && store.isVisible(id)) {\r\n\t\t\t\tfor (let i = 0; i < renders.length; i++)\r\n\t\t\t\t\trenders[i].render_item(item);\r\n\t\t\t}\r\n\t\t},\r\n\t\trenderItems: function(renderer){\r\n\t\t\tconst renderers = renderer.getLayers();\r\n\t\t\tfor (let i = 0; i < renderers.length; i++) {\r\n\t\t\t\trenderers[i].clear();\r\n\t\t\t}\r\n\r\n\t\t\tlet allData = null;\r\n\r\n\t\t\tconst loadedRanges = {};\r\n\t\t\tfor (let i = 0; i < renderers.length; i++) {\r\n\t\t\t\tconst layer = renderers[i];\r\n\t\t\t\tlet layerData;\r\n\t\t\t\tif(layer.get_visible_range){\r\n\r\n\t\t\t\t\tvar range = layer.get_visible_range(store);\r\n\t\t\t\t\tif(range.start !== undefined && range.end !== undefined){\r\n\t\t\t\t\t\tvar key = range.start + \" - \" + range.end;\r\n\t\t\t\t\t\tif(loadedRanges[key]){\r\n\t\t\t\t\t\t\tlayerData = loadedRanges[key];\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tlayerData = store.getIndexRange(range.start, range.end);\r\n\t\t\t\t\t\t\tloadedRanges[key] = layerData;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else if(range.ids !== undefined){\r\n\t\t\t\t\t\tlayerData = range.ids.map(function(id){\r\n\t\t\t\t\t\t\treturn store.getItem(id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthrow new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(!allData){\r\n\t\t\t\t\t\tallData = store.getVisibleItems();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlayerData = allData;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (layer.prepare_data) {\r\n\t\t\t\t\t// GS-1605. Highlight timeline cells below tasks and in an empty chart\r\n\t\t\t\t\tlayer.prepare_data(layerData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trenderers[i].render_items(layerData);\r\n\t\t\t}\r\n\t\t},\r\n\t\tupdateItems: function(layer) {\r\n\t\t\tif(layer.update_items){\r\n\t\t\t\tlet data = [];\r\n\t\t\t\tif(layer.get_visible_range){\r\n\r\n\t\t\t\t\tvar range = layer.get_visible_range(store);\r\n\t\t\t\t\tif(range.start !== undefined && range.end !== undefined){\r\n\t\t\t\t\t\tdata = store.getIndexRange(range.start, range.end);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(range.ids !== undefined){\r\n\t\t\t\t\t\tlet extraDataArr = range.ids.map(function(id){\r\n\t\t\t\t\t\t\treturn store.getItem(id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t// GS-2502: range.ids might not exist in other datastores\r\n\t\t\t\t\t\tif(extraDataArr.length > 0){\r\n\t\t\t\t\t\t\textraDataArr = extraDataArr.filter(element => element !== undefined);\r\n\t\t\t\t\t\t\tdata = data.concat(extraDataArr);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif((range.start == undefined || range.end == undefined) && range.ids == undefined) {\r\n\t\t\t\t\t\tthrow new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdata = store.getVisibleItems();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (layer.prepare_data) {\r\n\t\t\t\t\t// GS-1605. Highlight timeline cells below tasks and in an empty chart\r\n\t\t\t\t\tlayer.prepare_data(data, layer);\r\n\t\t\t\t}\r\n\t\t\t\tlayer.update_items(data);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tstore.attachEvent(\"onStoreUpdated\", function(id, item, action){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\tif(renderer){\r\n\t\t\trenderer.onUpdateRequest = function(layer){\r\n\t\t\t\titemRepainter.updateItems(layer);\r\n\t\t\t};\r\n\t\t}\r\n\t});\r\n\r\n\tfunction skipRepaint(gantt){\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tif(state.getState(\"batchUpdate\").batch_update){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tstore.attachEvent(\"onStoreUpdated\", function(id, item, action){\r\n\t\tif(skipRepaint(gantt)){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(!id || action == \"move\" || action == \"delete\"){\r\n\t\t\tstore.callEvent(\"onBeforeRefreshAll\", []);\r\n\t\t\tstore.callEvent(\"onAfterRefreshAll\", []);\r\n\t\t}else{\r\n\t\t\tstore.callEvent(\"onBeforeRefreshItem\", [item.id]);\r\n\t\t\tstore.callEvent(\"onAfterRefreshItem\", [item.id]);\r\n\t\t}\r\n\t});\r\n\r\n\tstore.attachEvent(\"onAfterRefreshAll\", function(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\tif(renderer && !skipRepaint(gantt)){\r\n\t\t\titemRepainter.renderItems(renderer);\r\n\t\t}\r\n\t});\r\n\tstore.attachEvent(\"onAfterRefreshItem\", function(id){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\tif(renderer){\r\n\t\t\titemRepainter.renderItem(id, renderer);\r\n\t\t}\r\n\t});\r\n\r\n\t// TODO: probably can be done more in a more efficient way\r\n\tstore.attachEvent(\"onItemOpen\", function(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tgantt.render();\r\n\t});\r\n\r\n\tstore.attachEvent(\"onItemClose\", function(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tgantt.render();\r\n\t});\r\n\r\n\tfunction refreshId(renders, oldId, newId, item) {\r\n\t\tfor (let i = 0; i < renders.length; i++) {\r\n\t\t\trenders[i].change_id(oldId, newId);\r\n\t\t}\r\n\t}\r\n\r\n\tstore.attachEvent(\"onIdChange\", function(oldId, newId){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// in case of linked datastores (tasks <-> links), id change should recalculate something in linked datastore before any repaint\r\n\t\t// use onBeforeIdChange for this hook.\r\n\t\t// TODO: use something more reasonable instead\r\n\t\tstore.callEvent(\"onBeforeIdChange\", [oldId, newId]);\r\n\r\n\t\tif(skipRepaint(gantt)){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(!store.isSilent()){\r\n\t\t\tconst renderer = gantt.$services.getService(\"layers\").getDataRender(name);\r\n\t\t\tif(renderer){ // missing check for renderer GS-1814\r\n\t\t\t\trefreshId(renderer.getLayers(), oldId, newId, store.getItem(newId));\r\n\t\t\t\titemRepainter.renderItem(newId, renderer);\r\n\t\t\t}else{\r\n\t\t\t\t// GS-1814 repaint ui to apply new id when the datastore don't have own renderer\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n};\r\n\r\nexport default {\r\n\tbindDataStore: storeRenderCreator\r\n};","import * as utils from \"../../utils/utils\";\r\nimport createTasksFacade from \"./datastore_tasks\";\r\nimport createLinksFacade from \"./datastore_links\";\r\nimport DataStore from \"../datastore/datastore\";\r\nimport TreeDataStore from \"../datastore/treedatastore\";\r\nimport createDatastoreSelect from \"../datastore/select\";\r\nimport datastoreRender from \"../datastore/datastore_render\";\r\nimport isHeadless from \"../../utils/is_headless\";\r\nimport {replaceValidZeroId} from \"../../utils/helpers\";\r\n\r\nfunction getDatastores(){\r\n\tvar storeNames = this.$services.getService(\"datastores\");\r\n\tvar res = [];\r\n\tfor(var i = 0; i < storeNames.length; i++){\r\n\t\tvar store = this.getDatastore(storeNames[i]);\r\n\t\tif(!store.$destroyed){\r\n\t\t\tres.push(store);\r\n\t\t}\r\n\t}\r\n\treturn res;\r\n}\r\n\r\nvar createDatastoreFacade = function(){\r\n\treturn {\r\n\tcreateDatastore: function(config){\r\n\r\n\t\tvar $StoreType = (config.type || \"\").toLowerCase() == \"treedatastore\" ? TreeDataStore : DataStore;\r\n\r\n\t\tif (config) {\r\n\t\t\tvar self = this;\r\n\t\t\tconfig.openInitially = function(){ return self.config.open_tree_initially; };\r\n\t\t\tconfig.copyOnParse = function(){ return self.config.deepcopy_on_parse; };\r\n\t\t}\r\n\r\n\t\tvar store = new $StoreType(config);\r\n\t\tthis.mixin(store, createDatastoreSelect(store));\r\n\r\n\t\tif (config.name) {\r\n\t\t\tvar servicePrefix = \"datastore:\";\r\n\t\t\tvar storeAccessName = servicePrefix + config.name;\r\n\r\n\t\t\tstore.attachEvent(\"onDestroy\", function(){\r\n\t\t\t\tthis.$services.dropService(storeAccessName);\r\n\t\t\t\tvar storeList = this.$services.getService(\"datastores\");\r\n\t\t\t\tfor(var i = 0; i < storeList.length; i++){\r\n\t\t\t\t\tif(storeList[i] === config.name){\r\n\t\t\t\t\t\tstoreList.splice(i, 1);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(this));\r\n\r\n\t\t\tthis.$services.dropService(storeAccessName);\r\n\t\t\tthis.$services.setService(storeAccessName, function() { return store; } );\r\n\r\n\t\t\tvar storeList = this.$services.getService(\"datastores\");\r\n\t\t\tif (!storeList) {\r\n\t\t\t\tstoreList = [];\r\n\t\t\t\tthis.$services.setService(\"datastores\", function() { return storeList; });\r\n\t\t\t\tstoreList.push(config.name);\r\n\t\t\t} else if (storeList.indexOf(config.name) < 0) {\r\n\t\t\t\tstoreList.push(config.name);\r\n\t\t\t}\r\n\r\n\t\t\tdatastoreRender.bindDataStore(config.name, this);\r\n\r\n\t\t}\r\n\r\n\t\treturn store;\r\n\t},\r\n\tgetDatastore: function(name){\r\n\t\treturn this.$services.getService(\"datastore:\" + name);\r\n\t},\r\n\t_getDatastores: getDatastores,\r\n\r\n\trefreshData: function () {\r\n\t\tvar scrollState;\r\n\t\tif(!isHeadless(this)){\r\n\t\t\tscrollState = this.getScrollState();\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onBeforeDataRender\", []);\r\n\r\n\t\tvar stores = getDatastores.call(this);\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i].refresh();\r\n\t\t}\r\n\r\n\t\tif(this.config.preserve_scroll && !isHeadless(this) && (scrollState.x || scrollState.y)){\r\n\t\t\tthis.scrollTo(scrollState.x, scrollState.y);\r\n\t\t}\r\n\t\tthis.callEvent(\"onDataRender\", []);\r\n\r\n\t},\r\n\r\n\tisChildOf: function(childId, parentId){\r\n\t\treturn this.$data.tasksStore.isChildOf(childId, parentId);\r\n\t},\r\n\r\n\trefreshTask: function (taskId, refresh_links) {\r\n\t\tvar task = this.getTask(taskId);\r\n\t\tvar self = this;\r\n\t\tfunction refreshLinks(){\r\n\t\t\tif (refresh_links !== undefined && !refresh_links)\r\n\t\t\t\treturn;\r\n\t\t\tfor (var i = 0; i < task.$source.length; i++) {\r\n\t\t\t\tself.refreshLink(task.$source[i]);\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < task.$target.length; i++) {\r\n\t\t\t\tself.refreshLink(task.$target[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (task && this.isTaskVisible(taskId)) {\r\n\t\t\tthis.$data.tasksStore.refresh(taskId, !!this.getState(\"tasksDnd\").drag_id || refresh_links === false);// do quick refresh during drag and drop\r\n\t\t\trefreshLinks();\r\n\t\t}else if(this.isTaskExists(taskId) && this.isTaskExists(this.getParent(taskId)) && !this._bulk_dnd){\r\n\t\t\tthis.refreshTask(this.getParent(taskId));\r\n\r\n\t\t\tvar hasSplitParent = false;\r\n\t\t\tthis.eachParent(function(parent){\r\n\t\t\t\tif(hasSplitParent || this.isSplitTask(parent)){\r\n\t\t\t\t\thasSplitParent = true;\r\n\t\t\t\t}\r\n\t\t\t}, taskId);\r\n\t\t\tif(hasSplitParent){\r\n\t\t\t\trefreshLinks();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t},\r\n\trefreshLink: function (linkId) {\r\n\t\tthis.$data.linksStore.refresh(linkId, !!this.getState(\"tasksDnd\").drag_id);// do quick refresh during drag and drop\r\n\t},\r\n\r\n\tsilent: function(code){\r\n\t\tvar gantt = this;\r\n\t\tgantt.$data.tasksStore.silent(function(){\r\n\t\t\tgantt.$data.linksStore.silent(function(){\r\n\t\t\t\tcode();\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\tclearAll: function () {\r\n\t\tvar stores = getDatastores.call(this);\r\n\t\t\r\n\t\t// clear all stores without invoking clearAll event\r\n\t\t// in order to prevent calling handlers when only some stores are cleared\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i].silent(function(){\r\n\t\t\t\tstores[i].clearAll();\t\r\n\t\t\t});\r\n\t\t}\r\n\t\t// run clearAll again to invoke events\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i].clearAll();\t\r\n\t\t}\r\n\r\n\t\tthis._update_flags();\r\n\t\tthis.userdata = {};\r\n\t\tthis.callEvent(\"onClear\", []);\r\n\t\tthis.render();\r\n\t},\r\n\t_clear_data: function () {\r\n\t\tthis.$data.tasksStore.clearAll();\r\n\t\tthis.$data.linksStore.clearAll();\r\n\t\tthis._update_flags();\r\n\t\tthis.userdata = {};\r\n\t},\r\n\r\n\tselectTask: function(id){\r\n\t\tvar store = this.$data.tasksStore;\r\n\t\tif(!this.config.select_task)\r\n\t\t\treturn false;\r\n\t\tid = replaceValidZeroId(id, this.config.root_id);\r\n\t\tif (id){\r\n\t\t\tlet oldSelectId = this.getSelectedId();\r\n\t\t\t// Don't repaint the resource panel as the data didn't change\r\n\t\t\tstore._skipResourceRepaint = true;\r\n\t\t\tstore.select(id);\r\n\t\t\tstore._skipResourceRepaint = false;\r\n\t\t\t// GS-730. Split task is not included in the tree, \r\n\t\t\t// so the datastore renderer will think that the task is not visible\r\n\t\t\tif (oldSelectId && store.pull[oldSelectId].$split_subtask && oldSelectId != id) {\r\n\t\t\t\tthis.refreshTask(oldSelectId);\r\n\t\t\t}\r\n\t\t\tif (store.pull[id].$split_subtask && oldSelectId != id) {// GS-1850. Do not repaint split task after double click\r\n\t\t\t\tthis.refreshTask(id);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn store.getSelectedId();\r\n\t},\r\n\tunselectTask: function(id){\r\n\t\tvar store = this.$data.tasksStore;\r\n\t\tstore.unselect(id);\r\n\t\t// GS-730. Split task is not included in the tree, \r\n\t\t// so the datastore renderer will think that the task is not visible\r\n\t\tif (id && store.pull[id].$split_subtask) {\r\n\t\t\tthis.refreshTask(id);\r\n\t\t}\r\n\t},\r\n\tisSelectedTask: function(id){\r\n\t\treturn this.$data.tasksStore.isSelected(id);\r\n\t},\r\n\tgetSelectedId: function() {\r\n\t\treturn this.$data.tasksStore.getSelectedId();\r\n\t}\r\n};\r\n};\r\n\r\nfunction createFacade(){\r\n\tvar res = utils.mixin({}, createDatastoreFacade());\r\n\tutils.mixin(res, createTasksFacade());\r\n\tutils.mixin(res, createLinksFacade());\r\n\treturn res;\r\n}\r\n\r\n\r\n\r\n\r\nexport default {create: createFacade};","function createDataStoreSelectMixin(store){\r\n\tvar selectedId = null;\r\n\r\n\tvar deleteItem = store._removeItemInner;\r\n\t\r\n\tfunction unselect(id){\r\n\t\tselectedId = null;\r\n\t\tthis.callEvent(\"onAfterUnselect\", [id]);\r\n\t}\r\n\r\n\tstore._removeItemInner = function(id){\r\n\t\tif(selectedId == id){\r\n\t\t\tunselect.call(this, id);\r\n\t\t}\r\n\r\n\t\tif(selectedId && this.eachItem){\r\n\t\t\tthis.eachItem(function(subItem){\r\n\t\t\t\tif(subItem.id == selectedId){\r\n\t\t\t\t\tunselect.call(this, subItem.id);\r\n\t\t\t\t}\r\n\t\t\t}, id);\r\n\t\t}\r\n\r\n\t\treturn deleteItem.apply(this, arguments);\r\n\t};\r\n\r\n\tstore.attachEvent(\"onIdChange\", function(oldId, newId) {\r\n\t\tif (store.getSelectedId() == oldId) {\r\n\t\t\tstore.silent(function () {\r\n\t\t\t\tstore.unselect(oldId);\r\n\t\t\t\tstore.select(newId);\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\r\n\treturn {\r\n\t\tselect: function(id){\r\n\t\t\tif (id){\r\n\r\n\t\t\t\tif(selectedId == id)\r\n\t\t\t\t\treturn selectedId;\r\n\r\n\t\t\t\tif(!this._skip_refresh) {\r\n\t\t\t\t\tif (!this.callEvent(\"onBeforeSelect\", [id])) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.unselect();\r\n\r\n\t\t\t\tselectedId = id;\r\n\r\n\t\t\t\tif(!this._skip_refresh) {\r\n\t\t\t\t\tthis.refresh(id);\r\n\t\t\t\t\tthis.callEvent(\"onAfterSelect\", [id]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn selectedId;\r\n\t\t},\r\n\t\tgetSelectedId: function(){\r\n\t\t\treturn selectedId;\r\n\t\t},\r\n\t\tisSelected: function(id){\r\n\t\t\treturn id == selectedId;\r\n\t\t},\r\n\t\tunselect: function(id){\r\n\t\t\tvar id = id || selectedId;\r\n\t\t\tif(!id)\r\n\t\t\t\treturn;\r\n\t\t\tselectedId = null;\r\n\t\t\tif(!this._skip_refresh){\r\n\t\t\t\tthis.refresh(id);\r\n\t\t\t\tunselect.call(this, id);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default createDataStoreSelectMixin;","import * as utils from \"../../utils/utils\";\r\n\r\n\r\nvar createLinksStoreFacade = function(){\r\n\treturn {\r\n\tgetLinkCount: function () {\r\n\t\treturn this.$data.linksStore.count();\r\n\t},\r\n\r\n\tgetLink : function (id) {\r\n\t\treturn this.$data.linksStore.getItem(id);\r\n\t},\r\n\r\n\tgetLinks : function () {\r\n\t\treturn this.$data.linksStore.getItems();\r\n\t},\r\n\r\n\tisLinkExists : function (id) {\r\n\t\treturn this.$data.linksStore.exists(id);\r\n\t},\r\n\r\n\taddLink : function (link) {\r\n\t\tconst newLink = this.$data.linksStore.addItem(link);\r\n\t\t// GS-1222. Update fullOrder otherwise the link won't appear after render\r\n\t\tif (this.$data.linksStore.isSilent()){\r\n\t\t\tthis.$data.linksStore.fullOrder.push(newLink);\r\n\t\t}\r\n\t\treturn newLink;\r\n\t},\r\n\r\n\tupdateLink : function (id, data) {\r\n\t\tif (!utils.defined(data))\r\n\t\t\tdata = this.getLink(id);\r\n\t\tthis.$data.linksStore.updateItem(id, data);\r\n\t},\r\n\r\n\tdeleteLink : function (id) {\r\n\t\treturn this.$data.linksStore.removeItem(id);\r\n\t},\r\n\r\n\tchangeLinkId : function (oldid, newid) {\r\n\t\treturn this.$data.linksStore.changeId(oldid, newid);\r\n\t}\r\n};\r\n};\r\n\r\nexport default createLinksStoreFacade;","import * as utils from \"../../../utils/utils\";\r\n\r\nfunction ScaleHelper(gantt){\r\n\tvar dateHelper = gantt.date;\r\n\tvar services = gantt.$services;\r\n\r\n\treturn {\r\n\t\tgetSum: function (sizes, from, to) {\r\n\t\t\tif (to === undefined)\r\n\t\t\t\tto = sizes.length - 1;\r\n\t\t\tif (from === undefined)\r\n\t\t\t\tfrom = 0;\r\n\r\n\t\t\tvar summ = 0;\r\n\t\t\tfor (var i = from; i <= to; i++)\r\n\t\t\t\tsumm += sizes[i];\r\n\r\n\t\t\treturn summ;\r\n\t\t},\r\n\t\tsetSumWidth: function (sum_width, scale, from, to) {\r\n\t\t\tvar parts = scale.width;\r\n\r\n\t\t\tif (to === undefined)\r\n\t\t\t\tto = parts.length - 1;\r\n\t\t\tif (from === undefined)\r\n\t\t\t\tfrom = 0;\r\n\t\t\tvar length = to - from + 1;\r\n\r\n\t\t\tif (from > parts.length - 1 || length <= 0 || to > parts.length - 1)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tvar oldWidth = this.getSum(parts, from, to);\r\n\r\n\t\t\tvar diff = sum_width - oldWidth;\r\n\r\n\t\t\tthis.adjustSize(diff, parts, from, to);\r\n\t\t\tthis.adjustSize(-diff, parts, to + 1);\r\n\r\n\t\t\tscale.full_width = this.getSum(parts);\r\n\t\t},\r\n\t\tsplitSize: function (width, count) {\r\n\t\t\tvar arr = [];\r\n\t\t\tfor (var i = 0; i < count; i++) arr[i] = 0;\r\n\r\n\t\t\tthis.adjustSize(width, arr);\r\n\t\t\treturn arr;\r\n\r\n\t\t},\r\n\t\tadjustSize: function (width, parts, from, to) {\r\n\t\t\tif (!from)\r\n\t\t\t\tfrom = 0;\r\n\t\t\tif (to === undefined)\r\n\t\t\t\tto = parts.length - 1;\r\n\r\n\t\t\tvar length = to - from + 1;\r\n\r\n\t\t\tvar full = this.getSum(parts, from, to);\r\n\r\n\t\t\tfor (var i = from; i <= to; i++) {\r\n\t\t\t\tvar share = Math.floor(width * (full ? (parts[i] / full) : (1 / length)));\r\n\r\n\t\t\t\tfull -= parts[i];\r\n\t\t\t\twidth -= share;\r\n\t\t\t\tlength--;\r\n\r\n\t\t\t\tparts[i] += share;\r\n\t\t\t}\r\n\t\t\tparts[parts.length - 1] += width;\r\n\t\t},\r\n\t\tsortScales: function (scales) {\r\n\t\t\tfunction cellSize(unit, step) {\r\n\t\t\t\tvar d = new Date(1970, 0, 1);\r\n\t\t\t\treturn dateHelper.add(d, step, unit) - d;\r\n\t\t\t}\r\n\r\n\t\t\tscales.sort(function (a, b) {\r\n\t\t\t\tif (cellSize(a.unit, a.step) < cellSize(b.unit, b.step)) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else if (cellSize(a.unit, a.step) > cellSize(b.unit, b.step)) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfor (var i = 0; i < scales.length; i++) {\r\n\t\t\t\tscales[i].index = i;\r\n\t\t\t}\r\n\t\t},\r\n\t\t_isLegacyMode: function(config){\r\n\t\t\tvar scaleConfig = config || gantt.config;\r\n\t\t\treturn scaleConfig.scale_unit || scaleConfig.date_scale || scaleConfig.subscales;\r\n\t\t},\r\n\t\t_prepareScaleObject: function(scale){\r\n\t\t\tvar format = scale.format;\r\n\t\t\tif(!format){\r\n\t\t\t\tformat = scale.template || scale.date || \"%d %M\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof format === \"string\"){\r\n\t\t\t\tformat = gantt.date.date_to_str(format);\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tunit: scale.unit || \"day\",\r\n\t\t\t\tstep: scale.step || 1,\r\n\t\t\t\tformat: format,\r\n\t\t\t\tcss: scale.css\r\n\t\t\t};\r\n\t\t},\r\n\t\tprimaryScale: function(config) {\r\n\t\t\tvar templates = services.getService(\"templateLoader\");\r\n\t\t\tvar legacyMode = this._isLegacyMode(config);\r\n\r\n\t\t\tvar scaleConfig = config || gantt.config;\r\n\r\n\t\t\tvar result;\r\n\t\t\tif(legacyMode){\r\n\t\t\t\ttemplates.initTemplate(\"date_scale\", undefined, undefined, scaleConfig, gantt.config.templates);\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tunit: gantt.config.scale_unit,\r\n\t\t\t\t\tstep: gantt.config.step,\r\n\t\t\t\t\ttemplate: gantt.templates.date_scale,\r\n\t\t\t\t\tdate: gantt.config.date_scale,\r\n\t\t\t\t\tcss: gantt.templates.scale_cell_class\r\n\t\t\t\t};\r\n\t\t\t}else{\r\n\t\t\t\tvar primaryScale = scaleConfig.scales[0];\r\n\t\t\t\tresult = {\r\n\t\t\t\t\tunit: primaryScale.unit,\r\n\t\t\t\t\tstep: primaryScale.step,\r\n\t\t\t\t\ttemplate: primaryScale.template,\r\n\t\t\t\t\tformat: primaryScale.format,\r\n\t\t\t\t\tdate: primaryScale.date,\r\n\t\t\t\t\tcss: primaryScale.css || gantt.templates.scale_cell_class\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn this._prepareScaleObject(result);\r\n\t\t},\r\n\t\tgetSubScales: function(config) {\r\n\t\t\tvar legacyMode = this._isLegacyMode(config);\r\n\t\t\tvar scaleConfig = config || gantt.config;\r\n\t\t\tvar scales;\r\n\t\t\tif(legacyMode){\r\n\t\t\t\tlet docLink = \"https://docs.dhtmlx.com/gantt/migrating.html#:~:text=%3D%20false%3B-,Time%20scale%20settings,-Configuration%20of%20time\";\r\n\t\t\t\tif (gantt.env.isFF){\r\n\t\t\t\t\tdocLink = \"https://docs.dhtmlx.com/gantt/migrating.html#6162\";\r\n\t\t\t\t}\r\n\t\t\t\t// eslint-disable-next-line no-console\r\n\t\t\t\tconsole.warn(`You are using the obsolete scale configuration.\r\nIt will stop working in the future versions.\r\nPlease migrate the configuration to the newer version:\r\n${docLink}`);\r\n\t\t\t\tscales = scaleConfig.subscales || [];\r\n\t\t\t}else{\r\n\t\t\t\tscales = scaleConfig.scales.slice(1);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn scales.map(function(scale){\r\n\t\t\t\treturn this._prepareScaleObject(scale);\r\n\t\t\t}.bind(this));\r\n\t\t},\r\n\r\n\t\tprepareConfigs: function (scales, min_coll_width, container_width, scale_height, minDate, maxDate, rtl) {\r\n\t\t\tvar heights = this.splitSize(scale_height, scales.length);\r\n\t\t\tvar full_width = container_width;\r\n\r\n\t\t\tvar configs = [];\r\n\t\t\tfor (var i = scales.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar main_scale = (i == scales.length - 1);\r\n\t\t\t\tvar cfg = this.initScaleConfig(scales[i], minDate, maxDate);\r\n\t\t\t\tif (main_scale) {\r\n\t\t\t\t\tthis.processIgnores(cfg);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.initColSizes(cfg, min_coll_width, full_width, heights[i]);\r\n\t\t\t\tthis.limitVisibleRange(cfg);\r\n\r\n\t\t\t\tif (main_scale) {\r\n\t\t\t\t\tfull_width = cfg.full_width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfigs.unshift(cfg);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfor (var i = 0; i < configs.length - 1; i++) {\r\n\t\t\t\tthis.alineScaleColumns(configs[configs.length - 1], configs[i]);\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < configs.length; i++) {\r\n\r\n\t\t\t\tif(rtl){\r\n\t\t\t\t\tthis.reverseScale(configs[i]);\r\n\t\t\t\t}\r\n\t\t\t\tthis.setPosSettings(configs[i]);\r\n\t\t\t}\r\n\t\t\treturn configs;\r\n\r\n\t\t},\r\n\r\n\t\treverseScale: function(scale){\r\n\t\t\tscale.width = scale.width.reverse();\r\n\t\t\tscale.trace_x = scale.trace_x.reverse();\r\n\r\n\t\t\tvar indexes = scale.trace_indexes;\r\n\t\t\tscale.trace_indexes = {};\r\n\t\t\tscale.trace_index_transition = {};\r\n\t\t\tscale.rtl = true;\r\n\t\t\tfor(var i = 0; i < scale.trace_x.length; i++){\r\n\t\t\t\tscale.trace_indexes[scale.trace_x[i].valueOf()] = i;\r\n\t\t\t\tscale.trace_index_transition[indexes[scale.trace_x[i].valueOf()]] = i;\r\n\t\t\t}\r\n\t\t\treturn scale;\r\n\t\t},\r\n\r\n\t\tsetPosSettings: function (config) {\r\n\t\t\tfor (var i = 0, len = config.trace_x.length; i < len; i++) {\r\n\t\t\t\tconfig.left.push((config.width[i - 1] || 0) + (config.left[i - 1] || 0));\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_ignore_time_config: function (date, scale) {\r\n\r\n\t\t\tif (gantt.config.skip_off_time) {\r\n\t\t\t\tvar skip = true;\r\n\t\t\t\tvar probe = date;\r\n\r\n\t\t\t\t// check dates in case custom scale unit, e.g. {unit: \"month\", step: 3}\r\n\t\t\t\tfor (var i = 0; i < scale.step; i++) {\r\n\t\t\t\t\tif (i) {\r\n\t\t\t\t\t\tprobe = dateHelper.add(date, i, scale.unit);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tskip = skip && !this.isWorkTime(probe, scale.unit);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn skip;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\t//defined in an extension\r\n\t\tprocessIgnores: function (config) {\r\n\t\t\tconfig.ignore_x = {};\r\n\t\t\tconfig.display_count = config.count;\r\n\t\t},\r\n\t\tinitColSizes: function (config, min_col_width, full_width, line_height) {\r\n\t\t\tvar cont_width = full_width;\r\n\r\n\t\t\tconfig.height = line_height;\r\n\r\n\t\t\tvar column_count = config.display_count === undefined ? config.count : config.display_count;\r\n\r\n\t\t\tif (!column_count)\r\n\t\t\t\tcolumn_count = 1;\r\n\r\n\t\t\tconfig.col_width = Math.floor(cont_width / column_count);\r\n\r\n\t\t\tif (min_col_width) {\r\n\t\t\t\tif (config.col_width < min_col_width) {\r\n\t\t\t\t\tconfig.col_width = min_col_width;\r\n\t\t\t\t\tcont_width = config.col_width * column_count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tconfig.width = [];\r\n\t\t\tvar ignores = config.ignore_x || {};\r\n\t\t\tfor (var i = 0; i < config.trace_x.length; i++) {\r\n\t\t\t\tif (ignores[config.trace_x[i].valueOf()] || (config.display_count == config.count)) {\r\n\t\t\t\t\tconfig.width[i] = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// width of month columns should be proportional month duration\r\n\t\t\t\t\tvar width = 1;\r\n\t\t\t\t\tif (config.unit == \"month\") {\r\n\t\t\t\t\t\tvar days = Math.round((dateHelper.add(config.trace_x[i], config.step, config.unit) - config.trace_x[i]) / (1000 * 60 * 60 * 24));\r\n\t\t\t\t\t\twidth = days;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconfig.width[i] = width;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.adjustSize(cont_width - this.getSum(config.width)/* 1 width per column from the code above */, config.width);\r\n\t\t\tconfig.full_width = this.getSum(config.width);\r\n\t\t},\r\n\t\tinitScaleConfig: function (config, min_date, max_date) {\r\n\t\t\tvar cfg = utils.mixin({\r\n\t\t\t\tcount: 0,\r\n\t\t\t\tcol_width: 0,\r\n\t\t\t\tfull_width: 0,\r\n\t\t\t\theight: 0,\r\n\t\t\t\twidth: [],\r\n\t\t\t\tleft: [],\r\n\t\t\t\ttrace_x: [],\r\n\t\t\t\ttrace_indexes: {},\r\n\t\t\t\tmin_date: new Date(min_date),\r\n\t\t\t\tmax_date: new Date(max_date)\r\n\t\t\t}, config);\r\n\r\n\t\t\tthis.eachColumn(config.unit, config.step, min_date, max_date, function (date) {\r\n\t\t\t\tcfg.count++;\r\n\t\t\t\tcfg.trace_x.push(new Date(date));\r\n\t\t\t\tcfg.trace_indexes[date.valueOf()] = cfg.trace_x.length - 1;\r\n\t\t\t});\r\n\r\n\t\t\tcfg.trace_x_ascending = cfg.trace_x.slice();\r\n\t\t\treturn cfg;\r\n\t\t},\r\n\t\titerateScales: function (lower_scale, upper_scale, from, to, callback) {\r\n\t\t\tvar upper_dates = upper_scale.trace_x;\r\n\t\t\tvar lower_dates = lower_scale.trace_x;\r\n\r\n\t\t\tvar prev = from || 0;\r\n\t\t\tvar end = to || (lower_dates.length - 1);\r\n\t\t\tvar prevUpper = 0;\r\n\r\n\r\n\t\t\tfor (var up = 1; up < upper_dates.length; up++) {\r\n\t\t\t\tvar target_index = (lower_scale.trace_indexes[+upper_dates[up]]);\r\n\t\t\t\tif (target_index !== undefined && target_index <= end) {\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback.apply(this, [prevUpper, up, prev, target_index]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tprev = target_index;\r\n\t\t\t\t\tprevUpper = up;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\talineScaleColumns: function (lower_scale, upper_scale, from, to) {\r\n\t\t\tthis.iterateScales(lower_scale, upper_scale, from, to, function (upper_start, upper_end, lower_start, lower_end) {\r\n\t\t\t\tvar targetWidth = this.getSum(lower_scale.width, lower_start, lower_end - 1);\r\n\t\t\t\tvar actualWidth = this.getSum(upper_scale.width, upper_start, upper_end - 1);\r\n\t\t\t\tif (actualWidth != targetWidth) {\r\n\t\t\t\t\tthis.setSumWidth(targetWidth, upper_scale, upper_start, upper_end - 1);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\teachColumn: function (unit, step, min_date, max_date, callback) {\r\n\t\t\tvar start = new Date(min_date),\r\n\t\t\t\tend = new Date(max_date);\r\n\t\t\tif (dateHelper[unit + \"_start\"]) {\r\n\t\t\t\tstart = dateHelper[unit + \"_start\"](start);\r\n\t\t\t}\r\n\r\n\t\t\tvar curr = new Date(start);\r\n\t\t\tif (+curr >= +end) {\r\n\t\t\t\tend = dateHelper.add(curr, step, unit);\r\n\t\t\t}\r\n\t\t\twhile (+curr < +end) {\r\n\t\t\t\tcallback.call(this, new Date(curr));\r\n\t\t\t\tvar tzOffset = curr.getTimezoneOffset();\r\n\t\t\t\tcurr = dateHelper.add(curr, step, unit);\r\n\t\t\t\tcurr = gantt._correct_dst_change(curr, tzOffset, step, unit);\r\n\t\t\t\tif (dateHelper[unit + '_start'])\r\n\t\t\t\t\tcurr = dateHelper[unit + \"_start\"](curr);\r\n\t\t\t}\r\n\t\t},\r\n\t\tlimitVisibleRange: function (cfg) {\r\n\t\t\tvar dates = cfg.trace_x;\r\n\r\n\t\t\tvar left = 0, right = cfg.width.length - 1;\r\n\t\t\tvar diff = 0;\r\n\t\t\tif (+dates[0] < +cfg.min_date && left != right) {\r\n\t\t\t\tvar width = Math.floor(cfg.width[0] * ((dates[1] - cfg.min_date) / (dates[1] - dates[0])));\r\n\t\t\t\tdiff += cfg.width[0] - width;\r\n\t\t\t\tcfg.width[0] = width;\r\n\r\n\t\t\t\tdates[0] = new Date(cfg.min_date);\r\n\t\t\t}\r\n\r\n\t\t\tvar last = dates.length - 1;\r\n\t\t\tvar lastDate = dates[last];\r\n\t\t\tvar outDate = dateHelper.add(lastDate, cfg.step, cfg.unit);\r\n\t\t\tif (+outDate > +cfg.max_date && last > 0) {\r\n\t\t\t\tvar width = cfg.width[last] - Math.floor(cfg.width[last] * ((outDate - cfg.max_date) / (outDate - lastDate)));\r\n\t\t\t\tdiff += cfg.width[last] - width;\r\n\t\t\t\tcfg.width[last] = width;\r\n\t\t\t}\r\n\r\n\t\t\tif (diff) {\r\n\t\t\t\tvar full = this.getSum(cfg.width);\r\n\t\t\t\tvar shared = 0;\r\n\t\t\t\tfor (var i = 0; i < cfg.width.length; i++) {\r\n\t\t\t\t\tvar share = Math.floor(diff * (cfg.width[i] / full));\r\n\t\t\t\t\tcfg.width[i] += share;\r\n\t\t\t\t\tshared += share;\r\n\t\t\t\t}\r\n\t\t\t\tthis.adjustSize(diff - shared, cfg.width);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default ScaleHelper;\r\n","import ScaleHelper from \"./ui/timeline/scales_ignore\";\r\nimport PrimaryScaleHelper from \"./ui/timeline/scales\";\r\n\r\nfunction resolveConfigRange(unit, gantt){\r\n\tvar range = {\r\n\t\tstart_date:null,\r\n\t\tend_date:null\r\n\t};\r\n\r\n\tif (gantt.config.start_date && gantt.config.end_date) {\r\n\t\trange.start_date = gantt.date[unit + \"_start\"](new Date(gantt.config.start_date));\r\n\r\n\t\tvar end = new Date(gantt.config.end_date);\r\n\t\tvar start_interval = gantt.date[unit + \"_start\"](new Date(end));\r\n\t\tif (+end != +start_interval) {\r\n\t\t\tend = gantt.date.add(start_interval, 1, unit);\r\n\t\t} else {\r\n\t\t\tend = start_interval;\r\n\t\t}\r\n\r\n\t\trange.end_date = end;\r\n\t}\r\n\treturn range;\r\n}\r\n\r\nfunction _scale_range_unit(gantt) {\r\n\tvar primaryScale = (new PrimaryScaleHelper(gantt)).primaryScale();\r\n\tvar unit = primaryScale.unit;\r\n\tvar step = primaryScale.step;\r\n\tif (gantt.config.scale_offset_minimal) {\r\n\r\n\t\tvar helper = new ScaleHelper(gantt);\r\n\t\tvar scales = [helper.primaryScale()].concat(helper.getSubScales());\r\n\r\n\t\thelper.sortScales(scales);\r\n\t\tunit = scales[scales.length - 1].unit;\r\n\t\tstep = scales[scales.length - 1].step || 1;\r\n\t}\r\n\treturn { unit:unit, step:step };\r\n}\r\n\r\nfunction _init_tasks_range(gantt) {\r\n\tvar cfg = _scale_range_unit(gantt);\r\n\tvar unit = cfg.unit,\r\n\t\tstep = cfg.step;\r\n\tvar range = resolveConfigRange(unit, gantt);\r\n\r\n\t// GS-1544: Show correct date range if we have tasks or only projects\r\n\tif(!(range.start_date && range.end_date)){\r\n\t\tvar onlyProjectTasks = true;\r\n\t\tvar tasks = gantt.getTaskByTime();\r\n\t\tfor (var i = 0; i < tasks.length; i++) {\r\n\t\t\tvar task = tasks[i];\r\n\t\t\tif (task.type !== gantt.config.types.project){\r\n\t\t\t\tonlyProjectTasks = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (tasks.length && onlyProjectTasks){\r\n\t\t\tvar start_date = tasks[0].start_date;\r\n\t\t\tvar end_date = gantt.date.add(start_date, 1, gantt.config.duration_unit);\r\n\t\t\trange = {\r\n\t\t\t\tstart_date: new Date(start_date),\r\n\t\t\t\tend_date: new Date(end_date)\r\n\t\t\t};\r\n\t\t} else{\r\n\t\t\trange = gantt.getSubtaskDates();\r\n\t\t}\r\n\r\n\t\tif(!range.start_date || !range.end_date){\r\n\t\t\trange = {\r\n\t\t\t\tstart_date: new Date(),\r\n\t\t\t\tend_date: new Date()\r\n\t\t\t};\r\n\t\t}\r\n\t\t// extend the displayed date range including the constraints, deadlines and baselines\r\n\t\tgantt.eachTask(function(task){\r\n\t\t\tif (gantt.config.deadlines !== false && task.deadline){\r\n\t\t\t\textendRangeForDates(range, task.deadline, task.deadline);\r\n\t\t\t}\r\n\t\t\tif (task.constraint_date && task.constraint_type){\r\n\t\t\t\tif (gantt.config.constraint_types && task.constraint_type !== gantt.config.constraint_types.ASAP && task.constraint_type !== gantt.config.constraint_types.ALAP){\r\n\t\t\t\t\textendRangeForDates(range, task.constraint_date, task.constraint_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (gantt.config.baselines !== false && task.baselines){\r\n\t\t\t\ttask.baselines.forEach(function(baseline){\r\n\t\t\t\t\textendRangeForDates(range, baseline.start_date, baseline.end_date);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trange.start_date = gantt.date[unit + \"_start\"](range.start_date);\r\n\t\trange.start_date = gantt.calculateEndDate({\r\n\t\t\tstart_date: gantt.date[unit + \"_start\"](range.start_date),\r\n\t\t\tduration: -1,\r\n\t\t\tunit: unit,\r\n\t\t\tstep:step\r\n\t\t});//one free column before first task\r\n\r\n\t\trange.end_date = gantt.date[unit + \"_start\"](range.end_date);\r\n\t\trange.end_date = gantt.calculateEndDate({start_date: range.end_date, duration: 2, unit: unit, step:step});//one free column after last task\r\n\t}\r\n\r\n\tgantt._min_date = range.start_date;\r\n\tgantt._max_date = range.end_date;\r\n}\r\n\r\nfunction extendRangeForDates(range, start_date, end_date){\r\n\tif (start_date < range.start_date){\r\n\t\trange.start_date = new Date(start_date);\r\n\t}\r\n\tif (end_date > range.end_date){\r\n\t\trange.end_date = new Date(end_date);\r\n\t}\r\n}\r\n\r\nfunction _adjust_scales(gantt) {\r\n\tif (gantt.config.fit_tasks) {\r\n\t\tvar old_min = +gantt._min_date,\r\n\t\t\told_max = +gantt._max_date;\r\n\t\t//this._init_tasks_range();\r\n\t\tif (+gantt._min_date != old_min || +gantt._max_date != old_max) {\r\n\t\t\tgantt.render();\r\n\r\n\t\t\tgantt.callEvent(\"onScaleAdjusted\", []);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nexport default function updateTasksRange(gantt){\r\n\t_init_tasks_range(gantt);\r\n\t_adjust_scales(gantt);\r\n};\r\n","function copyLinkIdsArray(gantt, linkIds, targetHash){\r\n\tfor(var i = 0; i < linkIds.length; i++) {\r\n\t\tif(gantt.isLinkExists(linkIds[i])){\r\n\t\t\ttargetHash[linkIds[i]] = gantt.getLink(linkIds[i]);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction copyLinkIds(gantt, task, targetHash){\r\n\tcopyLinkIdsArray(gantt, task.$source, targetHash);\r\n\tcopyLinkIdsArray(gantt, task.$target, targetHash);\r\n}\r\n\r\nfunction getSubtreeLinks(gantt, rootId){\r\n\tvar res = {};\r\n\r\n\tif(gantt.isTaskExists(rootId)){\r\n\t\tcopyLinkIds(gantt, gantt.getTask(rootId), res);\r\n\t}\r\n\r\n\tgantt.eachTask(function(child){\r\n\t\tcopyLinkIds(gantt, child, res);\r\n\t}, rootId);\r\n\r\n\treturn res;\r\n}\r\n\r\nfunction getSubtreeTasks(gantt, rootId){\r\n\tvar res = {};\r\n\r\n\tgantt.eachTask(function(child){\r\n\t\tres[child.id] = child;\r\n\t}, rootId);\r\n\r\n\treturn res;\r\n}\r\n\r\nexport default {\r\n\tgetSubtreeLinks: getSubtreeLinks,\r\n\tgetSubtreeTasks: getSubtreeTasks\r\n};","import * as helpers from \"../../utils/helpers\";\r\nimport treeHelper from \"../../utils/task_tree_helpers\";\r\n\r\n\r\nexport default class DataProcessorEvents {\r\n\tprotected _dataProcessorHandlers: any[];\r\n\tprotected $gantt: any;\r\n\tprotected $dp: any;\r\n\r\n\tconstructor(gantt: any, dp: any) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$dp = dp;\r\n\t\tthis._dataProcessorHandlers = [];\r\n\t}\r\n\r\n\tattach() {\r\n\t\tconst dp = this.$dp;\r\n\t\tconst gantt = this.$gantt;\r\n\t\tconst cascadeDelete = {};\r\n\r\n\t\tconst clientSideDelete = (id) => {\r\n\t\t\treturn this.clientSideDelete(id, dp, gantt);\r\n\t\t};\r\n\r\n\t\tfunction getTaskLinks(task) {\r\n\t\t\tlet _links = [];\r\n\r\n\t\t\tif (task.$source) {\r\n\t\t\t\t_links = _links.concat(task.$source);\r\n\t\t\t}\r\n\t\t\tif (task.$target) {\r\n\t\t\t\t_links = _links.concat(task.$target);\r\n\t\t\t}\r\n\r\n\t\t\treturn _links;\r\n\t\t}\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskAdd\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true, \"inserted\");\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskUpdate\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\r\n\t\t\t\t// gantt can be destroyed/reinitialized after dp.setUpdated\r\n\t\t\t\tif(gantt._sendTaskOrder){\r\n\t\t\t\t\tgantt._sendTaskOrder(id, item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onBeforeTaskDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.config.cascade_delete) {\r\n\t\t\t\tcascadeDelete[id] = {\r\n\t\t\t\t\ttasks: treeHelper.getSubtreeTasks(gantt, id),\r\n\t\t\t\t\tlinks: treeHelper.getSubtreeLinks(gantt, id)\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t// GS-631. Keep the deleted item in Gantt until we receive the successful response from the server\r\n\t\t\tif (dp.deleteAfterConfirmation) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true, \"deleted\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tdp.setGanttMode(\"tasks\");\r\n\r\n\t\t\t// not send delete request if item is not inserted into the db - just remove it from the client\r\n\t\t\tconst needDbDelete = !clientSideDelete(id);\r\n\t\t\tconst needCascadeDelete = gantt.config.cascade_delete && cascadeDelete[id];\r\n\t\t\tif (!needDbDelete && !needCascadeDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (needCascadeDelete) {\r\n\t\t\t\tconst dpMode = dp.updateMode;\r\n\t\t\t\tdp.setUpdateMode(\"off\");\r\n\r\n\t\t\t\tconst cascade = cascadeDelete[id];\r\n\t\t\t\tfor (const i in cascade.tasks) {\r\n\t\t\t\t\tif (!clientSideDelete(i)) {\r\n\t\t\t\t\t\tdp.storeItem(cascade.tasks[i]);\r\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tfor (const i in cascade.links) {\r\n\t\t\t\t\tif (!clientSideDelete(i)) {\r\n\t\t\t\t\t\tdp.storeItem(cascade.links[i]);\r\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcascadeDelete[id] = null;\r\n\r\n\t\t\t\tif (dpMode !== \"off\") {\r\n\t\t\t\t\tdp.sendAllData();\r\n\t\t\t\t}\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdateMode(dpMode);\r\n\t\t\t}\r\n\r\n\t\t\tif (needDbDelete){\r\n\t\t\t\tdp.storeItem(item);\r\n\t\t\t\tif (!dp.deleteAfterConfirmation){\r\n\t\t\t\t\tdp.setUpdated(id, true, \"deleted\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif (dp.updateMode !== \"off\" && !dp._tSend) {\r\n\t\t\t\tdp.sendAllData();\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkUpdate\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isLinkExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkAdd\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isLinkExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tdp.setGanttMode(\"links\");\r\n\r\n\t\t\tconst needDbDelete = !clientSideDelete(id);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onRowDragEnd\", function(id, target) { // tslint:disable-line\r\n\t\t\tgantt._sendTaskOrder(id, gantt.getTask(id));\r\n\t\t}));\r\n\r\n\t\tlet tasks = null;\r\n\t\tlet links = null;\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onTaskIdChange\", function(oldId, newId) { // tslint:disable-line\r\n\t\t\tif (!dp._waitMode) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst children = gantt.getChildren(newId);\r\n\t\t\tif (children.length) {\r\n\t\t\t\ttasks = tasks || {};\r\n\r\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\r\n\t\t\t\t\tconst ch = this.getTask(children[i]);\r\n\t\t\t\t\ttasks[ch.id] = ch;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst item = this.getTask(newId);\r\n\t\t\tconst itemLinks = getTaskLinks(item);\r\n\r\n\t\t\tif (itemLinks.length) {\r\n\t\t\t\tlinks = links || {};\r\n\r\n\t\t\t\tfor (let i = 0; i < itemLinks.length; i++) {\r\n\t\t\t\t\tconst link = this.getLink(itemLinks[i]);\r\n\t\t\t\t\tlinks[link.id] = link;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tdp.attachEvent(\"onAfterUpdateFinish\", function() {\r\n\t\t\tif (tasks || links) {\r\n\t\t\t\tgantt.batchUpdate(function() {\r\n\t\t\t\t\tfor (const id in tasks) {\r\n\t\t\t\t\t\tgantt.updateTask(tasks[id].id);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (const id in links) {\r\n\t\t\t\t\t\tgantt.updateLink(links[id].id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttasks = null;\r\n\t\t\t\t\tlinks = null;\r\n\t\t\t\t});\r\n\t\t\t\tif (tasks) {\r\n\t\t\t\t\tgantt._dp.setGanttMode(\"tasks\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgantt._dp.setGanttMode(\"links\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"onBeforeDataSending\", function() {\r\n\t\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tlet url = this._serverProcessor;\r\n\t\t\tif (this._tMode === \"REST-JSON\" || this._tMode === \"REST\") {\r\n\t\t\t\tconst mode = this._ganttMode;\r\n\r\n\t\t\t\turl = url.substring(0, url.indexOf(\"?\") > -1 ? url.indexOf(\"?\") : url.length);\r\n\t\t\t\t// editing=true&\r\n\t\t\t\tthis.serverProcessor = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + mode;\r\n\t\t\t} else {\r\n\t\t\t\tconst pluralizedMode = this._ganttMode + \"s\";\r\n\t\t\t\tthis.serverProcessor = url + gantt.ajax.urlSeparator(url) + \"gantt_mode=\" + pluralizedMode;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"insertCallback\", function insertCallback(upd, id, parent, mode) { // tslint:disable-line\r\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\r\n\t\t\tconst methods = {\r\n\t\t\t\tadd: gantt.addTask,\r\n\t\t\t\tisExist: gantt.isTaskExists\r\n\t\t\t};\r\n\t\t\tif (mode === \"links\") {\r\n\t\t\t\tmethods.add = gantt.addLink;\r\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\r\n\t\t\t}\r\n\t\t\tif (methods.isExist.call(gantt, id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdata.id = id;\r\n\t\t\tmethods.add.call(gantt, data);\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"updateCallback\", function updateCallback(upd, id) {\r\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\r\n\t\t\tif (!gantt.isTaskExists(id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst objData = gantt.getTask(id);\r\n\t\t\tfor (const key in data) {\r\n\t\t\t\tlet property = data[key];\r\n\t\t\t\tswitch (key) {\r\n\t\t\t\t\tcase \"id\":\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tcase \"start_date\":\r\n\t\t\t\t\tcase \"end_date\":\r\n\t\t\t\t\t\tproperty = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date(property) : gantt.templates.parse_date(property);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"duration\":\r\n\t\t\t\t\t\tobjData.end_date = gantt.calculateEndDate({start_date: objData.start_date, duration: property, task:objData});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tobjData[key] = property;\r\n\t\t\t}\r\n\t\t\tgantt.updateTask(id);\r\n\t\t\tgantt.refreshData();\r\n\t\t});\r\n\t\tdp.attachEvent(\"deleteCallback\", function deleteCallback(upd, id, parent, mode) { // tslint:disable-line\r\n\t\t\tconst methods = {\r\n\t\t\t\tdelete: gantt.deleteTask,\r\n\t\t\t\tisExist: gantt.isTaskExists\r\n\t\t\t};\r\n\t\t\tif (mode === \"links\") {\r\n\t\t\t\tmethods.delete = gantt.deleteLink;\r\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\r\n\t\t\t} else if(mode === \"assignment\") {\r\n\t\t\t\tmethods.delete = function(val) {\r\n\t\t\t\t\tgantt.$data.assignmentsStore.remove(val);\r\n\t\t\t\t};\r\n\t\t\t\tmethods.isExist = function(val){\r\n\t\t\t\t\treturn gantt.$data.assignmentsStore.exists(val);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tif (methods.isExist.call(gantt, id)) {\r\n\t\t\t\tmethods.delete.call(gantt, id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.handleResourceCRUD(dp, gantt);\r\n\t\tthis.handleResourceAssignmentCRUD(dp, gantt);\r\n\t\tthis.handleBaselineCRUD(dp, gantt);\r\n\t}\r\n\r\n\tclientSideDelete(id, dp, gantt){\r\n\t\tconst updated = dp.updatedRows.slice();\r\n\t\tlet clientOnly = false;\r\n\r\n\t\tif(gantt.getUserData(id, \"!nativeeditor_status\", dp._ganttMode) === \"true_deleted\"){\r\n\t\t\tclientOnly = true;\r\n\t\t\tdp.setUpdated(id,false);\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < updated.length && !dp._in_progress[id]; i++) {\r\n\t\t\tif (updated[i] === id) {\r\n\t\t\t\tif (gantt.getUserData(id, \"!nativeeditor_status\", dp._ganttMode) === \"inserted\") {\r\n\t\t\t\t\tclientOnly = true;\r\n\t\t\t\t}\r\n\t\t\t\tdp.setUpdated(id,false);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clientOnly;\r\n\t}\r\n\r\n\thandleResourceAssignmentCRUD(dp, gantt){\r\n\t\tif(!gantt.config.resources || gantt.config.resources.dataprocessor_assignments !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst assignmentsStore = gantt.getDatastore(gantt.config.resource_assignment_store);\r\n\t\tconst insertedTasks = {};\r\n\t\tconst pendingAssignments = {};\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskAdd\", function(id, task){\r\n\t\t\tinsertedTasks[id] = true;\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tfunction putAssignmentToQueue(item){\r\n\t\t\tpendingAssignments[item.id] = item;\r\n\t\t\tinsertedTasks[item.task_id] = true;\r\n\t\t}\r\n\r\n\t\tfunction insertResourceAssignment(assignment){\r\n\t\t\tconst id = assignment.id;\r\n\t\t\tif (assignmentsStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"assignment\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t\tdelete pendingAssignments[id];\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onTaskIdChange\", function(id, newId){\r\n\t\t\tdelete insertedTasks[id];\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tif(insertedTasks[item.task_id]){\r\n\t\t\t\t// inserting assignment of new task\r\n\t\t\t\t// task is not saved yet, need to wait till it gets permanent id and save assigmnents after that\r\n\t\t\t\tputAssignmentToQueue(item);\r\n\t\t\t}else{\r\n\t\t\t\tinsertResourceAssignment(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (assignmentsStore.exists(id)) {\r\n\t\t\t\tif(pendingAssignments[id]){\r\n\t\t\t\t\tinsertResourceAssignment(item);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdp.setGanttMode(\"assignment\");\r\n\t\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"assignment\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\r\n\t}\r\n\r\n\thandleResourceCRUD(dp, gantt){\r\n\t\tif(!gantt.config.resources || gantt.config.resources.dataprocessor_resources !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst resourcesStore = gantt.getDatastore(gantt.config.resource_store);\r\n\r\n\t\tfunction insertResource(resource){\r\n\t\t\tconst id = resource.id;\r\n\t\t\tif (resourcesStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"resource\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tinsertResource(item);\r\n\t\t});\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (resourcesStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"resource\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"resource\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\r\n\t}\r\n\r\n\thandleBaselineCRUD(dp, gantt){\r\n\t\tif(!gantt.config.baselines || gantt.config.baselines.dataprocessor_baselines !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst baselineStore = gantt.getDatastore(gantt.config.baselines.datastore);\r\n\r\n\t\tfunction insertResource(resource){\r\n\t\t\tconst id = resource.id;\r\n\t\t\tif (baselineStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"baseline\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbaselineStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tinsertResource(item);\r\n\t\t});\r\n\r\n\t\tbaselineStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (baselineStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"baseline\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tbaselineStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"baseline\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\t}\r\n\r\n\tdetach() {\r\n\t\thelpers.forEach(this._dataProcessorHandlers, (e) => {\r\n\t\t\tthis.$gantt.detachEvent(e);\r\n\t\t});\r\n\t\tthis._dataProcessorHandlers = [];\r\n\t}\r\n}\r\n","import * as utils from \"../../utils/utils\";\r\n\r\nexport default class SimpleStorage {\r\n\tpublic static create = () : SimpleStorage => {\r\n\t\treturn new SimpleStorage();\r\n\t};\r\n\r\n\tprotected _storage: { [id: string]: any; };\r\n\r\n\tprotected constructor() {\r\n\t\tthis._storage = {};\r\n\t}\r\n\r\n\tpublic clear = (): void => {\r\n\t\tthis._storage = {};\r\n\t};\r\n\r\n\tpublic storeItem = (item: any): void => {\r\n\t\tthis._storage[item.id] = utils.copy(item);\r\n\t};\r\n\r\n\tpublic getStoredItem = (id: string): any => {\r\n\t\treturn this._storage[id] || null;\r\n\t};\r\n}","import eventable from \"../../utils/eventable\";\r\nimport * as helpers from \"../../utils/helpers\";\r\nimport * as utils from \"../../utils/utils\";\r\nimport DataProcessorEvents from \"./data_processor_events\";\r\nimport extendGantt from \"./extend_gantt\";\r\nimport SimpleStorage from \"./simple_storage\";\r\nimport global from \"../../utils/global\";\r\n\r\nexport interface DataProcessor { // tslint:disable-line\r\n\t$gantt: any;\r\n\tdetachAllEvents: any;\r\n\tattachEvent: any;\r\n\tcallEvent: any;\r\n\r\n\tserverProcessor: string;\r\n\taction_param: string;\r\n\tupdatedRows: any[];\r\n\tautoUpdate: boolean;\r\n\tupdateMode: string;\r\n\tmessages: any[];\r\n\tstyles: object;\r\n\tdnd: any;\r\n\tdeleteAfterConfirmation?: any;\r\n}\r\n\r\nexport function createDataProcessor(config: any) {\r\n\tlet router;\r\n\tlet tMode;\r\n\tlet headers;\r\n\tif (config instanceof Function) {\r\n\t\trouter = config;\r\n\t} else if (config.hasOwnProperty(\"router\")) {\r\n\t\trouter = config.router;\r\n\t} else if (config.hasOwnProperty(\"assignment\") || config.hasOwnProperty(\"baseline\") || config.hasOwnProperty(\"link\") || config.hasOwnProperty(\"task\")) {\r\n\t\trouter = config;\r\n\t} else if(config.hasOwnProperty(\"headers\")){\r\n\t\t// GS-2312 for custom headers\r\n\t\theaders = config.headers;\r\n\t}\r\n\tif (router) {\r\n\t\ttMode = \"CUSTOM\";\r\n\t} else {\r\n\t\ttMode = config.mode || \"REST-JSON\";\r\n\t}\r\n\tconst gantt = this; // tslint:disable-line\r\n\tconst dp = new DataProcessor(config.url);\r\n\r\n\r\n\tdp.init(gantt);\r\n\tdp.setTransactionMode({\r\n\t\tmode: tMode,\r\n\t\trouter,\r\n\t\theaders\r\n\t}, config.batchUpdate);\r\n\tif(config.deleteAfterConfirmation){\r\n\t\tdp.deleteAfterConfirmation = config.deleteAfterConfirmation;\r\n\t}\r\n\treturn dp;\r\n}\r\n\r\nexport class DataProcessor {\r\n\tpublic modes: object;\r\n\tpublic serverProcessor: string;\r\n\tpublic action_param: string; // tslint:disable-line\r\n\tpublic updatedRows: any[];\r\n\tpublic autoUpdate: boolean;\r\n\tpublic updateMode: string;\r\n\tpublic messages: any[];\r\n\tpublic styles: object;\r\n\tpublic dnd: any;\r\n\r\n\tprotected _tMode: string;\r\n\tprotected _headers: any;\r\n\tprotected _payload: any;\r\n\tprotected _postDelim: string;\r\n\tprotected _waitMode: number;\r\n\tprotected _in_progress: object; // tslint:disable-line\r\n\tprotected _invalid: object;\r\n\tprotected _storage: SimpleStorage;\r\n\tprotected _tSend: boolean;\r\n\tprotected _serializeAsJson: boolean;\r\n\tprotected _router: any;\r\n\tprotected _utf: boolean;\r\n\tprotected _methods: any[];\r\n\tprotected _user: any;\r\n\tprotected _uActions: object;\r\n\tprotected _needUpdate: boolean;\r\n\tprotected _ganttMode: \"task\"|\"link\";\r\n\tprotected _routerParametersFormat: \"parameters\"|\"object\";\r\n\r\n\tprotected _silent_mode: any; // tslint:disable-line\r\n\tprotected _updateBusy: any;\r\n\tprotected _serverProcessor: any;\r\n\tprotected _initialized: boolean;\r\n\r\n\tconstructor(serverProcessorURL?) {\r\n\t\tthis.serverProcessor = serverProcessorURL;\r\n\t\tthis.action_param = \"!nativeeditor_status\";\r\n\r\n\t\tthis.updatedRows = []; // ids of updated rows\r\n\r\n\t\tthis.autoUpdate = true;\r\n\t\tthis.updateMode = \"cell\";\r\n\t\tthis._headers = null;\r\n\t\tthis._payload = null;\r\n\t\tthis._postDelim = \"_\";\r\n\t\tthis._routerParametersFormat = \"parameters\";\r\n\r\n\t\tthis._waitMode = 0;\r\n\t\tthis._in_progress = {}; // ?\r\n\t\tthis._storage = SimpleStorage.create();\r\n\t\tthis._invalid = {};\r\n\t\tthis.messages = [];\r\n\r\n\t\tthis.styles = {\r\n\t\t\tupdated: \"font-weight:bold;\",\r\n\t\t\tinserted: \"font-weight:bold;\",\r\n\t\t\tdeleted: \"text-decoration : line-through;\",\r\n\t\t\tinvalid: \"background-color:FFE0E0;\",\r\n\t\t\tinvalid_cell: \"border-bottom:2px solid red;\",\r\n\t\t\terror: \"color:red;\",\r\n\t\t\tclear: \"font-weight:normal;text-decoration:none;\"\r\n\t\t};\r\n\t\tthis.enableUTFencoding(true);\r\n\t\teventable(this);\r\n\t}\r\n\r\n\tsetTransactionMode(mode:any, total?:any) {\r\n\t\tif (typeof mode === \"object\") {\r\n\t\t\tthis._tMode = mode.mode || this._tMode;\r\n\r\n\t\t\tif (utils.defined(mode.headers)) {\r\n\t\t\t\tthis._headers = mode.headers;\r\n\t\t\t}\r\n\r\n\t\t\tif (utils.defined(mode.payload)) {\r\n\t\t\t\tthis._payload = mode.payload;\r\n\t\t\t}\r\n\t\t\tthis._tSend = !!total;\r\n\t\t} else {\r\n\t\t\tthis._tMode = mode;\r\n\t\t\tthis._tSend = total;\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"REST\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"JSON\" || this._tMode === \"REST-JSON\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t\tthis._serializeAsJson = true;\r\n\t\t\tthis._headers = this._headers || {};\r\n\t\t\tthis._headers[\"Content-Type\"] = \"application/json\";\r\n\t\t}else{\r\n\t\t\tif(this._headers && !this._headers[\"Content-Type\"]){\r\n\t\t\t\tthis._headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t\tthis._router = mode.router;\r\n\t\t}\r\n\t}\r\n\r\n\tescape(data:any) {\r\n\t\tif (this._utf) {\r\n\t\t\treturn encodeURIComponent(data);\r\n\t\t} else {\r\n\t\t\treturn escape(data);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: allows to set escaping mode\r\n\t * @param: true - utf based escaping, simple - use current page encoding\r\n\t * @type: public\r\n\t */\r\n\tenableUTFencoding(mode:boolean) {\r\n\t\tthis._utf = !!mode;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: get state of updating\r\n\t * @returns: true - all in sync with server, false - some items not updated yet.\r\n\t * @type: public\r\n\t */\r\n\tgetSyncState() {\r\n\t\treturn !this.updatedRows.length;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: set if rows should be send to server automatically\r\n\t * @param: mode - \"row\" - based on row selection changed, \"cell\" - based on cell editing finished, \"off\" - manual data sending\r\n\t * @type: public\r\n\t */\r\n\tsetUpdateMode(mode: string, dnd: any) {\r\n\t\tthis.autoUpdate = (mode === \"cell\");\r\n\t\tthis.updateMode = mode;\r\n\t\tthis.dnd = dnd;\r\n\t}\r\n\r\n\tignore(code: any, master: any) {\r\n\t\tthis._silent_mode = true;\r\n\t\tcode.call(master || global);\r\n\t\tthis._silent_mode = false;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: mark row as updated/normal. check mandatory fields, initiate autoupdate (if turned on)\r\n\t * @param: rowId - id of row to set update-status for\r\n\t * @param: state - true for \"updated\", false for \"not updated\"\r\n\t * @param: mode - update mode name\r\n\t * @type: public\r\n\t */\r\n\tsetUpdated(rowId:number|string, state: boolean, mode?: string) {\r\n\t\tif (this._silent_mode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst ind = this.findRow(rowId);\r\n\r\n\t\tmode = mode || \"updated\";\r\n\t\tconst existing = this.$gantt.getUserData(rowId, this.action_param, this._ganttMode);\r\n\t\tif (existing && mode === \"updated\") {\r\n\t\t\tmode = existing;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tthis.set_invalid(rowId, false); // clear previous error flag\r\n\t\t\tthis.updatedRows[ind] = rowId;\r\n\t\t\tthis.$gantt.setUserData(rowId, this.action_param, mode, this._ganttMode);\r\n\t\t\tif (this._in_progress[rowId]) {\r\n\t\t\t\tthis._in_progress[rowId] = \"wait\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (!this.is_invalid(rowId)) {\r\n\t\t\t\tthis.updatedRows.splice(ind, 1);\r\n\t\t\t\tthis.$gantt.setUserData(rowId, this.action_param, \"\", this._ganttMode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.markRow(rowId, state, mode);\r\n\t\tif (state && this.autoUpdate) {\r\n\t\t\tthis.sendData(rowId);\r\n\t\t}\r\n\t}\r\n\r\n\tmarkRow(id: number | string, state: boolean, mode: string) {\r\n\t\tlet str = \"\";\r\n\t\tconst invalid = this.is_invalid(id);\r\n\t\tif (invalid) {\r\n\t\t\tstr = this.styles[invalid];\r\n\t\t\tstate = true;\r\n\t\t}\r\n\t\tif (this.callEvent(\"onRowMark\", [id, state, mode, invalid])) {\r\n\t\t\t// default logic\r\n\t\t\tstr = this.styles[state ? mode : \"clear\"] + \" \" + str;\r\n\r\n\t\t\tthis.$gantt[this._methods[0]](id, str);\r\n\r\n\t\t\tif (invalid && invalid.details) {\r\n\t\t\t\tstr += this.styles[invalid + \"_cell\"];\r\n\t\t\t\tfor (let i = 0; i < invalid.details.length; i++) {\r\n\t\t\t\t\tif (invalid.details[i]) {\r\n\t\t\t\t\t\tthis.$gantt[this._methods[1]](id, i, str);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetActionByState(state: string):string {\r\n\t\tif (state === \"inserted\") {\r\n\t\t\treturn \"create\";\r\n\t\t}\r\n\r\n\t\tif (state === \"updated\") {\r\n\t\t\treturn \"update\";\r\n\t\t}\r\n\r\n\t\tif (state === \"deleted\") {\r\n\t\t\treturn \"delete\";\r\n\t\t}\r\n\r\n\t\t// reorder\r\n\t\treturn \"update\";\r\n\t}\r\n\r\n\tgetState(id: number | string) {\r\n\t\treturn this.$gantt.getUserData(id, this.action_param, this._ganttMode);\r\n\t}\r\n\r\n\tis_invalid(id: number | string) {\r\n\t\treturn this._invalid[id];\r\n\t}\r\n\r\n\tset_invalid(id: number | string, mode: any, details?) {\r\n\t\tif (details) {\r\n\t\t\tmode = {\r\n\t\t\t\tvalue: mode,\r\n\t\t\t\tdetails,\r\n\t\t\t\ttoString: function() { // tslint:disable-line\r\n\t\t\t\t\treturn this.value.toString();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis._invalid[id] = mode;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: check mandatory fields and verify values of cells, initiate update (if specified). Can be redefined in order to provide custom validation\r\n\t * @param: rowId - id of row to set update-status for\r\n\t * @type: public\r\n\t */\r\n\t// tslint:disable-next-line\r\n\tcheckBeforeUpdate(rowId: number | string) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: send row(s) values to server\r\n\t * @param: rowId - id of row which data to send. If not specified, then all \"updated\" rows will be send\r\n\t * @type: public\r\n\t */\r\n\tsendData(rowId?: any) {\r\n\t\tif (this.$gantt.editStop) {\r\n\t\t\tthis.$gantt.editStop();\r\n\t\t}\r\n\r\n\t\tif (typeof rowId === \"undefined\" || this._tSend) {\r\n\r\n\t\t\tconst pendingUpdateModes = [];\r\n\t\t\tif(this.modes){\r\n\t\t\t\tconst knownModes = [\"task\", \"link\", \"assignment\", \"baseline\"];\r\n\t\t\t\tknownModes.forEach((mode) => {\r\n\t\t\t\t\tif(this.modes[mode] && this.modes[mode].updatedRows.length){\r\n\t\t\t\t\t\tpendingUpdateModes.push(mode);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (pendingUpdateModes.length){\r\n\t\t\t\tfor(let i = 0; i < pendingUpdateModes.length; i++){\r\n\t\t\t\t\tthis.setGanttMode(pendingUpdateModes[i]);\r\n\t\t\t\t\tthis.sendAllData();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\treturn this.sendAllData();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this._in_progress[rowId]) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.messages = [];\r\n\t\tif (!this.checkBeforeUpdate(rowId) && this.callEvent(\"onValidationError\", [rowId, this.messages])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\r\n\t}\r\n\r\n\tserialize(data: any, id: any) {\r\n\t\tif (this._serializeAsJson) {\r\n\t\t\treturn this._serializeAsJSON(data);\r\n\t\t}\r\n\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\t\tif (typeof id !== \"undefined\") {\r\n\t\t\treturn this.serialize_one(data, \"\");\r\n\t\t} else {\r\n\t\t\tconst stack = [];\r\n\t\t\tconst keys = [];\r\n\t\t\tfor (const key in data) {\r\n\t\t\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\t\t\tstack.push(this.serialize_one(data[key], key + this._postDelim));\r\n\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstack.push(\"ids=\" + this.escape(keys.join(\",\")));\r\n\t\t\tif (this.$gantt.security_key) {\r\n\t\t\t\tstack.push(\"dhx_security=\" + this.$gantt.security_key);\r\n\t\t\t}\r\n\t\t\treturn stack.join(\"&\");\r\n\t\t}\r\n\t}\r\n\r\n\tserialize_one(data: any, pref: string) {\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\t\tconst stack = [];\r\n\t\tlet serialized = \"\";\r\n\t\tfor (const key in data)\r\n\t\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\t\tif ((key === \"id\" ||\r\n\t\t\t\t\tkey == this.action_param) && // tslint:disable-line\r\n\t\t\t\t\tthis._tMode === \"REST\") {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof data[key] === \"string\" || typeof data[key] === \"number\") {\r\n\t\t\t\t\tserialized = String(data[key]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tserialized = JSON.stringify(data[key]);\r\n\t\t\t\t}\r\n\t\t\t\tstack.push(this.escape((pref || \"\") + key) + \"=\" + this.escape(serialized));\r\n\t\t\t}\r\n\t\treturn stack.join(\"&\");\r\n\t}\r\n\r\n\tsendAllData() {\r\n\t\tif (!this.updatedRows.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.messages = [];\r\n\t\tlet valid: any = true;\r\n\r\n\t\tthis._forEachUpdatedRow(function(rowId) {\r\n\t\t\tvalid = valid && this.checkBeforeUpdate(rowId);\r\n\t\t});\r\n\r\n\t\tif (!valid && !this.callEvent(\"onValidationError\", [\"\", this.messages])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._tSend) {\r\n\t\t\tthis._sendData(this._getAllData());\r\n\t\t} else {\r\n\t\t\t// this.updatedRows can be spliced from onBeforeUpdate via dp.setUpdated false\r\n\t\t\t// use an iterator instead of for(var i = 0; i < this.updatedRows; i++) then\r\n\t\t\tthis._forEachUpdatedRow(function(rowId) {\r\n\t\t\t\tif (!this._in_progress[rowId]) {\r\n\t\t\t\t\tif (this.is_invalid(rowId)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfindRow(pattern: any) {\r\n\t\tlet i = 0;\r\n\t\tfor (i = 0; i < this.updatedRows.length; i++) {\r\n\t\t\tif (pattern == this.updatedRows[i]) { // tslint:disable-line\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn i;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: define custom actions\r\n\t * @param: name - name of action, same as value of action attribute\r\n\t * @param: handler - custom function, which receives a XMl response content for action\r\n\t * @type: private\r\n\t */\r\n\tdefineAction(name: string, handler: any) {\r\n\t\tif (!this._uActions) {\r\n\t\t\tthis._uActions = {};\r\n\t\t}\r\n\t\tthis._uActions[name] = handler;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: used in combination with setOnBeforeUpdateHandler to create custom client-server transport system\r\n\t * @param: sid - id of item before update\r\n\t * @param: tid - id of item after up0ate\r\n\t * @param: action - action name\r\n\t * @type: public\r\n\t * @topic: 0\r\n\t */\r\n\tafterUpdateCallback(sid: number | string, tid: number | string, action: string, btag: any, ganttMode: string) {\r\n\t\tif(!this.$gantt){\r\n\t\t\t// destructor has been called before the callback\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setGanttMode(ganttMode);\r\n\r\n\t\tconst marker = sid;\r\n\t\tconst correct = (action !== \"error\" && action !== \"invalid\");\r\n\t\tif (!correct) {\r\n\t\t\tthis.set_invalid(sid, action);\r\n\t\t}\r\n\t\tif ((this._uActions) && (this._uActions[action]) && (!this._uActions[action](btag))) {\r\n\t\t\treturn (delete this._in_progress[marker]);\r\n\t\t}\r\n\r\n\t\tif (this._in_progress[marker] !== \"wait\") {\r\n\t\t\tthis.setUpdated(sid, false);\r\n\t\t}\r\n\r\n\t\tconst originalSid = sid;\r\n\r\n\t\tswitch (action) {\r\n\t\t\tcase \"inserted\":\r\n\t\t\tcase \"insert\":\r\n\t\t\t\tif (tid != sid) { // tslint:disable-line\r\n\t\t\t\t\tthis.setUpdated(sid, false);\r\n\t\t\t\t\tthis.$gantt[this._methods[2]](sid, tid);\r\n\t\t\t\t\tsid = tid;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"delete\":\r\n\t\t\tcase \"deleted\":\r\n\t\t\t\tif(!this.deleteAfterConfirmation || this._ganttMode !== \"task\"){\r\n\t\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"true_deleted\", this._ganttMode);\r\n\t\t\t\t\tthis.$gantt[this._methods[3]](sid);\r\n\t\t\t\t\tdelete this._in_progress[marker];\r\n\t\t\t\t\treturn this.callEvent(\"onAfterUpdate\", [sid, action, tid, btag]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif (this._ganttMode === \"task\" && this.$gantt.isTaskExists(sid)) {\r\n\t\t\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"true_deleted\", this._ganttMode);\r\n\t\t\t\t\t\tconst task = this.$gantt.getTask(sid);\r\n\t\t\t\t\t\tthis.$gantt.silent(() => {\r\n\t\t\t\t\t\t\tthis.$gantt.deleteTask(sid);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis.$gantt.callEvent(\"onAfterTaskDelete\", [sid, task]);\r\n\t\t\t\t\t\tthis.$gantt.render();\r\n\t\t\t\t\t\tdelete this._in_progress[marker];\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.callEvent(\"onAfterUpdate\", [sid, action, tid, btag]);\r\n\t\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif (this._in_progress[marker] !== \"wait\") {\r\n\t\t\tif (correct) {\r\n\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"\", this._ganttMode);\r\n\t\t\t}\r\n\t\t\tdelete this._in_progress[marker];\r\n\t\t} else {\r\n\t\t\tdelete this._in_progress[marker];\r\n\t\t\tthis.setUpdated(tid, true, this.$gantt.getUserData(sid, this.action_param, this._ganttMode));\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onAfterUpdate\", [originalSid, action, tid, btag]);\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: response from server\r\n\t * @param: xml - XMLLoader object with response XML\r\n\t * @type: private\r\n\t */\r\n\tafterUpdate(that: any, xml: any, id?:any) {\r\n\t\tlet _xml;\r\n\t\tif (arguments.length === 3) {\r\n\t\t\t_xml = arguments[1];\r\n\t\t} else {\r\n\t\t\t// old dataprocessor\r\n\t\t\t_xml = arguments[4];\r\n\t\t}\r\n\t\tlet mode = this.getGanttMode();\r\n\t\tconst reqUrl = _xml.filePath || _xml.url;\r\n\r\n\t\tif (this._tMode !== \"REST\" && this._tMode !== \"REST-JSON\") {\r\n\t\t\tif (reqUrl.indexOf(\"gantt_mode=links\") !== -1) {\r\n\t\t\t\tmode = \"link\";\r\n\t\t\t} else if (reqUrl.indexOf(\"gantt_mode=assignments\") !== -1) {\r\n\t\t\t\tmode = \"assignment\";\r\n\t\t\t} else if (reqUrl.indexOf(\"gantt_mode=baselines\") !== -1) {\r\n\t\t\t\tmode = \"baseline\";\r\n\t\t\t} else {\r\n\t\t\t\tmode = \"task\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (reqUrl.indexOf(\"/link\") >= 0) {\r\n\t\t\t\tmode = \"link\";\r\n\t\t\t} else if(reqUrl.indexOf(\"/assignment\") >= 0){\r\n\t\t\t\tmode = \"assignment\";\r\n\t\t\t} else if(reqUrl.indexOf(\"/baseline\") >= 0){\r\n\t\t\t\tmode = \"baseline\";\r\n\t\t\t} else {\r\n\t\t\t\tmode = \"task\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setGanttMode(mode);\r\n\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\t// try to use json first\r\n\t\tlet tag;\r\n\r\n\t\ttry {\r\n\t\t\ttag = JSON.parse(xml.xmlDoc.responseText);\r\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n\t\t} catch (e) {\r\n\r\n\t\t\t// empty response also can be processed by json handler\r\n\t\t\tif (!xml.xmlDoc.responseText.length) {\r\n\t\t\t\ttag = {};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst processCallback = (itemId: any) => {\r\n\t\t\tconst action = tag.action || this.getState(itemId) || \"updated\";\r\n\t\t\tconst sid = tag.sid || itemId[0];\r\n\t\t\tconst tid = tag.tid || itemId[0];\r\n\t\t\tthat.afterUpdateCallback(sid, tid, action, tag, mode);\r\n\t\t};\r\n\t\tif (tag) {\r\n\t\t\t// GS-753. When multiple tasks are updated, unhighlight all of them\r\n\t\t\tif (Array.isArray(id) && id.length > 1) {\r\n\t\t\t\tid.forEach((taskId) => processCallback(taskId));\r\n\t\t\t} else {\r\n\t\t\t\tprocessCallback(id);\r\n\t\t\t}\r\n\t\t\tthat.finalizeUpdate();\r\n\t\t\tthis.setGanttMode(mode);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// xml response\r\n\t\tconst top = ajax.xmltop(\"data\", xml.xmlDoc); // fix incorrect content type in IE\r\n\t\tif (!top) {\r\n\t\t\treturn this.cleanUpdate(id);\r\n\t\t}\r\n\t\tconst atag = ajax.xpath(\"//data/action\", top);\r\n\t\tif (!atag.length) {\r\n\t\t\treturn this.cleanUpdate(id);\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < atag.length; i++) {\r\n\t\t\tconst btag = atag[i];\r\n\t\t\tconst action = btag.getAttribute(\"type\");\r\n\t\t\tconst sid = btag.getAttribute(\"sid\");\r\n\t\t\tconst tid = btag.getAttribute(\"tid\");\r\n\r\n\t\t\tthat.afterUpdateCallback(sid, tid, action, btag, mode);\r\n\t\t}\r\n\t\tthat.finalizeUpdate();\r\n\t}\r\n\r\n\tcleanUpdate(id: any[]) {\r\n\t\tif (id) {\r\n\t\t\tfor (let i = 0; i < id.length; i++) {\r\n\t\t\t\tdelete this._in_progress[id[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfinalizeUpdate() {\r\n\t\tif (this._waitMode) {\r\n\t\t\tthis._waitMode--;\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onAfterUpdateFinish\", []);\r\n\t\tif (!this.updatedRows.length) {\r\n\t\t\tthis.callEvent(\"onFullSync\", []);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: initializes data-processor\r\n\t * @param: gantt - dhtmlxGantt object to attach this data-processor to\r\n\t * @type: public\r\n\t */\r\n\tinit(gantt: any) {\r\n\t\tif (this._initialized) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.$gantt = gantt;\r\n\t\tif (this.$gantt._dp_init) {\r\n\t\t\tthis.$gantt._dp_init(this);\r\n\t\t}\r\n\r\n\t\tthis._setDefaultTransactionMode();\r\n\r\n\t\tthis.styles = {\r\n\t\t\tupdated:\"gantt_updated\",\r\n\t\t\torder:\"gantt_updated\",\r\n\t\t\tinserted:\"gantt_inserted\",\r\n\t\t\tdeleted:\"gantt_deleted\",\r\n\t\t\tdelete_confirmation:\"gantt_deleted\",\r\n\t\t\tinvalid:\"gantt_invalid\",\r\n\t\t\terror:\"gantt_error\",\r\n\t\t\tclear:\"\"\r\n\t\t};\r\n\r\n\t\tthis._methods=[\"_row_style\",\"setCellTextStyle\",\"_change_id\",\"_delete_task\"];\r\n\t\textendGantt(this.$gantt, this);\r\n\t\tconst dataProcessorEvents = new DataProcessorEvents(this.$gantt, this);\r\n\t\tdataProcessorEvents.attach();\r\n\t\tthis.attachEvent(\"onDestroy\", function() {\r\n\t\t\tdelete this.setGanttMode;\r\n\t\t\tdelete this._getRowData;\r\n\r\n\t\t\tdelete this.$gantt._dp;\r\n\t\t\tdelete this.$gantt._change_id;\r\n\t\t\tdelete this.$gantt._row_style;\r\n\t\t\tdelete this.$gantt._delete_task;\r\n\t\t\tdelete this.$gantt._sendTaskOrder;\r\n\t\t\tdelete this.$gantt;\r\n\r\n\t\t\tdataProcessorEvents.detach();\r\n\t\t});\r\n\t\tthis.$gantt.callEvent(\"onDataProcessorReady\", [this]);\r\n\t\tthis._initialized = true;\r\n\t}\r\n\r\n\tsetOnAfterUpdate(handler) {\r\n\t\tthis.attachEvent(\"onAfterUpdate\", handler);\r\n\t}\r\n\r\n\tsetOnBeforeUpdateHandler(handler) {\r\n\t\tthis.attachEvent(\"onBeforeDataSending\", handler);\r\n\t}\r\n\r\n\t/* starts autoupdate mode\r\n\t\t@param interval time interval for sending update requests\r\n\t*/\r\n\tsetAutoUpdate(interval, user) {\r\n\t\tinterval = interval || 2000;\r\n\r\n\t\tthis._user = user || (new Date()).valueOf();\r\n\t\tthis._needUpdate = false;\r\n\r\n\t\tthis._updateBusy = false;\r\n\r\n\t\tthis.attachEvent(\"onAfterUpdate\", this.afterAutoUpdate); // arguments sid, action, tid, xml_node;\r\n\r\n\t\tthis.attachEvent(\"onFullSync\", this.fullSync);\r\n\r\n\t\tsetInterval(() => {\r\n\t\t\tthis.loadUpdate();\r\n\t\t}, interval);\r\n\t}\r\n\r\n\t/* process updating request response\r\n\t\tif status == collision version is deprecated\r\n\t\tset flag for autoupdating immediately\r\n\t*/\r\n\tafterAutoUpdate(sid, action, tid, xml_node) { // tslint:disable-line\r\n\t\tif (action === \"collision\") {\r\n\t\t\tthis._needUpdate = true;\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t/* callback function for onFillSync event\r\n\t\tcall update function if it's need\r\n\t*/\r\n\tfullSync() {\r\n\t\tif (this._needUpdate) {\r\n\t\t\tthis._needUpdate = false;\r\n\t\t\tthis.loadUpdate();\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/* sends query to the server and call callback function\r\n\t*/\r\n\tgetUpdates(url, callback) {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tif (this._updateBusy) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\tthis._updateBusy = true;\r\n\t\t}\r\n\r\n\t\tajax.get(url, callback);\r\n\r\n\t}\r\n\r\n\t/* loads updates and processes them\r\n\t*/\r\n\tloadUpdate() {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tconst version = this.$gantt.getUserData(0, \"version\", this._ganttMode);\r\n\t\tlet url = this.serverProcessor + ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, \"dhx_version=\" + version].join(\"&\");\r\n\t\turl = url.replace(\"editing=true&\", \"\");\r\n\t\tthis.getUpdates(url, (xml) => {\r\n\t\t\tconst vers = ajax.xpath(\"//userdata\", xml);\r\n\t\t\tthis.$gantt.setUserData(0, \"version\", this._getXmlNodeValue(vers[0]), this._ganttMode);\r\n\r\n\t\t\tconst updates = ajax.xpath(\"//update\", xml);\r\n\t\t\tif (updates.length) {\r\n\t\t\t\tthis._silent_mode = true;\r\n\r\n\t\t\t\tfor (let i = 0; i < updates.length; i++) {\r\n\t\t\t\t\tconst status = updates[i].getAttribute(\"status\");\r\n\t\t\t\t\tconst id = updates[i].getAttribute(\"id\");\r\n\t\t\t\t\tconst parent = updates[i].getAttribute(\"parent\");\r\n\t\t\t\t\tswitch (status) {\r\n\t\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"insertCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"updated\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"updateCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"deleteCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._silent_mode = false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateBusy = false;\r\n\t\t});\r\n\t}\r\n\r\n\tdestructor() {\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\r\n\t\tthis.updatedRows = [];\r\n\t\tthis._in_progress = {}; // ?\r\n\t\tthis._invalid = {};\r\n\t\tthis._storage.clear();\r\n\t\tthis._storage = null;\r\n\t\tthis._headers = null;\r\n\t\tthis._payload = null;\r\n\t\tdelete this._initialized;\r\n\t}\r\n\r\n\tsetGanttMode(mode) {\r\n\t\tif (mode === \"tasks\") {\r\n\t\t\tmode = \"task\";\r\n\t\t} else if (mode === \"links\") {\r\n\t\t\tmode = \"link\";\r\n\t\t}\r\n\r\n\t\tconst modes = this.modes || {};\r\n\t\tconst ganttMode = this.getGanttMode();\r\n\t\tif (ganttMode) {\r\n\t\t\tmodes[ganttMode] = {\r\n\t\t\t\t_in_progress : this._in_progress,\r\n\t\t\t\t_invalid: this._invalid,\r\n\t\t\t\t_storage: this._storage,\r\n\t\t\t\tupdatedRows : this.updatedRows\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tlet newState = modes[mode];\r\n\t\tif (!newState) {\r\n\t\t\tnewState = modes[mode] = {\r\n\t\t\t\t_in_progress : {},\r\n\t\t\t\t_invalid : {},\r\n\t\t\t\t_storage : SimpleStorage.create(),\r\n\t\t\t\tupdatedRows : []\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis._in_progress = newState._in_progress;\r\n\t\tthis._invalid = newState._invalid;\r\n\t\tthis._storage = newState._storage;\r\n\t\tthis.updatedRows = newState.updatedRows;\r\n\t\tthis.modes = modes;\r\n\t\tthis._ganttMode = mode;\r\n\t}\r\n\tgetGanttMode():string {\r\n\t\treturn this._ganttMode;\r\n\t}\r\n\r\n\tstoreItem(item) {\r\n\t\tthis._storage.storeItem(item);\r\n\t}\r\n\r\n\turl(url: string) {\r\n\t\tthis.serverProcessor = this._serverProcessor = url;\r\n\t}\r\n\r\n\tprotected _beforeSendData(data: any, rowId: any) {\r\n\t\tif (!this.callEvent(\"onBeforeUpdate\", [rowId, this.getState(rowId), data])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis._sendData(data, rowId);\r\n\t}\r\n\r\n\tprotected _serializeAsJSON(data: any) {\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\tconst copy = utils.copy(data);\r\n\t\tif (this._tMode === \"REST-JSON\") {\r\n\t\t\tdelete copy.id;\r\n\t\t\tdelete copy[this.action_param];\r\n\t\t}\r\n\r\n\t\treturn JSON.stringify(copy);\r\n\t}\r\n\r\n\tprotected _applyPayload(url: string) {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tif (this._payload) {\r\n\t\t\tfor (const key in this._payload) {\r\n\t\t\t\turl = url + ajax.urlSeparator(url) + this.escape(key) + \"=\" + this.escape(this._payload[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn url;\r\n\t}\r\n\r\n\t// GET/POST/JSON modes of the dataProcessor didn't send the whole data items in 'delete' requests\r\n\t// clear extra info from the data in order not to change the request format\r\n\tprotected _cleanupArgumentsBeforeSend(dataToSend: any) {\r\n\t\tlet processedData;\r\n\t\tif(dataToSend[this.action_param] === undefined){// hash of updated items, and not an individual item\r\n\t\t\tprocessedData = {};\r\n\t\t\tfor(const i in dataToSend) {\r\n\t\t\t\tprocessedData[i] = this._cleanupArgumentsBeforeSend(dataToSend[i]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tprocessedData = this._cleanupItemBeforeSend(dataToSend);\r\n\t\t}\r\n\t\treturn processedData;\r\n\t}\r\n\tprotected _cleanupItemBeforeSend(updatedItem: any) {\r\n\t\tlet output = null;\r\n\t\tif(updatedItem){\r\n\t\t\tif(updatedItem[this.action_param] === \"deleted\"){\r\n\t\t\t\toutput = {};\r\n\t\t\t\toutput.id = updatedItem.id;\r\n\t\t\t\toutput[this.action_param] = updatedItem[this.action_param];\r\n\t\t\t}else{\r\n\t\t\t\toutput = updatedItem;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprotected _sendData(dataToSend: any, rowId?: any) {\r\n\t\tif (!dataToSend) {\r\n\t\t\treturn; // nothing to send\r\n\t\t}\r\n\t\tif (!this.callEvent(\"onBeforeDataSending\", rowId ? [rowId, this.getState(rowId), dataToSend] : [null, null, dataToSend])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (rowId) {\r\n\t\t\tthis._in_progress[rowId] = (new Date()).valueOf();\r\n\t\t}\r\n\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\r\n\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\tconst taskState = this.getState(rowId);\r\n\t\t\tconst taskAction = this.getActionByState(taskState);\r\n\t\t\tconst ganttMode = this.getGanttMode();\r\n\t\t\tconst _onResolvedCreateUpdate = (tag) => {\r\n\t\t\t\tlet action = taskState || \"updated\";\r\n\t\t\t\tlet sid = rowId;\r\n\t\t\t\tlet tid = rowId;\r\n\r\n\t\t\t\tif (tag) {\r\n\t\t\t\t\taction = tag.action || taskState;\r\n\t\t\t\t\tsid = tag.sid || sid;\r\n\t\t\t\t\ttid = tag.id || tag.tid || tid;\r\n\t\t\t\t}\r\n\t\t\t\tthis.afterUpdateCallback(sid, tid, action, tag, ganttMode);\r\n\t\t\t};\r\n\r\n\t\t\tlet actionPromise;\r\n\t\t\tif (this._router instanceof Function) {\r\n\t\t\t\tif(this._routerParametersFormat === \"object\"){\r\n\t\t\t\t\tconst obj = {\r\n\t\t\t\t\t\tentity: ganttMode,\r\n\t\t\t\t\t\taction: taskAction,\r\n\t\t\t\t\t\tdata: dataToSend,\r\n\t\t\t\t\t\tid: rowId\r\n\t\t\t\t\t};\r\n\t\t\t\t\tactionPromise = this._router(obj);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tactionPromise = this._router(ganttMode, taskAction, dataToSend, rowId);\r\n\t\t\t\t}\r\n\t\t\t} else if (this._router[ganttMode] instanceof Function) {\r\n\t\t\t\tactionPromise = this._router[ganttMode](taskAction, dataToSend, rowId);\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconst errorMsgStart = \"Incorrect configuration of gantt.createDataProcessor\";\r\n\t\t\t\tconst errorMsgEnd = `\r\nYou need to either add missing properties to the dataProcessor router object or to use a router function.\r\nSee https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and https://docs.dhtmlx.com/gantt/api__gantt_createdataprocessor.html for details.`;\r\n\r\n\t\t\t\tif(!this._router[ganttMode]){\r\n\t\t\t\t\tthrow new Error(`${errorMsgStart}: router for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t}\r\n\t\t\t\tswitch (taskState) {\r\n\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\tif(!this._router[ganttMode].create){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **create** action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].create(dataToSend);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\tif(!this._router[ganttMode].delete){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **delete** action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].delete(rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(!this._router[ganttMode].update){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **update**\" action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].update(dataToSend, rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(actionPromise){\r\n\t\t\t\t// neither promise nor {tid: newId} response object\r\n\t\t\t\tif(!actionPromise.then &&\r\n\t\t\t\t\t(actionPromise.id === undefined && actionPromise.tid === undefined && actionPromise.action === undefined)){\r\n\t\t\t\t\tthrow new Error(\"Incorrect router return value. A Promise or a response object is expected\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(actionPromise.then){\r\n\t\t\t\t\tactionPromise.then(_onResolvedCreateUpdate).catch((error) => {\r\n\t\t\t\t\t\tif(error && error.action){\r\n\t\t\t\t\t\t\t_onResolvedCreateUpdate(error);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t_onResolvedCreateUpdate({ action: \"error\", value: error});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// custom method may return a response object in case of sync action\r\n\t\t\t\t\t_onResolvedCreateUpdate(actionPromise);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t_onResolvedCreateUpdate(null);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet queryParams: any;\r\n\t\tqueryParams = {\r\n\t\t\tcallback: (xml) => {\r\n\t\t\t\tconst ids = [];\r\n\r\n\t\t\t\tif (rowId) {\r\n\t\t\t\t\tids.push(rowId);\r\n\t\t\t\t} else if (dataToSend) {\r\n\t\t\t\t\tfor (const key in dataToSend) {\r\n\t\t\t\t\t\tids.push(key);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.afterUpdate(this, xml, ids);\r\n\t\t\t},\r\n\t\t\theaders: this._headers\r\n\t\t};\r\n\r\n\t\tconst dhxVersion = \"dhx_version=\" + this.$gantt.getUserData(0, \"version\", this._ganttMode);\r\n\t\tconst urlParams = this.serverProcessor + (this._user ? (ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, dhxVersion].join(\"&\")) : \"\");\r\n\t\tlet url: any = this._applyPayload(urlParams);\r\n\t\tlet data;\r\n\r\n\t\tswitch (this._tMode) {\r\n\t\t\tcase \"GET\":\r\n\t\t\t\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\r\n\t\t\t\tqueryParams.url = url + ajax.urlSeparator(url) + this.serialize(data, rowId);\r\n\t\t\t\tqueryParams.method = \"GET\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"POST\":\r\n\t\t\t\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\r\n\t\t\t\tqueryParams.url = url;\r\n\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\tqueryParams.data = this.serialize(data, rowId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"JSON\":\r\n\t\t\t\tdata = {};\r\n\t\t\t\tconst preprocessedData = this._cleanupItemBeforeSend(dataToSend);\r\n\t\t\t\tfor (const key in preprocessedData) {\r\n\t\t\t\t\tif (key === this.action_param || key === \"id\" || key === \"gr_id\") {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdata[key] = preprocessedData[key];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tqueryParams.url = url;\r\n\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\tqueryParams.data = JSON.stringify({\r\n\t\t\t\t\tid: rowId,\r\n\t\t\t\t\taction: dataToSend[this.action_param],\r\n\t\t\t\t\tdata\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"REST\":\r\n\t\t\tcase \"REST-JSON\":\r\n\t\t\t\turl = urlParams.replace(/(&|\\?)editing=true/, \"\");\r\n\t\t\t\tdata = \"\";\r\n\r\n\t\t\t\tswitch (this.getState(rowId)) {\r\n\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\tqueryParams.method = \"DELETE\";\r\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tqueryParams.method = \"PUT\";\r\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\r\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tqueryParams.url = this._applyPayload(url);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tthis._waitMode++;\r\n\t\treturn ajax.query(queryParams);\r\n\t}\r\n\r\n\tprotected _forEachUpdatedRow(code: any) {\r\n\t\tconst updatedRows = this.updatedRows.slice();\r\n\t\tfor (let i = 0; i < updatedRows.length; i++) {\r\n\t\t\tconst rowId = updatedRows[i];\r\n\t\t\tif (this.$gantt.getUserData(rowId, this.action_param, this._ganttMode)) {\r\n\t\t\t\tcode.call(this, rowId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _setDefaultTransactionMode() {\r\n\t\tif (this.serverProcessor) {\r\n\t\t\tthis.setTransactionMode(\"POST\", true);\r\n\t\t\tthis.serverProcessor += (this.serverProcessor.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + \"editing=true\";\r\n\t\t\tthis._serverProcessor = this.serverProcessor;\r\n\t\t}\r\n\t}\r\n\r\n\t/* returns xml node value\r\n\t\t@param node\r\n\t\t\txml node\r\n\t*/\r\n\tprotected _getXmlNodeValue(node) {\r\n\t\tif (node.firstChild) {\r\n\t\t\treturn node.firstChild.nodeValue;\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tprotected _getAllData() {\r\n\t\tconst out = {};\r\n\t\tlet hasOne = false;\r\n\r\n\t\tthis._forEachUpdatedRow(function(id) {\r\n\t\t\tif (this._in_progress[id] || this.is_invalid(id)){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst row = this._getRowData(id);\r\n\t\t\tif (!this.callEvent(\"onBeforeUpdate\", [id, this.getState(id), row])) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tout[id] = row;\r\n\t\t\thasOne = true;\r\n\t\t\tthis._in_progress[id] = (new Date()).valueOf();\r\n\t\t});\r\n\r\n\t\treturn hasOne ? out : null;\r\n\t}\r\n\r\n\tprotected _prepareDate(value: Date) : string {\r\n\t\treturn this.$gantt.defined(this.$gantt.templates.xml_format) ? this.$gantt.templates.xml_format(value) : this.$gantt.templates.format_date(value);\r\n\t}\r\n\r\n\tprotected _prepareArray(value: any[], traversedObjects: object[]) : any[] {\r\n\t\ttraversedObjects.push(value);\r\n\r\n\t\treturn value.map((item) => {\r\n\t\t\tif(helpers.isDate(item)){\r\n\t\t\t\treturn this._prepareDate(item);\r\n\t\t\t} else if (Array.isArray(item) && !helpers.arrayIncludes(traversedObjects, item)){\r\n\t\t\t\treturn this._prepareArray(item, traversedObjects);\r\n\t\t\t} else if (item && typeof item === \"object\" && !helpers.arrayIncludes(traversedObjects, item)) {\r\n\t\t\t\treturn this._prepareObject(item, traversedObjects);\r\n\t\t\t} else {\r\n\t\t\t\treturn item;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected _prepareObject(rawItem: any, traversedObjects: object[]) : any {\r\n\t\tconst processedItem = {};\r\n\t\ttraversedObjects.push(rawItem);\r\n\r\n\t\tfor (const key in rawItem) {\r\n\t\t\tif (key.substr(0, 1) === \"$\") {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst value = rawItem[key];\r\n\t\t\tif (helpers.isDate(value)) {\r\n\t\t\t\tprocessedItem[key] = this._prepareDate(value);\r\n\t\t\t} else if(value === null) {\r\n\t\t\t\tprocessedItem[key] = \"\";\r\n\t\t\t} else if (Array.isArray(value) && !helpers.arrayIncludes(traversedObjects, value)){\r\n\t\t\t\tprocessedItem[key] = this._prepareArray(value, traversedObjects);\r\n\t\t\t} else if (value && typeof value === \"object\" && !helpers.arrayIncludes(traversedObjects, value)) {\r\n\t\t\t\tprocessedItem[key] = this._prepareObject(value, traversedObjects);\r\n\t\t\t} else {\r\n\t\t\t\tprocessedItem[key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn processedItem;\r\n\t}\r\n\r\n\tprotected _prepareDataItem(rawItem: any): any {\r\n\t\tconst processedItem = this._prepareObject(rawItem, []);\r\n\r\n\t\tprocessedItem[this.action_param] = this.$gantt.getUserData(rawItem.id, this.action_param, this._ganttMode);\r\n\t\treturn processedItem;\r\n\t}\r\n\r\n\tprotected getStoredItem(id){\r\n\t\treturn this._storage.getStoredItem(id);\r\n\t}\r\n\r\n\tprotected _getRowData(id) {\r\n\t\tlet dataItem;\r\n\t\tconst gantt = this.$gantt;\r\n\t\tif (this.getGanttMode() === \"task\") {\r\n\t\t\tif(gantt.isTaskExists(id)){\r\n\t\t\t\tdataItem =this.$gantt.getTask(id);\r\n\t\t\t}\r\n\t\t} else if (this.getGanttMode() === \"assignment\") {\r\n\t\t\tif(this.$gantt.$data.assignmentsStore.exists(id)){\r\n\t\t\t\tdataItem =this.$gantt.$data.assignmentsStore.getItem(id);\r\n\t\t\t}\r\n\t\t} else if (this.getGanttMode() === \"baseline\") {\r\n\t\t\tif(this.$gantt.$data.baselineStore.exists(id)){\r\n\t\t\t\tdataItem =this.$gantt.$data.baselineStore.getItem(id);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif(gantt.isLinkExists(id)){\r\n\t\t\t\tdataItem =this.$gantt.getLink(id);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!dataItem) {\r\n\t\t\tdataItem = this.getStoredItem(id);\r\n\t\t}\r\n\r\n\t\tif (!dataItem) {\r\n\t\t\tdataItem = { id };\r\n\t\t}\r\n\r\n\t\treturn this._prepareDataItem(dataItem);\r\n\t}\r\n}","\r\nexport default function extendGantt(gantt: any, dp: any) {\r\n\tgantt.getUserData = function(id, name, store) {\r\n\t\tif (!this.userdata) {\r\n\t\t\tthis.userdata = {};\r\n\t\t}\r\n\t\tthis.userdata[store] = this.userdata[store] || {};\r\n\t\tif (this.userdata[store][id] && this.userdata[store][id][name]) {\r\n\t\t\treturn this.userdata[store][id][name];\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\tgantt.setUserData = function(id, name, value, store) {\r\n\t\tif (!this.userdata) {\r\n\t\t\tthis.userdata = {};\r\n\t\t}\r\n\t\tthis.userdata[store] = this.userdata[store] || {};\r\n\t\tthis.userdata[store][id] = this.userdata[store][id] || {};\r\n\t\tthis.userdata[store][id][name] = value;\r\n\t};\r\n\r\n\tgantt._change_id = function(oldId, newId) {\r\n\t\tswitch (this._dp._ganttMode) {\r\n\t\t\tcase \"task\":\r\n\t\t\t\tthis.changeTaskId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"link\":\r\n\t\t\t\tthis.changeLinkId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"assignment\":\r\n\t\t\t\tthis.$data.assignmentsStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"resource\":\r\n\t\t\t\tthis.$data.resourcesStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"baseline\":\r\n\t\t\t\tthis.$data.baselineStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid mode of the dataProcessor after database id is received: ${this._dp._ganttMode}, new id: ${newId}`);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt._row_style = function(rowId, classname){\r\n\t\tif (this._dp._ganttMode !== \"task\") {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!gantt.isTaskExists(rowId)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst task = gantt.getTask(rowId);\r\n\t\ttask.$dataprocessor_class = classname;\r\n\t\tgantt.refreshTask(rowId);\r\n\t};\r\n\r\n\t// fake method for dataprocessor\r\n\tgantt._delete_task = function(rowId, node) {}; // tslint:disable-line\r\n\r\n\tgantt._sendTaskOrder = function(id, item){\r\n\t\tif (item.$drop_target) {\r\n\t\t\tthis._dp.setGanttMode(\"task\");\r\n\t\t\tthis.getTask(id).target = item.$drop_target;\r\n\t\t\tthis._dp.setUpdated(id, true,\"order\");\r\n\t\t\tdelete this.getTask(id).$drop_target;\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.setDp = function() {\r\n\t\tthis._dp = dp;\r\n\t};\r\n\r\n\tgantt.setDp();\r\n}","import * as DataProcessor from \"./data_processor\";\r\nexport default {\r\n\tDEPRECATED_api: function(server) {\r\n\t\treturn new (DataProcessor.DataProcessor)(server);\r\n\t},\r\n\tcreateDataProcessor: DataProcessor.createDataProcessor\r\n};","import global from \"../../utils/global\";\r\n\r\nfunction createMethod(gantt){\r\n\tvar methods = {};\r\n\tvar isActive = false;\r\n\tfunction disableMethod(methodName, dummyMethod){\r\n\t\tdummyMethod = typeof dummyMethod == \"function\" ? dummyMethod : function(){};\r\n\r\n\t\tif(!methods[methodName]){\r\n\t\t\tmethods[methodName] = this[methodName];\r\n\t\t\tthis[methodName] = dummyMethod;\r\n\t\t}\r\n\t}\r\n\tfunction restoreMethod(methodName){\r\n\t\tif(methods[methodName]){\r\n\t\t\tthis[methodName] = methods[methodName];\r\n\t\t\tmethods[methodName] = null;\r\n\t\t}\r\n\t}\r\n\tfunction disableMethods(methodsHash){\r\n\t\tfor(var i in methodsHash){\r\n\t\t\tdisableMethod.call(this, i, methodsHash[i]);\r\n\t\t}\r\n\t}\r\n\tfunction restoreMethods(){\r\n\t\tfor(var i in methods){\r\n\t\t\trestoreMethod.call(this, i);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction batchUpdatePayload(callback){\r\n\t\ttry{\r\n\t\t\tcallback();\r\n\t\t}catch(e){\r\n\t\t\tglobal.console.error(e);\r\n\t\t}\r\n\t}\r\n\r\n\tvar state = gantt.$services.getService(\"state\");\r\n\tstate.registerProvider(\"batchUpdate\", function(){\r\n\t\treturn {\r\n\t\t\tbatch_update: isActive\r\n\t\t};\r\n\t}, false);\r\n\r\n\treturn function batchUpdate(callback, noRedraw) {\r\n\t\tif(isActive){\r\n\t\t\t// batch mode is already active\r\n\t\t\tbatchUpdatePayload(callback);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar call_dp = (this._dp && this._dp.updateMode != \"off\");\r\n\t\tvar dp_mode;\r\n\t\tif (call_dp){\r\n\t\t\tdp_mode = this._dp.updateMode;\r\n\t\t\tthis._dp.setUpdateMode(\"off\");\r\n\t\t}\r\n\r\n\t\t// temporary disable some methods while updating multiple tasks\r\n\t\tvar resetProjects = {};\r\n\t\tvar methods = {\r\n\t\t\t\"render\":true,\r\n\t\t\t\"refreshData\":true,\r\n\t\t\t\"refreshTask\":true,\r\n\t\t\t\"refreshLink\":true,\r\n\t\t\t\"resetProjectDates\":function(task){\r\n\t\t\t\tresetProjects[task.id] = task;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tdisableMethods.call(this, methods);\r\n\r\n\t\tisActive = true;\r\n\t\tthis.callEvent(\"onBeforeBatchUpdate\", []);\r\n\r\n\t\tbatchUpdatePayload(callback);\r\n\r\n\t\tthis.callEvent(\"onAfterBatchUpdate\", []);\r\n\r\n\t\trestoreMethods.call(this);\r\n\r\n\t\t// do required updates after changes applied\r\n\t\tfor(var i in resetProjects){\r\n\t\t\tthis.resetProjectDates(resetProjects[i]);\r\n\t\t}\r\n\r\n\t\tisActive = false;\r\n\r\n\t\tif(!noRedraw){\r\n\t\t\tthis.render();\r\n\t\t}\r\n\r\n\t\tif (call_dp) {\r\n\t\t\tthis._dp.setUpdateMode(dp_mode);\r\n\t\t\tthis._dp.setGanttMode(\"task\");\r\n\t\t\tthis._dp.sendData();\r\n\t\t\tthis._dp.setGanttMode(\"link\");\r\n\t\t\tthis._dp.sendData();\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n}\r\n\r\nexport default function(gantt){\r\n\tgantt.batchUpdate = createMethod(gantt);\r\n};","var createWbs = (function(gantt){\r\n\treturn {\r\n\t_needRecalc: true,\r\n\treset: function(){\r\n\t\tthis._needRecalc = true;\r\n\t},\r\n\t_isRecalcNeeded: function(){\r\n\t\treturn (!this._isGroupSort() && this._needRecalc);\r\n\t},\r\n\t_isGroupSort: function() {\r\n\t\treturn !!(gantt.getState().group_mode);\r\n\t},\r\n\t_getWBSCode: function(task) {\r\n\t\tif(!task) return \"\";\r\n\r\n\t\tif(this._isRecalcNeeded()){\r\n\t\t\tthis._calcWBS();\r\n\t\t}\r\n\r\n\t\tif(task.$virtual) return \"\";\r\n\t\tif(this._isGroupSort()) return task.$wbs || \"\";\r\n\r\n\t\tif(!task.$wbs) {\r\n\t\t\tthis.reset();\r\n\t\t\tthis._calcWBS();\r\n\t\t}\r\n\t\treturn task.$wbs;\r\n\t},\r\n\t_setWBSCode: function(task, value) {\r\n\t\ttask.$wbs = value;\r\n\t},\r\n\tgetWBSCode: function(task) {\r\n\t\treturn this._getWBSCode(task);\r\n\t},\r\n\tgetByWBSCode: function(code){\r\n\t\tvar parts = code.split(\".\");\r\n\t\tvar currentNode = gantt.config.root_id;\r\n\t\tfor(var i = 0; i < parts.length; i++){\r\n\t\t\tvar children = gantt.getChildren(currentNode);\r\n\t\t\tvar index = parts[i]*1 - 1;\r\n\t\t\tif(gantt.isTaskExists(children[index])){\r\n\t\t\t\tcurrentNode = children[index];\r\n\t\t\t}else{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(gantt.isTaskExists(currentNode)){\r\n\t\t\treturn gantt.getTask(currentNode);\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t},\r\n\t_calcWBS: function() {\r\n\t\tif(!this._isRecalcNeeded()) return;\r\n\r\n\t\tvar _isFirst = true;\r\n\t\tgantt.eachTask(function(ch) {\r\n\t\t\tif(_isFirst) {\r\n\t\t\t\t_isFirst = false;\r\n\t\t\t\tthis._setWBSCode(ch, \"1\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar _prevSibling = gantt.getPrevSibling(ch.id);\r\n\t\t\tif (_prevSibling !== null) {\r\n\t\t\t\tvar _wbs = gantt.getTask(_prevSibling).$wbs;\r\n\t\t\t\tif(_wbs) {\r\n\t\t\t\t\t_wbs = _wbs.split(\".\");\r\n\t\t\t\t\t_wbs[_wbs.length-1]++;\r\n\t\t\t\t\tthis._setWBSCode(ch, _wbs.join(\".\"));\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar _parent = gantt.getParent(ch.id);\r\n\t\t\t\tthis._setWBSCode(ch, gantt.getTask(_parent).$wbs + \".1\");\r\n\t\t\t}\r\n\t\t}, gantt.config.root_id, this);\r\n\r\n\t\tthis._needRecalc = false;\r\n\t}\r\n};\r\n});\r\n\r\nexport default function(gantt){\r\n\tvar wbs = createWbs(gantt);\r\n\tgantt.getWBSCode = function getWBSCode(task) {\r\n\t\treturn wbs.getWBSCode(task);\r\n\t};\r\n\r\n\tgantt.getTaskByWBSCode = function(code) {\r\n\t\treturn wbs.getByWBSCode(code);\r\n\t};\r\n\r\n\tfunction resetCache(){\r\n\t\twbs.reset();\r\n\t\treturn true;\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onAfterTaskMove\", resetCache);\r\n\tgantt.attachEvent(\"onBeforeParse\", resetCache);\r\n\tgantt.attachEvent(\"onAfterTaskDelete\", resetCache);\r\n\tgantt.attachEvent(\"onAfterTaskAdd\", resetCache);\r\n\tgantt.attachEvent(\"onAfterSort\", resetCache);\r\n\r\n};\r\n","import * as helpers from \"../../utils/helpers\";\r\n\r\nfunction createResourceMethods(gantt){\r\n\r\n\tvar resourceTaskCache = {};\r\n\tvar singleResourceCacheBuilt = false;\r\n\r\n\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(){\r\n\t\tresourceTaskCache = {};\r\n\t\tsingleResourceCacheBuilt = false;\r\n\t});\r\n\tgantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\t\tresourceTaskCache = {};\r\n\t});\r\n\r\n\tfunction getTaskBy(propertyName, propertyValue, typeFilter) {\r\n\t\tif (typeof propertyName == \"function\") {\r\n\t\t\treturn filterResourceTasks(propertyName);\r\n\t\t} else {\r\n\t\t\tif (helpers.isArray(propertyValue)) {\r\n\t\t\t\treturn getResourceTasks(propertyName, propertyValue, typeFilter);\r\n\t\t\t} else {\r\n\t\t\t\treturn getResourceTasks(propertyName, [propertyValue], typeFilter);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction filterResourceTasks(filter) {\r\n\t\tvar res = [];\r\n\t\tgantt.eachTask(function (task) {\r\n\t\t\tif (filter(task)) {\r\n\t\t\t\tres.push(task);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn res;\r\n\t}\r\n\r\n\tvar falsyValuePrefix = String(Math.random());\r\n\tfunction resourceHashFunction(value){\r\n\t\tif (value === null){\r\n\t\t\treturn falsyValuePrefix + String(value);\r\n\t\t}\r\n\t\treturn String(value);\r\n\t}\r\n\r\n\tfunction getCacheKey(resourceIds, property, typeFilter) {\r\n\t\tif (Array.isArray(resourceIds)) {\r\n\t\t\treturn resourceIds.map(function (value) {\r\n\t\t\t\treturn resourceHashFunction(value);\r\n\t\t\t}).join(\"_\") + `_${property}_${typeFilter}`;\r\n\t\t} else {\r\n\t\t\treturn resourceHashFunction(resourceIds) + `_${property}_${typeFilter}`;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getResourceTasks(property, resourceIds, typeFilter) {\r\n\t\tvar res;\r\n\t\tvar cacheKey = getCacheKey(resourceIds, property, JSON.stringify(typeFilter));\r\n\t\tvar matchingResources = {};\r\n\t\thelpers.forEach(resourceIds, function(resourceId) {\r\n\t\t\tmatchingResources[resourceHashFunction(resourceId)] = true;\r\n\t\t});\r\n\r\n\t\tif (!resourceTaskCache[cacheKey]) {\r\n\t\t\tres = resourceTaskCache[cacheKey] = [];\r\n\t\t\tgantt.eachTask(function (task) {\r\n\t\t\t\tif (typeFilter) {\r\n\t\t\t\t\tif (!typeFilter[gantt.getTaskType(task)]) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (task.type == gantt.config.types.project) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (property in task) {\r\n\t\t\t\t\tvar resourceValue;\r\n\t\t\t\t\tif (!helpers.isArray(task[property])) {\r\n\t\t\t\t\t\tresourceValue = [task[property]];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tresourceValue = task[property];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\thelpers.forEach(resourceValue, function(value) {\r\n\t\t\t\t\t\tvar resourceValue = (value && value.resource_id) ? value.resource_id : value;\r\n\r\n\t\t\t\t\t\tif (matchingResources[resourceHashFunction(resourceValue)]) {\r\n\t\t\t\t\t\t\tres.push(task);\r\n\t\t\t\t\t\t}else if(!singleResourceCacheBuilt){\r\n\r\n\t\t\t\t\t\t\tvar key = getCacheKey(value, property);\r\n\t\t\t\t\t\t\tif(!resourceTaskCache[key]){\r\n\t\t\t\t\t\t\t\tresourceTaskCache[key] = [];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tresourceTaskCache[key].push(task);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tsingleResourceCacheBuilt = true;\r\n\t\t} else {\r\n\t\t\tres = resourceTaskCache[cacheKey];\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t}\r\n\r\n\tfunction selectAssignments(resourceId, taskId, result){\r\n\t\tvar property = gantt.config.resource_property;\r\n\t\tvar owners = [];\r\n\t\tif (gantt.getDatastore(\"task\").exists(taskId)) {\r\n\t\t\tvar task = gantt.getTask(taskId);\r\n\t\t\towners = task[property] || [];\r\n\t\t}\r\n\r\n\t\tif (!Array.isArray(owners)) {\r\n\t\t\towners = [owners];\r\n\t\t}\r\n\t\tfor (var i = 0; i < owners.length; i++) {\r\n\t\t\tif (owners[i].resource_id == resourceId) {\r\n\t\t\t\tresult.push({task_id: task.id, resource_id:owners[i].resource_id, value:owners[i].value});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getResourceAssignments(resourceId, taskId){\r\n\t\t// resource assignment as an independent module:\r\n\t\t// {taskId:, resourceId, value}\r\n\t\t// TODO: probably should add a separate datastore for these\r\n\t\tvar assignments = [];\r\n\t\tvar property = gantt.config.resource_property;\r\n\t\tif(taskId !== undefined){\r\n\t\t\tselectAssignments(resourceId, taskId, assignments);\r\n\t\t}else{\r\n\t\t\tvar tasks = gantt.getTaskBy(property, resourceId);\r\n\t\t\ttasks.forEach(function(task){\r\n\t\t\t\tselectAssignments(resourceId, task.id, assignments);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn assignments;\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetTaskBy: getTaskBy,\r\n\t\tgetResourceAssignments: getResourceAssignments\r\n\t};\r\n}\r\n\r\nfunction createHelper(gantt){\r\n\tconst resourcePlugin = {\r\n\t\trenderEditableLabel: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tconst editable = gantt.config.readonly ? \"\" : \"contenteditable\";\r\n\t\t\tif(start_date < resource.end_date && end_date > resource.start_date){\r\n\t\t\t\tfor(let i = 0; i < assignments.length; i++){\r\n\t\t\t\t\tconst a = assignments[i];\r\n\t\t\t\t\t\treturn \"\" + a.value + \"
\";\r\n\t\t\t\t}\r\n\t\t\t\treturn \"-
\";\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t},\r\n\t\trenderSummaryLabel: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tlet sum = assignments.reduce(function(total, assignment){ \r\n\t\t\t\treturn total + Number(assignment.value);\r\n\t\t\t}, 0);\r\n\r\n\t\t\tif(sum % 1){\r\n\t\t\t\tsum = Math.round(sum * 10)/10;\r\n\t\t\t}\r\n\r\n\t\t\tif(sum){\r\n\t\t\t\treturn \"\" + sum + \"
\";\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t},\r\n\t\teditableResourceCellTemplate: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tif(resource.$role === \"task\"){\r\n\t\t\t\treturn resourcePlugin.renderEditableLabel(start_date, end_date, resource, tasks, assignments);\r\n\t\t\t}else{\r\n\t\t\t\treturn resourcePlugin.renderSummaryLabel(start_date, end_date, resource, tasks, assignments);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t\r\n\t\teditableResourceCellClass: function(start_date, end_date, resource, tasks, assignments){\r\n\t\t\tconst css = [];\r\n\t\t\tcss.push(\"resource_marker\");\r\n\r\n\t\t\tif(resource.$role === \"task\"){\r\n\t\t\t\tcss.push(\"task_cell\");\r\n\t\t\t}else{\r\n\t\t\t\tcss.push(\"resource_cell\");\r\n\t\t\t}\r\n\r\n\t\t\tconst sum = assignments.reduce(function(total, assignment){ \r\n\t\t\t\treturn total + Number(assignment.value);\r\n\t\t\t}, 0);\r\n\r\n\t\t\tlet capacity = Number(resource.capacity);\r\n\t\t\tif(isNaN(capacity)){\r\n\t\t\t\tcapacity = 8;\r\n\t\t\t}\r\n\t\t\tif (sum <= capacity) {\r\n\t\t\t\tcss.push(\"workday_ok\");\r\n\t\t\t} else {\r\n\t\t\t\tcss.push(\"workday_over\");\r\n\t\t\t}\r\n\t\t\treturn css.join(\" \");\r\n\t\t},\r\n\t\tgetSummaryResourceAssignments: function getResourceAssignments(resourceId) {\r\n\t\t\tlet assignments;\r\n\t\t\tconst store = gantt.getDatastore(gantt.config.resource_store);\r\n\t\t\tconst resource = store.getItem(resourceId);\r\n\r\n\t\t\tif(resource.$role === \"task\"){\r\n\t\t\t\tassignments = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id);\r\n\t\t\t}else{\r\n\t\t\t\tassignments = gantt.getResourceAssignments(resourceId);\r\n\t\t\t\tif(store.eachItem){\r\n\t\t\t\t\tstore.eachItem(function(childResource){\r\n\t\t\t\t\t\tif(childResource.$role !== \"task\"){\r\n\t\t\t\t\t\t\tassignments = assignments.concat(gantt.getResourceAssignments(childResource.id));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, resourceId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn assignments;\r\n\t\t},\r\n\t\t\r\n\t\tinitEditableDiagram: function(){\r\n\t\t\tgantt.config.resource_render_empty_cells = true;\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t(function(){\r\n\t\t\t\t/// salesforce locker workaround\r\n\t\t\t\t// SF removes 'contenteditable' attribute from cells\r\n\t\t\t\t// restore it on render\r\n\t\t\t\tlet timeoutId = null;\r\n\t\t\t\tfunction makeEditable() {\r\n\t\t\t\t\tif (timeoutId) {\r\n\t\t\t\t\t\tcancelAnimationFrame(timeoutId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttimeoutId = requestAnimationFrame(function () {\r\n\t\t\t\t\t\tif (gantt.$container){\r\n\t\t\t\t\t\t\tvar cells = Array.prototype.slice.call(gantt.$container.querySelectorAll(\".resourceTimeline_cell [data-assignment-cell]\"));\r\n\t\t\t\t\t\t\tcells.forEach(function (cell) {\r\n\t\t\t\t\t\t\t\tcell.contentEditable = true;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\t\t\t\tgantt.getDatastore(gantt.config.resource_assignment_store).attachEvent(\"onStoreUpdated\", makeEditable);\r\n\t\t\t\t\tgantt.getDatastore(gantt.config.resource_store).attachEvent(\"onStoreUpdated\", makeEditable);\r\n\t\t\t\t}, {once: true});\r\n\t\t\t\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t\t\t\t\tconst ganttViews = gantt.$layout.getCellsByType(\"viewCell\");\r\n\t\t\t\t\tganttViews.forEach(function(view){\r\n\t\t\t\t\t\tif(view.$config && view.$config.view === \"resourceTimeline\" && view.$content){\r\n\t\t\t\t\t\t\tview.$content.attachEvent(\"onScroll\", makeEditable);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t})();\r\n\r\n\r\n\t\t\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\t\t\tlet assignmentEditInProcess = false;\r\n\t\t\t\tgantt.event(gantt.$container, \"keypress\", function(e){\r\n\t\t\t\t\tvar target = e.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\r\n\t\t\t\t\tif(target){\r\n\t\t\t\t\t\tif (e.keyCode === 13 || e.keyCode === 27) {\r\n\t\t\t\t\t\t\ttarget.blur();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgantt.event(gantt.$container, \"focusout\", function(e){\r\n\t\t\t\t\tif (assignmentEditInProcess){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tassignmentEditInProcess = true;\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tassignmentEditInProcess = false;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t\tvar target = e.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\r\n\t\t\t\t\tif(target){\r\n\t\t\t\t\t\tvar strValue = (target.innerText || \"\").trim();\r\n\t\t\t\t\t\tif(strValue == \"-\"){\r\n\t\t\t\t\t\t\tstrValue = \"0\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar value = Number(strValue);\r\n\t\t\t\t\t\tvar rowId = target.getAttribute(\"data-row-id\");\r\n\t\t\t\t\t\tvar assignmentId = target.getAttribute(\"data-assignment-id\");\r\n\t\t\t\t\t\tvar taskId = target.getAttribute(\"data-task\");\r\n\t\t\t\t\t\tvar resourceId = target.getAttribute(\"data-resource-id\");\r\n\t\t\t\t\t\tvar startDate = gantt.templates.parse_date(target.getAttribute(\"data-start-date\"));\r\n\t\t\t\t\t\tvar endDate = gantt.templates.parse_date(target.getAttribute(\"data-end-date\"));\r\n\r\n\t\t\t\t\t\tvar assignmentStore = gantt.getDatastore(gantt.config.resource_assignment_store);\r\n\t\t\t\t\t\tif(isNaN(value)){\r\n\t\t\t\t\t\t\tgantt.getDatastore(gantt.config.resource_store).refresh(rowId);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tvar task = gantt.getTask(taskId);\r\n\t\t\t\t\t\t\t// GS-2141. Track the changes by the Undo extension\r\n\t\t\t\t\t\t\tif (gantt.plugins().undo){\r\n\t\t\t\t\t\t\t\tgantt.ext.undo.saveState(taskId, \"task\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(assignmentId){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar assignment = assignmentStore.getItem(assignmentId);\r\n\t\t\t\t\t\t\t\tif(value === assignment.value){\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif(assignment.start_date.valueOf() === startDate.valueOf() && assignment.end_date.valueOf() === endDate.valueOf()){\r\n\t\t\t\t\t\t\t\t\tassignment.value = value;\r\n\t\t\t\t\t\t\t\t\tif(!value){\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.removeItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.updateItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tif(assignment.end_date.valueOf() > endDate.valueOf()){\r\n\t\t\t\t\t\t\t\t\t\tvar nextChunk = gantt.copy(assignment);\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.id = gantt.uid();\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.start_date = endDate;\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.duration = gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: nextChunk.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: nextChunk.end_date,\r\n\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.delay = gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: nextChunk.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\tnextChunk.mode = assignment.mode || \"default\";\r\n\t\t\t\t\t\t\t\t\t\tif(nextChunk.duration !== 0){\r\n\t\t\t\t\t\t\t\t\t\t\tassignmentStore.addItem(nextChunk);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif(assignment.start_date.valueOf() < startDate.valueOf()){\r\n\t\t\t\t\t\t\t\t\t\tassignment.end_date = startDate;\r\n\t\t\t\t\t\t\t\t\t\tassignment.duration = gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: assignment.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: assignment.end_date,\r\n\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\tassignment.mode = \"fixedDuration\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(assignment.duration === 0){\r\n\t\t\t\t\t\t\t\t\t\t\tassignmentStore.removeItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tassignmentStore.updateItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.removeItem(assignment.id);\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif(value){\r\n\t\t\t\t\t\t\t\t\t\tassignmentStore.addItem({\r\n\t\t\t\t\t\t\t\t\t\t\ttask_id: assignment.task_id,\r\n\t\t\t\t\t\t\t\t\t\t\tresource_id: assignment.resource_id,\r\n\t\t\t\t\t\t\t\t\t\t\tvalue: value,\r\n\t\t\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\t\t\tduration: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\tdelay: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\t\t\t\t\t\t\tend_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\tmode: \"fixedDuration\"\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tgantt.updateTaskAssignments(task.id);\r\n\t\t\t\t\t\t\t\tgantt.updateTask(task.id);\r\n\t\t\t\t\t\t\t}else if(value){\r\n\t\t\t\t\t\t\t\tvar assignment = {\r\n\t\t\t\t\t\t\t\t\ttask_id: taskId,\r\n\t\t\t\t\t\t\t\t\tresource_id: resourceId,\r\n\t\t\t\t\t\t\t\t\tvalue: value,\r\n\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\tduration: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\tstart_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\tend_date: endDate,\r\n\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tdelay: gantt.calculateDuration({\r\n\t\t\t\t\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\t\t\t\t\tend_date: startDate,\r\n\t\t\t\t\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tmode: \"fixedDuration\"\r\n\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\tassignmentStore.addItem(assignment);\r\n\t\t\t\t\t\t\t\tgantt.updateTaskAssignments(task.id);\r\n\t\t\t\t\t\t\t\tgantt.updateTask(task.id);\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}, {once: true});\r\n\t\t}\r\n\t};\r\n\treturn resourcePlugin;\r\n}\r\n\r\nexport default function(gantt){\r\n\tvar methods = createResourceMethods(gantt);\r\n\t\r\n\tgantt.ext.resources = createHelper(gantt);\r\n\r\n\tgantt.config.resources = {\r\n\t\tdataprocessor_assignments: false,\r\n\t\tdataprocessor_resources: false,\r\n\t\teditable_resource_diagram: false,\r\n\t\tresource_store: {\r\n\t\t\ttype: \"treeDataStore\",\r\n\t\t\tfetchTasks: false,\r\n\t\t\tinitItem: function(item) {\r\n\t\t\t\titem.parent = item.parent || gantt.config.root_id;\r\n\t\t\t\titem[gantt.config.resource_property] = item.parent;\r\n\t\t\t\titem.open = true;\r\n\t\t\t\treturn item;\r\n\t\t\t}\r\n\t\t},\r\n\t\tlightbox_resources: function selectResourceControlOptions(resources){\r\n\t\t\tconst lightboxOptions = [];\r\n\t\t\tconst store = gantt.getDatastore(gantt.config.resource_store);\r\n\t\t\tresources.forEach(function(res) {\r\n\t\t\t\tif (!store.hasChild(res.id)) {\r\n\t\t\t\t\tconst copy = gantt.copy(res);\r\n\t\t\t\t\tcopy.key = res.id;\r\n\t\t\t\t\tcopy.label = res.text;\r\n\t\t\t\t\tlightboxOptions.push(copy);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn lightboxOptions;\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tif(gantt.getDatastore(gantt.config.resource_store)){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst resourceStoreConfig = gantt.config.resources ? gantt.config.resources.resource_store : undefined;\r\n\t\tlet fetchTasks = resourceStoreConfig ? resourceStoreConfig.fetchTasks : undefined;\r\n\t\tif(gantt.config.resources && gantt.config.resources.editable_resource_diagram){\r\n\t\t\tfetchTasks = true;\r\n\t\t}\r\n\r\n\t\tlet initItems = function(item) {\r\n\t\t\titem.parent = item.parent || gantt.config.root_id;\r\n\t\t\titem[gantt.config.resource_property] = item.parent;\r\n\t\t\titem.open = true;\r\n\t\t\treturn item;\r\n\t\t};\r\n\r\n\t\tif(resourceStoreConfig && resourceStoreConfig.initItem){\r\n\t\t\tinitItems = resourceStoreConfig.initItem;\r\n\t\t}\r\n\r\n\t\tconst storeType = resourceStoreConfig && resourceStoreConfig.type ? resourceStoreConfig.type : \"treeDatastore\";\r\n\r\n\t\tgantt.$resourcesStore = gantt.createDatastore({\r\n\t\t\tname: gantt.config.resource_store,\r\n\t\t\ttype: storeType,\r\n\t\t\tfetchTasks: fetchTasks !== undefined ? fetchTasks : false,\r\n\t\t\tinitItem: initItems\r\n\t\t});\r\n\r\n\t\tgantt.$data.resourcesStore = gantt.$resourcesStore;\r\n\r\n\t\tgantt.$resourcesStore.attachEvent(\"onParse\", function() {\r\n\t\t\tfunction selectResourceControlOptions(resources){\r\n\t\t\t\tconst lightboxOptions = [];\r\n\t\t\t\tresources.forEach(function(res) {\r\n\t\t\t\t\tif (!gantt.$resourcesStore.hasChild(res.id)) {\r\n\t\t\t\t\t\tvar copy = gantt.copy(res);\r\n\t\t\t\t\t\tcopy.key = res.id;\r\n\t\t\t\t\t\tcopy.label = res.text;\r\n\t\t\t\t\t\tlightboxOptions.push(copy);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn lightboxOptions;\r\n\t\t\t}\r\n\r\n\t\t\tlet lightboxOptionsFnc = selectResourceControlOptions;\r\n\t\t\tif(gantt.config.resources && gantt.config.resources.lightbox_resources){\r\n\t\t\t\tlightboxOptionsFnc = gantt.config.resources.lightbox_resources;\r\n\t\t\t}\r\n\r\n\t\t\tconst options = lightboxOptionsFnc(gantt.$resourcesStore.getItems());\r\n\r\n\t\t\tgantt.updateCollection(\"resourceOptions\", options);\r\n\t\t});\r\n\t});\r\n\r\n\tgantt.getTaskBy = methods.getTaskBy;\r\n\tgantt.getResourceAssignments = methods.getResourceAssignments;\r\n\tgantt.config.resource_property = \"owner_id\";\r\n\tgantt.config.resource_store = \"resource\";\r\n\tgantt.config.resource_render_empty_cells = false;\r\n\r\n\t/**\r\n\t * these are placeholder functions that should be redefined by the user\r\n\t*/\r\n\tgantt.templates.histogram_cell_class = function(start_date, end_date, resource, tasks, assignments) {};\r\n\tgantt.templates.histogram_cell_label = function(start_date, end_date, resource, tasks, assignments) {\r\n\t\treturn tasks.length + \"/3\";\r\n\t};\r\n\tgantt.templates.histogram_cell_allocated = function(start_date, end_date, resource, tasks, assignments) {\r\n\t\treturn tasks.length / 3;\r\n\t};\r\n\tgantt.templates.histogram_cell_capacity = function(start_date, end_date, resource, tasks, assignments) {\r\n\t\treturn 0;\r\n\t};\r\n\r\n\r\n\tconst defaultResourceCellClass = function(start, end, resource, tasks, assignments) {\r\n\t\tvar css = \"\";\r\n\t\tif (tasks.length <= 1) {\r\n\t\t\tcss = \"gantt_resource_marker_ok\";\r\n\t\t} else {\r\n\t\t\tcss = \"gantt_resource_marker_overtime\";\r\n\t\t}\r\n\t\treturn css;\r\n\t};\r\n\r\n\tconst defaultResourceCellTemplate = function(start, end, resource, tasks, assignments) {\r\n\t\treturn tasks.length * 8;\r\n\t};\r\n\r\n\tgantt.templates.resource_cell_value = defaultResourceCellTemplate;\r\n\tgantt.templates.resource_cell_class = defaultResourceCellClass;\r\n\r\n\t//editable_resource_diagram\r\n\tgantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tif(gantt.config.resources && gantt.config.resources.editable_resource_diagram){\r\n\r\n\t\t\tgantt.config.resource_render_empty_cells = true;\r\n\t\t\tif(gantt.templates.resource_cell_value === defaultResourceCellTemplate){\r\n\t\t\t\tgantt.templates.resource_cell_value = gantt.ext.resources.editableResourceCellTemplate;\r\n\t\t\t}\r\n\t\t\tif(gantt.templates.resource_cell_class === defaultResourceCellClass){\r\n\t\t\t\tgantt.templates.resource_cell_class = gantt.ext.resources.editableResourceCellClass;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tgantt.ext.resources.initEditableDiagram(gantt);\r\n\t\t}\r\n\t});\r\n};\r\n\r\n\r\n","export default function (gantt) {\r\n\tvar resourceAssignmentsProperty = \"$resourceAssignments\";\r\n\tgantt.config.resource_assignment_store = \"resourceAssignments\";\r\n\tgantt.config.process_resource_assignments = true;\r\n\r\n\tvar resourceAssignmentFormats = {\r\n\t\tauto: \"auto\",\r\n\t\tsingleValue: \"singleValue\",\r\n\t\tvalueArray: \"valueArray\",\r\n\t\tresourceValueArray: \"resourceValueArray\",\r\n\t\tassignmentsArray: \"assignmentsArray\"\r\n\t};\r\n\tvar resourceAssignmentFormat = resourceAssignmentFormats.auto;//\"primitiveSingle\";//\"primitive\";//\"object\"|\"assignment\"\r\n\r\n\tvar assignmentModes = {\r\n\t\tfixedDates: \"fixedDates\",\r\n\t\tfixedDuration: \"fixedDuration\",\r\n\t\tdefault: \"default\"\r\n\t};\r\n\r\n\r\n\tfunction initAssignmentFields(item, task){\r\n\t\tif (item.start_date) {\r\n\t\t\titem.start_date = gantt.date.parseDate(item.start_date, \"parse_date\");\r\n\t\t} else {\r\n\t\t\titem.start_date = null;\r\n\t\t}\r\n\r\n\t\tif (item.end_date) {\r\n\t\t\titem.end_date = gantt.date.parseDate(item.end_date, \"parse_date\");\r\n\t\t} else {\r\n\t\t\titem.end_date = null;\r\n\t\t}\r\n\r\n\t\tvar delay = Number(item.delay);\r\n\t\tvar initDelay = false;\r\n\t\tif (!isNaN(delay)) {\r\n\t\t\titem.delay = delay;\r\n\t\t} else {\r\n\t\t\titem.delay = 0;\r\n\t\t\tinitDelay = true;\r\n\t\t}\r\n\r\n\t\tif (!gantt.defined(item.value)) {\r\n\t\t\titem.value = null;\r\n\t\t}\r\n\r\n\t\tif (!item.task_id || !item.resource_id) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\titem.mode = item.mode || assignmentModes.default;\r\n\r\n\t\tif(item.mode === assignmentModes.fixedDuration){\r\n\t\t\tif(isNaN(Number(item.duration))){\r\n\t\t\t\ttask = task || gantt.getTask(item.task_id);\r\n\t\t\t\titem.duration = gantt.calculateDuration({\r\n\t\t\t\t\tstart_date: item.start_date,\r\n\t\t\t\t\tend_date: item.end_date,\r\n\t\t\t\t\tid: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif(initDelay){\r\n\t\t\t\ttask = task || gantt.getTask(item.task_id);\r\n\t\t\t\titem.delay = gantt.calculateDuration({\r\n\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\tend_date: item.start_date,\r\n\t\t\t\t\tid: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (item.mode !== assignmentModes.fixedDates && (task || gantt.isTaskExists(item.task_id))) {\r\n\t\t\ttask = task || gantt.getTask(item.task_id);\r\n\t\t\tvar timing = _assignmentTimeFromTask(item, task);\r\n\t\t\titem.start_date = timing.start_date;\r\n\t\t\titem.end_date = timing.end_date;\r\n\t\t\titem.duration = timing.duration;\r\n\t\t}\r\n\t}\r\n\t// gantt init\r\n\tvar resourceAssignmentsStore = gantt.createDatastore({\r\n\t\tname: gantt.config.resource_assignment_store,\r\n\t\tinitItem: function (item) {\r\n\t\t\tif (!item.id) {\r\n\t\t\t\titem.id = gantt.uid();\r\n\t\t\t}\r\n\r\n\t\t\tinitAssignmentFields(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\t});\r\n\t\r\n\tgantt.$data.assignmentsStore = resourceAssignmentsStore;\r\n\r\n\tfunction _assignmentTimeFromTask(assignment, task) {\r\n\r\n\t\tif (assignment.mode === assignmentModes.fixedDates) {\r\n\t\t\treturn {\r\n\t\t\t\tstart_date: assignment.start_date,\r\n\t\t\t\tend_date: assignment.end_date,\r\n\t\t\t\tduration: assignment.duration\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tvar start = assignment.delay ? gantt.calculateEndDate({\r\n\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\tduration: assignment.delay,\r\n\t\t\t\ttask: task\r\n\t\t\t}) : new Date(task.start_date);\r\n\r\n\t\t\tvar end;\r\n\t\t\tvar duration;\r\n\t\t\tif (assignment.mode === assignmentModes.fixedDuration) {\r\n\t\t\t\tend = gantt.calculateEndDate({\r\n\t\t\t\t\tstart_date: start,\r\n\t\t\t\t\tduration: assignment.duration,\r\n\t\t\t\t\ttask: task\r\n\t\t\t\t});\r\n\t\t\t\tduration = assignment.duration;\r\n\t\t\t} else {\r\n\t\t\t\tend = new Date(task.end_date);\r\n\t\t\t\tduration = task.duration - assignment.delay;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: start,\r\n\t\t\tend_date: end,\r\n\t\t\tduration: duration\r\n\t\t};\r\n\t}\r\n\r\n\t// data loading\r\n\r\n\tfunction _makeAssignmentsFromTask(task) {\r\n\t\tconst property = gantt.config.resource_property;\r\n\t\tlet assignments = task[property];\r\n\t\tconst resourceAssignments = [];\r\n\t\tlet detectFormat = resourceAssignmentFormat === resourceAssignmentFormats.auto;\r\n\r\n\t\tif (gantt.defined(assignments) && assignments) {\r\n\t\t\tif (!Array.isArray(assignments)) {\r\n\t\t\t\tassignments = [assignments];\r\n\t\t\t\tif (detectFormat) {\r\n\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.singleValue;\r\n\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst usedIds = {};\r\n\t\t\tassignments.forEach(function (res) {\r\n\t\t\t\tif (!res.resource_id) { // when resource is a string/number\r\n\t\t\t\t\tres = { resource_id: res };\r\n\t\t\t\t\tif (detectFormat) {\r\n\t\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.valueArray;\r\n\t\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//\tisSimpleArray = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (detectFormat) {\r\n\t\t\t\t\tif (res.id && res.resource_id) {\r\n\t\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.assignmentsArray;\r\n\t\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tresourceAssignmentFormat = resourceAssignmentFormats.resourceValueArray;\r\n\t\t\t\t\t\tdetectFormat = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet defaultMode = assignmentModes.default;\r\n\t\t\t\tif(!res.mode){\r\n\t\t\t\t\tif((res.start_date && res.end_date) || (res.start_date && res.duration)){\r\n\t\t\t\t\t\tdefaultMode = assignmentModes.fixedDuration;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet id;\r\n\t\t\t\tif(!res.id && res.$id && !usedIds[res.$id]){\r\n\t\t\t\t\tid = res.$id;\r\n\t\t\t\t} else if(res.id && !usedIds[res.id]){\r\n\t\t\t\t\tid = res.id;\r\n\t\t\t\t} else{\r\n\t\t\t\t\tid = gantt.uid();\r\n\t\t\t\t}\r\n\t\t\t\tusedIds[id] = true;\r\n\r\n\t\t\t\tconst assignment = {\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\tstart_date: res.start_date,\r\n\t\t\t\t\tduration: res.duration,\r\n\t\t\t\t\tend_date: res.end_date,\r\n\t\t\t\t\tdelay: res.delay,\r\n\t\t\t\t\ttask_id: task.id,\r\n\t\t\t\t\tresource_id: res.resource_id,\r\n\t\t\t\t\tvalue: res.value,\r\n\t\t\t\t\tmode: res.mode || defaultMode\r\n\t\t\t\t};\r\n\t\t\t\t// GS-2490: to add custom properties to assignment\r\n\t\t\t\t// need to exclude $id which incfluences on render \r\n\t\t\t\tObject.keys(res).forEach(key => {\r\n\t\t\t\t\tif(key != \"$id\") {\r\n\t\t\t\t\t\tassignment[key] = res[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!(assignment.start_date && assignment.start_date.getMonth \r\n\t\t\t\t\t&& assignment.end_date && assignment.end_date.getMonth && typeof assignment.duration === \"number\")){\r\n\t\t\t\t\tinitAssignmentFields(assignment, task);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresourceAssignments.push(assignment);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn resourceAssignments;\r\n\t}\r\n\r\n\tfunction _updateTaskBack(taskId) {\r\n\t\t// GS-1493. In some cases, the resource assignment store has the tasks that no longer exist\r\n\t\tif (!gantt.isTaskExists(taskId)){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar task = gantt.getTask(taskId);\r\n\t\tvar assignments = gantt.getTaskAssignments(task.id);\r\n\t\t_assignAssignments(task, assignments);\r\n\t}\r\n\r\n\tfunction _assignAssignments(task, assignments){\r\n\t\tassignments.sort(function(a, b){\r\n\t\t\tif(a.start_date && b.start_date && a.start_date.valueOf() != b.start_date.valueOf()){\r\n\t\t\t\treturn a.start_date - b.start_date;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (resourceAssignmentFormat == resourceAssignmentFormats.assignmentsArray) {\r\n\t\t\ttask[gantt.config.resource_property] = assignments;\r\n\t\t} else if (resourceAssignmentFormat == resourceAssignmentFormats.resourceValueArray) {\r\n\t\t\ttask[gantt.config.resource_property] = assignments.map(function (a) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t$id: a.id,\r\n\t\t\t\t\tstart_date: a.start_date,\r\n\t\t\t\t\tduration: a.duration,\r\n\t\t\t\t\tend_date: a.end_date,\r\n\t\t\t\t\tdelay: a.delay,\r\n\t\t\t\t\tresource_id: a.resource_id,\r\n\t\t\t\t\tvalue: a.value,\r\n\t\t\t\t\tmode: a.mode\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttask[resourceAssignmentsProperty] = assignments;\r\n\t}\r\n\r\n\tfunction _loadAssignmentsFromTask(task) {\r\n\t\tvar assignments = _makeAssignmentsFromTask(task);\r\n\t\tvar taskAssignments = [];\r\n\t\tassignments.forEach(function (a) {\r\n\t\t\ta.id = a.id || gantt.uid();\r\n\t\t\t//var newId = resourceAssignmentsStore.addItem(a);\r\n\t\t\ttaskAssignments.push(a);\r\n\t\t});\r\n\r\n\t\treturn assignments;\r\n\t}\r\n\r\n\tfunction diffAssignments(taskValues, assignmentsStoreValues) {\r\n\t\tvar result = {\r\n\t\t\tinBoth: [],\r\n\t\t\tinTaskNotInStore: [],\r\n\t\t\tinStoreNotInTask: []\r\n\t\t};\r\n\r\n\t\tif (resourceAssignmentFormat == resourceAssignmentFormats.singleValue) {\r\n\t\t\tvar taskOwner = taskValues[0];\r\n\t\t\tvar ownerId = taskOwner ? taskOwner.resource_id : null;\r\n\t\t\tvar foundOwnerAssignment = false;\r\n\t\t\tassignmentsStoreValues.forEach(function (a) {\r\n\t\t\t\tif (a.resource_id != ownerId) {\r\n\t\t\t\t\tresult.inStoreNotInTask.push(a);\r\n\t\t\t\t} else if (a.resource_id == ownerId) {\r\n\t\t\t\t\tresult.inBoth.push({ store: a, task: taskOwner });\r\n\t\t\t\t\tfoundOwnerAssignment = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (!foundOwnerAssignment && taskOwner) {\r\n\t\t\t\tresult.inTaskNotInStore.push(taskOwner);\r\n\t\t\t}\r\n\r\n\r\n\t\t} else if (resourceAssignmentFormat == resourceAssignmentFormats.valueArray){\r\n\r\n\t\t\tvar taskSearch = {};\r\n\t\t\tvar storeSearch = {};\r\n\t\t\tvar processedIds = {};\r\n\t\t\ttaskValues.forEach(function (a) {\r\n\t\t\t\ttaskSearch[a.resource_id] = a;\r\n\t\t\t});\r\n\t\t\tassignmentsStoreValues.forEach(function (a) {\r\n\t\t\t\tstoreSearch[a.resource_id] = a;\r\n\t\t\t});\r\n\t\t\ttaskValues.concat(assignmentsStoreValues).forEach(function (a) {\r\n\t\t\t\tif (processedIds[a.resource_id]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tprocessedIds[a.resource_id] = true;\r\n\t\t\t\tvar inTask = taskSearch[a.resource_id];\r\n\t\t\t\tvar inStore = storeSearch[a.resource_id];\r\n\r\n\t\t\t\tif (inTask && inStore) {\r\n\t\t\t\t\tresult.inBoth.push({ store: inStore, task: inTask });\r\n\t\t\t\t} else if (inTask && !inStore) {\r\n\t\t\t\t\tresult.inTaskNotInStore.push(inTask);\r\n\t\t\t\t} else if (!inTask && inStore) {\r\n\t\t\t\t\tresult.inStoreNotInTask.push(inStore);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if ((resourceAssignmentFormat == resourceAssignmentFormats.assignmentsArray)\r\n\t\t\t|| (resourceAssignmentFormat == resourceAssignmentFormats.resourceValueArray)) {\r\n\t\t\tvar taskSearch = {};\r\n\t\t\tvar storeSearch = {};\r\n\t\t\tvar processedIds = {};\r\n\t\t\ttaskValues.forEach(function (a) {\r\n\t\t\t\ttaskSearch[a.id || a.$id] = a;\r\n\t\t\t});\r\n\t\t\tassignmentsStoreValues.forEach(function (a) {\r\n\t\t\t\tstoreSearch[a.id] = a;\r\n\t\t\t});\r\n\t\t\ttaskValues.concat(assignmentsStoreValues).forEach(function (a) {\r\n\t\t\t\tvar id = a.id || a.$id;\r\n\t\t\t\tif (processedIds[id]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tprocessedIds[id] = true;\r\n\t\t\t\tvar inTask = taskSearch[id];\r\n\t\t\t\tvar inStore = storeSearch[id];\r\n\r\n\t\t\t\tif (inTask && inStore) {\r\n\t\t\t\t\tresult.inBoth.push({ store: inStore, task: inTask });\r\n\t\t\t\t} else if (inTask && !inStore) {\r\n\t\t\t\t\tresult.inTaskNotInStore.push(inTask);\r\n\t\t\t\t} else if (!inTask && inStore) {\r\n\t\t\t\t\tresult.inStoreNotInTask.push(inStore);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction assignmentHasChanged(source, target) {\r\n\t\tvar ignoreFields = {\r\n\t\t\tid: true\r\n\t\t};\r\n\r\n\t\tfor (var i in source) {\r\n\t\t\tif (!ignoreFields[i]) {\r\n\t\t\t\tif (String(source[i]) !== String(target[i])) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tfunction updateAssignment(source, target) {\r\n\t\tvar ignoreFields = {\r\n\t\t\tid: true\r\n\t\t};\r\n\r\n\t\tfor (var i in source) {\r\n\t\t\tif (!ignoreFields[i]) {\r\n\t\t\t\ttarget[i] = source[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _syncAssignments(task, storeAssignments){\r\n\t\tvar tasksAssignments = _makeAssignmentsFromTask(task);\r\n\r\n\t\tvar diff = diffAssignments(tasksAssignments, storeAssignments);\r\n\t\tdiff.inStoreNotInTask.forEach(function (a) {\r\n\t\t\tresourceAssignmentsStore.removeItem(a.id);\r\n\t\t});\r\n\t\tdiff.inTaskNotInStore.forEach(function (a) {\r\n\t\t\tresourceAssignmentsStore.addItem(a);\r\n\t\t});\r\n\r\n\t\tdiff.inBoth.forEach(function (a) {\r\n\t\t\tif (assignmentHasChanged(a.task, a.store)) {\r\n\t\t\t\tupdateAssignment(a.task, a.store);\r\n\t\t\t\tresourceAssignmentsStore.updateItem(a.store.id);\r\n\t\t\t} else {\r\n\t\t\t\tif (a.task.start_date && a.task.end_date && a.task.mode !== assignmentModes.fixedDates) {\r\n\t\t\t\t\tvar timing = _assignmentTimeFromTask(a.store, task);\r\n\t\t\t\t\tif (a.store.start_date.valueOf() != timing.start_date.valueOf() || a.store.end_date.valueOf() != timing.end_date.valueOf()) {\r\n\t\t\t\t\t\ta.store.start_date = timing.start_date;\r\n\t\t\t\t\t\ta.store.end_date = timing.end_date;\r\n\t\t\t\t\t\ta.store.duration = timing.duration;\r\n\t\t\t\t\t\tresourceAssignmentsStore.updateItem(a.store.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t_updateTaskBack(task.id);\r\n\t}\r\n\r\n\tfunction _syncOnTaskUpdate(task) {\r\n\t\tvar storeAssignments = task[resourceAssignmentsProperty] || resourceAssignmentsStore.find(function (a) {\r\n\t\t\treturn a.task_id == task.id;\r\n\t\t});\r\n\r\n\t\t_syncAssignments(task, storeAssignments);\r\n\t}\r\n\r\n\tfunction _syncOnTaskDelete(ids) {\r\n\t\tvar idsSearch = {};\r\n\t\tids.forEach(function (id) {\r\n\t\t\tidsSearch[id] = true;\r\n\t\t});\r\n\t\tvar taskResources = resourceAssignmentsStore.find(function (a) {\r\n\t\t\treturn idsSearch[a.task_id];\r\n\t\t});\r\n\t\ttaskResources.forEach(function (a) {\r\n\t\t\tresourceAssignmentsStore.removeItem(a.id);\r\n\t\t});\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\r\n\t\tif (gantt.config.process_resource_assignments) {\r\n\t\t\tgantt.attachEvent(\"onParse\", function () {\r\n\t\t\t\tgantt.silent(function () {\r\n\t\t\t\t\tresourceAssignmentsStore.clearAll();\r\n\t\t\t\t\tvar totalAssignments = [];\r\n\t\t\t\t\tgantt.eachTask(function (task) {\r\n\t\t\t\t\t\tif (task.type === gantt.config.types.project) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar assignments = _loadAssignmentsFromTask(task);\r\n\t\t\t\t\t\t_assignAssignments(task, assignments);\r\n\r\n\t\t\t\t\t\tassignments.forEach(function (a) {\r\n\t\t\t\t\t\t\ttotalAssignments.push(a);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t\tresourceAssignmentsStore.parse(totalAssignments);\r\n\t\t\t\t});\r\n\r\n\t\t\t});\r\n\r\n\t\t\tvar batchUpdate = false;\r\n\t\t\tvar needUpdate = false;\r\n\t\t\tvar needUpdateFor = {};\r\n\t\t\tvar undoBatchCancel = false;\r\n\t\t\tgantt.attachEvent(\"onBeforeBatchUpdate\", function(){\r\n\t\t\t\tbatchUpdate = true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterBatchUpdate\", function(){\r\n\t\t\t\t\r\n\t\t\t\tif(needUpdate){\r\n\t\t\t\t\tvar assignmentsHash = {};\r\n\t\t\t\t\tfor(var i in needUpdateFor){\r\n\t\t\t\t\t\tassignmentsHash[i] = gantt.getTaskAssignments(needUpdateFor[i].id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor(var i in needUpdateFor){\r\n\t\t\t\t\t\t_syncAssignments(needUpdateFor[i], assignmentsHash[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tneedUpdate = false;\r\n\t\t\t\tbatchUpdate = false;\r\n\t\t\t\tneedUpdateFor = {};\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onTaskCreated\", function (item) {\r\n\t\t\t\tvar assignments = _loadAssignmentsFromTask(item);\r\n\t\t\t\tresourceAssignmentsStore.parse(assignments);\r\n\t\t\t\t_assignAssignments(item, assignments);\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterTaskUpdate\", function (id, item) {\r\n\t\t\t\tif(batchUpdate){\r\n\t\t\t\t\tneedUpdate = true;\r\n\t\t\t\t\tneedUpdateFor[id] = item;\r\n\t\t\t\t}else if (!item.unscheduled){\r\n\t\t\t\t\t_syncOnTaskUpdate(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterTaskAdd\", function (id, item) {\r\n\t\t\t\tif(batchUpdate){\r\n\t\t\t\t\tneedUpdate = true;\r\n\t\t\t\t\tneedUpdateFor[id] = item;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t_syncOnTaskUpdate(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t/*\tgantt.attachEvent(\"onRowDragMove\", function (id) {\r\n\t\t\t\t_syncOnTaskUpdate(gantt.getTask(id));\r\n\t\t\t});*/\r\n\t\t\tgantt.attachEvent(\"onRowDragEnd\", function (id) {\r\n\t\t\t\t_syncOnTaskUpdate(gantt.getTask(id));\r\n\t\t\t});\r\n\t\t\tgantt.$data.tasksStore.attachEvent(\"onAfterDeleteConfirmed\", function (id, item) {\r\n\t\t\t\tvar deleteIds = [id];\r\n\t\t\t\tgantt.eachTask(function (task) {\r\n\t\t\t\t\tdeleteIds.push(task.id);\r\n\t\t\t\t}, id);\r\n\t\t\t\t_syncOnTaskDelete(deleteIds);\r\n\t\t\t});\r\n\t\t\tgantt.$data.tasksStore.attachEvent(\"onClearAll\", function () {\r\n\t\t\t\tresourceAssignmentsCache = null;\r\n\t\t\t\tresourceTaskAssignmentsCache = null;\r\n\t\t\t\ttaskAssignmentsCache = null;\r\n\t\t\t\tresourceAssignmentsStore.clearAll();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\r\n\t\t\t\tvar taskResources = resourceAssignmentsStore.find(function (a) {\r\n\t\t\t\t\treturn a.task_id == id;\r\n\t\t\t\t});\r\n\t\t\t\ttaskResources.forEach(function (a) {\r\n\t\t\t\t\ta.task_id = new_id;\r\n\t\t\t\t\tresourceAssignmentsStore.updateItem(a.id);\r\n\t\t\t\t});\r\n\t\t\t\t_updateTaskBack(new_id);\r\n\t\t\t\t//any custom logic here\r\n\t\t\t});\r\n\t\t\t// GS-2144. When we Undo something, the cache should be reset\r\n\t\t\t// during the `onStoreUpdated` event to properly update the assignments\r\n\t\t\tgantt.attachEvent(\"onBeforeUndo\", function (action) {\r\n\t\t\t\tundoBatchCancel = true;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(\"onAfterUndo\", function (action) {\r\n\t\t\t\tundoBatchCancel = true;\r\n\t\t\t});\r\n\r\n\r\n\t\t\tvar resourceAssignmentsCache = null;\r\n\t\t\tvar resourceTaskAssignmentsCache = null;\r\n\t\t\tvar taskAssignmentsCache = null;\r\n\r\n\t\t\tresourceAssignmentsStore.attachEvent(\"onStoreUpdated\", function resetCache(){\r\n\t\t\t\tif(batchUpdate && !undoBatchCancel){\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\tresourceAssignmentsCache = null;\r\n\t\t\t\tresourceTaskAssignmentsCache = null;\r\n\t\t\t\ttaskAssignmentsCache = null;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tgantt.getResourceAssignments = function (resourceId, taskId) {\r\n\t\t\t\tvar searchTaskId = gantt.defined(taskId) && taskId !== null;\r\n\r\n\t\t\t\tif(resourceAssignmentsCache === null){\r\n\t\t\t\t\tresourceAssignmentsCache = {};\r\n\t\t\t\t\tresourceTaskAssignmentsCache = {};\r\n\r\n\t\t\t\t\tresourceAssignmentsStore.eachItem(function (a) {\r\n\t\t\t\t\t\tif(!resourceAssignmentsCache[a.resource_id]){\r\n\t\t\t\t\t\t\tresourceAssignmentsCache[a.resource_id] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresourceAssignmentsCache[a.resource_id].push(a);\r\n\r\n\t\t\t\t\t\tvar resourceTaskCacheKey = a.resource_id + \"-\" + a.task_id;\r\n\t\t\t\t\t\tif(!resourceTaskAssignmentsCache[resourceTaskCacheKey]){\r\n\t\t\t\t\t\t\tresourceTaskAssignmentsCache[resourceTaskCacheKey] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tresourceTaskAssignmentsCache[resourceTaskCacheKey].push(a);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif(searchTaskId){\r\n\t\t\t\t\treturn (resourceTaskAssignmentsCache[resourceId + \"-\" + taskId] || []).slice();\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn (resourceAssignmentsCache[resourceId] || []).slice();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t\r\n\t\t\tgantt.getTaskAssignments = function (taskId) {\r\n\t\t\t\tif(taskAssignmentsCache === null){\r\n\t\t\t\t\tvar result = [];\r\n\t\t\t\t\ttaskAssignmentsCache = {};\r\n\t\t\t\t\tresourceAssignmentsStore.eachItem(function (a) {\r\n\t\t\t\t\t\tif(!taskAssignmentsCache[a.task_id]){\r\n\t\t\t\t\t\t\ttaskAssignmentsCache[a.task_id] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttaskAssignmentsCache[a.task_id].push(a);\r\n\t\t\t\t\t\tif (a.task_id == taskId) {\r\n\t\t\t\t\t\t\tresult.push(a);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn (taskAssignmentsCache[taskId] || []).slice();\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tgantt.getTaskResources = function (taskId) {\r\n\t\t\t\tconst store = gantt.getDatastore(\"resource\");\r\n\t\t\t\tconst assignments = gantt.getTaskAssignments(taskId);\r\n\t\r\n\t\t\t\tconst uniqueResources = {};\r\n\t\t\t\tassignments.forEach(function(a){\r\n\t\t\t\t\tif(!uniqueResources[a.resource_id]){\r\n\t\t\t\t\t\tuniqueResources[a.resource_id] = a.resource_id;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tconst resources = [];\r\n\t\t\t\tfor(const i in uniqueResources){\r\n\t\t\t\t\tconst res = store.getItem(uniqueResources[i]);\r\n\t\t\t\t\tif(res){\r\n\t\t\t\t\t\tresources.push(res);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn resources;\r\n\t\t\t};\r\n\r\n\t\t\tgantt.updateTaskAssignments = _updateTaskBack;\r\n\t\t}\r\n\t}, {once: true});\r\n};","export default function addPlaceholder(gantt){\r\n\tfunction isEnabled(){\r\n\t\treturn gantt.config.placeholder_task;\r\n\t}\r\n\r\n\tfunction callIfEnabled(callback){\r\n\t\treturn function(){\r\n\t\t\tif(!isEnabled()){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn callback.apply(this, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction silenceDataProcessor(dataProcessor){\r\n\t\tif(dataProcessor && !dataProcessor._silencedPlaceholder){\r\n\t\t\tdataProcessor._silencedPlaceholder = true;\r\n\t\t\tdataProcessor.attachEvent(\"onBeforeUpdate\", callIfEnabled(function(id, state, data){\r\n\t\t\t\tif(data.type == gantt.config.types.placeholder){\r\n\t\t\t\t\tdataProcessor.setUpdated(id, false);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\tfunction insertPlaceholder(){\r\n\t\tvar placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\r\n\t\tif(!placeholders.length || !gantt.isTaskExists(placeholders[0].id)){\r\n\t\t\tvar placeholder = {\r\n\t\t\t\tunscheduled: true,\r\n\t\t\t\ttype: gantt.config.types.placeholder,\r\n\t\t\t\tduration:0,\r\n\t\t\t\ttext: gantt.locale.labels.new_task\r\n\t\t\t};\r\n\t\t\tif(gantt.callEvent(\"onTaskCreated\", [placeholder]) === false){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tgantt.addTask(placeholder);\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tfunction afterEdit(id){\r\n\t\tvar item = gantt.getTask(id);\r\n\t\tif(item.type == gantt.config.types.placeholder) {\r\n\t\t\tif(item.start_date && item.end_date && item.unscheduled){\r\n\t\t\t\titem.unscheduled = false;\r\n\t\t\t}\r\n\r\n\t\t\tgantt.batchUpdate(function(){\r\n\t\t\t\tvar newTask = gantt.copy(item);\r\n\t\t\t\tgantt.silent(function(){\r\n\t\t\t\t\tgantt.deleteTask(item.id);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdelete newTask[\"!nativeeditor_status\"];\r\n\t\t\t\tnewTask.type = gantt.config.types.task;\r\n\t\t\t\tnewTask.id = gantt.uid();\r\n\t\t\t\tgantt.addTask(newTask);\r\n\r\n\t\t\t\t//insertPlaceholder();\r\n\t\t\t});\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.config.types.placeholder = \"placeholder\";\r\n\tgantt.attachEvent(\"onDataProcessorReady\", callIfEnabled(silenceDataProcessor));\r\n\r\n\tvar ready = false;\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(ready){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tready = true;\r\n\t\tgantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(afterEdit));\r\n\t\tgantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function(id, task){\r\n\t\t\tif(task.type != gantt.config.types.placeholder){\r\n\t\t\t\tvar placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\r\n\t\t\t\tplaceholders.forEach(function(p){\r\n\t\t\t\t\tgantt.silent(function(){\r\n\t\t\t\t\t\tif(gantt.isTaskExists(p.id))\r\n\t\t\t\t\t\t\tgantt.deleteTask(p.id);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\tinsertPlaceholder();\r\n\t\t\t}\r\n\t\t}));\r\n\t\tgantt.attachEvent(\"onParse\", callIfEnabled(insertPlaceholder));\r\n\t});\r\n\r\n\tfunction isPlaceholderTask(taskId){\r\n\t\tif(gantt.config.types.placeholder && gantt.isTaskExists(taskId)){\r\n\t\t\tvar task = gantt.getTask(taskId);\r\n\t\t\tif(task.type == gantt.config.types.placeholder){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tfunction isPlaceholderLink(link){\r\n\t\tif(isPlaceholderTask(link.source) || isPlaceholderTask(link.target)){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tgantt.attachEvent(\"onLinkValidation\", function(link){\r\n\t\tif(isPlaceholderLink(link)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\tgantt.attachEvent(\"onBeforeLinkAdd\", function(id,link){\r\n\t\tif(isPlaceholderLink(link)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onBeforeUndoStack\", function(action){\r\n\t\tfor(var i = 0; i < action.commands.length; i++){\r\n\t\t\tvar command = action.commands[i];\r\n\t\t\tif(command.entity === \"task\" && command.value.type === gantt.config.types.placeholder){\r\n\t\t\t\taction.commands.splice(i,1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\r\n};","export default function(gantt) {\r\n\tfunction isEnabled() {\r\n\t\treturn gantt.config.auto_types && // if enabled\r\n\t\t\t(gantt.getTaskType(gantt.config.types.project) == gantt.config.types.project);// and supported\r\n\t}\r\n\r\n\tfunction callIfEnabled(callback) {\r\n\t\treturn function() {\r\n\t\t\tif (!isEnabled()) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn callback.apply(this, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction checkTaskType(id, changedTypes) {\r\n\t\tvar task = gantt.getTask(id);\r\n\t\tvar targetType = getTaskTypeToUpdate(task);\r\n\t\tif (targetType !== false && gantt.getTaskType(task) !== targetType) {\r\n\t\t\tchangedTypes.$needsUpdate = true;\r\n\t\t\tchangedTypes[task.id] = {task: task, type: targetType};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUpdatedTypes(id, changedTypes) {\r\n\t\tchangedTypes = changedTypes || {};\r\n\t\t\r\n\t\tcheckTaskType(id, changedTypes);\r\n\t\tgantt.eachParent(function(parent) {\r\n\t\t\tcheckTaskType(parent.id, changedTypes);\r\n\t\t}, id);\r\n\r\n\t\treturn changedTypes;\r\n\t}\r\n\r\n\tfunction applyChanges(changedTypes) {\r\n\t\tfor (var i in changedTypes) {\r\n\t\t\tif(changedTypes[i] && changedTypes[i].task){\r\n\t\t\t\tvar task = changedTypes[i].task;\r\n\t\t\t\ttask.type = changedTypes[i].type;\r\n\t\t\t\tgantt.updateTask(task.id);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction updateParentTypes(startId) {\r\n\t\tif (gantt.getState().group_mode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tvar changedTypes = getUpdatedTypes(startId);\r\n\t\tif (changedTypes.$needsUpdate) {\r\n\t\t\tgantt.batchUpdate(function() {\r\n\t\t\t\tapplyChanges(changedTypes);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tvar delTaskParent;\r\n\r\n\tfunction updateTaskType(task, targetType) {\r\n\t\tif(!gantt.getState().group_mode){\r\n\t\t\ttask.type = targetType;\r\n\t\t\tgantt.updateTask(task.id);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getTaskTypeToUpdate(task) {\r\n\t\tvar allTypes = gantt.config.types;\r\n\t\tvar hasChildren = gantt.hasChild(task.id);\r\n\t\tvar taskType = gantt.getTaskType(task.type);\r\n\r\n\t\tif (hasChildren && taskType === allTypes.task) {\r\n\t\t\treturn allTypes.project;\r\n\t\t}\r\n\r\n\t\tif (!hasChildren && taskType === allTypes.project) {\r\n\t\t\treturn allTypes.task;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar isParsingDone = true;\r\n\r\n\tgantt.attachEvent(\"onParse\", callIfEnabled(function() {\r\n\t\tisParsingDone = false;\r\n\t\tif(gantt.getState().group_mode){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tgantt.batchUpdate(function() {\r\n\t\t\tgantt.eachTask(function(task) {\r\n\t\t\t\tvar targetType = getTaskTypeToUpdate(task);\r\n\t\t\t\tif (targetType !== false) {\r\n\t\t\t\t\tupdateTaskType(task, targetType);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tisParsingDone = true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function(id) {\r\n\t\tif (isParsingDone) {\r\n\t\t\tupdateParentTypes(id);\r\n\t\t}\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(function(id) {\r\n\t\tif (isParsingDone) {\r\n\t\t\tupdateParentTypes(id);\r\n\t\t}\r\n\t}));\r\n\r\n\tfunction updateAfterRemoveChild(id){\r\n\t\tif (id != gantt.config.root_id && gantt.isTaskExists(id)) {\r\n\t\t\tupdateParentTypes(id);\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskDelete\", callIfEnabled(function(id, task) {\r\n\t\tdelTaskParent = gantt.getParent(id);\r\n\t\treturn true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskDelete\", callIfEnabled(function(id, task) {\r\n\t\tupdateAfterRemoveChild(delTaskParent);\r\n\t}));\r\n\r\n\r\n\tvar originalRowDndParent;\r\n\r\n\tgantt.attachEvent(\"onRowDragStart\", callIfEnabled(function(id, target, e) {\r\n\t\toriginalRowDndParent = gantt.getParent(id);\r\n\t\treturn true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onRowDragEnd\", callIfEnabled(function(id, target) {\r\n\t\tupdateAfterRemoveChild(originalRowDndParent);\r\n\t\tupdateParentTypes(id);\r\n\t}));\r\n\r\n\tvar originalMoveTaskParent;\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskMove\", callIfEnabled(function(sid, parent, tindex) {\r\n\t\toriginalMoveTaskParent = gantt.getParent(sid);\r\n\t\treturn true;\r\n\t}));\r\n\r\n\tgantt.attachEvent(\"onAfterTaskMove\", callIfEnabled(function(id, parent, tindex) {\r\n\t\tif (document.querySelector(\".gantt_drag_marker\")) {\r\n\t\t\t// vertical dnd in progress\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tupdateAfterRemoveChild(originalMoveTaskParent);\r\n\t\tupdateParentTypes(id);\r\n\t}));\r\n};","export default class DurationFormatterNumeric implements IDurationFormatter {\r\n\tstatic create = (settings: IDurationFormatterConfig = null): IDurationFormatter => {\r\n\t\treturn new DurationFormatterNumeric();\r\n\t};\r\n\tcanParse = (value: string) : boolean => {\r\n\t\treturn !isNaN(this.parse(value));\r\n\t};\r\n\tformat = (value: number) : string => {\r\n\t\treturn String(value);\r\n\t};\r\n\tparse = (value: string) : number => {\r\n\t\treturn parseInt(value, 10);\r\n\t};\r\n}","export default class LinkFormatterSimple implements ILinkFormatter {\r\n\tstatic create = (settings: ILinkFormatterConfig = null, gantt: any): LinkFormatterSimple => {\r\n\t\treturn new LinkFormatterSimple(gantt);\r\n\t};\r\n\tprotected _linkReg: RegExp;\r\n\tprotected _gantt: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._linkReg = /^[0-9\\.]+/;\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\tformat = (link: ILink) : string => {\r\n\t\tconst wbs = this._getWBSCode(link.source);\r\n\t\treturn wbs;\r\n\t};\r\n\r\n\tcanParse = (value: string) : boolean => {\r\n\t\treturn this._linkReg.test(value);\r\n\t};\r\n\tparse = (value: string) : ILink => {\r\n\t\tif(!this.canParse(value)){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst linkPart = this._linkReg.exec(value)[0].trim();\r\n\r\n\t\tconst source = this._findSource(linkPart) || null;\r\n\r\n\t\treturn {\r\n\t\t\tid: undefined,\r\n\t\t\tsource,\r\n\t\t\ttarget: null,\r\n\t\t\ttype: this._gantt.config.links.finish_to_start,\r\n\t\t\tlag: 0\r\n\t\t};\r\n\t};\r\n\r\n\tprotected _getWBSCode = (source: number | string) => {\r\n\t\tconst pred = this._gantt.getTask(source);\r\n\t\treturn this._gantt.getWBSCode(pred);\r\n\t};\r\n\r\n\tprotected _findSource = (value: string) => {\r\n\t\tconst reqTemplate = new RegExp(\"^[0-9\\.]+\", \"i\");\r\n\t\tif(reqTemplate.exec(value)){\r\n\t\t\tconst wbs = reqTemplate.exec(value)[0];\r\n\t\t\tconst task = this._gantt.getTaskByWBSCode(wbs);\r\n\t\t\tif(task){\r\n\t\t\t\treturn task.id;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n}","\r\nimport DurationFormatter from \"../common/duration_formatter\";\r\nimport LinkFormatter from \"../common/link_formatter\";\r\n\r\nexport default function(gantt){\r\n\tgantt.ext.formatters = {\r\n\t\tdurationFormatter: function(settings){\r\n\t\t\tif(!settings){\r\n\t\t\t\tsettings = {};\r\n\t\t\t}\r\n\t\t\tif(!settings.store){\r\n\t\t\t\tsettings.store = gantt.config.duration_unit;\r\n\t\t\t}\r\n\t\t\tif(!settings.enter){\r\n\t\t\t\tsettings.enter = gantt.config.duration_unit;\r\n\t\t\t}\r\n\t\t\treturn DurationFormatter.create(settings, gantt);\r\n\t\t},\r\n\t\tlinkFormatter: function(settings){\r\n\t\t\treturn LinkFormatter.create(settings, gantt);\r\n\t\t}\r\n\t};\r\n};","export default function(gantt: any){\r\n\r\n\tgantt.ext = gantt.ext || {};\r\n\tgantt.config.show_empty_state = false;\r\n\r\n\tgantt.ext.emptyStateElement = gantt.ext.emptyStateElement || {\r\n\t\tisEnabled() {\r\n\t\t\treturn gantt.config.show_empty_state === true;\r\n\t\t},\r\n\t\tisGanttEmpty(){\r\n\t\t\treturn !gantt.getTaskByTime().length;\r\n\t\t},\r\n\t\trenderContent(container){\r\n\t\t\tconst placeholderTextElement = `\r\n
${gantt.locale.labels.empty_state_text_link}
\r\n
${gantt.locale.labels.empty_state_text_description}
\r\n
`;\r\n\t\t\tconst placeholderImageElement = \"
\";\r\n\r\n\t\t\tconst placeholderContainer = `${placeholderImageElement}${placeholderTextElement}
`;\r\n\t\t\tcontainer.innerHTML = placeholderContainer;\r\n\t\t},\r\n\r\n\t\tclickEvents: [],\r\n\t\tattachAddTaskEvent(){\r\n\t\t\tconst id = gantt.attachEvent(\"onEmptyClick\", function(e){\r\n\t\t\t\tconst domHelpers = gantt.utils.dom;\r\n\t\t\t\tconst gridPlaceholder = domHelpers.closest(e.target, \"[data-empty-state-create-task]\");\r\n\t\t\t\tif (gridPlaceholder){\r\n\t\t\t\t\tgantt.createTask({\r\n\t\t\t\t\t\tid: gantt.uid(),\r\n\t\t\t\t\t\ttext: \"New Task\"\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.clickEvents.push(id);\r\n\t\t},\r\n\t\tdetachAddTaskEvents(){\r\n\t\t\tthis.clickEvents.forEach(function(event){\r\n\t\t\t\tgantt.detachEvent(event);\r\n\t\t\t});\r\n\t\t\tthis.clickEvents = [];\r\n\t\t},\r\n\r\n\t\tgetContainer(){\r\n\t\t\tif (gantt.$container) {\r\n\t\t\t\tconst domHelpers = gantt.utils.dom;\r\n\t\t\t\tif (gantt.$container.contains(gantt.$grid_data)) {\r\n\t\t\t\t\treturn domHelpers.closest(gantt.$grid_data, \".gantt_layout_content\");\r\n\t\t\t\t}\r\n\t\t\t\tif (gantt.$container.contains(gantt.$task_data)){\r\n\t\t\t\t\treturn domHelpers.closest(gantt.$task_data, \".gantt_layout_content\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t},\r\n\r\n\t\tgetNode(){\r\n\t\t\tconst container = this.getContainer();\r\n\t\t\tif (!container){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tconst emptyStateElementNode = container.querySelector(\".gantt_empty_state_wrapper\");\r\n\t\t\treturn emptyStateElementNode;\r\n\t\t},\r\n\r\n\t\tshow(){\r\n\t\t\tconst container = this.getContainer();\r\n\t\t\tif (!container && this.isGanttEmpty()){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tconst wrapper = document.createElement(\"div\");\r\n\t\t\twrapper.className = \"gantt_empty_state_wrapper\";\r\n\t\t\twrapper.style.marginTop = (gantt.config.scale_height - container.offsetHeight) + \"px\";\r\n\t\t\tconst oldNodes = gantt.$container.querySelectorAll(\".gantt_empty_state_wrapper\");\r\n\t\t\t// for IE11\r\n\t\t\tArray.prototype.forEach.call(oldNodes, function(node){\r\n\t\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\t});\r\n\r\n\t\t\tthis.detachAddTaskEvents();\r\n\t\t\tthis.attachAddTaskEvent();\r\n\r\n\t\t\tcontainer.appendChild(wrapper);\r\n\t\t\tthis.renderContent(wrapper);\r\n\t\t},\r\n\t\thide(){\r\n\t\t\tconst emptyStateElementNode = this.getNode();\r\n\t\t\tif (emptyStateElementNode){\r\n\t\t\t\temptyStateElementNode.parentNode.removeChild(emptyStateElementNode);\r\n\t\t\t} else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinit(){ }\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onDataRender\", function() {\r\n\t\tconst emptyStateElement = gantt.ext.emptyStateElement;\r\n\t\tif (emptyStateElement.isEnabled() && emptyStateElement.isGanttEmpty()) {\r\n\t\t\temptyStateElement.show();\r\n\t\t} else {\r\n\t\t\temptyStateElement.hide();\r\n\t\t}\r\n\t});\r\n\r\n\r\n\r\n\r\n}\r\n","export const hasBaselinesBelow = function (gantt, task) {\r\n const baselines = task.baselines && task.baselines.length;\r\n const baselinesOnDifferentRow = gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\";\r\n if (baselines && baselinesOnDifferentRow) {\r\n return true;\r\n }\r\n};\r\n\r\nexport const childrenHaveBaselines = function (gantt, taskId) {\r\n let hasBaselines = false;\r\n gantt.eachTask(function (child) {\r\n if (hasBaselines) {\r\n return;\r\n }\r\n hasBaselines = hasBaselinesBelow(gantt, child);\r\n }, taskId);\r\n return hasBaselines;\r\n};\r\n\r\nexport const isSplitChild = function (gantt, id) {\r\n let splitChild = false;\r\n gantt.eachParent(function (parent) {\r\n if (isSplitParent(parent)) {\r\n splitChild = true;\r\n }\r\n }, id);\r\n return splitChild;\r\n};\r\n\r\nexport const isSplitParent = function (task) {\r\n return task.render && task.render == \"split\" && !task.$open;\r\n};\r\n\r\nexport const getMaxParentHeight = function (gantt, view, task, heightLimit) {\r\n let maxHeight = heightLimit || view.$task_data.scrollHeight;\r\n let shrinkHeight = false;\r\n let splitChild = false;\r\n\r\n gantt.eachParent(function (parent) {\r\n if (isSplitParent(parent)) {\r\n splitChild = true;\r\n const parentSizes = view.getItemPosition(parent);\r\n const parentHeight = parentSizes.rowHeight;\r\n if (parentHeight < maxHeight) {\r\n maxHeight = parentHeight;\r\n shrinkHeight = true;\r\n }\r\n }\r\n }, task.id);\r\n\r\n return { maxHeight, shrinkHeight, splitChild };\r\n};\r\n\r\nexport const getMilestoneHeight = function (height) {\r\n return Math.sqrt(2 * height * height);\r\n};\r\n\r\nexport const getInvertedMilestoneHeight = function (height) {\r\n return Math.round(height / Math.sqrt(2));\r\n};\r\n\r\nexport const getAdjustedPosition = function (gantt, timeline, sizes, heightLimit, task, childBaselines) {\r\n const baselines = hasBaselinesBelow(gantt, task);\r\n\r\n const splitParams = getMaxParentHeight(gantt, timeline, task);\r\n let maxHeight = splitParams.maxHeight;\r\n\r\n let height = sizes.height;\r\n let largerHeight = height > heightLimit;\r\n let noNeedToShrink = sizes.rowHeight >= heightLimit && !splitParams.splitChild && !baselines;\r\n if (largerHeight || noNeedToShrink) {\r\n height = heightLimit;\r\n }\r\n\r\n if (maxHeight < height) {\r\n height = maxHeight;\r\n }\r\n\r\n let marginTop = Math.floor((sizes.rowHeight - height) / 2);\r\n\r\n if (splitParams.splitChild) {\r\n marginTop = Math.floor((maxHeight - height) / 2);\r\n }\r\n if (childBaselines || baselines) {\r\n let heightDiff = Math.min(sizes.height, maxHeight) - height;\r\n\r\n let additionalMargin = 2;\r\n let exceedBarHeight = baselines && task.bar_height >= task.row_height;\r\n let exceedParentHeight = splitParams.splitChild && sizes.height >= maxHeight;\r\n if (exceedBarHeight || exceedParentHeight){\r\n additionalMargin = 0;\r\n }\r\n\r\n marginTop = Math.floor(heightDiff / 2) + additionalMargin;\r\n const bottom = height + marginTop;\r\n if (bottom > sizes.rowHeight || bottom > maxHeight) {\r\n // marginTop = 0;\r\n }\r\n }\r\n\r\n return { height, marginTop };\r\n};\r\n\r\nexport default {\r\n hasBaselinesBelow,\r\n childrenHaveBaselines,\r\n isSplitChild,\r\n isSplitParent,\r\n getMaxParentHeight,\r\n getMilestoneHeight,\r\n getInvertedMilestoneHeight,\r\n getAdjustedPosition\r\n};\r\n","import { hasBaselinesBelow, isSplitParent } from \"../ui/render/baseline_helper\";\r\n\r\nexport default function (gantt) {\r\n gantt.config.baselines = {\r\n datastore: \"baselines\",\r\n render_mode: false,\r\n dataprocessor_baselines: false,\r\n row_height: 16,\r\n bar_height: 8\r\n };\r\n\r\n function initBaselineFields(item, task) {\r\n if (item.start_date) {\r\n item.start_date = gantt.date.parseDate(item.start_date, \"parse_date\");\r\n } else {\r\n item.start_date = null;\r\n }\r\n\r\n if (item.end_date) {\r\n item.end_date = gantt.date.parseDate(item.end_date, \"parse_date\");\r\n } else {\r\n item.end_date = null;\r\n }\r\n\r\n if (!item.task_id) {\r\n return false;\r\n }\r\n }\r\n // gantt init\r\n const baselineStore = gantt.createDatastore({\r\n name: gantt.config.baselines.datastore,\r\n initItem: function (item) {\r\n if (!item.id) {\r\n item.id = gantt.uid();\r\n }\r\n\r\n initBaselineFields(item);\r\n\r\n return item;\r\n }\r\n });\r\n\r\n gantt.$data.baselineStore = baselineStore;\r\n\r\n function _syncBaselines(task) {\r\n let shouldRepaint = false;\r\n const iteratedBaselines = {};\r\n\r\n const taskBaselines = task.baselines || [];\r\n const exisingBaselines = gantt.getTaskBaselines(task.id);\r\n\r\n if (taskBaselines.length != exisingBaselines.length) {\r\n shouldRepaint = true;\r\n }\r\n\r\n taskBaselines.forEach(function (baseline) {\r\n iteratedBaselines[baseline.id] = true;\r\n const exisingBaseline = baselineStore.getItem(baseline.id);\r\n if (exisingBaseline) {\r\n const start = +exisingBaseline.start_date !== +baseline.start_date;\r\n const end = +exisingBaseline.end_date !== +baseline.end_date;\r\n if (start || end) {\r\n baselineStore.updateItem(baseline.id, baseline);\r\n }\r\n } else {\r\n baselineStore.addItem(baseline);\r\n }\r\n });\r\n\r\n exisingBaselines.forEach(function (baseline) {\r\n if (!iteratedBaselines[baseline.id]) {\r\n baselineStore.removeItem(baseline.id);\r\n }\r\n });\r\n\r\n if (shouldRepaint) {\r\n if (isSplitParent(task)){\r\n // here we adjust the parent height, then adjust it with the total child height\r\n _adjustSplitParentHeight (task);\r\n } else {\r\n gantt.adjustTaskHeightForBaselines(task);\r\n }\r\n gantt.render();\r\n }\r\n }\r\n\r\n function _deleteOrphanBaselines() {\r\n baselineStore.eachItem(function (baseline) {\r\n if (!gantt.isTaskExists(baseline.task_id)) {\r\n baselineStore.removeItem(baseline.id);\r\n }\r\n });\r\n }\r\n\r\n function _adjustSplitParentHeight (task){\r\n let maxParentHeight = 0;\r\n\r\n gantt.adjustTaskHeightForBaselines(task);\r\n\r\n gantt.eachTask(function(child){\r\n let childHeight = child.row_height || gantt.config.row_height;\r\n\r\n maxParentHeight = maxParentHeight || childHeight;\r\n if (childHeight > maxParentHeight){\r\n maxParentHeight = childHeight;\r\n }\r\n }, task.id);\r\n\r\n if (task.row_height < maxParentHeight){\r\n task.row_height = maxParentHeight;\r\n }\r\n }\r\n\r\n gantt.adjustTaskHeightForBaselines = function (task) {\r\n let height, baselineSize, betweenBaselines;\r\n let margins = 2;\r\n let baselineAmount = task.baselines && task.baselines.length || 0;\r\n const subrowHeight = gantt.config.baselines.row_height;\r\n //const baselineBarHeight = task?.baselines.bar_height\r\n\r\n switch (gantt.config.baselines.render_mode) {\r\n case \"taskRow\":\r\n task.row_height = task.bar_height + 4;\r\n break;\r\n\r\n case \"separateRow\":\r\n height = gantt.getLayoutView(\"timeline\").getBarHeight(task.id);\r\n if (baselineAmount) {\r\n task.bar_height = task.bar_height || height;\r\n\r\n if (task.bar_height > height){\r\n height = task.bar_height;\r\n }\r\n\r\n task.row_height = height + subrowHeight;\r\n } else if (task.bar_height) {\r\n task.row_height = task.bar_height + 4;\r\n }\r\n\r\n _increaseSplitParentHeight(task);\r\n break;\r\n\r\n case \"individualRow\":\r\n height = gantt.getLayoutView(\"timeline\").getBarHeight(task.id);\r\n\r\n if (baselineAmount) {\r\n task.bar_height = task.bar_height || height;\r\n\r\n if (task.bar_height > height){\r\n height = task.bar_height;\r\n }\r\n\r\n baselineSize = subrowHeight * baselineAmount;\r\n // betweenBaselines = 3 * (baselineAmount + 1);\r\n\r\n task.row_height = height + baselineSize + margins;\r\n } else if (task.bar_height){\r\n task.row_height = task.bar_height + 4;\r\n }\r\n\r\n _increaseSplitParentHeight(task);\r\n }\r\n };\r\n\r\n function _increaseSplitParentHeight(task) {\r\n gantt.eachParent(function (parent) {\r\n if (isSplitParent(parent)) {\r\n const parentHeight = parent.row_height || gantt.getLayoutView(\"timeline\").getBarHeight(parent.id);\r\n let maxHeight = task.row_height;\r\n\r\n // iterate only direct children\r\n const subtasks = gantt.getChildren(parent.id);\r\n subtasks.forEach(function (subtaskId) {\r\n const subtask = gantt.getTask(subtaskId);\r\n if (subtask.id == task.id) {\r\n return;\r\n }\r\n const subtaskHeight = subtask.row_height || gantt.getLayoutView(\"timeline\").getBarHeight(subtask.id);\r\n maxHeight = maxHeight || subtaskHeight;\r\n if (subtaskHeight > maxHeight) {\r\n maxHeight = subtaskHeight;\r\n }\r\n });\r\n\r\n parent.row_height = maxHeight;\r\n parent.bar_height = parent.bar_height || parentHeight;\r\n }\r\n }, task.id);\r\n }\r\n\r\n gantt.attachEvent(\r\n \"onGanttReady\",\r\n function () {\r\n\r\n if(gantt.config.baselines === false){\r\n return;\r\n }\r\n\r\n gantt.attachEvent(\"onParse\", function () {\r\n baselineStore.eachItem(function (baseline) {\r\n const taskId = baseline.task_id;\r\n if (gantt.isTaskExists(taskId)) {\r\n const task = gantt.getTask(taskId);\r\n\r\n task.baselines = task.baselines || [];\r\n\r\n let newBaseline = true;\r\n for (let i = 0; i < task.baselines.length; i++) {\r\n let existingBaseline = task.baselines[i];\r\n if (existingBaseline.id == baseline.id){\r\n newBaseline = false;\r\n gantt.mixin(existingBaseline, baseline, true);\r\n break;\r\n }\r\n }\r\n if (newBaseline){\r\n task.baselines.push(baseline);\r\n }\r\n\r\n if (isSplitParent(task)){\r\n _adjustSplitParentHeight (task);\r\n } else {\r\n gantt.adjustTaskHeightForBaselines(task);\r\n }\r\n }\r\n });\r\n });\r\n\r\n gantt.attachEvent(\"onBeforeTaskUpdate\", function (id, task) {\r\n _syncBaselines(task);\r\n return true;\r\n });\r\n\r\n gantt.attachEvent(\"onAfterUndo\", function(action){\r\n const baselinesRenderedBelow = gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\";\r\n if (baselinesRenderedBelow && action){\r\n let repaint = false;\r\n action.commands.forEach(function(command){\r\n if (command.entity == \"task\"){\r\n const taskId = command.value.id;\r\n if (gantt.isTaskExists(taskId)){\r\n const task = gantt.getTask(taskId);\r\n if (task.parent && gantt.isTaskExists(task.parent)){\r\n const parent = gantt.getTask(task.parent);\r\n if (isSplitParent(parent)){\r\n _adjustSplitParentHeight (parent);\r\n repaint = true;\r\n }\r\n }\r\n } \r\n }\r\n });\r\n if (repaint){\r\n gantt.render();\r\n }\r\n }\r\n });\r\n\r\n gantt.attachEvent(\"onAfterTaskDelete\", function (id, task) {\r\n if (hasBaselinesBelow){\r\n if (task.parent && gantt.isTaskExists(task.parent)){\r\n const parent = gantt.getTask(task.parent);\r\n if (isSplitParent(parent)){\r\n _adjustSplitParentHeight (parent);\r\n }\r\n }\r\n }\r\n _deleteOrphanBaselines();\r\n });\r\n\r\n gantt.getTaskBaselines = function (taskId) {\r\n const baselines = [];\r\n baselineStore.eachItem(function (baseline) {\r\n if (baseline.task_id == taskId) {\r\n baselines.push(baseline);\r\n }\r\n });\r\n return baselines;\r\n };\r\n gantt.$data.baselineStore.attachEvent(\"onClearAll\", function () {\r\n gantt.eachTask(function(task){\r\n if (task.baselines){\r\n delete task.baselines;\r\n }\r\n });\r\n // The data should not be repainted as otherwise it causes issues when we have resource \r\n // assignments and group tasks. It should be fixed when we add a repaint stack\r\n // gantt.refreshData();\r\n return true;\r\n });\r\n\r\n gantt.$data.tasksStore.attachEvent(\"onClearAll\", function () {\r\n baselineStore.clearAll();\r\n return true;\r\n });\r\n gantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\r\n const baselines = baselineStore.find(function (a) {\r\n return a.task_id == id;\r\n });\r\n baselines.forEach(function (a) {\r\n a.task_id = new_id;\r\n baselineStore.updateItem(a.id);\r\n });\r\n });\r\n },\r\n { once: true }\r\n );\r\n};\r\n","import * as helpers from \"../../utils/helpers\";\r\n\r\nexport default function(gantt) {\r\n\tgantt.load = function(){\r\n\t\tthrow new Error(\"gantt.load() method is not available in the node.js, use gantt.parse() instead\");\r\n\t};\r\n\tgantt.parse = function (data, type) {\r\n\t\tthis.on_load({xmlDoc: {responseText: data}}, type);\r\n\t};\r\n\r\n\tgantt.serialize = function (type) {\r\n\t\ttype = type || \"json\";\r\n\t\treturn this[type].serialize();\r\n\t};\r\n\r\n\t/*\r\n\ttasks and relations\r\n\t{\r\n\tdata:[\r\n\t\t{\r\n\t\t\t\"id\":\"string\",\r\n\t\t\t\"text\":\"...\",\r\n\t\t\t\"start_date\":\"Date or string\",\r\n\t\t\t\"end_date\":\"Date or string\",\r\n\t\t\t\"duration\":\"number\",\r\n\t\t\t\"progress\":\"0..1\",\r\n\t\t\t\"parent_id\":\"string\",\r\n\t\t\t\"order\":\"number\"\r\n\t\t},...],\r\n\tlinks:[\r\n\t\t{\r\n\t\t\tid:\"string\",\r\n\t\t\tsource:\"string\",\r\n\t\t\ttarget:\"string\",\r\n\t\t\ttype:\"string\"\r\n\t\t},...],\r\n\tcollections:{\r\n\t\t\tcollectionName:[\r\n\t\t\t\t{key:, label:, optional:...},...\r\n\t\t\t],...\r\n\t\t}\r\n\t}\r\n\r\n\t* */\r\n\r\n\tgantt.on_load = function (resp, type) {\r\n\t\tif(resp.xmlDoc && resp.xmlDoc.status === 404){ // work if we don't have a file at current url\r\n\t\t\tthis.assert(false, \"Failed to load the data from \" \r\n\t\t\t\t+ resp.xmlDoc.responseURL + \" , server returns 404\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(gantt.$destroyed){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.callEvent(\"onBeforeParse\", []);\r\n\t\tif (!type)\r\n\t\t\ttype = \"json\";\r\n\t\tthis.assert(this[type], \"Invalid data type:'\" + type + \"'\");\r\n\r\n\t\tvar raw = resp.xmlDoc.responseText;\r\n\r\n\t\tvar data = this[type].parse(raw, resp);\r\n\t\tthis._process_loading(data);\r\n\t};\r\n\r\n\tfunction attachAssignmentsToTasks(tasks, assignments) {\r\n\t\tconst assignmentsByTasks = {};\r\n\t\tassignments.forEach((a)=>{\r\n\t\t\tif(!assignmentsByTasks[a.task_id]) {\r\n\t\t\t\tassignmentsByTasks[a.task_id] = [];\r\n\t\t\t}\r\n\t\t\tassignmentsByTasks[a.task_id].push(a);\r\n\t\t});\r\n\t\ttasks.forEach((t) => {\r\n\t\t\tt[gantt.config.resource_property] = assignmentsByTasks[t.id] || [];\r\n\t\t});\t\r\n\t}\r\n\t\r\n\tgantt._process_loading = function (data) {\r\n\t\tif(data.collections)\r\n\t\t\tthis._load_collections(data.collections);\r\n\r\n\t\tif(data.resources && this.$data.resourcesStore){\r\n\t\t\tthis.$data.resourcesStore.parse(data.resources);\r\n\t\t}\r\n\t\tif(gantt.config.baselines !== false && data.baselines && this.$data.baselineStore){\r\n\t\t\tthis.$data.baselineStore.parse(data.baselines);\r\n\t\t}\r\n\t\t\r\n\t\tconst tasks = data.data || data.tasks;\r\n\t\tif(data.assignments){\r\n\t\t\tattachAssignmentsToTasks(tasks, data.assignments);\r\n\t\t}\r\n\r\n\t\tthis.$data.tasksStore.parse(tasks);\r\n\t\tvar links = data.links || (data.collections ? data.collections.links : []);\r\n\t\tthis.$data.linksStore.parse(links);\r\n\r\n\t\t//this._sync_links();\r\n\t\tthis.callEvent(\"onParse\", []);\r\n\t\tthis.render();\r\n\t};\r\n\r\n\tgantt._load_collections = function (collections) {\r\n\t\tvar collections_loaded = false;\r\n\t\tfor (var key in collections) {\r\n\t\t\tif (collections.hasOwnProperty(key)) {\r\n\t\t\t\tcollections_loaded = true;\r\n\t\t\t\tvar collection = collections[key];\r\n\t\t\t\t// GS-1728. Create an empty serverList if it doesn't exist\r\n\t\t\t\tthis.serverList[key] = this.serverList[key] || [];\r\n\t\t\t\tvar arr = this.serverList[key];\r\n\t\t\t\tif (!arr) continue;\r\n\t\t\t\tarr.splice(0, arr.length); //clear old options\r\n\t\t\t\tfor (var j = 0; j < collection.length; j++) {\r\n\t\t\t\t\tvar option = collection[j];\r\n\t\t\t\t\tvar obj = this.copy(option);\r\n\t\t\t\t\tobj.key = obj.value;// resulting option object\r\n\r\n\t\t\t\t\tfor (var option_key in option) {\r\n\t\t\t\t\t\tif (option.hasOwnProperty(option_key)) {\r\n\t\t\t\t\t\t\tif (option_key == \"value\" || option_key == \"label\")\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tobj[option_key] = option[option_key]; // obj['value'] = option['value']\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tarr.push(obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (collections_loaded)\r\n\t\t\tthis.callEvent(\"onOptionsLoad\", []);\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskDisplay\", function (id, task) {\r\n\t\treturn !task.$ignore;\r\n\t});\r\n\r\n\tfunction jsonParseError(data){\r\n\t\tgantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \"\r\n\t\t\t+ \"Actual argument value: \" + JSON.stringify(data));\r\n\t\tthrow new Error(\"Invalid argument for gantt.parse or gantt.load. An object or a JSON string of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#json is expected. Actual argument value: \"\r\n\t\t\t+ JSON.stringify(data));\r\n\t}\r\n\r\n\tgantt.json = {\r\n\t\tparse: function (data) {\r\n\t\t\tif(!data){\r\n\t\t\t\tjsonParseError(data);\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof data == \"string\") {\r\n\t\t\t\tif (typeof JSON != undefined){\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(e) {\r\n\t\t\t\t\t\tjsonParseError(data);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgantt.assert(false, \"JSON is not supported\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!data.data && !data.tasks){\r\n\t\t\t\tjsonParseError(data);\r\n\t\t\t}\r\n\r\n\t\t\tif (data.dhx_security)\r\n\t\t\t\tgantt.security_key = data.dhx_security;\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\tserializeTask: function (task) {\r\n\t\t\treturn this._copyObject(task);\r\n\t\t},\r\n\t\tserializeLink: function (link) {\r\n\t\t\treturn this._copyLink(link);\r\n\t\t},\r\n\t\t_copyLink: function (obj) {\r\n\t\t\tvar copy = {};\r\n\t\t\tfor (var key in obj)\r\n\t\t\t\tcopy[key] = obj[key];\r\n\t\t\treturn copy;\r\n\t\t},\r\n\t\t_copyObject: function (obj) {\r\n\t\t\tvar copy = {};\r\n\t\t\tfor (var key in obj) {\r\n\t\t\t\tif (key.charAt(0) == \"$\")\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcopy[key] = obj[key];\r\n\r\n\t\t\t\tif (helpers.isDate(copy[key])) {\r\n\t\t\t\t\tcopy[key] = gantt.defined(gantt.templates.xml_format) ? gantt.templates.xml_format(copy[key]) : gantt.templates.format_date(copy[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn copy;\r\n\t\t},\r\n\t\tserialize: function () {\r\n\t\t\tvar tasks = [];\r\n\t\t\tvar links = [];\r\n\t\t\tlet baselines = [];\r\n\r\n\t\t\tgantt.eachTask(function (obj) {\r\n\t\t\t\tgantt.resetProjectDates(obj);\r\n\t\t\t\ttasks.push(this.serializeTask(obj));\r\n\t\t\t}, gantt.config.root_id, this);\r\n\r\n\t\t\tvar rawLinks = gantt.getLinks();\r\n\t\t\tfor (var i = 0; i < rawLinks.length; i++) {\r\n\t\t\t\tlinks.push(this.serializeLink(rawLinks[i]));\r\n\t\t\t}\r\n\r\n\t\t\tconst baselineStore = gantt.getDatastore(\"baselines\");\r\n\t\t\tbaselineStore.eachItem(function(baseline){\r\n\t\t\t\tconst baselineCopy = gantt.json.serializeTask(baseline);\r\n\t\t\t\tbaselines.push(baselineCopy);\r\n\t\t\t});\r\n\r\n\t\t\treturn {\r\n\t\t\t\tdata: tasks,\r\n\t\t\t\tlinks,\r\n\t\t\t\tbaselines\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\t/*\r\n\t\r\n\t\t\r\n\t\t\tMy task 1 \r\n\t\t\t16.08.2013 \r\n\t\t\t22.08.2013 \r\n\t\t \r\n\t\t\r\n\t\t\t\r\n\t\t\t\t \r\n\t\t\t \r\n\t\t \r\n\t \r\n\t*/\r\n\r\n\tfunction xmlParseError(data){\r\n\t\tgantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \"\r\n\t\t\t+ \"Actual argument value: \" + JSON.stringify(data));\r\n\t\tthrow new Error(\"Invalid argument for gantt.parse or gantt.load. An XML of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#xmldhtmlxgantt20 is expected. Actual argument value: \"\r\n\t\t\t+ JSON.stringify(data));\r\n\t}\r\n\r\n\tgantt.xml = {\r\n\t\t_xmlNodeToJSON: function (node, attrs_only) {\r\n\t\t\tvar t = {};\r\n\t\t\tfor (var i = 0; i < node.attributes.length; i++)\r\n\t\t\t\tt[node.attributes[i].name] = node.attributes[i].value;\r\n\r\n\t\t\tif (!attrs_only) {\r\n\t\t\t\tfor (var i = 0; i < node.childNodes.length; i++) {\r\n\t\t\t\t\tvar child = node.childNodes[i];\r\n\t\t\t\t\tif (child.nodeType == 1)\r\n\t\t\t\t\t\tt[child.tagName] = child.firstChild ? child.firstChild.nodeValue : \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!t.text) t.text = node.firstChild ? node.firstChild.nodeValue : \"\";\r\n\t\t\t}\r\n\r\n\t\t\treturn t;\r\n\t\t},\r\n\t\t_getCollections: function (loader) {\r\n\t\t\tvar collection = {};\r\n\t\t\tvar opts = gantt.ajax.xpath(\"//coll_options\", loader);\r\n\t\t\tfor (var i = 0; i < opts.length; i++) {\r\n\t\t\t\tvar bind = opts[i].getAttribute(\"for\");\r\n\t\t\t\tvar arr = collection[bind] = [];\r\n\t\t\t\tvar itms = gantt.ajax.xpath(\".//item\", opts[i]);\r\n\t\t\t\tfor (var j = 0; j < itms.length; j++) {\r\n\t\t\t\t\tvar itm = itms[j];\r\n\t\t\t\t\tvar attrs = itm.attributes;\r\n\t\t\t\t\tvar obj = {key: itms[j].getAttribute(\"value\"), label: itms[j].getAttribute(\"label\")};\r\n\t\t\t\t\tfor (var k = 0; k < attrs.length; k++) {\r\n\t\t\t\t\t\tvar attr = attrs[k];\r\n\t\t\t\t\t\tif (attr.nodeName == \"value\" || attr.nodeName == \"label\")\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tobj[attr.nodeName] = attr.nodeValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tarr.push(obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn collection;\r\n\t\t},\r\n\t\t_getXML: function (text, loader, toptag) {\r\n\t\t\ttoptag = toptag || \"data\";\r\n\t\t\tif (!loader.getXMLTopNode) {\r\n\t\t\t\tloader = gantt.ajax.parse(loader);\r\n\t\t\t}\r\n\r\n\t\t\tvar xml = gantt.ajax.xmltop(toptag, loader.xmlDoc);\r\n\t\t\tif (!xml || xml.tagName != toptag) {\r\n\t\t\t\txmlParseError(text);\r\n\t\t\t}\r\n\r\n\t\t\tvar skey = xml.getAttribute(\"dhx_security\");\r\n\t\t\tif (skey)\r\n\t\t\t\tgantt.security_key = skey;\r\n\r\n\t\t\treturn xml;\r\n\t\t},\r\n\t\tparse: function (text, loader) {\r\n\t\t\tloader = this._getXML(text, loader);\r\n\t\t\tvar data = {};\r\n\r\n\t\t\tvar evs = data.data = [];\r\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\r\n\r\n\t\t\tfor (var i = 0; i < xml.length; i++)\r\n\t\t\t\tevs[i] = this._xmlNodeToJSON(xml[i]);\r\n\r\n\t\t\tdata.collections = this._getCollections(loader);\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\t_copyLink: function (obj) {\r\n\t\t\treturn \" \";\r\n\t\t},\r\n\t\t_copyObject: function (obj) {\r\n\t\t\treturn \" \";\r\n\t\t},\r\n\t\tserialize: function () {\r\n\t\t\tvar tasks = [];\r\n\t\t\tvar links = [];\r\n\r\n\t\t\tvar json = gantt.json.serialize();\r\n\t\t\tfor (var i = 0, len = json.data.length; i < len; i++) {\r\n\t\t\t\ttasks.push(this._copyObject(json.data[i]));\r\n\t\t\t}\r\n\t\t\tfor (var i = 0, len = json.links.length; i < len; i++) {\r\n\t\t\t\tlinks.push(this._copyLink(json.links[i]));\r\n\t\t\t}\r\n\t\t\treturn \"\" + tasks.join(\"\") + \"\" + links.join(\"\") + \" \";\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tgantt.oldxml = {\r\n\t\tparse: function (text, loader) {\r\n\t\t\tloader = gantt.xml._getXML(text, loader, \"projects\");\r\n\t\t\tvar data = {collections: {links: []}};\r\n\r\n\t\t\tvar evs = data.data = [];\r\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\r\n\r\n\t\t\tfor (var i = 0; i < xml.length; i++) {\r\n\t\t\t\tevs[i] = gantt.xml._xmlNodeToJSON(xml[i]);\r\n\t\t\t\tvar parent = xml[i].parentNode;\r\n\r\n\t\t\t\tif (parent.tagName == \"project\")\r\n\t\t\t\t\tevs[i].parent = \"project-\" + parent.getAttribute(\"id\");\r\n\t\t\t\telse\r\n\t\t\t\t\tevs[i].parent = parent.parentNode.getAttribute(\"id\");\r\n\t\t\t}\r\n\r\n\t\t\txml = gantt.ajax.xpath(\"//project\", loader);\r\n\t\t\tfor (var i = 0; i < xml.length; i++) {\r\n\t\t\t\tvar ev = gantt.xml._xmlNodeToJSON(xml[i], true);\r\n\t\t\t\tev.id = \"project-\" + ev.id;\r\n\t\t\t\tevs.push(ev);\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = 0; i < evs.length; i++) {\r\n\t\t\t\tvar ev = evs[i];\r\n\t\t\t\tev.start_date = ev.startdate || ev.est;\r\n\t\t\t\tev.end_date = ev.enddate;\r\n\t\t\t\tev.text = ev.name;\r\n\t\t\t\tev.duration = ev.duration / 8;\r\n\t\t\t\tev.open = 1;\r\n\t\t\t\tif (!ev.duration && !ev.end_date) ev.duration = 1;\r\n\t\t\t\tif (ev.predecessortasks)\r\n\t\t\t\t\tdata.collections.links.push({\r\n\t\t\t\t\t\ttarget: ev.id,\r\n\t\t\t\t\t\tsource: ev.predecessortasks,\r\n\t\t\t\t\t\ttype: gantt.config.links.finish_to_start\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\tserialize: function () {\r\n\t\t\tgantt.message(\"Serialization to 'old XML' is not implemented\");\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.serverList = function (name, array) {\r\n\t\tif (array) {\r\n\t\t\tthis.serverList[name] = array.slice(0);\r\n\t\t} else if (!this.serverList[name]) {\r\n\t\t\tthis.serverList[name] = [];\r\n\t\t}\r\n\t\treturn this.serverList[name];\r\n\t};\r\n\r\n};","import * as utils from \"../../utils/utils\";\r\nimport * as helpers from \"../../utils/helpers\";\r\n\r\n\r\nfunction IsWorkTimeArgument(date, unit, task, id, calendar){\r\n\tthis.date = date;\r\n\tthis.unit = unit;\r\n\tthis.task = task;\r\n\tthis.id = id;\r\n\tthis.calendar = calendar;\r\n\treturn this;\r\n}\r\n\r\nfunction ClosestWorkTimeArgument(date, dir, unit, task, id, calendar){\r\n\tthis.date = date;\r\n\tthis.dir = dir;\r\n\tthis.unit = unit;\r\n\tthis.task = task;\r\n\tthis.id = id;\r\n\tthis.calendar = calendar;\r\n\treturn this;\r\n}\r\n\r\nfunction CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar){\r\n\tthis.start_date = start_date;\r\n\tthis.duration = duration;\r\n\tthis.unit = unit;\r\n\tthis.step = step;\r\n\tthis.task = task;\r\n\tthis.id = id;\r\n\tthis.calendar = calendar;\r\n\treturn this;\r\n}\r\n\r\nfunction GetDurationArgument(start, end, task, calendar) {\r\n\tthis.start_date = start;\r\n\tthis.end_date = end;\r\n\tthis.task = task;\r\n\tthis.calendar = calendar;\r\n\tthis.unit = null;\r\n\tthis.step = null;\r\n\treturn this;\r\n}\r\n\r\nvar calendarArgumentsHelper = function(gantt){\r\n\treturn {\r\n\t\tgetWorkHoursArguments: function () {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif (helpers.isDate(config)) {\r\n\t\t\t\tconfig = {\r\n\t\t\t\t\tdate: config\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tconfig = utils.mixin({}, config);\r\n\t\t\t}\r\n\r\n\t\t\tif(!helpers.isValidDate(config.date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid date argument for getWorkHours method\");\r\n\t\t\t\tthrow new Error(\"Invalid date argument for getWorkHours method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\tsetWorkTimeArguments: function () {\r\n\t\t\treturn arguments[0];\r\n\t\t},\r\n\t\tunsetWorkTimeArguments: function () {\r\n\t\t\treturn arguments[0];\r\n\t\t},\r\n\t\tisWorkTimeArguments: function () {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif(config instanceof IsWorkTimeArgument){\r\n\t\t\t\treturn config;\r\n\t\t\t}\r\n\r\n\t\t\tvar processedConfig;\r\n\t\t\tif (!config.date) {\r\n\t\t\t\t//IsWorkTimeArgument(date, unit, task, id, calendar)\r\n\t\t\t\tprocessedConfig = new IsWorkTimeArgument(arguments[0], arguments[1], arguments[2], null, arguments[3]);\r\n\t\t\t} else {\r\n\t\t\t\tprocessedConfig = new IsWorkTimeArgument(config.date, config.unit, config.task, null, config.calendar);\r\n\t\t\t}\r\n\r\n\t\t\tprocessedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\r\n\r\n\t\t\tif(!helpers.isValidDate(processedConfig.date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid date argument for isWorkTime method\");\r\n\t\t\t\tthrow new Error(\"Invalid date argument for isWorkTime method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn processedConfig;\r\n\t\t},\r\n\t\tgetClosestWorkTimeArguments: function (arg) {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif (config instanceof ClosestWorkTimeArgument)\r\n\t\t\t\treturn config;\r\n\r\n\t\t\tvar processedConfig;\r\n\t\t\tif (helpers.isDate(config)) {\r\n\t\t\t\tprocessedConfig = new ClosestWorkTimeArgument(config);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocessedConfig = new ClosestWorkTimeArgument(\r\n\t\t\t\t\tconfig.date,\r\n\t\t\t\t\tconfig.dir,\r\n\t\t\t\t\tconfig.unit,\r\n\t\t\t\t\tconfig.task,\r\n\t\t\t\t\tnull,//config.id,\r\n\t\t\t\t\tconfig.calendar\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif(config.id){\r\n\t\t\t\tprocessedConfig.task = config;\r\n\t\t\t}\r\n\t\t\tprocessedConfig.dir = config.dir || 'any';\r\n\t\t\tprocessedConfig.unit = config.unit || gantt.config.duration_unit;\r\n\r\n\t\t\tif(!helpers.isValidDate(processedConfig.date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid date argument for getClosestWorkTime method\");\r\n\t\t\t\tthrow new Error(\"Invalid date argument for getClosestWorkTime method\");\r\n\t\t\t}\r\n\t\t\treturn processedConfig;\r\n\t\t},\r\n\r\n\t\t_getStartEndConfig: function (param) {\r\n\t\t\tvar argumentType = GetDurationArgument;\r\n\t\t\tvar config;\r\n\t\t\tif (param instanceof argumentType)\r\n\t\t\t\treturn param;\r\n\r\n\t\t\tif (helpers.isDate(param)) {\r\n\t\t\t\tconfig = new argumentType(arguments[0], arguments[1], arguments[2], arguments[3]);\r\n\t\t\t} else {\r\n\t\t\t\tconfig = new argumentType(param.start_date, param.end_date, param.task);\r\n\t\t\t\tif (param.id !== null && param.id !== undefined) {\r\n\t\t\t\t\tconfig.task = param;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconfig.unit = config.unit || gantt.config.duration_unit;\r\n\t\t\tconfig.step = config.step || gantt.config.duration_step;\r\n\t\t\tconfig.start_date = config.start_date || config.start || config.date;\r\n\r\n\t\t\tif(!helpers.isValidDate(config.start_date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid start_date argument for getDuration method\");\r\n\t\t\t\tthrow new Error(\"Invalid start_date argument for getDuration method\");\r\n\t\t\t}\r\n\r\n\t\t\tif(!helpers.isValidDate(config.end_date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid end_date argument for getDuration method\");\r\n\t\t\t\tthrow new Error(\"Invalid end_date argument for getDuration method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\r\n\t\tgetDurationArguments: function (start, end, unit, step) {\r\n\t\t\treturn this._getStartEndConfig.apply(this, arguments);\r\n\t\t},\r\n\r\n\t\thasDurationArguments: function (start, end, unit, step) {\r\n\t\t\treturn this._getStartEndConfig.apply(this, arguments);\r\n\t\t},\r\n\r\n\t\tcalculateEndDateArguments: function (start, duration, unit, step) {\r\n\t\t\tvar config = arguments[0];\r\n\t\t\tif (config instanceof CalculateEndDateArgument)\r\n\t\t\t\treturn config;\r\n\r\n\t\t\tvar processedConfig;\r\n\t\t\t//CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar)\r\n\t\t\tif (helpers.isDate(config)) {\r\n\t\t\t\tprocessedConfig = new CalculateEndDateArgument(\r\n\t\t\t\t\targuments[0],\r\n\t\t\t\t\targuments[1],\r\n\t\t\t\t\targuments[2],\r\n\t\t\t\t\tundefined,\r\n\t\t\t\t\targuments[3],\r\n\t\t\t\t\tundefined,\r\n\t\t\t\t\targuments[4]\r\n\t\t\t\t);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocessedConfig = new CalculateEndDateArgument(\r\n\t\t\t\t\tconfig.start_date,\r\n\t\t\t\t\tconfig.duration,\r\n\t\t\t\t\tconfig.unit,\r\n\t\t\t\t\tconfig.step,\r\n\t\t\t\t\tconfig.task,\r\n\t\t\t\t\tnull,//config.id,\r\n\t\t\t\t\tconfig.calendar\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tif(config.id !== null && config.id !== undefined){\r\n\t\t\t\tprocessedConfig.task = config;\r\n\r\n\t\t\t\t// received a task object as an argument\r\n\t\t\t\t// ignore 'unit' and 'step' properties in this case, since it's likely a part of data model of a task\r\n\t\t\t\tprocessedConfig.unit = null;\r\n\t\t\t\tprocessedConfig.step = null;\r\n\t\t\t}\r\n\r\n\t\t\tprocessedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\r\n\t\t\tprocessedConfig.step = processedConfig.step || gantt.config.duration_step;\r\n\r\n\t\t\tif(!helpers.isValidDate(processedConfig.start_date)){\r\n\t\t\t\tgantt.assert(false, \"Invalid start_date argument for calculateEndDate method\");\r\n\t\t\t\tthrow new Error(\"Invalid start_date argument for calculateEndDate method\");\r\n\t\t\t}\r\n\r\n\t\t\treturn processedConfig;\r\n\t\t}\r\n\t};\r\n};\r\n\r\n\r\nexport default calendarArgumentsHelper;","import * as utils from \"../../../utils/utils\";\r\nfunction WorkTimeCalendarMerger(){\r\n}\r\n\r\nWorkTimeCalendarMerger.prototype = {\r\n\r\n\r\n\t/**\r\n\t * convert hours array items into objects, e.g. [8, 12, 17, 18] -> [{start: 8, end: 12}, {start:17, end:18}]\r\n\t * @param {Array} hoursArray\r\n\t */\r\n\t_getIntervals: function(hoursArray){\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < hoursArray.length; i += 2){\r\n\r\n\t\t\tresult.push({\r\n\t\t\t\tstart: hoursArray[i],\r\n\t\t\t\tend: hoursArray[i+1]\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Convert ranges config into hours array\r\n\t * [{start: 8, end: 12}, {start:17, end:18}] --> [8, 12, 17, 18]\r\n\t * @param {*} intervalsArray\r\n\t */\r\n\t_toHoursArray: function(intervalsArray){\r\n\t\tvar result = [];\r\n\r\n\t\tfunction toFixed(value){\r\n\t\t\tvar str = String(value);\r\n\t\t\tif(str.length < 2){\r\n\t\t\t\tstr = \"0\" + str;\r\n\t\t\t}\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tfunction formatHHMM(secondsValue){\r\n\t\t\tvar hours = Math.floor(secondsValue / (60*60));\r\n\t\t\tvar minutePart = secondsValue - hours * 60 * 60;\r\n\r\n\t\t\tvar minutes = Math.floor(minutePart / (60));\r\n\t\t\treturn hours + \":\" + toFixed(minutes);\r\n\t\t}\r\n\t\tfor(var i = 0; i < intervalsArray.length; i++){\r\n\t\t\tresult.push(\r\n\t\t\t\tformatHHMM(intervalsArray[i].start) +\r\n\t\t\t\t\"-\" +\r\n\t\t\t\tformatHHMM(intervalsArray[i].end)\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Build intersection of hour intervals. e.g.\r\n\t * first: [{start: 8, end: 12}, {start:13, end:18}]\r\n\t * second: [{start: 10, end: 15}]\r\n\t * result: [{start: 10, end: 12}, {start: 13, end: 15}]\r\n\t * @param {Array} first\r\n\t * @param {Array} second\r\n\t */\r\n\t_intersectHourRanges: function(first, second){\r\n\t\tvar result = [];\r\n\r\n\t\tvar baseArray = first.length > second.length ? first : second;\r\n\t\tvar overridesArray = first === baseArray ? second: first;\r\n\t\tbaseArray = baseArray.slice();\r\n\t\toverridesArray = overridesArray.slice();\r\n\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < baseArray.length; i++){\r\n\t\t\tvar base = baseArray[i];\r\n\r\n\t\t\tfor(var j = 0; j < overridesArray.length; j++){\r\n\t\t\t\tvar current = overridesArray[j];\r\n\t\t\t\tif(current.start < base.end && current.end > base.start){\r\n\t\t\t\t\tresult.push({\r\n\t\t\t\t\t\tstart: Math.max(base.start, current.start),\r\n\t\t\t\t\t\tend: Math.min(base.end, current.end)\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif(base.end > current.end){\r\n\t\t\t\t\t\toverridesArray.splice(j, 1);\r\n\t\t\t\t\t\tj--;\r\n\t\t\t\t\t\ti--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Reduce the number of ranges in config when possible,\r\n\t * joins ranges that can be merged\r\n\t * parts: [{start: 8, end: 12}, {start:12, end:13}, {start: 15, end: 17}]\r\n\t * result: [{start: 8, end: 13}, {start: 15, end: 17}]\r\n\t * @param {Array} parts\r\n\t */\r\n\t_mergeAdjacentIntervals: function(parts){\r\n\t\tvar result = parts.slice();\r\n\t\tresult.sort(function(a, b){\r\n\t\t\treturn a.start - b.start;\r\n\t\t});\r\n\t\tvar base = result[0];\r\n\t\tfor(var i = 1; i < result.length; i++){\r\n\t\t\tvar current = result[i];\r\n\t\t\tif(current.start <= base.end){\r\n\t\t\t\tif(current.end > base.end){\r\n\t\t\t\t\tbase.end = current.end;\r\n\t\t\t\t}\r\n\t\t\t\tresult.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}else{\r\n\t\t\t\tbase = current;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t_mergeHoursConfig: function(firstHours, secondHours){\r\n\t\t//var firstIntervals = this._getIntervals(firstHours);\r\n\t\t//var secondIntervals = this._getIntervals(secondHours);\r\n\r\n\t\treturn this._mergeAdjacentIntervals(\r\n\t\t\tthis._intersectHourRanges(firstHours, secondHours)\r\n\t\t);\r\n\t},\r\n\r\n\tmerge: function(first, second){\r\n\t\tvar firstConfig = utils.copy(first.getConfig().parsed);\r\n\r\n\t\tvar secondConfig = utils.copy(second.getConfig().parsed);\r\n\r\n\t\tvar mergedSettings = {\r\n\t\t\thours: this._toHoursArray(this._mergeHoursConfig(firstConfig.hours, secondConfig.hours)),\r\n\t\t\tdates: {},\r\n\t\t\tcustomWeeks: {}\r\n\t\t};\r\n\r\n\t\tconst processCalendar = (config1, config2) => {\r\n\t\t\tfor (let i in config1.dates) {\r\n\t\t\t\tconst date1 = config1.dates[i];\r\n\t\r\n\t\t\t\t// dates contain day-of-week rules [0-7] and rules for specific dates (js date timestamps) - set false date rules initially\r\n\t\t\t\tif (+i > 1000) {\r\n\t\t\t\t\tmergedSettings.dates[i] = false;\r\n\t\t\t\t}\r\n\t\t\t\t// Check if the key exists in the fisrt calendar object\r\n\t\t\t\tfor (const key in config2.dates) {\r\n\t\t\t\t\tconst date2 = config2.dates[key];\r\n\t\r\n\t\t\t\t\t// Logical AND for week days\r\n\t\t\t\t\tif (key == i) {\r\n\t\t\t\t\t\tmergedSettings.dates[i] = !!(date1 && date2);\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t// Handle case where dates are arrays\r\n\t\t\t\t\tif (Array.isArray(date1)) {\r\n\t\t\t\t\t\tconst hours2 = Array.isArray(date2) ? date2 : config2.hours;\r\n\t\t\t\t\t\tmergedSettings.dates[i] = this._toHoursArray(this._mergeHoursConfig(date1, hours2));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\t// Check both calendars\r\n\t\tprocessCalendar(firstConfig, secondConfig);\r\n\t\tprocessCalendar(secondConfig, firstConfig);\r\n\r\n\t\t// transfer and overwrite custom week calendars\r\n\t\tif(firstConfig.customWeeks){\r\n\t\t\tfor(var i in firstConfig.customWeeks){\r\n\t\t\t\tmergedSettings.customWeeks[i] = firstConfig.customWeeks[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(secondConfig.customWeeks){\r\n\t\t\tfor(var i in secondConfig.customWeeks){\r\n\t\t\t\tmergedSettings.customWeeks[i] = secondConfig.customWeeks[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn mergedSettings;\r\n\r\n\t}\r\n\r\n};\r\n\r\nexport default WorkTimeCalendarMerger;","\r\n\r\nimport { IWorkUnitCache } from \"./workunit_cache_interface\";\r\n\r\nexport class WorkUnitsMapCache implements IWorkUnitCache {\r\n\tprivate _cache: Map>>;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\tgetItem(unit: string, timestamp: string, value: Date): number|boolean {\r\n\t\tif (this._cache.has(unit)) {\r\n\t\t\tconst unitCache = this._cache.get(unit);\r\n\r\n\t\t\tconst subCache = unitCache[value.getFullYear()];\r\n\t\t\tif (subCache && subCache.has(timestamp)) {\r\n\t\t\t\treturn subCache.get(timestamp);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\tsetItem(unit: string, timestamp: string, value: boolean, rawValue: Date): void {\r\n\t\tif (!unit || !timestamp) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cache = this._cache;\r\n\t\tconst year = rawValue.getFullYear();\r\n\r\n\t\tlet unitCache;\r\n\t\tif (!cache.has(unit)) {\r\n\t\t\tunitCache = [];\r\n\t\t\tcache.set(unit, unitCache);\r\n\t\t} else {\r\n\t\t\tunitCache = cache.get(unit);\r\n\t\t}\r\n\r\n\t\tlet yearCache = unitCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = unitCache[year] = new Map();\r\n\t\t}\r\n\r\n\r\n\t\tyearCache.set(timestamp, value);\r\n\t}\r\n\tclear(): void{\r\n\t\tthis._cache = new Map>>();\r\n\t}\r\n}","import { IWorkUnitCache } from \"./workunit_cache_interface\";\r\n\r\nexport class WorkUnitsObjectCache implements IWorkUnitCache {\r\n\tprivate _cache: any;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\tgetItem(unit: string, timestamp: string, value: Date): number|boolean {\r\n\t\tconst cache = this._cache;\r\n\t\tif (cache && cache[unit]) {\r\n\t\t\tconst units = cache[unit];\r\n\t\t\tif(units === undefined){\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tconst subCache = units[value.getFullYear()];\r\n\t\t\tif (subCache && subCache[timestamp] !== undefined) {\r\n\t\t\t\treturn subCache[timestamp];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\tsetItem(unit: string, timestamp: string, value: boolean, rawValue: Date): void {\r\n\t\tif (!unit || !timestamp) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cache = this._cache;\r\n\r\n\t\tif (!cache) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!cache[unit]) {\r\n\t\t\tcache[unit] = [];\r\n\t\t}\r\n\t\tconst unitCache = cache[unit];\r\n\r\n\t\tconst year = rawValue.getFullYear();\r\n\t\tlet yearCache = unitCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = unitCache[year] = {};\r\n\t\t}\r\n\t\tyearCache[timestamp] = value;\r\n\t}\r\n\tclear(): void{\r\n\t\tthis._cache = {};\r\n\t}\r\n}","\r\n\r\nexport class LargerUnitsCache {\r\n\tprivate _weekCache: Map;\r\n\tprivate _monthCache: Map;\r\n\tprivate _calendar: any;\r\n\tconstructor(calendar) {\r\n\t\tthis.clear();\r\n\t\tthis._calendar = calendar;\r\n\t}\r\n\r\n\tgetMinutesPerWeek = (weekStart: Date) => {\r\n\t\tconst key = weekStart.valueOf();\r\n\r\n\t\tif(this._weekCache.has(key)){\r\n\t\t\treturn this._weekCache.get(key);\r\n\t\t}\r\n\r\n\t\tconst calendar = this._calendar;\r\n\t\tconst gantt = this._calendar.$gantt;\r\n\r\n\t\tlet minutesPerWeek = 0;\r\n\t\tlet start = gantt.date.week_start(new Date(weekStart));\r\n\t\tfor(let i = 0; i < 7; i++){\r\n\t\t\tminutesPerWeek += calendar.getHoursPerDay(start) * 60;\r\n\t\t\tstart = gantt.date.add(start, 1, \"day\");\r\n\t\t}\r\n\r\n\t\tthis._weekCache.set(key, minutesPerWeek);\r\n\t\treturn minutesPerWeek;\r\n\t};\r\n\r\n\tgetMinutesPerMonth = (monthStart: Date) => {\r\n\t\tconst key = monthStart.valueOf();\r\n\r\n\t\tif(this._monthCache.has(key)){\r\n\t\t\treturn this._monthCache.get(key);\r\n\t\t}\r\n\r\n\t\tconst calendar = this._calendar;\r\n\t\tconst gantt = this._calendar.$gantt;\r\n\r\n\t\tlet minutesPerMonth = 0;\r\n\t\tlet start = gantt.date.week_start(new Date(monthStart));\r\n\t\tconst nextMonth = gantt.date.add(start, 1, \"month\").valueOf();\r\n\t\twhile(start.valueOf() < nextMonth){\r\n\t\t\tminutesPerMonth += calendar.getHoursPerDay(start) * 60;\r\n\t\t\tstart = gantt.date.add(start, 1, \"day\");\r\n\t\t}\r\n\r\n\t\tthis._monthCache.set(key, minutesPerMonth);\r\n\t\treturn minutesPerMonth;\r\n\t};\r\n\r\n\tclear = (): void => {\r\n\t\tthis._weekCache = new Map();\r\n\t\tthis._monthCache = new Map();\r\n\t};\r\n}","export class DateDurationCache {\r\n\tprivate _cache: any;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\t_getCacheObject(startDate: Date, unit: string, step:number){\r\n\t\tconst cache = this._cache;\r\n\t\tif (!cache[unit]) {\r\n\t\t\tcache[unit] = [];\r\n\t\t}\r\n\t\tlet unitCache = cache[unit];\r\n\t\tif(!unitCache) {\r\n\t\t\tunitCache = cache[unit] = {};\r\n\t\t}\r\n\r\n\t\tlet stepCache = unitCache[step];\r\n\t\tif(!stepCache) {\r\n\t\t\tstepCache = unitCache[step] = {};\r\n\t\t}\r\n\r\n\t\tconst year = startDate.getFullYear();\r\n\t\tlet yearCache = stepCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = stepCache[year] = {durations: {}, endDates: {}};\r\n\t\t}\r\n\r\n\t\treturn yearCache;\r\n\t}\r\n\t_endDateCacheKey(startDate: number, duration: number){\r\n\t\treturn String(startDate) + \"-\" + String(duration);\r\n\t}\r\n\t_durationCacheKey(startDate: number, endDate: number){\r\n\t\treturn String(startDate) + \"-\" + String(endDate);\r\n\t}\r\n\tgetEndDate(startDate: Date, duration: number, unit: string, step: number, compute: () => Date): number|null{\r\n\t\tconst cache = this._getCacheObject(startDate, unit, step);\r\n\r\n\t\tconst startDateTimestamp = startDate.valueOf();\r\n\t\tconst key = this._endDateCacheKey(startDateTimestamp, duration);\r\n\t\tlet endDate;\r\n\t\tif(cache.endDates[key] === undefined){\r\n\t\t\tconst result = compute();\r\n\t\t\tconst resultTimestamp = result.valueOf();\r\n\t\t\tcache.endDates[key] = resultTimestamp;\r\n\t\t\tcache.durations[this._durationCacheKey(startDateTimestamp, resultTimestamp)] = duration;\r\n\t\t\tendDate = result;\r\n\t\t}else{\r\n\t\t\tendDate = new Date(cache.endDates[key]);\r\n\t\t}\r\n\r\n\t\treturn endDate;\r\n\t}\r\n\r\n\tgetDuration(startDate: Date, endDate: Date, unit: string, step: number, compute: () => number): number|null{\r\n\t\tconst cache = this._getCacheObject(startDate, unit, step);\r\n\r\n\t\tconst startDateTimestamp = startDate.valueOf();\r\n\t\tconst endDateTimestamp = endDate.valueOf();\r\n\t\tconst key = this._durationCacheKey(startDateTimestamp, endDateTimestamp);\r\n\t\tlet duration;\r\n\t\tif(cache.durations[key] === undefined){\r\n\t\t\tconst result = compute();\r\n\t\t\tcache.durations[key] = result.valueOf();\r\n\r\n\t\t\t// can't populate end date due to logic of end date calculation, current unit tests capture it\r\n\t\t\t// cache.endDates[this._endDateCacheKey(startDateTimestamp, result)] = endDateTimestamp;\r\n\t\t\tduration = result;\r\n\t\t}else{\r\n\t\t\tduration = cache.durations[key];\r\n\t\t}\r\n\r\n\t\treturn duration;\r\n\t}\r\n\r\n\tclear(): void{\r\n\t\tthis._cache = {};\r\n\t}\r\n}","import {createCacheObject} from \"./work_unit_cache\";\r\nimport {LargerUnitsCache} from \"./work_unit_cache\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport {DateDurationCache} from \"./work_unit_cache/date_duration_cache\";\r\n\r\nfunction CalendarWorkTimeStrategy(gantt, argumentsHelper) {\r\n\tthis.argumentsHelper = argumentsHelper;\r\n\tthis.$gantt = gantt;\r\n\tthis._workingUnitsCache = createCacheObject();\r\n\tthis._largeUnitsCache = new LargerUnitsCache(this);\r\n\tthis._dateDurationCache = new DateDurationCache();\r\n\tthis._worktime = null;\r\n\tthis._cached_timestamps = {};\r\n\tthis._cached_timestamps_count = 0;\r\n}\r\n\r\nCalendarWorkTimeStrategy.prototype = {\r\n\tunits: [\r\n\t\t\"year\",\r\n\t\t\"month\",\r\n\t\t\"week\",\r\n\t\t\"day\",\r\n\t\t\"hour\",\r\n\t\t\"minute\"\r\n\t],\r\n\t_clearCaches: function(){\r\n\t\tthis._workingUnitsCache.clear();\r\n\t\tthis._largeUnitsCache.clear();\r\n\t\tthis._dateDurationCache.clear();\r\n\t},\r\n\t// cache previously calculated worktime\r\n\t_getUnitOrder: function (unit) {\r\n\t\tfor (var i = 0, len = this.units.length; i < len; i++) {\r\n\t\t\tif (this.units[i] == unit)\r\n\t\t\t\treturn i;\r\n\t\t}\r\n\t},\r\n\t_resetTimestampCache: function(){\r\n\t\tthis._cached_timestamps = {};\r\n\t\tthis._cached_timestamps_count = 0;\r\n\t},\r\n\t_timestamp: function (settings) {\r\n\t\t// minor optimization, store calculated timestamps to reduce computations\r\n\t\t// reset cache when number of keys exceeds large number where key lookup may became more expensive than the recalculation\r\n\t\tif(this._cached_timestamps_count > 1000000){\r\n\t\t\tthis._resetTimestampCache();\r\n\t\t}\r\n\r\n\t\tvar timestamp = null;\r\n\t\tif ((settings.day || settings.day === 0)) {\r\n\t\t\ttimestamp = settings.day;\r\n\t\t} else if (settings.date) {\r\n\t\t\tvar value = String(settings.date.valueOf());\r\n\t\t\tif(this._cached_timestamps[value]){\r\n\t\t\t\ttimestamp = this._cached_timestamps[value];\r\n\t\t\t}else{\r\n\t\t\t\t// store worktime datestamp in utc so it could be recognized in different timezones (e.g. opened locally and sent to the export service in different timezone)\r\n\t\t\t\ttimestamp = Date.UTC(settings.date.getFullYear(), settings.date.getMonth(), settings.date.getDate());\r\n\t\t\t\tthis._cached_timestamps[value] = timestamp;\r\n\t\t\t\tthis._cached_timestamps_count++;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn timestamp;\r\n\t},\r\n\t_checkIfWorkingUnit: function (date, unit) {\r\n\t\t// GS-596: If unit is larger than day or has a custom logic\r\n\t\tif (!this[\"_is_work_\" + unit]) {\r\n\t\t\tconst from = this.$gantt.date[`${unit}_start`](new Date(date));\r\n\t\t\tconst to = this.$gantt.date.add(from, 1, unit);\r\n\t\t\treturn this.hasDuration(from, to);\r\n\t\t}\r\n\t\treturn this[\"_is_work_\" + unit](date);\r\n\t},\r\n\t//checkings for particular time units\r\n\t//methods for month-year-week can be defined, otherwise always return 'true'\r\n\t_is_work_day: function (date) {\r\n\t\tvar val = this._getWorkHours(date);\r\n\r\n\t\tif (Array.isArray(val)) {\r\n\t\t\treturn val.length > 0;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\t_is_work_hour: function (date) {\r\n\t\tvar hours = this._getWorkHours(date); // [{start: 8*60*60, end: 12*60*60}, {start: 13*60*60, end: 17*60*60}]\r\n\t\tvar value = date.getHours();\r\n\t\tfor (var i = 0; i < hours.length; i++) {\r\n\t\t\tif(value >= hours[i].startHour && value < hours[i].endHour){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_getTimeOfDayStamp: function(date, dayEnd) {\r\n\t\tvar hours = date.getHours();\r\n\t\tif(!date.getHours() && !date.getMinutes() && dayEnd){\r\n\t\t\thours = 24;\r\n\t\t}\r\n\t\treturn hours * 60 * 60 + date.getMinutes() * 60;\r\n\t},\r\n\r\n\t_is_work_minute: function(date){\r\n\t\tvar hours = this._getWorkHours(date); // [{start: 8*60*60, end: 12*60*60}, {start: 13*60*60, end: 17*60*60}]\r\n\t\tvar checkTime = this._getTimeOfDayStamp(date);\r\n\t\tfor (var i = 0; i < hours.length; i++) {\r\n\t\t\tif(checkTime >= hours[i].start && checkTime < hours[i].end){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_nextDate: function (start, unit, step) {\r\n\t\treturn this.$gantt.date.add(start, step, unit);\r\n\t},\r\n\t_getWorkUnitsBetweenGeneric: function (from, to, unit, step) {\r\n\t\tvar dateHelper = this.$gantt.date;\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\t\tvar units = 0;\r\n\r\n\r\n\t\tvar next = null;\r\n\t\tvar stepStart,\r\n\t\t\tstepEnd;\r\n\r\n\t\t// calculating decimal durations, i.e. 2016-09-20 00:05:00 - 2016-09-20 01:00:00 ~ 0.95 instead of 1\r\n\t\t// and also 2016-09-20 00:00:00 - 2016-09-20 00:05:00 ~ 0.05 instead of 1\r\n\t\t// durations must be rounded later\r\n\t\tvar checkFirst = false;\r\n\t\tstepStart = dateHelper[unit + \"_start\"](new Date(start));\r\n\t\tif (stepStart.valueOf() != start.valueOf()) {\r\n\t\t\tcheckFirst = true;\r\n\t\t}\r\n\t\tvar checkLast = false;\r\n\t\tstepEnd = dateHelper[unit + \"_start\"](new Date(to));\r\n\t\tif (stepEnd.valueOf() != to.valueOf()) {\r\n\t\t\tcheckLast = true;\r\n\t\t}\r\n\r\n\t\tvar isLastStep = false;\r\n\t\twhile (start.valueOf() < end.valueOf()) {\r\n\t\t\tnext = this._nextDate(start, unit, step);\r\n\t\t\tisLastStep = (next.valueOf() > end.valueOf());\r\n\r\n\t\t\tif (this._isWorkTime(start, unit)) {\r\n\t\t\t\tif (checkFirst || (checkLast && isLastStep)) {\r\n\t\t\t\t\tstepStart = dateHelper[unit + \"_start\"](new Date(start));\r\n\t\t\t\t\tstepEnd = dateHelper.add(stepStart, step, unit);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (checkFirst) {\r\n\t\t\t\t\tcheckFirst = false;\r\n\t\t\t\t\tnext = this._nextDate(stepStart, unit, step);\r\n\t\t\t\t\tunits += ((stepEnd.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf()));\r\n\t\t\t\t} else if (checkLast && isLastStep) {\r\n\t\t\t\t\tcheckLast = false;\r\n\t\t\t\t\tunits += ((end.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf()));\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tunits++;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar unitOrder = this._getUnitOrder(unit);\r\n\t\t\t\tvar biggerTimeUnit = this.units[unitOrder - 1];\r\n\t\t\t\tif(biggerTimeUnit && !this._isWorkTime(start, biggerTimeUnit)){\r\n\t\t\t\t\tnext = this._getClosestWorkTimeFuture(start, biggerTimeUnit);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstart = next;\r\n\t\t}\r\n\t\treturn units;\r\n\t},\r\n\r\n\t_getMinutesPerHour: function (date) {\r\n\t\tvar hourStart = this._getTimeOfDayStamp(date);\r\n\t\tvar hourEnd = this._getTimeOfDayStamp(this._nextDate(date, \"hour\", 1));\r\n\t\tif (hourEnd === 0){\r\n\t\t\thourEnd = 24 * 60 * 60;\r\n\t\t}\r\n\t\tvar worktimes = this._getWorkHours(date);\r\n\r\n\t\tfor(var i = 0; i < worktimes.length; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(hourStart >= interval.start && hourEnd <= interval.end){\r\n\t\t\t\treturn 60;// hour inside a working interval, all hour is a work hour\r\n\t\t\t}else if(hourStart < interval.end && hourEnd > interval.start){\r\n\t\t\t\t// hour is partially work time\r\n\t\t\t\tvar duration = Math.min(hourEnd, interval.end) - Math.max(hourStart, interval.start);\r\n\t\t\t\treturn duration / 60;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t_getMinutesPerDay: function (date) {\r\n\t\tvar hours = this._getWorkHours(date);\r\n\t\tvar res = 0;\r\n\t\thours.forEach(function(interval){\r\n\t\t\tres+= interval.durationMinutes;\r\n\t\t});\r\n\t\treturn res;\r\n\t},\r\n\tgetHoursPerDay: function (date) {\r\n\t\tvar hours = this._getWorkHours(date);\r\n\t\tvar res = 0;\r\n\t\thours.forEach(function(interval){\r\n\t\t\tres+= interval.durationHours;\r\n\t\t});\r\n\t\treturn res;\r\n\t},\r\n\t_getWorkUnitsForRange: function (from, to, unit, step) {\r\n\t\tvar total = 0;\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\r\n\t\tvar getUnitsPerDay;\r\n\t\tif (unit == \"minute\") {\r\n\t\t\tgetUnitsPerDay = utils.bind(this._getMinutesPerDay, this);\r\n\t\t} else {\r\n\t\t\tgetUnitsPerDay = utils.bind(this.getHoursPerDay, this);\r\n\t\t}\r\n\r\n\t\twhile (start.valueOf() < end.valueOf()) {\r\n\t\t\tif(end - start > 1000*60*60*24*32 && start.getDate() === 0) {\r\n\t\t\t\tvar units = this._largeUnitsCache.getMinutesPerMonth(start);\r\n\t\t\t\tif(unit == \"hour\"){\r\n\t\t\t\t\tunits = units / 60;\r\n\t\t\t\t}\r\n\t\t\t\ttotal += units;\r\n\t\t\t\tstart = this.$gantt.date.add(start, 1, \"month\");\r\n\t\t\t\tcontinue;\r\n\t\t\t}else if(end - start > 1000*60*60*24*16) {\r\n\t\t\t\tvar weekStart = this.$gantt.date.week_start(new Date(start));\r\n\t\t\t\tif(start.valueOf() === weekStart.valueOf()){\r\n\t\t\t\t\tvar units = this._largeUnitsCache.getMinutesPerWeek(start);\r\n\t\t\t\t\tif(unit == \"hour\"){\r\n\t\t\t\t\t\tunits = units / 60;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal += units;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, 7, \"day\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t//\tif (this._isWorkTime(start, \"day\")) {\r\n\t\t\ttotal += getUnitsPerDay(start);\r\n\t\t//\t}\r\n\t\t\tstart = this._nextDate(start, \"day\", 1);\r\n\t\t}\r\n\r\n\t\treturn total / step;\r\n\t},\r\n\r\n\r\n\t_getMinutesBetweenSingleDay: function(from, to){\r\n\t\tvar range = this._getIntervalTimestamp(from, to);\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tvar result = 0;\r\n\r\n\t\tfor(var i = 0; i < worktimes.length; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(range.end >= interval.start && range.start <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.max(interval.start, range.start);\r\n\t\t\t\tvar minuteTo = Math.min(interval.end, range.end);\r\n\r\n\t\t\t\tresult += (minuteTo - minuteFrom) / 60;\r\n\t\t\t\trange.start = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Math.floor(result);\r\n\t},\r\n\r\n\t_getMinutesBetween: function(from, to, unit, step){\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\r\n\t\tvar firstDayStart = new Date(start);\r\n\t\tvar firstDayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(start)), 1, \"day\");\r\n\r\n\t\tif (end.valueOf() <= firstDayEnd.valueOf()) {\r\n\t\t\treturn this._getMinutesBetweenSingleDay(from, to);\r\n\t\t} else {\r\n\r\n\t\t\tvar lastDayStart = this.$gantt.date.day_start(new Date(end));\r\n\t\t\tvar lastDayEnd = end;\r\n\r\n\t\t\tvar startPart = this._getMinutesBetweenSingleDay(firstDayStart, firstDayEnd);\r\n\t\t\tvar endPart = this._getMinutesBetweenSingleDay(lastDayStart, lastDayEnd);\r\n\r\n\t\t\tvar rangePart = this._getWorkUnitsForRange(firstDayEnd, lastDayStart, unit, step);\r\n\t\t\tvar total = startPart + rangePart + endPart;\r\n\r\n\t\t\treturn total;\r\n\t\t}\r\n\t},\r\n\t// optimized method for calculating work units duration of large time spans\r\n\t// implemented for hours and minutes units, bigger time units don't benefit from the optimization so much\r\n\t_getHoursBetween: function (from, to, unit, step) {\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\r\n\t\tvar firstDayStart = new Date(start);\r\n\t\tvar firstDayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(start)), 1, \"day\");\r\n\r\n\t\tif (end.valueOf() <= firstDayEnd.valueOf()) {\r\n\t\t\treturn Math.round(this._getMinutesBetweenSingleDay(from, to) / 60);\r\n\t\t} else {\r\n\r\n\t\t\tvar lastDayStart = this.$gantt.date.day_start(new Date(end));\r\n\t\t\tvar lastDayEnd = end;\r\n\r\n\t\t\tvar startPart = this._getMinutesBetweenSingleDay(firstDayStart, firstDayEnd, unit, step) / 60;\r\n\t\t\tvar endPart = this._getMinutesBetweenSingleDay(lastDayStart, lastDayEnd, unit, step) / 60;\r\n\r\n\t\t\tvar rangePart = this._getWorkUnitsForRange(firstDayEnd, lastDayStart, unit, step);\r\n\t\t\tvar total = startPart + rangePart + endPart;\r\n\r\n\t\t\treturn Math.round(total);\r\n\t\t}\r\n\t},\r\n\r\n\tgetConfig: function () {\r\n\t\treturn this._worktime;\r\n\t},\r\n\t_setConfig: function (settings) {\r\n\t\tthis._worktime = settings;\r\n\t\tthis._parseSettings();\r\n\t\tthis._clearCaches();\r\n\t},\r\n\t_parseSettings: function() {\r\n\t\tvar settings = this.getConfig();\r\n\t\tsettings.parsed = {\r\n\t\t\tdates: {},\r\n\t\t\thours: null,\r\n\t\t\thaveCustomWeeks: false,\r\n\t\t\tcustomWeeks: {},\r\n\t\t\tcustomWeeksRangeStart: null,\r\n\t\t\tcustomWeeksRangeEnd: null,\r\n\t\t\tcustomWeeksBoundaries: []\r\n\t\t};\r\n\r\n\t\tsettings.parsed.hours = this._parseHours(settings.hours);\r\n\t\tfor(var i in settings.dates){\r\n\t\t\tsettings.parsed.dates[i] = this._parseHours(settings.dates[i]);\r\n\t\t}\r\n\r\n\t\tif(settings.customWeeks) {\r\n\t\t\tvar minCustomRangeStart = null;\r\n\t\t\tvar maxCustomRangeEnd = null;\r\n\t\t\tfor(var i in settings.customWeeks){\r\n\t\t\t\tvar customTime = settings.customWeeks[i];\r\n\r\n\t\t\t\tif(customTime.from && customTime.to){\r\n\t\t\t\t\tvar rangeStart = customTime.from;\r\n\t\t\t\t\tvar rangeEnd = customTime.to;\r\n\t\t\t\t\tif(!minCustomRangeStart || minCustomRangeStart > rangeStart.valueOf()){\r\n\t\t\t\t\t\tminCustomRangeStart = rangeStart.valueOf();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!maxCustomRangeEnd || maxCustomRangeEnd < rangeEnd.valueOf()){\r\n\t\t\t\t\t\tmaxCustomRangeEnd = rangeEnd.valueOf();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsettings.parsed.customWeeksBoundaries.push({\r\n\t\t\t\t\t\tfrom: rangeStart.valueOf(),\r\n\t\t\t\t\t\tfromReadable: new Date(rangeStart),\r\n\t\t\t\t\t\tto: rangeEnd.valueOf(),\r\n\t\t\t\t\t\ttoReadable: new Date(rangeEnd),\r\n\t\t\t\t\t\tname: i\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tsettings.parsed.haveCustomWeeks = true;\r\n\t\t\t\t\tvar currentWeek = settings.parsed.customWeeks[i] = {\r\n\t\t\t\t\t\tfrom: customTime.from,\r\n\t\t\t\t\t\tto: customTime.to,\r\n\t\t\t\t\t\thours: this._parseHours(customTime.hours),\r\n\t\t\t\t\t\tdates: {}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tfor(var d in customTime.dates){\r\n\t\t\t\t\t\tcurrentWeek.dates[d] = this._parseHours(customTime.dates[d]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsettings.parsed.customWeeksRangeStart = minCustomRangeStart;\r\n\t\t\tsettings.parsed.customWeeksRangeEnd = maxCustomRangeEnd;\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_tryChangeCalendarSettings: function (payload) {\r\n\t\tvar backup = JSON.stringify(this.getConfig());\r\n\t\tpayload();\r\n\t\tif (!this.hasWorkTime()) {\r\n\t\t//\tthis.$gantt.assert(false, \"Invalid calendar settings, no worktime available\");\r\n\t\t\tthis._setConfig(JSON.parse(backup));\r\n\t\t\tthis._clearCaches();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\r\n\t},\r\n\r\n\t_arraysEqual: function(a, b){\r\n\t\tif (a === b) return true;\r\n\t\tif (!a || !b) return false;\r\n\t\tif (a.length != b.length) return false;\r\n\r\n\t\tfor (var i = 0; i < a.length; ++i) {\r\n\t\t\tif (a[i] !== b[i]) return false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\r\n\t_compareSettings: function (mySettings, thatSettings) {\r\n\t\tif (!this._arraysEqual(mySettings.hours, thatSettings.hours)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar myDays = Object.keys(mySettings.dates);\r\n\t\tvar otherDates = Object.keys(thatSettings.dates);\r\n\t\tmyDays.sort();\r\n\t\totherDates.sort();\r\n\r\n\t\tif (!this._arraysEqual(myDays, otherDates)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < myDays.length; i++){\r\n\t\t\tvar timestamp = myDays[i];\r\n\t\t\tvar myHours = mySettings.dates[timestamp];\r\n\t\t\tvar otherHours = mySettings.dates[timestamp];\r\n\r\n\t\t\t// day settings not equal\r\n\t\t\tif(myHours !== otherHours &&\r\n\t\t\t\t// but still can be two arrays with the equivalent hour settings\r\n\t\t\t\t!(Array.isArray(myHours) && Array.isArray(otherHours) && this._arraysEqual(myHours, otherHours))\r\n\t\t\t\t){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\tequals: function (calendar) {\r\n\t\tif(!(calendar instanceof CalendarWorkTimeStrategy)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar mySettings = this.getConfig();\r\n\t\tvar thatSettings = calendar.getConfig();\r\n\r\n\t\tif(!this._compareSettings(mySettings, thatSettings)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif(mySettings.parsed.haveCustomWeeks && thatSettings.parsed.haveCustomWeeks){\r\n\t\t\tif(mySettings.parsed.customWeeksBoundaries.length != thatSettings.parsed.customWeeksBoundaries.length){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i in mySettings.parsed.customWeeks){\r\n\t\t\t\tvar myWeek = mySettings.parsed.customWeeks[i];\r\n\t\t\t\tvar thatWeek = thatSettings.parsed.customWeeks[i];\r\n\t\t\t\tif(!thatWeek){\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!this._compareSettings(myWeek, thatWeek)){\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else if(mySettings.parse.haveCustomWeeks !== thatSettings.parsed.haveCustomWeeks){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\tgetWorkHours: function () {\r\n\t\tvar config = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\r\n\t\treturn this._getWorkHours(config.date, false);\r\n\t},\r\n\t_getWorkHours: function (date, parsed) {\r\n\t\tvar calendar = this.getConfig();\r\n\t\tif(parsed !== false){\r\n\t\t\tcalendar = calendar.parsed;\r\n\t\t}\r\n\r\n\t\tif(!date){\r\n\t\t\treturn calendar.hours;\r\n\t\t}\r\n\r\n\t\tvar dateValue = this._timestamp({date: date});\r\n\r\n\t\tif(calendar.haveCustomWeeks){\r\n\t\t\tif(calendar.customWeeksRangeStart <= dateValue && calendar.customWeeksRangeEnd > dateValue){\r\n\t\t\t\tfor(var i = 0; i < calendar.customWeeksBoundaries.length; i++){\r\n\t\t\t\t\tif(calendar.customWeeksBoundaries[i].from <= dateValue && calendar.customWeeksBoundaries[i].to > dateValue){\r\n\t\t\t\t\t\tcalendar = calendar.customWeeks[calendar.customWeeksBoundaries[i].name];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar hours = true;\r\n\r\n\t\tif (calendar.dates[dateValue] !== undefined) {\r\n\t\t\thours = calendar.dates[dateValue];//custom day\r\n\t\t} else if (calendar.dates[date.getDay()] !== undefined) {\r\n\t\t\thours = calendar.dates[date.getDay()];//week day\r\n\t\t}\r\n\t\tif (hours === true) {\r\n\t\t\treturn calendar.hours;\r\n\t\t} else if (hours) {\r\n\t\t\treturn hours;\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n\r\n\t_getIntervalTimestamp: function(from, to){\r\n\t\tvar res = {\r\n\t\t\tstart: 0,\r\n\t\t\tend: 0\r\n\t\t};\r\n\r\n\t\tres.start = from.getHours() * 60 * 60 + from.getMinutes() * 60 + from.getSeconds();\r\n\t\tvar endHours = to.getHours();\r\n\t\tif(!endHours && !to.getMinutes() && !to.getSeconds() && from.valueOf() < to.valueOf()){\r\n\t\t\tendHours = 24;\r\n\t\t}\r\n\t\tres.end = endHours * 60 * 60 + to.getMinutes() * 60 + to.getSeconds();\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_parseHours: function(hours) {\r\n\t\tif(Array.isArray(hours)){\r\n\r\n\t\t\tvar timestampRanges = [];// worktime as seconds range\r\n\t\t\thours.forEach(function(hour){\r\n\t\t\t\tif(typeof hour === \"number\"){\r\n\t\t\t\t\ttimestampRanges.push(hour*60*60);\r\n\t\t\t\t}else if(typeof hour === \"string\") {\r\n\t\t\t\t\t// \"12-13\", or \"12:00-13:00\", or \"12:00:00-13:00:00\"\r\n\t\t\t\t\thour.split(\"-\").map(function(time){\r\n\t\t\t\t\t\treturn time.trim();\r\n\t\t\t\t\t}).forEach(function(part){\r\n\t\t\t\t\t\tvar parsed = part.split(\":\").map(function(time){\r\n\t\t\t\t\t\t\treturn time.trim();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tvar value = parseInt(parsed[0]*60*60);\r\n\t\t\t\t\t\tif(parsed[1]){\r\n\t\t\t\t\t\t\tvalue += parseInt(parsed[1]*60);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(parsed[2]){\r\n\t\t\t\t\t\t\tvalue += parseInt(parsed[2]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimestampRanges.push(value);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar timerangeConfig = [];\r\n\t\t\tfor (var i = 0; i < timestampRanges.length; i += 2) {\r\n\t\t\t\tvar start = timestampRanges[i];\r\n\t\t\t\tvar end = timestampRanges[i + 1];\r\n\t\t\t\tvar duration = end - start;\r\n\r\n\t\t\t\ttimerangeConfig.push({\r\n\t\t\t\t\tstart: start,\r\n\t\t\t\t\tend: end,\r\n\t\t\t\t\tstartHour: Math.floor(start / (60*60)),\r\n\t\t\t\t\tstartMinute: Math.floor(start / (60)),\r\n\t\t\t\t\tendHour: Math.ceil(end / (60*60)),\r\n\t\t\t\t\tendMinute: Math.ceil(end / (60)),\r\n\t\t\t\t\tdurationSeconds: duration,\r\n\t\t\t\t\tdurationMinutes: duration/60,\r\n\t\t\t\t\tdurationHours: duration/(60 * 60)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\treturn timerangeConfig;\r\n\t\t} else {\r\n\t\t\treturn hours;\r\n\t\t}\r\n\t},\r\n\r\n\tsetWorkTime: function (settings) {\r\n\t\treturn this._tryChangeCalendarSettings(utils.bind(function () {\r\n\t\t\tvar hours = settings.hours !== undefined ? settings.hours : true;\r\n\t\t\tvar timestamp = this._timestamp(settings);\r\n\t\t\tvar calendarConfig = this.getConfig();\r\n\t\t\tif (timestamp !== null) {\r\n\t\t\t\tcalendarConfig.dates[timestamp] = hours;\r\n\t\t\t} else if(!settings.customWeeks) {\r\n\t\t\t\tcalendarConfig.hours = hours;\r\n\t\t\t}\r\n\r\n\t\t\tif(settings.customWeeks){\r\n\t\t\t\tif(!calendarConfig.customWeeks){\r\n\t\t\t\t\tcalendarConfig.customWeeks = {};\r\n\t\t\t\t}\r\n\t\t\t\t// GS-1867. allow setWorkTime to exclude dates in the customWeeks range\r\n\t\t\t\tif (typeof settings.customWeeks == \"string\"){\r\n\t\t\t\t\tif (timestamp !== null) {\r\n\t\t\t\t\t\tcalendarConfig.customWeeks[settings.customWeeks].dates[timestamp] = hours;\r\n\t\t\t\t\t} else if(!settings.customWeeks) {\r\n\t\t\t\t\t\tcalendarConfig.customWeeks[settings.customWeeks].hours = hours;\r\n\t\t\t\t\t}\t\t\r\n\t\t\t\t} else if (typeof settings.customWeeks === \"object\"\r\n\t\t\t\t&& Function.prototype.toString.call(settings.customWeeks.constructor) === \"function Object() { [native code] }\"){\r\n\t\t\t\t\tfor(var i in settings.customWeeks){\r\n\t\t\t\t\t\tcalendarConfig.customWeeks[i] = settings.customWeeks[i];\r\n\t\t\t\t\t}\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._parseSettings();\r\n\t\t\tthis._clearCaches();\r\n\t\t}, this));\r\n\t},\r\n\r\n\tunsetWorkTime: function (settings) {\r\n\t\treturn this._tryChangeCalendarSettings(utils.bind(function () {\r\n\t\t\tif (!settings) {\r\n\t\t\t\tthis.reset_calendar();\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar timestamp = this._timestamp(settings);\r\n\r\n\t\t\t\tif (timestamp !== null) {\r\n\t\t\t\t\tdelete this.getConfig().dates[timestamp];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Load updated settings and clear work units cache\r\n\t\t\tthis._parseSettings();\r\n\t\t\tthis._clearCaches();\r\n\t\t}, this));\r\n\t},\r\n\r\n\t_isWorkTime: function (date, unit) {\r\n\t\t// Check if this item has in the cache\r\n\r\n\t\tvar useCache = true;//unit === \"day\"; // use cache only for days. In case of hours/minutes cache size grows too large and the overhead exceeds the gains\r\n\t\tvar isWorkUnit = -1;\r\n\t\tvar dateKey = null;\r\n\r\n\t\tif(useCache){\r\n\t\t\t// use string keys\r\n\t\t\tdateKey = String(date.valueOf());\r\n\t\t\tisWorkUnit = this._workingUnitsCache.getItem(unit, dateKey, date);\r\n\t\t}\r\n\r\n\t\tif (isWorkUnit == -1) {\r\n\t\t\t// calculate if not cached\r\n\t\t\tisWorkUnit = this._checkIfWorkingUnit(date, unit);\r\n\t\t\tif(useCache){\r\n\t\t\t\tthis._workingUnitsCache.setItem(unit, dateKey, isWorkUnit, date);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn isWorkUnit;\r\n\t},\r\n\r\n\tisWorkTime: function () {\r\n\t\tvar config = this.argumentsHelper.isWorkTimeArguments.apply( this.argumentsHelper, arguments);\r\n\t\treturn this._isWorkTime(config.date, config.unit);\r\n\t},\r\n\r\n\tcalculateDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply( this.argumentsHelper, arguments);\r\n\r\n\t\tif (!config.unit) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t//return this._calculateDuration(config.start_date, config.end_date, config.unit, config.step);\r\n\r\n\t\tvar self = this;\r\n\t\treturn this._dateDurationCache.getDuration(config.start_date, config.end_date, config.unit, config.step, function(){ \r\n\t\t\treturn self._calculateDuration(config.start_date, config.end_date, config.unit, config.step);\r\n\t\t});\r\n\t},\r\n\r\n\t_calculateDuration: function (from, to, unit, step) {\r\n\t\tvar res = 0;\r\n\r\n\t\tvar sign = 1;\r\n\t\tif(from.valueOf() > to.valueOf()){\r\n\t\t\tvar tmp = to;\r\n\t\t\tto = from;\r\n\t\t\tfrom = tmp;\r\n\t\t\tsign = -1;\r\n\t\t}\r\n\r\n\t\tif (unit == \"hour\" && step == 1) {\r\n\t\t\tres = this._getHoursBetween(from, to, unit, step);\r\n\t\t} else if(unit == \"minute\" && step == 1){\r\n\t\t\t// quick calculation for minutes with 1 minute step\r\n\t\t\tres = this._getMinutesBetween(from, to, unit, step);\r\n\t\t} else {\r\n\t\t\tres = this._getWorkUnitsBetweenGeneric(from, to, unit, step);\r\n\t\t}\r\n\r\n\t\t// getWorkUnits.. returns decimal durations\r\n\t\treturn sign * Math.round(res);\r\n\t},\r\n\thasDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply( this.argumentsHelper, arguments);\r\n\r\n\t\tvar from = config.start_date,\r\n\t\t\tto = config.end_date,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\tif (!unit) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tvar start = new Date(from),\r\n\t\t\tend = new Date(to);\r\n\t\tstep = step || 1;\r\n\r\n\t\twhile (start.valueOf() < end.valueOf()) {\r\n\t\t\tif (this._isWorkTime(start, unit))\r\n\t\t\t\treturn true;\r\n\t\t\tstart = this._nextDate(start, unit, step);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tcalculateEndDate: function () {\r\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply( this.argumentsHelper, arguments);\r\n\r\n\t\tvar from = config.start_date,\r\n\t\t\tduration = config.duration,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\tif (!unit)\r\n\t\t\treturn false;\r\n\r\n\t\tvar mult = (config.duration >= 0) ? 1 : -1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\t//\tvar endDate = this._calculateEndDate(from, duration, unit, step * mult);\r\n\t//\treturn endDate;\r\n\t\tvar self = this;\r\n\t\treturn this._dateDurationCache.getEndDate(from, duration, unit, step * mult, function(){ \r\n\t\t\treturn self._calculateEndDate(from, duration, unit, step * mult);\r\n\t\t} );\r\n\t},\r\n\r\n\t_calculateEndDate: function (from, duration, unit, step) {\r\n\t\tif (!unit)\r\n\t\t\treturn false;\r\n\r\n\t\tif (step == 1 && unit == \"minute\") {\r\n\t\t\treturn this._calculateMinuteEndDate(from, duration, step);\r\n\t\t} else if(step == -1 && unit == \"minute\") {\r\n\t\t\treturn this._subtractMinuteDate(from, duration, step);\r\n\t\t} else if (step == 1 && unit == \"hour\") {\r\n\t\t\treturn this._calculateHourEndDate(from, duration, step);\r\n\t\t} else {\r\n\t\t\tvar interval = this._addInterval(from, duration, unit, step, null);\r\n\t\t\treturn interval.end;\r\n\t\t}\r\n\t},\r\n\r\n\t_addInterval: function (start, duration, unit, step, stopAction) {\r\n\t\tvar added = 0;\r\n\t\tvar current = start;\r\n\t\tvar dstShift = false;\r\n\r\n\t\twhile (added < duration && !(stopAction && stopAction(current))) {\r\n\t\t\tvar next = this._nextDate(current, unit, step);\r\n\r\n\t\t\t// GS-1501. Correct hours after DST change\r\n\t\t\tif (unit == \"day\"){\r\n\t\t\t\tdstShift = dstShift || !current.getHours() && next.getHours();\r\n\r\n\t\t\t\tif (dstShift){\r\n\t\t\t\t\tnext.setHours(0);\r\n\t\t\t\t\tif (next.getHours()){\r\n\t\t\t\t\t// the day when the timezone is changed, try to correct hours next time\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdstShift = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar dateValue = new Date(next.valueOf() + 1);\r\n\t\t\tif (step > 0) {\r\n\t\t\t\tdateValue = new Date(next.valueOf() - 1);\r\n\t\t\t}\r\n\t\t\tvar workTimeCheck = this._isWorkTime(dateValue, unit);\r\n\r\n\t\t\tif (workTimeCheck && !dstShift) {\r\n\t\t\t\tadded++;\r\n\t\t\t}\r\n\t\t\tcurrent = next;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tend: current,\r\n\t\t\tstart: start,\r\n\t\t\tadded: added\r\n\t\t};\r\n\t},\r\n\r\n\t_addHoursUntilDayEnd: function(from, duration) {\r\n\t\tvar dayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(from)), 1, \"day\");\r\n\t\tvar added = 0;\r\n\t\tvar left = duration;\r\n\r\n\t\tvar range = this._getIntervalTimestamp(from, dayEnd);\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tfor(var i = 0; i < worktimes.length && added < duration; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(range.end >= interval.start && range.start <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.max(interval.start, range.start);\r\n\t\t\t\tvar minuteTo = Math.min(interval.end, range.end);\r\n\t\t\t\tvar rangeHours = (minuteTo - minuteFrom) / (60 * 60);\r\n\t\t\t\tif(rangeHours > left){\r\n\t\t\t\t\trangeHours = left;\r\n\t\t\t\t\tminuteTo = minuteFrom + (left * 60 * 60);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar addHours = Math.round((minuteTo - minuteFrom) / (60 * 60));\r\n\t\t\t\tadded += addHours;\r\n\t\t\t\tleft -= addHours;\r\n\t\t\t\trange.start = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar intervalEnd = dayEnd;\r\n\t\tif(added === duration){\r\n\t\t\tintervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, range.start);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tadded: added,\r\n\t\t\tend: intervalEnd\r\n\t\t};\r\n\t},\r\n\r\n\t_calculateHourEndDate: function (from, duration, step) {\r\n\t\tvar start = new Date(from),\r\n\t\tadded = 0;\r\n\t\tstep = step || 1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\r\n\t\tvar interval = this._addHoursUntilDayEnd(start, duration);\r\n\t\tadded = interval.added;\r\n\t\tstart = interval.end;\r\n\r\n\t\tvar durationLeft = duration - added;\r\n\r\n\t\tif (durationLeft) {\r\n\t\t\tvar current = start;\r\n\t\t\twhile (added < duration) {\r\n\t\t\t\tvar next = this._nextDate(current, \"day\", step);\r\n\t\t\t\t// reset to day start in case DST switch happens in the process\r\n\t\t\t\tnext.setHours(0);\r\n\t\t\t\tnext.setMinutes(0);\r\n\t\t\t\tnext.setSeconds(0);\r\n\r\n\t\t\t\tvar hoursPerDay = 0;\r\n\t\t\t\tif(step > 0){\r\n\t\t\t\t\thoursPerDay = this.getHoursPerDay(new Date(next.valueOf() - 1));\r\n\t\t\t\t}else{\r\n\t\t\t\t\thoursPerDay = this.getHoursPerDay(new Date(next.valueOf() + 1));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (added + hoursPerDay >= duration) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tadded += hoursPerDay;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcurrent = next;\r\n\t\t\t}\r\n\t\t\tstart = current;\r\n\t\t}\r\n\r\n\t\tif (added < duration) {\r\n\t\t\tvar durationLeft = duration - added;\r\n\t\t\tinterval = this._addHoursUntilDayEnd(start, durationLeft);\r\n\t\t\tstart = interval.end;\r\n\t\t}\r\n\r\n\t\treturn start;\r\n\t},\r\n\r\n\t_addMinutesUntilHourEnd: function(from, duration){\r\n\t\tif(from.getMinutes() === 0) {\r\n\t\t\t// already at hour end\r\n\t\t\treturn {\r\n\t\t\t\tadded: 0,\r\n\t\t\t\tend: new Date(from)\r\n\t\t\t};\r\n\t\t}\r\n\t\tvar hourEnd = this.$gantt.date.add(this.$gantt.date.hour_start(new Date(from)), 1, \"hour\");\r\n\t\tvar added = 0;\r\n\t\tvar left = duration;\r\n\r\n\t\tvar range = this._getIntervalTimestamp(from, hourEnd);\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tfor(var i = 0; i < worktimes.length && added < duration; i++){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(range.end >= interval.start && range.start <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.max(interval.start, range.start);\r\n\t\t\t\tvar minuteTo = Math.min(interval.end, range.end);\r\n\t\t\t\tvar rangeMinutes = (minuteTo - minuteFrom) / 60;\r\n\t\t\t\tif(rangeMinutes > left){\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom + (left * 60);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO: verify testcase https://dhtmlxsupport.teamwork.com/desk/tickets/9625700/messages\r\n\t\t\t\t/*if (rangeMinutes === 0) {\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom + (left * 60);\r\n\t\t\t\t}*/\r\n\r\n\t\t\t\tvar addMinutes = Math.round((minuteTo - minuteFrom) / 60);\r\n\t\t\t\tleft -= addMinutes;\r\n\t\t\t\tadded += addMinutes;\r\n\t\t\t\trange.start = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar intervalEnd = hourEnd;\r\n\t\tif(added === duration){\r\n\t\t\tintervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, range.start);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tadded: added,\r\n\t\t\tend: intervalEnd\r\n\t\t};\r\n\t},\r\n\r\n\t_subtractMinutesUntilHourStart: function(from, duration){\r\n\t\tvar hourStart = this.$gantt.date.hour_start(new Date(from));\r\n\t\tvar added = 0;\r\n\t\tvar left = duration;\r\n\r\n\t\tvar hourStartTimestamp = hourStart.getHours() * 60 * 60 + hourStart.getMinutes() * 60 + hourStart.getSeconds();\r\n\t\tvar initialDateTimestamp = from.getHours() * 60 * 60 + from.getMinutes() * 60 + from.getSeconds();\r\n\r\n\t\tvar worktimes = this._getWorkHours(from);\r\n\t\tfor(var i = worktimes.length - 1; i >= 0 && added < duration; i--){\r\n\t\t\tvar interval = worktimes[i];\r\n\t\t\tif(initialDateTimestamp > interval.start && hourStartTimestamp <= interval.end){\r\n\t\t\t\tvar minuteFrom = Math.min(initialDateTimestamp, interval.end);\r\n\t\t\t\tvar minuteTo = Math.max(hourStartTimestamp, interval.start);\r\n\r\n\t\t\t//\tvar minuteFrom = Math.max(interval.start, currentHour.start);\r\n\t\t\t//\tvar minuteTo = Math.min(interval.end, currentHour.end);\r\n\t\t\t\tvar rangeMinutes = (minuteFrom - minuteTo) / 60;\r\n\t\t\t\tif(rangeMinutes > left){\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom - (left * 60);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO: verify testcase https://dhtmlxsupport.teamwork.com/desk/tickets/9625700/messages\r\n\t\t\t\t/*if (rangeMinutes === 0) {\r\n\t\t\t\t\trangeMinutes = left;\r\n\t\t\t\t\tminuteTo = minuteFrom - (left * 60);\r\n\t\t\t\t}*/\r\n\r\n\t\t\t\tvar addMinutes = Math.abs(Math.round((minuteFrom - minuteTo) / 60));\r\n\t\t\t\tleft -= addMinutes;\r\n\t\t\t\tadded += addMinutes;\r\n\t\t\t\tinitialDateTimestamp = minuteTo;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar intervalEnd = hourStart;\r\n\t\tif(added === duration){\r\n\t\t\tintervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, initialDateTimestamp);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tadded: added,\r\n\t\t\tend: intervalEnd\r\n\t\t};\r\n\t},\r\n\r\n\t_subtractMinuteDate: function (from, duration, step) {\r\n\t\tvar start = new Date(from),\r\n\t\t\tadded = 0;\r\n\t\tstep = step || -1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\t\tduration = Math.round(duration);\r\n\r\n\t\tconst minutePrecision = this._isMinutePrecision(start);\r\n\r\n\t\tlet addedInterval = this._subtractMinutesUntilHourStart(start, duration);\r\n\t\tadded += addedInterval.added;\r\n\r\n\t\tstart = addedInterval.end;\r\n\r\n\t\tvar calculatedDay = 0;\r\n\t\tvar daySchedule = [];\r\n\t\tvar minutesInDay = 0;\r\n\r\n\t\twhile (added < duration) {\r\n\t\t\tvar dayStart = this.$gantt.date.day_start(new Date(start));\r\n\r\n\t\t\tvar iterateFromDayEnd = false;\r\n\t\t\tif(start.valueOf() === dayStart.valueOf()){\r\n\t\t\t\tdayStart = this.$gantt.date.add(dayStart, -1, \"day\");\r\n\t\t\t\titerateFromDayEnd = true;\r\n\t\t\t}\r\n\t\t\t//var dayStartTimestamp = this.$gantt.date.day_start(new Date(start)).valueOf();\r\n\t\t\tvar dayEnd = new Date(dayStart.getFullYear(), dayStart.getMonth(), dayStart.getDate(), 23, 59,59,999).valueOf();\r\n\r\n\t\t\tif(dayEnd !== calculatedDay){\r\n\t\t\t\tdaySchedule = this._getWorkHours(dayStart);\r\n\t\t\t\tminutesInDay = this._getMinutesPerDay(dayStart);\r\n\t\t\t\tcalculatedDay = dayEnd;\r\n\t\t\t}\r\n\r\n\t\t\tvar left = duration - added;\r\n\t\t\tvar timestamp = this._getTimeOfDayStamp(start, iterateFromDayEnd);\r\n\r\n\t\t\tif(!daySchedule.length || !minutesInDay){\r\n\t\t\t\tstart = this.$gantt.date.add(start, -1, \"day\");\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(daySchedule[daySchedule.length - 1].end <= timestamp){\r\n\t\t\t\tif(left > minutesInDay){\r\n\t\t\t\t\tadded += minutesInDay;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, -1, \"day\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar isWorkHour = false;\r\n\t\t\tvar workInterval = null;\r\n\t\t\tvar prevInterval = null;\r\n\t\t\tfor(var i = daySchedule.length - 1; i >= 0; i--){\r\n\t\t\t\tif(daySchedule[i].start < timestamp - 1 && daySchedule[i].end >= timestamp - 1){\r\n\t\t\t\t\tisWorkHour = true;\r\n\t\t\t\t\tworkInterval = daySchedule[i];\r\n\t\t\t\t\tprevInterval = daySchedule[i-1];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(isWorkHour){\r\n\r\n\t\t\t\t// we're at the end of worktime interval and subtracting more than the duration of the interval\r\n\t\t\t\t// -> subtract the duration of the interval and move to the start of the interval (we're moving from end)\r\n\t\t\t\tif(timestamp === workInterval.end && left >= workInterval.durationMinutes){\r\n\t\t\t\t\tadded += workInterval.durationMinutes;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, -workInterval.durationMinutes, \"minute\");\r\n\t\t\t\t} // worktime is set in whole hours (no intervals like 9:15-10:00)\r\n\t\t\t\t// the amount we need to subtract lies inside the interval\r\n\t\t\t\telse if(!minutePrecision && left <= (timestamp/60 - workInterval.startMinute)){\r\n\t\t\t\t\tadded += left;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, -left, \"minute\");\r\n\t\t\t\t}else if (minutePrecision){\r\n\t\t\t\t\t// GS-2129. If the working time is set in minutes, we accumulate the working time in minutes from right to left\r\n\t\t\t\t\t\r\n\t\t\t\t\t// duration we need to subtract lies completely inside the work interval\r\n\t\t\t\t\tif(left <= (timestamp/60 - workInterval.startMinute)){\r\n\t\t\t\t\t\tadded += left;\r\n\t\t\t\t\t\tstart = this.$gantt.date.add(start, -left, \"minute\");\r\n\t\t\t\t\t}else {\r\n\t\t\t\t\t\t// we need to go trough multiple work intervals to subtract needed time\r\n\t\t\t\t\t\tadded += (timestamp/60 - workInterval.startMinute);\r\n\t\t\t\t\t\tif(prevInterval){\r\n\t\t\t\t\t\t\tstart = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, prevInterval.end);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvar minutesInHour = this._getMinutesPerHour(start);\r\n\t\t\t\t\tif(minutesInHour <= left){\r\n\t\t\t\t\t\tadded += minutesInHour;\r\n\t\t\t\t\t\tstart = this._nextDate(start, \"hour\", step);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\taddedInterval = this._subtractMinutesUntilHourStart(start, left);\r\n\t\t\t\t\t\tadded += addedInterval.added;\r\n\t\t\t\t\t\tstart = addedInterval.end;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(start.getHours() === 0 && start.getMinutes() === 0 && start.getSeconds() === 0){\r\n\t\t\t\t\tvar prev = this._getClosestWorkTimePast(start, \"hour\");\r\n\t\t\t\t\tif(prev.valueOf() === start.valueOf()){\r\n\t\t\t\t\t\tvar prev = this.$gantt.date.add(start, -1, \"day\");\r\n\t\t\t\t\t\tvar times = this._getWorkHours(prev);\r\n\t\t\t\t\t\tif(times.length){\r\n\t\t\t\t\t\t\tvar lastInterval = times[times.length - 1];\r\n\t\t\t\t\t\t\tprev.setSeconds(lastInterval.durationSeconds);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstart = prev;\r\n\r\n\t\t\t\t} else{\r\n\t\t\t\t\tstart = this._getClosestWorkTimePast(new Date(start - 1), \"hour\");\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (added < duration) {\r\n\t\t\tvar durationLeft = duration - added;\r\n\t\t\taddedInterval = this._subtractMinutesUntilHourStart(start, durationLeft);\r\n\t\t\tadded += addedInterval.added;\r\n\t\t\tstart = addedInterval.end;\r\n\t\t}\r\n\r\n\t\treturn start;\r\n\t},\r\n\t_calculateMinuteEndDate: function (from, duration, step) {\r\n\t\tvar start = new Date(from),\r\n\t\t\tadded = 0;\r\n\t\tstep = step || 1;\r\n\t\tduration = Math.abs(duration * 1);\r\n\t\tduration = Math.round(duration);\r\n\r\n\t\tvar addedInterval = this._addMinutesUntilHourEnd(start, duration);\r\n\t\tadded += addedInterval.added;\r\n\r\n\t\tstart = addedInterval.end;\r\n\r\n\t\tvar calculatedDay = 0;\r\n\t\tvar daySchedule = [];\r\n\t\tvar minutesInDay = 0;\r\n\r\n\t\tvar minutePrecision = this._isMinutePrecision(start);\r\n\r\n\t\twhile (added < duration) {\r\n\t\t\tvar dayStart = this.$gantt.date.day_start(new Date(start)).valueOf();\r\n\t\t\tif(dayStart !== calculatedDay){\r\n\t\t\t\tdaySchedule = this._getWorkHours(start);\r\n\t\t\t\tminutesInDay = this._getMinutesPerDay(start);\r\n\t\t\t\tcalculatedDay = dayStart;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar left = duration - added;\r\n\t\t\tvar timestamp = this._getTimeOfDayStamp(start);\r\n\r\n\t\t\tif(!daySchedule.length || !minutesInDay){\r\n\t\t\t\tstart = this.$gantt.date.add(this.$gantt.date.day_start(start), 1, \"day\");\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(daySchedule[0].start >= timestamp){\r\n\t\t\t\tif(left >= minutesInDay){\r\n\t\t\t\t\tadded += minutesInDay;\r\n\t\t\t\t\tif (left == minutesInDay) {\r\n\t\t\t\t\t\tstart = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, daySchedule[daySchedule.length - 1].end);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tstart = this.$gantt.date.add(start, 1, \"day\");\r\n\t\t\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar isWorkHour = false;\r\n\t\t\tvar workInterval = null;\r\n\t\t\tfor(var i = 0; i < daySchedule.length; i++){\r\n\t\t\t\tif(daySchedule[i].start <= timestamp && daySchedule[i].end > timestamp){\r\n\t\t\t\t\tisWorkHour = true;\r\n\t\t\t\t\tworkInterval = daySchedule[i];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(isWorkHour){\r\n\r\n\t\t\t\tif(timestamp === workInterval.start && left >= workInterval.durationMinutes){\r\n\t\t\t\t\tadded += workInterval.durationMinutes;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, workInterval.durationMinutes, \"minute\");\r\n\t\t\t\t}else if(left <= (workInterval.endMinute - timestamp/60)){\r\n\t\t\t\t\tadded += left;\r\n\t\t\t\t\tstart = this.$gantt.date.add(start, left, \"minute\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvar minutesInHour = this._getMinutesPerHour(start);\r\n\t\t\t\t\tif(minutesInHour <= left){\r\n\t\t\t\t\t\tadded += minutesInHour;\r\n\t\t\t\t\t\t// when the working time settings are set in minutes move to the next minutes\r\n\t\t\t\t\t\tif (minutePrecision) {\r\n\t\t\t\t\t\t\tstart = this.$gantt.date.add(start, minutesInHour, \"minute\");\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstart = this._nextDate(start, \"hour\", step);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\taddedInterval = this._addMinutesUntilHourEnd(start, left);\r\n\t\t\t\t\t\tadded += addedInterval.added;\r\n\t\t\t\t\t\tstart = addedInterval.end;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tstart = this._getClosestWorkTimeFuture(start, \"hour\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (added < duration) {\r\n\t\t\tvar durationLeft = duration - added;\r\n\t\t\taddedInterval = this._addMinutesUntilHourEnd(start, durationLeft);\r\n\t\t\tadded += addedInterval.added;\r\n\t\t\tstart = addedInterval.end;\r\n\t\t}\r\n\r\n\t\treturn start;\r\n\t},\r\n\r\n\tgetClosestWorkTime: function () {\r\n\t\tvar settings = this.argumentsHelper.getClosestWorkTimeArguments.apply( this.argumentsHelper, arguments);\r\n\t\treturn this._getClosestWorkTime(settings.date, settings.unit, settings.dir);\r\n\t},\r\n\r\n\t_getClosestWorkTime: function (inputDate, unit, direction) {\r\n\t\tvar result = new Date(inputDate);\r\n\r\n\t\tif (this._isWorkTime(result, unit)) {\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tresult = this.$gantt.date[unit + '_start'](result);\r\n\r\n\t\tif (direction == 'any' || !direction) {\r\n\t\t\tvar closestFuture = this._getClosestWorkTimeFuture(result, unit);\r\n\t\t\tvar closestPast = this._getClosestWorkTimePast(result, unit);\r\n\t\t\tif (Math.abs(closestFuture - inputDate) <= Math.abs(inputDate - closestPast)) {\r\n\t\t\t\tresult = closestFuture;\r\n\t\t\t} else {\r\n\t\t\t\tresult = closestPast;\r\n\t\t\t}\r\n\t\t} else if (direction == \"past\") {\r\n\t\t\tresult = this._getClosestWorkTimePast(result, unit);\r\n\t\t} else {\r\n\t\t\tresult = this._getClosestWorkTimeFuture(result, unit);\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t_getClosestWorkTimeFuture: function (date, unit) {\r\n\t\treturn this._getClosestWorkTimeGeneric(date, unit, 1);\r\n\t},\r\n\r\n\t_getClosestWorkTimePast: function (date, unit) {\r\n\t\tvar result = this._getClosestWorkTimeGeneric(date, unit, -1);\r\n\t\t// should return the end of the closest work interval\r\n\t\treturn this.$gantt.date.add(result, 1, unit);\r\n\t},\r\n\r\n\t_findClosestTimeInDay: function(date, direction, worktimes) {\r\n\t\tvar start = new Date(date);\r\n\t\tvar resultDate = null;\r\n\t\tvar fromDayEnd = false;\r\n\t\tif(!this._getWorkHours(start).length){\r\n\t\t\tstart = this._getClosestWorkTime(start, \"day\", direction < 0 ? \"past\" : \"future\");\r\n\t\t\tif(direction < 0){\r\n\t\t\t\tstart = new Date(start.valueOf() - 1);\r\n\t\t\t\tfromDayEnd = true;\r\n\t\t\t}\r\n\t\t\tworktimes = this._getWorkHours(start);\r\n\t\t}\r\n\r\n\t\tvar value = this._getTimeOfDayStamp(start);\r\n\t\tif(fromDayEnd){\r\n\t\t\tvalue = this._getTimeOfDayStamp(new Date(start.valueOf() + 1), fromDayEnd);\r\n\t\t}\r\n\t\tif(direction > 0){\r\n\t\t\tfor(var i = 0; i < worktimes.length; i++){\r\n\t\t\t\tif(worktimes[i].start >= value){\r\n\t\t\t\t\tresultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, worktimes[i].start);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(var i = worktimes.length - 1; i >= 0; i--){\r\n\t\t\t\tif(worktimes[i].end <= value){\r\n\t\t\t\t\tresultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, worktimes[i].end);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}else if(worktimes[i].end > value && worktimes[i].start <= value) {\r\n\t\t\t\t\tresultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, value);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn resultDate;\r\n\t},\r\n\t_getClosestWorkMinute: function(date, unit, direction) {\r\n\t\tvar start = new Date(date);\r\n\t\tvar worktimes = this._getWorkHours(start);\r\n\t\tvar resultDate = this._findClosestTimeInDay(start, direction, worktimes);\r\n\t\tif(!resultDate){\r\n\t\t\tstart = this.calculateEndDate(start, direction, \"day\");\r\n\t\t\tif(direction > 0){\r\n\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.$gantt.date.day_start(start);\r\n\t\t\t\tstart = this.$gantt.date.add(start, 1, \"day\");\r\n\t\t\t\tstart = new Date(start.valueOf() - 1);\r\n\t\t\t}\r\n\t\t\tworktimes = this._getWorkHours(start);\r\n\t\t\tresultDate = this._findClosestTimeInDay(start, direction, worktimes);\r\n\t\t}\r\n\t\tif(direction < 0){\r\n\t\t\t// getClosestWorkTimePast adds one time unit to the result date after this\r\n\t\t\tresultDate = this.$gantt.date.add(resultDate, -1, unit);\r\n\t\t}\r\n\t\treturn resultDate;\r\n\t},\r\n\r\n\t_getClosestWorkTimeGeneric: function (date, unit, increment) {\r\n\t\tif(unit === \"hour\" || unit === \"minute\"){\r\n\t\t\treturn this._getClosestWorkMinute(date, unit, increment);\r\n\t\t}\r\n\r\n\t\tvar unitOrder = this._getUnitOrder(unit),\r\n\t\t\tbiggerTimeUnit = this.units[unitOrder - 1];\r\n\r\n\t\tvar result = date;\r\n\r\n\t\t// be extra sure we won't fall into infinite loop, 3k seems big enough\r\n\t\tvar maximumLoop = 3000,\r\n\t\t\tcount = 0;\r\n\r\n\t\twhile (!this._isWorkTime(result, unit)) {\r\n\t\t\tif (biggerTimeUnit && !this._isWorkTime(result, biggerTimeUnit)) {\r\n\t\t\t\t// if we look for closest work hour and detect a week-end - first find the closest work day,\r\n\t\t\t\t// and continue iterations after that\r\n\t\t\t\tif (increment > 0) {\r\n\t\t\t\t\tresult = this._getClosestWorkTimeFuture(result, biggerTimeUnit);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult = this._getClosestWorkTimePast(result, biggerTimeUnit);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._isWorkTime(result, unit)) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcount++;\r\n\t\t\tif (count > maximumLoop) {\r\n\t\t\t\tthis.$gantt.assert(false, \"Invalid working time check\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tvar tzOffset = result.getTimezoneOffset();\r\n\t\t\tresult = this.$gantt.date.add(result, increment, unit);\r\n\r\n\t\t\tresult = this.$gantt._correct_dst_change(result, tzOffset, increment, unit);\r\n\t\t\tif (this.$gantt.date[unit + '_start']) {\r\n\t\t\t\tresult = this.$gantt.date[unit + '_start'](result);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * Check whether this calendar has working time. Calendar has working time only if there are regular working days of week\r\n\t *\r\n\t */\r\n\thasWorkTime: function () {\r\n\t\tvar worktime = this.getConfig();\r\n\t\tvar dates = worktime.dates;\r\n\r\n\t\tvar daysOfWeek = [0, 1, 2, 3, 4, 5, 6];\r\n\t\tvar exceptions = [];\r\n\t\tfor(var i in worktime.dates){\r\n\t\t\tif(Number(i) > 6){\r\n\t\t\t\texceptions.push(Number(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar hasRegularHours = this._checkWorkHours(worktime.hours);\r\n\r\n\t\tvar result = false;\r\n\t\tdaysOfWeek.forEach((function(day){\r\n\t\t\tif(result){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar dayConfig = dates[day];\r\n\t\t\tif(dayConfig === true){\r\n\t\t\t\t// workday uses global hours\r\n\t\t\t\tresult = hasRegularHours;\r\n\t\t\t}else if(Array.isArray(dayConfig)){\r\n\t\t\t\t// workday uses custom hours\r\n\t\t\t\tresult = this._checkWorkHours(dayConfig);\r\n\t\t\t}\r\n\t\t}).bind(this));\r\n\r\n\t\treturn result;\r\n\r\n\t},\r\n\r\n\t_checkWorkHours: function(hoursArray) {\r\n\t\tif (hoursArray.length === 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tvar result = false;\r\n\t\tfor (var i = 0; i < hoursArray.length; i += 2) {\r\n\t\t\tif (hoursArray[i] !== hoursArray[i + 1]) {\r\n\t\t\t\tresult = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\r\n\t_isMinutePrecision: function (date) {\r\n\t\tlet minutePrecision = false;\r\n\t\tthis._getWorkHours(date).forEach(function(interval){\r\n\t\t\tif (interval.startMinute % 60 || interval.endMinute % 60){\r\n\t\t\t\tminutePrecision = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn minutePrecision;\r\n\t}\r\n};\r\n\r\nexport default CalendarWorkTimeStrategy;","import { IWorkUnitCache } from \"./workunit_cache_interface\";\r\nimport { WorkUnitsMapCache } from \"./workunit_map_cache\";\r\nimport { WorkUnitsObjectCache } from \"./workunit_object_cache\";\r\nexport { LargerUnitsCache } from \"./larger_units_helper\";\r\n\r\nexport function createCacheObject(): IWorkUnitCache {\r\n\r\n\t// worktime hash is on the hot path,\r\n\t// Map seems to work faster than plain array, use it whenever possible\r\n\tif (typeof Map !== \"undefined\") {\r\n\t\treturn new WorkUnitsMapCache();\r\n\t} else {\r\n\t\treturn new WorkUnitsObjectCache();\r\n\t}\r\n}\r\n","export default {\r\n\tisLegacyResourceCalendarFormat: function(resourceCalendarsProperty){\r\n\t\t// modern format:\r\n\t\t//gantt.config.resource_calendars = {\r\n\t\t//\tresourceId: calendarId,\r\n\t\t//\tresourceId: calendarId,\r\n\t\t//\tresourceId: calendarId\r\n\t\t//\t};\r\n\t\t\r\n\t\t// legacy format:\r\n\t\t// gantt.config.resource_calendars = {\r\n\t\t//\t\"resourceProperty\": {\r\n\t\t//\t\tresourceId: calendarId,\r\n\t\t//\t\tresourceId: calendarId,\r\n\t\t//\t\tresourceId: calendarId\r\n\t\t//\t\t}\r\n\t\t//\t};\r\n\r\n\t\tif(!resourceCalendarsProperty){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor(var i in resourceCalendarsProperty){\r\n\t\t\tif(resourceCalendarsProperty[i] && typeof resourceCalendarsProperty[i] === \"object\"){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\tgetResourceProperty: function(config){\r\n\t\tvar resourceCalendarsConfig = config.resource_calendars;\r\n\t\tvar propertyName = config.resource_property;\r\n\t\tif(this.isLegacyResourceCalendarFormat(resourceCalendarsConfig)){\r\n\t\t\tfor(var i in config){\r\n\t\t\t\tpropertyName = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn propertyName;\r\n\t},\r\n\tgetCalendarIdFromLegacyConfig: function(task, config){\r\n\t\tif (config) {\r\n\t\t\tfor (var field in config) {\r\n\t\t\t\tvar resource = config[field];\r\n\t\t\t\tif (task[field]) {\r\n\t\t\t\t\tvar calendarId = resource[task[field]];\r\n\t\t\t\t\tif (calendarId) {\r\n\t\t\t\t\t\treturn calendarId;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n};","import * as utils from \"../../utils/utils\";\r\nimport createArgumentsHelper from \"./calendar_arguments_helper\";\r\nimport CalendarMergeHelper from \"./strategy/work_calendar_merger\";\r\nimport CalendarWorkTimeStrategy from \"./strategy/calendar_strategy\";\r\nimport legacyResourceCalendarConfig from \"./legacy_resource_config\";\r\nimport dynamicResourceCalendarsFactory from \"./dynamic_resource_calendars\";\r\n\r\nconst dynamicResourceCalendars = dynamicResourceCalendarsFactory();\r\n\r\nfunction CalendarManager (gantt){\r\n\tthis.$gantt = gantt;\r\n\tthis._calendars = {};\r\n\tthis._legacyConfig = undefined;\r\n\tthis.$gantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(this.$gantt.config.resource_calendars){\r\n\t\t\tthis._isLegacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(this.$gantt.config.resource_calendars);\r\n\t\t}\r\n\t}.bind(this));\r\n\r\n\tthis.$gantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tthis.createDefaultCalendars();\r\n\t}.bind(this));\r\n\tthis.$gantt.attachEvent(\"onBeforeGanttRender\", function(){\r\n\t\tthis.createDefaultCalendars();\r\n\t}.bind(this));\r\n}\r\n\r\nCalendarManager.prototype = {\r\n\t_calendars: {},\r\n\t_convertWorkTimeSettings: function (settings) {\r\n\t\tvar days = settings.days;\r\n\t\tif (days && !settings.dates) {\r\n\t\t\tsettings.dates = settings.dates || {};\r\n\t\t\tfor (var i = 0; i < days.length; i++) {\r\n\t\t\t\tsettings.dates[i] = days[i];\r\n\t\t\t\tif (!(days[i] instanceof Array)) {\r\n\t\t\t\t\tsettings.dates[i] = !!days[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tdelete settings.days;\r\n\t\treturn settings;\r\n\t},\r\n\tmergeCalendars: function(){\r\n\t\tvar calendars = [];\r\n\t\tvar args = arguments;\r\n\t\tif(Array.isArray(args[0])){\r\n\t\t\tcalendars = args[0].slice();\r\n\t\t}else{\r\n\t\t\tfor(var i = 0; i < arguments.length; i++){\r\n\t\t\t\tcalendars.push(arguments[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar mergeHelper = new CalendarMergeHelper();\r\n\r\n\t\tvar result;\r\n\t\tcalendars.forEach(function(calendar){\r\n\t\t\tif(!result){\r\n\t\t\t\tresult = calendar;\r\n\t\t\t} else{\r\n\t\t\t\tresult = this._createCalendarFromConfig(mergeHelper.merge(result, calendar));\r\n\t\t\t}\r\n\r\n\t\t}.bind(this));\r\n\t\treturn this.createCalendar(result);\r\n\t},\r\n\r\n\t_createCalendarFromConfig: function(config){\r\n\t\tvar apiCore = new CalendarWorkTimeStrategy(this.$gantt, createArgumentsHelper(this.$gantt));\r\n\t\tapiCore.id = String(utils.uid());\r\n\r\n\t\tvar preparedConfig = this._convertWorkTimeSettings(config);\r\n\t\tif(preparedConfig.customWeeks){\r\n\t\t\tfor(var i in preparedConfig.customWeeks){\r\n\t\t\t\tpreparedConfig.customWeeks[i] = this._convertWorkTimeSettings(preparedConfig.customWeeks[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tapiCore._setConfig(preparedConfig);\r\n\r\n\t\treturn apiCore;\r\n\t},\r\n\r\n\tcreateCalendar: function (parentCalendar) {\r\n\t\tvar settings;\r\n\r\n\t\tif (!parentCalendar) {\r\n\t\t\tparentCalendar = {};\r\n\t\t}\r\n\r\n\t\tif (parentCalendar.getConfig){\r\n\t\t\tsettings = utils.copy(parentCalendar.getConfig());\r\n\t\t} else if (parentCalendar.worktime) {\r\n\t\t\tsettings = utils.copy(parentCalendar.worktime);\r\n\t\t} else {\r\n\t\t\tsettings = utils.copy(parentCalendar);\r\n\t\t}\r\n\r\n\t\tvar defaults = utils.copy(this.defaults.fulltime.worktime);\r\n\t\tutils.mixin(settings, defaults);\r\n\r\n\t\treturn this._createCalendarFromConfig(settings);\r\n\t},\r\n\r\n\tgetCalendar: function (id) {\r\n\t\tid = id || \"global\";\r\n\t\tvar calendar = this._calendars[id];\r\n\t\tif(!calendar){\r\n\t\t\tthis.createDefaultCalendars();\r\n\t\t\tcalendar = this._calendars[id];\r\n\t\t}\r\n\r\n\t\treturn calendar;\r\n\t},\r\n\r\n\tgetCalendars: function () {\r\n\t\tvar res = [];\r\n\t\tfor (var i in this._calendars) {\r\n\t\t\tres.push(this.getCalendar(i));\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_getOwnCalendar: function(task){\r\n\t\tvar config = this.$gantt.config;\r\n\t\tif (task[config.calendar_property]) {\r\n\t\t\treturn this.getCalendar(task[config.calendar_property]);\r\n\t\t}\r\n\r\n\t\tif (config.resource_calendars) {\r\n\t\t\tvar calendar;\r\n\t\t\tvar calendarId;\r\n\t\t\tvar resourceProperty;\r\n\t\t\tif(this._legacyConfig === false){\r\n\t\t\t\tresourceProperty = config.resource_property;\r\n\t\t\t}else{\r\n\t\t\t\tresourceProperty = legacyResourceCalendarConfig.getResourceProperty(config);\r\n\t\t\t}\r\n\t\t\tif(Array.isArray(task[resourceProperty])){\r\n\t\t\t\t// if multiple resources are attached to the task - merge their calendars\r\n\t\t\t\tif(config.dynamic_resource_calendars){\r\n\t\t\t\t\tcalendarId = dynamicResourceCalendars.getCalendarIdFromMultipleResources(task[resourceProperty], this);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this._legacyConfig === undefined){\r\n\t\t\t\t\tthis._legacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(config.resource_calendars);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this._legacyConfig){\r\n\t\t\t\t\tvar calendarId = legacyResourceCalendarConfig.getCalendarIdFromLegacyConfig(task, config.resource_calendars);\r\n\t\t\t\t}else if(resourceProperty && task[resourceProperty] && config.resource_calendars[task[resourceProperty]]){\r\n\t\t\t\t\tvar calendar = this.getResourceCalendar(task[resourceProperty]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(calendarId){\r\n\t\t\t\tcalendar = this.getCalendar(calendarId);\r\n\t\t\t}\r\n\r\n\t\t\tif(calendar){\r\n\t\t\t\treturn calendar;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns calendar assigned to the specified resource.\r\n\t * Returns the global calendar if no custom calendar is associated with the resource.\r\n\t * @param {(string|number|Object)} resource - resource object or resource id\r\n\t * @returns {object} Calendar object\r\n\t */\r\n\tgetResourceCalendar: function(resource) {\r\n\t\tif (resource === null || resource === undefined) {\r\n\t\t\treturn this.getCalendar();\r\n\t\t}\r\n\r\n\t\tvar resourceId = null;\r\n\t\t// if task id is provided\r\n\t\tif((typeof resource === \"number\" || typeof resource === \"string\")){\r\n\t\t\tresourceId = resource;\r\n\t\t}else{\r\n\t\t\tresourceId = resource.id || resource.key;\r\n\t\t}\r\n\r\n\t\tvar config = this.$gantt.config;\r\n\t\tvar calendarsConfig = config.resource_calendars;\r\n\t\tvar calendarId = null;\r\n\t\tif (calendarsConfig) {\r\n\t\t\tif(this._legacyConfig === undefined){\r\n\t\t\t\tthis._legacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(config.resource_calendars);\r\n\t\t\t}\r\n\r\n\t\t\tif(this._legacyConfig){\r\n\t\t\t\tfor(var field in calendarsConfig){\r\n\t\t\t\t\tif(calendarsConfig[field][resourceId]){\r\n\t\t\t\t\t\tcalendarId = calendarsConfig[field][resourceId];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar calendarId = calendarsConfig[resourceId];\r\n\t\t\t}\r\n\r\n\t\t\tif(calendarId){\r\n\t\t\t\treturn this.getCalendar(calendarId);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn this.getCalendar();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the calendar assigned to a task.\r\n\t * - Returns a calendar assigned via task[gantt.config.calendar_property] if specified.\r\n\t * - Returns a calendar assigned to the task resource if specified.\r\n\t * - Returns the global calendar otherwise.\r\n\t * @param {(string|number|Object)} task - task object or task id\r\n\t * @returns {object} Calendar object\r\n\t */\r\n\tgetTaskCalendar: function (task) {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar taskObject;\r\n\t\tif (task === null || task === undefined) {\r\n\t\t\treturn this.getCalendar();\r\n\t\t}\r\n\r\n\t\t// if task id is provided\r\n\t\tif((typeof task === \"number\" || typeof task === \"string\") && gantt.isTaskExists(task)){\r\n\t\t\ttaskObject = gantt.getTask(task);\r\n\t\t}else{\r\n\t\t\ttaskObject = task;\r\n\t\t}\r\n\r\n\t\tif(!taskObject){\r\n\t\t\treturn this.getCalendar();\r\n\t\t}\r\n\r\n\t\tvar calendar = this._getOwnCalendar(taskObject);\r\n\t\tvar groupMode = !!gantt.getState().group_mode;\r\n\r\n\t\tif (!calendar && gantt.config.inherit_calendar && gantt.isTaskExists(taskObject.parent)){\r\n\t\t\t// GS-1579 group mode overrides tree hierarchy, iterate using `.parent` property, instead of using eachParent iterator\r\n\t\t\tvar currentTask = taskObject;\r\n\t\t\twhile(gantt.isTaskExists(currentTask.parent)){\r\n\t\t\t\tcurrentTask = gantt.getTask(currentTask.parent);\r\n\t\t\t\tif(gantt.isSummaryTask(currentTask)){\r\n\t\t\t\t\tcalendar = this._getOwnCalendar(currentTask);\r\n\t\t\t\t\tif(calendar){\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(groupMode && !calendar){\r\n\t\t\t\t// if group mode and inherit_calendars is enabled - preserve previously applied parent calendar\r\n\t\t\t\t// we may need it when groupBy parses grouped data, old parent may be not loaded yet\r\n\t\t\t\tif(task.$effective_calendar){\r\n\t\t\t\t\tcalendar = this.getCalendar(task.$effective_calendar);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn calendar || this.getCalendar();\r\n\t},\r\n\r\n\taddCalendar: function(calendar) { // puts new calendar to Global Storage - gantt.calendarManager._calendars {}\r\n\t\tif (!(this.isCalendar(calendar))) {\r\n\t\t\tvar id = calendar.id;\r\n\t\t\tcalendar = this.createCalendar(calendar);\r\n\t\t\tcalendar.id = id;\r\n\t\t}\r\n\r\n\t\t// validate/check if empty calendar\r\n\t\tif (!calendar._tryChangeCalendarSettings(function () {\r\n\t\t\t})) {\r\n\r\n\t\t\tthis.$gantt.callEvent(\"onCalendarError\", [{message: \"Invalid calendar settings, no worktime available\"}, calendar]);\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\tvar config = this.$gantt.config;\r\n\r\n\t\t\tcalendar.id = calendar.id || utils.uid();\r\n\t\t\tthis._calendars[calendar.id] = calendar;\r\n\t\t\tif (!config.worktimes)\r\n\t\t\t\tconfig.worktimes = {};\r\n\t\t\tconfig.worktimes[calendar.id] = calendar.getConfig();\r\n\t\t\treturn calendar.id;\r\n\t\t}\r\n\t},\r\n\r\n\tdeleteCalendar: function (calendar) {\r\n\t\tvar config = this.$gantt.config;\r\n\t\tif (!calendar) return false;\r\n\t\tif (this._calendars[calendar]) {\r\n\t\t\tdelete this._calendars[calendar];\r\n\t\t\tif (config.worktimes && config.worktimes[calendar])\r\n\t\t\t\tdelete config.worktimes[calendar];\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n\r\n\trestoreConfigCalendars: function (configs) {\r\n\t\tfor (var i in configs) {\r\n\t\t\tif (this._calendars[i])\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tvar settings = configs[i];\r\n\t\t\tvar calendar = this.createCalendar(settings);\r\n\t\t\tcalendar.id = i;\r\n\t\t\tthis.addCalendar(calendar);\r\n\t\t}\r\n\t},\r\n\r\n\tdefaults: {\r\n\t\tglobal: {\r\n\t\t\tid: \"global\",\r\n\t\t\tworktime: {\r\n\t\t\t\thours: [8, 12, 13, 17],\r\n\t\t\t\tdays: [0, 1, 1, 1, 1, 1, 0]\r\n\t\t\t}\r\n\t\t},\r\n\t\tfulltime: {\r\n\t\t\tid: \"fulltime\",\r\n\t\t\tworktime: {\r\n\t\t\t\thours: [0, 24],\r\n\t\t\t\tdays: [1, 1, 1, 1, 1, 1, 1]\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcreateDefaultCalendars: function () {\r\n\t\tvar config = this.$gantt.config;\r\n\t\tthis.restoreConfigCalendars(this.defaults);\r\n\t\tthis.restoreConfigCalendars(config.worktimes);\r\n\t},\r\n\r\n\tisCalendar: function(possibleCalendar) {\r\n\t\t// because we don't have any way to check without dependency to CalendarWorkTimeStrategy\r\n\t\tvar props = [\r\n\t\t\tpossibleCalendar.isWorkTime,\r\n\t\t\tpossibleCalendar.setWorkTime,\r\n\t\t\tpossibleCalendar.getWorkHours,\r\n\t\t\tpossibleCalendar.unsetWorkTime,\r\n\t\t\tpossibleCalendar.getClosestWorkTime,\r\n\t\t\tpossibleCalendar.calculateDuration,\r\n\t\t\tpossibleCalendar.hasDuration,\r\n\t\t\tpossibleCalendar.calculateEndDate\r\n\t\t];\r\n\t\treturn props.every(function(entry) {\r\n\t\t\treturn entry instanceof Function;\r\n\t\t});\r\n\t}\r\n};\r\n\r\nexport default CalendarManager;","export default function() {\r\n\tfunction getResourcesCalendarKey(resourceAssignments){\r\n\t\treturn resourceAssignments.map(function(res){\r\n\t\t\tif(res && res.resource_id){\r\n\t\t\t\treturn res.resource_id;\r\n\t\t\t} else {\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t}).sort().join(\"-\");\r\n\t}\r\n\r\n\tvar dynamicCalendars = {};\r\n\r\n\tfunction mergeResourceCalendars(resourceAssignments, manager){\r\n\t\treturn manager.mergeCalendars(resourceAssignments.map(function(assignment){\r\n\t\t\tvar resourceId = (assignment && assignment.resource_id) ? assignment.resource_id : assignment;\r\n\t\t\treturn manager.getResourceCalendar(resourceId);\r\n\t\t}));\r\n\t}\r\n\tfunction getCalendarIdFromMultipleResources(resourceAssignments, manager){\r\n\t\tvar key = getResourcesCalendarKey(resourceAssignments);\r\n\t\tif(!resourceAssignments.length){\r\n\t\t\treturn null;\r\n\t\t}else if(resourceAssignments.length === 1){\r\n\t\t\treturn manager.getResourceCalendar(key).id;\r\n\t\t}else if (dynamicCalendars[key]){\r\n\t\t\treturn dynamicCalendars[key].id;\r\n\t\t} else {\r\n\t\t\tvar tempCalendar = mergeResourceCalendars(resourceAssignments, manager);\r\n\r\n\t\t\tdynamicCalendars[key] = tempCalendar;\r\n\t\t\treturn manager.addCalendar(tempCalendar);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetCalendarIdFromMultipleResources: getCalendarIdFromMultipleResources\r\n\t};\r\n};","function CalendarDisabledTimeStrategy(gantt, argumentsHelper){\r\n\tthis.argumentsHelper = argumentsHelper;\r\n\tthis.$gantt = gantt;\r\n}\r\n\r\nCalendarDisabledTimeStrategy.prototype = {\r\n\tgetWorkHours: function () {\r\n\t\treturn [0, 24];\r\n\t},\r\n\tsetWorkTime: function () {\r\n\t\treturn true;\r\n\t},\r\n\tunsetWorkTime: function () {\r\n\t\treturn true;\r\n\t},\r\n\tisWorkTime: function () {\r\n\t\treturn true;\r\n\t},\r\n\tgetClosestWorkTime: function (config) {\r\n\t\tvar config = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\t\treturn config.date;\r\n\t},\r\n\r\n\tcalculateDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\r\n\t\tvar from = config.start_date,\r\n\t\t\tto = config.end_date,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\treturn this._calculateDuration(from, to, unit, step);\r\n\t},\r\n\t_calculateDuration: function (start, end, unit, step) {\r\n\t\tvar dateHelper = this.$gantt.date;\r\n\t\tvar fixedUnits = {\r\n\t\t\t\"week\": 1000 * 60 * 60 * 24 * 7,\r\n\t\t\t\"day\": 1000 * 60 * 60 * 24,\r\n\t\t\t\"hour\": 1000 * 60 * 60,\r\n\t\t\t\"minute\": 1000 * 60\r\n\t\t};\r\n\r\n\t\tvar res = 0;\r\n\t\tif (fixedUnits[unit]) {\r\n\t\t\tres = Math.round((end - start) / (step * fixedUnits[unit]));\r\n\t\t} else {\r\n\t\t\tvar from = new Date(start),\r\n\t\t\t\tto = new Date(end);\r\n\t\t\twhile (from.valueOf() < to.valueOf()) {\r\n\t\t\t\tres += 1;\r\n\t\t\t\tfrom = dateHelper.add(from, step, unit);\r\n\t\t\t}\r\n\r\n\t\t\tif (from.valueOf() != end.valueOf()) {\r\n\t\t\t\tres += (to - from) / (dateHelper.add(from, step, unit) - from);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Math.round(res);\r\n\t},\r\n\r\n\thasDuration: function () {\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\r\n\t\tvar from = config.start_date,\r\n\t\t\tto = config.end_date,\r\n\t\t\tunit = config.unit;\r\n\r\n\t\tif (!unit) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfrom = new Date(from);\r\n\t\tto = new Date(to);\r\n\r\n\t\treturn (from.valueOf() < to.valueOf());\r\n\t},\r\n\r\n\thasWorkTime: function() {\r\n\t\treturn true;\r\n\t},\r\n\r\n\tequals: function(calendar) {\r\n\t\tif(!(calendar instanceof CalendarDisabledTimeStrategy)){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\tcalculateEndDate: function () {\r\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar start = config.start_date,\r\n\t\t\tduration = config.duration,\r\n\t\t\tunit = config.unit,\r\n\t\t\tstep = config.step;\r\n\r\n\t\treturn this.$gantt.date.add(start, step * duration, unit);\r\n\t}\r\n};\r\n\r\nexport default CalendarDisabledTimeStrategy;","import createArgumentsHelper from \"./calendar_arguments_helper\";\r\nimport NoWorkTimeCalendar from \"./strategy/no_work_time\";\r\n\r\nfunction TimeCalculator(calendarManager){\r\n\r\n\tthis.$gantt = calendarManager.$gantt;\r\n\tthis.argumentsHelper = createArgumentsHelper(this.$gantt);\r\n\tthis.calendarManager = calendarManager;\r\n\tthis.$disabledCalendar = new NoWorkTimeCalendar(this.$gantt, this.argumentsHelper);\r\n}\r\n\r\nTimeCalculator.prototype = {\r\n\t_getCalendar: function (config) {\r\n\t\tvar calendar;\r\n\t\tif (!this.$gantt.config.work_time) {\r\n\t\t\tcalendar = this.$disabledCalendar;\r\n\t\t} else {\r\n\t\t\tvar manager = this.calendarManager;\r\n\t\t\tif (config.task) {\r\n\t\t\t\tcalendar = manager.getTaskCalendar(config.task);\r\n\t\t\t} else if (config.id) {\r\n\t\t\t\tcalendar = manager.getTaskCalendar(config);\r\n\t\t\t} else if (config.calendar) {\r\n\t\t\t\tcalendar = config.calendar;\r\n\t\t\t}\r\n\t\t\tif (!calendar) {\r\n\t\t\t\tcalendar = manager.getTaskCalendar();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn calendar;\r\n\t},\r\n\r\n\tgetWorkHours: function (config) {\r\n\t\tconfig = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\r\n\t\treturn calendar.getWorkHours(config.date);\r\n\t},\r\n\r\n\tsetWorkTime: function (config, calendar) {\r\n\t\tconfig = this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tif (!calendar)\r\n\t\t\tcalendar = this.calendarManager.getCalendar(); // Global\r\n\t\treturn calendar.setWorkTime(config);\r\n\t},\r\n\r\n\tunsetWorkTime: function (config, calendar) {\r\n\t\tconfig = this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tif (!calendar)\r\n\t\t\tcalendar = this.calendarManager.getCalendar(); // Global\r\n\t\treturn calendar.unsetWorkTime(config);\r\n\t},\r\n\tisWorkTime: function (date, unit, task, calendar) {\r\n\t\tvar config = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tcalendar = this._getCalendar(config);\r\n\t\treturn calendar.isWorkTime(config);\r\n\t},\r\n\tgetClosestWorkTime: function (config) {\r\n\t\tconfig = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\r\n\t\treturn calendar.getClosestWorkTime(config);\r\n\t},\r\n\r\n\tcalculateDuration: function () { // start_date_date, end_date, task\r\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\t\treturn calendar.calculateDuration(config);\r\n\t},\r\n\thasDuration: function () {\r\n\t\tvar config = this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\r\n\t\treturn calendar.hasDuration(config);\r\n\t},\r\n\tcalculateEndDate: function (config) { // start_date, duration, unit, task\r\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\r\n\r\n\t\tvar calendar = this._getCalendar(config);\r\n\t\treturn calendar.calculateEndDate(config);\r\n\t}\r\n};\r\n\r\nexport default TimeCalculator;\r\n\r\n","// TODO: rework public api for date methods\r\nimport * as utils from \"../../utils/utils\";\r\n\r\nvar createWorkTimeFacade = function(calendarManager, timeCalculator){\r\n\treturn {\r\n\t\tgetWorkHours: function (date) {\r\n\t\t\treturn timeCalculator.getWorkHours(date);\r\n\t\t},\r\n\r\n\t\tsetWorkTime: function (config) {\r\n\t\t\treturn timeCalculator.setWorkTime(config);\r\n\t\t},\r\n\r\n\t\tunsetWorkTime: function (config) {\r\n\t\t\ttimeCalculator.unsetWorkTime(config);\r\n\t\t},\r\n\r\n\t\tisWorkTime: function (date, unit, task) {\r\n\t\t\treturn timeCalculator.isWorkTime(date, unit, task);\r\n\t\t},\r\n\r\n\t\tgetClosestWorkTime: function (config) {\r\n\t\t\treturn timeCalculator.getClosestWorkTime(config);\r\n\t\t},\r\n\r\n\t\tcalculateDuration: function (start_date, end_date, task) {\r\n\t\t\treturn timeCalculator.calculateDuration(start_date, end_date, task);\r\n\t\t},\r\n\t\t_hasDuration: function (start_date, end_date, task) {\r\n\t\t\treturn timeCalculator.hasDuration(start_date, end_date, task);\r\n\t\t},\r\n\r\n\t\tcalculateEndDate: function (start, duration, unit, task) {\r\n\t\t\treturn timeCalculator.calculateEndDate(start, duration, unit, task);\r\n\t\t},\r\n\r\n\t\tmergeCalendars: utils.bind(calendarManager.mergeCalendars, calendarManager),\r\n\t\tcreateCalendar: utils.bind(calendarManager.createCalendar, calendarManager),\r\n\t\taddCalendar: utils.bind(calendarManager.addCalendar, calendarManager),\r\n\t\tgetCalendar: utils.bind(calendarManager.getCalendar, calendarManager),\r\n\t\tgetCalendars: utils.bind(calendarManager.getCalendars, calendarManager),\r\n\t\tgetResourceCalendar: utils.bind(calendarManager.getResourceCalendar, calendarManager),\r\n\t\tgetTaskCalendar: utils.bind(calendarManager.getTaskCalendar, calendarManager),\r\n\t\tdeleteCalendar: utils.bind(calendarManager.deleteCalendar, calendarManager)\r\n\t};\r\n};\r\n\r\n\r\nexport default { create: createWorkTimeFacade };","import * as helpers from \"../utils/helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\tgantt.isUnscheduledTask = function (task) {\r\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task =\"+task+\" of gantt.isUnscheduledTask. Task object was expected\");\r\n\t\treturn (!!task.unscheduled || !task.start_date);\r\n\t};\r\n\r\n\tgantt._isAllowedUnscheduledTask = function (task) {\r\n\t\treturn !!(task.unscheduled && gantt.config.show_unscheduled);\r\n\t};\r\n\r\n\tgantt._isTaskInTimelineLimits = function(task) {\r\n\t\tvar taskStart = task.start_date ? task.start_date.valueOf() : null;\r\n\t\tvar taskEnd = task.end_date ? task.end_date.valueOf() : null;\r\n\t\treturn !!(taskStart && taskEnd && taskStart <= this._max_date.valueOf() && taskEnd >= this._min_date.valueOf());\r\n\t};\r\n\tgantt.isTaskVisible = function (id) {\r\n\t\tif (!this.isTaskExists(id)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar task = this.getTask(id);\r\n\t\tif (!(this._isAllowedUnscheduledTask(task) || this._isTaskInTimelineLimits(task))) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn !!(this.getGlobalTaskIndex(id) >= 0);\r\n\t};\r\n\r\n\tgantt._getProjectEnd = function() {\r\n\t\tif(gantt.config.project_end){\r\n\t\t\treturn gantt.config.project_end;\r\n\t\t}else{\r\n\t\t\tvar tasks = gantt.getTaskByTime();\r\n\t\t\ttasks = tasks.sort(function (a, b) {\r\n\t\t\t\treturn +a.end_date > +b.end_date ? 1 : -1;\r\n\t\t\t});\r\n\t\t\treturn tasks.length ? tasks[tasks.length - 1].end_date : null;\r\n\t\t}\r\n\t};\r\n\tgantt._getProjectStart = function() {\r\n\t\tif (gantt.config.project_start) {\r\n\t\t\treturn gantt.config.project_start;\r\n\t\t}\r\n\r\n\t\t// use timeline start if project start is not specified\r\n\t\tif (gantt.config.start_date) {\r\n\t\t\treturn gantt.config.start_date;\r\n\t\t}\r\n\t\tif (gantt.getState().min_date) {\r\n\t\t\treturn gantt.getState().min_date;\r\n\t\t}\r\n\r\n\t\t// earliest task start if neither project start nor timeline are specified\r\n\t\tvar tasks = gantt.getTaskByTime();\r\n\t\ttasks = tasks.sort(function (a, b) {\r\n\t\t\treturn +a.start_date > +b.start_date ? 1 : -1;\r\n\t\t});\r\n\t\treturn tasks.length ? tasks[0].start_date : null;\r\n\t};\r\n\r\n\tvar getDefaultTaskDate = function (item, parent_id) {\r\n\t\tvar parentExists = parent_id && parent_id != gantt.config.root_id && gantt.isTaskExists(parent_id);\r\n\t\tvar parent = parentExists ? gantt.getTask(parent_id) : false,\r\n\t\t\tstartDate = null;\r\n\t\tif (parent) {\r\n\t\t\tif(gantt.config.schedule_from_end){\r\n\t\t\t\tstartDate = gantt.calculateEndDate({\r\n\t\t\t\t\tstart_date: parent.end_date,\r\n\t\t\t\t\tduration: - gantt.config.duration_step,\r\n\t\t\t\t\ttask:item\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tif(!parent.start_date){\r\n\t\t\t\t\treturn getDefaultTaskDate(parent, gantt.getParent(parent));\r\n\t\t\t\t}\r\n\t\t\t\tstartDate = parent.start_date;\r\n\t\t\t}\r\n\r\n\t\t} else if(gantt.config.schedule_from_end) {\r\n\t\t\tstartDate = gantt.calculateEndDate({\r\n\t\t\t\tstart_date: gantt._getProjectEnd(),\r\n\t\t\t\tduration: - gantt.config.duration_step,\r\n\t\t\t\ttask:item\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tconst first = gantt.getTaskByIndex(0);\r\n\t\t\tconst minDate = gantt.config.start_date || gantt.getState().min_date;\r\n\r\n\t\t\tif (first){\r\n\t\t\t\tif (first.start_date){\r\n\t\t\t\t\tstartDate = first.start_date;\r\n\t\t\t\t}\r\n\t\t\t\telse if (first.end_date){\r\n\t\t\t\t\tstartDate = gantt.calculateEndDate({\r\n\t\t\t\t\t\tstart_date: first.end_date,\r\n\t\t\t\t\t\tduration: -gantt.config.duration_step,\r\n\t\t\t\t\t\ttask:item\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tstartDate = minDate;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tstartDate = minDate;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.assert(startDate, \"Invalid dates\");\r\n\t\treturn new Date(startDate);\r\n\t};\r\n\r\n\tgantt._set_default_task_timing = function (task) {\r\n\t\ttask.start_date = task.start_date || getDefaultTaskDate(task, gantt.getParent(task));\r\n\t\ttask.duration = task.duration || gantt.config.duration_step;\r\n\t\ttask.end_date = task.end_date || gantt.calculateEndDate(task);\r\n\t};\r\n\r\n\tgantt.createTask = function (item, parent, index) {\r\n\t\titem = item || {};\r\n\r\n\t\tif (!gantt.defined(item.id))\r\n\t\t\titem.id = gantt.uid();\r\n\r\n\t\tif (!item.start_date) {\r\n\t\t\titem.start_date = getDefaultTaskDate(item, parent);\r\n\t\t}\r\n\t\tif (item.text === undefined) {\r\n\t\t\titem.text = gantt.locale.labels.new_task;\r\n\t\t}\r\n\t\tif (item.duration === undefined) {\r\n\t\t\titem.duration = 1;\r\n\t\t}\r\n\r\n\t\tif (this.isTaskExists(parent)) {\r\n\t\t\tthis.setParent(item, parent, true);\r\n\t\t\tvar parentObj = this.getTask(parent);\r\n\t\t\tparentObj.$open = true;\r\n\t\t}\r\n\r\n\t\tif (!this.callEvent(\"onTaskCreated\", [item])) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (this.config.details_on_create) {\r\n\t\t\t//GS-761: assert unique ID\r\n\t\t\tif (gantt.isTaskExists(item.id)){\r\n\t\t\t\tvar task = gantt.getTask(item.id);\r\n\t\t\t\tif (task.$index != item.$index) {\r\n\t\t\t\t\t// Someone may try to mistakenly add a task with the same ID, and most likely\r\n\t\t\t\t\t// use the string format for the dates. Gantt shouldn't break in this scenario\r\n\t\t\t\t\tif (item.start_date && typeof item.start_date === \"string\"){\r\n\t\t\t\t\t\titem.start_date = this.date.parseDate(item.start_date, \"parse_date\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.end_date && typeof item.end_date === \"string\"){\r\n\t\t\t\t\t\titem.end_date = this.date.parseDate(item.end_date, \"parse_date\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.$data.tasksStore.updateItem(item.id, item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\titem.$new = true;\r\n\t\t\t\tthis.silent(function(){\r\n\t\t\t\t\tgantt.$data.tasksStore.addItem(item, index);\r\n\t\t\t\t});\t\r\n\t\t\t}\r\n\t\t\tthis.selectTask(item.id);\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.showLightbox(item.id);\r\n\t\t} else {\r\n\t\t\tif (this.addTask(item, parent, index)) {\r\n\t\t\t\tthis.showTask(item.id);\r\n\t\t\t\tthis.selectTask(item.id);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn item.id;\r\n\t};\r\n\r\n\tgantt._update_flags = function (oldid, newid) {\r\n\t\t// TODO: need a proper way to update all possible flags\r\n\t\tvar store = gantt.$data.tasksStore;\r\n\t\tif (oldid === undefined) {\r\n\t\t\tthis._lightbox_id = null;\r\n\r\n\t\t\tstore.silent(function(){\r\n\t\t\t\tstore.unselect();\r\n\t\t\t});\r\n\t\t\t// GS-1522. If we have multiselect, unselect all previously selected tasks\r\n\t\t\tif (this.getSelectedTasks) {\r\n\t\t\t\tthis._multiselect.reset();\r\n\t\t\t}\r\n\r\n\t\t\tif (this._tasks_dnd && this._tasks_dnd.drag) {\r\n\t\t\t\tthis._tasks_dnd.drag.id = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (this._lightbox_id == oldid)\r\n\t\t\t\tthis._lightbox_id = newid;\r\n\r\n\t\t\t// TODO: probably can be removed\r\n\t\t\tif (store.getSelectedId() == oldid) {\r\n\t\t\t\tstore.silent(function(){\r\n\t\t\t\t\tstore.unselect(oldid);\r\n\t\t\t\t\tstore.select(newid);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (this._tasks_dnd && this._tasks_dnd.drag && this._tasks_dnd.drag.id == oldid) {\r\n\t\t\t\tthis._tasks_dnd.drag.id = newid;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvar getTaskTimingMode = function (task, force) {\r\n\t\tvar task_type = gantt.getTaskType(task.type);\r\n\r\n\t\tvar state = {\r\n\t\t\ttype: task_type,\r\n\t\t\t$no_start: false,\r\n\t\t\t$no_end: false,\r\n\t\t\tscheduled_summary: false\r\n\t\t};\r\n\r\n\t\tif(task_type === gantt.config.types.project && task.auto_scheduling === false){\r\n\t\t\tstate.scheduled_summary = true;\r\n\t\t}\r\n\r\n\t\tif (!force && task_type == task.$rendered_type) {\r\n\t\t\tstate.$no_start = task.$no_start;\r\n\t\t\tstate.$no_end = task.$no_end;\r\n\t\t\treturn state;\r\n\t\t}\r\n\r\n\t\tif (task_type == gantt.config.types.project) {\r\n\t\t\t//project duration is always defined by children duration\r\n\t\t\tstate.$no_end = state.$no_start = true;\r\n\t\t} else if (task_type != gantt.config.types.milestone) {\r\n\t\t\t//tasks can have fixed duration, children duration(as projects), or one date fixed, and other defined by nested items\r\n\t\t\tstate.$no_end = !(task.end_date || task.duration);\r\n\t\t\tstate.$no_start = !task.start_date;\r\n\r\n\t\t\tif (gantt._isAllowedUnscheduledTask(task)) {\r\n\t\t\t\tstate.$no_end = state.$no_start = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn state;\r\n\t};\r\n\r\n\tgantt._init_task_timing = function (task) {\r\n\t\tvar task_mode = getTaskTimingMode(task, true);\r\n\r\n\t\tvar dirty = task.$rendered_type != task_mode.type;\r\n\r\n\t\tvar task_type = task_mode.type;\r\n\r\n\t\tif (dirty) {\r\n\t\t\ttask.$no_start = task_mode.$no_start;\r\n\t\t\ttask.$no_end = task_mode.$no_end;\r\n\t\t\ttask.$rendered_type = task_mode.type;\r\n\t\t}\r\n\r\n\t\tif (dirty && task_type != this.config.types.milestone) {\r\n\t\t\tif (task_type == this.config.types.project) {\r\n\t\t\t\t//project duration is always defined by children duration\r\n\t\t\t\tthis._set_default_task_timing(task);\r\n\t\t\t\ttask.$calculate_duration = false;// do not recalculate duration below\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (task_type == this.config.types.milestone) {\r\n\t\t\ttask.end_date = task.start_date;\r\n\t\t}\r\n\t\tif (task.start_date && task.end_date && task.$calculate_duration !== false) {\r\n\t\t\ttask.duration = this.calculateDuration(task);\r\n\t\t}\r\n\r\n\t\tif(!task.$calculate_duration){\r\n\t\t\ttask.$calculate_duration = true;\r\n\t\t}\r\n\r\n\t\tif (!task.end_date) {\r\n\t\t\ttask.end_date = task.start_date;\r\n\t\t}\r\n\r\n\t\ttask.duration = task.duration || 0;\r\n\t\t// GS-1145. We should let tasks to have 0 duration if user wants it\r\n\t\tif (this.config.min_duration === 0 && task.duration === 0){\r\n\t\t\ttask.$no_end = false;\r\n\t\t}\r\n\r\n\t\t// work calendar of task has changed\r\n\t\tvar effectiveCalendar = this.getTaskCalendar(task);\r\n\t\tif(task.$effective_calendar && task.$effective_calendar !== effectiveCalendar.id){\r\n\t\t\tupdateTaskTiming(task);\r\n\t\t\tif(this.config.inherit_calendar && this.isSummaryTask(task)){\r\n\t\t\t\tthis.eachTask(function(child){\r\n\t\t\t\t\tupdateTaskTiming(child);\r\n\t\t\t\t}, task.id);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttask.$effective_calendar = effectiveCalendar.id;\r\n\t};\r\n\r\n\tfunction updateTaskTiming(task) {\r\n\t\ttask.$effective_calendar = gantt.getTaskCalendar(task).id;\r\n\t\ttask.start_date = gantt.getClosestWorkTime({\r\n\t\t\tdir: \"future\",\r\n\t\t\tdate: task.start_date,\r\n\t\t\tunit: gantt.config.duration_unit,\r\n\t\t\ttask: task\r\n\t\t});\r\n\t\ttask.end_date = gantt.calculateEndDate(task);\r\n\t}\r\n\r\n\tgantt.isSummaryTask = function (task) {\r\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task =\"+task+\" of gantt.isSummaryTask. Task object was expected\");\r\n\r\n\t\tvar mode = getTaskTimingMode(task);\r\n\r\n\t\treturn !!(mode.$no_end || mode.$no_start);\r\n\t};\r\n\r\n// downward calculation of project duration\r\n\tgantt.resetProjectDates = function (task) {\r\n\t\tvar taskMode = getTaskTimingMode(task);\r\n\t\tif (taskMode.$no_end || taskMode.$no_start) {\r\n\t\t\tvar info = getSubtaskInfo(task.id);\r\n\t\t\tassignProjectDates.call(this, task, taskMode, info.start_date, info.end_date);\r\n\t\t\ttask.$rollup = info.rollup;\r\n\t\t}\r\n\t};\r\n\r\n\tfunction assignProjectDates(task, taskTiming, from, to) {\r\n\r\n\t\tconst summaryDateFields = {\r\n\t\t\tstart: \"start_date\",\r\n\t\t\tend: \"end_date\"\r\n\t\t};\r\n\t\tconst manuallyScheduledSummaryDateFields = {\r\n\t\t\tstart: \"$auto_start_date\",\r\n\t\t\tend: \"$auto_end_date\"\r\n\t\t};\r\n\r\n\t\tlet dateFields;\r\n\t\tif(task.type === gantt.config.types.project && task.auto_scheduling === false){\r\n\t\t\tdateFields = manuallyScheduledSummaryDateFields;\r\n\t\t}else{\r\n\t\t\tdateFields = summaryDateFields;\r\n\t\t}\r\n\r\n\t\tif (taskTiming.$no_start) {\r\n\t\t\tif (from) {\r\n\t\t\t\ttask[dateFields.start] = new Date(from);\r\n\t\t\t} else {\r\n\t\t\t\ttask[dateFields.start] = getDefaultTaskDate(task, this.getParent(task));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (taskTiming.$no_end) {\r\n\t\t\tif (to) {\r\n\t\t\t\ttask[dateFields.end] = new Date(to);\r\n\t\t\t} else {\r\n\t\t\t\ttask[dateFields.end] = this.calculateEndDate({\r\n\t\t\t\t\tstart_date: task[dateFields.start],\r\n\t\t\t\t\tduration: this.config.duration_step,\r\n\t\t\t\t\ttask: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (taskTiming.$no_start || taskTiming.$no_end) {\r\n\t\t\tthis._init_task_timing(task);\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.getSubtaskDuration = function (taskId) {\r\n\t\tvar res = 0,\r\n\t\t\troot = taskId !== undefined ? taskId : gantt.config.root_id;\r\n\r\n\t\tthis.eachTask(function (child) {\r\n\t\t\tif (this.getTaskType(child.type) == gantt.config.types.project || this.isUnscheduledTask(child))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tres += child.duration;\r\n\t\t}, root);\r\n\r\n\t\treturn res;\r\n\t};\r\n\r\n\tfunction getSubtaskInfo (taskId){\r\n\t\tvar min = null,\r\n\t\t\tmax = null,\r\n\t\t\troot = taskId !== undefined ? taskId : gantt.config.root_id,\r\n\t\t\trollup = [];\r\n\r\n\t\tgantt.eachTask(function (child) {\r\n\t\t\tconst isScheduledSummary = (gantt.getTaskType(child.type) == gantt.config.types.project && (child.auto_scheduling === false));\r\n\t\t\tif ((gantt.getTaskType(child.type) == gantt.config.types.project && !isScheduledSummary) || gantt.isUnscheduledTask(child))\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\t\tif(child.rollup){\r\n\t\t\t\trollup.push(child.id);\r\n\t\t\t}\r\n\r\n\t\t\tif ((child.start_date && (!child.$no_start || isScheduledSummary)) && (!min || min > child.start_date.valueOf()))\r\n\t\t\t\tmin = child.start_date.valueOf();\r\n\t\t\tif ((child.end_date && (!child.$no_end || isScheduledSummary)) && (!max || max < child.end_date.valueOf()))\r\n\t\t\t\tmax = child.end_date.valueOf();\r\n\t\t}, root);\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: min ? new Date(min) : null,\r\n\t\t\tend_date: max ? new Date(max) : null,\r\n\t\t\trollup: rollup\r\n\t\t};\r\n\t}\r\n\r\n\tgantt.getSubtaskDates = function (task_id) {\r\n\t\tvar info = getSubtaskInfo(task_id);\r\n\t\treturn {\r\n\t\t\tstart_date: info.start_date,\r\n\t\t\tend_date: info.end_date\r\n\t\t};\r\n\t};\r\n\r\n\r\n// upward calculation of project duration\r\n\tgantt._update_parents = function (taskId, silent, updateAll) {\r\n\t\tif (!taskId) return;\r\n\r\n\t\tvar task = this.getTask(taskId);\r\n\t\tif(task.rollup){\r\n\t\t\tupdateAll = true;\r\n\t\t}\r\n\t\tvar pid = this.getParent(task);\r\n\r\n\t\tvar taskTiming = getTaskTimingMode(task);\r\n\r\n\t\tvar has_changed = true;\r\n\t\t// GS-761 the dates check is necessary for adding empty tasks: gantt.addTask({id:\"2\"})\r\n\t\tif (updateAll || (task.start_date && task.end_date && (taskTiming.$no_start || taskTiming.$no_end))) {\r\n\r\n\t\t\tconst startDateField = task.$auto_start_date ? \"$auto_start_date\" : \"start_date\";\r\n\t\t\tconst endDateField = task.$auto_end_date ? \"$auto_end_date\" : \"end_date\";\r\n\r\n\t\t\tvar oldStart = task[startDateField].valueOf(),\r\n\t\t\t\toldEnd = task[endDateField].valueOf();\r\n\r\n\t\t\tgantt.resetProjectDates(task);\r\n\r\n\t\t\t// not refresh parent projects if dates hasn't changed\r\n\t\t\tif (!updateAll && oldStart == task[startDateField].valueOf() && oldEnd == task[endDateField].valueOf()) {\r\n\t\t\t\thas_changed = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (has_changed && !silent) {\r\n\t\t\t\tthis.refreshTask(task.id, true);\r\n\t\t\t}\r\n\r\n\t\t\tif(taskTiming.scheduled_summary){\r\n\t\t\t\thas_changed = true;//recalculate upwards from scheduled summaries\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (has_changed && pid && this.isTaskExists(pid)) {\r\n\t\t\tthis._update_parents(pid, silent, updateAll);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.roundDate = function (config) {\r\n\t\tvar scale = gantt.getScale();\r\n\r\n\t\tif (helpers.isDate(config)) {\r\n\t\t\tconfig = {\r\n\t\t\t\tdate: config,\r\n\t\t\t\tunit: scale ? scale.unit : gantt.config.duration_unit,\r\n\t\t\t\tstep: scale ? scale.step : gantt.config.duration_step\r\n\t\t\t};\r\n\t\t}\r\n\t\tvar date = config.date,\r\n\t\t\tsteps = config.step,\r\n\t\t\tunit = config.unit;\r\n\r\n\t\tif(!scale){\r\n\t\t\treturn date;\r\n\t\t}\r\n\r\n\t\tvar upper, lower, colIndex;\r\n\t\tif (unit == scale.unit && steps == scale.step &&\r\n\t\t\t+date >= +scale.min_date && +date <= +scale.max_date) {\r\n\t\t\t//find date in time scale config\r\n\t\t\tcolIndex = Math.floor(gantt.columnIndexByDate(date));\r\n\r\n\t\t\tif (!scale.trace_x[colIndex]) {\r\n\t\t\t\tcolIndex -= 1;// end of time scale\r\n\t\t\t\tif(scale.rtl){\r\n\t\t\t\t\tcolIndex = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlower = new Date(scale.trace_x[colIndex]);\r\n\t\t\tupper = gantt.date.add(lower, steps, unit);\r\n\t\t} else {\r\n\t\t\tcolIndex = Math.floor(gantt.columnIndexByDate(date));\r\n\r\n\t\t\tupper = gantt.date[unit + \"_start\"](new Date(scale.min_date));\r\n\t\t\tif (scale.trace_x[colIndex]) {\r\n\t\t\t\tupper = gantt.date[unit + \"_start\"](scale.trace_x[colIndex]);// end of time scale\r\n\t\t\t}\r\n\r\n\t\t\twhile (+upper < +date) {\r\n\t\t\t\tupper = gantt.date[unit + \"_start\"](gantt.date.add(upper, steps, unit));\r\n\r\n\t\t\t\tvar tzOffset = upper.getTimezoneOffset();\r\n\r\n\t\t\t\tupper = gantt._correct_dst_change(upper, tzOffset, upper, unit);\r\n\t\t\t\tif (gantt.date[unit + '_start'])\r\n\t\t\t\t\tupper = gantt.date[unit + '_start'](upper);\r\n\t\t\t}\r\n\r\n\t\t\tlower = gantt.date.add(upper, -1 * steps, unit);\r\n\r\n\t\t}\r\n\t\tif (config.dir && config.dir == 'future')\r\n\t\t\treturn upper;\r\n\t\tif (config.dir && config.dir == 'past')\r\n\t\t\treturn lower;\r\n\r\n\t\tif (Math.abs(date - lower) < Math.abs(upper - date)) {\r\n\t\t\treturn lower;\r\n\t\t} else {\r\n\t\t\treturn upper;\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tgantt.correctTaskWorkTime = function (task) {\r\n\t\tif (gantt.config.work_time && gantt.config.correct_work_time) {\r\n\t\t\tif (!this.isWorkTime(task.start_date, undefined, task)) {\r\n\t\t\t\ttask.start_date = this.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\r\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\r\n\t\t\t} else if (!this.isWorkTime(new Date(+task.end_date - 1), undefined, task)) {\r\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onBeforeTaskUpdate\", function (id, task) {\r\n\t\tgantt._init_task_timing(task);\r\n\t\treturn true;\r\n\t});\r\n\tgantt.attachEvent(\"onBeforeTaskAdd\", function (id, task) {\r\n\t\tgantt._init_task_timing(task);\r\n\t\treturn true;\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onAfterTaskMove\", function (id, parent, tindex) {\r\n\t\tgantt._init_task_timing(gantt.getTask(id));\r\n\t\treturn true;\r\n\t});\r\n\r\n};","function addResizeListener(gantt){\r\n\tvar containerStyles = window.getComputedStyle(gantt.$root);\r\n\tif(containerStyles.getPropertyValue(\"position\") == \"static\"){\r\n\t\tgantt.$root.style.position = \"relative\";\r\n\t}\r\n\r\n\tvar resizeWatcher = document.createElement('iframe');\r\n\tresizeWatcher.className = \"gantt_container_resize_watcher\";\r\n\tresizeWatcher.tabIndex = -1;\r\n\tif(gantt.config.wai_aria_attributes){\r\n\t\tresizeWatcher.setAttribute(\"role\", \"none\");\r\n\t\tresizeWatcher.setAttribute(\"aria-hidden\", true);\r\n\t}\r\n\r\n\tvar salesforce_environment = !!window[\"Sfdc\"] || !!window[\"$A\"] || window[\"Aura\"];\r\n\tif (salesforce_environment){\r\n\t\tgantt.config.container_resize_method = \"timeout\";\r\n\t}\r\n\r\n\t// in some environments (namely, in SalesForce) iframe.contentWindow is not available\r\n\tgantt.$root.appendChild(resizeWatcher);\r\n\tif (resizeWatcher.contentWindow) {\r\n\t\tlistenWindowResize(gantt, resizeWatcher.contentWindow);\r\n\t} else {\r\n\t\t// if so - ditch the iframe and fallback to listening the main window resize\r\n\t\tgantt.$root.removeChild(resizeWatcher);\r\n\t\tlistenWindowResize(gantt, window);\r\n\t}\r\n}\r\n\r\nfunction listenWindowResize(gantt, window){\r\n\tvar resizeTimeout = gantt.config.container_resize_timeout || 20;\r\n\tvar resizeDelay;\r\n\tlet previousSize = getContainerSize(gantt);\r\n\r\n\tif (gantt.config.container_resize_method == \"timeout\"){\r\n\t\tlowlevelResizeWatcher();\r\n\t}\r\n\telse {\r\n\t\ttry {\r\n\t\t\tgantt.event(window, \"resize\", function () {\r\n\t\t\t\tif (gantt.$scrollbarRepaint) {\r\n\t\t\t\t\tgantt.$scrollbarRepaint = null;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// GS-2140. Don't repaint Gantt if it has the same sizes\r\n\t\t\t\t\tlet currentSize = getContainerSize(gantt);\r\n\t\t\t\t\tif (previousSize.x == currentSize.x && previousSize.y == currentSize.y){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpreviousSize = currentSize;\r\n\t\t\t\t\trepaintGantt();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tlowlevelResizeWatcher();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction repaintGantt(){\r\n\t\tclearTimeout(resizeDelay);\r\n\t\tresizeDelay = setTimeout(function(){\r\n\t\t\tif(!gantt.$destroyed){\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\t\t}, resizeTimeout);\r\n\t}\r\n\r\n\tvar previousHeight = gantt.$root.offsetHeight;\r\n\tvar previousWidth = gantt.$root.offsetWidth;\t\r\n\r\n\tfunction lowlevelResizeWatcher(){\r\n\t\tif (gantt.$root.offsetHeight != previousHeight ||\r\n\t\t\t\tgantt.$root.offsetWidth != previousWidth){\r\n\t\t\t\trepaintGantt();\r\n\t\t}\r\n\r\n\t\tpreviousHeight = gantt.$root.offsetHeight;\r\n\t\tpreviousWidth = gantt.$root.offsetWidth;\r\n\r\n\t\tsetTimeout(lowlevelResizeWatcher, resizeTimeout);\r\n\t}\r\n}\r\n\r\nfunction getContainerSize(gantt){\r\n\treturn {\r\n\t\tx: gantt.$root.offsetWidth,\r\n\t\ty: gantt.$root.offsetHeight\r\n\t};\r\n}\r\n\r\nexport default addResizeListener;","import * as domHelpers from \"./ui/utils/dom_helpers\";\r\nimport * as helpers from \"../utils/helpers\";\r\nimport isHeadless from \"../utils/is_headless\";\r\nimport addResizeListener from \"./ui/resize_listener\";\r\nimport calculateScaleRange from \"./gantt_data_range\";\r\nimport assert from \"./common/assert\";\r\n\r\nexport default function(gantt){\r\n\t\r\n\r\n\tgantt.assert = assert(gantt);\r\n\r\n\tfunction isHTMLElement(node){\r\n\t\ttry {\r\n\t\t\tnode.cloneNode(false);\r\n\t\t}\r\n\t\tcatch (e){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n\tvar invalidContainerMessage = \"Invalid value of the first argument of `gantt.init`. Supported values: HTMLElement, String (element id).\" +\r\n\t\"This error means that either invalid object is passed into `gantt.init` or that the element with the specified ID doesn't exist on the page when `gantt.init` is called.\";\r\n\r\n\tfunction validateNode(node){\r\n\t\tif (!node || (typeof node == 'string' && document.getElementById(node))) return true;\r\n\t\tif (isHTMLElement(node)) return true;\r\n\r\n\t\tgantt.assert(false, invalidContainerMessage);\r\n\t\tthrow new Error(invalidContainerMessage);\r\n\t}\r\n\r\n//initial initialization\r\n\tgantt.init = function(node, from, to){\r\n\t\tif (gantt.env.isNode) { \r\n\t\t\tnode = null; // for the nodejs version\r\n\t\t} else {\r\n\t\t\tvalidateNode(node); // for the web version\r\n\t\t}\r\n\r\n\t\tif(from && to){\r\n\t\t\tthis.config.start_date = this._min_date = new Date(from);\r\n\t\t\tthis.config.end_date = this._max_date = new Date(to);\r\n\t\t}\r\n\t\tthis.date.init();\r\n\r\n\t\t//can be called only once\r\n\t\tthis.init = function(node){\r\n\t\t\tif (gantt.env.isNode) { \r\n\t\t\t\tnode = null; // for the nodejs version\r\n\t\t\t} else {\r\n\t\t\t\tvalidateNode(node); // for the web version\r\n\t\t\t}\r\n\r\n\t\t\tif (this.$container && this.$container.parentNode){\r\n\t\t\t\tthis.$container.parentNode.removeChild(this.$container);\r\n\t\t\t\tthis.$container = null;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.$layout){\r\n\t\t\t\tthis.$layout.clear();\r\n\t\t\t}\r\n\t\t\tthis._reinit(node);\r\n\t\t};\r\n\t\tthis._reinit(node);\r\n\t};\r\n\r\n\tgantt._quickRefresh = function(code){\r\n\t\tvar stores = this._getDatastores.call(this);\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i]._quick_refresh = true;\r\n\t\t}\r\n\r\n\t\tcode();\r\n\r\n\t\tfor(var i = 0; i < stores.length; i++){\r\n\t\t\tstores[i]._quick_refresh = false;\r\n\t\t}\r\n\t};\r\n\r\n\tvar dropLayout = (function dropLayout(){\r\n\t\tif(this._clearTaskLayers){\r\n\t\t\tthis._clearTaskLayers();\r\n\t\t}\r\n\r\n\t\tif(this._clearLinkLayers){\r\n\t\t\tthis._clearLinkLayers();\r\n\t\t}\r\n\r\n\t\tif(this.$layout){\r\n\t\t\tthis.$layout.destructor();\r\n\t\t\tthis.$layout = null;\r\n\t\t\tthis.$ui.reset();\r\n\t\t}\r\n\t}).bind(gantt);\r\n\r\n\tvar rebuildLayout = (function rebuildLayout(){\r\n\t\tif(isHeadless(gantt)){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.$root.innerHTML = \"\";\r\n\r\n\t\tthis.$root.gantt = this;\r\n\t\tcalculateScaleRange(this);\r\n\t\tthis.config.layout.id = \"main\";\r\n\t\tthis.$layout = this.$ui.createView(\"layout\", this.$root, this.config.layout);\r\n\r\n\t\tthis.$layout.attachEvent(\"onBeforeResize\", function(){\r\n\t\t\tvar storeNames = gantt.$services.getService(\"datastores\");\r\n\t\t\tfor(var i = 0; i < storeNames.length; i++){\r\n\t\t\t\tgantt.getDatastore(storeNames[i]).filter();\r\n\t\t\t\tif (gantt.$data.tasksStore._skipTaskRecalculation){\r\n\t\t\t\t\t// do not repaint items, they will be repainted later in the onStoreUpdate event\r\n\t\t\t\t\tif (gantt.$data.tasksStore._skipTaskRecalculation != \"lightbox\"){\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgantt.getDatastore(storeNames[i]).callEvent(\"onBeforeRefreshAll\", []);\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.$layout.attachEvent(\"onResize\", function(){\r\n\t\t\tgantt._quickRefresh(function(){\r\n\t\t\t\tgantt.refreshData();\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.callEvent(\"onGanttLayoutReady\", []);\r\n\t\tthis.$layout.render();\r\n\r\n\t\tthis.$container = this.$layout.$container.firstChild;\r\n\r\n\t\taddResizeListener(this);\r\n\t}).bind(gantt);\r\n\r\n\tgantt.resetLayout = function(){\r\n\t\tdropLayout();\r\n\t\trebuildLayout();\r\n\t\tthis.render();\r\n\t};\r\n\r\n\tgantt._reinit = function(node){\r\n\t\tthis.callEvent(\"onBeforeGanttReady\", []);\r\n\t\tthis._update_flags();\r\n\r\n\t\tvar config = this.$services.getService(\"templateLoader\");\r\n\t\tconfig.initTemplates(this);\r\n\r\n\t\tdropLayout();\r\n\r\n\t\tthis.$root = null;\r\n\t\tif(node){\r\n\t\t\tthis.$root = domHelpers.toNode(node);\r\n\t\t\trebuildLayout();\r\n\t\t\tthis.$mouseEvents.reset(this.$root);\r\n\t\t\taddMinimalSizes(gantt);\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onTemplatesReady\",[]);\r\n\r\n\t\tthis.callEvent(\"onGanttReady\", []);\r\n\r\n\t\tthis.render();\r\n\t};\r\n\r\n\tfunction addMinimalSizes(gantt) {\r\n\t\tif (gantt.$container && !gantt.config.autosize) {\r\n\t\t\tif (gantt.$root.offsetHeight < 50) {\r\n\t\t\t\t// eslint-disable-next-line no-console\r\n\t\t\t\tconsole.warn(`The Gantt container has a small height, so you cannot see its content. If it is not intended, you need to set the 'height' style rule to the container:\r\nhttps://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgantt.$click={\r\n\t\tbuttons:{\r\n\t\t\t\"edit\": function(id) {\r\n\t\t\t\tif (gantt.isReadonly(gantt.getTask(id))) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tgantt.showLightbox(id);\r\n\t\t\t},\r\n\t\t\t\"delete\": function(id) {\r\n\t\t\t\tvar task = gantt.getTask(id);\r\n\t\t\t\tif (gantt.isReadonly(task)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar question = gantt.locale.labels.confirm_deleting;\r\n\t\t\t\tvar title = gantt.locale.labels.confirm_deleting_title;\r\n\r\n\t\t\t\tgantt._simple_confirm(question, title, function(){\r\n\t\t\t\t\tif(!gantt.isTaskExists(id)){\r\n\t\t\t\t\t\tgantt.hideLightbox();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(task.$new){\r\n\t\t\t\t\t\t// GS-2170. Do not recalculate the indexes and dates of other tasks\r\n\t\t\t\t\t\t// as they will be recalculated in the `refreshData`\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = \"lightbox\";\r\n\t\t\t\t\t\tgantt.silent(function(){\r\n\t\t\t\t\t\t\tgantt.deleteTask(id, true);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = false;\r\n\t\t\t\t\t\tgantt.refreshData();\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tgantt.$data.tasksStore._skipTaskRecalculation = true;\r\n\t\t\t\t\t\tgantt.deleteTask(id);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgantt.hideLightbox();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n//renders self\r\n\tgantt.render = function(){\r\n\t\tthis.callEvent(\"onBeforeGanttRender\", []);\r\n\r\n\t\tvar visibleDate;\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tif (!this.config.sort && this._sort) {\r\n\t\t\t\tthis._sort = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.$root){\r\n\t\t\t\tif(this.config.rtl){\r\n\t\t\t\t\tthis.$root.classList.add(\"gantt_rtl\");\r\n\t\t\t\t\tthis.$root.firstChild.classList.add(\"gantt_rtl\"); // GS-1499\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.$root.classList.remove(\"gantt_rtl\");\r\n\t\t\t\t\tthis.$root.firstChild.classList.remove(\"gantt_rtl\"); // GS-1499\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar pos = this.getScrollState();\r\n\t\t\tvar posX = pos ? pos.x : 0;\r\n\t\t\tif(this._getHorizontalScrollbar()){\r\n\t\t\t\tvar scrollbar = this._getHorizontalScrollbar();\r\n\t\t\t\tposX = scrollbar.$config.codeScrollLeft || posX || 0;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvisibleDate = null;\r\n\t\t\tif(posX){\r\n\t\t\t\tvisibleDate = gantt.dateFromPos(posX + this.config.task_scroll_offset);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcalculateScaleRange(this);\r\n\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tthis.$layout.$config.autosize = this.config.autosize;\r\n\t\t\tvar preserveScroll = this.config.preserve_scroll;\r\n\t\t\tthis.config.preserve_scroll = false; // prevent scrolling from layout resize, scroll will be called here later on\r\n\t\t\tthis.$layout.resize();\r\n\t\t\tthis.config.preserve_scroll = preserveScroll;\r\n\r\n\t\t\tif(this.config.preserve_scroll && pos){\r\n\r\n\t\t\t\t// GS-1640: We need pos.y, otherwise part of the timeline won't be rendered if the scrollbar disappeared\r\n\t\t\t\tif (posX || pos.y) {\r\n\t\t\t\t\tvar new_pos = gantt.getScrollState();\r\n\t\t\t\t\tvar new_date = gantt.dateFromPos(new_pos.x);\r\n\t\t\t\t\tif(!(+visibleDate == +new_date && new_pos.y == pos.y)){\r\n\t\t\t\t\t\tvar posX = null;\r\n\t\t\t\t\t\tvar posY = null;\r\n\t\t\t\t\t\tif(visibleDate){\r\n\t\t\t\t\t\t\tvar posX = Math.max(gantt.posFromDate(visibleDate) - gantt.config.task_scroll_offset, 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(pos.y){\r\n\t\t\t\t\t\t\tposY = pos.y;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgantt.scrollTo(posX, posY);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// GS-1640: We need to reset the scroll position for the grid if the scrollbar disappeared and\r\n\t\t\t\t// the grid and timeline have different scrollbars\r\n\t\t\t\tvar gridCell = gantt.$ui.getView(\"grid\");\r\n\t\t\t\tif (gridCell) {\r\n\t\t\t\t\tvar attachedScrollbar = gridCell.$config.scrollY;\r\n\t\t\t\t\tvar verticalScrollbar = gantt.$ui.getView(attachedScrollbar);\r\n\t\t\t\t\tif (verticalScrollbar) {\r\n\t\t\t\t\t\tvar scrollbarNodeVisible = gantt.utils.dom.isChildOf(verticalScrollbar.$view, gantt.$container);\r\n\t\t\t\t\t\tif (!scrollbarNodeVisible) {\r\n\t\t\t\t\t\t\tgridCell.scrollTo(undefined, 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tgantt.refreshData();\r\n\t\t}\r\n\t\tthis.callEvent(\"onGanttRender\", []);\r\n\t};\r\n\r\n\t//TODO: add layout.resize method that wouldn't trigger data repaint\r\n\tgantt.setSizes = gantt.render;\r\n\r\n\r\n\tgantt.getTaskRowNode = function(id) {\r\n\t\tvar els = this.$grid_data.childNodes;\r\n\t\tvar attribute = this.config.task_attribute;\r\n\t\tfor (var i = 0; i < els.length; i++) {\r\n\t\t\tif (els[i].getAttribute) {\r\n\t\t\t\tvar value = els[i].getAttribute(attribute);\r\n\t\t\t\tif (value == id) return els[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\tgantt.changeLightboxType = function(type){\r\n\t\tif(this.getLightboxType() == type)\r\n\t\t\treturn true;\r\n\t\tgantt._silent_redraw_lightbox(type);\r\n\t};\r\n\r\n\tgantt._get_link_type = function (from_start, to_start) {\r\n\t\tvar type = null;\r\n\t\tif (from_start && to_start) {\r\n\t\t\ttype = gantt.config.links.start_to_start;\r\n\t\t} else if (!from_start && to_start) {\r\n\t\t\ttype = gantt.config.links.finish_to_start;\r\n\t\t} else if (!from_start && !to_start) {\r\n\t\t\ttype = gantt.config.links.finish_to_finish;\r\n\t\t} else if (from_start && !to_start) {\r\n\t\t\ttype = gantt.config.links.start_to_finish;\r\n\t\t}\r\n\t\treturn type;\r\n\t};\r\n\r\n\tgantt.isLinkAllowed = function (from, to, from_start, to_start) {\r\n\t\tvar link = null;\r\n\t\tif (typeof(from) == \"object\") {\r\n\t\t\tlink = from;\r\n\t\t} else {\r\n\t\t\tlink = {source: from, target: to, type: this._get_link_type(from_start, to_start)};\r\n\t\t}\r\n\r\n\t\tif (!link) return false;\r\n\t\tif (!(link.source && link.target && link.type)) return false;\r\n\t\tif (link.source == link.target) return false;\r\n\r\n\t\tvar res = true;\r\n\t\t//any custom rules\r\n\t\tif (this.checkEvent(\"onLinkValidation\"))\r\n\t\t\tres = this.callEvent(\"onLinkValidation\", [link]);\r\n\r\n\t\treturn res;\r\n\t};\r\n\r\n\r\n\tgantt._correct_dst_change = function(date, prevOffset, step, unit){\r\n\t\tvar time_unit = helpers.getSecondsInUnit(unit) * step;\r\n\t\tif(time_unit > 60*60 && time_unit < 60*60*24){\r\n\t\t\t//correct dst change only if current unit is more than one hour and less than day (days have own checking), e.g. 12h\r\n\t\t\tvar offsetChanged = date.getTimezoneOffset() - prevOffset;\r\n\t\t\tif(offsetChanged){\r\n\t\t\t\tdate = gantt.date.add(date, offsetChanged, \"minute\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn date;\r\n\t};\r\n\r\n\tgantt.isSplitTask = function(task){\r\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task =\"+task+\" of gantt.isSplitTask. Task object was expected\");\r\n\t\treturn this.$data.tasksStore._isSplitItem(task);\r\n\t};\r\n\r\n\tgantt._is_icon_open_click = function(e) {\r\n\t\tif (!e)\r\n\t\t\treturn false;\r\n\t\tvar target = e.target || e.srcElement;\r\n\t\tif (!(target && target.className))\r\n\t\t\treturn false;\r\n\t\tvar className = domHelpers.getClassName(target);\r\n\t\tif (className.indexOf(\"gantt_tree_icon\") !== -1 && (className.indexOf(\"gantt_close\") !== -1 || className.indexOf(\"gantt_open\") !== -1))\r\n\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\r\n};","/*\r\n \tasserts will be removed in final code, so you can place them anythere\r\n\twithout caring about performance impacts\r\n*/\r\n\r\nexport default function(gantt){\r\n\treturn function assert(check, message){\r\n\t\tif (!check){\r\n\t\t\tif(gantt.config.show_errors && gantt.callEvent(\"onError\",[message]) !== false) {\r\n\t\t\t\tif (gantt.message) {\r\n\t\t\t\t\tgantt.message({type: \"error\", text: message, expire: -1});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// eslint-disable-next-line\r\n\t\t\t\t\tconsole.log(message);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// eslint-disable-next-line no-debugger\r\n\t\t\t\tdebugger;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n};","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"أيار\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"],\r\n\t\tmonth_short: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"],\r\n\t\tday_full: [\"الأحد\", \"الأثنين\", \"ألثلاثاء\", \"الأربعاء\", \"ألحميس\", \"ألجمعة\", \"السبت\"],\r\n\t\tday_short: [\"احد\", \"اثنين\", \"ثلاثاء\", \"اربعاء\", \"خميس\", \"جمعة\", \"سبت\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"مهمة جديد\",\r\n\t\ticon_save: \"اخزن\",\r\n\t\ticon_cancel: \"الغاء\",\r\n\t\ticon_details: \"تفاصيل\",\r\n\t\ticon_edit: \"تحرير\",\r\n\t\ticon_delete: \"حذف\",\r\n\t\tconfirm_closing: \"التغييرات سوف تضيع, هل انت متأكد؟\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟\",\r\n\t\tsection_description: \"الوصف\",\r\n\t\tsection_time: \"الفترة الزمنية\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"الغاء\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Студзень\", \"Люты\", \"Сакавік\", \"Красавік\", \"Maй\", \"Чэрвень\", \"Ліпень\", \"Жнівень\", \"Верасень\", \"Кастрычнік\", \"Лістапад\", \"Снежань\"],\r\n\t\tmonth_short: [\"Студз\", \"Лют\", \"Сак\", \"Крас\", \"Maй\", \"Чэр\", \"Ліп\", \"Жнів\", \"Вер\", \"Каст\", \"Ліст\", \"Снеж\"],\r\n\t\tday_full: [\"Нядзеля\", \"Панядзелак\", \"Аўторак\", \"Серада\", \"Чацвер\", \"Пятніца\", \"Субота\"],\r\n\t\tday_short: [\"Нд\", \"Пн\", \"Аўт\", \"Ср\", \"Чцв\", \"Пт\", \"Сб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Новае заданне\",\r\n\t\ticon_save: \"Захаваць\",\r\n\t\ticon_cancel: \"Адмяніць\",\r\n\t\ticon_details: \"Дэталі\",\r\n\t\ticon_edit: \"Змяніць\",\r\n\t\ticon_delete: \"Выдаліць\",\r\n\t\tconfirm_closing: \"\", // Унесеныя змены будуць страчаны, працягнуць?\r\n\t\tconfirm_deleting: \"Падзея будзе выдалена незваротна, працягнуць?\",\r\n\t\tsection_description: \"Апісанне\",\r\n\t\tsection_time: \"Перыяд часу\",\r\n\t\tsection_type: \"Тып\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"ІСР\",\r\n\t\tcolumn_text: \"Задача\",\r\n\t\tcolumn_start_date: \"Пачатак\",\r\n\t\tcolumn_duration: \"Працяг\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Сувязь\",\r\n\t\tconfirm_link_deleting: \"будзе выдалена\",\r\n\t\tlink_start: \"(пачатак)\",\r\n\t\tlink_end: \"(канец)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Хвiлiна\",\r\n\t\thours: \"Гадзiна\",\r\n\t\tdays: \"Дзень\",\r\n\t\tweeks: \"Тыдзень\",\r\n\t\tmonths: \"Месяц\",\r\n\t\tyears: \"Год\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Адмяніць\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n @Traducido por Vicente Adria Bohigues - vicenteadria@hotmail.com\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"],\r\n\t\tmonth_short: [\"Gen\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Oct\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"],\r\n\t\tday_short: [\"Dg\", \"Dl\", \"Dm\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova tasca\",\r\n\t\ticon_save: \"Guardar\",\r\n\t\ticon_cancel: \"Cancel·lar\",\r\n\t\ticon_details: \"Detalls\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Esborrar\",\r\n\t\tconfirm_closing: \"\", // \"Els seus canvis es perdràn, continuar ?\"\r\n\t\tconfirm_deleting: \"L'esdeveniment s'esborrarà definitivament, continuar ?\",\r\n\t\tsection_description: \"Descripció\",\r\n\t\tsection_time: \"Periode de temps\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancel·lar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\nTranslation by FreezeSoul\r\n\r\nUpdate 26/10/2015:\r\nTranslation of new labels by zwh8800\r\n https://github.com/DHTMLX/gantt/pull/7\r\n\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\r\n\t\tmonth_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tday_full: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\r\n\t\tday_short: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"新任務\",\r\n\t\ticon_save: \"保存\",\r\n\t\ticon_cancel: \"关闭\",\r\n\t\ticon_details: \"详细\",\r\n\t\ticon_edit: \"编辑\",\r\n\t\ticon_delete: \"删除\",\r\n\t\tconfirm_closing: \"请确认是否撤销修改!\", // Your changes will be lost, are your sure?\r\n\t\tconfirm_deleting: \"是否删除日程?\",\r\n\t\tsection_description: \"描述\",\r\n\t\tsection_time: \"时间范围\",\r\n\t\tsection_type: \"类型\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"工作分解结构\",\r\n\t\tcolumn_text: \"任务名\",\r\n\t\tcolumn_start_date: \"开始时间\",\r\n\t\tcolumn_duration: \"持续时间\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\r\n\t\tlink: \"关联\",\r\n\t\tconfirm_link_deleting: \"将被删除\",\r\n\t\tlink_start: \" (开始)\",\r\n\t\tlink_end: \" (结束)\",\r\n\r\n\t\ttype_task: \"任务\",\r\n\t\ttype_project: \"项目\",\r\n\t\ttype_milestone: \"里程碑\",\r\n\r\n\t\tminutes: \"分钟\",\r\n\t\thours: \"小时\",\r\n\t\tdays: \"天\",\r\n\t\tweeks: \"周\",\r\n\t\tmonths: \"月\",\r\n\t\tyears: \"年\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"关闭\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"],\r\n\t\tmonth_short: [\"Led\", \"Ún\", \"Bře\", \"Dub\", \"Kvě\", \"Čer\", \"Čec\", \"Srp\", \"Září\", \"Říj\", \"List\", \"Pro\"],\r\n\t\tday_full: [\"Neděle\", \"Pondělí\", \"Úterý\", \"Středa\", \"Čtvrtek\", \"Pátek\", \"Sobota\"],\r\n\t\tday_short: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nová práce\",\r\n\t\ticon_save: \"Uložit\",\r\n\t\ticon_cancel: \"Zpět\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edituj\",\r\n\t\ticon_delete: \"Smazat\",\r\n\t\tconfirm_closing: \"\", // Vaše změny budou ztraceny, opravdu ?\r\n\t\tconfirm_deleting: \"Událost bude trvale smazána, opravdu?\",\r\n\t\tsection_description: \"Poznámky\",\r\n\t\tsection_time: \"Doba platnosti\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Zpět\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny opgave\",\r\n\t\ticon_save: \"Gem\",\r\n\t\ticon_cancel: \"Fortryd\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Tilret\",\r\n\t\ticon_delete: \"Slet\",\r\n\t\tconfirm_closing: \"Dine rettelser vil gå tabt.. Er dy sikker?\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Bigivenheden vil blive slettet permanent. Er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Fortryd\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\" Januar\", \" Februar\", \" März \", \" April\", \" Mai\", \" Juni\", \" Juli\", \" August\", \" September \", \" Oktober\", \" November \", \" Dezember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\r\n\t\tday_full: [\"Sonntag\", \"Montag\", \"Dienstag\", \" Mittwoch\", \" Donnerstag\", \"Freitag\", \"Samstag\"],\r\n\t\tday_short: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Neue Aufgabe\",\r\n\t\ticon_save: \"Speichern\",\r\n\t\ticon_cancel: \"Abbrechen\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Ändern\",\r\n\t\ticon_delete: \"Löschen\",\r\n\t\tconfirm_closing: \"\", // \"Ihre Veränderungen werden verloren sein, wollen Sie ergänzen? \"\r\n\t\tconfirm_deleting: \"Der Eintrag wird gelöscht\",\r\n\t\tsection_description: \"Beschreibung\",\r\n\t\tsection_time: \"Zeitspanne\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"PSP\",\r\n\t\tcolumn_text: \"Task-Namen\",\r\n\t\tcolumn_start_date: \"Startzeit\",\r\n\t\tcolumn_duration: \"Dauer\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"werden gelöscht\",\r\n\t\tlink_start: \"(starten)\",\r\n\t\tlink_end: \"(ende)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuten\",\r\n\t\thours: \"Stunden\",\r\n\t\tdays: \"Tage\",\r\n\t\tweeks: \"Wochen\",\r\n\t\tmonths: \"Monate\",\r\n\t\tyears: \"Jahre\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Abbrechen\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Regel\",\r\n\t\tconstraint_type: \"Regel\",\r\n\t\tconstraint_date: \"Regel - Datum\",\r\n\t\tasap: \"So bald wie möglich\",\r\n\t\talap: \"So spät wie möglich\",\r\n\t\tsnet: \"Beginn nicht vor\",\r\n\t\tsnlt: \"Beginn nicht später als\",\r\n\t\tfnet: \"Fertigstellung nicht vor\",\r\n\t\tfnlt: \"Fertigstellung nicht später als\",\r\n\t\tmso: \"Muss beginnen am\",\r\n\t\tmfo: \"Muss fertig sein am\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάϊος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"],\r\n\t\tmonth_short: [\"ΙΑΝ\", \"ΦΕΒ\", \"ΜΑΡ\", \"ΑΠΡ\", \"ΜΑΙ\", \"ΙΟΥΝ\", \"ΙΟΥΛ\", \"ΑΥΓ\", \"ΣΕΠ\", \"ΟΚΤ\", \"ΝΟΕ\", \"ΔΕΚ\"],\r\n\t\tday_full: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Κυριακή\"],\r\n\t\tday_short: [\"ΚΥ\", \"ΔΕ\", \"ΤΡ\", \"ΤΕ\", \"ΠΕ\", \"ΠΑ\", \"ΣΑ\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Νέα εργασία\",\r\n\t\ticon_save: \"Αποθήκευση\",\r\n\t\ticon_cancel: \"Άκυρο\",\r\n\t\ticon_details: \"Λεπτομέρειες\",\r\n\t\ticon_edit: \"Επεξεργασία\",\r\n\t\ticon_delete: \"Διαγραφή\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;\",\r\n\t\tsection_description: \"Περιγραφή\",\r\n\t\tsection_time: \"Χρονική περίοδος\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Άκυρο\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n\t\tday_short: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"New task\",\r\n\t\ticon_save: \"Save\",\r\n\t\ticon_cancel: \"Cancel\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Edit\",\r\n\t\ticon_delete: \"Delete\",\r\n\t\tconfirm_closing: \"\",// Your changes will be lost, are you sure?\r\n\t\tconfirm_deleting: \"Task will be deleted permanently, are you sure?\",\r\n\t\tsection_description: \"Description\",\r\n\t\tsection_time: \"Time period\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancel\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;","/*\r\n @Autor Manuel Fernandez Panzuela - www.mfernandez.es\r\n\r\n Update 30/10/2015:\r\n Translation of new labels by Jorge Macias\r\n https://disqus.com/by/disqus_bTuZk1voC7/\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\r\n\t\tmonth_short: [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"],\r\n\t\tday_full: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"],\r\n\t\tday_short: [\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nueva tarea\",\r\n\t\ticon_save: \"Guardar\",\r\n\t\ticon_cancel: \"Cancelar\",\r\n\t\ticon_details: \"Detalles\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Eliminar\",\r\n\t\tconfirm_closing: \"\", // \"Sus cambios se perderán, continuar ?\"\r\n\t\tconfirm_deleting: \"El evento se borrará definitivamente, ¿continuar?\",\r\n\t\tsection_description: \"Descripción\",\r\n\t\tsection_time: \"Período\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"EDT\",\r\n\t\tcolumn_text: \"Tarea\",\r\n\t\tcolumn_start_date: \"Inicio\",\r\n\t\tcolumn_duration: \"Duración\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Enlace\",\r\n\t\tconfirm_link_deleting: \"será borrada\",\r\n\t\tlink_start: \" (inicio)\",\r\n\t\tlink_end: \" (fin)\",\r\n\r\n\t\ttype_task: \"Tarea\",\r\n\t\ttype_project: \"Proyecto\",\r\n\t\ttype_milestone: \"Hito\",\r\n\r\n\r\n\t\tminutes: \"Minutos\",\r\n\t\thours: \"Horas\",\r\n\t\tdays: \"Días\",\r\n\t\tweeks: \"Semanas\",\r\n\t\tmonths: \"Meses\",\r\n\t\tyears: \"Años\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancelar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n dhtmlxGantt Persian (Farsi, fa_IR) locale by Mohammad Shokri http://slashsbin.com/\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\r\n\t\t\t\"ژانویه\",\r\n\t\t\t\"فوریه\",\r\n\t\t\t\"مارس\",\r\n\t\t\t\"آوریل\",\r\n\t\t\t\"مه\",\r\n\t\t\t\"ژوئن\",\r\n\t\t\t\"ژوئیه\",\r\n\t\t\t\"اوت\",\r\n\t\t\t\"سپتامبر\",\r\n\t\t\t\"اکتبر\",\r\n\t\t\t\"نوامبر\",\r\n\t\t\t\"دسامبر\"\r\n\t\t],\r\n\t\tmonth_short: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n\t\tday_full: [\r\n\t\t\t\"يکشنبه\",\r\n\t\t\t\"دوشنبه\",\r\n\t\t\t\"سهشنبه\",\r\n\t\t\t\"چهارشنبه\",\r\n\t\t\t\"پنجشنبه\",\r\n\t\t\t\"جمعه\",\r\n\t\t\t\"شنبه\"\r\n\t\t],\r\n\t\tday_short: [\r\n\t\t\t\"ی\",\r\n\t\t\t\"د\",\r\n\t\t\t\"س\",\r\n\t\t\t\"چ\",\r\n\t\t\t\"پ\",\r\n\t\t\t\"ج\",\r\n\t\t\t\"ش\"\r\n\t\t]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"وظیفه جدید\",\r\n\t\ticon_save: \"ذخیره\",\r\n\t\ticon_cancel: \"لغو\",\r\n\t\ticon_details: \"جزییات\",\r\n\t\ticon_edit: \"ویرایش\",\r\n\t\ticon_delete: \"حذف\",\r\n\t\tconfirm_closing: \"تغییرات شما ازدست خواهد رفت، آیا مطمئن هستید؟\",\r\n\t\tconfirm_deleting: \"این مورد برای همیشه حذف خواهد شد، آیا مطمئن هستید؟\",\r\n\t\tsection_description: \"توضیحات\",\r\n\t\tsection_time: \"مدت زمان\",\r\n\t\tsection_type: \"نوع\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"عنوان\",\r\n\t\tcolumn_start_date: \"زمان شروع\",\r\n\t\tcolumn_duration: \"مدت\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"ارتباط\",\r\n\t\tconfirm_link_deleting: \"حذف خواهد شد\",\r\n\t\tlink_start: \" (آغاز)\",\r\n\t\tlink_end: \" (پایان)\",\r\n\r\n\t\ttype_task: \"وظیفه\",\r\n\t\ttype_project: \"پروژه\",\r\n\t\ttype_milestone: \"نگارش\",\r\n\r\n\t\tminutes: \"دقایق\",\r\n\t\thours: \"ساعات\",\r\n\t\tdays: \"روزها\",\r\n\t\tweeks: \"هفته\",\r\n\t\tmonths: \"ماهها\",\r\n\t\tyears: \"سالها\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"تایید\",\r\n\t\tmessage_cancel: \"لغو\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kesäkuu\", \"Heinäkuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"],\r\n\t\tmonth_short: [\"Tam\", \"Hel\", \"Maa\", \"Huh\", \"Tou\", \"Kes\", \"Hei\", \"Elo\", \"Syy\", \"Lok\", \"Mar\", \"Jou\"],\r\n\t\tday_full: [\"Sunnuntai\", \"Maanantai\", \"Tiistai\", \"Keskiviikko\", \"Torstai\", \"Perjantai\", \"Lauantai\"],\r\n\t\tday_short: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Uusi tehtävä\",\r\n\t\ticon_save: \"Tallenna\",\r\n\t\ticon_cancel: \"Peru\",\r\n\t\ticon_details: \"Tiedot\",\r\n\t\ticon_edit: \"Muokkaa\",\r\n\t\ticon_delete: \"Poista\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Haluatko varmasti poistaa tapahtuman?\",\r\n\t\tsection_description: \"Kuvaus\",\r\n\t\tsection_time: \"Aikajakso\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Peru\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"],\r\n\t\tmonth_short: [\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Juin\", \"Juil\", \"Aoû\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"],\r\n\t\tday_full: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\"],\r\n\t\tday_short: [\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nouvelle tâche\",\r\n\t\ticon_save: \"Enregistrer\",\r\n\t\ticon_cancel: \"Annuler\",\r\n\t\ticon_details: \"Détails\",\r\n\t\ticon_edit: \"Modifier\",\r\n\t\ticon_delete: \"Effacer\",\r\n\t\tconfirm_closing: \"\",// Vos modifications seront perdus, êtes-vous sûr ?\r\n\t\tconfirm_deleting: \"L'événement sera effacé sans appel, êtes-vous sûr ?\",\r\n\r\n\t\tsection_description: \"Description\",\r\n\t\tsection_time: \"Période\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"OTP\",\r\n\t\tcolumn_text: \"Nom de la tâche\",\r\n\t\tcolumn_start_date: \"Date initiale\",\r\n\t\tcolumn_duration: \"Durée\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Le lien\",\r\n\t\tconfirm_link_deleting: \"sera supprimé\",\r\n\t\tlink_start: \"(début)\",\r\n\t\tlink_end: \"(fin)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Heures\",\r\n\t\tdays: \"Jours\",\r\n\t\tweeks: \"Semaines\",\r\n\t\tmonths: \"Mois\",\r\n\t\tyears: \"Années\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Annuler\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\r\n\t\tmonth_short: [\"ינו\", \"פבר\", \"מרץ\", \"אפר\", \"מאי\", \"יונ\", \"יול\", \"אוג\", \"ספט\", \"אוק\", \"נוב\", \"דצמ\"],\r\n\t\tday_full: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\r\n\t\tday_short: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"משימה חדש\",\r\n\t\ticon_save: \"שמור\",\r\n\t\ticon_cancel: \"בטל\",\r\n\t\ticon_details: \"פרטים\",\r\n\t\ticon_edit: \"ערוך\",\r\n\t\ticon_delete: \"מחק\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"ארוע ימחק סופית.להמשיך?\",\r\n\t\tsection_description: \"הסבר\",\r\n\t\tsection_time: \"תקופה\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"בטל\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Translation by Davor\r\n http://docs.dhtmlx.com/gantt/desktop__localization.html#comment-2569116291\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"],\r\n\t\tmonth_short: [\"Sij\", \"Velj\", \"Ožu\", \"Tra\", \"Svi\", \"Lip\", \"Srp\", \"Kol\", \"Ruj\", \"Lis\", \"Stu\", \"Pro\"],\r\n\t\tday_full: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"],\r\n\t\tday_short: [\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Novi Zadatak\",\r\n\t\ticon_save: \"Spremi\",\r\n\t\ticon_cancel: \"Odustani\",\r\n\t\ticon_details: \"Detalji\",\r\n\t\ticon_edit: \"Izmjeni\",\r\n\t\ticon_delete: \"Obriši\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"Zadatak će biti trajno izbrisan, jeste li sigurni?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Vremenski Period\",\r\n\t\tsection_type: \"Tip\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Naziv Zadatka\",\r\n\t\tcolumn_start_date: \"Početno Vrijeme\",\r\n\t\tcolumn_duration: \"Trajanje\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Poveznica\",\r\n\t\tconfirm_link_deleting: \"će biti izbrisan\",\r\n\t\tlink_start: \" (početak)\",\r\n\t\tlink_end: \" (kraj)\",\r\n\r\n\t\ttype_task: \"Zadatak\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minute\",\r\n\t\thours: \"Sati\",\r\n\t\tdays: \"Dani\",\r\n\t\tweeks: \"Tjedni\",\r\n\t\tmonths: \"Mjeseci\",\r\n\t\tyears: \"Godine\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Odustani\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Már\", \"Ápr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Vasárnap\", \"Hétfõ\", \"Kedd\", \"Szerda\", \"Csütörtök\", \"Péntek\", \"szombat\"],\r\n\t\tday_short: [\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Csü\", \"Pé\", \"Szo\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Új feladat\",\r\n\t\ticon_save: \"Mentés\",\r\n\t\ticon_cancel: \"Mégse\",\r\n\t\ticon_details: \"Részletek\",\r\n\t\ticon_edit: \"Szerkesztés\",\r\n\t\ticon_delete: \"Törlés\",\r\n\t\tconfirm_closing: \"\", // A változások elvesznek, biztosan folytatja? \"\r\n\t\tconfirm_deleting: \"Az esemény törölve lesz, biztosan folytatja?\",\r\n\t\tsection_description: \"Leírás\",\r\n\t\tsection_time: \"Idõszak\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Mégse\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ags\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\"],\r\n\t\tday_short: [\"Ming\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Tugas baru\",\r\n\t\ticon_save: \"Simpan\",\r\n\t\ticon_cancel: \"Batal\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edit\",\r\n\t\ticon_delete: \"Hapus\",\r\n\t\tconfirm_closing: \"\", /* Perubahan tidak akan disimpan ? */\r\n\t\tconfirm_deleting: \"Acara akan dihapus\",\r\n\t\tsection_description: \"Keterangan\",\r\n\t\tsection_time: \"Periode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Batal\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Update 29/12/2015:\r\n New labels translation by ARCANGELI CLAUDIO\r\n\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\r\n\t\tmonth_short: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"],\r\n\t\tday_full: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"],\r\n\t\tday_short: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nuovo compito\",\r\n\t\ticon_save: \"Salva\",\r\n\t\ticon_cancel: \"Chiudi\",\r\n\t\ticon_details: \"Dettagli\",\r\n\t\ticon_edit: \"Modifica\",\r\n\t\ticon_delete: \"Elimina\",\r\n\t\tconfirm_closing: \"\",// \"Sei sicuro di confermare la chiusura?\",\r\n\t\tconfirm_deleting: \"Sei sicuro di confermare l'eliminazione?\",\r\n\t\tsection_description: \"Descrizione\",\r\n\t\tsection_time: \"Periodo di tempo\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Nome Attività\",\r\n\t\tcolumn_start_date: \"Inizio\",\r\n\t\tcolumn_duration: \"Durata\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"sarà eliminato\",\r\n\t\tlink_start: \" (inizio)\",\r\n\t\tlink_end: \" (fine)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuti\",\r\n\t\thours: \"Ore\",\r\n\t\tdays: \"Giorni\",\r\n\t\tweeks: \"Settimane\",\r\n\t\tmonths: \"Mesi\",\r\n\t\tyears: \"Anni\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Chiudi\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Translation by Genexus Japan Inc.\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tmonth_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tday_full: [\"日曜日\", \"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\"],\r\n\t\tday_short: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"新しい仕事\",\r\n\t\ticon_save: \"保存\",\r\n\t\ticon_cancel: \"キャンセル\",\r\n\t\ticon_details: \"詳細\",\r\n\t\ticon_edit: \"編集\",\r\n\t\ticon_delete: \"削除\",\r\n\t\tconfirm_closing: \"\", // 変更が取り消されます、宜しいですか?\r\n\t\tconfirm_deleting: \"イベント完全に削除されます、宜しいですか?\",\r\n\t\tsection_description: \"デスクリプション\",\r\n\t\tsection_time: \"期間\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"キャンセル\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTranslated by cjkim@dbvalley.com\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\r\n\t\tmonth_short: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\r\n\t\tday_full: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"],\r\n\t\tday_short: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"이름없는 작업\",\r\n\t\ticon_save: \"저장\",\r\n\t\ticon_cancel: \"취소\",\r\n\t\ticon_details: \"세부 사항\",\r\n\t\ticon_edit: \"수정\",\r\n\t\ticon_delete: \"삭제\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"작업을 삭제하시겠습니까?\",\r\n\t\tsection_description: \"설명\",\r\n\t\tsection_time: \"기간\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"작업명\",\r\n\t\tcolumn_start_date: \"시작일\",\r\n\t\tcolumn_duration: \"기간\",\r\n\t\tcolumn_add: \"\",\r\n\t\tlink: \"전제\",\r\n\t\tconfirm_link_deleting: \"삭제 하시겠습니까?\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\t\ttype_task: \"작업\",\r\n\t\ttype_project: \"프로젝트\",\r\n\t\ttype_milestone: \"마일스톤\",\r\n\t\tminutes: \"분\",\r\n\t\thours: \"시간\",\r\n\t\tdays: \"일\",\r\n\t\tweeks: \"주\",\r\n\t\tmonths: \"달\",\r\n\t\tyears: \"년\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"취소\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","export default class LocaleManager{\r\n\tprivate _locales:{[key:string]: IGanttLocale };\r\n\r\n\tconstructor(config: {[key:string]: IGanttLocale }){\r\n\t\tthis._locales = {};\r\n\t\tfor(const i in config){\r\n\t\t\tthis._locales[i] = config[i];\r\n\t\t}\r\n\t}\r\n\r\n\taddLocale = (name: string, locale: IGanttLocale) => {\r\n\t\tthis._locales[name] = locale;\r\n\t};\r\n\r\n\tgetLocale = (name: string): IGanttLocale => {\r\n\t\treturn this._locales[name];\r\n\t};\r\n}","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Mon\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny oppgave\",\r\n\t\ticon_save: \"Lagre\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Rediger\",\r\n\t\ticon_delete: \"Slett\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Hendelsen vil bli slettet permanent. Er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\"],\r\n\t\tday_short: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nieuwe taak\",\r\n\t\ticon_save: \"Opslaan\",\r\n\t\ticon_cancel: \"Annuleren\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Bewerken\",\r\n\t\ticon_delete: \"Verwijderen\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Item zal permanent worden verwijderd, doorgaan?\",\r\n\t\tsection_description: \"Beschrijving\",\r\n\t\tsection_time: \"Tijd periode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Taak omschrijving\",\r\n\t\tcolumn_start_date: \"Startdatum\",\r\n\t\tcolumn_duration: \"Duur\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Koppeling\",\r\n\t\tconfirm_link_deleting: \"zal worden verwijderd\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (eind)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"minuten\",\r\n\t\thours: \"uren\",\r\n\t\tdays: \"dagen\",\r\n\t\tweeks: \"weken\",\r\n\t\tmonths: \"maanden\",\r\n\t\tyears: \"jaren\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Annuleren\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny oppgave\",\r\n\t\ticon_save: \"Lagre\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Endre\",\r\n\t\ticon_delete: \"Slett\",\r\n\t\tconfirm_closing: \"Endringer blir ikke lagret, er du sikker?\", // Endringer blir ikke lagret, er du sikker?\r\n\t\tconfirm_deleting: \"Oppføringen vil bli slettet, er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\r\n\t\tmonth_short: [\"Sty\", \"Lut\", \"Mar\", \"Kwi\", \"Maj\", \"Cze\", \"Lip\", \"Sie\", \"Wrz\", \"Paź\", \"Lis\", \"Gru\"],\r\n\t\tday_full: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\r\n\t\tday_short: [\"Nie\", \"Pon\", \"Wto\", \"Śro\", \"Czw\", \"Pią\", \"Sob\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nowe zadanie\",\r\n\t\ticon_save: \"Zapisz\",\r\n\t\ticon_cancel: \"Anuluj\",\r\n\t\ticon_details: \"Szczegóły\",\r\n\t\ticon_edit: \"Edytuj\",\r\n\t\ticon_delete: \"Usuń\",\r\n\t\tconfirm_closing: \"\", // Zmiany zostaną usunięte, jesteś pewien?\r\n\t\tconfirm_deleting: \"Zdarzenie zostanie usunięte na zawsze, kontynuować?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Okres czasu\",\r\n\t\tsection_type: \"Typ\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Nazwa zadania\",\r\n\t\tcolumn_start_date: \"Początek\",\r\n\t\tcolumn_duration: \"Czas trwania\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"zostanie usunięty\",\r\n\t\tlink_start: \" (początek)\",\r\n\t\tlink_end: \" (koniec)\",\r\n\r\n\t\ttype_task: \"Zadanie\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuty\",\r\n\t\thours: \"Godziny\",\r\n\t\tdays: \"Dni\",\r\n\t\tweeks: \"Tydzień\",\r\n\t\tmonths: \"Miesiące\",\r\n\t\tyears: \"Lata\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Anuluj\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\r\n TRANSLATION BY MATTHEUS PIROVANI RORIZ GONЗALVES\r\n\r\n mattheusroriz@hotmail.com / mattheus.pirovani@gmail.com /\r\n\r\n www.atrixian.com.br\r\n\r\n\r\n Updated by Jorge Albernaz Martins\r\n\r\n jorgefox@hotmail.com\r\n\r\n www.redfox.inf.br\r\n\r\n JorgeFox\r\n\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\r\n\t\tmonth_short: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\r\n\t\tday_full: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\r\n\t\tday_short: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova tarefa\",\r\n\t\ticon_save: \"Salvar\",\r\n\t\ticon_cancel: \"Cancelar\",\r\n\t\ticon_details: \"Detalhes\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Excluir\",\r\n\t\tconfirm_closing: \"\",// Suas alterações serão perdidas, confirme?\r\n\t\tconfirm_deleting: \"As tarefas serão excluidas permanentemente, confirme?\",\r\n\t\tsection_description: \"Descrição\",\r\n\t\tsection_time: \"Período\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"EAP\",\r\n\t\tcolumn_text: \"Nome tarefa\",\r\n\t\tcolumn_start_date: \"Data início\",\r\n\t\tcolumn_duration: \"Duração\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"Será excluído!\",\r\n\t\tlink_start: \" (início)\",\r\n\t\tlink_end: \" (fim)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Projeto\",\r\n\t\ttype_milestone: \"Marco\",\r\n\r\n\r\n\t\tminutes: \"Minutos\",\r\n\t\thours: \"Horas\",\r\n\t\tdays: \"Dias\",\r\n\t\tweeks: \"Semanas\",\r\n\t\tmonths: \"Meses\",\r\n\t\tyears: \"Anos\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancelar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Restrição\",\r\n\t\tconstraint_type: \"Tipo Restrição\",\r\n\t\tconstraint_date: \"Data restrição\",\r\n\t\tasap: \"Mais breve possível\",\r\n\t\talap: \"Mais tarde possível\",\r\n\t\tsnet: \"Não começar antes de\",\r\n\t\tsnlt: \"Não começar depois de\",\r\n\t\tfnet: \"Não terminar antes de\",\r\n\t\tfnlt: \"Não terminar depois de\",\r\n\t\tmso: \"Precisa começar em\",\r\n\t\tmfo: \"Precisa terminar em\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"Tipo de filtros\",\r\n\t\tresources_filter_label: \"Ocultar vazios\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTraducere de Ovidiu Lixandru: http://www.madball.ro\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Ian\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Iun\", \"Iul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Duminica\", \"Luni\", \"Marti\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sambata\"],\r\n\t\tday_short: [\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sa\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Sarcina noua\",\r\n\t\ticon_save: \"Salveaza\",\r\n\t\ticon_cancel: \"Anuleaza\",\r\n\t\ticon_details: \"Detalii\",\r\n\t\ticon_edit: \"Editeaza\",\r\n\t\ticon_delete: \"Sterge\",\r\n\t\tconfirm_closing: \"Schimbarile nu vor fi salvate, esti sigur?\",// Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Evenimentul va fi sters permanent, esti sigur?\",\r\n\t\tsection_description: \"Descriere\",\r\n\t\tsection_time: \"Interval\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Anuleaza\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Maй\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Oктябрь\", \"Ноябрь\", \"Декабрь\"],\r\n\t\tmonth_short: [\"Янв\", \"Фев\", \"Maр\", \"Aпр\", \"Maй\", \"Июн\", \"Июл\", \"Aвг\", \"Сен\", \"Окт\", \"Ноя\", \"Дек\"],\r\n\t\tday_full: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"],\r\n\t\tday_short: [\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Новое задание\",\r\n\t\ticon_save: \"Сохранить\",\r\n\t\ticon_cancel: \"Отменить\",\r\n\t\ticon_details: \"Детали\",\r\n\t\ticon_edit: \"Изменить\",\r\n\t\ticon_delete: \"Удалить\",\r\n\t\tconfirm_closing: \"\", // Ваши изменения будут потеряны, продолжить?\r\n\t\tconfirm_deleting: \"Событие будет удалено безвозвратно, продолжить?\",\r\n\t\tsection_description: \"Описание\",\r\n\t\tsection_time: \"Период времени\",\r\n\t\tsection_type: \"Тип\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"ИСР\",\r\n\t\tcolumn_text: \"Задача\",\r\n\t\tcolumn_start_date: \"Начало\",\r\n\t\tcolumn_duration: \"Длительность\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Связь\",\r\n\t\tconfirm_link_deleting: \"будет удалена\",\r\n\t\tlink_start: \" (начало)\",\r\n\t\tlink_end: \" (конец)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Минута\",\r\n\t\thours: \"Час\",\r\n\t\tdays: \"День\",\r\n\t\tweeks: \"Неделя\",\r\n\t\tmonths: \"Месяц\",\r\n\t\tyears: \"Год\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Отменить\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"начните вводить слово для фильтрации\",\r\n\t\tresources_filter_label: \"спрятать не установленные\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\"],\r\n\t\tday_short: [\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova naloga\",\r\n\t\ticon_save: \"Shrani\",\r\n\t\ticon_cancel: \"Prekliči\",\r\n\t\ticon_details: \"Podrobnosti\",\r\n\t\ticon_edit: \"Uredi\",\r\n\t\ticon_delete: \"Izbriši\",\r\n\t\tconfirm_closing: \"\", // Spremembe ne bodo shranjene. Želite nadaljevati ?\r\n\t\tconfirm_deleting: \"Dogodek bo izbrisan. Želite nadaljevati?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Časovni okvir\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Prekliči\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sept\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\"],\r\n\t\tday_short: [\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nová úloha\",\r\n\t\ticon_save: \"Uložiť\",\r\n\t\ticon_cancel: \"Späť\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edituj\",\r\n\t\ticon_delete: \"Zmazať\",\r\n\t\tconfirm_closing: \"Vaše zmeny nebudú uložené. Skutočne?\", // Vaše změny budou ztraceny, opravdu ?\r\n\t\tconfirm_deleting: \"Udalosť bude natrvalo vymazaná. Skutočne?\",\r\n\t\tsection_description: \"Poznámky\",\r\n\t\tsection_time: \"Doba platnosti\",\r\n\t\tsection_type: \"Type\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Späť\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTranslation by Peter Eriksson\r\n */\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"],\r\n\t\tday_short: [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny uppgift\",\r\n\t\ticon_save: \"Spara\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detajer\",\r\n\t\ticon_edit: \"Ändra\",\r\n\t\ticon_delete: \"Ta bort\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"Är du säker på att du vill ta bort händelsen permanent?\",\r\n\t\tsection_description: \"Beskrivning\",\r\n\t\tsection_time: \"Tid\",\r\n\t\tsection_type: \"Typ\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Uppgiftsnamn\",\r\n\t\tcolumn_start_date: \"Starttid\",\r\n\t\tcolumn_duration: \"Varaktighet\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\r\n\t\tlink: \"Länk\",\r\n\t\tconfirm_link_deleting: \"kommer tas bort\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (slut)\",\r\n\t\ttype_task: \"Uppgift\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milstolpe\",\r\n\r\n\t\tminutes: \"Minuter\",\r\n\t\thours: \"Timmar\",\r\n\t\tdays: \"Dagar\",\r\n\t\tweeks: \"Veckor\",\r\n\t\tmonths: \"Månader\",\r\n\t\tyears: \"År\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n * updated by @levkar at https://github.com/DHTMLX/gantt/pull/10\r\n */\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"],\r\n\t\tmonth_short: [\"Oca\", \"Şub\", \"Mar\", \"Nis\", \"May\", \"Haz\", \"Tem\", \"Ağu\", \"Eyl\", \"Eki\", \"Kas\", \"Ara\"],\r\n\t\tday_full: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"],\r\n\t\tday_short: [\"Paz\", \"Pzt\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cmt\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Yeni görev\",\r\n\t\ticon_save: \"Kaydet\",\r\n\t\ticon_cancel: \"İptal\",\r\n\t\ticon_details: \"Detaylar\",\r\n\t\ticon_edit: \"Düzenle\",\r\n\t\ticon_delete: \"Sil\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Görev silinecek, emin misiniz?\",\r\n\t\tsection_description: \"Açıklama\",\r\n\t\tsection_time: \"Zaman Aralığı\",\r\n\t\tsection_type: \"Tip\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Görev Adı\",\r\n\t\tcolumn_start_date: \"Başlangıç\",\r\n\t\tcolumn_duration: \"Süre\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Bağlantı\",\r\n\t\tconfirm_link_deleting: \"silinecek\",\r\n\t\tlink_start: \" (başlangıç)\",\r\n\t\tlink_end: \" (bitiş)\",\r\n\r\n\t\ttype_task: \"Görev\",\r\n\t\ttype_project: \"Proje\",\r\n\t\ttype_milestone: \"Kilometretaşı\",\r\n\r\n\r\n\t\tminutes: \"Dakika\",\r\n\t\thours: \"Saat\",\r\n\t\tdays: \"Gün\",\r\n\t\tweeks: \"Hafta\",\r\n\t\tmonths: \"Ay\",\r\n\t\tyears: \"Yıl\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Ýptal\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Січень\", \"Лютий\", \"Березень\", \"Квітень\", \"Травень\", \"Червень\", \"Липень\", \"Серпень\", \"Вересень\", \"Жовтень\", \"Листопад\", \"Грудень\"],\r\n\t\tmonth_short: [\"Січ\", \"Лют\", \"Бер\", \"Кві\", \"Тра\", \"Чер\", \"Лип\", \"Сер\", \"Вер\", \"Жов\", \"Лис\", \"Гру\"],\r\n\t\tday_full: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\"],\r\n\t\tday_short: [\"Нед\", \"Пон\", \"Вів\", \"Сер\", \"Чет\", \"Птн\", \"Суб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Нове завдання\",\r\n\t\ticon_save: \"Зберегти\",\r\n\t\ticon_cancel: \"Відміна\",\r\n\t\ticon_details: \"Деталі\",\r\n\t\ticon_edit: \"Редагувати\",\r\n\t\ticon_delete: \"Вилучити\",\r\n\t\tconfirm_closing: \"\", // Ваші зміни втратяться. Ви впевнені ?\r\n\t\tconfirm_deleting: \"Подія вилучиться назавжди. Ви впевнені?\",\r\n\t\tsection_description: \"Опис\",\r\n\t\tsection_time: \"Часовий проміжок\",\r\n\t\tsection_type: \"Тип\",\r\n\t\tsection_deadline: \"Deadline\",\r\n\t\tsection_baselines: \"Baselines\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Відміна\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\",\r\n\r\n\t\t/* baselines control */\r\n\t\tbaselines_section_placeholder: \"Start adding a new baseline\",\r\n\t\tbaselines_add_button: \"Add Baseline\",\r\n\t\tbaselines_remove_button: \"Remove\",\r\n\t\tbaselines_remove_all_button: \"Remove All\",\r\n\r\n\t\t/* deadline control */\r\n\t\tdeadline_enable_button: \"Set\",\r\n\t\tdeadline_disable_button: \"Remove\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","import * as utils from \"../utils/utils\";\r\nimport constants from \"../constants\";\r\nimport ExtensionManager from \"../ext/extension_manager\";\r\n\r\nimport services from \"../core/common/services\";\r\nimport config from \"../core/common/config\";\r\nimport ajax from \"../core/common/ajax\";\r\nimport date from \"../core/common/date\";\r\nimport {remoteEvents} from \"../core/remote/remote_events\";\r\n\r\nimport DnD from \"../core/common/dnd\";\r\nimport templates from \"../core/common/templates\";\r\nimport eventable from \"../utils/eventable\";\r\n\r\nimport StateService from \"../core/common/state\";\r\n\r\nimport Promise from \"../utils/promise\";\r\nimport env from \"../utils/env\";\r\nimport datastoreHooks from \"../core/datastore/datastore_hooks\";\r\nimport DataProcessor from \"../core/dataprocessor\";\r\n\r\nimport plugins from \"../core/plugins\";\r\n\r\nimport grid_column_api from \"../core/grid_column_api\";\r\nimport tasks from \"../core/tasks\";\r\nimport parsing from \"../core/loading/parsing\";\r\nimport work_time from \"../core/worktime/work_time\";\r\nimport data from \"../core/data\";\r\n\r\nimport void_script_second from \"../publish_helpers/void_script_second\";\r\n\r\nimport data_task_types from \"../core/data_task_types\";\r\nimport cached_functions from \"../core/cached_functions\";\r\n\r\nimport gantt_core from \"../core/gantt_core\";\r\nimport destructor from \"../core/destructor\";\r\nimport void_script_third from \"../publish_helpers/void_script_third\";\r\n\r\nimport i18nFactory from \"../locale\";\r\n\r\nfunction DHXGantt(){\r\n\tthis.constants = constants;\r\n\tthis.version = VERSION;\r\n\tthis.license = LICENSE;\r\n\tthis.templates = {};\r\n\tthis.ext = {};\r\n\tthis.keys = {\r\n\t\tedit_save: this.constants.KEY_CODES.ENTER,\r\n\t\tedit_cancel: this.constants.KEY_CODES.ESC\r\n\t};\r\n}\r\n\r\nexport default function(supportedExtensions) {\r\n\t// use a named constructor to make gantt instance discoverable in heap snapshots\r\n\tvar gantt = new DHXGantt();\r\n\r\n\tvar extensionManager = new ExtensionManager(supportedExtensions);\r\n\tvar activePlugins = {};\r\n\tgantt.plugins = function(config){\r\n\t\tfor(var i in config){\r\n\t\t\tif(config[i] && !activePlugins[i]){\r\n\t\t\t\tvar plugin = extensionManager.getExtension(i);\r\n\t\t\t\tif(plugin){\r\n\t\t\t\t\tplugin(gantt);\r\n\t\t\t\t\tactivePlugins[i] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn activePlugins;\r\n\t};\r\n\r\n\tgantt.$services = services();\r\n\tgantt.config = config();\r\n\tgantt.ajax = ajax(gantt);\r\n\tgantt.date = date(gantt);\r\n\tgantt.RemoteEvents = remoteEvents;\r\n\r\n\tvar dnd = DnD(gantt);\r\n\tgantt.$services.setService(\"dnd\", function(){return dnd;});\r\n\r\n\tvar templatesLoader = templates(gantt);\r\n\tgantt.$services.setService(\"templateLoader\", function () {\r\n\t\treturn templatesLoader;\r\n\t});\r\n\r\n\teventable(gantt);\r\n\r\n\t\r\n\tvar stateService = new StateService();\r\n\r\n\tstateService.registerProvider(\"global\", function () {\r\n\t\tvar res = {\r\n\t\t\tmin_date: gantt._min_date,\r\n\t\t\tmax_date: gantt._max_date,\r\n\t\t\tselected_task: null\r\n\t\t};\r\n\r\n\t\t// do not throw error if getState called from non-initialized gantt\r\n\t\tif(gantt.$data && gantt.$data.tasksStore){\r\n\t\t\tres.selected_task = gantt.$data.tasksStore.getSelectedId();\r\n\t\t}\r\n\t\treturn res;\r\n\t});\r\n\tgantt.getState = stateService.getState;\r\n\tgantt.$services.setService(\"state\", function () {\r\n\t\treturn stateService;\r\n\t});\r\n\r\n\tutils.mixin(gantt, utils);\r\n\r\n\tgantt.Promise = Promise;\r\n\tgantt.env = env;\r\n\r\n\tdatastoreHooks(gantt);\r\n\r\n\tgantt.dataProcessor = DataProcessor.DEPRECATED_api;\r\n\tgantt.createDataProcessor = DataProcessor.createDataProcessor;\r\n\r\n\tplugins(gantt);\r\n\r\n\tgrid_column_api(gantt);\r\n\ttasks(gantt);\r\n\tparsing(gantt);\r\n\twork_time(gantt);\r\n\tdata(gantt);\r\n\r\n\tvoid_script_second(gantt);\r\n\r\n\tdata_task_types(gantt);\r\n\tcached_functions(gantt);\r\n\r\n\tgantt_core(gantt);\r\n\tdestructor(gantt);\r\n\tvoid_script_third(gantt);\r\n\r\n\tvar i18n = i18nFactory();\r\n\tgantt.i18n = {\r\n\t\taddLocale: i18n.addLocale,\r\n\t\tsetLocale: function(locale){\r\n\t\t\tif(typeof locale === \"string\"){\r\n\t\t\t\tvar localeObject = i18n.getLocale(locale);\r\n\t\t\t\tif(!localeObject){\r\n\t\t\t\t\tlocaleObject = i18n.getLocale(\"en\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.locale = localeObject;\r\n\t\t\t}else if(locale){\r\n\t\t\t\tif(!gantt.locale){\r\n\t\t\t\t\tgantt.locale = locale;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfor(var i in locale){\r\n\t\t\t\t\t\tif(locale[i] && typeof locale[i] === \"object\"){\r\n\t\t\t\t\t\t\tif(!gantt.locale[i]){\r\n\t\t\t\t\t\t\t\tgantt.locale[i] = {};\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tgantt.mixin(gantt.locale[i], locale[i], true);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tgantt.locale[i] = locale[i];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetLocale: i18n.getLocale\r\n\t};\r\n\tgantt.i18n.setLocale(\"en\");\r\n\treturn gantt;\r\n};","export default function(){\r\n\tvar services = {};\r\n\tfunction register (name, getter){\r\n\t\tservices[name] = getter;\r\n\t}\r\n\r\n\tfunction getService(name){\r\n\t\tif(!services[name]){\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn services[name]();\r\n\t}\r\n\r\n\tfunction dropService(name) {\r\n\t\tif (services[name]) {\r\n\t\t\tdelete services[name];\r\n\t\t}\r\n\t}\r\n\r\n\tvar servicesEnum = {};\r\n\r\n\treturn {\r\n\t\tservices: servicesEnum,\r\n\t\tsetService: register,\r\n\t\tgetService: getService,\r\n\t\tdropService: dropService,\r\n\t\tdestructor: function(){\r\n\t\t\tfor(var i in services){\r\n\t\t\t\tif(services[i]){\r\n\t\t\t\t\tvar service = services[i];\r\n\t\t\t\t\tif(service && service.destructor){\r\n\t\t\t\t\t\tservice.destructor();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tservices = null;\r\n\t\t}\r\n\t};\r\n};\r\n","import eventable from \"../../utils/eventable\";\r\nimport * as utils from \"../../utils/utils\";\r\nimport timeout from \"../../utils/timeout\";\r\nimport global from \"../../utils/global\";\r\nimport * as domHelpers from \"../ui/utils/dom_helpers\";\r\n\r\nexport default function(gantt){\r\n\r\n\tfunction copyDomEvent(e){\r\n\t\treturn {\r\n\t\t\ttarget: e.target || e.srcElement,\r\n\t\t\tpageX: e.pageX,\r\n\t\t\tpageY: e.pageY,\r\n\t\t\tclientX: e.clientX,\r\n\t\t\tclientY: e.clientY,\r\n\t\t\tmetaKey: e.metaKey,\r\n\t\t\tshiftKey: e.shiftKey,\r\n\t\t\tctrlKey: e.ctrlKey,\r\n\t\t\taltKey: e.altKey\r\n\t\t};\r\n\t}\r\n\r\n\tfunction DnD(obj, config) {\r\n\t\tthis._obj = obj;\r\n\t\tthis._settings = config || {};\r\n\t\teventable(this);\r\n\r\n\t\tvar inputMethods = this.getInputMethods();\r\n\r\n\t\tthis._drag_start_timer = null;\r\n\t\tgantt.attachEvent(\"onGanttScroll\", utils.bind(function (left, top) {\r\n\t\t\tthis.clearDragTimer();\r\n\t\t}, this));\r\n\r\n\t\tvar lastDown = 0;\r\n\t\tvar eventParams = {passive: false};\r\n\t\tfor(var i = 0; i < inputMethods.length; i++){\r\n\t\t\t(utils.bind(function(input){\r\n\r\n\t\t\t\tgantt.event(obj, input.down, utils.bind(function (e) {\r\n\t\t\t\t\tif(!input.accessor(e)){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (typeof e.button !== 'undefined' && e.button !== 0) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(config.preventDefault && config.selector && domHelpers.closest(e.target, config.selector)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (gantt.config.touch && e.timeStamp && e.timeStamp - lastDown < 300) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._settings.original_target = copyDomEvent(e);\r\n\r\n\t\t\t\t\tthis._settings.original_element_sizes = {\r\n\t\t\t\t\t\t...domHelpers.getRelativeEventPosition(e, domHelpers.getClosestSizedElement(obj)), \r\n\t\t\t\t\t\twidth: e.target.offsetWidth,\r\n\t\t\t\t\t\theight: e.target.offsetHeight\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (gantt.config.touch) {\r\n\t\t\t\t\t\tthis.clearDragTimer();\r\n\t\t\t\t\t\tthis._drag_start_timer = setTimeout(utils.bind(function () {\r\n\t\t\t\t\t\t\tif(gantt.getState().lightbox){\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.dragStart(obj, e, input);\r\n\t\t\t\t\t\t}, this), gantt.config.touch_drag);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.dragStart(obj, e, input);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, this), eventParams);\r\n\t\t\t\tvar eventElement = document.body;\r\n\t\t\t\tgantt.event(eventElement, input.up, utils.bind(function (e) {\r\n\t\t\t\t\tif(!input.accessor(e)){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.clearDragTimer();\r\n\t\t\t\t}, this), eventParams);\r\n\r\n\t\t\t}, this))(inputMethods[i]);\r\n\t\t}\r\n\t}\r\n\r\n\tDnD.prototype = {\r\n\t\ttraceDragEvents: function (domElement, inputMethod) {\r\n\t\t\tvar mousemove = utils.bind(function (e) {\r\n\t\t\t\treturn this.dragMove(domElement, e, inputMethod.accessor);\r\n\t\t\t}, this);\r\n\t\t\tutils.bind(function (e) {\r\n\t\t\t\treturn this.dragScroll(domElement, e);\r\n\t\t\t}, this);\r\n\r\n\t\t\tvar limited_mousemove = utils.bind(function (e) {\r\n\t\t\t\tif (this.config.started && utils.defined(this.config.updates_per_second)) {\r\n\t\t\t\t\tif (!timeout(this, this.config.updates_per_second))\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar dndActive = mousemove(e);\r\n\r\n\t\t\t\tif (dndActive) {\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\tif (e && e.preventDefault && e.cancelable){//e.cancelable condition - because navigator.vibrate is blocked by Chrome\r\n\t\t\t\t\t\t\te.preventDefault();//Cancel default action on DND\r\n\t\t\t\t\t\t} //Cancel default action on DND\r\n\t\t\t\t\t}catch (e){\r\n\t\t\t\t\t\t// just suppress the exception, nothing needed to be done here\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//e.cancelBubble = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dndActive;\r\n\t\t\t}, this);\r\n\t\t\tvar eventElement = domHelpers.getRootNode(gantt.$root);\r\n\t\t\tvar mousemoveContainer = this.config.mousemoveContainer || domHelpers.getRootNode(gantt.$root);\r\n\r\n\t\t\tvar eventParams = {passive: false};\r\n\t\t\tvar mouseup = utils.bind(function (e) {\r\n\t\t\t\tgantt.eventRemove(mousemoveContainer, inputMethod.move, limited_mousemove);\r\n\t\t\t\tgantt.eventRemove(eventElement, inputMethod.up, mouseup, eventParams);\r\n\t\t\t\treturn this.dragEnd(domElement);\r\n\t\t\t}, this);\r\n\r\n\t\t\tgantt.event(mousemoveContainer, inputMethod.move, limited_mousemove, eventParams);\r\n\t\t\tgantt.event(eventElement, inputMethod.up, mouseup, eventParams);\r\n\t\t},\r\n\t\tcheckPositionChange: function (pos) {\r\n\t\t\tvar diff_x = pos.x - this.config.pos.x;\r\n\t\t\tvar diff_y = pos.y - this.config.pos.y;\r\n\t\t\tvar distance = Math.sqrt(Math.pow(Math.abs(diff_x), 2) + Math.pow(Math.abs(diff_y), 2));\r\n\r\n\t\t\tif (distance > this.config.sensitivity) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tinitDnDMarker: function () {\r\n\t\t\t// create dnd placeholder and put it in dom\r\n\t\t\tvar marker = this.config.marker = document.createElement(\"div\");\r\n\t\t\tmarker.className = \"gantt_drag_marker\";\r\n\t\t\t// GS-1333: don't show any message when we resize grid columns\r\n\t\t\tmarker.innerHTML = \"\";\r\n\t\t\tdocument.body.appendChild(marker);\r\n\t\t},\r\n\t\tbackupEventTarget: function (domEvent, getEvent) {\r\n\t\t\tif (!gantt.config.touch) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// keep original event target in DOM in order to keep dnd on touchmove event\r\n\t\t\tvar e = getEvent(domEvent);\r\n\r\n\t\t\tvar el = e.target || e.srcElement;\r\n\t\t\tvar copy = el.cloneNode(true);\r\n\t\t\t//this.config.target.target = copy;\r\n\t\t\tthis.config.original_target = copyDomEvent(e);\r\n\t\t\tthis.config.original_target.target = copy;\r\n\t\t\tthis.config.backup_element = el;\r\n\t\t\tel.parentNode.appendChild(copy);\r\n\r\n\t\t\tel.style.display = \"none\";\r\n\t\t\tvar mousemoveContainer = this.config.mousemoveContainer || document.body;\r\n\t\t\tmousemoveContainer.appendChild(el);\r\n\t\t},\r\n\t\tgetInputMethods: function () {\r\n\t\t\t// bind actions to browser events\r\n\t\t\tvar inputMethods = [];\r\n\r\n\t\t\tinputMethods.push({\r\n\t\t\t\t\"move\": \"mousemove\",\r\n\t\t\t\t\"down\": \"mousedown\",\r\n\t\t\t\t\"up\": \"mouseup\",\r\n\t\t\t\t\"accessor\": function (e) {\r\n\t\t\t\t\treturn e;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (gantt.config.touch) {\r\n\r\n\t\t\t\tvar touchEventsSupported = true;\r\n\t\t\t\ttry{\r\n\t\t\t\t\tdocument.createEvent(\"TouchEvent\");\r\n\t\t\t\t}catch (e){\r\n\t\t\t\t\ttouchEventsSupported = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(touchEventsSupported){\r\n\t\t\t\t\tinputMethods.push({\r\n\t\t\t\t\t\t\"move\": \"touchmove\",\r\n\t\t\t\t\t\t\"down\": \"touchstart\",\r\n\t\t\t\t\t\t\"up\": \"touchend\",\r\n\t\t\t\t\t\t\"accessor\": function (ev) {\r\n\t\t\t\t\t\t\tif (ev.touches && ev.touches.length > 1) return null;\r\n\t\t\t\t\t\t\tif (ev.touches[0])\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\ttarget: document.elementFromPoint(ev.touches[0].clientX, ev.touches[0].clientY),\r\n\t\t\t\t\t\t\t\t\tpageX: ev.touches[0].pageX,\r\n\t\t\t\t\t\t\t\t\tpageY: ev.touches[0].pageY,\r\n\t\t\t\t\t\t\t\t\tclientX: ev.touches[0].clientX,\r\n\t\t\t\t\t\t\t\t\tclientY: ev.touches[0].clientY\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\treturn ev;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else if(global.navigator.pointerEnabled){\r\n\t\t\t\t\tinputMethods.push({\r\n\t\t\t\t\t\t\"move\": \"pointermove\",\r\n\t\t\t\t\t\t\"down\": \"pointerdown\",\r\n\t\t\t\t\t\t\"up\": \"pointerup\",\r\n\t\t\t\t\t\t\"accessor\": function (ev) {\r\n\t\t\t\t\t\t\tif (ev.pointerType == \"mouse\") return null;\r\n\t\t\t\t\t\t\treturn ev;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}else if (global.navigator.msPointerEnabled){\r\n\t\t\t\t\tinputMethods.push({\r\n\t\t\t\t\t\t\"move\": \"MSPointerMove\",\r\n\t\t\t\t\t\t\"down\": \"MSPointerDown\",\r\n\t\t\t\t\t\t\"up\": \"MSPointerUp\",\r\n\t\t\t\t\t\t\"accessor\": function (ev) {\r\n\t\t\t\t\t\t\tif (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\r\n\t\t\t\t\t\t\treturn ev;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn inputMethods;\r\n\t\t},\r\n\t\tclearDragTimer: function () {\r\n\t\t\tif (this._drag_start_timer) {\r\n\t\t\t\tclearTimeout(this._drag_start_timer);\r\n\t\t\t\tthis._drag_start_timer = null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tdragStart: function (obj, e, inputMethod) {\r\n\t\t\tif (this.config && this.config.started) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.config = {\r\n\t\t\t\tobj: obj,\r\n\t\t\t\tmarker: null,\r\n\t\t\t\tstarted: false,\r\n\t\t\t\tpos: this.getPosition(e),\r\n\t\t\t\tsensitivity: 4\r\n\t\t\t};\r\n\t\t\tif (this._settings)\r\n\t\t\t\tutils.mixin(this.config, this._settings, true);\r\n\r\n\r\n\t\t\tthis.traceDragEvents(obj, inputMethod);\r\n\r\n\t\t\tgantt._prevent_touch_scroll = true;\r\n\t\t\tdocument.body.className += \" gantt_noselect\";\r\n\r\n\t\t\tif (gantt.config.touch) {\r\n\t\t\t\tthis.dragMove(obj, e, inputMethod.accessor);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tdragMove: function (obj, e, getEvent) {\r\n\t\t\tvar source = getEvent(e);\r\n\t\t\tif (!source) return false;\r\n\r\n\t\t\tif (!this.config.marker && !this.config.started) {\r\n\t\t\t\tvar pos = this.getPosition(source);\r\n\r\n\t\t\t\tif (gantt.config.touch || this.checkPositionChange(pos)) {\r\n\t\t\t\t\t// real drag starts here,\r\n\t\t\t\t\t// when user moves mouse at first time after onmousedown\r\n\t\t\t\t\tthis.config.started = true;\r\n\t\t\t\t\tthis.config.ignore = false;\r\n\t\t\t\t\tgantt._touch_drag = true;\r\n\t\t\t\t\tif (this.callEvent(\"onBeforeDragStart\", [obj, this.config.original_target]) === false) {\r\n\t\t\t\t\t\tthis.config.ignore = true;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.backupEventTarget(e, getEvent);\r\n\t\t\t\t\tthis.initDnDMarker();\r\n\t\t\t\t\tgantt._touch_feedback();\r\n\t\t\t\t\tthis.callEvent(\"onAfterDragStart\", [obj, this.config.original_target]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.config.ignore = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.config.ignore) {\r\n\t\t\t\t// GS-1279 Gantt crashes on Mobile Firefox after starting to create a link and moving finger outisde the page.\r\n\t\t\t\tif (e.targetTouches && !source.target) return;\r\n\t\t\t\t\r\n\t\t\t\tsource.pos = this.getPosition(source);\r\n\t\t\t\tthis.config.marker.style.left = source.pos.x + \"px\";\r\n\t\t\t\tthis.config.marker.style.top = source.pos.y + \"px\";\r\n\t\t\t\tthis.callEvent(\"onDragMove\", [obj, source]);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tdragEnd: function (obj) {\r\n\t\t\tvar target = this.config.backup_element;\r\n\t\t\tif (target && target.parentNode) {\r\n\t\t\t\ttarget.parentNode.removeChild(target);\r\n\t\t\t}\r\n\t\t\tgantt._prevent_touch_scroll = false;\r\n\t\t\tif (this.config.marker) {\r\n\t\t\t\tthis.config.marker.parentNode.removeChild(this.config.marker);\r\n\t\t\t\tthis.config.marker = null;\r\n\r\n\t\t\t\tthis.callEvent(\"onDragEnd\", []);\r\n\t\t\t}\r\n\t\t\tthis.config.started = false;\r\n\t\t\tgantt._touch_drag = false;\r\n\t\t\tdocument.body.className = document.body.className.replace(\" gantt_noselect\", \"\");\r\n\t\t},\r\n\r\n\t\tgetPosition: function (e) {\r\n\t\t\tvar x = 0, y = 0;\r\n\t\t\tif (e.pageX || e.pageY) {\r\n\t\t\t\tx = e.pageX;\r\n\t\t\t\ty = e.pageY;\r\n\t\t\t} else if (e.clientX || e.clientY) {\r\n\t\t\t\tx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\r\n\t\t\t\ty = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\r\n\t\t\t}\r\n\t\t\treturn {x: x, y: y};\r\n\t\t}\r\n\t};\r\n\r\n\treturn DnD;\r\n};\r\n","export default function(gantt) {\r\n\r\n\tvar regTemplates = {};\r\n\r\n\tfunction initTemplate(name, initial, template_name) {\r\n\t\ttemplate_name = template_name || name;\r\n\t\tvar config = gantt.config,\r\n\t\t\ttemplates = gantt.templates;\r\n\r\n\t\tif (gantt.config[name] && regTemplates[template_name] != config[name]) {\r\n\t\t\tif (!(initial && templates[template_name])) {\r\n\t\t\t\ttemplates[template_name] = gantt.date.date_to_str(config[name]);\r\n\t\t\t\tregTemplates[template_name] = config[name];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction initTemplates() {\r\n\t\tvar labels = gantt.locale.labels;\r\n\t\tlabels.gantt_save_btn = labels.icon_save;\r\n\t\tlabels.gantt_cancel_btn = labels.icon_cancel;\r\n\t\tlabels.gantt_delete_btn = labels.icon_delete;\r\n\r\n\r\n\t\tvar date = gantt.date;\r\n\r\n\t\t//build configuration based templates\r\n\t\tvar d = date.date_to_str;\r\n\t\tvar c = gantt.config;\r\n\t\tvar format_date = d(c.xml_date || c.date_format, c.server_utc);\r\n\t\tvar parse_date = date.str_to_date(c.xml_date || c.date_format, c.server_utc);\r\n\r\n\t\tinitTemplate(\"date_scale\", true, undefined, gantt.config, gantt.templates);\r\n\t\tinitTemplate(\"date_grid\", true, \"grid_date_format\", gantt.config, gantt.templates);\r\n\t\tinitTemplate(\"task_date\", true, undefined, gantt.config, gantt.templates);\r\n\r\n\t\tgantt.mixin(gantt.templates, {\r\n\t\t\txml_format: undefined, // deprecated\r\n\t\t\tformat_date: format_date,\r\n\r\n\t\t\txml_date: undefined, // deprecated\r\n\t\t\tparse_date: parse_date,\r\n\r\n\t\t\tprogress_text: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tgrid_header_class: function (column, config) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\r\n\t\t\ttask_text: function (start, end, task) {\r\n\t\t\t\treturn task.text;\r\n\t\t\t},\r\n\t\t\ttask_class: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttask_end_date: function (date) {\r\n\t\t\t\treturn gantt.templates.task_date(date);\r\n\t\t\t},\r\n\t\t\tgrid_row_class: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttask_row_class: function (start, end, task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttimeline_cell_class: function (item, date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\ttimeline_cell_content: function (item, date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tscale_cell_class: function (date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tscale_row_class: function (date) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\r\n\t\t\tgrid_indent: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_folder: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_file: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_open: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tgrid_blank: function (item) {\r\n\t\t\t\treturn \"
\";\r\n\t\t\t},\r\n\t\t\tdate_grid: function (date, item, column) {\r\n\t\t\t\tif (item && gantt.isUnscheduledTask(item) && gantt.config.show_unscheduled) {\r\n\t\t\t\t\treturn gantt.templates.task_unscheduled_time(item);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gantt.templates.grid_date_format(date, column);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\ttask_time: function (start, end, ev) {\r\n\t\t\t\tif (gantt.isUnscheduledTask(ev) && gantt.config.show_unscheduled) {\r\n\t\t\t\t\treturn gantt.templates.task_unscheduled_time(ev);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gantt.templates.task_date(start) + \" - \" + gantt.templates.task_end_date(end);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\ttask_unscheduled_time: function (task) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\r\n\t\t\ttime_picker: d(c.time_picker),\r\n\t\t\tlink_class: function (link) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t},\r\n\t\t\tlink_description: function (link) {\r\n\t\t\t\tvar from = gantt.getTask(link.source),\r\n\t\t\t\t\tto = gantt.getTask(link.target);\r\n\r\n\t\t\t\treturn \"\" + from.text + \" – \" + to.text + \" \";\r\n\t\t\t},\r\n\r\n\t\t\tdrag_link: function (from, from_start, to, to_start) {\r\n\t\t\t\tfrom = gantt.getTask(from);\r\n\t\t\t\tvar labels = gantt.locale.labels;\r\n\r\n\t\t\t\tvar text = \"\" + from.text + \" \" + (from_start ? labels.link_start : labels.link_end) + \" \";\r\n\t\t\t\tif (to) {\r\n\t\t\t\t\tto = gantt.getTask(to);\r\n\t\t\t\t\ttext += \" \" + to.text + \" \" + (to_start ? labels.link_start : labels.link_end) + \" \";\r\n\t\t\t\t}\r\n\t\t\t\treturn text;\r\n\t\t\t},\r\n\t\t\tdrag_link_class: function (from, from_start, to, to_start) {\r\n\t\t\t\tvar add = \"\";\r\n\r\n\t\t\t\tif (from && to) {\r\n\t\t\t\t\tvar allowed = gantt.isLinkAllowed(from, to, from_start, to_start);\r\n\t\t\t\t\tadd = \" \" + (allowed ? \"gantt_link_allow\" : \"gantt_link_deny\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn \"gantt_link_tooltip\" + add;\r\n\t\t\t},\r\n\r\n\t\t\t/* used for aria-labels of bar elements and for tooltip.js */\r\n\t\t\ttooltip_date_format: date.date_to_str(\"%Y-%m-%d\"),\r\n\t\t\ttooltip_text: function (start, end, event) {\r\n\t\t\t\treturn `Task: ${event.text}
\r\n\t\t\t\tStart date: ${gantt.templates.tooltip_date_format(start)}
\r\n\t\t\t\tEnd date: ${gantt.templates.tooltip_date_format(end)}
`;\r\n\t\t\t},\r\n\t\t\tbaseline_text: function (task, baseline, index) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn {\r\n\t\tinitTemplates: initTemplates,\r\n\t\tinitTemplate: initTemplate\r\n\t};\r\n\r\n};","import * as utils from \"../../utils/utils\";\r\nimport facadeFactory from \"./../facades/datastore\";\r\nimport calculateScaleRange from \"../gantt_data_range\";\r\nimport isPlaceholderTask from \"../../utils/placeholder_task\";\r\n\r\nimport treeHelper from \"../../utils/task_tree_helpers\";\r\n\r\nfunction initDataStores(gantt){\r\n\r\n\tvar facade = facadeFactory.create();\r\n\tutils.mixin(gantt, facade);\r\n\tvar tasksStore = gantt.createDatastore({\r\n\t\tname: \"task\",\r\n\t\ttype: \"treeDatastore\",\r\n\t\trootId: function() { return gantt.config.root_id; },\r\n\t\tinitItem: utils.bind(_init_task, gantt),\r\n\t\tgetConfig: function() { return gantt.config; }\r\n\t});\r\n\r\n\tvar linksStore = gantt.createDatastore({\r\n\t\tname: \"link\",\r\n\t\tinitItem: utils.bind(_init_link, gantt)\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\ttasksStore.destructor();\r\n\t\tlinksStore.destructor();\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onLinkValidation\", function(link){\r\n\t\tif(gantt.isLinkExists(link.id) || link.id === \"predecessor_generated\"){\r\n\t\t\t// link was already added into gantt\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar source = gantt.getTask(link.source);\r\n\t\tvar taskLinks = source.$source;\r\n\t\tfor (var i = 0; i < taskLinks.length; i++) {\r\n\t\t\tvar existingLink = gantt.getLink(taskLinks[i]);\r\n\r\n\t\t\tvar sourceMatch = link.source == existingLink.source;\r\n\t\t\tvar targetMatch = link.target == existingLink.target;\r\n\t\t\tvar typeMatch = link.type == existingLink.type;\r\n\r\n\t\t\t// prevent creating duplicated links from the UI\r\n\t\t\tif (sourceMatch && targetMatch && typeMatch) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onBeforeRefreshAll\", function(){\r\n\r\n\t\t// GS-2170 do not recalculate indexes and dates as the event will be called later in the onStoreUpdate event\r\n\t\tif (tasksStore._skipTaskRecalculation){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar order = tasksStore.getVisibleItems();\r\n\r\n\t\tfor(var i=0; i < order.length; i++){\r\n\t\t\tvar item = order[i];\r\n\t\t\titem.$index = i;\r\n\t\t\titem.$local_index = gantt.getTaskIndex(item.id);\r\n\t\t\tgantt.resetProjectDates(item);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onFilterItem\", function(id, task) {\r\n\t\tif (gantt.config.show_tasks_outside_timescale) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar min = null, max = null;\r\n\t\tif (gantt.config.start_date && gantt.config.end_date) {\r\n\t\t\tif (gantt._isAllowedUnscheduledTask(task)) return true;\r\n\t\t\tmin = gantt.config.start_date.valueOf();\r\n\t\t\tmax = gantt.config.end_date.valueOf();\r\n\r\n\t\t\tif (+task.start_date > max || +task.end_date < +min)\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onIdChange\", function(oldId, newId){\r\n\t\tgantt._update_flags(oldId, newId);\r\n\r\n\t\tvar changedTask = gantt.getTask(newId);\r\n\t\tif(!tasksStore.isSilent()){\r\n\t\t\tif(changedTask.$split_subtask || changedTask.rollup){\r\n\t\t\t\tgantt.eachParent(function(parent){\r\n\t\t\t\t\tgantt.refreshTask(parent.id);\r\n\t\t\t\t}, newId);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onAfterUpdate\", function(id){\r\n\t\tgantt._update_parents(id);\r\n\t\tif(gantt.getState(\"batchUpdate\").batch_update){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tvar task = tasksStore.getItem(id);\r\n\t\tif (!task.$source) task.$source = [];\r\n\t\tfor (var i = 0; i < task.$source.length; i++) {\r\n\t\t\tlinksStore.refresh(task.$source[i]);\r\n\t\t}\r\n\t\tif (!task.$target) task.$target = [];\r\n\t\tfor (var i = 0; i < task.$target.length; i++) {\r\n\t\t\tlinksStore.refresh(task.$target[i]);\r\n\t\t}\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onBeforeItemMove\", function(sid, parent, tindex){\r\n\t\t// GS-125. Don't allow users to move the placeholder task\r\n\t\tif (isPlaceholderTask(sid, gantt, tasksStore)){\r\n\t\t\t//eslint-disable-next-line\r\n\t\t\tconsole.log(\"The placeholder task cannot be moved to another position.\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onAfterItemMove\", function(sid, parent, tindex){\r\n\t\tvar source = gantt.getTask(sid);\r\n\r\n\t\tif(this.getNextSibling(sid) !== null){\r\n\t\t\tsource.$drop_target = this.getNextSibling(sid);\r\n\t\t} else if(this.getPrevSibling(sid) !== null){\r\n\t\t\tsource.$drop_target = \"next:\" + this.getPrevSibling(sid);\r\n\t\t}else{\r\n\t\t\tsource.$drop_target = \"next:null\";\r\n\t\t}\r\n\r\n\t});\r\n\r\n\ttasksStore.attachEvent(\"onStoreUpdated\", function(id, item, action){\r\n\t\tif(action == \"delete\"){\r\n\t\t\tgantt._update_flags(id, null);\r\n\t\t}\r\n\r\n\t\tvar state = gantt.$services.getService(\"state\");\r\n\t\tif(state.getState(\"batchUpdate\").batch_update){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(gantt.config.fit_tasks && action !== \"paint\"){\r\n\t\t\tvar oldState = gantt.getState();\r\n\t\t\tcalculateScaleRange(gantt);\r\n\t\t\tvar newState = gantt.getState();\r\n\r\n\t\t\t//this._init_tasks_range();\r\n\t\t\tif (+oldState.min_date != +newState.min_date || +oldState.max_date != +newState.max_date) {\r\n\t\t\t\tgantt.render();\r\n\r\n\t\t\t\tgantt.callEvent(\"onScaleAdjusted\", []);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(action == \"add\" || action == \"move\" || action == \"delete\"){\r\n\t\t\tif(gantt.$layout){\r\n\t\t\t\t// GS-2170. Do not recalculate the indexes and dates of other tasks in the\r\n\t\t\t\t// onBeforeResize layout event, but do it later. If lightbox is opened, it will\r\n\t\t\t\t// trigger the refreshData, so the indexes and dates will be recalculated there\r\n\t\t\t\tif (this.$config.name == \"task\" && (action == \"add\" || action == \"delete\")){\r\n\t\t\t\t\tif (this._skipTaskRecalculation != \"lightbox\"){\r\n\t\t\t\t\t\tthis._skipTaskRecalculation = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tgantt.$layout.resize();\r\n\t\t\t}\r\n\r\n\t\t}else if(!id){\r\n\t\t\tlinksStore.refresh();\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tlinksStore.attachEvent(\"onAfterAdd\", function(id, link){\r\n\t\tsync_link(link);\r\n\t});\r\n\tlinksStore.attachEvent(\"onAfterUpdate\", function(id, link){\r\n\t\tsync_links();\r\n\t});\r\n\tlinksStore.attachEvent(\"onAfterDelete\", function(id, link){\r\n\t\tsync_link_delete(link);\r\n\t});\r\n\tlinksStore.attachEvent(\"onAfterSilentDelete\", function(id, link){\r\n\t\tsync_link_delete(link);\r\n\t});\r\n\tlinksStore.attachEvent(\"onBeforeIdChange\", function(oldId, newId){\r\n\t\tsync_link_delete(gantt.mixin({id:oldId}, gantt.$data.linksStore.getItem(newId)));\r\n\t\tsync_link(gantt.$data.linksStore.getItem(newId));\r\n\t});\r\n\r\n\tfunction checkLinkedTaskVisibility(taskId){\r\n\t\tvar isVisible = gantt.isTaskVisible(taskId);\r\n\t\tif(!isVisible && gantt.isTaskExists(taskId)){\r\n\t\t\tvar parent = gantt.getParent(taskId);\r\n\t\t\tif(gantt.isTaskExists(parent) && gantt.isTaskVisible(parent)){\r\n\t\t\t\tparent = gantt.getTask(parent);\r\n\t\t\t\tif(gantt.isSplitTask(parent)){\r\n\t\t\t\t\tisVisible = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn isVisible;\r\n\t}\r\n\r\n\tlinksStore.attachEvent(\"onFilterItem\", function(id, link){\r\n\t\tif (!gantt.config.show_links) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar sourceVisible = checkLinkedTaskVisibility(link.source);\r\n\t\tvar targetVisible = checkLinkedTaskVisibility(link.target);\r\n\r\n\t\tif (!(sourceVisible && targetVisible) ||\r\n\t\t\tgantt._isAllowedUnscheduledTask(gantt.getTask(link.source)) || gantt._isAllowedUnscheduledTask(gantt.getTask(link.target)))\r\n\t\t\treturn false;\r\n\r\n\t\treturn gantt.callEvent(\"onBeforeLinkDisplay\", [id, link]);\r\n\t});\r\n\r\n\r\n\t(function(){\r\n\t\t// delete all connected links after task is deleted\r\n\t\tvar deletedLinks = {};\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskDelete\", function(id, item){\r\n\t\t\tdeletedLinks[id] = treeHelper.getSubtreeLinks(gantt, id);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onAfterTaskDelete\", function(id, item) {\r\n\t\t\tif(deletedLinks[id]){\r\n\t\t\t\tgantt.$data.linksStore.silent(function(){\r\n\t\t\t\t\tfor(var i in deletedLinks[id]){\r\n\t\t\t\t\t\tif (gantt.isLinkExists(i)){\r\n\t\t\t\t\t\t\tgantt.$data.linksStore.removeItem(i);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsync_link_delete(deletedLinks[id][i]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdeletedLinks[id] = null;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t})();\r\n\r\n\tgantt.attachEvent(\"onAfterLinkDelete\", function(id, link) {\r\n\t\tgantt.refreshTask(link.source);\r\n\t\tgantt.refreshTask(link.target);\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onParse\", sync_links);\r\n\r\n\tmapEvents({\r\n\t\tsource: linksStore,\r\n\t\ttarget: gantt,\r\n\t\tevents:{\r\n\t\t\t\"onItemLoading\":\"onLinkLoading\",\r\n\t\t\t\"onBeforeAdd\":\"onBeforeLinkAdd\",\r\n\t\t\t\"onAfterAdd\":\"onAfterLinkAdd\",\r\n\t\t\t\"onBeforeUpdate\":\"onBeforeLinkUpdate\",\r\n\t\t\t\"onAfterUpdate\":\"onAfterLinkUpdate\",\r\n\t\t\t\"onBeforeDelete\":\"onBeforeLinkDelete\",\r\n\t\t\t\"onAfterDelete\":\"onAfterLinkDelete\",\r\n\t\t\t\"onIdChange\":\"onLinkIdChange\"\r\n\t\t}\r\n\t});\r\n\r\n\tmapEvents({\r\n\t\tsource: tasksStore,\r\n\t\ttarget: gantt,\r\n\t\tevents:{\r\n\t\t\t\"onItemLoading\":\"onTaskLoading\",\r\n\t\t\t\"onBeforeAdd\":\"onBeforeTaskAdd\",\r\n\t\t\t\"onAfterAdd\":\"onAfterTaskAdd\",\r\n\t\t\t\"onBeforeUpdate\":\"onBeforeTaskUpdate\",\r\n\t\t\t\"onAfterUpdate\":\"onAfterTaskUpdate\",\r\n\t\t\t\"onBeforeDelete\":\"onBeforeTaskDelete\",\r\n\t\t\t\"onAfterDelete\":\"onAfterTaskDelete\",\r\n\t\t\t\"onIdChange\":\"onTaskIdChange\",\r\n\t\t\t\"onBeforeItemMove\":\"onBeforeTaskMove\",\r\n\t\t\t\"onAfterItemMove\":\"onAfterTaskMove\",\r\n\t\t\t\"onFilterItem\":\"onBeforeTaskDisplay\",\r\n\t\t\t\"onItemOpen\":\"onTaskOpened\",\r\n\t\t\t\"onItemClose\":\"onTaskClosed\",\r\n\t\t\t\"onBeforeSelect\":\"onBeforeTaskSelected\",\r\n\t\t\t\"onAfterSelect\":\"onTaskSelected\",\r\n\t\t\t\"onAfterUnselect\":\"onTaskUnselected\"\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.$data = {\r\n\t\ttasksStore: tasksStore,\r\n\t\tlinksStore: linksStore\r\n\t};\r\n\r\n\tfunction sync_link(link){\r\n\t\tif(gantt.isTaskExists(link.source)){\r\n\t\t\tvar sourceTask = gantt.getTask(link.source);\r\n\t\t\tsourceTask.$source = sourceTask.$source || [];\r\n\t\t\tsourceTask.$source.push(link.id);\r\n\t\t}\r\n\t\tif(gantt.isTaskExists(link.target)){\r\n\t\t\tvar targetTask = gantt.getTask(link.target);\r\n\t\t\ttargetTask.$target = targetTask.$target || [];\r\n\t\t\ttargetTask.$target.push(link.id);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction sync_link_delete(link){\r\n\t\tif(gantt.isTaskExists(link.source)){\r\n\t\t\tvar sourceTask = gantt.getTask(link.source);\r\n\t\t\tfor(var i = 0; i < sourceTask.$source.length; i++){\r\n\t\t\t\tif(sourceTask.$source[i] == link.id){\r\n\t\t\t\t\tsourceTask.$source.splice(i, 1);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(gantt.isTaskExists(link.target)){\r\n\t\t\tvar targetTask = gantt.getTask(link.target);\r\n\t\t\tfor(var i = 0; i < targetTask.$target.length; i++){\r\n\t\t\t\tif(targetTask.$target[i] == link.id){\r\n\t\t\t\t\ttargetTask.$target.splice(i, 1);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction sync_links() {\r\n\t\tvar task = null;\r\n\t\tvar tasks = gantt.$data.tasksStore.getItems();\r\n\r\n\t\tfor(var i = 0, len = tasks.length; i < len; i++){\r\n\t\t\ttask = tasks[i];\r\n\t\t\ttask.$source = [];\r\n\t\t\ttask.$target = [];\r\n\t\t}\r\n\r\n\t\tvar links = gantt.$data.linksStore.getItems();\r\n\t\tfor (var i = 0, len = links.length; i < len; i++) {\r\n\r\n\t\t\tvar link = links[i];\r\n\t\t\tsync_link(link);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction mapEvents(conf){\r\n\t\tvar mapFrom = conf.source;\r\n\t\tvar mapTo = conf.target;\r\n\t\tfor(var i in conf.events){\r\n\t\t\t(function(sourceEvent, targetEvent){\r\n\t\t\t\tmapFrom.attachEvent(sourceEvent, function(){\r\n\t\t\t\t\treturn mapTo.callEvent(targetEvent, Array.prototype.slice.call(arguments));\r\n\t\t\t\t}, targetEvent);\r\n\t\t\t})(i, conf.events[i]);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _init_task(task) {\r\n\t\tif (!this.defined(task.id))\r\n\t\t\ttask.id = this.uid();\r\n\r\n\t\tif (task.start_date)\r\n\t\t\ttask.start_date = gantt.date.parseDate(task.start_date, \"parse_date\");\r\n\t\tif (task.end_date)\r\n\t\t\ttask.end_date = gantt.date.parseDate(task.end_date, \"parse_date\");\r\n\r\n\r\n\t\tvar duration = null;\r\n\t\tif (task.duration || task.duration === 0) {\r\n\t\t\ttask.duration = duration = task.duration * 1;\r\n\t\t}\r\n\r\n\t\tif (duration) {\r\n\t\t\tif (task.start_date && !task.end_date) {\r\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\r\n\t\t\t} else if (!task.start_date && task.end_date) {\r\n\t\t\t\ttask.start_date = this.calculateEndDate({\r\n\t\t\t\t\tstart_date: task.end_date,\r\n\t\t\t\t\tduration: -task.duration,\r\n\t\t\t\t\ttask: task\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t//task.$calculate_duration = false;\r\n\t\t}\r\n\r\n\t\tif (gantt.config.deadlines !== false && task.deadline){\r\n\t\t\ttask.deadline = gantt.date.parseDate(task.deadline, \"parse_date\");\r\n\t\t}\r\n\r\n\t\ttask.progress = Number(task.progress) || 0;\r\n\r\n\t\tif (this._isAllowedUnscheduledTask(task)) {\r\n\t\t\tthis._set_default_task_timing(task);\r\n\t\t}\r\n\t\tthis._init_task_timing(task);\r\n\t\tif (task.start_date && task.end_date)\r\n\t\t\tthis.correctTaskWorkTime(task);\r\n\r\n\t\ttask.$source = [];\r\n\t\ttask.$target = [];\r\n\r\n\t\tvar originalTask = this.$data.tasksStore.getItem(task.id);\r\n\t\tif (originalTask && !utils.defined(task.open)) {\r\n\t\t\t// if a task with the same id is already in the gantt and the new object doesn't specify the `open` state -\r\n\t\t\t// restore the `open` state we already have in the chart\r\n\t\t\ttask.$open = originalTask.$open;\r\n\t\t}\r\n\r\n\t\tif (task.parent === undefined) {\r\n\t\t\ttask.parent = this.config.root_id;\r\n\t\t}\r\n\t\treturn task;\r\n\t}\r\n\r\n\tfunction _init_link(link) {\r\n\t\tif (!this.defined(link.id))\r\n\t\t\tlink.id = this.uid();\r\n\t\treturn link;\r\n\t}\r\n}\r\n\r\n\r\nexport default initDataStores;\r\n","import batch_update from \"./batch_update\";\r\nimport wbs from \"./wbs\";\r\nimport resources from \"./resources\";\r\nimport resource_assignments from \"./resource_assignments\";\r\nimport new_task_placeholder from \"./new_task_placeholder\";\r\nimport auto_task_types from \"./auto_task_types\";\r\nimport formatters from \"./formatters\";\r\nimport empty_state_screen from \"./empty_state_screen\";\r\nimport baselines from \"./baselines\";\r\n\r\nexport default function(gantt){\r\n\tif(!gantt.ext){\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tvar modules = [\r\n\t\tbatch_update,\r\n\t\twbs,\r\n\t\tresources,\r\n\t\tresource_assignments,\r\n\t\tnew_task_placeholder,\r\n\t\tauto_task_types,\r\n\t\tformatters,\r\n\t\tempty_state_screen,\r\n\t\tbaselines\r\n\t];\r\n\r\n\tfor(var i = 0; i < modules.length; i++){\r\n\t\tif(modules[i])\r\n\t\t\tmodules[i](gantt);\r\n\t}\r\n};","export default function(gantt) {\r\n\tgantt.getGridColumn = function(name) {\r\n\t\tvar columns = gantt.config.columns;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tif (columns[i].name == name)\r\n\t\t\t\treturn columns[i];\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\tgantt.getGridColumns = function() {\r\n\t\treturn gantt.config.columns.slice();\r\n\t};\r\n};","export default function(gantt) {\r\n\tgantt.isReadonly = function (item) {\r\n\r\n\t\tif((typeof item == \"number\" || typeof item == \"string\") && gantt.isTaskExists(item)){\r\n\t\t\titem = gantt.getTask(item);\r\n\t\t}\r\n\t\tif (item && item[this.config.editable_property]) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn (item && item[this.config.readonly_property]) || this.config.readonly;\r\n\t\t}\r\n\t};\r\n};","import CalendarManager from \"./calendar_manager\";\r\nimport TimeCalculator from \"./time_calculator\";\r\nimport worktimeFacadeFactory from \"../facades/worktime_calendars\";\r\nimport * as utils from \"../../utils/utils\";\r\n\r\nexport default function (gantt) {\r\n\tvar manager = new CalendarManager(gantt),\r\n\ttimeCalculator = new TimeCalculator(manager);\r\n\tvar facade = worktimeFacadeFactory.create(manager, timeCalculator);\r\n\tutils.mixin(gantt, facade);\r\n};\r\n","export default function(gantt) {\r\n\r\n\tgantt.getTaskType = function (type) {\r\n\t\treturn \"task\";\r\n\t};\r\n};","/*\r\n reuse results of functions that can be recalculated during rendering\r\n greatly increases the rendering speed when critical path enabled\r\n Sample - 94_dev/critical_path.html\r\n\r\n */\r\nexport default function(gantt){\r\n\r\ngantt._cached_functions = {\r\n\tcache: {},\r\n\tmode: false,\r\n\tcritical_path_mode: false,\r\n\twrap_methods : function(methods, object){\r\n\t\tif(object._prefetch_originals){\r\n\t\t\tfor(var i in object._prefetch_originals){\r\n\t\t\t\tobject[i] = object._prefetch_originals[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\tobject._prefetch_originals = {};\r\n\t\tfor(var i = 0; i < methods.length; i++)\r\n\t\t\tthis.prefetch(methods[i], object);\r\n\r\n\t},\r\n\tprefetch : function(methodname, host){\r\n\t\tvar original = host[methodname];\r\n\t\tif(original){\r\n\t\t\tvar optimizer = this;\r\n\r\n\t\t\thost._prefetch_originals[methodname] = original;\r\n\t\t\thost[methodname] = function get_prefetched_value(){\r\n\r\n\t\t\t\tvar argumentsArray = new Array(arguments.length);\r\n\t\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\r\n\t\t\t\t\targumentsArray[i] = arguments[i];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(optimizer.active){\r\n\t\t\t\t\tvar args = optimizer.get_arguments_hash(Array.prototype.slice.call(argumentsArray));\r\n\t\t\t\t\tif(!optimizer.cache[methodname]){\r\n\t\t\t\t\t\toptimizer.cache[methodname] = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar cached_values = optimizer.cache[methodname];\r\n\r\n\t\t\t\t\tif(optimizer.has_cached_value(cached_values, args)){\r\n\t\t\t\t\t\treturn optimizer.get_cached_value(cached_values, args);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tvar value = original.apply(this, argumentsArray);\r\n\t\t\t\t\t\toptimizer.cache_value(cached_values, args, value);\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn original.apply(this, argumentsArray);\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn original;\r\n\t},\r\n\tcache_value: function(cache, arguments_hash, value){\r\n\t\tif(this.is_date(value))\r\n\t\t\tvalue = new Date(value);\r\n\t\tcache[arguments_hash] = value;\r\n\t},\r\n\thas_cached_value: function(cache, arguments_hash){\r\n\t\treturn cache.hasOwnProperty(arguments_hash);\r\n\t},\r\n\tget_cached_value: function(cache, arguments_hash){\r\n\t\tvar data = cache[arguments_hash];\r\n\r\n\t\t//for cached dates - return copy\r\n\t\tif(this.is_date(data)){\r\n\t\t\tdata = new Date(data);\r\n\t\t}\r\n\t\treturn data;\r\n\t},\r\n\tis_date: function(value){\r\n\t\treturn (value && value.getUTCDate);\r\n\t},\r\n\tget_arguments_hash:function(args){\r\n\t\tvar values = [];\r\n\t\tfor(var i = 0; i < args.length; i++){\r\n\t\t\tvalues.push(this.stringify_argument(args[i]));\r\n\t\t}\r\n\t\treturn \"(\" + values.join(\";\") + \")\";\r\n\t},\r\n\tstringify_argument: function(value){\r\n\t\t//expecting task or link, or any other data entries, dates and primitive values\r\n\t\tvar ret = \"\";\r\n\t\tif(value.id){\r\n\t\t\tret = value.id;\r\n\t\t}else if(this.is_date(value)){\r\n\t\t\tret = value.valueOf();\r\n\t\t}else{\r\n\t\t\tret = value;\r\n\t\t}\r\n\t\treturn ret + \"\";\r\n\t},\r\n\tactivate: function(){\r\n\t\tthis.clear();\r\n\t\tthis.active = true;\r\n\t},\r\n\tdeactivate: function(){\r\n\t\tthis.clear();\r\n\t\tthis.active = false;\r\n\t},\r\n\tclear: function(){\r\n\t\tthis.cache = {};\r\n\t},\r\n\r\n\tsetup: function(gantt){\r\n\t\tvar override_gantt = [];\r\n\r\n\t\tvar gantt_methods = [\r\n\t\t\t'_isProjectEnd',\r\n\t\t\t'_getProjectEnd',\r\n\t\t\t'_getSlack'\r\n\t\t];\r\n\r\n\r\n\r\n\t\tif(this.mode == 'auto'){\r\n\t\t\tif(gantt.config.highlight_critical_path){\r\n\t\t\t\toverride_gantt = gantt_methods;\r\n\t\t\t}\r\n\t\t}else if(this.mode === true){\r\n\t\t\toverride_gantt = gantt_methods;\r\n\t\t}\r\n\r\n\t\tthis.wrap_methods(override_gantt, gantt);\r\n\r\n\t},\r\n\tupdate_if_changed: function(gantt){\r\n\t\tvar changed = (this.critical_path_mode != gantt.config.highlight_critical_path ||\r\n\t\t\t\t\t\tthis.mode !== gantt.config.optimize_render);\r\n\t\tif(changed){\r\n\t\t\tthis.critical_path_mode = gantt.config.highlight_critical_path;\r\n\t\t\tthis.mode = gantt.config.optimize_render;\r\n\t\t\tthis.setup(gantt);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfunction activate(){\r\n\tgantt._cached_functions.update_if_changed(gantt);\r\n\tif(!gantt._cached_functions.active){\r\n\t\tgantt._cached_functions.activate();\r\n\t}\r\n\treturn true;\r\n}\r\ngantt.attachEvent(\"onBeforeGanttRender\", activate);\r\ngantt.attachEvent(\"onBeforeDataRender\", activate);\r\ngantt.attachEvent(\"onBeforeSmartRender\", function(){\r\n\tactivate();\r\n});\r\ngantt.attachEvent(\"onBeforeParse\", activate);\r\ngantt.attachEvent(\"onDataRender\", function(){\r\n\tgantt._cached_functions.deactivate();\r\n});\r\nvar deactivTimeout = null;\r\ngantt.attachEvent(\"onSmartRender\", function(){\r\n\tif(deactivTimeout)\r\n\t\tclearTimeout(deactivTimeout);\r\n\tdeactivTimeout = setTimeout(function(){\r\n\t\tgantt._cached_functions.deactivate();\r\n\t}, 1000);\r\n});\r\n\r\ngantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\tgantt._cached_functions.update_if_changed(gantt);\r\n\treturn true;\r\n});\r\n\r\n};","function extend(gantt){\r\n\r\n\tgantt.destructor = function(){\r\n\t\tthis.clearAll();\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\r\n\t\tif(this.$root){\r\n\t\t\tdelete this.$root.gantt;\r\n\t\t}\r\n\r\n\t\tif(this._eventRemoveAll){\r\n\t\t\tthis._eventRemoveAll();\r\n\t\t}\r\n\r\n\t\tif(this.$layout){\r\n\t\t\tthis.$layout.destructor();\r\n\t\t}\r\n\r\n\t\tif(this.resetLightbox){\r\n\t\t\tthis.resetLightbox();\r\n\t\t}\r\n\r\n\r\n\t\tif(this._dp && this._dp.destructor){\r\n\t\t\tthis._dp.destructor();\r\n\t\t}\r\n\t\tthis.$services.destructor();\r\n\r\n\t\t// detachAllEvents should be called last, because in components may be attached events\r\n\t\tthis.detachAllEvents();\r\n\r\n\t\tfor(var i in this){\r\n\t\t\tif(i.indexOf(\"$\") === 0){\r\n\t\t\t\tdelete this[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.$destroyed = true;\r\n\t};\r\n}\r\n\r\nexport default extend;\r\n","import ar from \"./locale_ar\";\r\nimport be from \"./locale_be\";\r\nimport ca from \"./locale_ca\";\r\nimport cn from \"./locale_cn\";\r\nimport cs from \"./locale_cs\";\r\nimport da from \"./locale_da\";\r\nimport de from \"./locale_de\";\r\nimport el from \"./locale_el\";\r\nimport en from \"./locale_en\";\r\nimport es from \"./locale_es\";\r\nimport fa from \"./locale_fa\";\r\nimport fi from \"./locale_fi\";\r\nimport fr from \"./locale_fr\";\r\nimport he from \"./locale_he\";\r\nimport hr from \"./locale_hr\";\r\nimport hu from \"./locale_hu\";\r\nimport id from \"./locale_id\";\r\nimport it from \"./locale_it\";\r\nimport jp from \"./locale_jp\";\r\nimport kr from \"./locale_kr\";\r\n\r\nimport LocaleManager from \"./locale_manager\";\r\n\r\nimport nb from \"./locale_nb\";\r\nimport nl from \"./locale_nl\";\r\nimport no from \"./locale_no\";\r\nimport pl from \"./locale_pl\";\r\nimport pt from \"./locale_pt\";\r\nimport ro from \"./locale_ro\";\r\nimport ru from \"./locale_ru\";\r\nimport si from \"./locale_si\";\r\nimport sk from \"./locale_sk\";\r\nimport sv from \"./locale_sv\";\r\nimport tr from \"./locale_tr\";\r\nimport ua from \"./locale_ua\";\r\n\r\nexport default function(){\r\n\treturn new LocaleManager({\r\n\t\ten,\r\n\t\tar,\r\n\t\tbe,\r\n\t\tca,\r\n\t\tcn,\r\n\t\tcs,\r\n\t\tda,\r\n\t\tde,\r\n\t\tel,\r\n\t\tes,\r\n\t\tfa,\r\n\t\tfi,\r\n\t\tfr,\r\n\t\the,\r\n\t\thr,\r\n\t\thu,\r\n\t\tid,\r\n\t\tit,\r\n\t\tjp,\r\n\t\tkr,\r\n\t\tnb,\r\n\t\tnl,\r\n\t\tno,\r\n\t\tpl,\r\n\t\tpt,\r\n\t\tro,\r\n\t\tru,\r\n\t\tsi,\r\n\t\tsk,\r\n\t\tsv,\r\n\t\ttr,\r\n\t\tua\r\n\t});\r\n}","import * as utils from \"../../utils/utils\";\r\nimport * as domHelpers from \"./utils/dom_helpers\";\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar boxAttribute = \"data-dhxbox\";\r\n\r\n\tvar _dhx_msg_cfg = null;\r\n\r\n\tfunction callback(config, result) {\r\n\t\tvar usercall = config.callback;\r\n\t\tmodalBox.hide(config.box);\r\n\r\n\t\t_dhx_msg_cfg = config.box = null;\r\n\t\tif (usercall)\r\n\t\t\tusercall(result);\r\n\t}\r\n\r\n\tfunction modal_key(event) {\r\n\t\tif (_dhx_msg_cfg) {\r\n\r\n\t\t\tvar code = event.which || event.keyCode;\r\n\t\t\tvar preventDefault = false;\r\n\r\n\t\t\tif (messageBox.keyboard) {\r\n\t\t\t\tif (code == 13 || code == 32) {\r\n\t\t\t\t\t// default behavior is to confirm/submit popup on space/enter\r\n\t\t\t\t\t// if browser focus is set on button element - do button click instead of default behavior\r\n\t\t\t\t\tvar target = event.target || event.srcElement;\r\n\t\t\t\t\tif (domHelpers.getClassName(target).indexOf(\"gantt_popup_button\") > -1 && target.click) {\r\n\t\t\t\t\t\ttarget.click();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcallback(_dhx_msg_cfg, true);\r\n\t\t\t\t\t\tpreventDefault = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (code == 27) {\r\n\t\t\t\t\tcallback(_dhx_msg_cfg, false);\r\n\t\t\t\t\tpreventDefault = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (preventDefault) {\r\n\t\t\t\tif (event.preventDefault){\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t\treturn !(event.cancelBubble = true);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\tvar eventElement = domHelpers.getRootNode(gantt.$root) || document;\r\n\tgantt.event(eventElement, \"keydown\", modal_key, true);\r\n\r\n\tfunction modality(mode) {\r\n\t\tif (!modality.cover) {\r\n\t\t\tmodality.cover = document.createElement(\"div\");\r\n\t\t\t//necessary for IE only\r\n\t\t\tmodality.cover.onkeydown = modal_key;\r\n\t\t\tmodality.cover.className = \"dhx_modal_cover\";\r\n\t\t\tdocument.body.appendChild(modality.cover);\r\n\t\t}\r\n\r\n\t\tmodality.cover.style.display = mode ? \"inline-block\" : \"none\";\r\n\t}\r\n\r\n\tfunction button(text, className, result) {\r\n\t\tvar buttonAriaAttrs = gantt._waiAria.messageButtonAttrString(text);\r\n\t\tvar name = className.toLowerCase().replace(/ /g, \"_\");\r\n\t\tvar button_css = \"gantt_\" + name + \"_button\";\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tfunction info(text) {\r\n\t\tif (!messageBox.area) {\r\n\t\t\tmessageBox.area = document.createElement(\"div\");\r\n\t\t\tmessageBox.area.className = \"gantt_message_area\";\r\n\t\t\tmessageBox.area.style[messageBox.position] = \"5px\";\r\n\t\t\tdocument.body.appendChild(messageBox.area);\r\n\t\t}\r\n\r\n\t\tmessageBox.hide(text.id);\r\n\t\tvar message = document.createElement(\"div\");\r\n\t\tmessage.innerHTML = \"\" + text.text + \"
\";\r\n\t\tmessage.className = \"gantt-info gantt-\" + text.type;\r\n\t\tmessage.onclick = function () {\r\n\t\t\tmessageBox.hide(text.id);\r\n\t\t\ttext = null;\r\n\t\t};\r\n\r\n\t\tgantt._waiAria.messageInfoAttr(message);\r\n\r\n\t\tif (messageBox.position == \"bottom\" && messageBox.area.firstChild)\r\n\t\t\tmessageBox.area.insertBefore(message, messageBox.area.firstChild);\r\n\t\telse\r\n\t\t\tmessageBox.area.appendChild(message);\r\n\r\n\t\tif (text.expire > 0)\r\n\t\t\tmessageBox.timers[text.id] = window.setTimeout(function () {\r\n\t\t\t\t// GS-1213: We need that when Gantt is destroyed\r\n\t\t\t\tif (messageBox) messageBox.hide(text.id);\r\n\t\t\t}, text.expire);\r\n\r\n\t\tmessageBox.pull[text.id] = message;\r\n\t\tmessage = null;\r\n\r\n\t\treturn text.id;\r\n\t}\r\n\r\n\tfunction getFirstDefined() {\r\n\t\tvar values = [].slice.apply(arguments, [0]);\r\n\r\n\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\tif (values[i]) {\r\n\t\t\t\treturn values[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction _boxStructure(config, ok, cancel) {\r\n\t\tvar box = document.createElement(\"div\");\r\n\r\n\t\tvar contentId = utils.uid();\r\n\t\tgantt._waiAria.messageModalAttr(box, contentId);\r\n\r\n\r\n\t\tbox.className = \" gantt_modal_box gantt-\" + config.type;\r\n\t\tbox.setAttribute(boxAttribute, 1);\r\n\r\n\t\tvar inner = '';\r\n\r\n\t\tif (config.width)\r\n\t\t\tbox.style.width = config.width;\r\n\t\tif (config.height)\r\n\t\t\tbox.style.height = config.height;\r\n\t\tif (config.title)\r\n\t\t\tinner += '';\r\n\t\tinner += '';\r\n\t\tbox.innerHTML = inner;\r\n\r\n\t\tif (config.content) {\r\n\t\t\tvar node = config.content;\r\n\t\t\tif (typeof node == \"string\")\r\n\t\t\t\tnode = document.getElementById(node);\r\n\t\t\tif (node.style.display == 'none')\r\n\t\t\t\tnode.style.display = \"\";\r\n\t\t\tbox.childNodes[config.title ? 1 : 0].appendChild(node);\r\n\t\t}\r\n\r\n\t\tbox.onclick = function (event) {\r\n\t\t\tvar source = event.target || event.srcElement;\r\n\t\t\tif (!source.className) source = source.parentNode;\r\n\t\t\tif (domHelpers.closest(source, \".gantt_popup_button\")) {\r\n\t\t\t\tvar result = source.getAttribute(\"data-result\");\r\n\t\t\t\tresult = (result == \"true\") || (result == \"false\" ? false : result);\r\n\t\t\t\tcallback(config, result);\r\n\t\t\t}\r\n\t\t};\r\n\t\tconfig.box = box;\r\n\t\tif (ok || cancel)\r\n\t\t\t_dhx_msg_cfg = config;\r\n\r\n\t\treturn box;\r\n\t}\r\n\r\n\tfunction _createBox(config, ok, cancel) {\r\n\t\tvar box = config.tagName ? config : _boxStructure(config, ok, cancel);\r\n\r\n\t\tif (!config.hidden)\r\n\t\t\tmodality(true);\r\n\t\tdocument.body.appendChild(box);\r\n\t\tvar x = Math.abs(Math.floor(((window.innerWidth || document.documentElement.offsetWidth) - box.offsetWidth) / 2));\r\n\t\tvar y = Math.abs(Math.floor(((window.innerHeight || document.documentElement.offsetHeight) - box.offsetHeight) / 2));\r\n\t\tif (config.position == \"top\")\r\n\t\t\tbox.style.top = \"-3px\";\r\n\t\telse\r\n\t\t\tbox.style.top = y + 'px';\r\n\t\tbox.style.left = x + 'px';\r\n\t\t//necessary for IE only\r\n\t\tbox.onkeydown = modal_key;\r\n\r\n\t\tmodalBox.focus(box);\r\n\r\n\t\tif (config.hidden)\r\n\t\t\tmodalBox.hide(box);\r\n\r\n\t\tgantt.callEvent(\"onMessagePopup\", [box]);\r\n\t\treturn box;\r\n\t}\r\n\r\n\tfunction alertPopup(config) {\r\n\t\treturn _createBox(config, true, false);\r\n\t}\r\n\r\n\tfunction confirmPopup(config) {\r\n\t\treturn _createBox(config, true, true);\r\n\t}\r\n\r\n\tfunction boxPopup(config) {\r\n\t\treturn _createBox(config);\r\n\t}\r\n\r\n\tfunction box_params(text, type, callback) {\r\n\t\tif (typeof text != \"object\") {\r\n\t\t\tif (typeof type == \"function\") {\r\n\t\t\t\tcallback = type;\r\n\t\t\t\ttype = \"\";\r\n\t\t\t}\r\n\t\t\ttext = {text: text, type: type, callback: callback};\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\tfunction params(text, type, expire, id) {\r\n\t\tif (typeof text != \"object\")\r\n\t\t\ttext = {text: text, type: type, expire: expire, id: id};\r\n\t\ttext.id = text.id || utils.uid();\r\n\t\ttext.expire = text.expire || messageBox.expire;\r\n\t\treturn text;\r\n\t}\r\n\r\n\tvar alertBox = function () {\r\n\t\tvar text = box_params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"confirm\";\r\n\t\treturn alertPopup(text);\r\n\t};\r\n\tvar confirmBox = function () {\r\n\t\tvar text = box_params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"alert\";\r\n\t\treturn confirmPopup(text);\r\n\t};\r\n\tvar modalBox = function () {\r\n\t\tvar text = box_params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"alert\";\r\n\t\treturn boxPopup(text);\r\n\t};\r\n\tmodalBox.hide = function (node) {\r\n\t\twhile (node && node.getAttribute && !node.getAttribute(boxAttribute))\r\n\t\t\tnode = node.parentNode;\r\n\t\tif (node) {\r\n\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\tmodality(false);\r\n\r\n\t\t\tgantt.callEvent(\"onAfterMessagePopup\", [node]);\r\n\t\t}\r\n\t};\r\n\r\n\tmodalBox.focus = function (node) {\r\n\t\tsetTimeout(function () {\r\n\t\t\tvar focusable = domHelpers.getFocusableNodes(node);\r\n\t\t\tif (focusable.length) {\r\n\t\t\t\tif (focusable[0].focus) focusable[0].focus();\r\n\t\t\t}\r\n\t\t}, 1);\r\n\t};\r\n\r\n\tvar messageBox = function (text, type, expire, id) {\r\n\t\ttext = params.apply(this, arguments);\r\n\t\ttext.type = text.type || \"info\";\r\n\r\n\t\tvar subtype = text.type.split(\"-\")[0];\r\n\t\tswitch (subtype) {\r\n\t\t\tcase \"alert\":\r\n\t\t\t\treturn alertPopup(text);\r\n\t\t\tcase \"confirm\":\r\n\t\t\t\treturn confirmPopup(text);\r\n\t\t\tcase \"modalbox\":\r\n\t\t\t\treturn boxPopup(text);\r\n\t\t\tdefault:\r\n\t\t\t\treturn info(text);\r\n\t\t}\r\n\t};\r\n\r\n\tmessageBox.seed = (new Date()).valueOf();\r\n\tmessageBox.uid = utils.uid;\r\n\tmessageBox.expire = 4000;\r\n\tmessageBox.keyboard = true;\r\n\tmessageBox.position = \"top\";\r\n\tmessageBox.pull = {};\r\n\tmessageBox.timers = {};\r\n\r\n\tmessageBox.hideAll = function () {\r\n\t\tfor (var key in messageBox.pull)\r\n\t\t\tmessageBox.hide(key);\r\n\t};\r\n\tmessageBox.hide = function (id) {\r\n\t\tvar obj = messageBox.pull[id];\r\n\t\tif (obj && obj.parentNode) {\r\n\t\t\twindow.setTimeout(function () {\r\n\t\t\t\tobj.parentNode.removeChild(obj);\r\n\t\t\t\tobj = null;\r\n\t\t\t}, 2000);\r\n\t\t\tobj.className += \" hidden\";\r\n\r\n\t\t\tif (messageBox.timers[id])\r\n\t\t\t\twindow.clearTimeout(messageBox.timers[id]);\r\n\t\t\tdelete messageBox.pull[id];\r\n\t\t}\r\n\t};\r\n\r\n\tvar popups = [];\r\n\tgantt.attachEvent(\"onMessagePopup\", function(box){\r\n\t\tpopups.push(box);\r\n\t});\r\n\tgantt.attachEvent(\"onAfterMessagePopup\", function(box){\r\n\t\tfor(var i = 0; i < popups.length; i++){\r\n\t\t\tif(popups[i] === box){\r\n\t\t\t\tpopups.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\tif(modality.cover && modality.cover.parentNode){\r\n\t\t\tmodality.cover.parentNode.removeChild(modality.cover);\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < popups.length; i++){\r\n\t\t\tif(popups[i].parentNode){\r\n\t\t\t\tpopups[i].parentNode.removeChild(popups[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpopups = null;\r\n\r\n\t\tif(messageBox.area && messageBox.area.parentNode){\r\n\t\t\tmessageBox.area.parentNode.removeChild(messageBox.area);\r\n\t\t}\r\n\t\tmessageBox = null;\r\n\t});\r\n\r\n\treturn {\r\n\t\talert: alertBox,\r\n\t\tconfirm: confirmBox,\r\n\t\tmessage: messageBox,\r\n\t\tmodalbox: modalBox\r\n\t};\r\n};","import * as utils from \"../../utils/utils\";\r\n\r\nfunction extendSettings (store, parentSettings){\r\n\tvar own = this.$config[store];\r\n\r\n\tif(own){\r\n\t\tif(!own.$extendedConfig){\r\n\t\t\town.$extendedConfig = true;\r\n\t\t\tObject.setPrototypeOf(own, parentSettings);\r\n\t\t}\r\n\t\treturn own;\r\n\t}else{\r\n\t\treturn parentSettings;\r\n\t}\r\n}\r\n\r\nvar configurable = function(parentView){\r\n\tvar parentConfig,\r\n\t\tparentTemplates;\r\n\r\n\treturn {\r\n\t\t$getConfig: function(){\r\n\t\t\tif(!parentConfig){\r\n\t\t\t\tparentConfig = parentView ? parentView.$getConfig() : this.$gantt.config;\r\n\t\t\t}\r\n\t\t\tif(!this.$config.config){\r\n\t\t\t\treturn parentConfig;\r\n\t\t\t}else{\r\n\t\t\t\treturn extendSettings.call(this, \"config\", parentConfig);\r\n\t\t\t}\r\n\t\t},\r\n\t\t$getTemplates: function(){\r\n\t\t\tif(!parentTemplates){\r\n\t\t\t\tparentTemplates = parentView ? parentView.$getTemplates() : this.$gantt.templates;\r\n\t\t\t}\r\n\t\t\tif(!this.$config.templates){\r\n\t\t\t\treturn parentTemplates;\r\n\t\t\t}else{\r\n\t\t\t\treturn extendSettings.call(this, \"templates\", parentTemplates);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n};\r\n\r\nexport default function(obj, parent){\r\n\tutils.mixin(obj, configurable(parent));\r\n};","import * as utils from \"../../utils/utils\";\r\nimport configurable from \"./configurable\";\r\n\r\nvar uiFactory = function createFactory(gantt){\r\n\tvar views = {};\r\n\r\n\tfunction ui(cell, parentView) {\r\n\t\tvar content;\r\n\t\tvar view = \"cell\";\r\n\t\tif (cell.view){\r\n\t\t\tview = \"viewcell\";\r\n\t\t}else if (cell.resizer) {\r\n\t\t\tview = \"resizer\";\r\n\t\t}\r\n\t\telse if (cell.rows || cell.cols) {\r\n\t\t\tview = \"layout\";\r\n\t\t}\r\n\t\telse if (cell.views) {\r\n\t\t\tview = \"multiview\";\r\n\t\t}\r\n\r\n\t\tcontent = createView.call(this, view, null, cell, parentView);\r\n\t\treturn content;\r\n\t}\r\n\t\r\n\tvar createdViews = {};\r\n\r\n\tfunction createView(name, parent, config, parentView) {\r\n\t\tvar creator = views[name];\r\n\r\n\t\tif(!creator || !creator.create)\r\n\t\t\treturn false;\r\n\r\n\t\tif(name == \"resizer\" && !config.mode){\r\n\t\t\tif(parentView.$config.cols){\r\n\t\t\t\tconfig.mode = \"x\";\r\n\t\t\t}else{\r\n\t\t\t\tconfig.mode = \"y\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(name == \"viewcell\" && config.view == \"scrollbar\" && !config.scroll){\r\n\t\t\tif(parentView.$config.cols){\r\n\t\t\t\tconfig.scroll = \"y\";\r\n\t\t\t}else{\r\n\t\t\t\tconfig.scroll = \"x\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar config = utils.copy(config);\r\n\r\n\t\tif(!config.id && !createdViews[config.view]){\r\n\t\t\tconfig.id = config.view;\r\n\t\t}\r\n\r\n\t\tif(config.id && !config.css){\r\n\t\t\tconfig.css = config.id+\"_cell\";\r\n\t\t}\r\n\r\n\t\tvar view = new creator.create(parent, config, this, gantt);\r\n\r\n\t\tif(creator.configure){\r\n\t\t\tcreator.configure(view);\r\n\t\t}\r\n\r\n\t\tconfigurable(view, parentView);\r\n\t\tif(!view.$id){\r\n\t\t\tview.$id = config.id || gantt.uid();\r\n\t\t}\r\n\r\n\t\tif(!view.$parent && typeof parent == \"object\"){\r\n\t\t\tview.$parent = parent;\r\n\t\t}\r\n\t\tif(!view.$config){\r\n\t\t\tview.$config = config;\r\n\t\t}\r\n\r\n\t\tif(createdViews[view.$id]){\r\n\t\t\tview.$id = gantt.uid();\r\n\t\t}\r\n\r\n\t\tcreatedViews[view.$id] = view;\r\n\r\n\t\treturn view;\r\n\t}\r\n\r\n\tfunction reset(){\r\n\t\tcreatedViews = {};\r\n\t}\r\n\r\n\tfunction register(name, viewConstructor, configure){\r\n\t\tviews[name] = {create: viewConstructor, configure: configure};\r\n\t}\r\n\r\n\tfunction getView(id){\r\n\t\treturn createdViews[id];\r\n\t}\r\n\r\n\tvar factory = {\r\n\t\tinitUI:ui,\r\n\t\treset: reset,\r\n\t\tregisterView: register,\r\n\t\tcreateView: createView,\r\n\t\tgetView: getView\r\n\t};\r\n\r\n\treturn factory;\r\n};\r\n\r\nexport default {\r\n\tcreateFactory: uiFactory\r\n};\r\n\r\n","import * as domHelpers from \"./utils/dom_helpers\";\r\n\r\nvar createMouseHandler = (function(domHelpers) {\r\n\treturn function (gantt) {\r\n\t\tvar eventHandlers = {\r\n\t\t\t\"click\": {},\r\n\t\t\t\"doubleclick\": {},\r\n\t\t\t\"contextMenu\": {}\r\n\t\t};\r\n\r\n\t\tfunction addEventTarget(event, className, handler, root) {\r\n\t\t\tif(!eventHandlers[event][className]){\r\n\t\t\t\teventHandlers[event][className] = [];\r\n\t\t\t}\r\n\r\n\t\t\teventHandlers[event][className].push({\r\n\t\t\t\thandler: handler,\r\n\t\t\t\troot: root\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction callHandler(eventName, className, root, args) {\r\n\t\t\tvar handlers = eventHandlers[eventName][className];\r\n\t\t\tif(handlers){\r\n\t\t\t\tfor(var i = 0; i < handlers.length; i++){\r\n\t\t\t\t\tif(!(root || handlers[i].root) || handlers[i].root === root){\r\n\t\t\t\t\t\thandlers[i].handler.apply(this, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onClick(e) {\r\n\t\t\te = e || window.event;\r\n\t\t\tvar id = gantt.locate(e);\r\n\r\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.click);\r\n\t\t\tvar res = true;\r\n\t\t\tif (id !== null) {\r\n\t\t\t\tres = !gantt.checkEvent(\"onTaskClick\") || gantt.callEvent(\"onTaskClick\", [id, e]);\r\n\t\t\t} else {\r\n\t\t\t\tgantt.callEvent(\"onEmptyClick\", [e]);\r\n\t\t\t}\r\n\r\n\t\t\tif (res) {\r\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\r\n\t\t\t\tif (!default_action)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t// GS-1025: if we don't do that, the dropdown or date select will be closed for unselected tasks\r\n\t\t\t\t// GS-1078: or for the built-in select inline editor\r\n\t\t\t\tswitch(e.target.nodeName) {\r\n\t\t\t\t\tcase \"SELECT\":\r\n\t\t\t\t\tcase 'INPUT':\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//allow task selection when the multiselect plugin is not enabled\r\n\t\t\t\tif (id && gantt.getTask(id) && !gantt._multiselect && gantt.config.select_task) {\r\n\t\t\t\t\tgantt.selectTask(id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onContextMenu(e) {\r\n\t\t\te = e || window.event;\r\n\t\t\tvar src = e.target || e.srcElement,\r\n\t\t\t\ttaskId = gantt.locate(src),\r\n\t\t\t\tlinkId = gantt.locate(src, gantt.config.link_attribute);\r\n\r\n\t\t\tvar res = !gantt.checkEvent(\"onContextMenu\") || gantt.callEvent(\"onContextMenu\", [taskId, linkId, e]);\r\n\t\t\tif (!res) {\r\n\t\t\t\tif (e.preventDefault)\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\telse\r\n\t\t\t\t\te.returnValue = false;\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t}\r\n\r\n\t\tfunction findEventHandlers(e, hash){\r\n\t\t\tvar trg = e.target || e.srcElement;\r\n\t\t\tvar handlers = [];\r\n\t\t\twhile (trg) {\r\n\t\t\t\tvar css = domHelpers.getClassName(trg);\r\n\t\t\t\tif (css) {\r\n\t\t\t\t\tcss = css.split(\" \");\r\n\t\t\t\t\tfor (var i = 0; i < css.length; i++) {\r\n\t\t\t\t\t\tif (!css[i]) continue;\r\n\t\t\t\t\t\tif (hash[css[i]]) {\r\n\t\t\t\t\t\t\tvar delegateHandlers = hash[css[i]];\r\n\r\n\t\t\t\t\t\t\tfor(var h = 0; h < delegateHandlers.length; h++){\r\n\t\t\t\t\t\t\t\tif(delegateHandlers[h].root){\r\n\t\t\t\t\t\t\t\t\tif(!domHelpers.isChildOf(trg, delegateHandlers[h].root)){\r\n\t\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\thandlers.push(delegateHandlers[h].handler);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ttrg = trg.parentNode;\r\n\t\t\t}\r\n\t\t\treturn handlers;\r\n\t\t}\r\n\r\n\t\tfunction callEventHandlers(handlers, e, id){\r\n\t\t\tvar res = true;\r\n\r\n\t\t\tfor(var i = 0; i < handlers.length; i++){\r\n\t\t\t\tvar handlerResult = handlers[i].call(gantt, e, id, e.target || e.srcElement);\r\n\t\t\t\tres = res && !(typeof handlerResult != \"undefined\" && handlerResult !== true);\r\n\t\t\t}\r\n\r\n\t\t\treturn res;\r\n\t\t}\r\n\r\n\r\n\t\tfunction onDoubleClick(e) {\r\n\t\t\te = e || window.event;\r\n\t\t\tvar id = gantt.locate(e);\r\n\r\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.doubleclick);\r\n\t\t\t// when doubleclick fired not on task, id === null\r\n\t\t\tvar res = !gantt.checkEvent(\"onTaskDblClick\") || id === null || gantt.callEvent(\"onTaskDblClick\", [id, e]);\r\n\t\t\tif (res) {\r\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\r\n\t\t\t\tif (!default_action)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tif (id !== null && gantt.getTask(id)) {\r\n\t\t\t\t\tif (res && gantt.config.details_on_dblclick && !gantt.isReadonly(id)) {\r\n\t\t\t\t\t\tgantt.showLightbox(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onMouseMove(e) {\r\n\t\t\tif (gantt.checkEvent(\"onMouseMove\")) {\r\n\t\t\t\tvar id = gantt.locate(e);\r\n\t\t\t\tgantt._last_move_event = e;\r\n\t\t\t\tgantt.callEvent(\"onMouseMove\", [id, e]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction detach(eventName, className, handler, root) {\r\n\t\t\tif (eventHandlers[eventName] && eventHandlers[eventName][className]) {\r\n\t\t\t\tvar handlers = eventHandlers[eventName];\r\n\t\t\t\tvar elementHandlers = handlers[className];\r\n\t\t\t\tfor(var i = 0; i < elementHandlers.length; i++){\r\n\t\t\t\t\tif(elementHandlers[i].root == root){\r\n\t\t\t\t\t\telementHandlers.splice(i, 1);\r\n\t\t\t\t\t\ti--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(!elementHandlers.length){\r\n\t\t\t\t\tdelete handlers[className];\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar domEvents = gantt._createDomEventScope();\r\n\r\n\t\tfunction reset(node){\r\n\r\n\t\t\tdomEvents.detachAll();\r\n\r\n\t\t\tif(node){\r\n\t\t\t\tdomEvents.attach(node, \"click\", onClick);\r\n\t\t\t\tdomEvents.attach(node, \"dblclick\", onDoubleClick);\r\n\t\t\t\tdomEvents.attach(node, \"mousemove\", onMouseMove);\r\n\t\t\t\tdomEvents.attach(node, \"contextmenu\", onContextMenu);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\r\n\t\treturn {\r\n\t\t\treset: reset,\r\n\t\t\tglobal: function(event, classname, handler){\r\n\t\t\t\taddEventTarget(event, classname, handler, null);\r\n\t\t\t},\r\n\t\t\tdelegate: addEventTarget,\r\n\t\t\tdetach: detach,\r\n\t\t\tcallHandler: callHandler,\r\n\t\t\tonDoubleClick: onDoubleClick,\r\n\t\t\tonMouseMove: onMouseMove,\r\n\t\t\tonContextMenu: onContextMenu,\r\n\t\t\tonClick: onClick,\r\n\t\t\tdestructor: function(){\r\n\t\t\t\treset();\r\n\t\t\t\teventHandlers = null;\r\n\t\t\t\tdomEvents = null;\r\n\t\t\t}\r\n\r\n\t\t};\r\n\t};\r\n\r\n})(domHelpers);\r\n\r\n\r\nexport default {\r\n\tinit:createMouseHandler\r\n};","export default function(viewport, box, gantt){\r\n\tif(!box){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(box.left > viewport.x_end || box.left + box.width < viewport.x){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(box.top > viewport.y_end || box.top + box.height < viewport.y){\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\treturn true;\r\n};","export default function(gantt){\r\n\treturn gantt.config.smart_rendering && gantt._smart_render;\r\n};","export default function(item, view, config){\r\n\treturn {\r\n\t\ttop: view.getItemTop(item.id),\r\n\t\theight: view.getItemHeight(item.id),\r\n\t\tleft: 0,\r\n\t\tright: Infinity\r\n\t};\r\n};","export default function getVisibleTasksRange(gantt, view, config, datastore, viewport){\r\n\tvar buffer = 1;\r\n\tvar start = view.getItemIndexByTopPosition(viewport.y) || 0;\r\n\tvar end = view.getItemIndexByTopPosition(viewport.y_end) || datastore.count();\r\n\tvar indexStart = Math.max(0, start - buffer);\r\n\tvar indexEnd = Math.min(datastore.count(), end + buffer);\r\n\t// GS-2481 and GS-1715, need to take into account selected task when using keyboard shortcuts and when the inline editor is opened \r\n\tconst extraTasksIds= [];\r\n\tif (gantt.config.keyboard_navigation && gantt.getSelectedId()) {\r\n\t\textraTasksIds.push(gantt.getSelectedId());\r\n\t}\r\n\tif (gantt.$ui.getView(\"grid\") && gantt.ext.inlineEditors && gantt.ext.inlineEditors.getState().id) {\r\n\t\tlet inlineEditorId = gantt.ext.inlineEditors.getState().id;\r\n\t\tif (datastore.exists(inlineEditorId)){\r\n\t\t\textraTasksIds.push(inlineEditorId);\r\n\t\t}\r\n\t}\r\n\treturn {\r\n\t\tstart: indexStart,\r\n\t\tend: indexEnd,\r\n\t\tids: extraTasksIds \r\n\t};\r\n};","import genericViewPortChecker from \"./viewport/is_in_viewport\";\r\nimport isLegacyRender from \"./is_legacy_smart_render\";\r\nimport basicGetRectangle from \"./viewport/get_grid_row_rectangle\";\r\nimport basicGetRange from \"./viewport/get_visible_bars_range\";\r\nvar rendererFactory = function(gantt){\r\n\r\n\t//hash of dom elements is needed to redraw single bar/link\r\n\tvar task_area_pulls = {},\r\n\t\ttask_area_renderers = {};\r\n\r\n\tfunction getView(layer){\r\n\t\tvar view = null;\r\n\t\tif (typeof layer.view === \"string\") {\r\n\t\t\tview = gantt.$ui.getView(layer.view);\r\n\t\t} else if (layer.view) {\r\n\t\t\tview = layer.view;\r\n\t\t}\r\n\t\treturn view;\r\n\t}\r\n\r\n\tfunction getRenderer(id, layer, node) {\r\n\t\t\r\n\t\tif (task_area_renderers[id])\r\n\t\t\treturn task_area_renderers[id];\r\n\r\n\t\tif (!layer.renderer)\r\n\t\t\tgantt.assert(false, \"Invalid renderer call\");\r\n\r\n\t\tvar renderMethod = null;\r\n\t\tvar updateMethod = null;\r\n\t\tvar getRectangle = null;\r\n\t\tvar renderCallbackMethod = null;\r\n\t\tvar specializedViewPortChecker = null;\r\n\r\n\t\tif(typeof layer.renderer === \"function\"){\r\n\t\t\trenderMethod = layer.renderer;\r\n\t\t\tgetRectangle = basicGetRectangle;\r\n\t\t}else{\r\n\t\t\trenderMethod = layer.renderer.render;\r\n\t\t\tupdateMethod = layer.renderer.update;\r\n\t\t\trenderCallbackMethod = layer.renderer.onrender;\r\n\t\t\t\r\n\t\t\tif(layer.renderer.isInViewPort){\r\n\t\t\t\tspecializedViewPortChecker = layer.renderer.isInViewPort;\r\n\t\t\t}else{\r\n\t\t\t\tgetRectangle = layer.renderer.getRectangle;\r\n\t\t\t}\r\n\r\n\t\t\tif (!getRectangle && getRectangle !== null) {\r\n\t\t\t\tgetRectangle = basicGetRectangle;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar filter = layer.filter;\r\n\r\n\t\tif (node)\r\n\t\t\tnode.setAttribute(gantt.config.layer_attribute, true);\r\n\r\n\t\ttask_area_renderers[id] = {\r\n\t\t\trender_item: function (item, container, viewPort, layerView, viewConfig) {\r\n\t\t\t\tcontainer = container || node;\r\n\t\t\t\tif (filter) {\r\n\t\t\t\t\tif (!filter(item)) {\r\n\t\t\t\t\t\tthis.remove_item(item.id);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar view = layerView || getView(layer);\r\n\t\t\t\tvar config = viewConfig || (view ? view.$getConfig() : null);\r\n\t\t\t\tvar rendererViewPort = viewPort;\r\n\t\t\t\tif(!rendererViewPort && config && config.smart_rendering){\r\n\t\t\t\t\trendererViewPort = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar dom = null;\r\n\t\t\t\tif(!isLegacyRender(gantt) && (getRectangle || specializedViewPortChecker) && rendererViewPort){\r\n\t\t\t\t\tvar isVisible = false;\r\n\t\t\t\t\tif(specializedViewPortChecker){\r\n\t\t\t\t\t\tisVisible = specializedViewPortChecker(item, rendererViewPort, view, config, gantt);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tisVisible = genericViewPortChecker(rendererViewPort, getRectangle(item, view, config, gantt), gantt);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(isVisible){\r\n\t\t\t\t\t\tdom = renderMethod.call(gantt, item, view, config, rendererViewPort);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdom = renderMethod.call(gantt, item, view, config, rendererViewPort);\r\n\t\t\t\t}\r\n\t\t\t\tthis.append(item, dom, container);\r\n\r\n\t\t\t\tvar useBuffer = container.nodeType == 11;//DocumentFragment\r\n\t\t\t\tif(renderCallbackMethod && !useBuffer && dom) {\r\n\t\t\t\t\trenderCallbackMethod.call(gantt, item, dom, view);\r\n\t\t\t\t} \r\n\t\t\t},\r\n\r\n\t\t\tclear: function (container) {\r\n\r\n\t\t\t\tthis.rendered = task_area_pulls[id] = {};\r\n\t\t\t\tif(!layer.append)\r\n\t\t\t\t\tthis.clear_container(container);\r\n\t\t\t},\r\n\t\t\tclear_container: function (container) {\r\n\t\t\t\tcontainer = container || node;\r\n\t\t\t\tif (container){\r\n\t\t\t\t\tcontainer.innerHTML = \"\";\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget_visible_range: function(datastore){\r\n\t\t\t\tvar view = getView(layer);\r\n\t\t\t\tvar viewport;\r\n\t\t\t\tvar viewConfig = view ? view.$getConfig() : null;\r\n\t\t\t\tif(viewConfig && viewConfig.smart_rendering){\r\n\t\t\t\t\tviewport = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar range;\r\n\t\t\t\tif(view && viewport){\r\n\t\t\t\t\tif(typeof layer.renderer === \"function\"){\r\n\t\t\t\t\t\trange = basicGetRange(gantt, view, viewConfig, datastore, viewport);\r\n\t\t\t\t\t}else if(layer.renderer && layer.renderer.getVisibleRange){\r\n\t\t\t\t\t\trange = layer.renderer.getVisibleRange(gantt, view, viewConfig, datastore, viewport);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(!range){\r\n\t\t\t\t\trange = {\r\n\t\t\t\t\t\tstart: 0,\r\n\t\t\t\t\t\tend: datastore.count()\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn range;\r\n\t\t\t},\r\n\t\t\tprepare_data: function(items){\r\n\t\t\t\tif(layer.renderer && layer.renderer.prepareData){\r\n\t\t\t\t\treturn layer.renderer.prepareData(items, gantt, layer);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\trender_items: function (items, container) {\r\n\t\t\t\tcontainer = container || node;\r\n\r\n\t\t\t\tvar buffer = document.createDocumentFragment();\r\n\t\t\t\tthis.clear(container);\r\n\r\n\t\t\t\tvar viewPort = null;\r\n\t\t\t\tvar view = getView(layer);\r\n\t\t\t\tvar viewConfig = view ? view.$getConfig() : null;\r\n\t\t\t\tif(viewConfig && viewConfig.smart_rendering){\r\n\t\t\t\t\tviewPort = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\r\n\t\t\t\t\tthis.render_item(items[i], buffer, viewPort, view, viewConfig);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontainer.appendChild(buffer, container);\r\n\r\n\t\t\t\tvar itemsSearch = {};\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\titemsSearch[item.id] = item;\r\n\t\t\t\t});\r\n\t\t\t\tvar renderedItems = {};\r\n\t\t\t\tif (renderCallbackMethod) {\r\n\t\t\t\t\tvar newElements = {};\r\n\t\t\t\t\tfor(var i in this.rendered) {\r\n\t\t\t\t\t\tif(!renderedItems[i]){\r\n\t\t\t\t\t\t\tnewElements[i] = this.rendered[i];\r\n\t\t\t\t\t\t\trenderCallbackMethod.call(gantt, itemsSearch[i], this.rendered[i], view);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tupdate_items: function (items, container) {\r\n\t\t\t\tvar view = getView(layer);\r\n\t\t\t\tvar viewConfig = view ? view.$getConfig() : null;\r\n\t\t\t\tif(!view || !view.$getConfig().smart_rendering || isLegacyRender(gantt)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!this.rendered){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(getRectangle || specializedViewPortChecker)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontainer = container || node;\r\n\r\n\t\t\t\tvar buffer = document.createDocumentFragment();\r\n\r\n\t\t\t\tvar viewPort = null;\r\n\t\t\t\tif(view){\r\n\t\t\t\t\tviewPort = view.getViewPort();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar itemsSearch = {};\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\titemsSearch[item.id] = item;\r\n\t\t\t\t});\r\n\t\t\t\tvar renderedItems = {};\r\n\r\n\t\t\t\tvar nodesToRemove = {};\r\n\t\t\t\tfor(var i in this.rendered){\r\n\t\t\t\t\tnodesToRemove[i] = true;\r\n\t\t\t\t\trenderedItems[i] = true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar renderCalledFor = {};\r\n\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\r\n\t\t\t\t\tvar item = items[i];\r\n\t\t\t\t\tvar itemNode = this.rendered[item.id];\r\n\t\t\t\t\tnodesToRemove[item.id] = false;\r\n\t\t\t\t\tif (itemNode && itemNode.parentNode) {\r\n\t\t\t\t\t\tvar isVisible = false;\r\n\t\t\t\t\t\tif(specializedViewPortChecker){\r\n\t\t\t\t\t\t\tisVisible = specializedViewPortChecker(item, viewPort, view, viewConfig, gantt);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tisVisible = genericViewPortChecker(viewPort, getRectangle(item, view, viewConfig, gantt), gantt);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!isVisible) {\r\n\t\t\t\t\t\t\tnodesToRemove[item.id] = true;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif(updateMethod){\r\n\t\t\t\t\t\t\t\tupdateMethod.call(gantt, item, itemNode, view, viewConfig, viewPort);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.restore(item, buffer);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trenderCalledFor[items[i].id] = true;\r\n\t\t\t\t\t\tthis.render_item(items[i], buffer, viewPort, view, viewConfig);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor(var i in nodesToRemove){\r\n\t\t\t\t\tif(nodesToRemove[i]){\r\n\t\t\t\t\t\tthis.hide(i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(buffer.childNodes.length){\r\n\t\t\t\t\tcontainer.appendChild(buffer, container);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (renderCallbackMethod) {\r\n\t\t\t\t\tvar newElements = {};\r\n\t\t\t\t\tfor(var i in this.rendered) {\r\n\t\t\t\t\t\tif(!renderedItems[i] || renderCalledFor[i]){\r\n\t\t\t\t\t\t\tnewElements[i] = this.rendered[i];\r\n\t\t\t\t\t\t\trenderCallbackMethod.call(gantt, itemsSearch[i], this.rendered[i], view);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tappend: function (item, node, container) {\r\n\t\t\t\tif(!this.rendered){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!node) {\r\n\t\t\t\t\tif (this.rendered[item.id]) {\r\n\t\t\t\t\t\tthis.remove_item(item.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.rendered[item.id] && this.rendered[item.id].parentNode) {\r\n\t\t\t\t\tthis.replace_item(item.id, node);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontainer.appendChild(node);\r\n\t\t\t\t}\r\n\t\t\t\tthis.rendered[item.id] = node;\r\n\t\t\t},\r\n\t\t\treplace_item: function (item_id, newNode) {\r\n\t\t\t\tvar item = this.rendered[item_id];\r\n\t\t\t\tif (item && item.parentNode) {\r\n\t\t\t\t\titem.parentNode.replaceChild(newNode, item);\r\n\r\n\t\t\t\t}\r\n\t\t\t\tthis.rendered[item_id] = newNode;\r\n\t\t\t},\r\n\t\t\tremove_item: function (item_id) {\r\n\t\t\t\tthis.hide(item_id);\r\n\t\t\t\tdelete this.rendered[item_id];\r\n\t\t\t},\r\n\t\t\thide: function (item_id) {\r\n\t\t\t\tvar item = this.rendered[item_id];\r\n\t\t\t\tif (item && item.parentNode) {\r\n\t\t\t\t\titem.parentNode.removeChild(item);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\trestore: function (item, container) {\r\n\t\t\t\tvar dom = this.rendered[item.id];\r\n\t\t\t\tif (dom) {\r\n\t\t\t\t\tif (!dom.parentNode) {\r\n\t\t\t\t\t\tthis.append(item, dom, container || node);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.render_item(item, container || node);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tchange_id: function (oldid, newid) {\r\n\t\t\t\tthis.rendered[newid] = this.rendered[oldid];\r\n\t\t\t\tdelete this.rendered[oldid];\r\n\t\t\t},\r\n\t\t\trendered: task_area_pulls[id],\r\n\t\t\tnode: node,\r\n\t\t\tdestructor: function () {\r\n\t\t\t\tthis.clear();\r\n\t\t\t\tdelete task_area_renderers[id];\r\n\t\t\t\tdelete task_area_pulls[id];\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn task_area_renderers[id];\r\n\t}\r\n\r\n\r\n\tfunction clearRenderers() {\r\n\t\tfor (var i in task_area_renderers) {\r\n\t\t\tgetRenderer(i).destructor();\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tgetRenderer: getRenderer,\r\n\t\tclearRenderers: clearRenderers\r\n\t};\r\n\r\n};\r\n\r\nexport default rendererFactory;","import renderFactoryProvider from \"./render_factory\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport isLegacyRender from \"./is_legacy_smart_render\";\r\n\r\nvar layerFactory = function(gantt){\r\n\r\n\tvar renderFactory = renderFactoryProvider(gantt);\r\n\treturn {\r\n\tcreateGroup: function (getContainer, relativeRoot, defaultFilters, initLayer) {\r\n\r\n\t\tvar renderGroup = {\r\n\t\t\ttempCollection: [],\r\n\t\t\trenderers: {},\r\n\t\t\tcontainer: getContainer,\r\n\t\t\tfilters: [],\r\n\t\t\tgetLayers: function () {\r\n\t\t\t\tthis._add();// add pending layers\r\n\r\n\t\t\t\tvar res = [];\r\n\t\t\t\tfor (var i in this.renderers) {\r\n\t\t\t\t\tres.push(this.renderers[i]);\r\n\t\t\t\t}\r\n\t\t\t\treturn res;\r\n\t\t\t},\r\n\t\t\tgetLayer: function (id) {\r\n\t\t\t\treturn this.renderers[id];\r\n\t\t\t},\r\n\t\t\t_add: function (layer) {\r\n\t\t\t\tif (layer) {\r\n\t\t\t\t\tlayer.id = layer.id || utils.uid();\r\n\t\t\t\t\tthis.tempCollection.push(layer);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar container = this.container();\r\n\r\n\t\t\t\tvar pending = this.tempCollection;\r\n\t\t\t\tfor (var i = 0; i < pending.length; i++) {\r\n\t\t\t\t\tlayer = pending[i];\r\n\r\n\t\t\t\t\tif (!this.container() && !(layer && layer.container && domHelpers.isChildOf(layer.container, document.body))) continue;\r\n\r\n\t\t\t\t\tvar node = layer.container,\r\n\t\t\t\t\t\tid = layer.id,\r\n\t\t\t\t\t\ttopmost = layer.topmost;\r\n\t\t\t\t\tif (!node.parentNode) {\r\n\t\t\t\t\t\t//insert on top or below the tasks\r\n\t\t\t\t\t\tif (topmost) {\r\n\t\t\t\t\t\t\tcontainer.appendChild(node);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar rel = relativeRoot ? relativeRoot() : container.firstChild;\r\n\t\t\t\t\t\t\t// GS-1274: if we don't add the second check, Gantt stops working if\r\n\t\t\t\t\t\t\t// we add the task layer without the timeline and switch to a layout with the timeline\r\n\t\t\t\t\t\t\tif (rel && rel.parentNode == container)\r\n\t\t\t\t\t\t\t\tcontainer.insertBefore(node, rel);\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcontainer.appendChild(node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.renderers[id] = renderFactory.getRenderer(\r\n\t\t\t\t\t\tid,\r\n\t\t\t\t\t\tlayer,\r\n\t\t\t\t\t\tnode\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (initLayer) {\r\n\t\t\t\t\t\tinitLayer(layer, gantt);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.tempCollection.splice(i, 1);\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\taddLayer: function (config) {\r\n\t\t\t\tif(config){\r\n\t\t\t\t\tif(typeof config == \"function\"){\r\n\t\t\t\t\t\tconfig = {renderer: config};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(config.filter === undefined){\r\n\t\t\t\t\t\tconfig.filter = mergeFilters(defaultFilters || []);\r\n\t\t\t\t\t}else if(config.filter instanceof Array){\r\n\t\t\t\t\t\tconfig.filter.push(defaultFilters);\r\n\t\t\t\t\t\tconfig.filter = mergeFilters(config.filter);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!config.container){\r\n\t\t\t\t\t\tconfig.container = document.createElement(\"div\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar self = this;\r\n\t\t\t\t\tconfig.requestUpdate = function(){\r\n\t\t\t\t\t\tif(gantt.config.smart_rendering && !isLegacyRender(gantt)){\r\n\t\t\t\t\t\t\tif(self.renderers[config.id]){\r\n\t\t\t\t\t\t\t\tself.onUpdateRequest(self.renderers[config.id]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._add(config);\r\n\t\t\t\treturn (config ? config.id : undefined);\r\n\t\t\t},\r\n\t\t\tonUpdateRequest: function(layer){\r\n\r\n\t\t\t},\r\n\r\n\t\t\teachLayer: function(code){\r\n\t\t\t\tfor (var i in this.renderers) {\r\n\t\t\t\t\tcode(this.renderers[i]);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tremoveLayer: function (id) {\r\n\t\t\t\tif(!this.renderers[id])\r\n\t\t\t\t\treturn;\r\n\t\t\t\tthis.renderers[id].destructor();\r\n\t\t\t\tdelete this.renderers[id];\r\n\t\t\t},\r\n\t\t\tclear: function () {\r\n\t\t\t\tfor (var i in this.renderers) {\r\n\t\t\t\t\tthis.renderers[i].destructor();\r\n\t\t\t\t}\r\n\t\t\t\tthis.renderers = {};\r\n\t\t\t}//,\r\n\t\t\t//prepareConfig: prepareConfig\r\n\t\t};\r\n\r\n\t\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\t\trenderGroup.clear();\r\n\t\t\trenderGroup = null;\r\n\t\t});\r\n\r\n\t\treturn renderGroup;\r\n\t}\r\n};};\r\n\r\n\r\nfunction mergeFilters(filter_methods){\r\n\tif(!(filter_methods instanceof Array)){\r\n\t\tfilter_methods = Array.prototype.slice.call(arguments, 0);\r\n\t}\r\n\r\n\treturn function(obj){\r\n\t\tvar res = true;\r\n\t\tfor(var i = 0, len = filter_methods.length; i < len; i++){\r\n\t\t\tvar filter_method = filter_methods[i];\r\n\t\t\tif(filter_method){\r\n\t\t\t\tres = res && (filter_method(obj.id, obj) !== false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t};\r\n}\r\n\r\n\r\nexport default layerFactory;\r\n","export default function(item, view, config){\r\n\tif(!item.start_date || !item.end_date){\r\n\t\treturn null;\r\n\t}\r\n\tvar padding = 200;\r\n\tvar startCoord = view.posFromDate(item.start_date);\r\n\tvar endCoord = view.posFromDate(item.end_date);\r\n\tvar left = Math.min(startCoord, endCoord) - padding;\r\n\tvar right = Math.max(startCoord, endCoord) + padding;\r\n\treturn {\r\n\t\ttop: view.getItemTop(item.id),\r\n\t\theight: view.getItemHeight(item.id),\r\n\t\tleft: left,\r\n\t\twidth: right - left\r\n\t};\r\n};","import getLinkRectangle from \"../get_link_rectangle\";\r\n\r\nexport default function(){\r\n\tvar coordinates = [];\r\n\tvar calculated = false;\r\n\r\n\tfunction clearCache(){\r\n\t\tcoordinates = [];\r\n\t\tcalculated = false;\r\n\t}\r\n\r\n\tfunction buildCache(datastore, view, gantt){\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar visibleItems = datastore.getVisibleItems();\r\n\t\t//datastore.eachItem(function(link){\r\n\t\tvisibleItems.forEach(function(link){\r\n\t\t\tvar rec = getLinkRectangle(link, view, config, gantt);\r\n\t\t\tif(!rec){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcoordinates.push({id: link.id, rec: rec});\r\n\t\t});\r\n\r\n\t\tcoordinates.sort(function(a, b){\r\n\t\t\tif(a.rec.right < b.rec.right){\r\n\t\t\t\treturn -1;\r\n\t\t\t}else {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcalculated = true;\r\n\t}\r\n\r\n\tvar initialized = false;\r\n\tfunction init(datastore){\r\n\t\tif(initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tinitialized = true;\r\n\t\tdatastore.attachEvent(\"onPreFilter\", clearCache);\r\n\t\tdatastore.attachEvent(\"onStoreUpdated\", clearCache);\r\n\t\tdatastore.attachEvent(\"onClearAll\", clearCache);\r\n\t\tdatastore.attachEvent(\"onBeforeStoreUpdate\", clearCache);\r\n\t}\r\n\r\n\treturn function getVisibleLinksRange(gantt, view, config, datastore, viewport){\r\n\t\tinit(datastore);\r\n\t\tif(!calculated){\r\n\t\t\tbuildCache(datastore, view, gantt);\r\n\t\t}\r\n\r\n\t\tvar visibleBoxes = [];\r\n\t\tfor(var i = 0; i < coordinates.length; i++){\r\n\t\t\tvar item = coordinates[i];\r\n\t\t\tvar box = item.rec;\r\n\t\t\tif(box.right < viewport.x){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif(box.left < viewport.x_end && box.right > viewport.x && box.top < viewport.y_end && box.bottom > viewport.y){\r\n\t\t\t\tvisibleBoxes.push(item.id);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn {\r\n\t\t\tids: visibleBoxes\r\n\t\t};\r\n\t};\r\n};","\r\n\r\nimport barRectangle from \"./get_bar_rectangle\";\r\n\r\nexport default function getLinkBox(item, view, config, gantt){\r\n\tif(!gantt.isTaskExists(item.source)){\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif(!gantt.isTaskExists(item.target)){\r\n\t\treturn null;\r\n\t}\r\n\tvar sourceBox = barRectangle(gantt.getTask(item.source), view, gantt);\r\n\tvar targetBox = barRectangle(gantt.getTask(item.target), view, gantt);\r\n\r\n\tif(!sourceBox || !targetBox){\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar padding = 100;\r\n\tvar left = Math.min(sourceBox.left, targetBox.left) - padding;\r\n\tvar right = Math.max(sourceBox.left + sourceBox.width, targetBox.left + targetBox.width) + padding;\r\n\tvar top = Math.min(sourceBox.top, targetBox.top) - padding;\r\n\tvar bottom = Math.max(sourceBox.top + sourceBox.height, targetBox.top + targetBox.height) + padding;\r\n\r\n\treturn {\r\n\t\ttop: top,\r\n\t\theight: bottom - top,\r\n\t\tbottom,\r\n\t\tleft: left,\r\n\t\twidth: right - left,\r\n\t\tright\r\n\t};\r\n};\r\n","\r\n// optimized checker for links smart rendering\r\n\r\n// first check the vertical position since it's easier to calculate\r\n\r\nexport default function isLinkInViewPort(item, viewport, view, config, gantt){\r\n\tvar source = view.$gantt.getTask(item.source);\r\n\tvar target = view.$gantt.getTask(item.target);\r\n\t// check vertical visibility first since it's a lighter check\r\n\tvar sourceTop = view.getItemTop(source.id);\r\n\tvar sourceHeight = view.getItemHeight(source.id);\r\n\r\n\tvar targetTop = view.getItemTop(target.id);\r\n\tvar targetHeight = view.getItemHeight(target.id);\r\n\r\n\tif(viewport.y > sourceTop + sourceHeight &&\r\n\t\tviewport.y > targetTop + targetHeight){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(viewport.y_end < targetTop &&\r\n\t\tviewport.y_end < sourceTop){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar padding = 100;\r\n\tvar sourceLeft = view.posFromDate(source.start_date);\r\n\tvar sourceRight = view.posFromDate(source.end_date);\r\n\tvar targetLeft = view.posFromDate(target.start_date);\r\n\tvar targetRight = view.posFromDate(target.end_date);\r\n\r\n\tif(sourceLeft > sourceRight){\r\n\t\t// rtl\r\n\t\tvar tmp = sourceRight;\r\n\t\tsourceRight = sourceLeft;\r\n\t\tsourceLeft = tmp;\r\n\t}\r\n\tif(targetLeft > targetRight){\r\n\t\t// rtl\r\n\t\tvar tmp = targetRight;\r\n\t\ttargetRight = targetLeft;\r\n\t\ttargetLeft = tmp;\r\n\t}\r\n\tsourceLeft += -padding; // add buffer for custom elements\r\n\tsourceRight += padding;\r\n\ttargetLeft += -padding; // add buffer for custom elements\r\n\ttargetRight += padding;\r\n\r\n\tif(viewport.x > sourceRight &&\r\n\t\tviewport.x > targetRight){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif(viewport.x_end < sourceLeft &&\r\n\t\tviewport.x_end < targetLeft){\r\n\t\treturn false;\r\n\t}\r\n\treturn true;\r\n};\r\n","import createLayerFactory from \"./render/layer_engine\";\r\n\r\nimport getVisibleTaskRange from \"./render/viewport/get_visible_bars_range\";\r\nimport getVisibleLinksRangeFactory from \"./render/viewport/factory/get_visible_link_range\";\r\n\r\nimport isLinkInViewport from \"./render/viewport/is_link_in_viewport\";\r\n\r\nfunction initLayer(layer, gantt){\r\n\tif(!layer.view){\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar view = layer.view;\r\n\tif(typeof view === \"string\"){\r\n\t\tview = gantt.$ui.getView(view);\r\n\t}\r\n\r\n\tif(view && view.attachEvent){\r\n\t\tview.attachEvent(\"onScroll\", function(){\r\n\t\t\tvar state = gantt.$services.getService(\"state\");\r\n\t\t\t// don't repaint if we're inside batchUpdate, a complete repaint will be called afterwards\r\n\t\t\tif(!state.getState(\"batchUpdate\").batch_update && !view.$config.$skipSmartRenderOnScroll){\r\n\t\t\t\tif(layer.requestUpdate){\r\n\t\t\t\t\tlayer.requestUpdate();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nvar createLayerEngine = function(gantt){\r\n\tvar factory = createLayerFactory(gantt);\r\n\treturn {\r\n\t\tgetDataRender: function(name){\r\n\t\t\treturn gantt.$services.getService(\"layer:\" + name) || null;\r\n\t\t},\r\n\t\tcreateDataRender: function(config){\r\n\t\t\tvar name = config.name,\r\n\t\t\t\tdefaultContainer = config.defaultContainer,\r\n\t\t\t\tpreviusSiblingContainer = config.defaultContainerSibling;\r\n\r\n\t\t\tvar layers = factory.createGroup(\r\n\t\t\t\tdefaultContainer,\r\n\t\t\t\tpreviusSiblingContainer,\r\n\t\t\t\tfunction(itemId, item){\r\n\t\t\t\t\tif(layers.filters){\r\n\t\t\t\t\t\tfor(var i = 0; i < layers.filters.length; i++){\r\n\t\t\t\t\t\t\tif(layers.filters[i](itemId, item) === false){\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tinitLayer\r\n\t\t\t);\r\n\r\n\t\t\tgantt.$services.setService(\"layer:\" + name, function(){\r\n\t\t\t\treturn layers;\r\n\t\t\t});\r\n\r\n\t\t\tgantt.attachEvent(\"onGanttReady\", function () {\r\n\t\t\t\tlayers.addLayer();// init layers on start\r\n\t\t\t});\r\n\r\n\t\t\treturn layers;\r\n\t\t},\r\n\t\tinit: function(){\r\n\t\t\tvar taskLayers = this.createDataRender({\r\n\t\t\t\tname: \"task\",\r\n\t\t\t\tdefaultContainer: function(){\r\n\t\t\t\t\tif(gantt.$task_data){\r\n\t\t\t\t\t\treturn gantt.$task_data;\r\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\r\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_data;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tdefaultContainerSibling: function(){\r\n\t\t\t\t\tif(gantt.$task_links){\r\n\t\t\t\t\t\treturn gantt.$task_links;\r\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\r\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_links;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tfilter: function(item){\r\n\r\n\t\t\t\t}\r\n\t\t\t}, gantt);\r\n\r\n\t\t\tvar linkLayers = this.createDataRender({\r\n\t\t\t\tname: \"link\",\r\n\t\t\t\tdefaultContainer: function(){\r\n\t\t\t\t\tif(gantt.$task_data){\r\n\t\t\t\t\t\treturn gantt.$task_data;\r\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\r\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, gantt);\r\n\r\n\t\t\treturn {\r\n\t\t\t\taddTaskLayer: function(config){\r\n\t\t\t\t\tconst rangeFunction = getVisibleTaskRange;\r\n\t\t\t\t\tif(typeof config === \"function\"){\r\n\t\t\t\t\t\tconfig = {\r\n\t\t\t\t\t\t\trenderer: {\r\n\t\t\t\t\t\t\t\trender: config,\r\n\t\t\t\t\t\t\t\tgetVisibleRange: rangeFunction\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(config.renderer && !config.renderer.getVisibleRange){\r\n\t\t\t\t\t\t\tconfig.renderer.getVisibleRange = rangeFunction;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconfig.view = \"timeline\";\r\n\r\n\t\t\t\t\treturn taskLayers.addLayer(config);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_getTaskLayers: function(){\r\n\t\t\t\t\treturn taskLayers.getLayers();\r\n\t\t\t\t},\r\n\t\t\t\tremoveTaskLayer: function(id){\r\n\t\t\t\t\ttaskLayers.removeLayer(id);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_clearTaskLayers: function(){\r\n\t\t\t\t\ttaskLayers.clear();\r\n\t\t\t\t},\r\n\t\t\t\taddLinkLayer: function(config){\r\n\t\t\t\t\tconst rangeFunction = getVisibleLinksRangeFactory();\r\n\t\t\t\t\tif(typeof config === \"function\"){\r\n\t\t\t\t\t\tconfig = {\r\n\t\t\t\t\t\t\trenderer: {\r\n\t\t\t\t\t\t\t\trender: config,\r\n\t\t\t\t\t\t\t\tgetVisibleRange: rangeFunction\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(config.renderer && !config.renderer.getVisibleRange){\r\n\t\t\t\t\t\t\tconfig.renderer.getVisibleRange = rangeFunction;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconfig.view = \"timeline\";\r\n\t\t\t\t\tif(config && config.renderer){\r\n\t\t\t\t\t\tif(!config.renderer.getRectangle && !config.renderer.isInViewPort){\r\n\t\t\t\t\t\t\tconfig.renderer.isInViewPort = isLinkInViewport;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn linkLayers.addLayer(config);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_getLinkLayers: function(){\r\n\t\t\t\t\treturn linkLayers.getLayers();\r\n\t\t\t\t},\r\n\t\t\t\tremoveLinkLayer: function(id){\r\n\t\t\t\t\tlinkLayers.removeLayer(id);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_clearLinkLayers: function(){\r\n\t\t\t\t\tlinkLayers.clear();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n};\r\n\r\nexport default createLayerEngine;","import * as utils from \"../../../utils/utils\";\r\nimport eventable from \"../../../utils/eventable\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\n\r\nvar Cell = (function () {\r\n\t\"use strict\";\r\n\r\n\tfunction Cell(parent, config, factory, gantt) {\r\n\t\tif (parent) {\r\n\t\t\tthis.$container = domHelpers.toNode(parent);\r\n\t\t\tthis.$parent = parent;\r\n\t\t}\r\n\t\t// save config\r\n\t\tthis.$config = utils.mixin(config, {\r\n\t\t\theaderHeight: 33\r\n\t\t});\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$domEvents = gantt._createDomEventScope();\r\n\t\t// set id\r\n\t\tthis.$id = config.id || \"c\" + utils.uid();\r\n\r\n\t\tthis.$name = \"cell\";\r\n\t\tthis.$factory = factory;\r\n\r\n\t\teventable(this);\r\n\r\n\t}\r\n\r\n\tCell.prototype.destructor = function () {\r\n\t\tthis.$parent = this.$container = this.$view = null;\r\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\r\n\t\tmouse.detach(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\r\n\t\tthis.$domEvents.detachAll();\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\t};\r\n\tCell.prototype.cell = function (id) {\r\n\t\treturn null;\r\n\t};\r\n\r\n\tCell.prototype.scrollTo = function(left, top){\r\n\r\n\t\t//GS-333 Add a way to scroll the HTML views:\r\n\t\tvar cell = this.$view;\r\n\t\tif (this.$config.html) cell = this.$view.firstChild;\r\n\r\n\t\tif (left*1 == left){\r\n\t\t\tcell.scrollLeft = left;\r\n\t\t}\r\n\t\tif(top*1 == top){\r\n\t\t\tcell.scrollTop = top;\r\n\t\t}\r\n\t};\r\n\r\n\tCell.prototype.clear = function(){\r\n\t\tthis.getNode().innerHTML = \"\";\r\n\t\tthis.getNode().className = \"gantt_layout_content\";\r\n\t\tthis.getNode().style.padding = \"0\";\r\n\t};\r\n\r\n\tCell.prototype.resize = function (final) {\r\n\t\tif (this.$parent) {\r\n\t\t\treturn this.$parent.resize(final);\r\n\t\t}\r\n\r\n\t\tif(final === false){\r\n\t\t\tthis.$preResize = true;\r\n\t\t}\r\n\r\n\t\tvar topCont = this.$container;\r\n\t\tvar x = topCont.offsetWidth;\r\n\t\tvar y = topCont.offsetHeight;\r\n\t\tvar topSize = this.getSize();\r\n\t\tif (topCont === document.body) {\r\n\t\t\tx = document.body.offsetWidth;\r\n\t\t\ty = document.body.offsetHeight;\r\n\t\t}\r\n\t\tif (x < topSize.minWidth) {\r\n\t\t\tx = topSize.minWidth;\r\n\t\t}\r\n\t\tif (x > topSize.maxWidth) {\r\n\t\t\tx = topSize.maxWidth;\r\n\t\t}\r\n\t\tif (y < topSize.minHeight) {\r\n\t\t\ty = topSize.minHeight;\r\n\t\t}\r\n\t\tif (y > topSize.maxHeight) {\r\n\t\t\ty = topSize.maxHeight;\r\n\t\t}\r\n\t\tthis.setSize(x, y);\r\n\r\n\t\tif(!this.$preResize){\r\n\t\t//\tself.callEvent(\"onResize\", [x, y]);\r\n\t\t}\r\n\t\tthis.$preResize = false;\r\n\t};\r\n\r\n\tCell.prototype.hide = function () {\r\n\t\tthis._hide(true);\r\n\t\tthis.resize();\r\n\t};\r\n\tCell.prototype.show = function (force) {\r\n\t\tthis._hide(false);\r\n\t\tif (force && this.$parent) {\r\n\t\t\tthis.$parent.show();\r\n\t\t}\r\n\t\tthis.resize();\r\n\t};\r\n\tCell.prototype._hide = function (mode) {\r\n\t\tif (mode === true && this.$view.parentNode) {\r\n\t\t\tthis.$view.parentNode.removeChild(this.$view);\r\n\t\t}\r\n\t\telse if (mode === false && !this.$view.parentNode) {\r\n\t\t\tvar index = this.$parent.cellIndex(this.$id);\r\n\t\t\tthis.$parent.moveView(this, index);\r\n\t\t}\r\n\t\tthis.$config.hidden = mode;\r\n\t};\r\n\tCell.prototype.$toHTML = function (content, css) {\r\n\t\tif (content === void 0) { content = \"\"; }\r\n\t\tcss = [(css || \"\"), (this.$config.css || \"\")].join(\" \");\r\n\t\tvar obj = this.$config;\r\n\t\tvar header = \"\";\r\n\t\tif (obj.raw) {\r\n\t\t\tcontent = typeof obj.raw === \"string\" ? obj.raw : \"\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (!content) {\r\n\t\t\t\tcontent = \"\" + (obj.html || \"\") + \"
\";\r\n\t\t\t}\r\n\t\t\tif (obj.header) {\r\n\t\t\t\tvar collapseIcon = obj.canCollapse ? \"\" : \"\";\r\n\t\t\t\theader = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\" + header + content + \"
\";\r\n\t};\r\n\tCell.prototype.$fill = function (node, parent) {\r\n\t\tthis.$view = node;\r\n\t\tthis.$parent = parent;\r\n\t\tthis.init();\r\n\t};\r\n\tCell.prototype.getNode = function () {\r\n\t\treturn (this.$view.querySelector(\"gantt_layout_cell\") || this.$view);\r\n\t};\r\n\tCell.prototype.init = function () {\r\n\t\t// [NOT-GOOD] code is executed for each component, while it still has only one handler, it is no good\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tthis._headerClickHandler = function(e){\r\n\t\t\tvar cellId = domHelpers.locateAttribute(e, \"data-cell-id\");\r\n\t\t\tif(cellId == self.$id){\r\n\t\t\t\tself.toggle();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\r\n\t\tmouse.delegate(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\r\n\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t};\r\n\tCell.prototype.toggle = function () {\r\n\t\tthis.$config.collapsed = !this.$config.collapsed;\r\n\t\tthis.resize();\r\n\t};\r\n\tCell.prototype.getSize = function () {\r\n\t\tvar size = {\r\n\t\t\theight: this.$config.height || 0,\r\n\t\t\twidth: this.$config.width || 0,\r\n\t\t\tgravity: this.$config.gravity || 1,\r\n\t\t\tminHeight: this.$config.minHeight || 0,\r\n\t\t\tminWidth: this.$config.minWidth || 0,\r\n\t\t\tmaxHeight: this.$config.maxHeight || 100000000000,\r\n\t\t\tmaxWidth: this.$config.maxWidth || 100000000000\r\n\t\t};\r\n\t\tif (this.$config.collapsed) {\r\n\t\t\tvar mode = this.$config.mode === \"x\";\r\n\t\t\tsize[mode ? \"width\" : \"height\"] = size[mode ? \"maxWidth\" : \"maxHeight\"] = this.$config.headerHeight;\r\n\t\t}\r\n\t\treturn size;\r\n\t};\r\n\r\n\tCell.prototype.getContentSize = function(){\r\n\r\n\t\tvar width = this.$lastSize.contentX;\r\n\t\tif(width !== width*1){\r\n\t\t\twidth = this.$lastSize.width;\r\n\t\t}\r\n\r\n\t\tvar height = this.$lastSize.contentY;\r\n\t\tif(height !== height*1){\r\n\t\t\theight = this.$lastSize.height;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\twidth: width,\r\n\t\t\theight: height\r\n\t\t};\r\n\t};\r\n\r\n\tCell.prototype._getBorderSizes = function(){\r\n\t\tvar borders = {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0,\r\n\t\t\thorizontal: 0,\r\n\t\t\tvertical: 0\r\n\t\t};\r\n\t\tif(this._currentBorders){\r\n\t\t\tif(this._currentBorders[this._borders.left]){\r\n\t\t\t\tborders.left = 1;\r\n\t\t\t\tborders.horizontal++;\r\n\t\t\t}\r\n\r\n\t\t\tif(this._currentBorders[this._borders.right]){\r\n\t\t\t\tborders.right = 1;\r\n\t\t\t\tborders.horizontal++;\r\n\t\t\t}\r\n\r\n\t\t\tif(this._currentBorders[this._borders.top]){\r\n\t\t\t\tborders.top = 1;\r\n\t\t\t\tborders.vertical++;\r\n\t\t\t}\r\n\r\n\t\t\tif(this._currentBorders[this._borders.bottom]){\r\n\t\t\t\tborders.bottom = 1;\r\n\t\t\t\tborders.vertical++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn borders;\r\n\r\n\t};\r\n\r\n\tCell.prototype.setSize = function (x, y) {\r\n\t\tthis.$view.style.width = x + \"px\";\r\n\t\tthis.$view.style.height = y + \"px\";\r\n\r\n\t\tvar borders = this._getBorderSizes();\r\n\t\tvar contentY = y - borders.vertical;\r\n\t\tvar contentX = x - borders.horizontal;\r\n\r\n\t\tthis.$lastSize = { x: x, y: y, contentX: contentX, contentY: contentY };\r\n\t\tif (this.$config.header) {\r\n\t\t\tthis._sizeHeader();\r\n\t\t}else{\r\n\t\t\tthis._sizeContent();\r\n\t\t}\r\n\t};\r\n\r\n\tCell.prototype._borders = {\r\n\t\t\"left\":\"gantt_layout_cell_border_left\",\r\n\t\t\"right\":\"gantt_layout_cell_border_right\",\r\n\t\t\"top\":\"gantt_layout_cell_border_top\",\r\n\t\t\"bottom\":\"gantt_layout_cell_border_bottom\"\r\n\t};\r\n\r\n\tCell.prototype._setBorders = function(css, view){\r\n\t\tif(!view) {\r\n\t\t\tview = this;\r\n\t\t}\r\n\t\tvar node = view.$view;\r\n\r\n\t\tfor( var i in this._borders){\r\n\t\t\tdomHelpers.removeClassName(node, this._borders[i]);\r\n\t\t}\r\n\r\n\t\tif(typeof css == \"string\"){\r\n\t\t\tcss = [css];\r\n\t\t}\r\n\r\n\t\tvar cssHash = {};\r\n\r\n\t\tfor(var i = 0; i < css.length; i++){\r\n\t\t\tdomHelpers.addClassName(node, css[i]);\r\n\t\t\tcssHash[css[i]] = true;\r\n\t\t}\r\n\r\n\t\tview._currentBorders = cssHash;\r\n\t};\r\n\r\n\r\n\tCell.prototype._sizeContent = function(){\r\n\t\tvar content = this.$view.childNodes[0];\r\n\t\tif(content && content.className == \"gantt_layout_content\"){\r\n\t\t\tcontent.style.height = this.$lastSize.contentY + \"px\";\r\n\t\t}\r\n\t};\r\n\r\n\tCell.prototype._sizeHeader = function () {\r\n\t\tvar size = this.$lastSize;\r\n\t\tsize.contentY -= this.$config.headerHeight;\r\n\t\tvar header = this.$view.childNodes[0];\r\n\t\tvar content = this.$view.childNodes[1];\r\n\t\tvar xLayout = this.$config.mode === \"x\";\r\n\t\tif (this.$config.collapsed) {\r\n\t\t\tcontent.style.display = \"none\";\r\n\t\t\tif (xLayout) {\r\n\t\t\t\theader.className = \"gantt_layout_header collapsed_x\";\r\n\t\t\t\theader.style.width = size.y + \"px\";\r\n\t\t\t\tvar d = Math.floor(size.y / 2 - size.x / 2);\r\n\t\t\t\theader.style.transform = \"rotate(90deg) translate(\" + d + \"px, \" + d + \"px)\";\r\n\t\t\t\tcontent.style.display = \"none\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\theader.className = \"gantt_layout_header collapsed_y\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (xLayout) {\r\n\t\t\t\theader.className = \"gantt_layout_header\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\theader.className = \"gantt_layout_header vertical\";\r\n\t\t\t}\r\n\t\t\theader.style.width = 'auto';\r\n\t\t\theader.style.transform = '';\r\n\t\t\tcontent.style.display = \"\";\r\n\t\t\tcontent.style.height = size.contentY + \"px\";\r\n\t\t}\r\n\t\theader.style.height = this.$config.headerHeight + \"px\";\r\n\t};\r\n\treturn Cell;\r\n}());\r\n\r\nexport default Cell;\r\n","export default function (d, b) {\r\n\tfor (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\tfunction __() { this.constructor = d; }\r\n\td.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};","import __extends from \"../../../utils/extends\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport Cell from \"./cell\";\r\n\r\nvar Layout = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\t__extends(Layout, _super);\r\n\tfunction Layout(parent, config, factory) {\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\r\n\t\tif(parent)\r\n\t\t\t_this.$root = true;\r\n\r\n\t\t_this._parseConfig(config);\r\n\t\t_this.$name = \"layout\";\r\n\t\treturn _this;\r\n\t}\r\n\r\n\tLayout.prototype.destructor = function () {\r\n\t\tif (this.$container && this.$view) {\r\n\t\t\tdomHelpers.removeNode(this.$view);\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tvar child = this.$cells[i];\r\n\t\t\tchild.destructor();\r\n\t\t}\r\n\t\tthis.$cells = [];\r\n\r\n\t\t_super.prototype.destructor.call(this);\r\n\t};\r\n\r\n\tLayout.prototype._resizeScrollbars = function(autosize, scrollbars){\r\n\t\tvar scrollChanged = false;\r\n\t\tvar visibleScrollbars = [],\r\n\t\t\thiddenScrollbars = [];\r\n\r\n\t\tconst scrollbarsToHide = [];\r\n\r\n\t\tfunction showScrollbar(scrollbar){\r\n\t\t\tscrollbar.$parent.show();\r\n\t\t\tscrollChanged = true;\r\n\t\t\tvisibleScrollbars.push(scrollbar);\r\n\t\t}\r\n\t\tfunction hideScrollbar(scrollbar){\r\n\t\t\tscrollbar.$parent.hide();\r\n\t\t\tscrollChanged = true;\r\n\t\t\thiddenScrollbars.push(scrollbar);\r\n\t\t}\r\n\r\n\t\tvar scrollbar;\r\n\t\tfor(var i = 0; i < scrollbars.length; i++){\r\n\t\t\tscrollbar = scrollbars[i];\r\n\r\n\t\t\tif(autosize[scrollbar.$config.scroll]) {\r\n\t\t\t\thideScrollbar(scrollbar);\r\n\t\t\t}else if(scrollbar.shouldHide()){\r\n\t\t\t\t//hideScrollbar(scrollbar);\r\n\t\t\t\tscrollbarsToHide.push(scrollbar);\r\n\t\t\t}else if(scrollbar.shouldShow()){\r\n\t\t\t\tshowScrollbar(scrollbar);\r\n\t\t\t}else{\r\n\t\t\t\tif(scrollbar.isVisible()){\r\n\t\t\t\t\tvisibleScrollbars.push(scrollbar);\r\n\t\t\t\t}else{\r\n\t\t\t\t\thiddenScrollbars.push(scrollbar);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar visibleGroups = {};\r\n\t\tfor(var i = 0; i < visibleScrollbars.length; i++){\r\n\t\t\tif(visibleScrollbars[i].$config.group){\r\n\t\t\t\tvisibleGroups[visibleScrollbars[i].$config.group] = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// GS-2220\r\n\t\tscrollbarsToHide.forEach(function(scrollbar){\r\n\t\t\tif(!(scrollbar.$config.group && visibleGroups[scrollbar.$config.group])){\r\n\t\t\t\thideScrollbar(scrollbar);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfor(var i = 0; i < hiddenScrollbars.length; i++){\r\n\t\t\tscrollbar = hiddenScrollbars[i];\r\n\r\n\t\t\tif(scrollbar.$config.group && visibleGroups[scrollbar.$config.group]){\r\n\t\t\t\tshowScrollbar(scrollbar);\r\n\t\t\t\t// GS-707 If the scrollbar was hidden then showed, the container resize shouldn't happen because of that\r\n\t\t\t\tfor(var j = 0; j < visibleScrollbars.length; j++){\r\n\t\t\t\t\tif(visibleScrollbars[j] == scrollbar){\r\n\t\t\t\t\t\tthis.$gantt.$scrollbarRepaint = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn scrollChanged;\r\n\t};\r\n\r\n\tLayout.prototype._syncCellSizes = function(groupName, newSize){\r\n\t\tif(!groupName)\r\n\t\t\treturn;\r\n\r\n\t\tvar groups = {};\r\n\r\n\t\tthis._eachChild(function(cell){\r\n\t\t\tif(cell.$config.group && cell.$name != \"scrollbar\" && cell.$name != \"resizer\"){\r\n\t\t\t\tif(!groups[cell.$config.group]){\r\n\t\t\t\t\tgroups[cell.$config.group] = [];\r\n\t\t\t\t}\r\n\t\t\t\tgroups[cell.$config.group].push(cell);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(groups[groupName]){\r\n\t\t\tthis._syncGroupSize(groups[groupName], newSize);\r\n\t\t}\r\n\t\treturn groups[groupName];\r\n\t};\r\n\r\n\tLayout.prototype._syncGroupSize = function(cells, newSize){\r\n\t\tif(!cells.length) return;\r\n\r\n\t\tvar property = cells[0].$parent._xLayout ? \"width\" : \"height\";\r\n\t\tvar direction = cells[0].$parent.getNextSibling(cells[0].$id) ? 1 : -1;\r\n\r\n\t\tvar newSizeValue = newSize.value;\r\n\t\tvar isGravity = newSize.isGravity;\r\n\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\tvar ownSize = cells[i].getSize();\r\n\r\n\t\t\tvar resizeSibling = direction > 0 ? cells[i].$parent.getNextSibling(cells[i].$id) : cells[i].$parent.getPrevSibling(cells[i].$id);\r\n\t\t\tif(resizeSibling.$name == \"resizer\"){\r\n\t\t\t\tresizeSibling = direction > 0 ? resizeSibling.$parent.getNextSibling(resizeSibling.$id) : resizeSibling.$parent.getPrevSibling(resizeSibling.$id);\r\n\t\t\t}\r\n\t\t\tvar siblingSize = resizeSibling.getSize();\r\n\r\n\t\t\tif(!isGravity) {\r\n\t\t\t\tif(resizeSibling[property]){\r\n\t\t\t\t\tvar totalGravity = ownSize.gravity + siblingSize.gravity;\r\n\t\t\t\t\tvar totalSize = ownSize[property] + siblingSize[property];\r\n\t\t\t\t\tvar k = totalGravity / totalSize;\r\n\t\t\t\t\tcells[i].$config.gravity = k * newSizeValue;\r\n\r\n\t\t\t\t\tresizeSibling.$config[property] = totalSize - newSizeValue;\r\n\t\t\t\t\tresizeSibling.$config.gravity = totalGravity - k * newSizeValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcells[i].$config[property] = newSizeValue;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tcells[i].$config.gravity = newSizeValue;\r\n\t\t\t}\r\n\r\n\t\t\tvar mainGrid = this.$gantt.$ui.getView(\"grid\");\r\n\t\t\tif(mainGrid && cells[i].$content === mainGrid && !mainGrid.$config.scrollable && !isGravity){\r\n\t\t\t\tthis.$gantt.config.grid_width = newSizeValue;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.resize = function(startStage){\r\n\t\tvar mainCall = false;\r\n\t\tif(this.$root && !this._resizeInProgress){\r\n\t\t\tthis.callEvent(\"onBeforeResize\", []);\r\n\t\t\tmainCall = true;\r\n\t\t\tthis._resizeInProgress = true;\r\n\t\t}\r\n\r\n\t\t_super.prototype.resize.call(this, true);\r\n\t\t_super.prototype.resize.call(this, false);\r\n\r\n\t\tif(mainCall){\r\n\r\n\t\t\tvar contentViews = [];\r\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"viewCell\"));\r\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"viewLayout\"));\r\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"hostCell\"));\r\n\r\n\t\t\tvar scrollbars = this.getCellsByType(\"scroller\");\r\n\r\n\t\t\tfor(var i = 0; i < contentViews.length; i++){\r\n\t\t\t\tif(!contentViews[i].$config.hidden)\r\n\t\t\t\t\tcontentViews[i].setContentSize();\r\n\t\t\t}\r\n\r\n\t\t\tvar autosize = this._getAutosizeMode(this.$config.autosize);\r\n\r\n\t/* // possible to rollback set content size when autisize is disabled, not sure if need to\r\n\t\t\tcontentViews.forEach(function(view){\r\n\t\t\t\tconst parent = view.$parent;\r\n\t\t\t\tif(!autosize.x){\r\n\t\t\t\t\tif(parent.$config.$originalWidthStored){\r\n\t\t\t\t\t\tparent.$config.$originalWidthStored = false;\r\n\t\t\t\t\t\tparent.$config.width = parent.$config.$originalWidth;\r\n\t\t\t\t\t\tparent.$config.$originalWidth = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!autosize.y){\r\n\t\t\t\t\tif(parent.$config.$originalHeightStored){\r\n\t\t\t\t\t\tparent.$config.$originalHeightStored = false;\r\n\t\t\t\t\t\tparent.$config.height = parent.$config.$originalHeight;\r\n\t\t\t\t\t\tparent.$config.$originalHeight = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});*/\r\n\t\t\t\r\n\t\t\tvar scrollChanged = this._resizeScrollbars(autosize, scrollbars);\r\n\r\n\t\t\tif(this.$config.autosize){\r\n\t\t\t\tthis.autosize(this.$config.autosize);\r\n\t\t\t\tcontentViews.forEach(function(view){\r\n\t\t\t\t\tconst parent = view.$parent;\r\n\t\t\t\t\tconst sizes = parent.getContentSize(autosize);\r\n\t\t\t\t\tif(autosize.x){\r\n\t\t\t\t\t\tif(!parent.$config.$originalWidthStored){\r\n\t\t\t\t\t\t\tparent.$config.$originalWidthStored = true;\r\n\t\t\t\t\t\t\tparent.$config.$originalWidth = parent.$config.width;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tparent.$config.width = sizes.width;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(autosize.y){\r\n\t\t\t\t\t\tif(!parent.$config.$originalHeightStored){\r\n\t\t\t\t\t\t\tparent.$config.$originalHeightStored = true;\r\n\t\t\t\t\t\t\tparent.$config.$originalHeight = parent.$config.height;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tparent.$config.height = sizes.height;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tscrollChanged = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(scrollChanged){\r\n\t\t\t\tthis.resize();\r\n\t\t\t\tfor(var i = 0; i < contentViews.length; i++){\r\n\t\t\t\t\tif(!contentViews[i].$config.hidden)\r\n\t\t\t\t\t\tcontentViews[i].setContentSize();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.callEvent(\"onResize\", []);\r\n\t\t}\r\n\t\tif(mainCall){\r\n\t\t\tthis._resizeInProgress = false;\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype._eachChild = function(code, cell){\r\n\t\tcell = cell || this;\r\n\t\tcode(cell);\r\n\t\tif(cell.$cells){\r\n\t\t\tfor(var i = 0; i < cell.$cells.length; i++){\r\n\t\t\t\tthis._eachChild(code, cell.$cells[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.isChild = function(view){\r\n\t\tvar res = false;\r\n\t\tthis._eachChild(function(child){\r\n\t\t\tif(child === view || child.$content === view){\r\n\t\t\t\tres = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn res;\r\n\t};\r\n\r\n\tLayout.prototype.getCellsByType = function(type){\r\n\t\tvar res = [];\r\n\t\tif(type === this.$name){\r\n\t\t\tres.push(this);\r\n\t\t}\r\n\r\n\t\tif(this.$content && this.$content.$name == type){\r\n\t\t\tres.push(this.$content);\r\n\t\t}\r\n\r\n\t\tif(this.$cells){\r\n\t\t\tfor(var i = 0; i < this.$cells.length; i++){\r\n\t\t\t\tvar children = Layout.prototype.getCellsByType.call(this.$cells[i], type);\r\n\t\t\t\tif(children.length){\r\n\t\t\t\t\tres.push.apply(res, children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\tLayout.prototype.getNextSibling = function(cellId){\r\n\t\tvar index = this.cellIndex(cellId);\r\n\t\tif(index >= 0 && this.$cells[index + 1]){\r\n\t\t\treturn this.$cells[index + 1];\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.getPrevSibling = function(cellId){\r\n\t\tvar index = this.cellIndex(cellId);\r\n\t\tif(index >= 0 && this.$cells[index - 1]){\r\n\t\t\treturn this.$cells[index - 1];\r\n\t\t}else{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tLayout.prototype.cell = function (id) {\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tvar child = this.$cells[i];\r\n\t\t\tif (child.$id === id) {\r\n\t\t\t\treturn child;\r\n\t\t\t}\r\n\t\t\tvar sub = child.cell(id);\r\n\t\t\tif (sub) {\r\n\t\t\t\treturn sub;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype.cellIndex = function (id) {\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tif (this.$cells[i].$id === id) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t};\r\n\tLayout.prototype.moveView = function (view, ind) {\r\n\t\tif (this.$cells[ind] !== view) {\r\n\t\t\treturn window.alert(\"Not implemented\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\tind += this.$config.header ? 1 : 0;\r\n\t\t\tvar node = this.$view;\r\n\t\t\tif (ind >= node.childNodes.length) {\r\n\t\t\t\tnode.appendChild(view.$view);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tnode.insertBefore(view.$view, node.childNodes[ind]);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype._parseConfig = function (config) {\r\n\t\tthis.$cells = [];\r\n\t\tthis._xLayout = !config.rows;\r\n\t\tvar cells = config.rows || config.cols || config.views;\r\n\t\tfor (var i = 0; i < cells.length; i++) {\r\n\t\t\tvar cell = cells[i];\r\n\t\t\tcell.mode = this._xLayout ? \"x\" : \"y\";\r\n\t\t\tvar $content = this.$factory.initUI(cell, this);\r\n\t\t\tif(!$content){\r\n\t\t\t\tcells.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}else{\r\n\t\t\t\t$content.$parent = this;\r\n\t\t\t\tthis.$cells.push($content);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype.getCells = function () {\r\n\t\treturn this.$cells;\r\n\t};\r\n\tLayout.prototype.render = function () {\r\n\t\tvar view = domHelpers.insertNode(this.$container, this.$toHTML());\r\n\t\tthis.$fill(view, null);\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t\tthis.resize();\r\n\r\n\t\t// do simple repaint after the first call\r\n\t\tthis.render = this.resize;\r\n\t};\r\n\tLayout.prototype.$fill = function (node, parent) {\r\n\t\tthis.$view = node;\r\n\t\tthis.$parent = parent;\r\n\t\tvar cells = domHelpers.getChildNodes(node, \"gantt_layout_cell\");\r\n\t\tfor (var i = cells.length - 1; i >= 0; i--) {\r\n\t\t\tvar sub = this.$cells[i];\r\n\t\t\tsub.$fill(cells[i], this);\r\n\t\t\t// initially hidden cell\r\n\t\t\tif (sub.$config.hidden) {\r\n\t\t\t\tsub.$view.parentNode.removeChild(sub.$view);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\tLayout.prototype.$toHTML = function () {\r\n\t\tvar mode = this._xLayout ? \"x\" : \"y\";\r\n\t\tvar html = [];\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\thtml.push(this.$cells[i].$toHTML());\r\n\t\t}\r\n\t\treturn _super.prototype.$toHTML.call(this, html.join(\"\"), (this.$root ? \"gantt_layout_root \" : \"\") + \"gantt_layout gantt_layout_\" + mode);\r\n\t};\r\n\r\n\tLayout.prototype.getContentSize = function(mode){\r\n\t\tvar contentWidth = 0,\r\n\t\t\tcontentHeight = 0;\r\n\r\n\t\tvar cellSize, cell, borders;\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\t\t\tif(cell.$config.hidden)\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tcellSize = cell.getContentSize(mode);\r\n\r\n\t\t\tif(cell.$config.view === \"scrollbar\" && mode[cell.$config.scroll]){\r\n\t\t\t\tcellSize.height = 0;\r\n\t\t\t\tcellSize.width = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.$config.resizer){\r\n\t\t\t\tif(this._xLayout){\r\n\t\t\t\t\tcellSize.height = 0;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellSize.width = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborders = cell._getBorderSizes();\r\n\r\n\t\t\tif(this._xLayout){\r\n\t\t\t\tcontentWidth += (cellSize.width + borders.horizontal);\r\n\t\t\t\tcontentHeight = Math.max(contentHeight, (cellSize.height + borders.vertical));\r\n\t\t\t}else{\r\n\t\t\t\tcontentWidth = Math.max(contentWidth, cellSize.width + borders.horizontal);\r\n\t\t\t\tcontentHeight += cellSize.height + borders.vertical;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tborders = this._getBorderSizes();\r\n\t\tcontentWidth += borders.horizontal;\r\n\t\tcontentHeight += borders.vertical;\r\n\r\n\t\t// GS-149 & GS-150: By default this code only increases the container sizes, because of that, the cell sizes\r\n\t\t// are also increased. Keep this code here in the case if something goes wrong\r\n\t\t/*\r\n\t\tif(this.$root){\r\n\t\t\tcontentWidth += 1;\r\n\t\t\tcontentHeight += 1;\r\n\t\t}\r\n\t\t*/\r\n\t\treturn {\r\n\t\t\twidth: contentWidth,\r\n\t\t\theight: contentHeight\r\n\t\t};\r\n\t};\r\n\r\n\tLayout.prototype._cleanElSize = function(value){\r\n\t\treturn ((value || \"\").toString().replace(\"px\", \"\") * 1 || 0);\r\n\t};\r\n\tLayout.prototype._getBoxStyles = function(div){\r\n\t\tvar computed = null;\r\n\t\tif(window.getComputedStyle){\r\n\t\t\tcomputed = window.getComputedStyle(div, null);\r\n\t\t}else{\r\n\t\t\t//IE with elem.currentStyle does not calculate sizes from %, so will use the default approach\r\n\t\t\tcomputed = {\r\n\t\t\t\t\"width\":div.clientWidth,\r\n\t\t\t\t\"height\":div.clientHeight\r\n\t\t\t};\r\n\t\t}\r\n\t\tvar properties = [\r\n\t\t\t\"width\",\r\n\t\t\t\"height\",\r\n\r\n\t\t\t\"paddingTop\",\r\n\t\t\t\"paddingBottom\",\r\n\t\t\t\"paddingLeft\",\r\n\t\t\t\"paddingRight\",\r\n\r\n\t\t\t\"borderLeftWidth\",\r\n\t\t\t\"borderRightWidth\",\r\n\t\t\t\"borderTopWidth\",\r\n\t\t\t\"borderBottomWidth\"\r\n\t\t];\r\n\t\tvar styles = {\r\n\t\t\tboxSizing:(computed.boxSizing == \"border-box\")\r\n\t\t};\r\n\r\n\t\tif(computed.MozBoxSizing){\r\n\t\t\tstyles.boxSizing = (computed.MozBoxSizing == \"border-box\");\r\n\t\t}\r\n\t\tfor(var i =0; i < properties.length; i++){\r\n\t\t\tstyles[properties[i]] = computed[properties[i]] ? this._cleanElSize(computed[properties[i]]) : 0;\r\n\t\t}\r\n\r\n\r\n\t\tvar box = {\r\n\t\t\thorPaddings : (styles.paddingLeft + styles.paddingRight + styles.borderLeftWidth + styles.borderRightWidth),\r\n\t\t\tvertPaddings : (styles.paddingTop + styles.paddingBottom + styles.borderTopWidth + styles.borderBottomWidth),\r\n\t\t\tborderBox: styles.boxSizing,\r\n\t\t\tinnerWidth : styles.width,\r\n\t\t\tinnerHeight : styles.height,\r\n\t\t\touterWidth : styles.width,\r\n\t\t\touterHeight : styles.height\r\n\t\t};\r\n\r\n\r\n\t\tif(box.borderBox){\r\n\t\t\tbox.innerWidth -= box.horPaddings;\r\n\t\t\tbox.innerHeight -= box.vertPaddings;\r\n\t\t}else{\r\n\t\t\tbox.outerWidth += box.horPaddings;\r\n\t\t\tbox.outerHeight += box.vertPaddings;\r\n\t\t}\r\n\r\n\t\treturn box;\r\n\t};\r\n\r\n\tLayout.prototype._getAutosizeMode = function(config){\r\n\t\tvar res = {x:false, y:false};\r\n\t\tif(config === \"xy\"){\r\n\t\t\tres.x = res.y = true;\r\n\t\t}else if(config === \"y\" || config === true){\r\n\t\t\tres.y = true;\r\n\t\t}else if(config === \"x\"){\r\n\t\t\tres.x = true;\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\tLayout.prototype.autosize = function(mode) {\r\n\t\tvar res = this._getAutosizeMode(mode);\r\n\t\tvar boxSizes = this._getBoxStyles(this.$container);\r\n\t\tvar contentSizes = this.getContentSize(mode);\r\n\r\n\t\tvar node = this.$container;\r\n\t\tif(res.x){\r\n\t\t\tif(boxSizes.borderBox){\r\n\t\t\t\tcontentSizes.width += boxSizes.horPaddings;\r\n\t\t\t}\r\n\t\t\tnode.style.width = contentSizes.width + \"px\";\r\n\t\t}\r\n\t\tif(res.y){\r\n\t\t\tif(boxSizes.borderBox){\r\n\t\t\t\tcontentSizes.height += boxSizes.vertPaddings;\r\n\t\t\t}\r\n\t\t\tnode.style.height = contentSizes.height + \"px\";\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.getSize = function () {\r\n\t\tthis._sizes = [];\r\n\t\tvar width = 0;\r\n\t\tvar minWidth = 0;\r\n\t\tvar maxWidth = 100000000000;\r\n\t\tvar height = 0;\r\n\t\tvar maxHeight = 100000000000;\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\r\n\t\t\tvar size = this._sizes[i] = this.$cells[i].getSize();\r\n\t\t\tif (this.$cells[i].$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tif (!size.width && size.minWidth) {\r\n\t\t\t\t\twidth += size.minWidth;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\twidth += size.width;\r\n\t\t\t\t}\r\n\t\t\t\tmaxWidth += size.maxWidth;\r\n\t\t\t\tminWidth += size.minWidth;\r\n\t\t\t\theight = Math.max(height, size.height);\r\n\t\t\t\tmaxHeight = Math.min(maxHeight, size.maxHeight); // min of maxHeight\r\n\t\t\t\tminHeight = Math.max(minHeight, size.minHeight); // max of minHeight\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (!size.height && size.minHeight) {\r\n\t\t\t\t\theight += size.minHeight;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\theight += size.height;\r\n\t\t\t\t}\r\n\t\t\t\tmaxHeight += size.maxHeight;\r\n\t\t\t\tminHeight += size.minHeight;\r\n\t\t\t\twidth = Math.max(width, size.width);\r\n\t\t\t\tmaxWidth = Math.min(maxWidth, size.maxWidth); // min of maxWidth\r\n\t\t\t\tminWidth = Math.max(minWidth, size.minWidth); // max of minWidth\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar self = _super.prototype.getSize.call(this);\r\n\t\t// maxWidth\r\n\t\tif (self.maxWidth >= 100000) {\r\n\t\t\tself.maxWidth = maxWidth;\r\n\t\t}\r\n\t\t// maxHeight\r\n\t\tif (self.maxHeight >= 100000) {\r\n\t\t\tself.maxHeight = maxHeight;\r\n\t\t}\r\n\t\t// minWidth\r\n\t\tself.minWidth = self.minWidth !== self.minWidth ? 0 : self.minWidth;// || self.width || Math.max(minWidth, width);\r\n\t\t// minHeight\r\n\t\tself.minHeight = self.minHeight !== self.minHeight ? 0 : self.minHeight;//self.minHeight || self.height || Math.max(minHeight, height);\r\n\t\t// sizes with paddings and margins\r\n\t\tif (this._xLayout) {\r\n\t\t\tself.minWidth += this.$config.margin * (this.$cells.length) || 0;\r\n\t\t\tself.minWidth += this.$config.padding * 2 || 0;\r\n\t\t\tself.minHeight += (this.$config.padding * 2) || 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tself.minHeight += this.$config.margin * (this.$cells.length) || 0;\r\n\t\t\tself.minHeight += (this.$config.padding * 2) || 0;\r\n\t\t}\r\n\t\t\r\n\t\treturn self;\r\n\t};\r\n\t// calc total gravity and free space\r\n\tLayout.prototype._calcFreeSpace = function (s, cell, xLayout) {\r\n\t\tvar min = xLayout ? cell.minWidth : cell.minHeight;\r\n\t\tvar max = xLayout ? cell.maxWidth : cell.maxWidth;\r\n\t\tvar side = s;\r\n\t\tif (!side) {\r\n\t\t\tside = Math.floor(this._free / this._gravity * cell.gravity);\r\n\t\t\tif (side > max) {\r\n\t\t\t\tside = max;\r\n\t\t\t\tthis._free -= side;\r\n\t\t\t\tthis._gravity -= cell.gravity;\r\n\t\t\t}\r\n\t\t\tif (side < min) {\r\n\t\t\t\tside = min;\r\n\t\t\t\tthis._free -= side;\r\n\t\t\t\tthis._gravity -= cell.gravity;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (side > max) {\r\n\t\t\t\tside = max;\r\n\t\t\t}\r\n\t\t\tif (side < min) {\r\n\t\t\t\tside = min;\r\n\t\t\t}\r\n\t\t\tthis._free -= side;\r\n\t\t}\r\n\t\treturn side;\r\n\t};\r\n\tLayout.prototype._calcSize = function (s, size, xLayout) {\r\n\t\tvar side = s;\r\n\t\tvar min = xLayout ? size.minWidth : size.minHeight;\r\n\t\tvar max = xLayout ? size.maxWidth : size.maxHeight;\r\n\t\tif (!side) {\r\n\t\t\tside = Math.floor(this._free / this._gravity * size.gravity);\r\n\t\t}\r\n\t\tif (side > max) {\r\n\t\t\tside = max;\r\n\t\t}\r\n\t\tif (side < min) {\r\n\t\t\tside = min;\r\n\t\t}\r\n\t\treturn side;\r\n\t};\r\n\r\n\tLayout.prototype._configureBorders = function(){\r\n\t\tif(this.$root){\r\n\t\t\tthis._setBorders([\r\n\t\t\t\tthis._borders.left,\r\n\t\t\t\tthis._borders.top,\r\n\t\t\t\tthis._borders.right,\r\n\t\t\t\tthis._borders.bottom\r\n\t\t\t],\r\n\t\t\tthis);\r\n\t\t}\r\n\r\n\t\tvar borderClass = this._xLayout ? this._borders.right : this._borders.bottom;\r\n\r\n\t\tvar cells = this.$cells;\r\n\r\n\t\tvar lastVisibleIndex = cells.length - 1;\r\n\t\tfor(var i = lastVisibleIndex; i >= 0; i--){\r\n\t\t\tif (!cells[i].$config.hidden) {\r\n\t\t\t\tlastVisibleIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < cells.length; i++) {\r\n\t\t\tif (cells[i].$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tvar lastCell = i >= lastVisibleIndex;\r\n\t\t\tvar borderColorClass = \"\";\r\n\t\t\tif(!lastCell && cells[i + 1]){\r\n\t\t\t\tif(cells[i + 1].$config.view == \"scrollbar\"){\r\n\t\t\t\t\tif(this._xLayout){\r\n\t\t\t\t\t\tlastCell = true;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tborderColorClass = \"gantt_layout_cell_border_transparent\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._setBorders(lastCell ? [] : [borderClass, borderColorClass], cells[i]);\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype._updateCellVisibility = function(){\r\n\t\tvar oldVisibleCells = this._visibleCells || {};\r\n\t\tvar firstCall = !this._visibleCells;\r\n\t\tvar visibleCells = {};\r\n\t\tvar cell = null;\r\n\t\tvar parentVisibility = [];\r\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\t\t\tif (cell.$config.hide_empty){\r\n\t\t\t\tparentVisibility.push(cell);\r\n\t\t\t}\r\n\r\n\t\t\tif (!firstCall && cell.$config.hidden && oldVisibleCells[cell.$id]) {\r\n\t\t\t\tcell._hide(true);\r\n\t\t\t}else if(!cell.$config.hidden && !oldVisibleCells[cell.$id]){\r\n\t\t\t\tcell._hide(false);\r\n\t\t\t}\r\n\r\n\t\t\tif(!cell.$config.hidden){\r\n\t\t\t\tvisibleCells[cell.$id] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._visibleCells = visibleCells;\r\n\r\n\t\t// GS-27. A way to hide the whole cell if all its children are hidden\r\n\t\tfor (var i = 0; i < parentVisibility.length; i++) {\r\n\t\t\tvar cell = parentVisibility[i];\r\n\t\t\tvar children = cell.$cells;\r\n\t\t\tvar hideCell = true;\r\n\t\t\tchildren.forEach(function(child){\r\n\t\t\t\tif (!child.$config.hidden && !child.$config.resizer){\r\n\t\t\t\t\thideCell = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tcell.$config.hidden = hideCell;\r\n\t\t}\r\n\t};\r\n\r\n\tLayout.prototype.setSize = function (x, y) {\r\n\t\tthis._configureBorders();\r\n\t\t_super.prototype.setSize.call(this, x, y);\r\n\t\ty = this.$lastSize.contentY;\r\n\t\tx = this.$lastSize.contentX;\r\n\r\n\t\tvar padding = (this.$config.padding || 0);\r\n\t\tthis.$view.style.padding = padding + \"px\";\r\n\t\tthis._gravity = 0;\r\n\t\tthis._free = this._xLayout ? x : y;\r\n\t\tthis._free -= padding * 2;\r\n\t\t// calc all gravity\r\n\r\n\t\tvar cell,\r\n\t\t\tsize;\r\n\r\n\t\tthis._updateCellVisibility();\r\n\r\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\r\n\t\t\tif (cell.$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tvar margin = (this.$config.margin || 0);\r\n\t\t\tif(cell.$name == \"resizer\" && !margin){\r\n\t\t\t\tmargin = -1;\r\n\t\t\t}\r\n\r\n\t\t\t// set margins to child cell\r\n\t\t\tvar cellView = cell.$view;\r\n\r\n\t\t\tvar marginSide = this._xLayout ? \"marginRight\" : \"marginBottom\";\r\n\t\t\tif (i !== this.$cells.length - 1) {\r\n\t\t\t\tcellView.style[marginSide] = margin + \"px\";\r\n\t\t\t\tthis._free -= margin; // calc free space without margin\r\n\t\t\t}\r\n\t\t\tsize = this._sizes[i];\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tif (!size.width) {\r\n\t\t\t\t\tthis._gravity += size.gravity;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (!size.height) {\r\n\t\t\t\t\tthis._gravity += size.gravity;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\r\n\t\t\tif (cell.$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tsize = this._sizes[i];\r\n\t\t\tvar width = size.width;\r\n\t\t\tvar height = size.height;\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tthis._calcFreeSpace(width, size, true);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._calcFreeSpace(height, size, false);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\tcell = this.$cells[i];\r\n\r\n\t\t\tif (cell.$config.hidden) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tsize = this._sizes[i];\r\n\t\t\tvar dx = void 0;\r\n\t\t\tvar dy = void 0;\r\n\t\t\tif (this._xLayout) {\r\n\t\t\t\tdx = this._calcSize(size.width, size, true);\r\n\t\t\t\tdy = y - padding * 2; // layout height without paddings\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = x - padding * 2; // layout width without paddings\r\n\t\t\t\tdy = this._calcSize(size.height, size, false);\r\n\t\t\t}\r\n\r\n\t\t\tcell.setSize(dx, dy);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\treturn Layout;\r\n}(Cell));\r\n\r\nexport default Layout;","import __extends from \"../../../utils/extends\";\r\nimport Layout from \"./layout\";\r\nimport Cell from \"./cell\";\r\n\r\nvar ViewLayout = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\t__extends(ViewLayout, _super);\r\n\tfunction ViewLayout(parent, config, factory) {\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\t\tfor (var i = 0; i < _this.$cells.length; i++) {\r\n\t\t\t_this.$cells[i].$config.hidden = (i !== 0);\r\n\t\t}\r\n\t\t_this.$cell = _this.$cells[0];\r\n\t\t_this.$name = \"viewLayout\";\r\n\r\n\t\treturn _this;\r\n\t}\r\n\tViewLayout.prototype.cell = function (id) {\r\n\t\tvar cell = _super.prototype.cell.call(this, id);\r\n\t\tif (!cell.$view) {\r\n\t\t\tthis.$fill(null, this);\r\n\t\t}\r\n\t\treturn cell;\r\n\t};\r\n\tViewLayout.prototype.moveView = function (view) {\r\n\t\tvar body = this.$view;\r\n\t\tif (this.$cell) {\r\n\t\t\tthis.$cell.$config.hidden = true;\r\n\t\t\tbody.removeChild(this.$cell.$view);\r\n\t\t}\r\n\t\tthis.$cell = view;\r\n\t\tbody.appendChild(view.$view);\r\n\t};\r\n\tViewLayout.prototype.setSize = function (x, y) {\r\n\t\tCell.prototype.setSize.call(this, x, y);\r\n\t};\r\n\r\n\tViewLayout.prototype.setContentSize = function(){\r\n\t\tvar size = this.$lastSize;\r\n\t\tthis.$cell.setSize(size.contentX, size.contentY);\r\n\t};\r\n\r\n\tViewLayout.prototype.getSize = function () {\r\n\t\tvar sizes = _super.prototype.getSize.call(this);\r\n\t\tif (this.$cell) {\r\n\t\t\tvar cellSize = this.$cell.getSize();\r\n\t\t\tif (this.$config.byMaxSize) {\r\n\t\t\t\tfor (var i = 0; i < this.$cells.length; i++) {\r\n\t\t\t\t\tvar otherCell = this.$cells[i].getSize();\r\n\t\t\t\t\tfor (var cell in cellSize) {\r\n\t\t\t\t\t\tcellSize[cell] = Math.max(cellSize[cell], otherCell[cell]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor (var size in sizes) {\r\n\t\t\t\tsizes[size] = sizes[size] || cellSize[size];\r\n\t\t\t}\r\n\t\t\tsizes.gravity = Math.max(sizes.gravity, cellSize.gravity);\r\n\t\t}\r\n\t\treturn sizes;\r\n\t};\r\n\treturn ViewLayout;\r\n}(Layout));\r\n\r\nexport default ViewLayout;","import __extends from \"../../../utils/extends\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport Cell from \"./cell\";\r\n\r\nvar ViewCell = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\t__extends(ViewCell, _super);\r\n\tfunction ViewCell(parent, config, factory) {\r\n\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\r\n\t\tif(config.view){\r\n\t\t\tif(config.id){\r\n\t\t\t\t// pass id to the nested view\r\n\t\t\t\tthis.$id = utils.uid();\r\n\t\t\t}\r\n\t\t\tvar childConfig = utils.copy(config);\r\n\t\t\tdelete childConfig.config;\r\n\t\t\tdelete childConfig.templates;\r\n\r\n\t\t\tthis.$content = this.$factory.createView(config.view, this, childConfig, this);\r\n\t\t\tif(!this.$content)\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t_this.$name = \"viewCell\";\r\n\t\treturn _this;\r\n\t}\r\n\r\n\tViewCell.prototype.destructor = function(){\r\n\t\tthis.clear();\r\n\t\t_super.prototype.destructor.call(this);\r\n\t};\r\n\r\n\tViewCell.prototype.clear = function(){\r\n\r\n\t\tthis.$initialized = false;\r\n\r\n\t\t// call destructor\r\n\t\tif (this.$content){\r\n\t\t\tvar method = this.$content.unload || this.$content.destructor;\r\n\t\t\tif (method){\r\n\t\t\t\tmethod.call(this.$content);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t_super.prototype.clear.call(this);\r\n\r\n\t};\r\n\r\n\tViewCell.prototype.scrollTo = function(left, top){\r\n\r\n\t\tif(this.$content && this.$content.scrollTo){\r\n\t\t\tthis.$content.scrollTo(left, top);\r\n\t\t}else{\r\n\t\t\t_super.prototype.scrollTo.call(this, left, top);\r\n\t\t}\r\n\t};\r\n\r\n\tViewCell.prototype._setContentSize = function(x, y){\r\n\t\tvar borders = this._getBorderSizes();\r\n\t\tif(typeof x === \"number\"){\r\n\t\t\tvar outerX = x + borders.horizontal;\r\n\t\t\tthis.$config.width = outerX;\r\n\t\t}\r\n\t\tif(typeof y === \"number\"){\r\n\t\t\tvar outerY = y + borders.vertical;\r\n\t\t\tthis.$config.height = outerY;\r\n\t\t}\r\n\t};\r\n\r\n\tViewCell.prototype.setSize = function(x, y){\r\n\t\t_super.prototype.setSize.call(this, x, y);\r\n\r\n\t\tif(!this.$preResize && this.$content) {\r\n\t\t\tif (!this.$initialized) {\r\n\t\t\t\tthis.$initialized = true;\r\n\t\t\t\tvar header = this.$view.childNodes[0];\r\n\t\t\t\tvar content = this.$view.childNodes[1];\r\n\t\t\t\tif(!content) content = header;\r\n\r\n\t\t\t\t/*if(this.$content.$config){\r\n\t\t\t\t\tthis.$content.$config.width = this.$lastSize.contentX;\r\n\t\t\t\t\tthis.$content.$config.height = this.$lastSize.contentY;\r\n\t\t\t\t}*/\r\n\t\t\t\tthis.$content.init(content);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tViewCell.prototype.setContentSize = function(){\r\n\t\tif(!this.$preResize && this.$content) {\r\n\t\t\tif (this.$initialized) {\r\n\t\t\t\tthis.$content.setSize(this.$lastSize.contentX, this.$lastSize.contentY);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tViewCell.prototype.getContentSize = function(){\r\n\t\tvar size = _super.prototype.getContentSize.call(this);\r\n\r\n\t\tif(this.$content && this.$initialized){\r\n\t\t\tvar childSize = this.$content.getSize();\r\n\t\t\tsize.width = childSize.contentX === undefined ? childSize.width : childSize.contentX;\r\n\t\t\tsize.height = childSize.contentY === undefined ? childSize.height : childSize.contentY;\r\n\t\t}\r\n\r\n\t\tvar borders = this._getBorderSizes();\r\n\t\tsize.width += borders.horizontal;\r\n\t\tsize.height += borders.vertical;\r\n\r\n\t\treturn size;\r\n\t};\r\n\r\n\treturn ViewCell;\r\n}(Cell));\r\n\r\nexport default ViewCell;","import __extends from \"../../../utils/extends\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport env from \"../../../utils/env\";\r\nimport Cell from \"./cell\";\r\n\r\nvar ScrollbarCell = (function (_super) {\r\n\t\"use strict\";\r\n\r\n\tvar SCROLL_MODIFIER_KEYS = [\"altKey\", \"shiftKey\", \"metaKey\"]; // it's no way to disable ctrl+wheel\r\n\t__extends(ScrollbarCell, _super);\r\n\tfunction ScrollbarCell(parent, config, factory, gantt) {\r\n\r\n\t\tvar _this = _super.apply(this, arguments) || this;\r\n\t\tthis.$config = utils.mixin(config, {scroll: \"x\"});\r\n\t\t_this._scrollHorizontalHandler = utils.bind(_this._scrollHorizontalHandler, _this);\r\n\t\t_this._scrollVerticalHandler = utils.bind(_this._scrollVerticalHandler, _this);\r\n\t\t_this._outerScrollVerticalHandler = utils.bind(_this._outerScrollVerticalHandler, _this);\r\n\t\t_this._outerScrollHorizontalHandler = utils.bind(_this._outerScrollHorizontalHandler, _this);\r\n\t\t_this._mouseWheelHandler = utils.bind(_this._mouseWheelHandler, _this);\r\n\r\n\t\tthis.$config.hidden = true;\r\n\t\tvar size = gantt.config.scroll_size;\r\n\r\n\t\tif(gantt.env.isIE){\r\n\t\t\t// full element height/width must be bigger than just a browser scrollbar,\r\n\t\t\t// otherwise the scrollbar element won't be scrolled on click\r\n\t\t\tsize += 1;\r\n\t\t}\r\n\r\n\t\tif(this._isHorizontal()){\r\n\t\t\t_this.$config.height = size;\r\n\t\t\t_this.$parent.$config.height = size;\r\n\t\t}else{\r\n\t\t\t_this.$config.width = size;\r\n\t\t\t_this.$parent.$config.width = size;\r\n\t\t}\r\n\r\n\t\tthis.$config.scrollPosition = 0;\r\n\r\n\t\t_this.$name = \"scroller\";\r\n\t\treturn _this;\r\n\t}\r\n\r\n\tScrollbarCell.prototype.init = function(container){\r\n\t\tcontainer.innerHTML = this.$toHTML();\r\n\t\tthis.$view = container.firstChild;\r\n\r\n\t\tif(!this.$view){\r\n\t\t\tthis.init();\r\n\t\t}\r\n\t\tif(this._isVertical()){\r\n\t\t\tthis._initVertical();\r\n\t\t}else{\r\n\t\t\tthis._initHorizontal();\r\n\t\t}\r\n\t\tthis._initMouseWheel();\r\n\t\tthis._initLinkedViews();\r\n\t};\r\n\r\n\tScrollbarCell.prototype.$toHTML = function () {\r\n\t\tvar className = this._isHorizontal() ? \"gantt_hor_scroll\" : \"gantt_ver_scroll\";\r\n\t\treturn \"\";\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getRootParent = function(){\r\n\t\tvar parent = this.$parent;\r\n\t\twhile(parent && parent.$parent){\r\n\t\t\tparent = parent.$parent;\r\n\t\t}\r\n\t\tif(parent){\r\n\t\t\treturn parent;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tfunction eachCell(root, res){\r\n\t\tres.push(root);\r\n\t\tif(root.$cells){\r\n\t\t\tfor(var i = 0; i < root.$cells.length; i++){\r\n\t\t\t\teachCell(root.$cells[i], res);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tScrollbarCell.prototype._eachView = function(){\r\n\t\tvar res = [];\r\n\t\teachCell(this._getRootParent(), res);\r\n\t\treturn res;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getLinkedViews = function(){\r\n\t\tvar views = this._eachView();\r\n\t\tvar res = [];\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\tif(views[i].$config && ((this._isVertical() && views[i].$config.scrollY == this.$id) || (this._isHorizontal() && views[i].$config.scrollX == this.$id)) ){\r\n\t\t\t\tres.push(views[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\r\n\tScrollbarCell.prototype._initHorizontal = function(){\r\n\t\tthis.$scroll_hor = this.$view;\r\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollHorizontalHandler);\r\n\r\n\t};\r\n\r\n\tScrollbarCell.prototype._initLinkedViews = function(){\r\n\t\tvar views = this._getLinkedViews();\r\n\t\tvar css = this._isVertical() ?\"gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical\" : \"gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal\";\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\t//views[i].$config.css = [views[i].$config.css || \"\", css].join(\" \");\r\n\t\t\tdomHelpers.addClassName(views[i].$view || views[i].getNode(), css);\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype._initVertical = function(){\r\n\t\tthis.$scroll_ver = this.$view;\r\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollVerticalHandler);\r\n\t};\r\n\r\n\tScrollbarCell.prototype._updateLinkedViews = function(){\r\n\t};\r\n\r\n\tScrollbarCell.prototype._initMouseWheel = function(){\r\n\t\tvar ff = env.isFF;\r\n\t\tif (ff)\r\n\t\t\tthis.$domEvents.attach(this._getRootParent().$view, \"wheel\", this._mouseWheelHandler, {passive: false});\r\n\t\telse\r\n\t\t\tthis.$domEvents.attach(this._getRootParent().$view, \"mousewheel\", this._mouseWheelHandler, {passive: false});\r\n\t};\r\n\r\n\r\n\r\n\r\n\tScrollbarCell.prototype.scrollHorizontally = function(left){\r\n\t\tif(this._scrolling) return;\r\n\t\tthis._scrolling = true;\r\n\r\n\t\tthis.$scroll_hor.scrollLeft = left;\r\n\t\tthis.$config.codeScrollLeft = left;\r\n\t\tleft = this.$scroll_hor.scrollLeft;\r\n\r\n\t\tvar views = this._getLinkedViews();\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\tif(views[i].scrollTo){\r\n\t\t\t\tviews[i].scrollTo(left, undefined);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar oldSize = this.$config.scrollPosition;\r\n\t\tthis.$config.scrollPosition = left;\r\n\t\tthis.callEvent(\"onScroll\", [oldSize, left, this.$config.scroll]);\r\n\t\tthis._scrolling = false;\r\n\t};\r\n\tScrollbarCell.prototype.scrollVertically = function(top){\r\n\t\tif(this._scrolling) return;\r\n\t\tthis._scrolling = true;\r\n\r\n\t\tthis.$scroll_ver.scrollTop = top;\r\n\t\ttop = this.$scroll_ver.scrollTop;\r\n\r\n\t\tvar views = this._getLinkedViews();\r\n\r\n\t\tfor(var i = 0; i < views.length; i++){\r\n\t\t\tif(views[i].scrollTo){\r\n\t\t\t\tviews[i].scrollTo(undefined, top);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar oldSize = this.$config.scrollPosition;\r\n\t\tthis.$config.scrollPosition = top;\r\n\t\tthis.callEvent(\"onScroll\", [oldSize, top, this.$config.scroll]);\r\n\t\tthis._scrolling = false;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._isVertical = function(){\r\n\t\treturn this.$config.scroll == \"y\";\r\n\t};\r\n\tScrollbarCell.prototype._isHorizontal = function(){\r\n\t\treturn this.$config.scroll == \"x\";\r\n\t};\r\n\tScrollbarCell.prototype._scrollHorizontalHandler = function (e) {\r\n\t\tif(this._isVertical() || this._scrolling){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//in safari we can catch previous onscroll after setting new value from mouse-wheel event\r\n\t\t//set delay to prevent value drifiting\r\n\t\tif ((new Date()) - ( this._wheel_time || 0 ) < 100) return true;\r\n\t\t//if (this.$gantt._touch_scroll_active) return;\r\n\t\tvar left = this.$scroll_hor.scrollLeft;\r\n\r\n\t\tthis.scrollHorizontally(left);\r\n\r\n\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\r\n\t};\r\n\tScrollbarCell.prototype._outerScrollHorizontalHandler = function(e){\r\n\t\tif(this._isVertical()){\r\n\t\t\treturn;\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype.show = function(){\r\n\t\tthis.$parent.show();\r\n\t};\r\n\tScrollbarCell.prototype.hide = function(){\r\n\t\tthis.$parent.hide();\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getScrollSize = function(){\r\n\t\tvar scrollSize = 0;\r\n\t\tvar outerSize = 0;\r\n\t\tvar isHorizontal = this._isHorizontal();\r\n\r\n\t\tvar linked = this._getLinkedViews();\r\n\t\tvar view;\r\n\t\tvar scrollProperty = isHorizontal ? \"scrollWidth\" : \"scrollHeight\",\r\n\t\t\tinnerSizeProperty = isHorizontal ? \"contentX\" : \"contentY\";\r\n\t\tvar outerProperty = isHorizontal ? \"x\" : \"y\";\r\n\t\tvar offset = this._getScrollOffset();\r\n\r\n\t\tfor(var i = 0; i < linked.length; i++){\r\n\t\t\tview = linked[i];\r\n\t\t\tif(!(view && view.$content && view.$content.getSize && !view.$config.hidden)) continue;\r\n\r\n\t\t\tvar sizes = view.$content.getSize();\r\n\t\t\tvar cellScrollSize;\r\n\t\t\tif(sizes.hasOwnProperty(scrollProperty)){\r\n\t\t\t\tcellScrollSize = sizes[scrollProperty];\r\n\t\t\t}else{\r\n\t\t\t\tcellScrollSize = sizes[innerSizeProperty];\r\n\t\t\t}\r\n\r\n\t\t\tif(offset){\r\n\t\t\t\t// precalculated vertical/horizontal offsets of scrollbar to emulate 4.x look\r\n\t\t\t\tif(sizes[innerSizeProperty] > sizes[outerProperty] && sizes[innerSizeProperty] > scrollSize && (cellScrollSize > (sizes[outerProperty] - offset + 2))){\r\n\t\t\t\t\tscrollSize = cellScrollSize + (isHorizontal ? 0 : 2);\r\n\t\t\t\t\touterSize = sizes[outerProperty];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tvar nonScrollableSize = Math.max(sizes[innerSizeProperty] - cellScrollSize, 0);\r\n\t\t\t\tvar scrollableViewPortSize = Math.max(sizes[outerProperty] - nonScrollableSize, 0);\r\n\t\t\t\tcellScrollSize = cellScrollSize + nonScrollableSize;\r\n\r\n\t\t\t\tif(cellScrollSize > scrollableViewPortSize && (cellScrollSize > scrollSize) ){\r\n\t\t\t\t\t//|| (cellScrollSize === scrollSize && sizes[outerProperty] < outerSize) // same scroll width but smaller scrollable view port\r\n\r\n\t\t\t\t\tscrollSize = cellScrollSize;\r\n\t\t\t\t\touterSize = sizes[outerProperty];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\touterScroll: outerSize,\r\n\t\t\tinnerScroll: scrollSize\r\n\t\t};\r\n\t};\r\n\r\n\tScrollbarCell.prototype.scroll = function(position){\r\n\t\tif(this._isHorizontal()){\r\n\t\t\tthis.scrollHorizontally(position);\r\n\t\t}else{\r\n\t\t\tthis.scrollVertically(position);\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype.getScrollState = function(){\r\n\t\treturn {\r\n\t\t\tvisible: this.isVisible(),\r\n\t\t\tdirection: this.$config.scroll,\r\n\t\t\tsize: this.$config.outerSize,\r\n\t\t\tscrollSize: this.$config.scrollSize || 0,\r\n\t\t\tposition: this.$config.scrollPosition || 0\r\n\t\t};\r\n\t};\r\n\r\n\tScrollbarCell.prototype.setSize = function(width, height){\r\n\t\t_super.prototype.setSize.apply(this, arguments);\r\n\r\n\t\tvar scrollSizes = this._getScrollSize();\r\n\r\n\t\tvar ownSize = (this._isVertical() ? height : width) - this._getScrollOffset() + (this._isHorizontal() ? 1 : 0);\r\n\r\n\t\tif(scrollSizes.innerScroll && ownSize > scrollSizes.outerScroll){\r\n\t\t\tscrollSizes.innerScroll += (ownSize - scrollSizes.outerScroll);\r\n\t\t}\r\n\t\tthis.$config.scrollSize = scrollSizes.innerScroll;\r\n\r\n\t\tthis.$config.width = width;\r\n\t\tthis.$config.height = height;\r\n\t\tthis._setScrollSize(scrollSizes.innerScroll);\r\n\t};\r\n\r\n\tScrollbarCell.prototype.isVisible = function(){\r\n\t\treturn !!(this.$parent && this.$parent.$view.parentNode);\r\n\t};\r\n\r\n\tScrollbarCell.prototype.shouldShow = function(){\r\n\t\tvar scrollSizes = this._getScrollSize();\r\n\t\tif(!scrollSizes.innerScroll && (this.$parent && this.$parent.$view.parentNode)){\r\n\t\t\treturn false;\r\n\t\t}else if(scrollSizes.innerScroll && !(this.$parent && this.$parent.$view.parentNode)){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype.shouldHide = function(){\r\n\t\tvar scrollSizes = this._getScrollSize();\r\n\t\tif(!scrollSizes.innerScroll && (this.$parent && this.$parent.$view.parentNode)){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tScrollbarCell.prototype.toggleVisibility = function(){\r\n\t\tif(this.shouldHide()){\r\n\t\t\tthis.hide();\r\n\t\t}else if(this.shouldShow()){\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getScaleOffset = function(view){\r\n\t\tvar offset = 0;\r\n\t\tif(view && (view.$config.view == \"timeline\" || view.$config.view == \"grid\")){\r\n\t\t\toffset = view.$content.$getConfig().scale_height;\r\n\t\t}\r\n\t\treturn offset;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._getScrollOffset = function(){\r\n\t\tvar offset = 0;\r\n\t\tif(this._isVertical()){\r\n\t\t\tvar parentLayout = this.$parent.$parent;\r\n\t\t\toffset = Math.max(\r\n\t\t\t\tthis._getScaleOffset(parentLayout.getPrevSibling(this.$parent.$id)),\r\n\t\t\t\tthis._getScaleOffset(parentLayout.getNextSibling(this.$parent.$id))\r\n\t\t\t\t);\r\n\t\t}else{\r\n\t\t\tvar linked = this._getLinkedViews();\r\n\r\n\t\t\tfor (var i = 0; i < linked.length; i++) {\r\n\t\t\t\tvar view = linked[i],\r\n\t\t\t\t\tvparent = view.$parent;\r\n\t\t\t\tvar cells = vparent.$cells;\r\n\r\n\t\t\t\tvar last = cells[cells.length - 1];\r\n\r\n\t\t\t\tif (last && last.$config.view == \"scrollbar\" && last.$config.hidden === false) {\r\n\t\t\t\t\toffset = last.$config.width;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn offset || 0;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._setScrollSize = function(size){\r\n\t\tvar property = this._isHorizontal() ? \"width\" : \"height\";\r\n\t\tvar scrollbar = this._isHorizontal() ? this.$scroll_hor : this.$scroll_ver;\r\n\r\n\t\tvar offset = this._getScrollOffset();\r\n\r\n\t\tvar node = scrollbar.firstChild;\r\n\r\n\t\tif(offset){\r\n\t\t\tif(this._isVertical()){\r\n\r\n\t\t\t\tthis.$config.outerSize = (this.$config.height - offset + 3);\r\n\t\t\t\tscrollbar.style.height = this.$config.outerSize + \"px\";\r\n\t\t\t\tscrollbar.style.top = (offset-1) + \"px\";\r\n\t\t\t\tdomHelpers.addClassName(scrollbar, this.$parent._borders.top);\r\n\t\t\t\tdomHelpers.addClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\r\n\t\t\t}else{\r\n\t\t\t\tthis.$config.outerSize = (this.$config.width - offset + 1);\r\n\t\t\t\tscrollbar.style.width = this.$config.outerSize + \"px\";\r\n\t\t\t\t//domHelpers.addClassName(scrollbar, this.$parent._borders.right);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tscrollbar.style.top = \"auto\";\r\n\t\t\tdomHelpers.removeClassName(scrollbar, this.$parent._borders.top);\r\n\t\t\tdomHelpers.removeClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\r\n\t\t\tthis.$config.outerSize = this.$config.height;\r\n\t\t}\r\n\r\n\t\tnode.style[property] = size + \"px\";\r\n\t};\r\n\r\n\tScrollbarCell.prototype._scrollVerticalHandler = function (e) {\r\n\t\tif(this._scrollHorizontalHandler() || this._scrolling){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//if (this.$gantt._touch_scroll_active) return;\r\n\t\tvar top = this.$scroll_ver.scrollTop;\r\n\t\tvar prev = this._oldTop;\r\n\t\tif(top == prev) return;\r\n\r\n\t\tthis.scrollVertically(top);\r\n\r\n\t\tthis._oldTop = this.$scroll_ver.scrollTop;\r\n\r\n\t};\r\n\tScrollbarCell.prototype._outerScrollVerticalHandler = function(e){\r\n\t\tif(this._scrollHorizontalHandler()){\r\n\t\t\treturn;\r\n\t\t}\r\n\t};\r\n\r\n\tScrollbarCell.prototype._checkWheelTarget = function(targetNode){\r\n\t\tvar connectedViews = this._getLinkedViews().concat(this);\r\n\r\n\t\tfor(var i = 0; i < connectedViews.length; i++){\r\n\t\t\tvar node = connectedViews[i].$view;\r\n\t\t\tif(domHelpers.isChildOf(targetNode, node)){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tScrollbarCell.prototype._mouseWheelHandler = function(e){\r\n\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\tif(!this._checkWheelTarget(target))\r\n\t\t\treturn;\r\n\r\n\t\tthis._wheel_time = new Date();\r\n\r\n\t\tvar res = {};\r\n\r\n\t\tvar wheelSpeed = {x: 1, y: 1};\r\n\t\tvar wheelSpeedConfig = this.$gantt.config.wheel_scroll_sensitivity;\r\n\r\n\t\tif (typeof wheelSpeedConfig == \"number\" && !!wheelSpeedConfig) {\r\n\t\t\twheelSpeed = {x: wheelSpeedConfig, y: wheelSpeedConfig};\r\n\t\t}\r\n\t\telse if (({}).toString.apply(wheelSpeedConfig) == \"[object Object]\") {\r\n\t\t\twheelSpeed = {x: wheelSpeedConfig.x, y: wheelSpeedConfig.y};\r\n\t\t}\r\n\r\n\t\tvar ff = env.isFF;\r\n\t\tvar deltaX = ff ? (e.deltaX) : e.wheelDeltaX;\r\n\t\tvar deltaY = ff ? (e.deltaY) : e.wheelDelta;\r\n\r\n\t\tvar multiplier = -20;\r\n\t\tif (ff) {\r\n\t\t\tif (e.deltaMode !== 0) {\r\n\t\t\t\tmultiplier = -40;\r\n\t\t\t} else {\r\n\t\t\t\tmultiplier = -10;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar wx = ff ? (deltaX * multiplier * wheelSpeed.x) : deltaX * 2 * wheelSpeed.x;\r\n\t\tvar wy = ff ? (deltaY * multiplier * wheelSpeed.y) : deltaY * wheelSpeed.y;\r\n\r\n\t\tvar horizontalScrollModifier = this.$gantt.config.horizontal_scroll_key;\r\n\r\n\t\tif (horizontalScrollModifier !== false) {\r\n\t\t\tif (SCROLL_MODIFIER_KEYS.indexOf(horizontalScrollModifier) >= 0) {\r\n\t\t\t\tif(e[horizontalScrollModifier] && !(e.deltaX || e.wheelDeltaX)){\r\n\t\t\t\t\t// shift+mousewheel for horizontal scroll\r\n\t\t\t\t\twx = wy*2;\r\n\t\t\t\t\twy = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tif (wx && Math.abs(wx) > Math.abs(wy)){\r\n\t\t\tif(this._isVertical()){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(res.x) return true;//no horisontal scroll, must not block scrolling\r\n\t\t\tif(!this.$scroll_hor || !this.$scroll_hor.offsetWidth) return true;\r\n\r\n\t\t\tvar dir = wx/-40;\r\n\t\t\tvar oldLeft = this._oldLeft;\r\n\t\t\tvar left = oldLeft+dir*30;\r\n\t\t\tthis.scrollHorizontally(left);\r\n\t\t\tthis.$scroll_hor.scrollLeft = left;\r\n\t\t\t// not block scroll if position hasn't changed\r\n\t\t\tif(oldLeft == this.$scroll_hor.scrollLeft){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\r\n\t\t} else {\r\n\t\t\tif(this._isHorizontal()){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(res.y) return true;//no vertical scroll, must not block scrolling\r\n\t\t\tif(!this.$scroll_ver || !this.$scroll_ver.offsetHeight) return true;\r\n\r\n\t\t\tvar dir = wy/-40;\r\n\t\t\tif (typeof wy == \"undefined\")\r\n\t\t\t\tdir = e.detail;\r\n\r\n\t\t\tvar oldTop = this._oldTop;\r\n\t\t\tvar top = this.$scroll_ver.scrollTop+dir*30;\r\n\r\n\t\t\t//if(!this.$gantt.config.prevent_default_scroll &&\r\n\t\t\t//\t(this.$gantt._cached_scroll_pos && ((this.$gantt._cached_scroll_pos.y == top) || (this.$gantt._cached_scroll_pos.y <= 0 && top <= 0)))) return true;\r\n\r\n\r\n\t\t\tthis.scrollVertically(top);\r\n\t\t\tthis.$scroll_ver.scrollTop = top;\r\n\r\n\t\t\t// not block scroll if position hasn't changed\r\n\t\t\tif(oldTop == this.$scroll_ver.scrollTop){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tthis._oldTop = this.$scroll_ver.scrollTop;\r\n\t\t}\r\n\r\n\t\tif (e.preventDefault)\r\n\t\t\te.preventDefault();\r\n\t\te.cancelBubble=true;\r\n\t\treturn false;\r\n\t};\r\n\r\n\treturn ScrollbarCell;\r\n})(Cell);\r\n\r\nexport default ScrollbarCell;","import quickPositionHelperFactory from \"./row_position_fixed_height\";\r\n\r\nfunction createMixin(view){\r\n\tvar getItemTopCache = {};\r\n\tvar getRowTopCache = {};\r\n\tvar getItemHeightCache = null;\r\n\tvar totalHeightCache = -1;\r\n\tvar getItemHeightCacheState = null;\r\n\r\n\tvar quickPosition = quickPositionHelperFactory(view);\r\n\r\n\treturn {\r\n\t\t_resetTopPositionHeight: function(){\r\n\t\t\tgetItemTopCache = {};\r\n\t\t\tgetRowTopCache = {};\r\n\t\t\tquickPosition.resetCache();\r\n\t\t},\r\n\t\t_resetHeight: function(){\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tvar newState = this.getCacheStateTotalHeight(store);\r\n\t\t\tif(!getItemHeightCacheState){\r\n\t\t\t\tgetItemHeightCacheState = newState;\r\n\t\t\t}else if(this.shouldClearHeightCache(getItemHeightCacheState, newState)){\r\n\t\t\t\tgetItemHeightCacheState = newState;\r\n\t\t\t\tgetItemHeightCache = null;\r\n\t\t\t}\r\n\r\n\t\t\ttotalHeightCache = -1;\r\n\t\t\tquickPosition.resetCache();\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get top coordinate by row index (order)\r\n\t\t * @param {number} index\r\n\t\t */\r\n\t\tgetRowTop: function(index){\r\n\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\treturn quickPosition.getRowTop(index);\r\n\t\t\t}\r\n\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tif(!store){\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tif(getRowTopCache[index] !== undefined){\r\n\t\t\t\treturn getRowTopCache[index];\r\n\t\t\t}else {\r\n\t\t\t\tvar all = store.getIndexRange();\r\n\t\t\t\tvar top = 0;\r\n\t\t\t\tvar result = 0;\r\n\t\t\t\tfor(var i = 0; i < all.length; i++){\r\n\t\t\t\t\tgetRowTopCache[i] = top;\r\n\t\t\t\t\ttop += this.getItemHeight(all[i].id);\r\n\t\t\t\t\tif(i < index){\r\n\t\t\t\t\t\tresult = top;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get top coordinate by item id\r\n\t\t * @param {*} task_id\r\n\t\t */\r\n\t\tgetItemTop: function (taskId) {\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tif(getItemTopCache[taskId] !== undefined){\r\n\t\t\t\t\treturn getItemTopCache[taskId];\r\n\t\t\t\t}\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tif(!store) return 0;\r\n\r\n\t\t\t\tvar itemIndex = store.getIndexById(taskId);\r\n\r\n\t\t\t\tif (itemIndex === -1 && store.getParent && store.exists(taskId)) {\r\n\t\t\t\t\tvar parentId = store.getParent(taskId);\r\n\t\t\t\t\tif (store.exists(parentId)) {\r\n\t\t\t\t\t\t// if task is not found in list - maybe it's parent is a split task and we should use parents index instead\r\n\t\t\t\t\t\tvar parent = store.getItem(parentId);\r\n\t\t\t\t\t\tif (this.$gantt.isSplitTask(parent)) {\r\n\t\t\t\t\t\t\treturn this.getItemTop(parentId);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tgetItemTopCache[taskId] = this.getRowTop(itemIndex);\r\n\t\t\t\treturn getItemTopCache[taskId];\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get height of the item by item id\r\n\t\t * @param {*} itemId\r\n\t\t */\r\n\t\tgetItemHeight: function (itemId) {\r\n\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\treturn quickPosition.getItemHeight(itemId);\r\n\t\t\t}\r\n\r\n\t\t\tif(!getItemHeightCache && this.$config.rowStore){\r\n\t\t\t\tthis._fillHeightCache(this.$config.rowStore);\r\n\t\t\t}\r\n\r\n\t\t\tif(getItemHeightCache[itemId] !== undefined){\r\n\t\t\t\treturn getItemHeightCache[itemId];\r\n\t\t\t}\r\n\r\n\t\t\tvar defaultHeight = this.$getConfig().row_height;\r\n\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tif(!store) return defaultHeight;\r\n\r\n\t\t\t\tvar item = store.getItem(itemId);\r\n\r\n\t\t\t\treturn getItemHeightCache[itemId] = item && item.row_height || defaultHeight;\r\n\t\t\t}else{\r\n\t\t\t\treturn defaultHeight;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_fillHeightCache: function(store){\r\n\t\t\tif(!store){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tgetItemHeightCache = {};\r\n\t\t\tvar defaultHeight = this.$getConfig().row_height;\r\n\t\t\tstore.eachItem(function(item){\r\n\t\t\t\treturn getItemHeightCache[item.id] = item && item.row_height || defaultHeight;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tgetCacheStateTotalHeight: function(store){\r\n\r\n\t\t\tvar globalHeight = this.$getConfig().row_height;\r\n\t\t\tvar itemHeightCache = {};\r\n\t\t\tvar items = [];\r\n\t\t\tvar sumHeight = 0;\r\n\t\t\tif(store){\r\n\t\t\t\tstore.eachItem(function(item){\r\n\t\t\t\t\titems.push(item);\r\n\t\t\t\t\titemHeightCache[item.id] = item.row_height;\r\n\t\t\t\t\tsumHeight += item.row_height || globalHeight;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\r\n\t\t\treturn {\r\n\t\t\t\tglobalHeight: globalHeight,\r\n\t\t\t\titems: items,\r\n\t\t\t\tcount: items.length,\r\n\t\t\t\tsumHeight: sumHeight\r\n\t\t\t};\r\n\t\t},\r\n\t\tshouldClearHeightCache: function(oldState, newState){\r\n\r\n\t\t\tif(oldState.count != newState.count){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tif(oldState.globalHeight != newState.globalHeight){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif(oldState.sumHeight != newState.sumHeight){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i in oldState.items){\r\n\t\t\t\tvar newValue = newState.items[i];\r\n\t\t\t\tif(newValue !== undefined && newValue != oldState.items[i]){\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\t/**\r\n\t\t * Get total height of items\r\n\t\t */\r\n\t\tgetTotalHeight: function () {\r\n\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\treturn quickPosition.getTotalHeight();\r\n\t\t\t}\r\n\r\n\t\t\tif(totalHeightCache != -1){\r\n\t\t\t\treturn totalHeightCache;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tthis._fillHeightCache(store);\r\n\t\t\t\tvar getHeight = this.getItemHeight.bind(this);\r\n\t\t\t\tvar visibleItems = store.getVisibleItems();\r\n\t\t\t\tvar totalHeight = 0;\r\n\r\n\t\t\t\tvisibleItems.forEach(function(item){\r\n\t\t\t\t\ttotalHeight += getHeight(item.id);\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttotalHeightCache = totalHeight;\r\n\t\t\t\treturn totalHeight;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Get item by top position\r\n\t\t * @param {*} top\r\n\t\t */\r\n\t\tgetItemIndexByTopPosition: function (top) {\r\n\t\t\tif(this.$config.rowStore){\r\n\t\t\t\tif(quickPosition.canUseSimpleCalculation()){\r\n\t\t\t\t\treturn quickPosition.getItemIndexByTopPosition(top);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar store = this.$config.rowStore;\r\n\t\t\t\tfor(var i = 0; i < store.countVisible(); i++){\r\n\t\t\t\t\tvar current = this.getRowTop(i);\r\n\t\t\t\t\tvar next = this.getRowTop(i+1);\r\n\t\t\t\t\tif(!next){\r\n\t\t\t\t\t\tvar taskId = store.getIdByIndex(i);\r\n\t\t\t\t\t\tnext = current + this.getItemHeight(taskId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(top >= current && top < next){\r\n\t\t\t\t\t\treturn i;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// GS-1723: If we iterated all tasks and didn't find the position, the target is below all other tasks\r\n\t\t\t\treturn store.countVisible() + 2;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default createMixin;","function createHelper(view){\r\n\tvar cachedRowHeight = -1;\r\n\tvar canUseSimpleCalc = -1;\r\n\treturn {\r\n\t\tresetCache: function(){\r\n\t\t\tcachedRowHeight = -1;\r\n\t\t\tcanUseSimpleCalc = -1;\r\n\t\t},\r\n\t\t_getRowHeight: function(){\r\n\t\t\tif(cachedRowHeight === -1){\r\n\t\t\t\tcachedRowHeight = view.$getConfig().row_height;\r\n\t\t\t}\r\n\t\t\treturn cachedRowHeight;\r\n\t\t},\r\n\t\t_refreshState: function(){\r\n\t\t\tthis.resetCache();\r\n\t\t\tcanUseSimpleCalc = true;\r\n\t\t\tvar store = view.$config.rowStore;\r\n\t\t\tif(!store){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar globalRowHeight = this._getRowHeight();\r\n\t\t\tfor (var i=0; i\";\r\n\t\tthis.$task = container.childNodes[0];\r\n\r\n\t\tthis.$task.innerHTML = \"
\";\r\n\t\tthis.$task_scale = this.$task.childNodes[0];\r\n\r\n\t\tthis.$task_data = this.$task.childNodes[1];\r\n\t\tconst taskBg = \"
\";\r\n\t\tconst links = \"
\";\r\n\t\tconst taskBars = \"
\";\r\n\r\n\t\tconst taskConstraints = \"
\";\r\n\t\tconst taskDeadlines = \"
\";\r\n\t\tconst taskBaselines = \"
\";\r\n\r\n\t\tthis.$task_data.innerHTML = taskBg + taskBaselines + links + taskBars + taskConstraints + taskDeadlines;\r\n\r\n\t\tthis.$task_bg = this.$task_data.childNodes[0];\r\n\t\tthis.$task_baselines = this.$task_data.childNodes[1];\r\n\t\tthis.$task_links = this.$task_data.childNodes[2];\r\n\t\tthis.$task_bars = this.$task_data.childNodes[3];\r\n\t\tthis.$task_constraints = this.$task_data.childNodes[4];\r\n\t\tthis.$task_deadlines = this.$task_data.childNodes[5];\r\n\r\n\t\tthis._tasks = {\r\n\t\t\tcol_width: 0,\r\n\t\t\twidth: [], // width of each column\r\n\t\t\tfull_width: 0, // width of all columns\r\n\t\t\ttrace_x: [],\r\n\t\t\trendered: {}\r\n\t\t};\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar attr = config[this.$config.bind + \"_attribute\"];\r\n\t\tvar linksAttr = config[this.$config.bindLinks + \"_attribute\"];\r\n\t\tif(!attr && this.$config.bind){\r\n\t\t\tattr = \"data-\" + this.$config.bind + \"-id\";\r\n\t\t}\r\n\t\tif(!linksAttr && this.$config.bindLinks){\r\n\t\t\tlinksAttr = \"data-\" + this.$config.bindLinks + \"-id\";\r\n\t\t}\r\n\t\tthis.$config.item_attribute = attr || null;\r\n\t\tthis.$config.link_attribute = linksAttr || null;\r\n\r\n\t\tvar layers = this._createLayerConfig();\r\n\t\tif(!this.$config.layers){\r\n\t\t\tthis.$config.layers = layers.tasks;\r\n\t\t}\r\n\t\tif(!this.$config.linkLayers){\r\n\t\t\tthis.$config.linkLayers = layers.links;\r\n\t\t}\r\n\r\n\t\tthis._attachLayers(this.$gantt);\r\n\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t\t//this.refresh();\r\n\t\tif (this.$gantt.ext.dragTimeline) {\r\n\t\t\tthis._timelineDragScroll = this.$gantt.ext.dragTimeline.create();\r\n\t\t\tthis._timelineDragScroll.attach(this);\r\n\t\t}\r\n\t},\r\n\r\n\tsetSize: function(width, height){\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tif(width*1 === width){\r\n\t\t\tthis.$config.width = width;\r\n\t\t}\r\n\t\tif(height*1 === height){\r\n\r\n\t\t\tthis.$config.height = height;\r\n\t\t\tvar dataHeight = Math.max(this.$config.height - config.scale_height);\r\n\t\t\tthis.$task_data.style.height = dataHeight + 'px';\r\n\t\t}\r\n\r\n\t\tthis.refresh();\r\n\t\tthis.$task_bg.style.backgroundImage = \"\";\r\n\r\n\t\tif(config.smart_rendering && this.$config.rowStore){\r\n\t\t\tthis.$task_bg.style.height = this.getTotalHeight() +\"px\";\r\n\t\t}else{\r\n\t\t\tthis.$task_bg.style.height = \"\";\r\n\t\t}\r\n\r\n\t\tvar scale = this._tasks;\r\n\t\t//timeline area layers\r\n\t\tvar data_els = this.$task_data.childNodes;\r\n\t\tfor(var i= 0, len = data_els.length; i < len; i++){\r\n\t\t\tvar el = data_els[i];\r\n\t\t\tif(el.hasAttribute(\"data-layer\") && el.style)\r\n\t\t\t\tel.style.width = scale.full_width + \"px\";\r\n\t\t}\r\n\t},\r\n\r\n\tisVisible: function(){\r\n\t\tif(this.$parent && this.$parent.$config){\r\n\t\t\treturn !this.$parent.$config.hidden;\r\n\t\t}else{\r\n\t\t\treturn this.$task.offsetWidth;\r\n\t\t}\r\n\t},\r\n\r\n\tgetSize: function(){\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar store = this.$config.rowStore;\r\n\r\n\t\tvar contentHeight = store ? this.getTotalHeight() : 0,\r\n\t\t\tcontentWidth = this.isVisible() ? this._tasks.full_width : 0;\r\n\r\n\t\treturn {\r\n\t\t\tx: this.isVisible() ? this.$config.width : 0,\r\n\t\t\ty: this.isVisible() ? this.$config.height : 0,\r\n\t\t\tcontentX: this.isVisible() ? contentWidth : 0,\r\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\r\n\t\t\tscrollHeight: this.isVisible() ? contentHeight : 0,\r\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\r\n\t\t};\r\n\t},\r\n\r\n\tscrollTo: function(left, top){\r\n\t\tif(!this.isVisible())\r\n\t\t\treturn;\r\n\r\n\t\tvar scrolled = false;\r\n\r\n\t\tthis.$config.scrollTop = this.$config.scrollTop || 0;\r\n\t\tthis.$config.scrollLeft = this.$config.scrollLeft || 0;\r\n\t\tif(top*1 === top){\r\n\t\t\tthis.$config.scrollTop = top;\r\n\t\t\tthis.$task_data.scrollTop = this.$config.scrollTop;\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\t\tif (left*1 === left){\r\n\t\t\tthis.$task.scrollLeft = left;\r\n\t\t\tthis.$config.scrollLeft = this.$task.scrollLeft;\r\n\t\t\tthis._refreshScales();\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\r\n\t\tif(scrolled){\r\n\t\t\tthis.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\r\n\t\t}\r\n\t},\r\n\r\n\t_refreshScales: function _refreshScales() {\r\n\t\tif(!this.isVisible())\r\n\t\t\treturn;\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tif (!config.smart_scales) return;\r\n\r\n\t\tvar viewPort = this.getViewPort();\r\n\r\n\t\tvar scales = this._scales;\r\n\t\tthis.$task_scale.innerHTML = this._getScaleChunkHtml(scales, viewPort.x, viewPort.x_end);\r\n\t},\r\n\r\n\tgetViewPort: function(){\r\n\t\tvar scrollLeft = this.$config.scrollLeft || 0;\r\n\t\tvar scrollTop = this.$config.scrollTop || 0;\r\n\t\tvar height = this.$config.height || 0;\r\n\t\tvar width = this.$config.width || 0;\r\n\t\treturn {\r\n\t\t\ty: scrollTop,\r\n\t\t\ty_end: scrollTop + height,\r\n\t\t\tx: scrollLeft,\r\n\t\t\tx_end: scrollLeft + width,\r\n\t\t\theight: height,\r\n\t\t\twidth: width\r\n\t\t};\r\n\t},\r\n\r\n\t_createLayerConfig: createLayerConfig,\r\n\r\n\t_attachLayers: function(gantt){\r\n\t\tthis._taskLayers = [];\r\n\t\tthis._linkLayers = [];\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\r\n\t\tif(this.$config.bind){\r\n\r\n\t\t\tthis._bindStore();\r\n\t\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\r\n\t\t\tif(!taskRenderer){\r\n\t\t\t\ttaskRenderer = layers.createDataRender({\r\n\t\t\t\t\tname: this.$config.bind,\r\n\t\t\t\t\tdefaultContainer: function(){ return self.$task_data;}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\ttaskRenderer.container = function(){ return self.$task_data;};\r\n\r\n\t\t\tvar taskLayers = this.$config.layers;\r\n\t\t\tfor(var i = 0; taskLayers && i < taskLayers.length; i++){\r\n\t\t\t\tvar layer = taskLayers[i];\r\n\r\n\t\t\t\tif(typeof layer == \"string\"){\r\n\t\t\t\t\tlayer = this.$gantt.$ui.layers[layer]();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof layer == \"function\" || (layer && layer.render && layer.update)){\r\n\t\t\t\t\tlayer = {renderer: layer};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlayer.view = this;\r\n\r\n\t\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\r\n\t\t\t\tthis._taskLayers.push(bar_layer);\r\n\t\t\t\tif(layer.expose){\r\n\t\t\t\t\tthis._taskRenderer = taskRenderer.getLayer(bar_layer);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._initStaticBackgroundRender();\r\n\t\t}\r\n\r\n\t\tif(this.$config.bindLinks){\r\n\t\t\tself.$config.linkStore = self.$gantt.getDatastore(self.$config.bindLinks);\r\n\r\n\t\t\tvar linkRenderer = layers.getDataRender(this.$config.bindLinks);\r\n\r\n\t\t\tif(!linkRenderer){\r\n\t\t\t\tlinkRenderer = layers.createDataRender({\r\n\t\t\t\t\tname: this.$config.bindLinks,\r\n\t\t\t\t\tdefaultContainer: function(){ return self.$task_data;}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tvar linkLayers = this.$config.linkLayers;\r\n\t\t\tfor(var i = 0; linkLayers && i < linkLayers.length; i++){\r\n\r\n\t\t\t\tif(typeof layer == \"string\"){\r\n\t\t\t\t\tlayer = this.$gantt.$ui.layers[layer]();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar layer = linkLayers[i];\r\n\t\t\t\tlayer.view = this;\r\n\t\t\t//\tlayer.getViewPort = getViewPort;\r\n\t\t\t//\tsubscribeSmartRender(layer);\r\n\t\t\t\tvar linkLayer = linkRenderer.addLayer(layer);\r\n\t\t\t\tthis._taskLayers.push(linkLayer);\r\n\t\t\t\tif(linkLayers[i].expose){\r\n\t\t\t\t\tthis._linkRenderer = linkRenderer.getLayer(linkLayer);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_initStaticBackgroundRender: function(){\r\n\t\tvar self = this;\r\n\t\tvar staticRender = canvasRender.create();\r\n\t\tvar store = self.$config.rowStore;\r\n\t\tif(!store) return;\r\n\r\n\t\tthis._staticBgHandler = store.attachEvent(\"onStoreUpdated\", function(id, item, mode){\r\n\t\t\tif(id !== null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(!self.isVisible())\r\n\t\t\t\treturn;\r\n\t\t\tvar config = self.$getConfig();\r\n\t\t\tif(config.static_background || config.timeline_placeholder) {\r\n\t\t\t\tvar store = self.$gantt.getDatastore(self.$config.bind);\r\n\t\t\t\tvar staticBgContainer = self.$task_bg_static;\r\n\t\t\t\tif(!staticBgContainer){\r\n\t\t\t\t\tstaticBgContainer = document.createElement(\"div\");\r\n\t\t\t\t\tstaticBgContainer.className = \"gantt_task_bg\";\r\n\t\t\t\t\tself.$task_bg_static = staticBgContainer;\r\n\t\t\t\t\tif(self.$task_bg.nextSibling){\r\n\t\t\t\t\t\tself.$task_data.insertBefore(staticBgContainer, self.$task_bg.nextSibling);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tself.$task_data.appendChild(staticBgContainer);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (store) {\r\n\t\t\t\t\tvar staticBackgroundHeight = self.getTotalHeight();\r\n\t\t\t\t\tif (config.timeline_placeholder){\r\n\t\t\t\t\t\tstaticBackgroundHeight = config.timeline_placeholder.height || self.$task_data.offsetHeight || 99999;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstaticRender.render(staticBgContainer, config, self.getScale(), staticBackgroundHeight, self.getItemHeight(item ? item.id : null));\r\n\t\t\t\t}\r\n\t\t\t}else if(config.static_background){\r\n\t\t\t\tif(self.$task_bg_static && self.$task_bg_static.parentNode){\r\n\t\t\t\t\tself.$task_bg_static.parentNode.removeChild(self.$task_bg_static);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.attachEvent(\"onDestroy\", function () {\r\n\t\t\tstaticRender.destroy();\r\n\t\t});\r\n\t\tthis._initStaticBackgroundRender = function(){};//init once\r\n\t},\r\n\r\n\t_clearLayers: function(gantt){\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\t\tvar linkRenderer = layers.getDataRender(this.$config.bindLinks);\r\n\r\n\t\tif (this._taskLayers) {\r\n\t\t\tfor(var i = 0; i < this._taskLayers.length; i++){\r\n\t\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this._linkLayers) {\r\n\t\t\tfor(var i = 0; i < this._linkLayers.length; i++){\r\n\t\t\t\tlinkRenderer.removeLayer(this._linkLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._linkLayers = [];\r\n\t\tthis._taskLayers = [];\r\n\t},\r\n\r\n\t_render_tasks_scales: function _render_tasks_scales() {\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tvar scales_html = \"\",\r\n\t\t\touter_width = 0,\r\n\t\t\tscale_height = 0;\r\n\r\n\t\tvar state = this.$gantt.getState();\r\n\r\n\t\tif (this.isVisible()) {\r\n\t\t\tvar helpers = this.$scaleHelper;\r\n\t\t\tvar scales = this._getScales();\r\n\t\t\tscale_height = config.scale_height;\r\n\r\n\t\t\tvar availWidth = this.$config.width;\r\n\t\t\tif(config.autosize == \"x\" || config.autosize == \"xy\"){\r\n\t\t\t\tavailWidth = Math.max(config.autosize_min_width, 0);\r\n\t\t\t}\r\n\r\n\t\t\tvar cfgs = helpers.prepareConfigs(scales, config.min_column_width, availWidth, scale_height - 1, state.min_date, state.max_date, config.rtl);\r\n\t\t\tvar cfg = this._tasks = cfgs[cfgs.length - 1];\r\n\t\t\tthis._scales = cfgs;\r\n\t\t\tthis._posFromDateCache = {};\r\n\r\n\t\t\tscales_html = this._getScaleChunkHtml(cfgs, 0, this.$config.width);\r\n\r\n\t\t\touter_width = cfg.full_width + \"px\";//cfg.full_width + (this._scroll_sizes().y ? scrollSizes.scroll_size : 0) + \"px\";\r\n\t\t\tscale_height += \"px\";\r\n\t\t}\r\n\r\n\t\tthis.$task_scale.style.height = scale_height;\r\n\r\n\t\tthis.$task_data.style.width =\r\n\t\t\tthis.$task_scale.style.width = outer_width;\r\n\r\n\t\tthis.$task_scale.innerHTML = scales_html;\r\n\r\n\t},\r\n\r\n\t_getScaleChunkHtml: function _get_scale_chunk_html (scales, fromPos, toPos) {\r\n\t\tvar templates = this.$gantt.templates;\r\n\t\tvar html = [];\r\n\r\n\t\tvar css = templates.scale_row_class;\r\n\t\tfor (var i = 0; i < scales.length; i++) {\r\n\t\t\tvar cssClass = \"gantt_scale_line\";\r\n\t\t\tvar tplClass = css(scales[i]);\r\n\t\t\tif (tplClass) {\r\n\t\t\t\tcssClass += \" \" + tplClass;\r\n\t\t\t}\r\n\r\n\t\t\thtml.push(\"\" + this._prepareScaleHtml(scales[i], fromPos, toPos, i) + \"
\");\r\n\t\t}\r\n\r\n\t\treturn html.join(\"\");\r\n\t},\r\n\t_prepareScaleHtml: function _prepare_scale_html(config, fromPos, toPos, index) {\r\n\t\tvar globalConfig = this.$getConfig();\r\n\t\tvar globalTemplates = this.$gantt.templates;\r\n\r\n\t\tvar cells = [];\r\n\t\tvar date = null, css = null;\r\n\r\n\t\tvar content = config.format || config.template || config.date;\r\n\r\n\t\tif(typeof content === \"string\"){\r\n\t\t\tcontent = this.$gantt.date.date_to_str(content);\r\n\t\t}\r\n\r\n\t\tvar startIndex = 0,\r\n\t\t\tendIndex = config.count;\r\n\r\n\t\tif (globalConfig.smart_scales && (!isNaN(fromPos) && !isNaN(toPos))) {\r\n\t\t\tstartIndex = helpers.findBinary(config.left, fromPos);\r\n\t\t\tendIndex = helpers.findBinary(config.left, toPos) + 1;\r\n\t\t}\r\n\r\n\t\tcss = config.css || function () {\r\n\t\t\t};\r\n\t\tif (!config.css && globalConfig.inherit_scale_class) {\r\n\t\t\tcss = globalTemplates.scale_cell_class;\r\n\t\t}\r\n\r\n\t\tfor (var i = startIndex; i < endIndex; i++) {\r\n\t\t\tif (!config.trace_x[i]) break;\r\n\r\n\t\t\tdate = new Date(config.trace_x[i]);\r\n\t\t\tvar value = content.call(this, date),\r\n\t\t\t\twidth = config.width[i],\r\n\t\t\t\theight = config.height,\r\n\t\t\t\tleft = config.left[i],\r\n\t\t\t\tstyle = \"\",\r\n\t\t\t\ttemplate = \"\",\r\n\t\t\t\tcssclass = \"\";\r\n\r\n\t\t\tif (width) {\r\n\t\t\t\tvar position = globalConfig.smart_scales ? (\"position:absolute;left:\" + left + \"px\") : \"\";\r\n\r\n\t\t\t\tstyle = \"width:\" + (width) + \"px;\" + position;\r\n\t\t\t\t// GS-1188: Display the scale value in the viewport for long cells\r\n\t\t\t\tconst viewPort = this.getViewPort();\r\n\t\t\t\tconst floatConfig = (globalConfig.scales[index] || {}).sticky; // for old scale settings\r\n\r\n\t\t\t\tlet labelPosition = '';\r\n\t\t\t\tconst approxLabelWidth = 70;\r\n\t\t\t\t// if sticky config is not specified - sticky labels are enabled for long cells only\r\n\t\t\t\tif ((floatConfig !== false && width > approxLabelWidth) || floatConfig === true) {\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (left < viewPort.x && left + width/2 - approxLabelWidth/2 < viewPort.x){\r\n\t\t\t\t\t\tlabelPosition = ` style='position:absolute;left: ${viewPort.x - left + 10}px;' `;\r\n\t\t\t\t\t} else if(left + width/2 + approxLabelWidth/2 > viewPort.x_end && width > approxLabelWidth){\r\n\t\t\t\t\t\tlet labelPos = viewPort.x_end - left - 10;\r\n\t\t\t\t\t\tlet translateValue = \"-100%\";\r\n\t\t\t\t\t\tif(labelPos < approxLabelWidth) {\r\n\t\t\t\t\t\t\tlabelPos = approxLabelWidth;\r\n\t\t\t\t\t\t\ttranslateValue = `-${labelPos}px`;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlabelPosition = ` style='position:absolute;left: ${labelPos}px;transform: translate(${translateValue},0);' `;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcssclass = \"gantt_scale_cell\" + (i == config.count - 1 ? \" gantt_last_cell\" : \"\");\r\n\r\n\t\t\t\ttemplate = css.call(this, date);\r\n\t\t\t\tif (template) cssclass += \" \" + template;\r\n\r\n\t\t\t\tvar ariaAttr = this.$gantt._waiAria.getTimelineCellAttr(value);\r\n\t\t\t\tvar cell = `${value}
`;\r\n\t\t\t\tcells.push(cell);\r\n\t\t\t} else {\r\n\t\t\t\t//do not render ignored cells\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\treturn cells.join(\"\");\r\n\t},\r\n\tdateFromPos: function dateFromPos(x) {\r\n\t\tvar scale = this._tasks;\r\n\t\tif (x < 0 || x > scale.full_width || !scale.full_width) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar ind = helpers.findBinary(this._tasks.left, x);\r\n\t\tvar summ = this._tasks.left[ind];\r\n\r\n\t\tvar col_width = scale.width[ind] || scale.col_width;\r\n\t\tvar part = 0;\r\n\t\tif (col_width) {\r\n\t\t\tpart = (x - summ) / col_width;\r\n\t\t\tif(scale.rtl){\r\n\t\t\t\tpart = 1 - part;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar unit = 0;\r\n\t\tif (part) {\r\n\t\t\tunit = this._getColumnDuration(scale, scale.trace_x[ind]);\r\n\t\t}\r\n\r\n\t\tvar date = new Date(scale.trace_x[ind].valueOf() + Math.round(part * unit));\r\n\t\treturn date;\r\n\t},\r\n\tposFromDate: function posFromDate(date) {\r\n\t\tif (!this.isVisible())\r\n\t\t\treturn 0;\r\n\r\n\t\tif(!date){\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tvar dateValue = String(date.valueOf());\r\n\r\n\t\tif(this._posFromDateCache[dateValue] !== undefined){\r\n\t\t\treturn this._posFromDateCache[dateValue];\r\n\t\t}\r\n\t\tvar ind = this.columnIndexByDate(date);\r\n\t\tthis.$gantt.assert(ind >= 0, \"Invalid day index\");\r\n\r\n\t\tvar wholeCells = Math.floor(ind);\r\n\t\tvar partCell = ind % 1;\r\n\r\n\t\tvar pos = this._tasks.left[Math.min(wholeCells, this._tasks.width.length - 1)];\r\n\t\tif (wholeCells == this._tasks.width.length)\r\n\t\t\tpos += this._tasks.width[this._tasks.width.length - 1];\r\n\t\t//for(var i=1; i <= wholeCells; i++)\r\n\t\t//\tpos += gantt._tasks.width[i-1];\r\n\r\n\t\tif (partCell) {\r\n\t\t\tif (wholeCells < this._tasks.width.length) {\r\n\t\t\t\tpos += this._tasks.width[wholeCells] * (partCell % 1);\r\n\t\t\t} else {\r\n\t\t\t\tpos += 1;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tvar roundPos = Math.round(pos);\r\n\t\tthis._posFromDateCache[dateValue] = roundPos;\r\n\t\treturn Math.round(roundPos);\r\n\t},\r\n\r\n\t_getNextVisibleColumn: function (startIndex, columns, ignores) {\r\n\t\t// iterate columns to the right\r\n\t\tvar date = +columns[startIndex];\r\n\t\tvar visibleDateIndex = startIndex;\r\n\t\twhile (ignores[date]) {\r\n\t\t\tvisibleDateIndex++;\r\n\t\t\tdate = +columns[visibleDateIndex];\r\n\t\t}\r\n\r\n\t\treturn visibleDateIndex;\r\n\t},\r\n\t_getPrevVisibleColumn: function (startIndex, columns, ignores) {\r\n\t\t// iterate columns to the left\r\n\t\tvar date = +columns[startIndex];\r\n\t\tvar visibleDateIndex = startIndex;\r\n\t\twhile (ignores[date]) {\r\n\t\t\tvisibleDateIndex--;\r\n\t\t\tdate = +columns[visibleDateIndex];\r\n\t\t}\r\n\t\treturn visibleDateIndex;\r\n\t},\r\n\t_getClosestVisibleColumn: function (startIndex, columns, ignores) {\r\n\t\tvar visibleDateIndex = this._getNextVisibleColumn(startIndex, columns, ignores);\r\n\t\tif (!columns[visibleDateIndex]) {\r\n\t\t\tvisibleDateIndex = this._getPrevVisibleColumn(startIndex, columns, ignores);\r\n\t\t}\r\n\t\treturn visibleDateIndex;\r\n\t},\r\n\tcolumnIndexByDate: function columnIndexByDate(date) {\r\n\t\tvar pos = new Date(date).valueOf();\r\n\t\tvar days = this._tasks.trace_x_ascending,\r\n\t\t\tignores = this._tasks.ignore_x;\r\n\r\n\t\tvar state = this.$gantt.getState();\r\n\r\n\t\tif (pos <= state.min_date) {\r\n\t\t\tif(this._tasks.rtl){\r\n\t\t\t\treturn days.length;\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif (pos >= state.max_date) {\r\n\t\t\tif(this._tasks.rtl){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn days.length;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar dateIndex = helpers.findBinary(days, pos);\r\n\r\n\t\tvar visibleIndex = this._getClosestVisibleColumn(dateIndex, days, ignores);\r\n\t\tvar visibleDate = days[visibleIndex];\r\n\t\tvar transition = this._tasks.trace_index_transition;\r\n\r\n\t\tif(!visibleDate){\r\n\t\t\tif(transition){\r\n\t\t\t\treturn transition[0];\r\n\t\t\t}else{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar part = ((date - days[visibleIndex]) / this._getColumnDuration(this._tasks, days[visibleIndex]));\r\n\t\tif(transition){\r\n\t\t\treturn transition[visibleIndex] + (1 - part);\r\n\t\t}else{\r\n\t\t\treturn visibleIndex + part;\r\n\t\t}\r\n\t},\r\n\tgetItemPosition:function (task, start_date, end_date) {\r\n\t\tvar xLeft, xRight, width;\r\n\r\n\t\tlet displayStart = start_date || task.start_date || task.$auto_start_date;\r\n\t\tlet displayEnd = end_date || task.end_date || task.$auto_end_date;\r\n\t\tif(this._tasks.rtl){\r\n\t\t\txRight = this.posFromDate(displayStart);\r\n\t\t\txLeft = this.posFromDate(displayEnd);\r\n\t\t}else{\r\n\t\t\txLeft = this.posFromDate(displayStart);\r\n\t\t\txRight = this.posFromDate(displayEnd);\r\n\t\t}\r\n\t\twidth = Math.max((xRight - xLeft), 0);\r\n\r\n\t\tvar y = this.getItemTop(task.id);\r\n\r\n\t\tvar height = this.getBarHeight(task.id);\r\n\t\tvar rowHeight = this.getItemHeight(task.id);\r\n\t\treturn {\r\n\t\t\tleft: xLeft,\r\n\t\t\ttop: y,\r\n\t\t\theight: height,\r\n\t\t\twidth: width,\r\n\t\t\trowHeight: rowHeight\r\n\t\t};\r\n\t},\r\n\r\n\tgetBarHeight: function(taskId, isMilestoneRender){\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tvar task = this.$config.rowStore.getItem(taskId);\r\n\t\t// height of the bar item\r\n\t\tvar height = task.task_height || task.bar_height || config.bar_height || config.task_height;\r\n\t\tvar rowHeight = this.getItemHeight(taskId);\r\n\r\n\t\tif (height == \"full\") {\r\n\t\t\tvar offset = config.bar_height_padding || 3;\r\n\t\t\theight = rowHeight - offset;\r\n\t\t}\r\n\t\t//item height cannot be bigger than row height\r\n\t\theight = Math.min(height, rowHeight);\r\n\t\tif (isMilestoneRender) { // to get correct height for addapting Milestone to the row\r\n\t\t\theight = Math.round(height / Math.sqrt(2));\r\n\t\t}\r\n\t\treturn Math.max(height, 0);\r\n\t},\r\n\r\n\tgetScale: function(){\r\n\t\treturn this._tasks;\r\n\t},\r\n\r\n\t_getScales: function _get_scales() {\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar helpers = this.$scaleHelper;\r\n\t\tvar scales = [helpers.primaryScale(config)].concat(helpers.getSubScales(config));\r\n\r\n\t\thelpers.sortScales(scales);\r\n\t\treturn scales;\r\n\t},\r\n\r\n\t_getColumnDuration: function _get_coll_duration(scale, date) {\r\n\t\treturn this.$gantt.date.add(date, scale.step, scale.unit) - date;\r\n\t},\r\n\t_bindStore: function () {\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tthis.$config.rowStore = rowStore;\r\n\t\t\tif(rowStore && !rowStore._timelineCacheAttached){\r\n\t\t\t\tvar self = this;\r\n\t\t\t\trowStore._timelineCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function(){\r\n\t\t\t\t\tself._resetTopPositionHeight();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t_unbindStore: function(){\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tif(rowStore && rowStore._timelineCacheAttached){\r\n\t\t\t\trowStore.detachEvent(rowStore._timelineCacheAttached);\r\n\t\t\t\trowStore._timelineCacheAttached = false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\trefresh: function(){\r\n\t\tthis._bindStore();\r\n\r\n\t\tif(this.$config.bindLinks) {\r\n\t\t\tthis.$config.linkStore = this.$gantt.getDatastore(this.$config.bindLinks);\r\n\t\t}\r\n\r\n\t\tthis._resetTopPositionHeight();\r\n\t\tthis._resetHeight();\r\n\t\tthis._initStaticBackgroundRender();\r\n\t\tthis._render_tasks_scales();\r\n\t},\r\n\r\n\tdestructor: function(){\r\n\t\tvar gantt = this.$gantt;\r\n\t\tthis._clearLayers(gantt);\r\n\t\tthis._unbindStore();\r\n\t\tthis.$task = null;\r\n\t\tthis.$task_scale = null;\r\n\t\tthis.$task_data = null;\r\n\t\tthis.$task_bg = null;\r\n\t\tthis.$task_links = null;\r\n\t\tthis.$task_bars = null;\r\n\r\n\t\tthis.$gantt = null;\r\n\r\n\t\tif(this.$config.rowStore){\r\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\r\n\t\t\tthis.$config.rowStore = null;\r\n\t\t}\r\n\t\tif(this.$config.linkStore){\r\n\t\t\tthis.$config.linkStore = null;\r\n\t\t}\r\n\r\n\t\tif(this._timelineDragScroll) {\r\n\t\t\tthis._timelineDragScroll.destructor();\r\n\t\t\tthis._timelineDragScroll = null;\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\r\n\t}\r\n};\r\n\r\nexport default Timeline;","\r\nexport default function(){\r\n\tvar self = this;\r\n\tvar taskFilter = function(){\r\n\t\treturn self.isVisible();\r\n\t};\r\n\r\n\tvar barVisible = function(id, task){\r\n\t\treturn !task.hide_bar;\r\n\t};\r\n\r\n\tconst gantt = this.$gantt;\r\n\r\n\tvar taskLayers = [\r\n\t\t{\r\n\t\t\texpose: true,\r\n\t\t\trenderer: this.$gantt.$ui.layers.taskBar(),\r\n\t\t\tcontainer: this.$task_bars,\r\n\t\t\tfilter: [taskFilter, barVisible]\r\n\t\t}\r\n\t];\r\n\r\n\ttaskLayers.push({\r\n\t\trenderer: this.$gantt.$ui.layers.taskBg(),\r\n\t\tcontainer: this.$task_bg,\r\n\t\tfilter: [\r\n\t\t\t//function(){\r\n\t\t\t//\treturn !self.$getConfig().static_background;\r\n\t\t\t//},\r\n\t\t\ttaskFilter\r\n\t\t]\r\n\t});\r\n\r\n\tvar linkLayers = [\r\n\t\t{\r\n\t\t\texpose: true,\r\n\t\t\trenderer: this.$gantt.$ui.layers.link(),\r\n\t\t\tcontainer: this.$task_links,\r\n\t\t\tfilter: [taskFilter]\r\n\t\t}\r\n\t];\r\n\r\n\treturn {\r\n\t\ttasks: taskLayers,\r\n\t\tlinks: linkLayers\r\n\t};\r\n\r\n};","const SENSITIVITY = 20;\r\nconst TIMEOUT = 50;\r\nconst SCROLLSTEP = 10;\r\n\r\nexport default class ScrollableGrid {\r\n\tpublic getCurrentX;\r\n\tprivate $gantt;\r\n\tprivate $grid;\r\n\tprivate _dnd;\r\n\tprivate _scrollView;\r\n\tprivate _scrollOrder: 0 | 1 | -1 = 0;\r\n\r\n\tconstructor(params) {\r\n\t\tconst {gantt, grid, dnd, getCurrentX} = params;\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$grid = grid;\r\n\t\tthis._dnd = dnd;\r\n\t\tthis.getCurrentX = getCurrentX;\r\n\t\tthis._scrollView = this.$gantt.$ui.getView(this.$grid.$config.scrollX);\r\n\t\tthis.attachEvents();\r\n\t}\r\n\tattachEvents() {\r\n\t\tif (this.isScrollable()) {\r\n\t\t\tthis._dnd.attachEvent(\"onDragMove\", (obj, e) => {\r\n\t\t\t\tconst gridBoundingRect = this.$grid.$grid.getBoundingClientRect();\r\n\t\t\t\tconst maxLeft = gridBoundingRect.right;\r\n\t\t\t\tconst minLeft = gridBoundingRect.left;\r\n\t\t\t\tconst currentX = this.getCurrentX(e.clientX);\r\n\r\n\t\t\t\tif (currentX >= maxLeft - SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollRight();\r\n\t\t\t\t\tthis.autoscrollStart();\r\n\t\t\t\t}\r\n\t\t\t\tif (currentX <= minLeft + SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollLeft();\r\n\t\t\t\t\tthis.autoscrollStart();\r\n\t\t\t\t}\r\n\t\t\t\tif (currentX < maxLeft - SENSITIVITY && currentX > minLeft + SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollStop();\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tthis._dnd.attachEvent(\"onDragEnd\", () => {\r\n\t\t\t\tthis.autoscrollStop();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\tautoscrollStart() {\r\n\t\tif (this._scrollOrder === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst scrollStep = SCROLLSTEP * this._scrollOrder;\r\n\t\tconst scrollState = this._scrollView.getScrollState();\r\n\t\tthis._scrollView.scrollTo(scrollState.position + scrollStep);\r\n\t\tsetTimeout(() => { this.autoscrollStart(); }, TIMEOUT);\r\n\t}\r\n\tautoscrollRight() {\r\n\t\tthis._scrollOrder = 1;\r\n\t}\r\n\tautoscrollLeft() {\r\n\t\tthis._scrollOrder = -1;\r\n\t}\r\n\tautoscrollStop() {\r\n\t\tthis._scrollOrder = 0;\r\n\t}\r\n\tgetCorrection() {\r\n\t\tif (!this.isScrollable()) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\treturn this._scrollView.getScrollState().position;\r\n\t}\r\n\tisScrollable() {\r\n\t\treturn !!this.$grid.$config.scrollable;\r\n\t}\r\n}","import * as domHelpers from \"../../utils/dom_helpers\";\r\nimport ScrollableGrid from \"./scrollable_grid\";\r\n\r\nconst COLUMN_ID_ATTR_NAME = \"data-column-id\";\r\n\r\nexport class ColumnsGridDnd {\r\n\tprivate $gantt;\r\n\tprivate $grid;\r\n\tprivate _dragX;\r\n\tprivate _dnd;\r\n\tprivate _originAutoscroll;\r\n\tprivate _scrollableGrid: ScrollableGrid;\r\n\tprivate _draggedCell;\r\n\tprivate _targetMarker = null;\r\n\tprivate _gridConfig;\r\n\tconstructor(gantt, grid) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$grid = grid;\r\n\t}\r\n\tinit() {\r\n\t\tconst DND = this.$gantt.$services.getService(\"dnd\");\r\n\t\tthis._dnd = new DND(this.$grid.$grid_scale, { updates_per_second: 60 });\r\n\t\tthis._scrollableGrid = new ScrollableGrid({\r\n\t\t\tgantt: this.$gantt,\r\n\t\t\tgrid: this.$grid,\r\n\t\t\tdnd: this._dnd,\r\n\t\t\tgetCurrentX: this.calculateCurrentPosition\r\n\t\t});\r\n\t\tthis.attachEvents();\r\n\t}\r\n\tattachEvents() {\r\n\t\tthis._dnd.attachEvent(\"onBeforeDragStart\", (obj, e) => {\r\n\t\t\tthis._draggedCell = this.$gantt.utils.dom.closest(e.target, \".gantt_grid_head_cell\");\r\n\t\t\tif(!this._draggedCell){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\t\tconst columnName = this._draggedCell.getAttribute(COLUMN_ID_ATTR_NAME);\r\n\t\t\tlet draggedColumn;\r\n\t\t\tlet draggedIndex;\r\n\t\t\tcolumns.map(function(column, index){\r\n\t\t\t\tif(column.name === columnName){\r\n\t\t\t\t\tdraggedColumn = column;\r\n\t\t\t\t\tdraggedIndex = index;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.$grid.callEvent(\"onBeforeColumnDragStart\", [{ draggedColumn, draggedIndex}]) === false) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._draggedCell || !draggedColumn) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._gridConfig = this.$grid.$getConfig();\r\n\t\t\tthis._originAutoscroll = this.$gantt.config.autoscroll;\r\n\t\t\tthis.$gantt.config.autoscroll = false;\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onAfterDragStart\", (obj, e) => {\r\n\t\t\tif (!this._draggedCell) {\r\n\t\t\t\treturn; // GS-1333: don't try to reorder a column when we resize it\r\n\t\t\t}\r\n\t\t\tthis._dnd.config.column = this._draggedCell.getAttribute(COLUMN_ID_ATTR_NAME);\r\n\t\t\tthis._dnd.config.marker.innerHTML = this._draggedCell.outerHTML;\r\n\t\t\tthis._dnd.config.marker.classList.add(\"gantt_column_drag_marker\");\r\n\t\t\tthis._dnd.config.marker.style.height = this._gridConfig.scale_height + \"px\";\r\n\t\t\tthis._dnd.config.marker.style.lineHeight = this._gridConfig.scale_height + \"px\";\r\n\t\t\tthis._draggedCell.classList.add(\"gantt_grid_head_cell_dragged\");\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onDragMove\", (obj, e) => {\r\n\t\t\tif(!this._draggedCell){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._dragX = e.clientX;\r\n\t\t\tconst x = this.calculateCurrentPosition(e.clientX);\r\n\t\t\tconst columnIndexes = this.findColumnsIndexes();\r\n\t\t\tconst targetIndex = columnIndexes.targetIndex;\r\n\t\t\tconst draggedIndex = columnIndexes.draggedIndex;\r\n\t\t\tconst columns = this.$grid.$getConfig().columns;\r\n\r\n\t\t\tconst draggedColumn = columns[draggedIndex];\r\n\t\t\tconst targetColumn = columns[targetIndex];\r\n\t\t\tif (this.$grid.callEvent(\"onColumnDragMove\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]) === false) {\r\n\t\t\t\tthis.cleanTargetMarker();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tthis.setMarkerPosition(x);\r\n\t\t\tthis.drawTargetMarker(columnIndexes);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onDragEnd\", () => {\r\n\t\t\tif (!this._draggedCell) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.$gantt.config.autoscroll = this._originAutoscroll;\r\n\t\t\tthis._draggedCell.classList.remove(\"gantt_grid_head_cell_dragged\");\r\n\t\t\tthis.cleanTargetMarker();\r\n\t\t\tthis.reorderColumns();\r\n\t\t});\r\n\r\n\t}\r\n\treorderColumns() {\r\n\t\tconst { targetIndex, draggedIndex } = this.findColumnsIndexes();\r\n\r\n\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\tconst draggedColumn = columns[draggedIndex];\r\n\t\tconst targetColumn = columns[targetIndex];\r\n\r\n\t\tif (this.$grid.callEvent(\"onBeforeColumnReorder\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (targetIndex === draggedIndex) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tcolumns.splice(draggedIndex, 1);\r\n\t\tcolumns.splice(targetIndex, 0, draggedColumn);\r\n\t\tthis.$gantt.render();\r\n\t\tthis.$grid.callEvent(\"onAfterColumnReorder\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]);\r\n\t}\r\n\tfindColumnsIndexes() {\r\n\t\tconst draggedId = this._dnd.config.column;\r\n\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\tlet targetIndex: number;\r\n\t\tlet draggedIndex: number;\r\n\t\tlet xBefore: number;\r\n\t\tlet xAfter: number;\r\n\t\tconst currentColumn = { startX: 0, endX: 0 };\r\n\r\n\t\tlet start = 0;\r\n\t\tlet end = columns.length - 1;\r\n\t\tlet compare = (a, b) => a <= b;\r\n\t\tlet next = (index) => ++index;\r\n\t\tif (this.$gantt.config.rtl) {\r\n\t\t\tstart = columns.length - 1;\r\n\t\t\tend = 0;\r\n\t\t\tcompare = (a, b) => a >= b;\r\n\t\t\tnext = (index) => --index;\r\n\t\t}\r\n\r\n\t\tlet columnRelativePos: number;\r\n\r\n\t\tconst relativeX = this._dragX - this.$grid.$grid.getBoundingClientRect().left + this._scrollableGrid.getCorrection();\r\n\t\tfor (let i = start; compare(i, end); i = next(i)) {\r\n\t\t\tif (targetIndex !== undefined && draggedIndex !== undefined) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif(!columns[i].hide) {\r\n\t\t\t\tcurrentColumn.startX = currentColumn.endX;\r\n\t\t\t\tcurrentColumn.endX += columns[i].width;\r\n\r\n\t\t\t\t// if drop on a column or drop after the last column\r\n\t\t\t\tif (relativeX >= currentColumn.startX && (relativeX <= currentColumn.endX || !compare(next(i), end))) {\r\n\t\t\t\t\ttargetIndex = i;\r\n\t\t\t\t\txBefore = currentColumn.startX;\r\n\t\t\t\t\txAfter = currentColumn.endX;\r\n\t\t\t\t\tcolumnRelativePos = (relativeX - currentColumn.startX) / (currentColumn.endX - currentColumn.startX);\r\n\t\t\t\t}\r\n\t\t\t\tif (draggedId === columns[i].name) {\r\n\t\t\t\t\tdraggedIndex = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttargetIndex,\r\n\t\t\tdraggedIndex,\r\n\t\t\txBefore,\r\n\t\t\txAfter,\r\n\t\t\tcolumnRelativePos\r\n\t\t};\r\n\t}\r\n\tsetMarkerPosition(x: number, y: number = 10) {\r\n\t\tconst { marker } = this._dnd.config;\r\n\t\tconst gridOffset = this._dnd._obj.getBoundingClientRect();\r\n\t\tmarker.style.top = `${gridOffset.y + y}px`;\r\n\t\tmarker.style.left = `${x}px`;\r\n\t}\r\n\tcalculateCurrentPosition = (eventX: number) => {\r\n\t\tconst gridBoundingRect = this.$grid.$grid.getBoundingClientRect();\r\n\t\tconst maxLeft = gridBoundingRect.right;\r\n\t\tconst minLeft = gridBoundingRect.left;\r\n\t\tlet x = eventX;\r\n\t\tif (x > maxLeft) {\r\n\t\t\tx = maxLeft;\r\n\t\t}\r\n\t\tif (x < minLeft) {\r\n\t\t\tx = minLeft;\r\n\t\t}\r\n\t\treturn x;\r\n\t};\r\n\tdrawTargetMarker({ targetIndex, draggedIndex, xBefore, xAfter, columnRelativePos }) {\r\n\t\tif (!this._targetMarker) {\r\n\t\t\tthis._targetMarker = document.createElement(\"div\");\r\n\t\t\tdomHelpers.addClassName(this._targetMarker, \"gantt_grid_target_marker\");\r\n\t\t\tthis._targetMarker.style.display = \"none\";\r\n\t\t\tthis._targetMarker.style.height = `${this._gridConfig.scale_height}px`;\r\n\t\t}\r\n\r\n\t\t// marker can be detached after gantt.render\r\n\t\tif(!this._targetMarker.parentNode){\r\n\t\t\tthis.$grid.$grid_scale.appendChild(this._targetMarker);\r\n\t\t}\r\n\r\n\t\tlet nextPosition: number;\r\n\t\tif (targetIndex > draggedIndex) {\r\n\t\t\tnextPosition = xAfter;\r\n\t\t} else if (targetIndex < draggedIndex) {\r\n\t\t\tnextPosition = xBefore;\r\n\t\t} else {\r\n\t\t\tif(columnRelativePos > 0.5){\r\n\t\t\t\tnextPosition = xAfter;\r\n\t\t\t}else{\r\n\t\t\t\tnextPosition = xBefore;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._targetMarker.style.left = `${nextPosition}px`;\r\n\t\tthis._targetMarker.style.display = \"block\";\r\n\t}\r\n\tcleanTargetMarker() {\r\n\t\tif (this._targetMarker && this._targetMarker.parentNode) {\r\n\t\t\tthis.$grid.$grid_scale.removeChild(this._targetMarker);\r\n\t\t}\r\n\t\tthis._targetMarker = null;\r\n\t}\r\n}","function create(gantt){\r\n\tvar events = [];\r\n\r\n\treturn {\r\n\t\tdelegate:function(event, className, handler, root) {\r\n\t\t\tevents.push([event, className, handler, root]);\r\n\r\n\t\t\tvar helper = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\thelper.delegate(event, className, handler, root);\r\n\t\t},\r\n\t\tdestructor: function(){\r\n\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\tfor(var i = 0; i < events.length; i++){\r\n\t\t\t\tvar h = events[i];\r\n\t\t\t\tmouseEvents.detach(h[0], h[1], h[2], h[3]);\r\n\t\t\t}\r\n\t\t\tevents = [];\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default create;","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport eventable from \"../../../utils/eventable\";\r\nimport gridResize from \"./grid_resize\";\r\nimport topPositionMixin from \"../row_position_mixin\";\r\nimport rowResize from \"./task_grid_row_resize\";\r\n\r\nimport ColumnDnd from \"../plugins/column_grid_dnd\";\r\n\r\nimport mouseEventContainer from \"../mouse_event_container\";\r\n\r\nvar Grid = function (parent, config, factory, gantt) {\r\n\tthis.$config = utils.mixin({}, config || {});\r\n\tthis.$gantt = gantt;\r\n\tthis.$parent = parent;\r\n\teventable(this);\r\n\tthis.$state = {};\r\n\tutils.mixin(this, topPositionMixin(this));\r\n};\r\n\r\n\r\nGrid.prototype = {\r\n\tinit: function(container) {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar gridAriaAttr = gantt._waiAria.gridAttrString();\r\n\t\tvar gridDataAriaAttr = gantt._waiAria.gridDataAttrString();\r\n\t\tvar _ganttConfig = this.$getConfig();\r\n\t\tvar reorderColumns = _ganttConfig.reorder_grid_columns || false;\r\n\t\tif (this.$config.reorder_grid_columns !== undefined) {\r\n\t\t\treorderColumns = this.$config.reorder_grid_columns;\r\n\t\t}\r\n\r\n\r\n\t\tcontainer.innerHTML = \"
\";\r\n\t\tthis.$grid = container.childNodes[0];\r\n\r\n\t\tthis.$grid.innerHTML = \"
\";\r\n\r\n\t\tthis.$grid_scale = this.$grid.childNodes[0];\r\n\t\tthis.$grid_data = this.$grid.childNodes[1];\r\n\r\n\t\tvar attr = _ganttConfig[this.$config.bind + \"_attribute\"];\r\n\t\tif (!attr && this.$config.bind) {\r\n\t\t\tattr = \"data-\" + this.$config.bind + \"-id\";\r\n\t\t}\r\n\t\tthis.$config.item_attribute = attr || null;\r\n\r\n\t\tif (!this.$config.layers) {\r\n\t\t\tvar layers = this._createLayerConfig();\r\n\t\t\tthis.$config.layers = layers;\r\n\t\t}\r\n\r\n\t\tvar resizer = gridResize(gantt, this);\r\n\t\tresizer.init();\r\n\t\tthis._renderHeaderResizers = resizer.doOnRender;\r\n\t\tthis._mouseDelegates = mouseEventContainer(gantt);\r\n\r\n\t\tvar resizerrow = rowResize(gantt, this);\r\n\t\tresizerrow.init();\r\n\r\n\t\tthis._addLayers(this.$gantt);\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (reorderColumns) {\r\n\t\t\tthis._columnDND = new ColumnDnd(gantt, this);\r\n\t\t\tthis._columnDND.init();\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onReady\", []);\r\n\t\t//this.refresh();\r\n\t},\r\n\r\n\t_validateColumnWidth: function (column, property) {\r\n\t\t// user can set {name:\"text\", width:\"200\",...} for some reason,\r\n\t\t// check and convert it to number when possible\r\n\t\tvar value = column[property];\r\n\t\tif (value && value != \"*\") {\r\n\t\t\tvar gantt = this.$gantt;\r\n\t\t\tvar numericWidth = value * 1;\r\n\t\t\tif (isNaN(numericWidth)) {\r\n\t\t\t\tgantt.assert(false, \"Wrong \" + property + \" value of column \" + column.name);\r\n\t\t\t} else {\r\n\t\t\t\tcolumn[property] = numericWidth;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tsetSize: function (width, height) {\r\n\t\tthis.$config.width = this.$state.width = width;\r\n\t\tthis.$config.height = this.$state.height = height;\r\n\r\n\t\t// TODO: maybe inherit and override in a subclass instead of extending here\r\n\r\n\t\tvar columns = this.getGridColumns(),\r\n\t\t\tinnerWidth = 0;\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar elasticColumns = config.grid_elastic_columns;\r\n\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tthis._validateColumnWidth(columns[i], \"min_width\");\r\n\t\t\tthis._validateColumnWidth(columns[i], \"max_width\");\r\n\t\t\tthis._validateColumnWidth(columns[i], \"width\");\r\n\r\n\t\t\tinnerWidth += columns[i].width * 1;\r\n\t\t}\r\n\r\n\t\tvar outerWidth;\r\n\t\tif (isNaN(innerWidth) || !this.$config.scrollable) {\r\n\t\t\touterWidth = this._setColumnsWidth(width + 1);\r\n\t\t\tinnerWidth = outerWidth;\r\n\t\t}\r\n\r\n\t\tif(this.$config.scrollable && elasticColumns && !isNaN(innerWidth)){\r\n\t\t\t// GS-1352: Allow resizing the grid columns, then the grid width is increased\r\n\t\t\t// or keep the grid width, but don't allow column resize to affect the grid width\r\n\t\t\tlet columnProperty = \"width\";\r\n\t\t\tif (elasticColumns == \"min_width\"){\r\n\t\t\t\tcolumnProperty = \"min_width\";\r\n\t\t\t}\r\n\t\t\tlet newColumnWidth = 0;\r\n\t\t\tcolumns.forEach(function(col){\r\n\t\t\t\tnewColumnWidth += col[columnProperty] || config.min_grid_column_width;\r\n\t\t\t});\r\n\t\t\t//newColumnWidth--; // the total column width shouldn't match the outerWidth // GS-2190 reducing width seems to be not needed\r\n\t\t\tvar columnsWidth = Math.max(newColumnWidth, width);\r\n\t\t\tinnerWidth = this._setColumnsWidth(columnsWidth);\r\n\t\t\touterWidth = width;\r\n\t\t}\r\n\r\n\t\tif (this.$config.scrollable) {\r\n\t\t\tthis.$grid_scale.style.width = innerWidth + \"px\";\r\n\t\t\tthis.$grid_data.style.width = innerWidth + \"px\";\r\n\t\t} else {\r\n\t\t\tthis.$grid_scale.style.width = \"inherit\";\r\n\t\t\tthis.$grid_data.style.width = \"inherit\";\r\n\t\t}\r\n\t\tthis.$config.width -= 1;\r\n\r\n\t\tvar config = this.$getConfig();\r\n\t\tif (outerWidth !== width) {\r\n\t\t\tif(outerWidth !== undefined){\r\n\t\t\t\tconfig.grid_width = outerWidth;\r\n\t\t\t\tthis.$config.width = outerWidth - 1;\r\n\t\t\t}else{\r\n\t\t\t\tif(!isNaN(innerWidth)){\r\n\t\t\t\t\tthis._setColumnsWidth(innerWidth);\r\n\t\t\t\t\tconfig.grid_width = innerWidth;\r\n\t\t\t\t\tthis.$config.width = innerWidth - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar dataHeight = Math.max(this.$state.height - config.scale_height, 0);\r\n\t\tthis.$grid_data.style.height = dataHeight + \"px\";\r\n\t\tthis.refresh();\r\n\t},\r\n\tgetSize: function () {\r\n\r\n\t\tvar config = this.$getConfig();\r\n\r\n\t\tvar store = this.$config.rowStore;\r\n\r\n\t\tvar contentHeight = store ? this.getTotalHeight() : 0,\r\n\t\t\tcontentWidth = this._getGridWidth();\r\n\r\n\t\tvar size = {\r\n\t\t\tx: this.$state.width,\r\n\t\t\ty: this.$state.height,\r\n\t\t\tcontentX: this.isVisible() ? contentWidth : 0,\r\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\r\n\t\t\tscrollHeight: this.isVisible() ? contentHeight : 0,\r\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\r\n\t\t};\r\n\r\n\t\treturn size;\r\n\t},\r\n\r\n\t_bindStore: function () {\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tthis.$config.rowStore = rowStore;\r\n\t\t\tif(rowStore && !rowStore._gridCacheAttached){\r\n\t\t\t\tvar self = this;\r\n\t\t\t\trowStore._gridCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function(){\r\n\t\t\t\t\tself._resetTopPositionHeight();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t_unbindStore: function(){\r\n\t\tif (this.$config.bind){\r\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\r\n\t\t\tif(rowStore && rowStore._gridCacheAttached){\r\n\t\t\t\trowStore.detachEvent(rowStore._gridCacheAttached);\r\n\t\t\t\trowStore._gridCacheAttached = false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\trefresh: function () {\r\n\t\tthis._bindStore();\r\n\r\n\t\tthis._resetTopPositionHeight();\r\n\t\tthis._resetHeight();\r\n\t\tthis._initSmartRenderingPlaceholder();\r\n\r\n\t\tthis._calculateGridWidth();\r\n\t\tthis._renderGridHeader();\r\n\t},\r\n\r\n\tgetViewPort: function(){\r\n\t\tvar scrollLeft = this.$config.scrollLeft || 0;\r\n\t\tvar scrollTop = this.$config.scrollTop || 0;\r\n\t\tvar height = this.$config.height || 0;\r\n\t\tvar width = this.$config.width || 0;\r\n\t\treturn {\r\n\t\t\ty: scrollTop,\r\n\t\t\ty_end: scrollTop + height,\r\n\t\t\tx: scrollLeft,\r\n\t\t\tx_end: scrollLeft + width,\r\n\t\t\theight: height,\r\n\t\t\twidth: width\r\n\t\t};\r\n\t},\r\n\r\n\tscrollTo: function (left, top) {\r\n\t\tif (!this.isVisible())\r\n\t\t\treturn;\r\n\r\n\t\tvar scrolled = false;\r\n\r\n\t\tthis.$config.scrollTop = this.$config.scrollTop || 0;\r\n\t\tthis.$config.scrollLeft = this.$config.scrollLeft || 0;\r\n\r\n\t\tif (left * 1 == left) {\r\n\t\t\tthis.$config.scrollLeft = this.$state.scrollLeft = this.$grid.scrollLeft = left;\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\r\n\t\t// var config = this.$getConfig();\r\n\t\tif (top * 1 == top) {\r\n\t\t\tthis.$config.scrollTop = this.$state.scrollTop = this.$grid_data.scrollTop = top;\r\n\t\t\tscrolled = true;\r\n\t\t}\r\n\r\n\t\tif(scrolled){\r\n\t\t\tthis.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\r\n\t\t}\r\n\t},\r\n\r\n\tgetColumnIndex: function (name, excludeHidden) {\r\n\t\tvar columns = this.$getConfig().columns;\r\n\t\tvar hiddenIndexShift = 0;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\t// GS-1257. If the cell is hidden, the target column index should be correct\r\n\t\t\tif (excludeHidden && columns[i].hide){\r\n\t\t\t\thiddenIndexShift++;\r\n\t\t\t}\r\n\t\t\tif (columns[i].name == name) {\r\n\t\t\t\treturn i - hiddenIndexShift;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n\r\n\tgetColumn: function (name) {\r\n\t\tvar index = this.getColumnIndex(name);\r\n\t\tif (index === null) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.$getConfig().columns[index];\r\n\t},\r\n\r\n\tgetGridColumns: function () {\r\n\t\tvar config = this.$getConfig();\r\n\t\treturn config.columns.slice();\r\n\t},\r\n\tisVisible: function () {\r\n\t\tif (this.$parent && this.$parent.$config) {\r\n\t\t\treturn !this.$parent.$config.hidden;\r\n\t\t} else {\r\n\t\t\treturn this.$grid.offsetWidth;\r\n\t\t}\r\n\t},\r\n\r\n\t// getItemHeight: function () {\r\n\t// \tvar config = this.$getConfig();\r\n\t// \treturn config.row_height;\r\n\t// },\r\n\r\n\t_createLayerConfig: function () {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar self = this;\r\n\t\tvar layers = [\r\n\t\t\t{\r\n\t\t\t\trenderer: gantt.$ui.layers.gridLine(),\r\n\t\t\t\tcontainer: this.$grid_data,\r\n\t\t\t\tfilter: [function () {\r\n\t\t\t\t\treturn self.isVisible();\r\n\t\t\t\t}]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\trenderer: gantt.$ui.layers.gridTaskRowResizer(),\r\n\t\t\t\tcontainer: this.$grid_data,\r\n\t\t\t\tappend: true,\r\n\t\t\t\tfilter: [function () {\r\n\t\t\t\t\treturn gantt.config.resize_rows;\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t];\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t_addLayers: function (gantt) {\r\n\t\tif (!this.$config.bind)\r\n\t\t\treturn;\r\n\r\n\t\tthis._taskLayers = [];\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\r\n\t\tif (!taskRenderer) {\r\n\t\t\ttaskRenderer = layers.createDataRender({\r\n\t\t\t\tname: this.$config.bind,\r\n\t\t\t\tdefaultContainer: function () { return self.$grid_data; }\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar taskLayers = this.$config.layers;\r\n\t\tfor (var i = 0; taskLayers && i < taskLayers.length; i++) {\r\n\t\t\tvar layer = taskLayers[i];\r\n\t\t\tlayer.view = this;\r\n\r\n\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\r\n\t\t\tthis._taskLayers.push(bar_layer);\r\n\t\t}\r\n\r\n\t\tthis._bindStore();\r\n\r\n\t\tthis._initSmartRenderingPlaceholder();\r\n\t},\r\n\r\n\t_refreshPlaceholderOnStoreUpdate: function (id) {\r\n\t\tvar config = this.$getConfig(),\r\n\t\t\tstore = this.$config.rowStore;\r\n\r\n\t\tif (!store || id !== null || !this.isVisible() || !config.smart_rendering) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar contentHeight;\r\n\t\tif (this.$config.scrollY) {\r\n\t\t\tvar scroll = this.$gantt.$ui.getView(this.$config.scrollY);\r\n\t\t\tif (scroll)\r\n\t\t\t\tcontentHeight = scroll.getScrollState().scrollSize;\r\n\t\t}\r\n\r\n\t\tif (!contentHeight) {\r\n\t\t\tcontentHeight = store ? this.getTotalHeight() : 0;\r\n\t\t}\r\n\r\n\t\tif (contentHeight) {\r\n\t\t\tif (this.$rowsPlaceholder && this.$rowsPlaceholder.parentNode) {\r\n\t\t\t\tthis.$rowsPlaceholder.parentNode.removeChild(this.$rowsPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tvar placeholder = this.$rowsPlaceholder = document.createElement(\"div\");\r\n\t\t\tplaceholder.style.visibility = \"hidden\";\r\n\t\t\tplaceholder.style.height = contentHeight + \"px\";\r\n\t\t\tplaceholder.style.width = \"1px\";\r\n\t\t\tthis.$grid_data.appendChild(placeholder);\r\n\t\t}\r\n\t},\r\n\r\n\t_initSmartRenderingPlaceholder: function () {\r\n\t\tvar store = this.$config.rowStore;\r\n\t\tif (!store) {\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tthis._initSmartRenderingPlaceholder = function () { };\r\n\t\t}\r\n\t\tthis._staticBgHandler = store.attachEvent(\"onStoreUpdated\", utils.bind(this._refreshPlaceholderOnStoreUpdate, this));\r\n\t},\r\n\r\n\t_initEvents: function () {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_close\", gantt.bind(function (e, id, trg) {\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tif (!store) return true;\r\n\r\n\t\t\tvar target = domHelpers.locateAttribute(e, this.$config.item_attribute);\r\n\t\t\tif (target) {\r\n\t\t\t\tstore.close(target.getAttribute(this.$config.item_attribute));\r\n\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}, this), this.$grid);\r\n\r\n\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_open\", gantt.bind(function (e, id, trg) {\r\n\t\t\tvar store = this.$config.rowStore;\r\n\t\t\tif (!store) return true;\r\n\r\n\t\t\tvar target = domHelpers.locateAttribute(e, this.$config.item_attribute);\r\n\t\t\tif (target) {\r\n\t\t\t\tstore.open(target.getAttribute(this.$config.item_attribute));\r\n\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}, this), this.$grid);\r\n\t},\r\n\r\n\t_clearLayers: function (gantt) {\r\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\r\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\r\n\r\n\t\tif (this._taskLayers) {\r\n\t\t\tfor (var i = 0; i < this._taskLayers.length; i++) {\r\n\t\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._taskLayers = [];\r\n\t},\r\n\r\n\t_getColumnWidth: function (column, config, width) {\r\n\t\tvar min_width = column.min_width || config.min_grid_column_width;\r\n\t\tvar new_width = Math.max(width, min_width || 10);\r\n\t\tif (column.max_width)\r\n\t\t\tnew_width = Math.min(new_width, column.max_width);\r\n\t\treturn new_width;\r\n\t},\r\n\t// set min width only if width < than config.min_grid_column_width\r\n\t_checkGridColumnMinWidthLimits: function (columns, config) {\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tvar width = columns[i].width * 1;\r\n\t\t\tif (!columns[i].min_width && width < config.min_grid_column_width){\r\n\t\t\t\tcolumns[i].min_width = width;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t// return min and max possible grid width according to restricts\r\n\t_getGridWidthLimits: function () {\r\n\t\tvar config = this.$getConfig(),\r\n\t\t\tcolumns = this.getGridColumns(),\r\n\t\t\tmin_limit = 0,\r\n\t\t\tmax_limit = 0;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tmin_limit += columns[i].min_width ? columns[i].min_width : config.min_grid_column_width;\r\n\t\t\tif (max_limit !== undefined) {\r\n\t\t\t\tmax_limit = columns[i].max_width ? (max_limit + columns[i].max_width) : undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._checkGridColumnMinWidthLimits(columns, config); // FIX ME: should it be before calculating limits?\r\n\t\treturn [min_limit, max_limit];\r\n\t},\r\n\t// resize columns to get total newWidth, starting from columns[start_index]\r\n\t_setColumnsWidth: function (newWidth, start_index) {\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar columns = this.getGridColumns(),\r\n\t\t\tcolumns_width = 0,\r\n\t\t\tfinal_width = newWidth;\r\n\r\n\t\tstart_index = !window.isNaN(start_index) ? start_index : -1;\r\n\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tcolumns_width += columns[i].width * 1;\r\n\t\t}\r\n\r\n\t\tif (window.isNaN(columns_width)) {\r\n\t\t\tthis._calculateGridWidth();\r\n\t\t\tcolumns_width = 0;\r\n\t\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\t\tcolumns_width += columns[i].width * 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar extra_width = final_width - columns_width;\r\n\r\n\t\tvar start_width = 0;\r\n\t\tfor (var i = 0; i < start_index + 1; i++) {\r\n\t\t\tstart_width += columns[i].width;\r\n\t\t}\r\n\r\n\t\tcolumns_width -= start_width;\r\n\r\n\t\tfor (var i = start_index + 1; i < columns.length; i++) {\r\n\r\n\t\t\tvar col = columns[i];\r\n\t\t\tvar share = Math.round(extra_width * (col.width / columns_width));\r\n\r\n\t\t\t// columns have 2 additional restrict fields - min_width & max_width that are set by user\r\n\t\t\tif (extra_width < 0) {\r\n\t\t\t\tif (col.min_width && col.width + share < col.min_width)\r\n\t\t\t\t\tshare = col.min_width - col.width;\r\n\t\t\t\telse if (!col.min_width && config.min_grid_column_width && col.width + share < config.min_grid_column_width)\r\n\t\t\t\t\tshare = config.min_grid_column_width - col.width;\r\n\t\t\t} else if (col.max_width && col.width + share > col.max_width)\r\n\t\t\t\tshare = col.max_width - col.width;\r\n\r\n\t\t\tcolumns_width -= col.width;\r\n\t\t\tcol.width += share;\r\n\t\t\textra_width -= share;\r\n\r\n\t\t}\r\n\r\n\t\tvar iterator = extra_width > 0 ? 1 : -1;\r\n\t\twhile ((extra_width > 0 && iterator === 1) || (extra_width < 0 && iterator === -1)) {\r\n\t\t\tvar curExtra = extra_width;\r\n\t\t\tfor (i = start_index + 1; i < columns.length; i++) {\r\n\t\t\t\tvar new_width = columns[i].width + iterator;\r\n\r\n\t\t\t\tif (new_width == this._getColumnWidth(columns[i], config, new_width)) {\r\n\t\t\t\t\textra_width -= iterator;\r\n\t\t\t\t\tcolumns[i].width = new_width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!extra_width)\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif (curExtra == extra_width)\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t// if impossible to resize the right-side columns, resize the start column\r\n\t\tif (extra_width && start_index > -1) {\r\n\t\t\tvar new_width = columns[start_index].width + extra_width;\r\n\t\t\tif (new_width == this._getColumnWidth(columns[start_index], config, new_width))\r\n\t\t\t\tcolumns[start_index].width = new_width;\r\n\t\t}\r\n\r\n\t\t//if (this.callEvent(\"onGridResizeEnd\", [config.grid_width, final_width]) === false)\r\n\t\t//\treturn;\r\n\r\n\t\treturn this._getColsTotalWidth();\r\n\t},\r\n\r\n\t_getColsTotalWidth: function () {\r\n\t\tvar columns = this.getGridColumns();\r\n\t\tvar cols_width = 0;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar v = parseFloat(columns[i].width);\r\n\t\t\tif (window.isNaN(v)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tcols_width += v;\r\n\t\t}\r\n\t\treturn cols_width;\r\n\t},\r\n\t_calculateGridWidth: function () {\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar columns = this.getGridColumns();\r\n\t\tvar cols_width = 0;\r\n\t\tvar unknown = [];\r\n\t\tvar width = [];\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar v = parseFloat(columns[i].width);\r\n\t\t\tif (window.isNaN(v)) {\r\n\t\t\t\tv = config.min_grid_column_width || 10;\r\n\t\t\t\tunknown.push(i);\r\n\t\t\t}\r\n\t\t\twidth[i] = v;\r\n\t\t\tcols_width += v;\r\n\t\t}\r\n\t\tvar gridWidth = this._getGridWidth() + 1;\r\n\t\tif (config.autofit || unknown.length) {\r\n\t\t\tvar diff = gridWidth - cols_width;\r\n\t\t\t// TODO: logic may be improved for proportional changing of width\r\n\r\n\t\t\t// autofit adjusts columns widths to the outer grid width\r\n\t\t\t// it doesn't makes sense if grid has inner scroll with elastic columns\r\n\t\t\tif (config.autofit && !config.grid_elastic_columns) {\r\n\t\t\t\t// delta must be added for all columns\r\n\t\t\t\tfor (var i = 0; i < width.length; i++) {\r\n\t\t\t\t\tvar delta = Math.round(diff / (width.length - i));\r\n\t\t\t\t\twidth[i] += delta;\r\n\t\t\t\t\tvar new_width = this._getColumnWidth(columns[i], config, width[i]);\r\n\r\n\t\t\t\t\tif (new_width != width[i]) {\r\n\t\t\t\t\t\tdelta = new_width - width[i];\r\n\t\t\t\t\t\twidth[i] = new_width;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdiff -= delta;\r\n\t\t\t\t}\r\n\t\t\t} else if (unknown.length) {\r\n\t\t\t\t// there are several columns with undefined width\r\n\t\t\t\tfor (var i = 0; i < unknown.length; i++) {\r\n\t\t\t\t\tvar delta = Math.round(diff / (unknown.length - i)); // no float values, just integer\r\n\t\t\t\t\tvar index = unknown[i];\r\n\t\t\t\t\twidth[index] += delta;\r\n\t\t\t\t\tvar new_width = this._getColumnWidth(columns[index], config, width[index]);\r\n\t\t\t\t\tif (new_width != width[index]) {\r\n\t\t\t\t\t\tdelta = new_width - width[index];\r\n\t\t\t\t\t\twidth[index] = new_width;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdiff -= delta;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = 0; i < width.length; i++) {\r\n\t\t\t\tcolumns[i].width = width[i];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar changed = (gridWidth != cols_width);\r\n\t\t\tthis.$config.width = cols_width - 1;\r\n\t\t\tconfig.grid_width = cols_width;\r\n\t\t\tif (changed) {\r\n\t\t\t\tthis.$parent._setContentSize(this.$config.width, null);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t_renderGridHeader: function () {\r\n\t\tvar gantt = this.$gantt;\r\n\t\tvar config = this.$getConfig();\r\n\t\tvar locale = this.$gantt.locale;\r\n\t\tvar templates = this.$gantt.templates;\r\n\r\n\t\tvar columns = this.getGridColumns();\r\n\t\tif (config.rtl) {\r\n\t\t\tcolumns = columns.reverse();\r\n\t\t}\r\n\t\tvar cells = [];\r\n\t\tvar width = 0,\r\n\t\t\tlabels = locale.labels;\r\n\r\n\t\tvar lineHeigth = config.scale_height - 1;\r\n\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar last = i == columns.length - 1;\r\n\t\t\tvar col = columns[i];\r\n\r\n\t\t\t// ensure columns have non-empty names\r\n\t\t\tif (!col.name) {\r\n\t\t\t\tcol.name = gantt.uid() + \"\";\r\n\t\t\t}\r\n\r\n\t\t\tvar colWidth = col.width * 1;\r\n\r\n\t\t\tvar gridWidth = this._getGridWidth();\r\n\t\t\tif (last && gridWidth > width + colWidth)\r\n\t\t\t\tcol.width = colWidth = gridWidth - width;\r\n\t\t\twidth += colWidth;\r\n\t\t\tvar sort = (gantt._sort && col.name == gantt._sort.name) ? (`
`) : \"\";\r\n\t\t\tvar cssClass = [\"gantt_grid_head_cell\",\r\n\t\t\t\t(\"gantt_grid_head_\" + col.name),\r\n\t\t\t\t(last ? \"gantt_last_cell\" : \"\"),\r\n\t\t\t\ttemplates.grid_header_class(col.name, col)].join(\" \");\r\n\r\n\t\t\tvar style = \"width:\" + (colWidth - (last ? 1 : 0)) + \"px;\";\r\n\t\t\tvar label = (col.label || labels[\"column_\" + col.name] || labels[col.name]);\r\n\t\t\tlabel = label || \"\";\r\n\r\n\t\t\tvar ariaAttrs = gantt._waiAria.gridScaleCellAttrString(col, label);\r\n\r\n\t\t\tvar cell = \"\" + label + sort + \"
\";\r\n\t\t\tcells.push(cell);\r\n\t\t}\r\n\t\tthis.$grid_scale.style.height = (config.scale_height) + \"px\";\r\n\t\tthis.$grid_scale.style.lineHeight = lineHeigth + \"px\";\r\n\t\t//this.$grid_scale.style.width = \"inherit\";\r\n\t\tthis.$grid_scale.innerHTML = cells.join(\"\");\r\n\r\n\t\tif (this._renderHeaderResizers) {\r\n\t\t\tthis._renderHeaderResizers();\r\n\t\t}\r\n\t},\r\n\r\n\t_getGridWidth: function () {\r\n\t\t// TODO: refactor/remove/comment some of _getGridWidth/this.$config.width/this.$state.width, it's not clear what they do\r\n\t\treturn this.$config.width;\r\n\t},\r\n\r\n\tdestructor: function () {\r\n\t\tthis._clearLayers(this.$gantt);\r\n\t\tif (this._mouseDelegates) {\r\n\t\t\tthis._mouseDelegates.destructor();\r\n\t\t\tthis._mouseDelegates = null;\r\n\t\t}\r\n\t\tthis._unbindStore();\r\n\t\tthis.$grid = null;\r\n\t\tthis.$grid_scale = null;\r\n\t\tthis.$grid_data = null;\r\n\t\tthis.$gantt = null;\r\n\t\tif (this.$config.rowStore) {\r\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\r\n\t\t\tthis.$config.rowStore = null;\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\t}\r\n};\r\n\r\nexport default Grid;\r\n","function createResizer(gantt, grid){\r\n\treturn {\r\n\t\tinit: function(){},\r\n\t\tdoOnRender: function(){}\r\n\t};\r\n}\r\n\r\nexport default createResizer;","import * as domHelpers from \"../utils/dom_helpers\";\r\n\r\nfunction createRowResizer(gantt, grid){\r\n\r\n\tvar _task_grid_row_resize = {\r\n\t\trow_before_start: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar store = grid.$config.rowStore;\r\n\r\n\t\t\tvar el = domHelpers.locateAttribute(e, config.task_grid_row_resizer_attribute);\r\n\t\t\tif (!el) return false;\r\n\r\n\t\t\tvar row_id = this.locate(e, config.task_grid_row_resizer_attribute),\r\n\t\t\t\trow = store.getItem(row_id);\r\n\r\n\t\t\tif (grid.callEvent(\"onBeforeRowResize\", [row]) === false)\r\n\t\t\t\treturn false;\r\n\t\t}, gantt),\r\n\r\n\t\trow_after_start: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\r\n\t\t\tvar row_id = this.locate(e, config.task_grid_row_resizer_attribute);\r\n\t\t\tdnd.config.marker.innerHTML = \"\";\r\n\r\n\t\t\tdnd.config.marker.className += \" gantt_row_grid_resize_area\";\r\n\t\t\tdnd.config.marker.style.width = grid.$grid.offsetWidth + \"px\";\r\n\t\t\tdnd.config.drag_id = row_id;\r\n\r\n\t\t}, gantt),\r\n\r\n\t\trow_drag_move: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar store = grid.$config.rowStore;\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar dd = dnd.config;\r\n\t\t\tvar id = dd.drag_id,\r\n\t\t\t\titemHeight = grid.getItemHeight(id),\r\n\t\t\t\titemTop = grid.getItemTop(id) - obj.scrollTop;\r\n\t\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data),\r\n\t\t\t\tpointerPosition = parseInt(dd.marker.style.top, 10),\r\n\t\t\t\tmarkerStartPosition = itemTop + pos.y,\r\n\t\t\t\tmarker_height = 0,\r\n\t\t\t\tminPointerPosition = config.min_task_grid_row_height;\r\n\r\n\t\t\tmarker_height = pointerPosition - markerStartPosition;\r\n\t\t\tif(marker_height < minPointerPosition){\r\n\t\t\t\tmarker_height = minPointerPosition;\r\n\t\t\t}\r\n\r\n\t\t\tdd.marker.style.left = pos.x + \"px\";\r\n\t\t\tdd.marker.style.top = markerStartPosition - 1 + \"px\";\r\n\t\t\tdd.marker.style.height = Math.abs(marker_height) + 1 + \"px\";\r\n\r\n\t\t\tdd.marker_height = marker_height;\r\n\t\t\t\r\n\t\t\tgrid.callEvent(\"onRowResize\", [id, store.getItem(id), marker_height + itemHeight]);\r\n\t\t\treturn true;\r\n\t\t}, gantt),\r\n\r\n\t\trow_drag_end: gantt.bind(function (dnd, obj, e) {\r\n\t\t\tvar store = grid.$config.rowStore;\r\n\t\t\tvar dd = dnd.config;\r\n\t\t\tvar id = dd.drag_id,\r\n\t\t\t\titem = store.getItem(id),\r\n\t\t\t\toldItemHeight = grid.getItemHeight(id);\r\n\r\n\t\t\tvar finalHeight = dd.marker_height;\r\n\r\n\t\t\tif (grid.callEvent(\"onBeforeRowResizeEnd\", [id, item, finalHeight]) === false)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (item.row_height == finalHeight)\r\n\t\t\t\treturn;\r\n\r\n\t\t\titem.row_height = finalHeight;\r\n\t\t\tgantt.updateTask(id);\r\n\r\n\t\t\tgrid.callEvent(\"onAfterRowResize\", [id, item, oldItemHeight, finalHeight]);\r\n\r\n\t\t\tthis.render();\r\n\t\t}, gantt)\r\n\t};\r\n\r\n\t// calls the initialization of the D'n'D events for resize elements\r\n\tvar _init_resize = function () {\r\n\r\n\t\tvar DnD = gantt.$services.getService(\"dnd\");\r\n\r\n\t\tvar config = grid.$getConfig();\r\n\r\n\t\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\r\n\t\tif (gantt.defined(config.dnd_sensitivity))\r\n\t\t\tdnd.config.sensitivity = config.dnd_sensitivity;\r\n\r\n\t\tdnd.attachEvent(\"onBeforeDragStart\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_before_start(dnd, obj, e);\r\n\t\t});\r\n\t\tdnd.attachEvent(\"onAfterDragStart\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_after_start(dnd, obj, e);\r\n\t\t});\r\n\t\tdnd.attachEvent(\"onDragMove\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_drag_move(dnd, obj, e);\r\n\t\t});\r\n\t\tdnd.attachEvent(\"onDragEnd\", function (obj, e) {\r\n\t\t\treturn _task_grid_row_resize.row_drag_end(dnd, obj, e);\r\n\t\t});\r\n\r\n\t};\r\n\r\n\treturn {\r\n\t\tinit: _init_resize\r\n\t};\r\n}\r\n\r\nexport default createRowResizer;","export default {\r\n\tinit: function (controller, grid) {\r\n\t\tvar gantt = grid.$gantt;\r\n\r\n\t\tgantt.attachEvent(\"onTaskClick\", function (id, e) {\r\n\t\t\tif (gantt._is_icon_open_click(e))\r\n\t\t\t\treturn true;\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\r\n\t\t\tif (cell && controller.getEditorConfig(cell.columnName)) {\r\n\t\t\t\tif (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {\r\n\t\t\t\t\t// do nothing if editor is already active in this cell\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onEmptyClick\", function () {\r\n\t\t\tif (controller.isVisible() && controller.isChanged()) {\r\n\t\t\t\tcontroller.save();\r\n\t\t\t} else {\r\n\t\t\t\tcontroller.hide();\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onTaskDblClick\", function (id, e) {\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\t\t\tif (cell && controller.isVisible() && cell.columnName == state.columnName) {\r\n\t\t\t\t//GS-933 probably, we don't need to hide the inline editor because the lightbox cannot be opened if you double-click on an inline editor\r\n\t\t\t\t//remove this code later if people don't complain\r\n\t\t\t\t//controller.hide();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\t},\r\n\r\n\tonShow: function (controller, placeholder, grid) {\r\n\t\tvar gantt = grid.$gantt;\r\n\t\t\r\n\r\n\t\tif(gantt.ext && gantt.ext.keyboardNavigation){\r\n\t\t\tvar keyNav = gantt.ext.keyboardNavigation;\r\n\t\t\tkeyNav.attachEvent(\"onKeyDown\", function(command, e){\r\n\t\t\t\tvar keyboard = gantt.constants.KEY_CODES;\r\n\t\t\t\tvar keyCode = e.keyCode;\r\n\t\t\t\tvar preventKeyNav = false;\r\n\r\n\t\t\t\tswitch (keyCode){\r\n\t\t\t\t\tcase keyboard.SPACE:\r\n\t\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (preventKeyNav){\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else{\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tplaceholder.onkeydown = function (e) {\r\n\t\t\te = e || window.event;\r\n\r\n\t\t\tvar keyboard = gantt.constants.KEY_CODES;\r\n\t\t\tif (e.defaultPrevented || (e.shiftKey && e.keyCode != keyboard.TAB)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar shouldPrevent = true;\r\n\t\t\tswitch (e.keyCode) {\r\n\t\t\t\tcase gantt.keys.edit_save:\r\n\t\t\t\t\tcontroller.save();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase gantt.keys.edit_cancel:\r\n\t\t\t\t\tcontroller.hide();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.UP:\r\n\t\t\t\tcase keyboard.DOWN:\r\n\t\t\t\t\tif (controller.isVisible()) {\r\n\t\t\t\t\t\tcontroller.hide();\r\n\t\t\t\t\t\tshouldPrevent = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.TAB:\r\n\t\t\t\t\tif (e.shiftKey) {\r\n\t\t\t\t\t\tcontroller.editPrevCell(true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontroller.editNextCell(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tshouldPrevent = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (shouldPrevent) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t};\r\n\t},\r\n\tonHide: function () {\r\n\r\n\t},\r\n\r\n\tdestroy: function () {\r\n\r\n\t}\r\n};\r\n\r\n","export default {\r\n\tinit: function(controller, grid){\r\n\t\tvar self = controller;\r\n\t\tvar gantt = grid.$gantt;\r\n\r\n\t\tvar onBlurDelay = null;\r\n\t\tvar keyNav = gantt.ext.keyboardNavigation;\r\n\t\tkeyNav.attachEvent(\"onBeforeFocus\", function (node) {\r\n\t\t\tvar activeCell = controller.locateCell(node);\r\n\t\t\tclearTimeout(onBlurDelay);\r\n\t\t\tif (activeCell) {\r\n\t\t\t\tvar columnName = activeCell.columnName;\r\n\t\t\t\tvar id = activeCell.id;\r\n\r\n\t\t\t\tvar editorState = self.getState();\r\n\t\t\t\tif(self.isVisible()){\r\n\t\t\t\t\tif(editorState.id == id && editorState.columnName === columnName) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tkeyNav.attachEvent(\"onFocus\", function (node) {\r\n\t\t\tvar activeCell = controller.locateCell(node);\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tclearTimeout(onBlurDelay);\r\n\t\t\tif (activeCell && !(activeCell.id == state.id && activeCell.columnName == state.columnName)) {\r\n\t\t\t\tif(self.isVisible()){\r\n\t\t\t\t\tself.save();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tcontroller.attachEvent(\"onHide\", function(){\r\n\t\t\tclearTimeout(onBlurDelay);\r\n\t\t});\r\n\r\n\t\tkeyNav.attachEvent(\"onBlur\", function () {\r\n\t\t\tonBlurDelay = setTimeout(function(){\r\n\t\t\t\tself.save();\r\n\t\t\t});\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onTaskDblClick\", function(id,e){\r\n\t\t\t// block lightbox on double click inside editor\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\t\t\tif(cell && controller.isVisible() && cell.columnName == state.columnName){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onTaskClick\", function (id, e) {\r\n\t\t\tif(gantt._is_icon_open_click(e))\r\n\t\t\t\treturn true;\r\n\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar cell = controller.locateCell(e.target);\r\n\r\n\t\t\tif (cell && controller.getEditorConfig(cell.columnName)) {\r\n\t\t\t\tif(controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName){\r\n\t\t\t\t\t// do nothing if editor is already active in this cell\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onEmptyClick\", function () {\r\n\t\t\tself.save();\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tkeyNav.attachEvent(\"onKeyDown\", function(command, e){\r\n\t\t\tvar activeCell = controller.locateCell(e.target);\r\n\t\t\tvar hasEditor = activeCell ? controller.getEditorConfig(activeCell.columnName) : false;\r\n\r\n\t\t\tvar state = controller.getState();\r\n\t\t\tvar keyboard = gantt.constants.KEY_CODES;\r\n\t\t\tvar keyCode = e.keyCode;\r\n\t\t\tvar preventKeyNav = false;\r\n\r\n\t\t\tswitch (keyCode){\r\n\t\t\t\tcase keyboard.ENTER:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\tcontroller.save();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}else if(hasEditor && !(e.ctrlKey || e.metaKey || e.shiftKey)){\r\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.ESC:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\tcontroller.hide();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.UP:\r\n\t\t\t\tcase keyboard.DOWN:\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.LEFT:\r\n\t\t\t\tcase keyboard.RIGHT:\r\n\t\t\t\t\tif((hasEditor && controller.isVisible()) || state.editorType === \"date\"){\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.SPACE:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(hasEditor && !controller.isVisible()){\r\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.DELETE:\r\n\t\t\t\t\tif(hasEditor && !controller.isVisible()){\r\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t} else if(hasEditor && controller.isVisible()){\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyboard.TAB:\r\n\t\t\t\t\tif(controller.isVisible()){\r\n\r\n\t\t\t\t\t\tif(e.shiftKey){\r\n\t\t\t\t\t\t\tcontroller.editPrevCell(true);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tcontroller.editNextCell(true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar newState = controller.getState();\r\n\t\t\t\t\t\tif(newState.id){\r\n\t\t\t\t\t\t\tkeyNav.focus({type:\"taskCell\", id: newState.id, column:newState.columnName});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif(controller.isVisible())\r\n\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\telse{\r\n\r\n\t\t\t\t\t\t// start editing on character key\r\n\t\t\t\t\t\tif((keyCode >= 48 && keyCode <= 57) || // [0-9]\r\n\t\t\t\t\t\t\t(keyCode > 95 && keyCode < 112) || // numpad\r\n\t\t\t\t\t\t\t(keyCode >= 64 && keyCode <= 91) || // [a-z]\r\n\t\t\t\t\t\t\t(keyCode > 185 && keyCode < 193) || //;=-,etc\r\n\t\t\t\t\t\t\t(keyCode > 218 && keyCode < 223)\r\n\t\t\t\t\t\t){\r\n\t\t\t\t\t\t\tvar modifiers = command.modifiers;\r\n\r\n\t\t\t\t\t\t\tvar anyModifier = modifiers.alt || modifiers.ctrl || modifiers.meta || modifiers.shift;\r\n\t\t\t\t\t\t\tif(modifiers.alt){\r\n\t\t\t\t\t\t\t\t// don't start editing on alt+key\r\n\t\t\t\t\t\t\t}else if (anyModifier && keyNav.getCommandHandler(command, \"taskCell\")){\r\n\t\t\t\t\t\t\t\t// don't start editing if command already have a keyboard shortcut\r\n\t\t\t\t\t\t\t}else if(hasEditor && !controller.isVisible()){\r\n\t\t\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\r\n\t\t\t\t\t\t\t\tpreventKeyNav = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (preventKeyNav){\r\n\t\t\t\treturn false;\r\n\t\t\t} else{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t},\r\n\tonShow: function(controller, placeholder, grid){},\r\n\tonHide: function(controller, placeholder, grid){\r\n\t\tconst gantt = grid.$gantt;\r\n\t\tif (gantt){\r\n\t\t\tgantt.focus();\r\n\t\t}\r\n\r\n\t},\r\n\tdestroy: function(){}\r\n};\r\n\r\n","export default function (gantt) {\r\n\r\n\tvar BaseEditor = function () {\r\n\t};\r\n\r\n\tBaseEditor.prototype = {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t},\r\n\t\thide: function () {\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tthis.get_input(node).value = value;\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn this.get_input(node).value || \"\";\r\n\t\t},\r\n\t\tis_changed: function (value, id, column, node) {\r\n\t\t\tvar currentValue = this.get_value(id, column, node);\r\n\t\t\tif (currentValue && value && currentValue.valueOf && value.valueOf) {\r\n\t\t\t\treturn currentValue.valueOf() != value.valueOf();\r\n\t\t\t} else {\r\n\t\t\t\treturn currentValue != value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tis_valid: function (value, id, column, node) {\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\tsave: function (id, column, node) {\r\n\r\n\t\t},\r\n\t\tget_input: function (node) {\r\n\t\t\treturn node.querySelector(\"input\");\r\n\t\t},\r\n\t\tfocus: function (node) {\r\n\t\t\tvar input = this.get_input(node);\r\n\t\t\tif (!input) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (input.focus) {\r\n\t\t\t\tinput.focus();\r\n\t\t\t}\r\n\r\n\t\t\tif (input.select) {\r\n\t\t\t\tinput.select();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn BaseEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction TextEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TextEditor, BaseEditor);\r\n\r\n\tutils.mixin(TextEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn TextEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction NumberEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(NumberEditor, BaseEditor);\r\n\r\n\tutils.mixin(NumberEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar min = config.min || 0,\r\n\t\t\t\tmax = config.max || 100;\r\n\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\r\n\t\t\t// GS-1914. Do not allow entering alues beyond min and max via keyboard\r\n\t\t\tplaceholder.oninput = function (e) {\r\n\t\t\t\tif (+e.target.value < min) {\r\n\t\t\t\t\te.target.value = min;\r\n\t\t\t\t}\r\n\t\t\t\tif (+e.target.value > max) {\r\n\t\t\t\t\te.target.value = max;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn this.get_input(node).value || \"\";\r\n\t\t},\r\n\t\tis_valid: function (value, id, column, node) {\r\n\t\t\treturn !isNaN(parseInt(value, 10));\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn NumberEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction SelectEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(SelectEditor, BaseEditor);\r\n\r\n\tutils.mixin(SelectEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = ``;\r\n\t\t\tvar optionsHtml = [],\r\n\t\t\t\toptions = config.options || [];\r\n\r\n\t\t\tfor (var i = 0; i < options.length; i++) {\r\n\t\t\t\toptionsHtml.push(\"\" + options[i].label + \" \");\r\n\t\t\t}\r\n\r\n\t\t\thtml += optionsHtml.join(\"\") + \"
\";\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t},\r\n\t\tget_input: function (node) {\r\n\t\t\treturn node.querySelector(\"select\");\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn SelectEditor;\r\n};","import * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\nimport BaseFactory from \"./base\";\r\n\r\nexport default function (gantt) {\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\t\r\n\t\r\n\r\n\tvar html5DateFormat = \"%Y-%m-%d\";\r\n\r\n\tvar dateToStr = null;\r\n\tvar strToDate = null;\r\n\r\n\tfunction init() {\r\n\t\tif (!dateToStr) {\r\n\t\t\tdateToStr = gantt.date.date_to_str(html5DateFormat);\r\n\t\t}\r\n\t\tif (!strToDate) {\r\n\t\t\tstrToDate = gantt.date.str_to_date(html5DateFormat);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction DateEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(DateEditor, BaseEditor);\r\n\r\n\tutils.mixin(DateEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tinit();\r\n\t\t\tvar minValue = null;\r\n\t\t\tvar maxValue = null;\r\n\r\n\t\t\tif(typeof config.min === \"function\"){\r\n\t\t\t\tminValue = config.min(id, column);\r\n\t\t\t}else{\r\n\t\t\t\tminValue = config.min;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.max === \"function\"){\r\n\t\t\t\tmaxValue = config.max(id, column);\r\n\t\t\t}else{\r\n\t\t\t\tmaxValue = config.max;\r\n\t\t\t}\r\n\r\n\t\t\tvar minAttr = minValue ? \" min='\" + dateToStr(minValue)+\"' \" : \"\";\r\n\t\t\tvar maxAttr = maxValue ? \" max='\" + dateToStr(maxValue)+\"' \" : \"\";\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\r\n\t\t\t// GS-1914. Do not allow entering alues beyond min and max via keyboard\r\n\t\t\tplaceholder.oninput = function (e) {\r\n\t\t\t\tif (+gantt.date.str_to_date(\"%Y-%m-%d\")(e.target.value) < +minValue) {\r\n\t\t\t\t\te.target.value = gantt.date.date_to_str(\"%Y-%m-%d\")(minValue);\r\n\t\t\t\t}\r\n\t\t\t\tif (+gantt.date.str_to_date(\"%Y-%m-%d\")(e.target.value) > +maxValue) {\r\n\t\t\t\t\te.target.value = gantt.date.date_to_str(\"%Y-%m-%d\")(maxValue);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tif (value && value.getFullYear) {\r\n\t\t\t\tthis.get_input(node).value = dateToStr(value);\r\n\t\t\t} else {\r\n\t\t\t\tthis.get_input(node).value = value;\r\n\t\t\t}\r\n\t\t},\r\n\t\tis_valid: function (value, id, column, node) {\r\n\t\t\tif (!value || isNaN(value.getTime()))\r\n\t\t\t\treturn false;\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\tvar parsed;\r\n\t\t\ttry {\r\n\t\t\t\tparsed = strToDate(this.get_input(node).value || \"\");\r\n\t\t\t} catch (e) {\r\n\t\t\t\tparsed = null;// return null will cancel changes\r\n\t\t\t}\r\n\r\n\t\t\treturn parsed;\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn DateEditor;\r\n};\r\n","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction PredecessorEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(PredecessorEditor, BaseEditor);\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || gantt.ext.formatters.linkFormatter();\r\n\t}\r\n\r\n\tfunction parseInputString(value, config) {\r\n\t\tvar predecessors = (value || \"\").split(config.delimiter || \",\");\r\n\t\tfor (var i = 0; i < predecessors.length; i++) {\r\n\t\t\tvar val = predecessors[i].trim();\r\n\t\t\tif (val) {\r\n\t\t\t\tpredecessors[i] = val;\r\n\t\t\t} else {\r\n\t\t\t\tpredecessors.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpredecessors.sort();\r\n\t\treturn predecessors;\r\n\t}\r\n\r\n\tfunction formatPredecessors(task, config, gantt) {\r\n\t\tvar links = task.$target;\r\n\t\tvar labels = [];\r\n\t\tfor (var i = 0; i < links.length; i++) {\r\n\t\t\tvar link = gantt.getLink(links[i]);\r\n\t\t\tlabels.push(getFormatter(config).format(link));\r\n\t\t}\r\n\t\treturn labels.join((config.delimiter || \",\") + \" \");\r\n\t}\r\n\r\n\tfunction getSelectedLinks(taskId, predecessorCodes, config) {\r\n\t\tvar links = [];\r\n\t\t// select only unique codes GS-1439\r\n\t\t[...new Set(predecessorCodes)].forEach(function (code) {\r\n\t\t\tvar link = getFormatter(config).parse(code);\r\n\t\t\tif(link){\r\n\t\t\t\tlink.target = taskId;\r\n\t\t\t\t// GS-1290 A way to preserve the link. Otherwise validation will return false\r\n\t\t\t\t// because the existing link ID is not passed there\r\n\t\t\t\tlink.id = \"predecessor_generated\";\r\n\t\t\t\tif (gantt.isLinkAllowed(link)) {\r\n\t\t\t\t\tlink.id = undefined;\r\n\t\t\t\t\tlinks.push(link);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn links;\r\n\t}\r\n\r\n\tfunction formatLinkKey(link){\r\n\t\treturn link.source + \"_\" + link.target + \"_\" + link.type + \"_\" + (link.lag||0);\r\n\t}\r\n\r\n\tfunction getLinksDiff(task, predecessorCodes, config) {\r\n\t\tvar selectedLinks = getSelectedLinks(task.id, predecessorCodes, config);\r\n\t\tvar existingLinksSearch = {};\r\n\t\ttask.$target.forEach(function (linkId) {\r\n\t\t\tvar link = gantt.getLink(linkId);\r\n\t\t\texistingLinksSearch[formatLinkKey(link)] = link.id;\r\n\t\t});\r\n\r\n\t\tvar linksToAdd = [];\r\n\t\tselectedLinks.forEach(function (link) {\r\n\t\t\tvar linkKey = formatLinkKey(link);\r\n\t\t\tif (!existingLinksSearch[linkKey]) {\r\n\t\t\t\tlinksToAdd.push(link);\r\n\t\t\t} else {\r\n\t\t\t\tdelete existingLinksSearch[linkKey];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar linksToDelete = [];\r\n\t\tfor (var i in existingLinksSearch) {\r\n\t\t\tlinksToDelete.push(existingLinksSearch[i]);\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tadd: linksToAdd,\r\n\t\t\tremove: linksToDelete\r\n\t\t};\r\n\t}\r\n\r\n\tutils.mixin(PredecessorEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t},\r\n\t\thide: function () {\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tthis.get_input(node).value = formatPredecessors(value, column.editor, gantt);\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn parseInputString((this.get_input(node).value || \"\"), column.editor);\r\n\t\t},\r\n\t\tsave: function (id, column, node) {\r\n\t\t\tvar task = gantt.getTask(id);\r\n\r\n\t\t\tvar linksDiff = getLinksDiff(task, this.get_value(id, column, node), column.editor);\r\n\r\n\t\t\tif (linksDiff.add.length || linksDiff.remove.length) {\r\n\t\t\t\tgantt.batchUpdate(function () {\r\n\t\t\t\t\tlinksDiff.add.forEach(function (link) {\r\n\t\t\t\t\t\tgantt.addLink(link);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tlinksDiff.remove.forEach(function (linkId) {\r\n\t\t\t\t\t\tgantt.deleteLink(linkId);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (gantt.autoSchedule)\r\n\t\t\t\t\t\tgantt.autoSchedule();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tis_changed: function (value, id, column, node) {\r\n\t\t\tvar inputPredecessors = this.get_value(id, column, node);\r\n\t\t\tvar taskPredecessors = parseInputString(formatPredecessors(value, column.editor, gantt), column.editor);\r\n\r\n\t\t\treturn inputPredecessors.join() !== taskPredecessors.join();\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn PredecessorEditor;\r\n};","import BaseFactory from \"./base\";\r\nimport * as utils from \"../../../../../utils/utils\";\r\nimport __extends from \"../../../../../utils/extends\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tvar BaseEditor = BaseFactory(gantt);\r\n\r\n\tfunction TextEditor() {\r\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TextEditor, BaseEditor);\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || gantt.ext.formatters.durationFormatter();\r\n\t}\r\n\tutils.mixin(TextEditor.prototype, {\r\n\t\tshow: function (id, column, config, placeholder) {\r\n\t\t\tvar html = `
`;\r\n\t\t\tplaceholder.innerHTML = html;\r\n\t\t},\r\n\t\tset_value: function (value, id, column, node) {\r\n\t\t\tthis.get_input(node).value = getFormatter(column.editor).format(value);\r\n\t\t},\r\n\t\tget_value: function (id, column, node) {\r\n\t\t\treturn getFormatter(column.editor).parse(this.get_input(node).value || \"\");\r\n\t\t}\r\n\t}, true);\r\n\r\n\treturn TextEditor;\r\n};","export default function (gantt) {\r\n\treturn function processTaskDateProperties(item, mapTo, mode) {\r\n\t\tif (mode == \"keepDates\") {\r\n\t\t\tkeepDatesOnEdit(item, mapTo);\r\n\t\t} else if (mode == \"keepDuration\") {\r\n\t\t\tkeepDurationOnEdit(item, mapTo);\r\n\t\t} else {\r\n\t\t\tdefaultActionOnEdit(item, mapTo);\r\n\t\t}\r\n\t};\r\n\r\n\t// resize task\r\n\t// resize task when start/end/duration changes\r\n\tfunction keepDatesOnEdit(item, mapTo) {\r\n\t\tif (mapTo == \"duration\") {\r\n\t\t\titem.end_date = gantt.calculateEndDate(item);\r\n\t\t} else if (mapTo == \"end_date\" || mapTo == \"start_date\") {\r\n\t\t\titem.duration = gantt.calculateDuration(item);\r\n\t\t}\r\n\t}\r\n\r\n\t// move task(before 6.2)\r\n\t// move task when start/end dates changes\r\n\t// resize task when duration changes\r\n\tfunction keepDurationOnEdit(item, mapTo) {\r\n\t\tif (mapTo == \"end_date\") {\r\n\t\t\titem.start_date = decreaseStartDate(item);\r\n\t\t} else if (mapTo == \"start_date\" || mapTo == \"duration\") {\r\n\t\t\titem.end_date = gantt.calculateEndDate(item);\r\n\t\t}\r\n\t}\r\n\r\n\t// default behavior\r\n\t// move task when start date changes\r\n\t// resize task when end date/duration changes\r\n\tfunction defaultActionOnEdit(item, mapTo) {\r\n\t\tif (gantt.config.schedule_from_end){\r\n\t\t\tif (mapTo == \"end_date\" || mapTo == \"duration\") {\r\n\t\t\t\titem.start_date = decreaseStartDate(item);\r\n\t\t\t} else if (mapTo == \"start_date\") {\r\n\t\t\t\titem.duration = gantt.calculateDuration(item);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (mapTo == \"start_date\" || mapTo == \"duration\") {\r\n\t\t\t\titem.end_date = gantt.calculateEndDate(item);\r\n\t\t\t} else if (mapTo == \"end_date\") {\r\n\t\t\t\titem.duration = gantt.calculateDuration(item);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction decreaseStartDate(item){\r\n\t\treturn gantt.calculateEndDate({\r\n\t\t\tstart_date: item.end_date,\r\n\t\t\tduration: -item.duration,\r\n\t\t\ttask: item\r\n\t\t});\r\n\t}\r\n};","import getKeyboardMapping from \"./keyboard_mappings\";\r\nimport textEditorFactory from \"./editors/text\";\r\nimport numberEditorFactory from \"./editors/number\";\r\nimport selectEditorFactory from \"./editors/select\";\r\nimport dateEditorFactory from \"./editors/date\";\r\nimport predecessorEditorFactory from \"./editors/predecessor\";\r\nimport durationEditorFactory from \"./editors/duration\";\r\nimport * as utils from \"../../../../utils/utils\";\r\nimport * as domHelpers from \"../../utils/dom_helpers\";\r\nimport eventable from \"../../../../utils/eventable\";\r\nimport linkedPropertiesProcessor from \"./linked_properties\";\r\n\r\nfunction initConfigs(gantt){\r\n\tgantt.config.editor_types = {\r\n\t\ttext: new (textEditorFactory(gantt))(),\r\n\t\tnumber: new (numberEditorFactory(gantt))(),\r\n\t\tselect: new (selectEditorFactory(gantt))(),\r\n\t\tdate: new (dateEditorFactory(gantt))(),\r\n\t\tpredecessor: new (predecessorEditorFactory(gantt))(),\r\n\t\tduration: new (durationEditorFactory(gantt))()\r\n\t};\r\n}\r\n\r\nfunction create(gantt){\r\n\tvar keyboardMapping = getKeyboardMapping(gantt);\r\n\r\n\tvar eventBus = {};\r\n\teventable(eventBus);\r\n\r\n\tfunction createGridEditors(grid) {\r\n\r\n\t\tfunction _getGridCellFromNode(node){\r\n\t\t\tif(!domHelpers.isChildOf(node, grid.$grid)){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar row = domHelpers.locateAttribute(node, grid.$config.item_attribute);\r\n\t\t\tvar cell = domHelpers.locateAttribute(node, \"data-column-name\");\r\n\t\t\tif(row && cell){\r\n\t\t\t\tvar columnName = cell.getAttribute(\"data-column-name\");\r\n\t\t\t\tvar id = row.getAttribute(grid.$config.item_attribute);\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\tcolumnName: columnName\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\r\n\t\t}\r\n\r\n\t\tfunction _getEditorPosition(itemId, columnName) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar top = grid.getItemTop(itemId);\r\n\t\t\tvar height = grid.getItemHeight(itemId);\r\n\t\t\tvar cols = grid.getGridColumns();\r\n\t\t\tvar left = 0,\r\n\t\t\t\tright = 0,\r\n\t\t\t\twidth = 0;\r\n\r\n\t\t\tfor (var i = 0; i < cols.length; i++) {\r\n\t\t\t\tif (cols[i].name == columnName) {\r\n\t\t\t\t\twidth = cols[i].width;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (config.rtl) {\r\n\t\t\t\t\tright += cols[i].width;\r\n\t\t\t\t}\telse {\r\n\t\t\t\t\tleft += cols[i].width;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (config.rtl) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttop: top,\r\n\t\t\t\t\tright: right,\r\n\t\t\t\t\theight: height,\r\n\t\t\t\t\twidth: width\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttop: top,\r\n\t\t\t\t\tleft: left,\r\n\t\t\t\t\theight: height,\r\n\t\t\t\t\twidth: width\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction findVisibleIndex(grid, columnName) {\r\n\t\t\tvar columns = grid.getGridColumns();\r\n\t\t\tfor (var i = 0; i < columns.length; i++){\r\n\t\t\t\tif(columns[i].name == columnName){\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfunction _createPlaceholder(itemId, columnName) {\r\n\t\t\tvar config = grid.$getConfig();\r\n\t\t\tvar pos = _getEditorPosition(itemId, columnName);\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.className = \"gantt_grid_editor_placeholder\";\r\n\t\t\tel.setAttribute(grid.$config.item_attribute, itemId);\r\n\t\t\tel.setAttribute(grid.$config.bind + \"_id\", itemId);// for backward compatibility\r\n\r\n\t\t\tel.setAttribute(\"data-column-name\", columnName);\r\n\r\n\t\t\tvar visibleIndex = findVisibleIndex(grid, columnName);\r\n\t\t\tel.setAttribute(\"data-column-index\", visibleIndex);\r\n\r\n\t\t\tgantt._waiAria.inlineEditorAttr(el);\r\n\r\n\t\t\tif (config.rtl) {\r\n\t\t\t\tel.style.cssText = [\r\n\t\t\t\t\t\"top:\" + pos.top + \"px\",\r\n\t\t\t\t\t\"right:\" + pos.right + \"px\",\r\n\t\t\t\t\t\"width:\" + pos.width + \"px\",\r\n\t\t\t\t\t\"height:\" + pos.height + \"px\"\r\n\t\t\t\t].join(\";\");\r\n\t\t\t} else {\r\n\t\t\t\tel.style.cssText = [\r\n\t\t\t\t\t\"top:\" + pos.top + \"px\",\r\n\t\t\t\t\t\"left:\" + pos.left + \"px\",\r\n\t\t\t\t\t\"width:\" + pos.width + \"px\",\r\n\t\t\t\t\t\"height:\" + pos.height + \"px\"\r\n\t\t\t\t].join(\";\");\r\n\t\t\t}\r\n\r\n\t\t\treturn el;\r\n\t\t}\r\n\r\n\t\tvar updateTaskDateProperties = linkedPropertiesProcessor(gantt);\r\n\r\n\t\tvar handlers = [];\r\n\t\tvar ganttHandlers = [];\r\n\t\tvar store = null;\r\n\t\tvar controller = {\r\n\t\t\t_itemId: null,\r\n\t\t\t_columnName: null,\r\n\t\t\t_editor: null,\r\n\t\t\t_editorType: null,\r\n\t\t\t_placeholder: null,\r\n\r\n\t\t\tlocateCell: _getGridCellFromNode,\r\n\t\t\tgetEditorConfig: function (columnName) {\r\n\t\t\t\tvar column = grid.getColumn(columnName);\r\n\t\t\t\treturn column.editor;\r\n\t\t\t},\r\n\r\n\t\t\tinit: function () {\r\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\r\n\t\t\t\tif(mapping.init){\r\n\t\t\t\t\tmapping.init(this, grid);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstore = grid.$gantt.getDatastore(grid.$config.bind);\r\n\r\n\t\t\t\tvar self = this;\r\n\r\n\t\t\t\thandlers.push(store.attachEvent(\"onIdChange\", function(oldId, newId){\r\n\t\t\t\t\tif(self._itemId == oldId){\r\n\t\t\t\t\t\tself._itemId = newId;\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t\thandlers.push(store.attachEvent(\"onStoreUpdated\", function(){\r\n\t\t\t\t\tif(grid.$gantt.getState(\"batchUpdate\").batch_update){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(self.isVisible() && !store.isVisible(self._itemId)){\r\n\t\t\t\t\t\tself.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\r\n\t\t\t\tganttHandlers.push(gantt.attachEvent(\"onDataRender\", function(){\r\n\t\t\t\t\tif(self._editor && self._placeholder && !domHelpers.isChildOf(self._placeholder, gantt.$root)){\r\n\t\t\t\t\t\tgrid.$grid_data.appendChild(self._placeholder);\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\r\n\t\t\t\tthis.init = function(){};\r\n\t\t\t},\r\n\r\n\t\t\tgetState: function(){\r\n\t\t\t\treturn {\r\n\t\t\t\t\teditor: this._editor,\r\n\t\t\t\t\teditorType: this._editorType,\r\n\t\t\t\t\tplaceholder: this._placeholder,\r\n\t\t\t\t\tid: this._itemId,\r\n\t\t\t\t\tcolumnName: this._columnName\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tstartEdit: function(itemId, columnName) {\r\n\t\t\t\tif (this.isVisible()) {\r\n\t\t\t\t\tthis.save();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!store.exists(itemId)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar editorState = {id: itemId, columnName: columnName};\r\n\t\t\t\tif (gantt.isReadonly(store.getItem(itemId))) {\r\n\t\t\t\t\tthis.callEvent(\"onEditPrevent\", [editorState]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.callEvent(\"onBeforeEditStart\", [editorState]) === false) {\r\n\t\t\t\t\tthis.callEvent(\"onEditPrevent\", [editorState]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.show(editorState.id, editorState.columnName);\r\n\t\t\t\tthis.setValue();\r\n\r\n\t\t\t\tthis.callEvent(\"onEditStart\", [editorState]);\r\n\t\t\t},\r\n\t\t\tisVisible: function(){\r\n\t\t\t\treturn !!(this._editor && domHelpers.isChildOf(this._placeholder, gantt.$root));\r\n\t\t\t},\r\n\t\t\tshow: function (itemId, columnName) {\r\n\t\t\t\tif (this.isVisible()) {\r\n\t\t\t\t\tthis.save();\r\n\t\t\t\t}\r\n\t\t\t\tvar editorState = {id: itemId, columnName: columnName};\r\n\r\n\t\t\t\tvar column = grid.getColumn(editorState.columnName);\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(column.name);\r\n\t\t\t\tif(!editorConfig)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar editor = grid.$getConfig().editor_types[editorConfig.type];\r\n\r\n\t\t\t\tvar placeholder = _createPlaceholder(editorState.id, editorState.columnName);\r\n\t\t\t\tgrid.$grid_data.appendChild(placeholder);\r\n\t\t\t\teditor.show(editorState.id, column, editorConfig, placeholder);\r\n\t\t\t\tthis._editor = editor;\r\n\t\t\t\tthis._placeholder = placeholder;\r\n\t\t\t\tthis._itemId = editorState.id;\r\n\t\t\t\tthis._columnName = editorState.columnName;\r\n\t\t\t\tthis._editorType = editorConfig.type;\r\n\r\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\r\n\t\t\t\tif(mapping.onShow){\r\n\t\t\t\t\tmapping.onShow(this, placeholder, grid);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tsetValue: function () {\r\n\t\t\t\tvar state = this.getState();\r\n\t\t\t\tvar itemId = state.id,\r\n\t\t\t\t\tcolumnName = state.columnName;\r\n\r\n\t\t\t\tvar column = grid.getColumn(columnName);\r\n\t\t\t\tvar item = store.getItem(itemId);\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(columnName);\r\n\r\n\t\t\t\tif(!editorConfig)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar value = item[editorConfig.map_to];\r\n\t\t\t\tif(editorConfig.map_to == \"auto\"){\r\n\t\t\t\t\tvalue = store.getItem(itemId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._editor.set_value(value, itemId, column, this._placeholder);\r\n\t\t\t\tthis.focus();\r\n\t\t\t},\r\n\r\n\t\t\tfocus: function(){\r\n\t\t\t\tthis._editor.focus(this._placeholder);\r\n\t\t\t},\r\n\r\n\t\t\tgetValue: function () {\r\n\t\t\t\tvar column = grid.getColumn(this._columnName);\r\n\t\t\t\treturn this._editor.get_value(this._itemId, column, this._placeholder);\r\n\t\t\t},\r\n\r\n\t\t\t_getItemValue: function() {\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(this._columnName);\r\n\r\n\t\t\t\tif(!editorConfig)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar item = gantt.getTask(this._itemId);\r\n\t\t\t\tvar value = item[editorConfig.map_to];\r\n\t\t\t\tif(editorConfig.map_to == \"auto\"){\r\n\t\t\t\t\tvalue = store.getItem(this._itemId);\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t},\r\n\r\n\t\t\tisChanged: function(){\r\n\r\n\t\t\t\tvar column = grid.getColumn(this._columnName);\r\n\r\n\t\t\t\tvar value = this._getItemValue();\r\n\r\n\t\t\t\treturn this._editor.is_changed(value, this._itemId, column, this._placeholder);\r\n\t\t\t},\r\n\r\n\t\t\thide: function () {\r\n\t\t\t\tif(!this._itemId)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tvar itemId = this._itemId,\r\n\t\t\t\t\tcolumnName = this._columnName;\r\n\r\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\r\n\t\t\t\tif(mapping.onHide){\r\n\t\t\t\t\tmapping.onHide(this, this._placeholder, grid);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._itemId = null;\r\n\t\t\t\tthis._columnName = null;\r\n\t\t\t\tthis._editorType = null;\r\n\t\t\t\tif (!this._placeholder) return;\r\n\r\n\t\t\t\tif (this._editor && this._editor.hide) {\r\n\t\t\t\t\tthis._editor.hide(this._placeholder);\r\n\t\t\t\t}\r\n\t\t\t\tthis._editor = null;\r\n\t\t\t\tif (this._placeholder.parentNode) {\r\n\t\t\t\t\tthis._placeholder.parentNode.removeChild(this._placeholder);\r\n\t\t\t\t}\r\n\t\t\t\tthis._placeholder = null;\r\n\r\n\t\t\t\tthis.callEvent(\"onEditEnd\", [{id: itemId, columnName: columnName}]);\r\n\t\t\t},\r\n\t\t\tsave: function () {\r\n\t\t\t\tif(!(this.isVisible() && store.exists(this._itemId) && this.isChanged())) {\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar itemId = this._itemId,\r\n\t\t\t\t\tcolumnName = this._columnName;\r\n\r\n\t\t\t\tif(!store.exists(itemId)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar item = store.getItem(itemId);\r\n\t\t\t\tvar editorConfig = this.getEditorConfig(columnName);\r\n\t\t\t\tvar editorState = {\r\n\t\t\t\t\tid: itemId,\r\n\t\t\t\t\tcolumnName: columnName,\r\n\t\t\t\t\tnewValue: this.getValue(),\r\n\t\t\t\t\toldValue: this._getItemValue()\r\n\t\t\t\t};\r\n\t\t\t\tif (this.callEvent(\"onBeforeSave\", [editorState]) !== false) {\r\n\t\t\t\t\tif (!this._editor.is_valid || this._editor.is_valid(editorState.newValue, editorState.id, grid.getColumn(columnName), this._placeholder)) {\r\n\r\n\t\t\t\t\t\tvar mapTo = editorConfig.map_to;\r\n\t\t\t\t\t\tvar value = editorState.newValue;\r\n\t\t\t\t\t\tif (mapTo != \"auto\") {\r\n\t\t\t\t\t\t\titem[mapTo] = value;\r\n\t\t\t\t\t\t\tupdateTaskDateProperties(item, mapTo, gantt.config.inline_editors_date_processing);\r\n\r\n\t\t\t\t\t\t\tstore.updateItem(itemId);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis._editor.save(itemId, grid.getColumn(columnName), this._placeholder);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.callEvent(\"onSave\", [editorState]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.hide();\r\n\t\t\t},\r\n\r\n\t\t\t_findEditableCell: function findEditableCell(start, direction){\r\n\t\t\t\tvar nextIndex = start;\r\n\t\t\t\tvar columns = grid.getGridColumns();\r\n\t\t\t\tvar nextColumn = columns[nextIndex];\r\n\r\n\t\t\t\tvar columnName = nextColumn ? nextColumn.name : null;\r\n\t\t\t\tif(columnName){\r\n\t\t\t\t\twhile(columnName && !this.getEditorConfig(columnName)){\r\n\t\t\t\t\t\tcolumnName = this._findEditableCell(start + direction, direction);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn columnName;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\r\n\t\t\tgetNextCell: function moveCell(dir){\r\n\t\t\t\t// GS-1257. true means to exclude hidden columns\r\n\t\t\t\treturn this._findEditableCell(grid.getColumnIndex(this._columnName, true) + dir, dir);\r\n\t\t\t},\r\n\r\n\t\t\tgetFirstCell: function getFirstCell(){\r\n\t\t\t\treturn this._findEditableCell(0, 1);\r\n\t\t\t},\r\n\r\n\t\t\tgetLastCell: function getLastCell(){\r\n\t\t\t\treturn this._findEditableCell(grid.getGridColumns().length - 1, -1);\r\n\t\t\t},\r\n\r\n\t\t\teditNextCell: function nextCell(canChangeRow){\r\n\t\t\t\tvar cell = this.getNextCell(1);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tvar nextColumn = this.getNextCell(1);\r\n\t\t\t\t\tif(nextColumn && this.getEditorConfig(nextColumn)){\r\n\t\t\t\t\t\tthis.startEdit(this._itemId, nextColumn);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(canChangeRow && this.moveRow(1)){\r\n\t\t\t\t\tvar task = this.moveRow(1);\r\n\t\t\t\t\tcell = this.getFirstCell();\r\n\t\t\t\t\tif(cell && this.getEditorConfig(cell)){\r\n\t\t\t\t\t\tthis.startEdit(task, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\teditPrevCell: function prevCell(canChangeRow){\r\n\t\t\t\tvar cell = this.getNextCell(-1);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tvar nextColumn = this.getNextCell(-1);\r\n\t\t\t\t\tif(nextColumn && this.getEditorConfig(nextColumn)){\r\n\t\t\t\t\t\tthis.startEdit(this._itemId, nextColumn);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(canChangeRow && this.moveRow(-1)){\r\n\t\t\t\t\tvar task = this.moveRow(-1);\r\n\t\t\t\t\tcell = this.getLastCell();\r\n\t\t\t\t\tif(cell && this.getEditorConfig(cell)){\r\n\t\t\t\t\t\tthis.startEdit(task, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tmoveRow: function moveRow(dir) {\r\n\t\t\t\tvar moveTask = dir > 0 ? gantt.getNext : gantt.getPrev;\r\n\t\t\t\tmoveTask = gantt.bind(moveTask, gantt);\r\n\r\n\t\t\t\tvar nextItem = moveTask(this._itemId);\r\n\t\t\t\t// skip readonly rows\r\n\t\t\t\twhile (gantt.isTaskExists(nextItem) && gantt.isReadonly(gantt.getTask(nextItem))) {\r\n\t\t\t\t\tnextItem = moveTask(nextItem);\r\n\t\t\t\t}\r\n\t\t\t\treturn nextItem;\r\n\t\t\t},\r\n\r\n\t\t\teditNextRow: function nextRow(skipReadonly){\r\n\t\t\t\tvar id = this.getState().id;\r\n\t\t\t\tif (!gantt.isTaskExists(id)) return;\r\n\r\n\t\t\t\tvar next = null;\r\n\t\t\t\tif (skipReadonly){\r\n\t\t\t\t\tnext = this.moveRow(1);\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\tnext = gantt.getNext(id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gantt.isTaskExists(next)){\r\n\t\t\t\t\tthis.startEdit(next, this._columnName);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\teditPrevRow: function prevRow(skipReadonly){\r\n\t\t\t\tvar id = this.getState().id;\r\n\t\t\t\tif (!gantt.isTaskExists(id)) return;\r\n\r\n\t\t\t\tvar prev = null;\r\n\t\t\t\tif (skipReadonly){\r\n\t\t\t\t\tprev = this.moveRow(-1);\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\tprev = gantt.getPrev(id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gantt.isTaskExists(prev)){\r\n\t\t\t\t\tthis.startEdit(prev, this._columnName);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdestructor: function(){\r\n\t\t\t\thandlers.forEach(function(handlerId){\r\n\t\t\t\t\tstore.detachEvent(handlerId);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tganttHandlers.forEach(function(handlerId){\r\n\t\t\t\t\tgantt.detachEvent(handlerId);\r\n\t\t\t\t});\r\n\t\t\t\thandlers = [];\r\n\t\t\t\tganttHandlers = [];\r\n\r\n\t\t\t\tstore = null;\r\n\t\t\t\tthis.hide();\r\n\t\t\t\tthis.detachAllEvents();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tutils.mixin(controller, keyboardMapping);\r\n\t\tutils.mixin(controller, eventBus);\r\n\r\n\t\treturn controller;\r\n\t}\r\n\r\n\r\n\tvar inlineEditController = {\r\n\t\tinit: initConfigs,\r\n\t\tcreateEditors: createGridEditors\r\n\t};\r\n\r\n\tutils.mixin(inlineEditController, keyboardMapping);\r\n\tutils.mixin(inlineEditController, eventBus);\r\n\r\n\treturn inlineEditController;\r\n}\r\n\r\n\r\n\r\n\r\nexport default create;","import defaultMapping from \"./keyboard_mappings/default\";\r\nimport keyNavMappings from \"./keyboard_mappings/keyboard_navigation\";\r\n\r\nexport default function(gantt){\r\n\r\n\tvar mapping = null;\r\n\r\n\treturn {\r\n\t\tsetMapping: function(map){\r\n\t\t\tmapping = map;\r\n\t\t},\r\n\t\tgetMapping: function(){\r\n\r\n\t\t\tif(mapping){\r\n\t\t\t\treturn mapping;\r\n\t\t\t}else if(gantt.config.keyboard_navigation_cells && gantt.ext.keyboardNavigation){\r\n\t\t\t\treturn keyNavMappings;\r\n\t\t\t}else{\r\n\t\t\t\treturn defaultMapping;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n};\r\n","// optimized checker for task bars smart rendering\r\n\r\n// first check the vertical position since it's easier to calculate\r\nexport default function isBarInViewport(item, viewport, view, config, gantt){\r\n\tif(!item.start_date || !item.end_date){\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar top = view.getItemTop(item.id);\r\n\tvar height = view.getItemHeight(item.id);\r\n\r\n\tif(top > viewport.y_end || top + height < viewport.y){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar padding = 200;\r\n\tvar startCoord = view.posFromDate(item.start_date);\r\n\tvar endCoord = view.posFromDate(item.end_date);\r\n\tvar left = Math.min(startCoord, endCoord) - padding;\r\n\tvar right = Math.max(startCoord, endCoord) + padding;\r\n\r\n\tif(left > viewport.x_end || right < viewport.x){\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn true;\r\n};","function createTaskRenderer(gantt) {\r\n\r\n\tfunction _render_task_element(task, view, config) {\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar painters = config.type_renderers;\r\n\t\tvar renderer = painters[gantt.getTaskType(task.type)],\r\n\t\t\tdefaultRenderer = _task_default_render;\r\n\r\n\t\tif (!renderer) {\r\n\t\t\treturn defaultRenderer.call(gantt, task, view, config);\r\n\t\t}else{\r\n\t\t\treturn renderer.call(gantt, task, function(task){ return defaultRenderer.call(gantt, task, view, config);}, view);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _task_default_render(task, view, config) {\r\n\t\tif (gantt._isAllowedUnscheduledTask(task))\r\n\t\t\treturn;\r\n\r\n\t\tif (!gantt._isTaskInTimelineLimits(task)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar pos = view.getItemPosition(task);\r\n\r\n\t\tvar cfg = config,\r\n\t\t\ttemplates = view.$getTemplates();\r\n\r\n\t\tvar taskType = gantt.getTaskType(task.type);\r\n\t\tvar height = view.getBarHeight(task.id, taskType == cfg.types.milestone);\r\n\r\n\t\tvar controlsMargin = 0;\r\n\t\tif (taskType == cfg.types.milestone) {\r\n\t\t\tcontrolsMargin = (height - pos.height)/2;\r\n\t\t}\r\n\r\n\t\tvar padd = Math.floor((view.getItemHeight(task.id) - height) / 2);\r\n\t\tconst hasBaselines = gantt.config.baselines !== false && task.baselines && task.baselines.length;\r\n\t\tconst baselinesOnDifferentRow = gantt.config.baselines !== false && (gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\");\r\n\t\tif (hasBaselines && baselinesOnDifferentRow){\r\n\t\t\tif (task.bar_height !== \"full\" && task.bar_height < task.row_height){\r\n\t\t\t\tif (taskType === cfg.types.milestone){\r\n\t\t\t\t\tlet milestoneHeight = view.getBarHeight(task.id, true);\r\n\t\t\t\t\tlet milestoneWidth = Math.sqrt(2 * milestoneHeight * milestoneHeight);\r\n\t\t\t\t\tpadd = Math.floor((milestoneWidth - height) / 2) + 2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpadd = 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t//\tif(task.type == cfg.types.milestone){\r\n\t//\t\tpadd -= 1;\r\n\t//\t}\r\n\t//\tif (taskType == cfg.types.milestone && cfg.link_line_width > 1) {\r\n\t//\t\t//little adjust milestone position, so horisontal corners would match link arrow when thickness of link line is more than 1px\r\n\t//\t\tpadd += 1;\r\n\t//\t}\r\n\r\n\t\tif (taskType == cfg.types.milestone) {\r\n\t\t\tpos.left -= Math.round(height / 2);\r\n\t\t\tpos.width = height;\r\n\t\t}\r\n\r\n\t\tvar div = document.createElement(\"div\");\r\n\r\n\t\tvar width = Math.round(pos.width);\r\n\r\n\t\tif(view.$config.item_attribute) {\r\n\t\t\tdiv.setAttribute(view.$config.item_attribute, task.id);\r\n\t\t\tdiv.setAttribute(view.$config.bind + \"_id\", task.id); // 'task_id'/'resource_id' for backward compatibility\r\n\t\t}\r\n\r\n\t\tif (cfg.show_progress && taskType != cfg.types.milestone) {\r\n\t\t\t_render_task_progress(task, div, width, cfg, templates);\r\n\t\t}\r\n\r\n\t\t//use separate div to display content above progress bar\r\n\t\tvar content = _render_task_content(task, width, templates);\r\n\r\n\t\tdiv.appendChild(content);\r\n\r\n\t\tvar css = _combine_item_class(\"gantt_task_line\",\r\n\t\t\ttemplates.task_class(task.start_date, task.end_date, task),\r\n\t\t\ttask.id,\r\n\t\t\tview);\r\n\t\tif (task.color || task.progressColor || task.textColor) {\r\n\t\t\tcss += \" gantt_task_inline_color\";\r\n\t\t}\r\n\t\tif (pos.width < 20){\r\n\t\t\tcss += \" gantt_thin_task\";\r\n\t\t}\r\n\t\tdiv.className = css;\r\n\r\n\t\tvar styles = [\r\n\t\t\t\"left:\" + pos.left + \"px\",\r\n\t\t\t\"top:\" + (padd + pos.top) + 'px',\r\n\t\t\t\"height:\" + (height) + 'px',\r\n\t\t\t\"line-height:\" + (Math.max(height < 30 ? height - 2 : height, 0)) + 'px',\r\n\t\t\t\"width:\" + width + 'px'\r\n\t\t];\r\n\r\n\t\tdiv.style.cssText = styles.join(\";\");\r\n\t\tif (task.color) {\r\n\t\t\tdiv.style.setProperty(\"--dhx-gantt-task-background\", task.color);\r\n\t\t}\r\n\t\tif (task.textColor) {\r\n\t\t\tdiv.style.setProperty(\"--dhx-gantt-task-color\", task.textColor);\r\n\t\t}\r\n\r\n\t\tif (task.progressColor) {\r\n\t\t\tdiv.style.setProperty(\"--dhx-gantt-task-progress-color\", task.progressColor);\r\n\t\t}\r\n\r\n\t\t\r\n\t\tvar side = _render_leftside_content(task, cfg, templates, controlsMargin);\r\n\t\tif (side) div.appendChild(side);\r\n\r\n\t\tside = _render_rightside_content(task, cfg, templates, controlsMargin);\r\n\t\tif (side) div.appendChild(side);\r\n\r\n\t\tgantt._waiAria.setTaskBarAttr(task, div);\r\n\r\n\t\tvar state = gantt.getState();\r\n\r\n\t\tif (!gantt.isReadonly(task)) {\r\n\t\t\tif (cfg.drag_resize && !gantt.isSummaryTask(task) && taskType != cfg.types.milestone) {\r\n\t\t\t\t_render_pair(div, \"gantt_task_drag\", task, function (css) {\r\n\t\t\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\t\t\tel.className = css;\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}, cfg);\r\n\t\t\t}\r\n\t\t\tif (cfg.drag_links && cfg.show_links) {\r\n\t\t\t\t_render_pair(div, \"gantt_link_control\", task, function (css) {\r\n\t\t\t\t\tvar outer = document.createElement(\"div\");\r\n\t\t\t\t\touter.className = css;\r\n\t\t\t\t\touter.style.cssText = [\r\n\t\t\t\t\t\t\"height:\" + height + 'px',\r\n\t\t\t\t\t\t\"line-height:\" + height + 'px'\r\n\t\t\t\t\t].join(\";\");\r\n\t\t\t\t\tvar inner = document.createElement(\"div\");\r\n\t\t\t\t\tinner.className = \"gantt_link_point\";\r\n\r\n\t\t\t\t\tvar showLinkPoints = false;\r\n\t\t\t\t\tif(state.link_source_id && cfg.touch){\r\n\t\t\t\t\t\tshowLinkPoints = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tinner.style.display = showLinkPoints ? \"block\" : \"\";\r\n\t\t\t\t\touter.appendChild(inner);\r\n\t\t\t\t\treturn outer;\r\n\t\t\t\t}, cfg, controlsMargin);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn div;\r\n\t}\r\n\r\n\tfunction _render_side_content(task, template, cssClass, marginStyle) {\r\n\t\tif (!template) return null;\r\n\r\n\t\tvar text = template(task.start_date, task.end_date, task);\r\n\t\tif (!text) return null;\r\n\t\tvar content = document.createElement(\"div\");\r\n\t\tcontent.className = \"gantt_side_content \" + cssClass;\r\n\t\tcontent.innerHTML = text;\r\n\t\tif(marginStyle){\r\n\t\t\tcontent.style[marginStyle.type] = Math.abs(marginStyle.value) + \"px\";\r\n\t\t}\r\n\t\treturn content;\r\n\t}\r\n\r\n\tfunction _render_leftside_content(task, cfg, templates, margin) {\r\n\t\tvar css = \"gantt_left \" + _get_link_crossing_css(!cfg.rtl ? true : false, task, cfg);\r\n\t\tvar marginStyle = null;\r\n\t\tif(margin){\r\n\t\t\tmarginStyle = { type: \"marginRight\", value: margin };\r\n\t\t}\r\n\t\treturn _render_side_content(task, templates.leftside_text, css, marginStyle);\r\n\t}\r\n\r\n\tfunction _render_rightside_content(task, cfg, templates, margin) {\r\n\t\tvar css = \"gantt_right \" + _get_link_crossing_css(!cfg.rtl ? false : true, task, cfg);\r\n\t\tvar marginStyle = null;\r\n\t\tif(margin){\r\n\t\t\tmarginStyle = { type: \"marginLeft\", value: margin };\r\n\t\t}\r\n\t\treturn _render_side_content(task, templates.rightside_text, css, marginStyle);\r\n\t}\r\n\r\n\tfunction _get_link_crossing_css(left, task) {\r\n\t\tvar cond = _get_conditions(left);\r\n\r\n\t\tfor (var i in cond) {\r\n\t\t\tvar links = task[i];\r\n\t\t\tfor (var ln = 0; ln < links.length; ln++) {\r\n\t\t\t\tvar link = gantt.getLink(links[ln]);\r\n\r\n\t\t\t\tfor (var tp = 0; tp < cond[i].length; tp++) {\r\n\t\t\t\t\tif (link.type == cond[i][tp]) {\r\n\t\t\t\t\t\treturn \"gantt_link_crossing\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\r\n\tfunction _render_task_content(task, width, templates) {\r\n\t\tvar content = document.createElement(\"div\");\r\n\t\tif (gantt.getTaskType(task.type) != gantt.config.types.milestone){\r\n\t\t\tcontent.innerHTML = templates.task_text(task.start_date, task.end_date, task);\r\n\t\t} else if(gantt.getTaskType(task.type) == gantt.config.types.milestone && width) {\r\n\t\t\tcontent.style.height = content.style.width = width + \"px\";\r\n\t\t}\r\n\t\tcontent.className = \"gantt_task_content\";\r\n\t\t//content.style.width = width + 'px';\r\n\t\treturn content;\r\n\t}\r\n\r\n\tfunction _render_task_progress(task, element, maxWidth, cfg, templates) {\r\n\t\tvar done = task.progress * 1 || 0;\r\n\r\n\t\tmaxWidth = Math.max(maxWidth - 2, 0);//2px for borders\r\n\t\tvar pr = document.createElement(\"div\");\r\n\t\tvar width = Math.round(maxWidth * done);\r\n\r\n\t\twidth = Math.min(maxWidth, width);\r\n\r\n\t\tpr.style.width = width + 'px';\r\n\t\tpr.className = \"gantt_task_progress\";\r\n\t\tpr.innerHTML = templates.progress_text(task.start_date, task.end_date, task);\r\n\r\n\t\tif(cfg.rtl){\r\n\t\t\tpr.style.position = \"absolute\";\r\n\t\t\tpr.style.right = \"0px\";\r\n\t\t}\r\n\r\n\t\tvar wrapper = document.createElement(\"div\");\r\n\t\twrapper.className = \"gantt_task_progress_wrapper\";\r\n\t\twrapper.appendChild(pr);\r\n\t\telement.appendChild(wrapper);\r\n\r\n\t\tif (gantt.config.drag_progress && !gantt.isReadonly(task)) {\r\n\t\t\tvar drag = document.createElement(\"div\");\r\n\r\n\t\t\tvar markerPos = width;\r\n\t\t\tif(cfg.rtl){\r\n\t\t\t\tmarkerPos = maxWidth - width;\r\n\t\t\t}\r\n\r\n\t\t\tdrag.style.left = markerPos + 'px';\r\n\t\t\tdrag.className = \"gantt_task_progress_drag\";\r\n\t\t\tdrag.innerHTML = `\r\n\r\n `;\r\n\t\t\tpr.appendChild(drag);\r\n\t\t\telement.appendChild(drag);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _get_conditions(leftside) {\r\n\t\tif (leftside) {\r\n\t\t\treturn {\r\n\t\t\t\t$source: [\r\n\t\t\t\t\tgantt.config.links.start_to_start\r\n\t\t\t\t],\r\n\t\t\t\t$target: [\r\n\t\t\t\t\tgantt.config.links.start_to_start,\r\n\t\t\t\t\tgantt.config.links.finish_to_start\r\n\t\t\t\t]\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\t$source: [\r\n\t\t\t\t\tgantt.config.links.finish_to_start,\r\n\t\t\t\t\tgantt.config.links.finish_to_finish\r\n\t\t\t\t],\r\n\t\t\t\t$target: [\r\n\t\t\t\t\tgantt.config.links.finish_to_finish\r\n\t\t\t\t]\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _combine_item_class(basic, template, itemId, view) {\r\n\t\tvar cfg = view.$getConfig();\r\n\t\tvar css = [basic];\r\n\t\tif (template)\r\n\t\t\tcss.push(template);\r\n\r\n\t\tvar state = gantt.getState();\r\n\r\n\t\tvar task = gantt.getTask(itemId);\r\n\r\n\t\tif (gantt.getTaskType(task.type) == cfg.types.milestone) {\r\n\t\t\tcss.push(\"gantt_milestone\");\r\n\t\t}else if (gantt.getTaskType(task.type) == cfg.types.project) {\r\n\t\t\tcss.push(\"gantt_project\");\r\n\t\t}\r\n\r\n\t\tcss.push(\"gantt_bar_\" + gantt.getTaskType(task.type));\r\n\r\n\r\n\t\tif (gantt.isSummaryTask(task))\r\n\t\t\tcss.push(\"gantt_dependent_task\");\r\n\r\n\t\tif (gantt.isSplitTask(task) && ((cfg.open_split_tasks && !task.$open) || !cfg.open_split_tasks)) {\r\n\t\t\tcss.push(\"gantt_split_parent\");\r\n\t\t}\r\n\r\n\t\tif (cfg.select_task && gantt.isSelectedTask(itemId)) {\r\n\t\t\tcss.push(\"gantt_selected\");\r\n\t\t}\r\n\r\n\t\tif (itemId == state.drag_id) {\r\n\t\t\tcss.push(\"gantt_drag_\" + state.drag_mode);\r\n\t\t\tif (state.touch_drag) {\r\n\t\t\t\tcss.push(\"gantt_touch_\" + state.drag_mode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (state.link_source_id == itemId){\r\n\t\t\tcss.push(\"gantt_link_source\");\r\n\t\t\tif(state.link_from_start) {\r\n\t\t\t\tcss.push(\"gantt_link_from_start\");\r\n\t\t\t}else{\r\n\t\t\t\tcss.push(\"gantt_link_from_end\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (state.link_target_id == itemId)\r\n\t\t\tcss.push(\"gantt_link_target\");\r\n\r\n\r\n\t\tif (cfg.highlight_critical_path && gantt.isCriticalTask) {\r\n\t\t\tif (gantt.isCriticalTask(task))\r\n\t\t\t\tcss.push(\"gantt_critical_task\");\r\n\t\t}\r\n\r\n\t\tif (state.link_landing_area &&\r\n\t\t\t(state.link_target_id && state.link_source_id) &&\r\n\t\t\t(state.link_target_id != state.link_source_id) &&\r\n\t\t\t(state.link_target_id == itemId || state.link_source_id == itemId)) {\r\n\r\n\t\t\tvar from_id = state.link_source_id;\r\n\t\t\tvar from_start = state.link_from_start;\r\n\t\t\tvar to_start = state.link_to_start;\r\n\r\n\t\t\tvar allowDrag = gantt.isLinkAllowed(from_id, itemId, from_start, to_start);\r\n\r\n\t\t\tvar dragClass = \"\";\r\n\t\t\tif (allowDrag) {\r\n\t\t\t\tif (to_start)\r\n\t\t\t\t\tdragClass = \"link_start_allow\";\r\n\t\t\t\telse\r\n\t\t\t\t\tdragClass = \"link_finish_allow\";\r\n\t\t\t} else {\r\n\t\t\t\tif (to_start)\r\n\t\t\t\t\tdragClass = \"link_start_deny\";\r\n\t\t\t\telse\r\n\t\t\t\t\tdragClass = \"link_finish_deny\";\r\n\t\t\t}\r\n\t\t\tcss.push(dragClass);\r\n\t\t}\r\n\t\treturn css.join(\" \");\r\n\t}\r\n\r\n\tfunction _render_pair(parent, css, task, content, config, margin) {\r\n\t\tvar state = gantt.getState();\r\n\t\tvar className, element;\r\n\t\tif (+task.start_date >= +state.min_date) {\r\n\t\t\tclassName = [css, config.rtl ? \"task_right\" : \"task_left\", \"task_start_date\"];\r\n\t\t\telement = content(className.join(\" \"));\r\n\t\t\telement.setAttribute(\"data-bind-property\", \"start_date\");\r\n\t\t\tif(margin){\r\n\t\t\t\telement.style.marginLeft = margin + \"px\";\r\n\t\t\t}\r\n\t\t\tparent.appendChild(element);\r\n\t\t}\r\n\r\n\t\tif (+task.end_date <= +state.max_date){\r\n\t\t\tclassName = [css, config.rtl ? \"task_left\" : \"task_right\", \"task_end_date\"];\r\n\t\t\telement = content(className.join(\" \"));\r\n\t\t\telement.setAttribute(\"data-bind-property\", \"end_date\");\r\n\t\t\tif(margin){\r\n\t\t\t\telement.style.marginRight = margin + \"px\";\r\n\t\t\t}\r\n\t\t\tparent.appendChild(element);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn _render_task_element;\r\n}\r\n\r\nexport default createTaskRenderer;","import isInViewPort from \"./viewport/is_bar_in_viewport\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport createBaseBarRender from \"./task_bar_render\";\r\n\r\nexport default function createTaskRenderer(gantt){\r\n\tvar defaultRender = createBaseBarRender(gantt);\r\n\treturn {\r\n\t\trender: defaultRender,\r\n\t\tupdate: null,\r\n\t\t//getRectangle: getBarRectangle\r\n\t\tisInViewPort: isInViewPort,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n};","export default function () {\r\n // eslint-disable-next-line no-console\r\n console.error(\"You are trying to use a Pro feature that is not available in the GPL version.\");\r\n return {\r\n render: function (){},\r\n isInViewPort: function (){},\r\n getVisibleRange: function (){}\r\n };\r\n};\r\n","export default function(item, view, config){\r\n\treturn {\r\n\t\ttop: view.getItemTop(item.id),\r\n\t\theight: view.getItemHeight(item.id),\r\n\t\tleft: 0,\r\n\t\tright: Infinity\r\n\t};\r\n};","export default function getVisibleCellsRange(scale, viewport){\r\n\tvar firstCellIndex = 0;\r\n\tvar lastCellIndex = scale.left.length - 1;\r\n\tif(viewport){\r\n\t\tfor(var i = 0; i < scale.left.length; i++){\r\n\t\t\tvar left = scale.left[i];\r\n\t\t\tif(left < viewport.x){\r\n\t\t\t\tfirstCellIndex = i;\r\n\t\t\t}\r\n\t\t\tif(left > viewport.x_end){\r\n\t\t\t\tlastCellIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart: firstCellIndex,\r\n\t\tend: lastCellIndex\r\n\t};\r\n};","import isLegacyRender from \"../is_legacy_smart_render\";\r\n\r\nexport default function isColumnVisible(columnIndex, scale, viewPort, gantt){\r\n\tvar width = scale.width[columnIndex];\r\n\tif(width <= 0){\r\n\t\treturn false;\r\n\t}\r\n\tif(!gantt.config.smart_rendering || isLegacyRender(gantt)){\r\n\t\treturn true;\r\n\t}\r\n\tvar cellLeftCoord = scale.left[columnIndex] - width;\r\n\tvar cellRightCoord = scale.left[columnIndex] + width;\r\n\treturn (cellLeftCoord <= viewPort.x_end && cellRightCoord >= viewPort.x);//do not render skipped columns\r\n};","export default function (items, gantt){\r\n\tvar placeholderConfig = gantt.config.timeline_placeholder;\r\n\titems = items || [];\r\n\tif (placeholderConfig && items.filter(e => e.id === 'timeline_placeholder_task').length === 0){\r\n\t\tvar state = gantt.getState();\r\n\t\tvar lastTaskId = null;\r\n\t\tvar start_date = state.min_date;\r\n\t\tvar end_date = state.max_date;\r\n\t\tif (items.length){\r\n\t\t\tlastTaskId = items[items.length -1].id;\r\n\t\t}\r\n\t\tvar placeholderTask = {\r\n\t\t\tstart_date: start_date, \r\n\t\t\tend_date: end_date, \r\n\t\t\trow_height: placeholderConfig.height || 0,\r\n\t\t\tid: \"timeline_placeholder_task\", \r\n\t\t\tunscheduled: true,\r\n\t\t\tlastTaskId: lastTaskId, \r\n\t\t\tcalendar_id: placeholderConfig.calendar || \"global\",\r\n\t\t\t$source:[], \r\n\t\t\t$target: []\r\n\t\t};\r\n\t\titems.push(placeholderTask);\r\n\t}\r\n};","import isInViewPort from \"./viewport/is_link_in_viewport\";\r\nimport getVisibleRange from \"./viewport/factory/get_visible_link_range\";\r\nimport { childrenHaveBaselines, getMaxParentHeight } from \"./baseline_helper\";\r\n\r\n\r\nfunction createLinkRender(gantt){\r\n\r\nfunction _render_link_element(link, view, config) {\r\n\tvar source = gantt.getTask(link.source);\r\n\tif(source.hide_bar){\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar target = gantt.getTask(link.target);\r\n\tif(target.hide_bar){\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar pt = path_builder.get_endpoint(link, view, source, target);\r\n\tvar dy = pt.e_y - pt.y;\r\n\tvar dx = pt.e_x - pt.x;\r\n\tif(!dx && !dy){\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tvar dots = path_builder.get_points(link, view, source, target);\r\n\tconst lines = drawer.get_lines(dots, view);\r\n\r\n\tconst shapes = transform_lines_to_shapes(lines.filter(l => l.size > 0), config);\r\n \r\n\tconst div = render_shapes(shapes, view, link, config);\r\n\r\n\r\n\tvar css = \"gantt_task_link\";\r\n\r\n\tif (link.color) {\r\n\t\tcss += \" gantt_link_inline_color\";\r\n\t}\r\n\tvar cssTemplate = gantt.templates.link_class ? gantt.templates.link_class(link) : \"\";\r\n\tif (cssTemplate) {\r\n\t\tcss += \" \" + cssTemplate;\r\n\t}\r\n\r\n\tif (config.highlight_critical_path && gantt.isCriticalLink) {\r\n\t\tif (gantt.isCriticalLink(link))\r\n\t\t\tcss += \" gantt_critical_link\";\r\n\t}\r\n\r\n\tdiv.className = css;\r\n\r\n\tif(view.$config.link_attribute){\r\n\t\tdiv.setAttribute(view.$config.link_attribute, link.id);\r\n\t\tdiv.setAttribute(\"link_id\", link.id);\r\n\t}\r\n\tif (link.color) {\r\n\t\tdiv.style.setProperty(\"--dhx-gantt-link-background\", link.color);\r\n\t}\r\n\r\n\tgantt._waiAria.linkAttr(link, div);\r\n\r\n\treturn div;\r\n}\r\n\r\n\tfunction render_shapes(shapes, view, link, config) {\r\n\t\tconst container = document.createElement(\"div\");\r\n\r\n\t\tshapes.forEach(shape => {\r\n\t\t\tlet element;\r\n\t\t\tif (shape.type === 'line') {\r\n\t\t\t\telement = drawer.render_line(shape.data, null, view, link.source);\r\n\t\t\t} else if (shape.type === 'corner') {\r\n\t\t\t\telement = drawer.render_corner(shape.data, view);\r\n\t\t\t}else if (shape.type === 'arrow') {\r\n\t\t\t\telement = drawer.render_arrow(shape.data, config);\r\n\t\t\t}\r\n\r\n\t\t\tcontainer.appendChild(element);\r\n\t\t});\r\n\r\n\t\treturn container;\r\n\t}\r\n\r\n\tfunction transform_lines_to_shapes(lines, config) {\r\n\t\tconst radius = config.link_radius || 4;\r\n\t\tconst arrowSize = config.link_arrow_size || 6; // Arrow size from config\r\n\t\tconst shapes = [];\r\n\t\r\n\t\tfor (let i = 0; i < lines.length; i++) {\r\n\t\t\tconst line = lines[i];\r\n\t\t\tconst nextLine = lines[i + 1];\r\n\t\r\n\t\t\tif (!nextLine || config.link_radius <= 1) {\r\n\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\r\n\t\t\tif (line.direction !== nextLine.direction) {\r\n\t\t\t\tif(line.size < radius || nextLine.size < radius){\r\n\t\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tline.size -= radius;\r\n\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\r\n\t\t\t\tlet cornerX = line.x;\r\n\t\t\t\tlet cornerY = line.y - config.link_line_width / 2;\r\n\t\r\n\t\t\t\tswitch (line.direction) {\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\tcornerX += line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\tcornerX -= line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'down':\r\n\t\t\t\t\t\tcornerY += line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'up':\r\n\t\t\t\t\t\tcornerY -= line.size;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\tconst corner = {\r\n\t\t\t\t\tx: cornerX,\r\n\t\t\t\t\ty: cornerY,\r\n\t\t\t\t\tdirection: { from: line.direction, to: nextLine.direction },\r\n\t\t\t\t\tradius\r\n\t\t\t\t};\r\n\t\t\t\tshapes.push({ type: 'corner', data: corner });\r\n\t\r\n\t\t\t\tswitch (nextLine.direction) {\r\n\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\tnextLine.x += radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\tnextLine.x -= radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'down':\r\n\t\t\t\t\t\tnextLine.y += radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'up':\r\n\t\t\t\t\t\tnextLine.y -= radius;\r\n\t\t\t\t\t\tnextLine.size -= radius;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tshapes.push({ type: 'line', data: line });\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tconst lastLine = lines[lines.length - 1];\r\n\t\r\n\t\tif (lastLine.direction === 'right' || lastLine.direction === 'left') {\r\n\t\t\tlastLine.size -= arrowSize*3/4; \r\n\t\r\n\t\t\tlet arrowX = lastLine.direction === 'right' ? (lastLine.x + lastLine.size) : lastLine.x - lastLine.size - arrowSize/2;\r\n\t\t\tlet arrowY = lastLine.y - (config.link_line_width / 2) - (arrowSize / 2) + 1;\r\n\t\r\n\t\t\tif(lastLine.direction === 'left'){\r\n\t\t\t\tarrowY -= 1;// left pointing arrows for some reason need adjustments\r\n\t\t\t\tarrowX -= 2;\r\n\t\t\t}else{\r\n\t\t\t\tarrowX -= 1;\r\n\t\t\t}\r\n\t\t\tconst arrow = {\r\n\t\t\t\tx: arrowX,\r\n\t\t\t\ty: arrowY,\r\n\t\t\t\tsize: arrowSize,\r\n\t\t\t\tdirection: lastLine.direction\r\n\t\t\t};\r\n\t\r\n\t\t\tshapes.push({ type: 'line', data: lastLine });\r\n\t\t\tshapes.push({ type: 'arrow', data: arrow });\r\n\t\t} else {\r\n\t\t\tshapes.push({ type: 'line', data: lastLine });\r\n\t\t}\r\n\t\r\n\t\treturn shapes;\r\n\t}\r\n\t\r\n\r\n\r\nvar drawer = {\r\n\tcurrent_pos: null,\r\n\tdirs: {\"left\": 'left', \"right\": 'right', \"up\": 'up', \"down\": 'down'},\r\n\tpath: [],\r\n\tclear: function () {\r\n\t\tthis.current_pos = null;\r\n\t\tthis.path = [];\r\n\t},\r\n\tpoint: function (pos) {\r\n\t\tthis.current_pos = gantt.copy(pos);\r\n\t},\r\n\tget_lines: function (dots) {\r\n\t\tthis.clear();\r\n\t\tthis.point(dots[0]);\r\n\t\tfor (var i = 1; i < dots.length; i++) {\r\n\t\t\tthis.line_to(dots[i]);\r\n\t\t}\r\n\t\treturn this.get_path();\r\n\t},\r\n\tline_to: function (pos) {\r\n\t\tvar next = gantt.copy(pos);\r\n\t\tvar prev = this.current_pos;\r\n\r\n\t\tvar line = this._get_line(prev, next);\r\n\t\tthis.path.push(line);\r\n\t\tthis.current_pos = next;\r\n\t},\r\n\tget_path: function () {\r\n\t\treturn this.path;\r\n\t},\r\n\tget_wrapper_sizes: function (v, view, itemId) {\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar res,\r\n\t\t\twrapper_size = config.link_wrapper_width,\r\n\t\t\ty = v.y - (wrapper_size) / 2;\r\n\t\tswitch (v.direction) {\r\n\t\t\tcase this.dirs.left:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y,\r\n\t\t\t\t\theight: wrapper_size,\r\n\t\t\t\t\tlineHeight: wrapper_size,\r\n\t\t\t\t\tleft: v.x - v.size - wrapper_size / 2,\r\n\t\t\t\t\twidth: v.size + wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.right:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y,\r\n\t\t\t\t\tlineHeight: wrapper_size,\r\n\t\t\t\t\theight: wrapper_size,\r\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\r\n\t\t\t\t\twidth: v.size + wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.up:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y - v.size,\r\n\t\t\t\t\tlineHeight: v.size + wrapper_size,\r\n\t\t\t\t\theight: v.size + wrapper_size,\r\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\r\n\t\t\t\t\twidth: wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.down:\r\n\t\t\t\tres = {\r\n\t\t\t\t\ttop: y /*- wrapper_size/2*/,\r\n\t\t\t\t\tlineHeight: v.size + wrapper_size,\r\n\t\t\t\t\theight: v.size + wrapper_size,\r\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\r\n\t\t\t\t\twidth: wrapper_size\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t},\r\n\tget_line_sizes: function (v, view) {\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar res,\r\n\t\t\tline_size = config.link_line_width,\r\n\t\t\twrapper_size = config.link_wrapper_width,\r\n\t\t\tsize = v.size + line_size;\r\n\t\tswitch (v.direction) {\r\n\t\t\tcase this.dirs.left:\r\n\t\t\tcase this.dirs.right:\r\n\t\t\t\tres = {\r\n\t\t\t\t\theight: line_size,\r\n\t\t\t\t\twidth: size,\r\n\t\t\t\t\tmarginTop: (wrapper_size - line_size) / 2,\r\n\t\t\t\t\tmarginLeft: (wrapper_size - line_size) / 2\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tcase this.dirs.up:\r\n\t\t\tcase this.dirs.down:\r\n\t\t\t\tres = {\r\n\t\t\t\t\theight: size,\r\n\t\t\t\t\twidth: line_size,\r\n\t\t\t\t\tmarginTop: (wrapper_size - line_size) / 2,\r\n\t\t\t\t\tmarginLeft: (wrapper_size - line_size) / 2\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\r\n\t\treturn res;\r\n\t},\r\n\trender_line: function (v, end, view, itemId) {\r\n\t\tvar pos = this.get_wrapper_sizes(v, view, itemId);\r\n\t\tvar wrapper = document.createElement(\"div\");\r\n\t\twrapper.style.cssText = [\r\n\t\t\t\"top:\" + pos.top + \"px\",\r\n\t\t\t\"left:\" + pos.left + \"px\",\r\n\t\t\t\"height:\" + pos.height + \"px\",\r\n\t\t\t\"width:\" + pos.width + \"px\"\r\n\t\t].join(';');\r\n\t\twrapper.className = \"gantt_line_wrapper\";\r\n\r\n\t\tvar innerPos = this.get_line_sizes(v, view);\r\n\t\tvar inner = document.createElement(\"div\");\r\n\t\tinner.style.cssText = [\r\n\t\t\t\"height:\" + innerPos.height + \"px\",\r\n\t\t\t\"width:\" + innerPos.width + \"px\",\r\n\t\t\t\"margin-top:\" + innerPos.marginTop + \"px\",\r\n\t\t\t\"margin-left:\" + innerPos.marginLeft + \"px\"\r\n\t\t].join(\";\");\r\n\r\n\t\tinner.className = \"gantt_link_line_\" + v.direction;\r\n\t\twrapper.appendChild(inner);\r\n\r\n\t\treturn wrapper;\r\n\t},\r\n\r\n\trender_corner: function (corner, view) {\r\n\t\tconst radius = corner.radius;\r\n\t\tconst config = view.$getConfig();\r\n\t\tconst lineWidth = config.link_line_width || 2;\r\n\t\tconst cornerDiv = document.createElement(\"div\");\r\n\t\r\n\t\tcornerDiv.classList.add(\"gantt_link_corner\");\r\n\t\tcornerDiv.classList.add(`gantt_link_corner_${corner.direction.from}_${corner.direction.to}`);\r\n\t\r\n\t\tcornerDiv.style.width = `${radius}px`;\r\n\t\tcornerDiv.style.height = `${radius}px`;\r\n\t\r\n\t\tlet borderVertical;\r\n\t\tlet borderHorizontal;\r\n\r\n\t\tif (corner.direction.from === 'right' && corner.direction.to === 'down') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'down' && corner.direction.to === 'right') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'right' && corner.direction.to === 'up') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t} else if (corner.direction.from === 'up' && corner.direction.to === 'right') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t} else if (corner.direction.from === 'left' && corner.direction.to === 'down') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'down' && corner.direction.to === 'left') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y}px`;\r\n\t\t} else if (corner.direction.from === 'left' && corner.direction.to === 'up') {\r\n\t\t\tborderVertical = \"Left\";\r\n\t\t\tborderHorizontal = \"Bottom\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t} else if (corner.direction.from === 'up' && corner.direction.to === 'left') {\r\n\t\t\tborderVertical = \"Right\";\r\n\t\t\tborderHorizontal = \"Top\";\r\n\t\t\tcornerDiv.style.left = `${corner.x - radius - config.link_line_width/2}px`;\r\n\t\t\tcornerDiv.style.top = `${corner.y - radius}px`;\r\n\t\t}\r\n\r\n\t\tcornerDiv.style[`border${borderHorizontal}Width`] = `${lineWidth}px`;\r\n\t\tcornerDiv.style[`border${borderVertical}Width`] = `${lineWidth}px`;\r\n\t\tcornerDiv.style[`border${borderVertical}Style`] = `solid`;\r\n\t\tcornerDiv.style[`border${borderHorizontal}Style`] = `solid`;\r\n\t\tcornerDiv.style[`border${borderHorizontal}${borderVertical}Radius`] = `${radius}px`;\r\n\r\n\t\r\n\t\treturn cornerDiv;\r\n\t},\r\n\r\n\trender_arrow(arrow, config) {\r\n\t\tvar div = document.createElement(\"div\");\r\n\t\tvar top = arrow.y;\r\n\t\tvar left = arrow.x;\r\n\t\r\n\t\tvar size = config.link_arrow_size;\r\n\t\tdiv.style.setProperty(\"--dhx-gantt-icon-size\", `${size}px`);\r\n\t\r\n\t\tvar className = \"gantt_link_arrow gantt_link_arrow_\" + arrow.direction;\r\n\r\n\t\tdiv.style.top = top + \"px\";\r\n\t\tdiv.style.left = left + 'px';\r\n\t\tdiv.className = className;\r\n\t\r\n\t\treturn div;\r\n\t},\r\n\t\r\n\t_get_line: function (from, to) {\r\n\t\tvar direction = this.get_direction(from, to);\r\n\t\tvar vect = {\r\n\t\t\tx: from.x,\r\n\t\t\ty: from.y,\r\n\t\t\tdirection: this.get_direction(from, to)\r\n\t\t};\r\n\t\tif (direction == this.dirs.left || direction == this.dirs.right) {\r\n\t\t\tvect.size = Math.abs(from.x - to.x);\r\n\t\t} else {\r\n\t\t\tvect.size = Math.abs(from.y - to.y);\r\n\t\t}\r\n\t\treturn vect;\r\n\t},\r\n\tget_direction: function (from, to) {\r\n\t\tvar direction = 0;\r\n\t\tif (to.x < from.x) {\r\n\t\t\tdirection = this.dirs.left;\r\n\t\t} else if (to.x > from.x) {\r\n\t\t\tdirection = this.dirs.right;\r\n\t\t} else if (to.y > from.y) {\r\n\t\t\tdirection = this.dirs.down;\r\n\t\t} else {\r\n\t\t\tdirection = this.dirs.up;\r\n\t\t}\r\n\t\treturn direction;\r\n\t}\r\n\r\n};\r\n\r\nvar path_builder = {\r\n\r\n\tpath: [],\r\n\tclear: function () {\r\n\t\tthis.path = [];\r\n\t},\r\n\tcurrent: function () {\r\n\t\treturn this.path[this.path.length - 1];\r\n\t},\r\n\tpoint: function (next) {\r\n\t\tif (!next)\r\n\t\t\treturn this.current();\r\n\r\n\t\tthis.path.push(gantt.copy(next));\r\n\t\treturn next;\r\n\t},\r\n\tpoint_to: function (direction, diff, point) {\r\n\t\tif (!point)\r\n\t\t\tpoint = gantt.copy(this.point());\r\n\t\telse\r\n\t\t\tpoint = {x: point.x, y: point.y};\r\n\t\tvar dir = drawer.dirs;\r\n\t\tswitch (direction) {\r\n\t\t\tcase (dir.left):\r\n\t\t\t\tpoint.x -= diff;\r\n\t\t\t\tbreak;\r\n\t\t\tcase (dir.right):\r\n\t\t\t\tpoint.x += diff;\r\n\t\t\t\tbreak;\r\n\t\t\tcase (dir.up):\r\n\t\t\t\tpoint.y -= diff;\r\n\t\t\t\tbreak;\r\n\t\t\tcase (dir.down):\r\n\t\t\t\tpoint.y += diff;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn this.point(point);\r\n\t},\r\n\tget_points: function (link, view, source, target) {\r\n\t\tvar pt = this.get_endpoint(link, view, source, target);\r\n\t\tvar xy = gantt.config;\r\n\r\n\t\tvar dy = pt.e_y - pt.y;\r\n\t\tvar dx = pt.e_x - pt.x;\r\n\r\n\t\tvar dir = drawer.dirs;\r\n\r\n\t\tvar rowHeight = view.getItemHeight(link.source);\r\n\r\n\t\tthis.clear();\r\n\t\tthis.point({x: pt.x, y: pt.y});\r\n\r\n\t\tvar shiftX = 2 * xy.link_arrow_size;//just random size for first line\r\n\t\tvar lineType = this.get_line_type(link, view.$getConfig());\r\n\r\n\t\tvar forward = (pt.e_x > pt.x);\r\n\t\tif (lineType.from_start && lineType.to_start) {\r\n\t\t\tthis.point_to(dir.left, shiftX);\r\n\t\t\tif (forward) {\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t} else {\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t}\r\n\t\t\tthis.point_to(dir.right, shiftX);\r\n\r\n\t\t} else if (!lineType.from_start && lineType.to_start) {\r\n\t\t\tforward = (pt.e_x > (pt.x + 2 * shiftX));\r\n\t\t\tthis.point_to(dir.right, shiftX);\r\n\t\t\tif (forward) {\r\n\t\t\t\tdx -= shiftX;\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t} else {\r\n\t\t\t\tdx -= 2 * shiftX;\r\n\t\t\t\tvar sign = dy > 0 ? 1 : -1;\r\n\r\n\t\t\t\tthis.point_to(dir.down, sign * (rowHeight / 2));\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, sign * ( Math.abs(dy) - (rowHeight / 2)));\r\n\t\t\t\tthis.point_to(dir.right, shiftX);\r\n\t\t\t}\r\n\r\n\t\t} else if (!lineType.from_start && !lineType.to_start) {\r\n\t\t\tthis.point_to(dir.right, shiftX);\r\n\t\t\tif (forward) {\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t} else {\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t}\r\n\t\t\tthis.point_to(dir.left, shiftX);\r\n\t\t} else if (lineType.from_start && !lineType.to_start) {\r\n\r\n\t\t\tforward = (pt.e_x > (pt.x - 2 * shiftX));\r\n\t\t\tthis.point_to(dir.left, shiftX);\r\n\r\n\t\t\tif (!forward) {\r\n\t\t\t\tdx += shiftX;\r\n\t\t\t\tthis.point_to(dir.down, dy);\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t} else {\r\n\t\t\t\tdx += 2 * shiftX;\r\n\t\t\t\tvar sign = dy > 0 ? 1 : -1;\r\n\t\t\t\tthis.point_to(dir.down, sign * (rowHeight / 2));\r\n\t\t\t\tthis.point_to(dir.right, dx);\r\n\t\t\t\tthis.point_to(dir.down, sign * ( Math.abs(dy) - (rowHeight / 2)));\r\n\t\t\t\tthis.point_to(dir.left, shiftX);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this.path;\r\n\t},\r\n\tget_line_type: function(link, config){\r\n\t\tvar types = config.links;\r\n\t\tvar from_start = false, to_start = false;\r\n\t\tif (link.type == types.start_to_start) {\r\n\t\t\tfrom_start = to_start = true;\r\n\t\t} else if (link.type == types.finish_to_finish) {\r\n\t\t\tfrom_start = to_start = false;\r\n\t\t} else if (link.type == types.finish_to_start) {\r\n\t\t\tfrom_start = false;\r\n\t\t\tto_start = true;\r\n\t\t} else if (link.type == types.start_to_finish) {\r\n\t\t\tfrom_start = true;\r\n\t\t\tto_start = false;\r\n\t\t} else {\r\n\t\t\tgantt.assert(false, \"Invalid link type\");\r\n\t\t}\r\n\r\n\t\tif(config.rtl){\r\n\t\t\tfrom_start = !from_start;\r\n\t\t\tto_start = !to_start;\r\n\t\t}\r\n\r\n\t\treturn {from_start: from_start, to_start: to_start};\r\n\t},\r\n\r\n\tget_endpoint: function (link, view, source, target) {\r\n\t\tvar config = view.$getConfig();\r\n\r\n\t\tvar lineType = this.get_line_type(link, config);\r\n\t\tvar from_start = lineType.from_start,\r\n\t\t\tto_start = lineType.to_start;\r\n\r\n\t\tvar from = getMilestonePosition(source, view, config),\r\n\t\t\tto = getMilestonePosition(target, view, config);\r\n\r\n\t\treturn {\r\n\t\t\tx: from_start ? from.left : (from.left + from.width),\r\n\t\t\te_x: to_start ? to.left : (to.left + to.width),\r\n\t\t\ty: from.top + (from.rowHeight/2) - 1,\r\n\t\t\te_y: to.top + (to.rowHeight/2) - 1\r\n\t\t};\r\n\t}\r\n};\r\n\r\nfunction getMilestonePosition(task, view, config){\r\n\tvar pos = view.getItemPosition(task);\r\n\r\n\t// GS-2270: Link to the split children shouldn't exceed the parent row height\r\n\tlet splitParams = getMaxParentHeight(gantt, view, task);\r\n\tlet maxHeight = splitParams.maxHeight;\r\n\r\n\tlet splitChild = splitParams.splitChild;\r\n\tconst baselinesOnDifferentRow = gantt.config.baselines !== false && (gantt.config.baselines.render_mode == \"separateRow\" || gantt.config.baselines.render_mode == \"individualRow\");\r\n\tconst baselines = baselinesOnDifferentRow && task.baselines && task.baselines.length;\r\n\r\n\tif (splitParams.shrinkHeight){\r\n\t\tpos.rowHeight = maxHeight;\r\n\t}\r\n\r\n\tlet milestoneWidth;\r\n\tlet milestoneTask = gantt.getTaskType(task.type) == config.types.milestone;\r\n\tif(milestoneTask){\r\n\t\tlet milestoneHeight = view.getBarHeight(task.id, true);\r\n\t\tmilestoneWidth = Math.sqrt(2*milestoneHeight*milestoneHeight);\r\n\t\tif (splitParams.shrinkHeight && maxHeight < milestoneHeight){\r\n\t\t\tmilestoneHeight = maxHeight;\r\n\t\t\tmilestoneWidth = maxHeight;\r\n\t\t}\r\n\t\tpos.left -= milestoneWidth / 2;\r\n\t\tpos.width = milestoneWidth;\r\n\t} \r\n\tif (splitChild){\r\n\t\tif (maxHeight >= pos.height) {\r\n\t\t\tconst siblingBaselines = childrenHaveBaselines(gantt, task.parent);\r\n\t\t\tif (baselines || siblingBaselines){\r\n\t\t\t\tif (milestoneTask){\r\n\t\t\t\t\tpos.rowHeight = pos.height + 4;\r\n\t\t\t\t\tpos.left += (pos.width - pos.rowHeight + 4) / 2;\r\n\t\t\t\t\tpos.width = pos.rowHeight - 3;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tpos.rowHeight = pos.height + 6;\r\n\t\t\t\t}\r\n\t\t\t} else if (milestoneTask) {\r\n\t\t\t\tpos.left += (milestoneWidth - pos.height) / 2;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tpos.rowHeight = maxHeight + 2;\r\n\t\t\tif (milestoneTask){\r\n\t\t\t\tpos.left += (pos.width - pos.rowHeight + 4) / 2;\r\n\t\t\t\tpos.width = pos.rowHeight - 3;\r\n\t\t\t}\r\n\t\t}\r\n\t} else if (baselines){\r\n\t\tpos.rowHeight = pos.height + 4;\r\n\t}\r\n\r\n\treturn pos;\r\n}\r\n\r\n\r\nreturn {\r\n\trender: _render_link_element,\r\n\tupdate: null,\r\n\t//getRectangle: getLinkRectangle\r\n\tisInViewPort: isInViewPort,\r\n\tgetVisibleRange: getVisibleRange()\r\n};\r\n}\r\n\r\nexport default createLinkRender;","export default function(item, viewport, view, config, gantt){\r\n // GS-2481 and GS-1715, don't remove selected task when using keyboard shortcuts and when the inline editor is opened\r\n if(gantt.$ui.getView(\"grid\") && ((gantt.config.keyboard_navigation && gantt.getSelectedId()) || (gantt.ext.inlineEditors && gantt.ext.inlineEditors.getState().id))) {\r\n\t\treturn true;\r\n\t}\r\n var top = view.getItemTop(item.id);\r\n\tvar height = view.getItemHeight(item.id);\r\n\r\n\tif(top > viewport.y_end || top + height < viewport.y){\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn true;\r\n};","import * as helpers from \"../utils/helpers\";\r\n\r\nexport default function createResourceTimelineBuilder(gantt){\r\n\r\n\tlet resourceTaskCache = {};\r\n\r\n\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(){\r\n\t\tresourceTaskCache = {};\r\n\t});\r\n\r\n\tfunction getResourceLoad(resource, resourceProperty, scale, timeline){\r\n\t\tconst cacheKey = resource.id + \"_\" + resourceProperty + \"_\" + scale.unit + \"_\" + scale.step;\r\n\t\tlet res;\r\n\t\tif (!resourceTaskCache[cacheKey]) {\r\n\t\t\tres = resourceTaskCache[cacheKey] = calculateResourceLoad(resource, resourceProperty, scale, timeline);\r\n\r\n\t\t} else {\r\n\t\t\tres = resourceTaskCache[cacheKey];\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tfunction calculateResourceLoadFromAssignments(items, scale, assignmentsPassed){\r\n\t\tconst scaleUnit = scale.unit;\r\n\t\tconst scaleStep = scale.step;\r\n\t\tconst timegrid = {};\r\n\r\n\t\tconst precalculatedTimes = {};\r\n\t\tfor (let i = 0; i < items.length; i++) {\r\n\t\t\tconst item = items[i];\r\n\t\t\tlet task = item;\r\n\t\t\tif(assignmentsPassed){\r\n\t\t\t\ttask = gantt.getTask(item.task_id);\r\n\t\t\t}\r\n\t\t\tif (task.unscheduled){\r\n\t\t\t\tcontinue; // do not process assignments for unscheduled tasks\r\n\t\t\t}\r\n\t\t\tlet minDate = (item.start_date || task.start_date);\r\n\t\t\tlet maxDate = (item.end_date || task.end_date);\r\n\t\t\tif(assignmentsPassed){\r\n\t\t\t\tif(item.start_date){\r\n\t\t\t\t\tminDate = new Date(Math.max(item.start_date.valueOf(), task.start_date.valueOf()));\r\n\t\t\t\t}\r\n\t\t\t\tif(item.end_date){\r\n\t\t\t\t\tmaxDate = new Date(Math.min(item.end_date.valueOf(), task.end_date.valueOf()));\r\n\t\t\t\t}\r\n\t\t\t\t// GS-2063: handle case with fixedDates mode\r\n\t\t\t\tif(item.mode && item.mode == \"fixedDates\"){\r\n\t\t\t\t\tminDate = item.start_date;\r\n\t\t\t\t\tmaxDate = item.end_date;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet firstColumn = helpers.findBinary(scale.trace_x, minDate.valueOf());\r\n\t\t\tlet minScaleDate = new Date(scale.trace_x[firstColumn] || gantt.date[scaleUnit + \"_start\"](new Date(minDate)));\r\n\t\t\t// GS-2307: need to take into account that task could start before the min scale date\r\n\t\t\t// so the task would be added to timegrid\r\n\t\t\tlet currDate = new Date(Math.min(minDate.valueOf(), minScaleDate.valueOf())); \r\n\r\n\t\t\tlet calendar = gantt.config.work_time ? gantt.getTaskCalendar(task) : gantt;\r\n\t\t\tprecalculatedTimes[calendar.id] = {};\r\n\t\t\twhile (currDate < maxDate) {\r\n\t\t\t\tconst cachedTimes = precalculatedTimes[calendar.id];\r\n\r\n\t\t\t\tlet date = currDate;\r\n\t\t\t\tconst timestamp = date.valueOf();\r\n\r\n\t\t\t\tcurrDate = gantt.date.add(currDate, scaleStep, scaleUnit);\r\n\r\n\t\t\t\tif(cachedTimes[timestamp] === false){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar isWorkTime = calendar.isWorkTime({date: date, task: task, unit: scaleUnit});\r\n\t\t\t\tif(!isWorkTime){\r\n\t\t\t\t\tcachedTimes[timestamp] = false;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!timegrid[timestamp]){\r\n\t\t\t\t\ttimegrid[timestamp] = {tasks: [], assignments: []};\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttimegrid[timestamp].tasks.push(task);\r\n\t\t\t\tif(assignmentsPassed){\r\n\t\t\t\t\ttimegrid[timestamp].assignments.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn timegrid;\r\n\t}\r\n\r\n\tfunction calculateResourceLoad(resource, resourceProperty, scale, timeline) {\r\n\r\n\t\tlet items;\r\n\t\tlet assignmentsPassed = false;\r\n\t\tlet timegrid = {};\r\n\r\n\t\tif(gantt.config.process_resource_assignments && resourceProperty === gantt.config.resource_property){\r\n\t\t\tif(resource.$role == \"task\"){\r\n\t\t\t\titems = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id);\r\n\t\t\t}else{\r\n\t\t\t\titems = gantt.getResourceAssignments(resource.id);\r\n\t\t\t}\r\n\r\n\t\t\tassignmentsPassed = true;\r\n\t\t}else if(resource.$role == \"task\"){\r\n\t\t\titems = [];\r\n\t\t}else{\r\n\t\t\titems = gantt.getTaskBy(resourceProperty, resource.id);\r\n\t\t}\r\n\r\n\t\ttimegrid = calculateResourceLoadFromAssignments(items, scale, assignmentsPassed);\r\n\t\tconst scaleUnit = scale.unit;\r\n\t\tconst scaleStep = scale.step;\r\n\r\n\t\tconst timetable = [];\r\n\t\tlet start, end, tasks, assignments, cell;\r\n\t\tconst config = timeline.$getConfig();\r\n\r\n\t\tfor(let i = 0; i < scale.trace_x.length; i++){\r\n\t\t\tstart = new Date(scale.trace_x[i]);\r\n\t\t\tend = gantt.date.add(start, scaleStep, scaleUnit);\r\n\t\t\tcell = timegrid[start.valueOf()] || {};\r\n\t\t\ttasks = cell.tasks || [];\r\n\t\t\tassignments = cell.assignments || [];\r\n\t\t\tif(tasks.length || config.resource_render_empty_cells){\r\n\t\t\t\ttimetable.push({\r\n\t\t\t\t\tstart_date: start,\r\n\t\t\t\t\tend_date: end,\r\n\t\t\t\t\ttasks: tasks,\r\n\t\t\t\t\tassignments: assignments\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttimetable.push(null);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn timetable;\r\n\t}\r\n\r\n\r\n\r\n\treturn getResourceLoad;\r\n};","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport isPlaceholderTask from \"../../../utils/placeholder_task\";\r\n\r\nfunction _init_dnd(gantt, grid) {\r\n\tvar DnD = gantt.$services.getService(\"dnd\");\r\n\r\n\tif(!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)){\r\n\t\treturn;\r\n\t}\r\n\r\n\tfunction locate(e){\r\n\t\treturn domHelpers.locateAttribute(e, grid.$config.item_attribute);\r\n\t}\r\n\r\n\tfunction getStore(){\r\n\t\treturn gantt.getDatastore(grid.$config.bind);\r\n\t}\r\n\r\n\tfunction checkPlaceholderTask(id){\r\n\t\treturn isPlaceholderTask(id, gantt, getStore());\r\n\t}\r\n\r\n\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\r\n\tif (gantt.defined(grid.$getConfig().dnd_sensitivity))\r\n\t\tdnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\r\n\r\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\t\tif (!el) return false;\r\n\t\tif (gantt.hideQuickInfo) gantt.hideQuickInfo();\r\n\r\n\t\tif (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar id = el.getAttribute(grid.$config.item_attribute);\r\n\t\tif (checkPlaceholderTask(id)) return false;\r\n\r\n\t\tvar datastore = getStore();\r\n\r\n\t\tvar task = datastore.getItem(id);\r\n\r\n\t\tif (gantt.isReadonly(task))\r\n\t\t\treturn false;\r\n\r\n\t\tdnd.config.initial_open_state = task.$open;\r\n\t\tif (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\t\tdnd.config.marker.innerHTML = el.outerHTML;\r\n\t\tvar element = dnd.config.marker.firstChild;\r\n\t\tif(element){\r\n\t\t\telement.style.position = \"static\";\r\n\t\t}\r\n\r\n\t\tdnd.config.id = el.getAttribute(grid.$config.item_attribute);\r\n\r\n\t\tvar store = getStore();\r\n\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\t\tdnd.config.index = store.getBranchIndex(dnd.config.id);\r\n\t\tdnd.config.parent = task.parent;\r\n\t\ttask.$open = false;\r\n\t\ttask.$transparent = true;\r\n\t\tthis.refreshData();\r\n\t}, gantt));\r\n\r\n\tdnd.lastTaskOfLevel = function (level) {\r\n\t\tvar last_item = null;\r\n\t\tvar store = getStore();\r\n\t\tvar tasks = store.getItems();\r\n\t\tfor (var i = 0, len = tasks.length; i < len; i++) {\r\n\t\t\tif (tasks[i].$level == level) {\r\n\t\t\t\tlast_item = tasks[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn last_item ? last_item.id : null;\r\n\t};\r\n\tdnd._getGridPos = gantt.bind(function (e) {\r\n\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\r\n\t\t// row offset\r\n\t\tvar x = pos.x + grid.$grid.scrollLeft;\r\n\t\tvar y = e.pos.y - 10;\r\n\r\n\t\tvar rowHeight = grid.getItemHeight(dnd.config.id);\r\n\t\t// prevent moving row out of grid_data container\r\n\t\tif (y < pos.y) y = pos.y;\r\n\t\tvar gridHeight = grid.getTotalHeight();\r\n\t\tif (y > pos.y + gridHeight - rowHeight) y = pos.y + gridHeight - rowHeight;\r\n\t\tconst maxBottom = pos.y + pos.height;\r\n\t\tif (y > maxBottom - rowHeight) {\r\n\t\t\ty = maxBottom - rowHeight;\r\n\t\t}\r\n\r\n\t\tpos.x = x;\r\n\t\tpos.y = y;\r\n\t\treturn pos;\r\n\t}, gantt);\r\n\tdnd._getTargetY = gantt.bind(function (e) {\r\n\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\r\n\t\tvar scrollPos = grid.$state.scrollTop || 0;\r\n\t\tvar maxBottom = gantt.$grid_data.getBoundingClientRect().height + scrollPos;\r\n\r\n\t\tvar y = e.pageY - pos.y + scrollPos;\r\n\t\tif (y > maxBottom) {\r\n\t\t\ty = maxBottom;\r\n\t\t} else if (y < scrollPos) {\r\n\t\t\ty = scrollPos;\r\n\t\t}\r\n\t\treturn y;\r\n\t}, gantt);\r\n\tdnd._getTaskByY = gantt.bind(function (y, dropIndex) {\r\n\r\n\t\tvar store = getStore();\r\n\r\n\t\ty = y || 0;\r\n\r\n\t\tvar index = grid.getItemIndexByTopPosition(y);\r\n\t\tindex = dropIndex < index ? index - 1 : index;\r\n\r\n\t\tif (index > store.countVisible() - 1)\r\n\t\t\treturn null;\r\n\r\n\t\treturn store.getIdByIndex(index);\r\n\t}, gantt);\r\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\r\n\t\tvar gridDataSizes = gantt.$grid_data.getBoundingClientRect();\r\n\t\tvar maxBottom = gridDataSizes.height + gridDataSizes.y + (grid.$state.scrollTop || 0) + window.scrollY;\r\n\t\tvar dd = dnd.config;\r\n\t\tvar pos = dnd._getGridPos(e);\r\n\r\n\t\tgantt._waiAria.reorderMarkerAttr(dd.marker);\r\n\r\n\t\tvar config = grid.$getConfig(),\r\n\t\t\tstore = getStore();\r\n\r\n\t\t// setting position of row\r\n\t\tif (pos.y < maxBottom) {\r\n\t\t\tdd.marker.style.top = pos.y + \"px\";\r\n\t\t} else {\r\n\t\t\tdd.marker.style.top = maxBottom + \"px\";\r\n\t\t}\r\n\t\tdd.marker.style.left = pos.x + 10 + \"px\";\r\n\t\tconst containerSize = domHelpers.getNodePosition(gantt.$root);\r\n\t\tif (pos.width > containerSize.width){\r\n\t\t\tdd.marker.style.width = containerSize.width - 10 - 2 + \"px\";\r\n\t\t\tdd.marker.style.overflow = \"hidden\";\t\r\n\t\t}\r\n\r\n\t\t// highlight row when mouseover\r\n\t\tvar item = store.getItem(dnd.config.id);\r\n\t\tvar targetY = dnd._getTargetY(e);\r\n\t\tvar el = dnd._getTaskByY(targetY, store.getIndexById(item.id));\r\n\r\n\t\tif (!store.exists(el)) {\r\n\t\t\tel = dnd.lastTaskOfLevel(config.order_branch_free ? item.$level : 0);\r\n\t\t\tif (el == dnd.config.id) {\r\n\t\t\t\tel = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction allowedLevel(next, item) {\r\n\t\t\treturn (!(store.isChildOf(over.id, item.id)) && (next.$level == item.$level || config.order_branch_free));\r\n\t\t}\r\n\r\n\t\tif (store.exists(el)) {\r\n\t\t\tvar over = store.getItem(el);\r\n\r\n\t\t\tvar itemTop = grid.getItemTop(over.id);\r\n\t\t\tvar itemHeight = grid.getItemHeight(over.id);\r\n\t\t\tif (itemTop + itemHeight / 2 < targetY) {\r\n\t\t\t\t//hovering over bottom part of item, check can be drop to bottom\r\n\t\t\t\tvar index = store.getIndexById(over.id);\r\n\t\t\t\tvar nextId = store.getNext(over.id);//adds +1 when hovering over placeholder\r\n\t\t\t\tvar next = store.getItem(nextId);\r\n\t\t\t\tif (checkPlaceholderTask(nextId)){\r\n\t\t\t\t\tvar prevId = store.getPrev(next.id);\r\n\t\t\t\t\tnext = store.getItem(prevId);\r\n\t\t\t\t}\r\n\t\t\t\tif (next) {\r\n\t\t\t\t\tif (next.id != item.id) {\r\n\t\t\t\t\t\tover = next; //there is a valid target\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (config.order_branch_free) {\r\n\t\t\t\t\t\t\tif (!(store.isChildOf(item.id, over.id) && store.getChildren(over.id).length == 1))\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tstore.move(item.id, store.getBranchIndex(over.id) + 1, store.getParent(over.id));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//we at end of the list, check and drop at the end of list\r\n\t\t\t\t\tnextId = store.getIdByIndex(index);\r\n\t\t\t\t\tnext = store.getItem(nextId);\r\n\r\n\t\t\t\t\tif (checkPlaceholderTask(nextId)){\r\n\t\t\t\t\t\tvar prevId = store.getPrev(next.id);\r\n\t\t\t\t\t\tnext = store.getItem(prevId);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (allowedLevel(next, item) && next.id != item.id) {\r\n\t\t\t\t\t\tstore.move(item.id, -1, store.getParent(next.id));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (config.order_branch_free) {\r\n\t\t\t\tif (over.id != item.id && allowedLevel(over, item) && !checkPlaceholderTask(over.id)) {\r\n\t\t\t\t\tif (!store.hasChild(over.id)) {\r\n\t\t\t\t\t\tover.$open = true;\r\n\t\t\t\t\t\tstore.move(item.id, -1, over.id);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (store.getIndexById(over.id) || itemHeight / 3 < targetY) return;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//if item is on different level, check the one before it\r\n\t\t\tvar index = store.getIndexById(over.id),\r\n\t\t\t\tprevId = store.getIdByIndex(index - 1);\r\n\r\n\t\t\tvar prev = store.getItem(prevId);\r\n\r\n\t\t\tvar shift = 1;\r\n\t\t\twhile ((!prev || prev.id == over.id) && index - shift >= 0) {\r\n\r\n\t\t\t\tprevId = store.getIdByIndex(index - shift);\r\n\t\t\t\tprev = store.getItem(prevId);\r\n\t\t\t\tshift++;\r\n\t\t\t}\r\n\r\n\t\t\tif (item.id == over.id || checkPlaceholderTask(over.id)) return;\r\n\t\t\t//replacing item under cursor\r\n\t\t\tif (allowedLevel(over, item) && item.id != over.id) {\r\n\t\t\t\tstore.move(item.id, 0, 0, over.id);\r\n\r\n\t\t\t} else if (over.$level == item.$level - 1 && !store.getChildren(over.id).length) {\r\n\t\t\t\tstore.move(item.id, 0, over.id);\r\n\r\n\t\t\t} else if (prev && (allowedLevel(prev, item)) && (item.id != prev.id)) {\r\n\t\t\t\tstore.move(item.id, -1, store.getParent(prev.id));\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\r\n\t\tvar store = getStore();\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\t\ttask.$transparent = false;\r\n\t\ttask.$open = dnd.config.initial_open_state;\r\n\r\n\t\tif (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, dnd.config.parent, dnd.config.index]) === false) {\r\n\t\t\tstore.move(dnd.config.id, dnd.config.index, dnd.config.parent);\r\n\t\t\ttask.$drop_target = null;\r\n\t\t} else {\r\n\t\t\tthis.callEvent(\"onRowDragEnd\", [dnd.config.id, task.$drop_target]);\r\n\t\t}\r\n\t\tgantt.render();\r\n\t\tthis.refreshData();\r\n\t}, gantt));\r\n}\r\n\r\nexport default {\r\n\tinit: _init_dnd\r\n};","/**\r\n * The state object for order branch drag and drop\r\n */\r\n\r\nimport * as utils from \"../../../../utils/utils\";\r\n\r\nexport default {\r\n\tcreateDropTargetObject: function createDropTargetObject(parent) {\r\n\t\tvar res = {\r\n\t\t\ttargetParent: null,\r\n\t\t\ttargetIndex: 0,\r\n\t\t\ttargetId: null,\r\n\t\t\tchild: false,\r\n\t\t\tnextSibling: false,\r\n\t\t\tprevSibling: false\r\n\t\t};\r\n\r\n\t\tif (parent) {\r\n\t\t\tutils.mixin(res, parent, true);\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\tnextSiblingTarget: function nextSiblingTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = targetTaskId;\r\n\t\tresult.nextSibling = true;\r\n\t\tresult.targetParent = store.getParent(result.targetId);\r\n\t\tresult.targetIndex = store.getBranchIndex(result.targetId);\r\n\t\tif(store.getParent(dndTaskId) != result.targetParent || result.targetIndex < store.getBranchIndex(dndTaskId)){\r\n\t\t\tresult.targetIndex += 1;\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\tprevSiblingTarget: function prevSiblingTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = targetTaskId;\r\n\t\tresult.prevSibling = true;\r\n\t\tresult.targetParent = store.getParent(result.targetId);\r\n\t\tresult.targetIndex = store.getBranchIndex(result.targetId);\r\n\t\tif(store.getParent(dndTaskId) == result.targetParent && result.targetIndex > store.getBranchIndex(dndTaskId)){\r\n\t\t\tresult.targetIndex -= 1;\r\n\t\t}\r\n\t\treturn result;\r\n\t},\r\n\tfirstChildTarget: function firstChildTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = targetTaskId;\r\n\t\tresult.targetParent = result.targetId;\r\n\t\tresult.targetIndex = 0;\r\n\t\tresult.child = true;\r\n\t\treturn result;\r\n\t},\r\n\tlastChildTarget: function lastChildTarget(dndTaskId, targetTaskId, store) {\r\n\t\tvar children = store.getChildren(targetTaskId);\r\n\t\tvar result = this.createDropTargetObject();\r\n\t\tresult.targetId = children[children.length - 1];\r\n\t\tresult.targetParent = targetTaskId;\r\n\t\tresult.targetIndex = children.length;\r\n\t\tresult.nextSibling = true;\r\n\t\treturn result;\r\n\t}\r\n};","/**\r\n * resolve dnd position of the task when gantt.config.order_branch_free = false\r\n */\r\n\r\nimport dropTarget from \"./drop_target\";\r\n\r\nfunction getLast(store){\r\n\tvar current = store.getNext();\r\n\twhile(store.exists(current)){\r\n\r\n\t\tvar next = store.getNext(current);\r\n\t\tif(!store.exists(next)){\r\n\t\t\treturn current;\r\n\t\t}else{\r\n\t\t\tcurrent = next;\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction findClosesTarget(dndTaskId, taskId, allowedLevel, store, up){\r\n\tvar prev = taskId;\r\n\twhile(store.exists(prev)){\r\n\t\tvar targetLevel = store.calculateItemLevel(store.getItem(prev));\r\n\t\tif((targetLevel === allowedLevel || targetLevel === (allowedLevel - 1)) && store.getBranchIndex(prev) > -1){\r\n\t\t\tbreak;\r\n\t\t}else {\r\n\t\t\tprev = up ? store.getPrev(prev) : store.getNext(prev);\r\n\t\t}\r\n\t}\r\n\r\n\tif(store.exists(prev)){\r\n\t\tif(store.calculateItemLevel(store.getItem(prev)) === allowedLevel){\r\n\t\t\treturn up ? dropTarget.nextSiblingTarget(dndTaskId, prev, store) : dropTarget.prevSiblingTarget(dndTaskId, prev, store);\r\n\t\t}else{\r\n\t\t\treturn dropTarget.firstChildTarget(dndTaskId, prev, store);\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction findTargetAbove(dndTaskId, taskId, allowedLevel, store){\r\n\treturn findClosesTarget(dndTaskId, taskId, allowedLevel, store, true);\r\n}\r\nfunction findTargetBelow(dndTaskId, taskId, allowedLevel, store){\r\n\treturn findClosesTarget(dndTaskId, taskId, allowedLevel, store, false);\r\n}\r\n\r\nexport default function getSameLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store, level){\r\n\tvar result;\r\n\tif(targetTaskId !== store.$getRootId()){\r\n\t\tvar targetTask = store.getItem(targetTaskId);\r\n\t\tvar targetLevel = store.calculateItemLevel(targetTask);\r\n\t\tif(targetLevel === level){\r\n\t\t\tvar prevSibling = store.getPrevSibling(targetTaskId);\r\n\t\t\tif(relTargetPos < 0.5 && !prevSibling){\r\n\t\t\t\tresult = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t\t}else{\r\n\t\t\t\tif(relTargetPos < 0.5){\r\n\t\t\t\t\ttargetTaskId = prevSibling;\r\n\t\t\t\t}\r\n\t\t\t\tresult = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t\t}\r\n\t\t}else if(targetLevel > level){\r\n\t\t\tstore.eachParent(function(parent){\r\n\t\t\t\tif(store.calculateItemLevel(parent) === level){\r\n\t\t\t\t\ttargetTaskId = parent.id;\r\n\t\t\t\t}\r\n\t\t\t}, targetTask); \r\n\t\t\tresult = findTargetAbove(dndTaskId, targetTaskId, level, store);\r\n\t\t}else{\r\n\t\t\tvar targetAbove = findTargetAbove(dndTaskId, targetTaskId, level, store);\r\n\t\t\tvar targetBelow = findTargetBelow(dndTaskId, targetTaskId, level, store);\r\n\t\t\tresult = (relTargetPos < 0.5) ? targetAbove : targetBelow;\r\n\t\t}\r\n\t}else{\r\n\t\tvar rootId = store.$getRootId();\r\n\t\tvar rootLevel = store.getChildren(rootId);\r\n\t\tresult = dropTarget.createDropTargetObject();\r\n\t\tif(rootLevel.length && eventTop >= 0){\r\n\t\t\tresult = findTargetAbove(dndTaskId, getLast(store), level, store);\r\n\t\t}else{\r\n\t\t\tresult = findTargetBelow(dndTaskId, rootId, level, store);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n","import * as domHelpers from \"../../utils/dom_helpers\";\r\n\r\n/**\r\n * methods for highlighting current drag and drop position\r\n */\r\n\r\nfunction highlightPosition(target, root, grid){\r\n\tvar markerPos = getTaskMarkerPosition(target, grid);\r\n\t// setting position of row\r\n\troot.marker.style.left = markerPos.x + 9 + \"px\";\r\n\troot.marker.style.width = markerPos.width + \"px\";\r\n\troot.marker.style.overflow = \"hidden\";\r\n\tvar markerLine = root.markerLine;\r\n\tif(!markerLine){\r\n\t\tmarkerLine = document.createElement(\"div\");\r\n\t\tmarkerLine.className = \"gantt_drag_marker gantt_grid_dnd_marker\";\r\n\t\tmarkerLine.innerHTML = \"
\";\r\n\t\tmarkerLine.style.pointerEvents = \"none\";\r\n\t}\r\n\r\n\tif(target.child){\r\n\t\thighlightFolder(target, markerLine, grid);\r\n\t}else{\r\n\t\thighlightRow(target, markerLine, grid);\r\n\t}\r\n\r\n\tif(!root.markerLine){\r\n\t\tdocument.body.appendChild(markerLine);\r\n\t\troot.markerLine = markerLine;\r\n\t}\r\n}\r\n\r\nfunction removeLineHighlight(root){\r\n\tif(root.markerLine && root.markerLine.parentNode){\r\n\t\troot.markerLine.parentNode.removeChild(root.markerLine);\r\n\t}\r\n\troot.markerLine = null;\r\n}\r\n\r\nfunction highlightRow(target, markerLine, grid){\r\n\tvar linePos = getLineMarkerPosition(target, grid);\r\n\tvar maxBottom = grid.$grid_data.getBoundingClientRect().bottom + window.scrollY;\r\n\r\n\tmarkerLine.innerHTML = \"
\";\r\n\tmarkerLine.style.left = linePos.x + \"px\";\r\n\tmarkerLine.style.height = \"4px\";\r\n\r\n\tvar markerLineTop = linePos.y - 2;\r\n\tmarkerLine.style.top = markerLineTop + \"px\";\r\n\tmarkerLine.style.width = linePos.width + \"px\";\r\n\r\n\tif (markerLineTop > maxBottom) {\r\n\t\tmarkerLine.style.top = maxBottom + 'px';\r\n\t}\r\n\r\n\treturn markerLine;\r\n}\r\nfunction highlightFolder(target, markerFolder, grid){\r\n\tvar id = target.targetParent;\r\n\tvar pos = gridToPageCoordinates({x: 0, y: grid.getItemTop(id)}, grid);\r\n\tvar maxBottom = grid.$grid_data.getBoundingClientRect().bottom + window.scrollY;\r\n\r\n\tlet folderHighlightWidth = setWidthWithinContainer(grid.$gantt, grid.$grid_data.offsetWidth);\t\r\n\r\n\tmarkerFolder.innerHTML = \"
\";\r\n\tmarkerFolder.style.width = folderHighlightWidth + \"px\";\r\n\tmarkerFolder.style.top = pos.y + \"px\";\r\n\tmarkerFolder.style.left = pos.x + \"px\";\r\n\tmarkerFolder.style.height = grid.getItemHeight(id) + \"px\";\r\n\tif (pos.y > maxBottom) {\r\n\t\tmarkerFolder.style.top = maxBottom + 'px';\r\n\t}\r\n\r\n\treturn markerFolder;\r\n}\r\n\r\nfunction getLineMarkerPosition(target, grid){\r\n\tvar store = grid.$config.rowStore;\r\n\tvar pos = {x:0, y:0};\r\n\tvar indentNode = grid.$grid_data.querySelector(\".gantt_tree_indent\");\r\n\tvar indent = 15;\r\n\tvar level = 0;\r\n\tif(indentNode){\r\n\t\tindent = indentNode.offsetWidth;\r\n\t}\r\n\tvar iconWidth = 40;\r\n\tif(target.targetId !== store.$getRootId()){\r\n\t\tvar itemTop = grid.getItemTop(target.targetId);\r\n\t\tvar itemHeight = grid.getItemHeight(target.targetId);\r\n\t\tlevel = store.exists(target.targetId) ? store.calculateItemLevel(store.getItem(target.targetId)) : 0;\r\n\r\n\t\tif(target.prevSibling){\r\n\t\t\tpos.y = itemTop;\r\n\t\t}else if(target.nextSibling){\r\n\t\t\tvar childCount = 0;\r\n\t\t\tstore.eachItem(function(child){\r\n\t\t\t\tif(store.getIndexById(child.id) !== -1)\r\n\t\t\t\t\tchildCount++;\r\n\t\t\t}, target.targetId);\r\n\r\n\t\t\tpos.y = itemTop + itemHeight + childCount*itemHeight;\r\n\t\t}else {\r\n\t\t\tpos.y = itemTop + itemHeight;\r\n\t\t\tlevel += 1;\r\n\t\t}\r\n\t}\r\n\tpos.x = iconWidth + level * indent;\r\n\tpos.width = setWidthWithinContainer(grid.$gantt, Math.max(grid.$grid_data.offsetWidth - pos.x, 0), pos.x);\r\n\treturn gridToPageCoordinates(pos, grid);\r\n}\r\n\r\nfunction gridToPageCoordinates(pos, grid){\r\n\tvar gridPos = domHelpers.getNodePosition(grid.$grid_data);\r\n\tpos.x += gridPos.x + grid.$grid.scrollLeft;\r\n\tpos.y += gridPos.y - grid.$grid_data.scrollTop;\r\n\treturn pos;\r\n}\r\n\r\nfunction getTaskMarkerPosition(e, grid) {\r\n\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\r\n\tvar ePos = domHelpers.getRelativeEventPosition(e, grid.$grid_data);\r\n\t// row offset\r\n\tvar x = pos.x + grid.$grid.scrollLeft;\r\n\tvar y = ePos.y - 10;\r\n\r\n\tvar rowHeight = grid.getItemHeight(e.targetId);\r\n\t// prevent moving row out of grid_data container\r\n\tif (y < pos.y) y = pos.y;\r\n\tvar gridHeight = grid.getTotalHeight();\r\n\tif (y > pos.y + gridHeight - rowHeight) y = pos.y + gridHeight - rowHeight;\r\n\r\n\tpos.x = x;\r\n\tpos.y = y;\r\n\tpos.width = setWidthWithinContainer(grid.$gantt, pos.width, 9);\r\n\treturn pos;\r\n}\r\n\r\nfunction setWidthWithinContainer(gantt, width, offset = 0){\r\n\tconst containerSize = domHelpers.getNodePosition(gantt.$root);\r\n\tif (width > containerSize.width){\r\n\t\twidth = containerSize.width - offset - 2;\r\n\t}\r\n\treturn width;\r\n}\r\n\r\nexport default {\r\n\tremoveLineHighlight: removeLineHighlight,\r\n\thighlightPosition: highlightPosition\r\n};\r\n","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport dropTarget from \"./tasks_grid_dnd_marker_helpers/drop_target\";\r\nimport getLockedLevelTarget from \"./tasks_grid_dnd_marker_helpers/locked_level\";\r\nimport getMultiLevelTarget from \"./tasks_grid_dnd_marker_helpers/multi_level\";\r\nimport higlighter from \"./tasks_grid_dnd_marker_helpers/highlight\";\r\nimport isPlaceholderTask from \"../../../utils/placeholder_task\";\r\n\r\nfunction _init_dnd(gantt, grid) {\r\n\tvar DnD = gantt.$services.getService(\"dnd\");\r\n\r\n\tif(!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)){\r\n\t\treturn;\r\n\t}\r\n\r\n\tfunction locate(e){\r\n\t\treturn domHelpers.locateAttribute(e, grid.$config.item_attribute);\r\n\t}\r\n\r\n\tfunction getStore(){\r\n\t\treturn gantt.getDatastore(grid.$config.bind);\r\n\t}\r\n\r\n\tfunction checkPlaceholderTask(id){\r\n\t\treturn isPlaceholderTask(id, gantt, getStore());\r\n\t}\r\n\r\n\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\r\n\tif (gantt.defined(grid.$getConfig().dnd_sensitivity))\r\n\t\tdnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\r\n\r\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\t\tif (!el) return false;\r\n\t\tif (gantt.hideQuickInfo) gantt.hideQuickInfo();\r\n\t\tif (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar id = el.getAttribute(grid.$config.item_attribute);\r\n\t\tvar datastore = grid.$config.rowStore;\r\n\t\tvar task = datastore.getItem(id);\r\n\r\n\t\tif (gantt.isReadonly(task) || checkPlaceholderTask(id))\r\n\t\t\treturn false;\r\n\r\n\t\tdnd.config.initial_open_state = task.$open;\r\n\t\tif (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\r\n\t\tvar el = locate(e);\r\n\r\n\t\tdnd.config.marker.innerHTML = el.outerHTML;\r\n\t\tvar element = dnd.config.marker.firstChild;\r\n\t\tif(element){\r\n\t\t\tdnd.config.marker.style.opacity = 0.4;\r\n\t\t\telement.style.position = \"static\";\r\n\t\t\telement.style.pointerEvents = \"none\";\r\n\t\t}\r\n\r\n\t\tdnd.config.id = el.getAttribute(grid.$config.item_attribute);\r\n\r\n\t\tvar store = grid.$config.rowStore;\r\n\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\t\tdnd.config.level = store.calculateItemLevel(task);\r\n\t\tdnd.config.drop_target = dropTarget.createDropTargetObject({\r\n\t\t\ttargetParent: store.getParent(task.id),\r\n\t\t\ttargetIndex: store.getBranchIndex(task.id),\r\n\t\t\ttargetId: task.id,\r\n\t\t\tnextSibling: true\r\n\t\t});\r\n\r\n\t\ttask.$open = false;\r\n\t\ttask.$transparent = true;\r\n\t\tthis.refreshData();\r\n\t}, gantt));\r\n\r\n\tfunction getTargetTaskId(e){\r\n\t\tvar y = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\r\n\t\tvar store = grid.$config.rowStore;\r\n\r\n\t\tif (!document.doctype){\r\n\t\t\ty += window.scrollY;\r\n\t\t}\r\n\t\ty = y || 0;\r\n\r\n\t\t// limits for the marker according to the layout layer\r\n\t\tvar scrollPos = grid.$state.scrollTop || 0;\r\n\t\tvar maxBottom = gantt.$grid_data.getBoundingClientRect().height + scrollPos + window.scrollY;\r\n\t\tvar minTop = scrollPos;\r\n\r\n\t\tvar firstVisibleTaskIndex = grid.getItemIndexByTopPosition(grid.$state.scrollTop);\r\n\t\tif (!store.exists(firstVisibleTaskIndex)){\r\n\t\t\tfirstVisibleTaskIndex = store.countVisible() - 1;\r\n\t\t}\r\n\t\tif (firstVisibleTaskIndex < 0) {\r\n\t\t\treturn store.$getRootId();\r\n\t\t}\r\n\r\n\t\tvar firstVisibleTaskId = store.getIdByIndex(firstVisibleTaskIndex);\r\n\r\n\t\tvar firstVisibleTaskPos = grid.$state.scrollTop / grid.getItemHeight(firstVisibleTaskId);\r\n\t\tvar hiddenTaskPart = firstVisibleTaskPos - Math.floor(firstVisibleTaskPos);\r\n\t\tif (hiddenTaskPart > 0.1 && hiddenTaskPart < 0.9) {\r\n\t\t\tmaxBottom = maxBottom - grid.getItemHeight(firstVisibleTaskId) * hiddenTaskPart;\r\n\t\t\tminTop = minTop + grid.getItemHeight(firstVisibleTaskId) * (1 - hiddenTaskPart);\r\n\t\t}\r\n\r\n\t\t// GS-715. The placeholder task row shouldn't be draggable below the Gantt container\r\n\t\tconst gridPosition = domHelpers.getNodePosition(grid.$grid_data);\r\n\t\tconst gridBottom = gridPosition.y + gridPosition.height;\r\n\t\tconst placeholderRowHeight = dnd.config.marker.offsetHeight;\r\n\t\tif (y + placeholderRowHeight + window.scrollY >= maxBottom){\r\n\t\t\tdnd.config.marker.style.top = gridBottom - placeholderRowHeight\t+ \"px\";\r\n\t\t}\r\n\r\n\t\tif (y >= maxBottom) {\r\n\t\t\ty = maxBottom;\r\n\t\t} else if (y <= minTop) {\r\n\t\t\ty = minTop;\r\n\t\t\tdnd.config.marker.style.top = gridPosition.y + \"px\";\r\n\t\t}\r\n\r\n\t\tvar index = grid.getItemIndexByTopPosition(y);\r\n\r\n\t\tif (index > store.countVisible() - 1 || index < 0) {\r\n\t\t\treturn store.$getRootId();\r\n\t\t}\r\n\r\n\t\tvar targetId = store.getIdByIndex(index);\r\n\t\tif (checkPlaceholderTask(targetId)) {\r\n\t\t\treturn store.getPrevSibling(targetId);\r\n\t\t}\r\n\r\n\t\treturn store.getIdByIndex(index);\r\n\t}\r\n\r\n\tfunction getDropPosition(e){\r\n\t\tvar targetTaskId = getTargetTaskId(e);\r\n\t\tvar relTargetPos = null;\r\n\t\tvar store = grid.$config.rowStore;\r\n\t\tvar config = grid.$getConfig();\r\n\t\tvar lockLevel = !config.order_branch_free;\r\n\r\n\t\tvar eventTop = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\r\n\t\tif (!document.doctype){\r\n\t\t\teventTop += window.scrollY;\r\n\t\t}\r\n\r\n\t\tif(targetTaskId !== store.$getRootId()) {\r\n\t\t\tvar rowTop = grid.getItemTop(targetTaskId);\r\n\t\t\tvar rowHeight = grid.getItemHeight(targetTaskId);\r\n\t\t\trelTargetPos = (eventTop - rowTop) / rowHeight;\r\n\t\t}\r\n\r\n\t\tvar result;\r\n\t\tif(!lockLevel){\r\n\t\t\tresult = getMultiLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store);\r\n\t\t}else{\r\n\t\t\tresult = getLockedLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store, dnd.config.level);\r\n\t\t\tif(result && result.targetParent && checkPlaceholderTask(result.targetParent)){\r\n\t\t\t\ttargetTaskId = store.getPrevSibling(result.targetParent);\r\n\t\t\t\tresult = getLockedLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store, dnd.config.level);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\r\n\t\tvar target = getDropPosition(e);\r\n\r\n\t\tif(!target ||\r\n\t\t\tgantt.callEvent(\"onBeforeRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]) === false){\r\n\t\t\t\ttarget = dropTarget.createDropTargetObject(dnd.config.drop_target);\r\n\t\t\t}\r\n\r\n\t\thiglighter.highlightPosition(target, dnd.config, grid);\r\n\t\tdnd.config.drop_target = target;\r\n\t\tgantt._waiAria.reorderMarkerAttr(dnd.config.marker);\r\n\r\n\t\tthis.callEvent(\"onRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]);\r\n\t\treturn true;\r\n\t}, gantt));\r\n\r\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\r\n\t\tvar store = grid.$config.rowStore;\r\n\t\tvar task = store.getItem(dnd.config.id);\r\n\r\n\t\thiglighter.removeLineHighlight(dnd.config);\r\n\r\n\t\ttask.$transparent = false;\r\n\t\ttask.$open = dnd.config.initial_open_state;\r\n\t\tvar target = dnd.config.drop_target;\r\n\r\n\t\tif (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]) === false) {\r\n\t\t\ttask.$drop_target = null;\r\n\t\t} else {\r\n\t\t\tstore.move(dnd.config.id, target.targetIndex, target.targetParent);\r\n\t\t\tgantt.render();\r\n\t\t\tthis.callEvent(\"onRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]);\r\n\t\t}\r\n\t\tstore.refresh(task.id);\r\n\t}, gantt));\r\n}\r\n\r\nexport default {\r\n\tinit: _init_dnd\r\n};","/**\r\n * resolve dnd position of the task when gantt.config.order_branch_free = true\r\n */\r\n\r\nimport dropTarget from \"./drop_target\";\r\n\r\nexport default function getMultiLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store){\r\n\tvar result;\r\n\r\n\tif(targetTaskId !== store.$getRootId()){\r\n\t\tif(relTargetPos < 0.25){\r\n\t\t\tresult = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t}else if(relTargetPos > 0.60 && !(store.hasChild(targetTaskId) && store.getItem(targetTaskId).$open)){\r\n\t\t\tresult = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\r\n\t\t}else {\r\n\t\t\tresult = dropTarget.firstChildTarget(dndTaskId, targetTaskId, store);\r\n\t\t}\r\n\t}else{\r\n\t\tvar rootId = store.$getRootId();\r\n\t\tif(store.hasChild(rootId) && eventTop >= 0){\r\n\t\t\tresult = dropTarget.lastChildTarget(dndTaskId, rootId, store);\r\n\t\t}else{\r\n\t\t\tresult = dropTarget.firstChildTarget(dndTaskId, rootId, store);\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n};","import * as utils from \"../../../utils/utils\";\r\nimport rowDnd from \"./tasks_grid_dnd\";\r\nimport rowDndMarker from \"./tasks_grid_dnd_marker\";\r\nimport mouseEventContainer from \"../mouse_event_container\";\r\n\r\nvar initializer = (function(){\r\n\treturn function(gantt){\r\n\t\treturn {\r\n\t\t\tonCreated: function (grid) {\r\n\t\t\t\tgrid.$config = utils.mixin(grid.$config, {\r\n\t\t\t\t\tbind: \"task\"\r\n\t\t\t\t});\r\n\t\t\t\tif(grid.$config.id == \"grid\") {\r\n\t\t\t\t\tthis.extendGantt(grid);\r\n\t\t\t\t\tgantt.ext.inlineEditors = gantt.ext._inlineEditors.createEditors(grid);\r\n\t\t\t\t\tgantt.ext.inlineEditors.init();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._mouseDelegates = mouseEventContainer(gantt);\r\n\t\t\t},\r\n\t\t\tonInitialized: function (grid) {\r\n\t\t\t\tvar config = grid.$getConfig();\r\n\t\t\t\tif (config.order_branch) {\r\n\t\t\t\t\tif(config.order_branch == \"marker\"){\r\n\t\t\t\t\t\trowDndMarker.init(grid.$gantt, grid);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\trowDnd.init(grid.$gantt, grid);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.initEvents(grid, gantt);\r\n\t\t\t\tif(grid.$config.id == \"grid\") {\r\n\t\t\t\t\tthis.extendDom(grid);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonDestroyed: function (grid) {\r\n\t\t\t\tif(grid.$config.id == \"grid\") {\r\n\t\t\t\t\tgantt.ext.inlineEditors.destructor();\r\n\t\t\t\t}\r\n\t\t\t\tthis.clearEvents(grid, gantt);\r\n\t\t\t},\r\n\r\n\t\t\tinitEvents: function (grid, gantt) {\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_row\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar config = grid.$getConfig();\r\n\t\t\t\t\tif (id !== null) {\r\n\t\t\t\t\t\tvar task = this.getTask(id);\r\n\t\t\t\t\t\tif (config.scroll_on_click && !gantt._is_icon_open_click(e))\r\n\t\t\t\t\t\t\tthis.showDate(task.start_date);\r\n\t\t\t\t\t\tgantt.callEvent(\"onTaskRowClick\", [id, trg]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, gantt), grid.$grid);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_grid_head_cell\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar column = trg.getAttribute(\"data-column-id\");\r\n\r\n\t\t\t\t\tif (!gantt.callEvent(\"onGridHeaderClick\", [column, e]))\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\tvar config = grid.$getConfig();\r\n\r\n\t\t\t\t\tif (column == \"add\") {\r\n\t\t\t\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\t\t\t\tmouseEvents.callHandler(\"click\", \"gantt_add\", grid.$grid, [e, config.root_id]);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (config.sort && column) { // GS-929: if there is no column name, we cannot sort the column\r\n\t\t\t\t\t\tvar sorting_method = column,\r\n\t\t\t\t\t\t\tconf;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < config.columns.length; i++) {\r\n\t\t\t\t\t\t\tif (config.columns[i].name == column) {\r\n\t\t\t\t\t\t\t\tconf = config.columns[i];\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (conf && conf.sort !== undefined && conf.sort !== true) {\r\n\t\t\t\t\t\t\tsorting_method = conf.sort;\r\n\r\n\t\t\t\t\t\t\tif (!sorting_method) { // column sort property 'false', no sorting\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar sort = (this._sort && this._sort.direction && this._sort.name == column) ? this._sort.direction : \"desc\";\r\n\t\t\t\t\t\t// invert sort direction\r\n\t\t\t\t\t\tsort = (sort == \"desc\") ? \"asc\" : \"desc\";\r\n\t\t\t\t\t\tthis._sort = {\r\n\t\t\t\t\t\t\tname: column,\r\n\t\t\t\t\t\t\tdirection: sort\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tthis.sort(sorting_method, sort == \"desc\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}, gantt), grid.$grid);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_add\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar config = grid.$getConfig();\r\n\t\t\t\t\tif (config.readonly) return;\r\n\r\n\t\t\t\t\tvar item = {};\r\n\t\t\t\t\tthis.createTask(item, id ? id : gantt.config.root_id);\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}, gantt), grid.$grid);\r\n\r\n\t\t\t},\r\n\r\n\t\t\tclearEvents: function(grid, gantt){\r\n\t\t\t\tthis._mouseDelegates.destructor();\r\n\t\t\t\tthis._mouseDelegates = null;\r\n\t\t\t},\r\n\r\n\t\t\textendDom: function(grid){\r\n\t\t\t\tgantt.$grid = grid.$grid;\r\n\t\t\t\tgantt.$grid_scale = grid.$grid_scale;\r\n\t\t\t\tgantt.$grid_data = grid.$grid_data;\r\n\t\t\t},\r\n\t\t\textendGantt: function(grid){\r\n\t\t\t\tgantt.getGridColumns = gantt.bind(grid.getGridColumns, grid);\r\n\r\n\t\t\t\tgrid.attachEvent(\"onColumnResizeStart\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResizeStart\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onColumnResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onColumnResizeEnd\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResizeEnd\", arguments);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgrid.attachEvent(\"onColumnResizeComplete\", function(columns, totalWidth){\r\n\t\t\t\t\tgantt.config.grid_width = totalWidth;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgrid.attachEvent(\"onBeforeRowResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onBeforeRowResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onRowResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onRowResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onBeforeRowResizeEnd\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onBeforeRowResizeEnd\", arguments);\r\n\t\t\t\t});\r\n\t\t\t\tgrid.attachEvent(\"onAfterRowResize\", function(){\r\n\t\t\t\t\treturn gantt.callEvent(\"onAfterRowResize\", arguments);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n})();\r\n\r\nexport default initializer;","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as utils from \"../../../utils/utils\";\r\nimport timeout from \"../../../utils/timeout\";\r\nimport * as helpers from \"../../../utils/helpers\";\r\n\r\nfunction createTaskDND(timeline, gantt) {\r\n\tvar services = gantt.$services;\r\n\treturn {\r\n\t\tdrag: null,\r\n\t\tdragMultiple: {},\r\n\t\t_events: {\r\n\t\t\tbefore_start: {},\r\n\t\t\tbefore_finish: {},\r\n\t\t\tafter_finish: {}\r\n\t\t},\r\n\t\t_handlers: {},\r\n\t\tinit: function() {\r\n\t\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t\t\tthis.clear_drag_state();\r\n\t\t\tvar drag = gantt.config.drag_mode;\r\n\t\t\tthis.set_actions();\r\n\r\n\t\t\tvar stateService = services.getService(\"state\");\r\n\t\t\tstateService.registerProvider(\"tasksDnd\", utils.bind(function() {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdrag_id : this.drag ? this.drag.id : undefined,\r\n\t\t\t\t\tdrag_mode : this.drag ? this.drag.mode : undefined,\r\n\t\t\t\t\tdrag_from_start : this.drag ? this.drag.left : undefined\r\n\t\t\t\t};\r\n\t\t\t}, this));\r\n\r\n\t\t\tvar evs = {\r\n\t\t\t\t\"before_start\": \"onBeforeTaskDrag\",\r\n\t\t\t\t\"before_finish\": \"onBeforeTaskChanged\",\r\n\t\t\t\t\"after_finish\": \"onAfterTaskDrag\"\r\n\t\t\t};\r\n\t\t\t//for now, all drag operations will trigger the same events\r\n\t\t\tfor (var stage in this._events) {\r\n\t\t\t\tfor (var mode in drag) {\r\n\t\t\t\t\tthis._events[stage][mode] = evs[stage];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._handlers[drag.move] = this._move;\r\n\t\t\tthis._handlers[drag.resize] = this._resize;\r\n\t\t\tthis._handlers[drag.progress] = this._resize_progress;\r\n\t\t},\r\n\t\tset_actions: function() {\r\n\t\t\tvar data = timeline.$task_data;\r\n\t\t\tthis._domEvents.attach(data, \"mousemove\", gantt.bind(function(e) {\r\n\t\t\t\tthis.on_mouse_move(e);\r\n\t\t\t}, this));\r\n\t\t\tthis._domEvents.attach(data, \"mousedown\", gantt.bind(function(e) {\r\n\t\t\t\tthis.on_mouse_down(e);\r\n\t\t\t}, this));\r\n\t\t\tthis._domEvents.attach(document.body, \"mouseup\", gantt.bind(function(e) {\r\n\t\t\t\tthis.on_mouse_up(e);\r\n\t\t\t}, this));\r\n\t\t},\r\n\r\n\t\tclear_drag_state: function() {\r\n\t\t\tthis.drag = {\r\n\t\t\t\tid: null,\r\n\t\t\t\tmode: null,\r\n\t\t\t\tpos: null,\r\n\t\t\t\tstart_x: null,\r\n\t\t\t\tstart_y: null,\r\n\t\t\t\tobj: null,\r\n\t\t\t\tleft: null\r\n\t\t\t};\r\n\t\t\tthis.dragMultiple = {};\r\n\t\t},\r\n\t\t_resize: function(task, shift, drag) {\r\n\t\t\tvar cfg = timeline.$getConfig();\r\n\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\t\t\tif (drag.left) {\r\n\t\t\t\ttask.start_date = gantt.dateFromPos(coords_x.start + shift);\r\n\t\t\t\tif (!task.start_date) {\r\n\t\t\t\t\ttask.start_date = new Date(gantt.getState().min_date);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttask.end_date = gantt.dateFromPos(coords_x.end + shift);\r\n\t\t\t\tif (!task.end_date) {\r\n\t\t\t\t\ttask.end_date = new Date(gantt.getState().max_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar minDurationInUnits = this._calculateMinDuration(cfg.min_duration, cfg.duration_unit);\r\n\t\t\tif (task.end_date - task.start_date < cfg.min_duration) {\r\n\t\t\t\tif (drag.left)\r\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate(task.end_date, -minDurationInUnits, cfg.duration_unit, task);\r\n\t\t\t\telse\r\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate(task.start_date, minDurationInUnits, cfg.duration_unit, task);\r\n\t\t\t}\r\n\t\t\tgantt._init_task_timing(task);\r\n\t\t},\r\n\t\t_calculateMinDuration: function(duration, unit) {\r\n\t\t\tvar inMs = {\r\n\t\t\t\t\"minute\": 60000,\r\n\t\t\t\t\"hour\": 3600000,\r\n\t\t\t\t\"day\": 86400000,\r\n\t\t\t\t\"week\": 604800000,\r\n\t\t\t\t\"month\": 2419200000,\r\n\t\t\t\t\"year\": 31356000000\r\n\t\t\t};\r\n\t\t\treturn Math.ceil(duration / inMs[unit]);\r\n\t\t},\r\n\t\t_resize_progress: function(task, shift, drag) {\r\n\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar diffValue = !config.rtl ? (drag.pos.x - coords_x.start) : (coords_x.start - drag.pos.x);\r\n\r\n\t\t\tvar diff = Math.max(0, diffValue);\r\n\t\t\ttask.progress = Math.min(1, diff / Math.abs(coords_x.end - coords_x.start));\r\n\t\t},\r\n\t\t_find_max_shift: function(dragItems, shift) {\r\n\t\t\tvar correctShift;\r\n\t\t\tfor (var i in dragItems) {\r\n\t\t\t\tvar drag = dragItems[i];\r\n\t\t\t\tvar task = gantt.getTask(drag.id);\r\n\r\n\t\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\t\t\t\tvar minX = gantt.posFromDate(new Date(gantt.getState().min_date));\r\n\t\t\t\tvar maxX = gantt.posFromDate(new Date(gantt.getState().max_date));\r\n\r\n\t\t\t\tif (coords_x.end + shift > maxX) {\r\n\t\t\t\t\tvar maxShift = maxX - coords_x.end;\r\n\t\t\t\t\tif (maxShift < correctShift || correctShift === undefined) {\r\n\t\t\t\t\t\tcorrectShift = maxShift;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (coords_x.start + shift < minX) {\r\n\t\t\t\t\tvar minShift = minX - coords_x.start;\r\n\t\t\t\t\tif (minShift > correctShift || correctShift === undefined) {\r\n\t\t\t\t\t\tcorrectShift = minShift;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn correctShift;\r\n\t\t},\r\n\t\t_move: function(task, shift, drag, multipleDragShift) {\r\n\t\t\tvar coords_x = this._drag_task_coords(task, drag);\r\n\t\t\tvar new_start = null,\r\n\t\t\tnew_end = null;\r\n\t\t\t// GS-454: If we drag multiple tasks, rely on the dates instead of timeline coordinates\r\n\t\t\tif (multipleDragShift){\r\n\t\t\t\tnew_start = new Date(+drag.obj.start_date + multipleDragShift),\r\n\t\t\t\tnew_end = new Date(+drag.obj.end_date + multipleDragShift);\r\n\t\t\t} else {\r\n\t\t\t\tnew_start = gantt.dateFromPos(coords_x.start + shift),\r\n\t\t\t\tnew_end = gantt.dateFromPos(coords_x.end + shift);\r\n\t\t\t}\r\n\t\t\tif (!new_start) {\r\n\t\t\t\ttask.start_date = new Date(gantt.getState().min_date);\r\n\t\t\t\ttask.end_date = gantt.dateFromPos(gantt.posFromDate(task.start_date) + (coords_x.end - coords_x.start));\r\n\t\t\t} else if (!new_end) {\r\n\t\t\t\ttask.end_date = new Date(gantt.getState().max_date);\r\n\t\t\t\ttask.start_date = gantt.dateFromPos(gantt.posFromDate(task.end_date) - (coords_x.end - coords_x.start));\r\n\t\t\t} else {\r\n\t\t\t\ttask.start_date = new_start;\r\n\t\t\t\ttask.end_date = new_end;\r\n\t\t\t}\r\n\t\t},\r\n\t\t_drag_task_coords: function(t, drag) {\r\n\t\t\tvar start = drag.obj_s_x = drag.obj_s_x || gantt.posFromDate(t.start_date);\r\n\t\t\tvar end = drag.obj_e_x = drag.obj_e_x || gantt.posFromDate(t.end_date);\r\n\t\t\treturn {\r\n\t\t\t\tstart: start,\r\n\t\t\t\tend: end\r\n\t\t\t};\r\n\t\t},\r\n\t\t_mouse_position_change: function(oldPos, newPos) {\r\n\t\t\tvar dx = oldPos.x - newPos.x,\r\n\t\t\t\tdy = oldPos.y - newPos.y;\r\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\r\n\t\t},\r\n\t\t_is_number: function(n) {\r\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\r\n\t\t},\r\n\r\n\t\ton_mouse_move: function(e) {\r\n\t\t\tif (this.drag.start_drag) {\r\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\r\n\r\n\t\t\t\tvar sX = this.drag.start_drag.start_x,\r\n\t\t\t\t\tsY = this.drag.start_drag.start_y;\r\n\r\n\t\t\t\tif ((Date.now() - this.drag.timestamp > 50) ||\r\n\t\t\t\t\t(this._is_number(sX) && this._is_number(sY) && this._mouse_position_change({\r\n\t\t\t\t\t\tx: sX,\r\n\t\t\t\t\t\ty: sY\r\n\t\t\t\t\t}, pos) > 20)) {\r\n\t\t\t\t\tthis._start_dnd(e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar drag = this.drag;\r\n\r\n\t\t\tif (drag.mode) {\r\n\t\t\t\tif (!timeout(this, 40))//limit update frequency\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tthis._update_on_move(e);\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_update_item_on_move: function(shift, id, mode, drag, e, multipleDragShift) {\r\n\t\t\tvar task = gantt.getTask(id);\r\n\t\t\tvar original = gantt.mixin({}, task);\r\n\t\t\tvar copy = gantt.mixin({}, task);\r\n\t\t\tthis._handlers[mode].apply(this, [copy, shift, drag, multipleDragShift]);\r\n\t\t\tgantt.mixin(task, copy, true);\r\n\t\t\t//gantt._update_parents(drag.id, true);\r\n\t\t\tgantt.callEvent(\"onTaskDrag\", [task.id, mode, copy, original, e]);\r\n\t\t\tgantt.mixin(task, copy, true);\r\n\t\t\tgantt.refreshTask(id);\r\n\t\t},\r\n\r\n\t\t_update_on_move: function(e) {\r\n\t\t\tvar drag = this.drag;\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tif (drag.mode) {\r\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\r\n\t\t\t\tif (drag.pos && drag.pos.x == pos.x)\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\tdrag.pos = pos;\r\n\r\n\t\t\t\tvar curr_date = gantt.dateFromPos(pos.x);\r\n\t\t\t\tif (!curr_date || isNaN(curr_date.getTime()))\r\n\t\t\t\t\treturn;\r\n\r\n\r\n\t\t\t\tvar shift = pos.x - drag.start_x;\r\n\t\t\t\tvar task = gantt.getTask(drag.id);\r\n\t\t\t\tif (this._handlers[drag.mode]) {\r\n\t\t\t\t\tif (drag.mode === config.drag_mode.move) {\r\n\t\t\t\t\t\tvar dragHash = {};\r\n\r\n\t\t\t\t\t\tif (this._isMultiselect()) {\r\n\t\t\t\t\t\t\tvar selectedTasksIds = gantt.getSelectedTasks();\r\n\t\t\t\t\t\t\tif (selectedTasksIds.indexOf(drag.id) >= 0) {\r\n\t\t\t\t\t\t\t\tdragHash = this.dragMultiple;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar dragProject = false;\r\n\t\t\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project) {\r\n\t\t\t\t\t\t\tvar initialDrag = {};\r\n\t\t\t\t\t\t\tinitialDrag[drag.id] = utils.copy(drag);\r\n\t\t\t\t\t\t\tdragProject = true;\r\n\t\t\t\t\t\t\tdragHash = utils.mixin(initialDrag, this.dragMultiple);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar maxShift = this._find_max_shift(dragHash, shift);\r\n\t\t\t\t\t\tif (maxShift !== undefined) {\r\n\t\t\t\t\t\t\tshift = maxShift;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\r\n\r\n\t\t\t\t\t\tfor (var i in dragHash) {\r\n\t\t\t\t\t\t\tvar childDrag = dragHash[i];\r\n\t\t\t\t\t\t\tif(dragProject && childDrag.id != drag.id){\r\n\t\t\t\t\t\t\t\tgantt._bulk_dnd = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// GS-454: Calculate the date shift in milliseconds instead of pixels\r\n\t\t\t\t\t\t\tif (maxShift === undefined && (dragProject || Object.keys(dragHash).length > 1)) {\r\n\t\t\t\t\t\t\t\tvar shiftDate = gantt.dateFromPos(drag.start_x);\r\n\t\t\t\t\t\t\t\tvar multipleDragShift = curr_date - shiftDate;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis._update_item_on_move(shift, childDrag.id, childDrag.mode, childDrag, e, multipleDragShift);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgantt._bulk_dnd = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// for resize and progress\r\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt._update_parents(drag.id);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ton_mouse_down: function(e, src) {\r\n\t\t\t// on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state\r\n\t\t\t// let's ignore right mouse button then\r\n\t\t\tif (e.button == 2 && e.button !== undefined)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar id = gantt.locate(e);\r\n\t\t\tvar task = null;\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\ttask = gantt.getTask(id);\r\n\t\t\t}\r\n\r\n\t\t\tif (gantt.isReadonly(task) || this.drag.mode) return;\r\n\r\n\t\t\tthis.clear_drag_state();\r\n\r\n\t\t\tsrc = src || (e.target || e.srcElement);\r\n\r\n\t\t\tvar className = domHelpers.getClassName(src);\r\n\t\t\tvar drag = this._get_drag_mode(className, src);\r\n\r\n\t\t\tif (!className || !drag) {\r\n\t\t\t\tif (src.parentNode)\r\n\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!drag) {\r\n\t\t\t\tif (gantt.checkEvent(\"onMouseDown\") && gantt.callEvent(\"onMouseDown\", [className.split(\" \")[0]])) {\r\n\t\t\t\t\tif (src.parentNode)\r\n\t\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\r\n\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (drag.mode && drag.mode != config.drag_mode.ignore && config[\"drag_\" + drag.mode]) {\r\n\t\t\t\t\tid = gantt.locate(src);\r\n\t\t\t\t\ttask = gantt.copy(gantt.getTask(id) || {});\r\n\r\n\t\t\t\t\tif (gantt.isReadonly(task)) {\r\n\t\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && !(task.auto_scheduling === false) && !config.drag_project) && drag.mode != config.drag_mode.progress) {//only progress drag is allowed for tasks with flexible duration\r\n\t\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdrag.id = id;\r\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\r\n\r\n\t\t\t\t\tdrag.start_x = pos.x;\r\n\t\t\t\t\tdrag.start_y = pos.y;\r\n\t\t\t\t\tdrag.obj = task;\r\n\t\t\t\t\tthis.drag.start_drag = drag;\r\n\t\t\t\t\tthis.drag.timestamp = Date.now();\r\n\r\n\t\t\t\t} else\r\n\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t}\r\n\t\t},\r\n\t\t_fix_dnd_scale_time: function(task, drag) {\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar unit = gantt.getScale().unit,\r\n\t\t\t\tstep = gantt.getScale().step;\r\n\t\t\tif (!config.round_dnd_dates) {\r\n\t\t\t\tunit = 'minute';\r\n\t\t\t\tstep = config.time_step;\r\n\t\t\t}\r\n\r\n\t\t\tfunction fixStart(task) {\r\n\t\t\t\tif (!gantt.config.correct_work_time)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tvar config = timeline.$getConfig();\r\n\t\t\t\tif (!gantt.isWorkTime(task.start_date, undefined, task))\r\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate({\r\n\t\t\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\t\t\tduration: -1,\r\n\t\t\t\t\t\tunit: config.duration_unit,\r\n\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfunction fixEnd(task) {\r\n\t\t\t\tif (!gantt.config.correct_work_time)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tvar config = timeline.$getConfig();\r\n\t\t\t\tif (!gantt.isWorkTime(new Date(task.end_date - 1), undefined, task))\r\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate({\r\n\t\t\t\t\t\tstart_date: task.end_date,\r\n\t\t\t\t\t\tduration: 1,\r\n\t\t\t\t\t\tunit: config.duration_unit,\r\n\t\t\t\t\t\ttask: task\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (drag.mode == config.drag_mode.resize) {\r\n\t\t\t\tif (drag.left) {\r\n\t\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\r\n\t\t\t\t\tfixStart(task);\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttask.end_date = gantt.roundDate({date: task.end_date, unit: unit, step: step});\r\n\t\t\t\t\tfixEnd(task);\r\n\t\t\t\t}\r\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\r\n\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\r\n\t\t\t\tfixStart(task);\r\n\t\t\t\ttask.end_date = gantt.calculateEndDate(task);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_fix_working_times: function(task, drag) {\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar drag = drag || {mode: config.drag_mode.move};\r\n\r\n\t\t\tif (drag.mode == config.drag_mode.resize) {\r\n\t\t\t\tif (drag.left) {\r\n\t\t\t\t\ttask.start_date = gantt.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttask.end_date = gantt.getClosestWorkTime({date: task.end_date, dir: 'past', task: task});\r\n\t\t\t\t}\r\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\r\n\t\t\t\tgantt.correctTaskWorkTime(task);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_finalize_mouse_up: function(taskId, config, drag, e) {\r\n\t\t\tvar task = gantt.getTask(taskId);\r\n\r\n\t\t\tif (config.work_time && config.correct_work_time) {\r\n\t\t\t\tthis._fix_working_times(task, drag);\r\n\t\t\t}\r\n\r\n\t\t\tthis._fix_dnd_scale_time(task, drag);\r\n\r\n\t\t\tif (!this._fireEvent(\"before_finish\", drag.mode, [taskId, drag.mode, gantt.copy(drag.obj), e])) {\r\n\t\t\t\t//drag.obj._dhx_changed = false;\r\n\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\tif (taskId == drag.id) {\r\n\t\t\t\t\tdrag.obj._dhx_changed = false;\r\n\t\t\t\t\tgantt.mixin(task, drag.obj, true);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tgantt.refreshTask(task.id);\r\n\t\t\t} else {\r\n\t\t\t\tvar drag_id = taskId;\r\n\r\n\t\t\t\tgantt._init_task_timing(task);\r\n\r\n\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\tgantt.updateTask(task.id);\r\n\t\t\t\tthis._fireEvent(\"after_finish\", drag.mode, [drag_id, drag.mode, e]);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\ton_mouse_up: function(e) {\r\n\r\n\t\t\tvar drag = this.drag;\r\n\t\t\tif (drag.mode && drag.id) {\r\n\t\t\t\tvar config = timeline.$getConfig();\r\n\t\t\t\t//drop\r\n\t\t\t\tvar task = gantt.getTask(drag.id);\r\n\t\t\t\tvar dragMultiple = this.dragMultiple;\r\n\r\n\t\t\t\tvar finalizingBulkMove = false;\r\n\t\t\t\tvar moveCount = 0;\r\n\t\t\t\tif (drag.mode === config.drag_mode.move) {\r\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && config.drag_project) || (this._isMultiselect())) {\r\n\t\t\t\t\t\tfinalizingBulkMove = true;\r\n\t\t\t\t\t\tmoveCount = Object.keys(dragMultiple).length;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar doFinalize = function doFinalize(){\r\n\t\t\t\t\tif(finalizingBulkMove){\r\n\t\t\t\t\t\tfor (var i in dragMultiple) {\r\n\t\t\t\t\t\t\t// GS-1057: Don't call drag events for the dragged task as they will be called later\r\n\t\t\t\t\t\t\tif (dragMultiple[i].id != drag.id){\r\n\t\t\t\t\t\t\t\tthis._finalize_mouse_up(dragMultiple[i].id, config, dragMultiple[i], e);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._finalize_mouse_up(drag.id, config, drag, e);\r\n\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(finalizingBulkMove && moveCount > 10){// 10 - arbitrary threshold for bulk dnd at which we start doing complete repaint to refresh\r\n\t\t\t\t\tgantt.batchUpdate(function(){\r\n\t\t\t\t\t\tdoFinalize.call(this);\r\n\t\t\t\t\t}.bind(this));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdoFinalize.call(this);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tthis.clear_drag_state();\r\n\t\t},\r\n\t\t_get_drag_mode: function(className, el) {\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tvar modes = config.drag_mode;\r\n\t\t\tvar classes = (className || \"\").split(\" \");\r\n\t\t\tvar classname = classes[0];\r\n\t\t\tvar drag = {mode: null, left: null};\r\n\t\t\tswitch (classname) {\r\n\t\t\t\tcase \"gantt_task_line\":\r\n\t\t\t\tcase \"gantt_task_content\":\r\n\t\t\t\t\tdrag.mode = modes.move;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"gantt_task_drag\":\r\n\t\t\t\t\tdrag.mode = modes.resize;\r\n\r\n\t\t\t\t\tvar dragProperty = el.getAttribute(\"data-bind-property\");\r\n\r\n\t\t\t\t\tif (dragProperty == \"start_date\") {\r\n\t\t\t\t\t\tdrag.left = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdrag.left = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"gantt_task_progress_drag\":\r\n\t\t\t\t\tdrag.mode = modes.progress;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"gantt_link_control\":\r\n\t\t\t\tcase \"gantt_link_point\":\r\n\t\t\t\t\tdrag.mode = modes.ignore;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tdrag = null;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn drag;\r\n\r\n\t\t},\r\n\r\n\t\t_start_dnd: function(e) {\r\n\t\t\tvar drag = this.drag = this.drag.start_drag;\r\n\t\t\tdelete drag.start_drag;\r\n\r\n\t\t\tvar cfg = timeline.$getConfig();\r\n\t\t\tvar id = drag.id;\r\n\r\n\t\t\tif (!cfg[\"drag_\" + drag.mode] || !gantt.callEvent(\"onBeforeDrag\", [id, drag.mode, e]) || !this._fireEvent(\"before_start\", drag.mode, [id, drag.mode, e])) {\r\n\t\t\t\tthis.clear_drag_state();\r\n\t\t\t} else {\r\n\t\t\t\tdelete drag.start_drag;\r\n\t\t\t\tvar task = gantt.getTask(id);\r\n\t\t\t\tif (gantt.isReadonly(task)){\r\n\t\t\t\t\tthis.clear_drag_state();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (this._isMultiselect()) {\r\n\t\t\t\t\t// for don't move selected tasks when drag unselected task\r\n\t\t\t\t\tvar selectedTasksIds = gantt.getSelectedTasks();\r\n\t\t\t\t\tif (selectedTasksIds.indexOf(drag.id) >= 0) {\r\n\t\t\t\t\t\thelpers.forEach(selectedTasksIds, gantt.bind(function(taskId) {\r\n\t\t\t\t\t\t\tvar selectedTask = gantt.getTask(taskId);\r\n\t\t\t\t\t\t\tif (gantt.isSummaryTask(selectedTask) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\r\n\t\t\t\t\t\t\t\tthis._addSubtasksToDragMultiple(selectedTask.id);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.dragMultiple[taskId] = gantt.mixin({\r\n\t\t\t\t\t\t\t\tid: selectedTask.id,\r\n\t\t\t\t\t\t\t\tobj: gantt.copy(selectedTask)\r\n\t\t\t\t\t\t\t}, this.drag);\r\n\t\t\t\t\t\t}, this));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// for move unselected summary\r\n\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\r\n\t\t\t\t\tthis._addSubtasksToDragMultiple(task.id);\r\n\t\t\t\t}\r\n\t\t\t\tgantt.callEvent(\"onTaskDragStart\", []);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t_fireEvent: function(stage, mode, params) {\r\n\t\t\tgantt.assert(this._events[stage], \"Invalid stage:{\" + stage + \"}\");\r\n\r\n\t\t\tvar trigger = this._events[stage][mode];\r\n\r\n\t\t\tgantt.assert(trigger, \"Unknown after drop mode:{\" + mode + \"}\");\r\n\t\t\tgantt.assert(params, \"Invalid event arguments\");\r\n\r\n\r\n\t\t\tif (!gantt.checkEvent(trigger))\r\n\t\t\t\treturn true;\r\n\r\n\t\t\treturn gantt.callEvent(trigger, params);\r\n\t\t},\r\n\r\n\t\tround_task_dates: function(task) {\r\n\t\t\tvar drag_state = this.drag;\r\n\t\t\tvar config = timeline.$getConfig();\r\n\t\t\tif (!drag_state) {\r\n\t\t\t\tdrag_state = {mode: config.drag_mode.move};\r\n\t\t\t}\r\n\t\t\tthis._fix_dnd_scale_time(task, drag_state);\r\n\t\t},\r\n\t\tdestructor: function() {\r\n\t\t\tthis._domEvents.detachAll();\r\n\t\t},\r\n\t\t_isMultiselect: function() {\r\n\t\t\treturn gantt.config.drag_multiple && !!(gantt.getSelectedTasks && gantt.getSelectedTasks().length > 0);\r\n\t\t},\r\n\t\t_addSubtasksToDragMultiple: function(summaryId) {\r\n\t\t\tgantt.eachTask(function(child) {\r\n\t\t\t\tthis.dragMultiple[child.id] = gantt.mixin({\r\n\t\t\t\t\tid: child.id,\r\n\t\t\t\t\tobj: gantt.copy(child)\r\n\t\t\t\t}, this.drag);\r\n\t\t\t}, summaryId, this);\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction initTaskDND() {\r\n\tvar _tasks_dnd;\r\n\treturn {\r\n\t\textend: function(timeline) {\r\n\t\t\ttimeline.roundTaskDates = function(task) {\r\n\t\t\t\t_tasks_dnd.round_task_dates(task);\r\n\t\t\t};\r\n\r\n\t\t},\r\n\t\tinit: function(timeline, gantt) {\r\n\t\t\t_tasks_dnd = createTaskDND(timeline, gantt);\r\n\t\t\t// TODO: entry point for touch handlers, move touch to timeline\r\n\t\t\ttimeline._tasks_dnd = _tasks_dnd;\r\n\t\t\treturn _tasks_dnd.init(gantt);\r\n\t\t},\r\n\t\tdestructor: function() {\r\n\t\t\tif (_tasks_dnd) {\r\n\t\t\t\t_tasks_dnd.destructor();\r\n\t\t\t\t_tasks_dnd = null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default {\r\n\tcreateTaskDND: initTaskDND\r\n};","import * as domHelpers from \"../utils/dom_helpers\";\r\n\r\nvar initLinksDND = function(timeline, gantt) {\r\n\tvar _link_landing,\r\n\t\t_link_target_task,\r\n\t\t_link_target_task_start,\r\n\t\t_link_source_task,\r\n\t\t_link_source_task_start,\r\n\t\tmarkerDefaultOffset = 10,\r\n\t\tscrollDefaultSize = 18;\r\n\r\n\tfunction getDndState(){\r\n\t\treturn {\r\n\t\t\tlink_source_id : _link_source_task,\r\n\t\t\tlink_target_id : _link_target_task,\r\n\t\t\tlink_from_start : _link_source_task_start,\r\n\t\t\tlink_to_start : _link_target_task_start,\r\n\t\t\tlink_landing_area : _link_landing\r\n\t\t};\r\n\t}\r\n\r\n\tvar services = gantt.$services;\r\n\r\n\tvar state = services.getService(\"state\");\r\n\tvar DnD = services.getService(\"dnd\");\r\n\r\n\tstate.registerProvider(\"linksDnD\", getDndState);\r\n\r\n\tvar start_marker = \"task_start_date\",\r\n\t\tend_marker = \"task_end_date\",\r\n\t\tlink_edge_marker = \"gantt_link_point\",\r\n\t\tlink_landing_hover_area = \"gantt_link_control\";\r\n\r\n\tvar dnd = new DnD(timeline.$task_bars, {\r\n\t\tsensitivity : 0,\r\n\t\tupdates_per_second : 60,\r\n\t\tmousemoveContainer: gantt.$root,\r\n\t\tselector: \".\" + link_edge_marker,\r\n\t\tpreventDefault: true\r\n\t});\r\n\r\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function(obj,e) {\r\n\t\tvar target = (e.target||e.srcElement);\r\n\t\tresetDndState();\r\n\t\tif(gantt.getState(\"tasksDnd\").drag_id)\r\n\t\t\treturn false;\r\n\r\n\t\tif(domHelpers.locateClassName(target, link_edge_marker)){\r\n\t\t\tif(domHelpers.locateClassName(target, start_marker))\r\n\t\t\t\t_link_source_task_start = true;\r\n\r\n\t\t\tvar sid = gantt.locate(e);\r\n\t\t\t_link_source_task = sid;\r\n\r\n\t\t\tvar t = gantt.getTask(sid);\r\n\t\t\tif(gantt.isReadonly(t)){\r\n\t\t\t\tresetDndState();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._dir_start = {\r\n\t\t\t\tx: dnd.config.original_element_sizes.x + dnd.config.original_element_sizes.width/2,\r\n\t\t\t\ty: dnd.config.original_element_sizes.y + dnd.config.original_element_sizes.height/2\r\n\t\t\t};\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t}, this));\r\n\r\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function(obj,e) {\r\n\t\tif(gantt.config.touch) {\r\n\t\t\tgantt.refreshData();\r\n\t\t}\r\n\t\tupdateMarkedHtml(dnd.config.marker);\r\n\t}, this));\r\n\r\n\tfunction getVieportSize(){\r\n\t\tvar root = gantt.$root;\r\n\t\treturn { right: root.offsetWidth, bottom: root.offsetHeight };\r\n\t}\r\n\tfunction getMarkerSize (marker){\r\n\t\tvar width = 0, height = 0;\r\n\t\tif(marker){\r\n\t\t\twidth = marker.offsetWidth || 0;\r\n\t\t\theight = marker.offsetHeight || 0;\r\n\t\t}\r\n\t\treturn { width: width, height: height };\r\n\t}\r\n\r\n\tfunction getPosition(e, marker){\r\n\t\tvar oldPos = dnd.getPosition(e);\r\n\r\n\t\tvar markerSize = getMarkerSize(marker);\r\n\t\tvar viewportSize = getVieportSize();\r\n\r\n\t\tvar offsetX = gantt.config.tooltip_offset_x || markerDefaultOffset;\r\n\t\tvar offsetY = gantt.config.tooltip_offset_y || markerDefaultOffset;\r\n\r\n\t\tvar scrollSize = gantt.config.scroll_size || scrollDefaultSize;\r\n\r\n\t\t// GS-1315: Add offset if there are elements above Gantt\r\n\t\tvar ganttOffsetY = gantt.$container.getBoundingClientRect().y + window.scrollY;\r\n\r\n\t\tvar position = {\r\n\t\t\ty: oldPos.y + offsetY,\r\n\t\t\tx: oldPos.x + offsetX,\r\n\t\t\tbottom: oldPos.y + markerSize.height + offsetY + scrollSize,\r\n\t\t\tright: oldPos.x + markerSize.width + offsetX + scrollSize\r\n\t\t};\r\n\r\n\t\tif(position.bottom > viewportSize.bottom + ganttOffsetY){\r\n\t\t\tposition.y = viewportSize.bottom + ganttOffsetY - markerSize.height - offsetY;\r\n\t\t}\r\n\r\n\t\tif(position.right > viewportSize.right){\r\n\t\t\tposition.x = viewportSize.right - markerSize.width - offsetX;\r\n\t\t}\r\n\t\treturn position;\r\n\t}\r\n\r\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function(obj,e) {\r\n\t\tvar dd = dnd.config;\r\n\t\tvar pos = getPosition(e, dd.marker);\r\n\t\tadvanceMarker(dd.marker, pos);\r\n\t\tvar landing = !!domHelpers.locateClassName(e, link_landing_hover_area);\r\n\r\n\t\tvar prevTarget = _link_target_task;\r\n\t\tvar prevLanding = _link_landing;\r\n\t\tvar prevToStart = _link_target_task_start;\r\n\r\n\t\tvar targ = gantt.locate(e),\r\n\t\t\tto_start = true;\r\n\r\n\t\t// can drag and drop link to another gantt on the page, such links are not supported\r\n\t\tvar eventTarget = domHelpers.getTargetNode(e);\r\n\r\n\t\tvar sameGantt = domHelpers.isChildOf(eventTarget, gantt.$root);\r\n\t\tif(!sameGantt){\r\n\t\t\tlanding = false;\r\n\t\t\ttarg = null;\r\n\t\t}\r\n\r\n\t\tif(landing){\r\n\t\t\t//refreshTask\r\n\t\t\tto_start = !domHelpers.locateClassName(e, end_marker);\r\n\t\t\tlanding = !!targ;\r\n\t\t}\r\n\r\n\t\t_link_target_task = targ;\r\n\t\t_link_landing = landing;\r\n\t\t_link_target_task_start = to_start;\r\n\r\n\t\tif(landing){\r\n\r\n\t\t\tvar node = domHelpers.locateClassName(e, link_landing_hover_area);\r\n\t\t\r\n\t\t\tconst point = node.querySelector(`.${link_edge_marker}`);\r\n\t\t\tif(point){\r\n\t\t\t\tconst absCoords = domHelpers.getRelativeNodePosition(point, timeline.$task_bg);\r\n\t\t\t\tthis._dir_end = {\r\n\t\t\t\t\tx: absCoords.x + point.offsetWidth/2,\r\n\t\t\t\t\ty: absCoords.y + point.offsetHeight/2\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis._dir_end = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\r\n\t\t\tif(gantt.env.isEdge){ // to fix margin collapsing\r\n\t\t\t\tthis._dir_end.y += window.scrollY;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar targetChanged = !(prevLanding == landing && prevTarget == targ && prevToStart == to_start);\r\n\t\tif(targetChanged){\r\n\t\t\tif(prevTarget)\r\n\t\t\t\tgantt.refreshTask(prevTarget, false);\r\n\t\t\tif(targ)\r\n\t\t\t\tgantt.refreshTask(targ, false);\r\n\t\t}\r\n\r\n\t\tif(targetChanged){\r\n\t\t\tupdateMarkedHtml(dd.marker);\r\n\t\t}\r\n\r\n\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\r\n\r\n\t\treturn true;\r\n\t}, this));\r\n\r\n\r\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function() {\r\n\t\tvar drag = getDndState();\r\n\r\n\t\tif(drag.link_source_id && drag.link_target_id && drag.link_source_id != drag.link_target_id){\r\n\t\t\tvar type = gantt._get_link_type(drag.link_from_start, drag.link_to_start);\r\n\r\n\t\t\tvar link = {source : drag.link_source_id, target: drag.link_target_id, type:type};\r\n\t\t\tif(link.type && gantt.isLinkAllowed(link)) {\r\n\t\t\t\tif(gantt.callEvent(\"onLinkCreated\", [link])){\r\n\t\t\t\t\tgantt.addLink(link);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresetDndState();\r\n\r\n\t\tif(gantt.config.touch) {\r\n\t\t\tgantt.refreshData();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (drag.link_source_id)\r\n\t\t\t\tgantt.refreshTask(drag.link_source_id, false);\r\n\t\t\tif (drag.link_target_id)\r\n\t\t\t\tgantt.refreshTask(drag.link_target_id, false);\r\n\t\t}\r\n\t\tremoveDirectionLine();\r\n\t}, this));\r\n\r\n\tfunction updateMarkedHtml(marker){\r\n\t\tvar link = getDndState();\r\n\r\n\t\tvar css = [\"gantt_link_tooltip\"];\r\n\t\tif(link.link_source_id && link.link_target_id){\r\n\t\t\tif(gantt.isLinkAllowed(link.link_source_id, link.link_target_id, link.link_from_start, link.link_to_start)){\r\n\t\t\t\tcss.push(\"gantt_allowed_link\");\r\n\t\t\t}else{\r\n\t\t\t\tcss.push(\"gantt_invalid_link\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar className = gantt.templates.drag_link_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start);\r\n\t\tif(className)\r\n\t\t\tcss.push(className);\r\n\r\n\t\tvar html = \"\" +\r\n\t\t\tgantt.templates.drag_link(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start) +\r\n\t\t\t\"
\";\r\n\t\tmarker.innerHTML = html;\r\n\t}\r\n\r\n\tfunction advanceMarker(marker, pos){\r\n\t\tmarker.style.left = pos.x + \"px\";\r\n\t\tmarker.style.top = pos.y + \"px\";\r\n\t}\r\n\r\n\tfunction resetDndState(){\r\n\t\t_link_source_task =\r\n\t\t\t_link_source_task_start =\r\n\t\t\t\t_link_target_task = null;\r\n\t\t_link_target_task_start = true;\r\n\t}\r\n\tfunction showDirectingLine(s_x, s_y, e_x, e_y){\r\n\t\tvar div = getDirectionLine();\r\n\r\n\t\tvar link = getDndState();\r\n\r\n\t\tvar css = [\"gantt_link_direction\"];\r\n\t\tif(gantt.templates.link_direction_class){\r\n\t\t\tcss.push(gantt.templates.link_direction_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start));\r\n\t\t}\r\n\r\n\t\tvar dist =Math.sqrt( (Math.pow(e_x - s_x, 2)) + (Math.pow(e_y - s_y, 2)) );\r\n\t\tdist = Math.max(0, dist - 3);\r\n\t\tif(!dist)\r\n\t\t\treturn;\r\n\r\n\t\tdiv.className = css.join(\" \");\r\n\t\tvar tan = (e_y - s_y)/(e_x - s_x),\r\n\t\t\tangle = Math.atan(tan);\r\n\r\n\t\tif(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 2){\r\n\t\t\tangle += Math.PI;\r\n\t\t}else if(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 3){\r\n\t\t\tangle -= Math.PI;\r\n\t\t}\r\n\r\n\r\n\r\n\t\tvar sin = Math.sin(angle),\r\n\t\t\tcos = Math.cos(angle),\r\n\t\t\ttop = Math.round(s_y),\r\n\t\t\tleft = Math.round(s_x);\r\n\r\n\r\n\t\tvar style = [\r\n\t\t\t\"-webkit-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"-moz-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"-ms-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"-o-transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"transform: rotate(\"+angle+\"rad)\",\r\n\t\t\t\"width:\" + Math.round(dist) + \"px\"\r\n\t\t];\r\n\r\n\t\tif(window.navigator.userAgent.indexOf(\"MSIE 8.0\") != -1){\r\n\t\t\t//ms-filter breaks styles in ie9, so add it only for 8th\r\n\t\t\tstyle.push(\"-ms-filter: \\\"\" + ieTransform(sin, cos) + \"\\\"\");\r\n\r\n\t\t\tvar shiftLeft = Math.abs(Math.round(s_x - e_x)),\r\n\t\t\t\tshiftTop = Math.abs(Math.round(e_y - s_y));\r\n\t\t\t//fix rotation axis\r\n\t\t\tswitch(coordinateCircleQuarter(s_x, e_x, s_y, e_y)){\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\ttop -= shiftTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tleft -= shiftLeft;\r\n\t\t\t\t\ttop -= shiftTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\tleft -= shiftLeft;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tstyle.push(\"top:\" + top + \"px\");\r\n\t\tstyle.push(\"left:\" + left + \"px\");\r\n\r\n\t\tdiv.style.cssText = style.join(\";\");\r\n\t}\r\n\r\n\tfunction ieTransform(sin, cos){\r\n\t\treturn \"progid:DXImageTransform.Microsoft.Matrix(\"+\r\n\t\t\t\"M11 = \"+cos+\",\"+\r\n\t\t\t\"M12 = -\"+sin+\",\"+\r\n\t\t\t\"M21 = \"+sin+\",\"+\r\n\t\t\t\"M22 = \"+cos+\",\"+\r\n\t\t\t\"SizingMethod = 'auto expand'\"+\r\n\t\t\")\";\r\n\t}\r\n\tfunction coordinateCircleQuarter(sX, eX, sY, eY){\r\n\t\tif(eX >= sX){\r\n\t\t\tif(eY <= sY){\r\n\t\t\t\treturn 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn 4;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(eY <= sY){\r\n\t\t\t\treturn 2;\r\n\t\t\t}else{\r\n\t\t\t\treturn 3;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\tfunction getDirectionLine(){\r\n\t\tif(!dnd._direction || !dnd._direction.parentNode){\r\n\t\t\tdnd._direction = document.createElement(\"div\");\r\n\t\t\ttimeline.$task_links.appendChild(dnd._direction);\r\n\t\t}\r\n\t\treturn dnd._direction;\r\n\t}\r\n\tfunction removeDirectionLine(){\r\n\t\tif(dnd._direction){\r\n\t\t\tif (dnd._direction.parentNode)\t//the event line can be detached because of data refresh\r\n\t\t\t\tdnd._direction.parentNode.removeChild(dnd._direction);\r\n\r\n\t\t\tdnd._direction = null;\r\n\t\t}\r\n\t}\r\n\tgantt.attachEvent(\"onGanttRender\", gantt.bind(function() {\r\n\t\tif(dnd._direction){\r\n\t\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\r\n\t\t}\r\n\t}, this));\r\n};\r\n\r\nexport default {\r\n\tcreateLinkDND: function(){\r\n\t\treturn {\r\n\t\t\tinit: initLinksDND\r\n\t\t};\r\n\t}\r\n};","import * as utils from \"../../../utils/utils\";\r\nimport taskDnD from \"./tasks_dnd\";\r\nimport linkDnD from \"./links_dnd\";\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport MouseDelegates from \"../mouse_event_container\";\r\n\r\nvar initializer = (function(){\r\n\treturn function(gantt){\r\n\t\tvar services = gantt.$services;\r\n\t\treturn {\r\n\t\t\tonCreated: function (timeline) {\r\n\t\t\t\tvar config = timeline.$config;\r\n\t\t\t\tconfig.bind = utils.defined(config.bind) ? config.bind : \"task\";\r\n\t\t\t\tconfig.bindLinks = utils.defined(config.bindLinks) ? config.bindLinks : \"link\";\r\n\r\n\t\t\t\ttimeline._linksDnD = linkDnD.createLinkDND();\r\n\t\t\t\ttimeline._tasksDnD = taskDnD.createTaskDND();\r\n\t\t\t\ttimeline._tasksDnD.extend(timeline);\r\n\r\n\t\t\t\tthis._mouseDelegates = MouseDelegates(gantt);\r\n\t\t\t},\r\n\t\t\tonInitialized: function (timeline) {\r\n\t\t\t\tthis._attachDomEvents(gantt);\r\n\r\n\t\t\t\tthis._attachStateProvider(gantt, timeline);\r\n\r\n\t\t\t\ttimeline._tasksDnD.init(timeline, gantt);\r\n\t\t\t\ttimeline._linksDnD.init(timeline, gantt);\r\n\r\n\t\t\t\tif(timeline.$config.id == \"timeline\"){\r\n\t\t\t\t\tthis.extendDom(timeline);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\tonDestroyed: function (timeline) {\r\n\t\t\t\tthis._clearDomEvents(gantt);\r\n\t\t\t\tthis._clearStateProvider(gantt);\r\n\t\t\t\tif (timeline._tasksDnD) {\r\n\t\t\t\t\ttimeline._tasksDnD.destructor();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\textendDom: function(timeline){\r\n\t\t\t\tgantt.$task = timeline.$task;\r\n\t\t\t\tgantt.$task_scale = timeline.$task_scale;\r\n\t\t\t\tgantt.$task_data = timeline.$task_data;\r\n\t\t\t\tgantt.$task_bg = timeline.$task_bg;\r\n\t\t\t\tgantt.$task_links = timeline.$task_links;\r\n\t\t\t\tgantt.$task_bars = timeline.$task_bars;\r\n\t\t\t},\r\n\r\n\t\t\t_clearDomEvents: function(){\r\n\t\t\t\tthis._mouseDelegates.destructor();\r\n\t\t\t\tthis._mouseDelegates = null;\r\n\t\t\t},\r\n\r\n\t\t\t_attachDomEvents: function(gantt){\r\n\t\t\t\tfunction _delete_link_handler(id, e) {\r\n\t\t\t\t\tif (id && this.callEvent(\"onLinkDblClick\", [id, e])) {\r\n\r\n\t\t\t\t\t\tvar link = this.getLink(id);\r\n\t\t\t\t\t\tif (this.isReadonly(link)) return;\r\n\r\n\t\t\t\t\t\tvar title = \"\";\r\n\t\t\t\t\t\tvar question = this.locale.labels.link + \" \" + this.templates.link_description(this.getLink(id)) + \" \" + this.locale.labels.confirm_link_deleting;\r\n\r\n\t\t\t\t\t\twindow.setTimeout(function () {\r\n\t\t\t\t\t\t\tgantt._simple_confirm(question, title, function () {\r\n\t\t\t\t\t\t\t\tgantt.deleteLink(id);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}, (this.config.touch ? 300 : 1));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_task_link\", gantt.bind(function (e, trg) {\r\n\t\t\t\t\tvar id = this.locate(e, this.config.link_attribute);\r\n\t\t\t\t\tif (id) {\r\n\t\t\t\t\t\tthis.callEvent(\"onLinkClick\", [id, e]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, gantt), this.$task);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_scale_cell\", gantt.bind(function (e, trg) {\r\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\r\n\t\t\t\t\tvar date = gantt.dateFromPos(pos.x);\r\n\t\t\t\t\tvar coll = Math.floor(gantt.columnIndexByDate(date));\r\n\r\n\t\t\t\t\tvar coll_date = gantt.getScale().trace_x[coll];\r\n\r\n\t\t\t\t\tgantt.callEvent(\"onScaleClick\", [e, coll_date]);\r\n\t\t\t\t}, gantt), this.$task);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"doubleclick\", \"gantt_task_link\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar id = this.locate(e, gantt.config.link_attribute);\r\n\t\t\t\t\t_delete_link_handler.call(this, id, e);\r\n\t\t\t\t}, gantt), this.$task);\r\n\r\n\t\t\t\tthis._mouseDelegates.delegate(\"doubleclick\", \"gantt_link_point\", gantt.bind(function (e, id, trg) {\r\n\t\t\t\t\tvar id = this.locate(e),\r\n\t\t\t\t\t\ttask = this.getTask(id);\r\n\r\n\t\t\t\t\tvar link = null;\r\n\t\t\t\t\tif (trg.parentNode && domHelpers.getClassName(trg.parentNode)) {\r\n\t\t\t\t\t\tif (domHelpers.getClassName(trg.parentNode).indexOf(\"_left\") > -1) {\r\n\t\t\t\t\t\t\tlink = task.$target[0];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlink = task.$source[0];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (link)\r\n\t\t\t\t\t\t_delete_link_handler.call(this, link, e);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}, gantt), this.$task);\r\n\t\t\t},\r\n\r\n\t\t\t_attachStateProvider: function(gantt, timeline){\r\n\t\t\t\tvar self = timeline;\r\n\t\t\t\tvar state = services.getService(\"state\");\r\n\t\t\t\tstate.registerProvider(\"tasksTimeline\", function(){\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tscale_unit: self._tasks ? self._tasks.unit : undefined,\r\n\t\t\t\t\t\tscale_step: self._tasks ? self._tasks.step : undefined\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t_clearStateProvider: function(){\r\n\t\t\t\tvar state = services.getService(\"state\");\r\n\t\t\t\tstate.unregisterProvider(\"tasksTimeline\");\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n})();\r\n\r\nexport default initializer;","import * as domHelpers from \"./utils/dom_helpers\";\r\n\r\nvar initializer = (function() {\r\n\treturn function (gantt) {\r\n\t\treturn {\r\n\r\n\t\t\tgetVerticalScrollbar: function(){\r\n\t\t\t\treturn gantt.$ui.getView(\"scrollVer\");\r\n\t\t\t},\r\n\t\t\tgetHorizontalScrollbar: function(){\r\n\t\t\t\treturn gantt.$ui.getView(\"scrollHor\");\r\n\t\t\t},\r\n\r\n\t\t\t_legacyGridResizerClass: function(layout){\r\n\t\t\t\tvar resizers = layout.getCellsByType(\"resizer\");\r\n\t\t\t\tfor(var i = 0; i < resizers.length; i++){\r\n\t\t\t\t\tvar r = resizers[i];\r\n\t\t\t\t\tvar gridResizer = false;\r\n\r\n\t\t\t\t\tvar prev = r.$parent.getPrevSibling(r.$id);\r\n\t\t\t\t\tif(prev && prev.$config && prev.$config.id === \"grid\"){\r\n\t\t\t\t\t\tgridResizer= true;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tvar next = r.$parent.getNextSibling(r.$id);\r\n\t\t\t\t\t\tif(next && next.$config && next.$config.id === \"grid\"){\r\n\t\t\t\t\t\t\tgridResizer= true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(gridResizer){\r\n\t\t\t\t\t\tr.$config.css = (r.$config.css ? r.$config.css + \" \" : \"\") + \"gantt_grid_resize_wrap\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tonCreated: function(layout) {\r\n\t\t\t\tvar first = true;\r\n\r\n\t\t\t\tthis._legacyGridResizerClass(layout);\r\n\r\n\t\t\t\tlayout.attachEvent(\"onBeforeResize\", function() {\r\n\t\t\t\t\tvar mainTimeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\t\t\tif (mainTimeline)\r\n\t\t\t\t\t\tmainTimeline.$config.hidden = mainTimeline.$parent.$config.hidden = !gantt.config.show_chart;\r\n\r\n\t\t\t\t\tvar mainGrid = gantt.$ui.getView(\"grid\");\r\n\r\n\t\t\t\t\tif(!mainGrid)\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\tvar colsWidth = mainGrid._getColsTotalWidth();\r\n\t\t\t\t\tvar hideGrid = !gantt.config.show_grid || !gantt.config.grid_width || colsWidth === 0;\r\n\t\t\t\t\tif (first && !hideGrid && colsWidth !== false){\r\n\t\t\t\t\t\t\tgantt.config.grid_width = colsWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmainGrid.$config.hidden = mainGrid.$parent.$config.hidden = hideGrid;\r\n\r\n\t\t\t\t\tif (!mainGrid.$config.hidden) {\r\n\t\t\t\t\t\t/* restrict grid width due to min_width, max_width, min_grid_column_width */\r\n\t\t\t\t\t\tvar grid_limits = mainGrid._getGridWidthLimits();\r\n\t\t\t\t\t\tif (grid_limits[0] && gantt.config.grid_width < grid_limits[0])\r\n\t\t\t\t\t\t\tgantt.config.grid_width = grid_limits[0];\r\n\t\t\t\t\t\tif (grid_limits[1] && gantt.config.grid_width > grid_limits[1])\r\n\t\t\t\t\t\t\tgantt.config.grid_width = grid_limits[1];\r\n\t\t\t\t\t\tif (mainTimeline && gantt.config.show_chart){\r\n\r\n\t\t\t\t\t\t\tmainGrid.$config.width = gantt.config.grid_width - 1;\r\n\r\n\t\t\t\t\t\t\t// GS-1314: Don't let the non-scrollable grid to be larger than the container with the correct width\r\n\t\t\t\t\t\t\tif (!mainGrid.$config.scrollable && mainGrid.$config.scrollY && gantt.$root.offsetWidth){\r\n\t\t\t\t\t\t\t\tvar ganttContainerWidth = mainGrid.$gantt.$layout.$container.offsetWidth;\r\n\t\t\t\t\t\t\t\tvar verticalScrollbar = gantt.$ui.getView(mainGrid.$config.scrollY);\r\n\t\t\t\t\t\t\t\tvar verticalScrollbarWidth = verticalScrollbar.$config.width;\r\n\r\n\t\t\t\t\t\t\t\t// GS-2488: to prevent grid from occupying the whole gantt container(timeline will be disabled) \r\n\t\t\t\t\t\t\t\t// need to leave min width for timeline\r\n\t\t\t\t\t\t\t\tvar gridOverflow = ganttContainerWidth - (mainGrid.$config.width + verticalScrollbarWidth) - 4;\r\n\t\t\t\t\t\t\t\tif (gridOverflow < 0){\r\n\t\t\t\t\t\t\t\t\tmainGrid.$config.width += gridOverflow;\r\n\t\t\t\t\t\t\t\t\tgantt.config.grid_width += gridOverflow;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (!first) {\r\n\t\t\t\t\t\t\t\tif (mainTimeline && !domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\r\n\t\t\t\t\t\t\t\t\t// timeline is being displayed after being not visible, reset grid with from full screen\r\n\t\t\t\t\t\t\t\t\tif (!mainGrid.$config.original_grid_width) {\r\n\t\t\t\t\t\t\t\t\t\tvar skinSettings = gantt.skins[gantt.skin];\r\n\t\t\t\t\t\t\t\t\t\tif(skinSettings && skinSettings.config && skinSettings.config.grid_width){\r\n\t\t\t\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = skinSettings.config.grid_width;\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = 0;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tgantt.config.grid_width = mainGrid.$config.original_grid_width;\r\n\t\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tmainGrid.$parent._setContentSize(mainGrid.$config.width, null);\r\n\t\t\t\t\t\t\t\t\tgantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, {value: gantt.config.grid_width, isGravity: false});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\r\n\t\t\t\t\t\t\t\tif (mainGrid.$parent.$config.group) {\r\n\t\t\t\t\t\t\t\t\tgantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, {value: mainGrid.$parent.$config.width, isGravity: false});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (mainTimeline && domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\r\n\t\t\t\t\t\t\t\t// hiding timeline, remember grid with to restore it when timeline is displayed again\r\n\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = gantt.config.grid_width;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (!first) {\r\n\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfirst = false;\r\n\t\t\t\t});\r\n\t\t\t\tthis._initScrollStateEvents(layout);\r\n\t\t\t},\r\n\r\n\t\t\t_initScrollStateEvents: function(layout) {\r\n\t\t\t\tgantt._getVerticalScrollbar = this.getVerticalScrollbar;\r\n\t\t\t\tgantt._getHorizontalScrollbar = this.getHorizontalScrollbar;\r\n\r\n\t\t\t\tvar vertical = this.getVerticalScrollbar();\r\n\t\t\t\tvar horizontal = this.getHorizontalScrollbar();\r\n\t\t\t\tif (vertical) {\r\n\t\t\t\t\tvertical.attachEvent(\"onScroll\", function(oldPos, newPos, dir){\r\n\t\t\t\t\t\tvar scrollState = gantt.getScrollState();\r\n\t\t\t\t\t\tgantt.callEvent(\"onGanttScroll\", [scrollState.x, oldPos, scrollState.x, newPos]);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (horizontal) {\r\n\t\t\t\t\thorizontal.attachEvent(\"onScroll\", function(oldPos, newPos, dir){\r\n\t\t\t\t\t\tvar scrollState = gantt.getScrollState();\r\n\t\t\t\t\t\tgantt.callEvent(\"onGanttScroll\", [oldPos, scrollState.y, newPos, scrollState.y]);\r\n\r\n\t\t\t\t\t\t// if the grid doesn't fit the width, scroll the row container\r\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tif (grid && grid.$grid_data && !grid.$config.scrollable){\r\n\t\t\t\t\t\t\tgrid.$grid_data.style.left = grid.$grid.scrollLeft + \"px\";\r\n\t\t\t\t\t\t\tgrid.$grid_data.scrollLeft = grid.$grid.scrollLeft;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlayout.attachEvent(\"onResize\", function(){\r\n\t\t\t\t\tif (vertical && !gantt.$scroll_ver){\r\n\t\t\t\t\t\tgantt.$scroll_ver = vertical.$scroll_ver;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (horizontal && !gantt.$scroll_hor){\r\n\t\t\t\t\t\tgantt.$scroll_hor = horizontal.$scroll_hor;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t_findGridResizer: function(layout, grid){\r\n\t\t\t\tvar resizers = layout.getCellsByType(\"resizer\");\r\n\r\n\t\t\t\tvar gridFirst = true;\r\n\t\t\t\tvar gridResizer;\r\n\t\t\t\tfor(var i = 0; i < resizers.length; i++){\r\n\t\t\t\t\tvar res = resizers[i];\r\n\t\t\t\t\tres._getSiblings();\r\n\t\t\t\t\tvar prev = res._behind;\r\n\t\t\t\t\tvar next = res._front;\r\n\t\t\t\t\tif(prev && prev.$content === grid || (prev.isChild && prev.isChild(grid))){\r\n\t\t\t\t\t\tgridResizer = res;\r\n\t\t\t\t\t\tgridFirst = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}else if(next && next.$content === grid || (next.isChild && next.isChild(grid))){\r\n\t\t\t\t\t\tgridResizer = res;\r\n\t\t\t\t\t\tgridFirst = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn {\r\n\t\t\t\t\tresizer: gridResizer,\r\n\t\t\t\t\tgridFirst: gridFirst\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tonInitialized: function (layout) {\r\n\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\r\n\t\t\t\tvar resizeInfo = this._findGridResizer(layout, grid);\r\n\r\n\t\t\t\t// expose grid resize events\r\n\t\t\t\tif(resizeInfo.resizer){\r\n\t\t\t\t\tvar gridFirst = resizeInfo.gridFirst,\r\n\t\t\t\t\t\tnext = resizeInfo.resizer;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\tif(next.$config.mode !== \"x\"){\r\n\t\t\t\t\t\treturn;// track only horizontal resize\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar initialWidth;\r\n\t\t\t\t\tnext.attachEvent(\"onResizeStart\", function(prevCellWidth, nextCellWidth){\r\n\r\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tvar viewCell = grid ? grid.$parent : null;\r\n\t\t\t\t\t\tif(viewCell){\r\n\t\t\t\t\t\t\tvar limits = grid._getGridWidthLimits();\r\n\r\n\t\t\t\t\t\t\t// min grid width is defined by min widths of its columns, unless grid has horizontal scroll\r\n\t\t\t\t\t\t\tif(!grid.$config.scrollable)\r\n\t\t\t\t\t\t\t\tviewCell.$config.minWidth = limits[0];\r\n\r\n\t\t\t\t\t\t\tviewCell.$config.maxWidth = limits[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tinitialWidth = gridFirst ? prevCellWidth : nextCellWidth;\r\n\t\t\t\t\t\treturn gantt.callEvent(\"onGridResizeStart\", [initialWidth]);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tnext.attachEvent(\"onResize\", function(newBehindSize, newFrontSize){\r\n\t\t\t\t\t\tvar newSize = gridFirst ? newBehindSize : newFrontSize;\r\n\t\t\t\t\t\treturn gantt.callEvent(\"onGridResize\", [initialWidth, newSize]);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tnext.attachEvent(\"onResizeEnd\", function(oldBackSize, oldFrontSize, newBackSize, newFrontSize){\r\n\r\n\t\t\t\t\t\tvar oldSize = gridFirst ? oldBackSize : oldFrontSize;\r\n\t\t\t\t\t\tvar newSize = gridFirst ? newBackSize : newFrontSize;\r\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\r\n\t\t\t\t\t\tvar viewCell = grid ? grid.$parent : null;\r\n\t\t\t\t\t\tif(viewCell){\r\n\t\t\t\t\t\t\tviewCell.$config.minWidth = undefined;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar res = gantt.callEvent(\"onGridResizeEnd\", [oldSize, newSize]);\r\n\t\t\t\t\t\tif(res && newSize !== 0){// new size may be numeric zero when cell size is defined by 'gravity', actual size will be calculated by layout later\r\n\t\t\t\t\t\t\tgantt.config.grid_width = newSize;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn res;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\tonDestroyed: function (timeline) {\r\n\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t};\r\n})();\r\n\r\nexport default initializer;","import uiFactory from \"./ui_factory\";\r\nimport mouseEvents from \"./mouse\";\r\nimport createLayers from \"./gantt_layers\";\r\nimport Cell from \"./layout/cell\";\r\nimport Layout from \"./layout/layout\";\r\nimport ViewLayout from \"./layout/view_layout\";\r\nimport ViewCell from \"./layout/view_cell\";\r\nimport Resizer from \"./layout/resizer_cell\";\r\nimport Scrollbar from \"./layout/scrollbar_cell\";\r\nimport Timeline from \"./timeline/timeline\";\r\nimport Grid from \"./grid/grid\";\r\nimport ResourceGrid from \"./grid/resource_grid\";\r\nimport ResourceTimeline from \"./timeline/resource_timeline\";\r\nimport ResourceHistogram from \"./timeline/resource_histogram\";\r\n\r\n\r\nimport gridEditorsFactory from \"./grid/editors/controller\";\r\n\r\nimport renderTaskBar from \"./render/task_bar_smart_render\";\r\nimport renderTimedProjectBar from \"./render/task_project_smart_render\";\r\nimport renderSplitTaskBar from \"./render/task_split_render\";\r\nimport renderRollupTaskBar from \"./render/task_rollup_render\";\r\nimport renderTaskBg from \"./render/task_bg_render\";\r\nimport renderLink from \"./render/link_render\";\r\nimport gridRenderer from \"./render/task_grid_line_render\";\r\nimport resourceMatrixRenderer from \"./render/resource_matrix_render\";\r\nimport resourceHistogramRenderer from \"./render/resource_histogram_render\";\r\nimport gridTaskRowResizerRenderer from \"./render/task_grid_row_resize_render\";\r\nimport renderConstraints from \"./render/task_constraints_render\";\r\nimport renderDeadline from \"./render/task_deadline_render\";\r\nimport renderBaselines from \"./render/task_baselines_render\";\r\nimport mainGridInitializer from \"./grid/main_grid_initializer\";\r\nimport mainTimelineInitializer from \"./timeline/main_timeline_initializer\";\r\nimport mainLayoutInitializer from \"./main_layout_initializer\";\r\n\r\nfunction initUI(gantt){\r\n\tfunction attachInitializer(view, initializer){\r\n\t\tvar ext = initializer(gantt);\r\n\t\tif(ext.onCreated)\r\n\t\t\text.onCreated(view);\r\n\t\tview.attachEvent(\"onReady\", function(){\r\n\t\t\tif(ext.onInitialized)\r\n\t\t\t\text.onInitialized(view);\r\n\t\t});\r\n\t\tview.attachEvent(\"onDestroy\", function(){\r\n\t\t\tif(ext.onDestroyed)\r\n\t\t\t\text.onDestroyed(view);\r\n\t\t});\r\n\t}\r\n\r\n\tvar factory = uiFactory.createFactory(gantt);\r\n\tfactory.registerView(\"cell\", Cell);\r\n\tfactory.registerView(\"resizer\", Resizer);\r\n\tfactory.registerView(\"scrollbar\", Scrollbar);\r\n\tfactory.registerView(\"layout\", Layout, function(view){\r\n\t\tvar id = view.$config ? view.$config.id : null;\r\n\t\tif(id === \"main\"){\r\n\t\t\tattachInitializer(view, mainLayoutInitializer);\r\n\t\t}\r\n\t});\r\n\tfactory.registerView(\"viewcell\", ViewCell);\r\n\tfactory.registerView(\"multiview\", ViewLayout);\r\n\tfactory.registerView(\"timeline\", Timeline, function(view){\r\n\t\tvar id = view.$config ? view.$config.id : null;\r\n\t\tif(id === \"timeline\" || view.$config.bind == \"task\"){\r\n\t\t\tattachInitializer(view, mainTimelineInitializer);\r\n\t\t}\r\n\t});\r\n\tfactory.registerView(\"grid\", Grid, function(view){\r\n\t\tvar id = view.$config ? view.$config.id : null;\r\n\t\tif(id === \"grid\" || view.$config.bind == \"task\"){\r\n\t\t\tattachInitializer(view, mainGridInitializer);\r\n\t\t}\r\n\t});\r\n\r\n\tfactory.registerView(\"resourceGrid\", ResourceGrid);\r\n\tfactory.registerView(\"resourceTimeline\", ResourceTimeline);\r\n\tfactory.registerView(\"resourceHistogram\", ResourceHistogram);\r\n\r\n\tvar layersEngine = createLayers(gantt);\r\n\r\n\tvar inlineEditors = gridEditorsFactory(gantt);\r\n\r\n\tgantt.ext.inlineEditors = inlineEditors;\r\n\tgantt.ext._inlineEditors = inlineEditors;\r\n\tinlineEditors.init(gantt);\r\n\r\n\treturn {\r\n\t\tfactory:factory,\r\n\t\tmouseEvents: mouseEvents.init(gantt),\r\n\t\tlayersApi: layersEngine.init(),\r\n\t\trender:{\r\n\t\t\tgridLine: function(){\r\n\t\t\t\treturn gridRenderer(gantt);\r\n\t\t\t},\r\n\t\t\ttaskBg: function(){\r\n\t\t\t\treturn renderTaskBg(gantt);\r\n\t\t\t},\r\n\t\t\ttaskBar: function(){\r\n\t\t\t\treturn renderTaskBar(gantt);\r\n\t\t\t},\r\n\t\t\ttimedProjectBar: function(){\r\n\t\t\t\treturn renderTimedProjectBar(gantt);\r\n\t\t\t},\r\n\t\t\ttaskRollupBar: function() {\r\n\t\t\t\treturn renderRollupTaskBar(gantt);\r\n\t\t\t},\r\n\t\t\ttaskSplitBar: function(){\r\n\t\t\t\treturn renderSplitTaskBar(gantt);\r\n\t\t\t},\r\n\t\t\ttaskConstraints: function(){\r\n\t\t\t\treturn renderConstraints(gantt);\r\n\t\t\t},\r\n\t\t\ttaskDeadline: function(){\r\n\t\t\t\treturn renderDeadline(gantt);\r\n\t\t\t},\r\n\t\t\ttaskBaselines: function(){\r\n\t\t\t\treturn renderBaselines(gantt);\r\n\t\t\t},\r\n\t\t\tlink: function(){\r\n\t\t\t\treturn renderLink(gantt);\r\n\t\t\t},\r\n\t\t\tresourceRow: function(){\r\n\t\t\t\treturn resourceMatrixRenderer(gantt);\r\n\t\t\t},\r\n\t\t\tresourceHistogram: function(){\r\n\t\t\t\treturn resourceHistogramRenderer(gantt);\r\n\t\t\t},\r\n\t\t\tgridTaskRowResizer: function(){\r\n\t\t\t\treturn gridTaskRowResizerRenderer(gantt);\r\n\t\t\t}\r\n\t\t},\r\n\t\tlayersService: {\r\n\t\t\tgetDataRender: function(name){\r\n\t\t\t\treturn layersEngine.getDataRender(name, gantt);\r\n\t\t\t},\r\n\t\t\tcreateDataRender: function(config){\r\n\t\t\t\treturn layersEngine.createDataRender(config, gantt);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nexport default {\r\n\tinit: initUI\r\n};","export default null;","import * as helpers from \"../../../utils/helpers\";\r\nimport getRowRectangle from \"./viewport/get_grid_row_rectangle\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport isInViewPort from \"./viewport/is_grid_row_in_viewport\";\r\n\r\nfunction createGridLineRender(gantt){\r\n\r\n\tfunction _render_grid_item(item, view, config, viewport) {\r\n\t\tvar columns = view.getGridColumns();\r\n\t\tvar templates = view.$getTemplates();\r\n\r\n\t\tvar store = view.$config.rowStore;\r\n\r\n\t\tvar cells = [];\r\n\t\tvar has_child;\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar last = i == columns.length - 1;\r\n\t\t\tvar col = columns[i];\r\n\t\t\tvar cell;\r\n\r\n\t\t\tvar value;\r\n\t\t\tvar textValue;\r\n\t\t\tif (col.name == \"add\") {\r\n\t\t\t\tvar aria = gantt._waiAria.gridAddButtonAttrString(col);\r\n\r\n\t\t\t\tvalue = \"
\";\r\n\t\t\t\ttextValue = \"\";\r\n\t\t\t} else {\r\n\t\t\t\tif (col.template)\r\n\t\t\t\t\tvalue = col.template(item);\r\n\t\t\t\telse\r\n\t\t\t\t\tvalue = item[col.name];\r\n\r\n\t\t\t\tif (helpers.isDate(value)){\r\n\t\t\t\t\tvalue = templates.date_grid(value, item, col.name);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value === null || value === undefined) {\r\n\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttextValue = value;\r\n\t\t\t\tvalue = \"\" + value + \"
\";\r\n\t\t\t}\r\n\t\t\tvar css = \"gantt_cell\" + (last ? \" gantt_last_cell\" : \"\");\r\n\r\n\t\t\tvar tree = [];\r\n\t\t\tif (col.tree) {\r\n\t\t\t\tcss += \" gantt_cell_tree\";\r\n\t\t\t\tfor (var j = 0; j < item.$level; j++)\r\n\t\t\t\t\ttree.push(templates.grid_indent(item));\r\n\r\n\t\t\t\thas_child = store.hasChild(item.id) && !(gantt.isSplitTask(item) && !gantt.config.open_split_tasks);\r\n\t\t\t\tif (has_child) {\r\n\t\t\t\t\ttree.push(templates.grid_open(item));\r\n\t\t\t\t\ttree.push(templates.grid_folder(item));\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttree.push(templates.grid_blank(item));\r\n\t\t\t\t\ttree.push(templates.grid_file(item));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar style = \"width:\" + (col.width - (last ? 1 : 0)) + \"px;\";\r\n\t\t\tif (this.defined(col.align)){\r\n\t\t\t\tvar flexAlign = {\r\n\t\t\t\t\tright: \"flex-end\",\r\n\t\t\t\t\tleft: \"flex-start\",\r\n\t\t\t\t\tcenter: \"center\"\r\n\t\t\t\t};\r\n\t\t\t\tvar justifyContent = flexAlign[col.align];\r\n\r\n\t\t\t\tstyle += \"text-align:\" + col.align + \";justify-content:\" + justifyContent + \";\";\r\n\t\t\t}\r\n\r\n\t\t\tvar aria = gantt._waiAria.gridCellAttrString(col, textValue, item);\r\n\r\n\t\t\ttree.push(value);\r\n\t\t\tcell = \"\" + tree.join(\"\") + \"
\";\r\n\t\t\tcells.push(cell);\r\n\t\t}\r\n\t\t// GS-291. The odd class should be assigned correctly\r\n\t\tcss = \"\";\r\n\t\tconst storeName = store.$config.name;\r\n\t\tswitch (storeName) {\r\n\t\t\tcase \"task\":\r\n\t\t\t\tcss = gantt.getGlobalTaskIndex(item.id) % 2 === 0 ? \"\" : \" odd\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"resource\":\r\n\t\t\t\tcss = store.visibleOrder.indexOf(item.id) % 2 === 0 ? \"\" : \" odd\";\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcss += (item.$transparent) ? \" gantt_transparent\" : \"\";\r\n\r\n\t\tcss += (item.$dataprocessor_class ? \" \" + item.$dataprocessor_class : \"\");\r\n\r\n\t\tif (templates.grid_row_class) {\r\n\t\t\tvar css_template = templates.grid_row_class.call(gantt, item.start_date, item.end_date, item);\r\n\t\t\tif (css_template)\r\n\t\t\t\tcss += \" \" + css_template;\r\n\t\t}\r\n\r\n\t\tif(store.isSelected(item.id)) {\r\n\t\t\tcss += \" gantt_selected\";\r\n\t\t}\r\n\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.className = \"gantt_row\" + css + \" gantt_row_\" + gantt.getTaskType(item.type);\r\n\t\tvar height = view.getItemHeight(item.id);\r\n\t\tel.style.height = height + \"px\";\r\n\t\tel.style.lineHeight = height + \"px\";\r\n\r\n\t\tif(config.smart_rendering){\r\n\t\t\tel.style.position = \"absolute\";\r\n\t\t\tel.style.left = \"0px\";\r\n\t\t\tel.style.top = view.getItemTop(item.id) + \"px\";\r\n\t\t}\r\n\r\n\t\tif(view.$config.item_attribute){\r\n\t\t\tel.setAttribute(view.$config.item_attribute, item.id);\r\n\t\t\tel.setAttribute(view.$config.bind + \"_id\", item.id); // 'task_id'/'resource_id' for backward compatibility\r\n\t\t}\r\n\r\n\t\tgantt._waiAria.taskRowAttr(item, el);\r\n\r\n\t\tel.innerHTML = cells.join(\"\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tfunction onrender(item, rowNode, view){\r\n\t\tvar columns = view.getGridColumns();\r\n\t\tfor (var i = 0; i < columns.length; i++) {\r\n\t\t\tvar column = columns[i];\r\n\t\t\tif (column.onrender){\r\n\r\n\t\t\t\t// find cell node for current column\r\n\t\t\t\tvar cellNode = rowNode.querySelector(\"[data-column-name=\" + column.name + \"]\");\r\n\t\t\t\tif (cellNode) {\r\n\t\t\t\t\tvar content = column.onrender(item, cellNode);\r\n\t\t\t\t\tif (content && typeof content === \"string\") {\r\n\t\t\t\t\t\tcellNode.innerHTML = content;\r\n\t\t\t\t\t} else if (content && typeof content === \"object\") {\r\n\t\t\t\t\t\t// render object to node using additional functionality\r\n\t\t\t\t\t\tif (gantt.config.external_render){\r\n\t\t\t\t\t\t\tvar adapter = gantt.config.external_render;\r\n\t\t\t\t\t\t\tif (adapter.isElement(content)){\r\n\t\t\t\t\t\t\t\tadapter.renderElement(content, cellNode);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: _render_grid_item,\r\n\t\tupdate: null,\r\n\t\tgetRectangle: getRowRectangle,\r\n\t\tisInViewPort: isInViewPort,\r\n\t\tgetVisibleRange: getVisibleRange,\r\n\t\tonrender: onrender\r\n\t};\r\n}\r\n\r\nexport default createGridLineRender;","import getRowRectangle from \"./viewport/get_bg_row_rectangle\";\r\nimport isLegacyRender from \"./is_legacy_smart_render\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport getVisibleCellsRange from \"./viewport/get_visible_cells_range\";\r\nimport isColumnVisible from \"./viewport/is_column_visible\";\r\nimport bgPlaceholder from \"./prerender/task_bg_placeholder\";\r\n\r\nfunction createTaskBgRender(gantt){\r\n\tvar renderedCells = {};\r\n\tvar visibleCells = {};\r\n\r\n\tfunction isRendered(item, columnIndex){\r\n\t\tif(renderedCells[item.id][columnIndex] && renderedCells[item.id][columnIndex].parentNode){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction detachRenderedCell(itemId, columnIndex){\r\n\t\tif(renderedCells[itemId] && renderedCells[itemId][columnIndex] &&\r\n\t\t\trenderedCells[itemId][columnIndex].parentNode\r\n\t\t\t){\r\n\t\t\t\trenderedCells[itemId][columnIndex].parentNode.removeChild(renderedCells[itemId][columnIndex]);\r\n\t\t\t}\r\n\t}\r\n\r\n\tfunction getCellClassTemplate(view){\r\n\t\tvar templates = view.$getTemplates();\r\n\t\tvar cssTemplate;\r\n\t\tif (typeof templates.task_cell_class !== \"undefined\") {\r\n\t\t\tcssTemplate = templates.task_cell_class;\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tvar log = console.warn || console.log;\r\n\t\t\tlog('gantt.templates.task_cell_class template is deprecated and will be removed soon. Please use gantt.templates.timeline_cell_class instead.');\r\n\t\t} else {\r\n\t\t\tcssTemplate = templates.timeline_cell_class;\r\n\t\t}\r\n\t\treturn cssTemplate;\r\n\t}\r\n\tfunction getCellContentTemplate(view){\r\n\t\tvar templates = view.$getTemplates();\r\n\t\tvar contentTemplate = templates.timeline_cell_content;\r\n\t\treturn contentTemplate;\r\n\t}\r\n\r\n\tfunction renderCells(item, node, view, config, viewPort){\r\n\t\tvar cfg = view.getScale();\r\n\t\tvar count = cfg.count;\r\n\t\tvar cssTemplate = getCellClassTemplate(view);\r\n\t\tvar contentTemplate = getCellContentTemplate(view);\r\n\r\n\t\tif (config.show_task_cells) {\r\n\t\t\tif(!renderedCells[item.id]){\r\n\t\t\t\trenderedCells[item.id] = {};\r\n\t\t\t}\r\n\t\t\tif(!visibleCells[item.id]){\r\n\t\t\t\tvisibleCells[item.id] = {};\r\n\t\t\t}\r\n\r\n\t\t\tvar range = getVisibleCellsRange(cfg, viewPort);\r\n\r\n\t\t\tfor(var i in visibleCells[item.id]){\r\n\t\t\t\tvar index = visibleCells[item.id][i];\r\n\r\n\t\t\t\tif(Number(index) < range.start || Number(index) > range.end){\r\n\t\t\t\t\tdetachRenderedCell(item.id, index);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvisibleCells[item.id] = {};\r\n\t\t\t// TODO: do not iterate all cell, only ones in the viewport and once that are already rendered\r\n\t\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\t\t\t\tvar cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cssTemplate, contentTemplate, config);\r\n\t\t\t\tif(!cell && isRendered(item, columnIndex)){\r\n\t\t\t\t\tdetachRenderedCell(item.id, columnIndex);\r\n\t\t\t\t}else if (cell && !cell.parentNode){\r\n\t\t\t\t\tnode.appendChild(cell);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction renderOneCell(scale, columnIndex, item, viewPort, count, cssTemplate, contentTemplate, config){\r\n\t\tvar width = scale.width[columnIndex],\r\n\t\t\tcssclass = \"\";\r\n\r\n\t\tif (isColumnVisible(columnIndex, scale, viewPort, gantt)) {//do not render skipped columns\r\n\r\n\t\t\tvar cssTemplateContent = cssTemplate(item, scale.trace_x[columnIndex]);\r\n\t\t\tvar htmlTemplateContent = \"\";\r\n\t\t\tif (contentTemplate) {// for backward compatibility, contentTemplate was added in 7.2.0+, will be undefined if someone used copy of old config/template object\r\n\t\t\t\thtmlTemplateContent = contentTemplate(item, scale.trace_x[columnIndex]);\r\n\t\t\t}\r\n\r\n\t\t\tif(config.static_background){\r\n\t\t\t\t// if cell render in static background is not allowed, or if it's a blank cell\r\n\t\t\t\tvar customCell = !!(cssTemplateContent || htmlTemplateContent);\r\n\t\t\t\tif(!(config.static_background_cells && customCell)){\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(renderedCells[item.id][columnIndex]){\r\n\t\t\t\tvisibleCells[item.id][columnIndex] = columnIndex;\r\n\t\t\t\treturn renderedCells[item.id][columnIndex];\r\n\t\t\t}\r\n\t\t\tvar cell = document.createElement(\"div\");\r\n\t\t\tcell.style.width = (width) + \"px\";\r\n\r\n\t\t\tcssclass = \"gantt_task_cell\" + (columnIndex == count - 1 ? \" gantt_last_cell\" : \"\");\r\n\t\t\tif (cssTemplateContent) {\r\n\t\t\t\tcssclass += \" \" + cssTemplateContent;\r\n\t\t\t}\r\n\t\t\tcell.className = cssclass;\r\n\r\n\t\t\tif (htmlTemplateContent) {\r\n\t\t\t\tcell.innerHTML = htmlTemplateContent;\r\n\t\t\t}\r\n\r\n\t\t\tcell.style.position = \"absolute\";\r\n\t\t\tcell.style.left = scale.left[columnIndex] + \"px\";\r\n\t\t\trenderedCells[item.id][columnIndex] = cell;\r\n\t\t\tvisibleCells[item.id][columnIndex] = columnIndex;\r\n\r\n\t\t\treturn cell;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction _render_bg_line(item, view, config, viewPort) {\r\n\t\tvar templates = view.$getTemplates();\r\n\t\tvar cfg = view.getScale();\r\n\t\tvar count = cfg.count;\r\n\r\n\t\tif(config.static_background && !config.static_background_cells){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar row = document.createElement(\"div\");\r\n\r\n\t\tvar cellCssTemplate = getCellClassTemplate(view);\r\n\t\tvar cellHtmlTemplate = getCellContentTemplate(view);\r\n\r\n\t\tvar range;\r\n\r\n\t\tif(!viewPort || !config.smart_rendering || isLegacyRender(gantt)){\r\n\t\t\trange = {\r\n\t\t\t\tstart: 0,\r\n\t\t\t\tend: count - 1\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\trange = getVisibleCellsRange(cfg, viewPort.x);\r\n\t\t}\r\n\t\tif (config.show_task_cells) {\r\n\t\t\trenderedCells[item.id] = {};\r\n\t\t\tvisibleCells[item.id] = {};\r\n\t\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\t\t\t\tvar cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cellCssTemplate, cellHtmlTemplate, config);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\trow.appendChild(cell);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// GS-291. The odd class should be assigned correctly\r\n\t\tconst store = view.$config.rowStore;\r\n\t\tconst odd = store.getIndexById(item.id) % 2 !== 0;\r\n\r\n\t\tvar cssTemplate = templates.task_row_class(item.start_date, item.end_date, item);\r\n\t\tvar css = \"gantt_task_row\" + (odd ? \" odd\" : \"\") + (cssTemplate ? ' ' + cssTemplate : '');\r\n\r\n\t\tif(store.isSelected(item.id)) {\r\n\t\t\tcss += \" gantt_selected\";\r\n\t\t}\r\n\r\n\t\trow.className = css;\r\n\r\n\t\tif (config.smart_rendering) {\r\n\t\t\trow.style.position = \"absolute\";\r\n\t\t\trow.style.top = view.getItemTop(item.id) + \"px\";\r\n\t\t\trow.style.width = \"100%\";\r\n\t\t}else{\r\n\t\t\trow.style.position = \"relative\";\r\n\t\t}\r\n\t\trow.style.height = (view.getItemHeight(item.id)) + \"px\";\r\n\r\n\t\tif (item.id == \"timeline_placeholder_task\"){\r\n\t\t\tvar placeholderTop = 0;\r\n\t\t\tif (item.lastTaskId){\r\n\t\t\t\tvar lastTaskTop = view.getItemTop(item.lastTaskId);\r\n\t\t\t\tvar lastTaskHeight = view.getItemHeight(item.lastTaskId);\r\n\t\t\t\tplaceholderTop = lastTaskTop + lastTaskHeight;\t\r\n\t\t\t}\r\n\r\n\t\t\tvar maxHeight = item.row_height || view.$task_data.offsetHeight;\r\n\r\n\t\t\tvar placeholderHeight = maxHeight - placeholderTop;\r\n\t\t\t// So that it won't exceed the placeholder timeline height\r\n\t\t\tif (placeholderHeight < 0){\r\n\t\t\t\tplaceholderHeight = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.smart_rendering) {\r\n\t\t\t\trow.style.top = placeholderTop + \"px\";\t\r\n\t\t\t}\r\n\t\t\trow.style.height = placeholderHeight + \"px\";\r\n\t\t}\r\n\r\n\r\n\t\tif(view.$config.item_attribute){\r\n\t\t\trow.setAttribute(view.$config.item_attribute, item.id);\r\n\t\t\trow.setAttribute(view.$config.bind + \"_id\", item.id); // 'task_id'/'resource_id' for backward compatibility\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: _render_bg_line,\r\n\t\tupdate: renderCells,\r\n\t\tgetRectangle: getRowRectangle,\r\n\t\tgetVisibleRange: getVisibleRange,\r\n\t\tprepareData: bgPlaceholder\r\n\t};\r\n}\r\n\r\nexport default createTaskBgRender;\r\n","import createBaseBarRender from \"./task_bar_render\";\r\nimport isInViewPort from \"./viewport/is_bar_in_viewport\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\n\r\nfunction createTaskRenderer(gantt){\r\n\tconst defaultRender = createBaseBarRender(gantt);\r\n\r\n\tconst renderedNodes = {};\r\n\r\n\tfunction checkVisibility(child, viewPort, timeline, config, gantt){\r\n\t\tlet isVisible = true;\r\n\t\t// GS-2123. Don't render rollup tasks that are outside the viewport\r\n\t\tif (config.smart_rendering){\r\n\t\t\tisVisible = isInViewPort(child, viewPort, timeline, config, gantt);\r\n\t\t}\r\n\t\treturn isVisible;\r\n\t}\r\n\r\n\tfunction generateChildElement(task, child, timeline, sizes){\r\n\t\tconst childCopy = gantt.copy(gantt.getTask(child.id));\r\n\t\tchildCopy.$rendered_at = task.id;\r\n\t\t// a way to filter rollup tasks:\r\n\t\tconst displayRollup = gantt.callEvent(\"onBeforeRollupTaskDisplay\", [childCopy.id, childCopy, task.id]);\r\n\t\tif (displayRollup === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst element = defaultRender(childCopy, timeline);\r\n\t\tif(!element){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst height = timeline.getBarHeight(task.id, child.type == gantt.config.types.milestone);\r\n\t\tconst padding = Math.floor((timeline.getItemHeight(task.id) - height) / 2);\r\n\r\n\t\telement.style.top = (sizes.top + padding) + \"px\";\r\n\t\telement.classList.add(\"gantt_rollup_child\");\r\n\t\telement.setAttribute(\"data-rollup-parent-id\", task.id);\r\n\r\n\t\treturn element;\r\n\t}\r\n\r\n\tfunction getKey(childId, renderParentId){\r\n\t\treturn childId + \"_\" + renderParentId;\r\n\t}\r\n\r\n\r\n\tfunction renderRollupTask(task, timeline, config, viewPort) {\r\n\t\tif (task.rollup !== false && task.$rollup && task.$rollup.length) {\r\n\t\t\tconst el = document.createElement('div'),\r\n\t\t\t\tsizes = gantt.getTaskPosition(task);\r\n\r\n\t\t\t// vertical position is not important for the rollup tasks as long as the parent is rendered\r\n\t\t\tif (viewPort){\r\n\t\t\t\tviewPort.y = 0;\r\n\t\t\t\tviewPort.y_end = gantt.$task_bg.scrollHeight;\r\n\t\t\t}\r\n\r\n\t\t\ttask.$rollup.forEach(function(itemId){\r\n\t\t\t\tif (!gantt.isTaskExists(itemId)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst child = gantt.getTask(itemId);\r\n\t\t\t\tlet isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\r\n\t\t\t\tif (!isVisible){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst element = generateChildElement(task, child, timeline, sizes);\r\n\t\t\t\tif (element) {\r\n\t\t\t\t\trenderedNodes[getKey(child.id, task.id)] = element;\r\n\t\t\t\t\tel.appendChild(element);\r\n\t\t\t\t} else{\r\n\t\t\t\t\trenderedNodes[getKey(child.id, task.id)] = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\treturn el;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction repaintRollupTask(task, itemNode, timeline, config, viewPort) {\r\n\t\tconst el = document.createElement(\"div\"),\r\n\t\tsizes = gantt.getTaskPosition(task);\r\n\r\n\t\t// vertical position is not important for the rollup tasks as long as the parent is rendered\r\n\t\tviewPort.y = 0;\r\n\t\tviewPort.y_end = gantt.$task_bg.scrollHeight;\r\n\r\n\t\ttask.$rollup.forEach(function(itemId){\r\n\t\t\tconst child = gantt.getTask(itemId);\r\n\t\t\tconst rollupKey = getKey(child.id, task.id);\r\n\t\t\tlet isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\r\n\t\t\tif (isVisible !== !!renderedNodes[rollupKey]) {\r\n\r\n\t\t\t\tif (isVisible) {\r\n\t\t\t\t\tconst element = generateChildElement(task, child, timeline, sizes);\r\n\t\t\t\t\trenderedNodes[rollupKey] = element || false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderedNodes[rollupKey] = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!!renderedNodes[rollupKey]) {\r\n\t\t\t\tel.appendChild(renderedNodes[rollupKey]);\r\n\t\t\t}\r\n\t\t\titemNode.innerHTML = \"\";\r\n\t\t\titemNode.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\treturn {\r\n\t\trender: renderRollupTask,\r\n\t\tupdate: repaintRollupTask,\r\n\t\t//getRectangle: getBarRectangle\r\n\t\tisInViewPort: isInViewPort,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n}\r\n\r\nexport default createTaskRenderer;","import getRectangle from \"./viewport/get_bg_row_rectangle\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\nimport getVisibleCellsRange from \"./viewport/get_visible_cells_range\";\r\nimport isColumnVisible from \"./viewport/is_column_visible\";\r\nimport resourceTimetable from \"../../resource_timetable_builder\";\r\n\r\nfunction generateRenderResourceLine(gantt){\r\n\tvar getResourceLoad = resourceTimetable(gantt);\r\n\tvar renderedResourceLines = {};\r\n\r\n\tfunction renderResourceLineCell(resource, day, templates, config, timeline){\r\n\t\tvar css = templates.resource_cell_class(day.start_date, day.end_date, resource, day.tasks, day.assignments);\r\n\t\tvar content = templates.resource_cell_value(day.start_date, day.end_date, resource, day.tasks, day.assignments);\r\n\t\tvar height = timeline.getItemHeight(resource.id) - 1;\r\n\r\n\t\tif (css || content){\r\n\t\t\tvar sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\r\n\t\t\tvar el = document.createElement('div');\r\n\t\t\tel.setAttribute(timeline.$config.item_attribute, resource.id);\r\n\t\t\tel.className = [\"gantt_resource_marker\", css].join(\" \");\r\n\r\n\t\t\tel.style.cssText = [\r\n\t\t\t\t'left:' + sizes.left + 'px',\r\n\t\t\t\t'width:' + sizes.width + 'px',\r\n\t\t\t\t'height:' + (height) + 'px',\r\n\t\t\t\t'line-height:' + (height) + 'px',\r\n\t\t\t\t'top:' + sizes.top + 'px'\r\n\t\t\t].join(\";\");\r\n\r\n\t\t\tif(content)\r\n\t\t\t\tel.innerHTML = content;\r\n\r\n\t\t\treturn el;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction detachRenderedResourceLine(id, index){\r\n\t\tif(renderedResourceLines[id] && renderedResourceLines[id][index] &&\r\n\t\t\trenderedResourceLines[id][index].parentNode\r\n\t\t\t){\r\n\t\t\t\trenderedResourceLines[id][index].parentNode.removeChild(renderedResourceLines[id][index]);\r\n\t\t\t}\r\n\t}\r\n\r\n\tfunction renderResourceLine(resource, timeline, config, viewport) {\r\n\t\tvar templates = timeline.$getTemplates();\r\n\t\tvar scale = timeline.getScale();\r\n\t\tvar timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\r\n\t\tvar smartRendering = !!viewport;//no viewport means smart rendering is disabled\r\n\t\tvar cells = [];\r\n\t\trenderedResourceLines[resource.id] = {};\r\n\r\n\t\tvar range = getVisibleCellsRange(scale, viewport);\r\n\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\r\n\t\t\tvar day = timetable[columnIndex];\r\n\t\t\tif(!day){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(smartRendering && !isColumnVisible(columnIndex, scale, viewport, gantt)){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tvar cell = renderResourceLineCell(resource, day, templates, config, timeline);\r\n\t\t\tif(cell){\r\n\t\t\t\tcells.push(cell);\r\n\t\t\t\trenderedResourceLines[resource.id][columnIndex] = cell;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar row = null;\r\n\t\tif(cells.length){\r\n\t\t\trow = document.createElement(\"div\");\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\trow.appendChild(cells[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn row;\r\n\t}\r\n\r\n\tfunction updateResourceLine(resource, node, timeline, config, viewport) {\r\n\t\tvar templates = timeline.$getTemplates();\r\n\t\tvar scale = timeline.getScale();\r\n\t\tvar timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\r\n\r\n\t\tvar range = getVisibleCellsRange(scale, viewport);\r\n\r\n\t\tvar checkedColumns = {};\r\n\t\tif(renderedResourceLines && renderedResourceLines[resource.id]){\r\n\t\t\tfor(var i in renderedResourceLines[resource.id]){\r\n\t\t\t\tcheckedColumns[i] = i;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\r\n\t\t\tvar day = timetable[columnIndex];\r\n\t\t\tcheckedColumns[columnIndex] = false;\r\n\t\t\tif(!day){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(!isColumnVisible(columnIndex, scale, viewport, gantt)){\r\n\t\t\t\tdetachRenderedResourceLine(resource.id, columnIndex);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif(!renderedResourceLines[resource.id] || !renderedResourceLines[resource.id][columnIndex]){\r\n\t\t\t\tvar cell = renderResourceLineCell(resource, day, templates, config, timeline);\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tnode.appendChild(cell);\r\n\t\t\t\t\trenderedResourceLines[resource.id][columnIndex] = cell;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(renderedResourceLines[resource.id] && renderedResourceLines[resource.id][columnIndex] && !renderedResourceLines[resource.id][columnIndex].parentNode){\r\n\t\t\t\tnode.appendChild(renderedResourceLines[resource.id][columnIndex]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor(var i in checkedColumns){\r\n\t\t\tif(checkedColumns[i] !== false){\r\n\t\t\t\tdetachRenderedResourceLine(resource.id, i);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: renderResourceLine,\r\n\t\tupdate: updateResourceLine,\r\n\t\tgetRectangle: getRectangle,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n}\r\n\r\nexport default generateRenderResourceLine;","import getRowRectangle from \"./viewport/get_grid_row_rectangle\";\r\nimport getVisibleRange from \"./viewport/get_visible_bars_range\";\r\n\r\nfunction createGridTaskRowResizerRender(gantt){\r\n\r\n\tfunction _render_grid_item(item, view, viewport) {\r\n\r\n\t\tvar config = view.$getConfig();\r\n\t\tvar resize_el = document.createElement(\"div\");\r\n\t\tresize_el.className = \"gantt_task_grid_row_resize_wrap\";\r\n\r\n\t\tresize_el.style.top = (view.getItemTop(item.id) + view.getItemHeight(item.id)) + \"px\";\r\n\r\n\t\tresize_el.innerHTML = \"
\";\r\n\t\tresize_el.setAttribute(config.task_grid_row_resizer_attribute, item.id);\r\n\r\n\t\tgantt._waiAria.rowResizerAttr(resize_el);\r\n\t\treturn resize_el;\r\n\t}\r\n\r\n\treturn {\r\n\t\trender: _render_grid_item,\r\n\t\tupdate: null,\r\n\t\tgetRectangle: getRowRectangle,\r\n\t\tgetVisibleRange: getVisibleRange\r\n\t};\r\n}\r\n\r\nexport default createGridTaskRowResizerRender;","function _configure(col, data, force) {\r\n\tfor (var key in data)\r\n\t\tif (typeof col[key] == \"undefined\" || force)\r\n\t\t\tcol[key] = data[key];\r\n}\r\n\r\nfunction _get_skin(force, gantt) {\r\n\r\n\tconst styles = getComputedStyle(gantt.$root);\r\n\tconst themeVar = styles.getPropertyValue(\"--dhx-gantt-theme\");\r\n\tlet isCssVarTheme = !!themeVar;\r\n\tlet themeName;\r\n\r\n\t\r\n\tif(isCssVarTheme){\r\n\t\tthemeName = themeVar;\r\n\t}else{\r\n\t\tvar skin = gantt.skin;\r\n\t\tthemeName = skin;\r\n\t\tif (!skin || force) {\r\n\t\t\tvar links = document.getElementsByTagName(\"link\");\r\n\t\t\tfor (var i = 0; i < links.length; i++) {\r\n\t\t\t\tvar res = links[i].href.match(\"dhtmlxgantt_([a-z_]+).css\");\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tif (gantt.skins[res[1]] || !skin) {\r\n\t\t\t\t\t\tthemeName = res[1];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tgantt._theme_info = {\r\n\t\ttheme: themeName,\r\n\t\tcssVarTheme: isCssVarTheme\r\n\t};\r\n\r\n\r\n\r\n\tgantt.skin = themeName || \"terrace\";\r\n\tvar skinset = gantt.skins[gantt.skin] || gantt.skins[\"terrace\"];\r\n\r\n\t//apply skin related settings\r\n\t_configure(gantt.config, skinset.config, force);\r\n\r\n\tif(!isCssVarTheme){\r\n\t\tgantt.config.link_radius = 1;\r\n\t}\r\n\r\n\tvar config = gantt.getGridColumns();\r\n\tif (config[1] && !gantt.defined(config[1].width))\r\n\t\tconfig[1].width = skinset._second_column_width;\r\n\tif (config[2] && !gantt.defined(config[2].width))\r\n\t\tconfig[2].width = skinset._third_column_width;\r\n\t\r\n\tfor (var i=0; i column.width) ? column.min_width : column.width;\r\n\t\t\t\tcolumn.width = (column.max_width && column.max_width < column.width) ? column.max_width : column.width;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (skinset.config.task_height){\r\n\t\tgantt.config.task_height = skinset.config.task_height || \"full\";\r\n\t}\r\n\tif (skinset.config.bar_height){\r\n\t\tgantt.config.bar_height = skinset.config.bar_height || \"full\";\r\n\t}\r\n\r\n\tif (skinset._lightbox_template)\r\n\t\tgantt._lightbox_template = skinset._lightbox_template;\r\n\r\n\tif (skinset._redefine_lightbox_buttons) {\r\n\t\tgantt.config.buttons_right = skinset._redefine_lightbox_buttons[\"buttons_right\"];\r\n\t\tgantt.config.buttons_left = skinset._redefine_lightbox_buttons[\"buttons_left\"];\r\n\t}\r\n\r\n\r\n\tgantt.resetLightbox();\r\n}\r\n\r\n\r\n\r\nexport default function(gantt) {\r\n\t\r\n\tif(!gantt.resetSkin){\r\n\t\tgantt.resetSkin = function () {\r\n\t\t\tthis.skin = \"\";\r\n\t\t\t_get_skin(true, this);\r\n\t\t};\r\n\t\tgantt.skins = {};\r\n\r\n\t\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t\t\t_get_skin(false, this);\r\n\t\t\tmonitorThemeChange();\r\n\t\t});\r\n\t}\r\n\r\n\tgantt._addThemeClass = function(){\r\n\t\tdocument.documentElement.setAttribute(\"data-gantt-theme\", gantt.skin);\r\n\t};\r\n\r\n\tgantt.setSkin = function(value){\r\n\t\tthis.skin = value;\r\n\t\tgantt._addThemeClass();\r\n\t\tmonitorThemeChange();\r\n\t\tif(gantt.$root){\r\n\t\t\t_get_skin(true, gantt);\r\n\t\t\tthis.render();\r\n\t\t}\r\n\t\t\r\n\t\t//\r\n\t};\r\n\r\n\r\n\tlet monitorIntervalId = null;\r\n\tfunction monitorThemeChange(){\r\n\t\tconst container = gantt.$root;\r\n\t\t\r\n\t\tif(monitorIntervalId){\r\n\t\t\tclearInterval(monitorIntervalId);\r\n\t\t}\r\n\t\t\r\n\t\tif(container){\r\n\t\t\tmonitorIntervalId = setInterval(() => {\r\n\t\t\t\tconst csstheme = getComputedStyle(container).getPropertyValue('--dhx-gantt-theme');\r\n\t\t\t\tif(csstheme && csstheme !== gantt.skin){\r\n\t\t\t\t\tgantt.setSkin(csstheme);\r\n\t\t\t\t}\r\n\r\n\t\t\t}, 100);\r\n\t\t}\r\n\t}\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\tclearInterval(monitorIntervalId);\r\n\t});\r\n};","import * as domHelpers from \"../utils/dom_helpers\";\r\nimport isHeadless from \"../../../utils/is_headless\";\r\n\r\nexport default function(gantt){\r\n\r\n\tvar scrollRange = 50,\r\n\t\tscrollStep = 30,\r\n\t\tscrollDelay = 10,\r\n\t\tscrollSpeed = 50;\r\n\r\n\tvar interval = null,\r\n\t\tisMove = false,\r\n\t\tdelayTimeout = null,\r\n\t\tstartPos = {\r\n\t\t\tstarted: false\r\n\t\t},\r\n\t\teventPos = {};\r\n\r\n\r\n\tfunction isDisplayed(element){\r\n\t\treturn element &&\r\n\t\t\tdomHelpers.isChildOf(element, gantt.$root) &&\r\n\t\t\telement.offsetHeight;\r\n\t}\r\n\r\n\tfunction getAutoscrollContainer(){\r\n\t\tvar element;\r\n\t\tif(isDisplayed(gantt.$task)){\r\n\t\t\telement = gantt.$task;\r\n\t\t}else if(isDisplayed(gantt.$grid)){\r\n\t\t\telement = gantt.$grid;\r\n\t\t}else{\r\n\t\t\telement = gantt.$root;\r\n\t\t}\r\n\r\n\t\treturn element;\r\n\t}\r\n\r\n\tfunction isScrollState() {\r\n\t\tvar dragMarker = !!document.querySelector(\".gantt_drag_marker\");\r\n\t\tvar isResize = !!document.querySelector(\".gantt_drag_marker.gantt_grid_resize_area\")\r\n\t\t\t|| !!document.querySelector(\".gantt_drag_marker.gantt_row_grid_resize_area\") ;\r\n\t\tvar isLink = !!document.querySelector(\".gantt_link_direction\");\r\n\t\tvar state = gantt.getState();\r\n\t\tvar isClickDrag = state.autoscroll;\r\n\t\tisMove = dragMarker && !isResize && !isLink;\r\n\r\n\t\treturn !((!state.drag_mode && !dragMarker) || isResize) || isClickDrag;\r\n\t}\r\n\r\n\tfunction defineDelayTimeout(state) {\r\n\t\tif (delayTimeout) {\r\n\t\t\tclearTimeout(delayTimeout);\r\n\t\t\tdelayTimeout = null;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tvar speed = gantt.config.autoscroll_speed;\r\n\t\t\tif (speed && speed < 10) // limit speed value to 10\r\n\t\t\t\tspeed = 10;\r\n\r\n\t\t\tdelayTimeout = setTimeout(function() {\r\n\t\t\t\tinterval = setInterval(tick, speed || scrollSpeed);\r\n\t\t\t}, gantt.config.autoscroll_delay || scrollDelay);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction defineScrollInterval(state) {\r\n\t\tif (state) {\r\n\t\t\tdefineDelayTimeout(true);\r\n\t\t\tif (!startPos.started) {\r\n\t\t\t\tstartPos.x = eventPos.x;\r\n\t\t\t\tstartPos.y = eventPos.y;\r\n\t\t\t\tstartPos.started = true;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (interval) {\r\n\t\t\t\tclearInterval(interval);\r\n\t\t\t\tinterval = null;\r\n\t\t\t}\r\n\t\t\tdefineDelayTimeout(false);\r\n\t\t\tstartPos.started = false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction autoscrollInterval(event) {\r\n\t\tvar isScroll = isScrollState();\r\n\r\n\t\tif ((interval || delayTimeout) && !isScroll) {\r\n\t\t\tdefineScrollInterval(false);\r\n\t\t}\r\n\r\n\t\tif (!gantt.config.autoscroll || !isScroll) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\teventPos = {\r\n\t\t\tx: event.clientX,\r\n\t\t\ty: event.clientY\r\n\t\t};\r\n\r\n\t\t// if it is a mobile device, we need to detect the touch event coords\r\n\t\tif (event.type == \"touchmove\"){\r\n\t\t\teventPos.x = event.targetTouches[0].clientX;\r\n\t\t\teventPos.y = event.targetTouches[0].clientY;\r\n\t\t}\r\n\r\n\t\tif (!interval && isScroll) {\r\n\t\t\tdefineScrollInterval(true);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction tick() {\r\n\r\n\t\tif (!isScrollState()) {\r\n\t\t\tdefineScrollInterval(false);\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar container = getAutoscrollContainer();\r\n\t\tif(!container){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// GS-1150: if we reorder or resize something in the grid, we should obtain the grid container\r\n\t\tvar gridDrag = false;\r\n\t\tvar gridMarkers = [\r\n\t\t\t\".gantt_drag_marker.gantt_grid_resize_area\",\r\n\t\t\t\".gantt_drag_marker .gantt_row.gantt_row_task\",\r\n\t\t\t\".gantt_drag_marker.gantt_grid_dnd_marker\"\r\n\t\t];\r\n\t\tgridMarkers.forEach(function (selector) {\r\n\t\t\tgridDrag = gridDrag || !!document.querySelector(selector);\r\n\t\t});\r\n\t\tif (gridDrag){\r\n\t\t\tcontainer = gantt.$grid;\r\n\t\t}\r\n\r\n\t\tvar box = domHelpers.getNodePosition(container);\r\n\r\n\t\tvar posX = eventPos.x - box.x;\r\n\t\tvar posY = eventPos.y - box.y + window.scrollY; // GS-1315: window.scrollY here and below for the elements above Gantt\r\n\r\n\t\tvar scrollLeft = isMove ? 0 : need_scroll(posX, box.width, startPos.x - box.x);\r\n\t\tvar scrollTop = need_scroll(posY, box.height, startPos.y - box.y + window.scrollY);\r\n\r\n\t\tvar scrollState = gantt.getScrollState();\r\n\r\n\t\tvar currentScrollTop = scrollState.y,\r\n\t\t\tscrollOuterHeight = scrollState.inner_height,\r\n\t\t\tscrollInnerHeight = scrollState.height,\r\n\t\t\tcurrentScrollLeft = scrollState.x,\r\n\t\t\tscrollOuterWidth = scrollState.inner_width,\r\n\t\t\tscrollInnerWidth = scrollState.width;\r\n\r\n\t\t// do scrolling only if we have scrollable area to do so\r\n\t\tif (scrollTop && !scrollOuterHeight) {\r\n\t\t\tscrollTop = 0;\r\n\t\t} else if (scrollTop < 0 && !currentScrollTop) {\r\n\t\t\tscrollTop = 0;\r\n\t\t} else if (scrollTop > 0 && currentScrollTop + scrollOuterHeight >= scrollInnerHeight + 2) {\r\n\t\t\tscrollTop = 0;\r\n\t\t}\r\n\r\n\t\tif (scrollLeft && !scrollOuterWidth) {\r\n\t\t\tscrollLeft = 0;\r\n\t\t} else if (scrollLeft < 0 && !currentScrollLeft) {\r\n\t\t\tscrollLeft = 0;\r\n\t\t} else if (scrollLeft > 0 && currentScrollLeft + scrollOuterWidth >= scrollInnerWidth) {\r\n\t\t\tscrollLeft = 0;\r\n\t\t}\r\n\r\n\t\tvar step = gantt.config.autoscroll_step;\r\n\r\n\t\tif (step && step < 2) // limit step value to 2\r\n\t\t\tstep = 2;\r\n\r\n\t\tscrollLeft = scrollLeft * (step || scrollStep);\r\n\t\tscrollTop = scrollTop * (step || scrollStep);\r\n\r\n\t\tif (scrollLeft || scrollTop) {\r\n\t\t\tscroll(scrollLeft, scrollTop);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction need_scroll(pos, boxSize, startCoord) {\r\n\t\tif ((pos - scrollRange < 0) && (pos < startCoord))\r\n\t\t\treturn -1;\r\n\t\telse if ((pos > boxSize - scrollRange) && (pos > startCoord))\r\n\t\t\treturn 1;\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfunction scroll(left, top) {\r\n\t\tvar scrollState = gantt.getScrollState();\r\n\r\n\t\tvar scrollLeft = null,\r\n\t\t\tscrollTop = null;\r\n\r\n\t\tif (left) {\r\n\t\t\tscrollLeft = scrollState.x + left;\r\n\t\t\tscrollLeft = Math.min(scrollState.width, scrollLeft);\r\n\t\t\tscrollLeft = Math.max(0, scrollLeft);\r\n\t\t}\r\n\r\n\t\tif (top) {\r\n\t\t\tscrollTop = scrollState.y + top;\r\n\t\t\tscrollTop = Math.min(scrollState.height, scrollTop);\r\n\t\t\tscrollTop = Math.max(0, scrollTop);\r\n\t\t}\r\n\r\n\t\tgantt.scrollTo(scrollLeft, scrollTop);\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", function() {\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tvar eventElement = domHelpers.getRootNode(gantt.$root) || document.body;\r\n\t\t\tgantt.eventRemove(eventElement, \"mousemove\", autoscrollInterval);\r\n\t\t\tgantt.event(eventElement, \"mousemove\", autoscrollInterval);\r\n\r\n\t\t\tgantt.eventRemove(eventElement, \"touchmove\", autoscrollInterval);\r\n\t\t\tgantt.event(eventElement, \"touchmove\", autoscrollInterval);\r\n\r\n\t\t\tgantt.eventRemove(eventElement, \"pointermove\", autoscrollInterval);\r\n\t\t\tgantt.event(eventElement, \"pointermove\", autoscrollInterval);\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", function(){\r\n\t\tdefineScrollInterval(false);\r\n\t});\r\n\r\n};","if (window.jQuery){\r\n\r\n\t(function( $ ){\r\n\r\n\t\tvar methods = [];\r\n\t\t$.fn.dhx_gantt = function(config){\r\n\t\t\tconfig = config || {};\r\n\t\t\tif (typeof(config) === 'string') {\r\n\t\t\t\tif (methods[config] ) {\r\n\t\t\t\t\treturn methods[config].apply(this, []);\r\n\t\t\t\t}else {\r\n\t\t\t\t\t$.error('Method ' + config + ' does not exist on jQuery.dhx_gantt');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar views = [];\r\n\t\t\t\tthis.each(function() {\r\n\t\t\t\t\tif (this && this.getAttribute){\r\n\t\t\t\t\t\tif (!this.gantt && !(window.gantt.$root == this)){\r\n\r\n\t\t\t\t\t\t\tvar newgantt = (window.gantt.$container && window.Gantt) ? window.Gantt.getGanttInstance():window.gantt;\r\n\t\t\t\t\t\t\tfor (var key in config)\r\n\t\t\t\t\t\t\t\tif (key!=\"data\")\r\n\t\t\t\t\t\t\t\t\tnewgantt.config[key] = config[key];\r\n\r\n\t\t\t\t\t\t\tnewgantt.init(this);\r\n\t\t\t\t\t\t\tif (config.data)\r\n\t\t\t\t\t\t\t\tnewgantt.parse(config.data);\r\n\r\n\t\t\t\t\t\t\tviews.push(newgantt);\r\n\t\t\t\t\t\t} else\r\n\t\t\t\t\t\t\tviews.push(typeof this.gantt == \"object\" ? this.gantt : window.gantt);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\tif (views.length === 1) return views[0];\r\n\t\t\t\treturn views;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t})(window.jQuery);\r\n\r\n}\r\n\r\n\r\nexport default null;","if (window.dhtmlx){\r\n\r\n\tif (!window.dhtmlx.attaches)\r\n\twindow.dhtmlx.attaches = {};\r\n\r\n\twindow.dhtmlx.attaches.attachGantt=function(start, end, gantt){\r\n\t\tvar obj = document.createElement(\"DIV\");\r\n\r\n\t\tgantt = gantt || window.gantt;\r\n\r\n\t\tobj.id = \"gantt_\"+ gantt.uid();\r\n\t\tobj.style.width = \"100%\";\r\n\t\tobj.style.height = \"100%\";\r\n\t\tobj.cmp = \"grid\";\r\n\r\n\t\tdocument.body.appendChild(obj);\r\n\t\tthis.attachObject(obj.id);\r\n\t\tthis.dataType = \"gantt\";\r\n\t\tthis.dataObj = gantt;\r\n\r\n\t\tvar that = this.vs[this.av];\r\n\t\tthat.grid = gantt;\r\n\r\n\t\tgantt.init(obj.id, start, end);\r\n\t\tobj.firstChild.style.border = \"none\";\r\n\r\n\t\tthat.gridId = obj.id;\r\n\t\tthat.gridObj = obj;\r\n\r\n\t\tvar method_name=\"_viewRestore\";\r\n\t\treturn this.vs[this[method_name]()].grid;\r\n\t};\r\n\r\n}\r\nif (typeof(window.dhtmlXCellObject) != \"undefined\") {\r\n\r\n\twindow.dhtmlXCellObject.prototype.attachGantt=function(start, end, gantt){\r\n\t\tgantt = gantt || window.gantt;\r\n\r\n\t\tvar obj = document.createElement(\"DIV\");\r\n\t\tobj.id = \"gantt_\"+gantt.uid();\r\n\t\tobj.style.width = \"100%\";\r\n\t\tobj.style.height = \"100%\";\r\n\t\tobj.cmp = \"grid\";\r\n\r\n\t\tdocument.body.appendChild(obj);\r\n\t\tthis.attachObject(obj.id);\r\n\r\n\t\tthis.dataType = \"gantt\";\r\n\t\tthis.dataObj = gantt;\r\n\r\n\t\tgantt.init(obj.id, start, end);\r\n\t\tobj.firstChild.style.border = \"none\";\r\n\r\n\t\tobj = null;\r\n\t\tthis.callEvent(\"_onContentAttach\",[]);\r\n\r\n\t\treturn this.dataObj;\r\n\t};\r\n}\r\n\r\nexport default null;","import env from \"../../../utils/env\";\r\nimport eventable from \"../../../utils/eventable\";\r\nimport { IScale, TModifierKeys } from \"../../common/config\";\r\n\r\ninterface ITimelineZoomConfig {\r\n\thandler?: (e: Event) => {};\r\n\tstartDate?: Date;\r\n\tendDate?: Date;\r\n\tlevels: IZoomLevel[];\r\n\tactiveLevelIndex?: number;\r\n\twidthStep?: number;\r\n\tminColumnWidth?: number;\r\n\tmaxColumnWidth?: number;\r\n\tuseKey?: \"ctrlKey\" | \"altKey\" | \"shiftKey\";\r\n\ttrigger?: \"wheel\" | null | undefined;\r\n\telement?: Element | (() => Element);\r\n}\r\n\r\nconst USE_KEY = [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\"];\r\n\r\ninterface IZoomLevel {\r\n\tname?: string;\r\n\tscale_height?: number;\r\n\tmin_column_width: number;\r\n\tscales: IScale[];\r\n}\r\n\r\nconst _defaultScales = [\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"month\",\r\n\t\t\tdate: \"%M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"hour\",\r\n\t\t\tdate: \"%H:00\",\r\n\t\t\tstep: 8\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"hour\",\r\n\t\t\tdate: \"%H:00\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t]\r\n];\r\n\r\nexport default class TimelineZoom {\r\n\tpublic attachEvent: (eventName: string, handler: () => void) => string;\r\n\tpublic callEvent: (eventName: string, args: any[]) => any;\r\n\tpublic detachEvent: (eventName: string) => any;\r\n\tprotected _initialStartDate: Date;\r\n\tprotected _initialEndDate: Date;\r\n\tprotected _activeLevelIndex: number;\r\n\tprotected _levels: IZoomLevel[];\r\n\tprotected _handler: (e: any) => void;\r\n\tprotected $gantt;\r\n\tprotected _widthStep: number;\r\n\tprotected _minColumnWidth: number;\r\n\tprotected _maxColumnWidth: number;\r\n\tprotected _useKey: TModifierKeys;\r\n\tprotected _visibleDate: Date;\r\n\tprotected _initialized: boolean;\r\n\tprotected _domEvents: any;\r\n\r\n\tconstructor(gantt) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis._domEvents = this.$gantt._createDomEventScope();\r\n\t}\r\n\r\n\tpublic init(config: ITimelineZoomConfig) {\r\n\t\t// GS-1354 and GS-1318. If we check the headless mode using the function,\r\n\t\t// it will return false when Gantt is not initialized, but we may want to do it later\r\n\t\tif(this.$gantt.env.isNode){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._initialStartDate = config.startDate;\r\n\t\tthis._initialEndDate = config.endDate;\r\n\t\tthis._activeLevelIndex = config.activeLevelIndex ? config.activeLevelIndex : 0;\r\n\t\tthis._levels = this._mapScales(config.levels || _defaultScales);\r\n\t\tthis._handler = config.handler || this._defaultHandler;\r\n\t\tthis._minColumnWidth = config.minColumnWidth || 60;\r\n\t\tthis._maxColumnWidth = config.maxColumnWidth || 240;\r\n\t\tthis._widthStep = config.widthStep || 3/8 * config.minColumnWidth;\r\n\t\tthis._useKey = config.useKey;\r\n\r\n\t\tif(!this._initialized){\r\n\t\t\teventable(this);\r\n\t\t\tthis.$gantt.attachEvent(\"onGanttScroll\", () => {\r\n\t\t\t\tthis._getVisibleDate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._domEvents.detachAll();\r\n\r\n\t\tif(config.trigger === \"wheel\"){\r\n\t\t\tif(this.$gantt.$root){\r\n\t\t\t\tthis._attachWheelEvent(config);\r\n\t\t\t}else{\r\n\t\t\t\tthis.$gantt.attachEvent(\"onGanttReady\", () => {\r\n\t\t\t\t\tthis._attachWheelEvent(config);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._initialized = true;\r\n\t\tthis.setLevel(this._activeLevelIndex);\r\n\t}\r\n\r\n\tpublic zoomIn = () => {\r\n\t\tconst index = this.getCurrentLevel() - 1;\r\n\t\tif(index < 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setLevel(index);\r\n\t};\r\n\r\n\tpublic zoomOut = () => {\r\n\t\tconst index = this.getCurrentLevel() + 1;\r\n\t\tif(index > this._levels.length - 1){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setLevel(index);\r\n\t};\r\n\r\n\tpublic getCurrentLevel = () => {\r\n\t\treturn this._activeLevelIndex;\r\n\t};\r\n\r\n\tpublic getLevels = () => {\r\n\t\treturn this._levels;\r\n\t};\r\n\r\n\tpublic setLevel = (level: number|string) => {\r\n\t\tconst zoomLevel = this._getZoomIndexByName(level);\r\n\r\n\t\tif(zoomLevel === -1){\r\n\t\t\tthis.$gantt.assert(zoomLevel !== -1, \"Invalid zoom level for gantt.ext.zoom.setLevel. \" + level + \" is not an expected value.\");\r\n\t\t}\r\n\t\tthis._setLevel(zoomLevel, 0);\r\n\t};\r\n\r\n\tprotected _getZoomIndexByName = (levelName: number|string) => {\r\n\t\tlet zoomLevel:number = -1;\r\n\t\tif(typeof levelName === \"string\"){\r\n\t\t\tif(!isNaN(Number(levelName)) && this._levels[Number(levelName)]){\r\n\t\t\t\tzoomLevel = Number(levelName);\r\n\t\t\t}else{\r\n\t\t\t\tfor(let i = 0; i < this._levels.length; i++){\r\n\t\t\t\t\tif(this._levels[i].name === levelName){\r\n\t\t\t\t\t\tzoomLevel = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tzoomLevel = levelName;\r\n\t\t}\r\n\t\treturn zoomLevel;\r\n\t};\r\n\r\n\tprotected _mapScales(levels: IScale[][] | any): IZoomLevel[]{\r\n\t\treturn levels.map((l) => {\r\n\t\t\tif(Array.isArray(l)){\r\n\t\t\t\treturn {\r\n\t\t\t\t\tscales: l\r\n\t\t\t\t};\r\n\t\t\t}else{\r\n\t\t\t\treturn l;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected _getVisibleDate = () => {\r\n\t\t// GS-1450. Don't try to get the visible date if there is no timeline\r\n\t\tif (!this.$gantt.$task){\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst scrollPos = this.$gantt.getScrollState().x;\r\n\t\tconst viewPort = this.$gantt.$task.offsetWidth;\r\n\t\tthis._visibleDate = this.$gantt.dateFromPos(scrollPos + viewPort/2);\r\n\t};\r\n\r\n\tprotected _setLevel = (level: number, cursorOffset: number) => {\r\n\t\tthis._activeLevelIndex = level;\r\n\r\n\t\tconst gantt = this.$gantt;\r\n\t\tconst nextConfig = gantt.copy(this._levels[this._activeLevelIndex]);\r\n\t\tconst chartConfig = gantt.copy(nextConfig);\r\n\t\tdelete chartConfig.name;\r\n\r\n\t\tgantt.mixin(gantt.config, chartConfig, true);\r\n\r\n\t\tconst isRendered = !!gantt.$root && !!gantt.$task;\r\n\r\n\t\tif(isRendered){\r\n\t\t\tif(cursorOffset){\r\n\t\t\t\tconst cursorDate = this.$gantt.dateFromPos(cursorOffset + this.$gantt.getScrollState().x);\r\n\t\t\t\tthis.$gantt.render();\r\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(cursorDate);\r\n\t\t\t\tthis.$gantt.scrollTo(newPosition - cursorOffset);\r\n\t\t\t}else{\r\n\t\t\t\tconst viewPort = this.$gantt.$task.offsetWidth;\r\n\t\t\t\tif(!this._visibleDate){\r\n\t\t\t\t\tthis._getVisibleDate();\r\n\t\t\t\t}\r\n\t\t\t\tconst middleDate = this._visibleDate;\r\n\t\t\t\tthis.$gantt.render();\r\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(middleDate);\r\n\t\t\t\tthis.$gantt.scrollTo(newPosition - viewPort/2);\r\n\t\t\t}\r\n\r\n\t\t\tthis.callEvent(\"onAfterZoom\", [this._activeLevelIndex, nextConfig]);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _attachWheelEvent = (config) => {\r\n\t\tconst event = env.isFF ? \"wheel\" : \"mousewheel\";\r\n\t\tlet el: Element;\r\n\t\tif(typeof config.element === \"function\"){\r\n\t\t\tel = config.element();\r\n\t\t}else{\r\n\t\t\tel = config.element as Element;\r\n\t\t}\r\n\t\tif (!el){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._domEvents.attach(el, event, this.$gantt.bind(function(e) {\r\n\t\t\tif (this._useKey) {\r\n\t\t\t\tif (USE_KEY.indexOf(this._useKey) < 0) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (!e[this._useKey]) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (typeof this._handler === \"function\") {\r\n\t\t\t\tthis._handler.apply(this, [e]);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}, this), {passive: false});\r\n\t};\r\n\r\n\tprivate _defaultHandler = (e: any):void => {\r\n\t\tconst timelineOffset = this.$gantt.$task.getBoundingClientRect().x;\r\n\t\tconst cursorOffset = e.clientX - timelineOffset;\r\n\t\tconst wheelY = this.$gantt.env.isFF ? (e.deltaY*-40) : e.wheelDelta;\r\n\t\tlet wheelUp = false;\r\n\t\tif (wheelY > 0) {\r\n\t\t\twheelUp = true;\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tthis._setScaleSettings(wheelUp, cursorOffset);\r\n\t};\r\n\r\n\tprivate _setScaleSettings(wheelUp: boolean, cursorOffset: number) {\r\n\t\tif (wheelUp) {\r\n\t\t\tthis._stepUp(cursorOffset);\r\n\t\t} else {\r\n\t\t\tthis._stepDown(cursorOffset);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _setScaleDates = () => {\r\n\t\tif(this._initialStartDate && this._initialEndDate){\r\n\t\t\tthis.$gantt.config.start_date = this._initialStartDate;\r\n\t\t\tthis.$gantt.config.end_date = this._initialEndDate;\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _stepUp(cursorOffset) {\r\n\t\tif (this._activeLevelIndex >= this._levels.length - 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet nextLevel = this._activeLevelIndex;\r\n\t\tthis._setScaleDates();\r\n\r\n\t\tif(this._widthStep){\r\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width + this._widthStep;\r\n\t\t\tif (newColumnWidth > this._maxColumnWidth) {\r\n\t\t\t\tnewColumnWidth = this._minColumnWidth;\r\n\t\t\t\tnextLevel++;\r\n\t\t\t}\r\n\r\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\r\n\t\t}else{\r\n\t\t\tnextLevel++;\r\n\t\t}\r\n\t\tthis._setLevel(nextLevel, cursorOffset);\r\n\t}\r\n\tprivate _stepDown(cursorOffset) {\r\n\t\tif (this._activeLevelIndex < 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet nextLevel = this._activeLevelIndex;\r\n\t\tthis._setScaleDates();\r\n\r\n\t\tif(this._widthStep){\r\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width - this._widthStep;\r\n\t\t\tif (newColumnWidth < this._minColumnWidth) {\r\n\t\t\t\tnewColumnWidth = this._maxColumnWidth;\r\n\t\t\t\tnextLevel--;\r\n\t\t\t}\r\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\r\n\t\t}else{\r\n\t\t\tnextLevel--;\r\n\t\t}\r\n\t\tthis._setLevel(nextLevel, cursorOffset);\r\n\t}\r\n}","export default function(gantt) {\r\n\r\n\tgantt.config.touch_drag = 75; //nearly immediate dnd\r\n\tgantt.config.touch = true;\r\n\tgantt.config.touch_feedback = true;\r\n\tgantt.config.touch_feedback_duration = 1;\r\n\tgantt._prevent_touch_scroll = false;\r\n\r\n\r\n\tgantt._touch_feedback = function () {\r\n\t\tif (gantt.config.touch_feedback) {\r\n\t\t\tif (navigator.vibrate)\r\n\t\t\t\tnavigator.vibrate(gantt.config.touch_feedback_duration);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif (gantt.$container)\t{\r\n\t\t\taddTouchEvents();\r\n\t\t}\r\n\t});\r\n\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t\tif (gantt.$container)\t{\r\n\t\t\t\tgantt.attachEvent(\"onGanttRender\", addTouchEvents, {once: true});\r\n\t\t}\r\n\t});\r\n\r\n\tfunction addTouchEvents(){\r\n\t\tif (gantt.config.touch != \"force\")\r\n\t\t\tgantt.config.touch = gantt.config.touch &&\r\n\t\t\t\t((navigator.userAgent.indexOf(\"Mobile\") != -1) ||\r\n\t\t\t\t\t(navigator.userAgent.indexOf(\"iPad\") != -1) ||\r\n\t\t\t\t\t(navigator.userAgent.indexOf(\"Android\") != -1) ||\r\n\t\t\t\t\t(navigator.userAgent.indexOf(\"Touch\") != -1)) ||\r\n\t\t\t\t\t((navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\r\n\r\n\t\tif (gantt.config.touch) {\r\n\r\n\t\t\tvar touchEventsSupported = true;\r\n\t\t\ttry {\r\n\t\t\t\tdocument.createEvent(\"TouchEvent\");\r\n\t\t\t} catch (e) {\r\n\t\t\t\ttouchEventsSupported = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (touchEventsSupported) {\r\n\t\t\t\tgantt._touch_events([\"touchmove\", \"touchstart\", \"touchend\"], function (ev) {\r\n\t\t\t\t\tif (ev.touches && ev.touches.length > 1) return null;\r\n\t\t\t\t\tif (ev.touches[0])\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttarget: ev.target,\r\n\t\t\t\t\t\t\tpageX: ev.touches[0].pageX,\r\n\t\t\t\t\t\t\tpageY: ev.touches[0].pageY,\r\n\t\t\t\t\t\t\tclientX: ev.touches[0].clientX,\r\n\t\t\t\t\t\t\tclientY: ev.touches[0].clientY\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn ev;\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t\t} else if (window.navigator.pointerEnabled) {\r\n\t\t\t\tgantt._touch_events([\"pointermove\", \"pointerdown\", \"pointerup\"], function (ev) {\r\n\t\t\t\t\tif (ev.pointerType == \"mouse\") return null;\r\n\t\t\t\t\treturn ev;\r\n\t\t\t\t}, function (ev) {\r\n\t\t\t\t\treturn (!ev || (ev.pointerType == \"mouse\" ));\r\n\t\t\t\t});\r\n\t\t\t} else if (window.navigator.msPointerEnabled) {\r\n\t\t\t\tgantt._touch_events([\"MSPointerMove\", \"MSPointerDown\", \"MSPointerUp\"], function (ev) {\r\n\t\t\t\t\tif (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\r\n\t\t\t\t\treturn ev;\r\n\t\t\t\t}, function (ev) {\r\n\t\t\t\t\treturn (!ev || ev.pointerType == ev.MSPOINTER_TYPE_MOUSE);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction findTargetView(event){\r\n\t\tvar allViews = gantt.$layout.getCellsByType(\"viewCell\");\r\n\r\n\t\tfor(var i = 0; i < allViews.length; i++){\r\n\t\t\tvar box = allViews[i].$view.getBoundingClientRect();\r\n\t\t\tif(event.clientX >= box.left && event.clientX <= box.right &&\r\n\t\t\t\tevent.clientY <= box.bottom && event.clientY >= box.top){\r\n\t\t\t\t\treturn allViews[i];\r\n\t\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getScrollState(view){\r\n\t\tvar scrollX = view.$config.scrollX ? gantt.$ui.getView(view.$config.scrollX) : null;\r\n\t\tvar scrollY = view.$config.scrollY ? gantt.$ui.getView(view.$config.scrollY) : null;\r\n\r\n\t\tvar scrollState = {x: null, y: null};\r\n\t\tif(scrollX){\r\n\t\t\tvar state = scrollX.getScrollState();\r\n\t\t\tif(state.visible){\r\n\t\t\t\tscrollState.x = scrollX.$view.scrollLeft;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(scrollY){\r\n\t\t\tvar state = scrollY.getScrollState();\r\n\t\t\tif(state.visible){\r\n\t\t\t\tscrollState.y = scrollY.$view.scrollTop;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn scrollState;\r\n\t}\r\n\r\n\tfunction scrollView(view, left, top){\r\n\t\tvar scrollX = view.$config.scrollX ? gantt.$ui.getView(view.$config.scrollX) : null;\r\n\t\tvar scrollY = view.$config.scrollY ? gantt.$ui.getView(view.$config.scrollY) : null;\r\n\r\n\t\tif(scrollX){\r\n\t\t\tscrollX.scrollTo(left, null);\r\n\t\t}\r\n\t\tif(scrollY){\r\n\t\t\tscrollY.scrollTo(null, top);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getTaskDND(){\r\n\t\tvar tasksDnD;\r\n\t\tif(gantt.$ui.getView(\"timeline\")){\r\n\t\t\ttasksDnD = gantt.$ui.getView(\"timeline\")._tasks_dnd;\r\n\t\t}\r\n\t\treturn tasksDnD;\r\n\t}\r\n\r\n\tvar touchHandlers = [];\r\n\r\n//we can't use native scrolling, as we need to sync momentum between different parts\r\n//so we will block native scroll and use the custom one\r\n//in future we can add custom momentum\r\n\tgantt._touch_events = function (names, accessor, ignore) {\r\n\t\t//webkit on android need to be handled separately\r\n\t\tvar dblclicktime = 0;\r\n\t\tvar actionMode = false;\r\n\t\tvar scrollMode = false;\r\n\t\tvar actionStart = null;\r\n\t\tvar scrollState;\r\n\t\tvar longTapTimer = null;\r\n\t\tvar currentDndId = null;\r\n\t\tvar dndNodes = [];\r\n\t\tvar targetView = null;\r\n\t\tlet multiTouchEvents = {};\r\n\r\n\t\tfor(var i = 0; i < touchHandlers.length; i++){\r\n\t\t\tgantt.eventRemove(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\r\n\t\t}\r\n\t\ttouchHandlers = [];\r\n\r\n\t\t//touch move\r\n\t\ttouchHandlers.push([gantt.$container, names[0], function (e) {\r\n\t\t\tvar tasksDnD = getTaskDND();\r\n\r\n\t\t\t\tif (ignore(e)) return;\r\n\r\n\t\t\t\t//ignore common and scrolling moves\r\n\t\t\t\tif (!actionMode) return;\r\n\r\n\t\t\t\tif (longTapTimer) clearTimeout(longTapTimer);\r\n\r\n\t\t\t\tvar source = accessor(e);\r\n\t\t\t\tif (tasksDnD && (tasksDnD.drag.id || tasksDnD.drag.start_drag)) {\r\n\t\t\t\t\ttasksDnD.on_mouse_move(source);\r\n\t\t\t\t\tif (e.preventDefault)\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.cancelBubble = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (!gantt._prevent_touch_scroll) {\r\n\t\t\t\t\tif (source && actionStart) {\r\n\t\t\t\t\t\tvar dx = actionStart.pageX - source.pageX;\r\n\t\t\t\t\t\tvar dy = actionStart.pageY - source.pageY;\r\n\t\t\t\t\t\tif (!scrollMode && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\r\n\t\t\t\t\t\t\tscrollMode = true;\r\n\t\t\t\t\t\t\t//gantt._touch_scroll_active = scroll_mode = true;\r\n\t\t\t\t\t\t\tdblclicktime = 0;\r\n\r\n\t\t\t\t\t\t\tif(targetView){\r\n\t\t\t\t\t\t\t\tscrollState = getScrollState(targetView);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tscrollState = gantt.getScrollState();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (scrollMode) {\r\n\r\n\t\t\t\t\t\t\tvar newScrollState;\r\n\t\t\t\t\t\t\tvar scrollX = scrollState.x + dx;\r\n\t\t\t\t\t\t\tvar scrollY = scrollState.y + dy;\r\n\t\t\t\t\t\t\tif(targetView){\r\n\t\t\t\t\t\t\t\tscrollView(targetView, scrollX, scrollY);\r\n\t\t\t\t\t\t\t\tnewScrollState = getScrollState(targetView);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tgantt.scrollTo(scrollX, scrollY);\r\n\t\t\t\t\t\t\t\tnewScrollState = gantt.getScrollState();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ((scrollState.x != newScrollState.x && dy > 2 * dx) ||\r\n\t\t\t\t\t\t\t\t(scrollState.y != newScrollState.y && dx > 2 * dy )) {\r\n\t\t\t\t\t\t\t\treturn block_action(e);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn block_action(e);\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}]);\r\n\r\n\t\t// prevent page drag on touch move\r\n\t\ttry{\r\n\t\t\tdocument.addEventListener('touchmove', function(e) {\r\n\t\t\t\tif (gantt._touch_drag) {\r\n\t\t\t\t\tblock_action(e);\r\n\t\t\t\t}\r\n\t\t\t}, { passive: false });\r\n\t\t}\r\n\t\tcatch(e){\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tconsole.warn(\"Cannot prevent touch event for the page drag\");\r\n\t\t}\r\n\r\n\t\t//block touch context menu in IE10\r\n\t\ttouchHandlers.push([this.$container, \"contextmenu\", function (e) {\r\n\t\t\tif (actionMode)\r\n\t\t\t\treturn block_action(e);\r\n\t\t}]);\r\n\r\n\t\t//touch start\r\n\t\ttouchHandlers.push([this.$container, names[1], function (e) {\r\n\t\t\tmultiTouchEvents = e.touches.length;\r\n\t\t\t// block pull-to-refresh\r\n\t\t\tif(document && document.body){\r\n\t\t\t\tdocument.body.classList.add(\"gantt_touch_active\");\r\n\t\t\t}\r\n\r\n\t\t\tif (ignore(e)) return;\r\n\t\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\t\tactionMode = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tactionStart = accessor(e);\r\n\t\t\ttargetView = findTargetView(actionStart);\r\n\t\t\tif (!gantt._locate_css(actionStart, \"gantt_hor_scroll\") && !gantt._locate_css(actionStart, \"gantt_ver_scroll\")) {\r\n\t\t\t\tactionMode = true;\r\n\t\t\t}\r\n\t\t\tvar tasksDnD = getTaskDND();\r\n\r\n\t\t\t//long tap\r\n\t\t\tlongTapTimer = setTimeout(function () {\r\n\t\t\t\tvar taskId = gantt.locate(actionStart);\r\n\t\t\t\tif (tasksDnD && (taskId && !gantt._locate_css(actionStart, \"gantt_link_control\") && !gantt._locate_css(actionStart, \"gantt_grid_data\"))) {\r\n\t\t\t\t\ttasksDnD.on_mouse_down(actionStart);\r\n\r\n\t\t\t\t\tif (tasksDnD.drag && tasksDnD.drag.start_drag) {\r\n\t\t\t\t\t\t// we need that as touch events break if the target node is removed from the DOM\r\n\t\t\t\t\t\tcloneTaskRendered(taskId);\r\n\t\t\t\t\t\ttasksDnD._start_dnd(actionStart);\r\n\t\t\t\t\t\tgantt._touch_drag = true;\r\n\r\n\t\t\t\t\t\tgantt.refreshTask(taskId);\r\n\r\n\t\t\t\t\t\tgantt._touch_feedback();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlongTapTimer = null;\r\n\t\t\t}, gantt.config.touch_drag);\r\n\t\t}]);\r\n\r\n\t\t//touch end\r\n\t\ttouchHandlers.push([this.$container, names[2], function (e) {\r\n\t\t\tif(document && document.body){\r\n\t\t\t\tdocument.body.classList.remove(\"gantt_touch_active\");\r\n\t\t\t}\r\n\t\t\tif (ignore(e)) return;\r\n\t\t\tif (longTapTimer) clearTimeout(longTapTimer);\r\n\t\t\tgantt._touch_drag = false;\r\n\t\t\tactionMode = false;\r\n\t\t\tvar source = accessor(e);\r\n\r\n\t\t\tvar tasksDnD = getTaskDND();\r\n\r\n\t\t\tif(tasksDnD)\r\n\t\t\t\ttasksDnD.on_mouse_up(source);\r\n\r\n\t\t\tif (currentDndId && gantt.isTaskExists(currentDndId)) {\r\n\t\t\t\tgantt.refreshTask(currentDndId);\r\n\t\t\t\tif(dndNodes.length){\r\n\t\t\t\t\tdndNodes.forEach(function(node){\r\n\t\t\t\t\t\tif(node.parentNode){\r\n\t\t\t\t\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tgantt._touch_feedback();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//gantt._touch_scroll_active = action_mode = scroll_mode = false;\r\n\t\t\tactionMode = scrollMode = false;\r\n\t\t\tdndNodes = [];\r\n\t\t\tcurrentDndId = null;\r\n\r\n\t\t\t//dbl-tap handling\r\n\t\t\tif (actionStart && dblclicktime) {\r\n\t\t\t\tvar now = new Date();\r\n\t\t\t\t// doubletap shouldn't happen with multitouch\r\n\t\t\t\tif ((now - dblclicktime) < 500 && multiTouchEvents <= 1) {\r\n\r\n\t\t\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\r\n\t\t\t\t\tmouseEvents.onDoubleClick(actionStart);\r\n\t\t\t\t\tblock_action(e);\r\n\t\t\t\t} else\r\n\t\t\t\t\tdblclicktime = now;\r\n\t\t\t} else {\r\n\t\t\t\tdblclicktime = new Date();\r\n\t\t\t}\r\n\t\t}]);\r\n\r\n\t\tfor(var i = 0; i < touchHandlers.length; i++){\r\n\t\t\tgantt.event(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\r\n\t\t}\r\n\r\n\t\t//common helper, prevents event\r\n\t\tfunction block_action(e) {\r\n\t\t\tif (e && e.preventDefault && e.cancelable){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\te.cancelBubble = true;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfunction cloneTaskRendered(taskId) {\r\n\t\t\tconst renders = gantt._getTaskLayers();\r\n\t\t\tlet task = gantt.getTask(taskId);\r\n\t\t\tif (task) {\r\n\t\t\t\tlet visible = gantt.isTaskVisible(taskId);\r\n\t\t\t\tif (visible){\r\n\t\t\t\t\tcurrentDndId = taskId;\r\n\t\t\t\t\tfor (let i = 0; i < renders.length; i++) {\r\n\t\t\t\t\t\ttask = renders[i].rendered[taskId];\r\n\t\t\t\t\t\tif (task && task.getAttribute(gantt.config.task_attribute) && task.getAttribute(gantt.config.task_attribute) == taskId) {\r\n\t\t\t\t\t\t\tconst copy = task.cloneNode(true);\r\n\t\t\t\t\t\t\tdndNodes.push(task);\r\n\t\t\t\t\t\t\trenders[i].rendered[taskId] = copy;\r\n\t\t\t\t\t\t\ttask.style.display = \"none\";\r\n\t\t\t\t\t\t\tcopy.className += \" gantt_drag_move \";\r\n\t\t\t\t\t\t\ttask.parentNode.appendChild(copy);\r\n\t\t\t\t\t\t\t//return copy;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (task.$split_subtask){\r\n\t\t\t\t\tlet renderedParent = task.$rendered_parent;\r\n\t\t\t\t\tvisible = gantt.isTaskVisible(renderedParent);\r\n\t\t\t\t\tif (!visible){\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcurrentDndId = taskId;\r\n\t\t\t\t\tfor (let i = 0; i < renders.length; i++) {\r\n\t\t\t\t\t\tconst parent = renders[i].rendered[renderedParent];\r\n\t\t\t\t\t\tlet taskNode;\r\n\t\t\t\t\t\tif (parent && parent.childNodes){\r\n\t\t\t\t\t\t\ttaskNode = parent.querySelector(`[${gantt.config.task_attribute}=\"${task.id}\"]`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (taskNode) {\r\n\t\t\t\t\t\t\t// move the child node to a different parent as the task bar will be repainted\r\n\t\t\t\t\t\t\t// and the initial node will be lost\r\n\t\t\t\t\t\t\tconst copy = taskNode.cloneNode(true);\r\n\t\t\t\t\t\t\ttaskNode.parentNode.appendChild(copy);\r\n\r\n\t\t\t\t\t\t\tgantt.$task_bars.appendChild(taskNode);\r\n\t\t\t\t\t\t\ttaskNode.style.display = \"none\";\r\n\r\n\t\t\t\t\t\t\t// don't add the node as rendered otherwise it will be lost:\r\n\t\t\t\t\t\t\t// renders[i].rendered[taskId] = taskNode;\r\n\t\t\t\t\t\t\t// instead, add it to dndNodes as its elements will be removed after drag\r\n\t\t\t\t\t\t\tdndNodes.push(taskNode);\r\n\r\n\t\t\t\t\t\t\ttaskNode = null;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n};","function dummy() {\r\n\t// eslint-disable-next-line\r\n\tconsole.log(\"Method is not implemented.\"); \r\n}\r\nfunction BaseControl() {\r\n}\r\n\r\n// base methods will be runned in gantt context\r\nBaseControl.prototype.render = dummy; // arguments: sns\r\nBaseControl.prototype.set_value = dummy; // arguments: node, value, ev, sns(config)\r\nBaseControl.prototype.get_value = dummy; // arguments node, ev, sns(config)\r\nBaseControl.prototype.focus = dummy; // arguments: node\r\n\r\nexport default function(gantt) { // we could send current instance of gantt to module\r\n\treturn BaseControl;\r\n};","import * as helpers from \"../../../utils/helpers\";\r\n\r\nvar htmlHelpers = {\r\n\tgetHtmlSelect: function(options, attributes, value) {\r\n\t\tvar innerHTML = \"\";\r\n\t\tvar _this = this;\r\n\r\n\t\toptions = options || [];\r\n\t\t\r\n\t\thelpers.forEach(options, function(entry) {\r\n\t\t\tvar _attributes = [{ key: \"value\", value: entry.key }];\r\n\r\n\t\t\tif (value == entry.key) {\r\n\t\t\t\t_attributes[_attributes.length] = { key: \"selected\", value: \"selected\" };\r\n\t\t\t}\r\n\t\t\tif (entry.attributes) {\r\n\t\t\t\t_attributes = _attributes.concat(entry.attributes);\r\n\t\t\t}\r\n\t\t\tinnerHTML += _this.getHtmlOption({ innerHTML: entry.label }, _attributes);\r\n\t\t});\r\n\r\n\t\treturn _getHtmlContainer(\"select\", { innerHTML: innerHTML }, attributes);\r\n\t},\r\n\tgetHtmlOption: function(options, attributes) { return _getHtmlContainer(\"option\", options, attributes); },\r\n\tgetHtmlButton: function(options, attributes) { return _getHtmlContainer(\"button\", options, attributes); },\r\n\tgetHtmlDiv: function(options, attributes) { return _getHtmlContainer(\"div\", options, attributes); },\r\n\tgetHtmlLabel: function(options, attributes) { return _getHtmlContainer(\"label\", options, attributes); },\r\n\tgetHtmlInput: function(attributes) {\r\n\t\treturn \" \";\r\n\t}\r\n};\r\n\r\nfunction _getHtmlContainer(tag, options, attributes) {\r\n\tvar html;\r\n\r\n\toptions = options || [];\r\n\t\r\n\thtml = \"<\" + tag + _getHtmlAttributes(attributes || []) + \">\" + (options.innerHTML || \"\") + \"\" + tag +\">\";\r\n\treturn html;\r\n\r\n}\r\n\r\nfunction _getHtmlAttributes(attributes) {\r\n\tvar html = \"\";\r\n\r\n\thelpers.forEach(attributes, function(entry) {\r\n\t\thtml += \" \" + entry.key + \"='\" + entry.value + \"'\";\r\n\t});\r\n\treturn html;\r\n}\r\n\r\nexport default htmlHelpers;","import __extends from \"../../../../utils/extends\";\r\nimport htmlHelpers from \"../../utils/html_helpers\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction SelectControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\t\r\n\t\treturn self; \r\n\t}\r\n\t\r\n\t__extends(SelectControl, _super);\r\n\t\r\n\tSelectControl.prototype.render = function(sns) {\r\n\t\tconst height = sns.height ? `height:${sns.height}px;` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\thtml += htmlHelpers.getHtmlSelect(sns.options, [{ key: \"style\", value: \"width:100%;\" }, { key: \"title\", value: sns.name }]);\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tSelectControl.prototype.set_value = function(node, value, ev, sns) {\r\n\t\tvar select = node.firstChild;\r\n\t\tif (!select._dhx_onchange && sns.onchange) {\r\n\t\t\tselect.onchange = sns.onchange;\r\n\t\t\tselect._dhx_onchange = true;\r\n\t\t}\r\n\t\tif (typeof value === \"undefined\")\r\n\t\t\tvalue = (select.options[0] || {}).value;\r\n\t\tselect.value = value || \"\";\r\n\t};\r\n\t\r\n\tSelectControl.prototype.get_value = function(node) {\r\n\t\treturn node.firstChild.value;\r\n\t};\r\n\t\r\n\tSelectControl.prototype.focus = function(node) {\r\n\t\tvar a = node.firstChild;\r\n\t\tgantt._focus(a, true);\r\n\t};\r\n\t\r\n\treturn SelectControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\nimport SelectControl from \"./select_control\";\r\nexport default function(gantt) {\r\n\tvar _super = SelectControl(gantt);\r\n\r\n\tfunction ParentControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(ParentControl, _super);\r\n\r\n\r\n\tParentControl.prototype.render = function(sns) {\r\n\t\treturn _display(sns, false);\r\n\t};\r\n\r\n\tParentControl.prototype.set_value = function(node, value, ev, config) {\r\n\t\t// GS-1051. If the value is `0`, the set_value function in the select control won't select \r\n\t\t// the first child because (0 || '') = '';\r\n\t\tif (value === 0) value = \"0\";\r\n\r\n\t\tvar tmpDom = document.createElement(\"div\");\r\n\t\ttmpDom.innerHTML = _display(config, ev.id);\r\n\t\tvar newOptions = tmpDom.removeChild(tmpDom.firstChild);\r\n\t\tnode.onselect = null;\r\n\t\tnode.parentNode.replaceChild(newOptions, node);\r\n\r\n\t\treturn gantt.form_blocks.select.set_value.apply(gantt, [newOptions, value, ev, config]);\r\n\t};\r\n\r\n\tfunction _display(config, item_id) {\r\n\t\tvar tasks = [],\r\n\t\t\toptions = [];\r\n\t\tif (item_id) {\r\n\t\t\ttasks = gantt.getTaskByTime();\r\n\t\t\tif (config.allow_root) {\r\n\t\t\t\ttasks.unshift({id: gantt.config.root_id, text: config.root_label || \"\"});\r\n\t\t\t}\r\n\t\t\ttasks = _filter(tasks, config, item_id);\r\n\t\t\tif (config.sort) {\r\n\t\t\t\ttasks.sort(config.sort);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar text = config.template || gantt.templates.task_text;\r\n\t\tfor (var i = 0; i < tasks.length; i++) {\r\n\t\t\tvar label = text.apply(gantt, [tasks[i].start_date, tasks[i].end_date, tasks[i]]);\r\n\t\t\tif (label === undefined) {\r\n\t\t\t\tlabel = \"\";\r\n\t\t\t}\r\n\t\t\toptions.push({\r\n\t\t\t\tkey: tasks[i].id,\r\n\t\t\t\tlabel: label\r\n\t\t\t});\r\n\t\t}\r\n\t\tconfig.options = options;\r\n\t\tconfig.map_to = config.map_to || \"parent\";\r\n\t\treturn gantt.form_blocks.select.render.apply(this, arguments);\r\n\t}\r\n\r\n\tfunction _filter(options, config, item_id) {\r\n\t\tvar filter = config.filter || function() {\r\n\t\t\treturn true;\r\n\t\t};\r\n\r\n\t\toptions = options.slice(0);\r\n\r\n\t\tfor (var i = 0; i < options.length; i++) {\r\n\t\t\tvar task = options[i];\r\n\t\t\tif (task.id == item_id || gantt.isChildOf(task.id, item_id) || filter(task.id, task) === false) {\r\n\t\t\t\toptions.splice(i, 1);\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn options;\r\n\t}\r\n\treturn ParentControl;\r\n};","import TemplateControlConstructor from \"./controls/template_control\";\r\nimport TextareaControlConstructor from \"./controls/textarea_control\";\r\nimport TimeControlConstructor from \"./controls/time_control\";\r\nimport SelectControlConstructor from \"./controls/select_control\";\r\nimport CheckboxControlConstructor from \"./controls/checkbox_control\";\r\nimport RadioControlConstructor from \"./controls/radio_control\";\r\nimport DurationControlConstructor from \"./controls/duration_control\";\r\nimport ParentControlConstructor from \"./controls/parent_control\";\r\nimport ResourcesControlConstructor from \"./controls/resources_control\";\r\nimport ConstraintControlConstructor from \"./controls/constraint_control\";\r\nimport TypeselectControlConstructor from \"./controls/typeselect_control\";\r\nimport BaselineControlConstructor from \"./controls/baseline_control\";\r\n\r\nimport * as domHelpers from \"../utils/dom_helpers\";\r\nimport * as helpers from \"../../../utils/helpers\";\r\n\t\r\n\r\nexport default function (gantt) {\r\n\r\n\r\n\tvar TemplateControl = TemplateControlConstructor(gantt);\r\n\tvar TextareaControl = TextareaControlConstructor(gantt);\r\n\tvar TimeControl = TimeControlConstructor(gantt);\r\n\tvar SelectControl = SelectControlConstructor(gantt);\r\n\tvar CheckboxControl = CheckboxControlConstructor(gantt);\r\n\tvar RadioControl = RadioControlConstructor(gantt);\r\n\tvar DurationControl = DurationControlConstructor(gantt);\r\n\tvar ParentControl = ParentControlConstructor(gantt);\r\n\tvar ResourcesControl = ResourcesControlConstructor(gantt);\r\n\tvar ConstraintControl = ConstraintControlConstructor(gantt);\r\n\tvar TypeselectControl = TypeselectControlConstructor(gantt);\r\n\tvar BaselineControl = BaselineControlConstructor(gantt);\r\n\r\n\tgantt._lightbox_methods = {};\r\n\tgantt._lightbox_template = \"
\";\r\n\tgantt._lightbox_template = `
`;\r\n\r\n\t// GS-1952. Attaching the lightbox to the BODY element is not considered secure.\r\n\t// Attach it to Gantt container for Salesforce and other secure environments\r\n\tgantt._lightbox_root = gantt.$root;\r\n\tfunction setParentNode() {\r\n\t\tconst cspEnvironment = gantt.config.csp === true;\r\n\t\tconst salesforceEnvironment = !!window[\"Sfdc\"] || !!window[\"$A\"] || window[\"Aura\"] || ('$shadowResolver$' in document.body);\r\n\t\tif (cspEnvironment || salesforceEnvironment) {\r\n\t\t\tgantt._lightbox_root = gantt.$root;\r\n\t\t} else {\r\n\t\t\tgantt._lightbox_root = document.body;\r\n\t\t}\r\n\t}\r\n\r\n\t//TODO: gantt._lightbox_id is changed from data.js and accessed from autoscheduling, check if it can be removed from gantt object\r\n\tvar state = gantt.$services.getService(\"state\");\r\n\tstate.registerProvider(\"lightbox\", function () {\r\n\t\treturn {\r\n\t\t\tlightbox: gantt._lightbox_id\r\n\t\t};\r\n\t});\r\n\r\n\tgantt.showLightbox = function (id) {\r\n\t\tvar task = this.getTask(id);\r\n\t\tif (!this.callEvent(\"onBeforeLightbox\", [id])) {\r\n\t\t\tif(gantt.isTaskExists(id) && gantt.getTask(id).$new){\r\n\t\t\t\t//GS-2340 if 'onBeforeLightbox' returns 'false' need update the order in datastore\r\n\t\t\t\tthis.$data.tasksStore._updateOrder();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar box = this.getLightbox(this.getTaskType(task.type));\r\n\r\n\t\tthis.showCover(box);\r\n\t\tthis._fill_lightbox(id, box);\r\n\t\tthis._setLbPosition(box);\r\n\t\tthis._waiAria.lightboxVisibleAttr(box);\r\n\r\n\t\tthis.callEvent(\"onLightbox\", [id]);\r\n\t};\r\n\r\n\tfunction _is_chart_visible(gantt) {\r\n\t\tvar timeline = gantt.$ui.getView(\"timeline\");\r\n\t\tif (timeline && timeline.isVisible()) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgantt._get_timepicker_step = function () {\r\n\t\tif (this.config.round_dnd_dates) {\r\n\t\t\tvar step;\r\n\t\t\tif (_is_chart_visible(this)) {\r\n\t\t\t\tvar scale = gantt.getScale();\r\n\t\t\t\tstep = (helpers.getSecondsInUnit(scale.unit) * scale.step) / 60;//timepicker step is measured in minutes\r\n\t\t\t}\r\n\r\n\t\t\tif (!step || step >= 60 * 24) {\r\n\t\t\t\tstep = this.config.time_step;\r\n\t\t\t}\r\n\t\t\treturn step;\r\n\t\t}\r\n\t\treturn this.config.time_step;\r\n\t};\r\n\tgantt.getLabel = function (property, key) {\r\n\t\tvar sections = this._get_typed_lightbox_config();\r\n\t\tfor (var i = 0; i < sections.length; i++) {\r\n\t\t\tif (sections[i].map_to == property) {\r\n\t\t\t\tvar options = sections[i].options;\r\n\t\t\t\tfor (var j = 0; j < options.length; j++) {\r\n\t\t\t\t\tif (options[j].key == key) {\r\n\t\t\t\t\t\treturn options[j].label;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\r\n\tgantt.updateCollection = function (list_name, collection) {\r\n\t\tcollection = collection.slice(0);\r\n\t\tvar list = gantt.serverList(list_name);\r\n\t\tif (!list) return false;\r\n\t\tlist.splice(0, list.length);\r\n\t\tlist.push.apply(list, collection || []);\r\n\t\tgantt.resetLightbox();\r\n\t};\r\n\tgantt.getLightboxType = function () {\r\n\t\treturn this.getTaskType(this._lightbox_type);\r\n\t};\r\n\tgantt.getLightbox = function (type) {\r\n\t\tvar lightboxDiv;\r\n\t\tvar fullWidth;\r\n\t\tvar html;\r\n\t\tvar sns;\r\n\t\tvar ds;\r\n\t\tvar classNames = \"\";\r\n\t\tsetParentNode();\r\n\r\n\t\tif (type === undefined)\r\n\t\t\ttype = this.getLightboxType();\r\n\r\n\t\tif (!this._lightbox || this.getLightboxType() != this.getTaskType(type)) {\r\n\t\t\tthis._lightbox_type = this.getTaskType(type);\r\n\t\t\tlightboxDiv = document.createElement(\"div\");\r\n\t\t\tclassNames = \"gantt_cal_light\";\r\n\t\t\tfullWidth = this._is_lightbox_timepicker();\r\n\r\n\t\t\tif (gantt.config.wide_form)\r\n\t\t\t\tclassNames += \" gantt_cal_light_wide\";\r\n\r\n\t\t\tif (fullWidth) {\r\n\t\t\t\tclassNames += \" gantt_cal_light_full\";\r\n\t\t\t}\r\n\r\n\t\t\tlightboxDiv.className = classNames;\r\n\r\n\t\t\tlightboxDiv.style.visibility = \"hidden\";\r\n\t\t\thtml = this._lightbox_template;\r\n\t\t\thtml += \"\";\r\n\t\t\thtml += getHtmlButtons(this.config.buttons_left);\r\n\t\t\thtml += \"
\";\r\n\t\t\thtml += getHtmlButtons(this.config.buttons_right, true);\r\n\t\t\thtml += \"
\";\r\n\r\n\t\t\tlightboxDiv.innerHTML = html;\r\n\r\n\t\t\tgantt._waiAria.lightboxAttr(lightboxDiv);\r\n\r\n\t\t\tif (gantt.config.drag_lightbox) {\r\n\t\t\t\tlightboxDiv.firstChild.onmousedown = gantt._ready_to_dnd;\r\n\t\t\t\tlightboxDiv.firstChild.ontouchstart = function (e){\r\n\t\t\t\t\tgantt._ready_to_dnd(e.touches[0]);\r\n\t\t\t\t};\r\n\t\t\t\tlightboxDiv.firstChild.onselectstart = function () {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t};\r\n\t\t\t\tlightboxDiv.firstChild.style.cursor = \"pointer\";\r\n\t\t\t\tgantt._init_dnd_events();\r\n\t\t\t}\r\n\r\n\t\t\t// GS-1428: If there is lightbox node, we need to remove it from the DOM\r\n\t\t\tif (this._lightbox){\r\n\t\t\t\tthis.resetLightbox();\r\n\t\t\t}\r\n\t\t\tshow_cover();\r\n\t\t\tthis._cover.insertBefore(lightboxDiv, this._cover.firstChild);\r\n\t\t\tthis._lightbox = lightboxDiv;\r\n\r\n\t\t\tsns = this._get_typed_lightbox_config(type);\r\n\t\t\thtml = this._render_sections(sns);\r\n\r\n\t\t\tds = lightboxDiv.querySelector(\"div.gantt_cal_larea\");\r\n\t\t\t\r\n\t\t\t//GS-1131. If gantt_cal_larea is displayed, Firefox renders buttons incorrectly;\r\n\t\t\tvar backup_overflow = ds.style.overflow;\r\n\t\t\tds.style.overflow = 'hidden';\r\n\r\n\t\t\tds.innerHTML = html;\r\n\r\n\t\t\t\r\n\r\n\t\t\tbindLabelsToInputs(sns);\r\n\r\n\t\t\tds.style.overflow = backup_overflow;\r\n\r\n\t\t\tthis._init_lightbox_events(this);\r\n\t\t\tlightboxDiv.style.display = \"none\";\r\n\t\t\tlightboxDiv.style.visibility = \"visible\";\r\n\t\t}\r\n\t\treturn this._lightbox;\r\n\t};\r\n\r\n\tgantt._render_sections = function (sns) {\r\n\t\tvar html = \"\";\r\n\t\tfor (var i = 0; i < sns.length; i++) {\r\n\t\t\tvar block = this.form_blocks[sns[i].type];\r\n\t\t\tif (!block) continue; //ignore incorrect blocks\r\n\t\t\tsns[i].id = \"area_\" + this.uid();\r\n\r\n\t\t\tvar display = sns[i].hidden ? \" style='display:none'\" : \"\";\r\n\t\t\tvar button = \"\";\r\n\t\t\tif (sns[i].button) {\r\n\t\t\t\tbutton = \"\";\r\n\t\t\t}\r\n\t\t\tif (sns[i].type == \"baselines\") {\r\n\t\t\t\tbutton = \"\" +\r\n\t\t\t\t\"\";\r\n\t\t\t}\r\n\t\t\tif (this.config.wide_form) {\r\n\t\t\t\thtml += \"\";\r\n\t\t\t}\r\n\t\t\thtml += \"
\" + button + this.locale.labels[\"section_\" + sns[i].name] + \"
\" + block.render.call(this, sns[i]);\r\n\t\t\thtml += \"
\";\r\n\t\t}\r\n\t\treturn html;\r\n\t};\r\n\r\n\tgantt._center_lightbox = function(box){\r\n\t\tgantt._setLbPosition(box);\r\n\t};\r\n\tgantt._setLbPosition = function(box) {\r\n\t\tif(!box){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst rootElement = gantt._lightbox_root || gantt.$root;\r\n\t\tbox.style.top = Math.max(rootElement.offsetHeight / 2 - box.offsetHeight/2, 0) + \"px\";\r\n\t\tbox.style.left = Math.max(rootElement.offsetWidth / 2 - box.offsetWidth/2, 0) + \"px\";\r\n\t};\r\n\r\n\tgantt.showCover = function (box) {\r\n\t\tif (box){\r\n\t\t\tbox.style.display=\"block\";\r\n\t\r\n\t\t\tthis._setLbPosition(box);\r\n\t\t}\r\n\t\tshow_cover();\r\n\t\tthis._cover.style.display = \"\";\r\n\t};\r\n\tconst show_cover=function(){\r\n\t\tif(gantt._cover) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\r\n\t\tgantt._cover=document.createElement(\"div\");\r\n\t\tgantt._cover.className=\"gantt_cal_cover\";\r\n\t\tgantt._cover.style.display = \"none\";\r\n\t\r\n\t\tgantt.event(gantt._cover, \"mousemove\", gantt._move_while_dnd);\r\n\t\tgantt.event(gantt._cover, \"mouseup\", gantt._finish_dnd);\r\n\t\r\n\t\tconst rootElement = gantt._lightbox_root || gantt.$root;\r\n\t\trootElement.appendChild(gantt._cover);\r\n\t};\r\n\r\n\tgantt._init_lightbox_events = function () {\r\n\t\tgantt.lightbox_events = {};\r\n\r\n\r\n\t\tgantt.lightbox_events.gantt_save_btn = function () {\r\n\t\t\tgantt._save_lightbox();\r\n\t\t};\r\n\r\n\r\n\t\tgantt.lightbox_events.gantt_delete_btn = function () {\r\n\t\t\tgantt._lightbox_current_type = null;\r\n\t\t\tif (!gantt.callEvent(\"onLightboxDelete\", [gantt._lightbox_id]))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tif (gantt.isTaskExists(gantt._lightbox_id)) {\r\n\t\t\t\tgantt.$click.buttons[\"delete\"](gantt._lightbox_id);\r\n\t\t\t} else {\r\n\t\t\t\tgantt.hideLightbox();\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\r\n\t\tgantt.lightbox_events.gantt_cancel_btn = function () {\r\n\t\t\tgantt._cancel_lightbox();\r\n\t\t};\r\n\r\n\r\n\t\tgantt.lightbox_events[\"default\"] = function (e, src) {\r\n\t\t\tif (src.getAttribute(\"data-dhx-button\")) {\r\n\t\t\t\tgantt.callEvent(\"onLightboxButton\", [src.className, src, e]);\r\n\t\t\t} else {\r\n\t\t\t\tvar index, block, sec;\r\n\r\n\t\t\t\tvar className = domHelpers.getClassName(src);\r\n\t\t\t\tif (className.indexOf(\"gantt_custom_button\") != -1) {\r\n\t\t\t\t\tif (className.indexOf(\"gantt_custom_button_\") != -1) {\r\n\t\t\t\t\t\tindex = src.parentNode.getAttribute(\"data-index\");\r\n\t\t\t\t\t\tsec = src;\r\n\t\t\t\t\t\twhile (sec && domHelpers.getClassName(sec).indexOf(\"gantt_cal_lsection\") == -1) {\r\n\t\t\t\t\t\t\tsec = sec.parentNode;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tindex = src.getAttribute(\"data-index\");\r\n\t\t\t\t\t\tsec = src.parentNode;\r\n\t\t\t\t\t\tsrc = src.firstChild;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar sections = gantt._get_typed_lightbox_config();\r\n\r\n\t\t\t\tif (index) {\r\n\t\t\t\t\tindex = index * 1;\r\n\t\t\t\t\tblock = gantt.form_blocks[sections[index * 1].type];\r\n\t\t\t\t\tblock.button_click(index, src, sec, sec.nextSibling);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.event(gantt.getLightbox(), \"click\", function (e) {\r\n\t\t\tif(e.target.closest(\".gantt_cal_ltitle_close_btn\")){\r\n\t\t\t\tgantt._cancel_lightbox();\r\n\t\t\t}\r\n\t\t\tvar src = domHelpers.getTargetNode(e);\r\n\r\n\t\t\tvar className = domHelpers.getClassName(src);\r\n\t\t\tif (!className) {\r\n\t\t\t\tsrc = src.previousSibling;\r\n\t\t\t\tclassName = domHelpers.getClassName(src);\r\n\t\t\t}\r\n\t\t\tif (src && className && className.indexOf(\"gantt_btn_set\") === 0) {\r\n\t\t\t\tsrc = src.firstChild;\r\n\t\t\t\tclassName = domHelpers.getClassName(src);\r\n\t\t\t}\r\n\t\t\tif (src && className) {\r\n\t\t\t\tvar func = gantt.defined(gantt.lightbox_events[src.className]) ? gantt.lightbox_events[src.className] : gantt.lightbox_events[\"default\"];\r\n\t\t\t\treturn func(e, src);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\tgantt.getLightbox().onkeydown = function (e) {\r\n\t\t\tvar event = e || window.event;\r\n\t\t\tvar target = e.target || e.srcElement;\r\n\t\t\tvar buttonTarget = domHelpers.getClassName(target).indexOf(\"gantt_btn_set\") > -1;\r\n\r\n\t\t\tswitch ((e || event).keyCode) {\r\n\t\t\t\tcase gantt.constants.KEY_CODES.SPACE: {\r\n\t\t\t\t\tif ((e || event).shiftKey) return;\r\n\t\t\t\t\tif (buttonTarget && target.click) {\r\n\t\t\t\t\t\ttarget.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase gantt.keys.edit_save:\r\n\t\t\t\t\tif ((e || event).shiftKey) return;\r\n\t\t\t\t\tif (buttonTarget && target.click) {\r\n\t\t\t\t\t\ttarget.click();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tgantt._save_lightbox();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase gantt.keys.edit_cancel:\r\n\t\t\t\t\tgantt._cancel_lightbox();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\tgantt._cancel_lightbox = function () {\r\n\t\tvar task = this.getLightboxValues();\r\n\t\tgantt._lightbox_current_type = null;\r\n\t\tthis.callEvent(\"onLightboxCancel\", [this._lightbox_id, task.$new]);\r\n\t\tif (gantt.isTaskExists(task.id) && task.$new) {\r\n\t\t\tthis.silent(function () {\r\n\t\t\t\tgantt.$data.tasksStore.removeItem(task.id);\r\n\t\t\t\tgantt._update_flags(task.id, null);\r\n\t\t\t});\r\n\t\t\tthis.refreshData();\r\n\t\t}\r\n\r\n\t\tthis.hideLightbox();\r\n\t};\r\n\r\n\tgantt._save_lightbox = function () {\r\n\t\tvar task = this.getLightboxValues();\r\n\t\tgantt._lightbox_current_type = null;\r\n\t\tif (!this.callEvent(\"onLightboxSave\", [this._lightbox_id, task, !!task.$new]))\r\n\t\t\treturn;\r\n\r\n\t\t// GS-2170. Do not recalculate the indexes and dates of other tasks\r\n\t\t// as they will be recalculated in the `refreshData`\r\n\t\tgantt.$data.tasksStore._skipTaskRecalculation = \"lightbox\";\r\n\t\tif (task.$new) {\r\n\t\t\tdelete task.$new;\r\n\t\t\tthis.addTask(task, task.parent, this.getTaskIndex(task.id));\r\n\t\t} else if (this.isTaskExists(task.id)) {\r\n\t\t\tthis.mixin(this.getTask(task.id), task, true);\r\n\t\t\tthis.refreshTask(task.id);\r\n\t\t\tthis.updateTask(task.id);\r\n\t\t}\r\n\t\tgantt.$data.tasksStore._skipTaskRecalculation = false;\r\n\t\tthis.refreshData();\r\n\r\n\t\t// TODO: do we need any blockable events here to prevent closing lightbox?\r\n\t\tthis.hideLightbox();\r\n\t};\r\n\r\n\tgantt._resolve_default_mapping = function (section) {\r\n\t\tvar mapping = section.map_to;\r\n\t\tvar time_controls = { \"time\": true, \"time_optional\": true, \"duration\": true, \"duration_optional\": true };\r\n\t\tif (time_controls[section.type]) {\r\n\t\t\tif (section.map_to == \"auto\") {\r\n\t\t\t\tmapping = { start_date: \"start_date\", end_date: \"end_date\", duration: \"duration\" };\r\n\t\t\t} else if (typeof (section.map_to) === \"string\") {\r\n\t\t\t\tmapping = { start_date: section.map_to };\r\n\t\t\t}\r\n\t\t} else if (section.type === \"constraint\") {\r\n\t\t\tif (!section.map_to || typeof (section.map_to) === \"string\") {\r\n\t\t\t\tmapping = { constraint_type: \"constraint_type\", constraint_date: \"constraint_date\" };\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn mapping;\r\n\t};\r\n\r\n\tgantt.getLightboxValues = function () {\r\n\t\tvar task = {};\r\n\r\n\t\tif (gantt.isTaskExists(this._lightbox_id)) {\r\n\t\t\ttask = this.mixin({}, this.getTask(this._lightbox_id));\r\n\t\t}\r\n\r\n\t\tvar sns = this._get_typed_lightbox_config();\r\n\t\tfor (var i = 0; i < sns.length; i++) {\r\n\t\t\tvar node = gantt._lightbox_root.querySelector(\"#\" + sns[i].id);\r\n\t\t\tnode = (node ? node.nextSibling : node);\r\n\t\t\tvar block = this.form_blocks[sns[i].type];\r\n\t\t\tif (!block) continue;\r\n\t\t\tvar res = block.get_value.call(this, node, task, sns[i]);\r\n\t\t\tvar map_to = gantt._resolve_default_mapping(sns[i]);\r\n\t\t\tif (typeof map_to == \"string\" && map_to != \"auto\") {\r\n\t\t\t\ttask[map_to] = res;\r\n\t\t\t} else if (typeof map_to == \"object\") {\r\n\t\t\t\tfor (var property in map_to) {\r\n\t\t\t\t\tif (map_to[property])\r\n\t\t\t\t\t\ttask[map_to[property]] = res[property];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// GS-1282 We need to preserve the task type even if the lightbox doesn't have the typeselect section\r\n\t\t// GS-2460 set the current type from selector\r\n\t\tif (gantt._lightbox_current_type) {\r\n\t\t\ttask.type = gantt._lightbox_current_type;\r\n\t\t}\r\n\r\n\t\treturn task;\r\n\t};\r\n\r\n\r\n\tgantt.hideLightbox = function () {\r\n\t\tvar box = this.getLightbox();\r\n\t\tif (box) box.style.display = \"none\";\r\n\r\n\t\tthis._waiAria.lightboxHiddenAttr(box);\r\n\t\tthis._lightbox_id = null;\r\n\r\n\t\tthis.hideCover(box);\r\n\t\tthis.resetLightbox();\r\n\t\tthis.callEvent(\"onAfterLightbox\", []);\r\n\t};\r\n\tgantt.hideCover = function (box) {\r\n\t\tif(box){\r\n\t\t\tbox.style.display = \"none\";\r\n\t\t}\r\n\t\tif (this._cover)\r\n\t\t\tthis._cover.parentNode.removeChild(this._cover);\r\n\t\tthis._cover = null;\r\n\t};\r\n\r\n\tgantt.resetLightbox = function () {\r\n\t\tif (gantt._lightbox && !gantt._custom_lightbox)\r\n\t\t\tgantt._lightbox.remove();\r\n\t\tgantt._lightbox = null;\r\n\t};\r\n\tgantt._set_lightbox_values = function (data, box) {\r\n\t\tvar task = data;\r\n\t\tvar s = box.getElementsByTagName(\"span\");\r\n\t\tvar lightboxHeader = [];\r\n\t\tif (gantt.templates.lightbox_header) {\r\n\t\t\tlightboxHeader.push(\"\");\r\n\t\t\tlightboxHeader.push(gantt.templates.lightbox_header(task.start_date, task.end_date, task));\r\n\t\t\ts[1].innerHTML = \"\";\r\n\t\t\ts[2].innerHTML = gantt.templates.lightbox_header(task.start_date, task.end_date, task);\r\n\t\t} else {\r\n\t\t\tlightboxHeader.push(this.templates.task_time(task.start_date, task.end_date, task));\r\n\t\t\tlightboxHeader.push(String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70)); //IE6 fix\r\n\t\t\ts[1].innerHTML = this.templates.task_time(task.start_date, task.end_date, task);\r\n\t\t\ts[2].innerHTML = String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70); //IE6 fix\r\n\t\t}\r\n\t\ts[1].innerHTML = lightboxHeader[0];\r\n\t\ts[2].innerHTML = lightboxHeader[1];\r\n\r\n\t\tgantt._waiAria.lightboxHeader(box, lightboxHeader.join(\" \"));\r\n\r\n\t\tvar sns = this._get_typed_lightbox_config(this.getLightboxType());\r\n\t\tfor (var i = 0; i < sns.length; i++) {\r\n\t\t\tvar section = sns[i];\r\n\r\n\t\t\tif (!this.form_blocks[section.type]) {\r\n\t\t\t\tcontinue;//skip incorrect sections, same check is done during rendering\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar node = gantt._lightbox_root.querySelector(\"#\" + section.id).nextSibling;\r\n\t\t\tvar block = this.form_blocks[section.type];\r\n\t\t\tvar map_to = gantt._resolve_default_mapping(sns[i]);\r\n\t\t\tvar value = this.defined(task[map_to]) ? task[map_to] : section.default_value;\r\n\t\t\tblock.set_value.call(gantt, node, value, task, section);\r\n\r\n\t\t\tif (section.focus)\r\n\t\t\t\tblock.focus.call(gantt, node);\r\n\t\t}\r\n\t\tif (gantt.isTaskExists(data.id)){\r\n\t\t\tgantt._lightbox_id = data.id;\r\n\t\t}\r\n\t};\r\n\tgantt._fill_lightbox = function (id, box) {\r\n\t\tvar task = this.getTask(id);\r\n\t\tthis._set_lightbox_values(task, box);\r\n\t};\r\n\r\n\r\n\tgantt.getLightboxSection = function (name) {\r\n\t\tvar config = this._get_typed_lightbox_config();\r\n\t\tvar i = 0;\r\n\t\tfor (i; i < config.length; i++)\r\n\t\t\tif (config[i].name == name)\r\n\t\t\t\tbreak;\r\n\t\tvar section = config[i];\r\n\t\tif (!section)\r\n\t\t\treturn null;\r\n\r\n\t\tif (!this._lightbox)\r\n\t\t\tthis.getLightbox();\r\n\t\tvar header = gantt._lightbox_root.querySelector(\"#\" + section.id);\r\n\t\tvar node = header.nextSibling;\r\n\r\n\t\tvar result = {\r\n\t\t\tsection: section,\r\n\t\t\theader: header,\r\n\t\t\tnode: node,\r\n\t\t\tgetValue: function (ev) {\r\n\t\t\t\treturn gantt.form_blocks[section.type].get_value.call(gantt, node, (ev || {}), section);\r\n\t\t\t},\r\n\t\t\tsetValue: function (value, ev) {\r\n\t\t\t\treturn gantt.form_blocks[section.type].set_value.call(gantt, node, value, (ev || {}), section);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar handler = this._lightbox_methods[\"get_\" + section.type + \"_control\"];\r\n\t\treturn handler ? handler(result) : result;\r\n\t};\r\n\r\n\tgantt._lightbox_methods.get_template_control = function (result) {\r\n\t\tresult.control = result.node;\r\n\t\treturn result;\r\n\t};\r\n\tgantt._lightbox_methods.get_select_control = function (result) {\r\n\t\tresult.control = result.node.getElementsByTagName(\"select\")[0];\r\n\t\treturn result;\r\n\t};\r\n\tgantt._lightbox_methods.get_textarea_control = function (result) {\r\n\t\tresult.control = result.node.getElementsByTagName(\"textarea\")[0];\r\n\t\treturn result;\r\n\t};\r\n\tgantt._lightbox_methods.get_time_control = function (result) {\r\n\t\tresult.control = result.node.getElementsByTagName(\"select\"); // array\r\n\t\treturn result;\r\n\t};\r\n\r\n\r\n\tgantt._init_dnd_events = function () {\r\n\t\tvar eventElement = gantt._lightbox_root;\r\n\t\tthis.event(eventElement, \"mousemove\", gantt._move_while_dnd);\r\n\t\tthis.event(eventElement, \"mouseup\", gantt._finish_dnd);\r\n\t\tthis.event(eventElement, \"touchmove\", function (e){\r\n\t\t\tgantt._move_while_dnd(e.touches[0]);\r\n\t\t});\r\n\t\tthis.event(eventElement, \"touchend\", function (e){\r\n\t\t\tgantt._finish_dnd(e.touches[0]);\r\n\t\t});\r\n\t\t// GS-1952: In Salesforce environment, the lightbox is attached to the Gantt container. \r\n\t\t// So when Gantt is reinitialized, the events are no longer attached to the Gantt container.\r\n\t\t// gantt._init_dnd_events = function () {\r\n\t\t// };\r\n\t};\r\n\tgantt._move_while_dnd = function (event) {\r\n\t\tif (gantt._dnd_start_lb) {\r\n\t\t\tif (!document.gantt_unselectable) {\r\n\t\t\t\tgantt._lightbox_root.className += \" gantt_unselectable\";\r\n\t\t\t\tdocument.gantt_unselectable = true;\r\n\t\t\t}\r\n\t\t\tvar lb = gantt.getLightbox();\r\n\t\t\tvar now = [event.pageX, event.pageY];\r\n\t\t\tlb.style.top = gantt._lb_start[1] + now[1] - gantt._dnd_start_lb[1] + \"px\";\r\n\t\t\tlb.style.left = gantt._lb_start[0] + now[0] - gantt._dnd_start_lb[0] + \"px\";\r\n\t\t}\r\n\t};\r\n\tgantt._ready_to_dnd = function (event) {\r\n\t\tvar lb = gantt.getLightbox();\r\n\t\tgantt._lb_start = [lb.offsetLeft, lb.offsetTop];\r\n\t\tgantt._dnd_start_lb = [event.pageX, event.pageY];\r\n\t};\r\n\tgantt._finish_dnd = function () {\r\n\t\tif (gantt._lb_start) {\r\n\t\t\tgantt._lb_start = gantt._dnd_start_lb = false;\r\n\t\t\tgantt._lightbox_root.className = gantt._lightbox_root.className.replace(\" gantt_unselectable\", \"\");\r\n\t\t\tdocument.gantt_unselectable = false;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tgantt._focus = function (node, select) {\r\n\t\tif (node && node.focus) {\r\n\t\t\tif (gantt.config.touch) {\r\n\t\t\t\t//do not focus editor, to prevent auto-zoom\r\n\t\t\t} else {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (select && node.select) node.select();\r\n\t\t\t\t\tnode.focus();\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\t// silent errors\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tgantt.form_blocks = {\r\n\t\tgetTimePicker: function (sns, hidden) {\r\n\t\t\tvar html = \"\";\r\n\t\t\tvar cfg = this.config;\r\n\t\t\tvar i;\r\n\t\t\tvar options;\r\n\t\t\tvar ariaAttrs;\r\n\t\t\tvar readonly;\r\n\t\t\tvar display;\r\n\t\t\tvar settings = {\r\n\t\t\t\tfirst: 0,\r\n\t\t\t\tlast: 24 * 60,\r\n\t\t\t\tdate: this.date.date_part(new Date(gantt._min_date.valueOf())),\r\n\t\t\t\ttimeFormat: getTimeFormat(sns)\r\n\t\t\t};\r\n\r\n\t\t\t// map: default order => real one\r\n\t\t\tsns._time_format_order = { size: 0 };\r\n\r\n\t\t\tif (gantt.config.limit_time_select) {\r\n\t\t\t\tsettings.first = 60 * cfg.first_hour;\r\n\t\t\t\tsettings.last = 60 * cfg.last_hour + 1;\r\n\t\t\t\tsettings.date.setHours(cfg.first_hour);\r\n\t\t\t}\r\n\r\n\t\t\tfor (i = 0; i < settings.timeFormat.length; i++) {\r\n\t\t\t\t// adding spaces between selects\r\n\t\t\t\tif (i > 0) {\r\n\t\t\t\t\thtml += \" \";\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions = getHtmlTimePickerOptions(sns, i, settings);\r\n\r\n\t\t\t\tif (options) {\r\n\t\t\t\t\tariaAttrs = gantt._waiAria.lightboxSelectAttrString(settings.timeFormat[i]);\r\n\t\t\t\t\treadonly = sns.readonly ? \"disabled='disabled'\" : \"\";\r\n\t\t\t\t\tdisplay = hidden ? \" style='display:none' \" : \"\";\r\n\t\t\t\t\thtml += \"\" + options + \" \";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn html;\r\n\t\t},\r\n\t\tgetTimePickerValue: function (selects, config, offset) {\r\n\t\t\tvar map = config._time_format_order;\r\n\t\t\tvar needSetTime = gantt.defined(map[3]);\r\n\r\n\t\t\tvar time;\r\n\t\t\tvar hours = 0;\r\n\t\t\tvar minutes = 0;\r\n\r\n\t\t\tvar mapOffset = offset || 0;\r\n\r\n\t\t\tif (needSetTime) {\r\n\t\t\t\ttime = parseInt(selects[map[3] + mapOffset].value, 10);\r\n\t\t\t\thours = Math.floor(time / 60);\r\n\t\t\t\tminutes = time % 60;\r\n\t\t\t}\r\n\t\t\treturn new Date(selects[map[2] + mapOffset].value, selects[map[1] + mapOffset].value, selects[map[0] + mapOffset].value, hours, minutes);\r\n\t\t},\r\n\r\n\t\t_fill_lightbox_select: function (s, i, d, map) {\r\n\t\t\ts[i + map[0]].value = d.getDate();\r\n\t\t\ts[i + map[1]].value = d.getMonth();\r\n\t\t\ts[i + map[2]].value = d.getFullYear();\r\n\t\t\tif (gantt.defined(map[3])) {\r\n\t\t\t\tvar v = d.getHours() * 60 + d.getMinutes();\r\n\t\t\t\tv = Math.round(v / gantt._get_timepicker_step()) * gantt._get_timepicker_step();\r\n\t\t\t\tvar input = s[i + map[3]];\r\n\t\t\t\tinput.value = v;\r\n\t\t\t\t//in case option not shown\r\n\t\t\t\tinput.setAttribute(\"data-value\", v);\r\n\t\t\t}\r\n\t\t},\r\n\t\ttemplate: new TemplateControl(),\r\n\t\ttextarea: new TextareaControl(),\r\n\t\tselect: new SelectControl(),\r\n\t\ttime: new TimeControl(),\r\n\t\tduration: new DurationControl(),\r\n\t\tparent: new ParentControl(),\r\n\t\tradio: new RadioControl(),\r\n\t\tcheckbox: new CheckboxControl(),\r\n\t\tresources: new ResourcesControl(),\r\n\t\tconstraint: new ConstraintControl(),\r\n\t\tbaselines: new BaselineControl(),\r\n\t\ttypeselect: new TypeselectControl()\r\n\t};\r\n\r\n\tgantt._is_lightbox_timepicker = function () {\r\n\t\tvar s = this._get_typed_lightbox_config();\r\n\t\tfor (var i = 0; i < s.length; i++)\r\n\t\t\tif (s[i].name == \"time\" && s[i].type == \"time\")\r\n\t\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\r\n\tgantt._simple_confirm = function (message, title, callback, ok) {\r\n\t\tif (!message)\r\n\t\t\treturn callback();\r\n\t\tvar opts = { text: message };\r\n\t\tif (title)\r\n\t\t\topts.title = title;\r\n\t\tif (ok) {\r\n\t\t\topts.ok = ok;\r\n\t\t}\r\n\t\tif (callback) {\r\n\t\t\topts.callback = function (result) {\r\n\t\t\t\tif (result)\r\n\t\t\t\t\tcallback();\r\n\t\t\t};\r\n\t\t}\r\n\t\tgantt.confirm(opts);\r\n\t};\r\n\r\n\tfunction _get_type_name(type_value) {\r\n\t\tfor (var i in this.config.types) {\r\n\t\t\tif (this.config.types[i] == type_value) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"task\";\r\n\t}\r\n\r\n\tgantt._get_typed_lightbox_config = function (type) {\r\n\t\tif (type === undefined) {\r\n\t\t\ttype = this.getLightboxType();\r\n\t\t}\r\n\r\n\t\tvar field = _get_type_name.call(this, type);\r\n\r\n\t\tif (gantt.config.lightbox[field + \"_sections\"]) {\r\n\t\t\treturn gantt.config.lightbox[field + \"_sections\"];\r\n\t\t} else {\r\n\t\t\treturn gantt.config.lightbox.sections;\r\n\t\t}\r\n\t};\r\n\r\n\tgantt._silent_redraw_lightbox = function (type) {\r\n\t\tvar oldType = this.getLightboxType();\r\n\r\n\t\tif (this.getState().lightbox) {\r\n\t\t\tvar taskId = this.getState().lightbox;\r\n\t\t\tvar formData = this.getLightboxValues(),\r\n\t\t\t\ttask = this.copy(this.getTask(taskId));\r\n\r\n\t\t\tthis.resetLightbox();\r\n\r\n\t\t\tvar updTask = this.mixin(task, formData, true);\r\n\t\t\tvar box = this.getLightbox(type ? type : undefined);\r\n\t\t\tthis._set_lightbox_values(updTask, box);\r\n\t\t\tthis.showCover(box);\r\n\t\t} else {\r\n\t\t\tthis.resetLightbox();\r\n\t\t\tthis.getLightbox(type ? type : undefined);\r\n\t\t}\r\n\t\tthis.callEvent(\"onLightboxChange\", [oldType, this.getLightboxType()]);\r\n\t};\r\n\r\n\tfunction bindLabelsToInputs(sns) {\r\n\t\tvar section;\r\n\t\tvar label;\r\n\t\tvar labelBlock;\r\n\t\tvar inputBlock;\r\n\t\tvar input;\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 0; i < sns.length; i++) {\r\n\t\t\tsection = sns[i];\r\n\t\t\tlabelBlock = gantt._lightbox_root.querySelector(\"#\" + section.id);\r\n\r\n\t\t\tif (!section.id || !labelBlock) continue;\r\n\r\n\t\t\tlabel = labelBlock.querySelector(\"label\");\r\n\t\t\tinputBlock = labelBlock.nextSibling;\r\n\r\n\t\t\tif (!inputBlock) continue;\r\n\r\n\t\t\tinput = inputBlock.querySelector(\"input, select, textarea\");\r\n\t\t\tif (input) {\r\n\t\t\t\tinput.id = input.id || \"input_\" + gantt.uid();\r\n\t\t\t\tsection.inputId = input.id;\r\n\t\t\t\tlabel.setAttribute(\"for\", section.inputId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getHtmlButtons(buttons, floatRight) {\r\n\t\tvar button;\r\n\t\tvar ariaAttr;\r\n\t\tvar html = \"\";\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 0; i < buttons.length; i++) {\r\n\t\t\t// needed to migrate from 'dhx_something' to 'gantt_something' naming in a lightbox\r\n\t\t\tbutton = gantt.config._migrate_buttons[buttons[i]] ? gantt.config._migrate_buttons[buttons[i]] : buttons[i];\r\n\r\n\t\t\tariaAttr = gantt._waiAria.lightboxButtonAttrString(button);\r\n\t\t\thtml += \"\";\r\n\t\t}\r\n\t\treturn html;\r\n\t}\r\n\r\n\tfunction getTimeFormat(sns) {\r\n\t\tvar scale;\r\n\t\tvar unit;\r\n\t\tvar result;\r\n\r\n\t\tif (sns.time_format) return sns.time_format;\r\n\r\n\t\t// default order\r\n\t\tresult = [\"%d\", \"%m\", \"%Y\"];\r\n\t\tscale = gantt.getScale();\r\n\t\tunit = scale ? scale.unit : gantt.config.duration_unit;\r\n\t\tif (helpers.getSecondsInUnit(unit) < helpers.getSecondsInUnit(\"day\")) {\r\n\t\t\tresult.push(\"%H:%i\");\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction getHtmlTimePickerOptions(sns, index, settings) {\r\n\t\tvar range;\r\n\t\tvar offset;\r\n\t\tvar start_year;\r\n\t\tvar end_year;\r\n\t\tvar i;\r\n\t\tvar time;\r\n\t\tvar diff;\r\n\t\tvar tdate;\r\n\t\tvar html = \"\";\r\n\r\n\t\tswitch (settings.timeFormat[index]) {\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\tsns._time_format_order[2] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//year\r\n\r\n\t\t\t\tif (sns.year_range) {\r\n\t\t\t\t\tif (!isNaN(sns.year_range)) {\r\n\t\t\t\t\t\trange = sns.year_range;\r\n\t\t\t\t\t} else if (sns.year_range.push) {\r\n\t\t\t\t\t\t// if\r\n\t\t\t\t\t\tstart_year = sns.year_range[0];\r\n\t\t\t\t\t\tend_year = sns.year_range[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trange = range || 10;\r\n\t\t\t\toffset = offset || Math.floor(range / 2);\r\n\t\t\t\tstart_year = start_year || settings.date.getFullYear() - offset;\r\n\t\t\t\tend_year = end_year || gantt.getState().max_date.getFullYear() + offset;\r\n\r\n\t\t\t\tfor (i = start_year; i < end_year; i++)\r\n\t\t\t\t\thtml += \"\" + (i) + \" \";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%m\":\r\n\t\t\t\tsns._time_format_order[1] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//month\r\n\t\t\t\tfor (i = 0; i < 12; i++)\r\n\t\t\t\t\thtml += \"\" + gantt.locale.date.month_full[i] + \" \";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%d\":\r\n\t\t\t\tsns._time_format_order[0] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//days\r\n\t\t\t\tfor (i = 1; i < 32; i++)\r\n\t\t\t\t\thtml += \"\" + i + \" \";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%H:%i\":\r\n\t\t\t\t// var last = 24*60, first = 0;\r\n\t\t\t\tsns._time_format_order[3] = index;\r\n\t\t\t\tsns._time_format_order.size++;\r\n\t\t\t\t//hours\r\n\t\t\t\ti = settings.first;\r\n\t\t\t\ttdate = settings.date.getDate();\r\n\t\t\t\tsns._time_values = [];\r\n\r\n\t\t\t\twhile (i < settings.last) {\r\n\t\t\t\t\ttime = gantt.templates.time_picker(settings.date);\r\n\t\t\t\t\thtml += \"\" + time + \" \";\r\n\t\t\t\t\tsns._time_values.push(i);\r\n\t\t\t\t\tsettings.date.setTime(settings.date.valueOf() + gantt._get_timepicker_step() * 60 * 1000);\r\n\t\t\t\t\tdiff = (settings.date.getDate() != tdate) ? 1 : 0; // moved or not to the next day\r\n\t\t\t\t\ti = diff * 24 * 60 + settings.date.getHours() * 60 + settings.date.getMinutes();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn html;\r\n\t}\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TemplateControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(TemplateControl, _super);\r\n\r\n\r\n\tTemplateControl.prototype.render = function(sns) {\r\n\t\tlet height = sns.height ? `${sns.height}px` : '';\r\n\t\treturn `
`;\r\n\t};\r\n\r\n\tTemplateControl.prototype.set_value = function(node, value) {\r\n\t\tnode.innerHTML = value || \"\";\r\n\t};\r\n\r\n\tTemplateControl.prototype.get_value = function(node) {\r\n\t\treturn node.innerHTML || \"\";\r\n\t};\r\n\r\n\tTemplateControl.prototype.focus = function() {};\r\n\r\n\treturn TemplateControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TextareaControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(TextareaControl, _super);\r\n\r\n\tTextareaControl.prototype.render = function(sns) {\r\n\t\tconst height = (sns.height || \"130\") + \"px\";\r\n\t\tconst placeholder = sns.placeholder ? `placeholder='${sns.placeholder}'` : \"\";\r\n\t\treturn `
`;\r\n\t};\r\n\r\n\tTextareaControl.prototype.set_value = function(node, value) {\r\n\t\tgantt.form_blocks.textarea._get_input(node).value = value || \"\";\r\n\t};\r\n\r\n\tTextareaControl.prototype.get_value = function(node) {\r\n\t\treturn gantt.form_blocks.textarea._get_input(node).value;\r\n\t};\r\n\r\n\tTextareaControl.prototype.focus = function(node) {\r\n\t\tvar a = gantt.form_blocks.textarea._get_input(node);\r\n\t\tgantt._focus(a, true);\r\n\t};\r\n\r\n\tTextareaControl.prototype._get_input = function(node) {\r\n\t\treturn node.querySelector(\"textarea\");\r\n\t};\r\n\r\n\treturn TextareaControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TimeControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TimeControl, _super);\r\n\r\n\tTimeControl.prototype.render = function (sns) {\r\n\t\tvar time = gantt.form_blocks.getTimePicker.call(this, sns);\r\n\t\tlet sectionClassName = \"gantt_section_time\";\r\n\t\tif (sns.name !== \"time\"){\r\n\t\t\tsectionClassName += \" gantt_section_\" + sns.name;\r\n\t\t}\r\n\t\tvar html = \"\";\r\n\t\thtml += time;\r\n\r\n\t\tif (sns.single_date) {\r\n\t\t\ttime = gantt.form_blocks.getTimePicker.call(this, sns, true);\r\n\t\t\thtml += \" \";\r\n\t\t} else {\r\n\t\t\thtml += \" – \";\r\n\t\t}\r\n\r\n\t\thtml += time;\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tTimeControl.prototype.set_value = function (node, value, ev, config) {\r\n\t\tvar cfg = config;\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar map = config._time_format_order;\r\n\r\n\t\tif (cfg.auto_end_date) {\r\n\t\t\tvar _update_lightbox_select = function () {\r\n\t\t\t\tstart_date = new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, 0, 0);\r\n\t\t\t\tend_date = gantt.calculateEndDate({ start_date: start_date, duration: 1, task: ev });\r\n\t\t\t\tgantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\r\n\t\t\t};\r\n\t\t\tfor (var i = 0; i < 4; i++) {\r\n\t\t\t\ts[i].onchange = _update_lightbox_select;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar mapping = gantt._resolve_default_mapping(config);\r\n\r\n\t\tif (typeof (mapping) === \"string\") mapping = { start_date: mapping };\r\n\r\n\t\tvar start_date = ev[mapping.start_date] || new Date();\r\n\t\tvar end_date = ev[mapping.end_date] || gantt.calculateEndDate({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tduration: 1,\r\n\t\t\ttask: ev\r\n\t\t});\r\n\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\r\n\t};\r\n\r\n\tTimeControl.prototype.get_value = function (node, ev, config) {\r\n\t\tvar selects = node.getElementsByTagName(\"select\");\r\n\t\tvar startDate;\r\n\t\tvar map = config._time_format_order;\r\n\t\tfunction _getEndDate(selects, map, startDate) {\r\n\t\t\tvar endDate = gantt.form_blocks.getTimePickerValue(selects, config, map.size);\r\n\t\t\t// GS-1010: We need to add a way to obtain exact end_date for validation\r\n\t\t\tif (endDate <= startDate) { // when end date seems wrong\r\n\t\t\t\tif (config.autofix_end !== false || config.single_date) { // auto correct it in two cases - when the auto correction is not disabled, or when we have 'single date' control and the user don't have the UI to specify the end date\r\n\t\t\t\t\treturn gantt.date.add(startDate, gantt._get_timepicker_step(), \"minute\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn endDate;\r\n\t\t}\r\n\r\n\t\tstartDate = gantt.form_blocks.getTimePickerValue(selects, config);\r\n\r\n\t\tif (typeof gantt._resolve_default_mapping(config) === \"string\") {\r\n\t\t\treturn startDate;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: startDate,\r\n\t\t\tend_date: _getEndDate(selects, map, startDate)\r\n\t\t};\r\n\t};\r\n\r\n\tTimeControl.prototype.focus = function (node) {\r\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\r\n\t};\r\n\r\n\treturn TimeControl;\r\n};","import * as helpers from \"../../../../utils/helpers\";\r\nimport __extends from \"../../../../utils/extends\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction CheckboxControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(CheckboxControl, _super);\r\n\r\n\tCheckboxControl.prototype.render = function(sns) {\r\n\t\tconst height = sns.height ? `height:${sns.height}px;` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\tif (sns.options && sns.options.length) {\r\n\t\t\tfor (var i = 0; i < sns.options.length; i++) {\r\n\t\t\t\thtml += \" \" + sns.options[i].label + \" \";\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tsns.single_value = true;\r\n\t\t\thtml += \" \";\r\n\t\t}\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tCheckboxControl.prototype.set_value = function(node, value, ev, sns) {\r\n\t\tvar checkboxes = Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]\"));\r\n\r\n\t\tif (!node._dhx_onchange && sns.onchange) {\r\n\t\t\tnode.onchange = sns.onchange;\r\n\t\t\tnode._dhx_onchange = true;\r\n\t\t}\r\n\r\n\t\tif(sns.single_value){\r\n\t\t\tvar box = checkboxes[0];\r\n\t\t\tbox.checked = !!value;\r\n\t\t}else{\r\n\t\t\thelpers.forEach(checkboxes, function(entry) {\r\n\t\t\t\tentry.checked = value ? value.indexOf(entry.value) >= 0 : false;\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tCheckboxControl.prototype.get_value = function(node, task, sns) {\r\n\t\tif(sns.single_value){\r\n\t\t\tvar box = node.querySelector(\"input[type=checkbox]\");\r\n\t\t\treturn box.checked;\r\n\t\t}else{\r\n\t\t\treturn helpers.arrayMap(Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]:checked\")), function(entry) {\r\n\t\t\t\treturn entry.value;\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tCheckboxControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.querySelector(\"input[type=checkbox]\"));\r\n\t};\r\n\r\n\treturn CheckboxControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\nimport Super from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction RadioControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\t__extends(RadioControl, _super);\r\n\r\n\tRadioControl.prototype.render = function(sns) {\r\n\t\tconst height = sns.height ? `${sns.height}px` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\tif (sns.options && sns.options.length) {\r\n\t\t\tfor (var i = 0; i < sns.options.length; i++) {\r\n\t\t\t\thtml += \" \" + sns.options[i].label + \" \";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tRadioControl.prototype.set_value = function(node, value, ev, sns) {\r\n\t\tvar radio;\r\n\r\n\t\tif (!sns.options || !sns.options.length) return;\r\n\r\n\t\tradio = node.querySelector(\"input[type=radio][value='\" + value + \"']\") ||\r\n\t\t\t\tnode.querySelector(\"input[type=radio][value='\" + sns.default_value + \"']\");\r\n\r\n\t\tif (!radio) return;\r\n\r\n\t\tif (!node._dhx_onchange && sns.onchange) {\r\n\t\t\tnode.onchange = sns.onchange;\r\n\t\t\tnode._dhx_onchange = true;\r\n\t\t}\r\n\r\n\t\tradio.checked = true;\r\n\t};\r\n\r\n\tRadioControl.prototype.get_value = function(node, ev) {\r\n\t\tvar result = node.querySelector(\"input[type=radio]:checked\");\r\n\r\n\t\treturn result ? result.value : \"\";\r\n\t};\r\n\r\n\tRadioControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.querySelector(\"input[type=radio]\"));\r\n\t};\r\n\r\n\treturn RadioControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport DurationFormatterNumeric from \"../../../common/duration_formatter_numeric\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction DurationControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || new DurationFormatterNumeric();\r\n\t}\r\n\r\n\t__extends(DurationControl, _super);\r\n\r\n\tDurationControl.prototype.render = function(sns) {\r\n\t\tvar time = \"\" + gantt.form_blocks.getTimePicker.call(this, sns) + \"
\";\r\n\t\tvar label = \" \"+ gantt.locale.labels[gantt.config.duration_unit + \"s\"] +\" \";\r\n\t\tvar singleDate = sns.single_date ? \" style='display:none'\" : \"\";\r\n\t\tvar readonly = sns.readonly ? \" disabled='disabled'\" : \"\";\r\n\t\tvar ariaAttr = gantt._waiAria.lightboxDurationInputAttrString(sns);\r\n\r\n\t\tvar durationInputClass = \"gantt_duration_value\";\r\n\t\tif(sns.formatter) {\r\n\t\t\tlabel = \"\";\r\n\t\t\tdurationInputClass += \" gantt_duration_value_formatted\" ;\r\n\t\t}\r\n\r\n\t\tvar duration = \"\" +\r\n\t\t\t\"\";\r\n\t\tlet sectionClassName = \"gantt_section_time gantt_section_duration\";\r\n\t\tif (sns.name !== \"time\"){\r\n\t\t\tsectionClassName += \" gantt_section_\" + sns.name;\r\n\t\t}\t\r\n\t\tvar html = \"\" + time + \" \" + duration + \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tDurationControl.prototype.set_value = function(node, value, ev, config) {\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar inps = node.getElementsByTagName(\"input\");\r\n\t\tvar duration = inps[1];\r\n\t\tvar btns = [inps[0], inps[2]];\r\n\t\tvar endspan = node.getElementsByTagName(\"span\")[0];\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar mapping;\r\n\t\tvar start_date;\r\n\t\tvar end_date;\r\n\t\tvar duration_val;\r\n\r\n\t\tfunction _calc_date() {\r\n\t\t\tvar start_date = _getStartDate.call(gantt, node, config);\r\n\t\t\tvar duration = _getDuration.call(gantt, node, config);\r\n\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: ev});\r\n\r\n\t\t\tvar template = gantt.templates.task_end_date || gantt.templates.task_date;\r\n\t\t\tendspan.innerHTML = template(end_date);\r\n\t\t}\r\n\r\n\t\tfunction _change_duration(step) {\r\n\t\t\tvar value = duration.value;\r\n\r\n\t\t\tvalue = getFormatter(config).parse(value);\r\n\t\t\tif (window.isNaN(value))\r\n\t\t\t\tvalue = 0;\r\n\t\t\tvalue += step;\r\n\t\t\tif (value < 1) value = 1;\r\n\t\t\tduration.value = getFormatter(config).format(value);\r\n\t\t\t_calc_date();\r\n\t\t}\r\n\r\n\t\tbtns[0].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t}, this);\r\n\t\tbtns[1].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t}, this);\r\n\t\ts[0].onchange = _calc_date;\r\n\t\ts[1].onchange = _calc_date;\r\n\t\ts[2].onchange = _calc_date;\r\n\t\tif (s[3]) s[3].onchange = _calc_date;\r\n\r\n\t\tduration.onkeydown = gantt.bind(function(e) {\r\n\t\t\tvar code; \r\n\r\n\t\t\te = e || window.event;\r\n\t\t\tcode = (e.charCode || e.keyCode || e.which);\r\n\t\t\t\r\n\t\t\tif (code == gantt.constants.KEY_CODES.DOWN) {\r\n\t\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (code == gantt.constants.KEY_CODES.UP) {\r\n\t\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\twindow.setTimeout(_calc_date, 1);\r\n\t\t}, this);\r\n\r\n\t\tduration.onchange = gantt.bind(_calc_date, this);\r\n\r\n\t\tmapping = gantt._resolve_default_mapping(config);\r\n\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\r\n\r\n\t\tstart_date = ev[mapping.start_date] || new Date();\r\n\t\tend_date = ev[mapping.end_date] || gantt.calculateEndDate({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tduration: 1,\r\n\t\t\ttask: ev\r\n\t\t});\r\n\t\tduration_val = Math.round(ev[mapping.duration]) || gantt.calculateDuration({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tend_date: end_date,\r\n\t\t\ttask: ev\r\n\t\t});\r\n\t\tduration_val = getFormatter(config).format(duration_val);\r\n\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, config);\r\n\t\tduration.value = duration_val;\r\n\t\t_calc_date();\r\n\t};\r\n\r\n\tDurationControl.prototype.get_value = function(node, ev, config) {\r\n\t\tvar startDate = _getStartDate(node, config);\r\n\t\tvar duration = _getDuration(node, config);\r\n\t\tvar endDate = gantt.calculateEndDate({start_date: startDate, duration: duration, task: ev});\r\n\r\n\t\tif (typeof gantt._resolve_default_mapping(config) == \"string\") {\r\n\t\t\treturn startDate;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tstart_date: startDate,\r\n\t\t\tend_date: endDate,\r\n\t\t\tduration: duration\r\n\t\t};\r\n\t};\r\n\r\n\tDurationControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\r\n\t};\r\n\r\n\r\n\tfunction _getStartDate(node, config) {\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar hours = 0;\r\n\t\tvar minutes = 0;\r\n\r\n\t\tif (gantt.defined(map[3])) {\r\n\t\t\tvar input = s[map[3]];\r\n\t\t\tvar time = parseInt(input.value, 10);\r\n\t\t\tif (isNaN(time) && input.hasAttribute(\"data-value\")) {\r\n\t\t\t\ttime = parseInt(input.getAttribute(\"data-value\"), 10);\r\n\t\t\t}\r\n\r\n\t\t\thours = Math.floor(time / 60);\r\n\t\t\tminutes = time % 60;\r\n\t\t}\r\n\t\treturn new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\r\n\t}\r\n\r\n\tfunction _getDuration(node, config) {\r\n\t\tvar duration = node.getElementsByTagName(\"input\")[1];\r\n\r\n\t\tduration = getFormatter(config).parse(duration.value);\r\n\t\tif (!duration || window.isNaN(duration)) duration = 1;\r\n\t\tif (duration < 0) duration *= -1;\r\n\t\treturn duration;\r\n\t}\r\n\r\n\treturn DurationControl; \r\n};","import __extends from \"../../../../utils/extends\";\r\nimport htmlHelpers from \"../../utils/html_helpers\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction ConstraintControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(ConstraintControl, _super);\r\n\r\n\tfunction isNonTimedConstraint(value) {\r\n\t\tif (!value || value === gantt.config.constraint_types.ASAP || value === gantt.config.constraint_types.ALAP) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleTimeSelect(timeSelects, typeValue) {\r\n\t\tvar isNonTimed = isNonTimedConstraint(typeValue);\r\n\t\tfor (var i = 0; i < timeSelects.length; i++) {\r\n\t\t\ttimeSelects[i].disabled = isNonTimed;\r\n\t\t}\r\n\t}\r\n\r\n\tConstraintControl.prototype.render = function (sns) {\r\n\t\tconst height = sns.height ? `height:${sns.height}px;` : '';\r\n\t\tlet html = ``;\r\n\r\n\t\tvar options = [];\r\n\t\tfor (var i in gantt.config.constraint_types) {\r\n\t\t\toptions.push({ key: gantt.config.constraint_types[i], label: gantt.locale.labels[gantt.config.constraint_types[i]] });\r\n\t\t}\r\n\r\n\t\tsns.options = sns.options || options;\r\n\r\n\t\thtml += \"\" + htmlHelpers.getHtmlSelect(sns.options, [{ key: \"data-type\", value: \"constraint-type\" }]) + \" \";\r\n\r\n\t\tvar timeLabel = gantt.locale.labels[\"constraint_date\"] || \"Constraint date\";\r\n\t\thtml += \"\" + timeLabel + \": \" + gantt.form_blocks.getTimePicker.call(this, sns) + \" \";\r\n\r\n\t\thtml += \"
\";\r\n\t\treturn html;\r\n\t};\r\n\r\n\tConstraintControl.prototype.set_value = function (node, value, task, config) {\r\n\t\tvar typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\r\n\t\tvar timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\r\n\t\tvar map = config._time_format_order;\r\n\r\n\t\tvar mapping = gantt._resolve_default_mapping(config);\r\n\r\n\t\tif (!typeSelect._eventsInitialized) {\r\n\t\t\ttypeSelect.addEventListener(\"change\", function (e) {\r\n\t\t\t\ttoggleTimeSelect(timeSelects, e.target.value);\r\n\t\t\t});\r\n\t\t\ttypeSelect._eventsInitialized = true;\r\n\t\t}\r\n\r\n\t\tvar constraintDate = task[mapping.constraint_date] || new Date();\r\n\t\tgantt.form_blocks._fill_lightbox_select(timeSelects, 0, constraintDate, map, config);\r\n\r\n\t\tvar constraintType = task[mapping.constraint_type] || gantt.getConstraintType(task);\r\n\t\ttypeSelect.value = constraintType;\r\n\t\ttoggleTimeSelect(timeSelects, constraintType);\r\n\t};\r\n\r\n\tConstraintControl.prototype.get_value = function (node, task, config) {\r\n\t\tvar typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\r\n\t\tvar timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\r\n\r\n\t\tvar constraintType = typeSelect.value;\r\n\t\tvar constraintDate = null;\r\n\t\tif (!isNonTimedConstraint(constraintType)) {\r\n\t\t\tconstraintDate = gantt.form_blocks.getTimePickerValue(timeSelects, config);\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tconstraint_type: constraintType,\r\n\t\t\tconstraint_date: constraintDate\r\n\t\t};\r\n\t};\r\n\r\n\tConstraintControl.prototype.focus = function (node) {\r\n\t\tgantt._focus(node.querySelector(\"select\"));\r\n\t};\r\n\r\n\treturn ConstraintControl;\r\n};","import __extends from \"../../../../utils/extends\";\r\n\r\nimport Super from \"./select_control\";\r\n\r\nexport default function(gantt) {\r\n\tconst _super = Super(gantt);\r\n\r\n\tfunction TypeselectControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this;\r\n\r\n\t\treturn self;\r\n\t}\r\n\r\n\t__extends(TypeselectControl, _super);\r\n\r\n\tTypeselectControl.prototype.render = function(sns) {\r\n\t\tvar types = gantt.config.types,\r\n\t\t\tlocale = gantt.locale.labels,\r\n\t\t\toptions = [];\r\n\r\n\t\tvar filter = sns.filter || function (typeKey, typeValue) {\r\n\t\t\tif (!types.placeholder || typeValue !== types.placeholder) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\t\tfor (var i in types) {\r\n\t\t\tif (!filter(i, types[i]) === false) {\r\n\t\t\t\toptions.push({ key: types[i], label: locale[\"type_\" + i] });\r\n\t\t\t}\r\n\t\t}\r\n\t\tsns.options = options;\r\n\r\n\t\tvar oldOnChange = sns.onchange;\r\n\t\tsns.onchange = function () {\r\n\t\t\tgantt._lightbox_current_type = this.value;\r\n\t\t\tgantt.changeLightboxType(this.value);\r\n\t\t\tif (typeof oldOnChange == 'function') {\r\n\t\t\t\toldOnChange.apply(this, arguments);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn _super.prototype.render.apply(this, arguments);\r\n\t};\r\n\r\n\treturn TypeselectControl;\r\n};\r\n","\r\nimport __extends from \"../../../../utils/extends\";\r\nimport DurationFormatterNumeric from \"../../../common/duration_formatter_numeric\";\r\nimport BaseConstrutor from \"./base_control\";\r\n\r\nexport default function(gantt) {\r\n\tvar _super = BaseConstrutor(gantt);\r\n\r\n\tfunction DurationControl() {\r\n\t\tvar self = _super.apply(this, arguments) || this; \r\n\r\n\t\treturn self; \r\n\t}\r\n\r\n\tfunction getFormatter(config) {\r\n\t\treturn config.formatter || new DurationFormatterNumeric();\r\n\t}\r\n\r\n\tfunction _generateBaselineRow (node, baseline, task, config){\r\n\t\tconst time = \"\" + gantt.form_blocks.getTimePicker.call(gantt, config) + \"
\";\r\n\t\tlet durationLabel = \" \"+ gantt.locale.labels[gantt.config.duration_unit + \"s\"] +\" \";\r\n\t\tconst singleDate = config.single_date ? \" style='display:none'\" : \"\";\r\n\t\tconst readonly = config.readonly ? \" disabled='disabled'\" : \"\";\r\n\t\tconst ariaAttr = gantt._waiAria.lightboxDurationInputAttrString(config);\r\n\t\tconst deleteLabel = gantt.locale.labels.baselines_remove_button;\r\n\r\n\t\tlet durationInputClass = \"gantt_duration_value\";\r\n\t\tif(config.formatter) {\r\n\t\t\tdurationLabel = \"\";\r\n\t\t\tdurationInputClass += \" gantt_duration_value_formatted\";\r\n\t\t}\r\n\r\n\t\tconst durationEl = \"\" +\r\n\t\t\t\"\";\r\n\r\n\t\tconst deleteButton = ``;\r\n\r\n\t\tconst baselineRow = document.createElement(\"div\");\r\n\t\tbaselineRow.className = \"gantt_section_time gantt_section_duration\";\r\n\t\tbaselineRow.setAttribute(\"data-baseline-id\", baseline.id);\r\n\t\tbaselineRow.innerHTML = time + durationEl + deleteButton + \" \";\r\n\t\tnode.appendChild(baselineRow);\r\n\r\n\t\tvar s = baselineRow.getElementsByTagName(\"select\");\r\n\t\tvar inps = baselineRow.getElementsByTagName(\"input\");\r\n\t\tvar duration = inps[1];\r\n\t\tvar btns = [inps[0], inps[2]];\r\n\t\tvar endspan = baselineRow.getElementsByTagName(\"span\")[0];\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar mapping;\r\n\t\tvar start_date;\r\n\t\tvar end_date;\r\n\t\tvar duration_val;\r\n\r\n\t\tconst deleteEl = baselineRow.querySelector(\".baseline_delete_button\");\r\n\t\tdeleteEl.onclick = function(e){\r\n\t\t\tconst section = baselineRow.parentNode;\r\n\t\t\tbaselineRow.innerHTML = \"\";\r\n\t\t\tbaselineRow.remove();\r\n\t\t\tif (section.innerHTML === \"\"){\r\n\t\t\t\tsection.innerHTML = gantt.locale.labels.baselines_section_placeholder;\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\r\n\t\tfunction _calc_date() {\r\n\t\t\tvar start_date = _getStartDate.call(gantt, baselineRow, config);\r\n\t\t\tvar duration = _getDuration.call(gantt, baselineRow, config);\r\n\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: task});\r\n\r\n\t\t\tvar template = gantt.templates.task_end_date || gantt.templates.task_date;\r\n\t\t\tendspan.innerHTML = template(end_date);\r\n\t\t}\r\n\r\n\t\tfunction _change_duration(step) {\r\n\t\t\tvar value = duration.value;\r\n\r\n\t\t\tvalue = getFormatter(config).parse(value);\r\n\t\t\tif (window.isNaN(value))\r\n\t\t\t\tvalue = 0;\r\n\t\t\tvalue += step;\r\n\t\t\tif (value < 1) value = 1;\r\n\t\t\tduration.value = getFormatter(config).format(value);\r\n\t\t\t_calc_date();\r\n\t\t}\r\n\r\n\t\tbtns[0].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t}, gantt);\r\n\t\tbtns[1].onclick = gantt.bind(function() {\r\n\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t}, gantt);\r\n\t\ts[0].onchange = _calc_date;\r\n\t\ts[1].onchange = _calc_date;\r\n\t\ts[2].onchange = _calc_date;\r\n\t\tif (s[3]) s[3].onchange = _calc_date;\r\n\r\n\t\tduration.onkeydown = gantt.bind(function(e) {\r\n\t\t\tvar code; \r\n\r\n\t\t\te = e || window.event;\r\n\t\t\tcode = (e.charCode || e.keyCode || e.which);\r\n\t\t\t\r\n\t\t\tif (code == gantt.constants.KEY_CODES.DOWN) {\r\n\t\t\t\t_change_duration(-1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (code == gantt.constants.KEY_CODES.UP) {\r\n\t\t\t\t_change_duration(1 * gantt.config.duration_step);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\twindow.setTimeout(_calc_date, 1);\r\n\t\t}, gantt);\r\n\r\n\t\tduration.onchange = gantt.bind(_calc_date, gantt);\r\n\r\n\t\tmapping = gantt._resolve_default_mapping(config);\r\n\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\r\n\r\n\t\tstart_date = baseline.start_date || new Date();\r\n\t\tend_date = baseline.end_date || gantt.calculateEndDate({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tduration: 1,\r\n\t\t\ttask\r\n\t\t});\r\n\t\tduration_val = gantt.calculateDuration({\r\n\t\t\tstart_date: start_date,\r\n\t\t\tend_date: end_date,\r\n\t\t\ttask\r\n\t\t});\r\n\t\tduration_val = getFormatter(config).format(duration_val);\r\n\r\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, config);\r\n\t\tduration.value = duration_val;\r\n\t\t_calc_date();\r\n\t}\r\n\r\n\t__extends(DurationControl, _super);\r\n\r\n\tDurationControl.prototype.render = function(sns) {\r\n\t\tconst baselineSection = `
`;\r\n\t\treturn baselineSection;\r\n\t};\r\n\r\n\tDurationControl.prototype.set_value = function(node, value, task, config) {\r\n\t\tif (task.baselines){\r\n\t\t\tnode.innerHTML = \"\";\r\n\r\n\t\t\ttask.baselines.forEach((baseline)=>{\r\n\t\t\t\t_generateBaselineRow(node, baseline, task, config);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tnode.innerHTML = gantt.locale.labels.baselines_section_placeholder;\r\n\t\t}\t\t\r\n\r\n\t};\r\n\r\n\tDurationControl.prototype.get_value = function(node, task, config) {\r\n\t\tconst baselines = [];\r\n\t\tconst baselineRows = node.querySelectorAll(`[data-baseline-id]`);\r\n\t\tbaselineRows.forEach((baselineNode)=>{\r\n\t\t\tconst baselineId = baselineNode.dataset.baselineId;\r\n\t\t\tconst baselineStore = gantt.getDatastore(\"baselines\");\r\n\t\t\tlet baseline = baselineStore.getItem(baselineId);\r\n\t\t\tlet updatedBaseline;\r\n\t\t\tif (baseline){\r\n\t\t\t\tupdatedBaseline = gantt.copy(baseline);\r\n\t\t\t} else {\r\n\t\t\t\tupdatedBaseline = {\r\n\t\t\t\t\tid: gantt.uid(),\r\n\t\t\t\t\ttask_id: task.id,\r\n\t\t\t\t\ttext: \"Baseline 1\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tupdatedBaseline.start_date = _getStartDate(baselineNode, config);\r\n\t\t\tupdatedBaseline.duration = _getDuration(baselineNode, config);\r\n\t\t\tupdatedBaseline.end_date = gantt.calculateEndDate({start_date: updatedBaseline.start_date, duration: updatedBaseline.duration, task});\r\n\r\n\t\t\tbaselines.push(updatedBaseline);\r\n\t\t});\r\n\r\n\t\treturn baselines;\r\n\t};\r\n\r\n\tDurationControl.prototype.button_click = function (index, el, section, container) {\r\n\t\tif (gantt.callEvent(\"onSectionButton\", [gantt._lightbox_id, section]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (el.closest(\".gantt_custom_button.gantt_remove_baselines\")){\r\n\t\t\tcontainer.innerHTML = gantt.locale.labels.baselines_section_placeholder;\r\n\t\t}\r\n\t\tif (el.closest(\".gantt_custom_button.gantt_add_baselines\")){\r\n\t\t\tif (container.innerHTML == gantt.locale.labels.baselines_section_placeholder){\r\n\t\t\t\tcontainer.innerHTML = \"\";\r\n\t\t\t}\r\n\t\t\tconst task = gantt.getTask(gantt._lightbox_id);\r\n\t\t\tconst baseline = {\r\n\t\t\t\tid: gantt.uid(),\r\n\t\t\t\ttask_id: task.id,\r\n\t\t\t\ttext: \"Baseline 1\",\r\n\t\t\t\tstart_date: task.start_date,\r\n\t\t\t\tend_date: task.end_date\r\n\t\t\t};\r\n\t\t\tconst config = gantt._get_typed_lightbox_config()[index];\r\n\t\t\t_generateBaselineRow(container, baseline, task, config);\r\n\t\t}\r\n\t};\r\n\r\n\tDurationControl.prototype.focus = function(node) {\r\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\r\n\t};\r\n\r\n\r\n\tfunction _getStartDate(node, config) {\r\n\t\tvar s = node.getElementsByTagName(\"select\");\r\n\t\tvar map = config._time_format_order;\r\n\t\tvar hours = 0;\r\n\t\tvar minutes = 0;\r\n\r\n\t\tif (gantt.defined(map[3])) {\r\n\t\t\tvar input = s[map[3]];\r\n\t\t\tvar time = parseInt(input.value, 10);\r\n\t\t\tif (isNaN(time) && input.hasAttribute(\"data-value\")) {\r\n\t\t\t\ttime = parseInt(input.getAttribute(\"data-value\"), 10);\r\n\t\t\t}\r\n\r\n\t\t\thours = Math.floor(time / 60);\r\n\t\t\tminutes = time % 60;\r\n\t\t}\r\n\t\treturn new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\r\n\t}\r\n\r\n\tfunction _getDuration(node, config) {\r\n\t\tvar duration = node.getElementsByTagName(\"input\")[1];\r\n\r\n\t\tduration = getFormatter(config).parse(duration.value);\r\n\t\tif (!duration || window.isNaN(duration)) duration = 1;\r\n\t\tif (duration < 0) duration *= -1;\r\n\t\treturn duration;\r\n\t}\r\n\r\n\treturn DurationControl; \r\n};","import * as utils from \"../utils/utils\";\r\nimport env from \"../utils/env\";\r\nimport isHeadless from \"../utils/is_headless\";\r\nimport * as domHelpers from \"./ui/utils/dom_helpers\";\r\nimport * as codeHelpers from \"../utils/helpers\";\r\nimport domEventScope from \"./ui/utils/dom_event_scope\";\r\nimport messages from \"./ui/message\";\r\nimport ui from \"./ui/index\";\r\nimport createLayoutFacade from \"./facades/layout\";\r\nimport taskLayers from \"./data_task_layers\";\r\n\r\nimport skin from \"./ui/skin\";\r\nimport skyblue from \"../css/skins/skyblue\";\r\nimport meadow from \"../css/skins/meadow\";\r\nimport terrace from \"../css/skins/terrace\";\r\nimport broadway from \"../css/skins/broadway\";\r\nimport material from \"../css/skins/material\";\r\nimport dark from \"../css/skins/dark\";\r\nimport contrast_black from \"../css/skins/contrast_black\";\r\nimport contrast_white from \"../css/skins/contrast_white\";\r\nimport plugins from \"./ui/plugins\";\r\nimport touch from \"./ui/touch\";\r\nimport lightbox from \"./ui/lightbox\";\r\nimport lightbox_optional_time from \"./ui/lightbox/lightbox_optional_time\";\r\nimport wai_aria from \"./ui/wai_aria\";\r\n\r\n\r\nexport default function(gantt) {\r\n\r\n\tif(!env.isNode){\r\n\r\n\t\tgantt.utils = {\r\n\t\t\tarrayFind: codeHelpers.arrayFind,\r\n\t\t\tdom: domHelpers\r\n\t\t};\r\n\r\n\t\tvar domEvents = domEventScope();\r\n\t\tgantt.event = domEvents.attach;\r\n\t\tgantt.eventRemove = domEvents.detach;\r\n\t\tgantt._eventRemoveAll = domEvents.detachAll;\r\n\t\tgantt._createDomEventScope = domEvents.extend;\r\n\r\n\t\tutils.mixin(gantt, messages(gantt));\r\n\t\tvar uiApi = ui.init(gantt);\r\n\t\tgantt.$ui = uiApi.factory;\r\n\t\tgantt.$ui.layers = uiApi.render;\r\n\t\tgantt.$mouseEvents = uiApi.mouseEvents;\r\n\t\tgantt.$services.setService(\"mouseEvents\", function () {\r\n\t\t\treturn gantt.$mouseEvents;\r\n\t\t});\r\n\t\tgantt.mixin(gantt, uiApi.layersApi);\r\n\r\n\t\ttaskLayers(gantt);\r\n\r\n\t\tgantt.$services.setService(\"layers\", function () {\r\n\t\t\treturn uiApi.layersService;\r\n\t\t});\r\n\r\n\t\tgantt.mixin(gantt, createLayoutFacade());\r\n\t\tskin(gantt);\r\n\t\tskyblue(gantt);\r\n\t\tdark(gantt);\r\n\t\tmeadow(gantt);\r\n\t\tterrace(gantt);\r\n\t\tbroadway(gantt);\r\n\t\tmaterial(gantt);\r\n\t\tcontrast_black(gantt);\r\n\t\tcontrast_white(gantt);\r\n\t\tplugins(gantt);\r\n\t\ttouch(gantt);\r\n\t\tlightbox(gantt);\r\n\t\tlightbox_optional_time(gantt);\r\n\t\twai_aria(gantt);\r\n\r\n\t\tgantt.locate = function(e) {\r\n\t\t\tvar trg = domHelpers.getTargetNode(e);\r\n\r\n\t\t\t// ignore empty rows/cells of the timeline\r\n\t\t\tif(domHelpers.closest(trg, \".gantt_task_row\")){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar targetAttribute = arguments[1] || this.config.task_attribute;\r\n\r\n\t\t\tvar node = domHelpers.locateAttribute(trg, targetAttribute);\r\n\t\t\tif(node){\r\n\t\t\t\treturn node.getAttribute(targetAttribute);\r\n\t\t\t}else{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tgantt._locate_css = function(e, classname, strict){\r\n\t\t\treturn domHelpers.locateClassName(e, classname, strict);\r\n\t\t};\r\n\r\n\t\tgantt._locateHTML = function(e, attribute) {\r\n\t\t\treturn domHelpers.locateAttribute(e, attribute || this.config.task_attribute);\r\n\t\t};\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onParse\", function(){\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\tgantt.attachEvent(\"onGanttRender\", function(){\r\n\t\t\t\tif(gantt.config.initial_scroll){\r\n\t\t\t\t\tvar firstTask = gantt.getTaskByIndex(0);\r\n\t\t\t\t\tvar id = firstTask ? firstTask.id : gantt.config.root_id;\r\n\t\t\t\t\t// GS-1450. Don't scroll to the task if there is no timeline\r\n\t\t\t\t\tif(gantt.isTaskExists(id) && gantt.$task && gantt.utils.dom.isChildOf(gantt.$task, gantt.$container)){\r\n\t\t\t\t\t\tgantt.showTask(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, {once: true});\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onBeforeGanttReady\", function(){\r\n\t\tif (!this.config.scroll_size)\r\n\t\t\tthis.config.scroll_size = domHelpers.getScrollSize() || 15;\r\n\r\n\t\tif(!isHeadless(gantt)){\r\n\t\t\t// detach listeners before clearing old DOM, possible IE errors when accessing detached nodes\r\n\t\t\tthis._eventRemoveAll();\r\n\t\t\tthis.$mouseEvents.reset();\r\n\r\n\t\t\tthis.resetLightbox();\r\n\t\t}\r\n\r\n\t});\r\n\r\n\t// GS-1261: scroll the views to the right side when RTL is enabled\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(!isHeadless(gantt) && gantt.config.rtl){\r\n\t\t\tgantt.$layout.getCellsByType(\"viewCell\").forEach(function(cell){ \r\n\t\t\t\tvar attachedScrollbar = cell.$config.scrollX;\r\n\t\t\t\tif (!attachedScrollbar) return;\r\n\r\n\t\t\t\tvar scrollbar = gantt.$ui.getView(attachedScrollbar);\r\n\t\t\t\tif (scrollbar) scrollbar.scrollTo(scrollbar.$config.scrollSize,0);\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n\r\n\t// GS-1649: check if extensions are connected via files\r\n\tgantt.attachEvent(\"onGanttReady\", function(){\r\n\t\tif(!isHeadless(gantt)){\r\n\r\n\t\t\tvar activePlugins = gantt.plugins();\r\n\r\n\t\t\tvar availablePlugins = {\r\n\t\t\t\tauto_scheduling: gantt.autoSchedule,\r\n\t\t\t\tclick_drag: gantt.ext.clickDrag,\r\n\t\t\t\tcritical_path: gantt.isCriticalTask,\r\n\t\t\t\tdrag_timeline: gantt.ext.dragTimeline,\r\n\t\t\t\texport_api: gantt.exportToPDF,\r\n\t\t\t\tfullscreen: gantt.ext.fullscreen,\r\n\t\t\t\tgrouping: gantt.groupBy,\r\n\t\t\t\tkeyboard_navigation: gantt.ext.keyboardNavigation,\r\n\t\t\t\tmarker: gantt.addMarker,\r\n\t\t\t\tmultiselect: gantt.eachSelectedTask,\r\n\t\t\t\toverlay: gantt.ext.overlay,\r\n\t\t\t\tquick_info: gantt.templates.quick_info_content,\r\n\t\t\t\ttooltip: gantt.ext.tooltips,\r\n\t\t\t\tundo: gantt.undo\r\n\t\t\t};\r\n\r\n\t\t\tfor (let plugin in availablePlugins){\r\n\t\t\t\tif (availablePlugins[plugin] && !activePlugins[plugin]){\r\n\t\t\t\t\t// eslint-disable-next-line no-console\r\n\t\t\t\t\tconsole.warn(`You connected the '${plugin}' extension via an obsolete file. \r\nTo fix it, you need to remove the obsolete file and connect the extension via the plugins method: https://docs.dhtmlx.com/gantt/api__gantt_plugins.html`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n};","export default function(gantt) {\r\n\tdelete gantt.addTaskLayer;\r\n\tdelete gantt.addLinkLayer;\r\n};","function createLayoutFacade(){\r\n\r\n\tfunction getTimeline(gantt){\r\n\t\treturn gantt.$ui.getView(\"timeline\");\r\n\t}\r\n\r\n\tfunction getGrid(gantt){\r\n\t\treturn gantt.$ui.getView(\"grid\");\r\n\t}\r\n\r\n\tfunction getBaseCell(gantt){\r\n\t\tvar timeline = getTimeline(gantt);\r\n\t\tif (timeline && !timeline.$config.hidden){\r\n\t\t\treturn timeline;\r\n\t\t} else{\r\n\t\t\tvar grid = getGrid(gantt);\r\n\t\t\tif (grid && !grid.$config.hidden){\r\n\t\t\t\treturn grid;\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getVerticalScrollbar(gantt){\r\n\t\tvar baseCell = null;\r\n\t\t// GS-1150: if we reorder or resize something in the grid, we should obtain the grid container\r\n\t\tvar gridDrag = false;\r\n\t\tvar gridMarkers = [\r\n\t\t\t\".gantt_drag_marker.gantt_grid_resize_area\",\r\n\t\t\t\".gantt_drag_marker .gantt_row.gantt_row_task\",\r\n\t\t\t\".gantt_drag_marker.gantt_grid_dnd_marker\"\r\n\t\t];\r\n\t\tgridMarkers.forEach(function (selector) {\r\n\t\t\tgridDrag = gridDrag || !!document.querySelector(selector);\r\n\t\t});\r\n\t\tif (gridDrag){\r\n\t\t\tbaseCell = getGrid(gantt);\r\n\t\t} else{\r\n\t\t\tbaseCell = getBaseCell(gantt);\r\n\t\t}\r\n\r\n\t\t// GS-1827. If there is no grid and timeline, there is no scrollbar for them\r\n\t\tif (!baseCell){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar verticalScrollbar = getAttachedScrollbar(gantt, baseCell, \"scrollY\");\r\n\t\treturn verticalScrollbar;\r\n\t}\r\n\r\n\tfunction getHorizontalScrollbar(gantt){\r\n\t\tvar baseCell = getBaseCell(gantt);\r\n\t\tif (!baseCell || baseCell.id == \"grid\"){\r\n\t\t\treturn null; // if the timeline is not displayed, do not return the scrollbar\r\n\t\t}\r\n\t\tvar horizontalScrollbar = getAttachedScrollbar(gantt, baseCell, \"scrollX\");\r\n\t\treturn horizontalScrollbar;\r\n\t}\r\n\r\n\tfunction getAttachedScrollbar(gantt, cell, type){\r\n\t\tvar attachedScrollbar = cell.$config[type];\r\n\t\tvar scrollbarView = gantt.$ui.getView(attachedScrollbar);\r\n\t\treturn scrollbarView;\r\n\t}\r\n\r\n\tvar DEFAULT_VALUE = \"DEFAULT_VALUE\";\r\n\r\n\tfunction tryCall(getView, method, args, fallback){\r\n\t\tvar view = getView(this);\r\n\t\tif (!(view && view.isVisible())) {\r\n\t\t\tif(fallback){\r\n\t\t\t\treturn fallback();\r\n\t\t\t}else{\r\n\t\t\t\treturn DEFAULT_VALUE;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn view[method].apply(view, args);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\r\n\t\tgetColumnIndex: function(name) {\r\n\t\t\tvar res = tryCall.call(this, getGrid, \"getColumnIndex\", [name]);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tdateFromPos: function(x) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"dateFromPos\", Array.prototype.slice.call(arguments));\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn this.getState().min_date;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tposFromDate: function(date) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"posFromDate\", [date]);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetRowTop: function(index) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getRowTop\", [index],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getRowTop\", [index]);}\r\n\t\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskTop: function(id) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getItemTop\", [id],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemTop\", [id]);}\r\n\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\tgetTaskPosition: function(task, start_date, end_date) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"getItemPosition\", [task, start_date, end_date]);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\tvar top = this.getTaskTop(task.id);\r\n\t\t\t\tvar height = this.getTaskBarHeight(task.id);\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: top,\r\n\t\t\t\t\theight: height,\r\n\t\t\t\t\twidth: 0\r\n\t\t\t\t};\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskBarHeight: function(taskId, isMilestoneRender) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getBarHeight\", [taskId, isMilestoneRender],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemHeight\", [taskId]);}\r\n\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskHeight: function(taskId) {\r\n\t\t\tvar self = this;\r\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getItemHeight\", [taskId],\r\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemHeight\", [taskId]);}\r\n\t\t\t);\r\n\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\tcolumnIndexByDate: function(date) {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"columnIndexByDate\", [date]);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn 0;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\troundTaskDates: function() {\r\n\t\t\ttryCall.call(this, getTimeline, \"roundTaskDates\", []);\r\n\t\t},\r\n\r\n\t\tgetScale: function() {\r\n\t\t\tvar res = tryCall.call(this, getTimeline, \"getScale\", []);\r\n\t\t\tif(res === DEFAULT_VALUE){\r\n\t\t\t\treturn null;\r\n\t\t\t}else{\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetTaskNode: function(id) {\r\n\t\t\tvar timeline = getTimeline(this);\r\n\t\t\tif (!timeline || !timeline.isVisible()) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\tvar node = timeline._taskRenderer.rendered[id];\r\n\t\t\t\tif(!node){\r\n\t\t\t\t\tvar domAttr = timeline.$config.item_attribute;\r\n\t\t\t\t\tnode = timeline.$task_bars.querySelector(\"[\" +domAttr+ \"='\"+id+\"']\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn node || null;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\tgetLinkNode: function(id) {\r\n\t\t\tvar timeline = getTimeline(this);\r\n\t\t\tif (!timeline.isVisible()) {\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\treturn timeline._linkRenderer.rendered[id];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tscrollTo: function(left, top){\r\n\t\t\tvar vertical = getVerticalScrollbar(this);\r\n\t\t\tvar horizontal = getHorizontalScrollbar(this);\r\n\r\n\t\t\tvar oldH = {position: 0},\r\n\t\t\t\toldV = {position: 0};\r\n\r\n\t\t\tif(vertical){\r\n\t\t\t\toldV = vertical.getScrollState();\r\n\t\t\t}\r\n\t\t\tif(horizontal){\r\n\t\t\t\toldH = horizontal.getScrollState();\r\n\t\t\t}\r\n\r\n\t\t\tvar scrollHorizontal = (horizontal && left*1 == left);\r\n\t\t\tvar scrollVertical = (vertical && top*1 == top);\r\n\t\t\tvar scrollBoth = scrollHorizontal && scrollVertical;\r\n\r\n\t\t\tif(scrollBoth){\r\n\t\t\t\t// some views will be scrolled both horizontally and vertically and smart rendering can be called twice\r\n\t\t\t\t// set flag in order not to invoke smart rendering at the horizontal scroll stage\r\n\t\t\t\t// so it will repaint only once when the scroll is completed\r\n\t\t\t\tvar verticalViews = vertical._getLinkedViews();\r\n\t\t\t\tvar horizontalViews = horizontal._getLinkedViews();\r\n\r\n\t\t\t\tvar commonViews = [];\r\n\t\t\t\tfor(var i = 0; i < verticalViews.length; i++){\r\n\t\t\t\t\tfor(var j = 0; j < horizontalViews.length; j++){\r\n\r\n\t\t\t\t\t\tif(verticalViews[i].$config.id && horizontalViews[j].$config.id && verticalViews[i].$config.id === horizontalViews[j].$config.id){\r\n\t\t\t\t\t\t\tcommonViews.push(verticalViews[i].$config.id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (scrollHorizontal){\r\n\t\t\t\tif(commonViews){\r\n\t\t\t\t\tcommonViews.forEach((function(viewId){\r\n\t\t\t\t\t\tthis.$ui.getView(viewId).$config.$skipSmartRenderOnScroll = true;\r\n\t\t\t\t\t}).bind(this));\r\n\t\t\t\t}\r\n\r\n\t\t\t\thorizontal.scroll(left);\r\n\t\t\t\tif(commonViews){\r\n\t\t\t\t\tcommonViews.forEach((function(viewId){\r\n\t\t\t\t\t\tthis.$ui.getView(viewId).$config.$skipSmartRenderOnScroll = false;\r\n\t\t\t\t\t}).bind(this));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(scrollVertical){\r\n\t\t\t\tvertical.scroll(top);\r\n\t\t\t}\r\n\r\n\t\t\tvar newV = {position: 0},\r\n\t\t\t\tnewH = {position: 0};\r\n\t\t\tif(vertical){\r\n\t\t\t\tnewV = vertical.getScrollState();\r\n\t\t\t}\r\n\t\t\tif(horizontal){\r\n\t\t\t\tnewH = horizontal.getScrollState();\r\n\t\t\t}\r\n\r\n\t\t\tthis.callEvent(\"onGanttScroll\", [oldH.position, oldV.position, newH.position, newV.position]);\r\n\t\t},\r\n\r\n\t\tshowDate: function(date){\r\n\t\t\tvar date_x = this.posFromDate(date);\r\n\t\t\tvar scroll_to = Math.max(date_x - this.config.task_scroll_offset, 0);\r\n\t\t\tthis.scrollTo(scroll_to);\r\n\t\t},\r\n\t\tshowTask: function(id) {\r\n\t\t\tvar pos = this.getTaskPosition(this.getTask(id));\r\n\r\n\t\t\t// GS-1261: we need to show the start_date even in the RTL mode\r\n\t\t\tvar leftPos = pos.left;\r\n\t\t\tif (this.config.rtl) leftPos = pos.left + pos.width;\r\n\r\n\t\t\tvar left = Math.max(leftPos - this.config.task_scroll_offset, 0);\r\n\r\n\t\t\tvar dataHeight = this._scroll_state().y;\r\n\t\t\tvar top;\r\n\t\t\tif(!dataHeight){\r\n\t\t\t\ttop = pos.top;\r\n\t\t\t}else{\r\n\t\t\t\ttop = pos.top - (dataHeight - this.getTaskBarHeight(id))/2;\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTo(left, top);\r\n\t\t\t// GS-1150: if the grid and timeline have different scrollbars, we need to scroll thegrid to show the task\r\n\t\t\tvar gridCell = getGrid(this);\r\n\t\t\tvar timelineCell = getTimeline(this);\r\n\t\t\tif (gridCell && timelineCell && gridCell.$config.scrollY != timelineCell.$config.scrollY){\r\n\t\t\t\tvar gridScrollbar = getAttachedScrollbar(this, gridCell, \"scrollY\");\r\n\t\t\t\tgridScrollbar.scrollTo(null, top);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_scroll_state: function(){\r\n\t\t\tvar result = {\r\n\t\t\t\tx: false,\r\n\t\t\t\ty: false,\r\n\t\t\t\tx_pos: 0,\r\n\t\t\t\ty_pos: 0,\r\n\t\t\t\tscroll_size: this.config.scroll_size + 1,//1px for inner content\r\n\t\t\t\tx_inner: 0,\r\n\t\t\t\ty_inner: 0\r\n\t\t\t};\r\n\r\n\t\t\tvar scrollVer = getVerticalScrollbar(this),\r\n\t\t\t\tscrollHor = getHorizontalScrollbar(this);\r\n\t\t\tif(scrollHor){\r\n\t\t\t\tvar horState = scrollHor.getScrollState();\r\n\t\t\t\tif(horState.visible){\r\n\t\t\t\t\tresult.x = horState.size;\r\n\t\t\t\t\tresult.x_inner = horState.scrollSize;\r\n\t\t\t\t}\r\n\t\t\t\tresult.x_pos = horState.position || 0;\r\n\t\t\t}\r\n\r\n\t\t\tif(scrollVer){\r\n\t\t\t\tvar verState = scrollVer.getScrollState();\r\n\t\t\t\tif(verState.visible){\r\n\t\t\t\t\tresult.y = verState.size;\r\n\r\n\t\t\t\t\tresult.y_inner = verState.scrollSize;\r\n\t\t\t\t}\r\n\t\t\t\tresult.y_pos = verState.position || 0;\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t},\r\n\t\tgetScrollState: function(){\r\n\t\t\tvar state = this._scroll_state();\r\n\t\t\treturn { x:state.x_pos, y:state.y_pos, inner_width:state.x, inner_height:state.y, width: state.x_inner, height: state.y_inner };\r\n\t\t},\r\n\r\n\t\tgetLayoutView: function(cellName){\r\n\t\t\treturn this.$ui.getView(cellName);\r\n\t\t},\r\n\r\n\t\tscrollLayoutCell: function(cellName, left, top){\r\n\t\t\tconst cell = this.$ui.getView(cellName);\r\n\t\t\tif (!cell){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (left !== null){\r\n\t\t\t\tconst horizontalScroll = this.$ui.getView(cell.$config.scrollX);\r\n\t\t\t\tif (horizontalScroll){\r\n\t\t\t\t\thorizontalScroll.scrollTo(left, null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (top !== null){\r\n\t\t\t\tconst verticalScroll = this.$ui.getView(cell.$config.scrollY);\r\n\t\t\t\tif (verticalScroll){\r\n\t\t\t\t\tverticalScroll.scrollTo(null, top);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t};\r\n\r\n}\r\n\r\nexport default createLayoutFacade;","export default function(gantt) {\r\ngantt.skins.skyblue = {\r\n\tconfig:{\r\n\t\tgrid_width:370,\r\n\t\trow_height: 27,\r\n\t\tbar_height_padding:4,\r\n\t\tscale_height: 27,\r\n\t\tlink_line_width:1,\r\n\t\tlink_arrow_size:8,\r\n\t\tlink_radius:2,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:95,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins.dark = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 36,\r\n\t\tscale_height: 36,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tbar_height_padding:9,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:70\t\t\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins.meadow = {\r\n\tconfig:{\r\n\t\tgrid_width:380,\r\n\t\trow_height: 27,\r\n\t\tscale_height: 30,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:10,\r\n\t\tbar_height_padding:4,\r\n\t\tlightbox_additional_height:72\r\n\t},\r\n\t_second_column_width:95,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins.terrace = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 36,\r\n\t\tscale_height: 36,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tbar_height_padding:9,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:70\t\t\r\n};\r\n\r\n};","export default function(gantt) {\r\n\tgantt.skins.broadway = {\r\n\t\tconfig: {\r\n\t\t\tgrid_width: 390,\r\n\t\t\trow_height: 35,\r\n\t\t\tscale_height: 35,\r\n\t\t\tlink_line_width: 1,\r\n\t\t\tlink_arrow_size: 9,\r\n\t\t\tbar_height_padding:4,\r\n\t\t\tlightbox_additional_height: 86\r\n\t\t},\r\n\t\t_second_column_width: 100,\r\n\t\t_third_column_width: 80,\r\n\r\n\t\t_lightbox_template: \"
\",\r\n\t\t_config_buttons_left: {},\r\n\t\t_config_buttons_right: {\r\n\t\t\t\"gantt_delete_btn\": \"icon_delete\",\r\n\t\t\t\"gantt_save_btn\": \"icon_save\"\r\n\t\t}\r\n\t};\r\n};","export default function(gantt) {\r\n\tgantt.skins.material = {\r\n\t\tconfig: {\r\n\t\t\tgrid_width: 411,\r\n\t\t\trow_height: 34,\r\n\t\t\tscale_height: 36,\r\n\t\t\tlink_line_width: 2,\r\n\t\t\tlink_arrow_size: 12,\r\n\t\t\tbar_height_padding:9,\r\n\t\t\tlightbox_additional_height: 80\r\n\t\t},\r\n\t\t_second_column_width: 110,\r\n\t\t_third_column_width: 75,\r\n\t\t_redefine_lightbox_buttons: {\r\n\t\t\t\"buttons_left\": [\"dhx_delete_btn\"],\r\n\t\t\t\"buttons_right\": [\"dhx_cancel_btn\", \"dhx_save_btn\"]\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onAfterTaskDrag\", function (id) {\r\n\t\tvar t = gantt.getTaskNode(id);\r\n\t\tif (t) {\r\n\t\t\tt.className += \" gantt_drag_animation\";\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tvar indx = t.className.indexOf(\" gantt_drag_animation\");\r\n\t\t\t\tif (indx > -1) {\r\n\t\t\t\t\tt.className = t.className.slice(0, indx);\r\n\t\t\t\t}\r\n\t\t\t}, 200);\r\n\t\t}\r\n\t});\r\n\r\n};","export default function(gantt) {\r\ngantt.skins[\"contrast_black\"] = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 35,\r\n\t\tscale_height: 35,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","export default function(gantt) {\r\ngantt.skins[\"contrast_white\"] = {\r\n\tconfig:{\r\n\t\tgrid_width:390,\r\n\t\trow_height: 35,\r\n\t\tscale_height: 35,\r\n\t\tlink_line_width:2,\r\n\t\tlink_arrow_size:12,\r\n\t\tlightbox_additional_height:75\r\n\t},\r\n\t_second_column_width:100,\r\n\t_third_column_width:80\r\n};\r\n\r\n};","import autoscroll from \"./autoscroll\";\r\nimport jquery_hooks from \"./jquery_hooks\";\r\nimport dhtmlx_hooks from \"./dhtmlx_hooks\";\r\nimport TimelineZoom from \"./timeline_zoom\";\r\n\r\n\r\nexport default function(gantt){\r\n\tif(!gantt.ext){\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tvar modules = [\r\n\t\tautoscroll,\r\n\t\tjquery_hooks,\r\n\t\tdhtmlx_hooks\r\n\t];\r\n\r\n\tfor(var i = 0; i < modules.length; i++){\r\n\t\tif(modules[i])\r\n\t\t\tmodules[i](gantt);\r\n\t}\r\n\r\n\tgantt.ext.zoom = new TimelineZoom(gantt);\r\n};","export default function(gantt) {\r\n\r\n\tgantt._extend_to_optional = function (lightbox_block) {\r\n\r\n\t\tvar duration = lightbox_block;\r\n\t\tvar optional_time = {\r\n\t\t\trender: duration.render,\r\n\t\t\tfocus: duration.focus,\r\n\t\t\tset_value: function (node, value, task, section) {\r\n\t\t\t\tvar mapping = gantt._resolve_default_mapping(section);\r\n\t\t\t\tif (!task[mapping.start_date] || (mapping.start_date == \"start_date\" && this._isAllowedUnscheduledTask(task))) {\r\n\t\t\t\t\toptional_time.disable(node, section);\r\n\t\t\t\t\tvar val = {};\r\n\r\n\t\t\t\t\tfor (var i in mapping) {\r\n\t\t\t\t\t\t//take default values from the time control from task start/end dates\r\n\t\t\t\t\t\tval[mapping[i]] = task[i];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn duration.set_value.call(gantt, node, value, val, section);//set default value\r\n\t\t\t\t} else {\r\n\t\t\t\t\toptional_time.enable(node, section);\r\n\t\t\t\t\treturn duration.set_value.call(gantt, node, value, task, section);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget_value: function (node, task, section) {\r\n\t\t\t\tif (section.disabled) {\r\n\t\t\t\t\treturn {start_date: null};\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn duration.get_value.call(gantt, node, task, section);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tupdate_block: function (node, section) {\r\n\t\t\t\tgantt.callEvent(\"onSectionToggle\", [gantt._lightbox_id, section]);\r\n\t\t\t\tnode.style.display = section.disabled ? \"none\" : \"\";\r\n\r\n\t\t\t\tif (section.button) {\r\n\t\t\t\t\tvar button = node.previousSibling.querySelector(\".gantt_custom_button_label\"),\r\n\t\t\t\t\t\tlabels = gantt.locale.labels;\r\n\r\n\t\t\t\t\tvar button_text = section.disabled ? labels[section.name + \"_enable_button\"] : labels[section.name + \"_disable_button\"];\r\n\r\n\t\t\t\t\tbutton.innerHTML = button_text;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdisable: function (node, section) {\r\n\t\t\t\tsection.disabled = true;\r\n\t\t\t\toptional_time.update_block(node, section);\r\n\r\n\t\t\t},\r\n\t\t\tenable: function (node, section) {\r\n\t\t\t\tsection.disabled = false;\r\n\t\t\t\toptional_time.update_block(node, section);\r\n\t\t\t},\r\n\t\t\tbutton_click: function (index, el, section, container) {\r\n\t\t\t\tif (gantt.callEvent(\"onSectionButton\", [gantt._lightbox_id, section]) === false) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar config = gantt._get_typed_lightbox_config()[index];\r\n\t\t\t\tif (config.disabled) {\r\n\t\t\t\t\toptional_time.enable(container, config);\r\n\t\t\t\t} else {\r\n\t\t\t\t\toptional_time.disable(container, config);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn optional_time;\r\n\t};\r\n\r\n\tgantt.form_blocks.duration_optional = gantt._extend_to_optional(gantt.form_blocks.duration);\r\n\tgantt.form_blocks.time_optional = gantt._extend_to_optional(gantt.form_blocks.time);\r\n\r\n};","export default function(gantt){\r\n\tvar htmlTags = new RegExp(\"<(?:.|\\n)*?>\", \"gm\");\r\n\tvar extraSpaces = new RegExp(\" +\", \"gm\");\r\n\r\n\tfunction stripHTMLLite(htmlText){\r\n\t\treturn (htmlText + \"\")\r\n\t\t\t.replace(htmlTags, \" \").\r\n\t\t\treplace(extraSpaces, \" \");\r\n\t}\r\n\r\n\tvar singleQuotes = new RegExp(\"'\", \"gm\");\r\n\tfunction escapeQuotes(text){\r\n\t\treturn (text + \"\").replace(singleQuotes, \"'\");\r\n\t}\r\n\r\n\tgantt._waiAria = {\r\n\t\tgetAttributeString: function(attr){\r\n\t\t\tvar attributes = [\" \"];\r\n\t\t\tfor(var i in attr){\r\n\t\t\t\tvar text = escapeQuotes(stripHTMLLite(attr[i]));\r\n\t\t\t\tattributes.push(i + \"='\" + text + \"'\");\r\n\t\t\t}\r\n\t\t\tattributes.push(\" \");\r\n\t\t\treturn attributes.join(\" \");\r\n\r\n\t\t},\r\n\r\n\t\tgetTimelineCellAttr:function(dateString){\r\n\r\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": dateString});\r\n\t\t},\r\n\r\n\t\t_taskCommonAttr: function(task, div){\r\n\r\n\t\t\tif(!(task.start_date && task.end_date))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(gantt.templates.tooltip_text(task.start_date, task.end_date, task)));\r\n\r\n\t\t\tif(task.$dataprocessor_class){\r\n\t\t\t\tdiv.setAttribute(\"aria-busy\", true);\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tsetTaskBarAttr: function(task, div){\r\n\t\t\tthis._taskCommonAttr(task, div);\r\n\r\n\t\t\t// task bars are complex elements that should be treated as a single element\r\n\t\t\tdiv.setAttribute(\"role\", \"img\");\r\n\r\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.drag_move){\r\n\t\t\t\tif(task.id != gantt.getState(\"tasksDnd\").drag_id){\r\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttaskRowAttr: function(task, div){\r\n\r\n\t\t\tthis._taskCommonAttr(task, div);\r\n\r\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.order_branch){\r\n\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\r\n\t\t\t}\r\n\r\n\t\t\tdiv.setAttribute(\"role\", \"row\");\r\n\t\t\t// selected attribute should be added only to the grid because\r\n\t\t\t// other parts don't have the keyboard navigation\r\n\t\t\tdiv.setAttribute(\"aria-selected\", gantt.isSelectedTask(task.id) ? \"true\" : \"false\");\r\n\r\n\t\t\t// allowed values start from 1, set 1 for non-tree datastores\r\n\t\t\tdiv.setAttribute(\"aria-level\", task.$level + 1 || 1);\r\n\r\n\t\t\tif(gantt.hasChild(task.id)){\r\n\t\t\t\tdiv.setAttribute(\"aria-expanded\", task.$open ? \"true\" : \"false\");\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tlinkAttr: function(link, div){\r\n\r\n\t\t\tvar linkTypes = gantt.config.links;\r\n\r\n\t\t\tvar toStart = link.type == linkTypes.finish_to_start || link.type == linkTypes.start_to_start;\r\n\t\t\tvar fromStart = link.type == linkTypes.start_to_start || link.type == linkTypes.start_to_finish;\r\n\r\n\t\t\tvar content = gantt.locale.labels.link + \" \" + gantt.templates.drag_link(link.source, fromStart, link.target, toStart);\r\n\r\n\t\t\t// links are complex elements that should be treated as a single element\r\n\t\t\tdiv.setAttribute(\"role\", \"img\");\r\n\r\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(content));\r\n\t\t\tif(gantt.isReadonly(link)){\r\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgridSeparatorAttr: function(div){\r\n\t\t\t// the only valid role for the grid header\r\n\t\t\tdiv.setAttribute(\"role\", \"columnheader\");\r\n\t\t},\r\n\t\trowResizerAttr: function(div){\r\n\t\t\t// the only valid role for the grid header\r\n\t\t\tdiv.setAttribute(\"role\", \"row\");\r\n\t\t},\r\n\r\n\t\tlightboxHiddenAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\r\n\t\t},\r\n\r\n\t\tlightboxVisibleAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\r\n\t\t},\r\n\r\n\t\tlightboxAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\r\n\t\t\tdiv.firstChild.setAttribute(\"role\", \"heading\");\r\n\t\t\tdiv.firstChild.setAttribute(\"aria-level\", \"1\");\r\n\t\t},\r\n\r\n\t\tlightboxButtonAttrString:function(buttonName){\r\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\":gantt.locale.labels[buttonName], \"tabindex\":\"0\"});\r\n\t\t},\r\n\r\n\t\tlightboxHeader: function(div, headerText){\r\n\t\t\tdiv.setAttribute(\"aria-label\", headerText);\r\n\t\t},\r\n\r\n\t\tlightboxSelectAttrString: function(time_option){\r\n\t\t\tvar label = \"\";\r\n\r\n\t\t\tswitch (time_option) {\r\n\t\t\t\tcase \"%Y\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.years;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%m\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.months;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%d\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.days;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%H:%i\":\r\n\t\t\t\t\tlabel = gantt.locale.labels.hours + gantt.locale.labels.minutes;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": label});\r\n\t\t},\r\n\r\n\t\tlightboxDurationInputAttrString: function(section){\r\n\t\t\treturn this.getAttributeString({\r\n\t\t\t\t\"aria-label\": gantt.locale.labels.column_duration,\r\n\t\t\t\t\"aria-valuemin\": \"0\",\r\n\t\t\t\t\"role\": \"spinbutton\"\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tinlineEditorAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"row\");\r\n\t\t},\r\n\r\n\t\tgridAttrString: function(){\r\n\t\t\treturn [\" role='treegrid'\", gantt.config.multiselect ? \"aria-multiselectable='true'\" : \"aria-multiselectable='false'\", \" \"].join(\" \");\r\n\t\t},\r\n\r\n\r\n\t\tgridScaleRowAttrString: function(){\r\n\t\t\treturn \"role='row'\";\r\n\t\t},\r\n\r\n\t\tgridScaleCellAttrString: function(column, label){\r\n\t\t\tvar attrs = \"\";\r\n\t\t\tif(column.name == \"add\"){\r\n\t\t\t\t// a more precise role is button, but it is not valid for the grid header\r\n\t\t\t\tattrs = this.getAttributeString({\"role\":\"columnheader\", \"aria-label\": gantt.locale.labels.new_task});\r\n\t\t\t}else{\r\n\r\n\t\t\t\tvar attributes = {\r\n\t\t\t\t\t\"role\":\"columnheader\",\r\n\t\t\t\t\t\"aria-label\": label\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(gantt._sort && gantt._sort.name == column.name){\r\n\t\t\t\t\tif(gantt._sort.direction == \"asc\"){\r\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"ascending\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"descending\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tattrs = this.getAttributeString(attributes);\r\n\t\t\t}\r\n\t\t\treturn attrs;\r\n\t\t},\r\n\r\n\t\tgridDataAttrString: function(){\r\n\t\t\treturn \"role='rowgroup'\";\r\n\t\t},\r\n\r\n\t\treorderMarkerAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"grid\");\r\n\t\t\tdiv.firstChild.removeAttribute(\"aria-level\");\r\n\t\t\tdiv.firstChild.setAttribute(\"aria-grabbed\", \"true\");\r\n\t\t},\r\n\r\n\t\tgridCellAttrString: function(column, textValue, task){\r\n\t\t\tvar attributes = {\"role\":\"gridcell\", \"aria-label\": textValue};\r\n\t\t\tif(!column.editor || gantt.isReadonly(task)){\r\n\t\t\t\tattributes[\"aria-readonly\"] = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn this.getAttributeString(attributes);\r\n\t\t},\r\n\r\n\t\tgridAddButtonAttrString: function(column){\r\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\r\n\t\t},\r\n\r\n\t\tmessageButtonAttrString: function(buttonLabel){\r\n\t\t\treturn \"tabindex='0' role='button' aria-label='\"+buttonLabel+\"'\";\r\n\t\t},\r\n\r\n\t\tmessageInfoAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"alert\");\r\n\t\t\t//div.setAttribute(\"tabindex\", \"-1\");\r\n\t\t},\r\n\r\n\t\tmessageModalAttr: function(div, uid){\r\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\r\n\t\t\tif(uid){\r\n\t\t\t\tdiv.setAttribute(\"aria-labelledby\", uid);\r\n\t\t\t}\r\n\r\n\t\t//\tdiv.setAttribute(\"tabindex\", \"-1\");\r\n\t\t},\r\n\r\n\t\tquickInfoAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\r\n\t\t},\r\n\r\n\t\tquickInfoHeaderAttrString: function(){\r\n\t\t\treturn \" role='heading' aria-level='1' \";\r\n\t\t},\r\n\r\n\t\tquickInfoHeader: function(div, header){\r\n\t\t\tdiv.setAttribute(\"aria-label\", header);\r\n\t\t},\r\n\r\n\t\tquickInfoButtonAttrString: function(label){\r\n\t\t\treturn gantt._waiAria.getAttributeString({\"role\":\"button\", \"aria-label\":label, \"tabindex\":\"0\"});\r\n\t\t},\r\n\r\n\t\ttooltipAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"role\", \"tooltip\");\r\n\t\t},\r\n\r\n\t\ttooltipVisibleAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\r\n\t\t},\r\n\r\n\t\ttooltipHiddenAttr: function(div){\r\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\r\n\t\t}\r\n\t};\r\n\r\n\tfunction isDisabled(){\r\n\t\treturn !gantt.config.wai_aria_attributes;\r\n\t}\r\n\r\n\tfor(var i in gantt._waiAria){\r\n\t\tgantt._waiAria[i] = (function(payload){\r\n\t\t\treturn function(){\r\n\t\t\t\tif(isDisabled()){\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\t}\r\n\t\t\t\treturn payload.apply(this, arguments);\r\n\t\t\t};\r\n\t\t})(gantt._waiAria[i]);\r\n\t}\r\n\r\n\r\n};","import extensions from \"./ext/extensions_gpl\";\r\nimport base from \"./factory/make_instance_web\";\r\nimport scope from \"./utils/global\";\r\nconst gantt = (scope as any).gantt = base(extensions);\r\n\r\nexport default gantt;\r\nexport { gantt };","import \"../css/dhtmlxgantt.less\";\r\n\r\nimport factory from \"./make_instance_common\";\r\nimport ui from \"../core/ui_core\";\r\nimport ajaxLoading from \"../core/loading/ajax_loading\";\r\nimport dynamicLoading from \"../core/loading/dynamic_loading\";\r\n\r\nexport default function(supportedExtensions) {\r\n\tvar gantt = factory(supportedExtensions);\r\n\r\n\tif(!gantt.env.isNode){\r\n\t\tui(gantt);\r\n\t\tajaxLoading(gantt);\r\n\t\tdynamicLoading(gantt);\r\n\t}\r\n\r\n\treturn gantt;\r\n};","export default function(gantt) {\r\n\tgantt.load = function (url, type, callback) {\r\n\t\tthis._load_url = url;\r\n\t\tthis.assert(arguments.length, \"Invalid load arguments\");\r\n\r\n\t\tvar tp = 'json', cl = null;\r\n\t\tif (arguments.length >= 3) {\r\n\t\t\ttp = type;\r\n\t\t\tcl = callback;\r\n\t\t} else {\r\n\t\t\tif (typeof arguments[1] == \"string\")\r\n\t\t\t\ttp = arguments[1];\r\n\t\t\telse if (typeof arguments[1] == \"function\")\r\n\t\t\t\tcl = arguments[1];\r\n\t\t}\r\n\r\n\t\tthis._load_type = tp;\r\n\r\n\t\tthis.callEvent(\"onLoadStart\", [url, tp]);\r\n\r\n\t\treturn this.ajax.get(url, gantt.bind(function (l) {\r\n\t\t\tthis.on_load(l, tp);\r\n\t\t\tthis.callEvent(\"onLoadEnd\", [url, tp]);\r\n\t\t\tif (typeof cl == \"function\")\r\n\t\t\t\tcl.call(this);\r\n\t\t}, this));\r\n\t};\r\n};"],"names":["getNodePosition","elem","top","left","right","bottom","getBoundingClientRect","box","body","document","docElem","documentElement","parentNode","scrollTop","window","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","offsetWidth","offsetHeight","parseInt","offsetTop","offsetLeft","offsetParent","y","Math","round","x","width","height","isVisible","node","display","visibility","getComputedStyle","style","currentStyle","hasNonNegativeTabIndex","isNaN","getAttribute","hasHref","a","area","nodeName","loLowerCase","isEnabled","input","select","textarea","button","object","toLowerCase","hasAttribute","getFocusableNodes","root","nodes","querySelectorAll","join","nodesArray","Array","prototype","slice","call","i","length","$position","sort","b","tabIndex","splice","getScrollSize","div","createElement","cssText","appendChild","clientWidth","removeChild","max","getClassName","className","baseVal","indexOf","_trimString","addClassName","removeClassName","name","split","regEx","RegExp","replace","toNode","getElementById","querySelector","_slave","insertNode","newone","innerHTML","child","firstChild","removeNode","getChildNodes","css","ch","childNodes","len","out","obj","push","getTargetNode","e","trg","tagName","event","target","srcElement","shadowRoot","composedPath","locateAttribute","attribute","str","String","trim","this","apply","locateClassName","classname","strict","ind","charAt","getRelativeEventPosition","ev","d","clientX","clientY","getRelativeNodePosition","parent","childPos","parentPos","isChildOf","closest","element","selector","matches","msMatchesSelector","webkitMatchesSelector","el","contains","parentElement","nodeType","console","error","getClosestSizedElement","isShadowDomSupported","head","createShadowRoot","attachShadow","getActiveElement","activeElement","getSelection","focusNode","getRootNode","ShadowRoot","host","classList","test","scope","global","EventsManager$1","gantt","_mouseDown","_gantt","_domEvents","_createDomEventScope","selectedRegion","useKey","ignore","_target","getViewPort","_originPosition","_restoreOriginPosition","position","state","$services","getService","registerProvider","autoscroll","scheduledDndCoordinates","startDragAndDrop","setStart","copy","setPosition","setEnd","attach","filterTargets","utils","dom","_getCoordinates","eventElement","domHelpers.getRootNode","$root","coordinates","dragEnd","dragTimeline","ext","clickDrag","dragTimelineUseKey","config","drag_timeline","abs","relative","render","detachAll","unregisterProvider","detach","viewPort","viewPortBounds","absolute","EventHost","_silent_mode","listeners","_silentStart","_silentEnd","createEventStorage","handlers","index","eventStorage","combinedResult","handlerResult","arguments","addEvent","handler","settings","t","handlerId","id","once","originalHandler","removeEvent","clear","makeEventable","eventHost","attachEvent","eventName","thisObject","bind","attachAll","callback","callEvent","eventArguments","handlerName","concat","checkEvent","detachEvent","list","eventId","detachAllEvents","units","second","minute","hour","day","week","month","quarter","year","getSecondsInUnit","unit","forEach","arr","workArray","arrayFind","find","arrayIncludes","item","includes","isArray","pop","isDate","getFullYear","getMonth","getDate","isValidDate","getTime","delay","timeout","timer","result","$cancelTimeout","$pending","args","setTimeout","clearTimeout","$execute","replaceValidZeroId","rootId","checkZeroId","findBinary","array","prev","low","high","floor","SelectedRegion","view","_el","defaultRender","start","end","min","_singleRow","pos","_getTaskPositionByTop","_startPoint","_view","_viewPort","add","_callback","_endPoint","draw","eventable","singleRow","_useRequestAnimationFrame","useRequestAnimationFrame","requestAnimationFrame","getElement","startPoint","_startDate","dateFromPos","endPoint","_endDate","_positionPoint","positionPoint","getState","max_date","valueOf","tasksByTime","getTaskByTime","tasksByIndex","_getTasksByTop","startValue","endValue","startIndex","endIndex","getTaskByIndex","getItemIndexByTopPosition","task","getItemHeight","getItemTop","dataHeight","getTotalHeight","row_height","getTaskCount","EventsManager","_calculateDirectionVector","_trace","dots","vectors","resultVector","vector","magnitude","sqrt","angleDegrees","atan2","PI","_applyDndReadyStyles","_timeline","$task","_clearDndReadyStyles","remove","_getScrollPosition","timeline","$ui","getView","$config","scrollX","getScrollState","scrollY","_countNewScrollPosition","coords","shiftX","shiftY","_scrollState","_setScrollPosition","scrollLayoutCell","$id","_stopDrag","_originalReadonly","readonly","_originAutoscroll","_startDrag","enabled","clickDragUseKey","click_drag","scrollPosition","modals","modalsStack","isModal","afterPopup","$destroyed","focus","startModal","eventRemove","trapFocus","endModal","currentTarget","$keyboardNavigation","traceLightbox","getLightbox","focusElement","QuickInfo","show","_showForTask","_showAtCoordinates","hide","forced","qi","_quickInfoBox","_quickInfoBoxId","taskId","_quickInfoTask","quick_info_detached","getNode","setContainer","container","_container","setContent","content","defaultContent","header","title","date","buttons","quickinfo_buttons","_createQuickInfoElement","titleBox","titleContent","titleDate","main","controls","_waiAria","quickInfoHeader","html","ariaAttr","quickInfoButtonAttrString","locale","labels","_qiButtonClickHandler","_qiKeyPressHandler","_qi_button_click","code","which","_appendAtCoordinates","show_quick_info","_getContainer","_get_event_counter_part","xViewport","yViewport","_init_quick_info","_prepare_quick_info_classname","_fill_quick_data","_show_quick_info","offset","domEv","getTaskNode","getTaskRowNode","scroll","dx","dy","quickInfoAttr","quickInfoHeaderAttrString","getTask","_quickInfoReadonly","isReadonly","getTaskType","template","templates","quick_info_class","start_date","end_date","allowedButtons","isEditor","icon_delete","icon_edit","quick_info_title","quick_info_date","quick_info_content","popupHeight","scrolls","screenWidth","relativePopupBottom","mask","$click","$task_data","$grid_data","$grid","$layout","seed","plainObjectConstructor","constructor","toString","helpers.isDate","Date","helpers.isArray","Object","create","hasOwnProperty","mixin","source","force","f","undefined","defined","uid","functor","capture","addEventListener","removeEventListener","createScope","utils.event","utils.eventRemove","eventScope","staticArray","extend","Tooltip","_tooltipNode","tooltipAttr","_root","domHelpers.isChildOf","_isLikeMouseEvent","_calculateTooltipPosition","tooltipVisibleAttr","tooltipHiddenAttr","viewport","_getViewPortSize","tooltipNode","tooltip","offsetX","tooltip_offset_x","offsetY","tooltip_offset_y","mouse","domHelpers.getRelativeEventPosition","containerPos","domHelpers.getNodePosition","_getViewPort","TooltipManager","_listeners","domEventsScope","_initDelayedFunctions","delayHide","watchableTarget","eventTarget","domHelpers.getTargetNode","targetNode","domHelpers.closest","doOnMouseEnter","onmouseenter","onmousemove","onmouseleave","listener","cloneDomEvent","clone","createEvent","delayShow","helpers.delay","tooltip_timeout","tooltip_hide_timeout","noTrack","onBeforeUndo","onBeforeRedo","batchActions","Monitor","undo","_batchAction","_batchMode","_ignore","_ignoreMoveEvents","_initialTasks","_initialLinks","_nestedTasks","_nestedLinks","_undo","_attachEvents","type","overwrite","undo_types","_storeTask","link","_storeLink","isMoveEventsIgnored","newValue","_timeout","stopBatchAction","action","logAction","_storeTaskCommand","command","update","$local_index","getTaskIndex","oldValue","getInitialTask","getParent","_storeEntityCommand","move","entity","children","childrenLinks","_storeLinkCommand","taskIds","tasks","linkIds","_getLinks","setInitialTask","uniqueLinks","links","setInitialLink","$index","getGlobalTaskIndex","setInitialTaskObject","getLink","deleteCacheCooldown","saveInitialAll","clearInitialTasks","eachTask","clearInitialLinks","getLinks","getMoveObjectByTaskId","startIgnore","stopIgnore","startBatchAction","clearUndoStack","clearRedoStack","onTaskAdded","onTaskUpdated","onTaskDeleted","onLinkAdded","onLinkUpdated","onLinkDeleted","onTaskMoved","toggleIgnoreMoveEvents","store","nested","setNestedTasks","datastore","getDatastore","tindex","dragId","projectDrag","drag_id","isSummaryTask","drag_project","plugins","multiselect","selectedIds","getSelectedTasks","inlineEditors","onBeforeEditStartId","onEditStart","updateConfigs","undoEnabled","commands","old","actionType","entityType","_storeCommand","isTaskExists","getInitialLink","$source","$target","linkId","Undo","maxSteps","redoEnabled","invert","revert","value","inverseCommands","types","assert","_undoStack","_redoStack","getUndoStack","stack","undo_steps","undo_actions","redo","_pop","_reorderCommands","_applyAction","_push","shift","weights","any","actionWeights","weightA","entities","actions","methods","get","isExists","batchUpdate","method","getMethod","check","prop","startsWith","extensions","defaultConfig","eventsManager","destructor","fullscreen","isExpanded","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","isFullscreenAvailable","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","backupBodyPadding","overflow","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","backupElementSizes","zIndex","modified","backupPositioning","updateSizes","expandGantt","onFullScreenChange","$container","getFullscreenElement","positions","originalPositioning","setFullScreenSizes","record","cantFullscreen","warning","log","requestArguments","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","requestExitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen","exitFullscreen","collapse","expand","keyboard_navigation","keyboard_navigation_cells","_compose","parts","res","p","shortcuts","createCommand","modifiers","alt","ctrl","meta","keyCode","parse","shortcut","expr","getExpressions","words","getWords","j","commandKeys","specialKeys","charCodeAt","getCommandFromEvent","domEvent","shiftKey","altKey","ctrlKey","metaKey","printableKey","fromCharCode","getHashFromEvent","getHash","junctionChar","term","combinationChar","backspace","tab","enter","esc","space","up","down","home","pageup","pagedown","delete","insert","plus","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","EventHandler","_handlers","findHandler","hash","doAction","facade","preventDefault","returnValue","unbind","bindAll","map","initKeys","keys","domHelpers.getFocusableNodes","focusable","currentFocus","domHelpers.getActiveElement","currentIndex","lastItem","firstItem","GanttNode","blur","scrollHorizontal","dir","scale","getScale","step","scrollTo","posFromDate","scrollVertical","KeyNavNode","isValid","fallback","moveTo","dispatcher","setActiveNode","compareTo","canStringifyThis","canStringifyThat","eventFacade","setAttribute","$eventAttached","HeaderCell","show_grid","getVisibleTaskCount","getGridColumns","TaskRow","visibleColumns","fromDomElement","cellElement","domHelpers.locateClassName","previousSibling","$grid_scale","columns","taskRow","rootLevel","getChildren","root_id","TaskCell","click","createTask","globalIndex","splitItem","$split_subtask","parentId","nextIndex","locate","isTaskVisible","task_attribute","keptFocus","getTaskPosition","getTaskHeight","viewWidth","viewHeight","inner_width","inner_height","scroll_on_click","show_chart","task_scroll_offset","grid","scrollPositionX","scrollPositionY","attachedScrollbarHorizontal","scrollable","scrollbarHorizontal","attachedScrollbarVertical","scrollbarVertical","scrollGrid","nextElement","prevTask","getPrev","nextTask","getNext","hasChild","$open","open","close","prevId","getPrevSibling","moveTask","updateTask","isSelectedTask","unselectTask","selectTask","showLightbox","columnIndex","domHelpers.locateAttribute","row","isActive","activeNode","globalNode","enable","getActiveNode","disable","getDefaultNode","setDefaultNode","inputs","focusGlobalNode","blurNode","focusChanged","keyDownHandler","defaultPrevented","ganttNode","awaitsFocus","clearDelay","isTaskFocused","isInlineEditorCell","isNoKeyboardNavigationElement","focusHandler","$preventDefault","reFocusActiveNode","outsideGantt","localName","domElement","mousedownHandler","locateTask","removeAttribute","onReady","$data","tasksStore","currentNode","gridDataTopScroll","gridDataBottomScroll","_smart_render","updateRender","_redrawTasks","renderers","items","focusedItemVisible","createdTaskId","keepFocusOnNewTask","placeholder","nodeConstructor","placeholder_task","focusOnCreate","oldId","newId","interval","setInterval","getScope","mode","scopes","headerCell","taskCell","findVisibleColumnIndex","columnName","clearInterval","keyNavFacade","addShortcut","scopeObject","getShortcutHandler","getCommandHandler","removeShortcut","column","keyboardNavigation","quick_info","quickInfo","text","substr","details","task_time","events","hidingFunction","clearQuickInfo","hideQuickInfo","showQuickInfo","tooltipManager","tooltips","tooltipFor","touch","touch_tooltip","targetTaskId","tooltip_text","hideTooltip","link_source_id","monitor","updTask","changeTaskCommandId","updLink","oldTaskId","newTaskId","changeLinkCommandId","updateTasksIds","entry","updateLinksIds","setUndoStack","getRedoStack","setRedoStack","saveState","getInitialState","marker","render_marker","show_markers","min_date","markerHeight","getRowTop","timeline_placeholder","scrollHeight","initMarkerArea","markerArea","$marker_area","_markers","createDatastore","initItem","renderMarkers","createDataRender","defaultContainer","addLayer","getMarker","getItem","addMarker","addItem","deleteMarker","exists","removeItem","updateMarker","refresh","_getMarkers","getItems","multiselect_one_level","_multiselect","_selected","_one_level","_active","_first_selected_when_shift","getDefaultSelected","selected","getSelected","setFirstSelected","getFirstSelected","updateState","active","select_task","reset","setLastSelected","silent","unselect","getLastSelected","last","getSelectedId","afterSelect","toggle","isSelected","forSelected","isSameLevel","calculateTaskLevel","_quickRefresh","refreshTask","doSelection","_is_icon_open_click","target_ev","defaultLast","isLast","multiSelect","singleSelection","controller","cell","locateCell","inline_editors_multiselect_open","getEditorConfig","startEdit","blockSelection","first_indx","target_indx","last_indx","tmp","old_selectTask","old_unselectTask","toggleTaskSelection","eachSelectedTask","getLastSelectedTask","old_isSelected","new_id","task_id","export_api","_apiUrl","previousDateRage","str_to_date","date_format","data","_serializeHtml","_prepareConfigPDF","_serializeAll","_fixColumns","raw","_preparePDFConfigRaw","version","_sendToExport","_pdfExportRouter","_serializePlain","dates","smartRendering","smart_rendering","visual","convert","_eachTaskTimed","_no_progress_colors","_serializeTimeline","_serializeGrid","rawDates","scales","_serializeScales","worktime","_getWorktimeSettings","formData","File","FormData","append","_sendImportAjaxExcel","_sendImportAjaxMSP","importFromPrimaveraP6","importFromMSProject","skip_circular_links","oldXmlFormat","xml_format","oldFormatDate","format_date","oldXmlDate","xml_date","oldDateFormat","exportServiceDateFormat","date_to_str","_customProjectProperties","_customTaskProperties","_clearRecLinks","_exportConfig","$custom_data","custom","exportToPrimaveraP6","exportToMSProject","label","url","pack","cb","ajax","post","base","$template","server","JSON","stringify","sheet","xhr","XMLHttpRequest","onreadystatechange","readyState","status","onload","info","responseText","setRequestHeader","send","encodeURIComponent","_xdr","loader","xdoc","xmlDoc","col","editor","editor_types","skin","_serializableGanttConfig","_markColumns","_ajaxToExport","form","_createHiddenForm","submit","_hidden_export_form","constraint_date","deadline","key","formatDate","_color_box","_color_hash","color","_getColor","backgroundColor","parsedRanges","minutes","range","startMinute","endMinute","defaultWorkTimes","hours","time","work_time","wTime","_working_time_helper","get_calendar","worktimes","parsed","_getMinutesWorktimeSettings","master","branch","_pull","_originalCopyObject","json","_copyObject","task_text","_copyObjectBase","rgb","match","toISOstring","_copyObjectColumns","_copyObjectPlain","getDayIndex","_day_index_by_date","columnIndexByDate","$start","$end","hiddenCells","scaleCellsWidth","$level","$type","$rendered_type","tmps","$text","$left","leftside_text","$right","rightside_text","_copyObjectTable","$color","ct","val","date_grid","smartScales","smart_scales","_copyObjectAll","_exportSerialize","_getRaw","_scale_helpers","_get_scales","minWidth","min_column_width","autosizeMinWidth","_get_resize_options","autosize_min_width","scale_height","prepareConfigs","availWidth","autosize","_getScales","rtl","$scaleHelper","_copyObjectColors","cellColors","timeline_cell_class","task_cell_class","steps","trace_x","styles","cellCss","_getStyles","Infinity","col_width","format","date_scale","scaleCell","scaleCell_class","scaleCss","exportMode","cols","ccount","xmlFormat","serialize","_lvl","_setLevel","_makeLinksSameLevel","skippedLinks","_clearCircDependencies","_clearLinksSameLevel","_clearLevel","usedTasks","prevLink","sources","$_source","_onCircDependencyFind","targets","curLink","targetTask","_source","targetLvl","linkT","sourceParent","targetParent","$_target","project","projectName","projectDates","getSubtaskDates","start_end","manual","auto_scheduling","durationUnit","projectProperties","taskProperties","exportToPDF","exportToPNG","exportToICal","exportToExcel","exportToJSON","importFromExcel","constants","KEY_CODES","UP","DOWN","LEFT","RIGHT","SPACE","ENTER","DELETE","ESC","TAB","ExtensionsManager","addExtension","_extensions","getExtension","layout","rows","resizer","finish_to_start","start_to_start","finish_to_finish","start_to_finish","milestone","auto_types","duration_unit","correct_work_time","skip_off_time","cascade_delete","autoscroll_speed","deepcopy_on_parse","show_links","show_task_cells","static_background","static_background_cells","branch_loading","branch_loading_property","show_loading","min_duration","start_on_monday","server_utc","show_progress","fit_tasks","preserve_scroll","container_resize_timeout","deadlines","drag_links","drag_progress","drag_resize","drag_move","drag_mode","resize","progress","round_dnd_dates","link_wrapper_width","link_arrow_size","autofit","tree","align","scale_offset_minimal","inherit_scale_class","time_step","duration_step","task_date","time_picker","link_attribute","layer_attribute","buttons_left","_migrate_buttons","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","buttons_right","lightbox","sections","map_to","project_sections","milestone_sections","single_date","drag_lightbox","details_on_create","details_on_dblclick","initial_scroll","order_branch","order_branch_free","task_height","bar_height","bar_height_padding","min_grid_column_width","grid_resizer_column_attribute","keep_grid_width","grid_resize","grid_elastic_columns","show_tasks_outside_timescale","show_unscheduled","resize_rows","task_grid_row_resizer_attribute","min_task_grid_row_height","readonly_property","editable_property","calendar_property","resource_calendars","dynamic_resource_calendars","inherit_calendar","type_renderers","open_tree_initially","optimize_render","prevent_default_scroll","show_errors","wai_aria_attributes","horizontal_scroll_key","drag_multiple","csp","isWindowAwailable","env","isIE","navigator","userAgent","isIE6","isIE7","isIE8","isOpera","isChrome","isKHTML","isFF","isIPad","search","isEdge","isNode","serialized","createConfig","Error","async","headers","fastVersion","utc","dateToStrFn","Function","to_fixed","getISOWeek","getWeek","splt","strToDateFn","dateString","cspVersion","getUTCDate","getUTCMonth","getUTCFullYear","day_short","getUTCDay","getDay","day_full","month_short","month_full","getUTCHours","getHours","getUTCMinutes","getMinutes","getUTCSeconds","getSeconds","getUTCISOWeek","set","temp","month_short_hash","month_full_hash","UTC","canUseCsp","useCsp","cspAutoCheck","dateHelper","init","s","date_part","setHours","hour_start","setTime","time_part","getTimezoneOffset","week_start","month_start","setDate","quarter_start","res_month","m","setMonth","year_start","day_start","setMinutes","minute_start","setSeconds","getMilliseconds","setMilliseconds","_add_days","modifiedDate","inc","originalDate","incCondition","getHoursCondition","getDateCondition","ndate","setYear","add_quarter","num","cspCompliantVersion","_getWeekNumber","isoWeek","nday","first_thursday","year_number","ordinal_date","convert_to_utc","parseDate","parse_date","token","_url","_token","_mode","_seed","_queue","api","_events","Accept","credentials","fetch","then","websocket","_wrapper","connect","_socket","onclose","n","location","protocol","o","r","WebSocket","onmessage","fire","onError","_send","_resubscribe","Promise","_uid","resolve","reject","onCall","filter","catch","onResponse","remoteEvents","remote","remote_client.Client","req","_ready","load","back","_remote","ready","on","checkTimeout","updPerSecond","_on_timeout","ceil","StateService","stateProviders","internal","utils.mixin","provider","Promise$1","$powerArray","$create","$removeAt","$remove","$find","$insertAt","$each","$map","$filter","isPlaceholderTask","DataStore","pull","$initItem","visibleOrder","powerArray","fullOrder","_skip_refresh","_filterRule","_searchVisibleOrder","_indexRangeCache","_getItemsCache","_attachDataChange","_parseInner","loaded","copyOnParse","utils.copy","isSilent","_updateOrder","updateItem","utils.defined","_removeItemInner","_addItemInner","order","data_size","getVisibleItems","getIndexRange","utils.uid","_changeIdInner","changeId","_moveInner","sindex","getIdByIndex","clearAll","alreadySilent","arraysEqual","arr1","arr2","quick","skipFilter","_quick_refresh","_mark_recompute","oldOrder","count","countVisible","eachItem","rule","filteredOrder","placeholderIds","_ganttConfig","from","to","cacheKey","ret","getIndexById","_getNullIfUndefined","getFirst","getLast","TreeDataStore","_branches","loadedItem","existingItem","$parentProperty","parentProperty","$getRootId","$openInitially","openInitially","_eachItemMainRangeCache","getConfig","splitParents","splitItems","taskOpenState","taskVisibility","haveSplitItems","_isSplitItem","canOpenSplitTasks","open_split_tasks","$expanded_branch","isHeadless","_buildTree","setParent","_add_branch","calculateItemLevel","getBranchIndex","targetIndex","_move_branch","$rendered_parent","_replace_branch_child","_traverseBranches","itemId","sid","source_pid","tbranch","tid","diff","childId","pid","getSiblings","getNextSibling","siblings","nextSibling","level","eachParent","_setParentInner","new_pid","_eachItemCached","cache","_eachItemIterate","startId","itemsStack","reverse","useCache","buildCache","startItem","parentsHash","old_parent","new_parent","old_id","newbranch","field","desc","criteria","original_criteria","els","renderedParent","actualParent","_skipTaskRecalculation","datastoreRender","itemRepainter","renderer","renders","getLayers","render_item","allData","loadedRanges","layer","layerData","get_visible_range","ids","prepare_data","render_items","update_items","extraDataArr","skipRepaint","batch_update","getDataRender","onUpdateRequest","change_id","getDatastores","storeNames","facadeFactory","$StoreType","self","selectedId","deleteItem","subItem","storeAccessName","dropService","storeList","setService","_getDatastores","refreshData","scrollState","stores","refresh_links","refreshLinks","refreshLink","_bulk_dnd","hasSplitParent","isSplitTask","linksStore","_update_flags","userdata","_clear_data","oldSelectId","_skipResourceRepaint","addTask","deleteTask","utils.bind","startTask","changeTaskId","oldid","newid","getLinkCount","isLinkExists","addLink","newLink","updateLink","deleteLink","changeLinkId","ScaleHelper","services","getSum","sizes","summ","setSumWidth","sum_width","adjustSize","full_width","splitSize","full","share","sortScales","cellSize","_isLegacyMode","scaleConfig","scale_unit","subscales","_prepareScaleObject","primaryScale","legacyMode","initTemplate","scale_cell_class","getSubScales","docLink","warn","min_coll_width","container_width","minDate","maxDate","heights","configs","main_scale","cfg","initScaleConfig","processIgnores","initColSizes","limitVisibleRange","unshift","alineScaleColumns","reverseScale","setPosSettings","indexes","trace_indexes","trace_index_transition","_ignore_time_config","skip","probe","isWorkTime","ignore_x","display_count","min_col_width","line_height","cont_width","column_count","ignores","eachColumn","trace_x_ascending","iterateScales","lower_scale","upper_scale","upper_dates","lower_dates","prevUpper","target_index","upper_start","upper_end","lower_start","lower_end","targetWidth","curr","tzOffset","_correct_dst_change","lastDate","outDate","shared","_init_tasks_range","PrimaryScaleHelper","helper","start_interval","onlyProjectTasks","extendRangeForDates","constraint_type","constraint_types","ASAP","ALAP","baselines","baseline","calculateEndDate","duration","_min_date","_max_date","updateTasksRange","old_min","old_max","copyLinkIdsArray","targetHash","copyLinkIds","treeHelper","getSubtreeLinks","getSubtreeTasks","DataProcessorEvents","dp","$gantt","$dp","_dataProcessorHandlers","cascadeDelete","clientSideDelete","setGanttMode","setUpdated","_sendTaskOrder","deleteAfterConfirmation","needDbDelete","needCascadeDelete","dpMode","updateMode","setUpdateMode","cascade","storeItem","sendAllData","_tSend","_waitMode","itemLinks","_links","_dp","_tMode","_serverProcessor","_ganttMode","substring","serverProcessor","pluralizedMode","urlSeparator","upd","xml","_xmlNodeToJSON","isExist","objData","property","assignmentsStore","handleResourceCRUD","handleResourceAssignmentCRUD","handleBaselineCRUD","updated","updatedRows","clientOnly","getUserData","_in_progress","resources","dataprocessor_assignments","resource_assignment_store","insertedTasks","pendingAssignments","insertResourceAssignment","assignment","dataprocessor_resources","resourcesStore","resource_store","resource","dataprocessor_baselines","baselineStore","helpers.forEach","SimpleStorage","_storage","getStoredItem","_Vt","DataProcessor$1","serverProcessorURL","action_param","autoUpdate","_headers","_payload","_postDelim","_routerParametersFormat","_invalid","messages","inserted","deleted","invalid","invalid_cell","enableUTFencoding","total","payload","_serializeAsJson","_router","router","_utf","escape","getSyncState","dnd","rowId","findRow","existing","set_invalid","setUserData","is_invalid","markRow","sendData","_methods","editStop","pendingUpdateModes","modes","checkBeforeUpdate","_beforeSendData","_getRowData","_serializeAsJSON","serialize_one","security_key","pref","valid","_forEachUpdatedRow","_sendData","_getAllData","pattern","_uActions","btag","ganttMode","correct","originalSid","that","_xml","getGanttMode","reqUrl","filePath","tag","processCallback","afterUpdateCallback","finalizeUpdate","xmltop","cleanUpdate","atag","xpath","_initialized","_dp_init","_setDefaultTransactionMode","delete_confirmation","_change_id","_row_style","$dataprocessor_class","_delete_task","$drop_target","setDp","dataProcessorEvents","user","_user","_needUpdate","_updateBusy","afterAutoUpdate","fullSync","loadUpdate","xml_node","getUpdates","vers","_getXmlNodeValue","updates","newState","dataToSend","processedData","_cleanupArgumentsBeforeSend","_cleanupItemBeforeSend","updatedItem","output","taskState","taskAction","getActionByState","_onResolvedCreateUpdate","actionPromise","errorMsgStart","errorMsgEnd","queryParams","afterUpdate","dhxVersion","urlParams","_applyPayload","preprocessedData","query","setTransactionMode","nodeValue","hasOne","traversedObjects","_prepareDate","helpers.arrayIncludes","_prepareArray","_prepareObject","rawItem","processedItem","dataItem","_prepareDataItem","DataProcessor","DEPRECATED_api","DataProcessor.DataProcessor","createDataProcessor","tMode","createMethod","disableMethod","methodName","dummyMethod","restoreMethod","disableMethods","methodsHash","restoreMethods","batchUpdatePayload","noRedraw","dp_mode","call_dp","resetProjects","resetProjectDates","createWbs","_needRecalc","_isRecalcNeeded","_isGroupSort","_getWBSCode","_calcWBS","$virtual","$wbs","_setWBSCode","getWBSCode","getByWBSCode","_isFirst","_prevSibling","_wbs","_parent","wbs","resetCache","getTaskByWBSCode","createResourceMethods","resourceTaskCache","singleResourceCacheBuilt","falsyValuePrefix","random","resourceHashFunction","getCacheKey","resourceIds","typeFilter","getResourceTasks","matchingResources","resourceId","resourceValue","resource_id","selectAssignments","resource_property","owners","getTaskBy","propertyName","propertyValue","getResourceAssignments","assignments","resourcePlugin","renderEditableLabel","editable","$task_id","$resource_id","renderSummaryLabel","sum","reduce","Number","editableResourceCellTemplate","$role","editableResourceCellClass","capacity","getSummaryResourceAssignments","childResource","initEditableDiagram","resource_render_empty_cells","timeoutId","makeEditable","cancelAnimationFrame","contentEditable","getCellsByType","$content","assignmentEditInProcess","strValue","innerText","assignmentId","startDate","endDate","assignmentStore","nextChunk","calculateDuration","updateTaskAssignments","editable_resource_diagram","fetchTasks","lightbox_resources","lightboxOptions","resourceStoreConfig","initItems","storeType","$resourcesStore","lightboxOptionsFnc","options","updateCollection","histogram_cell_class","histogram_cell_label","histogram_cell_allocated","histogram_cell_capacity","defaultResourceCellClass","defaultResourceCellTemplate","resource_cell_value","resource_cell_class","resource_assignments","resourceAssignmentsProperty","process_resource_assignments","resourceAssignmentFormats","auto","singleValue","valueArray","resourceValueArray","assignmentsArray","resourceAssignmentFormat","assignmentModes","fixedDates","fixedDuration","default","initAssignmentFields","initDelay","timing","_assignmentTimeFromTask","resourceAssignmentsStore","_makeAssignmentsFromTask","resourceAssignments","detectFormat","usedIds","defaultMode","_updateTaskBack","_assignAssignments","getTaskAssignments","_loadAssignmentsFromTask","_syncAssignments","storeAssignments","taskValues","assignmentsStoreValues","inBoth","inTaskNotInStore","inStoreNotInTask","taskOwner","ownerId","foundOwnerAssignment","taskSearch","storeSearch","processedIds","inTask","inStore","ignoreFields","_syncOnTaskUpdate","totalAssignments","needUpdate","needUpdateFor","undoBatchCancel","assignmentsHash","unscheduled","idsSearch","deleteIds","resourceAssignmentsCache","resourceTaskAssignmentsCache","taskAssignmentsCache","searchTaskId","resourceTaskCacheKey","getTaskResources","uniqueResources","addPlaceholder","callIfEnabled","insertPlaceholder","placeholders","new_task","afterEdit","newTask","dataProcessor","_silencedPlaceholder","isPlaceholderLink","auto_task_types","checkTaskType","changedTypes","targetType","getTaskTypeToUpdate","$needsUpdate","updateParentTypes","group_mode","delTaskParent","allTypes","hasChildren","taskType","originalRowDndParent","originalMoveTaskParent","isParsingDone","updateAfterRemoveChild","DurationFormatterNumeric","canParse","_ie","LinkFormatterSimple","_linkReg","linkPart","exec","_findSource","lag","pred","reqTemplate","_ne","formatters","durationFormatter","DurationFormatter","linkFormatter","LinkFormatter","empty_state_screen","show_empty_state","emptyStateElement","isGanttEmpty","placeholderContainer","empty_state_text_link","empty_state_text_description","clickEvents","attachAddTaskEvent","domHelpers","getContainer","wrapper","marginTop","oldNodes","detachAddTaskEvents","renderContent","emptyStateElementNode","hasBaselinesBelow","baselinesOnDifferentRow","render_mode","childrenHaveBaselines","hasBaselines","isSplitParent","getMaxParentHeight","heightLimit","maxHeight","shrinkHeight","splitChild","parentHeight","getItemPosition","rowHeight","_adjustSplitParentHeight","maxParentHeight","adjustTaskHeightForBaselines","childHeight","_increaseSplitParentHeight","getLayoutView","getBarHeight","subtaskId","subtask","subtaskHeight","baselineSize","baselineAmount","subrowHeight","newBaseline","existingBaseline","shouldRepaint","iteratedBaselines","taskBaselines","exisingBaselines","getTaskBaselines","exisingBaseline","repaint","parsing","jsonParseError","on_load","resp","responseURL","_process_loading","collections","_load_collections","assignmentsByTasks","collections_loaded","collection","serverList","option","option_key","$ignore","dhx_security","serializeTask","serializeLink","_copyLink","rawLinks","baselineCopy","attrs_only","attributes","_getCollections","opts","itms","attrs","k","attr","_getXML","toptag","getXMLTopNode","skey","evs","oldxml","startdate","est","enddate","predecessortasks","message","IsWorkTimeArgument","calendar","ClosestWorkTimeArgument","CalculateEndDateArgument","GetDurationArgument","calendarArgumentsHelper","getWorkHoursArguments","helpers.isValidDate","setWorkTimeArguments","unsetWorkTimeArguments","isWorkTimeArguments","processedConfig","getClosestWorkTimeArguments","arg","_getStartEndConfig","param","argumentType","getDurationArguments","hasDurationArguments","calculateEndDateArguments","WorkTimeCalendarMerger","_getIntervals","hoursArray","_toHoursArray","intervalsArray","formatHHMM","secondsValue","minutePart","_intersectHourRanges","first","baseArray","overridesArray","current","_mergeAdjacentIntervals","_mergeHoursConfig","firstHours","secondHours","merge","firstConfig","secondConfig","mergedSettings","customWeeks","processCalendar","config1","config2","date1","date2","hours2","WorkUnitsMapCache","timestamp","_cache","has","subCache","rawValue","unitCache","yearCache","Map","WorkUnitsObjectCache","LargerUnitsCache","getMinutesPerWeek","weekStart","_weekCache","_calendar","minutesPerWeek","getHoursPerDay","getMinutesPerMonth","monthStart","_monthCache","minutesPerMonth","nextMonth","DateDurationCache","stepCache","durations","endDates","compute","_getCacheObject","startDateTimestamp","_endDateCacheKey","resultTimestamp","_durationCacheKey","endDateTimestamp","CalendarWorkTimeStrategy","argumentsHelper","_workingUnitsCache","_largeUnitsCache","_dateDurationCache","_worktime","_cached_timestamps","_cached_timestamps_count","_clearCaches","_getUnitOrder","_resetTimestampCache","_timestamp","_checkIfWorkingUnit","hasDuration","_is_work_day","_getWorkHours","_is_work_hour","startHour","endHour","_getTimeOfDayStamp","dayEnd","_is_work_minute","checkTime","_nextDate","_getWorkUnitsBetweenGeneric","stepStart","stepEnd","next","checkFirst","checkLast","isLastStep","_isWorkTime","unitOrder","biggerTimeUnit","_getClosestWorkTimeFuture","_getMinutesPerHour","hourStart","hourEnd","_getMinutesPerDay","durationMinutes","durationHours","_getWorkUnitsForRange","getUnitsPerDay","_getMinutesBetweenSingleDay","_getIntervalTimestamp","minuteFrom","minuteTo","_getMinutesBetween","firstDayStart","firstDayEnd","lastDayStart","lastDayEnd","startPart","endPart","_getHoursBetween","_setConfig","_parseSettings","haveCustomWeeks","customWeeksRangeStart","customWeeksRangeEnd","customWeeksBoundaries","_parseHours","minCustomRangeStart","maxCustomRangeEnd","customTime","rangeStart","rangeEnd","fromReadable","toReadable","currentWeek","_tryChangeCalendarSettings","backup","hasWorkTime","_arraysEqual","_compareSettings","mySettings","thatSettings","myDays","otherDates","myHours","otherHours","equals","myWeek","thatWeek","getWorkHours","dateValue","endHours","timestampRanges","part","timerangeConfig","durationSeconds","setWorkTime","calendarConfig","unsetWorkTime","reset_calendar","dateKey","isWorkUnit","setItem","getDuration","_calculateDuration","sign","mult","getEndDate","_calculateEndDate","_calculateMinuteEndDate","_subtractMinuteDate","_calculateHourEndDate","_addInterval","stopAction","added","dstShift","_addHoursUntilDayEnd","rangeHours","addHours","intervalEnd","durationLeft","hoursPerDay","_addMinutesUntilHourEnd","rangeMinutes","addMinutes","_subtractMinutesUntilHourStart","hourStartTimestamp","initialDateTimestamp","minutePrecision","_isMinutePrecision","addedInterval","calculatedDay","daySchedule","minutesInDay","dayStart","iterateFromDayEnd","isWorkHour","workInterval","prevInterval","minutesInHour","_getClosestWorkTimePast","times","lastInterval","getClosestWorkTime","_getClosestWorkTime","inputDate","direction","closestFuture","closestPast","_getClosestWorkTimeGeneric","_findClosestTimeInDay","resultDate","fromDayEnd","_getClosestWorkMinute","increment","hasRegularHours","_checkWorkHours","dayConfig","legacyResourceCalendarConfig","isLegacyResourceCalendarFormat","resourceCalendarsProperty","getResourceProperty","resourceCalendarsConfig","getCalendarIdFromLegacyConfig","calendarId","dynamicResourceCalendars","dynamicCalendars","getCalendarIdFromMultipleResources","manager","getResourceCalendar","tempCalendar","mergeCalendars","addCalendar","CalendarManager","_calendars","_legacyConfig","_isLegacyConfig","createDefaultCalendars","CalendarDisabledTimeStrategy","TimeCalculator","calendarManager","createArgumentsHelper","$disabledCalendar","NoWorkTimeCalendar","_convertWorkTimeSettings","days","calendars","mergeHelper","CalendarMergeHelper","_createCalendarFromConfig","createCalendar","apiCore","preparedConfig","parentCalendar","defaults","fulltime","getCalendar","getCalendars","_getOwnCalendar","resourceProperty","calendarsConfig","getTaskCalendar","taskObject","groupMode","currentTask","$effective_calendar","isCalendar","deleteCalendar","restoreConfigCalendars","possibleCalendar","every","fixedUnits","_getCalendar","worktimeFacadeFactory","timeCalculator","_hasDuration","isUnscheduledTask","_isAllowedUnscheduledTask","_isTaskInTimelineLimits","taskStart","taskEnd","_getProjectEnd","project_end","_getProjectStart","project_start","getDefaultTaskDate","parent_id","schedule_from_end","_set_default_task_timing","$new","showTask","_lightbox_id","_tasks_dnd","drag","getTaskTimingMode","task_type","$no_start","$no_end","scheduled_summary","updateTaskTiming","assignProjectDates","taskTiming","summaryDateFields","manuallyScheduledSummaryDateFields","dateFields","_init_task_timing","getSubtaskInfo","rollup","isScheduledSummary","task_mode","dirty","$calculate_duration","effectiveCalendar","taskMode","$rollup","getSubtaskDuration","_update_parents","updateAll","has_changed","startDateField","$auto_start_date","endDateField","$auto_end_date","oldStart","oldEnd","roundDate","upper","lower","colIndex","correctTaskWorkTime","listenWindowResize","resizeDelay","resizeTimeout","previousSize","getContainerSize","container_resize_method","lowlevelResizeWatcher","$scrollbarRepaint","currentSize","repaintGantt","previousHeight","previousWidth","gantt_core","expire","invalidContainerMessage","validateNode","cloneNode","_reinit","dropLayout","_clearTaskLayers","_clearLinkLayers","rebuildLayout","calculateScaleRange","createView","getPropertyValue","resizeWatcher","contentWindow","resetLayout","initTemplates","domHelpers.toNode","$mouseEvents","edit","question","confirm_deleting","confirm_deleting_title","_simple_confirm","hideLightbox","visibleDate","_sort","posX","_getHorizontalScrollbar","codeScrollLeft","preserveScroll","new_pos","posY","gridCell","attachedScrollbar","verticalScrollbar","$view","setSizes","changeLightboxType","getLightboxType","_silent_redraw_lightbox","_get_link_type","from_start","to_start","isLinkAllowed","prevOffset","time_unit","helpers.getSecondsInUnit","offsetChanged","domHelpers.getClassName","icon_save","icon_cancel","icon_details","confirm_closing","section_description","section_time","section_type","section_deadline","section_baselines","column_wbs","column_text","column_start_date","column_duration","column_add","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","weeks","months","years","message_ok","message_cancel","section_constraint","asap","alap","snet","snlt","fnet","fnlt","mso","mfo","resources_filter_placeholder","resources_filter_label","baselines_section_placeholder","baselines_add_button","baselines_remove_button","baselines_remove_all_button","deadline_enable_button","deadline_disable_button","LocaleManager","addLocale","_locales","getLocale","DHXGantt","license","edit_save","edit_cancel","factory","supportedExtensions","extensionManager","ExtensionManager","activePlugins","plugin","getter","service","DOMParser","ActiveXObject","loadXML","parseFromString","tagname","responseXML","getElementsByTagName","xpathExp","docObj","selectNodes","ownerDocument","evaluate","XPathResult","ANY_TYPE","iterateNext","_call","onLoad","getSync","put","postData","del","postSync","isQt","noCache","toUpperCase","RemoteEvents","copyDomEvent","pageX","pageY","DnD","_obj","_settings","inputMethods","getInputMethods","_drag_start_timer","clearDragTimer","eventParams","passive","accessor","timeStamp","original_target","original_element_sizes","domHelpers.getClosestSizedElement","dragStart","touch_drag","traceDragEvents","inputMethod","mousemove","dragMove","dragScroll","limited_mousemove","started","updates_per_second","dndActive","cancelable","mousemoveContainer","mouseup","checkPositionChange","diff_x","diff_y","pow","sensitivity","initDnDMarker","backupEventTarget","getEvent","backup_element","touchEventsSupported","touches","elementFromPoint","pointerEnabled","pointerType","msPointerEnabled","MSPOINTER_TYPE_MOUSE","getPosition","_prevent_touch_scroll","_touch_drag","_touch_feedback","targetTouches","templatesLoader","regTemplates","initial","template_name","gantt_save_btn","gantt_cancel_btn","gantt_delete_btn","c","progress_text","grid_header_class","task_class","task_end_date","grid_row_class","task_row_class","timeline_cell_content","scale_row_class","grid_indent","grid_folder","grid_file","grid_open","grid_blank","task_unscheduled_time","grid_date_format","link_class","link_description","drag_link","drag_link_class","tooltip_date_format","baseline_text","stateService","selected_task","deletedLinks","originalTask","checkLinkedTaskVisibility","sync_link","sourceTask","sync_link_delete","sync_links","mapEvents","conf","mapFrom","mapTo","sourceEvent","targetEvent","taskLinks","existingLink","sourceMatch","targetMatch","typeMatch","changedTask","oldState","sourceVisible","targetVisible","onItemLoading","onBeforeAdd","onAfterAdd","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onIdChange","onBeforeItemMove","onAfterItemMove","onFilterItem","onItemOpen","onItemClose","onBeforeSelect","onAfterSelect","onAfterUnselect","modules","new_task_placeholder","getGridColumn","activate","_cached_functions","update_if_changed","critical_path_mode","wrap_methods","_prefetch_originals","prefetch","methodname","original","optimizer","argumentsArray","l","get_arguments_hash","cached_values","has_cached_value","get_cached_value","cache_value","arguments_hash","is_date","values","stringify_argument","deactivate","setup","override_gantt","gantt_methods","highlight_critical_path","deactivTimeout","_eventRemoveAll","resetLightbox","i18n","en","ar","be","ca","cn","cs","da","de","es","fa","fi","fr","he","hr","hu","it","jp","kr","nb","nl","no","pl","pt","ro","ru","si","sk","sv","tr","ua","setLocale","localeObject","boxAttribute","_dhx_msg_cfg","usercall","modalBox","modal_key","messageBox","keyboard","cancelBubble","modality","cover","onkeydown","messageButtonAttrString","getFirstDefined","_createBox","ok","cancel","contentId","messageModalAttr","inner","btn","onclick","hidden","innerWidth","innerHeight","alertPopup","confirmPopup","boxPopup","box_params","params","messageInfoAttr","insertBefore","timers","hideAll","popups","alert","confirm","modalbox","extendSettings","parentSettings","own","$extendedConfig","setPrototypeOf","configurable$1","parentView","parentConfig","parentTemplates","$getConfig","$getTemplates","uiFactory$1","views","createdViews","creator","configure","configurable","$parent","initUI","registerView","viewConstructor","createMouseHandler","eventHandlers","doubleclick","contextMenu","addEventTarget","onClick","findEventHandlers","callEventHandlers","onContextMenu","src","delegateHandlers","h","onDoubleClick","onMouseMove","_last_move_event","domEvents","delegate","elementHandlers","callHandler","mouseEvents","genericViewPortChecker","x_end","y_end","isLegacyRender","getRowRectangle","getVisibleTasksRange","indexStart","indexEnd","extraTasksIds","inlineEditorId","layerFactory","renderFactory","task_area_pulls","task_area_renderers","getRenderer","renderMethod","updateMethod","getRectangle","renderCallbackMethod","specializedViewPortChecker","basicGetRectangle","onrender","isInViewPort","layerView","viewConfig","rendererViewPort","useBuffer","remove_item","rendered","clear_container","basicGetRange","getVisibleRange","prepareData","buffer","createDocumentFragment","vis","itemsSearch","renderedItems","newElements","nodesToRemove","renderCalledFor","itemNode","restore","replace_item","item_id","newNode","replaceChild","clearRenderers","createGroup","relativeRoot","defaultFilters","initLayer","renderGroup","tempCollection","filters","_add","getLayer","pending","topmost","rel","mergeFilters","requestUpdate","eachLayer","removeLayer","filter_methods","filter_method","barRectangle","startCoord","endCoord","calculated","clearCache","rec","sourceBox","targetBox","initialized","visibleBoxes","isLinkInViewPort","sourceTop","sourceHeight","targetTop","targetHeight","sourceLeft","sourceRight","targetLeft","targetRight","$skipSmartRenderOnScroll","Cell","headerHeight","$domEvents","$name","$factory","_headerClickHandler","final","$preResize","topCont","topSize","getSize","maxWidth","minHeight","setSize","_hide","cellIndex","moveView","$toHTML","canCollapse","$fill","collapsed","size","gravity","getContentSize","$lastSize","contentX","contentY","_getBorderSizes","borders","horizontal","vertical","_currentBorders","_borders","_sizeHeader","_sizeContent","_setBorders","domHelpers.removeClassName","cssHash","domHelpers.addClassName","xLayout","transform","__extends","__","Layout","_super","_this","_parseConfig","domHelpers.removeNode","$cells","_resizeScrollbars","scrollbars","scrollChanged","visibleScrollbars","hiddenScrollbars","scrollbarsToHide","showScrollbar","scrollbar","hideScrollbar","shouldHide","shouldShow","visibleGroups","group","_syncCellSizes","groupName","newSize","groups","_eachChild","_syncGroupSize","cells","_xLayout","newSizeValue","isGravity","ownSize","resizeSibling","siblingSize","totalGravity","totalSize","mainGrid","grid_width","startStage","mainCall","_resizeInProgress","contentViews","setContentSize","_getAutosizeMode","$originalWidthStored","$originalWidth","$originalHeightStored","$originalHeight","isChild","cellId","sub","getCells","domHelpers.insertNode","domHelpers.getChildNodes","contentWidth","contentHeight","_cleanElSize","_getBoxStyles","computed","properties","boxSizing","clientHeight","MozBoxSizing","horPaddings","borderLeftWidth","borderRightWidth","vertPaddings","borderTopWidth","borderBottomWidth","borderBox","outerWidth","outerHeight","boxSizes","contentSizes","_sizes","margin","_calcFreeSpace","side","_free","_gravity","_calcSize","_configureBorders","borderClass","lastVisibleIndex","lastCell","borderColorClass","_updateCellVisibility","oldVisibleCells","_visibleCells","firstCall","visibleCells","parentVisibility","hide_empty","hideCell","cellView","marginSide","ViewLayout","$cell","byMaxSize","otherCell","ViewCell","childConfig","$initialized","unload","_setContentSize","outerX","outerY","childSize","ScrollbarCell","SCROLL_MODIFIER_KEYS","_scrollHorizontalHandler","_scrollVerticalHandler","_outerScrollVerticalHandler","_outerScrollHorizontalHandler","_mouseWheelHandler","scroll_size","_isHorizontal","eachCell","_isVertical","_initVertical","_initHorizontal","_initMouseWheel","_initLinkedViews","_getRootParent","_eachView","_getLinkedViews","$scroll_hor","$scroll_ver","_updateLinkedViews","scrollHorizontally","_scrolling","oldSize","scrollVertically","_wheel_time","_oldLeft","_getScrollSize","scrollSize","outerSize","isHorizontal","linked","scrollProperty","innerSizeProperty","outerProperty","_getScrollOffset","cellScrollSize","nonScrollableSize","outerScroll","innerScroll","visible","scrollSizes","_setScrollSize","toggleVisibility","_getScaleOffset","parentLayout","_oldTop","_checkWheelTarget","connectedViews","wheelSpeed","wheelSpeedConfig","wheel_scroll_sensitivity","ff","deltaX","wheelDeltaX","deltaY","wheelDelta","multiplier","deltaMode","wx","wy","horizontalScrollModifier","oldLeft","detail","oldTop","createMixin","getItemTopCache","getRowTopCache","getItemHeightCache","totalHeightCache","getItemHeightCacheState","quickPosition","cachedRowHeight","canUseSimpleCalc","_getRowHeight","_refreshState","rowStore","globalRowHeight","canUseSimpleCalculation","_resetTopPositionHeight","_resetHeight","getCacheStateTotalHeight","shouldClearHeightCache","all","itemIndex","_fillHeightCache","defaultHeight","globalHeight","itemHeightCache","sumHeight","getHeight","visibleItems","totalHeight","canvasRender","destroy","Timeline","_posFromDateCache","_timelineDragScroll","topPositionMixin","$task_scale","taskBg","$task_bg","$task_baselines","$task_links","$task_bars","$task_constraints","$task_deadlines","_tasks","linksAttr","bindLinks","item_attribute","layers","_createLayerConfig","linkLayers","_attachLayers","backgroundImage","data_els","scrollWidth","scrolled","_refreshScales","_scales","_getScaleChunkHtml","taskFilter","taskLayers","expose","taskBar","hide_bar","_taskLayers","_linkLayers","_bindStore","taskRenderer","bar_layer","_taskRenderer","_initStaticBackgroundRender","linkStore","linkRenderer","linkLayer","_linkRenderer","staticRender","_staticBgHandler","staticBgContainer","$task_bg_static","staticBackgroundHeight","_clearLayers","_render_tasks_scales","scales_html","outer_width","helpers","cfgs","fromPos","toPos","cssClass","tplClass","_prepareScaleHtml","globalConfig","globalTemplates","helpers.findBinary","cssclass","g","floatConfig","sticky","labelPosition","approxLabelWidth","labelPos","translateValue","getTimelineCellAttr","_getColumnDuration","wholeCells","partCell","roundPos","_getNextVisibleColumn","visibleDateIndex","_getPrevVisibleColumn","_getClosestVisibleColumn","dateIndex","visibleIndex","transition","xLeft","xRight","displayStart","displayEnd","isMilestoneRender","_timelineCacheAttached","_unbindStore","ScrollableGrid","_scrollOrder","getCurrentX","_dnd","_scrollView","attachEvents","isScrollable","gridBoundingRect","maxLeft","minLeft","currentX","autoscrollRight","autoscrollStart","autoscrollLeft","autoscrollStop","scrollStep","COLUMN_ID_ATTR_NAME","ColumnsGridDnd","_targetMarker","calculateCurrentPosition","eventX","DND","_scrollableGrid","_draggedCell","draggedColumn","draggedIndex","_gridConfig","outerHTML","lineHeight","_dragX","columnIndexes","findColumnsIndexes","targetColumn","cleanTargetMarker","setMarkerPosition","drawTargetMarker","reorderColumns","draggedId","xBefore","xAfter","currentColumn","startX","endX","columnRelativePos","compare","relativeX","getCorrection","gridOffset","nextPosition","Grid","$state","gridAriaAttr","gridAttrString","gridDataAriaAttr","gridDataAttrString","reorder_grid_columns","gridScaleRowAttrString","doOnRender","_renderHeaderResizers","_mouseDelegates","mouseEventContainer","resizerrow","_task_grid_row_resize","row_before_start","row_id","row_after_start","row_drag_move","dd","itemHeight","itemTop","pointerPosition","markerStartPosition","marker_height","minPointerPosition","row_drag_end","oldItemHeight","finalHeight","dnd_sensitivity","_addLayers","_initEvents","_columnDND","ColumnDnd","_validateColumnWidth","numericWidth","elasticColumns","_setColumnsWidth","columnProperty","newColumnWidth","columnsWidth","_getGridWidth","_gridCacheAttached","_initSmartRenderingPlaceholder","_calculateGridWidth","_renderGridHeader","getColumnIndex","excludeHidden","hiddenIndexShift","getColumn","gridLine","gridTaskRowResizer","_refreshPlaceholderOnStoreUpdate","$rowsPlaceholder","_getColumnWidth","min_width","new_width","max_width","_checkGridColumnMinWidthLimits","_getGridWidthLimits","min_limit","max_limit","newWidth","start_index","columns_width","final_width","extra_width","start_width","iterator","curExtra","_getColsTotalWidth","cols_width","v","parseFloat","unknown","gridWidth","delta","changed","lineHeigth","colWidth","gridScaleCellAttrString","defaultMapping","isChanged","save","onShow","preventKeyNav","shouldPrevent","editPrevCell","editNextCell","onHide","keyNavMappings","onBlurDelay","keyNav","activeCell","editorState","hasEditor","editorType","anyModifier","BaseFactory","BaseEditor","set_value","get_input","get_value","is_changed","currentValue","is_valid","textEditorFactory","TextEditor","numberEditorFactory","NumberEditor","oninput","selectEditorFactory","SelectEditor","optionsHtml","dateEditorFactory","html5DateFormat","dateToStr","strToDate","DateEditor","minValue","maxValue","predecessorEditorFactory","PredecessorEditor","getFormatter","formatter","parseInputString","predecessors","delimiter","formatPredecessors","formatLinkKey","getLinksDiff","predecessorCodes","selectedLinks","Set","existingLinksSearch","linksToAdd","linkKey","linksToDelete","linksDiff","autoSchedule","inputPredecessors","taskPredecessors","durationEditorFactory","linkedPropertiesProcessor","decreaseStartDate","initConfigs","number","predecessor","keyboardMapping","mapping","setMapping","getMapping","eventBus","inlineEditController","createEditors","_createPlaceholder","inlineEditorAttr","updateTaskDateProperties","ganttHandlers","_itemId","_columnName","_editor","_editorType","_placeholder","setValue","editorConfig","getValue","_getItemValue","inline_editors_date_processing","_findEditableCell","nextColumn","getNextCell","getFirstCell","getLastCell","canChangeRow","moveRow","nextItem","editNextRow","skipReadonly","editPrevRow","isBarInViewport","createTaskRenderer","_task_default_render","controlsMargin","padd","milestoneHeight","milestoneWidth","done","pr","markerPos","basic","link_from_start","link_target_id","isCriticalTask","link_landing_area","from_id","link_to_start","dragClass","progressColor","textColor","u","setProperty","_get_link_crossing_css","marginStyle","_render_side_content","setTaskBarAttr","_render_pair","outer","showLinkPoints","cond","ln","tp","marginLeft","marginRight","defaultRenderer","createBaseBarRender","resourceHistogramRenderer","getVisibleCellsRange","firstCellIndex","lastCellIndex","isColumnVisible","cellLeftCoord","cellRightCoord","bgPlaceholder","placeholderConfig","lastTaskId","placeholderTask","calendar_id","createLinkRender","drawer","current_pos","dirs","path","point","get_lines","line_to","get_path","line","_get_line","get_wrapper_sizes","wrapper_size","get_line_sizes","line_size","link_line_width","render_line","innerPos","render_corner","corner","radius","lineWidth","cornerDiv","borderVertical","borderHorizontal","arrow","get_direction","vect","path_builder","point_to","get_points","get_endpoint","xy","e_y","e_x","lineType","get_line_type","forward","getMilestonePosition","splitParams","milestoneTask","siblingBaselines","shapes","lines","link_radius","arrowSize","nextLine","cornerX","cornerY","lastLine","arrowX","arrowY","shape","render_arrow","cssTemplate","isCriticalLink","linkAttr","createResourceTimelineBuilder","assignmentsPassed","timegrid","scaleUnit","scaleStep","precalculatedTimes","firstColumn","minScaleDate","currDate","cachedTimes","timetable","rowDnd","checkPlaceholderTask","getStore","initial_open_state","$transparent","lastTaskOfLevel","last_item","_getGridPos","gridHeight","maxBottom","_getTargetY","scrollPos","_getTaskByY","dropIndex","gridDataSizes","reorderMarkerAttr","containerSize","targetY","allowedLevel","over","nextId","dropTarget","createDropTargetObject","targetId","prevSibling","nextSiblingTarget","dndTaskId","prevSiblingTarget","firstChildTarget","lastChildTarget","findClosesTarget","targetLevel","findTargetAbove","findTargetBelow","getSameLevelDropPosition","relTargetPos","eventTop","targetAbove","targetBelow","gridToPageCoordinates","gridPos","setWidthWithinContainer","higlighter","removeLineHighlight","markerLine","highlightPosition","ePos","pointerEvents","markerFolder","folderHighlightWidth","linePos","indentNode","indent","iconWidth","childCount","markerLineTop","rowDndMarker","opacity","drop_target","getDropPosition","doctype","minTop","firstVisibleTaskIndex","firstVisibleTaskId","firstVisibleTaskPos","hiddenTaskPart","gridPosition","gridBottom","placeholderRowHeight","lockLevel","getLockedLevelTarget","initializer","onCreated","extendGantt","_inlineEditors","onInitialized","initEvents","extendDom","onDestroyed","clearEvents","showDate","sorting_method","totalWidth","taskDnD","createTaskDND","roundTaskDates","round_task_dates","dragMultiple","before_start","before_finish","after_finish","clear_drag_state","set_actions","drag_from_start","stage","_move","_resize","_resize_progress","on_mouse_move","on_mouse_down","on_mouse_up","start_x","start_y","coords_x","_drag_task_coords","minDurationInUnits","_calculateMinDuration","diffValue","_find_max_shift","dragItems","correctShift","minX","maxX","maxShift","minShift","multipleDragShift","new_start","new_end","obj_s_x","obj_e_x","_mouse_position_change","oldPos","newPos","_is_number","isFinite","start_drag","sX","sY","now","_start_dnd","_update_on_move","_update_item_on_move","curr_date","dragHash","_isMultiselect","dragProject","initialDrag","childDrag","_get_drag_mode","_fix_dnd_scale_time","fixStart","_fix_working_times","_finalize_mouse_up","_fireEvent","_dhx_changed","finalizingBulkMove","moveCount","doFinalize","dragProperty","selectedTasksIds","selectedTask","_addSubtasksToDragMultiple","trigger","drag_state","summaryId","initLinksDND","_link_landing","_link_target_task","_link_target_task_start","_link_source_task","_link_source_task_start","getDndState","link_edge_marker","link_landing_hover_area","markerSize","viewportSize","ganttOffsetY","updateMarkedHtml","resetDndState","showDirectingLine","s_x","s_y","_direction","link_direction_class","dist","tan","angle","atan","coordinateCircleQuarter","sin","cos","shiftLeft","shiftTop","eX","eY","_dir_start","landing","prevTarget","prevLanding","prevToStart","targ","absCoords","domHelpers.getRelativeNodePosition","_dir_end","targetChanged","linkDnD","_linksDnD","_tasksDnD","MouseDelegates","_attachDomEvents","_attachStateProvider","_clearDomEvents","_clearStateProvider","_delete_link_handler","coll","coll_date","scale_step","getVerticalScrollbar","getHorizontalScrollbar","_legacyGridResizerClass","resizers","gridResizer","mainTimeline","colsWidth","hideGrid","grid_limits","ganttContainerWidth","verticalScrollbarWidth","gridOverflow","original_grid_width","skinSettings","skins","_initScrollStateEvents","_getVerticalScrollbar","_findGridResizer","gridFirst","_getSiblings","_behind","_front","resizeInfo","initialWidth","prevCellWidth","nextCellWidth","viewCell","limits","newBehindSize","newFrontSize","oldBackSize","oldFrontSize","newBackSize","ui$1","attachInitializer","uiFactory","Scrollbar","mainLayoutInitializer","mainTimelineInitializer","mainGridInitializer","ResourceGrid","ResourceTimeline","ResourceHistogram","layersEngine","createLayerFactory","previusSiblingContainer","defaultContainerSibling","addTaskLayer","rangeFunction","getVisibleTaskRange","_getTaskLayers","removeTaskLayer","addLinkLayer","getVisibleLinksRangeFactory","isLinkInViewport","_getLinkLayers","removeLinkLayer","gridEditorsFactory","layersApi","textValue","aria","gridAddButtonAttrString","justifyContent","center","gridCellAttrString","css_template","taskRowAttr","rowNode","cellNode","external_render","adapter","isElement","renderElement","renderedCells","isRendered","detachRenderedCell","getCellClassTemplate","getCellContentTemplate","renderOneCell","contentTemplate","cssTemplateContent","htmlTemplateContent","customCell","cellCssTemplate","cellHtmlTemplate","odd","placeholderTop","placeholderHeight","renderTaskBar","timedProjectBar","renderTimedProjectBar","taskRollupBar","renderedNodes","checkVisibility","generateChildElement","childCopy","$rendered_at","getKey","renderParentId","rollupKey","taskSplitBar","renderSplitTaskBar","taskConstraints","renderConstraints","taskDeadline","renderDeadline","renderBaselines","renderLink","resourceRow","getResourceLoad","resourceTimetable","renderedResourceLines","renderResourceLineCell","detachRenderedResourceLine","checkedColumns","resourceHistogram","resize_el","rowResizerAttr","layersService","_get_skin","themeVar","themeName","isCssVarTheme","href","_theme_info","theme","cssVarTheme","skinset","_second_column_width","_third_column_width","_lightbox_template","_redefine_lightbox_buttons","scrollRange","scrollDelay","scrollSpeed","isMove","delayTimeout","startPos","eventPos","isDisplayed","isScrollState","dragMarker","isResize","isLink","isClickDrag","defineDelayTimeout","speed","tick","autoscroll_delay","defineScrollInterval","autoscrollInterval","isScroll","gridDrag","need_scroll","currentScrollTop","scrollOuterHeight","scrollInnerHeight","currentScrollLeft","scrollOuterWidth","scrollInnerWidth","autoscroll_step","boxSize","$","jQuery","fn","dhx_gantt","each","newgantt","Gantt","getGanttInstance","jquery_hooks","dhtmlx","attaches","attachGantt","cmp","attachObject","dataType","dataObj","vs","av","border","gridId","gridObj","dhtmlXCellObject","dhtmlx_hooks","USE_KEY","_defaultScales","TimelineZoom","zoomIn","getCurrentLevel","setLevel","zoomOut","_levels","_activeLevelIndex","getLevels","zoomLevel","_getZoomIndexByName","levelName","_getVisibleDate","_visibleDate","cursorOffset","nextConfig","chartConfig","cursorDate","newPosition","middleDate","_attachWheelEvent","_useKey","_handler","_defaultHandler","timelineOffset","wheelUp","stopPropagation","_setScaleSettings","_setScaleDates","_initialStartDate","_initialEndDate","activeLevelIndex","_mapScales","levels","_minColumnWidth","minColumnWidth","_maxColumnWidth","maxColumnWidth","_widthStep","widthStep","_stepUp","_stepDown","nextLevel","addTouchEvents","platform","maxTouchPoints","_touch_events","getTaskDND","tasksDnD","touch_feedback","touch_feedback_duration","vibrate","touchHandlers","names","dblclicktime","actionMode","scrollMode","actionStart","longTapTimer","currentDndId","dndNodes","targetView","multiTouchEvents","newScrollState","block_action","allViews","_locate_css","taskNode","dummy","BaseControl","BaseConstrutor","htmlHelpers","getHtmlSelect","_attributes","getHtmlOption","_getHtmlContainer","getHtmlButton","getHtmlDiv","getHtmlLabel","getHtmlInput","_getHtmlAttributes","ResourcesControlConstructor","Super","SelectControl","sns","_dhx_onchange","onchange","_focus","ParentControlConstructor","ParentControl","_display","allow_root","root_label","form_blocks","tmpDom","newOptions","onselect","TemplateControl","TextareaControl","_get_input","TimeControl","getTimePicker","sectionClassName","_time_format_order","auto_end_date","_update_lightbox_select","_fill_lightbox_select","_resolve_default_mapping","selects","getTimePickerValue","autofix_end","_get_timepicker_step","SelectControlConstructor","CheckboxControl","single_value","checkboxes","checked","resArray","RadioControl","radio","default_value","DurationControl","_getStartDate","_getDuration","singleDate","lightboxDurationInputAttrString","durationInputClass","duration_val","inps","btns","endspan","_calc_date","_change_duration","charCode","ResourcesControl","ConstraintControl","isNonTimedConstraint","toggleTimeSelect","timeSelects","typeValue","isNonTimed","disabled","typeSelect","_eventsInitialized","constraintDate","constraintType","getConstraintType","TypeselectControl","typeKey","oldOnChange","_lightbox_current_type","BaselineControl","_generateBaselineRow","durationLabel","deleteLabel","durationEl","deleteButton","baselineRow","section","baselineNode","baselineId","dataset","updatedBaseline","button_click","_get_typed_lightbox_config","_lightbox_methods","_lightbox_root","showCover","_fill_lightbox","_setLbPosition","lightboxVisibleAttr","getLabel","list_name","_lightbox_type","lightboxDiv","fullWidth","ds","classNames","cspEnvironment","salesforceEnvironment","_lightbox","_is_lightbox_timepicker","wide_form","getHtmlButtons","lightboxAttr","onmousedown","_ready_to_dnd","ontouchstart","onselectstart","cursor","_init_dnd_events","show_cover","_cover","_render_sections","backup_overflow","labelBlock","inputBlock","inputId","_init_lightbox_events","block","_center_lightbox","rootElement","_move_while_dnd","_finish_dnd","_get_type_name","type_value","floatRight","lightboxButtonAttrString","getTimeFormat","time_format","getHtmlTimePickerOptions","start_year","end_year","tdate","timeFormat","year_range","_time_values","lightbox_events","_save_lightbox","_cancel_lightbox","sec","buttonTarget","getLightboxValues","time_optional","duration_optional","lightboxHiddenAttr","hideCover","_custom_lightbox","_set_lightbox_values","lightboxHeader","lightbox_header","getLightboxSection","get_template_control","control","get_select_control","get_textarea_control","get_time_control","_dnd_start_lb","gantt_unselectable","lb","_lb_start","ariaAttrs","limit_time_select","first_hour","last_hour","lightboxSelectAttrString","mapOffset","checkbox","constraint","typeselect","oldType","ui","codeHelpers.arrayFind","domEventScope","uiApi","getTimeline","getGrid","getBaseCell","baseCell","getAttachedScrollbar","DEFAULT_VALUE","tryCall","getTaskTop","getTaskBarHeight","domAttr","getLinkNode","oldH","oldV","verticalViews","horizontalViews","commonViews","viewId","newV","newH","date_x","scroll_to","leftPos","_scroll_state","timelineCell","x_pos","y_pos","x_inner","y_inner","scrollVer","scrollHor","horState","verState","cellName","horizontalScroll","verticalScroll","createLayoutFacade","resetSkin","monitorThemeChange","_addThemeClass","setSkin","monitorIntervalId","csstheme","skyblue","lightbox_additional_height","dark","meadow","terrace","broadway","_config_buttons_left","_config_buttons_right","material","indx","zoom","_extend_to_optional","lightbox_block","optional_time","update_block","button_text","htmlTags","extraSpaces","stripHTMLLite","htmlText","singleQuotes","escapeQuotes","getAttributeString","_taskCommonAttr","linkTypes","toStart","fromStart","gridSeparatorAttr","buttonName","role","tabindex","headerText","time_option","buttonLabel","targetAttribute","_locateHTML","firstTask","domHelpers.getScrollSize","availablePlugins","critical_path","grouping","groupBy","overlay","_load_url","cl","_load_type"],"mappings":"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","x_google_ignoreList":[44]}
\ No newline at end of file
diff --git a/codebase/dhtmlxgantt.js b/codebase/dhtmlxgantt.js
index b831ebf..a774bc9 100644
--- a/codebase/dhtmlxgantt.js
+++ b/codebase/dhtmlxgantt.js
@@ -1,6 +1,6 @@
(function(yt,z){typeof exports=="object"&&typeof module<"u"?z(exports):typeof define=="function"&&define.amd?define(["exports"],z):z((yt=typeof globalThis<"u"?globalThis:yt||self).dhtmlxgantt={})})(this,function(yt){"use strict";/** @license
-dhtmlxGantt v.9.0.0 Standard
+dhtmlxGantt v.9.0.1 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
@@ -8,7 +8,7 @@ To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), ple
(c) XB Software
-*/function z(t){var e=0,n=0,i=0,a=0;if(t.getBoundingClientRect){var r=t.getBoundingClientRect(),s=document.body,o=document.documentElement||document.body.parentNode||document.body,l=window.pageYOffset||o.scrollTop||s.scrollTop,d=window.pageXOffset||o.scrollLeft||s.scrollLeft,c=o.clientTop||s.clientTop||0,u=o.clientLeft||s.clientLeft||0;e=r.top+l-c,n=r.left+d-u,i=document.body.offsetWidth-r.right,a=document.body.offsetHeight-r.bottom}else{for(;t;)e+=parseInt(t.offsetTop,10),n+=parseInt(t.offsetLeft,10),t=t.offsetParent;i=document.body.offsetWidth-t.offsetWidth-n,a=document.body.offsetHeight-t.offsetHeight-e}return{y:Math.round(e),x:Math.round(n),width:t.offsetWidth,height:t.offsetHeight,right:Math.round(i),bottom:Math.round(a)}}function Tn(t){var e=!1,n=!1;if(window.getComputedStyle){var i=window.getComputedStyle(t,null);e=i.display,n=i.visibility}else t.currentStyle&&(e=t.currentStyle.display,n=t.currentStyle.visibility);return e!="none"&&n!="hidden"}function Cn(t){return!isNaN(t.getAttribute("tabindex"))&&1*t.getAttribute("tabindex")>=0}function En(t){return!{a:!0,area:!0}[t.nodeName.loLowerCase()]||!!t.getAttribute("href")}function Dn(t){return!{input:!0,select:!0,textarea:!0,button:!0,object:!0}[t.nodeName.toLowerCase()]||!t.hasAttribute("disabled")}function Zt(t){for(var e=t.querySelectorAll(["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"].join(", ")),n=Array.prototype.slice.call(e,0),i=0;i=0){if(!n)return i;var s=r===0||!te(a.charAt(r-1)),o=r+e.length>=a.length||!te(a.charAt(r+e.length));if(s&&o)return i}}i=i.parentNode}return null}function ot(t,e){var n=document.documentElement,i=z(e);return{x:t.clientX+n.scrollLeft-n.clientLeft-i.x+e.scrollLeft,y:t.clientY+n.scrollTop-n.clientTop-i.y+e.scrollTop}}function ee(t,e){const n=z(t),i=z(e);return{x:n.x-i.x,y:n.y-i.y}}function Y(t,e){if(!t||!e)return!1;for(;t&&t!=e;)t=t.parentNode;return t===e}function lt(t,e){if(t.closest)return t.closest(e);if(t.matches||t.msMatchesSelector||t.webkitMatchesSelector){var n=t;if(!document.documentElement.contains(n))return null;do{if((n.matches||n.msMatchesSelector||n.webkitMatchesSelector).call(n,e))return n;n=n.parentElement||n.parentNode}while(n!==null&&n.nodeType===1);return null}return console.error("Your browser is not supported"),null}function Ie(t){for(;t;){if(t.offsetWidth>0&&t.offsetHeight>0)return t;t=t.parentElement}return null}function Me(){return document.head.createShadowRoot||document.head.attachShadow}function ne(){var t=document.activeElement;return t.shadowRoot&&(t=t.shadowRoot.activeElement),t===document.body&&document.getSelection&&(t=document.getSelection().focusNode||document.body),t}function vt(t){if(!t||!Me())return document.body;for(;t.parentNode&&(t=t.parentNode);)if(t instanceof ShadowRoot)return t.host;return document.body}const Ne=Object.freeze(Object.defineProperty({__proto__:null,addClassName:bt,closest:lt,getActiveElement:ne,getChildNodes:Ae,getClassName:K,getClosestSizedElement:Ie,getFocusableNodes:Zt,getNodePosition:z,getRelativeEventPosition:ot,getRelativeNodePosition:ee,getRootNode:vt,getScrollSize:Ce,getTargetNode:mt,hasClass:function(t,e){return"classList"in t?t.classList.contains(e):new RegExp("\\b"+e+"\\b").test(t.className)},hasShadowParent:function(t){return!!vt(t)},insertNode:Ee,isChildOf:Y,isShadowDomSupported:Me,locateAttribute:tt,locateClassName:ht,removeClassName:Ht,removeNode:De,toNode:Qt},Symbol.toStringTag,{value:"Module"})),dt=typeof window<"u"?window:global;let An=class{constructor(t){this._mouseDown=!1,this._gantt=t,this._domEvents=t._createDomEventScope()}attach(t,e,n){const i=this._gantt,a=t.getViewPort();this._originPosition=dt.getComputedStyle(a).display,this._restoreOriginPosition=()=>{a.style.position=this._originPosition},this._originPosition==="static"&&(a.style.position="relative");const r=i.$services.getService("state");r.registerProvider("clickDrag",()=>({autoscroll:!1}));let s=null;const o=()=>{s&&(this._mouseDown=!0,t.setStart(i.copy(s)),t.setPosition(i.copy(s)),t.setEnd(i.copy(s)),s=null)};this._domEvents.attach(a,"mousedown",d=>{s=null;let c=".gantt_task_line, .gantt_task_link";n!==void 0&&(c=n instanceof Array?n.join(", "):n),c&&i.utils.dom.closest(d.target,c)||(r.registerProvider("clickDrag",()=>({autoscroll:this._mouseDown})),e&&d[e]!==!0||(s=this._getCoordinates(d,t)))});const l=vt(i.$root)||document.body;this._domEvents.attach(l,"mouseup",d=>{if(s=null,(!e||d[e]===!0)&&this._mouseDown===!0){this._mouseDown=!1;const c=this._getCoordinates(d,t);t.dragEnd(c)}}),this._domEvents.attach(a,"mousemove",d=>{if(e&&d[e]!==!0)return;const c=this._gantt.ext.clickDrag,u=(this._gantt.config.drag_timeline||{}).useKey;if(c&&u&&!e&&d[u])return;let h=null;if(!this._mouseDown&&s)return h=this._getCoordinates(d,t),void(Math.abs(s.relative.left-h.relative.left)>5&&o());this._mouseDown===!0&&(h=this._getCoordinates(d,t),t.setEnd(h),t.render())})}detach(){const t=this._gantt;this._domEvents.detachAll(),this._restoreOriginPosition&&this._restoreOriginPosition(),t.$services.getService("state").unregisterProvider("clickDrag")}destructor(){this.detach()}_getCoordinates(t,e){const n=e.getViewPort(),i=n.getBoundingClientRect(),{clientX:a,clientY:r}=t;return{absolute:{left:a,top:r},relative:{left:a-i.left+n.scrollLeft,top:r-i.top+n.scrollTop}}}};var Le=function(){this._silent_mode=!1,this.listeners={}};Le.prototype={_silentStart:function(){this._silent_mode=!0},_silentEnd:function(){this._silent_mode=!1}};var In=function(t){var e={},n=0,i=function(){var a=!0;for(var r in e){var s=e[r].apply(t,arguments);a=a&&s}return a};return i.addEvent=function(a,r){if(typeof a=="function"){var s;if(r&&r.id?s=r.id:(s=n,n++),r&&r.once){var o=a;a=function(){o(),i.removeEvent(s)}}return e[s]=a,s}return!1},i.removeEvent=function(a){delete e[a]},i.clear=function(){e={}},i};function nt(t){var e=new Le;t.attachEvent=function(n,i,a){n="ev_"+n.toLowerCase(),e.listeners[n]||(e.listeners[n]=In(this)),a&&a.thisObject&&(i=i.bind(a.thisObject));var r=n+":"+e.listeners[n].addEvent(i,a);return a&&a.id&&(r=a.id),r},t.attachAll=function(n){this.attachEvent("listen_all",n)},t.callEvent=function(n,i){if(e._silent_mode)return!0;var a="ev_"+n.toLowerCase(),r=e.listeners;return r.ev_listen_all&&r.ev_listen_all.apply(this,[n].concat(i)),!r[a]||r[a].apply(this,i)},t.checkEvent=function(n){return!!e.listeners["ev_"+n.toLowerCase()]},t.detachEvent=function(n){if(n){var i=e.listeners;for(var a in i)i[a].removeEvent(n);var r=n.split(":");if(i=e.listeners,r.length===2){var s=r[0],o=r[1];i[s]&&i[s].removeEvent(o)}}},t.detachAllEvents=function(){for(var n in e.listeners)e.listeners[n].clear()}}var Pe={second:1,minute:60,hour:3600,day:86400,week:604800,month:2592e3,quarter:7776e3,year:31536e3};function Bt(t){return Pe[t]||Pe.hour}function kt(t,e){if(t.forEach)t.forEach(e);else for(var n=t.slice(),i=0;ie)){for(;+t[n]==+t[n+1];)n++;return n}if(!isNaN(a)&&a{this._el||(this._el=document.createElement("div"));const o=this._el,l=Math.min(r.relative.top,s.relative.top),d=Math.max(r.relative.top,s.relative.top),c=Math.min(r.relative.left,s.relative.left),u=Math.max(r.relative.left,s.relative.left);if(this._singleRow){const h=this._getTaskPositionByTop(this._startPoint.relative.top);o.style.height=h.height+"px",o.style.top=h.top+"px"}else o.style.height=Math.abs(d-l)+"px",o.style.top=l+"px";return o.style.width=Math.abs(u-c)+"px",o.style.left=c+"px",o},this._gantt=n,this._view=i,this._viewPort=e.viewPort,this._el.classList.add(e.className),typeof e.callback=="function"&&(this._callback=e.callback),this.render=()=>{let r;r=e.render?e.render(this._startPoint,this._endPoint):this.defaultRender(this._startPoint,this._endPoint),r!==this._el&&(this._el&&this._el.parentNode&&this._el.parentNode.removeChild(this._el),this._el=r),e.className!==""&&this._el.classList.add(e.className),this.draw()},(a=this._viewPort).attachEvent&&a.detachEvent||nt(this._viewPort),this._singleRow=e.singleRow,this._useRequestAnimationFrame=e.useRequestAnimationFrame}draw(){if(this._useRequestAnimationFrame)return requestAnimationFrame(()=>{this._viewPort.appendChild(this.getElement())});this._viewPort.appendChild(this.getElement())}clear(){if(this._useRequestAnimationFrame)return requestAnimationFrame(()=>{this._el.parentNode&&this._viewPort.removeChild(this._el)});this._el.parentNode&&this._viewPort.removeChild(this._el)}getElement(){return this._el}getViewPort(){return this._viewPort}setStart(e){const n=this._gantt;this._startPoint=e,this._startDate=n.dateFromPos(this._startPoint.relative.left),this._viewPort.callEvent("onBeforeDrag",[this._startPoint])}setEnd(e){const n=this._gantt;if(this._endPoint=e,this._singleRow){const i=this._getTaskPositionByTop(this._startPoint.relative.top);this._endPoint.relative.top=i.top}this._endDate=n.dateFromPos(this._endPoint.relative.left),this._startPoint.relative.left>this._endPoint.relative.left&&(this._positionPoint={relative:{left:this._endPoint.relative.left,top:this._positionPoint.relative.top},absolute:{left:this._endPoint.absolute.left,top:this._positionPoint.absolute.top}}),this._startPoint.relative.top>this._endPoint.relative.top&&(this._positionPoint={relative:{left:this._positionPoint.relative.left,top:this._endPoint.relative.top},absolute:{left:this._positionPoint.absolute.left,top:this._endPoint.absolute.top}}),this._viewPort.callEvent("onDrag",[this._startPoint,this._endPoint])}setPosition(e){this._positionPoint=e}dragEnd(e){const n=this._gantt;e.relative.left<0&&(e.relative.left=0),this._viewPort.callEvent("onBeforeDragEnd",[this._startPoint,e]),this.setEnd(e),this._endDate=this._endDate||n.getState().max_date,this._startDate.valueOf()>this._endDate.valueOf()&&([this._startDate,this._endDate]=[this._endDate,this._startDate]),this.clear();const i=n.getTaskByTime(this._startDate,this._endDate),a=this._getTasksByTop(this._startPoint.relative.top,this._endPoint.relative.top);this._viewPort.callEvent("onDragEnd",[this._startPoint,this._endPoint]),this._callback&&this._callback(this._startPoint,this._endPoint,this._startDate,this._endDate,i,a)}getInBounds(){return this._singleRow}_getTasksByTop(e,n){const i=this._gantt;let a=e,r=n;e>n&&(a=n,r=e);const s=this._getTaskPositionByTop(a).index,o=this._getTaskPositionByTop(r).index,l=[];for(let d=s;d<=o;d++)i.getTaskByIndex(d)&&l.push(i.getTaskByIndex(d));return l}_getTaskPositionByTop(e){const n=this._gantt,i=this._view,a=i.getItemIndexByTopPosition(e),r=n.getTaskByIndex(a);if(r){const s=i.getItemHeight(r.id);return{top:i.getItemTop(r.id)||0,height:s||0,index:a}}{const s=i.getTotalHeight();return{top:e>s?s:0,height:n.config.row_height,index:e>s?n.getTaskCount():0}}}}class ae{constructor(e){this._mouseDown=!1,this._calculateDirectionVector=()=>{if(this._trace.length>=10){const n=this._trace.slice(this._trace.length-10),i=[];for(let r=1;r{a.x+=r.x,a.y+=r.y}),{magnitude:Math.sqrt(a.x*a.x+a.y*a.y),angleDegrees:180*Math.atan2(Math.abs(a.y),Math.abs(a.x))/Math.PI}}return null},this._applyDndReadyStyles=()=>{this._timeline.$task.classList.add("gantt_timeline_move_available")},this._clearDndReadyStyles=()=>{this._timeline.$task.classList.remove("gantt_timeline_move_available")},this._getScrollPosition=n=>{const i=this._gantt;return{x:i.$ui.getView(n.$config.scrollX).getScrollState().position,y:i.$ui.getView(n.$config.scrollY).getScrollState().position}},this._countNewScrollPosition=n=>{const i=this._calculateDirectionVector();let a=this._startPoint.x-n.x,r=this._startPoint.y-n.y;return i&&(i.angleDegrees<15?r=0:i.angleDegrees>75&&(a=0)),{x:this._scrollState.x+a,y:this._scrollState.y+r}},this._setScrollPosition=(n,i)=>{const a=this._gantt;requestAnimationFrame(()=>{a.scrollLayoutCell(n.$id,i.x,i.y)})},this._stopDrag=n=>{const i=this._gantt;if(this._trace=[],i.$root.classList.remove("gantt_noselect"),this._originalReadonly!==void 0&&(i.config.readonly=this._originalReadonly,this._mouseDown&&i.config.drag_timeline&&i.config.drag_timeline.render&&i.render()),this._originAutoscroll!==void 0&&(i.config.autoscroll=this._originAutoscroll),i.config.drag_timeline){const{useKey:a}=i.config.drag_timeline;if(a&&n[a]!==!0)return}this._mouseDown=!1},this._startDrag=n=>{const i=this._gantt;this._originAutoscroll=i.config.autoscroll,i.config.autoscroll=!1,i.$root.classList.add("gantt_noselect"),this._originalReadonly=i.config.readonly,i.config.readonly=!0,i.config.drag_timeline&&i.config.drag_timeline.render&&i.render(),this._trace=[],this._mouseDown=!0;const{x:a,y:r}=this._getScrollPosition(this._timeline);this._scrollState={x:a,y:r},this._startPoint={x:n.clientX,y:n.clientY},this._trace.push(this._startPoint)},this._gantt=e,this._domEvents=e._createDomEventScope(),this._trace=[]}static create(e){return new ae(e)}destructor(){this._domEvents.detachAll()}attach(e){this._timeline=e;const n=this._gantt;this._domEvents.attach(e.$task,"mousedown",i=>{if(!n.config.drag_timeline)return;const{useKey:a,ignore:r,enabled:s}=n.config.drag_timeline;if(s===!1)return;let o=".gantt_task_line, .gantt_task_link";r!==void 0&&(o=r instanceof Array?r.join(", "):r),o&&n.utils.dom.closest(i.target,o)||a&&i[a]!==!0||this._startDrag(i)}),this._domEvents.attach(document,"keydown",i=>{if(!n.config.drag_timeline)return;const{useKey:a}=n.config.drag_timeline;a&&i[a]===!0&&this._applyDndReadyStyles()}),this._domEvents.attach(document,"keyup",i=>{if(!n.config.drag_timeline)return;const{useKey:a}=n.config.drag_timeline;a&&i[a]===!1&&(this._clearDndReadyStyles(),this._stopDrag(i))}),this._domEvents.attach(document,"mouseup",i=>{this._stopDrag(i)}),this._domEvents.attach(n.$root,"mouseup",i=>{this._stopDrag(i)}),this._domEvents.attach(document,"mouseleave",i=>{this._stopDrag(i)}),this._domEvents.attach(n.$root,"mouseleave",i=>{this._stopDrag(i)}),this._domEvents.attach(n.$root,"mousemove",i=>{if(!n.config.drag_timeline)return;const{useKey:a}=n.config.drag_timeline;if(a&&i[a]!==!0)return;const r=this._gantt.ext.clickDrag,s=(this._gantt.config.click_drag||{}).useKey;if((!r||!s||a||!i[s])&&this._mouseDown===!0){this._trace.push({x:i.clientX,y:i.clientY});const o=this._countNewScrollPosition({x:i.clientX,y:i.clientY});this._setScrollPosition(e,o),this._scrollState=o,this._startPoint={x:i.clientX,y:i.clientY}}})}}function Ln(t){(function(){var e=[];function n(){return!!e.length}function i(d){setTimeout(function(){n()||t.$destroyed||t.focus()},1)}function a(d){t.eventRemove(d,"keydown",s),t.event(d,"keydown",s),e.push(d)}function r(){var d=e.pop();d&&t.eventRemove(d,"keydown",s),i()}function s(d){var c=d.currentTarget;c==e[e.length-1]&&t.$keyboardNavigation.trapFocus(c,d)}function o(){a(t.getLightbox())}t.attachEvent("onLightbox",o),t.attachEvent("onAfterLightbox",r),t.attachEvent("onLightboxChange",function(){r(),o()}),t.attachEvent("onAfterQuickInfo",function(){i()}),t.attachEvent("onMessagePopup",function(d){l=t.utils.dom.getActiveElement(),a(d)}),t.attachEvent("onAfterMessagePopup",function(){r(),setTimeout(function(){l&&(l.focus(),l=null)},1)});var l=null;t.$keyboardNavigation.isModal=n})()}class Pn{constructor(e){this.show=(n,i)=>{i===void 0?this._showForTask(n):this._showAtCoordinates(n,i)},this.hide=n=>{const i=this._gantt,a=this._quickInfoBox;this._quickInfoBoxId=0;const r=this._quickInfoTask;if(this._quickInfoTask=null,a&&a.parentNode){if(i.config.quick_info_detached)return i.callEvent("onAfterQuickInfo",[r]),a.parentNode.removeChild(a);a.className+=" gantt_qi_hidden",a.style.right==="auto"?a.style.left="-350px":a.style.right="-350px",n&&(a.style.left=a.style.right="",a.parentNode.removeChild(a)),i.callEvent("onAfterQuickInfo",[r])}},this.getNode=()=>this._quickInfoBox?this._quickInfoBox:null,this.setContainer=n=>{n&&(this._container=typeof n=="string"?document.getElementById(n):n)},this.setContent=n=>{const i=this._gantt,a={taskId:null,header:{title:"",date:""},content:"",buttons:i.config.quickinfo_buttons};n||(n=a),n.taskId||(n.taskId=a.taskId),n.header||(n.header=a.header),n.header.title||(n.header.title=a.header.title),n.header.date||(n.header.date=a.header.date),n.content||(n.content=a.content),n.buttons||(n.buttons=a.buttons);let r=this.getNode();r||(r=this._createQuickInfoElement()),n.taskId&&(this._quickInfoBoxId=n.taskId);const s=r.querySelector(".gantt_cal_qi_title"),o=s.querySelector(".gantt_cal_qi_tcontent"),l=s.querySelector(".gantt_cal_qi_tdate"),d=r.querySelector(".gantt_cal_qi_content"),c=r.querySelector(".gantt_cal_qi_controls");i._waiAria.quickInfoHeader(r,[n.header.title,n.header.date].join(" ")),o.innerHTML=n.header.title,l.innerHTML=n.header.date,n.header.title||n.header.date?s.style.display="":s.style.display="none",d.innerHTML=n.content;const u=n.buttons;u.length?c.style.display="":c.style.display="none";let h="";for(let g=0;g
+*/function z(t){var e=0,n=0,i=0,a=0;if(t.getBoundingClientRect){var r=t.getBoundingClientRect(),s=document.body,o=document.documentElement||document.body.parentNode||document.body,l=window.pageYOffset||o.scrollTop||s.scrollTop,d=window.pageXOffset||o.scrollLeft||s.scrollLeft,c=o.clientTop||s.clientTop||0,u=o.clientLeft||s.clientLeft||0;e=r.top+l-c,n=r.left+d-u,i=document.body.offsetWidth-r.right,a=document.body.offsetHeight-r.bottom}else{for(;t;)e+=parseInt(t.offsetTop,10),n+=parseInt(t.offsetLeft,10),t=t.offsetParent;i=document.body.offsetWidth-t.offsetWidth-n,a=document.body.offsetHeight-t.offsetHeight-e}return{y:Math.round(e),x:Math.round(n),width:t.offsetWidth,height:t.offsetHeight,right:Math.round(i),bottom:Math.round(a)}}function Tn(t){var e=!1,n=!1;if(window.getComputedStyle){var i=window.getComputedStyle(t,null);e=i.display,n=i.visibility}else t.currentStyle&&(e=t.currentStyle.display,n=t.currentStyle.visibility);return e!="none"&&n!="hidden"}function Cn(t){return!isNaN(t.getAttribute("tabindex"))&&1*t.getAttribute("tabindex")>=0}function En(t){return!{a:!0,area:!0}[t.nodeName.loLowerCase()]||!!t.getAttribute("href")}function Dn(t){return!{input:!0,select:!0,textarea:!0,button:!0,object:!0}[t.nodeName.toLowerCase()]||!t.hasAttribute("disabled")}function Zt(t){for(var e=t.querySelectorAll(["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"].join(", ")),n=Array.prototype.slice.call(e,0),i=0;i=0){if(!n)return i;var s=r===0||!te(a.charAt(r-1)),o=r+e.length>=a.length||!te(a.charAt(r+e.length));if(s&&o)return i}}i=i.parentNode}return null}function nt(t,e){var n=document.documentElement,i=z(e);return{x:t.clientX+n.scrollLeft-n.clientLeft-i.x+e.scrollLeft,y:t.clientY+n.scrollTop-n.clientTop-i.y+e.scrollTop}}function Ae(t,e){const n=z(t),i=z(e);return{x:n.x-i.x,y:n.y-i.y}}function Y(t,e){if(!t||!e)return!1;for(;t&&t!=e;)t=t.parentNode;return t===e}function lt(t,e){if(t.closest)return t.closest(e);if(t.matches||t.msMatchesSelector||t.webkitMatchesSelector){var n=t;if(!document.documentElement.contains(n))return null;do{if((n.matches||n.msMatchesSelector||n.webkitMatchesSelector).call(n,e))return n;n=n.parentElement||n.parentNode}while(n!==null&&n.nodeType===1);return null}return console.error("Your browser is not supported"),null}function Ie(t){for(;t;){if(t.offsetWidth>0&&t.offsetHeight>0)return t;t=t.parentElement}return null}function Me(){return document.head.createShadowRoot||document.head.attachShadow}function ee(){var t=document.activeElement;return t.shadowRoot&&(t=t.shadowRoot.activeElement),t===document.body&&document.getSelection&&(t=document.getSelection().focusNode||document.body),t}function vt(t){if(!t||!Me())return document.body;for(;t.parentNode&&(t=t.parentNode);)if(t instanceof ShadowRoot)return t.host;return document.body}const Ne=Object.freeze(Object.defineProperty({__proto__:null,addClassName:bt,closest:lt,getActiveElement:ee,getChildNodes:De,getClassName:K,getClosestSizedElement:Ie,getFocusableNodes:Zt,getNodePosition:z,getRelativeEventPosition:nt,getRelativeNodePosition:Ae,getRootNode:vt,getScrollSize:Te,getTargetNode:mt,hasClass:function(t,e){return"classList"in t?t.classList.contains(e):new RegExp("\\b"+e+"\\b").test(t.className)},hasShadowParent:function(t){return!!vt(t)},insertNode:Ce,isChildOf:Y,isShadowDomSupported:Me,locateAttribute:tt,locateClassName:ht,removeClassName:Ht,removeNode:Ee,toNode:Qt},Symbol.toStringTag,{value:"Module"})),dt=typeof window<"u"?window:global;let An=class{constructor(t){this._mouseDown=!1,this._gantt=t,this._domEvents=t._createDomEventScope()}attach(t,e,n){const i=this._gantt,a=t.getViewPort();this._originPosition=dt.getComputedStyle(a).display,this._restoreOriginPosition=()=>{a.style.position=this._originPosition},this._originPosition==="static"&&(a.style.position="relative");const r=i.$services.getService("state");r.registerProvider("clickDrag",()=>({autoscroll:!1}));let s=null;const o=()=>{s&&(this._mouseDown=!0,t.setStart(i.copy(s)),t.setPosition(i.copy(s)),t.setEnd(i.copy(s)),s=null)};this._domEvents.attach(a,"mousedown",d=>{s=null;let c=".gantt_task_line, .gantt_task_link";n!==void 0&&(c=n instanceof Array?n.join(", "):n),c&&i.utils.dom.closest(d.target,c)||(r.registerProvider("clickDrag",()=>({autoscroll:this._mouseDown})),e&&d[e]!==!0||(s=this._getCoordinates(d,t)))});const l=vt(i.$root)||document.body;this._domEvents.attach(l,"mouseup",d=>{if(s=null,(!e||d[e]===!0)&&this._mouseDown===!0){this._mouseDown=!1;const c=this._getCoordinates(d,t);t.dragEnd(c)}}),this._domEvents.attach(a,"mousemove",d=>{if(e&&d[e]!==!0)return;const c=this._gantt.ext.clickDrag,u=(this._gantt.config.drag_timeline||{}).useKey;if(c&&u&&!e&&d[u])return;let h=null;if(!this._mouseDown&&s)return h=this._getCoordinates(d,t),void(Math.abs(s.relative.left-h.relative.left)>5&&o());this._mouseDown===!0&&(h=this._getCoordinates(d,t),t.setEnd(h),t.render())})}detach(){const t=this._gantt;this._domEvents.detachAll(),this._restoreOriginPosition&&this._restoreOriginPosition(),t.$services.getService("state").unregisterProvider("clickDrag")}destructor(){this.detach()}_getCoordinates(t,e){const n=e.getViewPort(),i=n.getBoundingClientRect(),{clientX:a,clientY:r}=t;return{absolute:{left:a,top:r},relative:{left:a-i.left+n.scrollLeft,top:r-i.top+n.scrollTop}}}};var Le=function(){this._silent_mode=!1,this.listeners={}};Le.prototype={_silentStart:function(){this._silent_mode=!0},_silentEnd:function(){this._silent_mode=!1}};var In=function(t){var e={},n=0,i=function(){var a=!0;for(var r in e){var s=e[r].apply(t,arguments);a=a&&s}return a};return i.addEvent=function(a,r){if(typeof a=="function"){var s;if(r&&r.id?s=r.id:(s=n,n++),r&&r.once){var o=a;a=function(){o(),i.removeEvent(s)}}return e[s]=a,s}return!1},i.removeEvent=function(a){delete e[a]},i.clear=function(){e={}},i};function it(t){var e=new Le;t.attachEvent=function(n,i,a){n="ev_"+n.toLowerCase(),e.listeners[n]||(e.listeners[n]=In(this)),a&&a.thisObject&&(i=i.bind(a.thisObject));var r=n+":"+e.listeners[n].addEvent(i,a);return a&&a.id&&(r=a.id),r},t.attachAll=function(n){this.attachEvent("listen_all",n)},t.callEvent=function(n,i){if(e._silent_mode)return!0;var a="ev_"+n.toLowerCase(),r=e.listeners;return r.ev_listen_all&&r.ev_listen_all.apply(this,[n].concat(i)),!r[a]||r[a].apply(this,i)},t.checkEvent=function(n){return!!e.listeners["ev_"+n.toLowerCase()]},t.detachEvent=function(n){if(n){var i=e.listeners;for(var a in i)i[a].removeEvent(n);var r=n.split(":");if(i=e.listeners,r.length===2){var s=r[0],o=r[1];i[s]&&i[s].removeEvent(o)}}},t.detachAllEvents=function(){for(var n in e.listeners)e.listeners[n].clear()}}var Pe={second:1,minute:60,hour:3600,day:86400,week:604800,month:2592e3,quarter:7776e3,year:31536e3};function Bt(t){return Pe[t]||Pe.hour}function kt(t,e){if(t.forEach)t.forEach(e);else for(var n=t.slice(),i=0;ie)){for(;+t[n]==+t[n+1];)n++;return n}if(!isNaN(a)&&a{this._el||(this._el=document.createElement("div"));const o=this._el,l=Math.min(r.relative.top,s.relative.top),d=Math.max(r.relative.top,s.relative.top),c=Math.min(r.relative.left,s.relative.left),u=Math.max(r.relative.left,s.relative.left);if(this._singleRow){const h=this._getTaskPositionByTop(this._startPoint.relative.top);o.style.height=h.height+"px",o.style.top=h.top+"px"}else o.style.height=Math.abs(d-l)+"px",o.style.top=l+"px";return o.style.width=Math.abs(u-c)+"px",o.style.left=c+"px",o},this._gantt=n,this._view=i,this._viewPort=e.viewPort,this._el.classList.add(e.className),typeof e.callback=="function"&&(this._callback=e.callback),this.render=()=>{let r;r=e.render?e.render(this._startPoint,this._endPoint):this.defaultRender(this._startPoint,this._endPoint),r!==this._el&&(this._el&&this._el.parentNode&&this._el.parentNode.removeChild(this._el),this._el=r),e.className!==""&&this._el.classList.add(e.className),this.draw()},(a=this._viewPort).attachEvent&&a.detachEvent||it(this._viewPort),this._singleRow=e.singleRow,this._useRequestAnimationFrame=e.useRequestAnimationFrame}draw(){if(this._useRequestAnimationFrame)return requestAnimationFrame(()=>{this._viewPort.appendChild(this.getElement())});this._viewPort.appendChild(this.getElement())}clear(){if(this._useRequestAnimationFrame)return requestAnimationFrame(()=>{this._el.parentNode&&this._viewPort.removeChild(this._el)});this._el.parentNode&&this._viewPort.removeChild(this._el)}getElement(){return this._el}getViewPort(){return this._viewPort}setStart(e){const n=this._gantt;this._startPoint=e,this._startDate=n.dateFromPos(this._startPoint.relative.left),this._viewPort.callEvent("onBeforeDrag",[this._startPoint])}setEnd(e){const n=this._gantt;if(this._endPoint=e,this._singleRow){const i=this._getTaskPositionByTop(this._startPoint.relative.top);this._endPoint.relative.top=i.top}this._endDate=n.dateFromPos(this._endPoint.relative.left),this._startPoint.relative.left>this._endPoint.relative.left&&(this._positionPoint={relative:{left:this._endPoint.relative.left,top:this._positionPoint.relative.top},absolute:{left:this._endPoint.absolute.left,top:this._positionPoint.absolute.top}}),this._startPoint.relative.top>this._endPoint.relative.top&&(this._positionPoint={relative:{left:this._positionPoint.relative.left,top:this._endPoint.relative.top},absolute:{left:this._positionPoint.absolute.left,top:this._endPoint.absolute.top}}),this._viewPort.callEvent("onDrag",[this._startPoint,this._endPoint])}setPosition(e){this._positionPoint=e}dragEnd(e){const n=this._gantt;e.relative.left<0&&(e.relative.left=0),this._viewPort.callEvent("onBeforeDragEnd",[this._startPoint,e]),this.setEnd(e),this._endDate=this._endDate||n.getState().max_date,this._startDate.valueOf()>this._endDate.valueOf()&&([this._startDate,this._endDate]=[this._endDate,this._startDate]),this.clear();const i=n.getTaskByTime(this._startDate,this._endDate),a=this._getTasksByTop(this._startPoint.relative.top,this._endPoint.relative.top);this._viewPort.callEvent("onDragEnd",[this._startPoint,this._endPoint]),this._callback&&this._callback(this._startPoint,this._endPoint,this._startDate,this._endDate,i,a)}getInBounds(){return this._singleRow}_getTasksByTop(e,n){const i=this._gantt;let a=e,r=n;e>n&&(a=n,r=e);const s=this._getTaskPositionByTop(a).index,o=this._getTaskPositionByTop(r).index,l=[];for(let d=s;d<=o;d++)i.getTaskByIndex(d)&&l.push(i.getTaskByIndex(d));return l}_getTaskPositionByTop(e){const n=this._gantt,i=this._view,a=i.getItemIndexByTopPosition(e),r=n.getTaskByIndex(a);if(r){const s=i.getItemHeight(r.id);return{top:i.getItemTop(r.id)||0,height:s||0,index:a}}{const s=i.getTotalHeight();return{top:e>s?s:0,height:n.config.row_height,index:e>s?n.getTaskCount():0}}}}class ie{constructor(e){this._mouseDown=!1,this._calculateDirectionVector=()=>{if(this._trace.length>=10){const n=this._trace.slice(this._trace.length-10),i=[];for(let r=1;r{a.x+=r.x,a.y+=r.y}),{magnitude:Math.sqrt(a.x*a.x+a.y*a.y),angleDegrees:180*Math.atan2(Math.abs(a.y),Math.abs(a.x))/Math.PI}}return null},this._applyDndReadyStyles=()=>{this._timeline.$task.classList.add("gantt_timeline_move_available")},this._clearDndReadyStyles=()=>{this._timeline.$task.classList.remove("gantt_timeline_move_available")},this._getScrollPosition=n=>{const i=this._gantt;return{x:i.$ui.getView(n.$config.scrollX).getScrollState().position,y:i.$ui.getView(n.$config.scrollY).getScrollState().position}},this._countNewScrollPosition=n=>{const i=this._calculateDirectionVector();let a=this._startPoint.x-n.x,r=this._startPoint.y-n.y;return i&&(i.angleDegrees<15?r=0:i.angleDegrees>75&&(a=0)),{x:this._scrollState.x+a,y:this._scrollState.y+r}},this._setScrollPosition=(n,i)=>{const a=this._gantt;requestAnimationFrame(()=>{a.scrollLayoutCell(n.$id,i.x,i.y)})},this._stopDrag=n=>{const i=this._gantt;if(this._trace=[],i.$root.classList.remove("gantt_noselect"),this._originalReadonly!==void 0&&(i.config.readonly=this._originalReadonly,this._mouseDown&&i.config.drag_timeline&&i.config.drag_timeline.render&&i.render()),this._originAutoscroll!==void 0&&(i.config.autoscroll=this._originAutoscroll),i.config.drag_timeline){const{useKey:a}=i.config.drag_timeline;if(a&&n[a]!==!0)return}this._mouseDown=!1},this._startDrag=n=>{const i=this._gantt;this._originAutoscroll=i.config.autoscroll,i.config.autoscroll=!1,i.$root.classList.add("gantt_noselect"),this._originalReadonly=i.config.readonly,i.config.readonly=!0,i.config.drag_timeline&&i.config.drag_timeline.render&&i.render(),this._trace=[],this._mouseDown=!0;const{x:a,y:r}=this._getScrollPosition(this._timeline);this._scrollState={x:a,y:r},this._startPoint={x:n.clientX,y:n.clientY},this._trace.push(this._startPoint)},this._gantt=e,this._domEvents=e._createDomEventScope(),this._trace=[]}static create(e){return new ie(e)}destructor(){this._domEvents.detachAll()}attach(e){this._timeline=e;const n=this._gantt;this._domEvents.attach(e.$task,"mousedown",i=>{if(!n.config.drag_timeline)return;const{useKey:a,ignore:r,enabled:s}=n.config.drag_timeline;if(s===!1)return;let o=".gantt_task_line, .gantt_task_link";r!==void 0&&(o=r instanceof Array?r.join(", "):r),o&&n.utils.dom.closest(i.target,o)||a&&i[a]!==!0||this._startDrag(i)}),this._domEvents.attach(document,"keydown",i=>{if(!n.config.drag_timeline)return;const{useKey:a}=n.config.drag_timeline;a&&i[a]===!0&&this._applyDndReadyStyles()}),this._domEvents.attach(document,"keyup",i=>{if(!n.config.drag_timeline)return;const{useKey:a}=n.config.drag_timeline;a&&i[a]===!1&&(this._clearDndReadyStyles(),this._stopDrag(i))}),this._domEvents.attach(document,"mouseup",i=>{this._stopDrag(i)}),this._domEvents.attach(n.$root,"mouseup",i=>{this._stopDrag(i)}),this._domEvents.attach(document,"mouseleave",i=>{this._stopDrag(i)}),this._domEvents.attach(n.$root,"mouseleave",i=>{this._stopDrag(i)}),this._domEvents.attach(n.$root,"mousemove",i=>{if(!n.config.drag_timeline)return;const{useKey:a}=n.config.drag_timeline;if(a&&i[a]!==!0)return;const r=this._gantt.ext.clickDrag,s=(this._gantt.config.click_drag||{}).useKey;if((!r||!s||a||!i[s])&&this._mouseDown===!0){this._trace.push({x:i.clientX,y:i.clientY});const o=this._countNewScrollPosition({x:i.clientX,y:i.clientY});this._setScrollPosition(e,o),this._scrollState=o,this._startPoint={x:i.clientX,y:i.clientY}}})}}function Ln(t){(function(){var e=[];function n(){return!!e.length}function i(d){setTimeout(function(){n()||t.$destroyed||t.focus()},1)}function a(d){t.eventRemove(d,"keydown",s),t.event(d,"keydown",s),e.push(d)}function r(){var d=e.pop();d&&t.eventRemove(d,"keydown",s),i()}function s(d){var c=d.currentTarget;c==e[e.length-1]&&t.$keyboardNavigation.trapFocus(c,d)}function o(){a(t.getLightbox())}t.attachEvent("onLightbox",o),t.attachEvent("onAfterLightbox",r),t.attachEvent("onLightboxChange",function(){r(),o()}),t.attachEvent("onAfterQuickInfo",function(){i()}),t.attachEvent("onMessagePopup",function(d){l=t.utils.dom.getActiveElement(),a(d)}),t.attachEvent("onAfterMessagePopup",function(){r(),setTimeout(function(){l&&(l.focus(),l=null)},1)});var l=null;t.$keyboardNavigation.isModal=n})()}class Pn{constructor(e){this.show=(n,i)=>{i===void 0?this._showForTask(n):this._showAtCoordinates(n,i)},this.hide=n=>{const i=this._gantt,a=this._quickInfoBox;this._quickInfoBoxId=0;const r=this._quickInfoTask;if(this._quickInfoTask=null,a&&a.parentNode){if(i.config.quick_info_detached)return i.callEvent("onAfterQuickInfo",[r]),a.parentNode.removeChild(a);a.className+=" gantt_qi_hidden",a.style.right==="auto"?a.style.left="-350px":a.style.right="-350px",n&&(a.style.left=a.style.right="",a.parentNode.removeChild(a)),i.callEvent("onAfterQuickInfo",[r])}},this.getNode=()=>this._quickInfoBox?this._quickInfoBox:null,this.setContainer=n=>{n&&(this._container=typeof n=="string"?document.getElementById(n):n)},this.setContent=n=>{const i=this._gantt,a={taskId:null,header:{title:"",date:""},content:"",buttons:i.config.quickinfo_buttons};n||(n=a),n.taskId||(n.taskId=a.taskId),n.header||(n.header=a.header),n.header.title||(n.header.title=a.header.title),n.header.date||(n.header.date=a.header.date),n.content||(n.content=a.content),n.buttons||(n.buttons=a.buttons);let r=this.getNode();r||(r=this._createQuickInfoElement()),n.taskId&&(this._quickInfoBoxId=n.taskId);const s=r.querySelector(".gantt_cal_qi_title"),o=s.querySelector(".gantt_cal_qi_tcontent"),l=s.querySelector(".gantt_cal_qi_tdate"),d=r.querySelector(".gantt_cal_qi_content"),c=r.querySelector(".gantt_cal_qi_controls");i._waiAria.quickInfoHeader(r,[n.header.title,n.header.date].join(" ")),o.innerHTML=n.header.title,l.innerHTML=n.header.date,n.header.title||n.header.date?s.style.display="":s.style.display="none",d.innerHTML=n.content;const u=n.buttons;u.length?c.style.display="":c.style.display="none";let h="";for(let g=0;g
${i.locale.labels[u[g]]}
`}c.innerHTML=h,i.eventRemove(r,"click",this._qiButtonClickHandler),i.eventRemove(r,"keypress",this._qiKeyPressHandler),i.event(r,"click",this._qiButtonClickHandler),i.event(r,"keypress",this._qiKeyPressHandler)},this._qiButtonClickHandler=n=>{this._qi_button_click(n.target)},this._qiKeyPressHandler=n=>{const i=n.which;i!==13&&i!==32||setTimeout(()=>{this._qi_button_click(n.target)},1)},this._gantt=e}_showAtCoordinates(e,n){this.hide(!0),this._quickInfoBoxId=0,this._quickInfoTask=null,this._quickInfoBox||(this._createQuickInfoElement(),this.setContent()),this._appendAtCoordinates(e,n),this._gantt.callEvent("onQuickInfo",[null])}_showForTask(e){const n=this._gantt;if(e===this._quickInfoBoxId&&n.utils.dom.isChildOf(this._quickInfoBox,document.body)||!n.config.show_quick_info)return;this.hide(!0);const i=this._getContainer(),a=this._get_event_counter_part(e,6,i.xViewport,i.yViewport);a&&(this._quickInfoBox=this._init_quick_info(e),this._quickInfoTask=e,this._quickInfoBox.className=this._prepare_quick_info_classname(e),this._fill_quick_data(e),this._show_quick_info(a,6),n.callEvent("onQuickInfo",[e]))}_get_event_counter_part(e,n,i,a){const r=this._gantt;let s=r.getTaskNode(e);if(!s&&(s=r.getTaskRowNode(e),!s))return null;let o=0;const l=n+s.offsetTop+s.offsetHeight;let d=s;if(r.utils.dom.isChildOf(d,i))for(;d&&d!==i;)o+=d.offsetLeft,d=d.offsetParent;const c=r.getScrollState();return d?{left:o,top:l,dx:o+s.offsetWidth/2-c.x>i.offsetWidth/2?1:0,dy:l+s.offsetHeight/2-c.y>a.offsetHeight/2?1:0,width:s.offsetWidth,height:s.offsetHeight}:null}_createQuickInfoElement(){const e=this._gantt,n=document.createElement("div");n.className+="gantt_cal_quick_info",e._waiAria.quickInfoAttr(n);var i=`
@@ -20,25 +20,25 @@ To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), ple
-
`;if(i+='',i+="
",n.innerHTML=i,e.config.quick_info_detached){const a=this._getContainer();e.event(a.parent,"scroll",()=>{this.hide()})}return this._quickInfoBox=n,n}_init_quick_info(e){const n=this._gantt,i=n.getTask(e);return typeof this._quickInfoReadonly=="boolean"&&n.isReadonly(i)!==this._quickInfoReadonly&&(this.hide(!0),this._quickInfoBox=null),this._quickInfoReadonly=n.isReadonly(i),this._quickInfoBox||(this._quickInfoBox=this._createQuickInfoElement()),this._quickInfoBox}_prepare_quick_info_classname(e){const n=this._gantt,i=n.getTask(e);let a=`gantt_cal_quick_info gantt_${n.getTaskType(i)}`;const r=n.templates.quick_info_class(i.start_date,i.end_date,i);return r&&(a+=" "+r),a}_fill_quick_data(e){const n=this._gantt,i=n.getTask(e);this._quickInfoBoxId=e;let a=[];if(this._quickInfoReadonly){const r=n.config.quickinfo_buttons,s={icon_delete:!0,icon_edit:!0};for(let o=0;oc.offsetHeight/2&&(g=e.top-(o+e.height+2*n),g{a.style.left="10px"},1)):(a.style.left="auto",a.style.right="-300px",setTimeout(()=>{a.style.right="10px"},1)),a.className+=" gantt_qi_"+(e.dx===1?"left":"right"),i.$root.appendChild(a)}_qi_button_click(e){const n=this._gantt,i=this._quickInfoBox;if(!e||e===i)return;if(e.closest(".gantt_cal_qi_close_btn"))return void this.hide();const a=e.className;if(a.indexOf("_icon")!==-1){const r=this._quickInfoBoxId;n.$click.buttons[a.split(" ")[1].replace("icon_","")](r)}else this._qi_button_click(e.parentNode)}_getContainer(){const e=this._gantt;let n=this._container?this._container:e.$task_data;return n&&n.offsetHeight&&n.offsetWidth?{parent:n,xViewport:e.$task,yViewport:e.$task_data}:(n=this._container?this._container:e.$grid_data,n&&n.offsetHeight&&n.offsetWidth?{parent:n,xViewport:e.$grid,yViewport:e.$grid_data}:{parent:this._container?this._container:e.$layout,xViewport:e.$layout,yViewport:e.$layout})}}var re,Rn={}.constructor.toString();function V(t){var e,n;if(t&&typeof t=="object")switch(!0){case X(t):n=new Date(t);break;case ie(t):for(n=new Array(t.length),e=0;ei.bottom&&(r.bottom=i.bottom,r.top=r.bottom-r.height),r.lefti.right&&(r.right=i.right,r.left=r.right-r.width),d.x>=r.left&&d.x<=r.right&&(r.left=d.x-r.width-s,r.right=r.left+r.width),d.y>=r.top&&d.y<=r.bottom&&(r.top=d.y-r.height-o,r.bottom=r.top+r.height),r}_getViewPortSize(){const e=this._gantt,n=this._getViewPort();let i,a=n,r=window.scrollY+document.body.scrollTop,s=window.scrollX+document.body.scrollLeft;return n===e.$task_data?(a=e.$task,r=0,s=0,i=z(e.$task)):i=z(a),{left:i.x+s,top:i.y+r,width:i.width,height:i.height,bottom:i.y+i.height+r,right:i.x+i.width+s}}}class Bn{constructor(e){this._listeners={},this.tooltip=new On(e),this._gantt=e,this._domEvents=se(),this._initDelayedFunctions()}destructor(){this.tooltip.hide(),this._domEvents.detachAll()}hideTooltip(){this.delayHide()}attach(e){let n=document.body;const i=this._gantt;e.global||(n=i.$root);let a=null;const r=s=>{const o=mt(s),l=lt(o,e.selector);if(Y(o,this.tooltip.getNode()))return;const d=()=>{a=l,e.onmouseenter(s,l)};a?l&&l===a?e.onmousemove(s,l):(e.onmouseleave(s,a),a=null,l&&l!==a&&d()):l&&d()};this.detach(e.selector),this._domEvents.attach(n,"mousemove",r),this._listeners[e.selector]={node:n,handler:r}}detach(e){const n=this._listeners[e];n&&this._domEvents.detach(n.node,"mousemove",n.handler)}tooltipFor(e){const n=i=>{let a=i;return document.createEventObject&&!document.createEvent&&(a=document.createEventObject(i)),a};this._initDelayedFunctions(),this.attach({selector:e.selector,global:e.global,onmouseenter:(i,a)=>{const r=e.html(i,a);r&&this.delayShow(n(i),r)},onmousemove:(i,a)=>{const r=e.html(i,a);r?this.delayShow(n(i),r):(this.delayShow.$cancelTimeout(),this.delayHide())},onmouseleave:()=>{this.delayShow.$cancelTimeout(),this.delayHide()}})}_initDelayedFunctions(){const e=this._gantt;this.delayShow&&this.delayShow.$cancelTimeout(),this.delayHide&&this.delayHide.$cancelTimeout(),this.tooltip.hide(),this.delayShow=Re((n,i)=>{e.callEvent("onBeforeTooltip",[n])===!1?this.tooltip.hide():(this.tooltip.setContent(i),this.tooltip.show(n))},e.config.tooltip_timeout||1),this.delayHide=Re(()=>{this.delayShow.$cancelTimeout(),this.tooltip.hide()},e.config.tooltip_hide_timeout||1)}}const ze={onBeforeUndo:"onAfterUndo",onBeforeRedo:"onAfterRedo"},We=["onTaskDragStart","onAfterTaskUpdate","onAfterTaskDelete","onBeforeBatchUpdate"];class zn{constructor(e,n){this._batchAction=null,this._batchMode=!1,this._ignore=!1,this._ignoreMoveEvents=!1,this._initialTasks={},this._initialLinks={},this._nestedTasks={},this._nestedLinks={},this._undo=e,this._gantt=n,this._attachEvents()}store(e,n,i=!1){return n===this._gantt.config.undo_types.task?this._storeTask(e,i):n===this._gantt.config.undo_types.link&&this._storeLink(e,i)}isMoveEventsIgnored(){return this._ignoreMoveEvents}toggleIgnoreMoveEvents(e){this._ignoreMoveEvents=e||!1}startIgnore(){this._ignore=!0}stopIgnore(){this._ignore=!1}startBatchAction(){this._timeout||(this._timeout=setTimeout(()=>{this.stopBatchAction(),this._timeout=null},10)),this._ignore||this._batchMode||(this._batchMode=!0,this._batchAction=this._undo.action.create())}stopBatchAction(){if(this._ignore)return;const e=this._undo;this._batchAction&&e.logAction(this._batchAction),this._batchMode=!1,this._batchAction=null}onTaskAdded(e){this._ignore||this._storeTaskCommand(e,this._undo.command.type.add)}onTaskUpdated(e){this._ignore||this._storeTaskCommand(e,this._undo.command.type.update)}onTaskMoved(e){if(!this._ignore){e.$local_index=this._gantt.getTaskIndex(e.id);const n=this.getInitialTask(e.id);if(e.$local_index===n.$local_index&&this._gantt.getParent(e)===this._gantt.getParent(n))return;this._storeEntityCommand(e,this.getInitialTask(e.id),this._undo.command.type.move,this._undo.command.entity.task)}}onTaskDeleted(e){if(!this._ignore){if(this._storeTaskCommand(e,this._undo.command.type.remove),this._nestedTasks[e.id]){const n=this._nestedTasks[e.id];for(let i=0;i{e||(e=setTimeout(()=>{e=null}),this.clearInitialTasks(),n.eachTask(l=>{this.setInitialTask(l.id)}),this.clearInitialLinks(),n.getLinks().forEach(l=>{this.setInitialLink(l.id)}))},a=l=>n.copy(n.getTask(l));for(const l in ze)n.attachEvent(l,()=>(this.startIgnore(),!0)),n.attachEvent(ze[l],()=>(this.stopIgnore(),!0));for(let l=0;l(this.startBatchAction(),!0));n.attachEvent("onParse",()=>{this._undo.clearUndoStack(),this._undo.clearRedoStack(),i()}),n.attachEvent("onAfterTaskAdd",(l,d)=>{this.setInitialTask(l,!0),this.onTaskAdded(d)}),n.attachEvent("onAfterTaskUpdate",(l,d)=>{this.onTaskUpdated(d)}),n.attachEvent("onAfterTaskDelete",(l,d)=>{this.onTaskDeleted(d)}),n.attachEvent("onAfterLinkAdd",(l,d)=>{this.setInitialLink(l,!0),this.onLinkAdded(d)}),n.attachEvent("onAfterLinkUpdate",(l,d)=>{this.onLinkUpdated(d)}),n.attachEvent("onAfterLinkDelete",(l,d)=>{this.onLinkDeleted(d)}),n.attachEvent("onRowDragEnd",(l,d)=>(this.onTaskMoved(a(l)),this.toggleIgnoreMoveEvents(),!0)),n.attachEvent("onBeforeTaskDelete",l=>{this.store(l,n.config.undo_types.task);const d=[];return i(),n.eachTask(c=>{d.push(c.id)},l),this.setNestedTasks(l,d),!0});const r=n.getDatastore("task");r.attachEvent("onBeforeItemMove",(l,d,c)=>(this.isMoveEventsIgnored()||i(),!0)),r.attachEvent("onAfterItemMove",(l,d,c)=>(this.isMoveEventsIgnored()||this.onTaskMoved(a(l)),!0)),n.attachEvent("onRowDragStart",(l,d,c)=>(this.toggleIgnoreMoveEvents(!0),i(),!0));let s=null,o=!1;if(n.attachEvent("onBeforeTaskDrag",l=>{if(s=n.getState().drag_id,s===l){const d=n.getTask(l);n.isSummaryTask(d)&&n.config.drag_project&&(o=!0)}if(n.plugins().multiselect){const d=n.getSelectedTasks();d.length>1&&d.forEach(c=>{this.store(c,n.config.undo_types.task,!0)})}return this.store(l,n.config.undo_types.task)}),n.attachEvent("onAfterTaskDrag",l=>{(o||n.plugins().multiselect&&n.getSelectedTasks().length>1)&&s===l&&(o=!1,s=null,this.stopBatchAction()),this.store(l,n.config.undo_types.task,!0)}),n.attachEvent("onLightbox",l=>this.store(l,n.config.undo_types.task)),n.attachEvent("onBeforeTaskAutoSchedule",l=>(this.store(l.id,n.config.undo_types.task,!0),!0)),n.ext.inlineEditors){let l=null,d=null;n.attachEvent("onGanttLayoutReady",()=>{l&&n.ext.inlineEditors.detachEvent(l),d&&n.ext.inlineEditors.detachEvent(d),d=n.ext.inlineEditors.attachEvent("onEditStart",c=>{this.store(c.id,n.config.undo_types.task)}),l=n.ext.inlineEditors.attachEvent("onBeforeEditStart",c=>(this.stopBatchAction(),!0))})}}_storeCommand(e){const n=this._undo;if(n.updateConfigs(),n.undoEnabled)if(this._batchMode)this._batchAction.commands.push(e);else{const i=n.action.create([e]);n.logAction(i)}}_storeEntityCommand(e,n,i,a){const r=this._undo.command.create(e,n,i,a);this._storeCommand(r)}_storeTaskCommand(e,n){this._gantt.isTaskExists(e.id)&&(e.$local_index=this._gantt.getTaskIndex(e.id)),this._storeEntityCommand(e,this.getInitialTask(e.id),n,this._undo.command.entity.task)}_storeLinkCommand(e,n){this._storeEntityCommand(e,this.getInitialLink(e.id),n,this._undo.command.entity.link)}_getLinks(e){return e.$source.concat(e.$target)}_storeTask(e,n=!1){const i=this._gantt;return this.setInitialTask(e,n),i.eachTask(a=>{this.setInitialTask(a.id)},e),!0}_storeLink(e,n=!1){return this.setInitialLink(e,n),!0}}class Wn{constructor(e){this.maxSteps=100,this.undoEnabled=!0,this.redoEnabled=!0,this.action={create:n=>({commands:n?n.slice():[]}),invert:n=>{const i=this._gantt.copy(n),a=this.command;for(let r=0;r{const s=this._gantt;return{entity:r,type:a,value:s.copy(n),oldValue:s.copy(i||n)}},invert:n=>{const i=this._gantt.copy(n);return i.type=this.command.inverseCommands(n.type),i},inverseCommands:n=>{const i=this._gantt,a=this.command.type;switch(n){case a.update:return a.update;case a.remove:return a.add;case a.add:return a.remove;case a.move:return a.move;default:return i.assert(!1,"Invalid command "+n),null}}},this._undoStack=[],this._redoStack=[],this._gantt=e}getUndoStack(){return this._undoStack}setUndoStack(e){this._undoStack=e}getRedoStack(){return this._redoStack}setRedoStack(e){this._redoStack=e}clearUndoStack(){this._undoStack=[]}clearRedoStack(){this._redoStack=[]}updateConfigs(){const e=this._gantt;this.maxSteps=e.config.undo_steps||100,this.command.entity=e.config.undo_types,this.command.type=e.config.undo_actions,this.undoEnabled=!!e.config.undo,this.redoEnabled=!!e.config.redo}undo(){const e=this._gantt;if(this.updateConfigs(),!this.undoEnabled)return;const n=this._pop(this._undoStack);if(n&&this._reorderCommands(n),e.callEvent("onBeforeUndo",[n])!==!1&&n)return this._applyAction(this.action.invert(n)),this._push(this._redoStack,e.copy(n)),void e.callEvent("onAfterUndo",[n]);e.callEvent("onAfterUndo",[null])}redo(){const e=this._gantt;if(this.updateConfigs(),!this.redoEnabled)return;const n=this._pop(this._redoStack);if(n&&this._reorderCommands(n),e.callEvent("onBeforeRedo",[n])!==!1&&n)return this._applyAction(n),this._push(this._undoStack,e.copy(n)),void e.callEvent("onAfterRedo",[n]);e.callEvent("onAfterRedo",[null])}logAction(e){this._push(this._undoStack,e),this._redoStack=[]}_push(e,n){const i=this._gantt;if(!n.commands.length)return;const a=e===this._undoStack?"onBeforeUndoStack":"onBeforeRedoStack";if(i.callEvent(a,[n])!==!1&&n.commands.length){for(e.push(n);e.length>this.maxSteps;)e.shift();return n}}_pop(e){return e.pop()}_reorderCommands(e){const n={any:0,link:1,task:2},i={move:1,any:0};e.commands.sort(function(a,r){if(a.entity==="task"&&r.entity==="task")return a.type!==r.type?(i[r.type]||0)-(i[a.type]||0):a.type==="move"&&a.oldValue&&r.oldValue&&r.oldValue.parent===a.oldValue.parent?a.oldValue.$index-r.oldValue.$index:0;{const s=n[a.entity]||n.any;return(n[r.entity]||n.any)-s}})}_applyAction(e){let n=null;const i=this.command.entity,a=this.command.type,r=this._gantt,s={};s[i.task]={add:"addTask",get:"getTask",update:"updateTask",remove:"deleteTask",move:"moveTask",isExists:"isTaskExists"},s[i.link]={add:"addLink",get:"getLink",update:"updateLink",remove:"deleteLink",isExists:"isLinkExists"},r.batchUpdate(function(){for(let o=0;o{const i={viewPort:t.$task_data,...e};if(t.config.click_drag){const a=t.config.click_drag;i.render=a.render||e.render,i.className=a.className||e.className,i.callback=a.callback||e.callback,i.viewPort=a.viewPort||t.$task_data,i.useRequestAnimationFrame=a.useRequestAnimationFrame===void 0?e.useRequestAnimationFrame:a.useRequestAnimationFrame,i.singleRow=a.singleRow===void 0?e.singleRow:a.singleRow;const r=t.$ui.getView("timeline"),s=new Nn(i,t,r);t.ext.clickDrag.attach(s,a.useKey,a.ignore)}}),t.attachEvent("onDestroy",()=>{n.destructor()})},drag_timeline:function(t){t.ext||(t.ext={}),t.ext.dragTimeline={create:()=>ae.create(t)},t.config.drag_timeline={enabled:!0,render:!1}},fullscreen:function(t){function e(){const c=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;return!(!c||c!==document.body)}function n(){try{return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled}catch(c){console.error("Fullscreen is not available:",c)}}t.$services.getService("state").registerProvider("fullscreen",()=>n()?{fullscreen:e()}:void 0);let i={overflow:null,padding:null,paddingTop:null,paddingRight:null,paddingBottom:null,paddingLeft:null};const a={width:null,height:null,top:null,left:null,position:null,zIndex:null,modified:!1};let r=null;function s(c,u){u.width=c.width,u.height=c.height,u.top=c.top,u.left=c.left,u.position=c.position,u.zIndex=c.zIndex}let o=!1;function l(){if(!t.$container)return;let c;e()?o&&(c="onExpand",function(){const u=t.ext.fullscreen.getFullscreenElement(),h=document.body;s(u.style,a),i={overflow:h.style.overflow,padding:h.style.padding?h.style.padding:null,paddingTop:h.style.paddingTop?h.style.paddingTop:null,paddingRight:h.style.paddingRight?h.style.paddingRight:null,paddingBottom:h.style.paddingBottom?h.style.paddingBottom:null,paddingLeft:h.style.paddingLeft?h.style.paddingLeft:null},h.style.padding&&(h.style.padding="0"),h.style.paddingTop&&(h.style.paddingTop="0"),h.style.paddingRight&&(h.style.paddingRight="0"),h.style.paddingBottom&&(h.style.paddingBottom="0"),h.style.paddingLeft&&(h.style.paddingLeft="0"),h.style.overflow="hidden",u.style.width="100vw",u.style.height="100vh",u.style.top="0px",u.style.left="0px",u.style.position="absolute",u.style.zIndex=1,a.modified=!0,r=function(g){let f=g.parentNode;const y=[];for(;f&&f.style;)y.push({element:f,originalPositioning:f.style.position}),f.style.position="static",f=f.parentNode;return y}(u)}()):o&&(o=!1,c="onCollapse",function(){const u=t.ext.fullscreen.getFullscreenElement(),h=document.body;a.modified&&(i.padding&&(h.style.padding=i.padding),i.paddingTop&&(h.style.paddingTop=i.paddingTop),i.paddingRight&&(h.style.paddingRight=i.paddingRight),i.paddingBottom&&(h.style.paddingBottom=i.paddingBottom),i.paddingLeft&&(h.style.paddingLeft=i.paddingLeft),h.style.overflow=i.overflow,i={overflow:null,padding:null,paddingTop:null,paddingRight:null,paddingBottom:null,paddingLeft:null},s(a,u.style),a.modified=!1),r.forEach(g=>{g.element.style.position=g.originalPositioning}),r=null}()),setTimeout(()=>{t.render()}),setTimeout(()=>{t.callEvent(c,[t.ext.fullscreen.getFullscreenElement()])})}function d(){return!t.$container||!t.ext.fullscreen.getFullscreenElement()?!0:n()?!1:((console.warning||console.log)("The `fullscreen` feature not being allowed, or full-screen mode not being supported"),!0)}t.ext.fullscreen={expand(){if(d()||e()||!t.callEvent("onBeforeExpand",[this.getFullscreenElement()]))return;o=!0;const c=document.body,u=c.webkitRequestFullscreen?[Element.ALLOW_KEYBOARD_INPUT]:[],h=c.msRequestFullscreen||c.mozRequestFullScreen||c.webkitRequestFullscreen||c.requestFullscreen;h&&h.apply(c,u)},collapse(){if(d()||!e()||!t.callEvent("onBeforeCollapse",[this.getFullscreenElement()]))return;const c=document.msExitFullscreen||document.mozCancelFullScreen||document.webkitExitFullscreen||document.exitFullscreen;c&&c.apply(document)},toggle(){d()||(e()?this.collapse():this.expand())},getFullscreenElement:()=>t.$root},t.expand=function(){t.ext.fullscreen.expand()},t.collapse=function(){t.ext.fullscreen.collapse()},t.attachEvent("onGanttReady",function(){t.event(document,"webkitfullscreenchange",l),t.event(document,"mozfullscreenchange",l),t.event(document,"MSFullscreenChange",l),t.event(document,"fullscreenChange",l),t.event(document,"fullscreenchange",l)})},keyboard_navigation:function(t){(function(e){e.config.keyboard_navigation=!0,e.config.keyboard_navigation_cells=!1,e.$keyboardNavigation={},e._compose=function(){for(var n=Array.prototype.slice.call(arguments,0),i={},a=0;a=96&&a.keyCode<=105&&(a.keyCode-=48);var r=String.fromCharCode(a.keyCode);return r&&(a.keyCode=r.toLowerCase().charCodeAt(0)),a},getHashFromEvent:function(i){return this.getHash(this.getCommandFromEvent(i))},getHash:function(i){var a=[];for(var r in i.modifiers)i.modifiers[r]&&a.push(r);return a.push(i.keyCode),a.join(this.junctionChar)},getExpressions:function(i){return i.split(this.junctionChar)},getWords:function(i){return i.split(this.combinationChar)},trim:function(i){return i.replace(/\s/g,"")},junctionChar:",",combinationChar:"+",commandKeys:{shift:16,alt:18,ctrl:17,meta:!0},specialKeys:{backspace:8,tab:9,enter:13,esc:27,space:32,up:38,down:40,left:37,right:39,home:36,end:35,pageup:33,pagedown:34,delete:46,insert:45,plus:107,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123}}}(e),function(n){n.$keyboardNavigation.EventHandler={_handlers:null,findHandler:function(i){this._handlers||(this._handlers={});var a=n.$keyboardNavigation.shortcuts.getHash(i);return this._handlers[a]},doAction:function(i,a){var r=this.findHandler(i);if(r){if(n.$keyboardNavigation.facade.callEvent("onBeforeAction",[i,a])===!1)return;r.call(this,a),a.preventDefault?a.preventDefault():a.returnValue=!1}},bind:function(i,a){this._handlers||(this._handlers={});for(var r=n.$keyboardNavigation.shortcuts,s=r.parse(i),o=0;o=r.length-1){var c=r[0];if(c)return c.focus(),a.preventDefault(),!0}return!1}}(e),function(n){n.$keyboardNavigation.GanttNode=function(){},n.$keyboardNavigation.GanttNode.prototype=n._compose(n.$keyboardNavigation.EventHandler,{focus:function(){n.focus()},blur:function(){},isEnabled:function(){return n.$container.hasAttribute("tabindex")},scrollHorizontal:function(i){var a=n.dateFromPos(n.getScrollState().x),r=n.getScale(),s=i<0?-r.step:r.step;a=n.date.add(a,s,r.unit),n.scrollTo(n.posFromDate(a))},scrollVertical:function(i){var a=n.getScrollState().y,r=n.config.row_height;n.scrollTo(null,a+(i<0?-1:1)*r)},keys:{"alt+left":function(i){this.scrollHorizontal(-1)},"alt+right":function(i){this.scrollHorizontal(1)},"alt+up":function(i){this.scrollVertical(-1)},"alt+down":function(i){this.scrollVertical(1)},"ctrl+z":function(){n.undo&&n.undo()},"ctrl+r":function(){n.redo&&n.redo()}}}),n.$keyboardNavigation.GanttNode.prototype.bindAll(n.$keyboardNavigation.GanttNode.prototype.keys)}(e),function(n){n.$keyboardNavigation.KeyNavNode=function(){},n.$keyboardNavigation.KeyNavNode.prototype=n._compose(n.$keyboardNavigation.EventHandler,{isValid:function(){return!0},fallback:function(){return null},moveTo:function(i){n.$keyboardNavigation.dispatcher.setActiveNode(i)},compareTo:function(i){if(!i)return!1;for(var a in this){if(!!this[a]!=!!i[a])return!1;var r=!(!this[a]||!this[a].toString),s=!(!i[a]||!i[a].toString);if(s!=r)return!1;if(s&&r){if(i[a].toString()!=this[a].toString())return!1}else if(i[a]!=this[a])return!1}return!0},getNode:function(){},focus:function(){var i=this.getNode();if(i){var a=n.$keyboardNavigation.facade;a.callEvent("onBeforeFocus",[i])!==!1&&i&&(i.setAttribute("tabindex","-1"),i.$eventAttached||(i.$eventAttached=!0,n.event(i,"focus",function(r){return r.preventDefault(),!1},!1)),n.utils.dom.isChildOf(document.activeElement,i)&&(i=document.activeElement),i.focus&&i.focus(),a.callEvent("onFocus",[this.getNode()]))}},blur:function(){var i=this.getNode();i&&(n.$keyboardNavigation.facade.callEvent("onBlur",[i]),i.setAttribute("tabindex","-1"))}})}(e),function(n){n.$keyboardNavigation.HeaderCell=function(i){this.index=i||0},n.$keyboardNavigation.HeaderCell.prototype=n._compose(n.$keyboardNavigation.KeyNavNode,{_handlers:null,isValid:function(){return!(!n.config.show_grid&&n.getVisibleTaskCount()||!n.getGridColumns()[this.index]&&n.getVisibleTaskCount())},fallback:function(){if(!n.config.show_grid)return n.getVisibleTaskCount()?new n.$keyboardNavigation.TaskRow:null;for(var i=n.getGridColumns(),a=this.index;a>=0&&!i[a];)a--;return i[a]?new n.$keyboardNavigation.HeaderCell(a):null},fromDomElement:function(i){var a=ht(i,"gantt_grid_head_cell");if(a){for(var r=0;a&&a.previousSibling;)a=a.previousSibling,r+=1;return new n.$keyboardNavigation.HeaderCell(r)}return null},getNode:function(){return n.$grid_scale.childNodes[this.index]},keys:{left:function(){this.index>0&&this.moveTo(new n.$keyboardNavigation.HeaderCell(this.index-1))},right:function(){var i=n.getGridColumns();this.index-1},fallback:function(){if(!n.getVisibleTaskCount()){var i=new n.$keyboardNavigation.HeaderCell;return i.isValid()?i:null}if(this.splitItem)return new n.$keyboardNavigation.TaskRow(this.parentId);var a=-1;if(n.getTaskByIndex(this.globalIndex-1))a=this.globalIndex-1;else if(n.getTaskByIndex(this.globalIndex+1))a=this.globalIndex+1;else for(var r=this.globalIndex;r>=0;){if(n.getTaskByIndex(r)){a=r;break}r--}return a>-1?new n.$keyboardNavigation.TaskRow(n.getTaskByIndex(a).id):void 0},fromDomElement:function(i){if(n.config.keyboard_navigation_cells)return null;var a=n.locate(i);return n.isTaskExists(a)?new n.$keyboardNavigation.TaskRow(a):null},getNode:function(){if(n.isTaskExists(this.taskId)&&n.isTaskVisible(this.taskId))return n.config.show_grid?n.$grid.querySelector(".gantt_row["+n.config.task_attribute+"='"+this.taskId+"']"):n.getTaskNode(this.taskId)},focus:function(i){if(!i){const a=n.getTaskPosition(n.getTask(this.taskId)),r=n.getTaskHeight(this.taskId),s=n.getScrollState();let o,l;o=n.$task?n.$task.offsetWidth:s.inner_width,l=n.$grid_data||n.$task_data?(n.$grid_data||n.$task_data).offsetHeight:s.inner_height,a.tops.y+l?n.scrollTo(null,a.top-20):n.config.scroll_on_click&&n.config.show_chart&&(a.left>s.x+o?n.scrollTo(a.left-n.config.task_scroll_offset):a.left+a.width=0&&!r[s];)s--;r[s]&&(a=new n.$keyboardNavigation.TaskCell(i.taskId,s))}return a},fromDomElement:function(i){if(!n.config.keyboard_navigation_cells)return null;var a=n.locate(i);if(n.isTaskExists(a)){var r=0,s=tt(i,"data-column-index");return s&&(r=1*s.getAttribute("data-column-index")),new n.$keyboardNavigation.TaskCell(a,r)}return null},getNode:function(){if(n.isTaskExists(this.taskId)&&n.isTaskVisible(this.taskId)){if(n.config.show_grid){var i=n.$grid.querySelector(".gantt_row["+n.config.task_attribute+"='"+this.taskId+"']");return i?i.querySelector("[data-column-index='"+this.columnIndex+"']"):null}return n.getTaskNode(this.taskId)}},keys:{up:function(){var i=null,a=n.getPrev(this.taskId);i=n.isTaskExists(a)?new n.$keyboardNavigation.TaskCell(a,this.columnIndex):new n.$keyboardNavigation.HeaderCell(this.columnIndex),this.moveTo(i)},down:function(){var i=n.getNext(this.taskId);n.isTaskExists(i)&&this.moveTo(new n.$keyboardNavigation.TaskCell(i,this.columnIndex))},left:function(){this.columnIndex>0&&this.moveTo(new n.$keyboardNavigation.TaskCell(this.taskId,this.columnIndex-1))},right:function(){var i=n.getGridColumns();this.columnIndex=p&&r()}}),e._smart_render){var v=e._smart_render._redrawTasks;e._smart_render._redrawTasks=function(b,_){if(e.config.keyboard_navigation&&n.isEnabled()){var m=n.getActiveNode();if(m&&m.taskId!==void 0){for(var p=!1,k=0;k<_.length;k++)if(_[k].id==m.taskId&&_[k].start_date){p=!0;break}p||_.push(e.getTask(m.taskId))}}return v.apply(this,arguments)}}});let c=null,u=!1;e.attachEvent("onTaskCreated",function(v){return c=v.id,!0}),e.attachEvent("onAfterTaskAdd",function(v,b){if(!e.config.keyboard_navigation)return!0;if(n.isEnabled()){if(v==c&&(u=!0,setTimeout(()=>{u=!1,c=null})),u&&b.type==e.config.types.placeholder)return;var _=0,m=n.activeNode;m instanceof e.$keyboardNavigation.TaskCell&&(_=m.columnIndex);var p=e.config.keyboard_navigation_cells?e.$keyboardNavigation.TaskCell:e.$keyboardNavigation.TaskRow;b.type==e.config.types.placeholder&&e.config.placeholder_task.focusOnCreate===!1||n.setActiveNode(new p(v,_))}}),e.attachEvent("onTaskIdChange",function(v,b){if(!e.config.keyboard_navigation)return!0;var _=n.activeNode;return n.isTaskFocused(v)&&(_.taskId=b),!0});var h=setInterval(function(){e.config.keyboard_navigation&&(n.isEnabled()||n.enable())},500);function g(v){var b={gantt:e.$keyboardNavigation.GanttNode,headerCell:e.$keyboardNavigation.HeaderCell,taskRow:e.$keyboardNavigation.TaskRow,taskCell:e.$keyboardNavigation.TaskCell};return b[v]||b.gantt}function f(v){for(var b=e.getGridColumns(),_=0;_{if(t.config.touch&&!t.config.touch_tooltip)return;const i=t.locate(n);if(t.isTaskExists(i)){const a=t.getTask(i);return t.templates.tooltip_text(a.start_date,a.end_date,a)}return null},global:!1})}),t.attachEvent("onDestroy",function(){e.destructor()}),t.attachEvent("onLightbox",function(){e.hideTooltip()}),t.attachEvent("onBeforeTooltip",function(){if(t.getState().link_source_id)return!1}),t.attachEvent("onGanttScroll",function(){e.hideTooltip()})},undo:function(t){const e=new Wn(t),n=new zn(e,t);function i(d,c,u){d&&(d.id===c&&(d.id=u),d.parent===c&&(d.parent=u))}function a(d,c,u){i(d.value,c,u),i(d.oldValue,c,u)}function r(d,c,u){d&&(d.source===c&&(d.source=u),d.target===c&&(d.target=u))}function s(d,c,u){r(d.value,c,u),r(d.oldValue,c,u)}function o(d,c,u){const h=e;for(let g=0;ge.undo(),redo:()=>e.redo(),getUndoStack:()=>e.getUndoStack(),setUndoStack:d=>e.setUndoStack(d),getRedoStack:()=>e.getRedoStack(),setRedoStack:d=>e.setRedoStack(d),clearUndoStack:()=>e.clearUndoStack(),clearRedoStack:()=>e.clearRedoStack(),saveState:(d,c)=>n.store(d,c,!0),getInitialState:(d,c)=>c===t.config.undo_types.link?n.getInitialLink(d):n.getInitialTask(d)},t.undo=t.ext.undo.undo,t.redo=t.ext.undo.redo,t.getUndoStack=t.ext.undo.getUndoStack,t.getRedoStack=t.ext.undo.getRedoStack,t.clearUndoStack=t.ext.undo.clearUndoStack,t.clearRedoStack=t.ext.undo.clearRedoStack,t.attachEvent("onTaskIdChange",(d,c)=>{const u=e;o(u.getUndoStack(),d,c),o(u.getRedoStack(),d,c)}),t.attachEvent("onLinkIdChange",(d,c)=>{const u=e;l(u.getUndoStack(),d,c),l(u.getRedoStack(),d,c)}),t.attachEvent("onGanttReady",()=>{e.updateConfigs()})},marker:function(t){function e(i){if(!t.config.show_markers||!i.start_date)return!1;var a=t.getState();if(+i.start_date>+a.max_date||(!i.end_date||+i.end_date<+a.min_date)&&+i.start_date<+a.min_date)return;var r=document.createElement("div");r.setAttribute("data-marker-id",i.id);var s="gantt_marker";i.css&&(s+=" "+i.css),i.title&&(r.title=i.title),r.className=s;var o=t.posFromDate(i.start_date);r.style.left=o+"px";let l=Math.max(t.getRowTop(t.getVisibleTaskCount()),0)+"px";if(t.config.timeline_placeholder&&t.$task_data&&(l=t.$task_data.scrollHeight+"px"),r.style.height=l,i.end_date){var d=t.posFromDate(i.end_date);r.style.width=Math.max(d-o,0)+"px"}return i.text&&(r.innerHTML=""+i.text+"
"),r}function n(){if(t.$task_data){var i=document.createElement("div");i.className="gantt_marker_area",t.$task_data.appendChild(i),t.$marker_area=i}}t._markers||(t._markers=t.createDatastore({name:"marker",initItem:function(i){return i.id=i.id||t.uid(),i}})),t.config.show_markers=!0,t.attachEvent("onBeforeGanttRender",function(){t.$marker_area||n()}),t.attachEvent("onDataRender",function(){t.$marker_area||(n(),t.renderMarkers())}),t.attachEvent("onGanttLayoutReady",function(){t.attachEvent("onBeforeGanttRender",function(){n(),t.$services.getService("layers").createDataRender({name:"marker",defaultContainer:function(){return t.$marker_area}}).addLayer(e)},{once:!0})}),t.getMarker=function(i){return this._markers?this._markers.getItem(i):null},t.addMarker=function(i){return this._markers.addItem(i)},t.deleteMarker=function(i){return!!this._markers.exists(i)&&(this._markers.removeItem(i),!0)},t.updateMarker=function(i){this._markers.refresh(i)},t._getMarkers=function(){return this._markers.getItems()},t.renderMarkers=function(){this._markers.refresh()}},multiselect:function(t){t.config.multiselect=!0,t.config.multiselect_one_level=!1,t._multiselect={_selected:{},_one_level:!1,_active:!0,_first_selected_when_shift:null,getDefaultSelected:function(){var e=this.getSelected();return e.length?e[e.length-1]:null},setFirstSelected:function(e){this._first_selected_when_shift=e},getFirstSelected:function(){return this._first_selected_when_shift},isActive:function(){return this.updateState(),this._active},updateState:function(){this._one_level=t.config.multiselect_one_level;var e=this._active;this._active=t.config.select_task,this._active!=e&&this.reset()},reset:function(){this._selected={}},setLastSelected:function(e){t.$data.tasksStore.silent(function(){var n=t.$data.tasksStore;e?n.select(e+""):n.unselect(null)})},getLastSelected:function(){var e=t.$data.tasksStore.getSelectedId();return e&&t.isTaskExists(e)?e:null},select:function(e,n){return!!(e&&t.callEvent("onBeforeTaskMultiSelect",[e,!0,n])&&t.callEvent("onBeforeTaskSelected",[e]))&&(this._selected[e]=!0,this.setLastSelected(e),this.afterSelect(e),t.callEvent("onTaskMultiSelect",[e,!0,n]),t.callEvent("onTaskSelected",[e]),!0)},toggle:function(e,n){this._selected[e]?this.unselect(e,n):this.select(e,n)},unselect:function(e,n){e&&t.callEvent("onBeforeTaskMultiSelect",[e,!1,n])&&(this._selected[e]=!1,this.getLastSelected()==e&&this.setLastSelected(this.getDefaultSelected()),this.afterSelect(e),t.callEvent("onTaskMultiSelect",[e,!1,n]),t.callEvent("onTaskUnselected",[e]))},isSelected:function(e){return!(!t.isTaskExists(e)||!this._selected[e])},getSelected:function(){var e=[];for(var n in this._selected)this._selected[n]&&t.isTaskExists(n)?e.push(n):this._selected[n]=!1;return e.sort(function(i,a){return t.getGlobalTaskIndex(i)>t.getGlobalTaskIndex(a)?1:-1}),e},forSelected:function(e){for(var n=this.getSelected(),i=0;ih?t.getNext(g):t.getPrev(g);for(g=n;t.getGlobalTaskIndex(g)!==c;)this.select(g,e)&&!r&&(r=!0,a=g),g=c>u?t.getNext(g):t.getPrev(g)}}else s=n}).bind(this);return o&&(e.ctrlKey||e.metaKey)?(this.isSelected(n)||this.setFirstSelected(n),n&&this.toggle(n,e)):o&&e.shiftKey?(t.isTaskExists(this.getFirstSelected())&&this.getFirstSelected()!==null||this.setFirstSelected(n),i.length?d():l()):l(),this.isSelected(n)?this.setLastSelected(n):a?n==s&&this.setLastSelected(e.shiftKey?a:this.getDefaultSelected()):this.setLastSelected(null),this.getSelected().length||this.setLastSelected(null),this.getLastSelected()&&this.isSelected(this.getFirstSelected())||this.setFirstSelected(this.getLastSelected()),!0}},function(){var e=t.selectTask;t.selectTask=function(i){if(!(i=it(i,this.config.root_id)))return!1;var a=t._multiselect,r=i;return a.isActive()?(a.select(i,null)&&a.setLastSelected(i),a.setFirstSelected(a.getLastSelected())):r=e.call(this,i),r};var n=t.unselectTask;t.unselectTask=function(i){var a=t._multiselect,r=a.isActive();(i=i||a.getLastSelected())&&r&&(a.unselect(i,null),i==a.getLastSelected()&&a.setLastSelected(null),t.refreshTask(i),a.setFirstSelected(a.getLastSelected()));var s=i;return r||(s=n.call(this,i)),s},t.toggleTaskSelection=function(i){var a=t._multiselect;i&&a.isActive()&&(a.toggle(i),a.setFirstSelected(a.getLastSelected()))},t.getSelectedTasks=function(){var i=t._multiselect;return i.isActive(),i.getSelected()},t.eachSelectedTask=function(i){return this._multiselect.forSelected(i)},t.isSelectedTask=function(i){return this._multiselect.isSelected(i)},t.getLastSelectedTask=function(){return this._multiselect.getLastSelected()},t.attachEvent("onGanttReady",function(){var i=t.$data.tasksStore.isSelected;t.$data.tasksStore.isSelected=function(a){return t._multiselect.isActive()?t._multiselect.isSelected(a):i.call(this,a)}})}(),t.attachEvent("onTaskIdChange",function(e,n){var i=t._multiselect;if(!i.isActive())return!0;t.isSelectedTask(e)&&(i.unselect(e,null),i.select(n,null))}),t.attachEvent("onAfterTaskDelete",function(e,n){var i=t._multiselect;if(!i.isActive())return!0;i._selected[e]&&(i._selected[e]=!1,i.setLastSelected(i.getDefaultSelected())),i.forSelected(function(a){t.isTaskExists(a)||i.unselect(a,null)})}),t.attachEvent("onBeforeTaskMultiSelect",function(e,n,i){var a=t._multiselect;return!(n&&a.isActive()&&a._one_level)||a.isSameLevel(e)}),t.attachEvent("onTaskClick",function(e,n){return t._multiselect.doSelection(n)&&t.callEvent("onMultiSelect",[n]),!0})},export_api:function(t){return t.ext=t.ext||{},t.ext.export_api=t.ext.export_api||{_apiUrl:"https://export.dhtmlx.com/gantt",_preparePDFConfigRaw(e,n){let i=null;e.start&&e.end&&(i={start_date:t.config.start_date,end_date:t.config.end_date},t.config.start_date=t.date.str_to_date(t.config.date_format)(e.start),t.config.end_date=t.date.str_to_date(t.config.date_format)(e.end)),e=t.mixin(e,{name:"gantt."+n,data:t.ext.export_api._serializeHtml()}),i&&(t.config.start_date=i.start_date,t.config.end_date=i.end_date)},_prepareConfigPDF:(e,n)=>(e=t.mixin(e||{},{name:"gantt."+n,data:t.ext.export_api._serializeAll(),config:t.config}),t.ext.export_api._fixColumns(e.config.columns),e),_pdfExportRouter(e,n){e&&e.raw?t.ext.export_api._preparePDFConfigRaw(e,n):e=t.ext.export_api._prepareConfigPDF(e,n),e.version=t.version,t.ext.export_api._sendToExport(e,n)},exportToPDF(e){t.ext.export_api._pdfExportRouter(e,"pdf")},exportToPNG(e){t.ext.export_api._pdfExportRouter(e,"png")},exportToICal(e){e=t.mixin(e||{},{name:"gantt.ical",data:t.ext.export_api._serializePlain().data,version:t.version}),t.ext.export_api._sendToExport(e,"ical")},exportToExcel(e){let n,i,a,r;e=e||{};const s=t.config.smart_rendering;if(e.visual==="base-colors"&&(t.config.smart_rendering=!1),e.start||e.end){a=t.getState(),i=[t.config.start_date,t.config.end_date],r=t.getScrollState();const o=t.date.str_to_date(t.config.date_format);n=t.eachTask,e.start&&(t.config.start_date=o(e.start)),e.end&&(t.config.end_date=o(e.end)),t.render(),t.config.smart_rendering=s,t.eachTask=t.ext.export_api._eachTaskTimed(t.config.start_date,t.config.end_date)}else e.visual==="base-colors"&&(t.render(),t.config.smart_rendering=s);t._no_progress_colors=e.visual==="base-colors",(e=t.mixin(e,{name:"gantt.xlsx",title:"Tasks",data:t.ext.export_api._serializeTimeline(e).data,columns:t.ext.export_api._serializeGrid({rawDates:!0}),version:t.version})).visual&&(e.scales=t.ext.export_api._serializeScales(e)),t.ext.export_api._sendToExport(e,"excel"),(e.start||e.end)&&(t.config.start_date=a.min_date,t.config.end_date=a.max_date,t.eachTask=n,t.render(),t.scrollTo(r.x,r.y),t.config.start_date=i[0],t.config.end_date=i[1])},exportToJSON(e){e=t.mixin(e||{},{name:"gantt.json",data:t.ext.export_api._serializeAll(),config:t.config,columns:t.ext.export_api._serializeGrid(),worktime:t.ext.export_api._getWorktimeSettings(),version:t.version}),t.ext.export_api._sendToExport(e,"json")},importFromExcel(e){try{const n=e.data;if(n instanceof File){const i=new FormData;i.append("file",n),e.data=i}}catch{}t.ext.export_api._sendImportAjaxExcel(e)},importFromMSProject(e){const n=e.data;try{if(n instanceof File){const i=new FormData;i.append("file",n),e.data=i}}catch{}t.ext.export_api._sendImportAjaxMSP(e)},importFromPrimaveraP6:e=>(e.type="primaveraP6-parse",t.importFromMSProject(e)),exportToMSProject(e){(e=e||{}).skip_circular_links=e.skip_circular_links===void 0||!!e.skip_circular_links;const n=t.templates.xml_format,i=t.templates.format_date,a=t.config.xml_date,r=t.config.date_format,s="%d-%m-%Y %H:%i:%s";t.config.xml_date=s,t.config.date_format=s,t.templates.xml_format=t.date.date_to_str(s),t.templates.format_date=t.date.date_to_str(s);const o=t.ext.export_api._serializeAll();t.ext.export_api._customProjectProperties(o,e),t.ext.export_api._customTaskProperties(o,e),e.skip_circular_links&&t.ext.export_api._clearRecLinks(o),e=t.ext.export_api._exportConfig(o,e),t.ext.export_api._sendToExport(e,e.type||"msproject"),t.config.xml_date=a,t.config.date_format=r,t.templates.xml_format=n,t.templates.format_date=i,t.config.$custom_data=null,t.config.custom=null},exportToPrimaveraP6:e=>((e=e||{}).type="primaveraP6",t.exportToMSProject(e)),_fixColumns(e){for(let n=0;n400))try{o=JSON.parse(s.responseText)}catch{}r&&r(o)},s.open("POST",n,!0),s.setRequestHeader("X-Requested-With","XMLHttpRequest"),s.send(a)},_ajaxToExport(e,n,i){delete e.callback;const a=e.server||t.ext.export_api._apiUrl,r="type="+n+"&store=1&data="+encodeURIComponent(JSON.stringify(e));t.ext.export_api._xdr(a,r,function(s){const o=s.xmlDoc||s;let l=null;if(!(o.status>400))try{l=JSON.parse(o.responseText)}catch{}i(l)})},_serializableGanttConfig(e){const n=t.mixin({},e);return n.columns&&(n.columns=n.columns.map(function(i){const a=t.mixin({},i);return delete a.editor,a})),delete n.editor_types,n},_sendToExport(e,n){const i=t.date.date_to_str(t.config.date_format||t.config.xml_date);if(e.skin||(e.skin=t.skin),e.config&&(e.config=t.copy(t.ext.export_api._serializableGanttConfig(e.config)),t.ext.export_api._markColumns(e,n),e.config.start_date&&e.config.end_date&&(e.config.start_date instanceof Date&&(e.config.start_date=i(e.config.start_date)),e.config.end_date instanceof Date&&(e.config.end_date=i(e.config.end_date)))),e.callback)return t.ext.export_api._ajaxToExport(e,n,e.callback);const a=t.ext.export_api._createHiddenForm();a.firstChild.action=e.server||t.ext.export_api._apiUrl,a.firstChild.childNodes[0].value=JSON.stringify(e),a.firstChild.childNodes[1].value=n,a.firstChild.submit()},_createHiddenForm(){if(!t.ext.export_api._hidden_export_form){const e=t.ext.export_api._hidden_export_form=document.createElement("div");e.style.display="none",e.innerHTML=" ",document.body.appendChild(e)}return t.ext.export_api._hidden_export_form},_copyObjectBase(e){const n={start_date:void 0,end_date:void 0,constraint_date:void 0,deadline:void 0};for(const a in e)a.charAt(0)!=="$"&&a!=="baselines"&&(n[a]=e[a]);const i=t.templates.xml_format||t.templates.format_date;return n.start_date=i(n.start_date),n.end_date&&(n.end_date=i(n.end_date)),n.constraint_date&&(n.constraint_date=i(n.constraint_date)),n.deadline&&(n.deadline=i(n.deadline)),n},_color_box:null,_color_hash:{},_getStyles(e){if(t.ext.export_api._color_box||(t.ext.export_api._color_box=document.createElement("DIV"),t.ext.export_api._color_box.style.cssText="position:absolute; display:none;",document.body.appendChild(t.ext.export_api._color_box)),t.ext.export_api._color_hash[e])return t.ext.export_api._color_hash[e];t.ext.export_api._color_box.className=e;const n=t.ext.export_api._getColor(t.ext.export_api._color_box,"color"),i=t.ext.export_api._getColor(t.ext.export_api._color_box,"backgroundColor");return t.ext.export_api._color_hash[e]=n+";"+i},_getMinutesWorktimeSettings(e){const n=[];return e.forEach(function(i){n.push(i.startMinute),n.push(i.endMinute)}),n},_getWorktimeSettings(){const e={hours:[0,24],minutes:null,dates:{0:!0,1:!0,2:!0,3:!0,4:!0,5:!0,6:!0}};let n;if(t.config.work_time){const i=t._working_time_helper;if(i&&i.get_calendar)n=i.get_calendar();else if(i)n={hours:i.hours,minutes:null,dates:i.dates};else if(t.config.worktimes&&t.config.worktimes.global){const a=t.config.worktimes.global;if(a.parsed){n={hours:null,minutes:t.ext.export_api._getMinutesWorktimeSettings(a.parsed.hours),dates:{}};for(const r in a.parsed.dates)Array.isArray(a.parsed.dates[r])?n.dates[r]=t.ext.export_api._getMinutesWorktimeSettings(a.parsed.dates[r]):n.dates[r]=a.parsed.dates[r]}else n={hours:a.hours,minutes:null,dates:a.dates}}else n=e}else n=e;return n},_eachTaskTimed:(e,n)=>function(i,a,r){a=a||t.config.root_id,r=r||t;const s=t.getChildren(a);if(s)for(let o=0;oe)&&(!n||l.start_date-1){let l=0;for(;lr.length&&(r=a[s].trace_x);for(let s=0;s400))try{l=JSON.parse(o.responseText)}catch{}r&&r(l)},o.open("POST",n,!0),o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.send(a)}},t.exportToPDF=t.ext.export_api.exportToPDF,t.exportToPNG=t.ext.export_api.exportToPNG,t.exportToICal=t.ext.export_api.exportToICal,t.exportToExcel=t.ext.export_api.exportToExcel,t.exportToJSON=t.ext.export_api.exportToJSON,t.importFromExcel=t.ext.export_api.importFromExcel,t.importFromMSProject=t.ext.export_api.importFromMSProject,t.exportToMSProject=t.ext.export_api.exportToMSProject,t.importFromPrimaveraP6=t.ext.export_api.importFromPrimaveraP6,t.exportToPrimaveraP6=t.ext.export_api.exportToPrimaveraP6,t.ext.export_api}},Fn={KEY_CODES:{UP:38,DOWN:40,LEFT:37,RIGHT:39,SPACE:32,ENTER:13,DELETE:46,ESC:27,TAB:9}};class Vn{constructor(e){this.addExtension=(n,i)=>{this._extensions[n]=i},this.getExtension=n=>this._extensions[n],this._extensions={};for(const n in e)this._extensions[n]=e[n]}}const Un=()=>({layout:{css:"gantt_container",rows:[{cols:[{view:"grid",scrollX:"scrollHor",scrollY:"scrollVer"},{resizer:!0,width:1},{view:"timeline",scrollX:"scrollHor",scrollY:"scrollVer"},{view:"scrollbar",id:"scrollVer"}]},{view:"scrollbar",id:"scrollHor",height:20}]},links:{finish_to_start:"0",start_to_start:"1",finish_to_finish:"2",start_to_finish:"3"},types:{task:"task",project:"project",milestone:"milestone"},auto_types:!1,duration_unit:"day",work_time:!1,correct_work_time:!1,skip_off_time:!1,cascade_delete:!0,autosize:!1,autosize_min_width:0,autoscroll:!0,autoscroll_speed:30,deepcopy_on_parse:!1,show_links:!0,show_task_cells:!0,static_background:!1,static_background_cells:!0,branch_loading:!1,branch_loading_property:"$has_child",show_loading:!1,show_chart:!0,show_grid:!0,min_duration:36e5,date_format:"%d-%m-%Y %H:%i",xml_date:void 0,start_on_monday:!0,server_utc:!1,show_progress:!0,fit_tasks:!1,select_task:!0,scroll_on_click:!0,smart_rendering:!0,preserve_scroll:!0,readonly:!1,container_resize_timeout:20,deadlines:!0,date_grid:"%Y-%m-%d",drag_links:!0,drag_progress:!0,drag_resize:!0,drag_project:!1,drag_move:!0,drag_mode:{resize:"resize",progress:"progress",move:"move",ignore:"ignore"},round_dnd_dates:!0,link_wrapper_width:20,link_arrow_size:12,root_id:0,autofit:!1,columns:[{name:"text",tree:!0,width:"*",resize:!0},{name:"start_date",align:"center",resize:!0},{name:"duration",align:"center"},{name:"add",width:44}],scale_offset_minimal:!0,inherit_scale_class:!1,scales:[{unit:"day",step:1,date:"%d %M"}],time_step:60,duration_step:1,task_date:"%d %F %Y",time_picker:"%H:%i",task_attribute:"data-task-id",link_attribute:"data-link-id",layer_attribute:"data-layer",buttons_left:["gantt_save_btn","gantt_cancel_btn"],_migrate_buttons:{dhx_save_btn:"gantt_save_btn",dhx_cancel_btn:"gantt_cancel_btn",dhx_delete_btn:"gantt_delete_btn"},buttons_right:["gantt_delete_btn"],lightbox:{sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"time",type:"duration",map_to:"auto"}],project_sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"type",type:"typeselect",map_to:"type"},{name:"time",type:"duration",readonly:!0,map_to:"auto"}],milestone_sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"type",type:"typeselect",map_to:"type"},{name:"time",type:"duration",single_date:!0,map_to:"auto"}]},drag_lightbox:!0,sort:!1,details_on_create:!0,details_on_dblclick:!0,initial_scroll:!0,task_scroll_offset:100,order_branch:!1,order_branch_free:!1,task_height:void 0,bar_height:"full",bar_height_padding:9,min_column_width:70,min_grid_column_width:70,grid_resizer_column_attribute:"data-column-index",keep_grid_width:!1,grid_resize:!1,grid_elastic_columns:!1,show_tasks_outside_timescale:!1,show_unscheduled:!0,resize_rows:!1,task_grid_row_resizer_attribute:"data-row-index",min_task_grid_row_height:30,row_height:36,readonly_property:"readonly",editable_property:"editable",calendar_property:"calendar_id",resource_calendars:{},dynamic_resource_calendars:!1,inherit_calendar:!1,type_renderers:{},open_tree_initially:!1,optimize_render:!0,prevent_default_scroll:!1,show_errors:!0,wai_aria_attributes:!0,smart_scales:!0,rtl:!1,placeholder_task:!1,horizontal_scroll_key:"shiftKey",drag_timeline:{useKey:void 0,ignore:".gantt_task_line, .gantt_task_link",render:!1},drag_multiple:!0,csp:"auto"});var rt=typeof window<"u";const _t={isIE:rt&&(navigator.userAgent.indexOf("MSIE")>=0||navigator.userAgent.indexOf("Trident")>=0),isIE6:rt&&!XMLHttpRequest&&navigator.userAgent.indexOf("MSIE")>=0,isIE7:rt&&navigator.userAgent.indexOf("MSIE 7.0")>=0&&navigator.userAgent.indexOf("Trident")<0,isIE8:rt&&navigator.userAgent.indexOf("MSIE 8.0")>=0&&navigator.userAgent.indexOf("Trident")>=0,isOpera:rt&&navigator.userAgent.indexOf("Opera")>=0,isChrome:rt&&navigator.userAgent.indexOf("Chrome")>=0,isKHTML:rt&&(navigator.userAgent.indexOf("Safari")>=0||navigator.userAgent.indexOf("Konqueror")>=0),isFF:rt&&navigator.userAgent.indexOf("Firefox")>=0,isIPad:rt&&navigator.userAgent.search(/iPad/gi)>=0,isEdge:rt&&navigator.userAgent.indexOf("Edge")!=-1,isNode:!rt||typeof navigator>"u"||!1};function je(t){if(typeof t=="string"||typeof t=="number")return t;let e="";for(const n in t){let i="";t.hasOwnProperty(n)&&(i=typeof t[n]=="string"?encodeURIComponent(t[n]):typeof t[n]=="number"?String(t[n]):encodeURIComponent(JSON.stringify(t[n])),i=n+"="+i,e.length&&(i="&"+i),e+=i)}return e}function $t(t,e){var n={method:t};if(e.length===0)throw new Error("Arguments list of query is wrong.");if(e.length===1)return typeof e[0]=="string"?(n.url=e[0],n.async=!0):(n.url=e[0].url,n.async=e[0].async||!0,n.callback=e[0].callback,n.headers=e[0].headers),e[0].data?typeof e[0].data!="string"?n.data=je(e[0].data):n.data=e[0].data:n.data="",n;switch(n.url=e[0],t){case"GET":case"DELETE":n.callback=e[1],n.headers=e[2];break;case"POST":case"PUT":e[1]?typeof e[1]!="string"?n.data=je(e[1]):n.data=e[1]:n.data="",n.callback=e[2],n.headers=e[3]}return n}const Fe={date_to_str:(t,e,n)=>{t=t.replace(/%[a-zA-Z]/g,a=>{switch(a){case"%d":return`"+to_fixed(date.get${e?"UTC":""}Date())+"`;case"%m":return`"+to_fixed((date.get${e?"UTC":""}Month()+1))+"`;case"%j":return`"+date.get${e?"UTC":""}Date()+"`;case"%n":return`"+(date.get${e?"UTC":""}Month()+1)+"`;case"%y":return`"+to_fixed(date.get${e?"UTC":""}FullYear()%100)+"`;case"%Y":return`"+date.get${e?"UTC":""}FullYear()+"`;case"%D":return`"+locale.date.day_short[date.get${e?"UTC":""}Day()]+"`;case"%l":return`"+locale.date.day_full[date.get${e?"UTC":""}Day()]+"`;case"%M":return`"+locale.date.month_short[date.get${e?"UTC":""}Month()]+"`;case"%F":return`"+locale.date.month_full[date.get${e?"UTC":""}Month()]+"`;case"%h":return`"+to_fixed((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%g":return`"+((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%G":return`"+date.get${e?"UTC":""}Hours()+"`;case"%H":return`"+to_fixed(date.get${e?"UTC":""}Hours())+"`;case"%i":return`"+to_fixed(date.get${e?"UTC":""}Minutes())+"`;case"%a":return`"+(date.get${e?"UTC":""}Hours()>11?"pm":"am")+"`;case"%A":return`"+(date.get${e?"UTC":""}Hours()>11?"PM":"AM")+"`;case"%s":return`"+to_fixed(date.get${e?"UTC":""}Seconds())+"`;case"%W":return'"+to_fixed(getISOWeek(date))+"';case"%w":return'"+to_fixed(getWeek(date))+"';default:return a}});const i=new Function("date","to_fixed","locale","getISOWeek","getWeek",`return "${t}";`);return a=>i(a,n.date.to_fixed,n.locale,n.date.getISOWeek,n.date.getWeek)},str_to_date:(t,e,n)=>{let i="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);";const a=t.match(/%[a-zA-Z]/g);for(let o=0;o50?1900:2000);`;break;case"%g":case"%G":case"%h":case"%H":i+=`set[3]=temp[${o}]||0;`;break;case"%i":i+=`set[4]=temp[${o}]||0;`;break;case"%Y":i+=`set[0]=temp[${o}]||0;`;break;case"%a":case"%A":i+=`set[3]=set[3]%12+((temp[${o}]||'').toLowerCase()=='am'?0:12);`;break;case"%s":i+=`set[5]=temp[${o}]||0;`;break;case"%M":i+=`set[1]=locale.date.month_short_hash[temp[${o}]]||0;`;break;case"%F":i+=`set[1]=locale.date.month_full_hash[temp[${o}]]||0;`}let r="set[0],set[1],set[2],set[3],set[4],set[5]";e&&(r=` Date.UTC(${r})`);const s=new Function("date","locale",`var set=[0,0,1,0,0,0]; ${i} return new Date(${r});`);return o=>s(o,n.locale)}},Ve={date_to_str:(t,e,n)=>i=>t.replace(/%[a-zA-Z]/g,a=>{switch(a){case"%d":return e?n.date.to_fixed(i.getUTCDate()):n.date.to_fixed(i.getDate());case"%m":return e?n.date.to_fixed(i.getUTCMonth()+1):n.date.to_fixed(i.getMonth()+1);case"%j":return e?i.getUTCDate():i.getDate();case"%n":return e?i.getUTCMonth()+1:i.getMonth()+1;case"%y":return e?n.date.to_fixed(i.getUTCFullYear()%100):n.date.to_fixed(i.getFullYear()%100);case"%Y":return e?i.getUTCFullYear():i.getFullYear();case"%D":return e?n.locale.date.day_short[i.getUTCDay()]:n.locale.date.day_short[i.getDay()];case"%l":return e?n.locale.date.day_full[i.getUTCDay()]:n.locale.date.day_full[i.getDay()];case"%M":return e?n.locale.date.month_short[i.getUTCMonth()]:n.locale.date.month_short[i.getMonth()];case"%F":return e?n.locale.date.month_full[i.getUTCMonth()]:n.locale.date.month_full[i.getMonth()];case"%h":return e?n.date.to_fixed((i.getUTCHours()+11)%12+1):n.date.to_fixed((i.getHours()+11)%12+1);case"%g":return e?(i.getUTCHours()+11)%12+1:(i.getHours()+11)%12+1;case"%G":return e?i.getUTCHours():i.getHours();case"%H":return e?n.date.to_fixed(i.getUTCHours()):n.date.to_fixed(i.getHours());case"%i":return e?n.date.to_fixed(i.getUTCMinutes()):n.date.to_fixed(i.getMinutes());case"%a":return e?i.getUTCHours()>11?"pm":"am":i.getHours()>11?"pm":"am";case"%A":return e?i.getUTCHours()>11?"PM":"AM":i.getHours()>11?"PM":"AM";case"%s":return e?n.date.to_fixed(i.getUTCSeconds()):n.date.to_fixed(i.getSeconds());case"%W":return e?n.date.to_fixed(n.date.getUTCISOWeek(i)):n.date.to_fixed(n.date.getISOWeek(i));default:return a}}),str_to_date:(t,e,n)=>i=>{const a=[0,0,1,0,0,0],r=i.match(/[a-zA-Z]+|[0-9]+/g),s=t.match(/%[a-zA-Z]/g);for(let o=0;o50?1900:2e3);break;case"%g":case"%G":case"%h":case"%H":a[3]=r[o]||0;break;case"%i":a[4]=r[o]||0;break;case"%Y":a[0]=r[o]||0;break;case"%a":case"%A":a[3]=a[3]%12+((r[o]||"").toLowerCase()==="am"?0:12);break;case"%s":a[5]=r[o]||0;break;case"%M":a[1]=n.locale.date.month_short_hash[r[o]]||0;break;case"%F":a[1]=n.locale.date.month_full_hash[r[o]]||0}return e?new Date(Date.UTC(a[0],a[1],a[2],a[3],a[4],a[5])):new Date(a[0],a[1],a[2],a[3],a[4],a[5])}};function qn(t){var e=null;function n(){var a=!1;return t.config.csp==="auto"?(e===null&&function(){try{new Function("canUseCsp = false;")}catch{e=!0}}(),a=e):a=t.config.csp,a}var i={init:function(){for(var a=t.locale,r=a.date.month_short,s=a.date.month_short_hash={},o=0;o=9?9:s>=6?6:s>=3?3:0,a.setMonth(r),a},year_start:function(a){return a.setMonth(0),this.month_start(a)},day_start:function(a){return this.date_part(a)},hour_start:function(a){return a.getMinutes()&&a.setMinutes(0),this.minute_start(a),a},minute_start:function(a){return a.getSeconds()&&a.setSeconds(0),a.getMilliseconds()&&a.setMilliseconds(0),a},_add_days:function(a,r,s){a.setDate(a.getDate()+r);var o=r>=0,l=!s.getHours()&&a.getHours(),d=a.getDate()<=s.getDate()||a.getMonth()1&&l&&a.setHours(0),a},add:function(a,r,s){var o=new Date(a.valueOf());switch(s){case"day":o=this._add_days(o,r,a);break;case"week":o=this._add_days(o,7*r,a);break;case"month":o.setMonth(o.getMonth()+r);break;case"year":o.setYear(o.getFullYear()+r);break;case"hour":o.setTime(o.getTime()+60*r*60*1e3);break;case"minute":o.setTime(o.getTime()+60*r*1e3);break;default:return this["add_"+s](a,r,s)}return o},add_quarter:function(a,r){return this.add(a,3*r,"month")},to_fixed:function(a){return a<10?"0"+a:a},copy:function(a){return new Date(a.valueOf())},date_to_str:function(a,r){var s=Fe;return n()&&(s=Ve),s.date_to_str(a,r,t)},str_to_date:function(a,r){var s=Fe;return n()&&(s=Ve),s.str_to_date(a,r,t)},getISOWeek:function(a){return t.date._getWeekNumber(a,!0)},_getWeekNumber:function(a,r){if(!a)return!1;var s=a.getDay();r&&s===0&&(s=7);var o=new Date(a.valueOf());o.setDate(a.getDate()+(4-s));var l=o.getFullYear(),d=Math.round((o.getTime()-new Date(l,0,1).getTime())/864e5);return 1+Math.floor(d/7)},getWeek:function(a){return t.date._getWeekNumber(a,t.config.start_on_monday)},getUTCISOWeek:function(a){return t.date.getISOWeek(a)},convert_to_utc:function(a){return new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds())},parseDate:function(a,r){return a&&!a.getFullYear&&(typeof r!="function"&&(r=typeof r=="string"?r==="parse_date"||r==="xml_date"?t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date:t.defined(t.templates[r])?t.templates[r]:t.date.str_to_date(r):t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date),a=a?r(a):null),a}};return i}class Gn{constructor(e){const{url:n,token:i}=e;this._url=n,this._token=i,this._mode=1,this._seed=1,this._queue=[],this.data={},this.api={},this._events={}}headers(){return{Accept:"application/json","Content-Type":"application/json","Remote-Token":this._token}}fetch(e,n){const i={credentials:"include",headers:this.headers()};return n&&(i.method="POST",i.body=n),fetch(e,i).then(a=>a.json())}load(e){return e&&(this._url=e),this.fetch(this._url).then(n=>this.parse(n))}parse(e){const{key:n,websocket:i}=e;n&&(this._token=e.key);for(const a in e.data)this.data[a]=e.data[a];for(const a in e.api){const r=this.api[a]={},s=e.api[a];for(const o in s)r[o]=this._wrapper(a+"."+o)}return i&&this.connect(),this}connect(){const e=this._socket;e&&(this._socket=null,e.onclose=function(){},e.close()),this._mode=2,this._socket=function(n,i,a,r){let s=i;s[0]==="/"&&(s=document.location.protocol+"//"+document.location.host+i),s=s.replace(/^http(s|):/,"ws$1:");const o=s.indexOf("?")!=-1?"&":"?";s=`${s}${o}token=${a}&ws=1`;const l=new WebSocket(s);return l.onclose=()=>setTimeout(()=>n.connect(),2e3),l.onmessage=d=>{const c=JSON.parse(d.data);switch(c.action){case"result":n.result(c.body,[]);break;case"event":n.fire(c.body.name,c.body.value);break;case"start":r();break;default:n.onError(c.data)}},l}(this,this._url,this._token,()=>(this._mode=3,this._send(),this._resubscribe(),this))}_wrapper(e){return(function(){const n=[].slice.call(arguments);let i=null;const a=new Promise((r,s)=>{i={data:{id:this._uid(),name:e,args:n},status:1,resolve:r,reject:s},this._queue.push(i)});return this.onCall(i,a),this._mode===3?this._send(i):setTimeout(()=>this._send(),1),a}).bind(this)}_uid(){return(this._seed++).toString()}_send(e){if(this._mode==2)return void setTimeout(()=>this._send(),100);const n=e?[e]:this._queue.filter(a=>a.status===1);if(!n.length)return;const i=n.map(a=>(a.status=2,a.data));this._mode!==3?this.fetch(this._url,JSON.stringify(i)).catch(a=>this.onError(a)).then(a=>this.result(a,i)):this._socket.send(JSON.stringify({action:"call",body:i}))}result(e,n){const i={};if(e)for(let a=0;a=0;a--){const r=this._queue[a],s=i[r.data.id];s&&(this.onResponse(r,s),s.error?r.reject(s.error):r.resolve(s.data),this._queue.splice(a,1))}}on(e,n){const i=this._uid();let a=this._events[e];const r=!!a;return r||(a=this._events[e]=[]),a.push({id:i,handler:n}),r||this._mode!=3||this._socket.send(JSON.stringify({action:"subscribe",name:e})),{name:e,id:i}}_resubscribe(){if(this._mode==3)for(const e in this._events)this._socket.send(JSON.stringify({action:"subscribe",name:e}))}detach(e){if(!e){if(this._mode==3)for(const r in this._events)this._socket.send(JSON.stringify({action:"unsubscribe",key:r}));return void(this._events={})}const{id:n,name:i}=e,a=this._events[i];if(a){const r=a.filter(s=>s.id!=n);r.length?this._events[i]=r:(delete this._events[i],this._mode==3&&this._socket.send(JSON.stringify({action:"unsubscribe",name:i})))}}fire(e,n){const i=this._events[e];if(i)for(let a=0;as.json())},this._ready=n.load().then(i=>this._remote=i),this.ready=function(){return this._ready},this.on=function(i,a){this.ready().then(r=>{if(typeof i=="string")r.on(i,a);else for(const s in i)r.on(s,i[s])})}};function Ue(t,e){if(!e)return!0;if(t._on_timeout)return!1;var n=Math.ceil(1e3/e);return n<2||(setTimeout(function(){delete t._on_timeout},n),t._on_timeout=!0),!0}var Jn=function(){var t={};return{getState:function(e){if(t[e])return t[e].method();var n={};for(var i in t)t[i].internal||N(n,t[i].method(),!0);return n},registerProvider:function(e,n,i){t[e]={method:n,internal:i}},unregisterProvider:function(e){delete t[e]}}};const Kn=Promise;var et={$create:function(t){return N(t||[],this)},$removeAt:function(t,e){t>=0&&this.splice(t,e||1)},$remove:function(t){this.$removeAt(this.$find(t))},$insertAt:function(t,e){if(e||e===0){var n=this.splice(e,this.length-e);this[e]=t,this.push.apply(this,n)}else this.push(t)},$find:function(t){for(var e=0;ei&&(e=Math.min(n.length,e))}this.pull[t.id]=t,this.isSilent()||this._updateOrder(function(){this.$find(t.id)===-1&&this.$insertAt(t.id,e)}),this.filter()},isVisible:function(t){return this.visibleOrder.$find(t)>-1},getVisibleItems:function(){return this.getIndexRange()},addItem:function(t,e){return W(t.id)||(t.id=at()),this.$initItem&&(t=this.$initItem(t)),!(!this.isSilent()&&this.callEvent("onBeforeAdd",[t.id,t])===!1)&&(this._addItemInner(t,e),this.isSilent()||(this.callEvent("onAfterAdd",[t.id,t]),this.callEvent("onStoreUpdated",[t.id,t,"add"])),t.id)},_changeIdInner:function(t,e){this.pull[t]&&(this.pull[e]=this.pull[t]);var n=this._searchVisibleOrder[t];this.pull[e].id=e,this._updateOrder(function(){this[this.$find(t)]=e}),this._searchVisibleOrder[e]=n,delete this._searchVisibleOrder[t],delete this.pull[t]},changeId:function(t,e){this._changeIdInner(t,e),this.callEvent("onIdChange",[t,e])},exists:function(t){return!!this.pull[t]},_moveInner:function(t,e){var n=this.getIdByIndex(t);this._updateOrder(function(){this.$removeAt(t),this.$insertAt(n,Math.min(this.length,e))})},move:function(t,e){var n=this.getIdByIndex(t),i=this.getItem(n);this._moveInner(t,e),this.isSilent()||this.callEvent("onStoreUpdated",[i.id,i,"move"])},clearAll:function(){this.$destroyed||(this.silent(function(){this.unselect()}),this.pull={},this.visibleOrder=et.$create(),this.fullOrder=et.$create(),this.isSilent()||(this.callEvent("onClearAll",[]),this.refresh()))},silent:function(t,e){var n=!1;this.isSilent()&&(n=!0),this._skip_refresh=!0,t.call(e||this),n||(this._skip_refresh=!1)},isSilent:function(){return!!this._skip_refresh},arraysEqual:function(t,e){if(t.length!==e.length)return!1;for(var n=0;n=n.$level)return!1;for(;n&&this.exists(i);){if((n=this.getItem(i))&&n.id==e)return!0;i=this.getParent(n)}return!1},getSiblings:function(t){if(!this.exists(t))return et.$create();var e=this.getParent(t);return this.getChildren(e)},getNextSibling:function(t){for(var e=this.getSiblings(t),n=0,i=e.length;n0&&(a="0"),a||null}return null},getPrevSibling:function(t){for(var e=this.getSiblings(t),n=0,i=e.length;n0&&(a="0"),a||null}return null},getParent:function(t){var e=null;return(e=t.id!==void 0?t:this.getItem(t))?e[this.$parentProperty]:this.$getRootId()},clearAll:function(){this._branches={},st.prototype.clearAll.call(this)},calculateItemLevel:function(t){var e=0;return this.eachParent(function(){e++},t),e},_setParentInner:function(t,e,n){n||(t.hasOwnProperty("$rendered_parent")?this._move_branch(t,t.$rendered_parent,e):this._move_branch(t,t[this.$parentProperty],e))},setParent:function(t,e,n){this._setParentInner(t,e,n),t[this.$parentProperty]=e},_eachItemCached:function(t,e){for(var n=0,i=e.length;n=0;o--)i.push(s[o])}},eachItem:function(t,e){var n=this.$getRootId();W(e)||(e=n);var i=it(e,n)||n,a=!1,r=!1,s=null;i===n&&(this._eachItemMainRangeCache?(a=!0,s=this._eachItemMainRangeCache):(r=!0,s=this._eachItemMainRangeCache=[])),a?this._eachItemCached(t,s):this._eachItemIterate(t,i,r?s:null)},eachParent:function(t,e){for(var n={},i=e,a=this.getParent(i);this.exists(a);){if(n[a])throw new Error("Invalid tasks tree. Cyclic reference has been detected on task "+a);n[a]=!0,i=this.getItem(a),t.call(this,i),a=this.getParent(i)}},_add_branch:function(t,e,n){var i=n===void 0?this.getParent(t):n;this.hasChild(i)||(this._branches[i]=et.$create());var a=this.getChildren(i);a.indexOf(t.id+"")>-1||a.indexOf(+t.id)>-1||(1*e==e?a.splice(e,0,t.id):a.push(t.id),t.$rendered_parent=i)},_move_branch:function(t,e,n){this._eachItemMainRangeCache=null,this._replace_branch_child(e,t.id),this.exists(n)||n==this.$getRootId()?this._add_branch(t,void 0,n):delete this._branches[t.id],t.$level=this.calculateItemLevel(t),this.eachItem(function(i){i.$level=this.calculateItemLevel(i)},t.id)},_replace_branch_child:function(t,e,n){var i=this.getChildren(t);if(i&&t!==void 0){var a=et.$create();let r=i.indexOf(e+"");r!=-1||isNaN(+e)||(r=i.indexOf(+e)),r>-1&&(n?i.splice(r,1,n):i.splice(r,1)),a=i,this._branches[t]=a}},sort:function(t,e,n){this.exists(n)||(n=this.$getRootId()),t||(t="order");var i=typeof t=="string"?function(l,d){return l[t]==d[t]||X(l[t])&&X(d[t])&&l[t].valueOf()==d[t].valueOf()?0:l[t]>d[t]?1:-1}:t;if(e){var a=i;i=function(l,d){return a(d,l)}}var r=this.getChildren(n);if(r){for(var s=[],o=r.length-1;o>=0;o--)s[o]=this.getItem(r[o]);for(s.sort(i),o=0;o0&&(c=c.filter(u=>u!==void 0),d=d.concat(c))}if((l.start==null||l.end==null)&&l.ids==null)throw new Error("Invalid range returned from 'getVisibleRange' of the layer")}else d=n.getVisibleItems();o.prepare_data&&o.prepare_data(d,o),o.update_items(d)}};function s(o){return!!o.$services.getService("state").getState("batchUpdate").batch_update}n.attachEvent("onStoreUpdated",function(o,l,d){if(F(e))return!0;const c=e.$services.getService("layers").getDataRender(t);c&&(c.onUpdateRequest=function(u){r(u)})}),n.attachEvent("onStoreUpdated",function(o,l,d){s(e)||(o&&d!="move"&&d!="delete"?(n.callEvent("onBeforeRefreshItem",[l.id]),n.callEvent("onAfterRefreshItem",[l.id])):(n.callEvent("onBeforeRefreshAll",[]),n.callEvent("onAfterRefreshAll",[])))}),n.attachEvent("onAfterRefreshAll",function(){if(F(e))return!0;const o=e.$services.getService("layers").getDataRender(t);o&&!s(e)&&a(o)}),n.attachEvent("onAfterRefreshItem",function(o){if(F(e))return!0;const l=e.$services.getService("layers").getDataRender(t);l&&i(o,l)}),n.attachEvent("onItemOpen",function(){if(F(e))return!0;e.render()}),n.attachEvent("onItemClose",function(){if(F(e))return!0;e.render()}),n.attachEvent("onIdChange",function(o,l){if(F(e))return!0;if(n.callEvent("onBeforeIdChange",[o,l]),!s(e)&&!n.isSilent()){const d=e.$services.getService("layers").getDataRender(t);d?(function(c,u,h){for(let g=0;go.length-1||l<=0||s>o.length-1)){var d=i-this.getSum(o,r,s);this.adjustSize(d,o,r,s),this.adjustSize(-d,o,s+1),a.full_width=this.getSum(o)}},splitSize:function(i,a){for(var r=[],s=0;sa(o.unit,o.step)?-1:0});for(var r=0;r`;if(i+='',i+="
",n.innerHTML=i,e.config.quick_info_detached){const a=this._getContainer();e.event(a.parent,"scroll",()=>{this.hide()})}return this._quickInfoBox=n,n}_init_quick_info(e){const n=this._gantt,i=n.getTask(e);return typeof this._quickInfoReadonly=="boolean"&&n.isReadonly(i)!==this._quickInfoReadonly&&(this.hide(!0),this._quickInfoBox=null),this._quickInfoReadonly=n.isReadonly(i),this._quickInfoBox||(this._quickInfoBox=this._createQuickInfoElement()),this._quickInfoBox}_prepare_quick_info_classname(e){const n=this._gantt,i=n.getTask(e);let a=`gantt_cal_quick_info gantt_${n.getTaskType(i)}`;const r=n.templates.quick_info_class(i.start_date,i.end_date,i);return r&&(a+=" "+r),a}_fill_quick_data(e){const n=this._gantt,i=n.getTask(e);this._quickInfoBoxId=e;let a=[];if(this._quickInfoReadonly){const r=n.config.quickinfo_buttons,s={icon_delete:!0,icon_edit:!0};for(let o=0;oc.offsetHeight/2&&(g=e.top-(o+e.height+2*n),g{a.style.left="10px"},1)):(a.style.left="auto",a.style.right="-300px",setTimeout(()=>{a.style.right="10px"},1)),a.className+=" gantt_qi_"+(e.dx===1?"left":"right"),i.$root.appendChild(a)}_qi_button_click(e){const n=this._gantt,i=this._quickInfoBox;if(!e||e===i)return;if(e.closest(".gantt_cal_qi_close_btn"))return void this.hide();const a=e.className;if(a.indexOf("_icon")!==-1){const r=this._quickInfoBoxId;n.$click.buttons[a.split(" ")[1].replace("icon_","")](r)}else this._qi_button_click(e.parentNode)}_getContainer(){const e=this._gantt;let n=this._container?this._container:e.$task_data;return n&&n.offsetHeight&&n.offsetWidth?{parent:n,xViewport:e.$task,yViewport:e.$task_data}:(n=this._container?this._container:e.$grid_data,n&&n.offsetHeight&&n.offsetWidth?{parent:n,xViewport:e.$grid,yViewport:e.$grid_data}:{parent:this._container?this._container:e.$layout,xViewport:e.$layout,yViewport:e.$layout})}}var ae,Rn={}.constructor.toString();function V(t){var e,n;if(t&&typeof t=="object")switch(!0){case X(t):n=new Date(t);break;case ne(t):for(n=new Array(t.length),e=0;ei.bottom&&(r.bottom=i.bottom,r.top=r.bottom-r.height),r.lefti.right&&(r.right=i.right,r.left=r.right-r.width),d.x>=r.left&&d.x<=r.right&&(r.left=d.x-r.width-s,r.right=r.left+r.width),d.y>=r.top&&d.y<=r.bottom&&(r.top=d.y-r.height-o,r.bottom=r.top+r.height),r}_getViewPortSize(){const e=this._gantt,n=this._getViewPort();let i,a=n,r=window.scrollY+document.body.scrollTop,s=window.scrollX+document.body.scrollLeft;return n===e.$task_data?(a=e.$task,r=0,s=0,i=z(e.$task)):i=z(a),{left:i.x+s,top:i.y+r,width:i.width,height:i.height,bottom:i.y+i.height+r,right:i.x+i.width+s}}}class Bn{constructor(e){this._listeners={},this.tooltip=new On(e),this._gantt=e,this._domEvents=re(),this._initDelayedFunctions()}destructor(){this.tooltip.hide(),this._domEvents.detachAll()}hideTooltip(){this.delayHide()}attach(e){let n=document.body;const i=this._gantt;e.global||(n=i.$root);let a=null;const r=s=>{const o=mt(s),l=lt(o,e.selector);if(Y(o,this.tooltip.getNode()))return;const d=()=>{a=l,e.onmouseenter(s,l)};a?l&&l===a?e.onmousemove(s,l):(e.onmouseleave(s,a),a=null,l&&l!==a&&d()):l&&d()};this.detach(e.selector),this._domEvents.attach(n,"mousemove",r),this._listeners[e.selector]={node:n,handler:r}}detach(e){const n=this._listeners[e];n&&this._domEvents.detach(n.node,"mousemove",n.handler)}tooltipFor(e){const n=i=>{let a=i;return document.createEventObject&&!document.createEvent&&(a=document.createEventObject(i)),a};this._initDelayedFunctions(),this.attach({selector:e.selector,global:e.global,onmouseenter:(i,a)=>{const r=e.html(i,a);r&&this.delayShow(n(i),r)},onmousemove:(i,a)=>{const r=e.html(i,a);r?this.delayShow(n(i),r):(this.delayShow.$cancelTimeout(),this.delayHide())},onmouseleave:()=>{this.delayShow.$cancelTimeout(),this.delayHide()}})}_initDelayedFunctions(){const e=this._gantt;this.delayShow&&this.delayShow.$cancelTimeout(),this.delayHide&&this.delayHide.$cancelTimeout(),this.tooltip.hide(),this.delayShow=Re((n,i)=>{e.callEvent("onBeforeTooltip",[n])===!1?this.tooltip.hide():(this.tooltip.setContent(i),this.tooltip.show(n))},e.config.tooltip_timeout||1),this.delayHide=Re(()=>{this.delayShow.$cancelTimeout(),this.tooltip.hide()},e.config.tooltip_hide_timeout||1)}}const ze={onBeforeUndo:"onAfterUndo",onBeforeRedo:"onAfterRedo"},We=["onTaskDragStart","onAfterTaskUpdate","onAfterTaskDelete","onBeforeBatchUpdate"];class zn{constructor(e,n){this._batchAction=null,this._batchMode=!1,this._ignore=!1,this._ignoreMoveEvents=!1,this._initialTasks={},this._initialLinks={},this._nestedTasks={},this._nestedLinks={},this._undo=e,this._gantt=n,this._attachEvents()}store(e,n,i=!1){return n===this._gantt.config.undo_types.task?this._storeTask(e,i):n===this._gantt.config.undo_types.link&&this._storeLink(e,i)}isMoveEventsIgnored(){return this._ignoreMoveEvents}toggleIgnoreMoveEvents(e){this._ignoreMoveEvents=e||!1}startIgnore(){this._ignore=!0}stopIgnore(){this._ignore=!1}startBatchAction(){this._timeout||(this._timeout=setTimeout(()=>{this.stopBatchAction(),this._timeout=null},10)),this._ignore||this._batchMode||(this._batchMode=!0,this._batchAction=this._undo.action.create())}stopBatchAction(){if(this._ignore)return;const e=this._undo;this._batchAction&&e.logAction(this._batchAction),this._batchMode=!1,this._batchAction=null}onTaskAdded(e){this._ignore||this._storeTaskCommand(e,this._undo.command.type.add)}onTaskUpdated(e){this._ignore||this._storeTaskCommand(e,this._undo.command.type.update)}onTaskMoved(e){if(!this._ignore){e.$local_index=this._gantt.getTaskIndex(e.id);const n=this.getInitialTask(e.id);if(e.$local_index===n.$local_index&&this._gantt.getParent(e)===this._gantt.getParent(n))return;this._storeEntityCommand(e,this.getInitialTask(e.id),this._undo.command.type.move,this._undo.command.entity.task)}}onTaskDeleted(e){if(!this._ignore){if(this._storeTaskCommand(e,this._undo.command.type.remove),this._nestedTasks[e.id]){const n=this._nestedTasks[e.id];for(let i=0;i{e||(e=setTimeout(()=>{e=null}),this.clearInitialTasks(),n.eachTask(l=>{this.setInitialTask(l.id)}),this.clearInitialLinks(),n.getLinks().forEach(l=>{this.setInitialLink(l.id)}))},a=l=>n.copy(n.getTask(l));for(const l in ze)n.attachEvent(l,()=>(this.startIgnore(),!0)),n.attachEvent(ze[l],()=>(this.stopIgnore(),!0));for(let l=0;l(this.startBatchAction(),!0));n.attachEvent("onParse",()=>{this._undo.clearUndoStack(),this._undo.clearRedoStack(),i()}),n.attachEvent("onAfterTaskAdd",(l,d)=>{this.setInitialTask(l,!0),this.onTaskAdded(d)}),n.attachEvent("onAfterTaskUpdate",(l,d)=>{this.onTaskUpdated(d)}),n.attachEvent("onAfterTaskDelete",(l,d)=>{this.onTaskDeleted(d)}),n.attachEvent("onAfterLinkAdd",(l,d)=>{this.setInitialLink(l,!0),this.onLinkAdded(d)}),n.attachEvent("onAfterLinkUpdate",(l,d)=>{this.onLinkUpdated(d)}),n.attachEvent("onAfterLinkDelete",(l,d)=>{this.onLinkDeleted(d)}),n.attachEvent("onRowDragEnd",(l,d)=>(this.onTaskMoved(a(l)),this.toggleIgnoreMoveEvents(),!0)),n.attachEvent("onBeforeTaskDelete",l=>{this.store(l,n.config.undo_types.task);const d=[];return i(),n.eachTask(c=>{d.push(c.id)},l),this.setNestedTasks(l,d),!0});const r=n.getDatastore("task");r.attachEvent("onBeforeItemMove",(l,d,c)=>(this.isMoveEventsIgnored()||i(),!0)),r.attachEvent("onAfterItemMove",(l,d,c)=>(this.isMoveEventsIgnored()||this.onTaskMoved(a(l)),!0)),n.attachEvent("onRowDragStart",(l,d,c)=>(this.toggleIgnoreMoveEvents(!0),i(),!0));let s=null,o=!1;if(n.attachEvent("onBeforeTaskDrag",l=>{if(s=n.getState().drag_id,s===l){const d=n.getTask(l);n.isSummaryTask(d)&&n.config.drag_project&&(o=!0)}if(n.plugins().multiselect){const d=n.getSelectedTasks();d.length>1&&d.forEach(c=>{this.store(c,n.config.undo_types.task,!0)})}return this.store(l,n.config.undo_types.task)}),n.attachEvent("onAfterTaskDrag",l=>{(o||n.plugins().multiselect&&n.getSelectedTasks().length>1)&&s===l&&(o=!1,s=null,this.stopBatchAction()),this.store(l,n.config.undo_types.task,!0)}),n.attachEvent("onLightbox",l=>this.store(l,n.config.undo_types.task)),n.attachEvent("onBeforeTaskAutoSchedule",l=>(this.store(l.id,n.config.undo_types.task,!0),!0)),n.ext.inlineEditors){let l=null,d=null;n.attachEvent("onGanttLayoutReady",()=>{l&&n.ext.inlineEditors.detachEvent(l),d&&n.ext.inlineEditors.detachEvent(d),d=n.ext.inlineEditors.attachEvent("onEditStart",c=>{this.store(c.id,n.config.undo_types.task)}),l=n.ext.inlineEditors.attachEvent("onBeforeEditStart",c=>(this.stopBatchAction(),!0))})}}_storeCommand(e){const n=this._undo;if(n.updateConfigs(),n.undoEnabled)if(this._batchMode)this._batchAction.commands.push(e);else{const i=n.action.create([e]);n.logAction(i)}}_storeEntityCommand(e,n,i,a){const r=this._undo.command.create(e,n,i,a);this._storeCommand(r)}_storeTaskCommand(e,n){this._gantt.isTaskExists(e.id)&&(e.$local_index=this._gantt.getTaskIndex(e.id)),this._storeEntityCommand(e,this.getInitialTask(e.id),n,this._undo.command.entity.task)}_storeLinkCommand(e,n){this._storeEntityCommand(e,this.getInitialLink(e.id),n,this._undo.command.entity.link)}_getLinks(e){return e.$source.concat(e.$target)}_storeTask(e,n=!1){const i=this._gantt;return this.setInitialTask(e,n),i.eachTask(a=>{this.setInitialTask(a.id)},e),!0}_storeLink(e,n=!1){return this.setInitialLink(e,n),!0}}class Wn{constructor(e){this.maxSteps=100,this.undoEnabled=!0,this.redoEnabled=!0,this.action={create:n=>({commands:n?n.slice():[]}),invert:n=>{const i=this._gantt.copy(n),a=this.command;for(let r=0;r{const s=this._gantt;return{entity:r,type:a,value:s.copy(n),oldValue:s.copy(i||n)}},invert:n=>{const i=this._gantt.copy(n);return i.type=this.command.inverseCommands(n.type),i},inverseCommands:n=>{const i=this._gantt,a=this.command.type;switch(n){case a.update:return a.update;case a.remove:return a.add;case a.add:return a.remove;case a.move:return a.move;default:return i.assert(!1,"Invalid command "+n),null}}},this._undoStack=[],this._redoStack=[],this._gantt=e}getUndoStack(){return this._undoStack}setUndoStack(e){this._undoStack=e}getRedoStack(){return this._redoStack}setRedoStack(e){this._redoStack=e}clearUndoStack(){this._undoStack=[]}clearRedoStack(){this._redoStack=[]}updateConfigs(){const e=this._gantt;this.maxSteps=e.config.undo_steps||100,this.command.entity=e.config.undo_types,this.command.type=e.config.undo_actions,this.undoEnabled=!!e.config.undo,this.redoEnabled=!!e.config.redo}undo(){const e=this._gantt;if(this.updateConfigs(),!this.undoEnabled)return;const n=this._pop(this._undoStack);if(n&&this._reorderCommands(n),e.callEvent("onBeforeUndo",[n])!==!1&&n)return this._applyAction(this.action.invert(n)),this._push(this._redoStack,e.copy(n)),void e.callEvent("onAfterUndo",[n]);e.callEvent("onAfterUndo",[null])}redo(){const e=this._gantt;if(this.updateConfigs(),!this.redoEnabled)return;const n=this._pop(this._redoStack);if(n&&this._reorderCommands(n),e.callEvent("onBeforeRedo",[n])!==!1&&n)return this._applyAction(n),this._push(this._undoStack,e.copy(n)),void e.callEvent("onAfterRedo",[n]);e.callEvent("onAfterRedo",[null])}logAction(e){this._push(this._undoStack,e),this._redoStack=[]}_push(e,n){const i=this._gantt;if(!n.commands.length)return;const a=e===this._undoStack?"onBeforeUndoStack":"onBeforeRedoStack";if(i.callEvent(a,[n])!==!1&&n.commands.length){for(e.push(n);e.length>this.maxSteps;)e.shift();return n}}_pop(e){return e.pop()}_reorderCommands(e){const n={any:0,link:1,task:2},i={move:1,any:0};e.commands.sort(function(a,r){if(a.entity==="task"&&r.entity==="task")return a.type!==r.type?(i[r.type]||0)-(i[a.type]||0):a.type==="move"&&a.oldValue&&r.oldValue&&r.oldValue.parent===a.oldValue.parent?a.oldValue.$index-r.oldValue.$index:0;{const s=n[a.entity]||n.any;return(n[r.entity]||n.any)-s}})}_applyAction(e){let n=null;const i=this.command.entity,a=this.command.type,r=this._gantt,s={};s[i.task]={add:"addTask",get:"getTask",update:"updateTask",remove:"deleteTask",move:"moveTask",isExists:"isTaskExists"},s[i.link]={add:"addLink",get:"getLink",update:"updateLink",remove:"deleteLink",isExists:"isLinkExists"},r.batchUpdate(function(){for(let o=0;o{const i={viewPort:t.$task_data,...e};if(t.config.click_drag){const a=t.config.click_drag;i.render=a.render||e.render,i.className=a.className||e.className,i.callback=a.callback||e.callback,i.viewPort=a.viewPort||t.$task_data,i.useRequestAnimationFrame=a.useRequestAnimationFrame===void 0?e.useRequestAnimationFrame:a.useRequestAnimationFrame,i.singleRow=a.singleRow===void 0?e.singleRow:a.singleRow;const r=t.$ui.getView("timeline"),s=new Nn(i,t,r);t.ext.clickDrag.attach(s,a.useKey,a.ignore)}}),t.attachEvent("onDestroy",()=>{n.destructor()})},drag_timeline:function(t){t.ext||(t.ext={}),t.ext.dragTimeline={create:()=>ie.create(t)},t.config.drag_timeline={enabled:!0,render:!1}},fullscreen:function(t){function e(){const c=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;return!(!c||c!==document.body)}function n(){try{return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled}catch(c){console.error("Fullscreen is not available:",c)}}t.$services.getService("state").registerProvider("fullscreen",()=>n()?{fullscreen:e()}:void 0);let i={overflow:null,padding:null,paddingTop:null,paddingRight:null,paddingBottom:null,paddingLeft:null};const a={width:null,height:null,top:null,left:null,position:null,zIndex:null,modified:!1};let r=null;function s(c,u){u.width=c.width,u.height=c.height,u.top=c.top,u.left=c.left,u.position=c.position,u.zIndex=c.zIndex}let o=!1;function l(){if(!t.$container)return;let c;e()?o&&(c="onExpand",function(){const u=t.ext.fullscreen.getFullscreenElement(),h=document.body;s(u.style,a),i={overflow:h.style.overflow,padding:h.style.padding?h.style.padding:null,paddingTop:h.style.paddingTop?h.style.paddingTop:null,paddingRight:h.style.paddingRight?h.style.paddingRight:null,paddingBottom:h.style.paddingBottom?h.style.paddingBottom:null,paddingLeft:h.style.paddingLeft?h.style.paddingLeft:null},h.style.padding&&(h.style.padding="0"),h.style.paddingTop&&(h.style.paddingTop="0"),h.style.paddingRight&&(h.style.paddingRight="0"),h.style.paddingBottom&&(h.style.paddingBottom="0"),h.style.paddingLeft&&(h.style.paddingLeft="0"),h.style.overflow="hidden",u.style.width="100vw",u.style.height="100vh",u.style.top="0px",u.style.left="0px",u.style.position="absolute",u.style.zIndex=1,a.modified=!0,r=function(g){let f=g.parentNode;const y=[];for(;f&&f.style;)y.push({element:f,originalPositioning:f.style.position}),f.style.position="static",f=f.parentNode;return y}(u)}()):o&&(o=!1,c="onCollapse",function(){const u=t.ext.fullscreen.getFullscreenElement(),h=document.body;a.modified&&(i.padding&&(h.style.padding=i.padding),i.paddingTop&&(h.style.paddingTop=i.paddingTop),i.paddingRight&&(h.style.paddingRight=i.paddingRight),i.paddingBottom&&(h.style.paddingBottom=i.paddingBottom),i.paddingLeft&&(h.style.paddingLeft=i.paddingLeft),h.style.overflow=i.overflow,i={overflow:null,padding:null,paddingTop:null,paddingRight:null,paddingBottom:null,paddingLeft:null},s(a,u.style),a.modified=!1),r.forEach(g=>{g.element.style.position=g.originalPositioning}),r=null}()),setTimeout(()=>{t.render()}),setTimeout(()=>{t.callEvent(c,[t.ext.fullscreen.getFullscreenElement()])})}function d(){return!t.$container||!t.ext.fullscreen.getFullscreenElement()?!0:n()?!1:((console.warning||console.log)("The `fullscreen` feature not being allowed, or full-screen mode not being supported"),!0)}t.ext.fullscreen={expand(){if(d()||e()||!t.callEvent("onBeforeExpand",[this.getFullscreenElement()]))return;o=!0;const c=document.body,u=c.webkitRequestFullscreen?[Element.ALLOW_KEYBOARD_INPUT]:[],h=c.msRequestFullscreen||c.mozRequestFullScreen||c.webkitRequestFullscreen||c.requestFullscreen;h&&h.apply(c,u)},collapse(){if(d()||!e()||!t.callEvent("onBeforeCollapse",[this.getFullscreenElement()]))return;const c=document.msExitFullscreen||document.mozCancelFullScreen||document.webkitExitFullscreen||document.exitFullscreen;c&&c.apply(document)},toggle(){d()||(e()?this.collapse():this.expand())},getFullscreenElement:()=>t.$root},t.expand=function(){t.ext.fullscreen.expand()},t.collapse=function(){t.ext.fullscreen.collapse()},t.attachEvent("onGanttReady",function(){t.event(document,"webkitfullscreenchange",l),t.event(document,"mozfullscreenchange",l),t.event(document,"MSFullscreenChange",l),t.event(document,"fullscreenChange",l),t.event(document,"fullscreenchange",l)})},keyboard_navigation:function(t){(function(e){e.config.keyboard_navigation=!0,e.config.keyboard_navigation_cells=!1,e.$keyboardNavigation={},e._compose=function(){for(var n=Array.prototype.slice.call(arguments,0),i={},a=0;a=96&&a.keyCode<=105&&(a.keyCode-=48);var r=String.fromCharCode(a.keyCode);return r&&(a.keyCode=r.toLowerCase().charCodeAt(0)),a},getHashFromEvent:function(i){return this.getHash(this.getCommandFromEvent(i))},getHash:function(i){var a=[];for(var r in i.modifiers)i.modifiers[r]&&a.push(r);return a.push(i.keyCode),a.join(this.junctionChar)},getExpressions:function(i){return i.split(this.junctionChar)},getWords:function(i){return i.split(this.combinationChar)},trim:function(i){return i.replace(/\s/g,"")},junctionChar:",",combinationChar:"+",commandKeys:{shift:16,alt:18,ctrl:17,meta:!0},specialKeys:{backspace:8,tab:9,enter:13,esc:27,space:32,up:38,down:40,left:37,right:39,home:36,end:35,pageup:33,pagedown:34,delete:46,insert:45,plus:107,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123}}}(e),function(n){n.$keyboardNavigation.EventHandler={_handlers:null,findHandler:function(i){this._handlers||(this._handlers={});var a=n.$keyboardNavigation.shortcuts.getHash(i);return this._handlers[a]},doAction:function(i,a){var r=this.findHandler(i);if(r){if(n.$keyboardNavigation.facade.callEvent("onBeforeAction",[i,a])===!1)return;r.call(this,a),a.preventDefault?a.preventDefault():a.returnValue=!1}},bind:function(i,a){this._handlers||(this._handlers={});for(var r=n.$keyboardNavigation.shortcuts,s=r.parse(i),o=0;o=r.length-1){var c=r[0];if(c)return c.focus(),a.preventDefault(),!0}return!1}}(e),function(n){n.$keyboardNavigation.GanttNode=function(){},n.$keyboardNavigation.GanttNode.prototype=n._compose(n.$keyboardNavigation.EventHandler,{focus:function(){n.focus()},blur:function(){},isEnabled:function(){return n.$container.hasAttribute("tabindex")},scrollHorizontal:function(i){var a=n.dateFromPos(n.getScrollState().x),r=n.getScale(),s=i<0?-r.step:r.step;a=n.date.add(a,s,r.unit),n.scrollTo(n.posFromDate(a))},scrollVertical:function(i){var a=n.getScrollState().y,r=n.config.row_height;n.scrollTo(null,a+(i<0?-1:1)*r)},keys:{"alt+left":function(i){this.scrollHorizontal(-1)},"alt+right":function(i){this.scrollHorizontal(1)},"alt+up":function(i){this.scrollVertical(-1)},"alt+down":function(i){this.scrollVertical(1)},"ctrl+z":function(){n.undo&&n.undo()},"ctrl+r":function(){n.redo&&n.redo()}}}),n.$keyboardNavigation.GanttNode.prototype.bindAll(n.$keyboardNavigation.GanttNode.prototype.keys)}(e),function(n){n.$keyboardNavigation.KeyNavNode=function(){},n.$keyboardNavigation.KeyNavNode.prototype=n._compose(n.$keyboardNavigation.EventHandler,{isValid:function(){return!0},fallback:function(){return null},moveTo:function(i){n.$keyboardNavigation.dispatcher.setActiveNode(i)},compareTo:function(i){if(!i)return!1;for(var a in this){if(!!this[a]!=!!i[a])return!1;var r=!(!this[a]||!this[a].toString),s=!(!i[a]||!i[a].toString);if(s!=r)return!1;if(s&&r){if(i[a].toString()!=this[a].toString())return!1}else if(i[a]!=this[a])return!1}return!0},getNode:function(){},focus:function(){var i=this.getNode();if(i){var a=n.$keyboardNavigation.facade;a.callEvent("onBeforeFocus",[i])!==!1&&i&&(i.setAttribute("tabindex","-1"),i.$eventAttached||(i.$eventAttached=!0,n.event(i,"focus",function(r){return r.preventDefault(),!1},!1)),n.utils.dom.isChildOf(document.activeElement,i)&&(i=document.activeElement),i.focus&&i.focus(),a.callEvent("onFocus",[this.getNode()]))}},blur:function(){var i=this.getNode();i&&(n.$keyboardNavigation.facade.callEvent("onBlur",[i]),i.setAttribute("tabindex","-1"))}})}(e),function(n){n.$keyboardNavigation.HeaderCell=function(i){this.index=i||0},n.$keyboardNavigation.HeaderCell.prototype=n._compose(n.$keyboardNavigation.KeyNavNode,{_handlers:null,isValid:function(){return!(!n.config.show_grid&&n.getVisibleTaskCount()||!n.getGridColumns()[this.index]&&n.getVisibleTaskCount())},fallback:function(){if(!n.config.show_grid)return n.getVisibleTaskCount()?new n.$keyboardNavigation.TaskRow:null;for(var i=n.getGridColumns(),a=this.index;a>=0&&!i[a];)a--;return i[a]?new n.$keyboardNavigation.HeaderCell(a):null},fromDomElement:function(i){var a=ht(i,"gantt_grid_head_cell");if(a){for(var r=0;a&&a.previousSibling;)a=a.previousSibling,r+=1;return new n.$keyboardNavigation.HeaderCell(r)}return null},getNode:function(){return n.$grid_scale.childNodes[this.index]},keys:{left:function(){this.index>0&&this.moveTo(new n.$keyboardNavigation.HeaderCell(this.index-1))},right:function(){var i=n.getGridColumns();this.index-1},fallback:function(){if(!n.getVisibleTaskCount()){var i=new n.$keyboardNavigation.HeaderCell;return i.isValid()?i:null}if(this.splitItem)return new n.$keyboardNavigation.TaskRow(this.parentId);var a=-1;if(n.getTaskByIndex(this.globalIndex-1))a=this.globalIndex-1;else if(n.getTaskByIndex(this.globalIndex+1))a=this.globalIndex+1;else for(var r=this.globalIndex;r>=0;){if(n.getTaskByIndex(r)){a=r;break}r--}return a>-1?new n.$keyboardNavigation.TaskRow(n.getTaskByIndex(a).id):void 0},fromDomElement:function(i){if(n.config.keyboard_navigation_cells)return null;var a=n.locate(i);return n.isTaskExists(a)?new n.$keyboardNavigation.TaskRow(a):null},getNode:function(){if(n.isTaskExists(this.taskId)&&n.isTaskVisible(this.taskId))return n.config.show_grid?n.$grid.querySelector(".gantt_row["+n.config.task_attribute+"='"+this.taskId+"']"):n.getTaskNode(this.taskId)},focus:function(i){if(!i){const a=n.getTaskPosition(n.getTask(this.taskId)),r=n.getTaskHeight(this.taskId),s=n.getScrollState();let o,l;o=n.$task?n.$task.offsetWidth:s.inner_width,l=n.$grid_data||n.$task_data?(n.$grid_data||n.$task_data).offsetHeight:s.inner_height,a.tops.y+l?n.scrollTo(null,a.top-20):n.config.scroll_on_click&&n.config.show_chart&&(a.left>s.x+o?n.scrollTo(a.left-n.config.task_scroll_offset):a.left+a.width=0&&!r[s];)s--;r[s]&&(a=new n.$keyboardNavigation.TaskCell(i.taskId,s))}return a},fromDomElement:function(i){if(!n.config.keyboard_navigation_cells)return null;var a=n.locate(i);if(n.isTaskExists(a)){var r=0,s=tt(i,"data-column-index");return s&&(r=1*s.getAttribute("data-column-index")),new n.$keyboardNavigation.TaskCell(a,r)}return null},getNode:function(){if(n.isTaskExists(this.taskId)&&n.isTaskVisible(this.taskId)){if(n.config.show_grid){var i=n.$grid.querySelector(".gantt_row["+n.config.task_attribute+"='"+this.taskId+"']");return i?i.querySelector("[data-column-index='"+this.columnIndex+"']"):null}return n.getTaskNode(this.taskId)}},keys:{up:function(){var i=null,a=n.getPrev(this.taskId);i=n.isTaskExists(a)?new n.$keyboardNavigation.TaskCell(a,this.columnIndex):new n.$keyboardNavigation.HeaderCell(this.columnIndex),this.moveTo(i)},down:function(){var i=n.getNext(this.taskId);n.isTaskExists(i)&&this.moveTo(new n.$keyboardNavigation.TaskCell(i,this.columnIndex))},left:function(){this.columnIndex>0&&this.moveTo(new n.$keyboardNavigation.TaskCell(this.taskId,this.columnIndex-1))},right:function(){var i=n.getGridColumns();this.columnIndex=p&&r()}}),e._smart_render){var v=e._smart_render._redrawTasks;e._smart_render._redrawTasks=function(b,_){if(e.config.keyboard_navigation&&n.isEnabled()){var m=n.getActiveNode();if(m&&m.taskId!==void 0){for(var p=!1,k=0;k<_.length;k++)if(_[k].id==m.taskId&&_[k].start_date){p=!0;break}p||_.push(e.getTask(m.taskId))}}return v.apply(this,arguments)}}});let c=null,u=!1;e.attachEvent("onTaskCreated",function(v){return c=v.id,!0}),e.attachEvent("onAfterTaskAdd",function(v,b){if(!e.config.keyboard_navigation)return!0;if(n.isEnabled()){if(v==c&&(u=!0,setTimeout(()=>{u=!1,c=null})),u&&b.type==e.config.types.placeholder)return;var _=0,m=n.activeNode;m instanceof e.$keyboardNavigation.TaskCell&&(_=m.columnIndex);var p=e.config.keyboard_navigation_cells?e.$keyboardNavigation.TaskCell:e.$keyboardNavigation.TaskRow;b.type==e.config.types.placeholder&&e.config.placeholder_task.focusOnCreate===!1||n.setActiveNode(new p(v,_))}}),e.attachEvent("onTaskIdChange",function(v,b){if(!e.config.keyboard_navigation)return!0;var _=n.activeNode;return n.isTaskFocused(v)&&(_.taskId=b),!0});var h=setInterval(function(){e.config.keyboard_navigation&&(n.isEnabled()||n.enable())},500);function g(v){var b={gantt:e.$keyboardNavigation.GanttNode,headerCell:e.$keyboardNavigation.HeaderCell,taskRow:e.$keyboardNavigation.TaskRow,taskCell:e.$keyboardNavigation.TaskCell};return b[v]||b.gantt}function f(v){for(var b=e.getGridColumns(),_=0;_{if(t.config.touch&&!t.config.touch_tooltip)return;const i=t.locate(n);if(t.isTaskExists(i)){const a=t.getTask(i);return t.templates.tooltip_text(a.start_date,a.end_date,a)}return null},global:!1})}),t.attachEvent("onDestroy",function(){e.destructor()}),t.attachEvent("onLightbox",function(){e.hideTooltip()}),t.attachEvent("onBeforeTooltip",function(){if(t.getState().link_source_id)return!1}),t.attachEvent("onGanttScroll",function(){e.hideTooltip()})},undo:function(t){const e=new Wn(t),n=new zn(e,t);function i(d,c,u){d&&(d.id===c&&(d.id=u),d.parent===c&&(d.parent=u))}function a(d,c,u){i(d.value,c,u),i(d.oldValue,c,u)}function r(d,c,u){d&&(d.source===c&&(d.source=u),d.target===c&&(d.target=u))}function s(d,c,u){r(d.value,c,u),r(d.oldValue,c,u)}function o(d,c,u){const h=e;for(let g=0;ge.undo(),redo:()=>e.redo(),getUndoStack:()=>e.getUndoStack(),setUndoStack:d=>e.setUndoStack(d),getRedoStack:()=>e.getRedoStack(),setRedoStack:d=>e.setRedoStack(d),clearUndoStack:()=>e.clearUndoStack(),clearRedoStack:()=>e.clearRedoStack(),saveState:(d,c)=>n.store(d,c,!0),getInitialState:(d,c)=>c===t.config.undo_types.link?n.getInitialLink(d):n.getInitialTask(d)},t.undo=t.ext.undo.undo,t.redo=t.ext.undo.redo,t.getUndoStack=t.ext.undo.getUndoStack,t.getRedoStack=t.ext.undo.getRedoStack,t.clearUndoStack=t.ext.undo.clearUndoStack,t.clearRedoStack=t.ext.undo.clearRedoStack,t.attachEvent("onTaskIdChange",(d,c)=>{const u=e;o(u.getUndoStack(),d,c),o(u.getRedoStack(),d,c)}),t.attachEvent("onLinkIdChange",(d,c)=>{const u=e;l(u.getUndoStack(),d,c),l(u.getRedoStack(),d,c)}),t.attachEvent("onGanttReady",()=>{e.updateConfigs()})},marker:function(t){function e(i){if(!t.config.show_markers||!i.start_date)return!1;var a=t.getState();if(+i.start_date>+a.max_date||(!i.end_date||+i.end_date<+a.min_date)&&+i.start_date<+a.min_date)return;var r=document.createElement("div");r.setAttribute("data-marker-id",i.id);var s="gantt_marker";i.css&&(s+=" "+i.css),i.title&&(r.title=i.title),r.className=s;var o=t.posFromDate(i.start_date);r.style.left=o+"px";let l=Math.max(t.getRowTop(t.getVisibleTaskCount()),0)+"px";if(t.config.timeline_placeholder&&t.$task_data&&(l=t.$task_data.scrollHeight+"px"),r.style.height=l,i.end_date){var d=t.posFromDate(i.end_date);r.style.width=Math.max(d-o,0)+"px"}return i.text&&(r.innerHTML=""+i.text+"
"),r}function n(){if(t.$task_data){var i=document.createElement("div");i.className="gantt_marker_area",t.$task_data.appendChild(i),t.$marker_area=i}}t._markers||(t._markers=t.createDatastore({name:"marker",initItem:function(i){return i.id=i.id||t.uid(),i}})),t.config.show_markers=!0,t.attachEvent("onBeforeGanttRender",function(){t.$marker_area||n()}),t.attachEvent("onDataRender",function(){t.$marker_area||(n(),t.renderMarkers())}),t.attachEvent("onGanttLayoutReady",function(){t.attachEvent("onBeforeGanttRender",function(){n(),t.$services.getService("layers").createDataRender({name:"marker",defaultContainer:function(){return t.$marker_area}}).addLayer(e)},{once:!0})}),t.getMarker=function(i){return this._markers?this._markers.getItem(i):null},t.addMarker=function(i){return this._markers.addItem(i)},t.deleteMarker=function(i){return!!this._markers.exists(i)&&(this._markers.removeItem(i),!0)},t.updateMarker=function(i){this._markers.refresh(i)},t._getMarkers=function(){return this._markers.getItems()},t.renderMarkers=function(){this._markers.refresh()}},multiselect:function(t){t.config.multiselect=!0,t.config.multiselect_one_level=!1,t._multiselect={_selected:{},_one_level:!1,_active:!0,_first_selected_when_shift:null,getDefaultSelected:function(){var e=this.getSelected();return e.length?e[e.length-1]:null},setFirstSelected:function(e){this._first_selected_when_shift=e},getFirstSelected:function(){return this._first_selected_when_shift},isActive:function(){return this.updateState(),this._active},updateState:function(){this._one_level=t.config.multiselect_one_level;var e=this._active;this._active=t.config.select_task,this._active!=e&&this.reset()},reset:function(){this._selected={}},setLastSelected:function(e){t.$data.tasksStore.silent(function(){var n=t.$data.tasksStore;e?n.select(e+""):n.unselect(null)})},getLastSelected:function(){var e=t.$data.tasksStore.getSelectedId();return e&&t.isTaskExists(e)?e:null},select:function(e,n){return!!(e&&t.callEvent("onBeforeTaskMultiSelect",[e,!0,n])&&t.callEvent("onBeforeTaskSelected",[e]))&&(this._selected[e]=!0,this.setLastSelected(e),this.afterSelect(e),t.callEvent("onTaskMultiSelect",[e,!0,n]),t.callEvent("onTaskSelected",[e]),!0)},toggle:function(e,n){this._selected[e]?this.unselect(e,n):this.select(e,n)},unselect:function(e,n){e&&t.callEvent("onBeforeTaskMultiSelect",[e,!1,n])&&(this._selected[e]=!1,this.getLastSelected()==e&&this.setLastSelected(this.getDefaultSelected()),this.afterSelect(e),t.callEvent("onTaskMultiSelect",[e,!1,n]),t.callEvent("onTaskUnselected",[e]))},isSelected:function(e){return!(!t.isTaskExists(e)||!this._selected[e])},getSelected:function(){var e=[];for(var n in this._selected)this._selected[n]&&t.isTaskExists(n)?e.push(n):this._selected[n]=!1;return e.sort(function(i,a){return t.getGlobalTaskIndex(i)>t.getGlobalTaskIndex(a)?1:-1}),e},forSelected:function(e){for(var n=this.getSelected(),i=0;ih?t.getNext(g):t.getPrev(g);for(g=n;t.getGlobalTaskIndex(g)!==c;)this.select(g,e)&&!r&&(r=!0,a=g),g=c>u?t.getNext(g):t.getPrev(g)}}else s=n}).bind(this);return o&&(e.ctrlKey||e.metaKey)?(this.isSelected(n)||this.setFirstSelected(n),n&&this.toggle(n,e)):o&&e.shiftKey?(t.isTaskExists(this.getFirstSelected())&&this.getFirstSelected()!==null||this.setFirstSelected(n),i.length?d():l()):l(),this.isSelected(n)?this.setLastSelected(n):a?n==s&&this.setLastSelected(e.shiftKey?a:this.getDefaultSelected()):this.setLastSelected(null),this.getSelected().length||this.setLastSelected(null),this.getLastSelected()&&this.isSelected(this.getFirstSelected())||this.setFirstSelected(this.getLastSelected()),!0}},function(){var e=t.selectTask;t.selectTask=function(i){if(!(i=at(i,this.config.root_id)))return!1;var a=t._multiselect,r=i;return a.isActive()?(a.select(i,null)&&a.setLastSelected(i),a.setFirstSelected(a.getLastSelected())):r=e.call(this,i),r};var n=t.unselectTask;t.unselectTask=function(i){var a=t._multiselect,r=a.isActive();(i=i||a.getLastSelected())&&r&&(a.unselect(i,null),i==a.getLastSelected()&&a.setLastSelected(null),t.refreshTask(i),a.setFirstSelected(a.getLastSelected()));var s=i;return r||(s=n.call(this,i)),s},t.toggleTaskSelection=function(i){var a=t._multiselect;i&&a.isActive()&&(a.toggle(i),a.setFirstSelected(a.getLastSelected()))},t.getSelectedTasks=function(){var i=t._multiselect;return i.isActive(),i.getSelected()},t.eachSelectedTask=function(i){return this._multiselect.forSelected(i)},t.isSelectedTask=function(i){return this._multiselect.isSelected(i)},t.getLastSelectedTask=function(){return this._multiselect.getLastSelected()},t.attachEvent("onGanttReady",function(){var i=t.$data.tasksStore.isSelected;t.$data.tasksStore.isSelected=function(a){return t._multiselect.isActive()?t._multiselect.isSelected(a):i.call(this,a)}})}(),t.attachEvent("onTaskIdChange",function(e,n){var i=t._multiselect;if(!i.isActive())return!0;t.isSelectedTask(e)&&(i.unselect(e,null),i.select(n,null))}),t.attachEvent("onAfterTaskDelete",function(e,n){var i=t._multiselect;if(!i.isActive())return!0;i._selected[e]&&(i._selected[e]=!1,i.setLastSelected(i.getDefaultSelected())),i.forSelected(function(a){t.isTaskExists(a)||i.unselect(a,null)})}),t.attachEvent("onBeforeTaskMultiSelect",function(e,n,i){var a=t._multiselect;return!(n&&a.isActive()&&a._one_level)||a.isSameLevel(e)}),t.attachEvent("onTaskClick",function(e,n){return t._multiselect.doSelection(n)&&t.callEvent("onMultiSelect",[n]),!0})},export_api:function(t){return t.ext=t.ext||{},t.ext.export_api=t.ext.export_api||{_apiUrl:"https://export.dhtmlx.com/gantt",_preparePDFConfigRaw(e,n){let i=null;e.start&&e.end&&(i={start_date:t.config.start_date,end_date:t.config.end_date},t.config.start_date=t.date.str_to_date(t.config.date_format)(e.start),t.config.end_date=t.date.str_to_date(t.config.date_format)(e.end)),e=t.mixin(e,{name:"gantt."+n,data:t.ext.export_api._serializeHtml()}),i&&(t.config.start_date=i.start_date,t.config.end_date=i.end_date)},_prepareConfigPDF:(e,n)=>(e=t.mixin(e||{},{name:"gantt."+n,data:t.ext.export_api._serializeAll(),config:t.config}),t.ext.export_api._fixColumns(e.config.columns),e),_pdfExportRouter(e,n){e&&e.raw?t.ext.export_api._preparePDFConfigRaw(e,n):e=t.ext.export_api._prepareConfigPDF(e,n),e.version=t.version,t.ext.export_api._sendToExport(e,n)},exportToPDF(e){t.ext.export_api._pdfExportRouter(e,"pdf")},exportToPNG(e){t.ext.export_api._pdfExportRouter(e,"png")},exportToICal(e){e=t.mixin(e||{},{name:"gantt.ical",data:t.ext.export_api._serializePlain().data,version:t.version}),t.ext.export_api._sendToExport(e,"ical")},exportToExcel(e){let n,i,a,r;e=e||{};const s=t.config.smart_rendering;if(e.visual==="base-colors"&&(t.config.smart_rendering=!1),e.start||e.end){a=t.getState(),i=[t.config.start_date,t.config.end_date],r=t.getScrollState();const o=t.date.str_to_date(t.config.date_format);n=t.eachTask,e.start&&(t.config.start_date=o(e.start)),e.end&&(t.config.end_date=o(e.end)),t.render(),t.config.smart_rendering=s,t.eachTask=t.ext.export_api._eachTaskTimed(t.config.start_date,t.config.end_date)}else e.visual==="base-colors"&&(t.render(),t.config.smart_rendering=s);t._no_progress_colors=e.visual==="base-colors",(e=t.mixin(e,{name:"gantt.xlsx",title:"Tasks",data:t.ext.export_api._serializeTimeline(e).data,columns:t.ext.export_api._serializeGrid({rawDates:!0}),version:t.version})).visual&&(e.scales=t.ext.export_api._serializeScales(e)),t.ext.export_api._sendToExport(e,"excel"),(e.start||e.end)&&(t.config.start_date=a.min_date,t.config.end_date=a.max_date,t.eachTask=n,t.render(),t.scrollTo(r.x,r.y),t.config.start_date=i[0],t.config.end_date=i[1])},exportToJSON(e){e=t.mixin(e||{},{name:"gantt.json",data:t.ext.export_api._serializeAll(),config:t.config,columns:t.ext.export_api._serializeGrid(),worktime:t.ext.export_api._getWorktimeSettings(),version:t.version}),t.ext.export_api._sendToExport(e,"json")},importFromExcel(e){try{const n=e.data;if(n instanceof File){const i=new FormData;i.append("file",n),e.data=i}}catch{}t.ext.export_api._sendImportAjaxExcel(e)},importFromMSProject(e){const n=e.data;try{if(n instanceof File){const i=new FormData;i.append("file",n),e.data=i}}catch{}t.ext.export_api._sendImportAjaxMSP(e)},importFromPrimaveraP6:e=>(e.type="primaveraP6-parse",t.importFromMSProject(e)),exportToMSProject(e){(e=e||{}).skip_circular_links=e.skip_circular_links===void 0||!!e.skip_circular_links;const n=t.templates.xml_format,i=t.templates.format_date,a=t.config.xml_date,r=t.config.date_format,s="%d-%m-%Y %H:%i:%s";t.config.xml_date=s,t.config.date_format=s,t.templates.xml_format=t.date.date_to_str(s),t.templates.format_date=t.date.date_to_str(s);const o=t.ext.export_api._serializeAll();t.ext.export_api._customProjectProperties(o,e),t.ext.export_api._customTaskProperties(o,e),e.skip_circular_links&&t.ext.export_api._clearRecLinks(o),e=t.ext.export_api._exportConfig(o,e),t.ext.export_api._sendToExport(e,e.type||"msproject"),t.config.xml_date=a,t.config.date_format=r,t.templates.xml_format=n,t.templates.format_date=i,t.config.$custom_data=null,t.config.custom=null},exportToPrimaveraP6:e=>((e=e||{}).type="primaveraP6",t.exportToMSProject(e)),_fixColumns(e){for(let n=0;n400))try{o=JSON.parse(s.responseText)}catch{}r&&r(o)},s.open("POST",n,!0),s.setRequestHeader("X-Requested-With","XMLHttpRequest"),s.send(a)},_ajaxToExport(e,n,i){delete e.callback;const a=e.server||t.ext.export_api._apiUrl,r="type="+n+"&store=1&data="+encodeURIComponent(JSON.stringify(e));t.ext.export_api._xdr(a,r,function(s){const o=s.xmlDoc||s;let l=null;if(!(o.status>400))try{l=JSON.parse(o.responseText)}catch{}i(l)})},_serializableGanttConfig(e){const n=t.mixin({},e);return n.columns&&(n.columns=n.columns.map(function(i){const a=t.mixin({},i);return delete a.editor,a})),delete n.editor_types,n},_sendToExport(e,n){const i=t.date.date_to_str(t.config.date_format||t.config.xml_date);if(e.skin||(e.skin=t.skin),e.config&&(e.config=t.copy(t.ext.export_api._serializableGanttConfig(e.config)),t.ext.export_api._markColumns(e,n),e.config.start_date&&e.config.end_date&&(e.config.start_date instanceof Date&&(e.config.start_date=i(e.config.start_date)),e.config.end_date instanceof Date&&(e.config.end_date=i(e.config.end_date)))),e.callback)return t.ext.export_api._ajaxToExport(e,n,e.callback);const a=t.ext.export_api._createHiddenForm();a.firstChild.action=e.server||t.ext.export_api._apiUrl,a.firstChild.childNodes[0].value=JSON.stringify(e),a.firstChild.childNodes[1].value=n,a.firstChild.submit()},_createHiddenForm(){if(!t.ext.export_api._hidden_export_form){const e=t.ext.export_api._hidden_export_form=document.createElement("div");e.style.display="none",e.innerHTML=" ",document.body.appendChild(e)}return t.ext.export_api._hidden_export_form},_copyObjectBase(e){const n={start_date:void 0,end_date:void 0,constraint_date:void 0,deadline:void 0};for(const a in e)a.charAt(0)!=="$"&&a!=="baselines"&&(n[a]=e[a]);const i=t.templates.xml_format||t.templates.format_date;return n.start_date=i(n.start_date),n.end_date&&(n.end_date=i(n.end_date)),n.constraint_date&&(n.constraint_date=i(n.constraint_date)),n.deadline&&(n.deadline=i(n.deadline)),n},_color_box:null,_color_hash:{},_getStyles(e){if(t.ext.export_api._color_box||(t.ext.export_api._color_box=document.createElement("DIV"),t.ext.export_api._color_box.style.cssText="position:absolute; display:none;",document.body.appendChild(t.ext.export_api._color_box)),t.ext.export_api._color_hash[e])return t.ext.export_api._color_hash[e];t.ext.export_api._color_box.className=e;const n=t.ext.export_api._getColor(t.ext.export_api._color_box,"color"),i=t.ext.export_api._getColor(t.ext.export_api._color_box,"backgroundColor");return t.ext.export_api._color_hash[e]=n+";"+i},_getMinutesWorktimeSettings(e){const n=[];return e.forEach(function(i){n.push(i.startMinute),n.push(i.endMinute)}),n},_getWorktimeSettings(){const e={hours:[0,24],minutes:null,dates:{0:!0,1:!0,2:!0,3:!0,4:!0,5:!0,6:!0}};let n;if(t.config.work_time){const i=t._working_time_helper;if(i&&i.get_calendar)n=i.get_calendar();else if(i)n={hours:i.hours,minutes:null,dates:i.dates};else if(t.config.worktimes&&t.config.worktimes.global){const a=t.config.worktimes.global;if(a.parsed){n={hours:null,minutes:t.ext.export_api._getMinutesWorktimeSettings(a.parsed.hours),dates:{}};for(const r in a.parsed.dates)Array.isArray(a.parsed.dates[r])?n.dates[r]=t.ext.export_api._getMinutesWorktimeSettings(a.parsed.dates[r]):n.dates[r]=a.parsed.dates[r]}else n={hours:a.hours,minutes:null,dates:a.dates}}else n=e}else n=e;return n},_eachTaskTimed:(e,n)=>function(i,a,r){a=a||t.config.root_id,r=r||t;const s=t.getChildren(a);if(s)for(let o=0;oe)&&(!n||l.start_date-1){let l=0;for(;lr.length&&(r=a[s].trace_x);for(let s=0;s400))try{l=JSON.parse(o.responseText)}catch{}r&&r(l)},o.open("POST",n,!0),o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.send(a)}},t.exportToPDF=t.ext.export_api.exportToPDF,t.exportToPNG=t.ext.export_api.exportToPNG,t.exportToICal=t.ext.export_api.exportToICal,t.exportToExcel=t.ext.export_api.exportToExcel,t.exportToJSON=t.ext.export_api.exportToJSON,t.importFromExcel=t.ext.export_api.importFromExcel,t.importFromMSProject=t.ext.export_api.importFromMSProject,t.exportToMSProject=t.ext.export_api.exportToMSProject,t.importFromPrimaveraP6=t.ext.export_api.importFromPrimaveraP6,t.exportToPrimaveraP6=t.ext.export_api.exportToPrimaveraP6,t.ext.export_api}},Fn={KEY_CODES:{UP:38,DOWN:40,LEFT:37,RIGHT:39,SPACE:32,ENTER:13,DELETE:46,ESC:27,TAB:9}};class Vn{constructor(e){this.addExtension=(n,i)=>{this._extensions[n]=i},this.getExtension=n=>this._extensions[n],this._extensions={};for(const n in e)this._extensions[n]=e[n]}}const Un=()=>({layout:{css:"gantt_container",rows:[{cols:[{view:"grid",scrollX:"scrollHor",scrollY:"scrollVer"},{resizer:!0,width:1},{view:"timeline",scrollX:"scrollHor",scrollY:"scrollVer"},{view:"scrollbar",id:"scrollVer"}]},{view:"scrollbar",id:"scrollHor",height:20}]},links:{finish_to_start:"0",start_to_start:"1",finish_to_finish:"2",start_to_finish:"3"},types:{task:"task",project:"project",milestone:"milestone"},auto_types:!1,duration_unit:"day",work_time:!1,correct_work_time:!1,skip_off_time:!1,cascade_delete:!0,autosize:!1,autosize_min_width:0,autoscroll:!0,autoscroll_speed:30,deepcopy_on_parse:!1,show_links:!0,show_task_cells:!0,static_background:!1,static_background_cells:!0,branch_loading:!1,branch_loading_property:"$has_child",show_loading:!1,show_chart:!0,show_grid:!0,min_duration:36e5,date_format:"%d-%m-%Y %H:%i",xml_date:void 0,start_on_monday:!0,server_utc:!1,show_progress:!0,fit_tasks:!1,select_task:!0,scroll_on_click:!0,smart_rendering:!0,preserve_scroll:!0,readonly:!1,container_resize_timeout:20,deadlines:!0,date_grid:"%Y-%m-%d",drag_links:!0,drag_progress:!0,drag_resize:!0,drag_project:!1,drag_move:!0,drag_mode:{resize:"resize",progress:"progress",move:"move",ignore:"ignore"},round_dnd_dates:!0,link_wrapper_width:20,link_arrow_size:12,root_id:0,autofit:!1,columns:[{name:"text",tree:!0,width:"*",resize:!0},{name:"start_date",align:"center",resize:!0},{name:"duration",align:"center"},{name:"add",width:44}],scale_offset_minimal:!0,inherit_scale_class:!1,scales:[{unit:"day",step:1,date:"%d %M"}],time_step:60,duration_step:1,task_date:"%d %F %Y",time_picker:"%H:%i",task_attribute:"data-task-id",link_attribute:"data-link-id",layer_attribute:"data-layer",buttons_left:["gantt_save_btn","gantt_cancel_btn"],_migrate_buttons:{dhx_save_btn:"gantt_save_btn",dhx_cancel_btn:"gantt_cancel_btn",dhx_delete_btn:"gantt_delete_btn"},buttons_right:["gantt_delete_btn"],lightbox:{sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"time",type:"duration",map_to:"auto"}],project_sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"type",type:"typeselect",map_to:"type"},{name:"time",type:"duration",readonly:!0,map_to:"auto"}],milestone_sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"type",type:"typeselect",map_to:"type"},{name:"time",type:"duration",single_date:!0,map_to:"auto"}]},drag_lightbox:!0,sort:!1,details_on_create:!0,details_on_dblclick:!0,initial_scroll:!0,task_scroll_offset:100,order_branch:!1,order_branch_free:!1,task_height:void 0,bar_height:"full",bar_height_padding:9,min_column_width:70,min_grid_column_width:70,grid_resizer_column_attribute:"data-column-index",keep_grid_width:!1,grid_resize:!1,grid_elastic_columns:!1,show_tasks_outside_timescale:!1,show_unscheduled:!0,resize_rows:!1,task_grid_row_resizer_attribute:"data-row-index",min_task_grid_row_height:30,row_height:36,readonly_property:"readonly",editable_property:"editable",calendar_property:"calendar_id",resource_calendars:{},dynamic_resource_calendars:!1,inherit_calendar:!1,type_renderers:{},open_tree_initially:!1,optimize_render:!0,prevent_default_scroll:!1,show_errors:!0,wai_aria_attributes:!0,smart_scales:!0,rtl:!1,placeholder_task:!1,horizontal_scroll_key:"shiftKey",drag_timeline:{useKey:void 0,ignore:".gantt_task_line, .gantt_task_link",render:!1},drag_multiple:!0,csp:"auto"});var st=typeof window<"u";const _t={isIE:st&&(navigator.userAgent.indexOf("MSIE")>=0||navigator.userAgent.indexOf("Trident")>=0),isIE6:st&&!XMLHttpRequest&&navigator.userAgent.indexOf("MSIE")>=0,isIE7:st&&navigator.userAgent.indexOf("MSIE 7.0")>=0&&navigator.userAgent.indexOf("Trident")<0,isIE8:st&&navigator.userAgent.indexOf("MSIE 8.0")>=0&&navigator.userAgent.indexOf("Trident")>=0,isOpera:st&&navigator.userAgent.indexOf("Opera")>=0,isChrome:st&&navigator.userAgent.indexOf("Chrome")>=0,isKHTML:st&&(navigator.userAgent.indexOf("Safari")>=0||navigator.userAgent.indexOf("Konqueror")>=0),isFF:st&&navigator.userAgent.indexOf("Firefox")>=0,isIPad:st&&navigator.userAgent.search(/iPad/gi)>=0,isEdge:st&&navigator.userAgent.indexOf("Edge")!=-1,isNode:!st||typeof navigator>"u"||!1};function je(t){if(typeof t=="string"||typeof t=="number")return t;let e="";for(const n in t){let i="";t.hasOwnProperty(n)&&(i=typeof t[n]=="string"?encodeURIComponent(t[n]):typeof t[n]=="number"?String(t[n]):encodeURIComponent(JSON.stringify(t[n])),i=n+"="+i,e.length&&(i="&"+i),e+=i)}return e}function $t(t,e){var n={method:t};if(e.length===0)throw new Error("Arguments list of query is wrong.");if(e.length===1)return typeof e[0]=="string"?(n.url=e[0],n.async=!0):(n.url=e[0].url,n.async=e[0].async||!0,n.callback=e[0].callback,n.headers=e[0].headers),e[0].data?typeof e[0].data!="string"?n.data=je(e[0].data):n.data=e[0].data:n.data="",n;switch(n.url=e[0],t){case"GET":case"DELETE":n.callback=e[1],n.headers=e[2];break;case"POST":case"PUT":e[1]?typeof e[1]!="string"?n.data=je(e[1]):n.data=e[1]:n.data="",n.callback=e[2],n.headers=e[3]}return n}const Fe={date_to_str:(t,e,n)=>{t=t.replace(/%[a-zA-Z]/g,a=>{switch(a){case"%d":return`"+to_fixed(date.get${e?"UTC":""}Date())+"`;case"%m":return`"+to_fixed((date.get${e?"UTC":""}Month()+1))+"`;case"%j":return`"+date.get${e?"UTC":""}Date()+"`;case"%n":return`"+(date.get${e?"UTC":""}Month()+1)+"`;case"%y":return`"+to_fixed(date.get${e?"UTC":""}FullYear()%100)+"`;case"%Y":return`"+date.get${e?"UTC":""}FullYear()+"`;case"%D":return`"+locale.date.day_short[date.get${e?"UTC":""}Day()]+"`;case"%l":return`"+locale.date.day_full[date.get${e?"UTC":""}Day()]+"`;case"%M":return`"+locale.date.month_short[date.get${e?"UTC":""}Month()]+"`;case"%F":return`"+locale.date.month_full[date.get${e?"UTC":""}Month()]+"`;case"%h":return`"+to_fixed((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%g":return`"+((date.get${e?"UTC":""}Hours()+11)%12+1)+"`;case"%G":return`"+date.get${e?"UTC":""}Hours()+"`;case"%H":return`"+to_fixed(date.get${e?"UTC":""}Hours())+"`;case"%i":return`"+to_fixed(date.get${e?"UTC":""}Minutes())+"`;case"%a":return`"+(date.get${e?"UTC":""}Hours()>11?"pm":"am")+"`;case"%A":return`"+(date.get${e?"UTC":""}Hours()>11?"PM":"AM")+"`;case"%s":return`"+to_fixed(date.get${e?"UTC":""}Seconds())+"`;case"%W":return'"+to_fixed(getISOWeek(date))+"';case"%w":return'"+to_fixed(getWeek(date))+"';default:return a}});const i=new Function("date","to_fixed","locale","getISOWeek","getWeek",`return "${t}";`);return a=>i(a,n.date.to_fixed,n.locale,n.date.getISOWeek,n.date.getWeek)},str_to_date:(t,e,n)=>{let i="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);";const a=t.match(/%[a-zA-Z]/g);for(let o=0;o50?1900:2000);`;break;case"%g":case"%G":case"%h":case"%H":i+=`set[3]=temp[${o}]||0;`;break;case"%i":i+=`set[4]=temp[${o}]||0;`;break;case"%Y":i+=`set[0]=temp[${o}]||0;`;break;case"%a":case"%A":i+=`set[3]=set[3]%12+((temp[${o}]||'').toLowerCase()=='am'?0:12);`;break;case"%s":i+=`set[5]=temp[${o}]||0;`;break;case"%M":i+=`set[1]=locale.date.month_short_hash[temp[${o}]]||0;`;break;case"%F":i+=`set[1]=locale.date.month_full_hash[temp[${o}]]||0;`}let r="set[0],set[1],set[2],set[3],set[4],set[5]";e&&(r=` Date.UTC(${r})`);const s=new Function("date","locale",`var set=[0,0,1,0,0,0]; ${i} return new Date(${r});`);return o=>s(o,n.locale)}},Ve={date_to_str:(t,e,n)=>i=>t.replace(/%[a-zA-Z]/g,a=>{switch(a){case"%d":return e?n.date.to_fixed(i.getUTCDate()):n.date.to_fixed(i.getDate());case"%m":return e?n.date.to_fixed(i.getUTCMonth()+1):n.date.to_fixed(i.getMonth()+1);case"%j":return e?i.getUTCDate():i.getDate();case"%n":return e?i.getUTCMonth()+1:i.getMonth()+1;case"%y":return e?n.date.to_fixed(i.getUTCFullYear()%100):n.date.to_fixed(i.getFullYear()%100);case"%Y":return e?i.getUTCFullYear():i.getFullYear();case"%D":return e?n.locale.date.day_short[i.getUTCDay()]:n.locale.date.day_short[i.getDay()];case"%l":return e?n.locale.date.day_full[i.getUTCDay()]:n.locale.date.day_full[i.getDay()];case"%M":return e?n.locale.date.month_short[i.getUTCMonth()]:n.locale.date.month_short[i.getMonth()];case"%F":return e?n.locale.date.month_full[i.getUTCMonth()]:n.locale.date.month_full[i.getMonth()];case"%h":return e?n.date.to_fixed((i.getUTCHours()+11)%12+1):n.date.to_fixed((i.getHours()+11)%12+1);case"%g":return e?(i.getUTCHours()+11)%12+1:(i.getHours()+11)%12+1;case"%G":return e?i.getUTCHours():i.getHours();case"%H":return e?n.date.to_fixed(i.getUTCHours()):n.date.to_fixed(i.getHours());case"%i":return e?n.date.to_fixed(i.getUTCMinutes()):n.date.to_fixed(i.getMinutes());case"%a":return e?i.getUTCHours()>11?"pm":"am":i.getHours()>11?"pm":"am";case"%A":return e?i.getUTCHours()>11?"PM":"AM":i.getHours()>11?"PM":"AM";case"%s":return e?n.date.to_fixed(i.getUTCSeconds()):n.date.to_fixed(i.getSeconds());case"%W":return e?n.date.to_fixed(n.date.getUTCISOWeek(i)):n.date.to_fixed(n.date.getISOWeek(i));default:return a}}),str_to_date:(t,e,n)=>i=>{const a=[0,0,1,0,0,0],r=i.match(/[a-zA-Z]+|[0-9]+/g),s=t.match(/%[a-zA-Z]/g);for(let o=0;o50?1900:2e3);break;case"%g":case"%G":case"%h":case"%H":a[3]=r[o]||0;break;case"%i":a[4]=r[o]||0;break;case"%Y":a[0]=r[o]||0;break;case"%a":case"%A":a[3]=a[3]%12+((r[o]||"").toLowerCase()==="am"?0:12);break;case"%s":a[5]=r[o]||0;break;case"%M":a[1]=n.locale.date.month_short_hash[r[o]]||0;break;case"%F":a[1]=n.locale.date.month_full_hash[r[o]]||0}return e?new Date(Date.UTC(a[0],a[1],a[2],a[3],a[4],a[5])):new Date(a[0],a[1],a[2],a[3],a[4],a[5])}};function qn(t){var e=null;function n(){var a=!1;return t.config.csp==="auto"?(e===null&&function(){try{new Function("canUseCsp = false;")}catch{e=!0}}(),a=e):a=t.config.csp,a}var i={init:function(){for(var a=t.locale,r=a.date.month_short,s=a.date.month_short_hash={},o=0;o=9?9:s>=6?6:s>=3?3:0,a.setMonth(r),a},year_start:function(a){return a.setMonth(0),this.month_start(a)},day_start:function(a){return this.date_part(a)},hour_start:function(a){return a.getMinutes()&&a.setMinutes(0),this.minute_start(a),a},minute_start:function(a){return a.getSeconds()&&a.setSeconds(0),a.getMilliseconds()&&a.setMilliseconds(0),a},_add_days:function(a,r,s){a.setDate(a.getDate()+r);var o=r>=0,l=!s.getHours()&&a.getHours(),d=a.getDate()<=s.getDate()||a.getMonth()1&&l&&a.setHours(0),a},add:function(a,r,s){var o=new Date(a.valueOf());switch(s){case"day":o=this._add_days(o,r,a);break;case"week":o=this._add_days(o,7*r,a);break;case"month":o.setMonth(o.getMonth()+r);break;case"year":o.setYear(o.getFullYear()+r);break;case"hour":o.setTime(o.getTime()+60*r*60*1e3);break;case"minute":o.setTime(o.getTime()+60*r*1e3);break;default:return this["add_"+s](a,r,s)}return o},add_quarter:function(a,r){return this.add(a,3*r,"month")},to_fixed:function(a){return a<10?"0"+a:a},copy:function(a){return new Date(a.valueOf())},date_to_str:function(a,r){var s=Fe;return n()&&(s=Ve),s.date_to_str(a,r,t)},str_to_date:function(a,r){var s=Fe;return n()&&(s=Ve),s.str_to_date(a,r,t)},getISOWeek:function(a){return t.date._getWeekNumber(a,!0)},_getWeekNumber:function(a,r){if(!a)return!1;var s=a.getDay();r&&s===0&&(s=7);var o=new Date(a.valueOf());o.setDate(a.getDate()+(4-s));var l=o.getFullYear(),d=Math.round((o.getTime()-new Date(l,0,1).getTime())/864e5);return 1+Math.floor(d/7)},getWeek:function(a){return t.date._getWeekNumber(a,t.config.start_on_monday)},getUTCISOWeek:function(a){return t.date.getISOWeek(a)},convert_to_utc:function(a){return new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds())},parseDate:function(a,r){return a&&!a.getFullYear&&(typeof r!="function"&&(r=typeof r=="string"?r==="parse_date"||r==="xml_date"?t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date:t.defined(t.templates[r])?t.templates[r]:t.date.str_to_date(r):t.defined(t.templates.xml_date)?t.templates.xml_date:t.templates.parse_date),a=a?r(a):null),a}};return i}class Gn{constructor(e){const{url:n,token:i}=e;this._url=n,this._token=i,this._mode=1,this._seed=1,this._queue=[],this.data={},this.api={},this._events={}}headers(){return{Accept:"application/json","Content-Type":"application/json","Remote-Token":this._token}}fetch(e,n){const i={credentials:"include",headers:this.headers()};return n&&(i.method="POST",i.body=n),fetch(e,i).then(a=>a.json())}load(e){return e&&(this._url=e),this.fetch(this._url).then(n=>this.parse(n))}parse(e){const{key:n,websocket:i}=e;n&&(this._token=e.key);for(const a in e.data)this.data[a]=e.data[a];for(const a in e.api){const r=this.api[a]={},s=e.api[a];for(const o in s)r[o]=this._wrapper(a+"."+o)}return i&&this.connect(),this}connect(){const e=this._socket;e&&(this._socket=null,e.onclose=function(){},e.close()),this._mode=2,this._socket=function(n,i,a,r){let s=i;s[0]==="/"&&(s=document.location.protocol+"//"+document.location.host+i),s=s.replace(/^http(s|):/,"ws$1:");const o=s.indexOf("?")!=-1?"&":"?";s=`${s}${o}token=${a}&ws=1`;const l=new WebSocket(s);return l.onclose=()=>setTimeout(()=>n.connect(),2e3),l.onmessage=d=>{const c=JSON.parse(d.data);switch(c.action){case"result":n.result(c.body,[]);break;case"event":n.fire(c.body.name,c.body.value);break;case"start":r();break;default:n.onError(c.data)}},l}(this,this._url,this._token,()=>(this._mode=3,this._send(),this._resubscribe(),this))}_wrapper(e){return(function(){const n=[].slice.call(arguments);let i=null;const a=new Promise((r,s)=>{i={data:{id:this._uid(),name:e,args:n},status:1,resolve:r,reject:s},this._queue.push(i)});return this.onCall(i,a),this._mode===3?this._send(i):setTimeout(()=>this._send(),1),a}).bind(this)}_uid(){return(this._seed++).toString()}_send(e){if(this._mode==2)return void setTimeout(()=>this._send(),100);const n=e?[e]:this._queue.filter(a=>a.status===1);if(!n.length)return;const i=n.map(a=>(a.status=2,a.data));this._mode!==3?this.fetch(this._url,JSON.stringify(i)).catch(a=>this.onError(a)).then(a=>this.result(a,i)):this._socket.send(JSON.stringify({action:"call",body:i}))}result(e,n){const i={};if(e)for(let a=0;a=0;a--){const r=this._queue[a],s=i[r.data.id];s&&(this.onResponse(r,s),s.error?r.reject(s.error):r.resolve(s.data),this._queue.splice(a,1))}}on(e,n){const i=this._uid();let a=this._events[e];const r=!!a;return r||(a=this._events[e]=[]),a.push({id:i,handler:n}),r||this._mode!=3||this._socket.send(JSON.stringify({action:"subscribe",name:e})),{name:e,id:i}}_resubscribe(){if(this._mode==3)for(const e in this._events)this._socket.send(JSON.stringify({action:"subscribe",name:e}))}detach(e){if(!e){if(this._mode==3)for(const r in this._events)this._socket.send(JSON.stringify({action:"unsubscribe",key:r}));return void(this._events={})}const{id:n,name:i}=e,a=this._events[i];if(a){const r=a.filter(s=>s.id!=n);r.length?this._events[i]=r:(delete this._events[i],this._mode==3&&this._socket.send(JSON.stringify({action:"unsubscribe",name:i})))}}fire(e,n){const i=this._events[e];if(i)for(let a=0;as.json())},this._ready=n.load().then(i=>this._remote=i),this.ready=function(){return this._ready},this.on=function(i,a){this.ready().then(r=>{if(typeof i=="string")r.on(i,a);else for(const s in i)r.on(s,i[s])})}};function Ue(t,e){if(!e)return!0;if(t._on_timeout)return!1;var n=Math.ceil(1e3/e);return n<2||(setTimeout(function(){delete t._on_timeout},n),t._on_timeout=!0),!0}var Jn=function(){var t={};return{getState:function(e){if(t[e])return t[e].method();var n={};for(var i in t)t[i].internal||N(n,t[i].method(),!0);return n},registerProvider:function(e,n,i){t[e]={method:n,internal:i}},unregisterProvider:function(e){delete t[e]}}};const Kn=Promise;var et={$create:function(t){return N(t||[],this)},$removeAt:function(t,e){t>=0&&this.splice(t,e||1)},$remove:function(t){this.$removeAt(this.$find(t))},$insertAt:function(t,e){if(e||e===0){var n=this.splice(e,this.length-e);this[e]=t,this.push.apply(this,n)}else this.push(t)},$find:function(t){for(var e=0;ei&&(e=Math.min(n.length,e))}this.pull[t.id]=t,this.isSilent()||this._updateOrder(function(){this.$find(t.id)===-1&&this.$insertAt(t.id,e)}),this.filter()},isVisible:function(t){return this.visibleOrder.$find(t)>-1},getVisibleItems:function(){return this.getIndexRange()},addItem:function(t,e){return W(t.id)||(t.id=rt()),this.$initItem&&(t=this.$initItem(t)),!(!this.isSilent()&&this.callEvent("onBeforeAdd",[t.id,t])===!1)&&(this._addItemInner(t,e),this.isSilent()||(this.callEvent("onAfterAdd",[t.id,t]),this.callEvent("onStoreUpdated",[t.id,t,"add"])),t.id)},_changeIdInner:function(t,e){this.pull[t]&&(this.pull[e]=this.pull[t]);var n=this._searchVisibleOrder[t];this.pull[e].id=e,this._updateOrder(function(){this[this.$find(t)]=e}),this._searchVisibleOrder[e]=n,delete this._searchVisibleOrder[t],delete this.pull[t]},changeId:function(t,e){this._changeIdInner(t,e),this.callEvent("onIdChange",[t,e])},exists:function(t){return!!this.pull[t]},_moveInner:function(t,e){var n=this.getIdByIndex(t);this._updateOrder(function(){this.$removeAt(t),this.$insertAt(n,Math.min(this.length,e))})},move:function(t,e){var n=this.getIdByIndex(t),i=this.getItem(n);this._moveInner(t,e),this.isSilent()||this.callEvent("onStoreUpdated",[i.id,i,"move"])},clearAll:function(){this.$destroyed||(this.silent(function(){this.unselect()}),this.pull={},this.visibleOrder=et.$create(),this.fullOrder=et.$create(),this.isSilent()||(this.callEvent("onClearAll",[]),this.refresh()))},silent:function(t,e){var n=!1;this.isSilent()&&(n=!0),this._skip_refresh=!0,t.call(e||this),n||(this._skip_refresh=!1)},isSilent:function(){return!!this._skip_refresh},arraysEqual:function(t,e){if(t.length!==e.length)return!1;for(var n=0;n=n.$level)return!1;for(;n&&this.exists(i);){if((n=this.getItem(i))&&n.id==e)return!0;i=this.getParent(n)}return!1},getSiblings:function(t){if(!this.exists(t))return et.$create();var e=this.getParent(t);return this.getChildren(e)},getNextSibling:function(t){for(var e=this.getSiblings(t),n=0,i=e.length;n0&&(a="0"),a||null}return null},getPrevSibling:function(t){for(var e=this.getSiblings(t),n=0,i=e.length;n0&&(a="0"),a||null}return null},getParent:function(t){var e=null;return(e=t.id!==void 0?t:this.getItem(t))?e[this.$parentProperty]:this.$getRootId()},clearAll:function(){this._branches={},ot.prototype.clearAll.call(this)},calculateItemLevel:function(t){var e=0;return this.eachParent(function(){e++},t),e},_setParentInner:function(t,e,n){n||(t.hasOwnProperty("$rendered_parent")?this._move_branch(t,t.$rendered_parent,e):this._move_branch(t,t[this.$parentProperty],e))},setParent:function(t,e,n){this._setParentInner(t,e,n),t[this.$parentProperty]=e},_eachItemCached:function(t,e){for(var n=0,i=e.length;n=0;o--)i.push(s[o])}},eachItem:function(t,e){var n=this.$getRootId();W(e)||(e=n);var i=at(e,n)||n,a=!1,r=!1,s=null;i===n&&(this._eachItemMainRangeCache?(a=!0,s=this._eachItemMainRangeCache):(r=!0,s=this._eachItemMainRangeCache=[])),a?this._eachItemCached(t,s):this._eachItemIterate(t,i,r?s:null)},eachParent:function(t,e){for(var n={},i=e,a=this.getParent(i);this.exists(a);){if(n[a])throw new Error("Invalid tasks tree. Cyclic reference has been detected on task "+a);n[a]=!0,i=this.getItem(a),t.call(this,i),a=this.getParent(i)}},_add_branch:function(t,e,n){var i=n===void 0?this.getParent(t):n;this.hasChild(i)||(this._branches[i]=et.$create());var a=this.getChildren(i);a.indexOf(t.id+"")>-1||a.indexOf(+t.id)>-1||(1*e==e?a.splice(e,0,t.id):a.push(t.id),t.$rendered_parent=i)},_move_branch:function(t,e,n){this._eachItemMainRangeCache=null,this._replace_branch_child(e,t.id),this.exists(n)||n==this.$getRootId()?this._add_branch(t,void 0,n):delete this._branches[t.id],t.$level=this.calculateItemLevel(t),this.eachItem(function(i){i.$level=this.calculateItemLevel(i)},t.id)},_replace_branch_child:function(t,e,n){var i=this.getChildren(t);if(i&&t!==void 0){var a=et.$create();let r=i.indexOf(e+"");r!=-1||isNaN(+e)||(r=i.indexOf(+e)),r>-1&&(n?i.splice(r,1,n):i.splice(r,1)),a=i,this._branches[t]=a}},sort:function(t,e,n){this.exists(n)||(n=this.$getRootId()),t||(t="order");var i=typeof t=="string"?function(l,d){return l[t]==d[t]||X(l[t])&&X(d[t])&&l[t].valueOf()==d[t].valueOf()?0:l[t]>d[t]?1:-1}:t;if(e){var a=i;i=function(l,d){return a(d,l)}}var r=this.getChildren(n);if(r){for(var s=[],o=r.length-1;o>=0;o--)s[o]=this.getItem(r[o]);for(s.sort(i),o=0;o0&&(c=c.filter(u=>u!==void 0),d=d.concat(c))}if((l.start==null||l.end==null)&&l.ids==null)throw new Error("Invalid range returned from 'getVisibleRange' of the layer")}else d=n.getVisibleItems();o.prepare_data&&o.prepare_data(d,o),o.update_items(d)}};function s(o){return!!o.$services.getService("state").getState("batchUpdate").batch_update}n.attachEvent("onStoreUpdated",function(o,l,d){if(F(e))return!0;const c=e.$services.getService("layers").getDataRender(t);c&&(c.onUpdateRequest=function(u){r(u)})}),n.attachEvent("onStoreUpdated",function(o,l,d){s(e)||(o&&d!="move"&&d!="delete"?(n.callEvent("onBeforeRefreshItem",[l.id]),n.callEvent("onAfterRefreshItem",[l.id])):(n.callEvent("onBeforeRefreshAll",[]),n.callEvent("onAfterRefreshAll",[])))}),n.attachEvent("onAfterRefreshAll",function(){if(F(e))return!0;const o=e.$services.getService("layers").getDataRender(t);o&&!s(e)&&a(o)}),n.attachEvent("onAfterRefreshItem",function(o){if(F(e))return!0;const l=e.$services.getService("layers").getDataRender(t);l&&i(o,l)}),n.attachEvent("onItemOpen",function(){if(F(e))return!0;e.render()}),n.attachEvent("onItemClose",function(){if(F(e))return!0;e.render()}),n.attachEvent("onIdChange",function(o,l){if(F(e))return!0;if(n.callEvent("onBeforeIdChange",[o,l]),!s(e)&&!n.isSilent()){const d=e.$services.getService("layers").getDataRender(t);d?(function(c,u,h){for(let g=0;go.length-1||l<=0||s>o.length-1)){var d=i-this.getSum(o,r,s);this.adjustSize(d,o,r,s),this.adjustSize(-d,o,s+1),a.full_width=this.getSum(o)}},splitSize:function(i,a){for(var r=[],s=0;sa(o.unit,o.step)?-1:0});for(var r=0;r=0;g--){var f=g==i.length-1,y=this.initScaleConfig(i[g],o,l);f&&this.processIgnores(y),this.initColSizes(y,a,u,c[g]),this.limitVisibleRange(y),f&&(u=y.full_width),h.unshift(y)}for(g=0;g=+d&&(d=e.add(c,a,i));+c<+d;){o.call(this,new Date(c));var u=c.getTimezoneOffset();c=e.add(c,a,i),c=t._correct_dst_change(c,u,a,i),e[i+"_start"]&&(c=e[i+"_start"](c))}},limitVisibleRange:function(i){var a=i.trace_x,r=i.width.length-1,s=0;if(+a[0]<+i.min_date&&r!=0){var o=Math.floor(i.width[0]*((a[1]-i.min_date)/(a[1]-a[0])));s+=i.width[0]-o,i.width[0]=o,a[0]=new Date(i.min_date)}var l=a.length-1,d=a[l],c=e.add(d,i.step,i.unit);if(+c>+i.max_date&&l>0&&(o=i.width[l]-Math.floor(i.width[l]*((c-i.max_date)/(c-d))),s+=i.width[l]-o,i.width[l]=o),s){for(var u=this.getSum(i.width),h=0,g=0;gt.end_date&&(t.end_date=new Date(n))}function ce(t){Qn(t),function(e){if(e.config.fit_tasks){var n=+e._min_date,i=+e._max_date;if(+e._min_date!=n||+e._max_date!=i)return e.render(),e.callEvent("onScaleAdjusted",[]),!0}}(t)}function Ge(t,e,n){for(var i=0;ithis.clientSideDelete(o,e,n);this._dataProcessorHandlers.push(n.attachEvent("onAfterTaskAdd",function(o,l){n.isTaskExists(o)&&(e.setGanttMode("tasks"),e.setUpdated(o,!0,"inserted"))})),this._dataProcessorHandlers.push(n.attachEvent("onAfterTaskUpdate",function(o,l){n.isTaskExists(o)&&(e.setGanttMode("tasks"),e.setUpdated(o,!0),n._sendTaskOrder&&n._sendTaskOrder(o,l))})),this._dataProcessorHandlers.push(n.attachEvent("onBeforeTaskDelete",function(o,l){return n.config.cascade_delete&&(i[o]={tasks:ue.getSubtreeTasks(n,o),links:ue.getSubtreeLinks(n,o)}),!e.deleteAfterConfirmation||(e.setGanttMode("tasks"),e.setUpdated(o,!0,"deleted"),!1)})),this._dataProcessorHandlers.push(n.attachEvent("onAfterTaskDelete",function(o,l){e.setGanttMode("tasks");const d=!a(o),c=n.config.cascade_delete&&i[o];if(d||c){if(c){const u=e.updateMode;e.setUpdateMode("off");const h=i[o];for(const g in h.tasks)a(g)||(e.storeItem(h.tasks[g]),e.setUpdated(g,!0,"deleted"));e.setGanttMode("links");for(const g in h.links)a(g)||(e.storeItem(h.links[g]),e.setUpdated(g,!0,"deleted"));i[o]=null,u!=="off"&&e.sendAllData(),e.setGanttMode("tasks"),e.setUpdateMode(u)}d&&(e.storeItem(l),e.deleteAfterConfirmation||e.setUpdated(o,!0,"deleted")),e.updateMode==="off"||e._tSend||e.sendAllData()}})),this._dataProcessorHandlers.push(n.attachEvent("onAfterLinkUpdate",function(o,l){n.isLinkExists(o)&&(e.setGanttMode("links"),e.setUpdated(o,!0))})),this._dataProcessorHandlers.push(n.attachEvent("onAfterLinkAdd",function(o,l){n.isLinkExists(o)&&(e.setGanttMode("links"),e.setUpdated(o,!0,"inserted"))})),this._dataProcessorHandlers.push(n.attachEvent("onAfterLinkDelete",function(o,l){e.setGanttMode("links"),!a(o)&&(e.storeItem(l),e.setUpdated(o,!0,"deleted"))})),this._dataProcessorHandlers.push(n.attachEvent("onRowDragEnd",function(o,l){n._sendTaskOrder(o,n.getTask(o))}));let r=null,s=null;this._dataProcessorHandlers.push(n.attachEvent("onTaskIdChange",function(o,l){if(!e._waitMode)return;const d=n.getChildren(l);if(d.length){r=r||{};for(let u=0;u-1?o.indexOf("?"):o.length),this.serverProcessor=o+(o.slice(-1)==="/"?"":"/")+l}else{const l=this._ganttMode+"s";this.serverProcessor=o+n.ajax.urlSeparator(o)+"gantt_mode="+l}return!0}),e.attachEvent("insertCallback",function(o,l,d,c){const u=o.data||n.xml._xmlNodeToJSON(o.firstChild),h={add:n.addTask,isExist:n.isTaskExists};c==="links"&&(h.add=n.addLink,h.isExist=n.isLinkExists),h.isExist.call(n,l)||(u.id=l,h.add.call(n,u))}),e.attachEvent("updateCallback",function(o,l){const d=o.data||n.xml._xmlNodeToJSON(o.firstChild);if(!n.isTaskExists(l))return;const c=n.getTask(l);for(const u in d){let h=d[u];switch(u){case"id":continue;case"start_date":case"end_date":h=n.defined(n.templates.xml_date)?n.templates.xml_date(h):n.templates.parse_date(h);break;case"duration":c.end_date=n.calculateEndDate({start_date:c.start_date,duration:h,task:c})}c[u]=h}n.updateTask(l),n.refreshData()}),e.attachEvent("deleteCallback",function(o,l,d,c){const u={delete:n.deleteTask,isExist:n.isTaskExists};c==="links"?(u.delete=n.deleteLink,u.isExist=n.isLinkExists):c==="assignment"&&(u.delete=function(h){n.$data.assignmentsStore.remove(h)},u.isExist=function(h){return n.$data.assignmentsStore.exists(h)}),u.isExist.call(n,l)&&u.delete.call(n,l)}),this.handleResourceCRUD(e,n),this.handleResourceAssignmentCRUD(e,n),this.handleBaselineCRUD(e,n)}clientSideDelete(e,n,i){const a=n.updatedRows.slice();let r=!1;i.getUserData(e,"!nativeeditor_status",n._ganttMode)==="true_deleted"&&(r=!0,n.setUpdated(e,!1));for(let s=0;s{a[l.task_id]?function(d){r[d.id]=d,a[d.task_id]=!0}(l):s(l)}),i.attachEvent("onAfterUpdate",(o,l)=>{i.exists(o)&&(r[o]?s(l):(e.setGanttMode("assignment"),e.setUpdated(o,!0)))}),i.attachEvent("onAfterDelete",(o,l)=>{e.setGanttMode("assignment"),!this.clientSideDelete(o,e,n)&&(e.storeItem(l),e.setUpdated(o,!0,"deleted"))})}handleResourceCRUD(e,n){if(!n.config.resources||n.config.resources.dataprocessor_resources!==!0)return;const i=n.getDatastore(n.config.resource_store);i.attachEvent("onAfterAdd",(a,r)=>{(function(s){const o=s.id;i.exists(o)&&(e.setGanttMode("resource"),e.setUpdated(o,!0,"inserted"))})(r)}),i.attachEvent("onAfterUpdate",(a,r)=>{i.exists(a)&&(e.setGanttMode("resource"),e.setUpdated(a,!0))}),i.attachEvent("onAfterDelete",(a,r)=>{e.setGanttMode("resource"),!this.clientSideDelete(a,e,n)&&(e.storeItem(r),e.setUpdated(a,!0,"deleted"))})}handleBaselineCRUD(e,n){if(!n.config.baselines||n.config.baselines.dataprocessor_baselines!==!0)return;const i=n.getDatastore(n.config.baselines.datastore);i.attachEvent("onAfterAdd",(a,r)=>{(function(s){const o=s.id;i.exists(o)&&(e.setGanttMode("baseline"),e.setUpdated(o,!0,"inserted"))})(r)}),i.attachEvent("onAfterUpdate",(a,r)=>{i.exists(a)&&(e.setGanttMode("baseline"),e.setUpdated(a,!0))}),i.attachEvent("onAfterDelete",(a,r)=>{e.setGanttMode("baseline"),!this.clientSideDelete(a,e,n)&&(e.storeItem(r),e.setUpdated(a,!0,"deleted"))})}detach(){kt(this._dataProcessorHandlers,e=>{this.$gantt.detachEvent(e)}),this._dataProcessorHandlers=[]}}const Yt=class Yt{constructor(){this.clear=()=>{this._storage={}},this.storeItem=e=>{this._storage[e.id]=V(e)},this.getStoredItem=e=>this._storage[e]||null,this._storage={}}};Yt.create=()=>new Yt;let Wt=Yt,Je=class{constructor(t){this.serverProcessor=t,this.action_param="!nativeeditor_status",this.updatedRows=[],this.autoUpdate=!0,this.updateMode="cell",this._headers=null,this._payload=null,this._postDelim="_",this._routerParametersFormat="parameters",this._waitMode=0,this._in_progress={},this._storage=Wt.create(),this._invalid={},this.messages=[],this.styles={updated:"font-weight:bold;",inserted:"font-weight:bold;",deleted:"text-decoration : line-through;",invalid:"background-color:FFE0E0;",invalid_cell:"border-bottom:2px solid red;",error:"color:red;",clear:"font-weight:normal;text-decoration:none;"},this.enableUTFencoding(!0),nt(this)}setTransactionMode(t,e){typeof t=="object"?(this._tMode=t.mode||this._tMode,W(t.headers)&&(this._headers=t.headers),W(t.payload)&&(this._payload=t.payload),this._tSend=!!e):(this._tMode=t,this._tSend=e),this._tMode==="REST"&&(this._tSend=!1),this._tMode==="JSON"||this._tMode==="REST-JSON"?(this._tSend=!1,this._serializeAsJson=!0,this._headers=this._headers||{},this._headers["Content-Type"]="application/json"):this._headers&&!this._headers["Content-Type"]&&(this._headers["Content-Type"]="application/x-www-form-urlencoded"),this._tMode==="CUSTOM"&&(this._tSend=!1,this._router=t.router)}escape(t){return this._utf?encodeURIComponent(t):escape(t)}enableUTFencoding(t){this._utf=!!t}getSyncState(){return!this.updatedRows.length}setUpdateMode(t,e){this.autoUpdate=t==="cell",this.updateMode=t,this.dnd=e}ignore(t,e){this._silent_mode=!0,t.call(e||dt),this._silent_mode=!1}setUpdated(t,e,n){if(this._silent_mode)return;const i=this.findRow(t);n=n||"updated";const a=this.$gantt.getUserData(t,this.action_param,this._ganttMode);a&&n==="updated"&&(n=a),e?(this.set_invalid(t,!1),this.updatedRows[i]=t,this.$gantt.setUserData(t,this.action_param,n,this._ganttMode),this._in_progress[t]&&(this._in_progress[t]="wait")):this.is_invalid(t)||(this.updatedRows.splice(i,1),this.$gantt.setUserData(t,this.action_param,"",this._ganttMode)),this.markRow(t,e,n),e&&this.autoUpdate&&this.sendData(t)}markRow(t,e,n){let i="";const a=this.is_invalid(t);if(a&&(i=this.styles[a],e=!0),this.callEvent("onRowMark",[t,e,n,a])&&(i=this.styles[e?n:"clear"]+" "+i,this.$gantt[this._methods[0]](t,i),a&&a.details)){i+=this.styles[a+"_cell"];for(let r=0;r{this.modes[n]&&this.modes[n].updatedRows.length&&e.push(n)}),e.length){for(let n=0;n{this.$gantt.deleteTask(t)}),this.$gantt.callEvent("onAfterTaskDelete",[t,l]),this.$gantt.render(),delete this._in_progress[r]}return this.callEvent("onAfterUpdate",[t,n,e,i])}return this.$gantt.setUserData(t,this.action_param,"true_deleted",this._ganttMode),this.$gantt[this._methods[3]](t),delete this._in_progress[r],this.callEvent("onAfterUpdate",[t,n,e,i])}this._in_progress[r]!=="wait"?(s&&this.$gantt.setUserData(t,this.action_param,"",this._ganttMode),delete this._in_progress[r]):(delete this._in_progress[r],this.setUpdated(e,!0,this.$gantt.getUserData(t,this.action_param,this._ganttMode))),this.callEvent("onAfterUpdate",[o,n,e,i])}afterUpdate(t,e,n){let i;i=arguments.length===3?arguments[1]:arguments[4];let a=this.getGanttMode();const r=i.filePath||i.url;a=this._tMode!=="REST"&&this._tMode!=="REST-JSON"?r.indexOf("gantt_mode=links")!==-1?"link":r.indexOf("gantt_mode=assignments")!==-1?"assignment":r.indexOf("gantt_mode=baselines")!==-1?"baseline":"task":r.indexOf("/link")>=0?"link":r.indexOf("/assignment")>=0?"assignment":r.indexOf("/baseline")>=0?"baseline":"task",this.setGanttMode(a);const s=this.$gantt.ajax;let o;try{o=JSON.parse(e.xmlDoc.responseText)}catch{e.xmlDoc.responseText.length||(o={})}const l=u=>{const h=o.action||this.getState(u)||"updated",g=o.sid||u[0],f=o.tid||u[0];t.afterUpdateCallback(g,f,h,o,a)};if(o)return Array.isArray(n)&&n.length>1?n.forEach(u=>l(u)):l(n),t.finalizeUpdate(),void this.setGanttMode(a);const d=s.xmltop("data",e.xmlDoc);if(!d)return this.cleanUpdate(n);const c=s.xpath("//data/action",d);if(!c.length)return this.cleanUpdate(n);for(let u=0;u{this.loadUpdate()},t)}afterAutoUpdate(t,e,n,i){return e!=="collision"||(this._needUpdate=!0,!1)}fullSync(){return this._needUpdate&&(this._needUpdate=!1,this.loadUpdate()),!0}getUpdates(t,e){const n=this.$gantt.ajax;if(this._updateBusy)return!1;this._updateBusy=!0,n.get(t,e)}loadUpdate(){const t=this.$gantt.ajax,e=this.$gantt.getUserData(0,"version",this._ganttMode);let n=this.serverProcessor+t.urlSeparator(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+e].join("&");n=n.replace("editing=true&",""),this.getUpdates(n,i=>{const a=t.xpath("//userdata",i);this.$gantt.setUserData(0,"version",this._getXmlNodeValue(a[0]),this._ganttMode);const r=t.xpath("//update",i);if(r.length){this._silent_mode=!0;for(let s=0;s{let f=l||"updated",y=e,v=e;g&&(f=g.action||l,y=g.sid||y,v=g.id||g.tid||v),this.afterUpdateCallback(y,v,f,g,c)};let h;if(this._router instanceof Function)if(this._routerParametersFormat==="object"){const g={entity:c,action:d,data:t,id:e};h=this._router(g)}else h=this._router(c,d,t,e);else if(this._router[c]instanceof Function)h=this._router[c](d,t,e);else{const g="Incorrect configuration of gantt.createDataProcessor",f=`
+${o}`),a=s.subscales||[]}else a=s.scales.slice(1);return a.map((function(o){return this._prepareScaleObject(o)}).bind(this))},prepareConfigs:function(i,a,r,s,o,l,d){for(var c=this.splitSize(s,i.length),u=r,h=[],g=i.length-1;g>=0;g--){var f=g==i.length-1,y=this.initScaleConfig(i[g],o,l);f&&this.processIgnores(y),this.initColSizes(y,a,u,c[g]),this.limitVisibleRange(y),f&&(u=y.full_width),h.unshift(y)}for(g=0;g=+d&&(d=e.add(c,a,i));+c<+d;){o.call(this,new Date(c));var u=c.getTimezoneOffset();c=e.add(c,a,i),c=t._correct_dst_change(c,u,a,i),e[i+"_start"]&&(c=e[i+"_start"](c))}},limitVisibleRange:function(i){var a=i.trace_x,r=i.width.length-1,s=0;if(+a[0]<+i.min_date&&r!=0){var o=Math.floor(i.width[0]*((a[1]-i.min_date)/(a[1]-a[0])));s+=i.width[0]-o,i.width[0]=o,a[0]=new Date(i.min_date)}var l=a.length-1,d=a[l],c=e.add(d,i.step,i.unit);if(+c>+i.max_date&&l>0&&(o=i.width[l]-Math.floor(i.width[l]*((c-i.max_date)/(c-d))),s+=i.width[l]-o,i.width[l]=o),s){for(var u=this.getSum(i.width),h=0,g=0;gt.end_date&&(t.end_date=new Date(n))}function de(t){Qn(t),function(e){if(e.config.fit_tasks){var n=+e._min_date,i=+e._max_date;if(+e._min_date!=n||+e._max_date!=i)return e.render(),e.callEvent("onScaleAdjusted",[]),!0}}(t)}function Ge(t,e,n){for(var i=0;ithis.clientSideDelete(o,e,n);this._dataProcessorHandlers.push(n.attachEvent("onAfterTaskAdd",function(o,l){n.isTaskExists(o)&&(e.setGanttMode("tasks"),e.setUpdated(o,!0,"inserted"))})),this._dataProcessorHandlers.push(n.attachEvent("onAfterTaskUpdate",function(o,l){n.isTaskExists(o)&&(e.setGanttMode("tasks"),e.setUpdated(o,!0),n._sendTaskOrder&&n._sendTaskOrder(o,l))})),this._dataProcessorHandlers.push(n.attachEvent("onBeforeTaskDelete",function(o,l){return n.config.cascade_delete&&(i[o]={tasks:ce.getSubtreeTasks(n,o),links:ce.getSubtreeLinks(n,o)}),!e.deleteAfterConfirmation||(e.setGanttMode("tasks"),e.setUpdated(o,!0,"deleted"),!1)})),this._dataProcessorHandlers.push(n.attachEvent("onAfterTaskDelete",function(o,l){e.setGanttMode("tasks");const d=!a(o),c=n.config.cascade_delete&&i[o];if(d||c){if(c){const u=e.updateMode;e.setUpdateMode("off");const h=i[o];for(const g in h.tasks)a(g)||(e.storeItem(h.tasks[g]),e.setUpdated(g,!0,"deleted"));e.setGanttMode("links");for(const g in h.links)a(g)||(e.storeItem(h.links[g]),e.setUpdated(g,!0,"deleted"));i[o]=null,u!=="off"&&e.sendAllData(),e.setGanttMode("tasks"),e.setUpdateMode(u)}d&&(e.storeItem(l),e.deleteAfterConfirmation||e.setUpdated(o,!0,"deleted")),e.updateMode==="off"||e._tSend||e.sendAllData()}})),this._dataProcessorHandlers.push(n.attachEvent("onAfterLinkUpdate",function(o,l){n.isLinkExists(o)&&(e.setGanttMode("links"),e.setUpdated(o,!0))})),this._dataProcessorHandlers.push(n.attachEvent("onAfterLinkAdd",function(o,l){n.isLinkExists(o)&&(e.setGanttMode("links"),e.setUpdated(o,!0,"inserted"))})),this._dataProcessorHandlers.push(n.attachEvent("onAfterLinkDelete",function(o,l){e.setGanttMode("links"),!a(o)&&(e.storeItem(l),e.setUpdated(o,!0,"deleted"))})),this._dataProcessorHandlers.push(n.attachEvent("onRowDragEnd",function(o,l){n._sendTaskOrder(o,n.getTask(o))}));let r=null,s=null;this._dataProcessorHandlers.push(n.attachEvent("onTaskIdChange",function(o,l){if(!e._waitMode)return;const d=n.getChildren(l);if(d.length){r=r||{};for(let u=0;u-1?o.indexOf("?"):o.length),this.serverProcessor=o+(o.slice(-1)==="/"?"":"/")+l}else{const l=this._ganttMode+"s";this.serverProcessor=o+n.ajax.urlSeparator(o)+"gantt_mode="+l}return!0}),e.attachEvent("insertCallback",function(o,l,d,c){const u=o.data||n.xml._xmlNodeToJSON(o.firstChild),h={add:n.addTask,isExist:n.isTaskExists};c==="links"&&(h.add=n.addLink,h.isExist=n.isLinkExists),h.isExist.call(n,l)||(u.id=l,h.add.call(n,u))}),e.attachEvent("updateCallback",function(o,l){const d=o.data||n.xml._xmlNodeToJSON(o.firstChild);if(!n.isTaskExists(l))return;const c=n.getTask(l);for(const u in d){let h=d[u];switch(u){case"id":continue;case"start_date":case"end_date":h=n.defined(n.templates.xml_date)?n.templates.xml_date(h):n.templates.parse_date(h);break;case"duration":c.end_date=n.calculateEndDate({start_date:c.start_date,duration:h,task:c})}c[u]=h}n.updateTask(l),n.refreshData()}),e.attachEvent("deleteCallback",function(o,l,d,c){const u={delete:n.deleteTask,isExist:n.isTaskExists};c==="links"?(u.delete=n.deleteLink,u.isExist=n.isLinkExists):c==="assignment"&&(u.delete=function(h){n.$data.assignmentsStore.remove(h)},u.isExist=function(h){return n.$data.assignmentsStore.exists(h)}),u.isExist.call(n,l)&&u.delete.call(n,l)}),this.handleResourceCRUD(e,n),this.handleResourceAssignmentCRUD(e,n),this.handleBaselineCRUD(e,n)}clientSideDelete(e,n,i){const a=n.updatedRows.slice();let r=!1;i.getUserData(e,"!nativeeditor_status",n._ganttMode)==="true_deleted"&&(r=!0,n.setUpdated(e,!1));for(let s=0;s{a[l.task_id]?function(d){r[d.id]=d,a[d.task_id]=!0}(l):s(l)}),i.attachEvent("onAfterUpdate",(o,l)=>{i.exists(o)&&(r[o]?s(l):(e.setGanttMode("assignment"),e.setUpdated(o,!0)))}),i.attachEvent("onAfterDelete",(o,l)=>{e.setGanttMode("assignment"),!this.clientSideDelete(o,e,n)&&(e.storeItem(l),e.setUpdated(o,!0,"deleted"))})}handleResourceCRUD(e,n){if(!n.config.resources||n.config.resources.dataprocessor_resources!==!0)return;const i=n.getDatastore(n.config.resource_store);i.attachEvent("onAfterAdd",(a,r)=>{(function(s){const o=s.id;i.exists(o)&&(e.setGanttMode("resource"),e.setUpdated(o,!0,"inserted"))})(r)}),i.attachEvent("onAfterUpdate",(a,r)=>{i.exists(a)&&(e.setGanttMode("resource"),e.setUpdated(a,!0))}),i.attachEvent("onAfterDelete",(a,r)=>{e.setGanttMode("resource"),!this.clientSideDelete(a,e,n)&&(e.storeItem(r),e.setUpdated(a,!0,"deleted"))})}handleBaselineCRUD(e,n){if(!n.config.baselines||n.config.baselines.dataprocessor_baselines!==!0)return;const i=n.getDatastore(n.config.baselines.datastore);i.attachEvent("onAfterAdd",(a,r)=>{(function(s){const o=s.id;i.exists(o)&&(e.setGanttMode("baseline"),e.setUpdated(o,!0,"inserted"))})(r)}),i.attachEvent("onAfterUpdate",(a,r)=>{i.exists(a)&&(e.setGanttMode("baseline"),e.setUpdated(a,!0))}),i.attachEvent("onAfterDelete",(a,r)=>{e.setGanttMode("baseline"),!this.clientSideDelete(a,e,n)&&(e.storeItem(r),e.setUpdated(a,!0,"deleted"))})}detach(){kt(this._dataProcessorHandlers,e=>{this.$gantt.detachEvent(e)}),this._dataProcessorHandlers=[]}}const Yt=class Yt{constructor(){this.clear=()=>{this._storage={}},this.storeItem=e=>{this._storage[e.id]=V(e)},this.getStoredItem=e=>this._storage[e]||null,this._storage={}}};Yt.create=()=>new Yt;let Wt=Yt,Je=class{constructor(t){this.serverProcessor=t,this.action_param="!nativeeditor_status",this.updatedRows=[],this.autoUpdate=!0,this.updateMode="cell",this._headers=null,this._payload=null,this._postDelim="_",this._routerParametersFormat="parameters",this._waitMode=0,this._in_progress={},this._storage=Wt.create(),this._invalid={},this.messages=[],this.styles={updated:"font-weight:bold;",inserted:"font-weight:bold;",deleted:"text-decoration : line-through;",invalid:"background-color:FFE0E0;",invalid_cell:"border-bottom:2px solid red;",error:"color:red;",clear:"font-weight:normal;text-decoration:none;"},this.enableUTFencoding(!0),it(this)}setTransactionMode(t,e){typeof t=="object"?(this._tMode=t.mode||this._tMode,W(t.headers)&&(this._headers=t.headers),W(t.payload)&&(this._payload=t.payload),this._tSend=!!e):(this._tMode=t,this._tSend=e),this._tMode==="REST"&&(this._tSend=!1),this._tMode==="JSON"||this._tMode==="REST-JSON"?(this._tSend=!1,this._serializeAsJson=!0,this._headers=this._headers||{},this._headers["Content-Type"]="application/json"):this._headers&&!this._headers["Content-Type"]&&(this._headers["Content-Type"]="application/x-www-form-urlencoded"),this._tMode==="CUSTOM"&&(this._tSend=!1,this._router=t.router)}escape(t){return this._utf?encodeURIComponent(t):escape(t)}enableUTFencoding(t){this._utf=!!t}getSyncState(){return!this.updatedRows.length}setUpdateMode(t,e){this.autoUpdate=t==="cell",this.updateMode=t,this.dnd=e}ignore(t,e){this._silent_mode=!0,t.call(e||dt),this._silent_mode=!1}setUpdated(t,e,n){if(this._silent_mode)return;const i=this.findRow(t);n=n||"updated";const a=this.$gantt.getUserData(t,this.action_param,this._ganttMode);a&&n==="updated"&&(n=a),e?(this.set_invalid(t,!1),this.updatedRows[i]=t,this.$gantt.setUserData(t,this.action_param,n,this._ganttMode),this._in_progress[t]&&(this._in_progress[t]="wait")):this.is_invalid(t)||(this.updatedRows.splice(i,1),this.$gantt.setUserData(t,this.action_param,"",this._ganttMode)),this.markRow(t,e,n),e&&this.autoUpdate&&this.sendData(t)}markRow(t,e,n){let i="";const a=this.is_invalid(t);if(a&&(i=this.styles[a],e=!0),this.callEvent("onRowMark",[t,e,n,a])&&(i=this.styles[e?n:"clear"]+" "+i,this.$gantt[this._methods[0]](t,i),a&&a.details)){i+=this.styles[a+"_cell"];for(let r=0;r{this.modes[n]&&this.modes[n].updatedRows.length&&e.push(n)}),e.length){for(let n=0;n{this.$gantt.deleteTask(t)}),this.$gantt.callEvent("onAfterTaskDelete",[t,l]),this.$gantt.render(),delete this._in_progress[r]}return this.callEvent("onAfterUpdate",[t,n,e,i])}return this.$gantt.setUserData(t,this.action_param,"true_deleted",this._ganttMode),this.$gantt[this._methods[3]](t),delete this._in_progress[r],this.callEvent("onAfterUpdate",[t,n,e,i])}this._in_progress[r]!=="wait"?(s&&this.$gantt.setUserData(t,this.action_param,"",this._ganttMode),delete this._in_progress[r]):(delete this._in_progress[r],this.setUpdated(e,!0,this.$gantt.getUserData(t,this.action_param,this._ganttMode))),this.callEvent("onAfterUpdate",[o,n,e,i])}afterUpdate(t,e,n){let i;i=arguments.length===3?arguments[1]:arguments[4];let a=this.getGanttMode();const r=i.filePath||i.url;a=this._tMode!=="REST"&&this._tMode!=="REST-JSON"?r.indexOf("gantt_mode=links")!==-1?"link":r.indexOf("gantt_mode=assignments")!==-1?"assignment":r.indexOf("gantt_mode=baselines")!==-1?"baseline":"task":r.indexOf("/link")>=0?"link":r.indexOf("/assignment")>=0?"assignment":r.indexOf("/baseline")>=0?"baseline":"task",this.setGanttMode(a);const s=this.$gantt.ajax;let o;try{o=JSON.parse(e.xmlDoc.responseText)}catch{e.xmlDoc.responseText.length||(o={})}const l=u=>{const h=o.action||this.getState(u)||"updated",g=o.sid||u[0],f=o.tid||u[0];t.afterUpdateCallback(g,f,h,o,a)};if(o)return Array.isArray(n)&&n.length>1?n.forEach(u=>l(u)):l(n),t.finalizeUpdate(),void this.setGanttMode(a);const d=s.xmltop("data",e.xmlDoc);if(!d)return this.cleanUpdate(n);const c=s.xpath("//data/action",d);if(!c.length)return this.cleanUpdate(n);for(let u=0;u{this.loadUpdate()},t)}afterAutoUpdate(t,e,n,i){return e!=="collision"||(this._needUpdate=!0,!1)}fullSync(){return this._needUpdate&&(this._needUpdate=!1,this.loadUpdate()),!0}getUpdates(t,e){const n=this.$gantt.ajax;if(this._updateBusy)return!1;this._updateBusy=!0,n.get(t,e)}loadUpdate(){const t=this.$gantt.ajax,e=this.$gantt.getUserData(0,"version",this._ganttMode);let n=this.serverProcessor+t.urlSeparator(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+e].join("&");n=n.replace("editing=true&",""),this.getUpdates(n,i=>{const a=t.xpath("//userdata",i);this.$gantt.setUserData(0,"version",this._getXmlNodeValue(a[0]),this._ganttMode);const r=t.xpath("//update",i);if(r.length){this._silent_mode=!0;for(let s=0;s{let f=l||"updated",y=e,v=e;g&&(f=g.action||l,y=g.sid||y,v=g.id||g.tid||v),this.afterUpdateCallback(y,v,f,g,c)};let h;if(this._router instanceof Function)if(this._routerParametersFormat==="object"){const g={entity:c,action:d,data:t,id:e};h=this._router(g)}else h=this._router(c,d,t,e);else if(this._router[c]instanceof Function)h=this._router[c](d,t,e);else{const g="Incorrect configuration of gantt.createDataProcessor",f=`
You need to either add missing properties to the dataProcessor router object or to use a router function.
-See https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and https://docs.dhtmlx.com/gantt/api__gantt_createdataprocessor.html for details.`;if(!this._router[c])throw new Error(`${g}: router for the **${c}** entity is not defined. ${f}`);switch(l){case"inserted":if(!this._router[c].create)throw new Error(`${g}: **create** action for the **${c}** entity is not defined. ${f}`);h=this._router[c].create(t);break;case"deleted":if(!this._router[c].delete)throw new Error(`${g}: **delete** action for the **${c}** entity is not defined. ${f}`);h=this._router[c].delete(e);break;default:if(!this._router[c].update)throw new Error(`${g}: **update**" action for the **${c}** entity is not defined. ${f}`);h=this._router[c].update(t,e)}}if(h){if(!h.then&&h.id===void 0&&h.tid===void 0&&h.action===void 0)throw new Error("Incorrect router return value. A Promise or a response object is expected");h.then?h.then(u).catch(g=>{g&&g.action?u(g):u({action:"error",value:g})}):u(h)}else u(null);return}let i;i={callback:l=>{const d=[];if(e)d.push(e);else if(t)for(const c in t)d.push(c);return this.afterUpdate(this,l,d)},headers:this._headers};const a="dhx_version="+this.$gantt.getUserData(0,"version",this._ganttMode),r=this.serverProcessor+(this._user?n.urlSeparator(this.serverProcessor)+["dhx_user="+this._user,a].join("&"):"");let s,o=this._applyPayload(r);switch(this._tMode){case"GET":s=this._cleanupArgumentsBeforeSend(t),i.url=o+n.urlSeparator(o)+this.serialize(s,e),i.method="GET";break;case"POST":s=this._cleanupArgumentsBeforeSend(t),i.url=o,i.method="POST",i.data=this.serialize(s,e);break;case"JSON":s={};const l=this._cleanupItemBeforeSend(t);for(const d in l)d!==this.action_param&&d!=="id"&&d!=="gr_id"&&(s[d]=l[d]);i.url=o,i.method="POST",i.data=JSON.stringify({id:e,action:t[this.action_param],data:s});break;case"REST":case"REST-JSON":switch(o=r.replace(/(&|\?)editing=true/,""),s="",this.getState(e)){case"inserted":i.method="POST",i.data=this.serialize(t,e);break;case"deleted":i.method="DELETE",o=o+(o.slice(-1)==="/"?"":"/")+e;break;default:i.method="PUT",i.data=this.serialize(t,e),o=o+(o.slice(-1)==="/"?"":"/")+e}i.url=this._applyPayload(o)}return this._waitMode++,n.query(i)}_forEachUpdatedRow(t){const e=this.updatedRows.slice();for(let n=0;nX(n)?this._prepareDate(n):Array.isArray(n)&&!zt(e,n)?this._prepareArray(n,e):n&&typeof n=="object"&&!zt(e,n)?this._prepareObject(n,e):n)}_prepareObject(t,e){const n={};e.push(t);for(const i in t){if(i.substr(0,1)==="$")continue;const a=t[i];X(a)?n[i]=this._prepareDate(a):a===null?n[i]="":Array.isArray(a)&&!zt(e,a)?n[i]=this._prepareArray(a,e):a&&typeof a=="object"&&!zt(e,a)?n[i]=this._prepareObject(a,e):n[i]=a}return n}_prepareDataItem(t){const e=this._prepareObject(t,[]);return e[this.action_param]=this.$gantt.getUserData(t.id,this.action_param,this._ganttMode),e}getStoredItem(t){return this._storage.getStoredItem(t)}_getRowData(t){let e;const n=this.$gantt;return this.getGanttMode()==="task"?n.isTaskExists(t)&&(e=this.$gantt.getTask(t)):this.getGanttMode()==="assignment"?this.$gantt.$data.assignmentsStore.exists(t)&&(e=this.$gantt.$data.assignmentsStore.getItem(t)):this.getGanttMode()==="baseline"?this.$gantt.$data.baselineStore.exists(t)&&(e=this.$gantt.$data.baselineStore.getItem(t)):n.isLinkExists(t)&&(e=this.$gantt.getLink(t)),e||(e=this.getStoredItem(t)),e||(e={id:t}),this._prepareDataItem(e)}};const Ke={DEPRECATED_api:function(t){return new Je(t)},createDataProcessor:function(t){let e,n,i;t instanceof Function?e=t:t.hasOwnProperty("router")?e=t.router:t.hasOwnProperty("assignment")||t.hasOwnProperty("baseline")||t.hasOwnProperty("link")||t.hasOwnProperty("task")?e=t:t.hasOwnProperty("headers")&&(i=t.headers),n=e?"CUSTOM":t.mode||"REST-JSON";const a=new Je(t.url);return a.init(this),a.setTransactionMode({mode:n,router:e,headers:i},t.batchUpdate),t.deleteAfterConfirmation&&(a.deleteAfterConfirmation=t.deleteAfterConfirmation),a}};function ei(t){var e={},n=!1;function i(l,d){d=typeof d=="function"?d:function(){},e[l]||(e[l]=this[l],this[l]=d)}function a(l){e[l]&&(this[l]=e[l],e[l]=null)}function r(l){for(var d in l)i.call(this,d,l[d])}function s(){for(var l in e)a.call(this,l)}function o(l){try{l()}catch(d){dt.console.error(d)}}return t.$services.getService("state").registerProvider("batchUpdate",function(){return{batch_update:n}},!1),function(l,d){if(n)o(l);else{var c,u=this._dp&&this._dp.updateMode!="off";u&&(c=this._dp.updateMode,this._dp.setUpdateMode("off"));var h={},g={render:!0,refreshData:!0,refreshTask:!0,refreshLink:!0,resetProjectDates:function(y){h[y.id]=y}};for(var f in r.call(this,g),n=!0,this.callEvent("onBeforeBatchUpdate",[]),o(l),this.callEvent("onAfterBatchUpdate",[]),s.call(this),h)this.resetProjectDates(h[f]);n=!1,d||this.render(),u&&(this._dp.setUpdateMode(c),this._dp.setGanttMode("task"),this._dp.sendData(),this._dp.setGanttMode("link"),this._dp.sendData())}}}function ni(t){t.batchUpdate=ei(t)}var ii=function(t){return{_needRecalc:!0,reset:function(){this._needRecalc=!0},_isRecalcNeeded:function(){return!this._isGroupSort()&&this._needRecalc},_isGroupSort:function(){return!!t.getState().group_mode},_getWBSCode:function(e){return e?(this._isRecalcNeeded()&&this._calcWBS(),e.$virtual?"":this._isGroupSort()?e.$wbs||"":(e.$wbs||(this.reset(),this._calcWBS()),e.$wbs)):""},_setWBSCode:function(e,n){e.$wbs=n},getWBSCode:function(e){return this._getWBSCode(e)},getByWBSCode:function(e){for(var n=e.split("."),i=t.config.root_id,a=0;al.start_date){for(let h=0;h"+g.value+""}return"-
"}return""},renderSummaryLabel:function(s,o,l,d,c){let u=c.reduce(function(h,g){return h+Number(g.value)},0);return u%1&&(u=Math.round(10*u)/10),u?""+u+"
":""},editableResourceCellTemplate:function(s,o,l,d,c){return l.$role==="task"?r.renderEditableLabel(s,o,l,d,c):r.renderSummaryLabel(s,o,l,d,c)},editableResourceCellClass:function(s,o,l,d,c){const u=[];u.push("resource_marker"),l.$role==="task"?u.push("task_cell"):u.push("resource_cell");const h=c.reduce(function(f,y){return f+Number(y.value)},0);let g=Number(l.capacity);return isNaN(g)&&(g=8),h<=g?u.push("workday_ok"):u.push("workday_over"),u.join(" ")},getSummaryResourceAssignments:function(s){let o;const l=a.getDatastore(a.config.resource_store),d=l.getItem(s);return d.$role==="task"?o=a.getResourceAssignments(d.$resource_id,d.$task_id):(o=a.getResourceAssignments(s),l.eachItem&&l.eachItem(function(c){c.$role!=="task"&&(o=o.concat(a.getResourceAssignments(c.id)))},s)),o},initEditableDiagram:function(){a.config.resource_render_empty_cells=!0,function(){let s=null;function o(){return s&&cancelAnimationFrame(s),s=requestAnimationFrame(function(){a.$container&&Array.prototype.slice.call(a.$container.querySelectorAll(".resourceTimeline_cell [data-assignment-cell]")).forEach(function(l){l.contentEditable=!0})}),!0}a.attachEvent("onGanttReady",function(){a.getDatastore(a.config.resource_assignment_store).attachEvent("onStoreUpdated",o),a.getDatastore(a.config.resource_store).attachEvent("onStoreUpdated",o)},{once:!0}),a.attachEvent("onGanttLayoutReady",function(){a.$layout.getCellsByType("viewCell").forEach(function(l){l.$config&&l.$config.view==="resourceTimeline"&&l.$content&&l.$content.attachEvent("onScroll",o)})})}(),a.attachEvent("onGanttReady",function(){let s=!1;a.event(a.$container,"keypress",function(o){var l=o.target.closest(".resourceTimeline_cell [data-assignment-cell]");l&&(o.keyCode!==13&&o.keyCode!==27||l.blur())}),a.event(a.$container,"focusout",function(o){if(!s){s=!0,setTimeout(function(){s=!1},300);var l=o.target.closest(".resourceTimeline_cell [data-assignment-cell]");if(l){var d=(l.innerText||"").trim();d=="-"&&(d="0");var c=Number(d),u=l.getAttribute("data-row-id"),h=l.getAttribute("data-assignment-id"),g=l.getAttribute("data-task"),f=l.getAttribute("data-resource-id"),y=a.templates.parse_date(l.getAttribute("data-start-date")),v=a.templates.parse_date(l.getAttribute("data-end-date")),b=a.getDatastore(a.config.resource_assignment_store);if(isNaN(c))a.getDatastore(a.config.resource_store).refresh(u);else{var _=a.getTask(g);if(a.plugins().undo&&a.ext.undo.saveState(g,"task"),h){if(c===(p=b.getItem(h)).value)return;if(p.start_date.valueOf()===y.valueOf()&&p.end_date.valueOf()===v.valueOf())p.value=c,c?b.updateItem(p.id):b.removeItem(p.id);else{if(p.end_date.valueOf()>v.valueOf()){var m=a.copy(p);m.id=a.uid(),m.start_date=v,m.duration=a.calculateDuration({start_date:m.start_date,end_date:m.end_date,task:_}),m.delay=a.calculateDuration({start_date:_.start_date,end_date:m.start_date,task:_}),m.mode=p.mode||"default",m.duration!==0&&b.addItem(m)}p.start_date.valueOf(){x!="$id"&&(w[x]=p[x])}),w.start_date&&w.start_date.getMonth&&w.end_date&&w.end_date.getMonth&&typeof w.duration=="number"||r(w,f),b.push(w)})}return b}function d(f){if(t.isTaskExists(f)){var y=t.getTask(f);c(y,t.getTaskAssignments(y.id))}}function c(f,y){y.sort(function(v,b){return v.start_date&&b.start_date&&v.start_date.valueOf()!=b.start_date.valueOf()?v.start_date-b.start_date:0}),i==n.assignmentsArray?f[t.config.resource_property]=y:i==n.resourceValueArray&&(f[t.config.resource_property]=y.map(function(v){return{$id:v.id,start_date:v.start_date,duration:v.duration,end_date:v.end_date,delay:v.delay,resource_id:v.resource_id,value:v.value,mode:v.mode}})),f[e]=y}function u(f){var y=l(f);return y.forEach(function(v){v.id=v.id||t.uid()}),y}function h(f,y){var v=function(b,_){var m={inBoth:[],inTaskNotInStore:[],inStoreNotInTask:[]};if(i==n.singleValue){var p=b[0],k=p?p.resource_id:null,$=!1;_.forEach(function(T){T.resource_id!=k?m.inStoreNotInTask.push(T):T.resource_id==k&&(m.inBoth.push({store:T,task:p}),$=!0)}),!$&&p&&m.inTaskNotInStore.push(p)}else if(i==n.valueArray){var w={},x={},S={};b.forEach(function(T){w[T.resource_id]=T}),_.forEach(function(T){x[T.resource_id]=T}),b.concat(_).forEach(function(T){if(!S[T.resource_id]){S[T.resource_id]=!0;var C=w[T.resource_id],E=x[T.resource_id];C&&E?m.inBoth.push({store:E,task:C}):C&&!E?m.inTaskNotInStore.push(C):!C&&E&&m.inStoreNotInTask.push(E)}})}else i!=n.assignmentsArray&&i!=n.resourceValueArray||(w={},x={},S={},b.forEach(function(T){w[T.id||T.$id]=T}),_.forEach(function(T){x[T.id]=T}),b.concat(_).forEach(function(T){var C=T.id||T.$id;if(!S[C]){S[C]=!0;var E=w[C],D=x[C];E&&D?m.inBoth.push({store:D,task:E}):E&&!D?m.inTaskNotInStore.push(E):!E&&D&&m.inStoreNotInTask.push(D)}}));return m}(l(f),y);v.inStoreNotInTask.forEach(function(b){s.removeItem(b.id)}),v.inTaskNotInStore.forEach(function(b){s.addItem(b)}),v.inBoth.forEach(function(b){if(function(m,p){var k={id:!0};for(var $ in m)if(!k[$]&&String(m[$])!==String(p[$]))return!0;return!1}(b.task,b.store))(function(m,p){var k={id:!0};for(var $ in m)k[$]||(p[$]=m[$])})(b.task,b.store),s.updateItem(b.store.id);else if(b.task.start_date&&b.task.end_date&&b.task.mode!==a.fixedDates){var _=o(b.store,f);b.store.start_date.valueOf()==_.start_date.valueOf()&&b.store.end_date.valueOf()==_.end_date.valueOf()||(b.store.start_date=_.start_date,b.store.end_date=_.end_date,b.store.duration=_.duration,s.updateItem(b.store.id))}}),d(f.id)}function g(f){var y=f[e]||s.find(function(v){return v.task_id==f.id});h(f,y)}t.$data.assignmentsStore=s,t.attachEvent("onGanttReady",function(){if(t.config.process_resource_assignments){t.attachEvent("onParse",function(){t.silent(function(){s.clearAll();var k=[];t.eachTask(function($){if($.type!==t.config.types.project){var w=u($);c($,w),w.forEach(function(x){k.push(x)})}}),s.parse(k)})});var f=!1,y=!1,v={},b=!1;t.attachEvent("onBeforeBatchUpdate",function(){f=!0}),t.attachEvent("onAfterBatchUpdate",function(){if(y){var k={};for(var $ in v)k[$]=t.getTaskAssignments(v[$].id);for(var $ in v)h(v[$],k[$])}y=!1,f=!1,v={}}),t.attachEvent("onTaskCreated",function(k){var $=u(k);return s.parse($),c(k,$),!0}),t.attachEvent("onAfterTaskUpdate",function(k,$){f?(y=!0,v[k]=$):$.unscheduled||g($)}),t.attachEvent("onAfterTaskAdd",function(k,$){f?(y=!0,v[k]=$):g($)}),t.attachEvent("onRowDragEnd",function(k){g(t.getTask(k))}),t.$data.tasksStore.attachEvent("onAfterDeleteConfirmed",function(k,$){var w,x=[k];t.eachTask(function(S){x.push(S.id)},k),w={},x.forEach(function(S){w[S]=!0}),s.find(function(S){return w[S.task_id]}).forEach(function(S){s.removeItem(S.id)})}),t.$data.tasksStore.attachEvent("onClearAll",function(){return _=null,m=null,p=null,s.clearAll(),!0}),t.attachEvent("onTaskIdChange",function(k,$){s.find(function(w){return w.task_id==k}).forEach(function(w){w.task_id=$,s.updateItem(w.id)}),d($)}),t.attachEvent("onBeforeUndo",function(k){return b=!0,!0}),t.attachEvent("onAfterUndo",function(k){b=!0});var _=null,m=null,p=null;s.attachEvent("onStoreUpdated",function(){return f&&!b||(_=null,m=null,p=null),!0}),t.getResourceAssignments=function(k,$){var w=t.defined($)&&$!==null;return _===null&&(_={},m={},s.eachItem(function(x){_[x.resource_id]||(_[x.resource_id]=[]),_[x.resource_id].push(x);var S=x.resource_id+"-"+x.task_id;m[S]||(m[S]=[]),m[S].push(x)})),w?(m[k+"-"+$]||[]).slice():(_[k]||[]).slice()},t.getTaskAssignments=function(k){if(p===null){var $=[];p={},s.eachItem(function(w){p[w.task_id]||(p[w.task_id]=[]),p[w.task_id].push(w),w.task_id==k&&$.push(w)})}return(p[k]||[]).slice()},t.getTaskResources=function(k){const $=t.getDatastore("resource"),w=t.getTaskAssignments(k),x={};w.forEach(function(T){x[T.resource_id]||(x[T.resource_id]=T.resource_id)});const S=[];for(const T in x){const C=$.getItem(x[T]);C&&S.push(C)}return S},t.updateTaskAssignments=d}},{once:!0})}function li(t){function e(o){return function(){return!t.config.placeholder_task||o.apply(this,arguments)}}function n(){var o=t.getTaskBy("type",t.config.types.placeholder);if(!o.length||!t.isTaskExists(o[0].id)){var l={unscheduled:!0,type:t.config.types.placeholder,duration:0,text:t.locale.labels.new_task};if(t.callEvent("onTaskCreated",[l])===!1)return;t.addTask(l)}}function i(o){var l=t.getTask(o);l.type==t.config.types.placeholder&&(l.start_date&&l.end_date&&l.unscheduled&&(l.unscheduled=!1),t.batchUpdate(function(){var d=t.copy(l);t.silent(function(){t.deleteTask(l.id)}),delete d["!nativeeditor_status"],d.type=t.config.types.task,d.id=t.uid(),t.addTask(d)}))}t.config.types.placeholder="placeholder",t.attachEvent("onDataProcessorReady",e(function(o){o&&!o._silencedPlaceholder&&(o._silencedPlaceholder=!0,o.attachEvent("onBeforeUpdate",e(function(l,d,c){return c.type!=t.config.types.placeholder||(o.setUpdated(l,!1),!1)})))}));var a=!1;function r(o){return!!(t.config.types.placeholder&&t.isTaskExists(o)&&t.getTask(o).type==t.config.types.placeholder)}function s(o){return!(!r(o.source)&&!r(o.target))}t.attachEvent("onGanttReady",function(){a||(a=!0,t.attachEvent("onAfterTaskUpdate",e(i)),t.attachEvent("onAfterTaskAdd",e(function(o,l){l.type!=t.config.types.placeholder&&(t.getTaskBy("type",t.config.types.placeholder).forEach(function(d){t.silent(function(){t.isTaskExists(d.id)&&t.deleteTask(d.id)})}),n())})),t.attachEvent("onParse",e(n)))}),t.attachEvent("onLinkValidation",function(o){return!s(o)}),t.attachEvent("onBeforeLinkAdd",function(o,l){return!s(l)}),t.attachEvent("onBeforeUndoStack",function(o){for(var l=0;l!isNaN(this.parse(e)),this.format=e=>String(e),this.parse=e=>parseInt(e,10)}};Jt.create=(e=null)=>new Jt;let Et=Jt;const Kt=class Kt{constructor(e){this.format=n=>this._getWBSCode(n.source),this.canParse=n=>this._linkReg.test(n),this.parse=n=>{if(!this.canParse(n))return null;const i=this._linkReg.exec(n)[0].trim();return{id:void 0,source:this._findSource(i)||null,target:null,type:this._gantt.config.links.finish_to_start,lag:0}},this._getWBSCode=n=>{const i=this._gantt.getTask(n);return this._gantt.getWBSCode(i)},this._findSource=n=>{const i=new RegExp("^[0-9.]+","i");if(i.exec(n)){const a=i.exec(n)[0],r=this._gantt.getTaskByWBSCode(a);if(r)return r.id}return null},this._linkReg=/^[0-9\.]+/,this._gantt=e}};Kt.create=(e=null,n)=>new Kt(n);let he=Kt;function ci(t){t.ext.formatters={durationFormatter:function(e){return e||(e={}),e.store||(e.store=t.config.duration_unit),e.enter||(e.enter=t.config.duration_unit),Et.create(e,t)},linkFormatter:function(e){return he.create(e,t)}}}function ui(t){t.ext=t.ext||{},t.config.show_empty_state=!1,t.ext.emptyStateElement=t.ext.emptyStateElement||{isEnabled:()=>t.config.show_empty_state===!0,isGanttEmpty:()=>!t.getTaskByTime().length,renderContent(e){const n=`
${`
+See https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and https://docs.dhtmlx.com/gantt/api__gantt_createdataprocessor.html for details.`;if(!this._router[c])throw new Error(`${g}: router for the **${c}** entity is not defined. ${f}`);switch(l){case"inserted":if(!this._router[c].create)throw new Error(`${g}: **create** action for the **${c}** entity is not defined. ${f}`);h=this._router[c].create(t);break;case"deleted":if(!this._router[c].delete)throw new Error(`${g}: **delete** action for the **${c}** entity is not defined. ${f}`);h=this._router[c].delete(e);break;default:if(!this._router[c].update)throw new Error(`${g}: **update**" action for the **${c}** entity is not defined. ${f}`);h=this._router[c].update(t,e)}}if(h){if(!h.then&&h.id===void 0&&h.tid===void 0&&h.action===void 0)throw new Error("Incorrect router return value. A Promise or a response object is expected");h.then?h.then(u).catch(g=>{g&&g.action?u(g):u({action:"error",value:g})}):u(h)}else u(null);return}let i;i={callback:l=>{const d=[];if(e)d.push(e);else if(t)for(const c in t)d.push(c);return this.afterUpdate(this,l,d)},headers:this._headers};const a="dhx_version="+this.$gantt.getUserData(0,"version",this._ganttMode),r=this.serverProcessor+(this._user?n.urlSeparator(this.serverProcessor)+["dhx_user="+this._user,a].join("&"):"");let s,o=this._applyPayload(r);switch(this._tMode){case"GET":s=this._cleanupArgumentsBeforeSend(t),i.url=o+n.urlSeparator(o)+this.serialize(s,e),i.method="GET";break;case"POST":s=this._cleanupArgumentsBeforeSend(t),i.url=o,i.method="POST",i.data=this.serialize(s,e);break;case"JSON":s={};const l=this._cleanupItemBeforeSend(t);for(const d in l)d!==this.action_param&&d!=="id"&&d!=="gr_id"&&(s[d]=l[d]);i.url=o,i.method="POST",i.data=JSON.stringify({id:e,action:t[this.action_param],data:s});break;case"REST":case"REST-JSON":switch(o=r.replace(/(&|\?)editing=true/,""),s="",this.getState(e)){case"inserted":i.method="POST",i.data=this.serialize(t,e);break;case"deleted":i.method="DELETE",o=o+(o.slice(-1)==="/"?"":"/")+e;break;default:i.method="PUT",i.data=this.serialize(t,e),o=o+(o.slice(-1)==="/"?"":"/")+e}i.url=this._applyPayload(o)}return this._waitMode++,n.query(i)}_forEachUpdatedRow(t){const e=this.updatedRows.slice();for(let n=0;nX(n)?this._prepareDate(n):Array.isArray(n)&&!zt(e,n)?this._prepareArray(n,e):n&&typeof n=="object"&&!zt(e,n)?this._prepareObject(n,e):n)}_prepareObject(t,e){const n={};e.push(t);for(const i in t){if(i.substr(0,1)==="$")continue;const a=t[i];X(a)?n[i]=this._prepareDate(a):a===null?n[i]="":Array.isArray(a)&&!zt(e,a)?n[i]=this._prepareArray(a,e):a&&typeof a=="object"&&!zt(e,a)?n[i]=this._prepareObject(a,e):n[i]=a}return n}_prepareDataItem(t){const e=this._prepareObject(t,[]);return e[this.action_param]=this.$gantt.getUserData(t.id,this.action_param,this._ganttMode),e}getStoredItem(t){return this._storage.getStoredItem(t)}_getRowData(t){let e;const n=this.$gantt;return this.getGanttMode()==="task"?n.isTaskExists(t)&&(e=this.$gantt.getTask(t)):this.getGanttMode()==="assignment"?this.$gantt.$data.assignmentsStore.exists(t)&&(e=this.$gantt.$data.assignmentsStore.getItem(t)):this.getGanttMode()==="baseline"?this.$gantt.$data.baselineStore.exists(t)&&(e=this.$gantt.$data.baselineStore.getItem(t)):n.isLinkExists(t)&&(e=this.$gantt.getLink(t)),e||(e=this.getStoredItem(t)),e||(e={id:t}),this._prepareDataItem(e)}};const Ke={DEPRECATED_api:function(t){return new Je(t)},createDataProcessor:function(t){let e,n,i;t instanceof Function?e=t:t.hasOwnProperty("router")?e=t.router:t.hasOwnProperty("assignment")||t.hasOwnProperty("baseline")||t.hasOwnProperty("link")||t.hasOwnProperty("task")?e=t:t.hasOwnProperty("headers")&&(i=t.headers),n=e?"CUSTOM":t.mode||"REST-JSON";const a=new Je(t.url);return a.init(this),a.setTransactionMode({mode:n,router:e,headers:i},t.batchUpdate),t.deleteAfterConfirmation&&(a.deleteAfterConfirmation=t.deleteAfterConfirmation),a}};function ei(t){var e={},n=!1;function i(l,d){d=typeof d=="function"?d:function(){},e[l]||(e[l]=this[l],this[l]=d)}function a(l){e[l]&&(this[l]=e[l],e[l]=null)}function r(l){for(var d in l)i.call(this,d,l[d])}function s(){for(var l in e)a.call(this,l)}function o(l){try{l()}catch(d){dt.console.error(d)}}return t.$services.getService("state").registerProvider("batchUpdate",function(){return{batch_update:n}},!1),function(l,d){if(n)o(l);else{var c,u=this._dp&&this._dp.updateMode!="off";u&&(c=this._dp.updateMode,this._dp.setUpdateMode("off"));var h={},g={render:!0,refreshData:!0,refreshTask:!0,refreshLink:!0,resetProjectDates:function(y){h[y.id]=y}};for(var f in r.call(this,g),n=!0,this.callEvent("onBeforeBatchUpdate",[]),o(l),this.callEvent("onAfterBatchUpdate",[]),s.call(this),h)this.resetProjectDates(h[f]);n=!1,d||this.render(),u&&(this._dp.setUpdateMode(c),this._dp.setGanttMode("task"),this._dp.sendData(),this._dp.setGanttMode("link"),this._dp.sendData())}}}function ni(t){t.batchUpdate=ei(t)}var ii=function(t){return{_needRecalc:!0,reset:function(){this._needRecalc=!0},_isRecalcNeeded:function(){return!this._isGroupSort()&&this._needRecalc},_isGroupSort:function(){return!!t.getState().group_mode},_getWBSCode:function(e){return e?(this._isRecalcNeeded()&&this._calcWBS(),e.$virtual?"":this._isGroupSort()?e.$wbs||"":(e.$wbs||(this.reset(),this._calcWBS()),e.$wbs)):""},_setWBSCode:function(e,n){e.$wbs=n},getWBSCode:function(e){return this._getWBSCode(e)},getByWBSCode:function(e){for(var n=e.split("."),i=t.config.root_id,a=0;al.start_date){for(let h=0;h"+g.value+"
"}return"
-
"}return""},renderSummaryLabel:function(s,o,l,d,c){let u=c.reduce(function(h,g){return h+Number(g.value)},0);return u%1&&(u=Math.round(10*u)/10),u?"
"+u+"
":""},editableResourceCellTemplate:function(s,o,l,d,c){return l.$role==="task"?r.renderEditableLabel(s,o,l,d,c):r.renderSummaryLabel(s,o,l,d,c)},editableResourceCellClass:function(s,o,l,d,c){const u=[];u.push("resource_marker"),l.$role==="task"?u.push("task_cell"):u.push("resource_cell");const h=c.reduce(function(f,y){return f+Number(y.value)},0);let g=Number(l.capacity);return isNaN(g)&&(g=8),h<=g?u.push("workday_ok"):u.push("workday_over"),u.join(" ")},getSummaryResourceAssignments:function(s){let o;const l=a.getDatastore(a.config.resource_store),d=l.getItem(s);return d.$role==="task"?o=a.getResourceAssignments(d.$resource_id,d.$task_id):(o=a.getResourceAssignments(s),l.eachItem&&l.eachItem(function(c){c.$role!=="task"&&(o=o.concat(a.getResourceAssignments(c.id)))},s)),o},initEditableDiagram:function(){a.config.resource_render_empty_cells=!0,function(){let s=null;function o(){return s&&cancelAnimationFrame(s),s=requestAnimationFrame(function(){a.$container&&Array.prototype.slice.call(a.$container.querySelectorAll(".resourceTimeline_cell [data-assignment-cell]")).forEach(function(l){l.contentEditable=!0})}),!0}a.attachEvent("onGanttReady",function(){a.getDatastore(a.config.resource_assignment_store).attachEvent("onStoreUpdated",o),a.getDatastore(a.config.resource_store).attachEvent("onStoreUpdated",o)},{once:!0}),a.attachEvent("onGanttLayoutReady",function(){a.$layout.getCellsByType("viewCell").forEach(function(l){l.$config&&l.$config.view==="resourceTimeline"&&l.$content&&l.$content.attachEvent("onScroll",o)})})}(),a.attachEvent("onGanttReady",function(){let s=!1;a.event(a.$container,"keypress",function(o){var l=o.target.closest(".resourceTimeline_cell [data-assignment-cell]");l&&(o.keyCode!==13&&o.keyCode!==27||l.blur())}),a.event(a.$container,"focusout",function(o){if(!s){s=!0,setTimeout(function(){s=!1},300);var l=o.target.closest(".resourceTimeline_cell [data-assignment-cell]");if(l){var d=(l.innerText||"").trim();d=="-"&&(d="0");var c=Number(d),u=l.getAttribute("data-row-id"),h=l.getAttribute("data-assignment-id"),g=l.getAttribute("data-task"),f=l.getAttribute("data-resource-id"),y=a.templates.parse_date(l.getAttribute("data-start-date")),v=a.templates.parse_date(l.getAttribute("data-end-date")),b=a.getDatastore(a.config.resource_assignment_store);if(isNaN(c))a.getDatastore(a.config.resource_store).refresh(u);else{var _=a.getTask(g);if(a.plugins().undo&&a.ext.undo.saveState(g,"task"),h){if(c===(p=b.getItem(h)).value)return;if(p.start_date.valueOf()===y.valueOf()&&p.end_date.valueOf()===v.valueOf())p.value=c,c?b.updateItem(p.id):b.removeItem(p.id);else{if(p.end_date.valueOf()>v.valueOf()){var m=a.copy(p);m.id=a.uid(),m.start_date=v,m.duration=a.calculateDuration({start_date:m.start_date,end_date:m.end_date,task:_}),m.delay=a.calculateDuration({start_date:_.start_date,end_date:m.start_date,task:_}),m.mode=p.mode||"default",m.duration!==0&&b.addItem(m)}p.start_date.valueOf()
{x!="$id"&&(w[x]=p[x])}),w.start_date&&w.start_date.getMonth&&w.end_date&&w.end_date.getMonth&&typeof w.duration=="number"||r(w,f),b.push(w)})}return b}function d(f){if(t.isTaskExists(f)){var y=t.getTask(f);c(y,t.getTaskAssignments(y.id))}}function c(f,y){y.sort(function(v,b){return v.start_date&&b.start_date&&v.start_date.valueOf()!=b.start_date.valueOf()?v.start_date-b.start_date:0}),i==n.assignmentsArray?f[t.config.resource_property]=y:i==n.resourceValueArray&&(f[t.config.resource_property]=y.map(function(v){return{$id:v.id,start_date:v.start_date,duration:v.duration,end_date:v.end_date,delay:v.delay,resource_id:v.resource_id,value:v.value,mode:v.mode}})),f[e]=y}function u(f){var y=l(f);return y.forEach(function(v){v.id=v.id||t.uid()}),y}function h(f,y){var v=function(b,_){var m={inBoth:[],inTaskNotInStore:[],inStoreNotInTask:[]};if(i==n.singleValue){var p=b[0],k=p?p.resource_id:null,$=!1;_.forEach(function(T){T.resource_id!=k?m.inStoreNotInTask.push(T):T.resource_id==k&&(m.inBoth.push({store:T,task:p}),$=!0)}),!$&&p&&m.inTaskNotInStore.push(p)}else if(i==n.valueArray){var w={},x={},S={};b.forEach(function(T){w[T.resource_id]=T}),_.forEach(function(T){x[T.resource_id]=T}),b.concat(_).forEach(function(T){if(!S[T.resource_id]){S[T.resource_id]=!0;var C=w[T.resource_id],E=x[T.resource_id];C&&E?m.inBoth.push({store:E,task:C}):C&&!E?m.inTaskNotInStore.push(C):!C&&E&&m.inStoreNotInTask.push(E)}})}else i!=n.assignmentsArray&&i!=n.resourceValueArray||(w={},x={},S={},b.forEach(function(T){w[T.id||T.$id]=T}),_.forEach(function(T){x[T.id]=T}),b.concat(_).forEach(function(T){var C=T.id||T.$id;if(!S[C]){S[C]=!0;var E=w[C],D=x[C];E&&D?m.inBoth.push({store:D,task:E}):E&&!D?m.inTaskNotInStore.push(E):!E&&D&&m.inStoreNotInTask.push(D)}}));return m}(l(f),y);v.inStoreNotInTask.forEach(function(b){s.removeItem(b.id)}),v.inTaskNotInStore.forEach(function(b){s.addItem(b)}),v.inBoth.forEach(function(b){if(function(m,p){var k={id:!0};for(var $ in m)if(!k[$]&&String(m[$])!==String(p[$]))return!0;return!1}(b.task,b.store))(function(m,p){var k={id:!0};for(var $ in m)k[$]||(p[$]=m[$])})(b.task,b.store),s.updateItem(b.store.id);else if(b.task.start_date&&b.task.end_date&&b.task.mode!==a.fixedDates){var _=o(b.store,f);b.store.start_date.valueOf()==_.start_date.valueOf()&&b.store.end_date.valueOf()==_.end_date.valueOf()||(b.store.start_date=_.start_date,b.store.end_date=_.end_date,b.store.duration=_.duration,s.updateItem(b.store.id))}}),d(f.id)}function g(f){var y=f[e]||s.find(function(v){return v.task_id==f.id});h(f,y)}t.$data.assignmentsStore=s,t.attachEvent("onGanttReady",function(){if(t.config.process_resource_assignments){t.attachEvent("onParse",function(){t.silent(function(){s.clearAll();var k=[];t.eachTask(function($){if($.type!==t.config.types.project){var w=u($);c($,w),w.forEach(function(x){k.push(x)})}}),s.parse(k)})});var f=!1,y=!1,v={},b=!1;t.attachEvent("onBeforeBatchUpdate",function(){f=!0}),t.attachEvent("onAfterBatchUpdate",function(){if(y){var k={};for(var $ in v)k[$]=t.getTaskAssignments(v[$].id);for(var $ in v)h(v[$],k[$])}y=!1,f=!1,v={}}),t.attachEvent("onTaskCreated",function(k){var $=u(k);return s.parse($),c(k,$),!0}),t.attachEvent("onAfterTaskUpdate",function(k,$){f?(y=!0,v[k]=$):$.unscheduled||g($)}),t.attachEvent("onAfterTaskAdd",function(k,$){f?(y=!0,v[k]=$):g($)}),t.attachEvent("onRowDragEnd",function(k){g(t.getTask(k))}),t.$data.tasksStore.attachEvent("onAfterDeleteConfirmed",function(k,$){var w,x=[k];t.eachTask(function(S){x.push(S.id)},k),w={},x.forEach(function(S){w[S]=!0}),s.find(function(S){return w[S.task_id]}).forEach(function(S){s.removeItem(S.id)})}),t.$data.tasksStore.attachEvent("onClearAll",function(){return _=null,m=null,p=null,s.clearAll(),!0}),t.attachEvent("onTaskIdChange",function(k,$){s.find(function(w){return w.task_id==k}).forEach(function(w){w.task_id=$,s.updateItem(w.id)}),d($)}),t.attachEvent("onBeforeUndo",function(k){return b=!0,!0}),t.attachEvent("onAfterUndo",function(k){b=!0});var _=null,m=null,p=null;s.attachEvent("onStoreUpdated",function(){return f&&!b||(_=null,m=null,p=null),!0}),t.getResourceAssignments=function(k,$){var w=t.defined($)&&$!==null;return _===null&&(_={},m={},s.eachItem(function(x){_[x.resource_id]||(_[x.resource_id]=[]),_[x.resource_id].push(x);var S=x.resource_id+"-"+x.task_id;m[S]||(m[S]=[]),m[S].push(x)})),w?(m[k+"-"+$]||[]).slice():(_[k]||[]).slice()},t.getTaskAssignments=function(k){if(p===null){var $=[];p={},s.eachItem(function(w){p[w.task_id]||(p[w.task_id]=[]),p[w.task_id].push(w),w.task_id==k&&$.push(w)})}return(p[k]||[]).slice()},t.getTaskResources=function(k){const $=t.getDatastore("resource"),w=t.getTaskAssignments(k),x={};w.forEach(function(T){x[T.resource_id]||(x[T.resource_id]=T.resource_id)});const S=[];for(const T in x){const C=$.getItem(x[T]);C&&S.push(C)}return S},t.updateTaskAssignments=d}},{once:!0})}function li(t){function e(o){return function(){return!t.config.placeholder_task||o.apply(this,arguments)}}function n(){var o=t.getTaskBy("type",t.config.types.placeholder);if(!o.length||!t.isTaskExists(o[0].id)){var l={unscheduled:!0,type:t.config.types.placeholder,duration:0,text:t.locale.labels.new_task};if(t.callEvent("onTaskCreated",[l])===!1)return;t.addTask(l)}}function i(o){var l=t.getTask(o);l.type==t.config.types.placeholder&&(l.start_date&&l.end_date&&l.unscheduled&&(l.unscheduled=!1),t.batchUpdate(function(){var d=t.copy(l);t.silent(function(){t.deleteTask(l.id)}),delete d["!nativeeditor_status"],d.type=t.config.types.task,d.id=t.uid(),t.addTask(d)}))}t.config.types.placeholder="placeholder",t.attachEvent("onDataProcessorReady",e(function(o){o&&!o._silencedPlaceholder&&(o._silencedPlaceholder=!0,o.attachEvent("onBeforeUpdate",e(function(l,d,c){return c.type!=t.config.types.placeholder||(o.setUpdated(l,!1),!1)})))}));var a=!1;function r(o){return!!(t.config.types.placeholder&&t.isTaskExists(o)&&t.getTask(o).type==t.config.types.placeholder)}function s(o){return!(!r(o.source)&&!r(o.target))}t.attachEvent("onGanttReady",function(){a||(a=!0,t.attachEvent("onAfterTaskUpdate",e(i)),t.attachEvent("onAfterTaskAdd",e(function(o,l){l.type!=t.config.types.placeholder&&(t.getTaskBy("type",t.config.types.placeholder).forEach(function(d){t.silent(function(){t.isTaskExists(d.id)&&t.deleteTask(d.id)})}),n())})),t.attachEvent("onParse",e(n)))}),t.attachEvent("onLinkValidation",function(o){return!s(o)}),t.attachEvent("onBeforeLinkAdd",function(o,l){return!s(l)}),t.attachEvent("onBeforeUndoStack",function(o){for(var l=0;l!isNaN(this.parse(e)),this.format=e=>String(e),this.parse=e=>parseInt(e,10)}};Jt.create=(e=null)=>new Jt;let Et=Jt;const Kt=class Kt{constructor(e){this.format=n=>this._getWBSCode(n.source),this.canParse=n=>this._linkReg.test(n),this.parse=n=>{if(!this.canParse(n))return null;const i=this._linkReg.exec(n)[0].trim();return{id:void 0,source:this._findSource(i)||null,target:null,type:this._gantt.config.links.finish_to_start,lag:0}},this._getWBSCode=n=>{const i=this._gantt.getTask(n);return this._gantt.getWBSCode(i)},this._findSource=n=>{const i=new RegExp("^[0-9.]+","i");if(i.exec(n)){const a=i.exec(n)[0],r=this._gantt.getTaskByWBSCode(a);if(r)return r.id}return null},this._linkReg=/^[0-9\.]+/,this._gantt=e}};Kt.create=(e=null,n)=>new Kt(n);let ue=Kt;function ci(t){t.ext.formatters={durationFormatter:function(e){return e||(e={}),e.store||(e.store=t.config.duration_unit),e.enter||(e.enter=t.config.duration_unit),Et.create(e,t)},linkFormatter:function(e){return ue.create(e,t)}}}function ui(t){t.ext=t.ext||{},t.config.show_empty_state=!1,t.ext.emptyStateElement=t.ext.emptyStateElement||{isEnabled:()=>t.config.show_empty_state===!0,isGanttEmpty:()=>!t.getTaskByTime().length,renderContent(e){const n=`
${`
${t.locale.labels.empty_state_text_link}
${t.locale.labels.empty_state_text_description}
-
`}
`;e.innerHTML=n},clickEvents:[],attachAddTaskEvent(){const e=t.attachEvent("onEmptyClick",function(n){t.utils.dom.closest(n.target,"[data-empty-state-create-task]")&&t.createTask({id:t.uid(),text:"New Task"})});this.clickEvents.push(e)},detachAddTaskEvents(){this.clickEvents.forEach(function(e){t.detachEvent(e)}),this.clickEvents=[]},getContainer(){if(t.$container){const e=t.utils.dom;if(t.$container.contains(t.$grid_data))return e.closest(t.$grid_data,".gantt_layout_content");if(t.$container.contains(t.$task_data))return e.closest(t.$task_data,".gantt_layout_content")}return null},getNode(){const e=this.getContainer();return e?e.querySelector(".gantt_empty_state_wrapper"):null},show(){const e=this.getContainer();if(!e&&this.isGanttEmpty())return null;const n=document.createElement("div");n.className="gantt_empty_state_wrapper",n.style.marginTop=t.config.scale_height-e.offsetHeight+"px";const i=t.$container.querySelectorAll(".gantt_empty_state_wrapper");Array.prototype.forEach.call(i,function(a){a.parentNode.removeChild(a)}),this.detachAddTaskEvents(),this.attachAddTaskEvent(),e.appendChild(n),this.renderContent(n)},hide(){const e=this.getNode();if(!e)return!1;e.parentNode.removeChild(e)},init(){}},t.attachEvent("onDataRender",function(){const e=t.ext.emptyStateElement;e.isEnabled()&&e.isGanttEmpty()?e.show():e.hide()})}const Xe=function(t,e){const n=e.baselines&&e.baselines.length,i=t.config.baselines.render_mode=="separateRow"||t.config.baselines.render_mode=="individualRow";if(n&&i)return!0},hi=function(t,e){let n=!1;return t.eachTask(function(i){n||(n=Xe(t,i))},e),n},wt=function(t){return t.render&&t.render=="split"&&!t.$open},_i=function(t,e,n,i){let a=i||e.$task_data.scrollHeight,r=!1,s=!1;return t.eachParent(function(o){if(wt(o)){s=!0;const l=e.getItemPosition(o).rowHeight;lr&&(r=o)},a.id),a.row_heighto&&(o=c)}),r.row_height=o,r.bar_height=r.bar_height||s}},a.id)}t.$data.baselineStore=e,t.adjustTaskHeightForBaselines=function(a){let r,s,o=a.baselines&&a.baselines.length||0;const l=t.config.baselines.row_height;switch(t.config.baselines.render_mode){case"taskRow":a.row_height=a.bar_height+4;break;case"separateRow":r=t.getLayoutView("timeline").getBarHeight(a.id),o?(a.bar_height=a.bar_height||r,a.bar_height>r&&(r=a.bar_height),a.row_height=r+l):a.bar_height&&(a.row_height=a.bar_height+4),i(a);break;case"individualRow":r=t.getLayoutView("timeline").getBarHeight(a.id),o?(a.bar_height=a.bar_height||r,a.bar_height>r&&(r=a.bar_height),s=l*o,a.row_height=r+s+2):a.bar_height&&(a.row_height=a.bar_height+4),i(a)}},t.attachEvent("onGanttReady",function(){t.config.baselines!==!1&&(t.attachEvent("onParse",function(){e.eachItem(function(a){const r=a.task_id;if(t.isTaskExists(r)){const s=t.getTask(r);s.baselines=s.baselines||[];let o=!0;for(let l=0;l"+n.xmlDoc.responseURL+" , server returns 404");else if(!t.$destroyed){this.callEvent("onBeforeParse",[]),i||(i="json"),this.assert(this[i],"Invalid data type:'"+i+"'");var a=n.xmlDoc.responseText,r=this[i].parse(a,n);this._process_loading(r)}},t._process_loading=function(n){n.collections&&this._load_collections(n.collections),n.resources&&this.$data.resourcesStore&&this.$data.resourcesStore.parse(n.resources),t.config.baselines!==!1&&n.baselines&&this.$data.baselineStore&&this.$data.baselineStore.parse(n.baselines);const i=n.data||n.tasks;n.assignments&&function(r,s){const o={};s.forEach(l=>{o[l.task_id]||(o[l.task_id]=[]),o[l.task_id].push(l)}),r.forEach(l=>{l[t.config.resource_property]=o[l.id]||[]})}(i,n.assignments),this.$data.tasksStore.parse(i);var a=n.links||(n.collections?n.collections.links:[]);this.$data.linksStore.parse(a),this.callEvent("onParse",[]),this.render()},t._load_collections=function(n){var i=!1;for(var a in n)if(n.hasOwnProperty(a)){i=!0;var r=n[a];this.serverList[a]=this.serverList[a]||[];var s=this.serverList[a];if(!s)continue;s.splice(0,s.length);for(var o=0;o "},_copyObject:function(n){return" "},serialize:function(){for(var n=[],i=[],a=t.json.serialize(),r=0,s=a.data.length;r"+n.join("")+""+i.join("")+" "}},t.oldxml={parse:function(n,i){i=t.xml._getXML(n,i,"projects");for(var a={collections:{links:[]}},r=a.data=[],s=t.ajax.xpath("//task",i),o=0;oe.length?t:e,a=t===i?e:t;i=i.slice(),a=a.slice(),n=[];for(var r=0;rs.start&&(n.push({start:Math.max(s.start,l.start),end:Math.min(s.end,l.end)}),s.end>l.end&&(a.splice(o,1),o--,r--))}return n},_mergeAdjacentIntervals:function(t){var e=t.slice();e.sort(function(r,s){return r.start-s.start});for(var n=e[0],i=1;in.end&&(n.end=a.end),e.splice(i,1),i--):n=a}return e},_mergeHoursConfig:function(t,e){return this._mergeAdjacentIntervals(this._intersectHourRanges(t,e))},merge:function(t,e){var n=V(t.getConfig().parsed),i=V(e.getConfig().parsed),a={hours:this._toHoursArray(this._mergeHoursConfig(n.hours,i.hours)),dates:{},customWeeks:{}};const r=(o,l)=>{for(let d in o.dates){const c=o.dates[d];+d>1e3&&(a.dates[d]=!1);for(const u in l.dates){const h=l.dates[u];if(u==d&&(a.dates[d]=!(!c||!h)),Array.isArray(c)){const g=Array.isArray(h)?h:l.hours;a.dates[d]=this._toHoursArray(this._mergeHoursConfig(c,g))}}}};if(r(n,i),r(i,n),n.customWeeks)for(var s in n.customWeeks)a.customWeeks[s]=n.customWeeks[s];if(i.customWeeks)for(var s in i.customWeeks)a.customWeeks[s]=i.customWeeks[s];return a}};class mi{constructor(){this.clear()}getItem(e,n,i){if(this._cache.has(e)){const a=this._cache.get(e)[i.getFullYear()];if(a&&a.has(n))return a.get(n)}return-1}setItem(e,n,i,a){if(!e||!n)return;const r=this._cache,s=a.getFullYear();let o;r.has(e)?o=r.get(e):(o=[],r.set(e,o));let l=o[s];l||(l=o[s]=new Map),l.set(n,i)}clear(){this._cache=new Map}}class vi{constructor(){this.clear()}getItem(e,n,i){const a=this._cache;if(a&&a[e]){const r=a[e];if(r===void 0)return-1;const s=r[i.getFullYear()];if(s&&s[n]!==void 0)return s[n]}return-1}setItem(e,n,i,a){if(!e||!n)return;const r=this._cache;if(!r)return;r[e]||(r[e]=[]);const s=r[e],o=a.getFullYear();let l=s[o];l||(l=s[o]={}),l[n]=i}clear(){this._cache={}}}class ki{constructor(e){this.getMinutesPerWeek=n=>{const i=n.valueOf();if(this._weekCache.has(i))return this._weekCache.get(i);const a=this._calendar,r=this._calendar.$gantt;let s=0,o=r.date.week_start(new Date(n));for(let l=0;l<7;l++)s+=60*a.getHoursPerDay(o),o=r.date.add(o,1,"day");return this._weekCache.set(i,s),s},this.getMinutesPerMonth=n=>{const i=n.valueOf();if(this._monthCache.has(i))return this._monthCache.get(i);const a=this._calendar,r=this._calendar.$gantt;let s=0,o=r.date.week_start(new Date(n));const l=r.date.add(o,1,"month").valueOf();for(;o.valueOf(){this._weekCache=new Map,this._monthCache=new Map},this.clear(),this._calendar=e}}class yi{constructor(){this.clear()}_getCacheObject(e,n,i){const a=this._cache;a[n]||(a[n]=[]);let r=a[n];r||(r=a[n]={});let s=r[i];s||(s=r[i]={});const o=e.getFullYear();let l=s[o];return l||(l=s[o]={durations:{},endDates:{}}),l}_endDateCacheKey(e,n){return String(e)+"-"+String(n)}_durationCacheKey(e,n){return String(e)+"-"+String(n)}getEndDate(e,n,i,a,r){const s=this._getCacheObject(e,i,a),o=e.valueOf(),l=this._endDateCacheKey(o,n);let d;if(s.endDates[l]===void 0){const c=r(),u=c.valueOf();s.endDates[l]=u,s.durations[this._durationCacheKey(o,u)]=n,d=c}else d=new Date(s.endDates[l]);return d}getDuration(e,n,i,a,r){const s=this._getCacheObject(e,i,a),o=e.valueOf(),l=n.valueOf(),d=this._durationCacheKey(o,l);let c;if(s.durations[d]===void 0){const u=r();s.durations[d]=u.valueOf(),c=u}else c=s.durations[d];return c}clear(){this._cache={}}}function pe(t,e){this.argumentsHelper=e,this.$gantt=t,this._workingUnitsCache=typeof Map<"u"?new mi:new vi,this._largeUnitsCache=new ki(this),this._dateDurationCache=new yi,this._worktime=null,this._cached_timestamps={},this._cached_timestamps_count=0}pe.prototype={units:["year","month","week","day","hour","minute"],_clearCaches:function(){this._workingUnitsCache.clear(),this._largeUnitsCache.clear(),this._dateDurationCache.clear()},_getUnitOrder:function(t){for(var e=0,n=this.units.length;e1e6&&this._resetTimestampCache();var e=null;if(t.day||t.day===0)e=t.day;else if(t.date){var n=String(t.date.valueOf());this._cached_timestamps[n]?e=this._cached_timestamps[n]:(e=Date.UTC(t.date.getFullYear(),t.date.getMonth(),t.date.getDate()),this._cached_timestamps[n]=e,this._cached_timestamps_count++)}return e},_checkIfWorkingUnit:function(t,e){if(!this["_is_work_"+e]){const n=this.$gantt.date[`${e}_start`](new Date(t)),i=this.$gantt.date.add(n,1,e);return this.hasDuration(n,i)}return this["_is_work_"+e](t)},_is_work_day:function(t){var e=this._getWorkHours(t);return!!Array.isArray(e)&&e.length>0},_is_work_hour:function(t){for(var e=this._getWorkHours(t),n=t.getHours(),i=0;i=e[i].startHour&&n=e[i].start&&ns.valueOf(),this._isWorkTime(r,n))(u||h&&g)&&(o=a[n+"_start"](new Date(r)),l=a.add(o,i,n)),u?(u=!1,c=this._nextDate(o,n,i),d+=(l.valueOf()-r.valueOf())/(l.valueOf()-o.valueOf())):h&&g?(h=!1,d+=(s.valueOf()-r.valueOf())/(l.valueOf()-o.valueOf())):d++;else{var f=this._getUnitOrder(n),y=this.units[f-1];y&&!this._isWorkTime(r,y)&&(c=this._getClosestWorkTimeFuture(r,y))}r=c}return d},_getMinutesPerHour:function(t){var e=this._getTimeOfDayStamp(t),n=this._getTimeOfDayStamp(this._nextDate(t,"hour",1));n===0&&(n=86400);for(var i=this._getWorkHours(t),a=0;a=r.start&&n<=r.end)return 60;if(er.start)return(Math.min(n,r.end)-Math.max(e,r.start))/60}return 0},_getMinutesPerDay:function(t){var e=this._getWorkHours(t),n=0;return e.forEach(function(i){n+=i.durationMinutes}),n},getHoursPerDay:function(t){var e=this._getWorkHours(t),n=0;return e.forEach(function(i){n+=i.durationHours}),n},_getWorkUnitsForRange:function(t,e,n,i){var a,r=0,s=new Date(t),o=new Date(e);for(a=R(n=="minute"?this._getMinutesPerDay:this.getHoursPerDay,this);s.valueOf()27648e5&&s.getDate()===0){var l=this._largeUnitsCache.getMinutesPerMonth(s);n=="hour"&&(l/=60),r+=l,s=this.$gantt.date.add(s,1,"month")}else{if(o-s>13824e5){var d=this.$gantt.date.week_start(new Date(s));if(s.valueOf()===d.valueOf()){l=this._largeUnitsCache.getMinutesPerWeek(s),n=="hour"&&(l/=60),r+=l,s=this.$gantt.date.add(s,7,"day");continue}}r+=a(s),s=this._nextDate(s,"day",1)}return r/i},_getMinutesBetweenSingleDay:function(t,e){for(var n=this._getIntervalTimestamp(t,e),i=this._getWorkHours(t),a=0,r=0;r=s.start&&n.start<=s.end){var o=Math.max(s.start,n.start),l=Math.min(s.end,n.end);a+=(l-o)/60,n.start=l}}return Math.floor(a)},_getMinutesBetween:function(t,e,n,i){var a=new Date(t),r=new Date(e);i=i||1;var s=new Date(a),o=this.$gantt.date.add(this.$gantt.date.day_start(new Date(a)),1,"day");if(r.valueOf()<=o.valueOf())return this._getMinutesBetweenSingleDay(t,e);var l=this.$gantt.date.day_start(new Date(r)),d=r,c=this._getMinutesBetweenSingleDay(s,o),u=this._getMinutesBetweenSingleDay(l,d);return c+this._getWorkUnitsForRange(o,l,n,i)+u},_getHoursBetween:function(t,e,n,i){var a=new Date(t),r=new Date(e);i=i||1;var s=new Date(a),o=this.$gantt.date.add(this.$gantt.date.day_start(new Date(a)),1,"day");if(r.valueOf()<=o.valueOf())return Math.round(this._getMinutesBetweenSingleDay(t,e)/60);var l=this.$gantt.date.day_start(new Date(r)),d=r,c=this._getMinutesBetweenSingleDay(s,o,n,i)/60,u=this._getMinutesBetweenSingleDay(l,d,n,i)/60,h=c+this._getWorkUnitsForRange(o,l,n,i)+u;return Math.round(h)},getConfig:function(){return this._worktime},_setConfig:function(t){this._worktime=t,this._parseSettings(),this._clearCaches()},_parseSettings:function(){var t=this.getConfig();for(var e in t.parsed={dates:{},hours:null,haveCustomWeeks:!1,customWeeks:{},customWeeksRangeStart:null,customWeeksRangeEnd:null,customWeeksBoundaries:[]},t.parsed.hours=this._parseHours(t.hours),t.dates)t.parsed.dates[e]=this._parseHours(t.dates[e]);if(t.customWeeks){var n=null,i=null;for(var e in t.customWeeks){var a=t.customWeeks[e];if(a.from&&a.to){var r=a.from,s=a.to;(!n||n>r.valueOf())&&(n=r.valueOf()),(!i||ii){for(var a=0;ai){n=n.customWeeks[n.customWeeksBoundaries[a].name];break}}var r=!0;return n.dates[i]!==void 0?r=n.dates[i]:n.dates[t.getDay()]!==void 0&&(r=n.dates[t.getDay()]),r===!0?n.hours:r||[]},_getIntervalTimestamp:function(t,e){var n={start:0,end:0};n.start=60*t.getHours()*60+60*t.getMinutes()+t.getSeconds();var i=e.getHours();return!i&&!e.getMinutes()&&!e.getSeconds()&&t.valueOf()e.valueOf()){var s=e;e=t,t=s,r=-1}return a=n=="hour"&&i==1?this._getHoursBetween(t,e,n,i):n=="minute"&&i==1?this._getMinutesBetween(t,e,n,i):this._getWorkUnitsBetweenGeneric(t,e,n,i),r*Math.round(a)},hasDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,n=t.end_date,i=t.unit,a=t.step;if(!i)return!1;var r=new Date(e),s=new Date(n);for(a=a||1;r.valueOf()=0?1:-1;n=Math.abs(1*n);var s=this;return this._dateDurationCache.getEndDate(e,n,i,a*r,function(){return s._calculateEndDate(e,n,i,a*r)})},_calculateEndDate:function(t,e,n,i){return!!n&&(i==1&&n=="minute"?this._calculateMinuteEndDate(t,e,i):i==-1&&n=="minute"?this._subtractMinuteDate(t,e,i):i==1&&n=="hour"?this._calculateHourEndDate(t,e,i):this._addInterval(t,e,n,i,null).end)},_addInterval:function(t,e,n,i,a){for(var r=0,s=t,o=!1;r0&&(d=new Date(l.valueOf()-1)),this._isWorkTime(d,n)&&!o&&r++,s=l}return{end:s,start:t,added:r}},_addHoursUntilDayEnd:function(t,e){for(var n=this.$gantt.date.add(this.$gantt.date.day_start(new Date(t)),1,"day"),i=0,a=e,r=this._getIntervalTimestamp(t,n),s=this._getWorkHours(t),o=0;o=l.start&&r.start<=l.end){var d=Math.max(l.start,r.start),c=Math.min(l.end,r.end),u=(c-d)/3600;u>a&&(u=a,c=d+60*a*60);var h=Math.round((c-d)/3600);i+=h,a-=h,r.start=c}}var g=n;return i===e&&(g=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,r.start)),{added:i,end:g}},_calculateHourEndDate:function(t,e,n){var i=new Date(t),a=0;n=n||1,e=Math.abs(1*e);var r=this._addHoursUntilDayEnd(i,e);if(a=r.added,i=r.end,d=e-a){for(var s=i;a0?this.getHoursPerDay(new Date(o.valueOf()-1)):this.getHoursPerDay(new Date(o.valueOf()+1)))>=e)break;a+=l,s=o}i=s}if(a=l.start&&r.start<=l.end){var d=Math.max(l.start,r.start),c=Math.min(l.end,r.end),u=(c-d)/60;u>a&&(u=a,c=d+60*a);var h=Math.round((c-d)/60);a-=h,i+=h,r.start=c}}var g=n;return i===e&&(g=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,r.start)),{added:i,end:g}},_subtractMinutesUntilHourStart:function(t,e){for(var n=this.$gantt.date.hour_start(new Date(t)),i=0,a=e,r=60*n.getHours()*60+60*n.getMinutes()+n.getSeconds(),s=60*t.getHours()*60+60*t.getMinutes()+t.getSeconds(),o=this._getWorkHours(t),l=o.length-1;l>=0&&id.start&&r<=d.end){var c=Math.min(s,d.end),u=Math.max(r,d.start),h=(c-u)/60;h>a&&(h=a,u=c-60*a);var g=Math.abs(Math.round((c-u)/60));a-=g,i+=g,s=u}}var f=n;return i===e&&(f=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,s)),{added:i,end:f}},_subtractMinuteDate:function(t,e,n){var i=new Date(t),a=0;n=n||-1,e=Math.abs(1*e),e=Math.round(e);const r=this._isMinutePrecision(i);let s=this._subtractMinutesUntilHourStart(i,e);a+=s.added,i=s.end;for(var o=0,l=[],d=0;ad)a+=d,i=this.$gantt.date.add(i,-1,"day");else{for(var y=!1,v=null,b=null,_=l.length-1;_>=0;_--)if(l[_].start=f-1){y=!0,v=l[_],b=l[_-1];break}if(y)if(f===v.end&&g>=v.durationMinutes)a+=v.durationMinutes,i=this.$gantt.date.add(i,-v.durationMinutes,"minute");else if(!r&&g<=f/60-v.startMinute)a+=g,i=this.$gantt.date.add(i,-g,"minute");else if(r)g<=f/60-v.startMinute?(a+=g,i=this.$gantt.date.add(i,-g,"minute")):(a+=f/60-v.startMinute,i=b?new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,b.end):this.$gantt.date.day_start(i));else{var m=this._getMinutesPerHour(i);m<=g?(a+=m,i=this._nextDate(i,"hour",n)):(s=this._subtractMinutesUntilHourStart(i,g),a+=s.added,i=s.end)}else if(i.getHours()===0&&i.getMinutes()===0&&i.getSeconds()===0){if((p=this._getClosestWorkTimePast(i,"hour")).valueOf()===i.valueOf()){var p=this.$gantt.date.add(i,-1,"day"),k=this._getWorkHours(p);if(k.length){var $=k[k.length-1];p.setSeconds($.durationSeconds)}}i=p}else i=this._getClosestWorkTimePast(new Date(i-1),"hour")}else i=this.$gantt.date.add(i,-1,"day")}if(a=h&&u>=l){if(a+=l,u==l){i=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,o[o.length-1].end);break}i=this.$gantt.date.add(i,1,"day"),i=this.$gantt.date.day_start(i)}else{for(var g=!1,f=null,y=0;yh){g=!0,f=o[y];break}if(g)if(h===f.start&&u>=f.durationMinutes)a+=f.durationMinutes,i=this.$gantt.date.add(i,f.durationMinutes,"minute");else if(u<=f.endMinute-h/60)a+=u,i=this.$gantt.date.add(i,u,"minute");else{var v=this._getMinutesPerHour(i);v<=u?(a+=v,i=d?this.$gantt.date.add(i,v,"minute"):this._nextDate(i,"hour",n)):(a+=(r=this._addMinutesUntilHourEnd(i,u)).added,i=r.end)}else i=this._getClosestWorkTimeFuture(i,"hour")}else i=this.$gantt.date.add(this.$gantt.date.day_start(i),1,"day")}if(a0){for(var o=0;o=s){a=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,n[o].start);break}}else for(o=n.length-1;o>=0;o--){if(n[o].end<=s){a=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,n[o].end);break}if(n[o].end>s&&n[o].start<=s){a=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,s);break}}return a},_getClosestWorkMinute:function(t,e,n){var i=new Date(t),a=this._getWorkHours(i),r=this._findClosestTimeInDay(i,n,a);return r||(i=this.calculateEndDate(i,n,"day"),n>0?i=this.$gantt.date.day_start(i):(i=this.$gantt.date.day_start(i),i=this.$gantt.date.add(i,1,"day"),i=new Date(i.valueOf()-1)),a=this._getWorkHours(i),r=this._findClosestTimeInDay(i,n,a)),n<0&&(r=this.$gantt.date.add(r,-1,e)),r},_getClosestWorkTimeGeneric:function(t,e,n){if(e==="hour"||e==="minute")return this._getClosestWorkMinute(t,e,n);for(var i=this._getUnitOrder(e),a=this.units[i-1],r=t,s=0;!this._isWorkTime(r,e)&&(!a||this._isWorkTime(r,a)||(r=n>0?this._getClosestWorkTimeFuture(r,a):this._getClosestWorkTimePast(r,a),!this._isWorkTime(r,e)));){if(++s>3e3)return this.$gantt.assert(!1,"Invalid working time check"),!1;var o=r.getTimezoneOffset();r=this.$gantt.date.add(r,n,e),r=this.$gantt._correct_dst_change(r,o,n,e),this.$gantt.date[e+"_start"]&&(r=this.$gantt.date[e+"_start"](r))}return r},hasWorkTime:function(){var t=this.getConfig(),e=t.dates;for(var n in t.dates);var i=this._checkWorkHours(t.hours),a=!1;return[0,1,2,3,4,5,6].forEach((function(r){if(!a){var s=e[r];s===!0?a=i:Array.isArray(s)&&(a=this._checkWorkHours(s))}}).bind(this)),a},_checkWorkHours:function(t){if(t.length===0)return!1;for(var e=!1,n=0;ntask="+s+" of gantt.isUnscheduledTask. Task object was expected"),!!s.unscheduled||!s.start_date},t._isAllowedUnscheduledTask=function(s){return!(!s.unscheduled||!t.config.show_unscheduled)},t._isTaskInTimelineLimits=function(s){var o=s.start_date?s.start_date.valueOf():null,l=s.end_date?s.end_date.valueOf():null;return!!(o&&l&&o<=this._max_date.valueOf()&&l>=this._min_date.valueOf())},t.isTaskVisible=function(s){if(!this.isTaskExists(s))return!1;var o=this.getTask(s);return!(!this._isAllowedUnscheduledTask(o)&&!this._isTaskInTimelineLimits(o))&&this.getGlobalTaskIndex(s)>=0},t._getProjectEnd=function(){if(t.config.project_end)return t.config.project_end;var s=t.getTaskByTime();return(s=s.sort(function(o,l){return+o.end_date>+l.end_date?1:-1})).length?s[s.length-1].end_date:null},t._getProjectStart=function(){if(t.config.project_start)return t.config.project_start;if(t.config.start_date)return t.config.start_date;if(t.getState().min_date)return t.getState().min_date;var s=t.getTaskByTime();return(s=s.sort(function(o,l){return+o.start_date>+l.start_date?1:-1})).length?s[0].start_date:null};var e=function(s,o){var l=!!(o&&o!=t.config.root_id&&t.isTaskExists(o))&&t.getTask(o),d=null;if(l)if(t.config.schedule_from_end)d=t.calculateEndDate({start_date:l.end_date,duration:-t.config.duration_step,task:s});else{if(!l.start_date)return e(l,t.getParent(l));d=l.start_date}else if(t.config.schedule_from_end)d=t.calculateEndDate({start_date:t._getProjectEnd(),duration:-t.config.duration_step,task:s});else{const c=t.getTaskByIndex(0),u=t.config.start_date||t.getState().min_date;d=c?c.start_date?c.start_date:c.end_date?t.calculateEndDate({start_date:c.end_date,duration:-t.config.duration_step,task:s}):u:u}return t.assert(d,"Invalid dates"),new Date(d)};t._set_default_task_timing=function(s){s.start_date=s.start_date||e(s,t.getParent(s)),s.duration=s.duration||t.config.duration_step,s.end_date=s.end_date||t.calculateEndDate(s)},t.createTask=function(s,o,l){return s=s||{},t.defined(s.id)||(s.id=t.uid()),s.start_date||(s.start_date=e(s,o)),s.text===void 0&&(s.text=t.locale.labels.new_task),s.duration===void 0&&(s.duration=1),this.isTaskExists(o)&&(this.setParent(s,o,!0),this.getTask(o).$open=!0),this.callEvent("onTaskCreated",[s])?(this.config.details_on_create?(t.isTaskExists(s.id)?t.getTask(s.id).$index!=s.$index&&(s.start_date&&typeof s.start_date=="string"&&(s.start_date=this.date.parseDate(s.start_date,"parse_date")),s.end_date&&typeof s.end_date=="string"&&(s.end_date=this.date.parseDate(s.end_date,"parse_date")),this.$data.tasksStore.updateItem(s.id,s)):(s.$new=!0,this.silent(function(){t.$data.tasksStore.addItem(s,l)})),this.selectTask(s.id),this.refreshData(),this.showLightbox(s.id)):this.addTask(s,o,l)&&(this.showTask(s.id),this.selectTask(s.id)),s.id):null},t._update_flags=function(s,o){var l=t.$data.tasksStore;s===void 0?(this._lightbox_id=null,l.silent(function(){l.unselect()}),this.getSelectedTasks&&this._multiselect.reset(),this._tasks_dnd&&this._tasks_dnd.drag&&(this._tasks_dnd.drag.id=null)):(this._lightbox_id==s&&(this._lightbox_id=o),l.getSelectedId()==s&&l.silent(function(){l.unselect(s),l.select(o)}),this._tasks_dnd&&this._tasks_dnd.drag&&this._tasks_dnd.drag.id==s&&(this._tasks_dnd.drag.id=o))};var n=function(s,o){var l=t.getTaskType(s.type),d={type:l,$no_start:!1,$no_end:!1,scheduled_summary:!1};return l===t.config.types.project&&s.auto_scheduling===!1&&(d.scheduled_summary=!0),o||l!=s.$rendered_type?(l==t.config.types.project?d.$no_end=d.$no_start=!0:l!=t.config.types.milestone&&(d.$no_end=!(s.end_date||s.duration),d.$no_start=!s.start_date,t._isAllowedUnscheduledTask(s)&&(d.$no_end=d.$no_start=!1)),d):(d.$no_start=s.$no_start,d.$no_end=s.$no_end,d)};function i(s){s.$effective_calendar=t.getTaskCalendar(s).id,s.start_date=t.getClosestWorkTime({dir:"future",date:s.start_date,unit:t.config.duration_unit,task:s}),s.end_date=t.calculateEndDate(s)}function a(s,o,l,d){const c={start:"start_date",end:"end_date"},u={start:"$auto_start_date",end:"$auto_end_date"};let h;h=s.type===t.config.types.project&&s.auto_scheduling===!1?u:c,o.$no_start&&(s[h.start]=l?new Date(l):e(s,this.getParent(s))),o.$no_end&&(s[h.end]=d?new Date(d):this.calculateEndDate({start_date:s[h.start],duration:this.config.duration_step,task:s})),(o.$no_start||o.$no_end)&&this._init_task_timing(s)}function r(s){var o=null,l=null,d=s!==void 0?s:t.config.root_id,c=[];return t.eachTask(function(u){const h=t.getTaskType(u.type)==t.config.types.project&&u.auto_scheduling===!1;t.getTaskType(u.type)==t.config.types.project&&!h||t.isUnscheduledTask(u)||(u.rollup&&c.push(u.id),!u.start_date||u.$no_start&&!h||o&&!(o>u.start_date.valueOf())||(o=u.start_date.valueOf()),!u.end_date||u.$no_end&&!h||l&&!(ltask="+s+" of gantt.isSummaryTask. Task object was expected");var o=n(s);return!(!o.$no_end&&!o.$no_start)},t.resetProjectDates=function(s){var o=n(s);if(o.$no_end||o.$no_start){var l=r(s.id);a.call(this,s,o,l.start_date,l.end_date),s.$rollup=l.rollup}},t.getSubtaskDuration=function(s){var o=0,l=s!==void 0?s:t.config.root_id;return this.eachTask(function(d){this.getTaskType(d.type)==t.config.types.project||this.isUnscheduledTask(d)||(o+=d.duration)},l),o},t.getSubtaskDates=function(s){var o=r(s);return{start_date:o.start_date,end_date:o.end_date}},t._update_parents=function(s,o,l){if(s){var d=this.getTask(s);d.rollup&&(l=!0);var c=this.getParent(d),u=n(d),h=!0;if(l||d.start_date&&d.end_date&&(u.$no_start||u.$no_end)){const y=d.$auto_start_date?"$auto_start_date":"start_date",v=d.$auto_end_date?"$auto_end_date":"end_date";var g=d[y].valueOf(),f=d[v].valueOf();t.resetProjectDates(d),l||g!=d[y].valueOf()||f!=d[v].valueOf()||(h=!1),h&&!o&&this.refreshTask(d.id,!0),u.scheduled_summary&&(h=!0)}h&&c&&this.isTaskExists(c)&&this._update_parents(c,o,l)}},t.roundDate=function(s){var o=t.getScale();X(s)&&(s={date:s,unit:o?o.unit:t.config.duration_unit,step:o?o.step:t.config.duration_step});var l,d,c,u=s.date,h=s.step,g=s.unit;if(!o)return u;if(g==o.unit&&h==o.step&&+u>=+o.min_date&&+u<=+o.max_date)c=Math.floor(t.columnIndexByDate(u)),o.trace_x[c]||(c-=1,o.rtl&&(c=0)),d=new Date(o.trace_x[c]),l=t.date.add(d,h,g);else{for(c=Math.floor(t.columnIndexByDate(u)),l=t.date[g+"_start"](new Date(o.min_date)),o.trace_x[c]&&(l=t.date[g+"_start"](o.trace_x[c]));+l<+u;){var f=(l=t.date[g+"_start"](t.date.add(l,h,g))).getTimezoneOffset();l=t._correct_dst_change(l,f,l,g),t.date[g+"_start"]&&(l=t.date[g+"_start"](l))}d=t.date.add(l,-1*h,g)}return s.dir&&s.dir=="future"?l:s.dir&&s.dir=="past"||Math.abs(u-d)3600&&d<86400){var c=r.getTimezoneOffset()-s;c&&(r=t.date.add(r,c,"minute"))}return r},t.isSplitTask=function(r){return t.assert(r&&r instanceof Object,"Invalid argument task ="+r+" of gantt.isSplitTask. Task object was expected"),this.$data.tasksStore._isSplitItem(r)},t._is_icon_open_click=function(r){if(!r)return!1;var s=r.target||r.srcElement;if(!s||!s.className)return!1;var o=K(s);return o.indexOf("gantt_tree_icon")!==-1&&(o.indexOf("gantt_close")!==-1||o.indexOf("gantt_open")!==-1)}}const Si={date:{month_full:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],month_short:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],day_full:["الأحد","الأثنين","ألثلاثاء","الأربعاء","ألحميس","ألجمعة","السبت"],day_short:["احد","اثنين","ثلاثاء","اربعاء","خميس","جمعة","سبت"]},labels:{new_task:"مهمة جديد",icon_save:"اخزن",icon_cancel:"الغاء",icon_details:"تفاصيل",icon_edit:"تحرير",icon_delete:"حذف",confirm_closing:"التغييرات سوف تضيع, هل انت متأكد؟",confirm_deleting:"الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟",section_description:"الوصف",section_time:"الفترة الزمنية",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"الغاء",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ti={date:{month_full:["Студзень","Люты","Сакавік","Красавік","Maй","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Снежань"],month_short:["Студз","Лют","Сак","Крас","Maй","Чэр","Ліп","Жнів","Вер","Каст","Ліст","Снеж"],day_full:["Нядзеля","Панядзелак","Аўторак","Серада","Чацвер","Пятніца","Субота"],day_short:["Нд","Пн","Аўт","Ср","Чцв","Пт","Сб"]},labels:{new_task:"Новае заданне",icon_save:"Захаваць",icon_cancel:"Адмяніць",icon_details:"Дэталі",icon_edit:"Змяніць",icon_delete:"Выдаліць",confirm_closing:"",confirm_deleting:"Падзея будзе выдалена незваротна, працягнуць?",section_description:"Апісанне",section_time:"Перыяд часу",section_type:"Тып",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"ІСР",column_text:"Задача",column_start_date:"Пачатак",column_duration:"Працяг",column_add:"",link:"Сувязь",confirm_link_deleting:"будзе выдалена",link_start:"(пачатак)",link_end:"(канец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Хвiлiна",hours:"Гадзiна",days:"Дзень",weeks:"Тыдзень",months:"Месяц",years:"Год",message_ok:"OK",message_cancel:"Адмяніць",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ci={date:{month_full:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],month_short:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],day_full:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],day_short:["Dg","Dl","Dm","Dc","Dj","Dv","Ds"]},labels:{new_task:"Nova tasca",icon_save:"Guardar",icon_cancel:"Cancel·lar",icon_details:"Detalls",icon_edit:"Editar",icon_delete:"Esborrar",confirm_closing:"",confirm_deleting:"L'esdeveniment s'esborrarà definitivament, continuar ?",section_description:"Descripció",section_time:"Periode de temps",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Cancel·lar",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ei={date:{month_full:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],day_short:["日","一","二","三","四","五","六"]},labels:{new_task:"新任務",icon_save:"保存",icon_cancel:"关闭",icon_details:"详细",icon_edit:"编辑",icon_delete:"删除",confirm_closing:"请确认是否撤销修改!",confirm_deleting:"是否删除日程?",section_description:"描述",section_time:"时间范围",section_type:"类型",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"工作分解结构",column_text:"任务名",column_start_date:"开始时间",column_duration:"持续时间",column_add:"",link:"关联",confirm_link_deleting:"将被删除",link_start:" (开始)",link_end:" (结束)",type_task:"任务",type_project:"项目",type_milestone:"里程碑",minutes:"分钟",hours:"小时",days:"天",weeks:"周",months:"月",years:"年",message_ok:"OK",message_cancel:"关闭",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Di={date:{month_full:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],month_short:["Led","Ún","Bře","Dub","Kvě","Čer","Čec","Srp","Září","Říj","List","Pro"],day_full:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],day_short:["Ne","Po","Út","St","Čt","Pá","So"]},labels:{new_task:"Nová práce",icon_save:"Uložit",icon_cancel:"Zpět",icon_details:"Detail",icon_edit:"Edituj",icon_delete:"Smazat",confirm_closing:"",confirm_deleting:"Událost bude trvale smazána, opravdu?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Zpět",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ai={date:{month_full:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{new_task:"Ny opgave",icon_save:"Gem",icon_cancel:"Fortryd",icon_details:"Detaljer",icon_edit:"Tilret",icon_delete:"Slet",confirm_closing:"Dine rettelser vil gå tabt.. Er dy sikker?",confirm_deleting:"Bigivenheden vil blive slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Fortryd",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ii={date:{month_full:[" Januar"," Februar"," März "," April"," Mai"," Juni"," Juli"," August"," September "," Oktober"," November "," Dezember"],month_short:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],day_full:["Sonntag","Montag","Dienstag"," Mittwoch"," Donnerstag","Freitag","Samstag"],day_short:["So","Mo","Di","Mi","Do","Fr","Sa"]},labels:{new_task:"Neue Aufgabe",icon_save:"Speichern",icon_cancel:"Abbrechen",icon_details:"Details",icon_edit:"Ändern",icon_delete:"Löschen",confirm_closing:"",confirm_deleting:"Der Eintrag wird gelöscht",section_description:"Beschreibung",section_time:"Zeitspanne",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"PSP",column_text:"Task-Namen",column_start_date:"Startzeit",column_duration:"Dauer",column_add:"",link:"Link",confirm_link_deleting:"werden gelöscht",link_start:"(starten)",link_end:"(ende)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minuten",hours:"Stunden",days:"Tage",weeks:"Wochen",months:"Monate",years:"Jahre",message_ok:"OK",message_cancel:"Abbrechen",section_constraint:"Regel",constraint_type:"Regel",constraint_date:"Regel - Datum",asap:"So bald wie möglich",alap:"So spät wie möglich",snet:"Beginn nicht vor",snlt:"Beginn nicht später als",fnet:"Fertigstellung nicht vor",fnlt:"Fertigstellung nicht später als",mso:"Muss beginnen am",mfo:"Muss fertig sein am",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Mi={date:{month_full:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάϊος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],month_short:["ΙΑΝ","ΦΕΒ","ΜΑΡ","ΑΠΡ","ΜΑΙ","ΙΟΥΝ","ΙΟΥΛ","ΑΥΓ","ΣΕΠ","ΟΚΤ","ΝΟΕ","ΔΕΚ"],day_full:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Κυριακή"],day_short:["ΚΥ","ΔΕ","ΤΡ","ΤΕ","ΠΕ","ΠΑ","ΣΑ"]},labels:{new_task:"Νέα εργασία",icon_save:"Αποθήκευση",icon_cancel:"Άκυρο",icon_details:"Λεπτομέρειες",icon_edit:"Επεξεργασία",icon_delete:"Διαγραφή",confirm_closing:"",confirm_deleting:"Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;",section_description:"Περιγραφή",section_time:"Χρονική περίοδος",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Άκυρο",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ni={date:{month_full:["January","February","March","April","May","June","July","August","September","October","November","December"],month_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_full:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],day_short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},labels:{new_task:"New task",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Task will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Cancel",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Li={date:{month_full:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],month_short:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],day_full:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],day_short:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"]},labels:{new_task:"Nueva tarea",icon_save:"Guardar",icon_cancel:"Cancelar",icon_details:"Detalles",icon_edit:"Editar",icon_delete:"Eliminar",confirm_closing:"",confirm_deleting:"El evento se borrará definitivamente, ¿continuar?",section_description:"Descripción",section_time:"Período",section_type:"Tipo",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"EDT",column_text:"Tarea",column_start_date:"Inicio",column_duration:"Duración",column_add:"",link:"Enlace",confirm_link_deleting:"será borrada",link_start:" (inicio)",link_end:" (fin)",type_task:"Tarea",type_project:"Proyecto",type_milestone:"Hito",minutes:"Minutos",hours:"Horas",days:"Días",weeks:"Semanas",months:"Meses",years:"Años",message_ok:"OK",message_cancel:"Cancelar",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Pi={date:{month_full:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],month_short:["1","2","3","4","5","6","7","8","9","10","11","12"],day_full:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],day_short:["ی","د","س","چ","پ","ج","ش"]},labels:{new_task:"وظیفه جدید",icon_save:"ذخیره",icon_cancel:"لغو",icon_details:"جزییات",icon_edit:"ویرایش",icon_delete:"حذف",confirm_closing:"تغییرات شما ازدست خواهد رفت، آیا مطمئن هستید؟",confirm_deleting:"این مورد برای همیشه حذف خواهد شد، آیا مطمئن هستید؟",section_description:"توضیحات",section_time:"مدت زمان",section_type:"نوع",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"عنوان",column_start_date:"زمان شروع",column_duration:"مدت",column_add:"",link:"ارتباط",confirm_link_deleting:"حذف خواهد شد",link_start:" (آغاز)",link_end:" (پایان)",type_task:"وظیفه",type_project:"پروژه",type_milestone:"نگارش",minutes:"دقایق",hours:"ساعات",days:"روزها",weeks:"هفته",months:"ماهها",years:"سالها",message_ok:"تایید",message_cancel:"لغو",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ri={date:{month_full:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],month_short:["Tam","Hel","Maa","Huh","Tou","Kes","Hei","Elo","Syy","Lok","Mar","Jou"],day_full:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],day_short:["Su","Ma","Ti","Ke","To","Pe","La"]},labels:{new_task:"Uusi tehtävä",icon_save:"Tallenna",icon_cancel:"Peru",icon_details:"Tiedot",icon_edit:"Muokkaa",icon_delete:"Poista",confirm_closing:"",confirm_deleting:"Haluatko varmasti poistaa tapahtuman?",section_description:"Kuvaus",section_time:"Aikajakso",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Peru",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Hi={date:{month_full:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],month_short:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Aoû","Sep","Oct","Nov","Déc"],day_full:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],day_short:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"]},labels:{new_task:"Nouvelle tâche",icon_save:"Enregistrer",icon_cancel:"Annuler",icon_details:"Détails",icon_edit:"Modifier",icon_delete:"Effacer",confirm_closing:"",confirm_deleting:"L'événement sera effacé sans appel, êtes-vous sûr ?",section_description:"Description",section_time:"Période",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"OTP",column_text:"Nom de la tâche",column_start_date:"Date initiale",column_duration:"Durée",column_add:"",link:"Le lien",confirm_link_deleting:"sera supprimé",link_start:"(début)",link_end:"(fin)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Heures",days:"Jours",weeks:"Semaines",months:"Mois",years:"Années",message_ok:"OK",message_cancel:"Annuler",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Oi={date:{month_full:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],month_short:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],day_full:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],day_short:["א","ב","ג","ד","ה","ו","ש"]},labels:{new_task:"משימה חדש",icon_save:"שמור",icon_cancel:"בטל",icon_details:"פרטים",icon_edit:"ערוך",icon_delete:"מחק",confirm_closing:"",confirm_deleting:"ארוע ימחק סופית.להמשיך?",section_description:"הסבר",section_time:"תקופה",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"בטל",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Bi={date:{month_full:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],month_short:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],day_full:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],day_short:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"]},labels:{new_task:"Novi Zadatak",icon_save:"Spremi",icon_cancel:"Odustani",icon_details:"Detalji",icon_edit:"Izmjeni",icon_delete:"Obriši",confirm_closing:"",confirm_deleting:"Zadatak će biti trajno izbrisan, jeste li sigurni?",section_description:"Opis",section_time:"Vremenski Period",section_type:"Tip",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Naziv Zadatka",column_start_date:"Početno Vrijeme",column_duration:"Trajanje",column_add:"",link:"Poveznica",confirm_link_deleting:"će biti izbrisan",link_start:" (početak)",link_end:" (kraj)",type_task:"Zadatak",type_project:"Projekt",type_milestone:"Milestone",minutes:"Minute",hours:"Sati",days:"Dani",weeks:"Tjedni",months:"Mjeseci",years:"Godine",message_ok:"OK",message_cancel:"Odustani",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},zi={date:{month_full:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],month_short:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],day_full:["Vasárnap","Hétfõ","Kedd","Szerda","Csütörtök","Péntek","szombat"],day_short:["Va","Hé","Ke","Sze","Csü","Pé","Szo"]},labels:{new_task:"Új feladat",icon_save:"Mentés",icon_cancel:"Mégse",icon_details:"Részletek",icon_edit:"Szerkesztés",icon_delete:"Törlés",confirm_closing:"",confirm_deleting:"Az esemény törölve lesz, biztosan folytatja?",section_description:"Leírás",section_time:"Idõszak",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Mégse",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Wi={date:{month_full:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],day_full:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],day_short:["Ming","Sen","Sel","Rab","Kam","Jum","Sab"]},labels:{new_task:"Tugas baru",icon_save:"Simpan",icon_cancel:"Batal",icon_details:"Detail",icon_edit:"Edit",icon_delete:"Hapus",confirm_closing:"",confirm_deleting:"Acara akan dihapus",section_description:"Keterangan",section_time:"Periode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Batal",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ji={date:{month_full:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],month_short:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],day_full:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],day_short:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"]},labels:{new_task:"Nuovo compito",icon_save:"Salva",icon_cancel:"Chiudi",icon_details:"Dettagli",icon_edit:"Modifica",icon_delete:"Elimina",confirm_closing:"",confirm_deleting:"Sei sicuro di confermare l'eliminazione?",section_description:"Descrizione",section_time:"Periodo di tempo",section_type:"Tipo",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Nome Attività",column_start_date:"Inizio",column_duration:"Durata",column_add:"",link:"Link",confirm_link_deleting:"sarà eliminato",link_start:" (inizio)",link_end:" (fine)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minuti",hours:"Ore",days:"Giorni",weeks:"Settimane",months:"Mesi",years:"Anni",message_ok:"OK",message_cancel:"Chiudi",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Fi={date:{month_full:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],day_short:["日","月","火","水","木","金","土"]},labels:{new_task:"新しい仕事",icon_save:"保存",icon_cancel:"キャンセル",icon_details:"詳細",icon_edit:"編集",icon_delete:"削除",confirm_closing:"",confirm_deleting:"イベント完全に削除されます、宜しいですか?",section_description:"デスクリプション",section_time:"期間",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"キャンセル",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Vi={date:{month_full:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],month_short:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],day_full:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],day_short:["일","월","화","수","목","금","토"]},labels:{new_task:"이름없는 작업",icon_save:"저장",icon_cancel:"취소",icon_details:"세부 사항",icon_edit:"수정",icon_delete:"삭제",confirm_closing:"",confirm_deleting:"작업을 삭제하시겠습니까?",section_description:"설명",section_time:"기간",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"작업명",column_start_date:"시작일",column_duration:"기간",column_add:"",link:"전제",confirm_link_deleting:"삭제 하시겠습니까?",link_start:" (start)",link_end:" (end)",type_task:"작업",type_project:"프로젝트",type_milestone:"마일스톤",minutes:"분",hours:"시간",days:"일",weeks:"주",months:"달",years:"년",message_ok:"OK",message_cancel:"취소",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}};class Ui{constructor(e){this.addLocale=(n,i)=>{this._locales[n]=i},this.getLocale=n=>this._locales[n],this._locales={};for(const n in e)this._locales[n]=e[n]}}const qi={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Mon","Tir","Ons","Tor","Fre","Lør"]},labels:{new_task:"Ny oppgave",icon_save:"Lagre",icon_cancel:"Avbryt",icon_details:"Detaljer",icon_edit:"Rediger",icon_delete:"Slett",confirm_closing:"",confirm_deleting:"Hendelsen vil bli slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Avbryt",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Gi={date:{month_full:["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],month_short:["Jan","Feb","mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],day_short:["Zo","Ma","Di","Wo","Do","Vr","Za"]},labels:{new_task:"Nieuwe taak",icon_save:"Opslaan",icon_cancel:"Annuleren",icon_details:"Details",icon_edit:"Bewerken",icon_delete:"Verwijderen",confirm_closing:"",confirm_deleting:"Item zal permanent worden verwijderd, doorgaan?",section_description:"Beschrijving",section_time:"Tijd periode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Taak omschrijving",column_start_date:"Startdatum",column_duration:"Duur",column_add:"",link:"Koppeling",confirm_link_deleting:"zal worden verwijderd",link_start:" (start)",link_end:" (eind)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"minuten",hours:"uren",days:"dagen",weeks:"weken",months:"maanden",years:"jaren",message_ok:"OK",message_cancel:"Annuleren",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Yi={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{new_task:"Ny oppgave",icon_save:"Lagre",icon_cancel:"Avbryt",icon_details:"Detaljer",icon_edit:"Endre",icon_delete:"Slett",confirm_closing:"Endringer blir ikke lagret, er du sikker?",confirm_deleting:"Oppføringen vil bli slettet, er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Avbryt",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ji={date:{month_full:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],month_short:["Sty","Lut","Mar","Kwi","Maj","Cze","Lip","Sie","Wrz","Paź","Lis","Gru"],day_full:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],day_short:["Nie","Pon","Wto","Śro","Czw","Pią","Sob"]},labels:{new_task:"Nowe zadanie",icon_save:"Zapisz",icon_cancel:"Anuluj",icon_details:"Szczegóły",icon_edit:"Edytuj",icon_delete:"Usuń",confirm_closing:"",confirm_deleting:"Zdarzenie zostanie usunięte na zawsze, kontynuować?",section_description:"Opis",section_time:"Okres czasu",section_type:"Typ",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Nazwa zadania",column_start_date:"Początek",column_duration:"Czas trwania",column_add:"",link:"Link",confirm_link_deleting:"zostanie usunięty",link_start:" (początek)",link_end:" (koniec)",type_task:"Zadanie",type_project:"Projekt",type_milestone:"Milestone",minutes:"Minuty",hours:"Godziny",days:"Dni",weeks:"Tydzień",months:"Miesiące",years:"Lata",message_ok:"OK",message_cancel:"Anuluj",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ki={date:{month_full:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],month_short:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],day_full:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],day_short:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"]},labels:{new_task:"Nova tarefa",icon_save:"Salvar",icon_cancel:"Cancelar",icon_details:"Detalhes",icon_edit:"Editar",icon_delete:"Excluir",confirm_closing:"",confirm_deleting:"As tarefas serão excluidas permanentemente, confirme?",section_description:"Descrição",section_time:"Período",section_type:"Tipo",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"EAP",column_text:"Nome tarefa",column_start_date:"Data início",column_duration:"Duração",column_add:"",link:"Link",confirm_link_deleting:"Será excluído!",link_start:" (início)",link_end:" (fim)",type_task:"Task",type_project:"Projeto",type_milestone:"Marco",minutes:"Minutos",hours:"Horas",days:"Dias",weeks:"Semanas",months:"Meses",years:"Anos",message_ok:"OK",message_cancel:"Cancelar",section_constraint:"Restrição",constraint_type:"Tipo Restrição",constraint_date:"Data restrição",asap:"Mais breve possível",alap:"Mais tarde possível",snet:"Não começar antes de",snlt:"Não começar depois de",fnet:"Não terminar antes de",fnlt:"Não terminar depois de",mso:"Precisa começar em",mfo:"Precisa terminar em",resources_filter_placeholder:"Tipo de filtros",resources_filter_label:"Ocultar vazios",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Xi={date:{month_full:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","November","December"],month_short:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],day_full:["Duminica","Luni","Marti","Miercuri","Joi","Vineri","Sambata"],day_short:["Du","Lu","Ma","Mi","Jo","Vi","Sa"]},labels:{new_task:"Sarcina noua",icon_save:"Salveaza",icon_cancel:"Anuleaza",icon_details:"Detalii",icon_edit:"Editeaza",icon_delete:"Sterge",confirm_closing:"Schimbarile nu vor fi salvate, esti sigur?",confirm_deleting:"Evenimentul va fi sters permanent, esti sigur?",section_description:"Descriere",section_time:"Interval",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Anuleaza",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Zi={date:{month_full:["Январь","Февраль","Март","Апрель","Maй","Июнь","Июль","Август","Сентябрь","Oктябрь","Ноябрь","Декабрь"],month_short:["Янв","Фев","Maр","Aпр","Maй","Июн","Июл","Aвг","Сен","Окт","Ноя","Дек"],day_full:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],day_short:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"]},labels:{new_task:"Новое задание",icon_save:"Сохранить",icon_cancel:"Отменить",icon_details:"Детали",icon_edit:"Изменить",icon_delete:"Удалить",confirm_closing:"",confirm_deleting:"Событие будет удалено безвозвратно, продолжить?",section_description:"Описание",section_time:"Период времени",section_type:"Тип",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"ИСР",column_text:"Задача",column_start_date:"Начало",column_duration:"Длительность",column_add:"",link:"Связь",confirm_link_deleting:"будет удалена",link_start:" (начало)",link_end:" (конец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Минута",hours:"Час",days:"День",weeks:"Неделя",months:"Месяц",years:"Год",message_ok:"OK",message_cancel:"Отменить",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"начните вводить слово для фильтрации",resources_filter_label:"спрятать не установленные",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Qi={date:{month_full:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],day_short:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"]},labels:{new_task:"Nova naloga",icon_save:"Shrani",icon_cancel:"Prekliči",icon_details:"Podrobnosti",icon_edit:"Uredi",icon_delete:"Izbriši",confirm_closing:"",confirm_deleting:"Dogodek bo izbrisan. Želite nadaljevati?",section_description:"Opis",section_time:"Časovni okvir",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Prekliči",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ta={date:{month_full:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],month_short:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sept","Okt","Nov","Dec"],day_full:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],day_short:["Ne","Po","Ut","St","Št","Pi","So"]},labels:{new_task:"Nová úloha",icon_save:"Uložiť",icon_cancel:"Späť",icon_details:"Detail",icon_edit:"Edituj",icon_delete:"Zmazať",confirm_closing:"Vaše zmeny nebudú uložené. Skutočne?",confirm_deleting:"Udalosť bude natrvalo vymazaná. Skutočne?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Späť",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ea={date:{month_full:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],day_short:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},labels:{new_task:"Ny uppgift",icon_save:"Spara",icon_cancel:"Avbryt",icon_details:"Detajer",icon_edit:"Ändra",icon_delete:"Ta bort",confirm_closing:"",confirm_deleting:"Är du säker på att du vill ta bort händelsen permanent?",section_description:"Beskrivning",section_time:"Tid",section_type:"Typ",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Uppgiftsnamn",column_start_date:"Starttid",column_duration:"Varaktighet",column_add:"",link:"Länk",confirm_link_deleting:"kommer tas bort",link_start:" (start)",link_end:" (slut)",type_task:"Uppgift",type_project:"Projekt",type_milestone:"Milstolpe",minutes:"Minuter",hours:"Timmar",days:"Dagar",weeks:"Veckor",months:"Månader",years:"År",message_ok:"OK",message_cancel:"Avbryt",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},na={date:{month_full:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],month_short:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],day_full:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],day_short:["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"]},labels:{new_task:"Yeni görev",icon_save:"Kaydet",icon_cancel:"İptal",icon_details:"Detaylar",icon_edit:"Düzenle",icon_delete:"Sil",confirm_closing:"",confirm_deleting:"Görev silinecek, emin misiniz?",section_description:"Açıklama",section_time:"Zaman Aralığı",section_type:"Tip",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Görev Adı",column_start_date:"Başlangıç",column_duration:"Süre",column_add:"",link:"Bağlantı",confirm_link_deleting:"silinecek",link_start:" (başlangıç)",link_end:" (bitiş)",type_task:"Görev",type_project:"Proje",type_milestone:"Kilometretaşı",minutes:"Dakika",hours:"Saat",days:"Gün",weeks:"Hafta",months:"Ay",years:"Yıl",message_ok:"OK",message_cancel:"Ýptal",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ia={date:{month_full:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],month_short:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],day_full:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"],day_short:["Нед","Пон","Вів","Сер","Чет","Птн","Суб"]},labels:{new_task:"Нове завдання",icon_save:"Зберегти",icon_cancel:"Відміна",icon_details:"Деталі",icon_edit:"Редагувати",icon_delete:"Вилучити",confirm_closing:"",confirm_deleting:"Подія вилучиться назавжди. Ви впевнені?",section_description:"Опис",section_time:"Часовий проміжок",section_type:"Тип",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Відміна",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}};function aa(){this.constants=Fn,this.version="9.0.0",this.license="gpl",this.templates={},this.ext={},this.keys={edit_save:this.constants.KEY_CODES.ENTER,edit_cancel:this.constants.KEY_CODES.ESC}}function ra(t){var e=new aa,n=new Vn(t),i={};e.plugins=function(l){for(var d in l)if(l[d]&&!i[d]){var c=n.getExtension(d);c&&(c(e),i[d]=!0)}return i},e.$services=function(){var l={};return{services:{},setService:function(d,c){l[d]=c},getService:function(d){return l[d]?l[d]():null},dropService:function(d){l[d]&&delete l[d]},destructor:function(){for(var d in l)if(l[d]){var c=l[d];c&&c.destructor&&c.destructor()}l=null}}}(),e.config=Un(),e.ajax=function(l){return{cache:!0,method:"get",parse:function(d){return typeof d!="string"?d:(d=d.replace(/^[\s]+/,""),typeof DOMParser>"u"||_t.isIE?dt.ActiveXObject!==void 0&&((c=new dt.ActiveXObject("Microsoft.XMLDOM")).async="false",c.loadXML(d)):c=new DOMParser().parseFromString(d,"text/xml"),c);var c},xmltop:function(d,c,u){if(c.status===void 0||c.status<400){var h=c.responseXML?c.responseXML||c:this.parse(c.responseText||c);if(h&&h.documentElement!==null&&!h.getElementsByTagName("parsererror").length)return h.getElementsByTagName(d)[0]}return u!==-1&&l.callEvent("onLoadXMLError",["Incorrect XML",arguments[1],u]),document.createElement("DIV")},xpath:function(d,c){if(c.nodeName||(c=c.responseXML||c),_t.isIE)return c.selectNodes(d)||[];for(var u,h=[],g=(c.ownerDocument||c).evaluate(d,c,null,XPathResult.ANY_TYPE,null);u=g.iterateNext();)h.push(u);return h},query:function(d){return this._call(d.method||"GET",d.url,d.data||"",d.async||!0,d.callback,d.headers)},get:function(d,c,u){var h=$t("GET",arguments);return this.query(h)},getSync:function(d,c){var u=$t("GET",arguments);return u.async=!1,this.query(u)},put:function(d,c,u,h){var g=$t("PUT",arguments);return this.query(g)},del:function(d,c,u){var h=$t("DELETE",arguments);return this.query(h)},post:function(d,c,u,h){arguments.length==1?c="":arguments.length==2&&typeof c=="function"&&(u=c,c="");var g=$t("POST",arguments);return this.query(g)},postSync:function(d,c,u){c=c===null?"":String(c);var h=$t("POST",arguments);return h.async=!1,this.query(h)},_call:function(d,c,u,h,g,f){return new l.Promise(function(y,v){var b=typeof XMLHttpRequest!==void 0?new XMLHttpRequest:new dt.ActiveXObject("Microsoft.XMLHTTP"),_=navigator.userAgent.match(/AppleWebKit/)!==null&&navigator.userAgent.match(/Qt/)!==null&&navigator.userAgent.match(/Safari/)!==null;h&&(b.onreadystatechange=function(){if(b.readyState==4||_&&b.readyState==3){if((b.status!=200||b.responseText==="")&&!l.callEvent("onAjaxError",[b]))return;setTimeout(function(){typeof g=="function"&&g.apply(dt,[{xmlDoc:b,filePath:c}]),y(b),typeof g=="function"&&(g=null,b=null)},0)}});var m=!this||!this.cache;if(d=="GET"&&m&&(c+=(c.indexOf("?")>=0?"&":"?")+"dhxr"+new Date().getTime()+"=1"),b.open(d,c,h),f)for(var p in f)b.setRequestHeader(p,f[p]);else d.toUpperCase()=="POST"||d=="PUT"||d=="DELETE"?b.setRequestHeader("Content-Type","application/x-www-form-urlencoded"):d=="GET"&&(u=null);if(b.setRequestHeader("X-Requested-With","XMLHttpRequest"),b.send(u),!h)return{xmlDoc:b,filePath:c}})},urlSeparator:function(d){return d.indexOf("?")!=-1?"&":"?"}}}(e),e.date=qn(e),e.RemoteEvents=Yn;var a=function(l){function d(u){return{target:u.target||u.srcElement,pageX:u.pageX,pageY:u.pageY,clientX:u.clientX,clientY:u.clientY,metaKey:u.metaKey,shiftKey:u.shiftKey,ctrlKey:u.ctrlKey,altKey:u.altKey}}function c(u,h){this._obj=u,this._settings=h||{},nt(this);var g=this.getInputMethods();this._drag_start_timer=null,l.attachEvent("onGanttScroll",R(function(v,b){this.clearDragTimer()},this));for(var f={passive:!1},y=0;ythis.config.sensitivity},initDnDMarker:function(){var u=this.config.marker=document.createElement("div");u.className="gantt_drag_marker",u.innerHTML="",document.body.appendChild(u)},backupEventTarget:function(u,h){if(l.config.touch){var g=h(u),f=g.target||g.srcElement,y=f.cloneNode(!0);this.config.original_target=d(g),this.config.original_target.target=y,this.config.backup_element=f,f.parentNode.appendChild(y),f.style.display="none",(this.config.mousemoveContainer||document.body).appendChild(f)}},getInputMethods:function(){var u=[];if(u.push({move:"mousemove",down:"mousedown",up:"mouseup",accessor:function(g){return g}}),l.config.touch){var h=!0;try{document.createEvent("TouchEvent")}catch{h=!1}h?u.push({move:"touchmove",down:"touchstart",up:"touchend",accessor:function(g){return g.touches&&g.touches.length>1?null:g.touches[0]?{target:document.elementFromPoint(g.touches[0].clientX,g.touches[0].clientY),pageX:g.touches[0].pageX,pageY:g.touches[0].pageY,clientX:g.touches[0].clientX,clientY:g.touches[0].clientY}:g}}):dt.navigator.pointerEnabled?u.push({move:"pointermove",down:"pointerdown",up:"pointerup",accessor:function(g){return g.pointerType=="mouse"?null:g}}):dt.navigator.msPointerEnabled&&u.push({move:"MSPointerMove",down:"MSPointerDown",up:"MSPointerUp",accessor:function(g){return g.pointerType==g.MSPOINTER_TYPE_MOUSE?null:g}})}return u},clearDragTimer:function(){this._drag_start_timer&&(clearTimeout(this._drag_start_timer),this._drag_start_timer=null)},dragStart:function(u,h,g){this.config&&this.config.started||(this.config={obj:u,marker:null,started:!1,pos:this.getPosition(h),sensitivity:4},this._settings&&N(this.config,this._settings,!0),this.traceDragEvents(u,g),l._prevent_touch_scroll=!0,document.body.className+=" gantt_noselect",l.config.touch&&this.dragMove(u,h,g.accessor))},dragMove:function(u,h,g){var f=g(h);if(!f)return!1;if(!this.config.marker&&!this.config.started){var y=this.getPosition(f);if(l.config.touch||this.checkPositionChange(y)){if(this.config.started=!0,this.config.ignore=!1,l._touch_drag=!0,this.callEvent("onBeforeDragStart",[u,this.config.original_target])===!1)return this.config.ignore=!0,!1;this.backupEventTarget(h,g),this.initDnDMarker(),l._touch_feedback(),this.callEvent("onAfterDragStart",[u,this.config.original_target])}else this.config.ignore=!0}return this.config.ignore?!1:h.targetTouches&&!f.target?void 0:(f.pos=this.getPosition(f),this.config.marker.style.left=f.pos.x+"px",this.config.marker.style.top=f.pos.y+"px",this.callEvent("onDragMove",[u,f]),!0)},dragEnd:function(u){var h=this.config.backup_element;h&&h.parentNode&&h.parentNode.removeChild(h),l._prevent_touch_scroll=!1,this.config.marker&&(this.config.marker.parentNode.removeChild(this.config.marker),this.config.marker=null,this.callEvent("onDragEnd",[])),this.config.started=!1,l._touch_drag=!1,document.body.className=document.body.className.replace(" gantt_noselect","")},getPosition:function(u){var h=0,g=0;return u.pageX||u.pageY?(h=u.pageX,g=u.pageY):(u.clientX||u.clientY)&&(h=u.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,g=u.clientY+document.body.scrollTop+document.documentElement.scrollTop),{x:h,y:g}}},c}(e);e.$services.setService("dnd",function(){return a});var r=function(l){var d={};function c(u,h,g){g=g||u;var f=l.config,y=l.templates;l.config[u]&&d[g]!=f[u]&&(h&&y[g]||(y[g]=l.date.date_to_str(f[u]),d[g]=f[u]))}return{initTemplates:function(){var u=l.locale.labels;u.gantt_save_btn=u.icon_save,u.gantt_cancel_btn=u.icon_cancel,u.gantt_delete_btn=u.icon_delete;var h=l.date,g=h.date_to_str,f=l.config,y=g(f.xml_date||f.date_format,f.server_utc),v=h.str_to_date(f.xml_date||f.date_format,f.server_utc);c("date_scale",!0,void 0,l.config,l.templates),c("date_grid",!0,"grid_date_format",l.config,l.templates),c("task_date",!0,void 0,l.config,l.templates),l.mixin(l.templates,{xml_format:void 0,format_date:y,xml_date:void 0,parse_date:v,progress_text:function(b,_,m){return""},grid_header_class:function(b,_){return""},task_text:function(b,_,m){return m.text},task_class:function(b,_,m){return""},task_end_date:function(b){return l.templates.task_date(b)},grid_row_class:function(b,_,m){return""},task_row_class:function(b,_,m){return""},timeline_cell_class:function(b,_){return""},timeline_cell_content:function(b,_){return""},scale_cell_class:function(b){return""},scale_row_class:function(b){return""},grid_indent:function(b){return"
"},grid_folder:function(b){return"
"},grid_file:function(b){return"
"},grid_open:function(b){return"
"},grid_blank:function(b){return"
"},date_grid:function(b,_,m){return _&&l.isUnscheduledTask(_)&&l.config.show_unscheduled?l.templates.task_unscheduled_time(_):l.templates.grid_date_format(b,m)},task_time:function(b,_,m){return l.isUnscheduledTask(m)&&l.config.show_unscheduled?l.templates.task_unscheduled_time(m):l.templates.task_date(b)+" - "+l.templates.task_end_date(_)},task_unscheduled_time:function(b){return""},time_picker:g(f.time_picker),link_class:function(b){return""},link_description:function(b){var _=l.getTask(b.source),m=l.getTask(b.target);return""+_.text+" – "+m.text+" "},drag_link:function(b,_,m,p){b=l.getTask(b);var k=l.locale.labels,$=""+b.text+" "+(_?k.link_start:k.link_end)+" ";return m&&($+=" "+(m=l.getTask(m)).text+" "+(p?k.link_start:k.link_end)+" "),$},drag_link_class:function(b,_,m,p){var k="";return b&&m&&(k=" "+(l.isLinkAllowed(b,m,_,p)?"gantt_link_allow":"gantt_link_deny")),"gantt_link_tooltip"+k},tooltip_date_format:h.date_to_str("%Y-%m-%d"),tooltip_text:function(b,_,m){return`Task: ${m.text}
+ `}`;e.innerHTML=n},clickEvents:[],attachAddTaskEvent(){const e=t.attachEvent("onEmptyClick",function(n){t.utils.dom.closest(n.target,"[data-empty-state-create-task]")&&t.createTask({id:t.uid(),text:"New Task"})});this.clickEvents.push(e)},detachAddTaskEvents(){this.clickEvents.forEach(function(e){t.detachEvent(e)}),this.clickEvents=[]},getContainer(){if(t.$container){const e=t.utils.dom;if(t.$container.contains(t.$grid_data))return e.closest(t.$grid_data,".gantt_layout_content");if(t.$container.contains(t.$task_data))return e.closest(t.$task_data,".gantt_layout_content")}return null},getNode(){const e=this.getContainer();return e?e.querySelector(".gantt_empty_state_wrapper"):null},show(){const e=this.getContainer();if(!e&&this.isGanttEmpty())return null;const n=document.createElement("div");n.className="gantt_empty_state_wrapper",n.style.marginTop=t.config.scale_height-e.offsetHeight+"px";const i=t.$container.querySelectorAll(".gantt_empty_state_wrapper");Array.prototype.forEach.call(i,function(a){a.parentNode.removeChild(a)}),this.detachAddTaskEvents(),this.attachAddTaskEvent(),e.appendChild(n),this.renderContent(n)},hide(){const e=this.getNode();if(!e)return!1;e.parentNode.removeChild(e)},init(){}},t.attachEvent("onDataRender",function(){const e=t.ext.emptyStateElement;e.isEnabled()&&e.isGanttEmpty()?e.show():e.hide()})}const Xe=function(t,e){const n=e.baselines&&e.baselines.length,i=t.config.baselines.render_mode=="separateRow"||t.config.baselines.render_mode=="individualRow";if(n&&i)return!0},hi=function(t,e){let n=!1;return t.eachTask(function(i){n||(n=Xe(t,i))},e),n},wt=function(t){return t.render&&t.render=="split"&&!t.$open},_i=function(t,e,n,i){let a=i||e.$task_data.scrollHeight,r=!1,s=!1;return t.eachParent(function(o){if(wt(o)){s=!0;const l=e.getItemPosition(o).rowHeight;lr&&(r=o)},a.id),a.row_heighto&&(o=c)}),r.row_height=o,r.bar_height=r.bar_height||s}},a.id)}t.$data.baselineStore=e,t.adjustTaskHeightForBaselines=function(a){let r,s,o=a.baselines&&a.baselines.length||0;const l=t.config.baselines.row_height;switch(t.config.baselines.render_mode){case"taskRow":a.row_height=a.bar_height+4;break;case"separateRow":r=t.getLayoutView("timeline").getBarHeight(a.id),o?(a.bar_height=a.bar_height||r,a.bar_height>r&&(r=a.bar_height),a.row_height=r+l):a.bar_height&&(a.row_height=a.bar_height+4),i(a);break;case"individualRow":r=t.getLayoutView("timeline").getBarHeight(a.id),o?(a.bar_height=a.bar_height||r,a.bar_height>r&&(r=a.bar_height),s=l*o,a.row_height=r+s+2):a.bar_height&&(a.row_height=a.bar_height+4),i(a)}},t.attachEvent("onGanttReady",function(){t.config.baselines!==!1&&(t.attachEvent("onParse",function(){e.eachItem(function(a){const r=a.task_id;if(t.isTaskExists(r)){const s=t.getTask(r);s.baselines=s.baselines||[];let o=!0;for(let l=0;l"+n.xmlDoc.responseURL+" , server returns 404");else if(!t.$destroyed){this.callEvent("onBeforeParse",[]),i||(i="json"),this.assert(this[i],"Invalid data type:'"+i+"'");var a=n.xmlDoc.responseText,r=this[i].parse(a,n);this._process_loading(r)}},t._process_loading=function(n){n.collections&&this._load_collections(n.collections),n.resources&&this.$data.resourcesStore&&this.$data.resourcesStore.parse(n.resources),t.config.baselines!==!1&&n.baselines&&this.$data.baselineStore&&this.$data.baselineStore.parse(n.baselines);const i=n.data||n.tasks;n.assignments&&function(r,s){const o={};s.forEach(l=>{o[l.task_id]||(o[l.task_id]=[]),o[l.task_id].push(l)}),r.forEach(l=>{l[t.config.resource_property]=o[l.id]||[]})}(i,n.assignments),this.$data.tasksStore.parse(i);var a=n.links||(n.collections?n.collections.links:[]);this.$data.linksStore.parse(a),this.callEvent("onParse",[]),this.render()},t._load_collections=function(n){var i=!1;for(var a in n)if(n.hasOwnProperty(a)){i=!0;var r=n[a];this.serverList[a]=this.serverList[a]||[];var s=this.serverList[a];if(!s)continue;s.splice(0,s.length);for(var o=0;o "},_copyObject:function(n){return" "},serialize:function(){for(var n=[],i=[],a=t.json.serialize(),r=0,s=a.data.length;r"+n.join("")+""+i.join("")+" "}},t.oldxml={parse:function(n,i){i=t.xml._getXML(n,i,"projects");for(var a={collections:{links:[]}},r=a.data=[],s=t.ajax.xpath("//task",i),o=0;oe.length?t:e,a=t===i?e:t;i=i.slice(),a=a.slice(),n=[];for(var r=0;rs.start&&(n.push({start:Math.max(s.start,l.start),end:Math.min(s.end,l.end)}),s.end>l.end&&(a.splice(o,1),o--,r--))}return n},_mergeAdjacentIntervals:function(t){var e=t.slice();e.sort(function(r,s){return r.start-s.start});for(var n=e[0],i=1;in.end&&(n.end=a.end),e.splice(i,1),i--):n=a}return e},_mergeHoursConfig:function(t,e){return this._mergeAdjacentIntervals(this._intersectHourRanges(t,e))},merge:function(t,e){var n=V(t.getConfig().parsed),i=V(e.getConfig().parsed),a={hours:this._toHoursArray(this._mergeHoursConfig(n.hours,i.hours)),dates:{},customWeeks:{}};const r=(o,l)=>{for(let d in o.dates){const c=o.dates[d];+d>1e3&&(a.dates[d]=!1);for(const u in l.dates){const h=l.dates[u];if(u==d&&(a.dates[d]=!(!c||!h)),Array.isArray(c)){const g=Array.isArray(h)?h:l.hours;a.dates[d]=this._toHoursArray(this._mergeHoursConfig(c,g))}}}};if(r(n,i),r(i,n),n.customWeeks)for(var s in n.customWeeks)a.customWeeks[s]=n.customWeeks[s];if(i.customWeeks)for(var s in i.customWeeks)a.customWeeks[s]=i.customWeeks[s];return a}};class mi{constructor(){this.clear()}getItem(e,n,i){if(this._cache.has(e)){const a=this._cache.get(e)[i.getFullYear()];if(a&&a.has(n))return a.get(n)}return-1}setItem(e,n,i,a){if(!e||!n)return;const r=this._cache,s=a.getFullYear();let o;r.has(e)?o=r.get(e):(o=[],r.set(e,o));let l=o[s];l||(l=o[s]=new Map),l.set(n,i)}clear(){this._cache=new Map}}class vi{constructor(){this.clear()}getItem(e,n,i){const a=this._cache;if(a&&a[e]){const r=a[e];if(r===void 0)return-1;const s=r[i.getFullYear()];if(s&&s[n]!==void 0)return s[n]}return-1}setItem(e,n,i,a){if(!e||!n)return;const r=this._cache;if(!r)return;r[e]||(r[e]=[]);const s=r[e],o=a.getFullYear();let l=s[o];l||(l=s[o]={}),l[n]=i}clear(){this._cache={}}}class ki{constructor(e){this.getMinutesPerWeek=n=>{const i=n.valueOf();if(this._weekCache.has(i))return this._weekCache.get(i);const a=this._calendar,r=this._calendar.$gantt;let s=0,o=r.date.week_start(new Date(n));for(let l=0;l<7;l++)s+=60*a.getHoursPerDay(o),o=r.date.add(o,1,"day");return this._weekCache.set(i,s),s},this.getMinutesPerMonth=n=>{const i=n.valueOf();if(this._monthCache.has(i))return this._monthCache.get(i);const a=this._calendar,r=this._calendar.$gantt;let s=0,o=r.date.week_start(new Date(n));const l=r.date.add(o,1,"month").valueOf();for(;o.valueOf(){this._weekCache=new Map,this._monthCache=new Map},this.clear(),this._calendar=e}}class yi{constructor(){this.clear()}_getCacheObject(e,n,i){const a=this._cache;a[n]||(a[n]=[]);let r=a[n];r||(r=a[n]={});let s=r[i];s||(s=r[i]={});const o=e.getFullYear();let l=s[o];return l||(l=s[o]={durations:{},endDates:{}}),l}_endDateCacheKey(e,n){return String(e)+"-"+String(n)}_durationCacheKey(e,n){return String(e)+"-"+String(n)}getEndDate(e,n,i,a,r){const s=this._getCacheObject(e,i,a),o=e.valueOf(),l=this._endDateCacheKey(o,n);let d;if(s.endDates[l]===void 0){const c=r(),u=c.valueOf();s.endDates[l]=u,s.durations[this._durationCacheKey(o,u)]=n,d=c}else d=new Date(s.endDates[l]);return d}getDuration(e,n,i,a,r){const s=this._getCacheObject(e,i,a),o=e.valueOf(),l=n.valueOf(),d=this._durationCacheKey(o,l);let c;if(s.durations[d]===void 0){const u=r();s.durations[d]=u.valueOf(),c=u}else c=s.durations[d];return c}clear(){this._cache={}}}function fe(t,e){this.argumentsHelper=e,this.$gantt=t,this._workingUnitsCache=typeof Map<"u"?new mi:new vi,this._largeUnitsCache=new ki(this),this._dateDurationCache=new yi,this._worktime=null,this._cached_timestamps={},this._cached_timestamps_count=0}fe.prototype={units:["year","month","week","day","hour","minute"],_clearCaches:function(){this._workingUnitsCache.clear(),this._largeUnitsCache.clear(),this._dateDurationCache.clear()},_getUnitOrder:function(t){for(var e=0,n=this.units.length;e1e6&&this._resetTimestampCache();var e=null;if(t.day||t.day===0)e=t.day;else if(t.date){var n=String(t.date.valueOf());this._cached_timestamps[n]?e=this._cached_timestamps[n]:(e=Date.UTC(t.date.getFullYear(),t.date.getMonth(),t.date.getDate()),this._cached_timestamps[n]=e,this._cached_timestamps_count++)}return e},_checkIfWorkingUnit:function(t,e){if(!this["_is_work_"+e]){const n=this.$gantt.date[`${e}_start`](new Date(t)),i=this.$gantt.date.add(n,1,e);return this.hasDuration(n,i)}return this["_is_work_"+e](t)},_is_work_day:function(t){var e=this._getWorkHours(t);return!!Array.isArray(e)&&e.length>0},_is_work_hour:function(t){for(var e=this._getWorkHours(t),n=t.getHours(),i=0;i=e[i].startHour&&n=e[i].start&&ns.valueOf(),this._isWorkTime(r,n))(u||h&&g)&&(o=a[n+"_start"](new Date(r)),l=a.add(o,i,n)),u?(u=!1,c=this._nextDate(o,n,i),d+=(l.valueOf()-r.valueOf())/(l.valueOf()-o.valueOf())):h&&g?(h=!1,d+=(s.valueOf()-r.valueOf())/(l.valueOf()-o.valueOf())):d++;else{var f=this._getUnitOrder(n),y=this.units[f-1];y&&!this._isWorkTime(r,y)&&(c=this._getClosestWorkTimeFuture(r,y))}r=c}return d},_getMinutesPerHour:function(t){var e=this._getTimeOfDayStamp(t),n=this._getTimeOfDayStamp(this._nextDate(t,"hour",1));n===0&&(n=86400);for(var i=this._getWorkHours(t),a=0;a=r.start&&n<=r.end)return 60;if(er.start)return(Math.min(n,r.end)-Math.max(e,r.start))/60}return 0},_getMinutesPerDay:function(t){var e=this._getWorkHours(t),n=0;return e.forEach(function(i){n+=i.durationMinutes}),n},getHoursPerDay:function(t){var e=this._getWorkHours(t),n=0;return e.forEach(function(i){n+=i.durationHours}),n},_getWorkUnitsForRange:function(t,e,n,i){var a,r=0,s=new Date(t),o=new Date(e);for(a=R(n=="minute"?this._getMinutesPerDay:this.getHoursPerDay,this);s.valueOf()27648e5&&s.getDate()===0){var l=this._largeUnitsCache.getMinutesPerMonth(s);n=="hour"&&(l/=60),r+=l,s=this.$gantt.date.add(s,1,"month")}else{if(o-s>13824e5){var d=this.$gantt.date.week_start(new Date(s));if(s.valueOf()===d.valueOf()){l=this._largeUnitsCache.getMinutesPerWeek(s),n=="hour"&&(l/=60),r+=l,s=this.$gantt.date.add(s,7,"day");continue}}r+=a(s),s=this._nextDate(s,"day",1)}return r/i},_getMinutesBetweenSingleDay:function(t,e){for(var n=this._getIntervalTimestamp(t,e),i=this._getWorkHours(t),a=0,r=0;r=s.start&&n.start<=s.end){var o=Math.max(s.start,n.start),l=Math.min(s.end,n.end);a+=(l-o)/60,n.start=l}}return Math.floor(a)},_getMinutesBetween:function(t,e,n,i){var a=new Date(t),r=new Date(e);i=i||1;var s=new Date(a),o=this.$gantt.date.add(this.$gantt.date.day_start(new Date(a)),1,"day");if(r.valueOf()<=o.valueOf())return this._getMinutesBetweenSingleDay(t,e);var l=this.$gantt.date.day_start(new Date(r)),d=r,c=this._getMinutesBetweenSingleDay(s,o),u=this._getMinutesBetweenSingleDay(l,d);return c+this._getWorkUnitsForRange(o,l,n,i)+u},_getHoursBetween:function(t,e,n,i){var a=new Date(t),r=new Date(e);i=i||1;var s=new Date(a),o=this.$gantt.date.add(this.$gantt.date.day_start(new Date(a)),1,"day");if(r.valueOf()<=o.valueOf())return Math.round(this._getMinutesBetweenSingleDay(t,e)/60);var l=this.$gantt.date.day_start(new Date(r)),d=r,c=this._getMinutesBetweenSingleDay(s,o,n,i)/60,u=this._getMinutesBetweenSingleDay(l,d,n,i)/60,h=c+this._getWorkUnitsForRange(o,l,n,i)+u;return Math.round(h)},getConfig:function(){return this._worktime},_setConfig:function(t){this._worktime=t,this._parseSettings(),this._clearCaches()},_parseSettings:function(){var t=this.getConfig();for(var e in t.parsed={dates:{},hours:null,haveCustomWeeks:!1,customWeeks:{},customWeeksRangeStart:null,customWeeksRangeEnd:null,customWeeksBoundaries:[]},t.parsed.hours=this._parseHours(t.hours),t.dates)t.parsed.dates[e]=this._parseHours(t.dates[e]);if(t.customWeeks){var n=null,i=null;for(var e in t.customWeeks){var a=t.customWeeks[e];if(a.from&&a.to){var r=a.from,s=a.to;(!n||n>r.valueOf())&&(n=r.valueOf()),(!i||ii){for(var a=0;ai){n=n.customWeeks[n.customWeeksBoundaries[a].name];break}}var r=!0;return n.dates[i]!==void 0?r=n.dates[i]:n.dates[t.getDay()]!==void 0&&(r=n.dates[t.getDay()]),r===!0?n.hours:r||[]},_getIntervalTimestamp:function(t,e){var n={start:0,end:0};n.start=60*t.getHours()*60+60*t.getMinutes()+t.getSeconds();var i=e.getHours();return!i&&!e.getMinutes()&&!e.getSeconds()&&t.valueOf()e.valueOf()){var s=e;e=t,t=s,r=-1}return a=n=="hour"&&i==1?this._getHoursBetween(t,e,n,i):n=="minute"&&i==1?this._getMinutesBetween(t,e,n,i):this._getWorkUnitsBetweenGeneric(t,e,n,i),r*Math.round(a)},hasDuration:function(){var t=this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper,arguments),e=t.start_date,n=t.end_date,i=t.unit,a=t.step;if(!i)return!1;var r=new Date(e),s=new Date(n);for(a=a||1;r.valueOf()=0?1:-1;n=Math.abs(1*n);var s=this;return this._dateDurationCache.getEndDate(e,n,i,a*r,function(){return s._calculateEndDate(e,n,i,a*r)})},_calculateEndDate:function(t,e,n,i){return!!n&&(i==1&&n=="minute"?this._calculateMinuteEndDate(t,e,i):i==-1&&n=="minute"?this._subtractMinuteDate(t,e,i):i==1&&n=="hour"?this._calculateHourEndDate(t,e,i):this._addInterval(t,e,n,i,null).end)},_addInterval:function(t,e,n,i,a){for(var r=0,s=t,o=!1;r0&&(d=new Date(l.valueOf()-1)),this._isWorkTime(d,n)&&!o&&r++,s=l}return{end:s,start:t,added:r}},_addHoursUntilDayEnd:function(t,e){for(var n=this.$gantt.date.add(this.$gantt.date.day_start(new Date(t)),1,"day"),i=0,a=e,r=this._getIntervalTimestamp(t,n),s=this._getWorkHours(t),o=0;o=l.start&&r.start<=l.end){var d=Math.max(l.start,r.start),c=Math.min(l.end,r.end),u=(c-d)/3600;u>a&&(u=a,c=d+60*a*60);var h=Math.round((c-d)/3600);i+=h,a-=h,r.start=c}}var g=n;return i===e&&(g=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,r.start)),{added:i,end:g}},_calculateHourEndDate:function(t,e,n){var i=new Date(t),a=0;n=n||1,e=Math.abs(1*e);var r=this._addHoursUntilDayEnd(i,e);if(a=r.added,i=r.end,d=e-a){for(var s=i;a0?this.getHoursPerDay(new Date(o.valueOf()-1)):this.getHoursPerDay(new Date(o.valueOf()+1)))>=e)break;a+=l,s=o}i=s}if(a=l.start&&r.start<=l.end){var d=Math.max(l.start,r.start),c=Math.min(l.end,r.end),u=(c-d)/60;u>a&&(u=a,c=d+60*a);var h=Math.round((c-d)/60);a-=h,i+=h,r.start=c}}var g=n;return i===e&&(g=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,r.start)),{added:i,end:g}},_subtractMinutesUntilHourStart:function(t,e){for(var n=this.$gantt.date.hour_start(new Date(t)),i=0,a=e,r=60*n.getHours()*60+60*n.getMinutes()+n.getSeconds(),s=60*t.getHours()*60+60*t.getMinutes()+t.getSeconds(),o=this._getWorkHours(t),l=o.length-1;l>=0&&id.start&&r<=d.end){var c=Math.min(s,d.end),u=Math.max(r,d.start),h=(c-u)/60;h>a&&(h=a,u=c-60*a);var g=Math.abs(Math.round((c-u)/60));a-=g,i+=g,s=u}}var f=n;return i===e&&(f=new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,s)),{added:i,end:f}},_subtractMinuteDate:function(t,e,n){var i=new Date(t),a=0;n=n||-1,e=Math.abs(1*e),e=Math.round(e);const r=this._isMinutePrecision(i);let s=this._subtractMinutesUntilHourStart(i,e);a+=s.added,i=s.end;for(var o=0,l=[],d=0;ad)a+=d,i=this.$gantt.date.add(i,-1,"day");else{for(var y=!1,v=null,b=null,_=l.length-1;_>=0;_--)if(l[_].start=f-1){y=!0,v=l[_],b=l[_-1];break}if(y)if(f===v.end&&g>=v.durationMinutes)a+=v.durationMinutes,i=this.$gantt.date.add(i,-v.durationMinutes,"minute");else if(!r&&g<=f/60-v.startMinute)a+=g,i=this.$gantt.date.add(i,-g,"minute");else if(r)g<=f/60-v.startMinute?(a+=g,i=this.$gantt.date.add(i,-g,"minute")):(a+=f/60-v.startMinute,i=b?new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,b.end):this.$gantt.date.day_start(i));else{var m=this._getMinutesPerHour(i);m<=g?(a+=m,i=this._nextDate(i,"hour",n)):(s=this._subtractMinutesUntilHourStart(i,g),a+=s.added,i=s.end)}else if(i.getHours()===0&&i.getMinutes()===0&&i.getSeconds()===0){if((p=this._getClosestWorkTimePast(i,"hour")).valueOf()===i.valueOf()){var p=this.$gantt.date.add(i,-1,"day"),k=this._getWorkHours(p);if(k.length){var $=k[k.length-1];p.setSeconds($.durationSeconds)}}i=p}else i=this._getClosestWorkTimePast(new Date(i-1),"hour")}else i=this.$gantt.date.add(i,-1,"day")}if(a=h&&u>=l){if(a+=l,u==l){i=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,o[o.length-1].end);break}i=this.$gantt.date.add(i,1,"day"),i=this.$gantt.date.day_start(i)}else{for(var g=!1,f=null,y=0;yh){g=!0,f=o[y];break}if(g)if(h===f.start&&u>=f.durationMinutes)a+=f.durationMinutes,i=this.$gantt.date.add(i,f.durationMinutes,"minute");else if(u<=f.endMinute-h/60)a+=u,i=this.$gantt.date.add(i,u,"minute");else{var v=this._getMinutesPerHour(i);v<=u?(a+=v,i=d?this.$gantt.date.add(i,v,"minute"):this._nextDate(i,"hour",n)):(a+=(r=this._addMinutesUntilHourEnd(i,u)).added,i=r.end)}else i=this._getClosestWorkTimeFuture(i,"hour")}else i=this.$gantt.date.add(this.$gantt.date.day_start(i),1,"day")}if(a0){for(var o=0;o=s){a=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,n[o].start);break}}else for(o=n.length-1;o>=0;o--){if(n[o].end<=s){a=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,n[o].end);break}if(n[o].end>s&&n[o].start<=s){a=new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,s);break}}return a},_getClosestWorkMinute:function(t,e,n){var i=new Date(t),a=this._getWorkHours(i),r=this._findClosestTimeInDay(i,n,a);return r||(i=this.calculateEndDate(i,n,"day"),n>0?i=this.$gantt.date.day_start(i):(i=this.$gantt.date.day_start(i),i=this.$gantt.date.add(i,1,"day"),i=new Date(i.valueOf()-1)),a=this._getWorkHours(i),r=this._findClosestTimeInDay(i,n,a)),n<0&&(r=this.$gantt.date.add(r,-1,e)),r},_getClosestWorkTimeGeneric:function(t,e,n){if(e==="hour"||e==="minute")return this._getClosestWorkMinute(t,e,n);for(var i=this._getUnitOrder(e),a=this.units[i-1],r=t,s=0;!this._isWorkTime(r,e)&&(!a||this._isWorkTime(r,a)||(r=n>0?this._getClosestWorkTimeFuture(r,a):this._getClosestWorkTimePast(r,a),!this._isWorkTime(r,e)));){if(++s>3e3)return this.$gantt.assert(!1,"Invalid working time check"),!1;var o=r.getTimezoneOffset();r=this.$gantt.date.add(r,n,e),r=this.$gantt._correct_dst_change(r,o,n,e),this.$gantt.date[e+"_start"]&&(r=this.$gantt.date[e+"_start"](r))}return r},hasWorkTime:function(){var t=this.getConfig(),e=t.dates;for(var n in t.dates);var i=this._checkWorkHours(t.hours),a=!1;return[0,1,2,3,4,5,6].forEach((function(r){if(!a){var s=e[r];s===!0?a=i:Array.isArray(s)&&(a=this._checkWorkHours(s))}}).bind(this)),a},_checkWorkHours:function(t){if(t.length===0)return!1;for(var e=!1,n=0;ntask="+s+" of gantt.isUnscheduledTask. Task object was expected"),!!s.unscheduled||!s.start_date},t._isAllowedUnscheduledTask=function(s){return!(!s.unscheduled||!t.config.show_unscheduled)},t._isTaskInTimelineLimits=function(s){var o=s.start_date?s.start_date.valueOf():null,l=s.end_date?s.end_date.valueOf():null;return!!(o&&l&&o<=this._max_date.valueOf()&&l>=this._min_date.valueOf())},t.isTaskVisible=function(s){if(!this.isTaskExists(s))return!1;var o=this.getTask(s);return!(!this._isAllowedUnscheduledTask(o)&&!this._isTaskInTimelineLimits(o))&&this.getGlobalTaskIndex(s)>=0},t._getProjectEnd=function(){if(t.config.project_end)return t.config.project_end;var s=t.getTaskByTime();return(s=s.sort(function(o,l){return+o.end_date>+l.end_date?1:-1})).length?s[s.length-1].end_date:null},t._getProjectStart=function(){if(t.config.project_start)return t.config.project_start;if(t.config.start_date)return t.config.start_date;if(t.getState().min_date)return t.getState().min_date;var s=t.getTaskByTime();return(s=s.sort(function(o,l){return+o.start_date>+l.start_date?1:-1})).length?s[0].start_date:null};var e=function(s,o){var l=!!(o&&o!=t.config.root_id&&t.isTaskExists(o))&&t.getTask(o),d=null;if(l)if(t.config.schedule_from_end)d=t.calculateEndDate({start_date:l.end_date,duration:-t.config.duration_step,task:s});else{if(!l.start_date)return e(l,t.getParent(l));d=l.start_date}else if(t.config.schedule_from_end)d=t.calculateEndDate({start_date:t._getProjectEnd(),duration:-t.config.duration_step,task:s});else{const c=t.getTaskByIndex(0),u=t.config.start_date||t.getState().min_date;d=c?c.start_date?c.start_date:c.end_date?t.calculateEndDate({start_date:c.end_date,duration:-t.config.duration_step,task:s}):u:u}return t.assert(d,"Invalid dates"),new Date(d)};t._set_default_task_timing=function(s){s.start_date=s.start_date||e(s,t.getParent(s)),s.duration=s.duration||t.config.duration_step,s.end_date=s.end_date||t.calculateEndDate(s)},t.createTask=function(s,o,l){return s=s||{},t.defined(s.id)||(s.id=t.uid()),s.start_date||(s.start_date=e(s,o)),s.text===void 0&&(s.text=t.locale.labels.new_task),s.duration===void 0&&(s.duration=1),this.isTaskExists(o)&&(this.setParent(s,o,!0),this.getTask(o).$open=!0),this.callEvent("onTaskCreated",[s])?(this.config.details_on_create?(t.isTaskExists(s.id)?t.getTask(s.id).$index!=s.$index&&(s.start_date&&typeof s.start_date=="string"&&(s.start_date=this.date.parseDate(s.start_date,"parse_date")),s.end_date&&typeof s.end_date=="string"&&(s.end_date=this.date.parseDate(s.end_date,"parse_date")),this.$data.tasksStore.updateItem(s.id,s)):(s.$new=!0,this.silent(function(){t.$data.tasksStore.addItem(s,l)})),this.selectTask(s.id),this.refreshData(),this.showLightbox(s.id)):this.addTask(s,o,l)&&(this.showTask(s.id),this.selectTask(s.id)),s.id):null},t._update_flags=function(s,o){var l=t.$data.tasksStore;s===void 0?(this._lightbox_id=null,l.silent(function(){l.unselect()}),this.getSelectedTasks&&this._multiselect.reset(),this._tasks_dnd&&this._tasks_dnd.drag&&(this._tasks_dnd.drag.id=null)):(this._lightbox_id==s&&(this._lightbox_id=o),l.getSelectedId()==s&&l.silent(function(){l.unselect(s),l.select(o)}),this._tasks_dnd&&this._tasks_dnd.drag&&this._tasks_dnd.drag.id==s&&(this._tasks_dnd.drag.id=o))};var n=function(s,o){var l=t.getTaskType(s.type),d={type:l,$no_start:!1,$no_end:!1,scheduled_summary:!1};return l===t.config.types.project&&s.auto_scheduling===!1&&(d.scheduled_summary=!0),o||l!=s.$rendered_type?(l==t.config.types.project?d.$no_end=d.$no_start=!0:l!=t.config.types.milestone&&(d.$no_end=!(s.end_date||s.duration),d.$no_start=!s.start_date,t._isAllowedUnscheduledTask(s)&&(d.$no_end=d.$no_start=!1)),d):(d.$no_start=s.$no_start,d.$no_end=s.$no_end,d)};function i(s){s.$effective_calendar=t.getTaskCalendar(s).id,s.start_date=t.getClosestWorkTime({dir:"future",date:s.start_date,unit:t.config.duration_unit,task:s}),s.end_date=t.calculateEndDate(s)}function a(s,o,l,d){const c={start:"start_date",end:"end_date"},u={start:"$auto_start_date",end:"$auto_end_date"};let h;h=s.type===t.config.types.project&&s.auto_scheduling===!1?u:c,o.$no_start&&(s[h.start]=l?new Date(l):e(s,this.getParent(s))),o.$no_end&&(s[h.end]=d?new Date(d):this.calculateEndDate({start_date:s[h.start],duration:this.config.duration_step,task:s})),(o.$no_start||o.$no_end)&&this._init_task_timing(s)}function r(s){var o=null,l=null,d=s!==void 0?s:t.config.root_id,c=[];return t.eachTask(function(u){const h=t.getTaskType(u.type)==t.config.types.project&&u.auto_scheduling===!1;t.getTaskType(u.type)==t.config.types.project&&!h||t.isUnscheduledTask(u)||(u.rollup&&c.push(u.id),!u.start_date||u.$no_start&&!h||o&&!(o>u.start_date.valueOf())||(o=u.start_date.valueOf()),!u.end_date||u.$no_end&&!h||l&&!(ltask="+s+" of gantt.isSummaryTask. Task object was expected");var o=n(s);return!(!o.$no_end&&!o.$no_start)},t.resetProjectDates=function(s){var o=n(s);if(o.$no_end||o.$no_start){var l=r(s.id);a.call(this,s,o,l.start_date,l.end_date),s.$rollup=l.rollup}},t.getSubtaskDuration=function(s){var o=0,l=s!==void 0?s:t.config.root_id;return this.eachTask(function(d){this.getTaskType(d.type)==t.config.types.project||this.isUnscheduledTask(d)||(o+=d.duration)},l),o},t.getSubtaskDates=function(s){var o=r(s);return{start_date:o.start_date,end_date:o.end_date}},t._update_parents=function(s,o,l){if(s){var d=this.getTask(s);d.rollup&&(l=!0);var c=this.getParent(d),u=n(d),h=!0;if(l||d.start_date&&d.end_date&&(u.$no_start||u.$no_end)){const y=d.$auto_start_date?"$auto_start_date":"start_date",v=d.$auto_end_date?"$auto_end_date":"end_date";var g=d[y].valueOf(),f=d[v].valueOf();t.resetProjectDates(d),l||g!=d[y].valueOf()||f!=d[v].valueOf()||(h=!1),h&&!o&&this.refreshTask(d.id,!0),u.scheduled_summary&&(h=!0)}h&&c&&this.isTaskExists(c)&&this._update_parents(c,o,l)}},t.roundDate=function(s){var o=t.getScale();X(s)&&(s={date:s,unit:o?o.unit:t.config.duration_unit,step:o?o.step:t.config.duration_step});var l,d,c,u=s.date,h=s.step,g=s.unit;if(!o)return u;if(g==o.unit&&h==o.step&&+u>=+o.min_date&&+u<=+o.max_date)c=Math.floor(t.columnIndexByDate(u)),o.trace_x[c]||(c-=1,o.rtl&&(c=0)),d=new Date(o.trace_x[c]),l=t.date.add(d,h,g);else{for(c=Math.floor(t.columnIndexByDate(u)),l=t.date[g+"_start"](new Date(o.min_date)),o.trace_x[c]&&(l=t.date[g+"_start"](o.trace_x[c]));+l<+u;){var f=(l=t.date[g+"_start"](t.date.add(l,h,g))).getTimezoneOffset();l=t._correct_dst_change(l,f,l,g),t.date[g+"_start"]&&(l=t.date[g+"_start"](l))}d=t.date.add(l,-1*h,g)}return s.dir&&s.dir=="future"?l:s.dir&&s.dir=="past"||Math.abs(u-d)3600&&d<86400){var c=r.getTimezoneOffset()-s;c&&(r=t.date.add(r,c,"minute"))}return r},t.isSplitTask=function(r){return t.assert(r&&r instanceof Object,"Invalid argument task ="+r+" of gantt.isSplitTask. Task object was expected"),this.$data.tasksStore._isSplitItem(r)},t._is_icon_open_click=function(r){if(!r)return!1;var s=r.target||r.srcElement;if(!s||!s.className)return!1;var o=K(s);return o.indexOf("gantt_tree_icon")!==-1&&(o.indexOf("gantt_close")!==-1||o.indexOf("gantt_open")!==-1)}}const Si={date:{month_full:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],month_short:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],day_full:["الأحد","الأثنين","ألثلاثاء","الأربعاء","ألحميس","ألجمعة","السبت"],day_short:["احد","اثنين","ثلاثاء","اربعاء","خميس","جمعة","سبت"]},labels:{new_task:"مهمة جديد",icon_save:"اخزن",icon_cancel:"الغاء",icon_details:"تفاصيل",icon_edit:"تحرير",icon_delete:"حذف",confirm_closing:"التغييرات سوف تضيع, هل انت متأكد؟",confirm_deleting:"الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟",section_description:"الوصف",section_time:"الفترة الزمنية",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"الغاء",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ti={date:{month_full:["Студзень","Люты","Сакавік","Красавік","Maй","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Снежань"],month_short:["Студз","Лют","Сак","Крас","Maй","Чэр","Ліп","Жнів","Вер","Каст","Ліст","Снеж"],day_full:["Нядзеля","Панядзелак","Аўторак","Серада","Чацвер","Пятніца","Субота"],day_short:["Нд","Пн","Аўт","Ср","Чцв","Пт","Сб"]},labels:{new_task:"Новае заданне",icon_save:"Захаваць",icon_cancel:"Адмяніць",icon_details:"Дэталі",icon_edit:"Змяніць",icon_delete:"Выдаліць",confirm_closing:"",confirm_deleting:"Падзея будзе выдалена незваротна, працягнуць?",section_description:"Апісанне",section_time:"Перыяд часу",section_type:"Тып",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"ІСР",column_text:"Задача",column_start_date:"Пачатак",column_duration:"Працяг",column_add:"",link:"Сувязь",confirm_link_deleting:"будзе выдалена",link_start:"(пачатак)",link_end:"(канец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Хвiлiна",hours:"Гадзiна",days:"Дзень",weeks:"Тыдзень",months:"Месяц",years:"Год",message_ok:"OK",message_cancel:"Адмяніць",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ci={date:{month_full:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],month_short:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],day_full:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],day_short:["Dg","Dl","Dm","Dc","Dj","Dv","Ds"]},labels:{new_task:"Nova tasca",icon_save:"Guardar",icon_cancel:"Cancel·lar",icon_details:"Detalls",icon_edit:"Editar",icon_delete:"Esborrar",confirm_closing:"",confirm_deleting:"L'esdeveniment s'esborrarà definitivament, continuar ?",section_description:"Descripció",section_time:"Periode de temps",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Cancel·lar",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ei={date:{month_full:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],day_short:["日","一","二","三","四","五","六"]},labels:{new_task:"新任務",icon_save:"保存",icon_cancel:"关闭",icon_details:"详细",icon_edit:"编辑",icon_delete:"删除",confirm_closing:"请确认是否撤销修改!",confirm_deleting:"是否删除日程?",section_description:"描述",section_time:"时间范围",section_type:"类型",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"工作分解结构",column_text:"任务名",column_start_date:"开始时间",column_duration:"持续时间",column_add:"",link:"关联",confirm_link_deleting:"将被删除",link_start:" (开始)",link_end:" (结束)",type_task:"任务",type_project:"项目",type_milestone:"里程碑",minutes:"分钟",hours:"小时",days:"天",weeks:"周",months:"月",years:"年",message_ok:"OK",message_cancel:"关闭",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Di={date:{month_full:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],month_short:["Led","Ún","Bře","Dub","Kvě","Čer","Čec","Srp","Září","Říj","List","Pro"],day_full:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],day_short:["Ne","Po","Út","St","Čt","Pá","So"]},labels:{new_task:"Nová práce",icon_save:"Uložit",icon_cancel:"Zpět",icon_details:"Detail",icon_edit:"Edituj",icon_delete:"Smazat",confirm_closing:"",confirm_deleting:"Událost bude trvale smazána, opravdu?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Zpět",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ai={date:{month_full:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{new_task:"Ny opgave",icon_save:"Gem",icon_cancel:"Fortryd",icon_details:"Detaljer",icon_edit:"Tilret",icon_delete:"Slet",confirm_closing:"Dine rettelser vil gå tabt.. Er dy sikker?",confirm_deleting:"Bigivenheden vil blive slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Fortryd",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ii={date:{month_full:[" Januar"," Februar"," März "," April"," Mai"," Juni"," Juli"," August"," September "," Oktober"," November "," Dezember"],month_short:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],day_full:["Sonntag","Montag","Dienstag"," Mittwoch"," Donnerstag","Freitag","Samstag"],day_short:["So","Mo","Di","Mi","Do","Fr","Sa"]},labels:{new_task:"Neue Aufgabe",icon_save:"Speichern",icon_cancel:"Abbrechen",icon_details:"Details",icon_edit:"Ändern",icon_delete:"Löschen",confirm_closing:"",confirm_deleting:"Der Eintrag wird gelöscht",section_description:"Beschreibung",section_time:"Zeitspanne",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"PSP",column_text:"Task-Namen",column_start_date:"Startzeit",column_duration:"Dauer",column_add:"",link:"Link",confirm_link_deleting:"werden gelöscht",link_start:"(starten)",link_end:"(ende)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minuten",hours:"Stunden",days:"Tage",weeks:"Wochen",months:"Monate",years:"Jahre",message_ok:"OK",message_cancel:"Abbrechen",section_constraint:"Regel",constraint_type:"Regel",constraint_date:"Regel - Datum",asap:"So bald wie möglich",alap:"So spät wie möglich",snet:"Beginn nicht vor",snlt:"Beginn nicht später als",fnet:"Fertigstellung nicht vor",fnlt:"Fertigstellung nicht später als",mso:"Muss beginnen am",mfo:"Muss fertig sein am",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Mi={date:{month_full:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάϊος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],month_short:["ΙΑΝ","ΦΕΒ","ΜΑΡ","ΑΠΡ","ΜΑΙ","ΙΟΥΝ","ΙΟΥΛ","ΑΥΓ","ΣΕΠ","ΟΚΤ","ΝΟΕ","ΔΕΚ"],day_full:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Κυριακή"],day_short:["ΚΥ","ΔΕ","ΤΡ","ΤΕ","ΠΕ","ΠΑ","ΣΑ"]},labels:{new_task:"Νέα εργασία",icon_save:"Αποθήκευση",icon_cancel:"Άκυρο",icon_details:"Λεπτομέρειες",icon_edit:"Επεξεργασία",icon_delete:"Διαγραφή",confirm_closing:"",confirm_deleting:"Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;",section_description:"Περιγραφή",section_time:"Χρονική περίοδος",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Άκυρο",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ni={date:{month_full:["January","February","March","April","May","June","July","August","September","October","November","December"],month_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_full:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],day_short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},labels:{new_task:"New task",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Task will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Cancel",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Li={date:{month_full:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],month_short:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],day_full:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],day_short:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"]},labels:{new_task:"Nueva tarea",icon_save:"Guardar",icon_cancel:"Cancelar",icon_details:"Detalles",icon_edit:"Editar",icon_delete:"Eliminar",confirm_closing:"",confirm_deleting:"El evento se borrará definitivamente, ¿continuar?",section_description:"Descripción",section_time:"Período",section_type:"Tipo",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"EDT",column_text:"Tarea",column_start_date:"Inicio",column_duration:"Duración",column_add:"",link:"Enlace",confirm_link_deleting:"será borrada",link_start:" (inicio)",link_end:" (fin)",type_task:"Tarea",type_project:"Proyecto",type_milestone:"Hito",minutes:"Minutos",hours:"Horas",days:"Días",weeks:"Semanas",months:"Meses",years:"Años",message_ok:"OK",message_cancel:"Cancelar",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Pi={date:{month_full:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],month_short:["1","2","3","4","5","6","7","8","9","10","11","12"],day_full:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],day_short:["ی","د","س","چ","پ","ج","ش"]},labels:{new_task:"وظیفه جدید",icon_save:"ذخیره",icon_cancel:"لغو",icon_details:"جزییات",icon_edit:"ویرایش",icon_delete:"حذف",confirm_closing:"تغییرات شما ازدست خواهد رفت، آیا مطمئن هستید؟",confirm_deleting:"این مورد برای همیشه حذف خواهد شد، آیا مطمئن هستید؟",section_description:"توضیحات",section_time:"مدت زمان",section_type:"نوع",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"عنوان",column_start_date:"زمان شروع",column_duration:"مدت",column_add:"",link:"ارتباط",confirm_link_deleting:"حذف خواهد شد",link_start:" (آغاز)",link_end:" (پایان)",type_task:"وظیفه",type_project:"پروژه",type_milestone:"نگارش",minutes:"دقایق",hours:"ساعات",days:"روزها",weeks:"هفته",months:"ماهها",years:"سالها",message_ok:"تایید",message_cancel:"لغو",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ri={date:{month_full:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],month_short:["Tam","Hel","Maa","Huh","Tou","Kes","Hei","Elo","Syy","Lok","Mar","Jou"],day_full:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],day_short:["Su","Ma","Ti","Ke","To","Pe","La"]},labels:{new_task:"Uusi tehtävä",icon_save:"Tallenna",icon_cancel:"Peru",icon_details:"Tiedot",icon_edit:"Muokkaa",icon_delete:"Poista",confirm_closing:"",confirm_deleting:"Haluatko varmasti poistaa tapahtuman?",section_description:"Kuvaus",section_time:"Aikajakso",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Peru",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Hi={date:{month_full:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],month_short:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Aoû","Sep","Oct","Nov","Déc"],day_full:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],day_short:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"]},labels:{new_task:"Nouvelle tâche",icon_save:"Enregistrer",icon_cancel:"Annuler",icon_details:"Détails",icon_edit:"Modifier",icon_delete:"Effacer",confirm_closing:"",confirm_deleting:"L'événement sera effacé sans appel, êtes-vous sûr ?",section_description:"Description",section_time:"Période",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"OTP",column_text:"Nom de la tâche",column_start_date:"Date initiale",column_duration:"Durée",column_add:"",link:"Le lien",confirm_link_deleting:"sera supprimé",link_start:"(début)",link_end:"(fin)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Heures",days:"Jours",weeks:"Semaines",months:"Mois",years:"Années",message_ok:"OK",message_cancel:"Annuler",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Oi={date:{month_full:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],month_short:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],day_full:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],day_short:["א","ב","ג","ד","ה","ו","ש"]},labels:{new_task:"משימה חדש",icon_save:"שמור",icon_cancel:"בטל",icon_details:"פרטים",icon_edit:"ערוך",icon_delete:"מחק",confirm_closing:"",confirm_deleting:"ארוע ימחק סופית.להמשיך?",section_description:"הסבר",section_time:"תקופה",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"בטל",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Bi={date:{month_full:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],month_short:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],day_full:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],day_short:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"]},labels:{new_task:"Novi Zadatak",icon_save:"Spremi",icon_cancel:"Odustani",icon_details:"Detalji",icon_edit:"Izmjeni",icon_delete:"Obriši",confirm_closing:"",confirm_deleting:"Zadatak će biti trajno izbrisan, jeste li sigurni?",section_description:"Opis",section_time:"Vremenski Period",section_type:"Tip",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Naziv Zadatka",column_start_date:"Početno Vrijeme",column_duration:"Trajanje",column_add:"",link:"Poveznica",confirm_link_deleting:"će biti izbrisan",link_start:" (početak)",link_end:" (kraj)",type_task:"Zadatak",type_project:"Projekt",type_milestone:"Milestone",minutes:"Minute",hours:"Sati",days:"Dani",weeks:"Tjedni",months:"Mjeseci",years:"Godine",message_ok:"OK",message_cancel:"Odustani",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},zi={date:{month_full:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],month_short:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],day_full:["Vasárnap","Hétfõ","Kedd","Szerda","Csütörtök","Péntek","szombat"],day_short:["Va","Hé","Ke","Sze","Csü","Pé","Szo"]},labels:{new_task:"Új feladat",icon_save:"Mentés",icon_cancel:"Mégse",icon_details:"Részletek",icon_edit:"Szerkesztés",icon_delete:"Törlés",confirm_closing:"",confirm_deleting:"Az esemény törölve lesz, biztosan folytatja?",section_description:"Leírás",section_time:"Idõszak",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Mégse",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Wi={date:{month_full:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],day_full:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],day_short:["Ming","Sen","Sel","Rab","Kam","Jum","Sab"]},labels:{new_task:"Tugas baru",icon_save:"Simpan",icon_cancel:"Batal",icon_details:"Detail",icon_edit:"Edit",icon_delete:"Hapus",confirm_closing:"",confirm_deleting:"Acara akan dihapus",section_description:"Keterangan",section_time:"Periode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Batal",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ji={date:{month_full:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],month_short:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],day_full:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],day_short:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"]},labels:{new_task:"Nuovo compito",icon_save:"Salva",icon_cancel:"Chiudi",icon_details:"Dettagli",icon_edit:"Modifica",icon_delete:"Elimina",confirm_closing:"",confirm_deleting:"Sei sicuro di confermare l'eliminazione?",section_description:"Descrizione",section_time:"Periodo di tempo",section_type:"Tipo",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Nome Attività",column_start_date:"Inizio",column_duration:"Durata",column_add:"",link:"Link",confirm_link_deleting:"sarà eliminato",link_start:" (inizio)",link_end:" (fine)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minuti",hours:"Ore",days:"Giorni",weeks:"Settimane",months:"Mesi",years:"Anni",message_ok:"OK",message_cancel:"Chiudi",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Fi={date:{month_full:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],day_short:["日","月","火","水","木","金","土"]},labels:{new_task:"新しい仕事",icon_save:"保存",icon_cancel:"キャンセル",icon_details:"詳細",icon_edit:"編集",icon_delete:"削除",confirm_closing:"",confirm_deleting:"イベント完全に削除されます、宜しいですか?",section_description:"デスクリプション",section_time:"期間",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"キャンセル",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Vi={date:{month_full:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],month_short:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],day_full:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],day_short:["일","월","화","수","목","금","토"]},labels:{new_task:"이름없는 작업",icon_save:"저장",icon_cancel:"취소",icon_details:"세부 사항",icon_edit:"수정",icon_delete:"삭제",confirm_closing:"",confirm_deleting:"작업을 삭제하시겠습니까?",section_description:"설명",section_time:"기간",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"작업명",column_start_date:"시작일",column_duration:"기간",column_add:"",link:"전제",confirm_link_deleting:"삭제 하시겠습니까?",link_start:" (start)",link_end:" (end)",type_task:"작업",type_project:"프로젝트",type_milestone:"마일스톤",minutes:"분",hours:"시간",days:"일",weeks:"주",months:"달",years:"년",message_ok:"OK",message_cancel:"취소",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}};class Ui{constructor(e){this.addLocale=(n,i)=>{this._locales[n]=i},this.getLocale=n=>this._locales[n],this._locales={};for(const n in e)this._locales[n]=e[n]}}const qi={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Mon","Tir","Ons","Tor","Fre","Lør"]},labels:{new_task:"Ny oppgave",icon_save:"Lagre",icon_cancel:"Avbryt",icon_details:"Detaljer",icon_edit:"Rediger",icon_delete:"Slett",confirm_closing:"",confirm_deleting:"Hendelsen vil bli slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Avbryt",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Gi={date:{month_full:["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],month_short:["Jan","Feb","mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],day_short:["Zo","Ma","Di","Wo","Do","Vr","Za"]},labels:{new_task:"Nieuwe taak",icon_save:"Opslaan",icon_cancel:"Annuleren",icon_details:"Details",icon_edit:"Bewerken",icon_delete:"Verwijderen",confirm_closing:"",confirm_deleting:"Item zal permanent worden verwijderd, doorgaan?",section_description:"Beschrijving",section_time:"Tijd periode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Taak omschrijving",column_start_date:"Startdatum",column_duration:"Duur",column_add:"",link:"Koppeling",confirm_link_deleting:"zal worden verwijderd",link_start:" (start)",link_end:" (eind)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"minuten",hours:"uren",days:"dagen",weeks:"weken",months:"maanden",years:"jaren",message_ok:"OK",message_cancel:"Annuleren",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Yi={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{new_task:"Ny oppgave",icon_save:"Lagre",icon_cancel:"Avbryt",icon_details:"Detaljer",icon_edit:"Endre",icon_delete:"Slett",confirm_closing:"Endringer blir ikke lagret, er du sikker?",confirm_deleting:"Oppføringen vil bli slettet, er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Avbryt",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ji={date:{month_full:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],month_short:["Sty","Lut","Mar","Kwi","Maj","Cze","Lip","Sie","Wrz","Paź","Lis","Gru"],day_full:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],day_short:["Nie","Pon","Wto","Śro","Czw","Pią","Sob"]},labels:{new_task:"Nowe zadanie",icon_save:"Zapisz",icon_cancel:"Anuluj",icon_details:"Szczegóły",icon_edit:"Edytuj",icon_delete:"Usuń",confirm_closing:"",confirm_deleting:"Zdarzenie zostanie usunięte na zawsze, kontynuować?",section_description:"Opis",section_time:"Okres czasu",section_type:"Typ",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Nazwa zadania",column_start_date:"Początek",column_duration:"Czas trwania",column_add:"",link:"Link",confirm_link_deleting:"zostanie usunięty",link_start:" (początek)",link_end:" (koniec)",type_task:"Zadanie",type_project:"Projekt",type_milestone:"Milestone",minutes:"Minuty",hours:"Godziny",days:"Dni",weeks:"Tydzień",months:"Miesiące",years:"Lata",message_ok:"OK",message_cancel:"Anuluj",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Ki={date:{month_full:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],month_short:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],day_full:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],day_short:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"]},labels:{new_task:"Nova tarefa",icon_save:"Salvar",icon_cancel:"Cancelar",icon_details:"Detalhes",icon_edit:"Editar",icon_delete:"Excluir",confirm_closing:"",confirm_deleting:"As tarefas serão excluidas permanentemente, confirme?",section_description:"Descrição",section_time:"Período",section_type:"Tipo",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"EAP",column_text:"Nome tarefa",column_start_date:"Data início",column_duration:"Duração",column_add:"",link:"Link",confirm_link_deleting:"Será excluído!",link_start:" (início)",link_end:" (fim)",type_task:"Task",type_project:"Projeto",type_milestone:"Marco",minutes:"Minutos",hours:"Horas",days:"Dias",weeks:"Semanas",months:"Meses",years:"Anos",message_ok:"OK",message_cancel:"Cancelar",section_constraint:"Restrição",constraint_type:"Tipo Restrição",constraint_date:"Data restrição",asap:"Mais breve possível",alap:"Mais tarde possível",snet:"Não começar antes de",snlt:"Não começar depois de",fnet:"Não terminar antes de",fnlt:"Não terminar depois de",mso:"Precisa começar em",mfo:"Precisa terminar em",resources_filter_placeholder:"Tipo de filtros",resources_filter_label:"Ocultar vazios",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Xi={date:{month_full:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","November","December"],month_short:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],day_full:["Duminica","Luni","Marti","Miercuri","Joi","Vineri","Sambata"],day_short:["Du","Lu","Ma","Mi","Jo","Vi","Sa"]},labels:{new_task:"Sarcina noua",icon_save:"Salveaza",icon_cancel:"Anuleaza",icon_details:"Detalii",icon_edit:"Editeaza",icon_delete:"Sterge",confirm_closing:"Schimbarile nu vor fi salvate, esti sigur?",confirm_deleting:"Evenimentul va fi sters permanent, esti sigur?",section_description:"Descriere",section_time:"Interval",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Anuleaza",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Zi={date:{month_full:["Январь","Февраль","Март","Апрель","Maй","Июнь","Июль","Август","Сентябрь","Oктябрь","Ноябрь","Декабрь"],month_short:["Янв","Фев","Maр","Aпр","Maй","Июн","Июл","Aвг","Сен","Окт","Ноя","Дек"],day_full:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],day_short:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"]},labels:{new_task:"Новое задание",icon_save:"Сохранить",icon_cancel:"Отменить",icon_details:"Детали",icon_edit:"Изменить",icon_delete:"Удалить",confirm_closing:"",confirm_deleting:"Событие будет удалено безвозвратно, продолжить?",section_description:"Описание",section_time:"Период времени",section_type:"Тип",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"ИСР",column_text:"Задача",column_start_date:"Начало",column_duration:"Длительность",column_add:"",link:"Связь",confirm_link_deleting:"будет удалена",link_start:" (начало)",link_end:" (конец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Минута",hours:"Час",days:"День",weeks:"Неделя",months:"Месяц",years:"Год",message_ok:"OK",message_cancel:"Отменить",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"начните вводить слово для фильтрации",resources_filter_label:"спрятать не установленные",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},Qi={date:{month_full:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],day_short:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"]},labels:{new_task:"Nova naloga",icon_save:"Shrani",icon_cancel:"Prekliči",icon_details:"Podrobnosti",icon_edit:"Uredi",icon_delete:"Izbriši",confirm_closing:"",confirm_deleting:"Dogodek bo izbrisan. Želite nadaljevati?",section_description:"Opis",section_time:"Časovni okvir",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Prekliči",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ta={date:{month_full:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],month_short:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sept","Okt","Nov","Dec"],day_full:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],day_short:["Ne","Po","Ut","St","Št","Pi","So"]},labels:{new_task:"Nová úloha",icon_save:"Uložiť",icon_cancel:"Späť",icon_details:"Detail",icon_edit:"Edituj",icon_delete:"Zmazať",confirm_closing:"Vaše zmeny nebudú uložené. Skutočne?",confirm_deleting:"Udalosť bude natrvalo vymazaná. Skutočne?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Späť",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ea={date:{month_full:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],day_short:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},labels:{new_task:"Ny uppgift",icon_save:"Spara",icon_cancel:"Avbryt",icon_details:"Detajer",icon_edit:"Ändra",icon_delete:"Ta bort",confirm_closing:"",confirm_deleting:"Är du säker på att du vill ta bort händelsen permanent?",section_description:"Beskrivning",section_time:"Tid",section_type:"Typ",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Uppgiftsnamn",column_start_date:"Starttid",column_duration:"Varaktighet",column_add:"",link:"Länk",confirm_link_deleting:"kommer tas bort",link_start:" (start)",link_end:" (slut)",type_task:"Uppgift",type_project:"Projekt",type_milestone:"Milstolpe",minutes:"Minuter",hours:"Timmar",days:"Dagar",weeks:"Veckor",months:"Månader",years:"År",message_ok:"OK",message_cancel:"Avbryt",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},na={date:{month_full:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],month_short:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],day_full:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],day_short:["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"]},labels:{new_task:"Yeni görev",icon_save:"Kaydet",icon_cancel:"İptal",icon_details:"Detaylar",icon_edit:"Düzenle",icon_delete:"Sil",confirm_closing:"",confirm_deleting:"Görev silinecek, emin misiniz?",section_description:"Açıklama",section_time:"Zaman Aralığı",section_type:"Tip",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Görev Adı",column_start_date:"Başlangıç",column_duration:"Süre",column_add:"",link:"Bağlantı",confirm_link_deleting:"silinecek",link_start:" (başlangıç)",link_end:" (bitiş)",type_task:"Görev",type_project:"Proje",type_milestone:"Kilometretaşı",minutes:"Dakika",hours:"Saat",days:"Gün",weeks:"Hafta",months:"Ay",years:"Yıl",message_ok:"OK",message_cancel:"Ýptal",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}},ia={date:{month_full:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],month_short:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],day_full:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"],day_short:["Нед","Пон","Вів","Сер","Чет","Птн","Суб"]},labels:{new_task:"Нове завдання",icon_save:"Зберегти",icon_cancel:"Відміна",icon_details:"Деталі",icon_edit:"Редагувати",icon_delete:"Вилучити",confirm_closing:"",confirm_deleting:"Подія вилучиться назавжди. Ви впевнені?",section_description:"Опис",section_time:"Часовий проміжок",section_type:"Тип",section_deadline:"Deadline",section_baselines:"Baselines",column_wbs:"WBS",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years",message_ok:"OK",message_cancel:"Відміна",section_constraint:"Constraint",constraint_type:"Constraint type",constraint_date:"Constraint date",asap:"As Soon As Possible",alap:"As Late As Possible",snet:"Start No Earlier Than",snlt:"Start No Later Than",fnet:"Finish No Earlier Than",fnlt:"Finish No Later Than",mso:"Must Start On",mfo:"Must Finish On",resources_filter_placeholder:"type to filter",resources_filter_label:"hide empty",empty_state_text_link:"Click here",empty_state_text_description:"to create your first task",baselines_section_placeholder:"Start adding a new baseline",baselines_add_button:"Add Baseline",baselines_remove_button:"Remove",baselines_remove_all_button:"Remove All",deadline_enable_button:"Set",deadline_disable_button:"Remove"}};function aa(){this.constants=Fn,this.version="9.0.1",this.license="gpl",this.templates={},this.ext={},this.keys={edit_save:this.constants.KEY_CODES.ENTER,edit_cancel:this.constants.KEY_CODES.ESC}}function ra(t){var e=new aa,n=new Vn(t),i={};e.plugins=function(l){for(var d in l)if(l[d]&&!i[d]){var c=n.getExtension(d);c&&(c(e),i[d]=!0)}return i},e.$services=function(){var l={};return{services:{},setService:function(d,c){l[d]=c},getService:function(d){return l[d]?l[d]():null},dropService:function(d){l[d]&&delete l[d]},destructor:function(){for(var d in l)if(l[d]){var c=l[d];c&&c.destructor&&c.destructor()}l=null}}}(),e.config=Un(),e.ajax=function(l){return{cache:!0,method:"get",parse:function(d){return typeof d!="string"?d:(d=d.replace(/^[\s]+/,""),typeof DOMParser>"u"||_t.isIE?dt.ActiveXObject!==void 0&&((c=new dt.ActiveXObject("Microsoft.XMLDOM")).async="false",c.loadXML(d)):c=new DOMParser().parseFromString(d,"text/xml"),c);var c},xmltop:function(d,c,u){if(c.status===void 0||c.status<400){var h=c.responseXML?c.responseXML||c:this.parse(c.responseText||c);if(h&&h.documentElement!==null&&!h.getElementsByTagName("parsererror").length)return h.getElementsByTagName(d)[0]}return u!==-1&&l.callEvent("onLoadXMLError",["Incorrect XML",arguments[1],u]),document.createElement("DIV")},xpath:function(d,c){if(c.nodeName||(c=c.responseXML||c),_t.isIE)return c.selectNodes(d)||[];for(var u,h=[],g=(c.ownerDocument||c).evaluate(d,c,null,XPathResult.ANY_TYPE,null);u=g.iterateNext();)h.push(u);return h},query:function(d){return this._call(d.method||"GET",d.url,d.data||"",d.async||!0,d.callback,d.headers)},get:function(d,c,u){var h=$t("GET",arguments);return this.query(h)},getSync:function(d,c){var u=$t("GET",arguments);return u.async=!1,this.query(u)},put:function(d,c,u,h){var g=$t("PUT",arguments);return this.query(g)},del:function(d,c,u){var h=$t("DELETE",arguments);return this.query(h)},post:function(d,c,u,h){arguments.length==1?c="":arguments.length==2&&typeof c=="function"&&(u=c,c="");var g=$t("POST",arguments);return this.query(g)},postSync:function(d,c,u){c=c===null?"":String(c);var h=$t("POST",arguments);return h.async=!1,this.query(h)},_call:function(d,c,u,h,g,f){return new l.Promise(function(y,v){var b=typeof XMLHttpRequest!==void 0?new XMLHttpRequest:new dt.ActiveXObject("Microsoft.XMLHTTP"),_=navigator.userAgent.match(/AppleWebKit/)!==null&&navigator.userAgent.match(/Qt/)!==null&&navigator.userAgent.match(/Safari/)!==null;h&&(b.onreadystatechange=function(){if(b.readyState==4||_&&b.readyState==3){if((b.status!=200||b.responseText==="")&&!l.callEvent("onAjaxError",[b]))return;setTimeout(function(){typeof g=="function"&&g.apply(dt,[{xmlDoc:b,filePath:c}]),y(b),typeof g=="function"&&(g=null,b=null)},0)}});var m=!this||!this.cache;if(d=="GET"&&m&&(c+=(c.indexOf("?")>=0?"&":"?")+"dhxr"+new Date().getTime()+"=1"),b.open(d,c,h),f)for(var p in f)b.setRequestHeader(p,f[p]);else d.toUpperCase()=="POST"||d=="PUT"||d=="DELETE"?b.setRequestHeader("Content-Type","application/x-www-form-urlencoded"):d=="GET"&&(u=null);if(b.setRequestHeader("X-Requested-With","XMLHttpRequest"),b.send(u),!h)return{xmlDoc:b,filePath:c}})},urlSeparator:function(d){return d.indexOf("?")!=-1?"&":"?"}}}(e),e.date=qn(e),e.RemoteEvents=Yn;var a=function(l){function d(u){return{target:u.target||u.srcElement,pageX:u.pageX,pageY:u.pageY,clientX:u.clientX,clientY:u.clientY,metaKey:u.metaKey,shiftKey:u.shiftKey,ctrlKey:u.ctrlKey,altKey:u.altKey}}function c(u,h){this._obj=u,this._settings=h||{},it(this);var g=this.getInputMethods();this._drag_start_timer=null,l.attachEvent("onGanttScroll",R(function(v,b){this.clearDragTimer()},this));for(var f={passive:!1},y=0;ythis.config.sensitivity},initDnDMarker:function(){var u=this.config.marker=document.createElement("div");u.className="gantt_drag_marker",u.innerHTML="",document.body.appendChild(u)},backupEventTarget:function(u,h){if(l.config.touch){var g=h(u),f=g.target||g.srcElement,y=f.cloneNode(!0);this.config.original_target=d(g),this.config.original_target.target=y,this.config.backup_element=f,f.parentNode.appendChild(y),f.style.display="none",(this.config.mousemoveContainer||document.body).appendChild(f)}},getInputMethods:function(){var u=[];if(u.push({move:"mousemove",down:"mousedown",up:"mouseup",accessor:function(g){return g}}),l.config.touch){var h=!0;try{document.createEvent("TouchEvent")}catch{h=!1}h?u.push({move:"touchmove",down:"touchstart",up:"touchend",accessor:function(g){return g.touches&&g.touches.length>1?null:g.touches[0]?{target:document.elementFromPoint(g.touches[0].clientX,g.touches[0].clientY),pageX:g.touches[0].pageX,pageY:g.touches[0].pageY,clientX:g.touches[0].clientX,clientY:g.touches[0].clientY}:g}}):dt.navigator.pointerEnabled?u.push({move:"pointermove",down:"pointerdown",up:"pointerup",accessor:function(g){return g.pointerType=="mouse"?null:g}}):dt.navigator.msPointerEnabled&&u.push({move:"MSPointerMove",down:"MSPointerDown",up:"MSPointerUp",accessor:function(g){return g.pointerType==g.MSPOINTER_TYPE_MOUSE?null:g}})}return u},clearDragTimer:function(){this._drag_start_timer&&(clearTimeout(this._drag_start_timer),this._drag_start_timer=null)},dragStart:function(u,h,g){this.config&&this.config.started||(this.config={obj:u,marker:null,started:!1,pos:this.getPosition(h),sensitivity:4},this._settings&&N(this.config,this._settings,!0),this.traceDragEvents(u,g),l._prevent_touch_scroll=!0,document.body.className+=" gantt_noselect",l.config.touch&&this.dragMove(u,h,g.accessor))},dragMove:function(u,h,g){var f=g(h);if(!f)return!1;if(!this.config.marker&&!this.config.started){var y=this.getPosition(f);if(l.config.touch||this.checkPositionChange(y)){if(this.config.started=!0,this.config.ignore=!1,l._touch_drag=!0,this.callEvent("onBeforeDragStart",[u,this.config.original_target])===!1)return this.config.ignore=!0,!1;this.backupEventTarget(h,g),this.initDnDMarker(),l._touch_feedback(),this.callEvent("onAfterDragStart",[u,this.config.original_target])}else this.config.ignore=!0}return this.config.ignore?!1:h.targetTouches&&!f.target?void 0:(f.pos=this.getPosition(f),this.config.marker.style.left=f.pos.x+"px",this.config.marker.style.top=f.pos.y+"px",this.callEvent("onDragMove",[u,f]),!0)},dragEnd:function(u){var h=this.config.backup_element;h&&h.parentNode&&h.parentNode.removeChild(h),l._prevent_touch_scroll=!1,this.config.marker&&(this.config.marker.parentNode.removeChild(this.config.marker),this.config.marker=null,this.callEvent("onDragEnd",[])),this.config.started=!1,l._touch_drag=!1,document.body.className=document.body.className.replace(" gantt_noselect","")},getPosition:function(u){var h=0,g=0;return u.pageX||u.pageY?(h=u.pageX,g=u.pageY):(u.clientX||u.clientY)&&(h=u.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,g=u.clientY+document.body.scrollTop+document.documentElement.scrollTop),{x:h,y:g}}},c}(e);e.$services.setService("dnd",function(){return a});var r=function(l){var d={};function c(u,h,g){g=g||u;var f=l.config,y=l.templates;l.config[u]&&d[g]!=f[u]&&(h&&y[g]||(y[g]=l.date.date_to_str(f[u]),d[g]=f[u]))}return{initTemplates:function(){var u=l.locale.labels;u.gantt_save_btn=u.icon_save,u.gantt_cancel_btn=u.icon_cancel,u.gantt_delete_btn=u.icon_delete;var h=l.date,g=h.date_to_str,f=l.config,y=g(f.xml_date||f.date_format,f.server_utc),v=h.str_to_date(f.xml_date||f.date_format,f.server_utc);c("date_scale",!0,void 0,l.config,l.templates),c("date_grid",!0,"grid_date_format",l.config,l.templates),c("task_date",!0,void 0,l.config,l.templates),l.mixin(l.templates,{xml_format:void 0,format_date:y,xml_date:void 0,parse_date:v,progress_text:function(b,_,m){return""},grid_header_class:function(b,_){return""},task_text:function(b,_,m){return m.text},task_class:function(b,_,m){return""},task_end_date:function(b){return l.templates.task_date(b)},grid_row_class:function(b,_,m){return""},task_row_class:function(b,_,m){return""},timeline_cell_class:function(b,_){return""},timeline_cell_content:function(b,_){return""},scale_cell_class:function(b){return""},scale_row_class:function(b){return""},grid_indent:function(b){return"
"},grid_folder:function(b){return"
"},grid_file:function(b){return"
"},grid_open:function(b){return"
"},grid_blank:function(b){return"
"},date_grid:function(b,_,m){return _&&l.isUnscheduledTask(_)&&l.config.show_unscheduled?l.templates.task_unscheduled_time(_):l.templates.grid_date_format(b,m)},task_time:function(b,_,m){return l.isUnscheduledTask(m)&&l.config.show_unscheduled?l.templates.task_unscheduled_time(m):l.templates.task_date(b)+" - "+l.templates.task_end_date(_)},task_unscheduled_time:function(b){return""},time_picker:g(f.time_picker),link_class:function(b){return""},link_description:function(b){var _=l.getTask(b.source),m=l.getTask(b.target);return""+_.text+" – "+m.text+" "},drag_link:function(b,_,m,p){b=l.getTask(b);var k=l.locale.labels,$=""+b.text+" "+(_?k.link_start:k.link_end)+" ";return m&&($+=" "+(m=l.getTask(m)).text+" "+(p?k.link_start:k.link_end)+" "),$},drag_link_class:function(b,_,m,p){var k="";return b&&m&&(k=" "+(l.isLinkAllowed(b,m,_,p)?"gantt_link_allow":"gantt_link_deny")),"gantt_link_tooltip"+k},tooltip_date_format:h.date_to_str("%Y-%m-%d"),tooltip_text:function(b,_,m){return`Task: ${m.text}
Start date: ${l.templates.tooltip_date_format(b)}
- End date: ${l.templates.tooltip_date_format(_)}
`},baseline_text:function(b,_,m){return""}})},initTemplate:c}}(e);e.$services.setService("templateLoader",function(){return r}),nt(e);var s=new Jn;s.registerProvider("global",function(){var l={min_date:e._min_date,max_date:e._max_date,selected_task:null};return e.$data&&e.$data.tasksStore&&(l.selected_task=e.$data.tasksStore.getSelectedId()),l}),e.getState=s.getState,e.$services.setService("state",function(){return s}),N(e,Hn),e.Promise=Kn,e.env=_t,function(l){var d=Zn.create();N(l,d);var c,u=l.createDatastore({name:"task",type:"treeDatastore",rootId:function(){return l.config.root_id},initItem:R(function(_){this.defined(_.id)||(_.id=this.uid()),_.start_date&&(_.start_date=l.date.parseDate(_.start_date,"parse_date")),_.end_date&&(_.end_date=l.date.parseDate(_.end_date,"parse_date"));var m=null;(_.duration||_.duration===0)&&(_.duration=m=1*_.duration),m&&(_.start_date&&!_.end_date?_.end_date=this.calculateEndDate(_):!_.start_date&&_.end_date&&(_.start_date=this.calculateEndDate({start_date:_.end_date,duration:-_.duration,task:_}))),l.config.deadlines!==!1&&_.deadline&&(_.deadline=l.date.parseDate(_.deadline,"parse_date")),_.progress=Number(_.progress)||0,this._isAllowedUnscheduledTask(_)&&this._set_default_task_timing(_),this._init_task_timing(_),_.start_date&&_.end_date&&this.correctTaskWorkTime(_),_.$source=[],_.$target=[];var p=this.$data.tasksStore.getItem(_.id);return p&&!W(_.open)&&(_.$open=p.$open),_.parent===void 0&&(_.parent=this.config.root_id),_},l),getConfig:function(){return l.config}}),h=l.createDatastore({name:"link",initItem:R(function(_){return this.defined(_.id)||(_.id=this.uid()),_},l)});function g(_){var m=l.isTaskVisible(_);if(!m&&l.isTaskExists(_)){var p=l.getParent(_);l.isTaskExists(p)&&l.isTaskVisible(p)&&(p=l.getTask(p),l.isSplitTask(p)&&(m=!0))}return m}function f(_){if(l.isTaskExists(_.source)){var m=l.getTask(_.source);m.$source=m.$source||[],m.$source.push(_.id)}if(l.isTaskExists(_.target)){var p=l.getTask(_.target);p.$target=p.$target||[],p.$target.push(_.id)}}function y(_){if(l.isTaskExists(_.source)){for(var m=l.getTask(_.source),p=0;pk||+m.end_date<+p)return!1}return!0}),u.attachEvent("onIdChange",function(_,m){l._update_flags(_,m);var p=l.getTask(m);u.isSilent()||(p.$split_subtask||p.rollup)&&l.eachParent(function(k){l.refreshTask(k.id)},m)}),u.attachEvent("onAfterUpdate",function(_){if(l._update_parents(_),l.getState("batchUpdate").batch_update)return!0;var m=u.getItem(_);m.$source||(m.$source=[]);for(var p=0;p-1&&k.click?k.click():(i(n,!0),p=!0)}m==27&&(i(n,!1),p=!0)}return p?(_.preventDefault&&_.preventDefault(),!(_.cancelBubble=!0)):void 0}}var r=vt(t.$root)||document;function s(_){s.cover||(s.cover=document.createElement("div"),s.cover.onkeydown=a,s.cover.className="dhx_modal_cover",document.body.appendChild(s.cover)),s.cover.style.display=_?"inline-block":"none"}function o(_,m,p){return""}function l(){for(var _=[].slice.apply(arguments,[0]),m=0;m<_.length;m++)if(_[m])return _[m]}function d(_,m,p){var k=_.tagName?_:function(x,S,T){var C=document.createElement("div"),E=at();t._waiAria.messageModalAttr(C,E),C.className=" gantt_modal_box gantt-"+x.type,C.setAttribute(e,1);var D="";if(x.width&&(C.style.width=x.width),x.height&&(C.style.height=x.height),x.title&&(D+='"),D+='"},n.prototype._getRootParent=function(){for(var a=this.$parent;a&&a.$parent;)a=a.$parent;if(a)return a},n.prototype._eachView=function(){var a=[];return i(this._getRootParent(),a),a},n.prototype._getLinkedViews=function(){for(var a=this._eachView(),r=[],s=0;sy[u]&&y[c]>r&&f>y[u]-h+2&&(r=f+(o?0:2),s=y[u]);else{var v=Math.max(y[c]-f,0);(f+=v)>Math.max(y[u]-v,0)&&f>r&&(r=f,s=y[u])}}return{outerScroll:s,innerScroll:r}},n.prototype.scroll=function(a){this._isHorizontal()?this.scrollHorizontally(a):this.scrollVertically(a)},n.prototype.getScrollState=function(){return{visible:this.isVisible(),direction:this.$config.scroll,size:this.$config.outerSize,scrollSize:this.$config.scrollSize||0,position:this.$config.scrollPosition||0}},n.prototype.setSize=function(a,r){t.prototype.setSize.apply(this,arguments);var s=this._getScrollSize(),o=(this._isVertical()?r:a)-this._getScrollOffset()+(this._isHorizontal()?1:0);s.innerScroll&&o>s.outerScroll&&(s.innerScroll+=o-s.outerScroll),this.$config.scrollSize=s.innerScroll,this.$config.width=a,this.$config.height=r,this._setScrollSize(s.innerScroll)},n.prototype.isVisible=function(){return!(!this.$parent||!this.$parent.$view.parentNode)},n.prototype.shouldShow=function(){var a=this._getScrollSize();return!(!a.innerScroll&&this.$parent&&this.$parent.$view.parentNode)&&!(!a.innerScroll||this.$parent&&this.$parent.$view.parentNode)},n.prototype.shouldHide=function(){return!(this._getScrollSize().innerScroll||!this.$parent||!this.$parent.$view.parentNode)},n.prototype.toggleVisibility=function(){this.shouldHide()?this.hide():this.shouldShow()&&this.show()},n.prototype._getScaleOffset=function(a){var r=0;return!a||a.$config.view!="timeline"&&a.$config.view!="grid"||(r=a.$content.$getConfig().scale_height),r},n.prototype._getScrollOffset=function(){var a=0;if(this._isVertical()){var r=this.$parent.$parent;a=Math.max(this._getScaleOffset(r.getPrevSibling(this.$parent.$id)),this._getScaleOffset(r.getNextSibling(this.$parent.$id)))}else for(var s=this._getLinkedViews(),o=0;o=0&&(!a[y]||a.deltaX||a.wheelDeltaX||(g=2*f,f=0)),g&&Math.abs(g)>Math.abs(f)){if(this._isVertical())return;if(s.x||!this.$scroll_hor||!this.$scroll_hor.offsetWidth)return!0;var v=g/-40,b=this._oldLeft,_=b+30*v;if(this.scrollHorizontally(_),this.$scroll_hor.scrollLeft=_,b==this.$scroll_hor.scrollLeft)return!0;this._oldLeft=this.$scroll_hor.scrollLeft}else{if(this._isHorizontal())return;if(s.y||!this.$scroll_ver||!this.$scroll_ver.offsetHeight)return!0;v=f/-40,f===void 0&&(v=a.detail);var m=this._oldTop,p=this.$scroll_ver.scrollTop+30*v;if(this.scrollVertically(p),this.$scroll_ver.scrollTop=p,m==this.$scroll_ver.scrollTop)return!0;this._oldTop=this.$scroll_ver.scrollTop}return a.preventDefault&&a.preventDefault(),a.cancelBubble=!0,!1}},n}(It);function hn(t){var e={},n={},i=null,a=-1,r=null,s=function(o){var l=-1,d=-1;return{resetCache:function(){l=-1,d=-1},_getRowHeight:function(){return l===-1&&(l=o.$getConfig().row_height),l},_refreshState:function(){this.resetCache(),d=!0;var c=o.$config.rowStore;if(c)for(var u=this._getRowHeight(),h=0;h=c&&o",this.$task=t.childNodes[0],this.$task.innerHTML="
",this.$task_scale=this.$task.childNodes[0],this.$task_data=this.$task.childNodes[1],this.$task_data.innerHTML="
",this.$task_bg=this.$task_data.childNodes[0],this.$task_baselines=this.$task_data.childNodes[1],this.$task_links=this.$task_data.childNodes[2],this.$task_bars=this.$task_data.childNodes[3],this.$task_constraints=this.$task_data.childNodes[4],this.$task_deadlines=this.$task_data.childNodes[5],this._tasks={col_width:0,width:[],full_width:0,trace_x:[],rendered:{}};var e=this.$getConfig(),n=e[this.$config.bind+"_attribute"],i=e[this.$config.bindLinks+"_attribute"];!n&&this.$config.bind&&(n="data-"+this.$config.bind+"-id"),!i&&this.$config.bindLinks&&(i="data-"+this.$config.bindLinks+"-id"),this.$config.item_attribute=n||null,this.$config.link_attribute=i||null;var a=this._createLayerConfig();this.$config.layers||(this.$config.layers=a.tasks),this.$config.linkLayers||(this.$config.linkLayers=a.links),this._attachLayers(this.$gantt),this.callEvent("onReady",[]),this.$gantt.ext.dragTimeline&&(this._timelineDragScroll=this.$gantt.ext.dragTimeline.create(),this._timelineDragScroll.attach(this))},setSize:function(t,e){var n=this.$getConfig();if(1*t===t&&(this.$config.width=t),1*e===e){this.$config.height=e;var i=Math.max(this.$config.height-n.scale_height);this.$task_data.style.height=i+"px"}this.refresh(),this.$task_bg.style.backgroundImage="",n.smart_rendering&&this.$config.rowStore?this.$task_bg.style.height=this.getTotalHeight()+"px":this.$task_bg.style.height="";for(var a=this._tasks,r=this.$task_data.childNodes,s=0,o=r.length;s'+this._prepareScaleHtml(t[r],e,n,r)+"")}return i.join("")},_prepareScaleHtml:function(t,e,n,i){var a=this.$getConfig(),r=this.$gantt.templates,s=[],o=null,l=null,d=t.format||t.template||t.date;typeof d=="string"&&(d=this.$gantt.date.date_to_str(d));var c=0,u=t.count;!a.smart_scales||isNaN(e)||isNaN(n)||(c=Tt(t.left,e),u=Tt(t.left,n)+1),l=t.css||function(){},!t.css&&a.inherit_scale_class&&(l=r.scale_cell_class);for(var h=c;hx||$===!0){if(vk.x_end&&f>x){let S=k.x_end-v-10,T="-100%";S${g} `;s.push(p)}}return s.join("")},dateFromPos:function(t){var e=this._tasks;if(t<0||t>e.full_width||!e.full_width)return null;var n=Tt(this._tasks.left,t),i=this._tasks.left[n],a=e.width[n]||e.col_width,r=0;a&&(r=(t-i)/a,e.rtl&&(r=1-r));var s=0;return r&&(s=this._getColumnDuration(e,e.trace_x[n])),new Date(e.trace_x[n].valueOf()+Math.round(r*s))},posFromDate:function(t){if(!this.isVisible()||!t)return 0;var e=String(t.valueOf());if(this._posFromDateCache[e]!==void 0)return this._posFromDateCache[e];var n=this.columnIndexByDate(t);this.$gantt.assert(n>=0,"Invalid day index");var i=Math.floor(n),a=n%1,r=this._tasks.left[Math.min(i,this._tasks.width.length-1)];i==this._tasks.width.length&&(r+=this._tasks.width[this._tasks.width.length-1]),a&&(i=a.max_date)return this._tasks.rtl?0:n.length;var r=Tt(n,e),s=this._getClosestVisibleColumn(r,n,i),o=n[s],l=this._tasks.trace_index_transition;if(!o)return l?l[0]:0;var d=(t-n[s])/this._getColumnDuration(this._tasks,n[s]);return l?l[s]+(1-d):s+d},getItemPosition:function(t,e,n){var i,a,r;let s=e||t.start_date||t.$auto_start_date,o=n||t.end_date||t.$auto_end_date;return this._tasks.rtl?(a=this.posFromDate(s),i=this.posFromDate(o)):(i=this.posFromDate(s),a=this.posFromDate(o)),r=Math.max(a-i,0),{left:i,top:this.getItemTop(t.id),height:this.getBarHeight(t.id),width:r,rowHeight:this.getItemHeight(t.id)}},getBarHeight:function(t,e){var n=this.$getConfig(),i=this.$config.rowStore.getItem(t),a=i.task_height||i.bar_height||n.bar_height||n.task_height,r=this.getItemHeight(t);return a=="full"&&(a=r-(n.bar_height_padding||3)),a=Math.min(a,r),e&&(a=Math.round(a/Math.sqrt(2))),Math.max(a,0)},getScale:function(){return this._tasks},_getScales:function(){var t=this.$getConfig(),e=this.$scaleHelper,n=[e.primaryScale(t)].concat(e.getSubScales(t));return e.sortScales(n),n},_getColumnDuration:function(t,e){return this.$gantt.date.add(e,t.step,t.unit)-e},_bindStore:function(){if(this.$config.bind){var t=this.$gantt.getDatastore(this.$config.bind);if(this.$config.rowStore=t,t&&!t._timelineCacheAttached){var e=this;t._timelineCacheAttached=t.attachEvent("onBeforeFilter",function(){e._resetTopPositionHeight()})}}},_unbindStore:function(){if(this.$config.bind){var t=this.$gantt.getDatastore(this.$config.bind);t&&t._timelineCacheAttached&&(t.detachEvent(t._timelineCacheAttached),t._timelineCacheAttached=!1)}},refresh:function(){this._bindStore(),this.$config.bindLinks&&(this.$config.linkStore=this.$gantt.getDatastore(this.$config.bindLinks)),this._resetTopPositionHeight(),this._resetHeight(),this._initStaticBackgroundRender(),this._render_tasks_scales()},destructor:function(){var t=this.$gantt;this._clearLayers(t),this._unbindStore(),this.$task=null,this.$task_scale=null,this.$task_data=null,this.$task_bg=null,this.$task_links=null,this.$task_bars=null,this.$gantt=null,this.$config.rowStore&&(this.$config.rowStore.detachEvent(this._staticBgHandler),this.$config.rowStore=null),this.$config.linkStore&&(this.$config.linkStore=null),this._timelineDragScroll&&(this._timelineDragScroll.destructor(),this._timelineDragScroll=null),this.callEvent("onDestroy",[]),this.detachAllEvents()}};class ma{constructor(e){this._scrollOrder=0;const{gantt:n,grid:i,dnd:a,getCurrentX:r}=e;this.$gantt=n,this.$grid=i,this._dnd=a,this.getCurrentX=r,this._scrollView=this.$gantt.$ui.getView(this.$grid.$config.scrollX),this.attachEvents()}attachEvents(){this.isScrollable()&&(this._dnd.attachEvent("onDragMove",(e,n)=>{const i=this.$grid.$grid.getBoundingClientRect(),a=i.right,r=i.left,s=this.getCurrentX(n.clientX);return s>=a-20&&(this.autoscrollRight(),this.autoscrollStart()),s<=r+20&&(this.autoscrollLeft(),this.autoscrollStart()),sr+20&&this.autoscrollStop(),!0}),this._dnd.attachEvent("onDragEnd",()=>{this.autoscrollStop()}))}autoscrollStart(){if(this._scrollOrder===0)return;const e=10*this._scrollOrder,n=this._scrollView.getScrollState();this._scrollView.scrollTo(n.position+e),setTimeout(()=>{this.autoscrollStart()},50)}autoscrollRight(){this._scrollOrder=1}autoscrollLeft(){this._scrollOrder=-1}autoscrollStop(){this._scrollOrder=0}getCorrection(){return this.isScrollable()?this._scrollView.getScrollState().position:0}isScrollable(){return!!this.$grid.$config.scrollable}}const _n="data-column-id";class va{constructor(e,n){this._targetMarker=null,this.calculateCurrentPosition=i=>{const a=this.$grid.$grid.getBoundingClientRect(),r=a.right,s=a.left;let o=i;return o>r&&(o=r),o{if(this._draggedCell=this.$gantt.utils.dom.closest(n.target,".gantt_grid_head_cell"),!this._draggedCell)return;const i=this.$grid.$getConfig().columns,a=this._draggedCell.getAttribute(_n);let r,s;return i.map(function(o,l){o.name===a&&(r=o,s=l)}),this.$grid.callEvent("onBeforeColumnDragStart",[{draggedColumn:r,draggedIndex:s}])!==!1&&!(!this._draggedCell||!r)&&(this._gridConfig=this.$grid.$getConfig(),this._originAutoscroll=this.$gantt.config.autoscroll,this.$gantt.config.autoscroll=!1,!0)}),this._dnd.attachEvent("onAfterDragStart",(e,n)=>{this._draggedCell&&(this._dnd.config.column=this._draggedCell.getAttribute(_n),this._dnd.config.marker.innerHTML=this._draggedCell.outerHTML,this._dnd.config.marker.classList.add("gantt_column_drag_marker"),this._dnd.config.marker.style.height=this._gridConfig.scale_height+"px",this._dnd.config.marker.style.lineHeight=this._gridConfig.scale_height+"px",this._draggedCell.classList.add("gantt_grid_head_cell_dragged"))}),this._dnd.attachEvent("onDragMove",(e,n)=>{if(!this._draggedCell)return;this._dragX=n.clientX;const i=this.calculateCurrentPosition(n.clientX),a=this.findColumnsIndexes(),r=a.targetIndex,s=a.draggedIndex,o=this.$grid.$getConfig().columns,l=o[s],d=o[r];return this.$grid.callEvent("onColumnDragMove",[{draggedColumn:l,targetColumn:d,draggedIndex:s,targetIndex:r}])===!1?(this.cleanTargetMarker(),!1):(this.setMarkerPosition(i),this.drawTargetMarker(a),!0)}),this._dnd.attachEvent("onDragEnd",()=>{this._draggedCell&&(this.$gantt.config.autoscroll=this._originAutoscroll,this._draggedCell.classList.remove("gantt_grid_head_cell_dragged"),this.cleanTargetMarker(),this.reorderColumns())})}reorderColumns(){const{targetIndex:e,draggedIndex:n}=this.findColumnsIndexes(),i=this.$grid.$getConfig().columns,a=i[n],r=i[e];this.$grid.callEvent("onBeforeColumnReorder",[{draggedColumn:a,targetColumn:r,draggedIndex:n,targetIndex:e}])!==!1&&e!==n&&(i.splice(n,1),i.splice(e,0,a),this.$gantt.render(),this.$grid.callEvent("onAfterColumnReorder",[{draggedColumn:a,targetColumn:r,draggedIndex:n,targetIndex:e}]))}findColumnsIndexes(){const e=this._dnd.config.column,n=this.$grid.$getConfig().columns;let i,a,r,s;const o={startX:0,endX:0};let l,d=0,c=n.length-1,u=(f,y)=>f<=y,h=f=>++f;this.$gantt.config.rtl&&(d=n.length-1,c=0,u=(f,y)=>f>=y,h=f=>--f);const g=this._dragX-this.$grid.$grid.getBoundingClientRect().left+this._scrollableGrid.getCorrection();for(let f=d;u(f,c)&&(i===void 0||a===void 0);f=h(f))n[f].hide||(o.startX=o.endX,o.endX+=n[f].width,g>=o.startX&&(g<=o.endX||!u(h(f),c))&&(i=f,r=o.startX,s=o.endX,l=(g-o.startX)/(o.endX-o.startX)),e===n[f].name&&(a=f));return{targetIndex:i,draggedIndex:a,xBefore:r,xAfter:s,columnRelativePos:l}}setMarkerPosition(e,n=10){const{marker:i}=this._dnd.config,a=this._dnd._obj.getBoundingClientRect();i.style.top=`${a.y+n}px`,i.style.left=`${e}px`}drawTargetMarker({targetIndex:e,draggedIndex:n,xBefore:i,xAfter:a,columnRelativePos:r}){let s;this._targetMarker||(this._targetMarker=document.createElement("div"),bt(this._targetMarker,"gantt_grid_target_marker"),this._targetMarker.style.display="none",this._targetMarker.style.height=`${this._gridConfig.scale_height}px`),this._targetMarker.parentNode||this.$grid.$grid_scale.appendChild(this._targetMarker),s=e>n?a:e.5?a:i,this._targetMarker.style.left=`${s}px`,this._targetMarker.style.display="block"}cleanTargetMarker(){this._targetMarker&&this._targetMarker.parentNode&&this.$grid.$grid_scale.removeChild(this._targetMarker),this._targetMarker=null}}function ve(t){var e=[];return{delegate:function(n,i,a,r){e.push([n,i,a,r]),t.$services.getService("mouseEvents").delegate(n,i,a,r)},destructor:function(){for(var n=t.$services.getService("mouseEvents"),i=0;i",this.$grid=t.childNodes[0],this.$grid.innerHTML="
",this.$grid_scale=this.$grid.childNodes[0],this.$grid_data=this.$grid.childNodes[1];var s=a[this.$config.bind+"_attribute"];if(!s&&this.$config.bind&&(s="data-"+this.$config.bind+"-id"),this.$config.item_attribute=s||null,!this.$config.layers){var o=this._createLayerConfig();this.$config.layers=o}var l={init:function(){},doOnRender:function(){}};this._renderHeaderResizers=l.doOnRender,this._mouseDelegates=ve(e);var d=function(c,u){var h={row_before_start:c.bind(function(g,f,y){var v=u.$getConfig(),b=u.$config.rowStore;if(!tt(y,v.task_grid_row_resizer_attribute))return!1;var _=this.locate(y,v.task_grid_row_resizer_attribute),m=b.getItem(_);return u.callEvent("onBeforeRowResize",[m])!==!1&&void 0},c),row_after_start:c.bind(function(g,f,y){var v=u.$getConfig(),b=this.locate(y,v.task_grid_row_resizer_attribute);g.config.marker.innerHTML="",g.config.marker.className+=" gantt_row_grid_resize_area",g.config.marker.style.width=u.$grid.offsetWidth+"px",g.config.drag_id=b},c),row_drag_move:c.bind(function(g,f,y){var v=u.$config.rowStore,b=u.$getConfig(),_=g.config,m=_.drag_id,p=u.getItemHeight(m),k=u.getItemTop(m)-f.scrollTop,$=z(u.$grid_data),w=parseInt(_.marker.style.top,10),x=k+$.y,S=0,T=b.min_task_grid_row_height;return(S=w-x)c.max_width&&(u=c.max_width-c.width),a-=c.width,c.width+=u,l-=u}for(var h=l>0?1:-1;l>0&&h===1||l<0&&h===-1;){var g=l;for(s=e+1;s-1&&(f=i[e].width+l)==this._getColumnWidth(i[e],n,f)&&(i[e].width=f),this._getColsTotalWidth()},_getColsTotalWidth:function(){for(var t=this.getGridColumns(),e=0,n=0;ns+h&&(u.width=h=g-s),s+=h;var f=t._sort&&u.name==t._sort.name?`
`:"",y=["gantt_grid_head_cell","gantt_grid_head_"+u.name,c?"gantt_last_cell":"",i.grid_header_class(u.name,u)].join(" "),v="width:"+(h-(c?1:0))+"px;",b=u.label||o["column_"+u.name]||o[u.name];b=b||"";var _=""+b+f+"
";r.push(_)}this.$grid_scale.style.height=e.scale_height+"px",this.$grid_scale.style.lineHeight=l+"px",this.$grid_scale.innerHTML=r.join(""),this._renderHeaderResizers&&this._renderHeaderResizers()},_getGridWidth:function(){return this.$config.width},destructor:function(){this._clearLayers(this.$gantt),this._mouseDelegates&&(this._mouseDelegates.destructor(),this._mouseDelegates=null),this._unbindStore(),this.$grid=null,this.$grid_scale=null,this.$grid_data=null,this.$gantt=null,this.$config.rowStore&&(this.$config.rowStore.detachEvent(this._staticBgHandler),this.$config.rowStore=null),this.callEvent("onDestroy",[]),this.detachAllEvents()}};const ka={init:function(t,e){var n=e.$gantt;n.attachEvent("onTaskClick",function(i,a){if(n._is_icon_open_click(a))return!0;var r=t.getState(),s=t.locateCell(a.target);return!s||!t.getEditorConfig(s.columnName)||(t.isVisible()&&r.id==s.id&&r.columnName==s.columnName||t.startEdit(s.id,s.columnName),!1)}),n.attachEvent("onEmptyClick",function(){return t.isVisible()&&t.isChanged()?t.save():t.hide(),!0}),n.attachEvent("onTaskDblClick",function(i,a){var r=t.getState(),s=t.locateCell(a.target);return!s||!t.isVisible()||s.columnName!=r.columnName})},onShow:function(t,e,n){var i=n.$gantt;i.ext&&i.ext.keyboardNavigation&&i.ext.keyboardNavigation.attachEvent("onKeyDown",function(a,r){var s=i.constants.KEY_CODES,o=!1;return r.keyCode===s.SPACE&&t.isVisible()&&(o=!0),!o}),e.onkeydown=function(a){a=a||window.event;var r=i.constants.KEY_CODES;if(!(a.defaultPrevented||a.shiftKey&&a.keyCode!=r.TAB)){var s=!0;switch(a.keyCode){case i.keys.edit_save:t.save();break;case i.keys.edit_cancel:t.hide();break;case r.UP:case r.DOWN:t.isVisible()&&(t.hide(),s=!1);break;case r.TAB:a.shiftKey?t.editPrevCell(!0):t.editNextCell(!0);break;default:s=!1}s&&a.preventDefault()}}},onHide:function(){},destroy:function(){}},ya={init:function(t,e){var n=t,i=e.$gantt,a=null,r=i.ext.keyboardNavigation;r.attachEvent("onBeforeFocus",function(s){var o=t.locateCell(s);if(clearTimeout(a),o){var l=o.columnName,d=o.id,c=n.getState();if(n.isVisible()&&c.id==d&&c.columnName===l)return!1}return!0}),r.attachEvent("onFocus",function(s){var o=t.locateCell(s),l=t.getState();return clearTimeout(a),!o||o.id==l.id&&o.columnName==l.columnName||n.isVisible()&&n.save(),!0}),t.attachEvent("onHide",function(){clearTimeout(a)}),r.attachEvent("onBlur",function(){return a=setTimeout(function(){n.save()}),!0}),i.attachEvent("onTaskDblClick",function(s,o){var l=t.getState(),d=t.locateCell(o.target);return!d||!t.isVisible()||d.columnName!=l.columnName}),i.attachEvent("onTaskClick",function(s,o){if(i._is_icon_open_click(o))return!0;var l=t.getState(),d=t.locateCell(o.target);return!d||!t.getEditorConfig(d.columnName)||(t.isVisible()&&l.id==d.id&&l.columnName==d.columnName||t.startEdit(d.id,d.columnName),!1)}),i.attachEvent("onEmptyClick",function(){return n.save(),!0}),r.attachEvent("onKeyDown",function(s,o){var l=t.locateCell(o.target),d=!!l&&t.getEditorConfig(l.columnName),c=t.getState(),u=i.constants.KEY_CODES,h=o.keyCode,g=!1;switch(h){case u.ENTER:t.isVisible()?(t.save(),o.preventDefault(),g=!0):d&&!(o.ctrlKey||o.metaKey||o.shiftKey)&&(n.startEdit(l.id,l.columnName),o.preventDefault(),g=!0);break;case u.ESC:t.isVisible()&&(t.hide(),o.preventDefault(),g=!0);break;case u.UP:case u.DOWN:break;case u.LEFT:case u.RIGHT:(d&&t.isVisible()||c.editorType==="date")&&(g=!0);break;case u.SPACE:t.isVisible()&&(g=!0),d&&!t.isVisible()&&(n.startEdit(l.id,l.columnName),o.preventDefault(),g=!0);break;case u.DELETE:d&&!t.isVisible()?(n.startEdit(l.id,l.columnName),g=!0):d&&t.isVisible()&&(g=!0);break;case u.TAB:if(t.isVisible()){o.shiftKey?t.editPrevCell(!0):t.editNextCell(!0);var f=t.getState();f.id&&r.focus({type:"taskCell",id:f.id,column:f.columnName}),o.preventDefault(),g=!0}break;default:if(t.isVisible())g=!0;else if(h>=48&&h<=57||h>95&&h<112||h>=64&&h<=91||h>185&&h<193||h>218&&h<223){var y=s.modifiers,v=y.alt||y.ctrl||y.meta||y.shift;y.alt||v&&r.getCommandHandler(s,"taskCell")||d&&!t.isVisible()&&(n.startEdit(l.id,l.columnName),g=!0)}}return!g})},onShow:function(t,e,n){},onHide:function(t,e,n){const i=n.$gantt;i&&i.focus()},destroy:function(){}};function St(t){var e=function(){};return e.prototype={show:function(n,i,a,r){},hide:function(){},set_value:function(n,i,a,r){this.get_input(r).value=n},get_value:function(n,i,a){return this.get_input(a).value||""},is_changed:function(n,i,a,r){var s=this.get_value(i,a,r);return s&&n&&s.valueOf&&n.valueOf?s.valueOf()!=n.valueOf():s!=n},is_valid:function(n,i,a,r){return!0},save:function(n,i,a){},get_input:function(n){return n.querySelector("input")},focus:function(n){var i=this.get_input(n);i&&(i.focus&&i.focus(),i.select&&i.select())}},e}function ba(t){var e=St();function n(){return e.apply(this,arguments)||this}return B(n,e),N(n.prototype,{show:function(i,a,r,s){var o=`
`;s.innerHTML=o}},!0),n}function xa(t){var e=St();function n(){return e.apply(this,arguments)||this}return B(n,e),N(n.prototype,{show:function(i,a,r,s){var o=r.min||0,l=r.max||100,d=`
`;s.innerHTML=d,s.oninput=function(c){+c.target.valuel&&(c.target.value=l)}},get_value:function(i,a,r){return this.get_input(r).value||""},is_valid:function(i,a,r,s){return!isNaN(parseInt(i,10))}},!0),n}function $a(t){var e=St();function n(){return e.apply(this,arguments)||this}return B(n,e),N(n.prototype,{show:function(i,a,r,s){for(var o=``,l=[],d=r.options||[],c=0;c"+d[c].label+"");o+=l.join("")+"
",s.innerHTML=o},get_input:function(i){return i.querySelector("select")}},!0),n}function wa(t){var e=St(),n="%Y-%m-%d",i=null,a=null;function r(){return e.apply(this,arguments)||this}return B(r,e),N(r.prototype,{show:function(s,o,l,d){i||(i=t.date.date_to_str(n)),a||(a=t.date.str_to_date(n));var c=null,u=null;c=typeof l.min=="function"?l.min(s,o):l.min,u=typeof l.max=="function"?l.max(s,o):l.max;var h=`
`;d.innerHTML=h,d.oninput=function(g){+t.date.str_to_date("%Y-%m-%d")(g.target.value)<+c&&(g.target.value=t.date.date_to_str("%Y-%m-%d")(c)),+t.date.str_to_date("%Y-%m-%d")(g.target.value)>+u&&(g.target.value=t.date.date_to_str("%Y-%m-%d")(u))}},set_value:function(s,o,l,d){s&&s.getFullYear?this.get_input(d).value=i(s):this.get_input(d).value=s},is_valid:function(s,o,l,d){return!(!s||isNaN(s.getTime()))},get_value:function(s,o,l){var d;try{d=a(this.get_input(l).value||"")}catch{d=null}return d}},!0),r}function Sa(t){var e=St();function n(){return e.apply(this,arguments)||this}function i(l){return l.formatter||t.ext.formatters.linkFormatter()}function a(l,d){for(var c=(l||"").split(d.delimiter||","),u=0;u `;u.innerHTML=h},hide:function(){},set_value:function(l,d,c,u){this.get_input(u).value=r(l,c.editor,t)},get_value:function(l,d,c){return a(this.get_input(c).value||"",d.editor)},save:function(l,d,c){var u=o(t.getTask(l),this.get_value(l,d,c),d.editor);(u.add.length||u.remove.length)&&t.batchUpdate(function(){u.add.forEach(function(h){t.addLink(h)}),u.remove.forEach(function(h){t.deleteLink(h)}),t.autoSchedule&&t.autoSchedule()})},is_changed:function(l,d,c,u){var h=this.get_value(d,c,u),g=a(r(l,c.editor,t),c.editor);return h.join()!==g.join()}},!0),n}function Ta(t){var e=St();function n(){return e.apply(this,arguments)||this}function i(a){return a.formatter||t.ext.formatters.durationFormatter()}return B(n,e),N(n.prototype,{show:function(a,r,s,o){var l=`
`;o.innerHTML=l},set_value:function(a,r,s,o){this.get_input(o).value=i(s.editor).format(a)},get_value:function(a,r,s){return i(r.editor).parse(this.get_input(s).value||"")}},!0),n}function Ca(t){return function(n,i,a){a=="keepDates"?function(r,s){s=="duration"?r.end_date=t.calculateEndDate(r):s!="end_date"&&s!="start_date"||(r.duration=t.calculateDuration(r))}(n,i):a=="keepDuration"?function(r,s){s=="end_date"?r.start_date=e(r):s!="start_date"&&s!="duration"||(r.end_date=t.calculateEndDate(r))}(n,i):function(r,s){t.config.schedule_from_end?s=="end_date"||s=="duration"?r.start_date=e(r):s=="start_date"&&(r.duration=t.calculateDuration(r)):s=="start_date"||s=="duration"?r.end_date=t.calculateEndDate(r):s=="end_date"&&(r.duration=t.calculateDuration(r))}(n,i)};function e(n){return t.calculateEndDate({start_date:n.end_date,duration:-n.duration,task:n})}}function Ea(t){t.config.editor_types={text:new(ba()),number:new(xa()),select:new($a()),date:new(wa(t)),predecessor:new(Sa(t)),duration:new(Ta(t))}}function Da(t){var e=function(a){var r=null;return{setMapping:function(s){r=s},getMapping:function(){return r||(a.config.keyboard_navigation_cells&&a.ext.keyboardNavigation?ya:ka)}}}(t),n={};nt(n);var i={init:Ea,createEditors:function(a){function r(u,h){var g=a.$getConfig(),f=function(b,_){for(var m=a.$getConfig(),p=a.getItemTop(b),k=a.getItemHeight(b),$=a.getGridColumns(),w=0,x=0,S=0,T=0;T<$.length;T++){if($[T].name==_){S=$[T].width;break}m.rtl?x+=$[T].width:w+=$[T].width}return m.rtl?{top:p,right:x,height:k,width:S}:{top:p,left:w,height:k,width:S}}(u,h),y=document.createElement("div");y.className="gantt_grid_editor_placeholder",y.setAttribute(a.$config.item_attribute,u),y.setAttribute(a.$config.bind+"_id",u),y.setAttribute("data-column-name",h);var v=function(b,_){for(var m=b.getGridColumns(),p=0;p0?t.getNext:t.getPrev,g=(h=t.bind(h,t))(this._itemId);t.isTaskExists(g)&&t.isReadonly(t.getTask(g));)g=h(g);return g},editNextRow:function(u){var h=this.getState().id;if(t.isTaskExists(h)){var g=null;g=u?this.moveRow(1):t.getNext(h),t.isTaskExists(g)&&this.startEdit(g,this._columnName)}},editPrevRow:function(u){var h=this.getState().id;if(t.isTaskExists(h)){var g=null;g=u?this.moveRow(-1):t.getPrev(h),t.isTaskExists(g)&&this.startEdit(g,this._columnName)}},destructor:function(){o.forEach(function(u){d.detachEvent(u)}),l.forEach(function(u){t.detachEvent(u)}),o=[],l=[],d=null,this.hide(),this.detachAllEvents()}};return N(c,e),N(c,n),c}};return N(i,e),N(i,n),i}function ye(t,e,n,i,a){if(!t.start_date||!t.end_date)return null;var r=n.getItemTop(t.id),s=n.getItemHeight(t.id);if(r>e.y_end||r+se.x_end||c
+ End date: ${l.templates.tooltip_date_format(_)}
`},baseline_text:function(b,_,m){return""}})},initTemplate:c}}(e);e.$services.setService("templateLoader",function(){return r}),it(e);var s=new Jn;s.registerProvider("global",function(){var l={min_date:e._min_date,max_date:e._max_date,selected_task:null};return e.$data&&e.$data.tasksStore&&(l.selected_task=e.$data.tasksStore.getSelectedId()),l}),e.getState=s.getState,e.$services.setService("state",function(){return s}),N(e,Hn),e.Promise=Kn,e.env=_t,function(l){var d=Zn.create();N(l,d);var c,u=l.createDatastore({name:"task",type:"treeDatastore",rootId:function(){return l.config.root_id},initItem:R(function(_){this.defined(_.id)||(_.id=this.uid()),_.start_date&&(_.start_date=l.date.parseDate(_.start_date,"parse_date")),_.end_date&&(_.end_date=l.date.parseDate(_.end_date,"parse_date"));var m=null;(_.duration||_.duration===0)&&(_.duration=m=1*_.duration),m&&(_.start_date&&!_.end_date?_.end_date=this.calculateEndDate(_):!_.start_date&&_.end_date&&(_.start_date=this.calculateEndDate({start_date:_.end_date,duration:-_.duration,task:_}))),l.config.deadlines!==!1&&_.deadline&&(_.deadline=l.date.parseDate(_.deadline,"parse_date")),_.progress=Number(_.progress)||0,this._isAllowedUnscheduledTask(_)&&this._set_default_task_timing(_),this._init_task_timing(_),_.start_date&&_.end_date&&this.correctTaskWorkTime(_),_.$source=[],_.$target=[];var p=this.$data.tasksStore.getItem(_.id);return p&&!W(_.open)&&(_.$open=p.$open),_.parent===void 0&&(_.parent=this.config.root_id),_},l),getConfig:function(){return l.config}}),h=l.createDatastore({name:"link",initItem:R(function(_){return this.defined(_.id)||(_.id=this.uid()),_},l)});function g(_){var m=l.isTaskVisible(_);if(!m&&l.isTaskExists(_)){var p=l.getParent(_);l.isTaskExists(p)&&l.isTaskVisible(p)&&(p=l.getTask(p),l.isSplitTask(p)&&(m=!0))}return m}function f(_){if(l.isTaskExists(_.source)){var m=l.getTask(_.source);m.$source=m.$source||[],m.$source.push(_.id)}if(l.isTaskExists(_.target)){var p=l.getTask(_.target);p.$target=p.$target||[],p.$target.push(_.id)}}function y(_){if(l.isTaskExists(_.source)){for(var m=l.getTask(_.source),p=0;pk||+m.end_date<+p)return!1}return!0}),u.attachEvent("onIdChange",function(_,m){l._update_flags(_,m);var p=l.getTask(m);u.isSilent()||(p.$split_subtask||p.rollup)&&l.eachParent(function(k){l.refreshTask(k.id)},m)}),u.attachEvent("onAfterUpdate",function(_){if(l._update_parents(_),l.getState("batchUpdate").batch_update)return!0;var m=u.getItem(_);m.$source||(m.$source=[]);for(var p=0;p-1&&k.click?k.click():(i(n,!0),p=!0)}m==27&&(i(n,!1),p=!0)}return p?(_.preventDefault&&_.preventDefault(),!(_.cancelBubble=!0)):void 0}}var r=vt(t.$root)||document;function s(_){s.cover||(s.cover=document.createElement("div"),s.cover.onkeydown=a,s.cover.className="dhx_modal_cover",document.body.appendChild(s.cover)),s.cover.style.display=_?"inline-block":"none"}function o(_,m,p){return""}function l(){for(var _=[].slice.apply(arguments,[0]),m=0;m<_.length;m++)if(_[m])return _[m]}function d(_,m,p){var k=_.tagName?_:function(x,S,T){var C=document.createElement("div"),E=rt();t._waiAria.messageModalAttr(C,E),C.className=" gantt_modal_box gantt-"+x.type,C.setAttribute(e,1);var D="";if(x.width&&(C.style.width=x.width),x.height&&(C.style.height=x.height),x.title&&(D+='"),D+='"},n.prototype._getRootParent=function(){for(var a=this.$parent;a&&a.$parent;)a=a.$parent;if(a)return a},n.prototype._eachView=function(){var a=[];return i(this._getRootParent(),a),a},n.prototype._getLinkedViews=function(){for(var a=this._eachView(),r=[],s=0;sy[u]&&y[c]>r&&f>y[u]-h+2&&(r=f+(o?0:2),s=y[u]);else{var v=Math.max(y[c]-f,0);(f+=v)>Math.max(y[u]-v,0)&&f>r&&(r=f,s=y[u])}}return{outerScroll:s,innerScroll:r}},n.prototype.scroll=function(a){this._isHorizontal()?this.scrollHorizontally(a):this.scrollVertically(a)},n.prototype.getScrollState=function(){return{visible:this.isVisible(),direction:this.$config.scroll,size:this.$config.outerSize,scrollSize:this.$config.scrollSize||0,position:this.$config.scrollPosition||0}},n.prototype.setSize=function(a,r){t.prototype.setSize.apply(this,arguments);var s=this._getScrollSize(),o=(this._isVertical()?r:a)-this._getScrollOffset()+(this._isHorizontal()?1:0);s.innerScroll&&o>s.outerScroll&&(s.innerScroll+=o-s.outerScroll),this.$config.scrollSize=s.innerScroll,this.$config.width=a,this.$config.height=r,this._setScrollSize(s.innerScroll)},n.prototype.isVisible=function(){return!(!this.$parent||!this.$parent.$view.parentNode)},n.prototype.shouldShow=function(){var a=this._getScrollSize();return!(!a.innerScroll&&this.$parent&&this.$parent.$view.parentNode)&&!(!a.innerScroll||this.$parent&&this.$parent.$view.parentNode)},n.prototype.shouldHide=function(){return!(this._getScrollSize().innerScroll||!this.$parent||!this.$parent.$view.parentNode)},n.prototype.toggleVisibility=function(){this.shouldHide()?this.hide():this.shouldShow()&&this.show()},n.prototype._getScaleOffset=function(a){var r=0;return!a||a.$config.view!="timeline"&&a.$config.view!="grid"||(r=a.$content.$getConfig().scale_height),r},n.prototype._getScrollOffset=function(){var a=0;if(this._isVertical()){var r=this.$parent.$parent;a=Math.max(this._getScaleOffset(r.getPrevSibling(this.$parent.$id)),this._getScaleOffset(r.getNextSibling(this.$parent.$id)))}else for(var s=this._getLinkedViews(),o=0;o=0&&(!a[y]||a.deltaX||a.wheelDeltaX||(g=2*f,f=0)),g&&Math.abs(g)>Math.abs(f)){if(this._isVertical())return;if(s.x||!this.$scroll_hor||!this.$scroll_hor.offsetWidth)return!0;var v=g/-40,b=this._oldLeft,_=b+30*v;if(this.scrollHorizontally(_),this.$scroll_hor.scrollLeft=_,b==this.$scroll_hor.scrollLeft)return!0;this._oldLeft=this.$scroll_hor.scrollLeft}else{if(this._isHorizontal())return;if(s.y||!this.$scroll_ver||!this.$scroll_ver.offsetHeight)return!0;v=f/-40,f===void 0&&(v=a.detail);var m=this._oldTop,p=this.$scroll_ver.scrollTop+30*v;if(this.scrollVertically(p),this.$scroll_ver.scrollTop=p,m==this.$scroll_ver.scrollTop)return!0;this._oldTop=this.$scroll_ver.scrollTop}return a.preventDefault&&a.preventDefault(),a.cancelBubble=!0,!1}},n}(It);function hn(t){var e={},n={},i=null,a=-1,r=null,s=function(o){var l=-1,d=-1;return{resetCache:function(){l=-1,d=-1},_getRowHeight:function(){return l===-1&&(l=o.$getConfig().row_height),l},_refreshState:function(){this.resetCache(),d=!0;var c=o.$config.rowStore;if(c)for(var u=this._getRowHeight(),h=0;h=c&&o",this.$task=t.childNodes[0],this.$task.innerHTML="
",this.$task_scale=this.$task.childNodes[0],this.$task_data=this.$task.childNodes[1],this.$task_data.innerHTML="
",this.$task_bg=this.$task_data.childNodes[0],this.$task_baselines=this.$task_data.childNodes[1],this.$task_links=this.$task_data.childNodes[2],this.$task_bars=this.$task_data.childNodes[3],this.$task_constraints=this.$task_data.childNodes[4],this.$task_deadlines=this.$task_data.childNodes[5],this._tasks={col_width:0,width:[],full_width:0,trace_x:[],rendered:{}};var e=this.$getConfig(),n=e[this.$config.bind+"_attribute"],i=e[this.$config.bindLinks+"_attribute"];!n&&this.$config.bind&&(n="data-"+this.$config.bind+"-id"),!i&&this.$config.bindLinks&&(i="data-"+this.$config.bindLinks+"-id"),this.$config.item_attribute=n||null,this.$config.link_attribute=i||null;var a=this._createLayerConfig();this.$config.layers||(this.$config.layers=a.tasks),this.$config.linkLayers||(this.$config.linkLayers=a.links),this._attachLayers(this.$gantt),this.callEvent("onReady",[]),this.$gantt.ext.dragTimeline&&(this._timelineDragScroll=this.$gantt.ext.dragTimeline.create(),this._timelineDragScroll.attach(this))},setSize:function(t,e){var n=this.$getConfig();if(1*t===t&&(this.$config.width=t),1*e===e){this.$config.height=e;var i=Math.max(this.$config.height-n.scale_height);this.$task_data.style.height=i+"px"}this.refresh(),this.$task_bg.style.backgroundImage="",n.smart_rendering&&this.$config.rowStore?this.$task_bg.style.height=this.getTotalHeight()+"px":this.$task_bg.style.height="";for(var a=this._tasks,r=this.$task_data.childNodes,s=0,o=r.length;s'+this._prepareScaleHtml(t[r],e,n,r)+"")}return i.join("")},_prepareScaleHtml:function(t,e,n,i){var a=this.$getConfig(),r=this.$gantt.templates,s=[],o=null,l=null,d=t.format||t.template||t.date;typeof d=="string"&&(d=this.$gantt.date.date_to_str(d));var c=0,u=t.count;!a.smart_scales||isNaN(e)||isNaN(n)||(c=Tt(t.left,e),u=Tt(t.left,n)+1),l=t.css||function(){},!t.css&&a.inherit_scale_class&&(l=r.scale_cell_class);for(var h=c;hw||k===!0){if(y p.x_end&&f>w){let x=p.x_end-y-10,S="-100%";x${g} `;s.push(m)}}return s.join("")},dateFromPos:function(t){var e=this._tasks;if(t<0||t>e.full_width||!e.full_width)return null;var n=Tt(this._tasks.left,t),i=this._tasks.left[n],a=e.width[n]||e.col_width,r=0;a&&(r=(t-i)/a,e.rtl&&(r=1-r));var s=0;return r&&(s=this._getColumnDuration(e,e.trace_x[n])),new Date(e.trace_x[n].valueOf()+Math.round(r*s))},posFromDate:function(t){if(!this.isVisible()||!t)return 0;var e=String(t.valueOf());if(this._posFromDateCache[e]!==void 0)return this._posFromDateCache[e];var n=this.columnIndexByDate(t);this.$gantt.assert(n>=0,"Invalid day index");var i=Math.floor(n),a=n%1,r=this._tasks.left[Math.min(i,this._tasks.width.length-1)];i==this._tasks.width.length&&(r+=this._tasks.width[this._tasks.width.length-1]),a&&(i=a.max_date)return this._tasks.rtl?0:n.length;var r=Tt(n,e),s=this._getClosestVisibleColumn(r,n,i),o=n[s],l=this._tasks.trace_index_transition;if(!o)return l?l[0]:0;var d=(t-n[s])/this._getColumnDuration(this._tasks,n[s]);return l?l[s]+(1-d):s+d},getItemPosition:function(t,e,n){var i,a,r;let s=e||t.start_date||t.$auto_start_date,o=n||t.end_date||t.$auto_end_date;return this._tasks.rtl?(a=this.posFromDate(s),i=this.posFromDate(o)):(i=this.posFromDate(s),a=this.posFromDate(o)),r=Math.max(a-i,0),{left:i,top:this.getItemTop(t.id),height:this.getBarHeight(t.id),width:r,rowHeight:this.getItemHeight(t.id)}},getBarHeight:function(t,e){var n=this.$getConfig(),i=this.$config.rowStore.getItem(t),a=i.task_height||i.bar_height||n.bar_height||n.task_height,r=this.getItemHeight(t);return a=="full"&&(a=r-(n.bar_height_padding||3)),a=Math.min(a,r),e&&(a=Math.round(a/Math.sqrt(2))),Math.max(a,0)},getScale:function(){return this._tasks},_getScales:function(){var t=this.$getConfig(),e=this.$scaleHelper,n=[e.primaryScale(t)].concat(e.getSubScales(t));return e.sortScales(n),n},_getColumnDuration:function(t,e){return this.$gantt.date.add(e,t.step,t.unit)-e},_bindStore:function(){if(this.$config.bind){var t=this.$gantt.getDatastore(this.$config.bind);if(this.$config.rowStore=t,t&&!t._timelineCacheAttached){var e=this;t._timelineCacheAttached=t.attachEvent("onBeforeFilter",function(){e._resetTopPositionHeight()})}}},_unbindStore:function(){if(this.$config.bind){var t=this.$gantt.getDatastore(this.$config.bind);t&&t._timelineCacheAttached&&(t.detachEvent(t._timelineCacheAttached),t._timelineCacheAttached=!1)}},refresh:function(){this._bindStore(),this.$config.bindLinks&&(this.$config.linkStore=this.$gantt.getDatastore(this.$config.bindLinks)),this._resetTopPositionHeight(),this._resetHeight(),this._initStaticBackgroundRender(),this._render_tasks_scales()},destructor:function(){var t=this.$gantt;this._clearLayers(t),this._unbindStore(),this.$task=null,this.$task_scale=null,this.$task_data=null,this.$task_bg=null,this.$task_links=null,this.$task_bars=null,this.$gantt=null,this.$config.rowStore&&(this.$config.rowStore.detachEvent(this._staticBgHandler),this.$config.rowStore=null),this.$config.linkStore&&(this.$config.linkStore=null),this._timelineDragScroll&&(this._timelineDragScroll.destructor(),this._timelineDragScroll=null),this.callEvent("onDestroy",[]),this.detachAllEvents()}};class ma{constructor(e){this._scrollOrder=0;const{gantt:n,grid:i,dnd:a,getCurrentX:r}=e;this.$gantt=n,this.$grid=i,this._dnd=a,this.getCurrentX=r,this._scrollView=this.$gantt.$ui.getView(this.$grid.$config.scrollX),this.attachEvents()}attachEvents(){this.isScrollable()&&(this._dnd.attachEvent("onDragMove",(e,n)=>{const i=this.$grid.$grid.getBoundingClientRect(),a=i.right,r=i.left,s=this.getCurrentX(n.clientX);return s>=a-20&&(this.autoscrollRight(),this.autoscrollStart()),s<=r+20&&(this.autoscrollLeft(),this.autoscrollStart()),sr+20&&this.autoscrollStop(),!0}),this._dnd.attachEvent("onDragEnd",()=>{this.autoscrollStop()}))}autoscrollStart(){if(this._scrollOrder===0)return;const e=10*this._scrollOrder,n=this._scrollView.getScrollState();this._scrollView.scrollTo(n.position+e),setTimeout(()=>{this.autoscrollStart()},50)}autoscrollRight(){this._scrollOrder=1}autoscrollLeft(){this._scrollOrder=-1}autoscrollStop(){this._scrollOrder=0}getCorrection(){return this.isScrollable()?this._scrollView.getScrollState().position:0}isScrollable(){return!!this.$grid.$config.scrollable}}const _n="data-column-id";class va{constructor(e,n){this._targetMarker=null,this.calculateCurrentPosition=i=>{const a=this.$grid.$grid.getBoundingClientRect(),r=a.right,s=a.left;let o=i;return o>r&&(o=r),o{if(this._draggedCell=this.$gantt.utils.dom.closest(n.target,".gantt_grid_head_cell"),!this._draggedCell)return;const i=this.$grid.$getConfig().columns,a=this._draggedCell.getAttribute(_n);let r,s;return i.map(function(o,l){o.name===a&&(r=o,s=l)}),this.$grid.callEvent("onBeforeColumnDragStart",[{draggedColumn:r,draggedIndex:s}])!==!1&&!(!this._draggedCell||!r)&&(this._gridConfig=this.$grid.$getConfig(),this._originAutoscroll=this.$gantt.config.autoscroll,this.$gantt.config.autoscroll=!1,!0)}),this._dnd.attachEvent("onAfterDragStart",(e,n)=>{this._draggedCell&&(this._dnd.config.column=this._draggedCell.getAttribute(_n),this._dnd.config.marker.innerHTML=this._draggedCell.outerHTML,this._dnd.config.marker.classList.add("gantt_column_drag_marker"),this._dnd.config.marker.style.height=this._gridConfig.scale_height+"px",this._dnd.config.marker.style.lineHeight=this._gridConfig.scale_height+"px",this._draggedCell.classList.add("gantt_grid_head_cell_dragged"))}),this._dnd.attachEvent("onDragMove",(e,n)=>{if(!this._draggedCell)return;this._dragX=n.clientX;const i=this.calculateCurrentPosition(n.clientX),a=this.findColumnsIndexes(),r=a.targetIndex,s=a.draggedIndex,o=this.$grid.$getConfig().columns,l=o[s],d=o[r];return this.$grid.callEvent("onColumnDragMove",[{draggedColumn:l,targetColumn:d,draggedIndex:s,targetIndex:r}])===!1?(this.cleanTargetMarker(),!1):(this.setMarkerPosition(i),this.drawTargetMarker(a),!0)}),this._dnd.attachEvent("onDragEnd",()=>{this._draggedCell&&(this.$gantt.config.autoscroll=this._originAutoscroll,this._draggedCell.classList.remove("gantt_grid_head_cell_dragged"),this.cleanTargetMarker(),this.reorderColumns())})}reorderColumns(){const{targetIndex:e,draggedIndex:n}=this.findColumnsIndexes(),i=this.$grid.$getConfig().columns,a=i[n],r=i[e];this.$grid.callEvent("onBeforeColumnReorder",[{draggedColumn:a,targetColumn:r,draggedIndex:n,targetIndex:e}])!==!1&&e!==n&&(i.splice(n,1),i.splice(e,0,a),this.$gantt.render(),this.$grid.callEvent("onAfterColumnReorder",[{draggedColumn:a,targetColumn:r,draggedIndex:n,targetIndex:e}]))}findColumnsIndexes(){const e=this._dnd.config.column,n=this.$grid.$getConfig().columns;let i,a,r,s;const o={startX:0,endX:0};let l,d=0,c=n.length-1,u=(f,y)=>f<=y,h=f=>++f;this.$gantt.config.rtl&&(d=n.length-1,c=0,u=(f,y)=>f>=y,h=f=>--f);const g=this._dragX-this.$grid.$grid.getBoundingClientRect().left+this._scrollableGrid.getCorrection();for(let f=d;u(f,c)&&(i===void 0||a===void 0);f=h(f))n[f].hide||(o.startX=o.endX,o.endX+=n[f].width,g>=o.startX&&(g<=o.endX||!u(h(f),c))&&(i=f,r=o.startX,s=o.endX,l=(g-o.startX)/(o.endX-o.startX)),e===n[f].name&&(a=f));return{targetIndex:i,draggedIndex:a,xBefore:r,xAfter:s,columnRelativePos:l}}setMarkerPosition(e,n=10){const{marker:i}=this._dnd.config,a=this._dnd._obj.getBoundingClientRect();i.style.top=`${a.y+n}px`,i.style.left=`${e}px`}drawTargetMarker({targetIndex:e,draggedIndex:n,xBefore:i,xAfter:a,columnRelativePos:r}){let s;this._targetMarker||(this._targetMarker=document.createElement("div"),bt(this._targetMarker,"gantt_grid_target_marker"),this._targetMarker.style.display="none",this._targetMarker.style.height=`${this._gridConfig.scale_height}px`),this._targetMarker.parentNode||this.$grid.$grid_scale.appendChild(this._targetMarker),s=e>n?a:e.5?a:i,this._targetMarker.style.left=`${s}px`,this._targetMarker.style.display="block"}cleanTargetMarker(){this._targetMarker&&this._targetMarker.parentNode&&this.$grid.$grid_scale.removeChild(this._targetMarker),this._targetMarker=null}}function me(t){var e=[];return{delegate:function(n,i,a,r){e.push([n,i,a,r]),t.$services.getService("mouseEvents").delegate(n,i,a,r)},destructor:function(){for(var n=t.$services.getService("mouseEvents"),i=0;i",this.$grid=t.childNodes[0],this.$grid.innerHTML="
",this.$grid_scale=this.$grid.childNodes[0],this.$grid_data=this.$grid.childNodes[1];var s=a[this.$config.bind+"_attribute"];if(!s&&this.$config.bind&&(s="data-"+this.$config.bind+"-id"),this.$config.item_attribute=s||null,!this.$config.layers){var o=this._createLayerConfig();this.$config.layers=o}var l={init:function(){},doOnRender:function(){}};this._renderHeaderResizers=l.doOnRender,this._mouseDelegates=me(e);var d=function(c,u){var h={row_before_start:c.bind(function(g,f,y){var v=u.$getConfig(),b=u.$config.rowStore;if(!tt(y,v.task_grid_row_resizer_attribute))return!1;var _=this.locate(y,v.task_grid_row_resizer_attribute),m=b.getItem(_);return u.callEvent("onBeforeRowResize",[m])!==!1&&void 0},c),row_after_start:c.bind(function(g,f,y){var v=u.$getConfig(),b=this.locate(y,v.task_grid_row_resizer_attribute);g.config.marker.innerHTML="",g.config.marker.className+=" gantt_row_grid_resize_area",g.config.marker.style.width=u.$grid.offsetWidth+"px",g.config.drag_id=b},c),row_drag_move:c.bind(function(g,f,y){var v=u.$config.rowStore,b=u.$getConfig(),_=g.config,m=_.drag_id,p=u.getItemHeight(m),k=u.getItemTop(m)-f.scrollTop,$=z(u.$grid_data),w=parseInt(_.marker.style.top,10),x=k+$.y,S=0,T=b.min_task_grid_row_height;return(S=w-x)c.max_width&&(u=c.max_width-c.width),a-=c.width,c.width+=u,l-=u}for(var h=l>0?1:-1;l>0&&h===1||l<0&&h===-1;){var g=l;for(s=e+1;s-1&&(f=i[e].width+l)==this._getColumnWidth(i[e],n,f)&&(i[e].width=f),this._getColsTotalWidth()},_getColsTotalWidth:function(){for(var t=this.getGridColumns(),e=0,n=0;ns+h&&(u.width=h=g-s),s+=h;var f=t._sort&&u.name==t._sort.name?`
`:"",y=["gantt_grid_head_cell","gantt_grid_head_"+u.name,c?"gantt_last_cell":"",i.grid_header_class(u.name,u)].join(" "),v="width:"+(h-(c?1:0))+"px;",b=u.label||o["column_"+u.name]||o[u.name];b=b||"";var _=""+b+f+"
";r.push(_)}this.$grid_scale.style.height=e.scale_height+"px",this.$grid_scale.style.lineHeight=l+"px",this.$grid_scale.innerHTML=r.join(""),this._renderHeaderResizers&&this._renderHeaderResizers()},_getGridWidth:function(){return this.$config.width},destructor:function(){this._clearLayers(this.$gantt),this._mouseDelegates&&(this._mouseDelegates.destructor(),this._mouseDelegates=null),this._unbindStore(),this.$grid=null,this.$grid_scale=null,this.$grid_data=null,this.$gantt=null,this.$config.rowStore&&(this.$config.rowStore.detachEvent(this._staticBgHandler),this.$config.rowStore=null),this.callEvent("onDestroy",[]),this.detachAllEvents()}};const ka={init:function(t,e){var n=e.$gantt;n.attachEvent("onTaskClick",function(i,a){if(n._is_icon_open_click(a))return!0;var r=t.getState(),s=t.locateCell(a.target);return!s||!t.getEditorConfig(s.columnName)||(t.isVisible()&&r.id==s.id&&r.columnName==s.columnName||t.startEdit(s.id,s.columnName),!1)}),n.attachEvent("onEmptyClick",function(){return t.isVisible()&&t.isChanged()?t.save():t.hide(),!0}),n.attachEvent("onTaskDblClick",function(i,a){var r=t.getState(),s=t.locateCell(a.target);return!s||!t.isVisible()||s.columnName!=r.columnName})},onShow:function(t,e,n){var i=n.$gantt;i.ext&&i.ext.keyboardNavigation&&i.ext.keyboardNavigation.attachEvent("onKeyDown",function(a,r){var s=i.constants.KEY_CODES,o=!1;return r.keyCode===s.SPACE&&t.isVisible()&&(o=!0),!o}),e.onkeydown=function(a){a=a||window.event;var r=i.constants.KEY_CODES;if(!(a.defaultPrevented||a.shiftKey&&a.keyCode!=r.TAB)){var s=!0;switch(a.keyCode){case i.keys.edit_save:t.save();break;case i.keys.edit_cancel:t.hide();break;case r.UP:case r.DOWN:t.isVisible()&&(t.hide(),s=!1);break;case r.TAB:a.shiftKey?t.editPrevCell(!0):t.editNextCell(!0);break;default:s=!1}s&&a.preventDefault()}}},onHide:function(){},destroy:function(){}},ya={init:function(t,e){var n=t,i=e.$gantt,a=null,r=i.ext.keyboardNavigation;r.attachEvent("onBeforeFocus",function(s){var o=t.locateCell(s);if(clearTimeout(a),o){var l=o.columnName,d=o.id,c=n.getState();if(n.isVisible()&&c.id==d&&c.columnName===l)return!1}return!0}),r.attachEvent("onFocus",function(s){var o=t.locateCell(s),l=t.getState();return clearTimeout(a),!o||o.id==l.id&&o.columnName==l.columnName||n.isVisible()&&n.save(),!0}),t.attachEvent("onHide",function(){clearTimeout(a)}),r.attachEvent("onBlur",function(){return a=setTimeout(function(){n.save()}),!0}),i.attachEvent("onTaskDblClick",function(s,o){var l=t.getState(),d=t.locateCell(o.target);return!d||!t.isVisible()||d.columnName!=l.columnName}),i.attachEvent("onTaskClick",function(s,o){if(i._is_icon_open_click(o))return!0;var l=t.getState(),d=t.locateCell(o.target);return!d||!t.getEditorConfig(d.columnName)||(t.isVisible()&&l.id==d.id&&l.columnName==d.columnName||t.startEdit(d.id,d.columnName),!1)}),i.attachEvent("onEmptyClick",function(){return n.save(),!0}),r.attachEvent("onKeyDown",function(s,o){var l=t.locateCell(o.target),d=!!l&&t.getEditorConfig(l.columnName),c=t.getState(),u=i.constants.KEY_CODES,h=o.keyCode,g=!1;switch(h){case u.ENTER:t.isVisible()?(t.save(),o.preventDefault(),g=!0):d&&!(o.ctrlKey||o.metaKey||o.shiftKey)&&(n.startEdit(l.id,l.columnName),o.preventDefault(),g=!0);break;case u.ESC:t.isVisible()&&(t.hide(),o.preventDefault(),g=!0);break;case u.UP:case u.DOWN:break;case u.LEFT:case u.RIGHT:(d&&t.isVisible()||c.editorType==="date")&&(g=!0);break;case u.SPACE:t.isVisible()&&(g=!0),d&&!t.isVisible()&&(n.startEdit(l.id,l.columnName),o.preventDefault(),g=!0);break;case u.DELETE:d&&!t.isVisible()?(n.startEdit(l.id,l.columnName),g=!0):d&&t.isVisible()&&(g=!0);break;case u.TAB:if(t.isVisible()){o.shiftKey?t.editPrevCell(!0):t.editNextCell(!0);var f=t.getState();f.id&&r.focus({type:"taskCell",id:f.id,column:f.columnName}),o.preventDefault(),g=!0}break;default:if(t.isVisible())g=!0;else if(h>=48&&h<=57||h>95&&h<112||h>=64&&h<=91||h>185&&h<193||h>218&&h<223){var y=s.modifiers,v=y.alt||y.ctrl||y.meta||y.shift;y.alt||v&&r.getCommandHandler(s,"taskCell")||d&&!t.isVisible()&&(n.startEdit(l.id,l.columnName),g=!0)}}return!g})},onShow:function(t,e,n){},onHide:function(t,e,n){const i=n.$gantt;i&&i.focus()},destroy:function(){}};function St(t){var e=function(){};return e.prototype={show:function(n,i,a,r){},hide:function(){},set_value:function(n,i,a,r){this.get_input(r).value=n},get_value:function(n,i,a){return this.get_input(a).value||""},is_changed:function(n,i,a,r){var s=this.get_value(i,a,r);return s&&n&&s.valueOf&&n.valueOf?s.valueOf()!=n.valueOf():s!=n},is_valid:function(n,i,a,r){return!0},save:function(n,i,a){},get_input:function(n){return n.querySelector("input")},focus:function(n){var i=this.get_input(n);i&&(i.focus&&i.focus(),i.select&&i.select())}},e}function ba(t){var e=St();function n(){return e.apply(this,arguments)||this}return B(n,e),N(n.prototype,{show:function(i,a,r,s){var o=`
`;s.innerHTML=o}},!0),n}function xa(t){var e=St();function n(){return e.apply(this,arguments)||this}return B(n,e),N(n.prototype,{show:function(i,a,r,s){var o=r.min||0,l=r.max||100,d=`
`;s.innerHTML=d,s.oninput=function(c){+c.target.valuel&&(c.target.value=l)}},get_value:function(i,a,r){return this.get_input(r).value||""},is_valid:function(i,a,r,s){return!isNaN(parseInt(i,10))}},!0),n}function $a(t){var e=St();function n(){return e.apply(this,arguments)||this}return B(n,e),N(n.prototype,{show:function(i,a,r,s){for(var o=``,l=[],d=r.options||[],c=0;c"+d[c].label+"");o+=l.join("")+"
",s.innerHTML=o},get_input:function(i){return i.querySelector("select")}},!0),n}function wa(t){var e=St(),n="%Y-%m-%d",i=null,a=null;function r(){return e.apply(this,arguments)||this}return B(r,e),N(r.prototype,{show:function(s,o,l,d){i||(i=t.date.date_to_str(n)),a||(a=t.date.str_to_date(n));var c=null,u=null;c=typeof l.min=="function"?l.min(s,o):l.min,u=typeof l.max=="function"?l.max(s,o):l.max;var h=`
`;d.innerHTML=h,d.oninput=function(g){+t.date.str_to_date("%Y-%m-%d")(g.target.value)<+c&&(g.target.value=t.date.date_to_str("%Y-%m-%d")(c)),+t.date.str_to_date("%Y-%m-%d")(g.target.value)>+u&&(g.target.value=t.date.date_to_str("%Y-%m-%d")(u))}},set_value:function(s,o,l,d){s&&s.getFullYear?this.get_input(d).value=i(s):this.get_input(d).value=s},is_valid:function(s,o,l,d){return!(!s||isNaN(s.getTime()))},get_value:function(s,o,l){var d;try{d=a(this.get_input(l).value||"")}catch{d=null}return d}},!0),r}function Sa(t){var e=St();function n(){return e.apply(this,arguments)||this}function i(l){return l.formatter||t.ext.formatters.linkFormatter()}function a(l,d){for(var c=(l||"").split(d.delimiter||","),u=0;u `;u.innerHTML=h},hide:function(){},set_value:function(l,d,c,u){this.get_input(u).value=r(l,c.editor,t)},get_value:function(l,d,c){return a(this.get_input(c).value||"",d.editor)},save:function(l,d,c){var u=o(t.getTask(l),this.get_value(l,d,c),d.editor);(u.add.length||u.remove.length)&&t.batchUpdate(function(){u.add.forEach(function(h){t.addLink(h)}),u.remove.forEach(function(h){t.deleteLink(h)}),t.autoSchedule&&t.autoSchedule()})},is_changed:function(l,d,c,u){var h=this.get_value(d,c,u),g=a(r(l,c.editor,t),c.editor);return h.join()!==g.join()}},!0),n}function Ta(t){var e=St();function n(){return e.apply(this,arguments)||this}function i(a){return a.formatter||t.ext.formatters.durationFormatter()}return B(n,e),N(n.prototype,{show:function(a,r,s,o){var l=`
`;o.innerHTML=l},set_value:function(a,r,s,o){this.get_input(o).value=i(s.editor).format(a)},get_value:function(a,r,s){return i(r.editor).parse(this.get_input(s).value||"")}},!0),n}function Ca(t){return function(n,i,a){a=="keepDates"?function(r,s){s=="duration"?r.end_date=t.calculateEndDate(r):s!="end_date"&&s!="start_date"||(r.duration=t.calculateDuration(r))}(n,i):a=="keepDuration"?function(r,s){s=="end_date"?r.start_date=e(r):s!="start_date"&&s!="duration"||(r.end_date=t.calculateEndDate(r))}(n,i):function(r,s){t.config.schedule_from_end?s=="end_date"||s=="duration"?r.start_date=e(r):s=="start_date"&&(r.duration=t.calculateDuration(r)):s=="start_date"||s=="duration"?r.end_date=t.calculateEndDate(r):s=="end_date"&&(r.duration=t.calculateDuration(r))}(n,i)};function e(n){return t.calculateEndDate({start_date:n.end_date,duration:-n.duration,task:n})}}function Ea(t){t.config.editor_types={text:new(ba()),number:new(xa()),select:new($a()),date:new(wa(t)),predecessor:new(Sa(t)),duration:new(Ta(t))}}function Da(t){var e=function(a){var r=null;return{setMapping:function(s){r=s},getMapping:function(){return r||(a.config.keyboard_navigation_cells&&a.ext.keyboardNavigation?ya:ka)}}}(t),n={};it(n);var i={init:Ea,createEditors:function(a){function r(u,h){var g=a.$getConfig(),f=function(b,_){for(var m=a.$getConfig(),p=a.getItemTop(b),k=a.getItemHeight(b),$=a.getGridColumns(),w=0,x=0,S=0,T=0;T<$.length;T++){if($[T].name==_){S=$[T].width;break}m.rtl?x+=$[T].width:w+=$[T].width}return m.rtl?{top:p,right:x,height:k,width:S}:{top:p,left:w,height:k,width:S}}(u,h),y=document.createElement("div");y.className="gantt_grid_editor_placeholder",y.setAttribute(a.$config.item_attribute,u),y.setAttribute(a.$config.bind+"_id",u),y.setAttribute("data-column-name",h);var v=function(b,_){for(var m=b.getGridColumns(),p=0;p0?t.getNext:t.getPrev,g=(h=t.bind(h,t))(this._itemId);t.isTaskExists(g)&&t.isReadonly(t.getTask(g));)g=h(g);return g},editNextRow:function(u){var h=this.getState().id;if(t.isTaskExists(h)){var g=null;g=u?this.moveRow(1):t.getNext(h),t.isTaskExists(g)&&this.startEdit(g,this._columnName)}},editPrevRow:function(u){var h=this.getState().id;if(t.isTaskExists(h)){var g=null;g=u?this.moveRow(-1):t.getPrev(h),t.isTaskExists(g)&&this.startEdit(g,this._columnName)}},destructor:function(){o.forEach(function(u){d.detachEvent(u)}),l.forEach(function(u){t.detachEvent(u)}),o=[],l=[],d=null,this.hide(),this.detachAllEvents()}};return N(c,e),N(c,n),c}};return N(i,e),N(i,n),i}function ke(t,e,n,i,a){if(!t.start_date||!t.end_date)return null;var r=n.getItemTop(t.id),s=n.getItemHeight(t.id);if(r>e.y_end||r+se.x_end||c
-`,A.appendChild(L),S.appendChild(L)}}(r,b,_,d,c);var m=function(x,S,T){var C=document.createElement("div");return t.getTaskType(x.type)!=t.config.types.milestone?C.innerHTML=T.task_text(x.start_date,x.end_date,x):t.getTaskType(x.type)==t.config.types.milestone&&S&&(C.style.height=C.style.width=S+"px"),C.className="gantt_task_content",C}(r,_,c);r.textColor&&(m.style.color=r.textColor),b.appendChild(m);var p=function(x,S,T,C){var E=C.$getConfig(),D=[x];S&&D.push(S);var A=t.getState(),I=t.getTask(T);if(t.getTaskType(I.type)==E.types.milestone?D.push("gantt_milestone"):t.getTaskType(I.type)==E.types.project&&D.push("gantt_project"),D.push("gantt_bar_"+t.getTaskType(I.type)),t.isSummaryTask(I)&&D.push("gantt_dependent_task"),t.isSplitTask(I)&&(E.open_split_tasks&&!I.$open||!E.open_split_tasks)&&D.push("gantt_split_parent"),E.select_task&&t.isSelectedTask(T)&&D.push("gantt_selected"),T==A.drag_id&&(D.push("gantt_drag_"+A.drag_mode),A.touch_drag&&D.push("gantt_touch_"+A.drag_mode)),A.link_source_id==T&&(D.push("gantt_link_source"),A.link_from_start?D.push("gantt_link_from_start"):D.push("gantt_link_from_end")),A.link_target_id==T&&D.push("gantt_link_target"),E.highlight_critical_path&&t.isCriticalTask&&t.isCriticalTask(I)&&D.push("gantt_critical_task"),A.link_landing_area&&A.link_target_id&&A.link_source_id&&A.link_target_id!=A.link_source_id&&(A.link_target_id==T||A.link_source_id==T)){var M=A.link_source_id,L=A.link_from_start,P=A.link_to_start,H="";H=t.isLinkAllowed(M,T,L,P)?P?"link_start_allow":"link_finish_allow":P?"link_start_deny":"link_finish_deny",D.push(H)}return D.join(" ")}("gantt_task_line",c.task_class(r.start_date,r.end_date,r),r.id,s);(r.color||r.progressColor||r.textColor)&&(p+=" gantt_task_inline_color"),l.width<20&&(p+=" gantt_thin_task"),b.className=p;var k=["left:"+l.left+"px","top:"+(f+l.top)+"px","height:"+h+"px","line-height:"+Math.max(h<30?h-2:h,0)+"px","width:"+_+"px"];b.style.cssText=k.join(";"),r.color&&b.style.setProperty("--dhx-gantt-task-background",r.color),r.textColor&&b.style.setProperty("--dhx-gantt-task-color",r.textColor),r.progressColor&&b.style.setProperty("--dhx-gantt-task-progress-color",r.progressColor);var $=function(x,S,T,C){var E="gantt_left "+i(!S.rtl,x),D=null;return C&&(D={type:"marginRight",value:C}),n(x,T.leftside_text,E,D)}(r,d,c,g);$&&b.appendChild($),$=function(x,S,T,C){var E="gantt_right "+i(!!S.rtl,x),D=null;return C&&(D={type:"marginLeft",value:C}),n(x,T.rightside_text,E,D)}(r,d,c,g),$&&b.appendChild($),t._waiAria.setTaskBarAttr(r,b);var w=t.getState();return t.isReadonly(r)||(d.drag_resize&&!t.isSummaryTask(r)&&u!=d.types.milestone&&a(b,"gantt_task_drag",r,function(x){var S=document.createElement("div");return S.className=x,S},d),d.drag_links&&d.show_links&&a(b,"gantt_link_control",r,function(x){var S=document.createElement("div");S.className=x,S.style.cssText=["height:"+h+"px","line-height:"+h+"px"].join(";");var T=document.createElement("div");T.className="gantt_link_point";var C=!1;return w.link_source_id&&d.touch&&(C=!0),T.style.display=C?"block":"",S.appendChild(T),S},d,g)),b}function n(r,s,o,l){if(!s)return null;var d=s(r.start_date,r.end_date,r);if(!d)return null;var c=document.createElement("div");return c.className="gantt_side_content "+o,c.innerHTML=d,l&&(c.style[l.type]=Math.abs(l.value)+"px"),c}function i(r,s){var o=r?{$source:[t.config.links.start_to_start],$target:[t.config.links.start_to_start,t.config.links.finish_to_start]}:{$source:[t.config.links.finish_to_start,t.config.links.finish_to_finish],$target:[t.config.links.finish_to_finish]};for(var l in o)for(var d=s[l],c=0;c=+h.min_date&&((u=l([s,d.rtl?"task_right":"task_left","task_start_date"].join(" "))).setAttribute("data-bind-property","start_date"),c&&(u.style.marginLeft=c+"px"),r.appendChild(u)),+o.end_date<=+h.max_date&&((u=l([s,d.rtl?"task_left":"task_right","task_end_date"].join(" "))).setAttribute("data-bind-property","end_date"),c&&(u.style.marginRight=c+"px"),r.appendChild(u))}return function(r,s,o){var l=(o=s.$getConfig()).type_renderers[t.getTaskType(r.type)],d=e;return l?l.call(t,r,function(c){return d.call(t,c,s,o)},s):d.call(t,r,s,o)}}function fn(t){return{render:gn(t),update:null,isInViewPort:ye,getVisibleRange:gt}}function Mt(){return console.error("You are trying to use a Pro feature that is not available in the GPL version."),{render:function(){},isInViewPort:function(){},getVisibleRange:function(){}}}function pn(t,e,n){return{top:e.getItemTop(t.id),height:e.getItemHeight(t.id),left:0,right:1/0}}function Ut(t,e){var n=0,i=t.left.length-1;if(e)for(var a=0;ae.x_end){i=a;break}}return{start:n,end:i}}function be(t,e,n,i){var a=e.width[t];if(a<=0)return!1;if(!i.config.smart_rendering||At(i))return!0;var r=e.left[t]-a,s=e.left[t]+a;return r<=n.x_end&&s>=n.x}function Aa(t,e){var n=e.config.timeline_placeholder;if(t=t||[],n&&t.filter(l=>l.id==="timeline_placeholder_task").length===0){var i=e.getState(),a=null,r=i.min_date,s=i.max_date;t.length&&(a=t[t.length-1].id);var o={start_date:r,end_date:s,row_height:n.height||0,id:"timeline_placeholder_task",unscheduled:!0,lastTaskId:a,calendar_id:n.calendar||"global",$source:[],$target:[]};t.push(o)}}function Ia(t){var e={current_pos:null,dirs:{left:"left",right:"right",up:"up",down:"down"},path:[],clear:function(){this.current_pos=null,this.path=[]},point:function(a){this.current_pos=t.copy(a)},get_lines:function(a){this.clear(),this.point(a[0]);for(var r=1;ra.x?this.dirs.right:r.y>a.y?this.dirs.down:this.dirs.up}},n={path:[],clear:function(){this.path=[]},current:function(){return this.path[this.path.length-1]},point:function(a){return a?(this.path.push(t.copy(a)),a):this.current()},point_to:function(a,r,s){s=s?{x:s.x,y:s.y}:t.copy(this.point());var o=e.dirs;switch(a){case o.left:s.x-=r;break;case o.right:s.x+=r;break;case o.up:s.y-=r;break;case o.down:s.y+=r}return this.point(s)},get_points:function(a,r,s,o){var l=this.get_endpoint(a,r,s,o),d=t.config,c=l.e_y-l.y,u=l.e_x-l.x,h=e.dirs,g=r.getItemHeight(a.source);this.clear(),this.point({x:l.x,y:l.y});var f=2*d.link_arrow_size,y=this.get_line_type(a,r.$getConfig()),v=l.e_x>l.x;if(y.from_start&&y.to_start)this.point_to(h.left,f),v?(this.point_to(h.down,c),this.point_to(h.right,u)):(this.point_to(h.right,u),this.point_to(h.down,c)),this.point_to(h.right,f);else if(!y.from_start&&y.to_start)if(v=l.e_x>l.x+2*f,this.point_to(h.right,f),v)u-=f,this.point_to(h.down,c),this.point_to(h.right,u);else{u-=2*f;var b=c>0?1:-1;this.point_to(h.down,b*(g/2)),this.point_to(h.right,u),this.point_to(h.down,b*(Math.abs(c)-g/2)),this.point_to(h.right,f)}else y.from_start||y.to_start?y.from_start&&!y.to_start&&(v=l.e_x>l.x-2*f,this.point_to(h.left,f),v?(u+=2*f,b=c>0?1:-1,this.point_to(h.down,b*(g/2)),this.point_to(h.right,u),this.point_to(h.down,b*(Math.abs(c)-g/2)),this.point_to(h.left,f)):(u+=f,this.point_to(h.down,c),this.point_to(h.right,u))):(this.point_to(h.right,f),v?(this.point_to(h.right,u),this.point_to(h.down,c)):(this.point_to(h.down,c),this.point_to(h.right,u)),this.point_to(h.left,f));return this.path},get_line_type:function(a,r){var s=r.links,o=!1,l=!1;return a.type==s.start_to_start?o=l=!0:a.type==s.finish_to_finish?o=l=!1:a.type==s.finish_to_start?(o=!1,l=!0):a.type==s.start_to_finish?(o=!0,l=!1):t.assert(!1,"Invalid link type"),r.rtl&&(o=!o,l=!l),{from_start:o,to_start:l}},get_endpoint:function(a,r,s,o){var l=r.$getConfig(),d=this.get_line_type(a,l),c=d.from_start,u=d.to_start,h=i(s,r,l),g=i(o,r,l);return{x:c?h.left:h.left+h.width,e_x:u?g.left:g.left+g.width,y:h.top+h.rowHeight/2-1,e_y:g.top+g.rowHeight/2-1}}};function i(a,r,s){var o=r.getItemPosition(a);let l=_i(t,r,a),d=l.maxHeight,c=l.splitChild;const u=t.config.baselines!==!1&&(t.config.baselines.render_mode=="separateRow"||t.config.baselines.render_mode=="individualRow")&&a.baselines&&a.baselines.length;let h;l.shrinkHeight&&(o.rowHeight=d);let g=t.getTaskType(a.type)==s.types.milestone;if(g){let f=r.getBarHeight(a.id,!0);h=Math.sqrt(2*f*f),l.shrinkHeight&&d=o.height){const f=hi(t,a.parent);u||f?g?(o.rowHeight=o.height+4,o.left+=(o.width-o.rowHeight+4)/2,o.width=o.rowHeight-3):o.rowHeight=o.height+6:g&&(o.left+=(h-o.height)/2)}else o.rowHeight=d+2,g&&(o.left+=(o.width-o.rowHeight+4)/2,o.width=o.rowHeight-3);else u&&(o.rowHeight=o.height+4);return o}return{render:function(a,r,s){var o=t.getTask(a.source);if(o.hide_bar)return;var l=t.getTask(a.target);if(l.hide_bar)return;var d=n.get_endpoint(a,r,o,l),c=d.e_y-d.y;if(!(d.e_x-d.x)&&!c)return null;var u=n.get_points(a,r,o,l);const h=function(v,b){const _=b.link_radius||4,m=b.link_arrow_size||6,p=[];for(let $=0;$v.size>0),s),g=function(v,b,_,m){const p=document.createElement("div");return v.forEach(k=>{let $;k.type==="line"?$=e.render_line(k.data,null,b,_.source):k.type==="corner"?$=e.render_corner(k.data,b):k.type==="arrow"&&($=e.render_arrow(k.data,m)),p.appendChild($)}),p}(h,r,a,s);var f="gantt_task_link";a.color&&(f+=" gantt_link_inline_color");var y=t.templates.link_class?t.templates.link_class(a):"";return y&&(f+=" "+y),s.highlight_critical_path&&t.isCriticalLink&&t.isCriticalLink(a)&&(f+=" gantt_critical_link"),g.className=f,r.$config.link_attribute&&(g.setAttribute(r.$config.link_attribute,a.id),g.setAttribute("link_id",a.id)),a.color&&g.style.setProperty("--dhx-gantt-link-background",a.color),t._waiAria.linkAttr(a,g),g},update:null,isInViewPort:cn,getVisibleRange:dn()}}function Ma(t,e,n,i,a){if(a.$ui.getView("grid")&&(a.config.keyboard_navigation&&a.getSelectedId()||a.ext.inlineEditors&&a.ext.inlineEditors.getState().id))return!0;var r=n.getItemTop(t.id),s=n.getItemHeight(t.id);return!(r>e.y_end||r+sl.y+h-u&&(c=l.y+h-u);const g=l.y+l.height;return c>g-u&&(c=g-u),l.x=d,l.y=c,l},t),i._getTargetY=t.bind(function(o){var l=z(e.$grid_data),d=e.$state.scrollTop||0,c=t.$grid_data.getBoundingClientRect().height+d,u=o.pageY-l.y+d;return u>c?u=c:ud.countVisible()-1?null:d.getIdByIndex(c)},t),i.attachEvent("onDragMove",t.bind(function(o,l){var d=t.$grid_data.getBoundingClientRect(),c=d.height+d.y+(e.$state.scrollTop||0)+window.scrollY,u=i.config,h=i._getGridPos(l);t._waiAria.reorderMarkerAttr(u.marker);var g=e.$getConfig(),f=r();h.yy.width&&(u.marker.style.width=y.width-10-2+"px",u.marker.style.overflow="hidden");var v=f.getItem(i.config.id),b=i._getTargetY(l),_=i._getTaskByY(b,f.getIndexById(v.id));function m(D,A){return!f.isChildOf(p.id,A.id)&&(D.$level==A.$level||g.order_branch_free)}if(f.exists(_)||(_=i.lastTaskOfLevel(g.order_branch_free?v.$level:0))==i.config.id&&(_=null),f.exists(_)){var p=f.getItem(_),k=e.getItemTop(p.id),$=e.getItemHeight(p.id);if(k+$/2=0;)T=f.getIdByIndex(w-E),C=f.getItem(T),E++;if(v.id==p.id||s(p.id))return;m(p,v)&&v.id!=p.id?f.move(v.id,0,0,p.id):p.$level!=v.$level-1||f.getChildren(p.id).length?C&&m(C,v)&&v.id!=C.id&&f.move(v.id,-1,f.getParent(C.id)):f.move(v.id,0,p.id)}return!0},t)),i.attachEvent("onDragEnd",t.bind(function(){var o=r(),l=o.getItem(i.config.id);l.$transparent=!1,l.$open=i.config.initial_open_state,this.callEvent("onBeforeRowDragEnd",[i.config.id,i.config.parent,i.config.index])===!1?(o.move(i.config.id,i.config.index,i.config.parent),l.$drop_target=null):this.callEvent("onRowDragEnd",[i.config.id,l.$drop_target]),t.render(),this.refreshData()},t))}function a(o){return tt(o,e.$config.item_attribute)}function r(){return t.getDatastore(e.$config.bind)}function s(o){return Ct(o,t,r())}}},Z={createDropTargetObject:function(t){var e={targetParent:null,targetIndex:0,targetId:null,child:!1,nextSibling:!1,prevSibling:!1};return t&&N(e,t,!0),e},nextSiblingTarget:function(t,e,n){var i=this.createDropTargetObject();return i.targetId=e,i.nextSibling=!0,i.targetParent=n.getParent(i.targetId),i.targetIndex=n.getBranchIndex(i.targetId),(n.getParent(t)!=i.targetParent||i.targetIndexn.getBranchIndex(t)&&(i.targetIndex-=1),i},firstChildTarget:function(t,e,n){var i=this.createDropTargetObject();return i.targetId=e,i.targetParent=i.targetId,i.targetIndex=0,i.child=!0,i},lastChildTarget:function(t,e,n){var i=n.getChildren(e),a=this.createDropTargetObject();return a.targetId=i[i.length-1],a.targetParent=e,a.targetIndex=i.length,a.nextSibling=!0,a}};function mn(t,e,n,i,a){for(var r=e;i.exists(r);){var s=i.calculateItemLevel(i.getItem(r));if((s===n||s===n-1)&&i.getBranchIndex(r)>-1)break;r=a?i.getPrev(r):i.getNext(r)}return i.exists(r)?i.calculateItemLevel(i.getItem(r))===n?a?Z.nextSiblingTarget(t,r,i):Z.prevSiblingTarget(t,r,i):Z.firstChildTarget(t,r,i):null}function xe(t,e,n,i){return mn(t,e,n,i,!0)}function vn(t,e,n,i){return mn(t,e,n,i,!1)}function kn(t,e,n,i,a,r){var s;if(e!==a.$getRootId()){var o=a.getItem(e),l=a.calculateItemLevel(o);if(l===r){var d=a.getPrevSibling(e);n<.5&&!d?s=Z.prevSiblingTarget(t,e,a):(n<.5&&(e=d),s=Z.nextSiblingTarget(t,e,a))}else if(l>r)a.eachParent(function(f){a.calculateItemLevel(f)===r&&(e=f.id)},o),s=xe(t,e,r,a);else{var c=xe(t,e,r,a),u=vn(t,e,r,a);s=n<.5?c:u}}else{var h=a.$getRootId(),g=a.getChildren(h);s=Z.createDropTargetObject(),s=g.length&&i>=0?xe(t,function(f){for(var y=f.getNext();f.exists(y);){var v=f.getNext(y);if(!f.exists(v))return y;y=v}return null}(a),r,a):vn(t,h,r,a)}return s}function yn(t,e){var n=z(e.$grid_data);return t.x+=n.x+e.$grid.scrollLeft,t.y+=n.y-e.$grid_data.scrollTop,t}function $e(t,e,n=0){const i=z(t.$root);return e>i.width&&(e=i.width-n-2),e}const bn={removeLineHighlight:function(t){t.markerLine&&t.markerLine.parentNode&&t.markerLine.parentNode.removeChild(t.markerLine),t.markerLine=null},highlightPosition:function(t,e,n){var i=function(r,s){var o=z(s.$grid_data),l=ot(r,s.$grid_data),d=o.x+s.$grid.scrollLeft,c=l.y-10,u=s.getItemHeight(r.targetId);co.y+h-u&&(c=o.y+h-u),o.x=d,o.y=c,o.width=$e(s.$gantt,o.width,9),o}(t,n);e.marker.style.left=i.x+9+"px",e.marker.style.width=i.width+"px",e.marker.style.overflow="hidden";var a=e.markerLine;a||((a=document.createElement("div")).className="gantt_drag_marker gantt_grid_dnd_marker",a.innerHTML="
",a.style.pointerEvents="none"),t.child?function(r,s,o){var l=r.targetParent,d=yn({x:0,y:o.getItemTop(l)},o),c=o.$grid_data.getBoundingClientRect().bottom+window.scrollY;let u=$e(o.$gantt,o.$grid_data.offsetWidth);s.innerHTML="
",s.style.width=u+"px",s.style.top=d.y+"px",s.style.left=d.x+"px",s.style.height=o.getItemHeight(l)+"px",d.y>c&&(s.style.top=c+"px")}(t,a,n):function(r,s,o){var l=function(u,h){var g=h.$config.rowStore,f={x:0,y:0},y=h.$grid_data.querySelector(".gantt_tree_indent"),v=15,b=0;y&&(v=y.offsetWidth);var _=40;if(u.targetId!==g.$getRootId()){var m=h.getItemTop(u.targetId),p=h.getItemHeight(u.targetId);if(b=g.exists(u.targetId)?g.calculateItemLevel(g.getItem(u.targetId)):0,u.prevSibling)f.y=m;else if(u.nextSibling){var k=0;g.eachItem(function($){g.getIndexById($.id)!==-1&&k++},u.targetId),f.y=m+p+k*p}else f.y=m+p,b+=1}return f.x=_+b*v,f.width=$e(h.$gantt,Math.max(h.$grid_data.offsetWidth-f.x,0),f.x),yn(f,h)}(r,o),d=o.$grid_data.getBoundingClientRect().bottom+window.scrollY;s.innerHTML="
",s.style.left=l.x+"px",s.style.height="4px";var c=l.y-2;s.style.top=c+"px",s.style.width=l.width+"px",c>d&&(s.style.top=d+"px")}(t,a,n),e.markerLine||(document.body.appendChild(a),e.markerLine=a)}},Pa={init:function(t,e){var n=t.$services.getService("dnd");if(e.$config.bind&&t.getDatastore(e.$config.bind)){var i=new n(e.$grid_data,{updates_per_second:60});t.defined(e.$getConfig().dnd_sensitivity)&&(i.config.sensitivity=e.$getConfig().dnd_sensitivity),i.attachEvent("onBeforeDragStart",t.bind(function(o,l){var d=a(l);if(!d||(t.hideQuickInfo&&t.hideQuickInfo(),lt(l.target,".gantt_grid_editor_placeholder")))return!1;var c=d.getAttribute(e.$config.item_attribute),u=e.$config.rowStore.getItem(c);return!t.isReadonly(u)&&!r(c)&&(i.config.initial_open_state=u.$open,!!t.callEvent("onRowDragStart",[c,l.target||l.srcElement,l])&&void 0)},t)),i.attachEvent("onAfterDragStart",t.bind(function(o,l){var d=a(l);i.config.marker.innerHTML=d.outerHTML;var c=i.config.marker.firstChild;c&&(i.config.marker.style.opacity=.4,c.style.position="static",c.style.pointerEvents="none"),i.config.id=d.getAttribute(e.$config.item_attribute);var u=e.$config.rowStore,h=u.getItem(i.config.id);i.config.level=u.calculateItemLevel(h),i.config.drop_target=Z.createDropTargetObject({targetParent:u.getParent(h.id),targetIndex:u.getBranchIndex(h.id),targetId:h.id,nextSibling:!0}),h.$open=!1,h.$transparent=!0,this.refreshData()},t)),i.attachEvent("onDragMove",t.bind(function(o,l){var d=s(l);return d&&t.callEvent("onBeforeRowDragMove",[i.config.id,d.targetParent,d.targetIndex])!==!1||(d=Z.createDropTargetObject(i.config.drop_target)),bn.highlightPosition(d,i.config,e),i.config.drop_target=d,t._waiAria.reorderMarkerAttr(i.config.marker),this.callEvent("onRowDragMove",[i.config.id,d.targetParent,d.targetIndex]),!0},t)),i.attachEvent("onDragEnd",t.bind(function(){var o=e.$config.rowStore,l=o.getItem(i.config.id);bn.removeLineHighlight(i.config),l.$transparent=!1,l.$open=i.config.initial_open_state;var d=i.config.drop_target;this.callEvent("onBeforeRowDragEnd",[i.config.id,d.targetParent,d.targetIndex])===!1?l.$drop_target=null:(o.move(i.config.id,d.targetIndex,d.targetParent),t.render(),this.callEvent("onRowDragEnd",[i.config.id,d.targetParent,d.targetIndex])),o.refresh(l.id)},t))}function a(o){return tt(o,e.$config.item_attribute)}function r(o){return Ct(o,t,t.getDatastore(e.$config.bind))}function s(o){var l,d=function(f){var y=ot(f,e.$grid_data).y,v=e.$config.rowStore;document.doctype||(y+=window.scrollY),y=y||0;var b=e.$state.scrollTop||0,_=t.$grid_data.getBoundingClientRect().height+b+window.scrollY,m=b,p=e.getItemIndexByTopPosition(e.$state.scrollTop);if(v.exists(p)||(p=v.countVisible()-1),p<0)return v.$getRootId();var k=v.getIdByIndex(p),$=e.$state.scrollTop/e.getItemHeight(k),w=$-Math.floor($);w>.1&&w<.9&&(_-=e.getItemHeight(k)*w,m+=e.getItemHeight(k)*(1-w));const x=z(e.$grid_data),S=x.y+x.height,T=i.config.marker.offsetHeight;y+T+window.scrollY>=_&&(i.config.marker.style.top=S-T+"px"),y>=_?y=_:y<=m&&(y=m,i.config.marker.style.top=x.y+"px");var C=e.getItemIndexByTopPosition(y);if(C>v.countVisible()-1||C<0)return v.$getRootId();var E=v.getIdByIndex(C);return r(E)?v.getPrevSibling(E):v.getIdByIndex(C)}(o),c=null,u=e.$config.rowStore,h=!e.$getConfig().order_branch_free,g=ot(o,e.$grid_data).y;return document.doctype||(g+=window.scrollY),d!==u.$getRootId()&&(c=(g-e.getItemTop(d))/e.getItemHeight(d)),h?(l=kn(i.config.id,d,c,g,u,i.config.level))&&l.targetParent&&r(l.targetParent)&&(d=u.getPrevSibling(l.targetParent),l=kn(i.config.id,d,c,g,u,i.config.level)):l=function(f,y,v,b,_){var m;if(y!==_.$getRootId())m=v<.25?Z.prevSiblingTarget(f,y,_):!(v>.6)||_.hasChild(y)&&_.getItem(y).$open?Z.firstChildTarget(f,y,_):Z.nextSiblingTarget(f,y,_);else{var p=_.$getRootId();m=_.hasChild(p)&&b>=0?Z.lastChildTarget(f,p,_):Z.firstChildTarget(f,p,_)}return m}(i.config.id,d,c,g,u),l}}};var Ra=function(t){return{onCreated:function(e){e.$config=N(e.$config,{bind:"task"}),e.$config.id=="grid"&&(this.extendGantt(e),t.ext.inlineEditors=t.ext._inlineEditors.createEditors(e),t.ext.inlineEditors.init()),this._mouseDelegates=ve(t)},onInitialized:function(e){var n=e.$getConfig();n.order_branch&&(n.order_branch=="marker"?Pa.init(e.$gantt,e):La.init(e.$gantt,e)),this.initEvents(e,t),e.$config.id=="grid"&&this.extendDom(e)},onDestroyed:function(e){e.$config.id=="grid"&&t.ext.inlineEditors.destructor(),this.clearEvents(e,t)},initEvents:function(e,n){this._mouseDelegates.delegate("click","gantt_row",n.bind(function(i,a,r){var s=e.$getConfig();if(a!==null){var o=this.getTask(a);s.scroll_on_click&&!n._is_icon_open_click(i)&&this.showDate(o.start_date),n.callEvent("onTaskRowClick",[a,r])}},n),e.$grid),this._mouseDelegates.delegate("click","gantt_grid_head_cell",n.bind(function(i,a,r){var s=r.getAttribute("data-column-id");if(n.callEvent("onGridHeaderClick",[s,i])){var o=e.$getConfig();if(s!="add"){if(o.sort&&s){for(var l,d=s,c=0;cf){var y=f-h.end;(yl||l===void 0)&&(l=v)}}return l},_move:function(s,o,l,d){var c=this._drag_task_coords(s,l),u=null,h=null;d?(u=new Date(+l.obj.start_date+d),h=new Date(+l.obj.end_date+d)):(u=a.dateFromPos(c.start+o),h=a.dateFromPos(c.end+o)),u?h?(s.start_date=u,s.end_date=h):(s.end_date=new Date(a.getState().max_date),s.start_date=a.dateFromPos(a.posFromDate(s.end_date)-(c.end-c.start))):(s.start_date=new Date(a.getState().min_date),s.end_date=a.dateFromPos(a.posFromDate(s.start_date)+(c.end-c.start)))},_drag_task_coords:function(s,o){return{start:o.obj_s_x=o.obj_s_x||a.posFromDate(s.start_date),end:o.obj_e_x=o.obj_e_x||a.posFromDate(s.end_date)}},_mouse_position_change:function(s,o){var l=s.x-o.x,d=s.y-o.y;return Math.sqrt(l*l+d*d)},_is_number:function(s){return!isNaN(parseFloat(s))&&isFinite(s)},on_mouse_move:function(s){if(this.drag.start_drag){var o=ot(s,a.$task_data),l=this.drag.start_drag.start_x,d=this.drag.start_drag.start_y;(Date.now()-this.drag.timestamp>50||this._is_number(l)&&this._is_number(d)&&this._mouse_position_change({x:l,y:d},o)>20)&&this._start_dnd(s)}if(this.drag.mode){if(!Ue(this,40))return;this._update_on_move(s)}},_update_item_on_move:function(s,o,l,d,c,u){var h=a.getTask(o),g=a.mixin({},h),f=a.mixin({},h);this._handlers[l].apply(this,[f,s,d,u]),a.mixin(h,f,!0),a.callEvent("onTaskDrag",[h.id,l,f,g,c]),a.mixin(h,f,!0),a.refreshTask(o)},_update_on_move:function(s){var o=this.drag,l=i.$getConfig();if(o.mode){var d=ot(s,i.$task_data);if(o.pos&&o.pos.x==d.x)return;o.pos=d;var c=a.dateFromPos(d.x);if(!c||isNaN(c.getTime()))return;var u=d.x-o.start_x,h=a.getTask(o.id);if(this._handlers[o.mode]){if(o.mode===l.drag_mode.move){var g={};this._isMultiselect()&&a.getSelectedTasks().indexOf(o.id)>=0&&(g=this.dragMultiple);var f=!1;if(a.isSummaryTask(h)&&a.config.drag_project){var y={};y[o.id]=V(o),f=!0,g=N(y,this.dragMultiple)}var v=this._find_max_shift(g,u);for(var b in v!==void 0&&(u=v),this._update_item_on_move(u,o.id,o.mode,o,s),g){var _=g[b];if(f&&_.id!=o.id&&(a._bulk_dnd=!0),v===void 0&&(f||Object.keys(g).length>1))var m=c-a.dateFromPos(o.start_x);this._update_item_on_move(u,_.id,_.mode,_,s,m)}a._bulk_dnd=!1}else this._update_item_on_move(u,o.id,o.mode,o,s);a._update_parents(o.id)}}},on_mouse_down:function(s,o){if(s.button!=2||s.button===void 0){var l=i.$getConfig(),d=a.locate(s),c=null;if(a.isTaskExists(d)&&(c=a.getTask(d)),!a.isReadonly(c)&&!this.drag.mode){this.clear_drag_state();var u=K(o=o||s.target||s.srcElement),h=this._get_drag_mode(u,o);if(!u||!h)return o.parentNode?this.on_mouse_down(s,o.parentNode):void 0;if(h)if(h.mode&&h.mode!=l.drag_mode.ignore&&l["drag_"+h.mode]){if(d=a.locate(o),c=a.copy(a.getTask(d)||{}),a.isReadonly(c))return this.clear_drag_state(),!1;if(a.isSummaryTask(c)&&c.auto_scheduling!==!1&&!l.drag_project&&h.mode!=l.drag_mode.progress)return void this.clear_drag_state();h.id=d;var g=ot(s,a.$task_data);h.start_x=g.x,h.start_y=g.y,h.obj=c,this.drag.start_drag=h,this.drag.timestamp=Date.now()}else this.clear_drag_state();else if(a.checkEvent("onMouseDown")&&a.callEvent("onMouseDown",[u.split(" ")[0]])&&o.parentNode)return this.on_mouse_down(s,o.parentNode)}}},_fix_dnd_scale_time:function(s,o){var l=i.$getConfig(),d=a.getScale().unit,c=a.getScale().step;function u(h){if(a.config.correct_work_time){var g=i.$getConfig();a.isWorkTime(h.start_date,void 0,h)||(h.start_date=a.calculateEndDate({start_date:h.start_date,duration:-1,unit:g.duration_unit,task:h}))}}l.round_dnd_dates||(d="minute",c=l.time_step),o.mode==l.drag_mode.resize?o.left?(s.start_date=a.roundDate({date:s.start_date,unit:d,step:c}),u(s)):(s.end_date=a.roundDate({date:s.end_date,unit:d,step:c}),function(h){if(a.config.correct_work_time){var g=i.$getConfig();a.isWorkTime(new Date(h.end_date-1),void 0,h)||(h.end_date=a.calculateEndDate({start_date:h.end_date,duration:1,unit:g.duration_unit,task:h}))}}(s)):o.mode==l.drag_mode.move&&(s.start_date=a.roundDate({date:s.start_date,unit:d,step:c}),u(s),s.end_date=a.calculateEndDate(s))},_fix_working_times:function(s,o){var l=i.$getConfig();(o=o||{mode:l.drag_mode.move}).mode==l.drag_mode.resize?o.left?s.start_date=a.getClosestWorkTime({date:s.start_date,dir:"future",task:s}):s.end_date=a.getClosestWorkTime({date:s.end_date,dir:"past",task:s}):o.mode==l.drag_mode.move&&a.correctTaskWorkTime(s)},_finalize_mouse_up:function(s,o,l,d){var c=a.getTask(s);if(o.work_time&&o.correct_work_time&&this._fix_working_times(c,l),this._fix_dnd_scale_time(c,l),this._fireEvent("before_finish",l.mode,[s,l.mode,a.copy(l.obj),d])){var u=s;a._init_task_timing(c),this.clear_drag_state(),a.updateTask(c.id),this._fireEvent("after_finish",l.mode,[u,l.mode,d])}else this.clear_drag_state(),s==l.id&&(l.obj._dhx_changed=!1,a.mixin(c,l.obj,!0)),a.refreshTask(c.id)},on_mouse_up:function(s){var o=this.drag;if(o.mode&&o.id){var l=i.$getConfig(),d=a.getTask(o.id),c=this.dragMultiple,u=!1,h=0;o.mode===l.drag_mode.move&&(a.isSummaryTask(d)&&l.drag_project||this._isMultiselect())&&(u=!0,h=Object.keys(c).length);var g=function(){if(u)for(var f in c)c[f].id!=o.id&&this._finalize_mouse_up(c[f].id,l,c[f],s);this._finalize_mouse_up(o.id,l,o,s)};u&&h>10?a.batchUpdate((function(){g.call(this)}).bind(this)):g.call(this)}this.clear_drag_state()},_get_drag_mode:function(s,o){var l=i.$getConfig().drag_mode,d={mode:null,left:null};switch((s||"").split(" ")[0]){case"gantt_task_line":case"gantt_task_content":d.mode=l.move;break;case"gantt_task_drag":d.mode=l.resize;var c=o.getAttribute("data-bind-property");d.left=c=="start_date";break;case"gantt_task_progress_drag":d.mode=l.progress;break;case"gantt_link_control":case"gantt_link_point":d.mode=l.ignore;break;default:d=null}return d},_start_dnd:function(s){var o=this.drag=this.drag.start_drag;delete o.start_drag;var l=i.$getConfig(),d=o.id;if(l["drag_"+o.mode]&&a.callEvent("onBeforeDrag",[d,o.mode,s])&&this._fireEvent("before_start",o.mode,[d,o.mode,s])){delete o.start_drag;var c=a.getTask(d);if(a.isReadonly(c))return void this.clear_drag_state();if(this._isMultiselect()){var u=a.getSelectedTasks();u.indexOf(o.id)>=0&&kt(u,a.bind(function(h){var g=a.getTask(h);a.isSummaryTask(g)&&a.config.drag_project&&o.mode==l.drag_mode.move&&this._addSubtasksToDragMultiple(g.id),this.dragMultiple[h]=a.mixin({id:g.id,obj:a.copy(g)},this.drag)},this))}a.isSummaryTask(c)&&a.config.drag_project&&o.mode==l.drag_mode.move&&this._addSubtasksToDragMultiple(c.id),a.callEvent("onTaskDragStart",[])}else this.clear_drag_state()},_fireEvent:function(s,o,l){a.assert(this._events[s],"Invalid stage:{"+s+"}");var d=this._events[s][o];return a.assert(d,"Unknown after drop mode:{"+o+"}"),a.assert(l,"Invalid event arguments"),!a.checkEvent(d)||a.callEvent(d,l)},round_task_dates:function(s){var o=this.drag,l=i.$getConfig();o||(o={mode:l.drag_mode.move}),this._fix_dnd_scale_time(s,o)},destructor:function(){this._domEvents.detachAll()},_isMultiselect:function(){return a.config.drag_multiple&&!!(a.getSelectedTasks&&a.getSelectedTasks().length>0)},_addSubtasksToDragMultiple:function(s){a.eachTask(function(o){this.dragMultiple[o.id]=a.mixin({id:o.id,obj:a.copy(o)},this.drag)},s,this)}}}(e,n),e._tasks_dnd=t,t.init(n)},destructor:function(){t&&(t.destructor(),t=null)}}}};var Oa=function(t,e){var n,i,a,r,s;function o(){return{link_source_id:r,link_target_id:i,link_from_start:s,link_to_start:a,link_landing_area:n}}var l=e.$services,d=l.getService("state"),c=l.getService("dnd");d.registerProvider("linksDnD",o);var u="gantt_link_point",h="gantt_link_control",g=new c(t.$task_bars,{sensitivity:0,updates_per_second:60,mousemoveContainer:e.$root,selector:"."+u,preventDefault:!0});function f(m,p){var k,$=g.getPosition(m),w=function(A){var I=0,M=0;return A&&(I=A.offsetWidth||0,M=A.offsetHeight||0),{width:I,height:M}}(p),x={right:(k=e.$root).offsetWidth,bottom:k.offsetHeight},S=e.config.tooltip_offset_x||10,T=e.config.tooltip_offset_y||10,C=e.config.scroll_size||18,E=e.$container.getBoundingClientRect().y+window.scrollY,D={y:$.y+T,x:$.x+S,bottom:$.y+w.height+T+C,right:$.x+w.width+S+C};return D.bottom>x.bottom+E&&(D.y=x.bottom+E-w.height-T),D.right>x.right&&(D.x=x.right-w.width-S),D}function y(m){var p=o();p.link_source_id&&p.link_target_id&&e.isLinkAllowed(p.link_source_id,p.link_target_id,p.link_from_start,p.link_to_start);var k=""+e.templates.drag_link(p.link_source_id,p.link_from_start,p.link_target_id,p.link_to_start)+"
";m.innerHTML=k}function v(){r=s=i=null,a=!0}function b(m,p,k,$){var w=function(){return g._direction&&g._direction.parentNode||(g._direction=document.createElement("div"),t.$task_links.appendChild(g._direction)),g._direction}(),x=o(),S=["gantt_link_direction"];e.templates.link_direction_class&&S.push(e.templates.link_direction_class(x.link_source_id,x.link_from_start,x.link_target_id,x.link_to_start));var T=Math.sqrt(Math.pow(k-m,2)+Math.pow($-p,2));if(T=Math.max(0,T-3)){w.className=S.join(" ");var C=($-p)/(k-m),E=Math.atan(C);_(m,k,p,$)==2?E+=Math.PI:_(m,k,p,$)==3&&(E-=Math.PI);var D=Math.sin(E),A=Math.cos(E),I=Math.round(p),M=Math.round(m),L=["-webkit-transform: rotate("+E+"rad)","-moz-transform: rotate("+E+"rad)","-ms-transform: rotate("+E+"rad)","-o-transform: rotate("+E+"rad)","transform: rotate("+E+"rad)","width:"+Math.round(T)+"px"];if(window.navigator.userAgent.indexOf("MSIE 8.0")!=-1){L.push('-ms-filter: "'+function(U,ft){return"progid:DXImageTransform.Microsoft.Matrix(M11 = "+ft+",M12 = -"+U+",M21 = "+U+",M22 = "+ft+",SizingMethod = 'auto expand')"}(D,A)+'"');var P=Math.abs(Math.round(m-k)),H=Math.abs(Math.round($-p));switch(_(m,k,p,$)){case 1:I-=H;break;case 2:M-=P,I-=H;break;case 3:M-=P}}L.push("top:"+I+"px"),L.push("left:"+M+"px"),w.style.cssText=L.join(";")}}function _(m,p,k,$){return p>=m?$<=k?1:4:$<=k?2:3}g.attachEvent("onBeforeDragStart",e.bind(function(m,p){var k=p.target||p.srcElement;if(v(),e.getState("tasksDnd").drag_id)return!1;if(ht(k,u)){ht(k,"task_start_date")&&(s=!0);var $=e.locate(p);r=$;var w=e.getTask($);return e.isReadonly(w)?(v(),!1):(this._dir_start={x:g.config.original_element_sizes.x+g.config.original_element_sizes.width/2,y:g.config.original_element_sizes.y+g.config.original_element_sizes.height/2},!0)}return!1},this)),g.attachEvent("onAfterDragStart",e.bind(function(m,p){e.config.touch&&e.refreshData(),y(g.config.marker)},this)),g.attachEvent("onDragMove",e.bind(function(m,p){var k=g.config,$=f(p,k.marker);(function(A,I){A.style.left=I.x+"px",A.style.top=I.y+"px"})(k.marker,$);var w=!!ht(p,h),x=i,S=n,T=a,C=e.locate(p),E=!0;if(Y(mt(p),e.$root)||(w=!1,C=null),w&&(E=!ht(p,"task_end_date"),w=!!C),i=C,n=w,a=E,w){const A=ht(p,h).querySelector(`.${u}`);if(A){const I=ee(A,t.$task_data);this._dir_end={x:I.x+A.offsetWidth/2,y:I.y+A.offsetHeight/2}}}else this._dir_end=ot(p,t.$task_data),e.env.isEdge&&(this._dir_end.y+=window.scrollY);var D=!(S==w&&x==C&&T==E);return D&&(x&&e.refreshTask(x,!1),C&&e.refreshTask(C,!1)),D&&y(k.marker),b(this._dir_start.x,this._dir_start.y,this._dir_end.x,this._dir_end.y),!0},this)),g.attachEvent("onDragEnd",e.bind(function(){var m=o();if(m.link_source_id&&m.link_target_id&&m.link_source_id!=m.link_target_id){var p=e._get_link_type(m.link_from_start,m.link_to_start),k={source:m.link_source_id,target:m.link_target_id,type:p};k.type&&e.isLinkAllowed(k)&&e.callEvent("onLinkCreated",[k])&&e.addLink(k)}v(),e.config.touch?e.refreshData():(m.link_source_id&&e.refreshTask(m.link_source_id,!1),m.link_target_id&&e.refreshTask(m.link_target_id,!1)),g._direction&&(g._direction.parentNode&&g._direction.parentNode.removeChild(g._direction),g._direction=null)},this)),e.attachEvent("onGanttRender",e.bind(function(){g._direction&&b(this._dir_start.x,this._dir_start.y,this._dir_end.x,this._dir_end.y)},this))};const Ba=function(){return{init:Oa}};var za=function(t){var e=t.$services;return{onCreated:function(n){var i=n.$config;i.bind=W(i.bind)?i.bind:"task",i.bindLinks=W(i.bindLinks)?i.bindLinks:"link",n._linksDnD=Ba(),n._tasksDnD=Ha.createTaskDND(),n._tasksDnD.extend(n),this._mouseDelegates=ve(t)},onInitialized:function(n){this._attachDomEvents(t),this._attachStateProvider(t,n),n._tasksDnD.init(n,t),n._linksDnD.init(n,t),n.$config.id=="timeline"&&this.extendDom(n)},onDestroyed:function(n){this._clearDomEvents(t),this._clearStateProvider(t),n._tasksDnD&&n._tasksDnD.destructor()},extendDom:function(n){t.$task=n.$task,t.$task_scale=n.$task_scale,t.$task_data=n.$task_data,t.$task_bg=n.$task_bg,t.$task_links=n.$task_links,t.$task_bars=n.$task_bars},_clearDomEvents:function(){this._mouseDelegates.destructor(),this._mouseDelegates=null},_attachDomEvents:function(n){function i(a,r){if(a&&this.callEvent("onLinkDblClick",[a,r])){var s=this.getLink(a);if(this.isReadonly(s))return;var o=this.locale.labels.link+" "+this.templates.link_description(this.getLink(a))+" "+this.locale.labels.confirm_link_deleting;window.setTimeout(function(){n._simple_confirm(o,"",function(){n.deleteLink(a)})},this.config.touch?300:1)}}this._mouseDelegates.delegate("click","gantt_task_link",n.bind(function(a,r){var s=this.locate(a,this.config.link_attribute);s&&this.callEvent("onLinkClick",[s,a])},n),this.$task),this._mouseDelegates.delegate("click","gantt_scale_cell",n.bind(function(a,r){var s=ot(a,n.$task_data),o=n.dateFromPos(s.x),l=Math.floor(n.columnIndexByDate(o)),d=n.getScale().trace_x[l];n.callEvent("onScaleClick",[a,d])},n),this.$task),this._mouseDelegates.delegate("doubleclick","gantt_task_link",n.bind(function(a,r,s){r=this.locate(a,n.config.link_attribute),i.call(this,r,a)},n),this.$task),this._mouseDelegates.delegate("doubleclick","gantt_link_point",n.bind(function(a,r,s){r=this.locate(a);var o=this.getTask(r),l=null;return s.parentNode&&K(s.parentNode)&&(l=K(s.parentNode).indexOf("_left")>-1?o.$target[0]:o.$source[0]),l&&i.call(this,l,a),!1},n),this.$task)},_attachStateProvider:function(n,i){var a=i;e.getService("state").registerProvider("tasksTimeline",function(){return{scale_unit:a._tasks?a._tasks.unit:void 0,scale_step:a._tasks?a._tasks.step:void 0}})},_clearStateProvider:function(){e.getService("state").unregisterProvider("tasksTimeline")}}},Wa=function(t){return{getVerticalScrollbar:function(){return t.$ui.getView("scrollVer")},getHorizontalScrollbar:function(){return t.$ui.getView("scrollHor")},_legacyGridResizerClass:function(e){for(var n=e.getCellsByType("resizer"),i=0;io[1]&&(t.config.grid_width=o[1]),i&&t.config.show_chart){if(a.$config.width=t.config.grid_width-1,!a.$config.scrollable&&a.$config.scrollY&&t.$root.offsetWidth){var l=a.$gantt.$layout.$container.offsetWidth,d=t.$ui.getView(a.$config.scrollY).$config.width,c=l-(a.$config.width+d)-4;c<0&&(a.$config.width+=c,t.config.grid_width+=c)}if(n)a.$parent.$config.width=t.config.grid_width,a.$parent.$config.group&&t.$layout._syncCellSizes(a.$parent.$config.group,{value:a.$parent.$config.width,isGravity:!1});else if(i&&!Y(i.$task,e.$view)){if(!a.$config.original_grid_width){var u=t.skins[t.skin];u&&u.config&&u.config.grid_width?a.$config.original_grid_width=u.config.grid_width:a.$config.original_grid_width=0}t.config.grid_width=a.$config.original_grid_width,a.$parent.$config.width=t.config.grid_width}else a.$parent._setContentSize(a.$config.width,null),t.$layout._syncCellSizes(a.$parent.$config.group,{value:t.config.grid_width,isGravity:!1})}else i&&Y(i.$task,e.$view)&&(a.$config.original_grid_width=t.config.grid_width),n||(a.$parent.$config.width=0)}n=!1}}),this._initScrollStateEvents(e)},_initScrollStateEvents:function(e){t._getVerticalScrollbar=this.getVerticalScrollbar,t._getHorizontalScrollbar=this.getHorizontalScrollbar;var n=this.getVerticalScrollbar(),i=this.getHorizontalScrollbar();n&&n.attachEvent("onScroll",function(a,r,s){var o=t.getScrollState();t.callEvent("onGanttScroll",[o.x,a,o.x,r])}),i&&i.attachEvent("onScroll",function(a,r,s){var o=t.getScrollState();t.callEvent("onGanttScroll",[a,o.y,r,o.y]);var l=t.$ui.getView("grid");l&&l.$grid_data&&!l.$config.scrollable&&(l.$grid_data.style.left=l.$grid.scrollLeft+"px",l.$grid_data.scrollLeft=l.$grid.scrollLeft)}),e.attachEvent("onResize",function(){n&&!t.$scroll_ver&&(t.$scroll_ver=n.$scroll_ver),i&&!t.$scroll_hor&&(t.$scroll_hor=i.$scroll_hor)})},_findGridResizer:function(e,n){for(var i,a=e.getCellsByType("resizer"),r=!0,s=0;s",b=""):(X(v=m.template?m.template(s):s[m.name])&&(v=u.date_grid(v,s,m.name)),v==null&&(v=""),b=v,v=""+v+"
");var p="gantt_cell"+(_?" gantt_last_cell":""),k=[];if(m.tree){p+=" gantt_cell_tree";for(var $=0;$"+k.join("")+"",g.push(y)}switch(p="",h.$config.name){case"task":p=r.getGlobalTaskIndex(s.id)%2==0?"":" odd";break;case"resource":p=h.visibleOrder.indexOf(s.id)%2==0?"":" odd"}if(p+=s.$transparent?" gantt_transparent":"",p+=s.$dataprocessor_class?" "+s.$dataprocessor_class:"",u.grid_row_class){var T=u.grid_row_class.call(r,s.start_date,s.end_date,s);T&&(p+=" "+T)}h.isSelected(s.id)&&(p+=" gantt_selected");var C=document.createElement("div");C.className="gantt_row"+p+" gantt_row_"+r.getTaskType(s.type);var E=o.getItemHeight(s.id);return C.style.height=E+"px",C.style.lineHeight=E+"px",l.smart_rendering&&(C.style.position="absolute",C.style.left="0px",C.style.top=o.getItemTop(s.id)+"px"),o.$config.item_attribute&&(C.setAttribute(o.$config.item_attribute,s.id),C.setAttribute(o.$config.bind+"_id",s.id)),r._waiAria.taskRowAttr(s,C),C.innerHTML=g.join(""),C},update:null,getRectangle:Ft,isInViewPort:Ma,getVisibleRange:gt,onrender:function(s,o,l){for(var d=l.getGridColumns(),c=0;c$.end)&&d(g.id,x)}o[g.id]={};for(var S=$.start;S<=$.end;S++){var T=h(_,S,g,b,m,p,k,v);!T&&l(g,S)?d(g.id,S):T&&!T.parentNode&&f.appendChild(T)}}},getRectangle:pn,getVisibleRange:gt,prepareData:Aa}}(t)},taskBar:function(){return fn(t)},timedProjectBar:function(){return fn(t)},taskRollupBar:function(){return function(r){const s=gn(r),o={};function l(u,h,g,f,y){let v=!0;return f.smart_rendering&&(v=ye(u,h,g)),v}function d(u,h,g,f){const y=r.copy(r.getTask(h.id));if(y.$rendered_at=u.id,r.callEvent("onBeforeRollupTaskDisplay",[y.id,y,u.id])===!1)return;const v=s(y,g);if(!v)return;const b=g.getBarHeight(u.id,h.type==r.config.types.milestone),_=Math.floor((g.getItemHeight(u.id)-b)/2);return v.style.top=f.top+_+"px",v.classList.add("gantt_rollup_child"),v.setAttribute("data-rollup-parent-id",u.id),v}function c(u,h){return u+"_"+h}return{render:function(u,h,g,f){if(u.rollup!==!1&&u.$rollup&&u.$rollup.length){const y=document.createElement("div"),v=r.getTaskPosition(u);return f&&(f.y=0,f.y_end=r.$task_bg.scrollHeight),u.$rollup.forEach(function(b){if(!r.isTaskExists(b))return;const _=r.getTask(b);if(!l(_,f,h,g))return;const m=d(u,_,h,v);m?(o[c(_.id,u.id)]=m,y.appendChild(m)):o[c(_.id,u.id)]=!1}),y}return!1},update:function(u,h,g,f,y){const v=document.createElement("div"),b=r.getTaskPosition(u);y.y=0,y.y_end=r.$task_bg.scrollHeight,u.$rollup.forEach(function(_){const m=r.getTask(_),p=c(m.id,u.id);let k=l(m,y,g,f);if(k!==!!o[p])if(k){const $=d(u,m,g,b);o[p]=$||!1}else o[p]=!1;o[p]&&v.appendChild(o[p]),h.innerHTML="",h.appendChild(v)})},isInViewPort:ye,getVisibleRange:gt}}(t)},taskSplitBar:function(){return Mt()},taskConstraints:function(){return Mt()},taskDeadline:function(){return Mt()},taskBaselines:function(){return Mt()},link:function(){return Ia(t)},resourceRow:function(){return function(r){var s=Na(r),o={};function l(c,u,h,g,f){var y=h.resource_cell_class(u.start_date,u.end_date,c,u.tasks,u.assignments),v=h.resource_cell_value(u.start_date,u.end_date,c,u.tasks,u.assignments),b=f.getItemHeight(c.id)-1;if(y||v){var _=f.getItemPosition(c,u.start_date,u.end_date),m=document.createElement("div");return m.setAttribute(f.$config.item_attribute,c.id),m.className=["gantt_resource_marker",y].join(" "),m.style.cssText=["left:"+_.left+"px","width:"+_.width+"px","height:"+b+"px","line-height:"+b+"px","top:"+_.top+"px"].join(";"),v&&(m.innerHTML=v),m}return null}function d(c,u){o[c]&&o[c][u]&&o[c][u].parentNode&&o[c][u].parentNode.removeChild(o[c][u])}return{render:function(c,u,h,g){var f=u.$getTemplates(),y=u.getScale(),v=s(c,h.resource_property,u.getScale(),u),b=!!g,_=[];o[c.id]={};for(var m=Ut(y,g),p=m.start;p<=m.end;p++){var k=v[p];if(k&&(!b||be(p,y,g,r))){var $=l(c,k,f,0,u);$&&(_.push($),o[c.id][p]=$)}}var w=null;if(_.length){w=document.createElement("div");for(var x=0;x<_.length;x++)w.appendChild(_[x])}return w},update:function(c,u,h,g,f){var y=h.$getTemplates(),v=h.getScale(),b=s(c,g.resource_property,h.getScale(),h),_=Ut(v,f),m={};if(o&&o[c.id])for(var p in o[c.id])m[p]=p;for(var k=_.start;k<=_.end;k++){var $=b[k];if(m[k]=!1,$)if(be(k,v,f,r))if(o[c.id]&&o[c.id][k])o[c.id]&&o[c.id][k]&&!o[c.id][k].parentNode&&u.appendChild(o[c.id][k]);else{var w=l(c,$,y,0,h);w&&(u.appendChild(w),o[c.id][k]=w)}else d(c.id,k)}for(var p in m)m[p]!==!1&&d(c.id,p)},getRectangle:pn,getVisibleRange:gt}}(t)},resourceHistogram:function(){return Mt()},gridTaskRowResizer:function(){return function(r){return{render:function(s,o,l){var d=o.$getConfig(),c=document.createElement("div");return c.className="gantt_task_grid_row_resize_wrap",c.style.top=o.getItemTop(s.id)+o.getItemHeight(s.id)+"px",c.innerHTML="
",c.setAttribute(d.task_grid_row_resizer_attribute,s.id),r._waiAria.rowResizerAttr(c),c},update:null,getRectangle:Ft,getVisibleRange:gt}}(t)}},layersService:{getDataRender:function(r){return i.getDataRender(r,t)},createDataRender:function(r){return i.createDataRender(r,t)}}}}};function we(t,e){const n=getComputedStyle(e.$root).getPropertyValue("--dhx-gantt-theme");let i,a=!!n;if(a)i=n;else{var r=e.skin;if(i=r,!r||t)for(var s=document.getElementsByTagName("link"),o=0;ou.width?u.min_width:u.width,u.width=u.max_width&&u.max_width0&&S+T>=C+2)&&(w=0),($&&!D||$<0&&!E||$>0&&E+D>=A)&&($=0);var I=t.config.autoscroll_step;I&&I<2&&(I=2),w*=I||n,(($*=I||n)||w)&&function(M,L){var P=t.getScrollState(),H=null,U=null;M&&(H=P.x+M,H=Math.min(P.width,H),H=Math.max(0,H)),L&&(U=P.y+L,U=Math.min(P.height,U),U=Math.max(0,U)),t.scrollTo(H,U)}($,w)}}function v(b,_,m){return b-e<0&&b_-e&&b>m?1:0}t.attachEvent("onGanttReady",function(){if(!F(t)){var b=vt(t.$root)||document.body;t.eventRemove(b,"mousemove",f),t.event(b,"mousemove",f),t.eventRemove(b,"touchmove",f),t.event(b,"touchmove",f),t.eventRemove(b,"pointermove",f),t.event(b,"pointermove",f)}}),t.attachEvent("onDestroy",function(){g(!1)})}var Se,Te;window.jQuery&&(Se=window.jQuery,Te=[],Se.fn.dhx_gantt=function(t){if(typeof(t=t||{})!="string"){var e=[];return this.each(function(){if(this&&this.getAttribute)if(this.gantt||window.gantt.$root==this)e.push(typeof this.gantt=="object"?this.gantt:window.gantt);else{var n=window.gantt.$container&&window.Gantt?window.Gantt.getGanttInstance():window.gantt;for(var i in t)i!="data"&&(n.config[i]=t[i]);n.init(this),t.data&&n.parse(t.data),e.push(n)}}),e.length===1?e[0]:e}if(Te[t])return Te[t].apply(this,[]);Se.error("Method "+t+" does not exist on jQuery.dhx_gantt")});const Va=null;window.dhtmlx&&(window.dhtmlx.attaches||(window.dhtmlx.attaches={}),window.dhtmlx.attaches.attachGantt=function(t,e,n){var i=document.createElement("DIV");n=n||window.gantt,i.id="gantt_"+n.uid(),i.style.width="100%",i.style.height="100%",i.cmp="grid",document.body.appendChild(i),this.attachObject(i.id),this.dataType="gantt",this.dataObj=n;var a=this.vs[this.av];return a.grid=n,n.init(i.id,t,e),i.firstChild.style.border="none",a.gridId=i.id,a.gridObj=i,this.vs[this._viewRestore()].grid}),window.dhtmlXCellObject!==void 0&&(window.dhtmlXCellObject.prototype.attachGantt=function(t,e,n){n=n||window.gantt;var i=document.createElement("DIV");return i.id="gantt_"+n.uid(),i.style.width="100%",i.style.height="100%",i.cmp="grid",document.body.appendChild(i),this.attachObject(i.id),this.dataType="gantt",this.dataObj=n,n.init(i.id,t,e),i.firstChild.style.border="none",i=null,this.callEvent("_onContentAttach",[]),this.dataObj});const Ua=null,qa=["ctrlKey","altKey","shiftKey","metaKey"],Ga=[[{unit:"month",date:"%M",step:1},{unit:"day",date:"%d",step:1}],[{unit:"day",date:"%d %M",step:1}],[{unit:"day",date:"%d %M",step:1},{unit:"hour",date:"%H:00",step:8}],[{unit:"day",date:"%d %M",step:1},{unit:"hour",date:"%H:00",step:1}]];class Ya{constructor(e){this.zoomIn=()=>{const n=this.getCurrentLevel()-1;n<0||this.setLevel(n)},this.zoomOut=()=>{const n=this.getCurrentLevel()+1;n>this._levels.length-1||this.setLevel(n)},this.getCurrentLevel=()=>this._activeLevelIndex,this.getLevels=()=>this._levels,this.setLevel=n=>{const i=this._getZoomIndexByName(n);i===-1&&this.$gantt.assert(i!==-1,"Invalid zoom level for gantt.ext.zoom.setLevel. "+n+" is not an expected value."),this._setLevel(i,0)},this._getZoomIndexByName=n=>{let i=-1;if(typeof n=="string"){if(!isNaN(Number(n))&&this._levels[Number(n)])i=Number(n);else for(let a=0;a{if(!this.$gantt.$task)return null;const n=this.$gantt.getScrollState().x,i=this.$gantt.$task.offsetWidth;this._visibleDate=this.$gantt.dateFromPos(n+i/2)},this._setLevel=(n,i)=>{this._activeLevelIndex=n;const a=this.$gantt,r=a.copy(this._levels[this._activeLevelIndex]),s=a.copy(r);if(delete s.name,a.mixin(a.config,s,!0),a.$root&&a.$task){if(i){const o=this.$gantt.dateFromPos(i+this.$gantt.getScrollState().x);this.$gantt.render();const l=this.$gantt.posFromDate(o);this.$gantt.scrollTo(l-i)}else{const o=this.$gantt.$task.offsetWidth;this._visibleDate||this._getVisibleDate();const l=this._visibleDate;this.$gantt.render();const d=this.$gantt.posFromDate(l);this.$gantt.scrollTo(d-o/2)}this.callEvent("onAfterZoom",[this._activeLevelIndex,r])}},this._attachWheelEvent=n=>{const i=_t.isFF?"wheel":"mousewheel";let a;a=typeof n.element=="function"?n.element():n.element,a&&this._domEvents.attach(a,i,this.$gantt.bind(function(r){if(this._useKey&&(qa.indexOf(this._useKey)<0||!r[this._useKey]))return!1;if(typeof this._handler=="function")return this._handler.apply(this,[r]),!0},this),{passive:!1})},this._defaultHandler=n=>{const i=this.$gantt.$task.getBoundingClientRect().x,a=n.clientX-i;let r=!1;(this.$gantt.env.isFF?-40*n.deltaY:n.wheelDelta)>0&&(r=!0),n.preventDefault(),n.stopPropagation(),this._setScaleSettings(r,a)},this._setScaleDates=()=>{this._initialStartDate&&this._initialEndDate&&(this.$gantt.config.start_date=this._initialStartDate,this.$gantt.config.end_date=this._initialEndDate)},this.$gantt=e,this._domEvents=this.$gantt._createDomEventScope()}init(e){this.$gantt.env.isNode||(this._initialStartDate=e.startDate,this._initialEndDate=e.endDate,this._activeLevelIndex=e.activeLevelIndex?e.activeLevelIndex:0,this._levels=this._mapScales(e.levels||Ga),this._handler=e.handler||this._defaultHandler,this._minColumnWidth=e.minColumnWidth||60,this._maxColumnWidth=e.maxColumnWidth||240,this._widthStep=e.widthStep||3/8*e.minColumnWidth,this._useKey=e.useKey,this._initialized||(nt(this),this.$gantt.attachEvent("onGanttScroll",()=>{this._getVisibleDate()})),this._domEvents.detachAll(),e.trigger==="wheel"&&(this.$gantt.$root?this._attachWheelEvent(e):this.$gantt.attachEvent("onGanttReady",()=>{this._attachWheelEvent(e)})),this._initialized=!0,this.setLevel(this._activeLevelIndex))}_mapScales(e){return e.map(n=>Array.isArray(n)?{scales:n}:n)}_setScaleSettings(e,n){e?this._stepUp(n):this._stepDown(n)}_stepUp(e){if(this._activeLevelIndex>=this._levels.length-1)return;let n=this._activeLevelIndex;if(this._setScaleDates(),this._widthStep){let i=this.$gantt.config.min_column_width+this._widthStep;i>this._maxColumnWidth&&(i=this._minColumnWidth,n++),this.$gantt.config.min_column_width=i}else n++;this._setLevel(n,e)}_stepDown(e){if(this._activeLevelIndex<1)return;let n=this._activeLevelIndex;if(this._setScaleDates(),this._widthStep){let i=this.$gantt.config.min_column_width-this._widthStep;i1),t.config.touch){var r=!0;try{document.createEvent("TouchEvent")}catch{r=!1}r?t._touch_events(["touchmove","touchstart","touchend"],function(s){return s.touches&&s.touches.length>1?null:s.touches[0]?{target:s.target,pageX:s.touches[0].pageX,pageY:s.touches[0].pageY,clientX:s.touches[0].clientX,clientY:s.touches[0].clientY}:s},function(){return!1}):window.navigator.pointerEnabled?t._touch_events(["pointermove","pointerdown","pointerup"],function(s){return s.pointerType=="mouse"?null:s},function(s){return!s||s.pointerType=="mouse"}):window.navigator.msPointerEnabled&&t._touch_events(["MSPointerMove","MSPointerDown","MSPointerUp"],function(s){return s.pointerType==s.MSPOINTER_TYPE_MOUSE?null:s},function(s){return!s||s.pointerType==s.MSPOINTER_TYPE_MOUSE})}}function n(r){var s=r.$config.scrollX?t.$ui.getView(r.$config.scrollX):null,o=r.$config.scrollY?t.$ui.getView(r.$config.scrollY):null,l={x:null,y:null};return s&&s.getScrollState().visible&&(l.x=s.$view.scrollLeft),o&&o.getScrollState().visible&&(l.y=o.$view.scrollTop),l}function i(){var r;return t.$ui.getView("timeline")&&(r=t.$ui.getView("timeline")._tasks_dnd),r}t.config.touch_drag=75,t.config.touch=!0,t.config.touch_feedback=!0,t.config.touch_feedback_duration=1,t._prevent_touch_scroll=!1,t._touch_feedback=function(){t.config.touch_feedback&&navigator.vibrate&&navigator.vibrate(t.config.touch_feedback_duration)},t.attachEvent("onGanttReady",function(){t.$container&&e()}),t.attachEvent("onGanttLayoutReady",function(){t.$container&&t.attachEvent("onGanttRender",e,{once:!0})});var a=[];t._touch_events=function(r,s,o){var l,d=0,c=!1,u=!1,h=null,g=null,f=null,y=[],v=null;let b={};for(var _=0;_5||Math.abs(x)>5)&&(u=!0,d=0,l=v?n(v):t.getScrollState()),u){var S,T=l.x+w,C=l.y+x;if(v?(function(E,D,A){var I=E.$config.scrollX?t.$ui.getView(E.$config.scrollX):null,M=E.$config.scrollY?t.$ui.getView(E.$config.scrollY):null;I&&I.scrollTo(D,null),M&&M.scrollTo(null,A)}(v,T,C),S=n(v)):(t.scrollTo(T,C),S=t.getScrollState()),l.x!=S.x&&x>2*w||l.y!=S.y&&w>2*x)return m(p)}}return m(p)}return!0}}]);try{document.addEventListener("touchmove",function(p){t._touch_drag&&m(p)},{passive:!1})}catch{console.warn("Cannot prevent touch event for the page drag")}for(a.push([this.$container,"contextmenu",function(p){if(c)return m(p)}]),a.push([this.$container,r[1],function(p){if(b=p.touches.length,document&&document.body&&document.body.classList.add("gantt_touch_active"),!o(p))if(p.touches&&p.touches.length>1)c=!1;else{h=s(p),v=function($){for(var w=t.$layout.getCellsByType("viewCell"),x=0;x=S.left&&$.clientX<=S.right&&$.clientY<=S.bottom&&$.clientY>=S.top)return w[x]}}(h),t._locate_css(h,"gantt_hor_scroll")||t._locate_css(h,"gantt_ver_scroll")||(c=!0);var k=i();g=setTimeout(function(){var $=t.locate(h);k&&$&&!t._locate_css(h,"gantt_link_control")&&!t._locate_css(h,"gantt_grid_data")&&(k.on_mouse_down(h),k.drag&&k.drag.start_drag&&(function(w){const x=t._getTaskLayers();let S=t.getTask(w);if(S){let T=t.isTaskVisible(w);if(T){f=w;for(let C=0;C"}};function Lt(t,e,n){return e=e||[],"<"+t+$n(n||[])+">"+(e.innerHTML||"")+""+t+">"}function $n(t){var e="";return kt(t,function(n){e+=" "+n.key+"='"+n.value+"'"}),e}function Gt(t){const e=ct();function n(){return e.apply(this,arguments)||this}return B(n,e),n.prototype.render=function(i){const a=i.height?`height:${i.height}px;`:"";let r=``;return r+=xn.getHtmlSelect(i.options,[{key:"style",value:"width:100%;"},{key:"title",value:i.name}]),r+="
",r},n.prototype.set_value=function(i,a,r,s){var o=i.firstChild;!o._dhx_onchange&&s.onchange&&(o.onchange=s.onchange,o._dhx_onchange=!0),a===void 0&&(a=(o.options[0]||{}).value),o.value=a||""},n.prototype.get_value=function(i){return i.firstChild.value},n.prototype.focus=function(i){var a=i.firstChild;t._focus(a,!0)},n}function Ka(t){var e=Gt(t);function n(){return e.apply(this,arguments)||this}function i(a,r){var s=[],o=[];r&&(s=t.getTaskByTime(),a.allow_root&&s.unshift({id:t.config.root_id,text:a.root_label||""}),s=function(u,h,g){var f=h.filter||function(){return!0};u=u.slice(0);for(var y=0;y`},m.prototype.set_value=function(p,k){p.innerHTML=k||""},m.prototype.get_value=function(p){return p.innerHTML||""},m.prototype.focus=function(){},m}(),n=function(_){const m=ct();function p(){return m.apply(this,arguments)||this}return B(p,m),p.prototype.render=function(k){return`
`},p.prototype.set_value=function(k,$){_.form_blocks.textarea._get_input(k).value=$||""},p.prototype.get_value=function(k){return _.form_blocks.textarea._get_input(k).value},p.prototype.focus=function(k){var $=_.form_blocks.textarea._get_input(k);_._focus($,!0)},p.prototype._get_input=function(k){return k.querySelector("textarea")},p}(t),i=function(_){const m=ct();function p(){return m.apply(this,arguments)||this}return B(p,m),p.prototype.render=function(k){var $=_.form_blocks.getTimePicker.call(this,k);let w="gantt_section_time";k.name!=="time"&&(w+=" gantt_section_"+k.name);var x="";return x+=$,k.single_date?($=_.form_blocks.getTimePicker.call(this,k,!0),x+=" "):x+=" – ",(x+=$)+"
"},p.prototype.set_value=function(k,$,w,x){var S=x,T=k.getElementsByTagName("select"),C=x._time_format_order;if(S.auto_end_date)for(var E=function(){I=new Date(T[C[2]].value,T[C[1]].value,T[C[0]].value,0,0),M=_.calculateEndDate({start_date:I,duration:1,task:w}),_.form_blocks._fill_lightbox_select(T,C.size,M,C,S)},D=0;D<4;D++)T[D].onchange=E;var A=_._resolve_default_mapping(x);typeof A=="string"&&(A={start_date:A});var I=w[A.start_date]||new Date,M=w[A.end_date]||_.calculateEndDate({start_date:I,duration:1,task:w});_.form_blocks._fill_lightbox_select(T,0,I,C,S),_.form_blocks._fill_lightbox_select(T,C.size,M,C,S)},p.prototype.get_value=function(k,$,w){var x,S=k.getElementsByTagName("select"),T=w._time_format_order;return x=_.form_blocks.getTimePickerValue(S,w),typeof _._resolve_default_mapping(w)=="string"?x:{start_date:x,end_date:function(C,E,D){var A=_.form_blocks.getTimePickerValue(C,w,E.size);return A<=D&&(w.autofix_end!==!1||w.single_date)?_.date.add(D,_._get_timepicker_step(),"minute"):A}(S,T,x)}},p.prototype.focus=function(k){_._focus(k.getElementsByTagName("select")[0])},p}(t),a=Gt(t),r=function(_){var m=ct();function p(){return m.apply(this,arguments)||this}return B(p,m),p.prototype.render=function(k){const $=k.height?`height:${k.height}px;`:"";let w=``;if(k.options&&k.options.length)for(var x=0;x "+k.options[x].label+"";else k.single_value=!0,w+=" ";return w+="
",w},p.prototype.set_value=function(k,$,w,x){var S=Array.prototype.slice.call(k.querySelectorAll("input[type=checkbox]"));!k._dhx_onchange&&x.onchange&&(k.onchange=x.onchange,k._dhx_onchange=!0),x.single_value?S[0].checked=!!$:kt(S,function(T){T.checked=!!$&&$.indexOf(T.value)>=0})},p.prototype.get_value=function(k,$,w){return w.single_value?k.querySelector("input[type=checkbox]").checked:function(x,S){if(x.map)return x.map(S);for(var T=x.slice(),C=[],E=0;E`;if(k.options&&k.options.length)for(var x=0;x "+k.options[x].label+"";return w+="",w},p.prototype.set_value=function(k,$,w,x){var S;x.options&&x.options.length&&(S=k.querySelector("input[type=radio][value='"+$+"']")||k.querySelector("input[type=radio][value='"+x.default_value+"']"))&&(!k._dhx_onchange&&x.onchange&&(k.onchange=x.onchange,k._dhx_onchange=!0),S.checked=!0)},p.prototype.get_value=function(k,$){var w=k.querySelector("input[type=radio]:checked");return w?w.value:""},p.prototype.focus=function(k){_._focus(k.querySelector("input[type=radio]"))},p}(t),o=function(_){var m=ct();function p(){return m.apply(this,arguments)||this}function k(x){return x.formatter||new Et}function $(x,S){var T=x.getElementsByTagName("select"),C=S._time_format_order,E=0,D=0;if(_.defined(C[3])){var A=T[C[3]],I=parseInt(A.value,10);isNaN(I)&&A.hasAttribute("data-value")&&(I=parseInt(A.getAttribute("data-value"),10)),E=Math.floor(I/60),D=I%60}return new Date(T[C[2]].value,T[C[1]].value,T[C[0]].value,E,D)}function w(x,S){var T=x.getElementsByTagName("input")[1];return(T=k(S).parse(T.value))&&!window.isNaN(T)||(T=1),T<0&&(T*=-1),T}return B(p,m),p.prototype.render=function(x){var S=""+_.form_blocks.getTimePicker.call(this,x)+"
",T=" "+_.locale.labels[_.config.duration_unit+"s"]+" ",C=x.single_date?" style='display:none'":"",E=x.readonly?" disabled='disabled'":"",D=_._waiAria.lightboxDurationInputAttrString(x),A="gantt_duration_value";x.formatter&&(T="",A+=" gantt_duration_value_formatted");var I="";let M="gantt_section_time gantt_section_duration";return x.name!=="time"&&(M+=" gantt_section_"+x.name),""+S+" "+I+"
"},p.prototype.set_value=function(x,S,T,C){var E,D,A,I,M=x.getElementsByTagName("select"),L=x.getElementsByTagName("input"),P=L[1],H=[L[0],L[2]],U=x.getElementsByTagName("span")[0],ft=C._time_format_order;function O(){var J=$.call(_,x,C),j=w.call(_,x,C),q=_.calculateEndDate({start_date:J,duration:j,task:T}),Pt=_.templates.task_end_date||_.templates.task_date;U.innerHTML=Pt(q)}function Q(J){var j=P.value;j=k(C).parse(j),window.isNaN(j)&&(j=0),(j+=J)<1&&(j=1),P.value=k(C).format(j),O()}H[0].onclick=_.bind(function(){Q(-1*_.config.duration_step)},this),H[1].onclick=_.bind(function(){Q(1*_.config.duration_step)},this),M[0].onchange=O,M[1].onchange=O,M[2].onchange=O,M[3]&&(M[3].onchange=O),P.onkeydown=_.bind(function(J){var j;return(j=(J=J||window.event).charCode||J.keyCode||J.which)==_.constants.KEY_CODES.DOWN?(Q(-1*_.config.duration_step),!1):j==_.constants.KEY_CODES.UP?(Q(1*_.config.duration_step),!1):void window.setTimeout(O,1)},this),P.onchange=_.bind(O,this),typeof(E=_._resolve_default_mapping(C))=="string"&&(E={start_date:E}),D=T[E.start_date]||new Date,A=T[E.end_date]||_.calculateEndDate({start_date:D,duration:1,task:T}),I=Math.round(T[E.duration])||_.calculateDuration({start_date:D,end_date:A,task:T}),I=k(C).format(I),_.form_blocks._fill_lightbox_select(M,0,D,ft,C),P.value=I,O()},p.prototype.get_value=function(x,S,T){var C=$(x,T),E=w(x,T),D=_.calculateEndDate({start_date:C,duration:E,task:S});return typeof _._resolve_default_mapping(T)=="string"?C:{start_date:C,end_date:D,duration:E}},p.prototype.focus=function(x){_._focus(x.getElementsByTagName("select")[0])},p}(t),l=Ka(t),d=Gt(t),c=function(_){var m=ct();function p(){return m.apply(this,arguments)||this}function k(w){return!w||w===_.config.constraint_types.ASAP||w===_.config.constraint_types.ALAP}function $(w,x){for(var S=k(x),T=0;T`;var T=[];for(var C in _.config.constraint_types)T.push({key:_.config.constraint_types[C],label:_.locale.labels[_.config.constraint_types[C]]});return w.options=w.options||T,S+=""+xn.getHtmlSelect(w.options,[{key:"data-type",value:"constraint-type"}])+" ",S+=""+(_.locale.labels.constraint_date||"Constraint date")+": "+_.form_blocks.getTimePicker.call(this,w)+" ",S+="",S},p.prototype.set_value=function(w,x,S,T){var C=w.querySelector("[data-constraint-type-select] select"),E=w.querySelectorAll("[data-constraint-time-select] select"),D=T._time_format_order,A=_._resolve_default_mapping(T);C._eventsInitialized||(C.addEventListener("change",function(L){$(E,L.target.value)}),C._eventsInitialized=!0);var I=S[A.constraint_date]||new Date;_.form_blocks._fill_lightbox_select(E,0,I,D,T);var M=S[A.constraint_type]||_.getConstraintType(S);C.value=M,$(E,M)},p.prototype.get_value=function(w,x,S){var T=w.querySelector("[data-constraint-type-select] select"),C=w.querySelectorAll("[data-constraint-time-select] select"),E=T.value,D=null;return k(E)||(D=_.form_blocks.getTimePickerValue(C,S)),{constraint_type:E,constraint_date:D}},p.prototype.focus=function(w){_._focus(w.querySelector("select"))},p}(t),u=function(_){const m=Gt(_);function p(){return m.apply(this,arguments)||this}return B(p,m),p.prototype.render=function(k){var $=_.config.types,w=_.locale.labels,x=[],S=k.filter||function(E,D){return!$.placeholder||D!==$.placeholder};for(var T in $)!S(T,$[T])==0&&x.push({key:$[T],label:w["type_"+T]});k.options=x;var C=k.onchange;return k.onchange=function(){_._lightbox_current_type=this.value,_.changeLightboxType(this.value),typeof C=="function"&&C.apply(this,arguments)},m.prototype.render.apply(this,arguments)},p}(t),h=function(_){var m=ct();function p(){return m.apply(this,arguments)||this}function k(S){return S.formatter||new Et}function $(S,T,C,E){const D=""+_.form_blocks.getTimePicker.call(_,E)+"
";let A=" "+_.locale.labels[_.config.duration_unit+"s"]+" ";const I=E.single_date?" style='display:none'":"",M=E.readonly?" disabled='disabled'":"",L=_._waiAria.lightboxDurationInputAttrString(E),P=_.locale.labels.baselines_remove_button;let H="gantt_duration_value";E.formatter&&(A="",H+=" gantt_duration_value_formatted");const U="",ft=``,O=document.createElement("div");O.className="gantt_section_time gantt_section_duration",O.setAttribute("data-baseline-id",T.id),O.innerHTML=D+U+ft+" ",S.appendChild(O);var Q,J,j,q=O.getElementsByTagName("select"),Pt=O.getElementsByTagName("input"),Rt=Pt[1],Sn=[Pt[0],Pt[2]],Qa=O.getElementsByTagName("span")[0],tr=E._time_format_order;function pt(){var ut=w.call(_,O,E),G=x.call(_,O,E),er=_.calculateEndDate({start_date:ut,duration:G,task:C}),nr=_.templates.task_end_date||_.templates.task_date;Qa.innerHTML=nr(er)}function Xt(ut){var G=Rt.value;G=k(E).parse(G),window.isNaN(G)&&(G=0),(G+=ut)<1&&(G=1),Rt.value=k(E).format(G),pt()}O.querySelector(".baseline_delete_button").onclick=function(ut){const G=O.parentNode;O.innerHTML="",O.remove(),G.innerHTML===""&&(G.innerHTML=_.locale.labels.baselines_section_placeholder)},Sn[0].onclick=_.bind(function(){Xt(-1*_.config.duration_step)},_),Sn[1].onclick=_.bind(function(){Xt(1*_.config.duration_step)},_),q[0].onchange=pt,q[1].onchange=pt,q[2].onchange=pt,q[3]&&(q[3].onchange=pt),Rt.onkeydown=_.bind(function(ut){var G;return(G=(ut=ut||window.event).charCode||ut.keyCode||ut.which)==_.constants.KEY_CODES.DOWN?(Xt(-1*_.config.duration_step),!1):G==_.constants.KEY_CODES.UP?(Xt(1*_.config.duration_step),!1):void window.setTimeout(pt,1)},_),Rt.onchange=_.bind(pt,_),_._resolve_default_mapping(E),Q=T.start_date||new Date,J=T.end_date||_.calculateEndDate({start_date:Q,duration:1,task:C}),j=_.calculateDuration({start_date:Q,end_date:J,task:C}),j=k(E).format(j),_.form_blocks._fill_lightbox_select(q,0,Q,tr,E),Rt.value=j,pt()}function w(S,T){var C=S.getElementsByTagName("select"),E=T._time_format_order,D=0,A=0;if(_.defined(E[3])){var I=C[E[3]],M=parseInt(I.value,10);isNaN(M)&&I.hasAttribute("data-value")&&(M=parseInt(I.getAttribute("data-value"),10)),D=Math.floor(M/60),A=M%60}return new Date(C[E[2]].value,C[E[1]].value,C[E[0]].value,D,A)}function x(S,T){var C=S.getElementsByTagName("input")[1];return(C=k(T).parse(C.value))&&!window.isNaN(C)||(C=1),C<0&&(C*=-1),C}return B(p,m),p.prototype.render=function(S){return`
`},p.prototype.set_value=function(S,T,C,E){C.baselines?(S.innerHTML="",C.baselines.forEach(D=>{$(S,D,C,E)})):S.innerHTML=_.locale.labels.baselines_section_placeholder},p.prototype.get_value=function(S,T,C){const E=[];return S.querySelectorAll("[data-baseline-id]").forEach(D=>{const A=D.dataset.baselineId;let I,M=_.getDatastore("baselines").getItem(A);I=M?_.copy(M):{id:_.uid(),task_id:T.id,text:"Baseline 1"},I.start_date=w(D,C),I.duration=x(D,C),I.end_date=_.calculateEndDate({start_date:I.start_date,duration:I.duration,task:T}),E.push(I)}),E},p.prototype.button_click=function(S,T,C,E){if(_.callEvent("onSectionButton",[_._lightbox_id,C])!==!1&&(T.closest(".gantt_custom_button.gantt_remove_baselines")&&(E.innerHTML=_.locale.labels.baselines_section_placeholder),T.closest(".gantt_custom_button.gantt_add_baselines"))){E.innerHTML==_.locale.labels.baselines_section_placeholder&&(E.innerHTML="");const D=_.getTask(_._lightbox_id);$(E,{id:_.uid(),task_id:D.id,text:"Baseline 1",start_date:D.start_date,end_date:D.end_date},D,_._get_typed_lightbox_config()[S])}},p.prototype.focus=function(S){_._focus(S.getElementsByTagName("select")[0])},p}(t);t._lightbox_methods={},t._lightbox_template="
",t._lightbox_template=`
+`,A.appendChild(L),S.appendChild(L)}}(r,b,_,d,c);var m=function(x,S,T){var C=document.createElement("div");return t.getTaskType(x.type)!=t.config.types.milestone?C.innerHTML=T.task_text(x.start_date,x.end_date,x):t.getTaskType(x.type)==t.config.types.milestone&&S&&(C.style.height=C.style.width=S+"px"),C.className="gantt_task_content",C}(r,_,c);b.appendChild(m);var p=function(x,S,T,C){var E=C.$getConfig(),D=[x];S&&D.push(S);var A=t.getState(),I=t.getTask(T);if(t.getTaskType(I.type)==E.types.milestone?D.push("gantt_milestone"):t.getTaskType(I.type)==E.types.project&&D.push("gantt_project"),D.push("gantt_bar_"+t.getTaskType(I.type)),t.isSummaryTask(I)&&D.push("gantt_dependent_task"),t.isSplitTask(I)&&(E.open_split_tasks&&!I.$open||!E.open_split_tasks)&&D.push("gantt_split_parent"),E.select_task&&t.isSelectedTask(T)&&D.push("gantt_selected"),T==A.drag_id&&(D.push("gantt_drag_"+A.drag_mode),A.touch_drag&&D.push("gantt_touch_"+A.drag_mode)),A.link_source_id==T&&(D.push("gantt_link_source"),A.link_from_start?D.push("gantt_link_from_start"):D.push("gantt_link_from_end")),A.link_target_id==T&&D.push("gantt_link_target"),E.highlight_critical_path&&t.isCriticalTask&&t.isCriticalTask(I)&&D.push("gantt_critical_task"),A.link_landing_area&&A.link_target_id&&A.link_source_id&&A.link_target_id!=A.link_source_id&&(A.link_target_id==T||A.link_source_id==T)){var M=A.link_source_id,L=A.link_from_start,P=A.link_to_start,H="";H=t.isLinkAllowed(M,T,L,P)?P?"link_start_allow":"link_finish_allow":P?"link_start_deny":"link_finish_deny",D.push(H)}return D.join(" ")}("gantt_task_line",c.task_class(r.start_date,r.end_date,r),r.id,s);(r.color||r.progressColor||r.textColor)&&(p+=" gantt_task_inline_color"),l.width<20&&(p+=" gantt_thin_task"),b.className=p;var k=["left:"+l.left+"px","top:"+(f+l.top)+"px","height:"+h+"px","line-height:"+Math.max(h<30?h-2:h,0)+"px","width:"+_+"px"];b.style.cssText=k.join(";"),r.color&&b.style.setProperty("--dhx-gantt-task-background",r.color),r.textColor&&b.style.setProperty("--dhx-gantt-task-color",r.textColor),r.progressColor&&b.style.setProperty("--dhx-gantt-task-progress-color",r.progressColor);var $=function(x,S,T,C){var E="gantt_left "+i(!S.rtl,x),D=null;return C&&(D={type:"marginRight",value:C}),n(x,T.leftside_text,E,D)}(r,d,c,g);$&&b.appendChild($),$=function(x,S,T,C){var E="gantt_right "+i(!!S.rtl,x),D=null;return C&&(D={type:"marginLeft",value:C}),n(x,T.rightside_text,E,D)}(r,d,c,g),$&&b.appendChild($),t._waiAria.setTaskBarAttr(r,b);var w=t.getState();return t.isReadonly(r)||(d.drag_resize&&!t.isSummaryTask(r)&&u!=d.types.milestone&&a(b,"gantt_task_drag",r,function(x){var S=document.createElement("div");return S.className=x,S},d),d.drag_links&&d.show_links&&a(b,"gantt_link_control",r,function(x){var S=document.createElement("div");S.className=x,S.style.cssText=["height:"+h+"px","line-height:"+h+"px"].join(";");var T=document.createElement("div");T.className="gantt_link_point";var C=!1;return w.link_source_id&&d.touch&&(C=!0),T.style.display=C?"block":"",S.appendChild(T),S},d,g)),b}function n(r,s,o,l){if(!s)return null;var d=s(r.start_date,r.end_date,r);if(!d)return null;var c=document.createElement("div");return c.className="gantt_side_content "+o,c.innerHTML=d,l&&(c.style[l.type]=Math.abs(l.value)+"px"),c}function i(r,s){var o=r?{$source:[t.config.links.start_to_start],$target:[t.config.links.start_to_start,t.config.links.finish_to_start]}:{$source:[t.config.links.finish_to_start,t.config.links.finish_to_finish],$target:[t.config.links.finish_to_finish]};for(var l in o)for(var d=s[l],c=0;c
=+h.min_date&&((u=l([s,d.rtl?"task_right":"task_left","task_start_date"].join(" "))).setAttribute("data-bind-property","start_date"),c&&(u.style.marginLeft=c+"px"),r.appendChild(u)),+o.end_date<=+h.max_date&&((u=l([s,d.rtl?"task_left":"task_right","task_end_date"].join(" "))).setAttribute("data-bind-property","end_date"),c&&(u.style.marginRight=c+"px"),r.appendChild(u))}return function(r,s,o){var l=(o=s.$getConfig()).type_renderers[t.getTaskType(r.type)],d=e;return l?l.call(t,r,function(c){return d.call(t,c,s,o)},s):d.call(t,r,s,o)}}function fn(t){return{render:gn(t),update:null,isInViewPort:ke,getVisibleRange:gt}}function Mt(){return console.error("You are trying to use a Pro feature that is not available in the GPL version."),{render:function(){},isInViewPort:function(){},getVisibleRange:function(){}}}function pn(t,e,n){return{top:e.getItemTop(t.id),height:e.getItemHeight(t.id),left:0,right:1/0}}function Ut(t,e){var n=0,i=t.left.length-1;if(e)for(var a=0;ae.x_end){i=a;break}}return{start:n,end:i}}function ye(t,e,n,i){var a=e.width[t];if(a<=0)return!1;if(!i.config.smart_rendering||At(i))return!0;var r=e.left[t]-a,s=e.left[t]+a;return r<=n.x_end&&s>=n.x}function Aa(t,e){var n=e.config.timeline_placeholder;if(t=t||[],n&&t.filter(l=>l.id==="timeline_placeholder_task").length===0){var i=e.getState(),a=null,r=i.min_date,s=i.max_date;t.length&&(a=t[t.length-1].id);var o={start_date:r,end_date:s,row_height:n.height||0,id:"timeline_placeholder_task",unscheduled:!0,lastTaskId:a,calendar_id:n.calendar||"global",$source:[],$target:[]};t.push(o)}}function Ia(t){var e={current_pos:null,dirs:{left:"left",right:"right",up:"up",down:"down"},path:[],clear:function(){this.current_pos=null,this.path=[]},point:function(a){this.current_pos=t.copy(a)},get_lines:function(a){this.clear(),this.point(a[0]);for(var r=1;ra.x?this.dirs.right:r.y>a.y?this.dirs.down:this.dirs.up}},n={path:[],clear:function(){this.path=[]},current:function(){return this.path[this.path.length-1]},point:function(a){return a?(this.path.push(t.copy(a)),a):this.current()},point_to:function(a,r,s){s=s?{x:s.x,y:s.y}:t.copy(this.point());var o=e.dirs;switch(a){case o.left:s.x-=r;break;case o.right:s.x+=r;break;case o.up:s.y-=r;break;case o.down:s.y+=r}return this.point(s)},get_points:function(a,r,s,o){var l=this.get_endpoint(a,r,s,o),d=t.config,c=l.e_y-l.y,u=l.e_x-l.x,h=e.dirs,g=r.getItemHeight(a.source);this.clear(),this.point({x:l.x,y:l.y});var f=2*d.link_arrow_size,y=this.get_line_type(a,r.$getConfig()),v=l.e_x>l.x;if(y.from_start&&y.to_start)this.point_to(h.left,f),v?(this.point_to(h.down,c),this.point_to(h.right,u)):(this.point_to(h.right,u),this.point_to(h.down,c)),this.point_to(h.right,f);else if(!y.from_start&&y.to_start)if(v=l.e_x>l.x+2*f,this.point_to(h.right,f),v)u-=f,this.point_to(h.down,c),this.point_to(h.right,u);else{u-=2*f;var b=c>0?1:-1;this.point_to(h.down,b*(g/2)),this.point_to(h.right,u),this.point_to(h.down,b*(Math.abs(c)-g/2)),this.point_to(h.right,f)}else y.from_start||y.to_start?y.from_start&&!y.to_start&&(v=l.e_x>l.x-2*f,this.point_to(h.left,f),v?(u+=2*f,b=c>0?1:-1,this.point_to(h.down,b*(g/2)),this.point_to(h.right,u),this.point_to(h.down,b*(Math.abs(c)-g/2)),this.point_to(h.left,f)):(u+=f,this.point_to(h.down,c),this.point_to(h.right,u))):(this.point_to(h.right,f),v?(this.point_to(h.right,u),this.point_to(h.down,c)):(this.point_to(h.down,c),this.point_to(h.right,u)),this.point_to(h.left,f));return this.path},get_line_type:function(a,r){var s=r.links,o=!1,l=!1;return a.type==s.start_to_start?o=l=!0:a.type==s.finish_to_finish?o=l=!1:a.type==s.finish_to_start?(o=!1,l=!0):a.type==s.start_to_finish?(o=!0,l=!1):t.assert(!1,"Invalid link type"),r.rtl&&(o=!o,l=!l),{from_start:o,to_start:l}},get_endpoint:function(a,r,s,o){var l=r.$getConfig(),d=this.get_line_type(a,l),c=d.from_start,u=d.to_start,h=i(s,r,l),g=i(o,r,l);return{x:c?h.left:h.left+h.width,e_x:u?g.left:g.left+g.width,y:h.top+h.rowHeight/2-1,e_y:g.top+g.rowHeight/2-1}}};function i(a,r,s){var o=r.getItemPosition(a);let l=_i(t,r,a),d=l.maxHeight,c=l.splitChild;const u=t.config.baselines!==!1&&(t.config.baselines.render_mode=="separateRow"||t.config.baselines.render_mode=="individualRow")&&a.baselines&&a.baselines.length;let h;l.shrinkHeight&&(o.rowHeight=d);let g=t.getTaskType(a.type)==s.types.milestone;if(g){let f=r.getBarHeight(a.id,!0);h=Math.sqrt(2*f*f),l.shrinkHeight&&d=o.height){const f=hi(t,a.parent);u||f?g?(o.rowHeight=o.height+4,o.left+=(o.width-o.rowHeight+4)/2,o.width=o.rowHeight-3):o.rowHeight=o.height+6:g&&(o.left+=(h-o.height)/2)}else o.rowHeight=d+2,g&&(o.left+=(o.width-o.rowHeight+4)/2,o.width=o.rowHeight-3);else u&&(o.rowHeight=o.height+4);return o}return{render:function(a,r,s){var o=t.getTask(a.source);if(o.hide_bar)return;var l=t.getTask(a.target);if(l.hide_bar)return;var d=n.get_endpoint(a,r,o,l),c=d.e_y-d.y;if(!(d.e_x-d.x)&&!c)return null;var u=n.get_points(a,r,o,l);const h=function(v,b){const _=b.link_radius||4,m=b.link_arrow_size||6,p=[];for(let $=0;$v.size>0),s),g=function(v,b,_,m){const p=document.createElement("div");return v.forEach(k=>{let $;k.type==="line"?$=e.render_line(k.data,null,b,_.source):k.type==="corner"?$=e.render_corner(k.data,b):k.type==="arrow"&&($=e.render_arrow(k.data,m)),p.appendChild($)}),p}(h,r,a,s);var f="gantt_task_link";a.color&&(f+=" gantt_link_inline_color");var y=t.templates.link_class?t.templates.link_class(a):"";return y&&(f+=" "+y),s.highlight_critical_path&&t.isCriticalLink&&t.isCriticalLink(a)&&(f+=" gantt_critical_link"),g.className=f,r.$config.link_attribute&&(g.setAttribute(r.$config.link_attribute,a.id),g.setAttribute("link_id",a.id)),a.color&&g.style.setProperty("--dhx-gantt-link-background",a.color),t._waiAria.linkAttr(a,g),g},update:null,isInViewPort:cn,getVisibleRange:dn()}}function Ma(t,e,n,i,a){if(a.$ui.getView("grid")&&(a.config.keyboard_navigation&&a.getSelectedId()||a.ext.inlineEditors&&a.ext.inlineEditors.getState().id))return!0;var r=n.getItemTop(t.id),s=n.getItemHeight(t.id);return!(r>e.y_end||r+sl.y+h-u&&(c=l.y+h-u);const g=l.y+l.height;return c>g-u&&(c=g-u),l.x=d,l.y=c,l},t),i._getTargetY=t.bind(function(o){var l=z(e.$grid_data),d=e.$state.scrollTop||0,c=t.$grid_data.getBoundingClientRect().height+d,u=o.pageY-l.y+d;return u>c?u=c:u