From 5b0e6d380ef7b77549ac92a636df9f17a59ee91d Mon Sep 17 00:00:00 2001 From: Alex Klimenkov Date: Mon, 21 Oct 2024 15:04:54 +0300 Subject: [PATCH] [update] version 9.0.1 --- README.md | 4 +- bower.json | 2 +- codebase/dhtmlxgantt.css | 2 +- codebase/dhtmlxgantt.d.ts | 7 +- codebase/dhtmlxgantt.es.d.ts | 7 +- codebase/dhtmlxgantt.es.js | 304 +++++++++--------- codebase/dhtmlxgantt.es.js.map | 2 +- codebase/dhtmlxgantt.js | 22 +- codebase/dhtmlxgantt.js.map | 2 +- codebase/sources/dhtmlxgantt.css | 20 +- codebase/sources/dhtmlxgantt.es.js | 22 +- codebase/sources/dhtmlxgantt.es.js.map | 2 +- codebase/sources/dhtmlxgantt.js | 22 +- codebase/sources/dhtmlxgantt.js.map | 2 +- codebase/sources/less/layout.less | 1 + codebase/sources/less/lightbox.less | 231 +------------ codebase/sources/less/package.json | 2 +- .../sources/less/src/themes/broadway.less | 7 +- .../less/src/themes/contrast_black.less | 7 - .../less/src/themes/contrast_white.less | 1 - codebase/sources/less/src/themes/dark.less | 9 - codebase/sources/less/src/themes/meadow.less | 3 - codebase/sources/less/src/themes/skyblue.less | 3 - .../sources/less/src/themes/variables.less | 6 +- package.json | 2 +- whatsnew.md | 10 + 26 files changed, 244 insertions(+), 458 deletions(-) diff --git a/README.md b/README.md index 559da24..352e0cc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # dhtmlxGantt # [![dhtmlx.com](https://img.shields.io/badge/made%20by-DHTMLX-blue)](https://dhtmlx.com/) -[![npm: v.9.0.0](https://img.shields.io/badge/npm-v.9.0.0-blue.svg)](https://www.npmjs.com/package/dhtmlx-gantt) +[![npm: v.9.0.1](https://img.shields.io/badge/npm-v.9.0.1-blue.svg)](https://www.npmjs.com/package/dhtmlx-gantt) [![License: GPL v2](https://img.shields.io/badge/license-GPL%20v2-blue.svg)](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,iVBORw0KGgoAAAANSUhEUgAAAWYAAADjCAYAAAC2LL7JAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7L15vGVFfS2+vrX3OXfqvj1BQzMLIoNEQdQXhSg4ECeCE63SAooEYhxinjGTL0mb/HjPl2cSE2MUVMQBIQ1PQEQRiTjE5BlxRhNnZGqg6bnvcM7Zu9bvj6rau/Z0hnvPvef27bP6c/vsoXbt2kOtvepb3/oWMMQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDLG4kEEXYIilgTdeyzUtwZEBcQSAgyA4iMDBANZDsFKISQITIMYhWJ07fALAFICWAPu0YFaIGQqmBGgS2CPADDS2CvAAFB6MBQ/pKTxw9Rtk76Jf7BBDLHEMifkAwuu38OB6CydphRMAPEEEJ4B4HICjCKwcSKGIfQLcT8GDAvyExI8I/FcY4Z4PXiSPDqRMQwwxYAyJeZni0k/yiCDE6SROB/EUAqcJcOigy9Uj7gdwtwi+CY1/r6/BN973ImkMulBDDLHQGBLzMsGl1/MkIc4U4AwAZwI4ZsBFWgjMgPh/BL4UKNz6wVfLPYMu0BBDLASGxLyf4ne3cEUrxnMEeAGFLwBx1KDLtPiQn4vgFgGuvfLV8r1Bl2aIIfqFITHvR9j0SU6OKfyWEpxP4rkiGBl0mZYKSHxPBB8NA3zsnzbKvkGXZ4gh5oMhMS9xbL6L4QOP4MVCvBaC3wQxOugyLXHsFOADrQDv/+hG2TbowgwxxFwwJOYlisv+LzcwwiYQvwPgyEGXZ3+DAFMg/m5ngPfcsFFmBl2eIYboBUNiXmK47Ho+hVq/Q0TOIxAMujz7O4R4gNR/fvhPg+s2bxY96PIMMUQ3GBLzEsFvb+GzqfmHAjx30GVZjiDl20GAt1+5Uf590GUZYohOGBLzgHHp9TxJBFeAfOGgy7LcIQApvC6cUH/wgZfIzkGXZ4ghqjAk5gHhkut4WCD4cwKvFUANujwHEkhsVQpvv+pVcvOgyzLEEGUYEvNig5RLr8clIrgCMqBh0EM4fEZivOWqC+SxQRdkiCF8DIl5EfE71/GYGPxHCM4edFmGsCC2CeRNV71Gbht0UYYYwmFIzIuEy67n+RT8I8mJQZdliCyM7VmubjQe+dNPXHTo1KDLsxA4fwvrK2McVAuwOooxIsAKpRACWEUg0DpeJUEQgqhRxwX3QpFglyiQwG60sLs2ip1KsPvRCLtu2CjxAC5pWWNIzAuMy65kDWtwBck3DrosQ7QHiZ9Cy+s+fIF8f9Bl6Ra/u4UrWhGORg1HMdbHQLAexCEiWEfKOhGsA3AIFjB6IIF9AmwDcB/IByDqV1C4T2vcjxC/+sjLcR9EuFDnX44YEvMC4g1buFbI6wH8+qDLMkTXaCjK/7jqVbhqqZDJRVumD69j7AQAjwf10YA6CuTRAI6CYO2gy9cRxBSAHwrkHo34HkFwjx7DD68+bxiLuwpDYl4gXHIdD1OKNwM4cdBlGaJ3CHmbVupNH9koOxbrnJd9ghtQx4lacCKIkwCeBPP+rFqsMiwiYgL3APw6RH2t3sK/fWDT0IXRYUjMC4DLrudxWniz4ECM+LaMIPKQIi6/8lXy1X5me9ZdDI/fjhO0jp+sKE+mqCcJeTJQmBnmgAEFGsCPBHInND77oVfh7qXSYhkEhsTcZ7z+Oh6pFL+4HwalH6IcGuA/qF3qiqsul1avB7/lHzgyfTBOVgGeTOonE/JkgZwMcBiMqh2IrRC5TQS3/vRH+PqXN0s06CItJobE3Ee87iaurrV4O4ETBl2WIfoLAb6j0bzsIxtHf1aV5qzNDI87EScqFT8VCE4HeKp9F2qLWNTlB+IRgNeGWn3ig6+RewddnMXAkJj7hLf8A0dmDuWNBM8cdFmGWBiYiHX84w+/KvwkAFz6f3kEo/ipgJwO4emgPBmC8UGXcxlDC+Qr0PpjP/uv4LblrKKHxNwnXPrPrSsANXSJOwBAyHcBHibA+kGX5YCFyL0Q/d7dDK6/YaM0B12cfmNIzH3ApTfwLJA3Yng/hxhisfEQIO+LDsbHrzlbZgddmH5hSCTzxOtu4uow4lcIHL6oJ2b3HdbEAdu5vawhvVRfWeZVndgqkP/vw+djy3Lw5ljmT2vhcekN8XtAuXjRTtiBkEtJuAcSH2I/QgnZdiTr5U7QkG8BrXd+eGP9W4MuyXyw3J/SguJ1N/L4gPqrIMIFP1kbcs2QcWW64eQdywsVkWI94m1L0suboGMKrpqYUFe870XSGHRh5oJl/XQWGpfcEH1MIAsf4L6CbBNCLuwvkjDnopqHQntxMIdaKKXEqvKJbPYVJ1je5AxAfsw4evPVr65/b9Al6RXL/cksGN5wfeMUCcJ/WdCTVJCpLiXklIypMwq65BkPGXf/RMmj9Oypovz9yk9jtxyQBN0SUf/nQ6/AP+xPtudl/UQWEpfeyL8medGCnaCElMsVMu2mDDFLdl8ur6HNef9EjkBT1eyZL5QhHxFV2NdWQS9vcoaAd8401O9e+1rZM+iydIPl/TQWCBd+nBP1Uf1dLFQoxa5IWdtVS74eGadE3C0xD4l6aSJXPTsQs1m3ywlBuzQqk8eBSM4Efx7Wgouuepn8fNBl6YTl/SQWCJfcEG0C5D0LknkVKVNntyT8rKVAxnZZk/BJN0PQetgZuF9BpaaJrH1ZoNy6T8xuWSkmu2x686PsWnvyX3YgdmqoC67ZKN8ddFHaYZk/hYXBG26MrgHknL5n3JGUHeHCErJvwiCgHUEz3e7lqe0xfl7dlGGIRUQlMabblSVbP70xXYghZFVO0GpIzg5T1Pr1V2+s/eugC1KFZf8E+o2zNjM87on6HiyEGSNHiqWkrClIyNcqYrplnapircXfn+SXP8+QiJc2fJLMmyF8hRwEGdOFSJDsT8jZdQIq4ZCcMS1Ql3z4fPnaoAtShmV/9/uNS7fwdC36M33PuAMpa2dDplPDWUIGCebIWDtSJj1SdmfwOwv18D1YopBEHTsbsfuxRCtivC18ElbKvCwSmPVkX2pnzpPzAUjMgGAWUK+6+pVy96CLksfCD4xYZmCg/1vfxziTmU9kQspi1zRFxBiWCW28fkgQMQSEdoRMTVqThqaWnQ0dPjKr63ubDJsaqklIXOo+t5+j6oqWRWMg2xegCNQU9EggejxAvH48bB48qloBQAQKoBhblwiUgIbCA3uPdKKoSUAU7IunwQI580Ag5xGB/sjrbuJ517xsaYUTXfZ3vt+45MbW3wBqY18z9dRyqmytKkZqvkiUsibI2NiMtU6InDpGrLXcuy8eu3cKY00amdV2cMlSN2UU3lCZ+1vL5L/ctiWONgQpIggAHjkhs8dNqOl6qLSoIFXBSkGJIkQgQYC8aaOtcl7+xGxA3isMzlvMacQ64QC58/3DJTdGN0Lk6X3LsGDC0LZ3z66RYojYkDJ1bH8tKVNDMwa1lh2zuvaDnXrlDBlkXZ3bsc8SYqaMs0G+ad3ncxU8Blm9b6Dobli1CFBTok+cVPsOH1cNUYrK2plFBRBHzsojZ6WgkkEXrtMQkJLBKQcA7jrqB+r1mzfLknBXGpoyeoXgKFmgqqutrdjVRWqKkEzNF8a8obUWY7YwKpk6lvumOPKfe/RKTZ22VbtAZpTgIJCMg/CVGlCmbNNOrzmeKzGzl1yzeKcUZO/fAKuqVITEAJBraQmaMdUPdnFyR0PPnLI62CsKlMD2FYOGcAkacgbEGL5SOzaN+eKAoeIsznrgFH05gA8MuiDAUDH3hM13Mbxve/wz9uu++aP1ch4T1NrzvoiTjj6tY6OUdQRqs37/dDz6w92c9I93uZacqqQci0zOYv8rGZyWJikxWfTrba0YX1Mg7MxYnnzn6SKgVK2aAmQJO2d+IHHYqMz82hq1V0RBBQEhyilnQBRV4NzrnKq25Fw2AGUJquauPh9tv2olyUUioXrlR14p35ljsfqGpXfHlzAu/PjDE7WJg3/YtwwzikcXfY6dXVnHWVJmDMaxkDG2z+ra3Tu5RtO50ZncgPyYlGpGWZR4zckAtHLVmyHiSkLOq+oeULhEVhJ0urvEvKGTnQuOIvl4J3VkSRYHjygj/09cEew5eqWaUaKMO50oiAqhVEBjZnaeGpa8HZQsbWKuKI90EXGvEwj5ydFr5UWbzx7stFVDU0YPGBs9JGxhYdr+ab8URWsCJI1d2fomO/MFY2gdC6kZa8r3d3GVTsaUZGNkFBcH0AloCQCAVchWmDGniD1Tp+cTli9k6eK8yubnJR7hSlqkDEkrGHL2zR0LceuMG06ugK5okhm5Sb/QBARG/f54b7xyXV03V9RVZL3mKBJBaw2RAKIUCUKEiHXqseE+Psq/QWoJkTP9B2ahxIgbt8cnafbiYcLj793BywD807zLOQ8sobu99PGGLVzLQPfP59ENnfbVMulc3wwhW+8L0pgvdBwL4xhkjF/s4cRPp7Ay9WcGkLMxs+R8PRRw7tdWIGS7WUpI15Fx1dvY6/YylF1K1eXRW8hxY3ZYu9s3X4JudyF584ojGaZHEuk2sUOwbfL1o5x90mrZrZQ1ZaiQEigoCQAVUpRTzWLtywIR4ZL20KiKGeI6MpNoeuVhUDvnj9koUs//+EZ5cF7lnAeGirkHSDRVYzDaxxz9UX30SNnale3oPmNjjo1K0maZOpJfTQcTBVLOj/IDFteGXELIpWaKMoIGitv6ZWfOq+OqbfTPIWmnoFXTIpI+rmRktMzTDt3xC2FXvX4I95ytchc6YrYmMFEUETw6I6NT49HUeE0i0RpKaREGpCKEWpRWpFLW9ixIRxOKvRVV9qXFhnd+IhM9j/bDJOlLRQDQlqcT5W96OjufihgNguitAP6oL0WfA4bE3CMW0rpo63uy7AaKUGtSE9SxkDG1jmXbbFxraKUyduWqodcFl7wFgE/ITs1p08HHvJnC97rwibANIZcHhp9jOe15k/tU8MhI0xRRPCbxbEm29eMtKZKyeMvIPWN3G6lhAhcxNqG4RfDwVDRyzApESpGaGkJCVAyRAAxCiE5Vs9hOQXM9nmoesClDJI0PYm6z9sokEKjkes2rKHStCw2m10Hdbafgyy6+afaqj71sdCCR6IbE3APUyok4bvXTxqxspx+SFwqAUcywwoCgMR0aSaSNqua2RjCS5kPXxCXz7nJlJg3vPPNGGSE7+7GvKNOLKyfjTKu5hATIQrpiQTIHlCfzNmeOEM9MkahkL31eaTPdmFw9c5lzPgSda/GI2FOaN0OsuStNaV3fRIg4zjTbH5vlyNGj0ZRWFBUEJAlBQAkEoiMopUjbGmBMiFhzhv+gBjxqn4jNghmuaIjWEbGYAATGsqxsayZ5j+juXW/+2aKUxhsB/MECXE5HDIm5B8Qz0FLro+D06x4M4SbDrmHiW9B++Gl690yFhMZUrMKMcoKtmk4p2KHXpZ4FvRSsCr5Jwpn2kCNkyaljd1yOjItEnCfhbuzPnYk4k565nczVVUfUVSQt3rbAmjlcCBPJXW/XBF1iWymYL8zzZ7IOqwIl4W0B7LBsk+dUhFDHEYwJLBQJFJWuCXREWNUMiewNUKCLTieSktmAFLMqvBtWd7h4IBTAuvyppDMzSL//5vVkwT+7q8tRL7rsVr77qnPlsT5cSk8YEnMPiGvQ0k/BTJ0NNJT5BWhd40yHX2Rc5HSEOI5kNqoHiVbyKynoBSWqMGXM9xIyJgnA2V5ZRqQVpgq/mqSd7O43b8coO3/Vznzaig+Tu4aCCcMnUUl+Soe159PBEblkTSUu8473vUSee8ScDDLyA1PRtrioRZT5KFNTrJIEAEQRpdGYVmFY05QYijVopaF0CAk0NLVAhM6coVSQPgPbITgoxex7fGY+4GboIkQpiGiKElAHAqWglPk8iQQgBaKU/WJ5niYxujFp1Jqt1isBfLCvF9UFhsTcA8ZqkNlmf3vSihrJDr2mFrF0YGPRJOoZ0Ii0bbNlkChV5r0zcosV6JCgTCX7/S3K7ssrXk8lp5XLTyPZtGWKuV2ZO+wulN9HzkUuq47p3VIUVbR/DgEQ2GWrVk2sKWavrRfzRsYcRWPLJk1rihpJPBVqAEJGkTN4mHgq3n1tRLEEpOgwoG7FooKQlFiUDmi8NRRoh2zHOoKIiECYXPgScJczH36VxPoQpQgtoCiAARCA0BqU0OwTDfNS0nqamI9lOoK084MQyPkgr8Qizxc4JOYe0GpggtJ1teoKxWmfbN3V1pRhXOUYa9cJGIvWNgy+U2XM5WfoPCXnsvP0CoFnmvDMFqb1iyK5It2PvNpxv1JMn10oXe2OsP0kjuBy+5grN5AStVO+OZJOorMl6jiXnwAIxDwDbe9TxrzRjXrOK2enjI1a1nZZrJvl49aNYOOpBwUnHzYuK0fDzHGOhNaE8TqlQFGKSchQe+1m3VePdrslI0lv5ODhvUetmNy2rxV9677G1PcfbM4ICBWE1HEEYQixVhkvoCILrbHOOOLiW3Hyx4D+DSzrAkNi7gE6bEyIDvpGzAQtD1j7MlykOIo1JhuVDNvZA0KLBhhLkRHy5EtAhMVYy3MofkLKvkq2xKQkS37i/QFZheyrY8lty5zPK2MZoeevpaqu5S813zxxZcjzYPKh8Ena/TqCdoe0IWiFavXclpzdx9VBw7WkXOxt4+eu8dwnTMofPO+IoKbcB8MSbc6GNBqKBGZEoKTEDPi2VzdPYOmXbwC8XH7KtAkzGgpWjowEx64bGTnhkMbUjd/ds0trQgU1gjFAAYUUaEAC84mU0qtrX46odQ4WmZh7G0x+gIORmljcE/pKz9oCXQUHwLKa3VYZt9nHij8AyRtMV+ndpnS7n8wsSqIWzYZUofmpnD023eTS+eSB9pWobdlLkMlPsufM5Cv5xNl09K4TuWTu/J4JQCDW37iYT2XZXQuIZtm0lUzslKNXhwkpp1MhODOHT+6WyHUsYPLxh/sA0NqrtdZCTbGtNMkUJinH4v3R/8vfnkxnKPGkw0Ymznjc6ARj7UbGwo0FsHZ3WM+m8nrTDiJn93bA/DFUzL1AZCX7GFiCtqFIL9P013biaNPbmLyC9CZitZnkzRRJbh3m+Gtr3nAqGQCEiemCYuWiG16dM1sUmvq+DTqvjhOB5hMbUUnCnRROXhFXoeRDklXFuYQZ8cns8Y40fQXt50ekw7i9gmVfo7x69kjVEpD46awp42VPPkSFlpSReUtM/ubDmGYsYiU7tbXLuu3+pdrnmyvPQGLO+R/KwjtukyTpiDOOW7Hiaz+f3iexkBTAOG6DihTRAANYp+Yey4HjNn2Ok9e+SPbM/WJ6w5CYewAD2SC6f51/ZfxgtuvExGl2aiFBMc1XEXFd9CBQEh/DwXVYMGvO6GhvTkwXLhvJbvejwpWZLfImiwIh59KU3YT8trzSble5yvYlxIVy04N/XELSlqB8MnZ252SbZAha7H3L3OOEnCU5TuwHOb03eXL2D7YfX63TdNQ4cUO+AecpXHhlsOVz62b0YvlAC9NJNgASLkPVe5rjawEgSnHliASrR0XtbugYoimaRKAhUPQGNabmjO4vU0Zb0akAvjr3i+kNQ2LuBTEPg+qfYs4KvLQSJXyQ1FdTV+heLm/ota3pVlD5ZOAtez3KHef3KyNlR6R+z7xHuoWOPe/4YgefZI/Pnzu/3Ml1rlu4mpgnYd/u6zdbMiTtyNdLVEbQ7mBL0IXGlesktS6XleSc8cZIy2nfA1qilfG6QkZdo+S4pEg6uS66D4glZ7NO6y5X/oFYKhOSuUaVWTH3zHjCmfs4WoPsmo2pdEAoDRpSNm6Eou1sLn5m3SGmOgVDYl6aEMFhVbpmLiABaBvtwFZI0waz9UhrO4WbHZpNO6sfsxyRIefSk2Quorr87Ui5jFB9Ui5N025f7rzwjmlTcbKBdSqvJAuf3/KX7zfbnfL1FbVP0pn0OYJ2JhgXs4LpvWFGccN84OzzFnrkTMuahf5aT+4ZMYisDdlPW7GNxsIqCTkbk4W42LAi1n4NuCZR5pvYt7d+fkhfeXOv3ChF07AhtDYjA2JqBFpTApJaA0Fg3b61MXGAJQOb2kEf1f+rqcaQmHsABYv6cAAblzkpQGcv/3b1p615vJKUc0TZSSUXCNku5Am5SzIuBMyfi3Lzi+p/vxJuZXniDKPndvkE7Tdv/Dws4Qpy6jnJyxxTUM6ZD0NODYMg49Rf2VfXSfk8abwAIICHWpQyKRBAsCFcBBq3HxazqEWgyLSJiSQYuQYQmA/R/Cw0csx8ju4VQ2LuEudvYZ2IHt+e3XpDWUbmnUqNG0nLltqIKa2F0IkES/MwZug5Vca5knKedMvMFu0IOZ8eHYhYCom7Q4Z3WeBP8cz0mYBLiQnDU9F5goakeZapZ8/23Imck/P7BFN6PW3UclJW5nYxk6W7hGTdKX0AQGwVtJ9Dao++c1oH79wW1ypKh/etD5tPH+vv3HlFUnWkTKQBjgjGsdEvSlGDxueHGoqKiTTRBJT0VJMFOLgPl9E1hsTcJSbqOAFAiH4PMPFVTp4wBEhH/cGSIlDt9uObNLos5nxIuVIllyjgNoRcOXtJCXHPCQUitYspKyVEWUrS/gF5gnYEnBzkyp2xj3RFzoVt/kcESEi+iE7Pun07yhBb9oujCezTIpPJtL4pz+6K259tp9ZS9tB+1IDaUBOuUb2rByOQVWFjMiVW8gBBQtPMbgiSMexEtPRFggjYm4LmorrKDom5S5DNU9KXoH/IjFAWGBOwILU1GwoWSFpLM+9TxxL1x3wRKMEhKwIZrakScvXTd1DJ3m/vcZrnx9DTLY1HZ0wI1ew5nDJGkaSrCBreYiafEvXsElibaGezBrLPIWk2+XBfBxQfMStXCoWWTJ+D2f7NWai/2xXXdmnB9YcGzcnsnOvYF7fvCpwqsbjd14L8ziNxva7AN6xS0caVEgftMikrNbVHzlml7D0bWvFE11FqSZjmem0y14naJQQY3UyqzbI4s2gPiblLiMiZ8x7WnAM1bQ+9hvac6s1yGkFMe8t0aZPXo6Jyou1mgy5IefVYgM3POTjceMqkmhzptSotPTw2E+OaH+2L//e3dsaN2IlBn6j92spqghakZNmLeu6GnMWzOYsAJVzQ3ZvI3HLy9bHfoNRsQggeiCjv24XwK9MM3DF/uzMONx+kWn6uUx1Ovldn5w3TAK7YrmsNAo0Y8t4dunbzXoRvWxu0njHa2xzk9Nz8xLsuE8pUTIwQIhmYAphps9wHU2kXPwNeWNouzgsI3tVLSeeHITF3gctu5Xgzjp9qO3/7BiYkmI4eMwNmzeecpscZLmiLc8Y0JJpENMpB6Lr1Ow4gcYttSPnO1x9dO/GgkfkaE5YMDhoL8Aenrwp+/bAReeltD0fNiDa2hU2QhMsEMh187RR0opLh3dfUhFFFzibnMhMGkOkQXAD3CJG0726KwEd3I9yyF2E+Rtfnpxg8fwLxGWPQv2iJfHuW6uuzbPuF/sI0gxjAk0dEnzoK/em9CL7bYMYOcW8L8rZH4voZ46J/b3XQOrrWfd2SCnNiGttDiHT0ko1voKEkTIMyibAXrwwCrc2bF0ctA0Ni7gqNKDpTBPUSo+684FdXwKzkwpNnWqygEU9JU9zZlAvvtHspS1wQ3InFNLvF/mbMD3Z583MOCpcTKfs4c8OoetOvTQbv/d6uODEdEGmEOCAl6eRBOYJGStD+PveTuWP+ffcIvOBt4R1rTSDGI8y+FCbYBrwMcsd38Wra/CUXVu2ShzHyq6jaPHHFDl2bEOK+VneN/583KT9vMgSAyQBs6Orjvj5N9ctmXL/5iGC2m7wBeN84DRMR39uXDryC9UU1Zg1mjoR438RuIMB096nnj2GsjC4gIi+ngAvx58QxUdwn/ja4wPn2OO+tSqtpGUH76gEZZZyJ8ZDzMw6UYOMpq5b1+/GaJ6wwQz7E/rlZlZJfSQfVuHXPhl7dEerlo/zt3rJ7Bhlfce/Ywjky1oEc8s+9inHo2ZRTXnpSvb05YXtE6ZaU89gTQxodCPCFK1TUW67mjU+yNS0QJvXDKJxinYJX33qtp0q2zuHy54yhYu6ASz47e6yO9dMWJncijRrmL+d/88tzFO4l5ooyUoYA61cEslg25dvundZRNy3ZSmpoxxlpvmceOqrWjabXdOyqmuRd09ytoMuWSMnZmxXEH1qdmjeqTBte2ygZ5WG3V9qc03QCOwlBW3KeK4hLVkl0+zSDuXDvsXXRzx4TfceUDh6Mes9gZQBeMMkOfh55VJ2mrJ64bapivTsQfKi3Ms4PQ2LugCgONrnZ1vqdN0s41pxJwUTHMqHxhbCey2ZkoImUZWFszRmTRSnHOaaxHJHa16TQ/BYIavP0gOgFv/vlR6NdDZ1VlUDut0N58rtL7sHtLz609oxDgyRl3anZsrjLfjbiLdAjVe9EQkuuLj/ftIFMJtn9jpxRQs6Q3LpLX359nZA+Zu+BE9gQgi+akPiWKfT8Jf679aq5IQTPngjiix6KRzofkcWrV6popZI51y2/BeC8SL3BsbaZqZy1ip4FqSd3OU38ZK5lnAuGxNwGr7t19nhqnos++y47iGStwIAydjPxYmNAZXyYM6yRyjxryegQ0Mi+iZnOPmesUO4cXtN5sSBCiHPDc9sA5Nk2XyTfHFPIM11MgvcoX9a6dIoZw74/qIQ5Be1iXdDud+ld/mXDq33lnNlmyVml2xNvDHcON/2R0Pya0WwC1Zt9FDAEJokJzP+omOWnj6n4lindMzHv0ZANAPfMsVssmM97JsLUPcmfaNXeYecmJ3Q+zImLnHjL3Z1Kvjf3gvaOITG3AbX6ffsIF4SYDa24mJCmMpq+cjd7ttg01lPDrbuXrJhfIhtyp4FTohm7sh8lDj4pY7GJOTuBa2af2yyFbd1nL5WH7X7D0R1V3t9+e1f8rm/ujDKC2a24e+XIGSWBiYBys0ZmGUlLJi+oE3tz8pFWctsRbAAAIABJREFUPd8DAJgF8Nc7gtpzxhmfOWZcd0SE/9EQ9Vfbdb33HIE3P6Lrp9VFfzPnddEtPrgzrs3ESt60RloAsC2ifHwPwlv36fDvDwkaTx4psX+3U9hmpDgFQts7S4Gi0EXDdi++sKyqlEGAph4Jvz+X65srhsRcgYs/E70C4FOxACYMB9NadWIXpq67P3jrSEWWiMDv5O76m+ErUV+Nir8NKdEsIi8XPgRlHwr/N5+wI+b5CL2BHokHndueqOdUhXZNzs6WnEpqj5yZHlrWsdjzAyI+sScMb5+R4PYZCU6oQ1+6EtGaEHzHNo7MzvEW7Y4pX55p7z7XCR/bo0ORgA1N+fQ+HbrOwvfs1LWPbQhmqxmfSV2wvbiZjnS37JSyXYa9yV2bMjTx9U/8pkzN5xp7xZCYS3DJZ2ePjbR+28JzU75zD95y2XZ427upScyQXsGE4auxfO//ovpjONZDquoLZDx3xdyG2bs/PLFppK6wperZXktHcnadgBXknDyD5FFL8pzSJ989mz4ci3xqSpL6/uMm1Du2GzO7P/H7cXXRW1tU0wsmR0yH38GB8BfNVGVfs7sYe+PHDarP7GX40pWS89rI2/nz+/y64/7E+0VuuT0Ckdu6SthHDIk5hws+yzVxHP1vEdaxgGoZQOqamodm0ji2cwICkELoBMCV0Nua7wxM1J4zFSBLugkpc978NWdYE3Ny7sIADiC1p+eP7ZC3f8PmM9FxJrhRan/O5JiL8GaSlvQJZCzdjoi9fe7YxNPR/orO7iu5eBEhyXzJ8E97VFjmtuaT8uWrpXXJJKIHtcKrHojHOnlprAuE60JwrRJOkbKtBXksZp5FMxhXwn8+TM0eFAjfu5O1T5UQso8rd+va8ydUPFFmvsjcAls7rK+c6SW3Q4I0YeOopxPMsDsbs4j86uhvhV/rnLK/GBKzh0tu2bYyYuvvqXAkFpiUgcSEbJYBwIuP4WYoozGaUUBoaxZj9mX0Xi/73qU91WlKb5Qh3I//YmZMGItryhBl1WNeHZeV0aFXRV/ROfW97c3Mc56oCR4/WStjvFThZswO/ovSpXLOEordlm01JCYN/7rd16vkAyri28SyuCcS3jVbMl1JDseFIES4IQDGlLBVMjDk5BHoF0wE0VnjiA/JhPc0Sac05d9nRH1pSod3zTDQueKsVsDawPgaH9tFeNDtEeUjuxi+ZS2SYeF+h2/qlZEOtRaQFEnHA5jk/jLYZecfBR9YzBF/DkNitrjsVh40y/hvhTwei0DKBraTD4BYFznz2glIZXr5Rawrlms/Q5LWmT0SVb0Y/kASR3y5aaEKJozF7PRzcGaVMhOGeGk8lE6AWgb3iaqIi/Dszz3c9NOdcciouu0312dVXEKWrnwes1rTRk/kXBje6Z+I2Y+AM2ck1g7JPrdOly/CD+7tLirE3+9ibQcFd88w2JMj5aNrot+0RrWePY62PscTSvi8CcTPm1DxL5pU79/J2r96NuiHIsoVj7F+ch36o3t0W7XssGWvrr18MogOzxF5NgBTZhsFyipnN/RaKFSJHcp1CLYF8dWPnVe7q5sy9htDYgZw8edmj5uNo/8DcMMiMTIAQHu2ZMLMXpz+09CFbS6dYeW2Zc0pTQLZUWwoU2Re+kUkaBcXJClDCRnn4zR32aGeHmN6TovnDpCaG8utA8kHK5n0tCT2RXKPc9v8jNM5+PLKWbKmJv8456XhztjjY/llBPw86u6gByPIu0u8M547LvFfHKwavQ7OP7Yu+m8OkcaWPQjfuyOuO0a/dZ8Ob+0hn5qAOzXk8Jzhzgph+7/5VJs6A1tHaC3Npv+Pnl2Z0FBtbybvi2v1K3ooZl9xwBPzhbfOnqtj9d8FHMEC+StXwYkwt2KUF1NhJW4/zfgD295tH8SICZFAzIFWdUlyUp/80rRIFKsIZlqL13r713MPreebvAX04TtxyGiQyWUmsmrW6cl2/UG25dGOnKuVs9tS4nmZZOGbNLxy+CyU5JV+pMTFGa64f8eFwF+uIt+3D9gW9/61fe2kar15rbTmc/s3TiI6qhbwHY/GI80ea9gZYxL/8UGquT5Ir7BMKaf7kAn7mXzXhIl3hpeuPA/wsWCk/vsfP2fxZsXO44Al5ovu5DqZab6dkGfbTYtKyu6MmT4feIaJpM+HGftz0pLOFNezKec7klxefudJpiksXqVP39rtDXLrvogbVoQLLp2PnFj4c5Thh7tbGirpIoJt6RbfA1F0M14kg0gcOfsDRhw522eXDChxG7UlZ/eQ3UQ0/tUTSAaVuC+qKFB5FgT3MS3Ae8QeeT19BPzkmG6+f68Kb52SsNsX/exxid+8Fi2pbEp0j18fQ/yOdap5xWPd+UvXBfiTdar5ohUlfYl+ZSnam51goe3ZpLUemSfCJI8KYuYuifRbrz5XFnUIdh4HHDGfdRfDo/Y1z+Vs8zKIrMQgCNnC7/xz6+aP3rJdB1ITQ+aFordka7yzQzqbqO91kTNxFFSY6ykBcOV3d8ebz1y3bN+RD/5kKvbvjRvcU0CmNcEsOWfkahvl7GzLQNaEURh16K8jfT55n+42KFOUE0L8yeq49YNmoH7Z6twReHgIvutgaUiS3/y/neetlNb3ZqE+u093fKdaBJ42rqLSD2XOmAFbRiZmDKQBjcRWC6uevRZqwVpHcG9Avu2al43dO6cL7COWdfSwPC6+pXXGUXubnwTl7aJlZcbNcRB/9P7y2/xllGxHyT6gSLwl2yo7/HJmjr/71s7o1p9P9RhgZv/AlT+dim68fzqGIBs1rqpG5DooCzOI+8vup8JklNx/VZ0m86HM7PeWOyFHaVsjkW5IGQDeuFqaIyV5zBdvWiPNsS5iYxDAl/exsyjI15GyelW27Nc58xerlvyPa84d/WmPl7QgWLZqyMeFn22cIpA3knySfaMHppJ9JM1aABAze1RivhRJh+cC1gPOVex8Tt7l2B791BOjjVou/GZJIAZwwW1bW5tOmtQXnLQyOH5NXcZLPMk6XWU3mxYD+yKNH+5u8ZpfzkSfe3BG+4NGqs0DKN47pveYmS+i9xycBQNITRni7XPP3o3wKLMWSH4111lbWlD/1fYzJb7VUF2R8nF10c9foXJdhv2pMutC8JUrEX1iNzp6ZHy7QbWxdE9WKaflE9NXKna6H7ED/5LwuuLZmCVnyuD7PvaykW/N8bL6jmVNzJs+33ya0ngtiNPsC70kCNnBr2TOrJGaLFAYmu2G/2toO1VDfjAJgMScgWIlLlPLHZQZAVz7X3vja3+8N84obHH5IbdNsucqKMo078TTIn9+oKQ8bUizE8qeujtv5iG0abHnt/vknPe2cBnb7Ojus7M3F0waflmQpqEU703+I9EGswR2aWCaQByL+tdZ6Wro9PMn2o4RmTdeMCHRJ3azIzF/Y0YH73pUjUwE4LgAKxT4kpWI1gZijcelj8X5K2fiMSPr05zxYxbwix9/yciN/bzG+WLZEfPmzZvVz576zl8PhBcyxsl285IiZIc07GfasZ6MBvSErim8cQey1j6itGfaKWTxjaYGfvKq5rC/rvLKGwVySLnSS+NWHblI7vhUsXjHeGSVkFBexTLJ25SvePXIJc3AdzLJ1OjMTS6HXx4f9oE5b5o0X0e8+WOyaQQwpK6QVc1utJ/pbUyX/b8yQvfWZwhsfExUOnov7DpI0bPGEGduUhkDzgPHj4jeEAq3tpk1BQCmNOS2qaw9ek0Q8NyViABYtVyw4SU3TZDEzU+6bdKgNIakCT4WxvX39u/q+oNlQ8yXXXl3bfbIU5/3C+rXKPCopaiQ80jd4bLrvqilc4gX9wrSmzGbsK1pSQ6AJT0XThLIkqHbIJkd1Yos2S6ZXylNLx4pl+STIWW3LXcDSrfb31w0vHQ5V7/9OuregMyUUenuAvFXNPYzE6T6yJs1vI+qM2Ekz84f3ZcnU/dx8lUzcqrZlaMLkmxC0OqcrIARAY5LZjTpMyN7OKEu8daoCxtyDhQNSRxLsuVL5vyz7nKwSjk1ZXgq2c4QFGt599Xnyd55X1Cfsd8T8/lbOFYfa754RtRGxHr9oMvTC+jUMQBq8we7Tet0P2kFlfebyQcorz95ZczcstvnkwmQkkAy0k2KdTRZ905Cn/yRkop3TObjkOTjE3mFSsuQsn+OkutOkCdsS3xepNVEhMIvQ1Vuntmi5PwpOeeYl/6qZJpEhTz97P3jWLJtHnhcDfr0OvSdsxLsilOqX+v5C2e+HX2WOAcH2as4OADPGlfRv80yeLDVJoRo7v4k2sN7XzRtFFnaemW9D+lNkA0CMeTL1/5W7Zv9uqZ+Yr8l5ktu2bayqVa9UlT0MlBWJupxfwKZDL4jKG4WbvOyabHSzk2OnaQpXKTp2ACEkri/itdedqIuTV+ukCvVsrfBU/QFMhPvz99XUMq+Qm+jkgUeIZcoaLvcbgSXzpCed15/UEmyP5+5X5YckWY+aJJlLqbpHRGnqjl3DW5dwQbG99NI9l4mDSPrWZzpEWbXhK0EeP/BurEmAJ85q9R/34ZRt2+1yudiTtFuUMdcsCbIvsbvXh/MPmlU4vtbVC9/IB5vf3TBfJGYNQT0B5ZkVTPSOQ8JRiMj4Yf6eU39xH5HzJfcsm1lK1z1ipbmK0QwkTiT74fwS+7LFH/iC8JTziDd4NK0OW6P9HnAKYMCscIjuHyl9/Yro/4yZFlG2gXCzuXt/Ul+mztXnpT9/crb7l2H6sGnV3lOxdqzACX5lhF0GRJizMe+sHAmDboBJEny5NdxeEY1+x2ICZl7x+bLUPZMUZK2HQjEpvXCvLljr+txFmTIuN8VbHcuFkdkLXKdzC/V5TCFJszUUvCmlyLtNgDuVzG+7epzBjuIpB32G2I+fwvHxsZbG1vCVwCYsHEf9ktCTlBW0awiTe3NdiIGM+EEs4q1cKyj5pJ8rWZ29mdHlG7eOyBLhPnfKrXs4m8oTxFDMj66CSnn868i5eS+pNurg+Z3YudU3Sovv8zoPcAQdFK385DUvcqN8NMeAft/ChCKUeqJkrZE7IrqC76MvcD+KvGDpdllAWKY/gX3giB3bJe1QQO4bJsaPa2O+KuN7Dx/22MryAsvWX+r2rZcx98fP8rRZ47p6D9mOg8+8ZFX8kYZa/u+m/in4tuXrbdGa7qxpLww8ljyxExSLv584wVE8/Uk19mtgy1U30AUZ8QGip7wZX+5fFzFzMVaBiypJQotsyOXVlIi9ZKVLufWVZkCl3z6bkk5e/5iZ2JJ+SqRKkD/PrmPRZagWZ6nK1POhJGoY5u1U8DpOgomCsftKVnb722SV/6Z2HkgC52A3Vx7NbZGkK1Rsf7PaMoDLagj6tBd3uA54RdR1o68M6bctq+zC12tYFIpmjXS+hR4y4DrWBClv3H9a9Y9OLeSLw6WNDFfdEvztAtva/wOoI4zW/rdBTFYGGux7YliMtkmCGXbXgKtEzd5O5eyINZwo1FINwQbjlDLKneb5aptJQRepZZVmVdHgVTL0rQn5VJCLlPMVV1FxkTvqUmPpK3aLQQmquKiEjIFUOQF2/GnRMwA4W5Vs5TklV9uty2HlUK8ehzcqQVTBGag+atIyWNx56O/MoNgUw0l0Zj7g181qe5tdh51vCoQvmk1misCcKUSrgyET6insZHzphaB7TSHkFCkKLplMwegAiFEM/rSwlxZ/7Akifl1N3F1XG++mcCzzWSly0YiZ5B3YMjuRMakYdK7Tp8kUENZJXYRELPfsa6IuFgGf//TDhlRF584GeTzyIfkLBJ7SZ5Kitsy6xUkWZq2DUoaF+VpzC09ZFQVc/TvT/Ldyyvd/H7vXKUde7n0+e1V20pRtEsrAK9bQboPyYowbnxmWgd/vauzP/NdUwg3TaJV+Mj3Cf8y3R3v/NoI4pdOqpzZmRBxHQPZ8qUzgSOJk4+s6xwEaN77s698oz9XsnBYcsR88W2tZ0VsvkUgq7BMCTmDZHbl9F1z5rCkX8+JPgKgzjGBHyi/oimeJE3+K2kLS5Zk837LAI5bVZeLTlyx5N6ZRUFiyvCUr0+qmd/2qjmxLPkHuY5D5BQ5bLqyj1UZibfBqXV2Fcv1+w0G/z4jwTPcQJP52k087NOQT+3uLkD+qaOqPE5LiY1elAmDa3VMYvMTF8vINosYxz/++h+dNz3vC1lgLJlK9obbubYRN98aI36maXEeAJzs2ZKTuFiZ8PgmKL62v34wfZcDgEwFTcYQeio7TVNMn6CdKksU46LPsLOEwGwLJDFLMJ2XMaOCXaMm/6yYcHEmH//XnYuEm+cv89czT5pzH1ODPrIGfX+rsxnhfTs58vQxmQ7SC+r1pKX4yC7W8rOjVOE3xhmXnde9/5LZZ01/uXpi6k/quE7inj5cxoJjSUSXu+CzU6c32fwghM9AdpTOAfMnmT9xJmVv5JJkj3HI2JcBjw18z+UiurVjLpCdcb9E3gZddY+87YlrX+L9ItlDuvlIdnpWXWJbDBnpUvD8rEn1N9sxkpy28I72/ve1GR1ct6e7eMwA8IEdrG/XxXO3O8bUHaENfm3rj6TH6sZ93Z5/kBisYibl4tvjV8c6vhCEkmXWudcJQvclB5g2wARUBBUE3nx/VBARmLDuudrpXKiYs1R3Y6MsrfxFM4bBkviOLz5ci8GZHzKdeSW2Zj9dmQ2ZufzchsScgdxBKDcndFNb7Gv12WkV/OOeoLavhy69G/fq2jF1Fb9qUuYyujuDnzap/vxRjnacqcbDl6cZfvv+eOL310njJSvztmaD0oEvVASUaZAGQlOfAFCoWs2H53gJi4qBEfNlt3J8+vPNt8eCZ0K5rpcDC5n5rX1zhJimbFK/ARtVjm5sn+3dcM3bEpj8PGXtVciCD6ynutuRdwkvv/ee3dEtv5qJ/SHT4ogs77Ps96tlfJq9Y1wZRKXmmMxgmT5IeNt3mlhcCQA69eKwt9XZ+LfORswQanIMSoi2zTK6OKZqX/Jb8Ywq0IJg826RbzXQtVL18Z7tenRrS6m3HiSNuX6W75pi+BfbODozBz+PPRryrm0cfSzW8rrVqpnZWRHEiGKcMdKocqSN3shWHTNzvIxFxUCI+aJbZ46aCVp/AWADDgRjcgXKzL5+vxLgRJdpSwhdWAUtCYEI0sEIyoYBlbwNzldlyJ6wUKDcvg4mjfunYn5nR1MnqlKAJIhSvhmf8V9O14vhQQVQcZHk+2VWIVJydjc6TrcBpiVMf93dgyrVbJ0Zs6P+7AHuOOed4aOMuP19Vei0z+apQGxtze9rdu0eXf9RQ4LfXyuNk0al64kTdsSUK3dy5Oa9rM2nd0IB+G8jEhc4OPehFCXphD90keXsxGG0jYc9M/vFxA+LTswX3DF7PCP+FaEnF/vcSw/5wSX5jh7k1v1pTixcyMgydCDVee2rSJ+q7qw5pBgHw6r0vK+yIBk1KH7afpFyUjTDXgJLzqlVCcWIcY6IUVSzfp4VKllB7HBwmw+9cwMJsVfm6//2iADApSs0/3JPiRtgDsfUoS+ZRPObsxLcmhvs8Z0Gg9dt5fhZ4xK9cIW0njEuUdms2QRwT4PBv+xDeNM+XZsuUcnnT6rmySPUV+1CfWu7gEUWL16hWuUfhHynJDv+qTBY0FjT/cKiEvPFtzeeGEXcTMg4DkDTRR6FoGKuFU1PvEGScCCmR9BYNE0ns6nlySi2Qs2mv+SZNXLKOaNU3bpTs5ZHKkSXibzkhUgqqOO8eq44J7LHJYITqDz3vODI2T4EM92fpB852xIpvKRmftT0V6dpkY4RKpgkknzch8cel3VgEzs0XIHKmVbSJoYLAZs0I7q8Lc8cAU8fof5Wo32g/DevRuNZ4yo6ZyVaX5tB6Eedgy3yl6YZfmma4YgSHl+DXhuA6xQ4TcGjMdV9LartbQaxHFET/YfrpGHea+IvH+NoVVoAGFfg766Vhr/N7wB0CyoJTiS0oatovbjdWC2ze7S+CsCSHvUHLCIxX3hb86mx5p+KSB1DUjYQV0NtXEJRdkAfRMR08iWh5Vz72VTKfNvayzOdwSRJUnn+9LegdEvSdMyn03HttrllyS0vBCmXnS9Ru45JPdXsj/bLMGxqxmirosv25dNU7qxe7QW/Nxm3Xr8tCNoN/LunIcGzxhHd24LaF+u2zN/QlHsycTa6q9LbY8jWWOSwEPqHzc5q+ZLVqnFwKL1bQqx3Rhqj2awHMrYewI96zm+RsSjEfNEXW2cyxtsFDDEk5QSZ1r0lCebISdI/Oy1OGirU2jnNiFMAbW9tJcG2qe1zJYKC0pXcPrG7M1+G5DdJ3W8TRhkSrwpPoVd1yFVtczskZ2cuPV/V8RVpCjvmhmNr1OdNsPXpKaml26DPnkDrml0ciSG4Zjfrd04z3BZBRQt042c0ZeMD8cSaAPTNGC+fVM2zxiX60A498oMmA8Co602rg2a797ow5x9cyE8pBC8SAeMgOHpBLqzPWHBi3vT55tN0S7+d6H22guUOTRsNHxpa07RrtQap01iFmiDNfk2CWpvjympuZYVug27Sdqmae1Ld+W1lankx0I5888tVx7bdZxaUSDY2dKcytCuv/9sNbNrLJ+PWnTMSrg3ASyfZfM4EolAUjwjAv9qBUU3ggS4Gn8wXs5qy1bM9v3CFtP74IJlVAJ45rqKvz+jwk7tQv3CVNGulg5r8i8/2CGpbV4SmvogmIBrUGtSEBOrXFuzC+ogFJcuLb288Mdb6jyAIZKiUC/BH3roPf6qYneXCdDAbxUyY5pl3QOG20jbjgKxfs/8C+y+7Sjf7v6WoalF2odTb7asyhSwqOdtblpCkU71Mlwt+ye66meRR3hnL7K8b1VeZxusEltzvPKrRqkD0DYdyemVA+pMLvHiFtMYC4Z9v41izx+wPDsCnjUn0byU26W5w9rhqvWu9zPhfgzPGVHTGGObUSZcMJBHa2bI1IMoONCGVUse9+padF+/dd/9Nt2160s65nGMxsGDEvOlzPKLF2f8hIjUMSbkS3hgTN3tkWg81xc3y67lhZacwMd1/ltVtxchTdsI43kbnYlfFD2Xqrd1TrFJ87UwAiaK0v4LEC62rie36hRxvJssJJ7qbbu3JeY6s4NTKNARcXOfSdN3+zeEyVyntviIQUckkV4+vU8dzyPN9G4Kp4+rQ355lcPlDnOj1+HtbOiCCni4n6WFRSJxtKabv1fr32wanoh33Y37t51DC2ktXrXn8Cy74fPNzrbB20w3Pl929lnuhsSDEfP5dXIFG650CNYYhKVciMRaLQESB0JDUmAw7j5SVzonrQmJM69zs9YLjszhgsLfCAt2O/FtRE9kXVbXbXdHSwgQCnLo6VIePhVLzvTYWE86vGcgRoPvmMb3f/uwxGnCuFXsaGt/d0dTbZizFdfGMykzVi4H8KNuP7EJ9Lg6+Nfs61uZY7l+2oO7Yp2svWFE+sq8MHae5EkXX+ed3Akq6HQKMQPjSkbj5wtfe3vxiA7VP3/AC2TG3q+g/+k7M529hUJuZ/ROIbOh33ssO2kosN/sqbBO38Gddp/z1DNrJ1JIas8CV/+pnrKu//Vs7m/fPljlYZ09+zvqR4D1PXFk/cixYZCZeGMQEPvWLqegdd+9szjR7cCbo5kPbFt0c7PRxdtu9LVFfmEJXEd/y+L2HOf7MMUR3zcy9D+kjuzhyzgq0+mLcTj6Wtp749UibwBumrhlPKAIjAF8ygtnnb/r8zOeUGr3xE78pU/0oynzQd0P/yGTrIig5OW2CD//m9sfiOoztjEhdgLLVscdYI11TYW+cecyKUD579sGjR47nyDaXzTnrR4JPnb56ZLmQMmDU/4XHTYRbzjp4pPOQDnj3ZHC34Ma9UusUw6JWQfwPtKi27NH1bRUDRZQAazpYKu5tQv2si4EmDtkIiwZi3f1N29BN+9d9fdMidYq8VOvZD17w+emXX3Z359lUFhJ9VcybPj/1NCr9EjmAh1n3AkpaHd0yxesUdAHx3TahG2Ngup0X0w7bI46eCOW2Zx80+uKvPjZ7/0yx2isB3nPKZH35UHIWzzpkJHjl4ybCLT+bWtiRZvk40d0ckumFEFy4io2dWuTOKdbKcjipjvjKw4Op7zQQ/Mc0w29PM/zPJioHq4wo4TkT0jp1lPFvjKtWQ0M2PhivKIuV8fi6xG8/SGZPqHc/1DtzLQI6s5dSdp4/1/kXeBHp7J849zl3bDHDCYG8dmp74wWbPjd74/H/MXLn5s1z8KOeJ/qmmC/8AtdDwreYMA52BtHhX9s/Y+dT3rJQkv2AUFGgzDbYNNqkSq0VeZVcoZpzNjeks7zm/iT9S2xz9q+svZzP0zv/UROh3Pasg0aPHA+R7LPpTl1dl+WklMtw3tHjqmjnzN/T5J7lfrP3y+QoTO2nvYmfjF3Ws5ULhIcE4P88CDNXHoKpE+vZaB41EH+2Xs2MK+EZYxL9/jo1+2frVdtAQIeH0H+xXmbOm1TNtSG4oQ79lnVq1k+zOgD/6CA186kj1L6njUl/Pl50tnOhUGXrGgNzr2nqXLJc/bcOSi7/2TOa777gjtnj+1K+HtAfxUxK/IXZN0PUcKh1L3BMJ9ll5zKXviNiWVNc08ve5HLbcmphdnybszWXmRrboucDEhw1Ecptv7F27CVf3zFz30za779hpD0p370nir+2o6mn9CK9T2Wdf257+pOkEwCPXxGqlxw2GqwMy3sqDx8Luhc+7a6yr5+vlKDzc+adOirxxw/H1K17UXv/To7uiCGvX6Nmn5BTs5MdTBNlrhnnT0rzS/uk9t0ZHb5oMmi+ZQ1m14QVIqJ9+b3F7PGmx8aZMPKmQCTR5ry61vH8BI4VyP/c9IXmV0dma9dcfZ7s7b3MvaMvxPza2xvnapGTwYrWSBf+jfpAnB1Dx6JhOyW0FkKDcSw6jgRxLDpqidaR6CgSHbdE65boOBLqSJIolYo+ExvvgcQ+4v3M4vrMAAAgAElEQVQKu+RX9xxynEJ/X35H+/f7qIlQPnvm2rGXfH37zH2zMQFBUNE6nIrJy3+0t/G5bY0upg3tE4ik0yghZs10OwV01hi33XYwvbOu5KqnrR553qGjhaZ9Nzbmwl2oupWiaKIKuvXMzooD7fbkotxvdcEEwHmT0nzehLS+MMXab03akXde9is79GWMBwUTMATAu9er6X2xyBFuQtW5fHL9oicmHJippWA/NqS5X0TaUU5tbp8w0/nXDeyMVc+eHW08+TV3tD5x3TnhV3vuz+kR8ybmi/6Fh8etmVfn7TW0ZEw3k0BmZ0mLeL4F2Q9hfOGMNwbtC5SYj5PaDwg0hBqAJqgphZF/HjOXrTti7uUud/naHTEeqNPW1pVxQxYgAEZV8URHjYfy2TPWWXKu7mq6/Id7G597dDZOAhstFlixDPsOl+0AsWM25qavb5/9l+euHztldS3zNRsPFU5bV1PJ++4uOyF88/PzXS3uSloTJdalttvL4BN1ulw+EQW9NJKo6IkAfPmklA6HHg/AEETVsO1JVV641QG4OpgHoXkNk0qXOZFkYIkSUIn0ZmNuj1XC+M2bbo+erUf4T9edLY/N8Uo6Yp7ETImas78NhRAAM2QM0B8BRersU+yyo2JZI45NS4EE4th+4GPoOAZ0bIZjx2ZdxxqMCTKG1nFKti66GZDe06ROlt3jCoLO1s+u8bYnTtbe9sTJrnqwE3L+tx2lNspv7o7i2x6ZjSXPKwsNZ67w//NVps+NQEHmNmLif92zu3ntmQdlIqUdPxmqL7/40LFOp7/wjkdmb/rp3vYTjxLIROSrujFl4lkkcz8JQDlS8p63iNUHys+9+EIIgKsPC/btrmjTPK7e3+avU8PZEiDxhfcJVlzfCALtohoAIAjSDqPNXdwcCiSnoDn7nk13tD507Tm1r88pjw6YDzHLaz6371kShCcBYkjZ3iAhQG3NF3StFvv2xzmCXiQT4lIEGZuPmAbA2H7OYpDaEDRjUNt1apPeiGZkmdTlh2qTRZ5cHNwIwHb7iPJRgnPAUeOh3PbMdWNX/nKqMKDga4810jlpBQvgzFmCsvvSRj2XHgvgS4805h+A3T9X8mjtglOLdDvKbo73PuS9NJKAUGK8Fxy5KWXPIrksJauwc6d74nifOux6RrVqFuUGkZASCCVQlCDUSoVEGFBE2TRB6fG9lULGAP3WTXc0T63Vah+55myZ7XxU95grMcv5W344oZTaxEinKtkE3BGnlLWO7V3UicrQjGWoli0SGzMA3TKGtzgSrbVQR8LI2pd1JIyaxubcaomOW+a+atoYwExjHidmC8B3pzNuHigh7SqJbAyuqfSpaJ/OAYePBfK0tfUCs0xrmrG0jkOcZ+oCqmbxTApwvap5S0HZcu5mNGONmMaPed6o+ohmmhH+X1lBkRBx1w/O/0jn34tBdwHlDPbK2ZDtNYo4TyX7QdGAmeuPtg9HbLxtBSgaFa77clHPipr6uIu+yPd+/PnSt4le50LMAgDhxNHna3IV3RgHrUE7HF0zFluxqXVkScSRdO5+MF7Aare0QR2bt0kD1C3jKxVr0ToSUENHTbMcRaLjyBAzI+i4JS5gBmkD5Zs1JB1ERBp+UgAww9IpJE0rtJ0jvjxKAsETzE/2OgdoAm/97s7mnkjzvA2jmffv5BWhSsqZqOYebSudkHMby1guHCMnGz3V6Q/JTtIi2X/iyprqn/NfqT0CaXxuBYhGI2b25iQmi5wdKHHPc1/nrFoGYM0XqZJ227JlGjycyiVoTRnZcs2SEQKhhEpLYL0xAlCUMm9WYCvFPNRyHgQP02y+61W373vvP79gxff6kWevxCwAcP6WrQchVM8hY8OyZuwMGJupjwSgjiNhHMv42oOiMzcEG556cHD44ROyZkVNxkJV7Zx+IEHrNLynW9ZaG5uy1mjFEeIoQqsVSxS1ELVaaLVaaEUt/PaXR8KpyH0KaWNsWGNatv5ZgyKzNkpX6ZIZS6zNTpCqE+W2m7wentW48kd7AOTMnJlfwfnHTGBNURBDE/jTH+7mHY81as8/pGh6feH6kfBJa2rBI02mQtkrX19BU6CYYDOibsSIGpGOU7c4APbZZKqw3w/opb38CSsKdvZHZ2Je/3M7wMRmfNrBI+o3Sjw4koxoWzcJt7oHQBgfZhrRI4KfPTajj1k3KtAULyyemfsRALT9SCfPSmx2kgzKEKW8r615L9Im/tIg4zxS27Itp30ZZyLdemy6NSvhqDZeLEJn3lBCQikm71XvHX8doEeDIPjDC+6c/einnjd653xzm5MpI1gx8VLoOBRqkhRoTa1jgaZRyHEsWsdyzimHr3vlccFp60Zl1XwLuhyhrSAj02UtZr5OLUYsxoEgIBBB0DLDTaBo4qgqpELOVEtm+MI3Q1dqXU9zFZLkLAk/3tnEj3c3k41SMcnqczaMFYhZE3jnPbtx80MzogRQJeassUDw9ydNyuX37MHe2JJzogD7SM6WdO01SxiKGlcII6X0vhabM1EcA+aD54hSMtMtpkoUAC44Zjy88LgVhbq0dTrmn317VwMEGBOAxu/92upagZjNhzVpmrsgVlk7s5vlRlvFHOCWHz4WP+cJawLlXOmMDchJeUCpxG1NoKgUWLiPyews5hih8jrH+txa6RJ+gKs2aTxSNvblu+/f+xAkjJWoZACPkkCLUoQoWN1i0velxyQHMyf3Ja/9YvOwTz6v9on5qPJeiFkA4GWffvhgCJ5lOqoo0BqxIWXoqKlAIhwZ1ZeetvqEc44Mn7QAWmeIKnhE7N7CbBg6y9BemnbHd9zXLr0HTeCdP9iFmx7q3D9y2mQNn37Kanzo/hn82+4W9kQ6VedW6szrjXKkbO3JCe8rAkrU2hpGZ6Jaa28zbmmtszZnTy3XROHElUHwumNXhK84ajxsVyT6bnI9w124uckiAioFxMSPts3qD/+/rdFv//qGUBI/Z8meyytY/jH5yhkQSFCilKWwsODI3yZVRnC+65xS/OWOxs6b/3PnfQxqZKAoKiCDgFolnzVQFBTSYVcLdwHxC159RxxeD34Uc/R37lkxj9THzwUkEK1J0+wW6BiMI2EUgbolb3zGoSefdUR4ylwKNEQPaEeI+X2Z9dxOXzW1O64TYaO4XxN45/d34aYHZ1J1DWBfq7rj5YjRAO86fkXl/kVAzf7NC7tbujDQohLM/eZvajIBqzJfFSUAQ1z/vW3Rz7ZN601PWR+efOiESjypM/Zmsf/Mdl9tGtLzTFvwvDGUWx8Eqs/q3OdIYMdMa/ruB/Ztvf3Hux9iUIuDIKRSNUIpmisRKoC+h4l4LYkFLP1zL/jCbONTv4lr53J8t8QsAHDW+++aYIgzjCuBCeIOxkIdQccRwBZefNrR6559+JCUFx15gqza10b1UnyFLQlhp7ztFLf5TTtgvAwTMvBI+f7plPht8nt2t9DURL2rEGz7J76xrWlc6PxnUkkIRr4nI9Dzph6PsE0noDNthLj7gSl9932/bIIxJmtJI930D8fGHn1i7f7/HKtxFkFIFdZ0ENS0KIEEda2sKxkkpAqEEoQmKoAKPZtssMBU5qH0nZDUtc++S7OximKIVkFIhDWqMKQKQkIEKggoKqAKAhPLPFDprC39czDqhBe+5s7Z7dc9b/T2Xg/sSTGvP/YpZ4BSJ2MYu3JLtCahNRi3ZMUhRzRefmx42mLHOD+g4Q/BLuxDd/vKVDLQnemiQjFrAn/63Z24+QGrlP0IaCLY2yI+ft80Lj2m50kv9gvsbGh+8Ed7WjqOPfMJwBK/M+PRZfeTdtg34cZpZVQ0YVQztUBZU7WZ45jQCntaGogJKhCakNh8a/foOIpi3VI1pSXWOgipEYZUBBShlVKEUlQS0AhyIagIBSgoq9QXCaXT/Cm48EoSBBQRiAooyvxCBRQVkqKgVEAqIUXB+DUHaX9qsPBqOQu+5oI79j38qXNWfLeXo3qzMYucLSRJbfyRNQHdgo6bohnhuUeEh68dGXb0LTqs2jWVNvvWOY+NUnNFt/biKhLPHONUtjnVn35nB26+fyZrF/aLJsB7f7IXh44EeMmGzIC5/R7bZmNe8KVHZ7dNl0zW1K3rbOFISU1BBKACCrVYNwpQOcup88BxmQSEKKpwJFa1OJYw1CoIqcKQEta0hMooTalpUSFVGBAqMKdSAa0bnVkeJJxit+YV5cqjQvPxkMAofVHGVi4BVKDMgBNFiLXVpKMEF009CiS8/DW37vmz686d7HoId9fE/IobHz1OEYczjs2laeMep+NYEBO6Gcvp69RRcyr6EP1DR4LNmikyOyk5f+Y25gy47db84RHvu763C9/c3kitkwmR2zxt3pEG/uD7u3DDg3Wcc8go1jlPDvEOKm/Vzv3eVG5jMY0Rr4zMEM10f64/1a00I+I7O1rxx3+yN9rd1CS9qEhONbcrm6+M3YoWpNGVYJQjYsswAY2tWYtp3sfGDTyw51PuoQkkDCkBqIIaVVDTKgwJFVKpkAqGkEVC2/QPjGIOajTmZwEGTcxAauKQwJRLzIcDUFCBIqAgEhAQQ9Q06URbUl50tezACRmpXQbwfxWUUwW6Jub62MhTrccydBwLSWhEJnZD3ALZwuErZV2vRd7W2o2btv97r4ctC9AM2jCtUPtLTejYDL2ObYwMHZl4GXErRhxFiFsRtrWejkYUpNHkko61ZACUWVLWJkfYkU82ncD65NnC5P2Z8+nEcgKQ+Dd7rkrpQBQRfOnhGYyoEPWgZsg5P4LPkZUt1ze2N/GNHc1Mnkk53LXliboTeSc32f6XIVJvmzMfJPvT7aCZKuqRvc2G+SYl18Iki/yEqo6AM4Oo8ufOl9Flx2J53XldXJTkQdCY+bUAShn1LIkV1U75rc1EsoAh1gAaQahVGFJqNa2CukYQ0qjmuoaElMAqZhE6NSpWlQ8cgTOnpAQtlpihxJZbGU8TFWSGQ0kgTFl5Mcb6F3DCa+6YfdZ15+Ar3STumphjJU8RgmJdf6hNiEpoTdCEqFxRk44BW/J4pLkLf//gZ3o9bHnA3cvMPGU0Pq/u1wUvijUYaSAyv4+2ngAd1VMRpgwpixQJTJSbd0eyAzZy/sduf6KAlWT3SSLA0rzgkbm3vqo2hnpQSxV1QsQ5W4gfYCe3LXH3c1woQOKQ7ZttEjWJ7DrK1rMk3Y6UASAARKmAOo5FqGHsuy6dZLL11XNRLaM9cko9uVe+inbmKv9LlHyghMmXU5GIzaATUWI78gIdBBKLKCgJtJJQq0BpUcqo5iA0xByGxufXKebkfRiMYi72A9prDLzyiCBwNnCRVFG7tEoGpJSzEJFXXnYrv3nVuTLdKW1XxPzy2x46SikczJiAsvNeIBYQpI7FRDvTrMn8XYyGmCP8JrZn7zWC1dvpeVUkJOhn4swZvrmjjPik6pfIkieyxNc1OcOUxbYIMgQNP98cOVbeHL8c7p7kypYjZad+BWI+ooJMGkIjia/hn6pMLbdjBvsRSsqRQJANEi1Ig4LBKGdFZKI4Oo8DN/rPEpYKQi1BRAkUEQRaAqUlCLUEIRGElKCmjUmgpqFs558KLLErSLAETBkOyVRSHhmbLYkvdmJTLoQZHYhatuCKvWPT5wC4uVPKroh5JJg4yXSIasRaC+JYCBOQyAXcifWBG/NiyaGgvnLLVdvQOa0Tc/DJ3rc1A1kCAzyi987RkZyz2zMEnbku76DcN6bsnhQI2Ve0JaSckjhBCoSxAIppPvTImXbS8xLbsp9vFUrTuA+qW3UfNm+/EiDSaQvI3RvlPUZRgCiowKri0KnjkBLUjDqGGDussopZAiBYYsTsCQn7BTIrOUKm3ZYt9CBJ2YLqnPO33P+FGzYe2XZ6rq6ImVRPkIzuMi+KaBI6MvGD4/lHPRxijsgQHoo21zIiTpadinbbTIKkEzAhR3tg3lyQIW3Pr9knOdh9fgE7kXOeeHMEnR7SXjGTrNhfoZDdPUj20UtL0M2QAeSOtyTuJsktaVFU9f3RzvBY/DAgNSm5yF9061YpJ3Mm/P/tfXmwLcdZ3+/7umfOvffdt+k97RLyIslosS3b8oJsCR7FloAJkChVuIBymYKq2MGBIoSwVEUBEgJxwpJKVSBATFwxEHlDyMgWpizbYTMyQlib4UmyNutJz3rr3c9Mf/mjl+npM3OWe89d3rvzezVvZnp6unvmnvnNN7/++mt/H1zd3oomwBISG4IygDbEyhBpAyEhZYcsE7MBMYitxezczFxxvG1SRhvSGM0UTbIdrORajh1AyhYz+sDhNwHDtebRxCxCdO/S1WIK52pi7BBwKQko/fMoMB0xby+kIkdPuImcUZFmTLju9PVYzWlZiMooV4D+YrDcQlNSfRvRNgEQA8xd0nx9Pm/MtRIT0GD2wWISizl5gQyScrQtviIDCEfnlXCTMzaQe0LibYgt7LQtCbNX10z23jqCDi8tgSVW31wQiI2VJVgEDLsoCNw+KdgOQ79muyZFYmem2dyplMYFtxHsQDD96oydBmLcio0S8+33LV4swB4bKNdUBoTrArEBuGxQ9w47CG2E22RRI0kfZTXXyvUWsCXpYBlzD8jn7DFHzCPJGQBWj6Ombacvh9hipvDfENJLyS5aN5KgP9ZAygL4ASJUs5bJzQBqqhdVUock+03NbG9bvPbXW2+vsJVXqhnEIiInPyRZwozs/h+Tnz3aejOQkPUFFnL7LIBfbz8EGPMlsfMIOcJV77j71MEPfseBk20ZRhKzKuhSgz4iMwJGCqq+oUpEYbc6bBf8k1/zLa6zcG2wSUSmjRZvm9Wc+jXHpBGR8wCpoiq35qkB1HXTQErNFvJAmyDxJTbck4b9AdJrsJIR7bu1cZcI3wknDO8nKLF1W7N0EYyZ5kZ5mKRd9TLq7Yr+SCGwUoOk40OGElt3OS6FFAmYBMouVlMmm04EKLaj6YjdUGarMe8Ui3l8bHdk/3aIgGSGbwTwubY8I4mZBZfa7x1rDdgHioWEYD/fANi5ws+xP9x5ipR0JpAo6nkarOagDUfF1CSNqtxAVLGXhkdMzj5P6LhKSL2NoJvaPs49qaVFdYVrHjwmIjB+Mrza+cb99qXy444ljNiqTkk/bcswa7nGyXEbq3aGkZ8iIETWbWVBi7WC2VrN1l52FrRdg9iFeraxjEHkyuJ6mR2mAH4FNkLMpZKLxQ0oAtlnjAhSSEmllFbSILtMs9kd1oGUrBr14SFWc0K8/rwjl+/D9193GK/Y30POXDtWQ5SmiMHUMF32sAQCYA4CPOJn2WYhj8BqKTi6UOD/Pr2Eh073BwkZGCDVyo2tXlaI0QyqlxMTsV/FpNxIzlIvf8BajuqPt2sfqhL+H7w9AoGx7xBIeF6tPQUbRRgCJoiwiIlnkybXuO75njauHHZwtMUMvb+UNWfzMGD69ltVnL1MIiiNjWLVYfsRdMVUH3bHhxE36vskgv9y28vw7tdcvAUN99hcV/jXH8xx+5VzeN+jZ/Dbjy9UB2rkiYqU7XY1t3JMmHDWsk8LsoJUq9T6bcJIa9mXl7wkCBKkI19hKk35EJ/+YkRgZRgbIYmc7uyv0nZhitjpGWwqhfM7TAtEdNGw4yMVcqFyb/VqjtfxlA7pL6rDtqGJCJK0ug+uT4z3bdK7brhoi0l5a0AA/vV1+3DrhT33c5bq2p13Q00nDz9193uP/Ztr7nQYJOWY8E1iGTdhxN+k2VrGkHJNQ4bUBG96noc9892y0UWk7L3z09IavWukxWwM7bG/QfFWhP0IdhMBiEj4LBpVVhOunr0MH73+Z9dz6jkPP88fROzIdqnP+VeWpV2KEkVRoOj3UfQLFEUf//Yrl2GpD+8WA6AiChsjw3fQUZCgAMC7rwX/3yTuRTxk+9/cfMUW35GtAwH4wVfO43MvrFSKQZsrnTUuracCYOOaAKEDk8Ls2iNIua2PPOa/liVY5t75KXWdM8HlpfE5dA+ouAfW/2zsO8j/jHxNftv2Awyo2h2mg8Xlhb0AGqf1Ge2VQTxTkpsHjA1gWOzDbufUgptfq+0HMQoznOHa2cvWc+o5j7bJWEtHzEVRoCwdKRcF+qpvl34fM5yhID/1avW1Wu27jjtPzEBwWfOoBmeEz96wv7/HuGrfaFlhuRCsmfH/9K3ycNzpOIWAOTkTZkZMW/2aA7lzhojan34AxtYrHCkL3ACHQUu5Tqj+pKq8ZtaM8o9jLfvtWufniL+BnalEquc2embDLNquc5DsJKbw8YxBlV90h+lhVlonpR5JzCJ2mlDfQU4S/NgdB9hvv50RJqQDgOpBTV3T2rTmsC/wGuWcble5nl8s8Gt/cxKfenoJp/0UUdEgkYrfq7TGqHGh3mh/9Tgwe2G9jXDWacyzY3D34Z7Ct18+i/e8ai/2ZYPXM6cj1z53+WEdk53bN7Eft3FuGAJYiYOcvek9laQ67l+UcJOuJiAie1YcYyRam7is6O8k6cvA5oaLRFXVIz7dtc6pyd77Oow5DBqz7z+CPafmHtNhWuipdgtk9Mg/hve88J/EIgwYggiRCEGMZezuD7fT4B/kdO2O1Tw0Ene3tufwidN9fO/dz+HEiqkI17uJRf1jlKTFL4YwpD+QdVS//6xPSDgmUKqRVDu+ulLidx9fwH3HVvDBWy/EoV7Dy6bJEq1ukCNbExQiUNUcm81t2ofEdaPFhBkEguGNDdVG1jIqC725jX5bgCjOr6Xm+hvXuZ4Hj4sBrwz7XFfbzivDndc935uA1aVite3YGBYzxOpjridXjN02Tsj26RN8zgKAPPDvgYVnALM20XnnE8RUxpXddh8gxsZlltK4tQ/7GYX/PPteoOxVJABED7Xbd/7BElulTaE+B7YJyHsAXj7Q5p+490t46aT1Zhg2vFpqlnNSjydwbz2HPABMUSeh9IUC+PCGY9twX17o4xf+7hR+5Y0XDBz7tTemIcSltikA+kZmxUhjllpabA0PkKfFNQcbTPdxJAyp542HX7e2B6gsbN95WVvcc83uOSYCyLiXJLkXpBtEQzt6JN05iT29E63hP0cSMwGGmATCkNKQ1ZT9XFpcaVOTYuUl0JvfB+QHJj71fAEZ93CIhG0yBlSWdl0Udrso7NLvhwVnZoE1CecDqLbjfd+558nNd+7B7kvcEejJkwHkg/ryl06s4cGTM0BvtvqynpSck21x+zV5I1jHkWWcGN+hnHEgwCefXcKZmw4MSBrfdsVYIcQnnk1+IsSkHParTsZGqSU+L0WTz3FNR451Zh9Tw03D5BcANrgRCcADQYM6bBhr7z/y8saOP2Aci1lxYQS5f9DE9SHYyQ79pw+LrLPzr8Mmw4/gQ0PoTWBQ0gg69OCf88lTa/GnMwY0bG+VN8oaqMoPR9Asb4TTI6uwpe0BKUknzS8FeGqhwKsP5sPv1zZAEEsWtuHSKGFI/V4hOp7cHO8kx07iEBIrOVqFQpwDM6pn2DprwMsbtigRsgPPG8m+w7pBwAvDjo+2mE1Z2A4/qSaRAIDgiE6V402HnYfoeW3tCERCzqABYgOAvTknRDAmOfvkkA5UoUb9j8rnlUCydS1ZEkJOmHjkr08aOwB3BsaQMEKe2mmDVy1AGiPFpgtsh59YvcxOcxHxsy3d2l6+e9+q5tRWV4d1Q5heHHZ8tMVMMIPO5ul2m9DVYWdABiWBmnXsEL11m/D6S2axN2ecXfP2WBs5AyEwUTCZE+u59sYAwls/eDqg0pKRknTSxjZJI8py1bzGVfObq0isGwkpt/pTo7KWkcbuGFq4v+nx3y19ln15cRojtr07TA8M8+yw42PEYw5KJgBUk4ZaK1qMc1mvood32HGI5IdqqLZDRNZV9Dmg6c85qwk//qZDuOP/HR9hOaMi/qHWs8/nGhKsPd8uClVITdbwVVbHh4FI8FOvbe7LeONHnvUV1MuKiPKF5XKhKPq2Rv+2EAx29klCqqkcYZJ0h8UVE42qTs6J8ldlm8FrrvT92pGKlim4ygmJGCMgtoNNGP6b148XG6i9WnWYCgrRTw47PpqYic6A+BCRgdhOP7t2822Rd0jfoQ7oH3jmOM4WOyNW9HUH9iLjyvIwrsPPDyyB2ChmYeSfnx27KFCWfuRfH0VRYKHsYdmEJwqAf6iTfYcgETAAL1vUorrBdcrZY6stt+z7btyPpcLgP3/+JSwXEs6pOv98yNHBdADVPlW7ANDzEzHXZv+ISDqVVzxZoyqrCfszxr97wyEcuay5k+/0apmQsgzUc3JFTNE3bKMrVpU6GS80wAwj5WCISr0en4aElJMXxGBUueEgJH0+SadfPJgkdAKGDkDX4Rc6B/1Akw5TAaGUC3tPD8syhlcGnYqUR/cTdOaROJ3KrafS6CnjXZ99EEVRbHczLC6/AlDRLfcuSxJte1dEMXa6rtrSB4rCLkszQOnlgujpr+mUCcMQAjFW5IlqKmKKliF9ZD9800F8z6v24d6nFvDcQlFxBcVrqqfFiP3q3eY+Hc1NQQMbDWW0HwIARcDlezTedskM5lu05TKQYAPpRfwZWbrivw4IkOpvJzCx/j0JKTd19qV/v1o5sbUcNzhuQHRzBG6WaANynXs23KcdhoBa4CIXzDeq0e2nlXXYAEjkiTtvoKF+wqPDfpKcNj7wBgwMDPzgIb/tUzvscASmiSSNFr35+GKBpb7BXAupHZ5VeMfX7t+CRm8enl3oD/jfS0qmPjHuFI3uV91KRp1EQ7pEw7ITUhYMLkl5NV05am4TLQ8etZ8f9jm1BSrXGDuOx8CAnNOFgKLRPT7Vb3eYDoyRR0flGS1llOXpMAzbfWLaKbKN+5nuMHn5xINA7xCw5/wNwLMhNJGzPxCRc78UfOix0/iBVx/cnnZuAe7+8iKAhIxr6/hLJF7bY75bLLZ8wxRMNVL3Xw/RtrdsKRnqTYgGgyQSRjrhQIxU706zWrvYeWXATS/lSiUfOqRYvfsAACAASURBVB/Bgnb9gH6Itns7dJgGtNDDI/OMysDgUyWzkAv2QmTHdMZBUNY9yGQz8NLfQv7ivaA3/Bxw/Y9sd2t2JiJjqtZh59L88Z/69DF848vmccXezY2RvB147OQafvOhMy4sMVrkH0SWbUWqIaxF+OgXpxRFHYOxRYwqT5o+MOS6jZQn4MUBfRmoiDsOOub7hsISa89OV2YXxIg7jXlKeO73vnFuqA8zMI7G3MMxWqmGKQBBhnTvYIj3iZy4iY/9D4wUCyfFV78A9M9A/vJHgac+BuBnplv+eQNHNAOublXn2/NnC9zy/sfx6996Gd5+zV4MiblyzqBvBHc9sYj/eP8JLMVuf+mvN7KCvTdZ1dkYBSpypFqRoQyScsu2kcgT1dfT1NknDe2zDam3N0lK2mpfI1IFM/J9Q1Zfrvsy+7dBZzFPFyz0hXHyjSTmY/25Fw/z6UKMzRuG0btRQYYgcMGMJmkg3fTTwMoJTGIJjAVTAk/eCahZ0BXfBrTOQ7vLEUkaw8j52TN9fM+HnsLBWYVXHOxV/Xrx8OqQhupcoOF42iFY7V+cK2iiwfNjDJDOJNdqO/uePltgsV82/+wG5Aq3Ej/Cyk1066UCR2GEJLZiExHHRC+OlAcs5cR6HkrKadO90RT9DcMRpzOTVIHHCEJsB/4ZYpscjQJ0ncR2JCAojorUYb0QGJ6deWCcrCOJ+b4jVNz+yRNfFZFLagGMjO+IiIMaTYDZS+wybXz1fuDit4Fu/S1g/6uAL35q+nWcLxiTnAHg5HKJL6wsJUGHqE7IjemI0v12naAJhCtmNLKmcKDRaupIZYY4TSIjUaLF35t0OyHedukiIuRYRolIuersG0HKw+7LgAXtn1OpP8MUpZMPZOQDFxmAuTq3w4YgBg/9n7fQmXHyjjUUSlB+hZgvFhdkSkpD5N6mVl92csZOwNd8B+iaH8DmPc3nGSYgZ5szGoQSE5P3WY71UIkIWqrsKWuIH9UPRJ4irkzE5yVa+MTXGe1Iw7GYjON0P/VU3BbfEe5PGUtPniIpA/UOP5/UpC8DzifZPrOANf6rZxhCbF1HiJWArcVM7PMTaKc83+cwdK7/bOy842Qygq8Q6CYBQ4Rh7F9ORNgt5D/wth+9NIxjh5HYCDkHdx1XRtwplsZsSAlakvywJO23A0nHbaztJ4jJuu3XmKanZBznice8eS8yIhETV9VmJUf72ARSbkEYqG2J2ME9q6SslOGjFRmAtH2WISyGGOyeaWuB2XTrotF1/m0Qxz5468wT42Yei5ipv/IsZvYIuR+ndVRH9QYmSPVr63BOYig5I7KGfXZxyVRZkzFrxtazICJvDBC9zTPw7V0j6XBqHNC/8RqGXV8DCafnNQ7qcG+YmHRFbChMaTgvIdbNI+U4Y/zGaro5Bgg6MlnrOH6OYYJV7b6AAfY6dLj6DusEQ+6bJP9YxPzgvR99+jXf/o4+iclDUPygMwvge5c7nNtoJWeXHqxkhM/5AWmjJWrcSIIOMXRiq3iwI7Gm+27oOtNrjtIbrOpAmj6h5iqX7rtLigeEtJDyeN4XoxCE+TDLSp2gXRv9hLAslTwTa83E9lkWcm1lmw5U6w6TQ3Dia4/seXCSU8Yi5qP/7b3Fjf/ke5+iElc7P5swFY2P47pTNah3XfcynFrbGUOy33LZhchVNZJOolmy7fRFduYSU5YQY2DKwsbKKEuYokBZ9GGKEmXRxwdOZFgtKkszhJGSyHMx8mCcyNsp7sADomD47mDcQUc+KU2nep60Iy/pAFShQw2okUvCL7X6J0VMwslmIxn7tSe1qMECJ96FfN7Tw37ym5is41OjLwMZ+LLYjH4RN7O3HYsthqyaYUhEUfCVc9NNOYWDIHYmdREQiZvIZEc+3+cCTFl+5g6a7M02dhxEtWKeEM2vtGGzWQA/VojsECjZIRpzgt94/dXb3YRWjJolO54huygK9F0Ao36/j0/mCguoBywaCGjUsB4bKTkjIucB7wmEY5RaxG0EXTu3LpMMSB01TmywKofxWdNlt92KJks6tWSDvMLuXRcPkyYxcd4acaMmdwxYyusxSENEzoaARYB9Jqu/nxv5Vw0kIWEbTx0kBBZ7TWzTSQmctkzgKqpeh4kgoJMv0Z6xfJdjjE3MSwtnnpy7YL8QA0GHggHFWnOHHQsimoycE2liYPi2LXSA5OraMyJpIu4QTM9NWDm2khFtj0Ook6DRYk6INawFqM0FX9YaabxInFrJ/vxUT47TN1slILaeFpBIZ0boH6p7Z9jFa8physjOYl4XjMin7vsGmviTfWxi/offfe+zN/7I76wZg54Y46QpYy29MCoqfaI6TBM1azRK27TAfrVPfwqdcc0xl6NzIi24kaARlRvr0DFxh59SA1HHGPVzG0nmMkiiSI7VyFNCe0wt36DGXLe6UyvZbayblOMLr31SwEDAsVeNq4fcKEDjImMI2VALxgCkBMHjJHzdGJD3aTbdcz0pSOjFV3/mfQ9+eB3njk3MR++5p7zh3WtHifT1YES+y4LOYt441kOwm0rKMQJBR52CcSefbcwgwQ0j6La4y7HOmhK1zxNvjH35STlJci0htZjDqDz/crH9BD5UJ4Vhz0m5kawxFeliI4itYv/cOs8MbzFXz3XUZ8SV5bzFLT7nwcrcc8cdd6zrLz3RXDu0vPSw7Nl/nZ+RleA0Kq81d5gKUsuYiEKa36at/jqJyRkYz3qOThkg6MjybCRpYJCoQzvcxriXP/SXmRB2re1Srf2mEYDFhZajRN5ARbxuu/binCYpNwUNC9oyBu4NMQxEib/BpLQhygzAAiYhygyJ22anN8P1JAGgzo95MjA98ge3zv39ek+fiJgf/cT/+vvr/ul7C0PIxPXiGj/D7jn8Qn1i+Rg+d+qhLa9XTNRhF3cCGoEprUxkytJ6YpQlTGHsbCb9Akt4NU4XM63eGIFnUot6Ghb2sI5B1I+F/OE8n6WBVQnQpMHEtbSBulsP1qGJXVkJOcYYkDGaLWsxJaw7Gay8DISXkVB1bvDUkOplNHUredRsIsTVjICOrHNllm1ADBFmNv75Fa0MnGeGEESxXSOymAXApLFwdjWY+0V/5p6NFDERMX/pd3559Zrv/BdPEHAtXFQ5GxcF57TF/Ftf+QR+8egfbH3FUYdQpTlK9elcuv0SVggsXFphgKV3AWsvr5dRI4IhdU4DXv+NybbmuREdr50zuI5JWrMCgQcJuImDR1jMF2TzmOOe3Wm67CFEDFQvNetqQTJArGmUueS86O24uaQsAGphOSPdRwTMWMtQFES5ECsDO57PPb8Q+LjMkLBPXpp0b5fBbt4ObaCy+MzHjtCpjZQx8bTBa2eOPdLbd9G11cy68dJh40i1gGg/tkjVcQAvbz83LSZkoemQc0xqTfKGlyUErR2EQeaoDSppanskewy0YQg7m7iN6Xktl9U48g/1n3cIeC8Ig0sQWcjhvCkScq3gGKnLit1n67soAJDR2oIf+Vcvxz63xJnUZ8UO9jaqC+ie73FABi+9KPf/+UbLmXhO8if++889SkRLxP5ty+5t271Rp4bGz3eqH5t5bPg5Q8snoElKWA8E1SiyoKR4eQYRQdXz1AgvWvtBNqlfdu2c2iIjloZzfHFRHWLs0tSm2nlCUo2a82029euNj08L0cQUUaJdcdx7Wr9GEGEfnf0KMRm2/suGmAyBDUEZhDFi9usX/lkWEVLKkNuPepK6ZchSkrnnviNHNjyibWKL+ehf3dO/euHMw5TnbzJEImxHBpnqh9P51UwFXhZosJ4JQPYEQKsAeggWZZKt1WoO+WIPiA2+V70FHVnInlRrwYhiyy419uJfT7QdyHnELyueiUXQQOxpE5r2m25Dg1zh66jlMYAwJHRYbvBJGHp6o85c/ViEvNc5yQX5mecMKTtbiVIirESUtja/0gLFIkRCWouQFiElxFx5rSst0s1gMgbMIx++df8/TKOkiYkZAE48+tcPHH7NLW8kO/rJj8ru/nCbhVi3JbLPnyqBuT8DFr+xIfM6/hTTnp3EEzRQ8VTN+yJa174GqJHDa/tx2kCl1WFy/xoON+8P1CUJKVtNWeKRdn6OP0iYE3PTEZNyuLwqLSbVOTr7/F5eOkWUG2I2EBG27nJCpIx9dkmg2PmXSGwhB+068T3pkEAgK2s8/4lplTexlAEAn/+FHzperi49V9eWOw1qckSE1NCZVifkeHFSxJ4/A/hsUka96IH0rcCAzADHcZEVW5ML/Kd/Ij8MlBctaffGqONNeZraawSpVAETyR6I2lcK7OiqQWt6UxC+Sl0Dwt+VZPCC7MaV+fNfBAOs7Lmk7Jx/pFjABnA+zX5cAmlI883rlmELadxz19vo7Kg/4bhYFzEDwMnHH/1LI9ZUdvJc90ZdD9pIs0aobscTsj/Ga8D8H7YX2kTUW4kmzXUYSbcStTQTalNdY+dpqCNpR4hjYk17qV1PGadJYxPWuwQCTpcA9wPwtmxIgw1F6nzdDumvPjzPS6eElRFWhlgZERekSEQEyhBYRJG7C1JJ7uxeOf7PhG5pW4zgsTtvmf9iy69uXViXlAEAn7/jBx7/pt/6ixeI+NIdM0P2+QAC7IALqQim0WKGzTP7GFD8CbD4zclneKRHx+Ug2t9KSFpxpAdH12oVsQb9Of6Jpe1veemQJBJ9rT3JSYK6ZkxApdKSwMQ3FJY8wxcOhTu+uUhqCLPUOxkjsqD38MJzV+rnHoHOjGJtiJQQKWGdGeLMkM4MaRbSyhCzsFJCpAXMQkoLO5uNmAXMLZp2ByFanFs88/Fpl7tuYgaAhae+9Pk9V73yOyF2iqlpNaqDBzkPJnGxilGtBQi+MHOftdvL31SdmpJzSMNoBtnMv6QvW+J21Ym4KUC+vQxqbnsr+TYc8y+AtpMkXrsdI/UXBFW6cq3tG8aY5BfVRzFhCgBi2Uunn35F9uTnFVNJzIaYjXIWM7EypJQh0oag3OhdZVy3vYs4515b5GcyQTckuwVS9u/+wLdesjjtcjdEzH/5X99z9LZf+vAJglxkOo15Y2jwRqg/8FRPD3IGAAVgz32AehFY+C4Ac1VZccEpgbQ9alsue0j9upvIjiZ/XzT2RweVJykwJmJJM3Nle8dEGHWyVdgky3LAWKaosc6yJykP0bGHr8ieeYyVNpJpYaUEzGIUiVI2CDMrEsMGWmdilAjB2GtREP9pMKL6DgCE+W8/MiUvjBQbImYsLsrx+z/3mYtf/9Z/1m6CdBiORLYI+/EazlJD1SsQW4OegGceAfQTwPJtwMotCH/egQ9tCVXtTCRE7ZJqL6cxMOCVEcqRhjQgYu20IIvgMkYC9iXT1txM8fpxU8NI5unU05fzlx+aVf0FpbQBK+PWQooNkbWUFbmRf6QMRIRECSsOljKU24LYQPnu5nReVwmITvGBuT/ZrOI3RswAHn3/f3j2wDW/9yTn+c6NSD8C33boZjy38tLWV+w7jTxZCMJABTGWecUIpHQB9Uuxs56UBqa063DcxdaweU6hKO7FicVLcWLxciytHcBafxZ909v6a5wQM5zVY2UMwwgu7HFmswxQSmp+jqqGJBrEIcTxm7KJMDcTBCbTV1IsZ1hZmMep5y/QJ56bodVlYi2sMwNWonRuSOdG6cxAKVG5NqQzA6WFs8ymay1EVl+GsoHxrasdR7q1+1t0fswB9ltL3X3nDbS2WXWsh5gH/kBH7/7ff37td//gywqDtYwxM4V2bSluO3Ajbjtw45bXm84+Em/HM5qks5o0LUVR1I777bgMkTLqZpeBdrS1b2uxsg11DoX5iY8/+NHTzz6+j1VWQudGqcxwpksoLayUAQFkiU1sYOPJwEPfQ570GaR8hyMJiMFKCexgEEMqE1JaSGlDSgl0bkhpI8yiVG4EylrJSglBGWOlfCtreGsZgLjhMUKQuGHrUJLOXzB/9kO3zD69mVVsxGIOXVDH/+Ke05e84W0PLJdyNmM654h5u+GD+MRE6GMt+zCfzAwRCWuPeLssy5DfGANmjkhZGpemcjpUWOoXy6efOboPOispy0rW2nCelQwtlCkDpQ2xFhAJA7CW5xTQMIiEXdlEJGAlTErAbPeVNkplAqWEtDasWEhby5iUEtY2XbESyrSBtl4apFig2FrLmitvDDfvX2hC1/lnIfIPH7plbsOxMEZhw1KGx5d+8xcfPPNLP3l0X6YunFaZuxFxpDVPrDE5A3VLW2uNsizDuZ6cPSHHlveoeQE7DOLMYnEcrA0rt+i8VCovoVhIZYYVG7AGuw5CmhYxx1CV1cxMlkSJrPxAShQrgSIrS2hLyC7dEJEwkxDnhkiElDZw8/0xuWBFxnXcuxUR27kCS5tAzALpOvcheGlx4YWpu8Y1YVxibuyKibZlbW2hzIDfBvB102rcbkPTjCQpKQODlnWadxQpd9by+Dh6+tTjKssLznolZ8pQnhekcsNZZkhZyxSkhNlZs9MmZu99wey2GcTOOidlXwTWYhbltGKllIC0UJYZpZSQ7hloFqWsZU/MohQHn2Urk/Cg77JHpy9DICs9U374Q//4mtWtqG9Si3mAkOPti+fUB9aM3JEzXTGV1p3niIk43U7z+TURQSnVWFZMyKmEYZxV1KRnt2G3E/ZqaRb+5KnTj0DrfaS5JN0rlc5KyuzsH0ppA+10ZUfIsh6NWQ3rPPRkGeUhLcKAYm0sYSshRUKkhbQNUOQlDGEtUFqYyQYnsjq0ne9PaRFhQNsOPwNrLYufEMBX13lcFVmuPvrBN+09uVUVTkLM3mqWlsUQ0bUi8mMA7px2Q3cDUq3Z73tJw1vNxhgopappppLF52+zluM6msh3txOyx6eeOfG5rzz6wF6V9wqV5SXnvVLpvKQst9pynhsrIShrbRIJ8QYt5qaOQFISkoPOrMVKHAylyVrISlnLmUigvTWtRGlL2tBalCNnMOwUWUCYhIW8ZRxry7vcWhZCiUL/4e+/aeaZrax3oxqzIAkRQ0SP98vy1zTzv9pw63YB2uQLoE7QKTmnckZKyr6TMCZmf16TjNGRcR1fOrH4xf/54btfYN0rlcpLlfcK6NxQ3iuV0gZZJirrlV7rZQDYKClHINZVWZHGDADK75MlWCJPyMpGiSMlIICFbdAiYYEiUeTn8ysBYUFJ1vg2QBCYudKciVmC/rwLIQKjOb/rD26deWKr616PlNFoLbulBGA084+vlsh6Cu+eZmN3A5okDe+dkZKuzxN3EHrPDU/IPm+bpdwR8iAeO7H8wK88+OInOM8v5HymIJ0Z6vUKlc+WpHNDWhvVmynJeUVAUfCQmHZMiTDCz1uxpMNfTHk9my1BC2cGDDBrZxWTiGuT8rGW2VvBVsJgsB0bRiyiOKl790oYBEgf+PiH3zrz+DbVP3Y+jtYMS+p+yQDk6XJssbhhb0/98pzCoWk3/HxDSpBtVm6bPDHMJa4j5vGwVMiZTz99+k9/9Xd//wRrXVI+U3KeGZXNFirPSqVnLCHn2pDuGT8oQ1m/4sp1bYpgrWvlkdewGe4lYN3clE9XNj9pFrAW5YiZHHnH59Q6+wCAq76L3S1hSMGU/fGdt8wc3a4WTELMMTkr1MnZE/PA+heeWXrmdax//voD6nWHc7pyVmG/Ipqam975hEnIedIlLr/zyLAwIsVygbPHl9eef/jk2qN3PXn64aN/etellGUlZ7mhfKZUvbxQWWbAudG9uVL1ZkooJTrLS2hLxuzd1zYpCltN1gCCtKGoSidP4NoSr1LayhZe7vBWMjCSlO3+LiVmIytMq3fdecvh57azGZMSc0rOChUxa1SkHC/60E23XnLF13/71wuoB1MSABgxVMU9aogF0wEi9l5F8aHsvYsDRpX+3pkqrz8PgEDIDu9Oym695+evpkhREFAOlqcjV6UMqcxwlpektFF5XrLKhPK8VPlsoXRureUsE1bWFY28puutUaByb1snYrIdgKujrj9H5MwszFyRbULKpG16NYjE5UskjN0a4pOITpq18mMfO3JwQzNcT6UtE+RLydnHNfPk7Ak6Q52sNQB9wQ1fd+jKb/3uI6zUrDEAxDTXbcqOpBNIfE8kIecyJdjqhSci1Eq0Zpe8DFs65IjYkSkJtDJ2kIa2MSSy3Cjf0ef15Dw3Ss+WpEiU7tk4E873t+b3u0mkRrqlY5FYlKrqDqTNAFFWneNIWXl2D5ZyoivvVkuZ+dl9y/N3v/8I7YiYAJMQs1/HxNxEzikp+2N84Gtv2v/yt7/zCOcz81KWBAnW3lQu5rxG8sISd+9MFTM4Iu+Gl1t8i5uO7wp4Aos9KZwXAwOsckO5Nkr3SuLcUJ4Z1tpwb6ZUWWZI9wxr27FGbN3VGKoizWl3/CUkySmJhvoqiQKc1c4ZsJJbCNke24RRizsdIsJa/fUN98z+1R130I4hovUSs1+81qzQTNBxOgPguUuunL32+370rfm+g5cC2D2W2xQgZQOhBoJukjd8lt1KxIOgeHgzkYTRc6xEaRuBjd1oOaVzQ1lmVJ4ZynKjtB9Rlxuv0xJV1vLmW5sJmTrSHdCgUVnYHJ3TKl3YQnYfKUOWxWT3fuSts09td0tSTPLAtoVpTy3ntqXy6shzvvGHfvbV819z7WsAoLKcO4yDZoKupCGTejmVLbLRboMjH+YqAH4YQq21YbZEa93heoZ0ZlSWGcpmjFJawFo4yw1gvSWIWDzJ0WYTWwP5pvDWMQAwGjwsWsLY7Ur5QuTZPXv23vuB19LUZx+ZBtZDzEBFsk2ac0zS3LCE8655x3uuuPjmI7cI69kNXsfuRBNBA5AG/b6bYQYgFROQsyUZdkhzlhlFKoygU5mPXZxb+YK0UG5JmbyEEWvLW0xuMQl7cGJRt3pcpMd3E0TWSpg//8OvO/jQRjtqNxOTWlJtkkZqPbcRMidlYP/XXNu7/l/+/Jt7Bw6/cv2XsTsgbV8W6eisto7VDhWchUsu4A+U9RFWmTZ+cAYpLUprS9aelDVbUt5KazlBSsAeAxpxk2Th8+5C6YIgX6b9e++78wZa2O62jMJ6idlvN5Fz02CUpry1Ml/7M7/+soPX3vQmVnp+8svYXRAzgnibhtF2ZG2RuKPVBmd4eUJrUaSFnE8wZQkpJ9HXtsXybKuzxToGdqmFDABECxrqs3e+efbJ7W7KuFjPw9pEzvF2TMzpdnpOrcz5q1+nX//j/+nVMxccfu3QX1gHi0nIdhfHPAhQDZ1kPmobWyuYtRuYAQYFomZRXrPlylIGttHybIgw2IbdSsgk3DemfEgf2PuFzZwGajOwXitqHHIGohH+SZ6hdd/w7p+Yv/y273kd9fZfS9Ty3dZhEJ2Hy9jgyN8XAOoj49yw5p1KymNgV7q+OYiIIVKP9E+cvf+P3n7Z0na3Zz3YyIPcZPU2WcWjCLm1DTf+9K/uu/zmb35dNrPnaj9zT4cOG0Ozy1kV99hpz1olgePrFuputUJ3OISIniiW+5/fCaP3NoKNWlhtJNtEwk11jVX/G37yN2YPv+Vtr1Kze29gpfZM2MYOHeposHSbXM0C+cZW8i62RHcqRGBIcHTNlA98/NYDWxbMfjMxrU/fYaS7bkJOcfU/+hF1/Xvf8zLKD1wrGV2+3nI6dADqvr4eTWRcHetIeWdBCi7xKK2u/N2dRy7a8Z4Wk2DaxNZW3nr9pVvx5l//4z0XX3f9K1nlrwCriyYov8MuwkSSQ+fve05AmE5LaR47tXbqsfuOvHxHxLaYNjbT4twya/ZbPnlsbnY2u4qYrjJMlxIo26q6O5yf6KzjnQURMUzmKUL56EfecujZ7W7PZuO8kwLuEOG/+avFC7UUlxNllxiSC2FMvt3tOpcgDEPgPopyTRT3WaQvitcE6AMA96VfiohSMEak788jptwU9jfFObEY6omYniK7FqGZzsumwyQwxpwk6KNl78zf/9HN56aHxXpw3hHzAETou/721H61yhcaosMsctCwOkhidsMwcDEiq0SyysQrpeFVYlklY1YNqxUqZVWzXlntm9XewbmVmQKrz5zA6n1HqNiMxtwhwg9/6uTetf0z+5jK/SjlAIEuAcmBzaivw7kJIjoDKZ/ozeLxD77m/OjMmxTnPzG34J2ffnLmdH54H+flPJPeU5RmHsLzRGYeIvMg2jFWNgnEsKxSRKwlq1UyZpWUWS1Ks0qlWmVVrqq1fHUhX1ud33vByrniVP/2+2VuZu3MZQXM5aSyy4Fd8dLsEIGJThrwM2rFfPnO2/Ye3+72bDd2LTGPwg/fL9kzxYlZrbOcVlTOai0nVjkTZX3inIoiV7qaIkuM6SHq5TemZCIwkbLWZ1mUlNntspBCKZhCRCB6TYn0mUyxRlJQlq2qZVNoMsWqWev3Dh5ePVcIdioQobd/4ewhWiuvBKkrFeGwUPc7Pe9AKA3kGBl+WoqVZ+5624Vnt7tJOwndD77DjsY3fPrJmQP5wcuJ5AoofRFE9m53mzqsC0IKL5m+HBOdPf8sP3LsCzff3B992u5ER8wdzim880mZeemlkxcp6l0IU1zEwGGRbnLfHQeBYcKJkvQLJa0cm5k9eGxXffltEB0xdzi3cccdfPvtP3ZgZZkuYoMLQHIABgdoB/UR7AoQnTWC42Tw1TzHcRydP3HnP6dyu5t1rqIj5g7nJW5/WPLVsy8eVDS73xg5CMIhERzkzsd9QzCQPoHOgHEKQi9JsXKqxysn77zlyuXtbtv5hI6YO+wq3P7pF+dXD8/t4VU9T2UxT2zmSyPzxDxPxuwBaNc/EyJioOksjDnLoDMF0Rmsrp7t9eXM+Tb0eadi1/8IO3QIEKHv/zvMnV5enGddzKvC7BFWvVJohsXMMPOMGOoZNjMk5+hAGYNSiFcUzLLALIPzBcLKUpnNLdJSsbS4sLh477dcvLSTp13aDeiIuUOHdeD2hyVfOHtiZqbsz5hsX08U96Rc7DH34GK3VQAAAIhJREFU2PSLTGnSZEiVRJlSpS4NFIEyAWkypSKts8ZJdUdAIH0SiCheI4EAao0UxBTS18qsmb70Res1DdMvYfqc5avLZbmaLa2snOkfXt6swUMdOnTo0KFDhw4dOnTo0KFDhw4dOnTo0KFDhw4dOnTo0KFDhw4dOnTo0KFDhw4dOnTo0OHcxv8HnRxVygJP8F8AAAAASUVORK5CYII=);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 += '
' + x.title + "
"), D += '
' + (x.content ? "" : x.text) + '
', S && (D += o(l(x.ok, t.locale.labels.message_ok, "OK"), "ok", !0)), T && (D += o(l(x.cancel, t.locale.labels.message_cancel, "Cancel"), "cancel", !1)), x.buttons) for (var A = 0; A < x.buttons.length; A++) { @@ -7019,7 +7019,7 @@ function la(t) { return typeof _ != "object" && (typeof m == "function" && (p = m, m = ""), _ = { text: _, type: m, callback: p }), _; } function f(_, m, p, k) { - return typeof _ != "object" && (_ = { text: _, type: m, expire: p, id: k }), _.id = _.id || rt(), _.expire = _.expire || v.expire, _; + return typeof _ != "object" && (_ = { text: _, type: m, expire: p, id: k }), _.id = _.id || st(), _.expire = _.expire || v.expire, _; } t.event(r, "keydown", a, !0); var y = function() { @@ -7055,7 +7055,7 @@ function la(t) { }(_); } }; - v.seed = (/* @__PURE__ */ new Date()).valueOf(), v.uid = rt, v.expire = 4e3, v.keyboard = !0, v.position = "top", v.pull = {}, v.timers = {}, v.hideAll = function() { + v.seed = (/* @__PURE__ */ new Date()).valueOf(), v.uid = st, v.expire = 4e3, v.keyboard = !0, v.position = "top", v.pull = {}, v.timers = {}, v.hideAll = function() { for (var _ in v.pull) v.hide(_); }, v.hide = function(_) { var m = v.pull[_]; @@ -7080,16 +7080,16 @@ function la(t) { return _.type = _.type || "alert", u(_); }, message: v, modalbox: y }; } -function We(t, e) { +function ze(t, e) { var n = this.$config[t]; return n ? (n.$extendedConfig || (n.$extendedConfig = !0, Object.setPrototypeOf(n, e)), n) : e; } function da(t, e) { var n, i, a; L(t, (n = e, { $getConfig: function() { - return i || (i = n ? n.$getConfig() : this.$gantt.config), this.$config.config ? We.call(this, "config", i) : i; + return i || (i = n ? n.$getConfig() : this.$gantt.config), this.$config.config ? ze.call(this, "config", i) : i; }, $getTemplates: function() { - return a || (a = n ? n.$getTemplates() : this.$gantt.templates), this.$config.templates ? We.call(this, "templates", a) : a; + return a || (a = n ? n.$getTemplates() : this.$gantt.templates), this.$config.templates ? ze.call(this, "templates", a) : a; } })); } const ca = function(t) { @@ -7187,7 +7187,7 @@ var ua = /* @__PURE__ */ function(t) { }; }(rn); const ha = { init: ua }; -function je(t, e, n) { +function We(t, e, n) { return !!e && !(e.left > t.x_end || e.left + e.width < t.x) && !(e.top > t.y_end || e.top + e.height < t.y); } function Mt(t) { @@ -7223,7 +7223,7 @@ var _a = function(t) { var k = m || r(l), $ = p || (k ? k.$getConfig() : null), w = _; !w && $ && $.smart_rendering && (w = k.getViewPort()); var x = null; - !Mt(n) && (h || f) && w ? (f ? f(v, w, k, $, n) : je(w, h(v, k, $, n))) && (x = c.call(n, v, k, $, w)) : x = c.call(n, v, k, $, w), this.append(v, x, b); + !Mt(n) && (h || f) && w ? (f ? f(v, w, k, $, n) : We(w, h(v, k, $, n))) && (x = c.call(n, v, k, $, w)) : x = c.call(n, v, k, $, w), this.append(v, x, b); var S = b.nodeType == 11; g && !S && x && g.call(n, v, x, k); } else this.remove_item(v.id); @@ -7267,7 +7267,7 @@ var _a = function(t) { for (var S in this.rendered) x[S] = !0, w[S] = !0; for (var T = {}, C = (S = 0, v.length); S < C; S++) { var E = v[S], D = this.rendered[E.id]; - x[E.id] = !1, D && D.parentNode ? (f ? f(E, k, _, m, n) : je(k, h(E, _, m, n))) ? (u && u.call(n, E, D, _, m, k), this.restore(E, p)) : x[E.id] = !0 : (T[v[S].id] = !0, this.render_item(v[S], p, k, _, m)); + x[E.id] = !1, D && D.parentNode ? (f ? f(E, k, _, m, n) : We(k, h(E, _, m, n))) ? (u && u.call(n, E, D, _, m, k), this.restore(E, p)) : x[E.id] = !0 : (T[v[S].id] = !0, this.render_item(v[S], p, k, _, m)); } for (var S in x) x[S] && this.hide(S); if (p.childNodes.length && b.appendChild(p, b), g) { @@ -7307,7 +7307,7 @@ var _a = function(t) { }, getLayer: function(o) { return this.renderers[o]; }, _add: function(o) { - o && (o.id = o.id || rt(), this.tempCollection.push(o)); + o && (o.id = o.id || st(), this.tempCollection.push(o)); for (var l = this.container(), d = this.tempCollection, c = 0; c < d.length; c++) if (o = d[c], this.container() || o && o.container && J(o.container, document.body)) { var u = o.container, h = o.id, g = o.topmost; if (!u.parentNode) if (g) l.appendChild(u); @@ -7319,7 +7319,7 @@ var _a = function(t) { } }, addLayer: function(o) { if (o) { - typeof o == "function" && (o = { renderer: o }), o.filter === void 0 ? o.filter = Fe(a || []) : o.filter instanceof Array && (o.filter.push(a), o.filter = Fe(o.filter)), o.container || (o.container = document.createElement("div")); + typeof o == "function" && (o = { renderer: o }), o.filter === void 0 ? o.filter = je(a || []) : o.filter instanceof Array && (o.filter.push(a), o.filter = je(o.filter)), o.container || (o.container = document.createElement("div")); var l = this; o.requestUpdate = function() { t.config.smart_rendering && !Mt(t) && l.renderers[o.id] && l.onUpdateRequest(l.renderers[o.id]); @@ -7340,7 +7340,7 @@ var _a = function(t) { }), s; } }; }; -function Fe(t) { +function je(t) { return t instanceof Array || (t = Array.prototype.slice.call(arguments, 0)), function(e) { for (var n = !0, i = 0, a = t.length; i < a; i++) { var r = t[i]; @@ -7349,7 +7349,7 @@ function Fe(t) { return n; }; } -function Ve(t, e, n) { +function Fe(t, e, n) { if (!t.start_date || !t.end_date) return null; var i = e.posFromDate(t.start_date), a = e.posFromDate(t.end_date), r = Math.min(i, a) - 200, s = Math.max(i, a) + 200; return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: r, width: s - r }; @@ -7363,7 +7363,7 @@ function pn() { s.$getConfig(), r.getVisibleItems().forEach(function(l) { var d = function(c, u, h, g) { if (!g.isTaskExists(c.source) || !g.isTaskExists(c.target)) return null; - var f = Ve(g.getTask(c.source), u), y = Ve(g.getTask(c.target), u); + var f = Fe(g.getTask(c.source), u), y = Fe(g.getTask(c.target), u); if (!f || !y) return null; var v = 100, b = Math.min(f.left, y.left) - v, _ = Math.max(f.left + f.width, y.left + y.width) + v, m = Math.min(f.top, y.top) - v, p = Math.max(f.top + f.height, y.top + y.height) + v; return { top: m, height: p - m, bottom: p, left: b, width: _ - b, right: _ }; @@ -7405,7 +7405,7 @@ function ga(t, e) { } var Pt = function() { function t(e, n, i, a) { - e && (this.$container = be(e), this.$parent = e), this.$config = L(n, { headerHeight: 33 }), this.$gantt = a, this.$domEvents = a._createDomEventScope(), this.$id = n.id || "c" + rt(), this.$name = "cell", this.$factory = i, st(this); + e && (this.$container = be(e), this.$parent = e), this.$config = L(n, { headerHeight: 33 }), this.$gantt = a, this.$domEvents = a._createDomEventScope(), this.$id = n.id || "c" + st(), this.$name = "cell", this.$factory = i, ot(this); } return t.prototype.destructor = function() { this.$parent = this.$container = this.$view = null, this.$gantt.$services.getService("mouseEvents").detach("click", "gantt_header_arrow", this._headerClickHandler), this.$domEvents.detachAll(), this.callEvent("onDestroy", []), this.detachAllEvents(); @@ -7503,7 +7503,7 @@ var vn = function(t) { return n && (r.$root = !0), r._parseConfig(i), r.$name = "layout", r; } return B(e, t), e.prototype.destructor = function() { - this.$container && this.$view && tn(this.$view); + this.$container && this.$view && Qe(this.$view); for (var n = 0; n < this.$cells.length; n++) this.$cells[n].destructor(); this.$cells = [], t.prototype.destructor.call(this); @@ -7610,11 +7610,11 @@ var vn = function(t) { }, e.prototype.getCells = function() { return this.$cells; }, e.prototype.render = function() { - var n = Qe(this.$container, this.$toHTML()); + var n = Ze(this.$container, this.$toHTML()); this.$fill(n, null), this.callEvent("onReady", []), this.resize(), this.render = this.resize; }, e.prototype.$fill = function(n, i) { this.$view = n, this.$parent = i; - for (var a = en(n, "gantt_layout_cell"), r = a.length - 1; r >= 0; r--) { + for (var a = tn(n, "gantt_layout_cell"), r = a.length - 1; r >= 0; r--) { var s = this.$cells[r]; s.$fill(a[r], this), s.$config.hidden && s.$view.parentNode.removeChild(s.$view); } @@ -7723,7 +7723,7 @@ var vn = function(t) { function e(n, i, a) { var r = t.apply(this, arguments) || this; if (i.view) { - i.id && (this.$id = rt()); + i.id && (this.$id = st()); var s = G(i); if (delete s.config, delete s.templates, this.$content = this.$factory.createView(i.view, this, s, this), !this.$content) return !1; } @@ -8035,7 +8035,7 @@ const va = function() { } }; }; var Ft = function(t, e, n, i) { - this.$config = L({}, e || {}), this.$scaleHelper = new he(i), this.$gantt = i, this._posFromDateCache = {}, this._timelineDragScroll = null, L(this, kn(this)), st(this); + this.$config = L({}, e || {}), this.$scaleHelper = new he(i), this.$gantt = i, this._posFromDateCache = {}, this._timelineDragScroll = null, L(this, kn(this)), ot(this); }; Ft.prototype = { init: function(t) { t.innerHTML += "
", 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: {} }; @@ -8160,22 +8160,24 @@ Ft.prototype = { init: function(t) { }, !t.css && a.inherit_scale_class && (l = r.scale_cell_class); for (var h = c; h < u && t.trace_x[h]; h++) { o = new Date(t.trace_x[h]); - var g = d.call(this, o), f = t.width[h], y = t.height, v = t.left[h], b = "", _ = "", m = ""; + var g = d.call(this, o), f = t.width[h]; + t.height; + var y = t.left[h], v = "", b = "", _ = ""; if (f) { - b = "width:" + f + "px;height:" + y + "px;" + (a.smart_scales ? "position:absolute;left:" + v + "px" : ""); - const k = this.getViewPort(), $ = (a.scales[i] || {}).sticky; - let w = ""; - const x = 70; - if ($ !== !1 && f > x || $ === !0) { - if (v < k.x && v + f / 2 - x / 2 < k.x) w = ` style='position:absolute;left: ${k.x - v + 10}px;' `; - else if (v + f / 2 + x / 2 > k.x_end && f > x) { - let S = k.x_end - v - 10, T = "-100%"; - S < x && (S = x, T = `-${S}px`), w = ` style='position:absolute;left: ${S}px;transform: translate(${T},0);' `; + v = "width:" + f + "px;" + (a.smart_scales ? "position:absolute;left:" + y + "px" : ""); + const p = this.getViewPort(), k = (a.scales[i] || {}).sticky; + let $ = ""; + const w = 70; + if (k !== !1 && f > w || k === !0) { + if (y < p.x && y + f / 2 - w / 2 < p.x) $ = ` style='position:absolute;left: ${p.x - y + 10}px;' `; + else if (y + f / 2 + w / 2 > p.x_end && f > w) { + let x = p.x_end - y - 10, S = "-100%"; + x < w && (x = w, S = `-${x}px`), $ = ` style='position:absolute;left: ${x}px;transform: translate(${S},0);' `; } } - m = "gantt_scale_cell" + (h == t.count - 1 ? " gantt_last_cell" : ""), (_ = l.call(this, o)) && (m += " " + _); - var p = `
${g}
`; - s.push(p); + _ = "gantt_scale_cell" + (h == t.count - 1 ? " gantt_last_cell" : ""), (b = l.call(this, o)) && (_ += " " + b); + var m = `
${g}
`; + s.push(m); } } return s.join(""); @@ -8285,7 +8287,7 @@ class ka { return !!this.$grid.$config.scrollable; } } -const Ue = "data-column-id"; +const Ve = "data-column-id"; class ya { constructor(e, n) { this._targetMarker = null, this.calculateCurrentPosition = (i) => { @@ -8301,13 +8303,13 @@ class ya { attachEvents() { this._dnd.attachEvent("onBeforeDragStart", (e, n) => { 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(Ue); + const i = this.$grid.$getConfig().columns, a = this._draggedCell.getAttribute(Ve); 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(Ue), 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._draggedCell && (this._dnd.config.column = this._draggedCell.getAttribute(Ve), 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; @@ -8343,7 +8345,7 @@ class ya { this._targetMarker && this._targetMarker.parentNode && this.$grid.$grid_scale.removeChild(this._targetMarker), this._targetMarker = null; } } -function Se(t) { +function we(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); @@ -8356,7 +8358,7 @@ function Se(t) { } }; } var ve = function(t, e, n, i) { - this.$config = L({}, e || {}), this.$gantt = i, this.$parent = t, st(this), this.$state = {}, L(this, kn(this)); + this.$config = L({}, e || {}), this.$gantt = i, this.$parent = t, ot(this), this.$state = {}, L(this, kn(this)); }; ve.prototype = { init: function(t) { var e = this.$gantt, n = e._waiAria.gridAttrString(), i = e._waiAria.gridDataAttrString(), a = this.$getConfig(), r = a.reorder_grid_columns || !1; @@ -8369,7 +8371,7 @@ ve.prototype = { init: function(t) { var l = { init: function() { }, doOnRender: function() { } }; - this._renderHeaderResizers = l.doOnRender, this._mouseDelegates = Se(e); + this._renderHeaderResizers = l.doOnRender, this._mouseDelegates = we(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; @@ -8829,7 +8831,7 @@ function Ca(t) { function o(l, d, c) { var u = function(v, b, _) { var m = []; - return b.forEach(function(p) { + return [...new Set(b)].forEach(function(p) { var k = i(_).parse(p); k && (k.target = v, k.id = "predecessor_generated", t.isLinkAllowed(k) && (k.id = void 0, m.push(k))); }), m; @@ -8912,7 +8914,7 @@ function Ia(t) { return r || (a.config.keyboard_navigation_cells && a.ext.keyboardNavigation ? xa : ba); } }; }(t), n = {}; - st(n); + ot(n); var i = { init: Aa, createEditors: function(a) { function r(u, h) { var g = a.$getConfig(), f = function(b, _) { @@ -9103,7 +9105,7 @@ function yn(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); + b.appendChild(m); var p = function(x, S, T, C) { var E = C.$getConfig(), D = [x]; S && D.push(S); @@ -9161,7 +9163,7 @@ function yn(t) { }, s) : d.call(t, r, s, o); }; } -function qe(t) { +function Ue(t) { return { render: yn(t), update: null, isInViewPort: ke, getVisibleRange: gt }; } function Ct() { @@ -9170,7 +9172,7 @@ function Ct() { }, getVisibleRange: function() { } }; } -function Ge(t, e, n) { +function qe(t, e, n) { return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: 0, right: 1 / 0 }; } function zt(t, e) { @@ -9543,10 +9545,10 @@ function bn(t, e, n, i, a) { function ae(t, e, n, i) { return bn(t, e, n, i, !0); } -function Ye(t, e, n, i) { +function Ge(t, e, n, i) { return bn(t, e, n, i, !1); } -function Je(t, e, n, i, a, r) { +function Ye(t, e, n, i, a, r) { var s; if (e !== a.$getRootId()) { var o = a.getItem(e), l = a.calculateItemLevel(o); @@ -9557,7 +9559,7 @@ function Je(t, e, n, i, a, r) { a.calculateItemLevel(f) === r && (e = f.id); }, o), s = ae(t, e, r, a); else { - var c = ae(t, e, r, a), u = Ye(t, e, r, a); + var c = ae(t, e, r, a), u = Ge(t, e, r, a); s = n < 0.5 ? c : u; } } else { @@ -9569,11 +9571,11 @@ function Je(t, e, n, i, a, r) { y = v; } return null; - }(a), r, a) : Ye(t, h, r, a); + }(a), r, a) : Ge(t, h, r, a); } return s; } -function Ke(t, e) { +function Je(t, e) { var n = F(e.$grid_data); return t.x += n.x + e.$grid.scrollLeft, t.y += n.y - e.$grid_data.scrollTop, t; } @@ -9581,11 +9583,11 @@ function re(t, e, n = 0) { const i = F(t.$root); return e > i.width && (e = i.width - n - 2), e; } -const Xe = { removeLineHighlight: function(t) { +const Ke = { 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 = F(s.$grid_data), l = lt(r, s.$grid_data), d = o.x + s.$grid.scrollLeft, c = l.y - 10, u = s.getItemHeight(r.targetId); + var o = F(s.$grid_data), l = rt(r, s.$grid_data), d = o.x + s.$grid.scrollLeft, c = l.y - 10, u = s.getItemHeight(r.targetId); c < o.y && (c = o.y); var h = s.getTotalHeight(); return c > o.y + h - u && (c = o.y + h - u), o.x = d, o.y = c, o.width = re(s.$gantt, o.width, 9), o; @@ -9593,7 +9595,7 @@ const Xe = { removeLineHighlight: function(t) { 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 = Ke({ x: 0, y: o.getItemTop(l) }, o), c = o.$grid_data.getBoundingClientRect().bottom + window.scrollY; + var l = r.targetParent, d = Je({ x: 0, y: o.getItemTop(l) }, o), c = o.$grid_data.getBoundingClientRect().bottom + window.scrollY; let u = re(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) { @@ -9611,7 +9613,7 @@ const Xe = { removeLineHighlight: function(t) { }, u.targetId), f.y = m + p + k * p; } else f.y = m + p, b += 1; } - return f.x = _ + b * v, f.width = re(h.$gantt, Math.max(h.$grid_data.offsetWidth - f.x, 0), f.x), Ke(f, h); + return f.x = _ + b * v, f.width = re(h.$gantt, Math.max(h.$grid_data.offsetWidth - f.x, 0), f.x), Je(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; @@ -9635,10 +9637,10 @@ const Xe = { removeLineHighlight: function(t) { i.config.level = u.calculateItemLevel(h), i.config.drop_target = X.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 = X.createDropTargetObject(i.config.drop_target)), Xe.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; + return d && t.callEvent("onBeforeRowDragMove", [i.config.id, d.targetParent, d.targetIndex]) !== !1 || (d = X.createDropTargetObject(i.config.drop_target)), Ke.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); - Xe.removeLineHighlight(i.config), l.$transparent = !1, l.$open = i.config.initial_open_state; + Ke.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)); @@ -9651,7 +9653,7 @@ const Xe = { removeLineHighlight: function(t) { } function s(o) { var l, d = function(f) { - var y = lt(f, e.$grid_data).y, v = e.$config.rowStore; + var y = rt(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(); @@ -9663,8 +9665,8 @@ const Xe = { removeLineHighlight: function(t) { 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 = lt(o, e.$grid_data).y; - return document.doctype || (g += window.scrollY), d !== u.$getRootId() && (c = (g - e.getItemTop(d)) / e.getItemHeight(d)), h ? (l = Je(i.config.id, d, c, g, u, i.config.level)) && l.targetParent && r(l.targetParent) && (d = u.getPrevSibling(l.targetParent), l = Je(i.config.id, d, c, g, u, i.config.level)) : l = function(f, y, v, b, _) { + }(o), c = null, u = e.$config.rowStore, h = !e.$getConfig().order_branch_free, g = rt(o, e.$grid_data).y; + return document.doctype || (g += window.scrollY), d !== u.$getRootId() && (c = (g - e.getItemTop(d)) / e.getItemHeight(d)), h ? (l = Ye(i.config.id, d, c, g, u, i.config.level)) && l.targetParent && r(l.targetParent) && (d = u.getPrevSibling(l.targetParent), l = Ye(i.config.id, d, c, g, u, i.config.level)) : l = function(f, y, v, b, _) { var m; if (y !== _.$getRootId()) m = v < 0.25 ? X.prevSiblingTarget(f, y, _) : !(v > 0.6) || _.hasChild(y) && _.getItem(y).$open ? X.firstChildTarget(f, y, _) : X.nextSiblingTarget(f, y, _); else { @@ -9677,7 +9679,7 @@ const Xe = { removeLineHighlight: function(t) { } }; var Oa = function(t) { return { onCreated: function(e) { - e.$config = L(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 = Se(t); + e.$config = L(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 = we(t); }, onInitialized: function(e) { var n = e.$getConfig(); n.order_branch && (n.order_branch == "marker" ? Ha.init(e.$gantt, e) : Ra.init(e.$gantt, e)), this.initEvents(e, t), e.$config.id == "grid" && this.extendDom(e); @@ -9797,7 +9799,7 @@ const Ba = { createTaskDND: function() { return !isNaN(parseFloat(s)) && isFinite(s); }, on_mouse_move: function(s) { if (this.drag.start_drag) { - var o = lt(s, a.$task_data), l = this.drag.start_drag.start_x, d = this.drag.start_drag.start_y; + var o = rt(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) { @@ -9810,7 +9812,7 @@ const Ba = { createTaskDND: function() { }, _update_on_move: function(s) { var o = this.drag, l = i.$getConfig(); if (o.mode) { - var d = lt(s, i.$task_data); + var d = rt(s, i.$task_data); if (o.pos && o.pos.x == d.x) return; o.pos = d; var c = a.dateFromPos(d.x); @@ -9847,7 +9849,7 @@ const Ba = { createTaskDND: function() { 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 = lt(s, a.$task_data); + var g = rt(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); @@ -10030,10 +10032,10 @@ var za = function(t, e) { if (J(kt(p), e.$root) || (w = !1, C = null), w && (E = !ft(p, "task_end_date"), w = !!C), i = C, n = w, a = E, w) { const A = ft(p, h).querySelector(`.${u}`); if (A) { - const I = xe(A, t.$task_data); + const I = en(A, t.$task_bg); this._dir_end = { x: I.x + A.offsetWidth / 2, y: I.y + A.offsetHeight / 2 }; } - } else this._dir_end = lt(p, t.$task_data), e.env.isEdge && (this._dir_end.y += window.scrollY); + } else this._dir_end = rt(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() { @@ -10054,7 +10056,7 @@ var ja = 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 = Wa(), n._tasksDnD = Ba.createTaskDND(), n._tasksDnD.extend(n), this._mouseDelegates = Se(t); + i.bind = W(i.bind) ? i.bind : "task", i.bindLinks = W(i.bindLinks) ? i.bindLinks : "link", n._linksDnD = Wa(), n._tasksDnD = Ba.createTaskDND(), n._tasksDnD.extend(n), this._mouseDelegates = we(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) { @@ -10080,7 +10082,7 @@ var ja = function(t) { 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 = lt(a, n.$task_data), o = n.dateFromPos(s.x), l = Math.floor(n.columnIndexByDate(o)), d = n.getScale().trace_x[l]; + var s = rt(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); @@ -10373,12 +10375,12 @@ const Va = { init: function(t) { !T && l(g, S) ? d(g.id, S) : T && !T.parentNode && f.appendChild(T); } } - }, getRectangle: Ge, getVisibleRange: gt, prepareData: Ma }; + }, getRectangle: qe, getVisibleRange: gt, prepareData: Ma }; }(t); }, taskBar: function() { - return qe(t); + return Ue(t); }, timedProjectBar: function() { - return qe(t); + return Ue(t); }, taskRollupBar: function() { return function(r) { const s = yn(r), o = {}; @@ -10475,7 +10477,7 @@ const Va = { init: function(t) { else d(c.id, k); } for (var p in m) m[p] !== !1 && d(c.id, p); - }, getRectangle: Ge, getVisibleRange: gt }; + }, getRectangle: qe, getVisibleRange: gt }; }(t); }, resourceHistogram: function() { return Ct(); @@ -10661,7 +10663,7 @@ class Ka { }, 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 || Ja), 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 || (st(this), this.$gantt.attachEvent("onGanttScroll", () => { + 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 || Ja), 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 || (ot(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); @@ -11133,7 +11135,7 @@ function Qa(t) { E.formatter && (A = "", H += " gantt_duration_value_formatted"); const V = "
" + A + "
", ht = `
${P}
`, 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\t\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 \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\t
Start date: ${gantt.templates.tooltip_date_format(start)}
\r\n\t\t\t\t
End 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 \"
\" + text + \"
\";\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 += '
' + config.title + '
';\r\n\t\tinner += '
' + (config.content ? '' : config.text) + '
';\r\n\t\tif (ok)\r\n\t\t\tinner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\r\n\t\tif (cancel)\r\n\t\t\tinner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\r\n\r\n\t\tif (config.buttons) {\r\n\t\t\tfor (var i = 0; i < config.buttons.length; i++) {\r\n\t\t\t\tvar btn = config.buttons[i];\r\n\t\t\t\tif (typeof btn == \"object\") {\r\n\t\t\t\t\t// Support { label:\"Save\", css:\"main_button\", value:\"save\" }\r\n\t\t\t\t\tvar label = btn.label;\r\n\t\t\t\t\tvar css = btn.css || (\"gantt_\" + btn.label.toLowerCase() + \"_button\");\r\n\t\t\t\t\tvar value = btn.value || i;\r\n\t\t\t\t\tinner += button(label, css, value);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tinner += button(btn, btn, i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\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 = \"
\" + collapseIcon + \"
\" + obj.header + \"
\";\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\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 || \"\") + \"\";\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
\r\n\t\r\n\r\n
`;\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 = \"
\" + this.locale.labels[\"button_\" + sns[i].button] + \"
\";\r\n\t\t\t}\r\n\t\t\tif (sns[i].type == \"baselines\") {\r\n\t\t\t\tbutton = \"
\" + this.locale.labels.baselines_remove_all_button + \"
\" +\r\n\t\t\t\t\"
\" + this.locale.labels.baselines_add_button + \"
\";\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 += \"
\" + 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 += \"\";\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 += \"
\" + gantt.locale.labels[button] + \"
\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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\"
\" +\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\"
\"+label+\"
\" +\r\n\t\t\t\"
\" +\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 += \"\";\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\"
\" +\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\"
\"+durationLabel+\"
\" +\r\n\t\t\t\"
\" +\r\n\t\t\t\"\";\r\n\r\n\t\tconst deleteButton = `
${deleteLabel}
`;\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\t\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 \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\t
Start date: ${gantt.templates.tooltip_date_format(start)}
\r\n\t\t\t\t
End 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 \"
\" + text + \"
\";\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 += '
' + config.title + '
';\r\n\t\tinner += '
' + (config.content ? '' : config.text) + '
';\r\n\t\tif (ok)\r\n\t\t\tinner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\r\n\t\tif (cancel)\r\n\t\t\tinner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\r\n\r\n\t\tif (config.buttons) {\r\n\t\t\tfor (var i = 0; i < config.buttons.length; i++) {\r\n\t\t\t\tvar btn = config.buttons[i];\r\n\t\t\t\tif (typeof btn == \"object\") {\r\n\t\t\t\t\t// Support { label:\"Save\", css:\"main_button\", value:\"save\" }\r\n\t\t\t\t\tvar label = btn.label;\r\n\t\t\t\t\tvar css = btn.css || (\"gantt_\" + btn.label.toLowerCase() + \"_button\");\r\n\t\t\t\t\tvar value = btn.value || i;\r\n\t\t\t\t\tinner += button(label, css, value);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tinner += button(btn, btn, i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\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 = \"
\" + collapseIcon + \"
\" + obj.header + \"
\";\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\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 || \"\") + \"\";\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
\r\n\t\r\n\r\n
`;\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 = \"
\" + this.locale.labels[\"button_\" + sns[i].button] + \"
\";\r\n\t\t\t}\r\n\t\t\tif (sns[i].type == \"baselines\") {\r\n\t\t\t\tbutton = \"
\" + this.locale.labels.baselines_remove_all_button + \"
\" +\r\n\t\t\t\t\"
\" + this.locale.labels.baselines_add_button + \"
\";\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 += \"
\" + 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 += \"\";\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 += \"
\" + gantt.locale.labels[button] + \"
\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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\"
\" +\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\"
\"+label+\"
\" +\r\n\t\t\t\"
\" +\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 += \"\";\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\"
\" +\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\"
\"+durationLabel+\"
\" +\r\n\t\t\t\"
\" +\r\n\t\t\t\"\";\r\n\r\n\t\tconst deleteButton = `
${deleteLabel}
`;\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_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+='
'+x.title+"
"),D+='
'+(x.content?"":x.text)+'
',S&&(D+=o(l(x.ok,t.locale.labels.message_ok,"OK"),"ok",!0)),T&&(D+=o(l(x.cancel,t.locale.labels.message_cancel,"Cancel"),"cancel",!1)),x.buttons)for(var A=0;A",C.innerHTML=D,x.content){var M=x.content;typeof M=="string"&&(M=document.getElementById(M)),M.style.display=="none"&&(M.style.display=""),C.childNodes[x.title?1:0].appendChild(M)}return C.onclick=function(L){var P=L.target||L.srcElement;if(P.className||(P=P.parentNode),lt(P,".gantt_popup_button")){var H=P.getAttribute("data-result");i(x,H=H=="true"||H!="false"&&H)}},x.box=C,(S||T)&&(n=x),C}(_,m,p);_.hidden||s(!0),document.body.appendChild(k);var $=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-k.offsetWidth)/2)),w=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-k.offsetHeight)/2));return _.position=="top"?k.style.top="-3px":k.style.top=w+"px",k.style.left=$+"px",k.onkeydown=a,y.focus(k),_.hidden&&y.hide(k),t.callEvent("onMessagePopup",[k]),k}function c(_){return d(_,!0,!1)}function u(_){return d(_,!0,!0)}function h(_){return d(_)}function g(_,m,p){return typeof _!="object"&&(typeof m=="function"&&(p=m,m=""),_={text:_,type:m,callback:p}),_}function f(_,m,p,k){return typeof _!="object"&&(_={text:_,type:m,expire:p,id:k}),_.id=_.id||at(),_.expire=_.expire||v.expire,_}t.event(r,"keydown",a,!0);var y=function(){var _=g.apply(this,arguments);return _.type=_.type||"alert",h(_)};y.hide=function(_){for(;_&&_.getAttribute&&!_.getAttribute(e);)_=_.parentNode;_&&(_.parentNode.removeChild(_),s(!1),t.callEvent("onAfterMessagePopup",[_]))},y.focus=function(_){setTimeout(function(){var m=Zt(_);m.length&&m[0].focus&&m[0].focus()},1)};var v=function(_,m,p,k){switch((_=f.apply(this,arguments)).type=_.type||"info",_.type.split("-")[0]){case"alert":return c(_);case"confirm":return u(_);case"modalbox":return h(_);default:return function($){v.area||(v.area=document.createElement("div"),v.area.className="gantt_message_area",v.area.style[v.position]="5px",document.body.appendChild(v.area)),v.hide($.id);var w=document.createElement("div");return w.innerHTML="
"+$.text+"
",w.className="gantt-info gantt-"+$.type,w.onclick=function(){v.hide($.id),$=null},t._waiAria.messageInfoAttr(w),v.position=="bottom"&&v.area.firstChild?v.area.insertBefore(w,v.area.firstChild):v.area.appendChild(w),$.expire>0&&(v.timers[$.id]=window.setTimeout(function(){v&&v.hide($.id)},$.expire)),v.pull[$.id]=w,w=null,$.id}(_)}};v.seed=new Date().valueOf(),v.uid=at,v.expire=4e3,v.keyboard=!0,v.position="top",v.pull={},v.timers={},v.hideAll=function(){for(var _ in v.pull)v.hide(_)},v.hide=function(_){var m=v.pull[_];m&&m.parentNode&&(window.setTimeout(function(){m.parentNode.removeChild(m),m=null},2e3),m.className+=" hidden",v.timers[_]&&window.clearTimeout(v.timers[_]),delete v.pull[_])};var b=[];return t.attachEvent("onMessagePopup",function(_){b.push(_)}),t.attachEvent("onAfterMessagePopup",function(_){for(var m=0;mt.x_end||e.left+e.widtht.y_end||e.top+e.heightd.x&&g.topd.y&&c.push(h.id)}return{ids:c}}}function cn(t,e,n,i,a){var r=n.$gantt.getTask(t.source),s=n.$gantt.getTask(t.target),o=n.getItemTop(r.id),l=n.getItemHeight(r.id),d=n.getItemTop(s.id),c=n.getItemHeight(s.id);if(e.y>o+l&&e.y>d+c||e.y_endg){var v=g;g=h,h=v}return f>y&&(v=y,y=f,f=v),h+=-100,g+=u,f+=-100,y+=u,!(e.x>g&&e.x>y)&&!(e.x_endr.maxWidth&&(i=r.maxWidth),ar.maxHeight&&(a=r.maxHeight),this.setSize(i,a),this.$preResize,this.$preResize=!1},t.prototype.hide=function(){this._hide(!0),this.resize()},t.prototype.show=function(e){this._hide(!1),e&&this.$parent&&this.$parent.show(),this.resize()},t.prototype._hide=function(e){if(e===!0&&this.$view.parentNode)this.$view.parentNode.removeChild(this.$view);else if(e===!1&&!this.$view.parentNode){var n=this.$parent.cellIndex(this.$id);this.$parent.moveView(this,n)}this.$config.hidden=e},t.prototype.$toHTML=function(e,n){e===void 0&&(e=""),n=[n||"",this.$config.css||""].join(" ");var i=this.$config,a="";return i.raw?e=typeof i.raw=="string"?i.raw:"":(e||(e="
"+(i.html||"")+"
"),i.header&&(a="
"+(i.canCollapse?"
":"")+"
"+i.header+"
")),"
"+a+e+"
"},t.prototype.$fill=function(e,n){this.$view=e,this.$parent=n,this.init()},t.prototype.getNode=function(){return this.$view.querySelector("gantt_layout_cell")||this.$view},t.prototype.init=function(){var e=this;this._headerClickHandler=function(n){tt(n,"data-cell-id")==e.$id&&e.toggle()},this.$gantt.$services.getService("mouseEvents").delegate("click","gantt_header_arrow",this._headerClickHandler),this.callEvent("onReady",[])},t.prototype.toggle=function(){this.$config.collapsed=!this.$config.collapsed,this.resize()},t.prototype.getSize=function(){var e={height:this.$config.height||0,width:this.$config.width||0,gravity:this.$config.gravity||1,minHeight:this.$config.minHeight||0,minWidth:this.$config.minWidth||0,maxHeight:this.$config.maxHeight||1e11,maxWidth:this.$config.maxWidth||1e11};if(this.$config.collapsed){var n=this.$config.mode==="x";e[n?"width":"height"]=e[n?"maxWidth":"maxHeight"]=this.$config.headerHeight}return e},t.prototype.getContentSize=function(){var e=this.$lastSize.contentX;e!==1*e&&(e=this.$lastSize.width);var n=this.$lastSize.contentY;return n!==1*n&&(n=this.$lastSize.height),{width:e,height:n}},t.prototype._getBorderSizes=function(){var e={top:0,right:0,bottom:0,left:0,horizontal:0,vertical:0};return this._currentBorders&&(this._currentBorders[this._borders.left]&&(e.left=1,e.horizontal++),this._currentBorders[this._borders.right]&&(e.right=1,e.horizontal++),this._currentBorders[this._borders.top]&&(e.top=1,e.vertical++),this._currentBorders[this._borders.bottom]&&(e.bottom=1,e.vertical++)),e},t.prototype.setSize=function(e,n){this.$view.style.width=e+"px",this.$view.style.height=n+"px";var i=this._getBorderSizes(),a=n-i.vertical,r=e-i.horizontal;this.$lastSize={x:e,y:n,contentX:r,contentY:a},this.$config.header?this._sizeHeader():this._sizeContent()},t.prototype._borders={left:"gantt_layout_cell_border_left",right:"gantt_layout_cell_border_right",top:"gantt_layout_cell_border_top",bottom:"gantt_layout_cell_border_bottom"},t.prototype._setBorders=function(e,n){n||(n=this);var i=n.$view;for(var a in this._borders)Ht(i,this._borders[a]);typeof e=="string"&&(e=[e]);var r={};for(a=0;a0?n[l].$parent.getNextSibling(n[l].$id):n[l].$parent.getPrevSibling(n[l].$id);c.$name=="resizer"&&(c=r>0?c.$parent.getNextSibling(c.$id):c.$parent.getPrevSibling(c.$id));var u=c.getSize();if(o)n[l].$config.gravity=s;else if(c[a]){var h=d.gravity+u.gravity,g=d[a]+u[a],f=h/g;n[l].$config.gravity=f*s,c.$config[a]=g-s,c.$config.gravity=h-f*s}else n[l].$config[a]=s;var y=this.$gantt.$ui.getView("grid");!y||n[l].$content!==y||y.$config.scrollable||o||(this.$gantt.config.grid_width=s)}},e.prototype.resize=function(n){var i=!1;if(this.$root&&!this._resizeInProgress&&(this.callEvent("onBeforeResize",[]),i=!0,this._resizeInProgress=!0),t.prototype.resize.call(this,!0),t.prototype.resize.call(this,!1),i){var a=[];a=(a=(a=a.concat(this.getCellsByType("viewCell"))).concat(this.getCellsByType("viewLayout"))).concat(this.getCellsByType("hostCell"));for(var r=this.getCellsByType("scroller"),s=0;s=0&&this.$cells[i+1]?this.$cells[i+1]:null},e.prototype.getPrevSibling=function(n){var i=this.cellIndex(n);return i>=0&&this.$cells[i-1]?this.$cells[i-1]:null},e.prototype.cell=function(n){for(var i=0;i=a.childNodes.length?a.appendChild(n.$view):a.insertBefore(n.$view,a.childNodes[i])},e.prototype._parseConfig=function(n){this.$cells=[],this._xLayout=!n.rows;for(var i=n.rows||n.cols||n.views,a=0;a=0;r--){var s=this.$cells[r];s.$fill(a[r],this),s.$config.hidden&&s.$view.parentNode.removeChild(s.$view)}},e.prototype.$toHTML=function(){for(var n=this._xLayout?"x":"y",i=[],a=0;a=1e5&&(c.maxWidth=a),c.maxHeight>=1e5&&(c.maxHeight=s),c.minWidth=c.minWidth!=c.minWidth?0:c.minWidth,c.minHeight=c.minHeight!=c.minHeight?0:c.minHeight,this._xLayout?(c.minWidth+=this.$config.margin*this.$cells.length||0,c.minWidth+=2*this.$config.padding||0,c.minHeight+=2*this.$config.padding||0):(c.minHeight+=this.$config.margin*this.$cells.length||0,c.minHeight+=2*this.$config.padding||0),c},e.prototype._calcFreeSpace=function(n,i,a){var r=a?i.minWidth:i.minHeight,s=i.maxWidth,o=n;return o?(o>s&&(o=s),os&&(o=s,this._free-=o,this._gravity-=i.gravity),oo&&(r=o),r=0;r--)if(!i[r].$config.hidden){a=r;break}for(r=0;r=a,o="";!s&&i[r+1]&&i[r+1].$config.view=="scrollbar"&&(this._xLayout?s=!0:o="gantt_layout_cell_border_transparent"),this._setBorders(s?[]:[n,o],i[r])}},e.prototype._updateCellVisibility=function(){for(var n=this._visibleCells||{},i=!this._visibleCells,a={},r=null,s=[],o=0;o
"},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=`
",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+='
'+x.title+"
"),D+='
'+(x.content?"":x.text)+'
',S&&(D+=o(l(x.ok,t.locale.labels.message_ok,"OK"),"ok",!0)),T&&(D+=o(l(x.cancel,t.locale.labels.message_cancel,"Cancel"),"cancel",!1)),x.buttons)for(var A=0;A",C.innerHTML=D,x.content){var M=x.content;typeof M=="string"&&(M=document.getElementById(M)),M.style.display=="none"&&(M.style.display=""),C.childNodes[x.title?1:0].appendChild(M)}return C.onclick=function(L){var P=L.target||L.srcElement;if(P.className||(P=P.parentNode),lt(P,".gantt_popup_button")){var H=P.getAttribute("data-result");i(x,H=H=="true"||H!="false"&&H)}},x.box=C,(S||T)&&(n=x),C}(_,m,p);_.hidden||s(!0),document.body.appendChild(k);var $=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-k.offsetWidth)/2)),w=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-k.offsetHeight)/2));return _.position=="top"?k.style.top="-3px":k.style.top=w+"px",k.style.left=$+"px",k.onkeydown=a,y.focus(k),_.hidden&&y.hide(k),t.callEvent("onMessagePopup",[k]),k}function c(_){return d(_,!0,!1)}function u(_){return d(_,!0,!0)}function h(_){return d(_)}function g(_,m,p){return typeof _!="object"&&(typeof m=="function"&&(p=m,m=""),_={text:_,type:m,callback:p}),_}function f(_,m,p,k){return typeof _!="object"&&(_={text:_,type:m,expire:p,id:k}),_.id=_.id||rt(),_.expire=_.expire||v.expire,_}t.event(r,"keydown",a,!0);var y=function(){var _=g.apply(this,arguments);return _.type=_.type||"alert",h(_)};y.hide=function(_){for(;_&&_.getAttribute&&!_.getAttribute(e);)_=_.parentNode;_&&(_.parentNode.removeChild(_),s(!1),t.callEvent("onAfterMessagePopup",[_]))},y.focus=function(_){setTimeout(function(){var m=Zt(_);m.length&&m[0].focus&&m[0].focus()},1)};var v=function(_,m,p,k){switch((_=f.apply(this,arguments)).type=_.type||"info",_.type.split("-")[0]){case"alert":return c(_);case"confirm":return u(_);case"modalbox":return h(_);default:return function($){v.area||(v.area=document.createElement("div"),v.area.className="gantt_message_area",v.area.style[v.position]="5px",document.body.appendChild(v.area)),v.hide($.id);var w=document.createElement("div");return w.innerHTML="
"+$.text+"
",w.className="gantt-info gantt-"+$.type,w.onclick=function(){v.hide($.id),$=null},t._waiAria.messageInfoAttr(w),v.position=="bottom"&&v.area.firstChild?v.area.insertBefore(w,v.area.firstChild):v.area.appendChild(w),$.expire>0&&(v.timers[$.id]=window.setTimeout(function(){v&&v.hide($.id)},$.expire)),v.pull[$.id]=w,w=null,$.id}(_)}};v.seed=new Date().valueOf(),v.uid=rt,v.expire=4e3,v.keyboard=!0,v.position="top",v.pull={},v.timers={},v.hideAll=function(){for(var _ in v.pull)v.hide(_)},v.hide=function(_){var m=v.pull[_];m&&m.parentNode&&(window.setTimeout(function(){m.parentNode.removeChild(m),m=null},2e3),m.className+=" hidden",v.timers[_]&&window.clearTimeout(v.timers[_]),delete v.pull[_])};var b=[];return t.attachEvent("onMessagePopup",function(_){b.push(_)}),t.attachEvent("onAfterMessagePopup",function(_){for(var m=0;mt.x_end||e.left+e.widtht.y_end||e.top+e.heightd.x&&g.topd.y&&c.push(h.id)}return{ids:c}}}function cn(t,e,n,i,a){var r=n.$gantt.getTask(t.source),s=n.$gantt.getTask(t.target),o=n.getItemTop(r.id),l=n.getItemHeight(r.id),d=n.getItemTop(s.id),c=n.getItemHeight(s.id);if(e.y>o+l&&e.y>d+c||e.y_endg){var v=g;g=h,h=v}return f>y&&(v=y,y=f,f=v),h+=-100,g+=u,f+=-100,y+=u,!(e.x>g&&e.x>y)&&!(e.x_endr.maxWidth&&(i=r.maxWidth),ar.maxHeight&&(a=r.maxHeight),this.setSize(i,a),this.$preResize,this.$preResize=!1},t.prototype.hide=function(){this._hide(!0),this.resize()},t.prototype.show=function(e){this._hide(!1),e&&this.$parent&&this.$parent.show(),this.resize()},t.prototype._hide=function(e){if(e===!0&&this.$view.parentNode)this.$view.parentNode.removeChild(this.$view);else if(e===!1&&!this.$view.parentNode){var n=this.$parent.cellIndex(this.$id);this.$parent.moveView(this,n)}this.$config.hidden=e},t.prototype.$toHTML=function(e,n){e===void 0&&(e=""),n=[n||"",this.$config.css||""].join(" ");var i=this.$config,a="";return i.raw?e=typeof i.raw=="string"?i.raw:"":(e||(e="
"+(i.html||"")+"
"),i.header&&(a="
"+(i.canCollapse?"
":"")+"
"+i.header+"
")),"
"+a+e+"
"},t.prototype.$fill=function(e,n){this.$view=e,this.$parent=n,this.init()},t.prototype.getNode=function(){return this.$view.querySelector("gantt_layout_cell")||this.$view},t.prototype.init=function(){var e=this;this._headerClickHandler=function(n){tt(n,"data-cell-id")==e.$id&&e.toggle()},this.$gantt.$services.getService("mouseEvents").delegate("click","gantt_header_arrow",this._headerClickHandler),this.callEvent("onReady",[])},t.prototype.toggle=function(){this.$config.collapsed=!this.$config.collapsed,this.resize()},t.prototype.getSize=function(){var e={height:this.$config.height||0,width:this.$config.width||0,gravity:this.$config.gravity||1,minHeight:this.$config.minHeight||0,minWidth:this.$config.minWidth||0,maxHeight:this.$config.maxHeight||1e11,maxWidth:this.$config.maxWidth||1e11};if(this.$config.collapsed){var n=this.$config.mode==="x";e[n?"width":"height"]=e[n?"maxWidth":"maxHeight"]=this.$config.headerHeight}return e},t.prototype.getContentSize=function(){var e=this.$lastSize.contentX;e!==1*e&&(e=this.$lastSize.width);var n=this.$lastSize.contentY;return n!==1*n&&(n=this.$lastSize.height),{width:e,height:n}},t.prototype._getBorderSizes=function(){var e={top:0,right:0,bottom:0,left:0,horizontal:0,vertical:0};return this._currentBorders&&(this._currentBorders[this._borders.left]&&(e.left=1,e.horizontal++),this._currentBorders[this._borders.right]&&(e.right=1,e.horizontal++),this._currentBorders[this._borders.top]&&(e.top=1,e.vertical++),this._currentBorders[this._borders.bottom]&&(e.bottom=1,e.vertical++)),e},t.prototype.setSize=function(e,n){this.$view.style.width=e+"px",this.$view.style.height=n+"px";var i=this._getBorderSizes(),a=n-i.vertical,r=e-i.horizontal;this.$lastSize={x:e,y:n,contentX:r,contentY:a},this.$config.header?this._sizeHeader():this._sizeContent()},t.prototype._borders={left:"gantt_layout_cell_border_left",right:"gantt_layout_cell_border_right",top:"gantt_layout_cell_border_top",bottom:"gantt_layout_cell_border_bottom"},t.prototype._setBorders=function(e,n){n||(n=this);var i=n.$view;for(var a in this._borders)Ht(i,this._borders[a]);typeof e=="string"&&(e=[e]);var r={};for(a=0;a0?n[l].$parent.getNextSibling(n[l].$id):n[l].$parent.getPrevSibling(n[l].$id);c.$name=="resizer"&&(c=r>0?c.$parent.getNextSibling(c.$id):c.$parent.getPrevSibling(c.$id));var u=c.getSize();if(o)n[l].$config.gravity=s;else if(c[a]){var h=d.gravity+u.gravity,g=d[a]+u[a],f=h/g;n[l].$config.gravity=f*s,c.$config[a]=g-s,c.$config.gravity=h-f*s}else n[l].$config[a]=s;var y=this.$gantt.$ui.getView("grid");!y||n[l].$content!==y||y.$config.scrollable||o||(this.$gantt.config.grid_width=s)}},e.prototype.resize=function(n){var i=!1;if(this.$root&&!this._resizeInProgress&&(this.callEvent("onBeforeResize",[]),i=!0,this._resizeInProgress=!0),t.prototype.resize.call(this,!0),t.prototype.resize.call(this,!1),i){var a=[];a=(a=(a=a.concat(this.getCellsByType("viewCell"))).concat(this.getCellsByType("viewLayout"))).concat(this.getCellsByType("hostCell"));for(var r=this.getCellsByType("scroller"),s=0;s=0&&this.$cells[i+1]?this.$cells[i+1]:null},e.prototype.getPrevSibling=function(n){var i=this.cellIndex(n);return i>=0&&this.$cells[i-1]?this.$cells[i-1]:null},e.prototype.cell=function(n){for(var i=0;i=a.childNodes.length?a.appendChild(n.$view):a.insertBefore(n.$view,a.childNodes[i])},e.prototype._parseConfig=function(n){this.$cells=[],this._xLayout=!n.rows;for(var i=n.rows||n.cols||n.views,a=0;a=0;r--){var s=this.$cells[r];s.$fill(a[r],this),s.$config.hidden&&s.$view.parentNode.removeChild(s.$view)}},e.prototype.$toHTML=function(){for(var n=this._xLayout?"x":"y",i=[],a=0;a=1e5&&(c.maxWidth=a),c.maxHeight>=1e5&&(c.maxHeight=s),c.minWidth=c.minWidth!=c.minWidth?0:c.minWidth,c.minHeight=c.minHeight!=c.minHeight?0:c.minHeight,this._xLayout?(c.minWidth+=this.$config.margin*this.$cells.length||0,c.minWidth+=2*this.$config.padding||0,c.minHeight+=2*this.$config.padding||0):(c.minHeight+=this.$config.margin*this.$cells.length||0,c.minHeight+=2*this.$config.padding||0),c},e.prototype._calcFreeSpace=function(n,i,a){var r=a?i.minWidth:i.minHeight,s=i.maxWidth,o=n;return o?(o>s&&(o=s),os&&(o=s,this._free-=o,this._gravity-=i.gravity),oo&&(r=o),r=0;r--)if(!i[r].$config.hidden){a=r;break}for(r=0;r=a,o="";!s&&i[r+1]&&i[r+1].$config.view=="scrollbar"&&(this._xLayout?s=!0:o="gantt_layout_cell_border_transparent"),this._setBorders(s?[]:[n,o],i[r])}},e.prototype._updateCellVisibility=function(){for(var n=this._visibleCells||{},i=!this._visibleCells,a={},r=null,s=[],o=0;o
"},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(yp.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=`
",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="";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||"")+""}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="
"+T+"
";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+="",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="
"+A+"
",ft=`
${P}
`,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: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 be(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=be(t,e,r,a);else{var c=be(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?be(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 xe(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=nt(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=xe(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=xe(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=xe(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=nt(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=nt(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=me(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=nt(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=nt(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=nt(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="";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=Ae(A,t.$task_bg);this._dir_end={x:I.x+A.offsetWidth/2,y:I.y+A.offsetHeight/2}}}else this._dir_end=nt(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=me(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=nt(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=ke(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:ke,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||ye(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(ye(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 $e(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 we,Se;window.jQuery&&(we=window.jQuery,Se=[],we.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(Se[t])return Se[t].apply(this,[]);we.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||(it(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||"")+""}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="
"+T+"
";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+="",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="
"+A+"
",ft=`
${P}
`,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=`
 
