{"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\"onAfterParentExpand\",\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(\"onAfterParentExpand\", (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\tconst internalProperty = prop.startsWith(\"$\") || prop.startsWith(\"_\");\r\n\t\t\t\t\t\tconst whitelist = [\"$open\"];\r\n\t\t\t\t\t\tlet copyProperty = !internalProperty;\r\n\t\t\t\t\t\tif (whitelist.indexOf(prop) > -1){\r\n\t\t\t\t\t\t\tcopyProperty = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(copyProperty){\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\tfunction setClickDrag(){\r\n\t\tconst config: ISelectedRegionConfig = { viewPort: gantt.$task_data, ...defaultConfig };\r\n\t\tif (gantt.ext.clickDrag){\r\n\t\t\tgantt.ext.clickDrag.destructor();\r\n\t\t}\r\n\t\tgantt.ext.clickDrag = new EventsManager(gantt);\r\n\t\tconst clickDrag = gantt.config.click_drag;\r\n\t\tconfig.render = clickDrag.render || defaultConfig.render;\r\n\t\tconfig.className = clickDrag.className || defaultConfig.className;\r\n\t\tconfig.callback = clickDrag.callback || defaultConfig.callback;\r\n\t\tconfig.viewPort = clickDrag.viewPort || gantt.$task_data;\r\n\t\tconfig.useRequestAnimationFrame = clickDrag.useRequestAnimationFrame === undefined ?\r\n\t\t\tdefaultConfig.useRequestAnimationFrame : clickDrag.useRequestAnimationFrame;\r\n\r\n\t\tconfig.singleRow = clickDrag.singleRow === undefined ? defaultConfig.singleRow : clickDrag.singleRow;\r\n\t\tconst timeline = gantt.$ui.getView(\"timeline\");\r\n\t\tconst selectedRegion = new SelectedRegion(config, gantt, timeline);\r\n\t\tgantt.ext.clickDrag.attach(selectedRegion, clickDrag.useKey, clickDrag.ignore);\r\n\t}\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", () => {\r\n\t\tif (gantt.config.click_drag){\r\n\t\t\tsetClickDrag();\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\r\n\t\tif (gantt.$container && gantt.config.click_drag){\r\n\t\t\tgantt.attachEvent(\"onGanttRender\", function(){\r\n\t\t\t\tsetClickDrag();\r\n\t\t\t}, {once:true});\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", () => {\r\n\t\tif (gantt.ext.clickDrag){\r\n\t\t\tgantt.ext.clickDrag.destructor();\r\n\t\t}\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\t//GS-2230: in case if `getGanttInstance` created without container\r\n\t\t\t\tif(!gantt.$root) return;\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}=\"${String(this.taskId).replaceAll('\"', '\\\\\"')}\"]`);\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) || gantt.config.show_tasks_outside_timescale)) {\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\tif(gantt.templates.marker_class)\r\n\t\tcss += \" \" + gantt.templates.marker_class(marker);\r\n\r\n\tif(marker.css){\r\n\t\tcss += \" \" + marker.css;\r\n\t}\r\n\r\n\tif(gantt.templates.marker_class)\r\n\t\tcss += \" \" + gantt.templates.marker_class(marker);\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\t\t\t\t// GS-1969: if the selected tasks are collapsed, need to remove them\r\n\t\t\t\tif(first_indx == -1 || last_indx == -1){\r\n\t\t\t\t\tfirst_indx = target_indx;\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\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\tconst multiselect = gantt._multiselect;\r\n\tif (state && multiselect.isActive()) {\r\n\t\t//GS-1321: prevent unselecting task\r\n\t\tlet oldSelectedId = gantt.getSelectedId();\r\n\t\tlet oldSelectedTask = null;\r\n\t\tif (oldSelectedId) {\r\n\t\t\toldSelectedTask = gantt.getTask(oldSelectedId);\r\n\t\t}\r\n\t\tlet newSelectedTask = gantt.getTask(id);\r\n\t\tlet differentTreeLevel = false;\r\n\t\tif (oldSelectedTask && oldSelectedTask.$level != newSelectedTask.$level){\r\n\t\t\tdifferentTreeLevel = true;\r\n\t\t}\r\n\r\n\t\tif (gantt.config.multiselect_one_level && differentTreeLevel && !e.ctrlKey && !e.shiftKey) {\r\n\t\t\treturn true;\r\n\t\t}\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:any = 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:any = [];\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:any = [];\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:any = [];\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:any = [];\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\ttree: cols[i].tree || false\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\r\n\t\t// GS-1583. Save the $open state to the Undo Stack\r\n\t\tif (this.getState().lightbox && this.isTaskExists(parent)) {\r\n\t\t\tvar parentObj = this.getTask(parent);\r\n\t\t\tthis.callEvent(\"onAfterParentExpand\", [parent, parentObj]);\r\n\t\t}\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 && 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 && 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\nimport isHeadless from \"../../utils/is_headless\";\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 // don't add baseline if it doesn't belong to any task\r\n // or if doesn't have the dates\r\n if (!item.task_id || (!item.start_date && !item.end_date)) {\r\n return false;\r\n }\r\n\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 // set min baseline duration\r\n item.duration = item.duration || 1;\r\n\r\n // GS-2636. Calculate the 3rd date parameter basing on existing date parameters\r\n if (item.start_date && !item.end_date){\r\n item.end_date = gantt.calculateEndDate(item.start_date, item.duration);\r\n } else if (item.end_date && !item.start_date){\r\n item.start_date = gantt.calculateEndDate(item.end_date, -item.duration);\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 const timelineView = gantt.getLayoutView(\"timeline\");\r\n if (!timelineView || !gantt.config.show_chart){\r\n return;\r\n }\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 = timelineView.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 = timelineView.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){\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(!isHeadless(gantt)){\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\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 && 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) ? 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\t// var start = new Date(from),\r\n\t\t// GS-2683. We should start calculating minutes from the working time\r\n\t\tvar start = this.getClosestWorkTime({ date: from, dir: \"past\", unit: \"minute\" }),\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} else {\r\n\t\t\t\t\tcalendar = this.getResourceCalendar(task[resourceProperty]);\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\r\n\t\t// GS-1714: if resource is specified through array\r\n\t\tif (Array.isArray(resource)){\r\n\t\t\tif (resource.length === 1){\r\n\t\t\t\tif (typeof resource[0] === 'object'){\r\n\t\t\t\t\tresourceId = resource[0].resource_id; // if resource: [\"resource_id: \"6\", value: \"4\", ...\"]\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresourceId = resource[0]; // if resource: [1]\r\n\t\t\t\t}\r\n\t\t\t} \r\n\t\t}\r\n\t\t\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\t// GS-1583. Save the $open state to the Undo Stack\r\n\t\t\tif (!this.config.details_on_create){\r\n\t\t\t\tthis.callEvent(\"onAfterParentExpand\", [parent, parentObj]);\r\n\t\t\t}\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\t// GS-2718: if we have resources and two verticall scrollbars for tasks timeline and resource timeline\r\n\t\t\t\t// we don't get the scroll state of the resource timeline\r\n\t\t\t\tconst scrollbarsInfo = this.$layout.getScrollbarsInfo();\r\n\t\t\t\tscrollbarsInfo.forEach((scroll_info) => {\r\n\t\t\t\t\tconst scroll = gantt.$ui.getView(scroll_info.id);\r\n\t\t\t\t\tconst scrollbarNodeVisible = gantt.utils.dom.isChildOf(scroll.$view, gantt.$container);\r\n\t\t\t\t\tscroll_info.boundViews.forEach((viewName) => {\r\n\t\t\t\t\t\tconst view = gantt.$ui.getView(viewName);\r\n\t\t\t\t\t\tif(scroll_info.y && scroll_info.y != pos.y){\r\n\t\t\t\t\t\t\tif(view && !scrollbarNodeVisible){\r\n\t\t\t\t\t\t\t\tview.scrollTo(undefined, 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\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.classList.add(\"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.classList.remove(\"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\tif(task.open){\r\n\t\t\ttask.$open = true;\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\t\t// GS-99. Call this here to detach the events\r\n\t\tif (this.ext.inlineEditors) {\r\n\t\t\tthis.ext.inlineEditors.destructor();\r\n\t\t}\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\tlet task = gantt.getTask(gantt.getSelectedId());\r\n\t\t//GS-2661: selected task might be collapsed\r\n\t\tif(task.$expanded_branch) {\r\n\t\t\textraTasksIds.push(gantt.getSelectedId());\r\n\t\t}\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.getScrollbarsInfo = function(){\r\n\t\tconst scrollbars = this.getCellsByType(\"scroller\");\r\n\t\tconst scrollbarsInfo = [];\r\n\t\tscrollbars.forEach(scrollbar => {\r\n\t\t\tlet obj = {};\r\n\t\t\tconst {visible, direction, size, scrollSize, position} = scrollbar.getScrollState();\r\n\t\t\tlet linkedViews = scrollbar._getLinkedViews();\r\n\t\t\tlet boundViews = linkedViews.map(view => view.$config.id);\r\n\r\n\t\t\tobj.id = scrollbar.$id;\r\n\t\t\tobj.visible = visible;\r\n\t\t\tobj.boundViews = boundViews;\r\n\t\t\tif(direction === \"x\"){\r\n\t\t\t\tobj.x = size;\r\n\t\t\t\tobj.x_inner = scrollSize;\r\n\t\t\t\tobj.x_pos = position || 0;\r\n\t\t\t} else {\r\n\t\t\t\tobj.y = size;\r\n\t\t\t\tobj.y_inner = scrollSize;\r\n\t\t\t\tobj.y_pos = position || 0;\r\n\t\t\t}\r\n\t\t\tscrollbarsInfo.push(obj);\r\n\t\t});\r\n\t\treturn scrollbarsInfo;\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\t// GS-2275: case for resizing resource grid row and others\r\n\t\t\tstore.updateItem(id);\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 (e.target.value && (minValue || maxValue)){\r\n\t\t\t\t\tif (+gantt.date.str_to_date(\"%Y-%m-%d\")(e.target.value) < +minValue) {\r\n\t\t\t\t\t\te.target.value = gantt.date.date_to_str(\"%Y-%m-%d\")(minValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (+gantt.date.str_to_date(\"%Y-%m-%d\")(e.target.value) > +maxValue) {\r\n\t\t\t\t\t\te.target.value = gantt.date.date_to_str(\"%Y-%m-%d\")(maxValue);\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\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\tdetachStore: 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},\r\n\t\t\tdestructor: function(){\r\n\t\t\t\tthis.detachStore();\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 && task.baselines && task.baselines.length;\r\n\t\tconst baselinesOnDifferentRow = gantt.config.baselines && (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\t// GS-2619. No need to add loops for the split tasks (zero dy means the tasks are on the same line)\r\n\t\t\tif (dy !== 0){\r\n\t\t\t\tforward = (pt.e_x > (pt.x + 2 * shiftX));\r\n\t\t\t}\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\t\t\t// GS-2619. No need to add loops for the split tasks (zero dy means the tasks are on the same line)\r\n\t\t\tif (dy !== 0){\r\n\t\t\t\tforward = (pt.e_x > (pt.x - 2 * shiftX));\r\n\t\t\t}\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 && (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\t//GS-2661: selected task might be collapsed\r\n\t\tif(!item.$expanded_branch) return false;\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\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\t// GS-1288. We need to only detach the store and its events without detaching the\r\n\t\t\t\t\t// inline editor's events. Otherwise, we won't be able to access them\r\n\t\t\t\t\tgantt.ext.inlineEditors.detachStore();\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\t// GS-1148: Change scales for the resource views\r\n\t\tconst resourceViews = [\r\n\t\t\t\"resourceTimeline\",\r\n\t\t\t\"resourceHistogram\"\r\n\t\t];\r\n\r\n\t\tresourceViews.forEach(function(name){\r\n\t\t\tconst resourceView = gantt.$ui.getView(name);\r\n\t\t\tif (resourceView){\r\n\t\t\t\tconst resourceConfig = resourceView.$getConfig();\r\n\t\t\t\tif (!resourceConfig.fixed_scales){\r\n\t\t\t\t\tgantt.mixin(resourceConfig, chartConfig, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\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.closest(\".gantt_cal_lsection\");\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","destructor","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","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","hideTooltip","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","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","startIgnore","stopIgnore","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","copyProperty","startsWith","extensions","defaultConfig","setClickDrag","$container","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","getFullscreenElement","positions","originalPositioning","setFullScreenSizes","record","cantFullscreen","warning","log","requestArguments","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","requestExitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen","exitFullscreen","toggle","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","replaceAll","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","show_tasks_outside_timescale","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","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","marker_class","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","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","oldSelectedId","oldSelectedTask","newSelectedTask","differentTreeLevel","$level","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","$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","tree","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","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_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","undefined","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","parentObj","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","getContainer","domHelpers","wrapper","marginTop","oldNodes","detachAddTaskEvents","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","timelineView","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","getClosestWorkTime","minutePrecision","_isMinutePrecision","addedInterval","calculatedDay","daySchedule","minutesInDay","dayStart","iterateFromDayEnd","isWorkHour","workInterval","prevInterval","minutesInHour","_getClosestWorkTimePast","times","lastInterval","_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","getScrollbarsInfo","scroll_info","scrollbarNodeVisible","$view","boundViews","viewName","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","scrollbarsInfo","visible","scrollSize","_getLinkedViews","x_inner","x_pos","y_inner","y_pos","_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","$scroll_hor","$scroll_ver","_updateLinkedViews","scrollHorizontally","_scrolling","oldSize","scrollVertically","_wheel_time","_oldLeft","_getScrollSize","outerSize","isHorizontal","linked","scrollProperty","innerSizeProperty","outerProperty","_getScrollOffset","cellScrollSize","nonScrollableSize","outerScroll","innerScroll","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","detachStore","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","resourceView","resourceConfig","fixed_scales","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","setParentNode","_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","attachedScrollbar","DEFAULT_VALUE","tryCall","getTaskTop","getTaskBarHeight","domAttr","getLinkNode","oldH","oldV","verticalViews","horizontalViews","commonViews","viewId","newV","newH","date_x","scroll_to","leftPos","_scroll_state","gridCell","timelineCell","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]}