-
`,t._lightbox_root=t.$root,t.$services.getService("state").registerProvider("lightbox",function(){return{lightbox:t._lightbox_id}}),t.showLightbox=function(_){var m=this.getTask(_);if(this.callEvent("onBeforeLightbox",[_])){var p=this.getLightbox(this.getTaskType(m.type));this.showCover(p),this._fill_lightbox(_,p),this._setLbPosition(p),this._waiAria.lightboxVisibleAttr(p),this.callEvent("onLightbox",[_])}else t.isTaskExists(_)&&t.getTask(_).$new&&this.$data.tasksStore._updateOrder()},t._get_timepicker_step=function(){if(this.config.round_dnd_dates){var _;if(function(p){var k=p.$ui.getView("timeline");return!(!k||!k.isVisible())}(this)){var m=t.getScale();_=Bt(m.unit)*m.step/60}return(!_||_>=1440)&&(_=this.config.time_step),_}return this.config.time_step},t.getLabel=function(_,m){for(var p=this._get_typed_lightbox_config(),k=0;k",k+=y(this.config.buttons_left),k+="
",k+=y(this.config.buttons_right),k+="",m.innerHTML=k,t._waiAria.lightboxAttr(m),t.config.drag_lightbox&&(m.firstChild.onmousedown=t._ready_to_dnd,m.firstChild.ontouchstart=function(T){t._ready_to_dnd(T.touches[0])},m.firstChild.onselectstart=function(){return!1},m.firstChild.style.cursor="pointer",t._init_dnd_events()),this._lightbox&&this.resetLightbox(),g(),this._cover.insertBefore(m,this._cover.firstChild),this._lightbox=m,$=this._get_typed_lightbox_config(_),k=this._render_sections($);var S=(w=m.querySelector("div.gantt_cal_larea")).style.overflow;w.style.overflow="hidden",w.innerHTML=k,function(T){var C,E,D,A,I,M;for(M=0;M
"+this.locale.labels["button_"+_[p].button]+"
"),_[p].type=="baselines"&&(w="
"+this.locale.labels.baselines_remove_all_button+"
"+this.locale.labels.baselines_add_button+"
"),this.config.wide_form&&(m+="
"),m+="
"+k.render.call(this,_[p]),m+="
"}}return m},t._center_lightbox=function(_){t._setLbPosition(_)},t._setLbPosition=function(_){if(!_)return;const m=t._lightbox_root||t.$root;_.style.top=Math.max(m.offsetHeight/2-_.offsetHeight/2,0)+"px",_.style.left=Math.max(m.offsetWidth/2-_.offsetWidth/2,0)+"px"},t.showCover=function(_){_&&(_.style.display="block",this._setLbPosition(_)),g(),this._cover.style.display=""};const g=function(){t._cover||(t._cover=document.createElement("div"),t._cover.className="gantt_cal_cover",t._cover.style.display="none",t.event(t._cover,"mousemove",t._move_while_dnd),t.event(t._cover,"mouseup",t._finish_dnd),(t._lightbox_root||t.$root).appendChild(t._cover))};function f(_){for(var m in this.config.types)if(this.config.types[m]==_)return m;return"task"}function y(_,m){var p,k,$="";for(k=0;k<_.length;k++)p=t.config._migrate_buttons[_[k]]?t.config._migrate_buttons[_[k]]:_[k],$+="
"+t.locale.labels[p]+"
";return $}function v(_){var m,p;return _.time_format?_.time_format:(p=["%d","%m","%Y"],Bt((m=t.getScale())?m.unit:t.config.duration_unit)"+S+"";break;case"%m":for(_._time_format_order[1]=m,_._time_format_order.size++,S=0;S<12;S++)C+="";break;case"%d":for(_._time_format_order[0]=m,_._time_format_order.size++,S=1;S<32;S++)C+="";break;case"%H:%i":for(_._time_format_order[3]=m,_._time_format_order.size++,S=p.first,T=p.date.getDate(),_._time_values=[];S"+t.templates.time_picker(p.date)+"",_._time_values.push(S),p.date.setTime(p.date.valueOf()+60*t._get_timepicker_step()*1e3),S=24*(p.date.getDate()!=T?1:0)*60+60*p.date.getHours()+p.date.getMinutes()}return C}t._init_lightbox_events=function(){t.lightbox_events={},t.lightbox_events.gantt_save_btn=function(){t._save_lightbox()},t.lightbox_events.gantt_delete_btn=function(){t._lightbox_current_type=null,t.callEvent("onLightboxDelete",[t._lightbox_id])&&(t.isTaskExists(t._lightbox_id)?t.$click.buttons.delete(t._lightbox_id):t.hideLightbox())},t.lightbox_events.gantt_cancel_btn=function(){t._cancel_lightbox()},t.lightbox_events.default=function(_,m){if(m.getAttribute("data-dhx-button"))t.callEvent("onLightboxButton",[m.className,m,_]);else{var p,k,$=K(m);if($.indexOf("gantt_custom_button")!=-1)if($.indexOf("gantt_custom_button_")!=-1)for(p=m.parentNode.getAttribute("data-index"),k=m;k&&K(k).indexOf("gantt_cal_lsection")==-1;)k=k.parentNode;else p=m.getAttribute("data-index"),k=m.parentNode,m=m.firstChild;var w=t._get_typed_lightbox_config();p&&(p*=1,t.form_blocks[w[1*p].type].button_click(p,m,k,k.nextSibling))}},this.event(t.getLightbox(),"click",function(_){_.target.closest(".gantt_cal_ltitle_close_btn")&&t._cancel_lightbox();var m=mt(_),p=K(m);return p||(p=K(m=m.previousSibling)),m&&p&&p.indexOf("gantt_btn_set")===0&&(p=K(m=m.firstChild)),!(!m||!p)&&(t.defined(t.lightbox_events[m.className])?t.lightbox_events[m.className]:t.lightbox_events.default)(_,m)}),t.getLightbox().onkeydown=function(_){var m=_||window.event,p=_.target||_.srcElement,k=K(p).indexOf("gantt_btn_set")>-1;switch((_||m).keyCode){case t.constants.KEY_CODES.SPACE:if((_||m).shiftKey)return;k&&p.click&&p.click();break;case t.keys.edit_save:if((_||m).shiftKey)return;k&&p.click?p.click():t._save_lightbox();break;case t.keys.edit_cancel:t._cancel_lightbox()}}},t._cancel_lightbox=function(){var _=this.getLightboxValues();t._lightbox_current_type=null,this.callEvent("onLightboxCancel",[this._lightbox_id,_.$new]),t.isTaskExists(_.id)&&_.$new&&(this.silent(function(){t.$data.tasksStore.removeItem(_.id),t._update_flags(_.id,null)}),this.refreshData()),this.hideLightbox()},t._save_lightbox=function(){var _=this.getLightboxValues();t._lightbox_current_type=null,this.callEvent("onLightboxSave",[this._lightbox_id,_,!!_.$new])&&(t.$data.tasksStore._skipTaskRecalculation="lightbox",_.$new?(delete _.$new,this.addTask(_,_.parent,this.getTaskIndex(_.id))):this.isTaskExists(_.id)&&(this.mixin(this.getTask(_.id),_,!0),this.refreshTask(_.id),this.updateTask(_.id)),t.$data.tasksStore._skipTaskRecalculation=!1,this.refreshData(),this.hideLightbox())},t._resolve_default_mapping=function(_){var m=_.map_to;return{time:!0,time_optional:!0,duration:!0,duration_optional:!0}[_.type]?_.map_to=="auto"?m={start_date:"start_date",end_date:"end_date",duration:"duration"}:typeof _.map_to=="string"&&(m={start_date:_.map_to}):_.type==="constraint"&&(_.map_to&&typeof _.map_to!="string"||(m={constraint_type:"constraint_type",constraint_date:"constraint_date"})),m},t.getLightboxValues=function(){var _={};t.isTaskExists(this._lightbox_id)&&(_=this.mixin({},this.getTask(this._lightbox_id)));for(var m=this._get_typed_lightbox_config(),p=0;p0&&(w+=" "),(k=b(_,p,S))&&($=t._waiAria.lightboxSelectAttrString(S.timeFormat[p]),w+="");return w},getTimePickerValue:function(_,m,p){var k,$=m._time_format_order,w=0,x=0,S=p||0;return t.defined($[3])&&(k=parseInt(_[$[3]+S].value,10),w=Math.floor(k/60),x=k%60),new Date(_[$[2]+S].value,_[$[1]+S].value,_[$[0]+S].value,w,x)},_fill_lightbox_select:function(_,m,p,k){if(_[m+k[0]].value=p.getDate(),_[m+k[1]].value=p.getMonth(),_[m+k[2]].value=p.getFullYear(),t.defined(k[3])){var $=60*p.getHours()+p.getMinutes();$=Math.round($/t._get_timepicker_step())*t._get_timepicker_step();var w=_[m+k[3]];w.value=$,w.setAttribute("data-value",$)}},template:new e,textarea:new n,select:new a,time:new i,duration:new o,parent:new l,radio:new s,checkbox:new r,resources:new d,constraint:new c,baselines:new h,typeselect:new u},t._is_lightbox_timepicker=function(){for(var _=this._get_typed_lightbox_config(),m=0;m<_.length;m++)if(_[m].name=="time"&&_[m].type=="time")return!0;return!1},t._simple_confirm=function(_,m,p,k){if(!_)return p();var $={text:_};m&&($.title=m),k&&($.ok=k),p&&($.callback=function(w){w&&p()}),t.confirm($)},t._get_typed_lightbox_config=function(_){_===void 0&&(_=this.getLightboxType());var m=f.call(this,_);return t.config.lightbox[m+"_sections"]?t.config.lightbox[m+"_sections"]:t.config.lightbox.sections},t._silent_redraw_lightbox=function(_){var m=this.getLightboxType();if(this.getState().lightbox){var p=this.getState().lightbox,k=this.getLightboxValues(),$=this.copy(this.getTask(p));this.resetLightbox();var w=this.mixin($,k,!0),x=this.getLightbox(_||void 0);this._set_lightbox_values(w,x),this.showCover(x)}else this.resetLightbox(),this.getLightbox(_||void 0);this.callEvent("onLightboxChange",[m,this.getLightboxType()])}}function Za(t){if(!_t.isNode){t.utils={arrayFind:Mn,dom:Ne};var e=se();t.event=e.attach,t.eventRemove=e.detach,t._eventRemoveAll=e.detachAll,t._createDomEventScope=e.extend,N(t,sa(t));var n=ja.init(t);t.$ui=n.factory,t.$ui.layers=n.render,t.$mouseEvents=n.mouseEvents,t.$services.setService("mouseEvents",function(){return t.$mouseEvents}),t.mixin(t,n.layersApi),function(i){delete i.addTaskLayer,delete i.addLinkLayer}(t),t.$services.setService("layers",function(){return n.layersService}),t.mixin(t,function(){function i(u){return u.$ui.getView("timeline")}function a(u){return u.$ui.getView("grid")}function r(u){var h=i(u);if(h&&!h.$config.hidden)return h;var g=a(u);return g&&!g.$config.hidden?g:null}function s(u){var h=null,g=!1;return[".gantt_drag_marker.gantt_grid_resize_area",".gantt_drag_marker .gantt_row.gantt_row_task",".gantt_drag_marker.gantt_grid_dnd_marker"].forEach(function(f){g=g||!!document.querySelector(f)}),(h=g?a(u):r(u))?l(u,h,"scrollY"):null}function o(u){var h=r(u);return h&&h.id!="grid"?l(u,h,"scrollX"):null}function l(u,h,g){var f=h.$config[g];return u.$ui.getView(f)}var d="DEFAULT_VALUE";function c(u,h,g,f){var y=u(this);return y&&y.isVisible()?y[h].apply(y,g):f?f():d}return{getColumnIndex:function(u){var h=c.call(this,a,"getColumnIndex",[u]);return h===d?0:h},dateFromPos:function(u){var h=c.call(this,i,"dateFromPos",Array.prototype.slice.call(arguments));return h===d?this.getState().min_date:h},posFromDate:function(u){var h=c.call(this,i,"posFromDate",[u]);return h===d?0:h},getRowTop:function(u){var h=this,g=c.call(h,i,"getRowTop",[u],function(){return c.call(h,a,"getRowTop",[u])});return g===d?0:g},getTaskTop:function(u){var h=this,g=c.call(h,i,"getItemTop",[u],function(){return c.call(h,a,"getItemTop",[u])});return g===d?0:g},getTaskPosition:function(u,h,g){var f=c.call(this,i,"getItemPosition",[u,h,g]);return f===d?{left:0,top:this.getTaskTop(u.id),height:this.getTaskBarHeight(u.id),width:0}:f},getTaskBarHeight:function(u,h){var g=this,f=c.call(g,i,"getBarHeight",[u,h],function(){return c.call(g,a,"getItemHeight",[u])});return f===d?0:f},getTaskHeight:function(u){var h=this,g=c.call(h,i,"getItemHeight",[u],function(){return c.call(h,a,"getItemHeight",[u])});return g===d?0:g},columnIndexByDate:function(u){var h=c.call(this,i,"columnIndexByDate",[u]);return h===d?0:h},roundTaskDates:function(){c.call(this,i,"roundTaskDates",[])},getScale:function(){var u=c.call(this,i,"getScale",[]);return u===d?null:u},getTaskNode:function(u){var h=i(this);if(h&&h.isVisible()){var g=h._taskRenderer.rendered[u];if(!g){var f=h.$config.item_attribute;g=h.$task_bars.querySelector("["+f+"='"+u+"']")}return g||null}return null},getLinkNode:function(u){var h=i(this);return h.isVisible()?h._linkRenderer.rendered[u]:null},scrollTo:function(u,h){var g=s(this),f=o(this),y={position:0},v={position:0};g&&(v=g.getScrollState()),f&&(y=f.getScrollState());var b=f&&1*u==u,_=g&&1*h==h;if(b&&_)for(var m=g._getLinkedViews(),p=f._getLinkedViews(),k=[],$=0;${const o=getComputedStyle(s).getPropertyValue("--dhx-gantt-theme");o&&o!==i.skin&&i.setSkin(o)},100))}i.attachEvent("onDestroy",function(){clearInterval(a)})}(t),function(i){i.skins.skyblue={config:{grid_width:370,row_height:27,bar_height_padding:4,scale_height:27,link_line_width:1,link_arrow_size:8,link_radius:2,lightbox_additional_height:75},_second_column_width:95,_third_column_width:80}}(t),function(i){i.skins.dark={config:{grid_width:390,row_height:36,scale_height:36,link_line_width:2,link_arrow_size:12,bar_height_padding:9,lightbox_additional_height:75},_second_column_width:100,_third_column_width:70}}(t),function(i){i.skins.meadow={config:{grid_width:380,row_height:27,scale_height:30,link_line_width:2,link_arrow_size:10,bar_height_padding:4,lightbox_additional_height:72},_second_column_width:95,_third_column_width:80}}(t),function(i){i.skins.terrace={config:{grid_width:390,row_height:36,scale_height:36,link_line_width:2,link_arrow_size:12,bar_height_padding:9,lightbox_additional_height:75},_second_column_width:100,_third_column_width:70}}(t),function(i){i.skins.broadway={config:{grid_width:390,row_height:35,scale_height:35,link_line_width:1,link_arrow_size:9,bar_height_padding:4,lightbox_additional_height:86},_second_column_width:100,_third_column_width:80,_lightbox_template:"
 
",_config_buttons_left:{},_config_buttons_right:{gantt_delete_btn:"icon_delete",gantt_save_btn:"icon_save"}}}(t),function(i){i.skins.material={config:{grid_width:411,row_height:34,scale_height:36,link_line_width:2,link_arrow_size:12,bar_height_padding:9,lightbox_additional_height:80},_second_column_width:110,_third_column_width:75,_redefine_lightbox_buttons:{buttons_left:["dhx_delete_btn"],buttons_right:["dhx_cancel_btn","dhx_save_btn"]}},i.attachEvent("onAfterTaskDrag",function(a){var r=i.getTaskNode(a);r&&(r.className+=" gantt_drag_animation",setTimeout(function(){var s=r.className.indexOf(" gantt_drag_animation");s>-1&&(r.className=r.className.slice(0,s))},200))})}(t),function(i){i.skins.contrast_black={config:{grid_width:390,row_height:35,scale_height:35,link_line_width:2,link_arrow_size:12,lightbox_additional_height:75},_second_column_width:100,_third_column_width:80}}(t),function(i){i.skins.contrast_white={config:{grid_width:390,row_height:35,scale_height:35,link_line_width:2,link_arrow_size:12,lightbox_additional_height:75},_second_column_width:100,_third_column_width:80}}(t),function(i){i.ext||(i.ext={});for(var a=[Fa,Va,Ua],r=0;r`,"gm"),r=new RegExp(" +","gm");function s(c){return(c+"").replace(a," ").replace(r," ")}var o=new RegExp("'","gm");function l(c){return(c+"").replace(o,"'")}for(var d in i._waiAria={getAttributeString:function(c){var u=[" "];for(var h in c){var g=l(s(c[h]));u.push(h+"='"+g+"'")}return u.push(" "),u.join(" ")},getTimelineCellAttr:function(c){return i._waiAria.getAttributeString({"aria-label":c})},_taskCommonAttr:function(c,u){c.start_date&&c.end_date&&(u.setAttribute("aria-label",s(i.templates.tooltip_text(c.start_date,c.end_date,c))),c.$dataprocessor_class&&u.setAttribute("aria-busy",!0))},setTaskBarAttr:function(c,u){this._taskCommonAttr(c,u),u.setAttribute("role","img"),!i.isReadonly(c)&&i.config.drag_move&&(c.id!=i.getState("tasksDnd").drag_id?u.setAttribute("aria-grabbed",!1):u.setAttribute("aria-grabbed",!0))},taskRowAttr:function(c,u){this._taskCommonAttr(c,u),!i.isReadonly(c)&&i.config.order_branch&&u.setAttribute("aria-grabbed",!1),u.setAttribute("role","row"),u.setAttribute("aria-selected",i.isSelectedTask(c.id)?"true":"false"),u.setAttribute("aria-level",c.$level+1||1),i.hasChild(c.id)&&u.setAttribute("aria-expanded",c.$open?"true":"false")},linkAttr:function(c,u){var h=i.config.links,g=c.type==h.finish_to_start||c.type==h.start_to_start,f=c.type==h.start_to_start||c.type==h.start_to_finish,y=i.locale.labels.link+" "+i.templates.drag_link(c.source,f,c.target,g);u.setAttribute("role","img"),u.setAttribute("aria-label",s(y)),i.isReadonly(c)&&u.setAttribute("aria-readonly",!0)},gridSeparatorAttr:function(c){c.setAttribute("role","columnheader")},rowResizerAttr:function(c){c.setAttribute("role","row")},lightboxHiddenAttr:function(c){c.setAttribute("aria-hidden","true")},lightboxVisibleAttr:function(c){c.setAttribute("aria-hidden","false")},lightboxAttr:function(c){c.setAttribute("role","dialog"),c.setAttribute("aria-hidden","true"),c.firstChild.setAttribute("role","heading"),c.firstChild.setAttribute("aria-level","1")},lightboxButtonAttrString:function(c){return this.getAttributeString({role:"button","aria-label":i.locale.labels[c],tabindex:"0"})},lightboxHeader:function(c,u){c.setAttribute("aria-label",u)},lightboxSelectAttrString:function(c){var u="";switch(c){case"%Y":u=i.locale.labels.years;break;case"%m":u=i.locale.labels.months;break;case"%d":u=i.locale.labels.days;break;case"%H:%i":u=i.locale.labels.hours+i.locale.labels.minutes}return i._waiAria.getAttributeString({"aria-label":u})},lightboxDurationInputAttrString:function(c){return this.getAttributeString({"aria-label":i.locale.labels.column_duration,"aria-valuemin":"0",role:"spinbutton"})},inlineEditorAttr:function(c){c.setAttribute("role","row")},gridAttrString:function(){return[" role='treegrid'",i.config.multiselect?"aria-multiselectable='true'":"aria-multiselectable='false'"," "].join(" ")},gridScaleRowAttrString:function(){return"role='row'"},gridScaleCellAttrString:function(c,u){var h="";if(c.name=="add")h=this.getAttributeString({role:"columnheader","aria-label":i.locale.labels.new_task});else{var g={role:"columnheader","aria-label":u};i._sort&&i._sort.name==c.name&&(i._sort.direction=="asc"?g["aria-sort"]="ascending":g["aria-sort"]="descending"),h=this.getAttributeString(g)}return h},gridDataAttrString:function(){return"role='rowgroup'"},reorderMarkerAttr:function(c){c.setAttribute("role","grid"),c.firstChild.removeAttribute("aria-level"),c.firstChild.setAttribute("aria-grabbed","true")},gridCellAttrString:function(c,u,h){var g={role:"gridcell","aria-label":u};return c.editor&&!i.isReadonly(h)||(g["aria-readonly"]=!0),this.getAttributeString(g)},gridAddButtonAttrString:function(c){return this.getAttributeString({role:"button","aria-label":i.locale.labels.new_task})},messageButtonAttrString:function(c){return"tabindex='0' role='button' aria-label='"+c+"'"},messageInfoAttr:function(c){c.setAttribute("role","alert")},messageModalAttr:function(c,u){c.setAttribute("role","dialog"),u&&c.setAttribute("aria-labelledby",u)},quickInfoAttr:function(c){c.setAttribute("role","dialog")},quickInfoHeaderAttrString:function(){return" role='heading' aria-level='1' "},quickInfoHeader:function(c,u){c.setAttribute("aria-label",u)},quickInfoButtonAttrString:function(c){return i._waiAria.getAttributeString({role:"button","aria-label":c,tabindex:"0"})},tooltipAttr:function(c){c.setAttribute("role","tooltip")},tooltipVisibleAttr:function(c){c.setAttribute("aria-hidden","false")},tooltipHiddenAttr:function(c){c.setAttribute("aria-hidden","true")}},i._waiAria)i._waiAria[d]=function(c){return function(){return i.config.wai_aria_attributes?c.apply(this,arguments):""}}(i._waiAria[d])}(t),t.locate=function(i){var a=mt(i);if(lt(a,".gantt_task_row"))return null;var r=arguments[1]||this.config.task_attribute,s=tt(a,r);return s?s.getAttribute(r):null},t._locate_css=function(i,a,r){return ht(i,a,r)},t._locateHTML=function(i,a){return tt(i,a||this.config.task_attribute)}}t.attachEvent("onParse",function(){F(t)||t.attachEvent("onGanttRender",function(){if(t.config.initial_scroll){var i=t.getTaskByIndex(0),a=i?i.id:t.config.root_id;t.isTaskExists(a)&&t.$task&&t.utils.dom.isChildOf(t.$task,t.$container)&&t.showTask(a)}},{once:!0})}),t.attachEvent("onBeforeGanttReady",function(){this.config.scroll_size||(this.config.scroll_size=Ce()||15),F(t)||(this._eventRemoveAll(),this.$mouseEvents.reset(),this.resetLightbox())}),t.attachEvent("onGanttReady",function(){!F(t)&&t.config.rtl&&t.$layout.getCellsByType("viewCell").forEach(function(i){var a=i.$config.scrollX;if(a){var r=t.$ui.getView(a);r&&r.scrollTo(r.$config.scrollSize,0)}})}),t.attachEvent("onGanttReady",function(){if(!F(t)){var i=t.plugins(),a={auto_scheduling:t.autoSchedule,click_drag:t.ext.clickDrag,critical_path:t.isCriticalTask,drag_timeline:t.ext.dragTimeline,export_api:t.exportToPDF,fullscreen:t.ext.fullscreen,grouping:t.groupBy,keyboard_navigation:t.ext.keyboardNavigation,marker:t.addMarker,multiselect:t.eachSelectedTask,overlay:t.ext.overlay,quick_info:t.templates.quick_info_content,tooltip:t.ext.tooltips,undo:t.undo};for(let r in a)a[r]&&!i[r]&&console.warn(`You connected the '${r}' extension via an obsolete file. +
`,t._lightbox_root=t.$root,t.$services.getService("state").registerProvider("lightbox",function(){return{lightbox:t._lightbox_id}}),t.showLightbox=function(_){var m=this.getTask(_);if(this.callEvent("onBeforeLightbox",[_])){var p=this.getLightbox(this.getTaskType(m.type));this.showCover(p),this._fill_lightbox(_,p),this._setLbPosition(p),this._waiAria.lightboxVisibleAttr(p),this.callEvent("onLightbox",[_])}else t.isTaskExists(_)&&t.getTask(_).$new&&this.$data.tasksStore._updateOrder()},t._get_timepicker_step=function(){if(this.config.round_dnd_dates){var _;if(function(p){var k=p.$ui.getView("timeline");return!(!k||!k.isVisible())}(this)){var m=t.getScale();_=Bt(m.unit)*m.step/60}return(!_||_>=1440)&&(_=this.config.time_step),_}return this.config.time_step},t.getLabel=function(_,m){for(var p=this._get_typed_lightbox_config(),k=0;k",k+=y(this.config.buttons_left),k+="
",k+=y(this.config.buttons_right),k+="",m.innerHTML=k,t._waiAria.lightboxAttr(m),t.config.drag_lightbox&&(m.firstChild.onmousedown=t._ready_to_dnd,m.firstChild.ontouchstart=function(T){t._ready_to_dnd(T.touches[0])},m.firstChild.onselectstart=function(){return!1},m.firstChild.style.cursor="pointer",t._init_dnd_events()),this._lightbox&&this.resetLightbox(),g(),this._cover.insertBefore(m,this._cover.firstChild),this._lightbox=m,$=this._get_typed_lightbox_config(_),k=this._render_sections($);var S=(w=m.querySelector("div.gantt_cal_larea")).style.overflow;w.style.overflow="hidden",w.innerHTML=k,function(T){var C,E,D,A,I,M;for(M=0;M
"+this.locale.labels["button_"+_[p].button]+"
"),_[p].type=="baselines"&&(w="
"+this.locale.labels.baselines_remove_all_button+"
"+this.locale.labels.baselines_add_button+"
"),this.config.wide_form&&(m+="
"),m+="
"+k.render.call(this,_[p]),m+="
"}}return m},t._center_lightbox=function(_){t._setLbPosition(_)},t._setLbPosition=function(_){if(!_)return;const m=t._lightbox_root||t.$root;_.style.top=Math.max(m.offsetHeight/2-_.offsetHeight/2,0)+"px",_.style.left=Math.max(m.offsetWidth/2-_.offsetWidth/2,0)+"px"},t.showCover=function(_){_&&(_.style.display="block",this._setLbPosition(_)),g(),this._cover.style.display=""};const g=function(){t._cover||(t._cover=document.createElement("div"),t._cover.className="gantt_cal_cover",t._cover.style.display="none",t.event(t._cover,"mousemove",t._move_while_dnd),t.event(t._cover,"mouseup",t._finish_dnd),(t._lightbox_root||t.$root).appendChild(t._cover))};function f(_){for(var m in this.config.types)if(this.config.types[m]==_)return m;return"task"}function y(_,m){var p,k,$="";for(k=0;k<_.length;k++)p=t.config._migrate_buttons[_[k]]?t.config._migrate_buttons[_[k]]:_[k],$+="
"+t.locale.labels[p]+"
";return $}function v(_){var m,p;return _.time_format?_.time_format:(p=["%d","%m","%Y"],Bt((m=t.getScale())?m.unit:t.config.duration_unit)"+S+"";break;case"%m":for(_._time_format_order[1]=m,_._time_format_order.size++,S=0;S<12;S++)C+="";break;case"%d":for(_._time_format_order[0]=m,_._time_format_order.size++,S=1;S<32;S++)C+="";break;case"%H:%i":for(_._time_format_order[3]=m,_._time_format_order.size++,S=p.first,T=p.date.getDate(),_._time_values=[];S"+t.templates.time_picker(p.date)+"",_._time_values.push(S),p.date.setTime(p.date.valueOf()+60*t._get_timepicker_step()*1e3),S=24*(p.date.getDate()!=T?1:0)*60+60*p.date.getHours()+p.date.getMinutes()}return C}t._init_lightbox_events=function(){t.lightbox_events={},t.lightbox_events.gantt_save_btn=function(){t._save_lightbox()},t.lightbox_events.gantt_delete_btn=function(){t._lightbox_current_type=null,t.callEvent("onLightboxDelete",[t._lightbox_id])&&(t.isTaskExists(t._lightbox_id)?t.$click.buttons.delete(t._lightbox_id):t.hideLightbox())},t.lightbox_events.gantt_cancel_btn=function(){t._cancel_lightbox()},t.lightbox_events.default=function(_,m){if(m.getAttribute("data-dhx-button"))t.callEvent("onLightboxButton",[m.className,m,_]);else{var p,k,$=K(m);if($.indexOf("gantt_custom_button")!=-1)if($.indexOf("gantt_custom_button_")!=-1)for(p=m.parentNode.getAttribute("data-index"),k=m;k&&K(k).indexOf("gantt_cal_lsection")==-1;)k=k.parentNode;else p=m.getAttribute("data-index"),k=m.parentNode,m=m.firstChild;var w=t._get_typed_lightbox_config();p&&(p*=1,t.form_blocks[w[1*p].type].button_click(p,m,k,k.nextSibling))}},this.event(t.getLightbox(),"click",function(_){_.target.closest(".gantt_cal_ltitle_close_btn")&&t._cancel_lightbox();var m=mt(_),p=K(m);return p||(p=K(m=m.previousSibling)),m&&p&&p.indexOf("gantt_btn_set")===0&&(p=K(m=m.firstChild)),!(!m||!p)&&(t.defined(t.lightbox_events[m.className])?t.lightbox_events[m.className]:t.lightbox_events.default)(_,m)}),t.getLightbox().onkeydown=function(_){var m=_||window.event,p=_.target||_.srcElement,k=K(p).indexOf("gantt_btn_set")>-1;switch((_||m).keyCode){case t.constants.KEY_CODES.SPACE:if((_||m).shiftKey)return;k&&p.click&&p.click();break;case t.keys.edit_save:if((_||m).shiftKey)return;k&&p.click?p.click():t._save_lightbox();break;case t.keys.edit_cancel:t._cancel_lightbox()}}},t._cancel_lightbox=function(){var _=this.getLightboxValues();t._lightbox_current_type=null,this.callEvent("onLightboxCancel",[this._lightbox_id,_.$new]),t.isTaskExists(_.id)&&_.$new&&(this.silent(function(){t.$data.tasksStore.removeItem(_.id),t._update_flags(_.id,null)}),this.refreshData()),this.hideLightbox()},t._save_lightbox=function(){var _=this.getLightboxValues();t._lightbox_current_type=null,this.callEvent("onLightboxSave",[this._lightbox_id,_,!!_.$new])&&(t.$data.tasksStore._skipTaskRecalculation="lightbox",_.$new?(delete _.$new,this.addTask(_,_.parent,this.getTaskIndex(_.id))):this.isTaskExists(_.id)&&(this.mixin(this.getTask(_.id),_,!0),this.refreshTask(_.id),this.updateTask(_.id)),t.$data.tasksStore._skipTaskRecalculation=!1,this.refreshData(),this.hideLightbox())},t._resolve_default_mapping=function(_){var m=_.map_to;return{time:!0,time_optional:!0,duration:!0,duration_optional:!0}[_.type]?_.map_to=="auto"?m={start_date:"start_date",end_date:"end_date",duration:"duration"}:typeof _.map_to=="string"&&(m={start_date:_.map_to}):_.type==="constraint"&&(_.map_to&&typeof _.map_to!="string"||(m={constraint_type:"constraint_type",constraint_date:"constraint_date"})),m},t.getLightboxValues=function(){var _={};t.isTaskExists(this._lightbox_id)&&(_=this.mixin({},this.getTask(this._lightbox_id)));for(var m=this._get_typed_lightbox_config(),p=0;p0&&(w+=" "),(k=b(_,p,S))&&($=t._waiAria.lightboxSelectAttrString(S.timeFormat[p]),w+="");return w},getTimePickerValue:function(_,m,p){var k,$=m._time_format_order,w=0,x=0,S=p||0;return t.defined($[3])&&(k=parseInt(_[$[3]+S].value,10),w=Math.floor(k/60),x=k%60),new Date(_[$[2]+S].value,_[$[1]+S].value,_[$[0]+S].value,w,x)},_fill_lightbox_select:function(_,m,p,k){if(_[m+k[0]].value=p.getDate(),_[m+k[1]].value=p.getMonth(),_[m+k[2]].value=p.getFullYear(),t.defined(k[3])){var $=60*p.getHours()+p.getMinutes();$=Math.round($/t._get_timepicker_step())*t._get_timepicker_step();var w=_[m+k[3]];w.value=$,w.setAttribute("data-value",$)}},template:new e,textarea:new n,select:new a,time:new i,duration:new o,parent:new l,radio:new s,checkbox:new r,resources:new d,constraint:new c,baselines:new h,typeselect:new u},t._is_lightbox_timepicker=function(){for(var _=this._get_typed_lightbox_config(),m=0;m<_.length;m++)if(_[m].name=="time"&&_[m].type=="time")return!0;return!1},t._simple_confirm=function(_,m,p,k){if(!_)return p();var $={text:_};m&&($.title=m),k&&($.ok=k),p&&($.callback=function(w){w&&p()}),t.confirm($)},t._get_typed_lightbox_config=function(_){_===void 0&&(_=this.getLightboxType());var m=f.call(this,_);return t.config.lightbox[m+"_sections"]?t.config.lightbox[m+"_sections"]:t.config.lightbox.sections},t._silent_redraw_lightbox=function(_){var m=this.getLightboxType();if(this.getState().lightbox){var p=this.getState().lightbox,k=this.getLightboxValues(),$=this.copy(this.getTask(p));this.resetLightbox();var w=this.mixin($,k,!0),x=this.getLightbox(_||void 0);this._set_lightbox_values(w,x),this.showCover(x)}else this.resetLightbox(),this.getLightbox(_||void 0);this.callEvent("onLightboxChange",[m,this.getLightboxType()])}}function Za(t){if(!_t.isNode){t.utils={arrayFind:Mn,dom:Ne};var e=re();t.event=e.attach,t.eventRemove=e.detach,t._eventRemoveAll=e.detachAll,t._createDomEventScope=e.extend,N(t,sa(t));var n=ja.init(t);t.$ui=n.factory,t.$ui.layers=n.render,t.$mouseEvents=n.mouseEvents,t.$services.setService("mouseEvents",function(){return t.$mouseEvents}),t.mixin(t,n.layersApi),function(i){delete i.addTaskLayer,delete i.addLinkLayer}(t),t.$services.setService("layers",function(){return n.layersService}),t.mixin(t,function(){function i(u){return u.$ui.getView("timeline")}function a(u){return u.$ui.getView("grid")}function r(u){var h=i(u);if(h&&!h.$config.hidden)return h;var g=a(u);return g&&!g.$config.hidden?g:null}function s(u){var h=null,g=!1;return[".gantt_drag_marker.gantt_grid_resize_area",".gantt_drag_marker .gantt_row.gantt_row_task",".gantt_drag_marker.gantt_grid_dnd_marker"].forEach(function(f){g=g||!!document.querySelector(f)}),(h=g?a(u):r(u))?l(u,h,"scrollY"):null}function o(u){var h=r(u);return h&&h.id!="grid"?l(u,h,"scrollX"):null}function l(u,h,g){var f=h.$config[g];return u.$ui.getView(f)}var d="DEFAULT_VALUE";function c(u,h,g,f){var y=u(this);return y&&y.isVisible()?y[h].apply(y,g):f?f():d}return{getColumnIndex:function(u){var h=c.call(this,a,"getColumnIndex",[u]);return h===d?0:h},dateFromPos:function(u){var h=c.call(this,i,"dateFromPos",Array.prototype.slice.call(arguments));return h===d?this.getState().min_date:h},posFromDate:function(u){var h=c.call(this,i,"posFromDate",[u]);return h===d?0:h},getRowTop:function(u){var h=this,g=c.call(h,i,"getRowTop",[u],function(){return c.call(h,a,"getRowTop",[u])});return g===d?0:g},getTaskTop:function(u){var h=this,g=c.call(h,i,"getItemTop",[u],function(){return c.call(h,a,"getItemTop",[u])});return g===d?0:g},getTaskPosition:function(u,h,g){var f=c.call(this,i,"getItemPosition",[u,h,g]);return f===d?{left:0,top:this.getTaskTop(u.id),height:this.getTaskBarHeight(u.id),width:0}:f},getTaskBarHeight:function(u,h){var g=this,f=c.call(g,i,"getBarHeight",[u,h],function(){return c.call(g,a,"getItemHeight",[u])});return f===d?0:f},getTaskHeight:function(u){var h=this,g=c.call(h,i,"getItemHeight",[u],function(){return c.call(h,a,"getItemHeight",[u])});return g===d?0:g},columnIndexByDate:function(u){var h=c.call(this,i,"columnIndexByDate",[u]);return h===d?0:h},roundTaskDates:function(){c.call(this,i,"roundTaskDates",[])},getScale:function(){var u=c.call(this,i,"getScale",[]);return u===d?null:u},getTaskNode:function(u){var h=i(this);if(h&&h.isVisible()){var g=h._taskRenderer.rendered[u];if(!g){var f=h.$config.item_attribute;g=h.$task_bars.querySelector("["+f+"='"+u+"']")}return g||null}return null},getLinkNode:function(u){var h=i(this);return h.isVisible()?h._linkRenderer.rendered[u]:null},scrollTo:function(u,h){var g=s(this),f=o(this),y={position:0},v={position:0};g&&(v=g.getScrollState()),f&&(y=f.getScrollState());var b=f&&1*u==u,_=g&&1*h==h;if(b&&_)for(var m=g._getLinkedViews(),p=f._getLinkedViews(),k=[],$=0;${const o=getComputedStyle(s).getPropertyValue("--dhx-gantt-theme");o&&o!==i.skin&&i.setSkin(o)},100))}i.attachEvent("onDestroy",function(){clearInterval(a)})}(t),function(i){i.skins.skyblue={config:{grid_width:370,row_height:27,bar_height_padding:4,scale_height:27,link_line_width:1,link_arrow_size:8,link_radius:2,lightbox_additional_height:75},_second_column_width:95,_third_column_width:80}}(t),function(i){i.skins.dark={config:{grid_width:390,row_height:36,scale_height:36,link_line_width:2,link_arrow_size:12,bar_height_padding:9,lightbox_additional_height:75},_second_column_width:100,_third_column_width:70}}(t),function(i){i.skins.meadow={config:{grid_width:380,row_height:27,scale_height:30,link_line_width:2,link_arrow_size:10,bar_height_padding:4,lightbox_additional_height:72},_second_column_width:95,_third_column_width:80}}(t),function(i){i.skins.terrace={config:{grid_width:390,row_height:36,scale_height:36,link_line_width:2,link_arrow_size:12,bar_height_padding:9,lightbox_additional_height:75},_second_column_width:100,_third_column_width:70}}(t),function(i){i.skins.broadway={config:{grid_width:390,row_height:35,scale_height:35,link_line_width:1,link_arrow_size:9,bar_height_padding:4,lightbox_additional_height:86},_second_column_width:100,_third_column_width:80,_lightbox_template:"
 
",_config_buttons_left:{},_config_buttons_right:{gantt_delete_btn:"icon_delete",gantt_save_btn:"icon_save"}}}(t),function(i){i.skins.material={config:{grid_width:411,row_height:34,scale_height:36,link_line_width:2,link_arrow_size:12,bar_height_padding:9,lightbox_additional_height:80},_second_column_width:110,_third_column_width:75,_redefine_lightbox_buttons:{buttons_left:["dhx_delete_btn"],buttons_right:["dhx_cancel_btn","dhx_save_btn"]}},i.attachEvent("onAfterTaskDrag",function(a){var r=i.getTaskNode(a);r&&(r.className+=" gantt_drag_animation",setTimeout(function(){var s=r.className.indexOf(" gantt_drag_animation");s>-1&&(r.className=r.className.slice(0,s))},200))})}(t),function(i){i.skins.contrast_black={config:{grid_width:390,row_height:35,scale_height:35,link_line_width:2,link_arrow_size:12,lightbox_additional_height:75},_second_column_width:100,_third_column_width:80}}(t),function(i){i.skins.contrast_white={config:{grid_width:390,row_height:35,scale_height:35,link_line_width:2,link_arrow_size:12,lightbox_additional_height:75},_second_column_width:100,_third_column_width:80}}(t),function(i){i.ext||(i.ext={});for(var a=[Fa,Va,Ua],r=0;r`,"gm"),r=new RegExp(" +","gm");function s(c){return(c+"").replace(a," ").replace(r," ")}var o=new RegExp("'","gm");function l(c){return(c+"").replace(o,"'")}for(var d in i._waiAria={getAttributeString:function(c){var u=[" "];for(var h in c){var g=l(s(c[h]));u.push(h+"='"+g+"'")}return u.push(" "),u.join(" ")},getTimelineCellAttr:function(c){return i._waiAria.getAttributeString({"aria-label":c})},_taskCommonAttr:function(c,u){c.start_date&&c.end_date&&(u.setAttribute("aria-label",s(i.templates.tooltip_text(c.start_date,c.end_date,c))),c.$dataprocessor_class&&u.setAttribute("aria-busy",!0))},setTaskBarAttr:function(c,u){this._taskCommonAttr(c,u),u.setAttribute("role","img"),!i.isReadonly(c)&&i.config.drag_move&&(c.id!=i.getState("tasksDnd").drag_id?u.setAttribute("aria-grabbed",!1):u.setAttribute("aria-grabbed",!0))},taskRowAttr:function(c,u){this._taskCommonAttr(c,u),!i.isReadonly(c)&&i.config.order_branch&&u.setAttribute("aria-grabbed",!1),u.setAttribute("role","row"),u.setAttribute("aria-selected",i.isSelectedTask(c.id)?"true":"false"),u.setAttribute("aria-level",c.$level+1||1),i.hasChild(c.id)&&u.setAttribute("aria-expanded",c.$open?"true":"false")},linkAttr:function(c,u){var h=i.config.links,g=c.type==h.finish_to_start||c.type==h.start_to_start,f=c.type==h.start_to_start||c.type==h.start_to_finish,y=i.locale.labels.link+" "+i.templates.drag_link(c.source,f,c.target,g);u.setAttribute("role","img"),u.setAttribute("aria-label",s(y)),i.isReadonly(c)&&u.setAttribute("aria-readonly",!0)},gridSeparatorAttr:function(c){c.setAttribute("role","columnheader")},rowResizerAttr:function(c){c.setAttribute("role","row")},lightboxHiddenAttr:function(c){c.setAttribute("aria-hidden","true")},lightboxVisibleAttr:function(c){c.setAttribute("aria-hidden","false")},lightboxAttr:function(c){c.setAttribute("role","dialog"),c.setAttribute("aria-hidden","true"),c.firstChild.setAttribute("role","heading"),c.firstChild.setAttribute("aria-level","1")},lightboxButtonAttrString:function(c){return this.getAttributeString({role:"button","aria-label":i.locale.labels[c],tabindex:"0"})},lightboxHeader:function(c,u){c.setAttribute("aria-label",u)},lightboxSelectAttrString:function(c){var u="";switch(c){case"%Y":u=i.locale.labels.years;break;case"%m":u=i.locale.labels.months;break;case"%d":u=i.locale.labels.days;break;case"%H:%i":u=i.locale.labels.hours+i.locale.labels.minutes}return i._waiAria.getAttributeString({"aria-label":u})},lightboxDurationInputAttrString:function(c){return this.getAttributeString({"aria-label":i.locale.labels.column_duration,"aria-valuemin":"0",role:"spinbutton"})},inlineEditorAttr:function(c){c.setAttribute("role","row")},gridAttrString:function(){return[" role='treegrid'",i.config.multiselect?"aria-multiselectable='true'":"aria-multiselectable='false'"," "].join(" ")},gridScaleRowAttrString:function(){return"role='row'"},gridScaleCellAttrString:function(c,u){var h="";if(c.name=="add")h=this.getAttributeString({role:"columnheader","aria-label":i.locale.labels.new_task});else{var g={role:"columnheader","aria-label":u};i._sort&&i._sort.name==c.name&&(i._sort.direction=="asc"?g["aria-sort"]="ascending":g["aria-sort"]="descending"),h=this.getAttributeString(g)}return h},gridDataAttrString:function(){return"role='rowgroup'"},reorderMarkerAttr:function(c){c.setAttribute("role","grid"),c.firstChild.removeAttribute("aria-level"),c.firstChild.setAttribute("aria-grabbed","true")},gridCellAttrString:function(c,u,h){var g={role:"gridcell","aria-label":u};return c.editor&&!i.isReadonly(h)||(g["aria-readonly"]=!0),this.getAttributeString(g)},gridAddButtonAttrString:function(c){return this.getAttributeString({role:"button","aria-label":i.locale.labels.new_task})},messageButtonAttrString:function(c){return"tabindex='0' role='button' aria-label='"+c+"'"},messageInfoAttr:function(c){c.setAttribute("role","alert")},messageModalAttr:function(c,u){c.setAttribute("role","dialog"),u&&c.setAttribute("aria-labelledby",u)},quickInfoAttr:function(c){c.setAttribute("role","dialog")},quickInfoHeaderAttrString:function(){return" role='heading' aria-level='1' "},quickInfoHeader:function(c,u){c.setAttribute("aria-label",u)},quickInfoButtonAttrString:function(c){return i._waiAria.getAttributeString({role:"button","aria-label":c,tabindex:"0"})},tooltipAttr:function(c){c.setAttribute("role","tooltip")},tooltipVisibleAttr:function(c){c.setAttribute("aria-hidden","false")},tooltipHiddenAttr:function(c){c.setAttribute("aria-hidden","true")}},i._waiAria)i._waiAria[d]=function(c){return function(){return i.config.wai_aria_attributes?c.apply(this,arguments):""}}(i._waiAria[d])}(t),t.locate=function(i){var a=mt(i);if(lt(a,".gantt_task_row"))return null;var r=arguments[1]||this.config.task_attribute,s=tt(a,r);return s?s.getAttribute(r):null},t._locate_css=function(i,a,r){return ht(i,a,r)},t._locateHTML=function(i,a){return tt(i,a||this.config.task_attribute)}}t.attachEvent("onParse",function(){F(t)||t.attachEvent("onGanttRender",function(){if(t.config.initial_scroll){var i=t.getTaskByIndex(0),a=i?i.id:t.config.root_id;t.isTaskExists(a)&&t.$task&&t.utils.dom.isChildOf(t.$task,t.$container)&&t.showTask(a)}},{once:!0})}),t.attachEvent("onBeforeGanttReady",function(){this.config.scroll_size||(this.config.scroll_size=Te()||15),F(t)||(this._eventRemoveAll(),this.$mouseEvents.reset(),this.resetLightbox())}),t.attachEvent("onGanttReady",function(){!F(t)&&t.config.rtl&&t.$layout.getCellsByType("viewCell").forEach(function(i){var a=i.$config.scrollX;if(a){var r=t.$ui.getView(a);r&&r.scrollTo(r.$config.scrollSize,0)}})}),t.attachEvent("onGanttReady",function(){if(!F(t)){var i=t.plugins(),a={auto_scheduling:t.autoSchedule,click_drag:t.ext.clickDrag,critical_path:t.isCriticalTask,drag_timeline:t.ext.dragTimeline,export_api:t.exportToPDF,fullscreen:t.ext.fullscreen,grouping:t.groupBy,keyboard_navigation:t.ext.keyboardNavigation,marker:t.addMarker,multiselect:t.eachSelectedTask,overlay:t.ext.overlay,quick_info:t.templates.quick_info_content,tooltip:t.ext.tooltips,undo:t.undo};for(let r in a)a[r]&&!i[r]&&console.warn(`You connected the '${r}' extension via an obsolete file. To 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`)}})}const wn=dt.gantt=function(t){var e=ra(t);return e.env.isNode||(Za(e),function(n){n.load=function(i,a,r){this._load_url=i,this.assert(arguments.length,"Invalid load arguments");var s="json",o=null;return arguments.length>=3?(s=a,o=r):typeof arguments[1]=="string"?s=arguments[1]:typeof arguments[1]=="function"&&(o=arguments[1]),this._load_type=s,this.callEvent("onLoadStart",[i,s]),this.ajax.get(i,n.bind(function(l){this.on_load(l,s),this.callEvent("onLoadEnd",[i,s]),typeof o=="function"&&o.call(this)},this))}}(e)),e}(jn);yt.default=wn,yt.gantt=wn,Object.defineProperties(yt,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); //# sourceMappingURL=dhtmlxgantt.js.map diff --git a/codebase/dhtmlxgantt.js.map b/codebase/dhtmlxgantt.js.map index ec10951..0f67a54 100644 --- a/codebase/dhtmlxgantt.js.map +++ b/codebase/dhtmlxgantt.js.map @@ -1 +1 @@ -{"version":3,"file":"dhtmlxgantt.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\t\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 \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\t
Start date: ${gantt.templates.tooltip_date_format(start)}
\r\n\t\t\t\t
End 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 \"
\" + text + \"
\";\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 += '
' + config.title + '
';\r\n\t\tinner += '
' + (config.content ? '' : config.text) + '
';\r\n\t\tif (ok)\r\n\t\t\tinner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\r\n\t\tif (cancel)\r\n\t\t\tinner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\r\n\r\n\t\tif (config.buttons) {\r\n\t\t\tfor (var i = 0; i < config.buttons.length; i++) {\r\n\t\t\t\tvar btn = config.buttons[i];\r\n\t\t\t\tif (typeof btn == \"object\") {\r\n\t\t\t\t\t// Support { label:\"Save\", css:\"main_button\", value:\"save\" }\r\n\t\t\t\t\tvar label = btn.label;\r\n\t\t\t\t\tvar css = btn.css || (\"gantt_\" + btn.label.toLowerCase() + \"_button\");\r\n\t\t\t\t\tvar value = btn.value || i;\r\n\t\t\t\t\tinner += button(label, css, value);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tinner += button(btn, btn, i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\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 = \"
\" + collapseIcon + \"
\" + obj.header + \"
\";\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\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 || \"\") + \"\";\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
\r\n\t\r\n\r\n
`;\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 = \"
\" + this.locale.labels[\"button_\" + sns[i].button] + \"
\";\r\n\t\t\t}\r\n\t\t\tif (sns[i].type == \"baselines\") {\r\n\t\t\t\tbutton = \"
\" + this.locale.labels.baselines_remove_all_button + \"
\" +\r\n\t\t\t\t\"
\" + this.locale.labels.baselines_add_button + \"
\";\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 += \"
\" + 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 += \"\";\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 += \"
\" + gantt.locale.labels[button] + \"
\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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\"
\" +\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\"
\"+label+\"
\" +\r\n\t\t\t\"
\" +\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 += \"\";\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\"
\" +\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\"
\"+durationLabel+\"
\" +\r\n\t\t\t\"
\" +\r\n\t\t\t\"\";\r\n\r\n\t\tconst deleteButton = `
${deleteLabel}
`;\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","detach","detachAll","unregisterProvider","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","undefined","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","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","destructor","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","startIgnore","stopIgnore","startBatchAction","_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","clearInitialTasks","getLink","deleteCacheCooldown","saveInitialAll","eachTask","clearInitialLinks","getLinks","getMoveObjectByTaskId","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","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","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","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","getUndoStack","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","_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","_getRaw","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","_Ut","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","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","_ne","LinkFormatterSimple","_linkReg","linkPart","exec","_findSource","lag","pred","reqTemplate","_ae","formatters","durationFormatter","DurationFormatter","linkFormatter","LinkFormatter","empty_state_screen","show_empty_state","emptyStateElement","isGanttEmpty","placeholderContainer","empty_state_text_link","empty_state_text_description","clickEvents","detachAddTaskEvents","domHelpers","getContainer","wrapper","marginTop","oldNodes","attachAddTaskEvent","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","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","TemplateControlConstructor","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","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.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\t\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 \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\t
Start date: ${gantt.templates.tooltip_date_format(start)}
\r\n\t\t\t\t
End 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 \"
\" + text + \"
\";\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 += '
' + config.title + '
';\r\n\t\tinner += '
' + (config.content ? '' : config.text) + '
';\r\n\t\tif (ok)\r\n\t\t\tinner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\r\n\t\tif (cancel)\r\n\t\t\tinner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\r\n\r\n\t\tif (config.buttons) {\r\n\t\t\tfor (var i = 0; i < config.buttons.length; i++) {\r\n\t\t\t\tvar btn = config.buttons[i];\r\n\t\t\t\tif (typeof btn == \"object\") {\r\n\t\t\t\t\t// Support { label:\"Save\", css:\"main_button\", value:\"save\" }\r\n\t\t\t\t\tvar label = btn.label;\r\n\t\t\t\t\tvar css = btn.css || (\"gantt_\" + btn.label.toLowerCase() + \"_button\");\r\n\t\t\t\t\tvar value = btn.value || i;\r\n\t\t\t\t\tinner += button(label, css, value);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tinner += button(btn, btn, i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\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 = \"
\" + collapseIcon + \"
\" + obj.header + \"
\";\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\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 || \"\") + \"\";\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
\r\n\t\r\n\r\n
`;\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 = \"
\" + this.locale.labels[\"button_\" + sns[i].button] + \"
\";\r\n\t\t\t}\r\n\t\t\tif (sns[i].type == \"baselines\") {\r\n\t\t\t\tbutton = \"
\" + this.locale.labels.baselines_remove_all_button + \"
\" +\r\n\t\t\t\t\"
\" + this.locale.labels.baselines_add_button + \"
\";\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 += \"
\" + 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 += \"\";\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 += \"
\" + gantt.locale.labels[button] + \"
\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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 += \"\";\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\"
\" +\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\"
\"+label+\"
\" +\r\n\t\t\t\"
\" +\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 += \"\";\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\"
\" +\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\"
\"+durationLabel+\"
\" +\r\n\t\t\t\"
\" +\r\n\t\t\t\"\";\r\n\r\n\t\tconst deleteButton = `
${deleteLabel}
`;\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","detach","detachAll","unregisterProvider","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","undefined","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","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","destructor","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","startIgnore","stopIgnore","startBatchAction","_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","clearInitialTasks","getLink","deleteCacheCooldown","saveInitialAll","eachTask","clearInitialLinks","getLinks","getMoveObjectByTaskId","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","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","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","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","getUndoStack","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","_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","_getRaw","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","_Ut","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","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","_ne","LinkFormatterSimple","_linkReg","linkPart","exec","_findSource","lag","pred","reqTemplate","_ae","formatters","durationFormatter","DurationFormatter","linkFormatter","LinkFormatter","empty_state_screen","show_empty_state","emptyStateElement","isGanttEmpty","placeholderContainer","empty_state_text_link","empty_state_text_description","clickEvents","detachAddTaskEvents","domHelpers","getContainer","wrapper","marginTop","oldNodes","attachAddTaskEvent","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","getDirectionLine","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","TemplateControlConstructor","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","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/sources/dhtmlxgantt.css b/codebase/sources/dhtmlxgantt.css index 43f6740..3f9e2b1 100644 --- a/codebase/sources/dhtmlxgantt.css +++ b/codebase/sources/dhtmlxgantt.css @@ -187,7 +187,7 @@ --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-lightbox-width: 560px; --dhx-gantt-btn-order: row-reverse; /* buttons */ --dhx-gantt-btn-background: var(--dhx-gantt-base-colors-primary); @@ -342,12 +342,14 @@ --dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, 0.36); --dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, 0.56); --dhx-gantt-grid-scale-background: #4f4f4f; - --dhx-gantt-grid-scale-border-vertical: 1px solid #5b5b5b; + --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 #bababa; + --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; @@ -1171,6 +1173,7 @@ url("src/dhx-gantt-icons.woff2?d2ea3e087edb3b9fad35a6580bd8acd3") format("woff2" overflow: hidden; } .gantt_scale_cell { + position: relative; display: inline-block; white-space: nowrap; overflow: hidden; @@ -1897,7 +1900,8 @@ div.dhx_modal_cover { .gantt_cal_light { margin-top: auto; margin-bottom: auto; - width: var(--dhx-gantt-lightbox-width); + 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; @@ -1996,6 +2000,7 @@ div.dhx_modal_cover { .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); } @@ -2152,8 +2157,15 @@ div.dhx_modal_cover { .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 { diff --git a/codebase/sources/dhtmlxgantt.es.js b/codebase/sources/dhtmlxgantt.es.js index 0b49285..a25a86e 100644 --- a/codebase/sources/dhtmlxgantt.es.js +++ b/codebase/sources/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. @@ -5628,6 +5628,9 @@ function DnD(gantt2) { if (!input.accessor(e)) { return; } + if (typeof e.button !== "undefined" && e.button !== 0) { + return; + } if (config2.preventDefault && config2.selector && closest(e.target, config2.selector)) { e.preventDefault(); } @@ -5635,7 +5638,7 @@ function DnD(gantt2) { return; } this._settings.original_target = copyDomEvent(e); - this._settings.original_element_sizes = { ...getRelativeNodePosition(e.target, getClosestSizedElement(obj)), width: e.target.offsetWidth, height: e.target.offsetHeight }; + this._settings.original_element_sizes = { ...getRelativeEventPosition(e, getClosestSizedElement(obj)), width: e.target.offsetWidth, height: e.target.offsetHeight }; if (gantt2.config.touch) { this.clearDragTimer(); this._drag_start_timer = setTimeout(bind(function() { @@ -14264,7 +14267,7 @@ function i18nFactory() { } function DHXGantt() { this.constants = constants; - this.version = "9.0.0"; + this.version = "9.0.1"; this.license = "gpl"; this.templates = {}; this.ext = {}; @@ -17461,10 +17464,12 @@ Timeline.prototype = { init: function(container) { for (var i = startIndex; i < endIndex; i++) { if (!config2.trace_x[i]) break; date2 = new Date(config2.trace_x[i]); - var value = content.call(this, date2), width = config2.width[i], height = config2.height, left = config2.left[i], style = "", template = "", cssclass = ""; + var value = content.call(this, date2), width = config2.width[i]; + config2.height; + var left = config2.left[i], style = "", template = "", cssclass = ""; if (width) { var position = globalConfig.smart_scales ? "position:absolute;left:" + left + "px" : ""; - style = "width:" + width + "px;height:" + height + "px;" + position; + style = "width:" + width + "px;" + position; const viewPort = this.getViewPort(); const floatConfig = (globalConfig.scales[index] || {}).sticky; let labelPosition = ""; @@ -18960,7 +18965,7 @@ function predecessorEditorFactory(gantt2) { } function getSelectedLinks(taskId, predecessorCodes, config2) { var links = []; - predecessorCodes.forEach(function(code) { + [...new Set(predecessorCodes)].forEach(function(code) { var link = getFormatter(config2).parse(code); if (link) { link.target = taskId; @@ -19490,9 +19495,6 @@ function createTaskRenderer$2(gantt2) { _render_task_progress(task, div, width, cfg, templates2); } var content = _render_task_content(task, width, templates2); - if (task.textColor) { - content.style.color = task.textColor; - } div.appendChild(content); var css = _combine_item_class("gantt_task_line", templates2.task_class(task.start_date, task.end_date, task), task.id, view); if (task.color || task.progressColor || task.textColor) { @@ -22062,7 +22064,7 @@ var initLinksDND = function(timeline, gantt2) { var node = locateClassName(e, link_landing_hover_area); const point = node.querySelector(`.${link_edge_marker}`); if (point) { - const absCoords = getRelativeNodePosition(point, timeline.$task_data); + const absCoords = getRelativeNodePosition(point, timeline.$task_bg); this._dir_end = { x: absCoords.x + point.offsetWidth / 2, y: absCoords.y + point.offsetHeight / 2 }; } } else { diff --git a/codebase/sources/dhtmlxgantt.es.js.map b/codebase/sources/dhtmlxgantt.es.js.map index 22f8765..16675d5 100644 --- a/codebase/sources/dhtmlxgantt.es.js.map +++ b/codebase/sources/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/click_drag/index.ts","../../sources/ext/drag_timeline/eventsManager.ts","../../sources/ext/drag_timeline/index.ts","../../sources/ext/export_api/index.ts","../../sources/ext/fullscreen/index.ts","../../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/modals.js","../../sources/ext/keyboard_navigation/core.js","../../sources/ext/keyboard_navigation.js","../../sources/ext/marker.js","../../sources/ext/multiselect.js","../../sources/ext/quick_info/quickInfo.ts","../../sources/ext/quick_info/index.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/tooltip/index.ts","../../sources/ext/undo/monitor.ts","../../sources/ext/undo/undo.ts","../../sources/ext/undo/index.ts","../../sources/ext/extensions_gpl.ts","../../sources/constants/index.js","../../sources/ext/extension_manager.ts","../../sources/core/common/services.js","../../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/dnd.js","../../sources/core/common/templates.js","../../sources/core/common/state.js","../../sources/utils/promise.js","../../sources/core/facades/datastore_tasks.js","../../sources/core/facades/datastore_links.js","../../sources/core/datastore/power_array.js","../../sources/utils/placeholder_task.js","../../sources/core/datastore/datastore.js","../../sources/core/datastore/treedatastore.js","../../sources/core/datastore/select.js","../../sources/utils/is_headless.js","../../sources/core/datastore/datastore_render.js","../../sources/core/facades/datastore.js","../../sources/core/ui/timeline/scales.js","../../sources/core/gantt_data_range.js","../../sources/utils/task_tree_helpers.js","../../sources/core/datastore/datastore_hooks.js","../../sources/core/dataprocessor/data_processor_events.ts","../../sources/core/dataprocessor/extend_gantt.ts","../../sources/core/dataprocessor/simple_storage.ts","../../sources/core/dataprocessor/data_processor.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/plugins/index.js","../../sources/core/grid_column_api.gpl.js","../../sources/core/tasks.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/index.ts","../../sources/core/worktime/strategy/work_unit_cache/date_duration_cache.ts","../../sources/core/worktime/strategy/calendar_strategy.js","../../sources/core/worktime/legacy_resource_config.js","../../sources/core/worktime/dynamic_resource_calendars.js","../../sources/core/worktime/calendar_manager.js","../../sources/core/worktime/strategy/no_work_time.js","../../sources/core/worktime/time_calculator.js","../../sources/core/facades/worktime_calendars.js","../../sources/core/worktime/work_time.js","../../sources/core/data.js","../../sources/core/data_task_types.gpl.js","../../sources/core/cached_functions.js","../../sources/core/ui/resize_listener.js","../../sources/core/common/assert.js","../../sources/core/gantt_core.js","../../sources/core/destructor.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/locale/index.ts","../../sources/factory/make_instance_common.js","../../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/get_link_rectangle.js","../../sources/core/ui/render/viewport/factory/get_visible_link_range.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/resizer_cell.gpl.js","../../sources/core/ui/layout/scrollbar_cell.js","../../sources/core/ui/row_position_fixed_height.js","../../sources/core/ui/row_position_mixin.js","../../sources/core/ui/timeline/tasks_canvas_render.gpl.js","../../sources/core/ui/timeline/timeline_layers_gpl.js","../../sources/core/ui/timeline/timeline.js","../../sources/core/ui/grid/grid_resize.gpl.js","../../sources/core/ui/grid/task_grid_row_resize.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/editors/keyboard_mappings/default.js","../../sources/core/ui/grid/editors/keyboard_mappings/keyboard_navigation.js","../../sources/core/ui/grid/editors/keyboard_mappings.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/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/task_rollup_render.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/task_bg_render.js","../../sources/core/ui/render/link_render.js","../../sources/core/ui/render/viewport/is_grid_row_in_viewport.js","../../sources/core/ui/render/task_grid_line_render.js","../../sources/core/resource_timetable_builder.js","../../sources/core/ui/render/resource_matrix_render.js","../../sources/core/ui/render/task_grid_row_resize_render.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/multi_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/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/facades/layout.js","../../sources/core/data_task_layers.gpl.js","../../sources/core/ui/skin.js","../../sources/css/skins/skyblue.js","../../sources/css/skins/meadow.js","../../sources/css/skins/terrace.js","../../sources/css/skins/broadway.js","../../sources/css/skins/material.js","../../sources/css/skins/dark.js","../../sources/css/skins/contrast_black.js","../../sources/css/skins/contrast_white.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/plugins/index.js","../../sources/core/ui/touch.js","../../sources/core/ui/lightbox/controls/base_control.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/utils/html_helpers.js","../../sources/core/ui/lightbox/controls/select_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/parent_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/lightbox/index.js","../../sources/core/ui/lightbox/lightbox_optional_time.js","../../sources/core/ui/wai_aria.js","../../sources/core/ui_core.js","../../sources/core/loading/ajax_loading.js","../../sources/factory/make_instance_web.js","../../sources/dhtmlxgantt.gpl.ts"],"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}","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}","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}","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}","/* 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 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}","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\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};","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 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};","\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};","\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\t\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 { 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