{"version":3,"sources":["webpack:///./node_modules/core-js/library/modules/es6.symbol.js","webpack:///./node_modules/core-js/library/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/core-js/library/modules/_to-absolute-index.js","webpack:///./src/views/Schedule.vue?75ab","webpack:///./node_modules/core-js/library/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/library/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_to-object.js","webpack:///./node_modules/core-js/library/modules/_defined.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///webpack:///webpack/universalModuleDefinition","webpack:///webpack:///webpack/bootstrap","webpack:///webpack:///sources/ext/marker.js","webpack:///./node_modules/core-js/library/modules/_iter-define.js","webpack:///./node_modules/core-js/library/modules/_html.js","webpack:///./node_modules/core-js/library/modules/_iobject.js","webpack:///./node_modules/core-js/library/modules/_object-pie.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_to-iobject.js","webpack:///./node_modules/core-js/library/modules/_to-integer.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/core-js/library/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/library/modules/_enum-keys.js","webpack:///./node_modules/core-js/library/modules/_iterators.js","webpack:///./node_modules/core-js/library/modules/_iter-step.js","webpack:///./node_modules/core-js/library/modules/_wks.js","webpack:///./node_modules/core-js/library/modules/_object-gpo.js","webpack:///./node_modules/core-js/library/modules/_shared-key.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/library/modules/_array-includes.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/symbol/iterator.js","webpack:///./node_modules/core-js/library/modules/_uid.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_wks-define.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/symbol.js","webpack:///./node_modules/core-js/library/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/library/modules/_object-gopn.js","webpack:///./node_modules/core-js/library/modules/_cof.js","webpack:///./src/views/Schedule.vue?3160","webpack:///./src/views/Schedule.vue","webpack:///./src/views/Schedule.vue?3323","webpack:///./src/views/Schedule.vue?08d5","webpack:///./node_modules/core-js/library/modules/web.dom.iterable.js","webpack:///./node_modules/core-js/library/modules/_string-at.js","webpack:///./node_modules/@babel/runtime-corejs2/helpers/esm/typeof.js","webpack:///./node_modules/core-js/library/modules/es7.symbol.observable.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_object-dps.js","webpack:///./node_modules/core-js/library/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/core-js/library/modules/_iter-create.js","webpack:///./node_modules/core-js/library/modules/_is-array.js","webpack:///./node_modules/core-js/library/modules/_redefine.js","webpack:///./node_modules/core-js/library/modules/_object-gops.js","webpack:///./node_modules/core-js/library/modules/_object-create.js","webpack:///webpack:///sources/core/relations/links_builder.js","webpack:///webpack:///sources/utils/helpers.js","webpack:///webpack:///sources/ext/auto_scheduling/constraint_types.ts","webpack:///webpack:///sources/core/relations/graph_helper.js","webpack:///webpack:///sources/core/relations/links_common.js","webpack:///webpack:///sources/ext/auto_scheduling/ui_handlers.ts","webpack:///webpack:///sources/ext/auto_scheduling/loops_finder.ts","webpack:///webpack:///sources/ext/auto_scheduling/connected_groups.ts","webpack:///webpack:///sources/ext/auto_scheduling/asap_strategy.ts","webpack:///webpack:///sources/ext/auto_scheduling/alap_strategy.ts","webpack:///webpack:///sources/ext/auto_scheduling/planner.ts","webpack:///webpack:///sources/ext/auto_scheduling/constraints.ts","webpack:///webpack:///sources/ext/auto_scheduling.js","webpack:///webpack:///sources/ext/auto_scheduling/task_plan.ts","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_to-length.js","webpack:///./node_modules/core-js/library/modules/_library.js","webpack:///./node_modules/core-js/library/modules/_object-gopd.js","webpack:///./node_modules/core-js/library/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/library/modules/_object-keys.js","webpack:///./node_modules/core-js/library/modules/_wks-ext.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/fn/symbol/iterator.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_shared.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///webpack:///sources/utils/utils.js","webpack:///webpack:///sources/utils/dom_helpers.js","webpack:///webpack:///sources/utils/dom_event_scope.js","webpack:///webpack:///sources/ext/tooltip/tooltip.ts","webpack:///webpack:///sources/ext/tooltip/tooltipManager.ts","webpack:///webpack:///sources/ext/tooltip/index.ts","webpack:///./node_modules/core-js/library/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/library/modules/_meta.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/fn/symbol/index.js"],"names":["global","__webpack_require__","has","DESCRIPTORS","$export","redefine","META","KEY","$fails","shared","setToStringTag","uid","wks","wksExt","wksDefine","enumKeys","isArray","anObject","isObject","toObject","toIObject","toPrimitive","createDesc","_create","gOPNExt","$GOPD","$GOPS","$DP","$keys","gOPD","f","dP","gOPN","$Symbol","Symbol","$JSON","JSON","_stringify","stringify","PROTOTYPE","HIDDEN","TO_PRIMITIVE","isEnum","propertyIsEnumerable","SymbolRegistry","AllSymbols","OPSymbols","ObjectProto","Object","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","get","this","value","a","it","key","D","protoDesc","wrap","tag","sym","_k","isSymbol","iterator","$defineProperty","enumerable","$defineProperties","P","keys","i","l","length","$create","undefined","$propertyIsEnumerable","E","call","$getOwnPropertyDescriptor","$getOwnPropertyNames","names","result","push","$getOwnPropertySymbols","IS_OP","TypeError","arguments","$set","configurable","set","name","G","W","F","es6Symbols","split","j","wellKnownSymbols","store","k","S","for","keyFor","useSetter","useSimple","create","defineProperty","defineProperties","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","FAILS_ON_PRIMITIVES","replacer","$replacer","args","apply","valueOf","Math","toString","windowNames","window","getWindowNames","e","slice","module","exports","hasOwnProperty","toInteger","max","min","index","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Schedule_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Schedule_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default","n","$at","String","iterated","_t","_i","point","O","done","fn","val","document","is","createElement","defined","exec","t","C_agent_work_28_s_node_modules_babel_runtime_corejs2_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__","define","r","modules","toStringTag","__esModule","d","bind","default","prototype","s","234","config","show_markers","start_date","getState","max_date","marker","div","gantt","css","posFromDate","end_date","o","$task_data","markerArea","initItem","initMarkerArea","createDataRender","defaultContainer","$marker_area","addLayer","_markers","addItem","exists","getItems","LIBRARY","hide","Iterators","$iterCreate","getPrototypeOf","ITERATOR","BUGGY","FF_ITERATOR","KEYS","VALUES","returnThis","Base","NAME","Constructor","next","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","TAG","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","documentElement","cof","object","IObject","ceil","floor","isNaN","__webpack_amd_options__","def","stat","getKeys","gOPS","pIE","getSymbols","symbols","USE_SYMBOL","$exports","IE_PROTO","constructor","core","version","__e","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","id","px","random","concat","ctx","type","source","own","out","IS_FORCED","IS_GLOBAL","IS_STATIC","IS_PROTO","IS_BIND","B","IS_WRAP","expProto","target","C","b","c","Function","virtual","R","U","charAt","hiddenKeys","render","_vm","_h","$createElement","_c","_self","staticClass","directives","rawName","editMode","readOnly","expression","attrs","_v","_m","checked","staticRenderFns","Schedulevue_type_script_lang_ts_GanttSchedule","_super","GanttSchedule","_this","projectId","addedTasks","deletedTasks","fmpurl","clientSuffix","$store","commit","tslib_es6","mounted","$route","params","readOnlyParam","Array","query","Boolean","scheduleApi","dist","getters","getApiConfiguration","systemApi","_a","getFMPEndpoint","sent","_b","getClientSuffix","pageSize","projSchedRecords","getSchedulesByProjetId","take","skip","currentSet","console","log","data","mapJson","links","buildLinks","tasks","initGantt","scheduleRecords","forEach","item","itemParent","parentPhaseNum","find","obj","phaseNum","phaseFollows","cPhaseType","durationUnitType","scheduleId","text","phaseName","phaseStart","phaseEnd","progress","Number","phasePctComplete","parent","currentTask","linkLag","cPhaseLagDays","currentLink","lag","saveSchedule","saveAsBaseline","batchCommand","toCreate","toEdit","toDelete","follows","durQty","durUnit","durationQuantity","editedSchedRecord","fmRecordId","subprojectCode","phaseStartInput","phaseFollowsLeadLag","phaseEndInput","phaseComment","Date","rollupPhaseCode","useChildrenDatesFlag","baselineStart","baselineEnd","this_1","includes","tasks_1","batchManage","scheduleBatchManage","suppressBackspace","event","srcElement","keyCode","test","nodeName","onkeydown","onkeypress","attachEvent","templates","xml_date","dateString","xml_format","date","toISOString","editBtn","getElementById","saveBtn","cancelBtn","baseBtn","milestoneBtn","toggleEditMode","mode","windowurl","toUpperCase","open","readonly","getGridColumn","width","onclick","confirm","ok","cancel","callback","serialize","saveBaseline","createTask","allTasks","getTaskByTime","task","updateTask","numEditor","map_to","textEditor","pdcEditor","options","label","startDateEditor","endDateEditor","progressEditor","phaseFollowsEditor","leadLagEditor","durationQtyEditor","durationUnitEditor","inlineEditors","ext","state","getTask","col","columnName","element","getElementsByTagName","date_to_str","validatePhaseNum","newPhaseNum","message","updatePhaseNum","oldPhaseNum","refreshTask","newValue","oldValue","round","toggleRollupMode","sort","sourceTask","getTaskByIndex","isChildOf","inputStr","sepPosition","numSlash","numDash","adjStr","getFullYear","str_to_date","taskEdited","eachTask","taskDurQty","taskDurUnit","duration","newEndDate","add","calculateDuration","trunc","calculateEndDate","autoCheckbox","autoSchedule","updateLinksLag","$source","targetLinks","$target","newLink","addLink","deleteLink","getLink","linkEdited","oldSource","circularFlag","isCircularLink","taskLeadLag","trim","toLowerCase","daysLag","parseInt","indexOf","followsTask","getTime","taskLinks","link","targetTask","newLag","printLeadLag","refreshData","lagDays","types","finish_to_finish","start_to_finish","start_to_start","taskDragged","taskDraggedLinks","swapPhaseType","clearPhase","populatePhase","swapLinks","phaseToID","phaseFromID","phaseTo","phaseFrom","linkID","updateLink","sourceLinks","createdPhase","details_on_create","details_on_dblclick","descriptor","bold","formatDate","parentID","parentTask","linkAction","relatedPhaseID","projectDates","getSubtaskDates","lastChildTask","getTaskBy","numChildren","getChildren","renumberPhases","taskCount","getTaskCount","lastTask","newPhase","relatedTask","phaseStartNum","delTask","childTasks","taskID","deleteTask","target_1","sourceLink","relTask","targetLink","taskAddedCheck","splice","layout","cols","rows","view","scrollX","scrollable","scrollY","group","delColumn","addColumn","$clickGridButton","action","triggerTask","addLabel","columns","template","tree","align","editor","resize","locale","labels","section_phaseNum","section_phaseName","section_rollupPhaseCode","section_time","section_dates","section_leadLag","date_grid","auto_scheduling_initial","auto_scheduling_strict","onchange","setScaleConfig","level","scales","unit","step","format","min_column_width","quarterScaleTemplate","weekScaleTemplate","dateToStr","yearStr","endDate","scaleSelect","fit_tasks","scale_height","row_height","round_dnd_dates","addMarker","rightside_text","start","end","milestone","tooltip_date_format","formatFunc","tooltip_text","mouseOnGrid","eTarget","clientX","grid_width","className","tooltips","tooltipFor","selector","html","node","targetTaskID","locate","isTaskExists","parseDate","baselineCheckbox","addTaskLayer","sizes","getTaskPosition","style","left","top","task_height","task_class","taskType","getTaskType","taskCSS","grid_row_class","$level","link_class","drag_link","from","fromStart","to","toStart","init","parse","rollupCheckbox","openBool","$open","vue_property_decorator","Schedulevue_type_script_lang_ts_","views_Schedulevue_type_script_lang_ts_","component","componentNormalizer","__webpack_exports__","TO_STRING_TAG","DOMIterables","Collection","TO_STRING","that","pos","charCodeAt","_typeof","_core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__","_core_js_symbol_iterator__WEBPACK_IMPORTED_MODULE_0___default","_core_js_symbol__WEBPACK_IMPORTED_MODULE_1__","_core_js_symbol__WEBPACK_IMPORTED_MODULE_1___default","_typeof2","Properties","arg","dPs","enumBugKeys","Empty","createDict","iframeDocument","iframe","lt","gt","display","appendChild","src","contentWindow","write","close","C_agent_work_28_s_node_modules_babel_runtime_corejs2_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_8__","10","getVirtualRoot","mixin","$virtual","getLinkedTasks","clearCache","visited","u","relations","_collectRelations","linkKey","_getSuccessors","predecessors","includePredecessors","visitedLinks","_getLinkedTasks","rootObj","root_id","visitedTasks","tasksStack","pop","isChild","g","output","h","sourceParent","targetParent","rel","hasChild","_","2","second","minute","hour","day","week","month","quarter","year","filter","getSecondsInUnit","arr","arrayMap","map","resArray","arrayFind","arrayFilter","arrayDifference","arraySome","hashToArray","hash","sortArrayOfHash","desc","throttle","wait","setTimeout","timeout","isDate","isStringObject","isNumberObject","isBooleanObject","delay","timer","clearTimeout","objectKeys","requestAnimationFrame","w","isEventable","detachEvent","23","ConstraintTypes","getVertices","ids","vertices","topologicalSort","successor","$incoming","L","m","groupAdjacentEdges","edge","res","tarjanStronglyConnectedComponents","stack","edgesFromTasks","recurse","connectedComponents","v","edges","workStack","lowLink","onStack","com","verticesHash","findLoops","helpers","cycles","25","taskId","_get_linked_task","formattedLinksStash","inheritedSuccessorsStash","inheritedPredecessorsStash","getPredecessorsCache","caching","isSummaryTask","_getImplicitLinks","respectTargetOffset","targetDates","p","subtaskLink","auto_scheduling","skipChild","children","linksCollection","siblingId","siblingTask","siblingLink","successors","linksIds","cacheCollection","inheritedRelations","stop","parentDependencies","_getDirectDependencies","_getInheritedDependencies","_getDirectSuccessors","_getDirectPredecessors","skipInherited","preferredStart","hashSum","additionalLag","252","linksBuilder","loopsFinder","connectedGroupsHelper","_attachAutoSchedulingHandlers","_autoScheduleAfterLinkChange","_autoscheduling_in_progress","_preventCircularLink","callEvent","getLoopContainingLink","_preventDescendantLink","auto_scheduling_descendant_links","_datesNotEqual","dateA","dateB","taskA","taskB","_hasDuration","_notEqualTaskDates","task1","task2","getConstraintType","constraint_date","getRelations","auto_scheduling_compatibility","getConnectedGroupRelations","movedTask","updateTaskConstraints","schedule_from_end","constraint_type","constraint_types","FNLT","SNET","finalizeTaskConstraints","_getPredecessors","auto_scheduling_move_projects","changedConstraint","_autoScheduleAfterDND","newTask","relationsArray","skipped","originalLink","presentLinks","updatedLinks","_autoSchedule","modifiedTaskId","autoscheduleColumns_1","editorConfig","getEditorConfig","oldTask","253","graphHelper","_graphHelper","_linksBuilder","_gantt","allRelations","isLinkExists","_formatLink","breadthFirstSearch","currentVertex","queue","groupTasks","groupLinksInternal","groupLinksPublic","shift","linksArray","linksObjects","processedLinks","project","root","groups","length_1","AsapStrategy","instance","adjacentLinks","plansHash","minStart","linkId","defaultStart","minRelationDate","relation","constraintDate","getEarliestStartDate","isSmallerOrDefault","project_start","maxEnd","getClosestWorkTime","dir","masterPlan","currentPlan","task_plan_1","Create","earliestSchedulingStart","earliestSchedulingEnd","small","big","isEqual","smallDate","bigDate","isFirstSmaller","plan","predecessorEnd","getPredecessorEndDate","successorStart","AlapStrategy","maxStart","maxRelationDate","getLatestEndDate","constraintStartDate","isGreaterOrDefault","project_end","latestSchedulingStart","latestSchedulingEnd","getSuccessorStartDate","predecessor","asap_strategy_1","constraint_types_1","AutoSchedulingPlanner","constraintsHelper","_constraintsHelper","_asapStrategy","_alapStrategy","alap_strategy_1","constraints","alapStrategy","asapStrategy","orderedIds","reversedIds","relationsMap","processConstraints","iterateTasks","isAlapTask","isAsapTask","projectPlan","reason","updateTasks","newDate","mainSequence","secondarySequence","isMainSequence","mainSequenceStrategy","secondarySequenceStrategy","currentId","resolveRelationDate","limitPlanDates","processResolvedDate","effectiveStart","earliestStart","earliestEnd","latestStart","latestEnd","conflict","reverse","len","unshift","constraintType","ASAP","ALAP","processConstraint","ConstraintsHelper","hasConstraint","newPlan","SNLT","FNET","MSO","MFO","current","planner","connectedGroups","ConnectedGroupsHelper","getConstraints","updatedTasks","preferInitialTaskDates","generatePlan","batchUpdate","resetTime","payload","inclusive","attachUIHandlers","TaskPlan","bitmap","writable","IE8_DOM_DEFINE","addToUnscopables","Arguments","aFunction","Attributes","SHARED","copyright","originalModule","webpackPolyfill","self","__g","C_agent_work_28_s_node_modules_babel_runtime_corejs2_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_11__","0","seed","copy","functor","eventRemove","getBoundingClientRect","body","docElem","scrollTop","scrollLeft","clientTop","clientLeft","right","bottom","elem","y","visibility","getComputedStyle","getAttribute","loLowerCase","input","replace","getNodePosition","getFocusableNodes","querySelectorAll","join","nodesArray","hasNonNegativeTabIndex","getScrollSize","offsetWidth","clientWidth","getClassName","addClassName","removeClassName","RegExp","insertNode","_slave","firstChild","removeNode","getChildNodes","childNodes","toNode","locateClassName","strict","trg","locateAttribute","getTargetNode","getRelativeEventPosition","box","x","child","hasClass","closest","matches","msMatchesSelector","webkitMatchesSelector","contains","nodeType","22","addEvent","removeEvent","eventScope","attach","handlers","detach","handler","detachAll","extend","228","Tooltip","_tooltipNode","_waiAria","tooltipAttr","_root","container","getNode","domHelpers","MouseEvent","position","_calculateTooltipPosition","tooltipVisibleAttr","parentNode","removeChild","tooltipHiddenAttr","innerHTML","viewport","_getViewPortSize","tooltipNode","tooltip","height","offsetHeight","offsetX","tooltip_offset_x","offsetY","tooltip_offset_y","mouse","_getViewPort","$task","tooltip_1","TooltipManager","_domEvents","domEventsScope","_initDelayedFunctions","delayHide","$root","watchableTarget","eventTarget","targetNode","doOnMouseEnter","onmouseenter","onmousemove","onmouseleave","_listeners","listener","cloneDomEvent","clone","createEventObject","createEvent","delayShow","$cancelTimeout","setContent","show","tooltip_timeout","tooltip_hide_timeout","tooltipManager","task_attribute","touch","touch_tooltip","targetTaskId","destructor","hideTooltip","link_source_id","arrayIndexOf","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","fastKey","getWeak","onFreeze","meta","NEED"],"mappings":"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","file":"js/chunk-73ae396e.02a7b436.js","sourcesContent":["'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Schedule.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Schedule.vue?vue&type=style&index=0&lang=scss&\"","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/codebase/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 230);\n","\n(function(){\n\nif(!gantt._markers) {\n\tgantt._markers = gantt.createDatastore({\n\t\tname: \"marker\",\n\t\tinitItem: function (marker) {\n\t\t\tmarker.id = marker.id || gantt.uid();\n\t\t\treturn marker;\n\t\t}\n\t});\n}\n\ngantt.config.show_markers = true;\n\nfunction render_marker(marker){\n\tif(!gantt.config.show_markers)\n\t\treturn false;\n\n\tif(!marker.start_date)\n\t\treturn false;\n\n\tvar state = gantt.getState();\n\tif(+marker.start_date > +state.max_date)\n\t\treturn;\n\tif((!marker.end_date || +marker.end_date < +state.min_date) && +marker.start_date < +state.min_date)\n\t\treturn;\n\n\tvar div = document.createElement(\"div\");\n\n\tdiv.setAttribute(\"data-marker-id\", marker.id);\n\n\tvar css = \"gantt_marker\";\n\tif(gantt.templates.marker_class)\n\t\tcss += \" \" + gantt.templates.marker_class(marker);\n\n\tif(marker.css){\n\t\tcss += \" \" + marker.css;\n\t}\n\n\tif(marker.title){\n\t\tdiv.title = marker.title;\n\t}\n\tdiv.className = css;\n\n\tvar start = gantt.posFromDate(marker.start_date);\n\tdiv.style.left = start + \"px\";\n\tdiv.style.height = Math.max(gantt.getRowTop(gantt.getVisibleTaskCount()), 0) + \"px\";\n\tif(marker.end_date){\n\t\tvar end = gantt.posFromDate(marker.end_date);\n\t\tdiv.style.width = Math.max((end - start), 0) + \"px\";\n\n\t}\n\n\tif(marker.text){\n\t\tdiv.innerHTML = \"
\" + marker.text + \"
\";\n\t}\n\n\treturn div;\n}\n\nfunction initMarkerArea(){\n\tif(!gantt.$task_data)\n\t\treturn;\n\n\tvar markerArea = document.createElement(\"div\");\n\tmarkerArea.className = \"gantt_marker_area\";\n\tgantt.$task_data.appendChild(markerArea);\n\tgantt.$marker_area = markerArea;\n}\n\ngantt.attachEvent(\"onBeforeGanttRender\", function(){\n\tif(!gantt.$marker_area)\n\t\tinitMarkerArea();\n});\n\ngantt.attachEvent(\"onDataRender\", function(){\n\tif(!gantt.$marker_area){\n\t\tinitMarkerArea();\n\t\tgantt.renderMarkers();\n\t}\n});\n\ngantt.attachEvent(\"onGanttReady\", function(){\n\tinitMarkerArea();\n\n\tvar layers = gantt.$services.getService(\"layers\");\n\tvar markerRenderer = layers.createDataRender({\n\t\tname: \"marker\",\n\t\tdefaultContainer: function(){ return gantt.$marker_area;}\n\t});\n\tmarkerRenderer.addLayer(render_marker);\n});\n\ngantt.getMarker = function(id){\n\tif(!this._markers) return null;\n\n\treturn this._markers.getItem(id);\n};\n\ngantt.addMarker = function(marker){\n\treturn this._markers.addItem(marker);\n};\n\ngantt.deleteMarker = function(id){\n\tif(!this._markers.exists(id))\n\t\treturn false;\n\n\tthis._markers.removeItem(id);\n\treturn true;\n};\ngantt.updateMarker = function(id){\n\tthis._markers.refresh(id);\n};\n\ngantt._getMarkers = function(){\n\treturn this._markers.getItems();\n};\n\ngantt.renderMarkers = function () {\n\tthis._markers.refresh();\n};\n\n})();","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","module.exports = {};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","module.exports = require(\"core-js/library/fn/symbol/iterator\");","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","module.exports = require(\"core-js/library/fn/symbol\");","require('./_wks-define')('asyncIterator');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"vwrapper\"},[_c('div',{staticClass:\"gantt_control\"},[_c('span',{staticClass:\"control_group\"},[_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.editMode && !_vm.readOnly),expression:\"!editMode && !readOnly\"}],staticClass:\"control_edit\",attrs:{\"id\":\"editButton\"}},[_vm._v(\"Edit Schedule\")]),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.editMode),expression:\"editMode\"}],staticClass:\"control_save\",attrs:{\"id\":\"saveButton\"}},[_vm._v(\"Save\")]),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.editMode),expression:\"editMode\"}],staticClass:\"control_gray\",attrs:{\"id\":\"cancelButton\"}},[_vm._v(\"Cancel\")])]),_c('span',{staticClass:\"control_group\"},[_vm._m(0),_c('label',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.editMode),expression:\"editMode\"}],attrs:{\"for\":\"autoToggle\"}},[_c('input',{attrs:{\"type\":\"checkbox\",\"id\":\"autoToggle\",\"checked\":\"\"}}),_vm._v(\"Auto-recalculate dates\\n \")]),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.editMode),expression:\"editMode\"}],staticClass:\"control_gray\",attrs:{\"id\":\"addMilestone\"}},[_vm._v(\"Add Milestone\")])]),_c('span',{staticClass:\"control_group\"},[_vm._m(1),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.editMode),expression:\"editMode\"}],staticClass:\"control_gray\",attrs:{\"id\":\"saveBaselineButton\"}},[_vm._v(\"Save as baseline\")])]),_vm._m(2)]),_c('div',{attrs:{\"id\":\"gantt_PROJECT\"}})])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{attrs:{\"for\":\"rollupToggle\"}},[_c('input',{attrs:{\"type\":\"checkbox\",\"id\":\"rollupToggle\"}}),_vm._v(\"Collapse phases\\n \")])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('label',{attrs:{\"for\":\"baselineToggle\"}},[_c('input',{attrs:{\"type\":\"checkbox\",\"id\":\"baselineToggle\"}}),_vm._v(\"Show baseline\\n \")])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('label',{attrs:{\"for\":\"scaleSelect\"}},[_vm._v(\"Scale\")]),_c('select',{attrs:{\"name\":\"scale\",\"id\":\"scaleSelect\"}},[_c('option',{attrs:{\"value\":\"month+year\"}},[_vm._v(\"Month / Year\")]),_c('option',{attrs:{\"value\":\"month+quarter\"}},[_vm._v(\"Month / Quarter\")]),_c('option',{attrs:{\"value\":\"week+month\"}},[_vm._v(\"Week / Month\")]),_c('option',{attrs:{\"value\":\"day+month\"}},[_vm._v(\"Day / Month\")]),_c('option',{attrs:{\"value\":\"day+week\"}},[_vm._v(\"Day / Week\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport 'portable-fetch';\r\nimport { Component, Vue, Watch } from 'vue-property-decorator';\r\nimport 'dhtmlx-gantt';\r\nimport 'dhtmlx-gantt/codebase/dhtmlxgantt.css';\r\nimport 'dhtmlx-gantt/codebase/ext/dhtmlxgantt_marker.js';\r\nimport 'dhtmlx-gantt/codebase/ext/dhtmlxgantt_auto_scheduling.js';\r\nimport 'dhtmlx-gantt/codebase/ext/dhtmlxgantt_tooltip.js';\r\nimport { SchedulesApi, Schedule, ScheduleEditCommand, ScheduleBatchManage, ScheduleDeleteCommand, SystemApi } from 'projecto-api';\r\n\r\ndeclare var gantt: any;\r\n\r\n@Component({})\r\nexport default class GanttSchedule extends Vue {\r\n private scheduleApi !: SchedulesApi;\r\n private systemApi !: SystemApi;\r\n private projectId: string = '';\r\n private addedTasks: any = [];\r\n private deletedTasks: number[] = [];\r\n private fmpurl: string = '';\r\n private clientSuffix: string = '';\r\n private editMode: boolean = false;\r\n private readOnly: boolean = false;\r\n // private exportStyles: string = document.getElementById('exportStyles')!.innerHTML;\r\n\r\n constructor() {\r\n super();\r\n this.$store.commit('setPageTitle', 'Schedule');\r\n }\r\n\r\n private async mounted() {\r\n this.projectId = this.$route.params.projectId;\r\n\r\n // check query string for read-only parameter\r\n const readOnlyParam: string = Array.isArray(this.$route.query.readOnly) ? this.$route.query.readOnly[0] as string : this.$route.query.readOnly as string;\r\n if (readOnlyParam) {\r\n this.readOnly = Boolean(readOnlyParam === 'true');\r\n }\r\n\r\n this.scheduleApi = new SchedulesApi(this.$store.getters.getApiConfiguration);\r\n this.systemApi = new SystemApi(this.$store.getters.getApiConfiguration);\r\n this.fmpurl = await this.systemApi.getFMPEndpoint();\r\n this.clientSuffix = await this.systemApi.getClientSuffix();\r\n\r\n // get project schedule records from API in batches of pageSize\r\n const pageSize: number = 50;\r\n let projSchedRecords: Schedule[] = [];\r\n for (let i = 0; projSchedRecords.length === pageSize * i; i++) {\r\n const currentSet = await this.scheduleApi.getSchedulesByProjetId({ projectId: this.projectId, take: pageSize, skip: i * pageSize });\r\n projSchedRecords = projSchedRecords.concat(currentSet);\r\n }\r\n\r\n console.log(projSchedRecords);\r\n\r\n const data: any = this.mapJson(projSchedRecords);\r\n const links: any = this.buildLinks(projSchedRecords);\r\n const tasks = { data, links };\r\n\r\n this.initGantt(tasks);\r\n }\r\n\r\n private mapJson(scheduleRecords: any) {\r\n scheduleRecords.forEach((item: any) => {\r\n let itemParent: any;\r\n if (item.parentPhaseNum) {\r\n // for schedules that have parents, need sched id of the parent phase (not phase num)\r\n itemParent = scheduleRecords.find((obj: any) => obj.phaseNum === item.parentPhaseNum).id;\r\n }\r\n\r\n let follows: any;\r\n if (!item.phaseFollows) {\r\n item.phaseFollows = null;\r\n }\r\n\r\n if (item.cPhaseType === 'milestone') {\r\n item.durationUnitType = '';\r\n }\r\n\r\n item.id = item.scheduleId;\r\n delete item.scheduleId;\r\n item.text = item.phaseName;\r\n delete item.phaseName;\r\n item.start_date = item.phaseStart;\r\n delete item.phaseStart;\r\n item.end_date = item.phaseEnd;\r\n delete item.phaseEnd;\r\n item.progress = Number(item.phasePctComplete / 100);\r\n delete item.phasePctComplete;\r\n item.type = item.cPhaseType;\r\n delete item.cPhaseType;\r\n item.parent = itemParent;\r\n delete item.parentPhaseNum;\r\n });\r\n return scheduleRecords;\r\n }\r\n\r\n private buildLinks(scheduleRecords: any) {\r\n const links = [];\r\n for (let i = 0; i < scheduleRecords.length; i++) {\r\n const currentTask = scheduleRecords[i];\r\n if (currentTask.phaseFollows) {\r\n let linkLag: number;\r\n if (currentTask.cPhaseLagDays) {\r\n linkLag = currentTask.cPhaseLagDays;\r\n } else {\r\n linkLag = 0;\r\n }\r\n const currentLink = {\r\n id: i,\r\n // need to find the sched id of the phase that follows (not phase num)\r\n source: scheduleRecords.find((obj: any) => obj.phaseNum === currentTask.phaseFollows).id,\r\n target: currentTask.id,\r\n type: '0',\r\n lag: linkLag,\r\n };\r\n links.push(currentLink);\r\n }\r\n }\r\n console.log(links);\r\n return links;\r\n }\r\n\r\n private async saveSchedule(tasks: any, saveAsBaseline: boolean) {\r\n // console.log(tasks);\r\n // console.log(this.addedTasks);\r\n // console.log(this.deletedTasks);\r\n\r\n const batchCommand: ScheduleBatchManage = {\r\n toCreate: [],\r\n toEdit: [],\r\n toDelete: [],\r\n };\r\n\r\n // loop through tasks and update/add schedule records to PJT via API\r\n for (const item of tasks) {\r\n let parent: any;\r\n if (item.parent === 0) {\r\n parent = null;\r\n } else {\r\n // for parent phase, need to convert it back to parent phase num (instead of sched id)\r\n parent = tasks.find((obj: any) => obj.id === item.parent).phaseNum;\r\n }\r\n\r\n let follows: any;\r\n if (item.phaseFollows) {\r\n follows = item.phaseFollows;\r\n } else {\r\n follows = null;\r\n }\r\n\r\n let durQty: any;\r\n let durUnit: string;\r\n if (item.type === 'milestone') {\r\n durQty = 0;\r\n durUnit = 'days';\r\n } else if (item.type === 'project') {\r\n durQty = null;\r\n durUnit = '';\r\n } else {\r\n durQty = Number(item.durationQuantity);\r\n durUnit = item.durationUnitType;\r\n }\r\n\r\n const editedSchedRecord: ScheduleEditCommand = {\r\n fmRecordId: item.fmRecordId,\r\n scheduleId: item.id,\r\n projectId: item.projectId,\r\n subprojectCode: item.subprojectCode,\r\n phaseNum: Number(item.phaseNum),\r\n phaseName: item.text,\r\n durationQuantity: durQty,\r\n durationUnitType: durUnit,\r\n phaseStartInput: item.phaseStartInput,\r\n phaseFollows: follows,\r\n phaseFollowsLeadLag: item.phaseFollowsLeadLag,\r\n phaseEndInput: item.phaseEndInput,\r\n phaseComment: item.phaseComment,\r\n phasePctComplete: Number(item.progress) * 100,\r\n phaseStart: new Date(item.start_date),\r\n phaseEnd: new Date(item.end_date),\r\n parentPhaseNum: parent,\r\n rollupPhaseCode: item.rollupPhaseCode,\r\n useChildrenDatesFlag: item.useChildrenDatesFlag,\r\n };\r\n\r\n if (saveAsBaseline) {\r\n // set current schedule as baseline\r\n editedSchedRecord.baselineStart = new Date(item.start_date);\r\n editedSchedRecord.baselineEnd = new Date(item.end_date);\r\n } else {\r\n // only pass baseline through if it exists\r\n if (item.baselineStart) { editedSchedRecord.baselineStart = new Date(item.baselineStart); }\r\n if (item.baselineEnd) { editedSchedRecord.baselineEnd = new Date(item.baselineEnd); }\r\n }\r\n\r\n if (this.addedTasks.includes(editedSchedRecord.scheduleId)) {\r\n // user created new task, create new schedule record in PJT\r\n delete editedSchedRecord.scheduleId;\r\n editedSchedRecord.projectId = this.projectId;\r\n batchCommand.toCreate!.push(editedSchedRecord);\r\n } else {\r\n // user edited new task, edit the record in PJT\r\n batchCommand.toEdit!.push(editedSchedRecord);\r\n }\r\n }\r\n\r\n // loop through deleted tasks and delete schedule record in PJT via API\r\n for (const item of this.deletedTasks) {\r\n // const ver = await this.scheduleApi.deleteSchedule(Number(item));\r\n batchCommand.toDelete!.push({ fmRecordId: item });\r\n }\r\n\r\n console.log(batchCommand);\r\n\r\n // perform the batch operation\r\n await this.scheduleApi.batchManage({ scheduleBatchManage: batchCommand });\r\n // TO-DO: ADD VERIFICATION MESSAGE\r\n }\r\n\r\n private initGantt(tasks: any) {\r\n // called when page is fully loaded\r\n\r\n // prevent backspace functioning as back button in IE\r\n function suppressBackspace(e: any) {\r\n e = e || window.event;\r\n const target: any = e.target || e.srcElement;\r\n if (e.keyCode === 8 && !/input|textarea/i.test(target.nodeName)) {\r\n return false;\r\n }\r\n }\r\n document.onkeydown = suppressBackspace;\r\n document.onkeypress = suppressBackspace;\r\n\r\n // parse dates from ISO\r\n gantt.attachEvent('onTemplatesReady', () => {\r\n // parse\r\n gantt.templates.xml_date = (dateString: string) => new Date(dateString);\r\n // stringify\r\n gantt.templates.xml_format = (date: Date) => date.toISOString();\r\n });\r\n\r\n // buttons\r\n const editBtn: HTMLElement = document.getElementById('editButton')!;\r\n const saveBtn: HTMLElement = document.getElementById('saveButton')!;\r\n const cancelBtn: HTMLElement = document.getElementById('cancelButton')!;\r\n const baseBtn: HTMLElement = document.getElementById('saveBaselineButton')!;\r\n const milestoneBtn: HTMLElement = document.getElementById('addMilestone')!;\r\n // const exportBtn: HTMLElement = document.getElementById('exportButton')!;\r\n\r\n // export schedule\r\n // const exportElement: HTMLElement = document.getElementById('exportStyles')!;\r\n // const exportStyles: string = exportElement.innerHTML;\r\n // const exportElement = this.$refs['exportStyles'];\r\n // const exportElement = document.styleSheets;\r\n\r\n // const ganttExport = document.createElement('script');\r\n // ganttExport.setAttribute('src', 'http://export.dhtmlx.com/gantt/api.js');\r\n // document.head.appendChild(ganttExport);\r\n\r\n // exportBtn.onclick = () => {\r\n // // alert('Export to FM');\r\n // // console.log(exportElement);\r\n // // console.log(exportStyles);\r\n // // console.log(this.exportStyles);\r\n // gantt.exportToPDF({\r\n // name: 'Project Schedule ' + new Date().toISOString().slice(0, 10) + '.pdf',\r\n // // header: '',\r\n // header: '',\r\n // callback: (result: any) => { window.open(this.fmpurl + 'insert_gantt_NEW¶m=' + result.url, '_self'); },\r\n // raw: true,\r\n // });\r\n // };\r\n\r\n const toggleEditMode = (mode: string) => {\r\n const windowurl = this.fmpurl + '/PJT_PROJECTS_' + this.clientSuffix.toUpperCase() + '.fmp12?script=gantt_edit_mode_NEW¶m=' + mode;\r\n window.open(windowurl, '_self');\r\n if (mode === 'edit') {\r\n gantt.config.readonly = false;\r\n gantt.getGridColumn('delete_col').hide = false;\r\n gantt.getGridColumn('add_col').hide = false;\r\n gantt.getGridColumn('text').width = 125;\r\n this.editMode = true;\r\n } else {\r\n gantt.config.readonly = true;\r\n gantt.getGridColumn('delete_col').hide = true;\r\n gantt.getGridColumn('add_col').hide = true;\r\n gantt.getGridColumn('text').width = 195;\r\n this.editMode = false;\r\n }\r\n gantt.render();\r\n };\r\n\r\n // read-only mode by default\r\n // toggleEditMode('read');\r\n gantt.config.readonly = true;\r\n\r\n // handles user clicks on Edit, Cancel, or Save button\r\n editBtn.onclick = () => toggleEditMode('edit');\r\n cancelBtn.onclick = () => toggleEditMode('cancel');\r\n saveBtn.onclick = () => {\r\n gantt.confirm({\r\n text: 'Save this schedule to the project?',\r\n ok: 'Save',\r\n cancel: 'Cancel',\r\n callback: (result: boolean) => { if (result) { this.saveSchedule(gantt.serialize().data, false); toggleEditMode('read'); } },\r\n });\r\n };\r\n baseBtn.onclick = () => {\r\n gantt.confirm({\r\n text: 'Save this schedule to the project and save phase dates to the project baseline?',\r\n ok: 'Save',\r\n cancel: 'Cancel',\r\n callback: (result: boolean) => { if (result) { saveBaseline(); } },\r\n });\r\n };\r\n milestoneBtn.onclick = () => {\r\n const milestoneTask = gantt.createTask({\r\n type: 'milestone',\r\n text: 'New milestone',\r\n }, '');\r\n };\r\n\r\n const saveBaseline = () => {\r\n const allTasks = gantt.getTaskByTime();\r\n allTasks.forEach((task: any) => {\r\n task.baselineStart = task.start_date;\r\n task.baselineEnd = task.end_date;\r\n gantt.updateTask(task.id);\r\n });\r\n gantt.render();\r\n this.saveSchedule(gantt.serialize().data, true);\r\n toggleEditMode('read');\r\n };\r\n\r\n // create inline editors\r\n const numEditor = { type: 'number', map_to: 'phaseNum', min: 0 };\r\n const textEditor = { type: 'text', map_to: 'text' };\r\n const pdcEditor = { type: 'select', map_to: 'rollupPhaseCode', options: [{ key: 'P', label: 'P' }, { key: 'D', label: 'D' }, { key: 'C', label: 'C' }] };\r\n const startDateEditor = { type: 'text', map_to: 'start_date' };\r\n const endDateEditor = { type: 'text', map_to: 'end_date' };\r\n const progressEditor = { type: 'number', map_to: 'progress', min: 0, max: 1 };\r\n const phaseFollowsEditor = { type: 'text', map_to: 'phaseFollows' };\r\n const leadLagEditor = { type: 'text', map_to: 'phaseFollowsLeadLag' };\r\n const durationEditor = { type: 'number', map_to: 'duration', min: 0 };\r\n const durationQtyEditor = { type: 'number', map_to: 'durationQuantity', min: 0 };\r\n const durationUnitEditor = { type: 'select', map_to: 'durationUnitType', options: [{ key: 'days', label: 'days' }, { key: 'weeks', label: 'weeks' }, { key: 'months', label: 'months' }, { key: 'wkdays', label: 'wkdays' }] };\r\n\r\n // check if editing allowed\r\n const inlineEditors = gantt.ext.inlineEditors;\r\n inlineEditors.attachEvent('onBeforeEditStart', (state: any) => {\r\n const currentTask = gantt.getTask(state.id);\r\n const col: string = state.columnName;\r\n // if type is Project, disable all date/duration/follows editing\r\n if (currentTask.type === 'project') {\r\n if (col === 'phaseNum' || col === 'text' || col === 'rollupPhaseCode' || col === 'progress') {\r\n return true;\r\n } else { return false; }\r\n // if type is Milestone, disable duration/progress/end editing\r\n } else if (currentTask.type === 'milestone') {\r\n if (col === 'progress' || col === 'durationQuantity' || col === 'durationUnitType' || col === 'end_date') {\r\n return false;\r\n } else { return true; }\r\n // nothing to disable for type Task\r\n } else {\r\n return true;\r\n }\r\n });\r\n\r\n // converts date format for user editing\r\n inlineEditors.attachEvent('onEditStart', (state: any) => {\r\n if (state.columnName === 'start_date' || state.columnName === 'end_date') {\r\n const task = gantt.getTask(state.id);\r\n const element = document.getElementsByTagName('input')[3];\r\n element.value = gantt.date.date_to_str('%m/%d/%Y')(task[state.columnName]);\r\n }\r\n });\r\n\r\n const validatePhaseNum = (newPhaseNum: number) => {\r\n const allTasks = gantt.getTaskByTime();\r\n if (allTasks.find((obj: any) => obj.phaseNum === newPhaseNum)) {\r\n gantt.message({ type: 'error', text: 'Phase #' + newPhaseNum + ' already exists' });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n const updatePhaseNum = (newPhaseNum: number, oldPhaseNum: number) => {\r\n const allTasks = gantt.getTaskByTime();\r\n allTasks.forEach((task: any) => {\r\n if (task.phaseFollows === oldPhaseNum) {\r\n task.phaseFollows = newPhaseNum;\r\n gantt.refreshTask(task.id);\r\n }\r\n });\r\n };\r\n\r\n inlineEditors.attachEvent('onBeforeSave', (state: any) => {\r\n // user changes PhaseNum, make sure unique\r\n if (state.columnName === 'phaseNum') {\r\n state.newValue = Number(state.newValue);\r\n state.oldValue = Number(state.oldValue);\r\n if (validatePhaseNum(state.newValue)) {\r\n // valid phase number, update tasks\r\n updatePhaseNum(state.newValue, state.oldValue);\r\n return true;\r\n } else {\r\n // invalid phase number\r\n return false;\r\n }\r\n\r\n // user changes progress, truncate to 2 decimals\r\n } else if (state.columnName === 'progress') {\r\n if (state.newValue > 1 || state.newValue < 0) {\r\n gantt.message({ type: 'error', text: '% must be a decimal between 0 and 1' });\r\n return false;\r\n } else {\r\n state.newValue = Math.round(state.newValue * 100) / 100;\r\n return true;\r\n }\r\n\r\n // user changes phaseFollows, make sure phase exists\r\n } else if (state.columnName === 'phaseFollows') {\r\n const currentTask = gantt.getTask(state.id);\r\n // getTaskBy doesn't work for 'project' type, so rely on Index\r\n toggleRollupMode(true);\r\n gantt.sort('phaseNum');\r\n const sourceTask = gantt.getTaskByIndex(Number(state.newValue) - 1);\r\n // const sourceTask = gantt.getTaskBy('phaseNum', Number(state.newValue))[0];\r\n if (state.newValue === '') {\r\n // valid empty phase follows\r\n state.newValue = null;\r\n return true;\r\n } else if (!sourceTask) {\r\n // invalid phase follows (phase follows does not exist)\r\n gantt.message({ type: 'error', text: 'Phase Follows does not exist' });\r\n return false;\r\n } else if (currentTask.phaseNum === Number(state.newValue)) {\r\n // invalid phase follows (phase follows itself)\r\n gantt.message({ type: 'error', text: 'Phase cannot follow itself' });\r\n return false;\r\n } else if (gantt.isChildOf(currentTask.id, sourceTask.id)) {\r\n // invalid phase follows (child follows its own parent)\r\n gantt.message({ type: 'error', text: 'Child phase cannot follow its own parent' });\r\n return false;\r\n } else {\r\n // valid phase follows\r\n state.newValue = Number(state.newValue);\r\n return true;\r\n }\r\n\r\n // user changes lead/lag, make sure there's a phase follows\r\n } else if (state.columnName === 'phaseFollowsLeadLag') {\r\n const currentTask = gantt.getTask(state.id);\r\n if (currentTask.phaseFollows) {\r\n return true;\r\n } else {\r\n // no phase follows\r\n gantt.message({ type: 'error', text: 'Phase does not follow another' });\r\n return false;\r\n }\r\n\r\n // converts user-input date back to DHTMLX format\r\n } else if (state.columnName === 'start_date' || state.columnName === 'end_date') {\r\n // if user inputs 2-digit year, fix to 4-digit year\r\n const inputStr: string = state.newValue;\r\n const sepPosition: number = inputStr.length - 3;\r\n const numSlash: number = inputStr.split('/').length - 1;\r\n const numDash: number = inputStr.split('-').length - 1;\r\n let adjStr: string;\r\n if (numSlash === 1 || numDash === 1) {\r\n // user inputs only day/month, add current year\r\n adjStr = inputStr + '/' + new Date().getFullYear();\r\n } else if (inputStr.charAt(sepPosition) === '/' || inputStr.charAt(sepPosition) === '-') {\r\n // user inputs 2-digit year, make 20YY (4-digit year)\r\n adjStr = inputStr.slice(0, sepPosition + 1) + '20' + inputStr.slice(-2);\r\n } else {\r\n // user inputs 4-digit year, leave as is\r\n adjStr = inputStr;\r\n }\r\n // this requires the 4-digit year format, returns date or 'Invalid Date'\r\n state.newValue = gantt.date.str_to_date('%m/%d/%Y')(adjStr);\r\n // eslint-disable-next-line\r\n if (state.newValue != 'Invalid Date') {\r\n return true;\r\n } else {\r\n gantt.message({ type: 'error', text: 'Invalid date' });\r\n return false;\r\n }\r\n\r\n // no other columns to check\r\n } else {\r\n return true;\r\n }\r\n });\r\n\r\n inlineEditors.attachEvent('onSave', (state: any) => {\r\n const taskEdited = gantt.getTask(state.id);\r\n\r\n if (state.oldValue !== state.newValue) {\r\n if (state.columnName === 'phaseNum') {\r\n gantt.sort('phaseNum');\r\n }\r\n\r\n // update any children tasks to new PDC code\r\n if (state.columnName === 'rollupPhaseCode') {\r\n gantt.eachTask(function(task: any) {\r\n task.rollupPhaseCode = taskEdited.rollupPhaseCode;\r\n gantt.updateTask(task.id);\r\n }, taskEdited.id);\r\n }\r\n\r\n // update task duration to match user input duration qty/unit\r\n if (state.columnName === 'durationQuantity' || state.columnName === 'durationUnitType') {\r\n const taskDurQty = Number(taskEdited.durationQuantity);\r\n const taskDurUnit = taskEdited.durationUnitType;\r\n if (taskDurUnit === 'days') {\r\n taskEdited.duration = taskDurQty;\r\n } else if (taskDurUnit === 'weeks') {\r\n const newEndDate = gantt.date.add(taskEdited.start_date, taskDurQty, 'week');\r\n taskEdited.duration = Number(gantt.calculateDuration(taskEdited.start_date, newEndDate));\r\n } else if (taskDurUnit === 'months') {\r\n const newEndDate = gantt.date.add(taskEdited.start_date, taskDurQty, 'month');\r\n taskEdited.duration = Number(gantt.calculateDuration(taskEdited.start_date, newEndDate));\r\n } else if (taskDurUnit === 'wkdays') {\r\n taskEdited.duration = (7 * Math.trunc(taskDurQty / 5)) + taskDurQty % 5;\r\n }\r\n taskEdited.end_date = gantt.calculateEndDate(taskEdited);\r\n if (autoCheckbox.checked) {\r\n gantt.autoSchedule(taskEdited.id);\r\n } else {\r\n updateLinksLag(taskEdited.$source);\r\n }\r\n gantt.refreshTask(taskEdited.id);\r\n\r\n // update link to match user input phase follows\r\n } else if (state.columnName === 'phaseFollows') {\r\n const targetLinks = taskEdited.$target;\r\n // getTaskBy doesn't work for 'project' type, so rely on Index (already sorted/open here)\r\n const sourceTask = gantt.getTaskByIndex(Number(taskEdited.phaseFollows) - 1);\r\n // const sourceTask = gantt.getTaskBy('phaseNum', taskEdited.phaseFollows)[0];\r\n if (state.newValue && targetLinks.length === 0) {\r\n // no previous phaseFollows --> add a new link\r\n const newLink: number = gantt.addLink({\r\n source: sourceTask.id,\r\n target: taskEdited.id,\r\n type: '0',\r\n lag: 0,\r\n });\r\n // if new link couldn't be created, revert phaseFollows and display circular error\r\n if (!newLink) {\r\n gantt.message({ type: 'error', text: 'Circular schedule, Phase Follows reverted' });\r\n taskEdited.phaseFollows = state.oldValue;\r\n }\r\n } else if (!state.newValue && targetLinks.length > 0) {\r\n // cleared out phaseFollows --> delete the link\r\n gantt.deleteLink(gantt.getLink(targetLinks[0]).id);\r\n } else {\r\n // changed phaseFollows --> change the link\r\n const linkEdited = gantt.getLink(targetLinks[0]);\r\n const oldSource: number = Number(linkEdited.source);\r\n linkEdited.source = sourceTask.id;\r\n // if link is circular, revert link and phaseFollows and display circular error\r\n const circularFlag: boolean = gantt.isCircularLink(linkEdited);\r\n if (circularFlag) {\r\n gantt.message({ type: 'error', text: 'Circular schedule, Phase Follows reverted' });\r\n linkEdited.source = oldSource;\r\n taskEdited.phaseFollows = state.oldValue;\r\n }\r\n }\r\n if (autoCheckbox.checked) {\r\n if (state.newValue) {\r\n // only auto-schedule if phaseFollows exists\r\n gantt.autoSchedule(sourceTask.id);\r\n // project type won't update with auto-schedule, force refresh\r\n gantt.refreshTask(taskEdited.id);\r\n }\r\n } else {\r\n updateLinksLag(taskEdited.$target);\r\n }\r\n\r\n // update lag of link to match user input lead/lag\r\n } else if (state.columnName === 'phaseFollowsLeadLag') {\r\n const taskLeadLag = taskEdited.phaseFollowsLeadLag.trim().toLowerCase();\r\n const daysLag = parseInt(taskLeadLag, 10);\r\n const targetLinks = taskEdited.$target;\r\n // update target link (assumes 1 max, v9 assumption)\r\n const linkEdited = gantt.getLink(targetLinks[0]);\r\n if (daysLag) {\r\n if (taskLeadLag.indexOf('d') >= 0) {\r\n linkEdited.lag = daysLag;\r\n } else if (taskLeadLag.indexOf('w') >= 0) {\r\n linkEdited.lag = daysLag * 7;\r\n } else if (taskLeadLag.indexOf('m') >= 0) {\r\n linkEdited.lag = Math.round(daysLag * 30);\r\n } else if (taskLeadLag.indexOf('y') >= 0) {\r\n linkEdited.lag = daysLag * 365;\r\n }\r\n } else {\r\n linkEdited.lag = 0;\r\n }\r\n // getTaskBy doesn't work for 'project' type, so rely on Index\r\n toggleRollupMode(true);\r\n gantt.sort('phaseNum');\r\n const followsTask = gantt.getTaskByIndex(Number(taskEdited.phaseFollows) - 1);\r\n // const followsTask = gantt.getTaskBy('phaseNum', taskEdited.phaseFollows)[0];\r\n gantt.autoSchedule(followsTask.id);\r\n\r\n // update task links for new start/end dates\r\n } else if (state.columnName === 'start_date' || state.columnName === 'end_date') {\r\n if (autoCheckbox.checked && state.columnName === 'start_date') {\r\n if (taskEdited.start_date.getTime() !== state.oldValue.getTime()) {\r\n updateLinksLag(taskEdited.$target);\r\n gantt.autoSchedule(taskEdited.id);\r\n }\r\n } else if (autoCheckbox.checked && state.columnName === 'end_date') {\r\n if (taskEdited.end_date.getTime() !== state.oldValue.getTime()) {\r\n taskEdited.durationQuantity = taskEdited.duration;\r\n taskEdited.durationUnitType = 'days';\r\n gantt.autoSchedule(taskEdited.id);\r\n }\r\n } else {\r\n updateLinksLag(taskEdited.$source);\r\n updateLinksLag(taskEdited.$target);\r\n }\r\n }\r\n }\r\n });\r\n\r\n const updateLinksLag = (taskLinks: number[]) => {\r\n taskLinks.forEach((item: number) => {\r\n const link = gantt.getLink(item);\r\n const sourceTask = gantt.getTask(link.source);\r\n const targetTask = gantt.getTask(link.target);\r\n const newLag: number = gantt.calculateDuration(sourceTask.end_date, targetTask.start_date);\r\n link.lag = newLag;\r\n targetTask.phaseFollowsLeadLag = printLeadLag(newLag);\r\n });\r\n gantt.refreshData();\r\n };\r\n\r\n const printLeadLag = (lagDays: number) => {\r\n if (lagDays > 0) {\r\n return '+' + lagDays + 'd';\r\n } else if (lagDays < 0) {\r\n return lagDays + 'd';\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n // restrict tasks to have only 1 link into them (v9 assumption)\r\n gantt.attachEvent('onBeforeLinkAdd', (id: number, link: any) => {\r\n // console.log('TRIGGER onBeforeLinkAdd');\r\n const types: any = gantt.config.links;\r\n if (link.type === types.finish_to_finish || link.type === types.start_to_finish || link.type === types.start_to_start) {\r\n gantt.message({ type: 'error', text: 'Can only make finish-to-start links' });\r\n return false;\r\n }\r\n const targetTask: any = gantt.getTask(link.target);\r\n if (targetTask.$target.length > 0) {\r\n gantt.message({ type: 'error', text: targetTask.text + ' already has a phase follows' });\r\n return false;\r\n }\r\n if (targetTask.type === 'project') {\r\n gantt.message({ type: 'error', text: 'Cannot follow a parent phase' });\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n // make sure phaseFollows is added to target task (if user creates link by dragging on schedule)\r\n gantt.attachEvent('onAfterLinkAdd', (id: number, item: any) => {\r\n // console.log('TRIGGER onAfterLinkAdd');\r\n const sourceTask = gantt.getTask(item.source);\r\n const targetTask = gantt.getTask(item.target);\r\n targetTask.phaseFollows = sourceTask.phaseNum;\r\n targetTask.phaseFollowsLeadLag = printLeadLag(item.lag);\r\n updateLinksLag([id]);\r\n });\r\n\r\n gantt.attachEvent('onAfterLinkDelete', (id: number, item: any) => {\r\n // console.log('TRIGGER onAfterLinkDelete');\r\n const targetTask = gantt.getTask(item.target);\r\n targetTask.phaseFollows = null;\r\n targetTask.phaseFollowsLeadLag = '';\r\n gantt.refreshTask(targetTask.id);\r\n });\r\n\r\n gantt.attachEvent('onAfterTaskDrag', (id: number, mode: string, e: any) => {\r\n // console.log('TRIGGER onAfterTaskDrag');\r\n const taskDragged = gantt.getTask(id);\r\n if (mode === 'progress') {\r\n taskDragged.progress = Math.round(taskDragged.progress * 100) / 100;\r\n gantt.refreshTask(taskDragged.id);\r\n } else {\r\n if (mode === 'resize') {\r\n taskDragged.durationUnitType = 'days';\r\n taskDragged.durationQuantity = taskDragged.duration;\r\n }\r\n if (autoCheckbox.checked) {\r\n // console.log('move with auto schedule ON');\r\n const taskDraggedLinks: number[] = taskDragged.$target;\r\n updateLinksLag(taskDraggedLinks);\r\n gantt.autoSchedule(taskDragged.id);\r\n } else {\r\n // console.log('move with auto schedule OFF');\r\n const taskDraggedLinks: number[] = taskDragged.$source.concat(taskDragged.$target);\r\n updateLinksLag(taskDraggedLinks);\r\n }\r\n }\r\n });\r\n\r\n const swapPhaseType = (clearPhase: any, populatePhase: any) => {\r\n // move data from clearPhase to populatePhase\r\n populatePhase.durationQuantity = Number(clearPhase.durationQuantity);\r\n populatePhase.durationUnitType = String(clearPhase.durationUnitType);\r\n populatePhase.phaseFollows = Number(clearPhase.phaseFollows);\r\n populatePhase.phaseFollowsLeadLag = String(clearPhase.phaseFollowsLeadLag);\r\n clearPhase.useChildrenDatesFlag = null;\r\n // blank data in clearPhase (since now either a project type or will get deleted)\r\n clearPhase.durationQuantity = '';\r\n clearPhase.durationUnitType = '';\r\n clearPhase.phaseFollows = '';\r\n clearPhase.phaseFollowsLeadLag = '';\r\n clearPhase.useChildrenDatesFlag = 1;\r\n };\r\n\r\n const swapLinks = (phaseToID: any, phaseFromID: any) => {\r\n const phaseTo: any = gantt.getTask(phaseToID);\r\n const phaseFrom: any = gantt.getTask(phaseFromID);\r\n const targetLinks: number[] = phaseFrom.$target;\r\n if (targetLinks.length > 0) {\r\n targetLinks.forEach((linkID: number) => {\r\n const link = gantt.getLink(linkID);\r\n link.target = phaseTo.id;\r\n gantt.updateLink(linkID);\r\n });\r\n }\r\n const sourceLinks: number[] = phaseFrom.$source;\r\n if (sourceLinks.length > 0) {\r\n sourceLinks.forEach((linkID: number) => {\r\n const link = gantt.getLink(linkID);\r\n link.source = phaseTo.id;\r\n gantt.updateLink(linkID);\r\n const targetTask: any = gantt.getTask(link.target);\r\n targetTask.phaseFollows = phaseTo.phaseNum;\r\n gantt.updateTask(targetTask.id);\r\n });\r\n }\r\n // gantt.refreshData();\r\n };\r\n\r\n let createdPhase: any = Object();\r\n // turn off lightbox for + button\r\n gantt.config.details_on_create = false;\r\n // turn off lightbox for double click\r\n gantt.config.details_on_dblclick = false;\r\n\r\n // confirm delete when double clicking on a link\r\n gantt.attachEvent('onLinkDblClick', (id: number, e: any) => {\r\n if (this.editMode) {\r\n const currentLink = gantt.getLink(id);\r\n const sourceTask = gantt.getTask(currentLink.source);\r\n const targetTask = gantt.getTask(currentLink.target);\r\n const descriptor: string = sourceTask.text + ' \\u2192 ' + targetTask.text;\r\n gantt.confirm({\r\n text: 'Link ' + descriptor.bold() + ' will be deleted. Are you sure?',\r\n ok: 'Delete',\r\n cancel: 'Cancel',\r\n callback: (result: boolean) => { if (result) { gantt.deleteLink(id); } },\r\n });\r\n }\r\n return false;\r\n });\r\n\r\n gantt.attachEvent('onTaskCreated', (task: any) => {\r\n // console.log('TRIGGER onTaskCreated');\r\n const formatDate = gantt.date.date_to_str('%m/%d/%Y');\r\n const parentID: number = Number(task.parent);\r\n let newPhaseNum: number;\r\n\r\n // make sure project ID is set\r\n task.projectId = this.projectId;\r\n\r\n // task is created from another task + button (so task has parent)\r\n if (parentID) {\r\n const parentTask = gantt.getTask(parentID);\r\n task.parent = parentID;\r\n task.rollupPhaseCode = parentTask.rollupPhaseCode;\r\n if (parentTask.type !== 'project') {\r\n // parent task IS NOT already a project\r\n task.start_date = parentTask.start_date;\r\n task.end_date = parentTask.end_date;\r\n task.progress = parentTask.progress;\r\n parentTask.type = 'project';\r\n swapPhaseType(parentTask, task);\r\n // save information to createdPhase object for onAfterTaskAdd\r\n createdPhase.linkAction = 'swap';\r\n createdPhase.relatedPhaseID = parentTask.id;\r\n } else {\r\n // parent task IS already a project\r\n const projectDates = gantt.getSubtaskDates(parentID);\r\n task.start_date = formatDate(projectDates.end_date);\r\n // get last subtask of a project\r\n const lastChildTask: any = gantt.getTaskBy('end_date', projectDates.end_date)[0];\r\n task.phaseFollows = lastChildTask.phaseNum;\r\n // set default duration fields\r\n if (task.type !== 'milestone') {\r\n task.durationQuantity = Number(1);\r\n task.durationUnitType = 'months';\r\n task.end_date = gantt.date.add(task.start_date, 1, 'month');\r\n }\r\n // save information to createdPhase object for onAfterTaskAdd\r\n createdPhase.relatedPhaseID = lastChildTask.id;\r\n createdPhase.linkAction = 'expand';\r\n }\r\n // set phase number & increment the following phases\r\n const numChildren: number = gantt.getChildren(parentID).length;\r\n newPhaseNum = parentTask.phaseNum + numChildren + 1;\r\n renumberPhases(newPhaseNum, 'add');\r\n\r\n // task is created from top + button, put task at end\r\n } else {\r\n const taskCount: number = gantt.getTaskCount();\r\n newPhaseNum = taskCount + 1;\r\n if (taskCount > 0) {\r\n toggleRollupMode(true);\r\n gantt.sort('phaseNum');\r\n const lastTask = gantt.getTaskByIndex(taskCount - 1);\r\n task.start_date = formatDate(lastTask.end_date);\r\n task.rollupPhaseCode = lastTask.rollupPhaseCode;\r\n // save information to createdPhase object for onAfterTaskAdd\r\n createdPhase.relatedPhaseID = lastTask.id;\r\n createdPhase.linkAction = 'last';\r\n } else {\r\n // first task in schedule\r\n task.rollupPhaseCode = 'P';\r\n task.phaseStartInput = formatDate(task.start_date);\r\n // save information to createdPhase object for onAfterTaskAdd\r\n createdPhase.linkAction = 'only';\r\n }\r\n // set default fields\r\n if (task.type !== 'milestone') {\r\n task.durationQuantity = Number(1);\r\n task.durationUnitType = 'months';\r\n task.end_date = gantt.date.add(task.start_date, 1, 'month');\r\n }\r\n task.phaseFollows = '';\r\n task.phaseFollowsLeadLag = '';\r\n }\r\n\r\n // set phase number\r\n createdPhase.newPhase = task.id;\r\n task.phaseNum = newPhaseNum;\r\n task.text = 'New phase';\r\n return true;\r\n });\r\n\r\n // makes a list of added tasks for creating via API when user saves\r\n gantt.attachEvent('onAfterTaskAdd', (id: number, item: any) => {\r\n // console.log('TRIGGER onAfterTaskAdd');\r\n gantt.sort('phaseNum');\r\n item.phaseNum = Number(item.phaseNum);\r\n item.parent = Number(item.parent);\r\n this.addedTasks.push(id);\r\n\r\n // if inserting a phase between others, expand links\r\n if (createdPhase.linkAction === 'expand') {\r\n const relatedTask = gantt.getTask(createdPhase.relatedPhaseID);\r\n const sourceLinks: number[] = relatedTask.$source;\r\n // move source links to start on new phase\r\n sourceLinks.forEach((linkID: number) => {\r\n const link: any = gantt.getLink(linkID);\r\n link.source = id;\r\n gantt.updateLink(linkID);\r\n const targetTask: any = gantt.getTask(link.target);\r\n targetTask.phaseFollows = item.phaseNum;\r\n });\r\n // also need to create link previous & new phase\r\n gantt.addLink({\r\n source: createdPhase.relatedPhaseID,\r\n target: id,\r\n type: '0',\r\n lag: 0\r\n });\r\n gantt.autoSchedule(id);\r\n\r\n // if first child phase, swap links between parent/child\r\n } else if (createdPhase.linkAction === 'swap') {\r\n swapLinks(id, createdPhase.relatedPhaseID);\r\n\r\n // phase added to end, just create link from the previous last phase to it\r\n } else if (createdPhase.linkAction === 'last') {\r\n gantt.addLink({\r\n source: createdPhase.relatedPhaseID,\r\n target: id,\r\n type: '0',\r\n lag: 0\r\n });\r\n }\r\n\r\n // blank out the createdPhase object for next time\r\n createdPhase = Object();\r\n });\r\n\r\n const renumberPhases = (phaseStartNum: number, mode: string) => {\r\n const allTasks = gantt.getTaskByTime();\r\n allTasks.forEach((task: any) => {\r\n if (mode === 'add') {\r\n if (task.phaseNum >= phaseStartNum) { ++task.phaseNum; }\r\n if (task.phaseFollows && task.phaseFollows >= phaseStartNum) { ++task.phaseFollows; }\r\n } else {\r\n if (task.phaseNum >= phaseStartNum) { --task.phaseNum; }\r\n if (task.phaseFollows && task.phaseFollows >= phaseStartNum) { --task.phaseFollows; }\r\n // if (task.phaseFollows >= phaseStartNum) { --task.phaseFollows; }\r\n }\r\n });\r\n };\r\n\r\n gantt.attachEvent('onBeforeTaskDelete', (id: number, item: any) => {\r\n // console.log('TRIGGER onBeforeTaskDelete');\r\n const delTask = gantt.getTask(id);\r\n if (item.type === 'project') {\r\n // PROJECT\r\n const childTasks: number[] = gantt.getChildren(delTask.id);\r\n if (childTasks.length > 0) {\r\n // if has children, keep children by removing their parent\r\n childTasks.forEach((taskID: number) => {\r\n const task = gantt.getTask(taskID);\r\n task.parent = 0;\r\n });\r\n gantt.refreshData();\r\n // delete parent separately and return false (so links associated with children don't also get deleted)\r\n gantt.deleteTask(delTask.id);\r\n gantt.sort('phaseNum');\r\n return false;\r\n } else {\r\n // if no children, renumber phases & delete\r\n renumberPhases(delTask.phaseNum, 'subtract');\r\n return true;\r\n }\r\n } else {\r\n // TASK\r\n const source: number[] = delTask.$source;\r\n const target: number[] = delTask.$target;\r\n // redraw links (from phase before deleted task to phase after deleted task)\r\n if (source.length > 0) {\r\n source.forEach((linkID: number) => {\r\n const sourceLink = gantt.getLink(linkID);\r\n gantt.deleteLink(linkID);\r\n const relTask = gantt.getTask(sourceLink.target);\r\n relTask.start_date = delTask.start_date;\r\n relTask.end_date = gantt.calculateEndDate(relTask);\r\n relTask.phaseStartInput = delTask.phaseStartInput;\r\n relTask.phaseFollows = delTask.phaseFollows;\r\n if (target.length > 0) {\r\n const targetLink = gantt.getLink(target[0]);\r\n gantt.addLink({\r\n source: targetLink.source,\r\n target: sourceLink.target,\r\n type: '0',\r\n lag: targetLink.lag,\r\n });\r\n }\r\n });\r\n gantt.autoSchedule();\r\n }\r\n }\r\n renumberPhases(delTask.phaseNum, 'subtract');\r\n return true;\r\n });\r\n\r\n // makes a list of deleted tasks for deleting via API when user saves\r\n gantt.attachEvent('onAfterTaskDelete', (id: number, item: any) => {\r\n // console.log('TRIGGER onAfterTaskDelete');\r\n const taskAddedCheck: number = this.addedTasks.indexOf(id);\r\n if (taskAddedCheck !== -1) {\r\n // if task was created in this session, just remove from the addedTasks list\r\n this.addedTasks.splice(taskAddedCheck, 1);\r\n } else {\r\n // add deleted task to the deletedTasks list (to delete in FM via API on save)\r\n this.deletedTasks.push(item.fmRecordId!);\r\n }\r\n const allTasks = gantt.getTaskByTime();\r\n allTasks.forEach((task: any) => {\r\n if (task.type === 'project' && gantt.getChildren(task.id) < 1) { gantt.deleteTask(task.id); }\r\n });\r\n });\r\n\r\n gantt.config.layout = {\r\n css: 'gantt_container',\r\n cols: [\r\n {\r\n width: 740,\r\n rows: [\r\n { view: 'grid', scrollX: 'gridScroll', scrollable: true, scrollY: 'scrollVer' },\r\n { view: 'scrollbar', id: 'gridScroll', group: 'horizontal' },\r\n ],\r\n },\r\n // { resizer: true, width: 1 },\r\n {\r\n rows: [\r\n { view: 'timeline', scrollX: 'scrollHor', scrollY: 'scrollVer' },\r\n { view: 'scrollbar', id: 'scrollHor', group: 'horizontal' },\r\n ],\r\n },\r\n { view: 'scrollbar', id: 'scrollVer' },\r\n ],\r\n };\r\n\r\n const delColumn = (task: any) => {\r\n return (\r\n ''\r\n );\r\n };\r\n const addColumn = (task: any) => {\r\n return (\r\n ''\r\n );\r\n };\r\n\r\n gantt.$clickGridButton = (id: number, action: string) => {\r\n switch (action) {\r\n case 'add':\r\n gantt.createTask(null, id);\r\n break;\r\n case 'delete':\r\n const triggerTask = gantt.getTask(id);\r\n gantt.confirm({\r\n text: 'Phase ' + triggerTask.text.bold() + ' will be deleted. Are you sure?',\r\n ok: 'Delete',\r\n cancel: 'Cancel',\r\n callback: (result: boolean) => { if (result) { gantt.deleteTask(id); } },\r\n });\r\n break;\r\n }\r\n };\r\n\r\n const addLabel = '';\r\n\r\n // configures visible columns on left grid panel\r\n gantt.config.columns = [\r\n { name: 'add_col', label: addLabel, width: 35, hide: true, template: addColumn },\r\n { name: 'phaseNum', label: '#', width: 90, tree: true, align: 'left', editor: numEditor },\r\n { name: 'text', label: 'Phase Name', width: 195, resize: true, editor: textEditor },\r\n { name: 'rollupPhaseCode', label: 'PDC', width: 40, align: 'center', resize: true, editor: pdcEditor },\r\n // {name:'progress', label: '%', width: 35, align: 'center', resize: true, template(obj: any) {return Math.round(obj.progress * 100); }, editor: progressEditor},\r\n { name: 'progress', label: '%', width: 35, align: 'center', resize: true, template(obj: any) { if (obj.type === 'milestone') { return ''; } else { return obj.progress; } }, editor: progressEditor },\r\n { name: 'start_date', label: 'Start Date', width: 80, align: 'center', resize: true, editor: startDateEditor },\r\n { name: 'phaseFollows', label: 'Follows', width: 45, align: 'center', resize: true, template(obj: any) { if (obj.phaseFollows) { return obj.phaseFollows; } else { return ''; } }, editor: phaseFollowsEditor },\r\n { name: 'phaseFollowsLeadLag', label: 'Lead/Lag', width: 60, align: 'center', resize: true, editor: leadLagEditor },\r\n { name: 'durationQuantity', label: 'Dur #', width: 45, align: 'right', resize: true, template(obj: any) { if (obj.durationQuantity) { return obj.durationQuantity; } else { return ''; } }, editor: durationQtyEditor },\r\n // {name: 'durationQuantity', label: 'Dur #', width: 45, min_width: 45, max_width: 75, align: 'right', resize: true, editor: durationQtyEditor},\r\n { name: 'durationUnitType', label: 'Dur Unit', width: 70, align: 'center', resize: true, editor: durationUnitEditor },\r\n // {name: 'duration', label: 'Days', width: 45, min_width: 45, max_width: 75, align: 'right', resize: true, editor: durationEditor},\r\n { name: 'end_date', label: 'End Date', width: 80, align: 'center', resize: true, editor: endDateEditor },\r\n // { name: 'add', label: '', width: 35, hide: true },\r\n { name: 'delete_col', label: '', width: 35, hide: true, template: delColumn }\r\n ];\r\n\r\n // gantt.config.keep_grid_width = true;\r\n // empty placeholder task\r\n // gantt.config.placeholder_task = true;\r\n\r\n // configure lables for edit box\r\n gantt.locale.labels.section_phaseNum = 'Phase #';\r\n gantt.locale.labels.section_phaseName = 'Phase Name';\r\n gantt.locale.labels.section_rollupPhaseCode = 'PDC';\r\n gantt.locale.labels.section_time = 'Time Period';\r\n gantt.locale.labels.section_dates = 'Duration';\r\n gantt.locale.labels.section_leadLag = 'Lead/Lag';\r\n\r\n // formats dates on left grid panel to MM/DD/YYYY\r\n gantt.config.date_grid = '%m/%d/%Y';\r\n\r\n // configure auto-scheduling\r\n gantt.config.auto_scheduling_initial = false;\r\n gantt.config.auto_scheduling_strict = true;\r\n const autoCheckbox = document.getElementById('autoToggle') as HTMLInputElement;\r\n autoCheckbox.onchange = () => {\r\n if (autoCheckbox.checked) {\r\n gantt.config.auto_scheduling_strict = true;\r\n } else {\r\n gantt.config.auto_scheduling_strict = false;\r\n }\r\n };\r\n\r\n // user-definable scales\r\n const setScaleConfig = (level: string) => {\r\n switch (level) {\r\n case 'month+year':\r\n gantt.config.scales = [\r\n { unit: 'year', step: 1, format: '%Y', },\r\n { unit: 'month', step: 1, format: '%M', }\r\n ];\r\n gantt.config.min_column_width = 35;\r\n break;\r\n case 'month+quarter':\r\n gantt.config.scales = [\r\n { unit: 'quarter', step: 1, format: quarterScaleTemplate, },\r\n { unit: 'month', step: 1, format: '%M', }\r\n ];\r\n gantt.config.min_column_width = 50;\r\n break;\r\n case 'week+month':\r\n gantt.config.scales = [\r\n { unit: 'month', step: 1, format: '%F %Y', },\r\n { unit: 'week', step: 1, format: 'Week #%W', }\r\n ];\r\n gantt.config.min_column_width = 70;\r\n break;\r\n case 'day+month':\r\n gantt.config.scales = [\r\n { unit: 'month', step: 1, format: '%F %Y', },\r\n { unit: 'day', step: 1, format: '%j', }\r\n ];\r\n gantt.config.min_column_width = 25;\r\n break;\r\n case 'day+week':\r\n gantt.config.scales = [\r\n { unit: 'week', step: 1, format: weekScaleTemplate, },\r\n { unit: 'day', step: 1, format: '%j %D', }\r\n ];\r\n gantt.config.min_column_width = 50;\r\n break;\r\n }\r\n };\r\n\r\n const quarterScaleTemplate = (date: any) => {\r\n const dateToStr = gantt.date.date_to_str('%M');\r\n const yearStr = gantt.date.date_to_str('%Y');\r\n const endDate: any = gantt.date.add(gantt.date.add(date, 3, 'month'), -1, 'day');\r\n return dateToStr(date) + ' - ' + dateToStr(endDate) + ', ' + yearStr(date);\r\n };\r\n\r\n const weekScaleTemplate = (date: any) => {\r\n const dateToStr = gantt.date.date_to_str('%d %M');\r\n const endDate: any = gantt.date.add(date, 6, 'day');\r\n return dateToStr(date) + ' - ' + dateToStr(endDate);\r\n };\r\n\r\n const scaleSelect = document.getElementById('scaleSelect') as HTMLSelectElement;\r\n scaleSelect.onchange = () => {\r\n const value: string = scaleSelect.value;\r\n setScaleConfig(value);\r\n gantt.render();\r\n };\r\n\r\n gantt.config.fit_tasks = true;\r\n gantt.config.scale_height = 65;\r\n\r\n gantt.config.row_height = 45;\r\n gantt.config.round_dnd_dates = false;\r\n\r\n // sets marker for current date\r\n const todayMarker = gantt.addMarker({\r\n start_date: new Date(),\r\n css: 'today',\r\n text: 'Today',\r\n });\r\n\r\n // display title of milestone on the graph\r\n gantt.templates.rightside_text = (start: string, end: string, task: any) => {\r\n if (task.type === gantt.config.types.milestone) {\r\n return task.text;\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n // formats how dates appear in the tooltip\r\n gantt.templates.tooltip_date_format = (date: string) => {\r\n const formatFunc = gantt.date.date_to_str('%m/%d/%Y');\r\n return formatFunc(date);\r\n };\r\n\r\n // specifies the content of the task tooltip\r\n gantt.templates.tooltip_text = (start: string, end: string, task: any) => {\r\n if (mouseOnGrid) return '' + task.text + ' ' + '
Start: ' + gantt.templates.tooltip_date_format(start) + '
End: ' + gantt.templates.tooltip_date_format(end) + '
Progress: ' + Math.round(task.progress * 100) + '%';\r\n };\r\n\r\n // disable tooltips on grid except for the add/delete columns\r\n let mouseOnGrid: boolean = false;\r\n gantt.attachEvent('onMouseMove', (id: number, e: MouseEvent) => {\r\n const eTarget: any = e.target!;\r\n if (e.clientX >= gantt.config.grid_width || eTarget.className === 'fa gantt_button_grid gantt_grid_add fa-plus' || eTarget.className === 'fa gantt_button_grid gantt_grid_delete fa-times' || eTarget.className === 'fa gantt_grid_head_text gantt_grid_add fa-plus') {\r\n mouseOnGrid = true;\r\n } else { mouseOnGrid = false; }\r\n });\r\n\r\n // create custom tooltips for the add/delete columns\r\n gantt.attachEvent('onGanttReady', () => {\r\n const tooltips = gantt.ext.tooltips;\r\n // tooltip for + button on header\r\n tooltips.tooltipFor({\r\n selector: '.fa.gantt_grid_head_text.gantt_grid_add.fa-plus',\r\n html: (event: MouseEvent, node: HTMLElement) => {\r\n return 'New phase';\r\n },\r\n });\r\n // tooltip for + buttons on phases\r\n tooltips.tooltipFor({\r\n selector: '.fa.gantt_button_grid.gantt_grid_add.fa-plus',\r\n html: (event: MouseEvent, node: HTMLElement) => {\r\n const targetTaskID = gantt.locate(event);\r\n if (gantt.isTaskExists(targetTaskID)) {\r\n const targetTask = gantt.getTask(targetTaskID);\r\n return 'New child phase for ' + targetTask.text + '';\r\n } else { return null; }\r\n },\r\n });\r\n // tooltip for x button on phases\r\n tooltips.tooltipFor({\r\n selector: '.fa.gantt_button_grid.gantt_grid_delete.fa-times',\r\n html: (event: MouseEvent, node: HTMLElement) => {\r\n const targetTaskID = gantt.locate(event);\r\n if (gantt.isTaskExists(targetTaskID)) {\r\n const targetTask = gantt.getTask(targetTaskID);\r\n return 'Delete phase ' + targetTask.phaseNum + ' ' + targetTask.text + '';\r\n } else { return null; }\r\n },\r\n });\r\n });\r\n\r\n // baseline\r\n gantt.attachEvent('onTaskLoading', (task: any) => {\r\n task.baselineStart = gantt.date.parseDate(task.baselineStart, 'xml_date');\r\n task.baselineEnd = gantt.date.parseDate(task.baselineEnd, 'xml_date');\r\n return true;\r\n });\r\n const baselineCheckbox = document.getElementById('baselineToggle') as HTMLInputElement;\r\n gantt.addTaskLayer((task: any) => {\r\n if (task.baselineStart && task.baselineEnd && baselineCheckbox.checked) {\r\n const sizes = gantt.getTaskPosition(task, task.baselineStart, task.baselineEnd);\r\n const el = document.createElement('div');\r\n el.className = 'baseline';\r\n el.style.left = sizes.left + 'px';\r\n el.style.width = (sizes.width - 1) + 'px';\r\n el.style.top = sizes.top + gantt.config.task_height + 10 + 'px';\r\n return el;\r\n } else {\r\n return false;\r\n }\r\n });\r\n baselineCheckbox.onchange = () => {\r\n if (baselineCheckbox.checked) {\r\n gantt.config.task_height = 25;\r\n } else {\r\n gantt.config.task_height = 'full';\r\n }\r\n gantt.render();\r\n };\r\n\r\n // styling tasks\r\n gantt.templates.task_class = (start: string, end: string, task: any) => {\r\n const taskType = gantt.getTaskType(task);\r\n const taskCSS = 'wiz_' + taskType + '_' + task.rollupPhaseCode;\r\n if (baselineCheckbox.checked) {\r\n return 'wiz_display_baseline ' + taskCSS;\r\n } else {\r\n return taskCSS;\r\n }\r\n };\r\n\r\n // hide + button if task is a child or a milestone\r\n gantt.templates.grid_row_class = (start: string, end: string, task: any) => {\r\n if (task.$level > 0 || task.type === 'milestone') { return 'nested_task'; } else { return ''; }\r\n };\r\n\r\n // styling links if baseline displayed\r\n gantt.templates.link_class = (link: any) => {\r\n if (baselineCheckbox.checked) {\r\n return 'wiz_display_baseline';\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n // specify text of tooltip when dragging to create link\r\n gantt.templates.drag_link = (from: number, fromStart: boolean, to: number, toStart: boolean) => {\r\n const source: any = gantt.getTask(from);\r\n let text: string = 'From: ' + source.text + '
';\r\n if (to) {\r\n const target = gantt.getTask(to);\r\n text += 'To: ' + target.text + '
';\r\n }\r\n return text;\r\n };\r\n\r\n setScaleConfig('month+year');\r\n gantt.init('gantt_PROJECT');\r\n gantt.parse(tasks);\r\n\r\n // MUST BE AFTER INIT/PARSE\r\n // sort rows by phase num\r\n gantt.sort('phaseNum');\r\n\r\n // MUST BE AFTER INIT/PARSE\r\n const rollupCheckbox = document.getElementById('rollupToggle') as HTMLInputElement;\r\n // user can toggle rollup of tasks to parent level\r\n const toggleRollupMode = (openBool: boolean) => {\r\n gantt.eachTask((task: any) => {\r\n task.$open = openBool;\r\n });\r\n gantt.render();\r\n // make sure checkbox appropriately checked (since can be called in scripting)\r\n // NOTE: checkbox is the inverse...true means open tasks and NOT checked\r\n rollupCheckbox.checked = !openBool;\r\n };\r\n toggleRollupMode(true);\r\n rollupCheckbox.onchange = () => {\r\n if (rollupCheckbox.checked) {\r\n toggleRollupMode(false);\r\n } else {\r\n toggleRollupMode(true);\r\n }\r\n };\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Schedule.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Schedule.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Schedule.vue?vue&type=template&id=d60f2010&\"\nimport script from \"./Schedule.vue?vue&type=script&lang=ts&\"\nexport * from \"./Schedule.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Schedule.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","import _Symbol$iterator from \"../../core-js/symbol/iterator\";\nimport _Symbol from \"../../core-js/symbol\";\n\nfunction _typeof2(obj) { if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nexport default function _typeof(obj) {\n if (typeof _Symbol === \"function\" && _typeof2(_Symbol$iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}","require('./_wks-define')('observable');\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","module.exports = function () { /* empty */ };\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = require('./_hide');\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","module.exports = function(gantt) {\n\treturn {\n\t\tgetVirtualRoot: function(){\n\t\t\treturn gantt.mixin(\n\t\t\t\tgantt.getSubtaskDates(),\n\t\t\t\t{\n\t\t\t\t\tid: gantt.config.root_id,\n\t\t\t\t\ttype: gantt.config.types.project,\n\t\t\t\t\t$source: [],\n\t\t\t\t\t$target: [],\n\t\t\t\t\t$virtual: true\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\n\t\tgetLinkedTasks: function(id, includePredecessors){\n\t\t\tvar startIds = [id];\n\t\n\t\t\t//TODO: format links cache\n\t\t\tvar clearCache = false;\n\t\t\tif(!gantt._isLinksCacheEnabled()) {\n\t\t\t\tgantt._startLinksCache();\n\t\t\t\tclearCache = true;\n\t\t\t}\n\t\t\tvar relations = [];\n\t\t\tvar visited = {};\n\t\t\tvar result = {};\n\t\t\tfor(var i = 0; i < startIds.length; i++){\n\t\t\t\tthis._getLinkedTasks(startIds[i], visited, includePredecessors, result);\n\t\t\t}\n\t\n\t\t\tfor(var i in result){\n\t\t\t\trelations.push(result[i]);\n\t\t\t}\n\t\n\t\t\t//TODO: remove redundant edges before continue https://en.wikipedia.org/wiki/Transitive_reduction\n\t\t\tif(clearCache)\n\t\t\t\tgantt._endLinksCache();\n\t\t\treturn relations;\n\t\t},\n\t\n\t\t_collectRelations: function(rootObj, isChild, includePredecessors, visitedLinks){\n\t\t\tvar successors = gantt._getSuccessors(rootObj, isChild);\n\t\n\t\t\tvar predecessors = [];\n\t\t\tif (includePredecessors) {\n\t\t\t\tpredecessors = gantt._getPredecessors(rootObj, isChild);\n\t\t\t}\n\t\t\t\n\t\t\tvar linkKey;\n\t\t\tvar relations = [];\n\t\t\tfor(var i = 0; i < successors.length; i++){\n\t\t\t\tlinkKey = successors[i].hashSum;\n\t\t\t\tif(visitedLinks[linkKey]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}else{\n\t\t\t\t\tvisitedLinks[linkKey] = true;\n\t\t\t\t\trelations.push(successors[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var i = 0; i < predecessors.length; i++){\n\t\t\t\tlinkKey = predecessors[i].hashSum;\n\t\t\t\tif(visitedLinks[linkKey]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}else{\n\t\t\t\t\tvisitedLinks[linkKey] = true;\n\t\t\t\t\trelations.push(predecessors[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn relations;\n\t\t},\n\t\t_getLinkedTasks: function(rootTask, visitedTasks, includePredecessors, output) {\n\t\t\tvar from = rootTask === undefined ? gantt.config.root_id : rootTask;\n\t\t\tvar visitedTasks = {};\n\t\t\tvar visitedLinks = {};\n\t\t\tvar rootObj;\n\t\n\t\t\tvar tasksStack = [{from: from, includePredecessors: includePredecessors, isChild:false}];\n\t\n\t\t\twhile(tasksStack.length){\n\t\t\t\tvar current = tasksStack.pop();\n\t\t\t\tvar isChild = current.isChild;\n\t\n\t\t\t\tfrom = current.from;\n\t\t\t\tif(visitedTasks[from]){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trootObj = gantt.isTaskExists(from) ? gantt.getTask(from) : this.getVirtualRoot();\n\t\t\t\tvisitedTasks[from] = true;\n\t\t\t\t\n\t\t\t\tvar relations = this._collectRelations(rootObj, isChild, includePredecessors, visitedLinks);\n\t\n\t\t\t\tfor(var i=0; i < relations.length; i++){\n\t\t\t\t\tvar rel = relations[i];\n\t\t\t\t\toutput[rel.hashSum] = rel;\n\t\t\t\t\tvar isSameParent = rel.sourceParent == rel.targetParent;\n\t\t\t\t\tvar targetTask = rel.target;\n\t\t\t\t\tif(!visitedTasks[targetTask])\n\t\t\t\t\t\ttasksStack.push({from: rel.target, includePredecessors: true, isChild: isSameParent});\n\t\t\t\t}\n\t\n\t\t\t\tif(gantt.hasChild(rootObj.id)){\n\t\t\t\t\tvar children = gantt.getChildren(rootObj.id);\n\t\t\t\t\tfor(var i=0; i < children.length; i++){\n\t\t\t\t\t\tif(!visitedTasks[children[i]])\n\t\t\t\t\t\t\ttasksStack.push({from: children[i], includePredecessors: true, isChild: true});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn output;\n\t\t}\n\t};\n};","var units = {\n\t\"second\": 1,\n\t\"minute\": 60,\n\t\"hour\": 60 * 60,\n\t\"day\": 60 * 60 * 24,\n\t\"week\": 60 * 60 * 24 * 7,\n\t\"month\": 60 * 60 * 24 * 30,\n\t\"quarter\": 60 * 60 * 24 * 30 * 3,\n\t\"year\": 60 * 60 * 24 * 365\n};\nfunction getSecondsInUnit(unit){\n\treturn units[unit] || units.hour;\n}\n\nfunction forEach(arr, callback) {\n\tif (arr.forEach) {\n\t\tarr.forEach(callback);\n\t} else {\n\t\tvar workArray = arr.slice();\n\t\tfor (var i = 0; i < workArray.length; i++) {\n\t\t\tcallback(workArray[i], i);\n\t\t}\n\t}\n}\n\nfunction arrayMap(arr, callback) {\n\tif (arr.map) {\n\t\treturn arr.map(callback);\n\t} else {\n\t\tvar workArray = arr.slice();\n\t\tvar resArray = [];\n\n\t\tfor (var i = 0; i < workArray.length; i++) {\n\t\t\tresArray.push(callback(workArray[i], i));\n\t\t}\n\t\treturn resArray;\n\t}\n}\n\n\nfunction arrayFind(arr, callback) {\n\tif (arr.find) {\n\t\treturn arr.find(callback);\n\t} else {\n\t\tfor (var i = 0; i < arr.length; i++) {\n\t\t\tif (callback(arr[i], i)) {\n\t\t\t\treturn arr[i];\n\t\t\t}\n\t\t}\n\t}\n}\n\n// iframe-safe array type check instead of using instanceof\nfunction isArray(obj){\n\tif(Array.isArray){\n\t\treturn Array.isArray(obj);\n\t}else{\n\t\t// close enough\n\t\treturn (obj && obj.length !== undefined && obj.pop && obj.push);\n\t}\n}\n\n// non-primitive string object, e.g. new String(\"abc\")\nfunction isStringObject(obj){\n\treturn obj && typeof obj === \"object\"\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function String() { [native code] }\";\n}\n\n// non-primitive number object, e.g. new Number(5)\nfunction isNumberObject(obj){\n\treturn obj && typeof obj === \"object\"\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Number() { [native code] }\";\n}\n\n// non-primitive number object, e.g. new Boolean(true)\nfunction isBooleanObject(obj){\n\treturn obj && typeof obj === \"object\"\n\t\t&& Function.prototype.toString.call(obj.constructor) === \"function Boolean() { [native code] }\";\n}\n\nfunction isDate(obj) {\n\tif (obj && typeof obj === \"object\") {\n\t\treturn !!(obj.getFullYear && obj.getMonth && obj.getDate);\n\t} else {\n\t\treturn false;\n\t}\n}\n\nfunction arrayFilter(arr, callback) {\n\tvar result = [];\n\n\tif (arr.filter) {\n\t\treturn arr.filter(callback);\n\t} else {\n\t\tfor (var i = 0; i < arr.length; i++) {\n\t\t\tif (callback(arr[i], i)) {\n\t\t\t\tresult[result.length] = arr[i];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\nfunction hashToArray(hash) {\n\tvar result = [];\n\n\tfor (var key in hash) {\n\t\tif (hash.hasOwnProperty(key)) {\n\t\t\tresult.push(hash[key]);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction arraySome(arr, callback) {\n\tif (arr.length === 0) return false;\n\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (callback(arr[i], i, arr)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction arrayDifference(arr, callback) {\n\treturn arrayFilter(arr, function(item, i) {\n\t\treturn !callback(item, i);\n\t});\n}\n\nfunction throttle (callback, timeout) {\n\tvar wait = false;\n\n\treturn function () {\n\t\tif (!wait) {\n\t\t\tcallback.apply(null, arguments);\n\t\t\twait = true;\n\t\t\tsetTimeout(function () {\n\t\t\t\twait = false;\n\t\t\t}, timeout);\n\t\t}\n\t};\n}\n\nfunction delay (callback, timeout){\n\tvar timer;\n\n\tvar result = function() {\n\t\tresult.$cancelTimeout();\n\t\tcallback.$pending = true;\n\t\tvar args = Array.prototype.slice.call(arguments);\n\t\ttimer = setTimeout(function(){\n\t\t\tcallback.apply(this, args);\n\t\t\tresult.$pending = false;\n\t\t}, timeout);\n\t};\n\t\n\tresult.$pending = false;\n\tresult.$cancelTimeout = function(){\n\t\tclearTimeout(timer);\n\t\tcallback.$pending = false;\n\t};\n\tresult.$execute = function(){\n\t\tcallback();\n\t\tcallback.$cancelTimeout();\n\t};\n\n\treturn result;\n}\n\nfunction sortArrayOfHash(arr, field, desc) {\n\tvar compare = function(a, b) {\n\t\treturn a < b;\n\t};\n\n\tarr.sort(function(a, b) {\n\t\tif (a[field] === b[field]) return 0;\n\n\t\treturn desc ? compare(a[field], b[field]) : compare(b[field], a[field]);\n\t});\n}\n\nfunction objectKeys(obj) {\n\tif (Object.keys) {\n\t\treturn Object.keys(obj);\n\t}\n\tvar result = [];\n\tvar key;\n\tfor (key in obj) {\n\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t\t\tresult.push(key);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction requestAnimationFrame(callback) {\n\tvar w = window;\n\tvar foundRequestAnimationFrame = w.requestAnimationFrame\n\t\t|| w.webkitRequestAnimationFrame\n\t\t|| w.msRequestAnimationFrame\n\t\t|| w.mozRequestAnimationFrame\n\t\t|| w.oRequestAnimationFrame\n\t\t|| function(cb) { setTimeout(cb, 1000/60); };\n\treturn foundRequestAnimationFrame(callback);\n}\n\nfunction isEventable(obj) {\n\treturn obj.attachEvent && obj.detachEvent;\n}\n\nmodule.exports = {\n\tgetSecondsInUnit: getSecondsInUnit,\n\tforEach: forEach,\n\tarrayMap: arrayMap,\n\tarrayFind: arrayFind,\n\tarrayFilter: arrayFilter,\n\tarrayDifference: arrayDifference,\n\tarraySome: arraySome,\n\thashToArray: hashToArray,\n\tsortArrayOfHash: sortArrayOfHash,\n\tthrottle: throttle,\n\tisArray: isArray,\n\tisDate: isDate,\n\tisStringObject: isStringObject,\n\tisNumberObject: isNumberObject,\n\tisBooleanObject: isBooleanObject,\n\tdelay: delay,\n\tobjectKeys: objectKeys,\n\trequestAnimationFrame: requestAnimationFrame,\n\tisEventable: isEventable\n};","export enum ConstraintTypes {\n\t// As Soon As Possible (ASAP)\n\tASAP = \"asap\",\n\t// As Late As Possible (ALAP)\n\tALAP = \"alap\",\n\t// Start No Earlier Than (SNET)\n\tSNET = \"snet\",\n\t// Start No Later Than (SNLT)\n\tSNLT = \"snlt\",\n\t// Finish No Earlier Than (FNET)\n\tFNET = \"fnet\",\n\t// Finish No Later Than (FNLT)\n\tFNLT = \"fnlt\",\n\t// Must Start On (MSO)\n\tMSO = \"mso\",\n\t// Must Finish On (MFO)\n\tMFO = \"mfo\"\n}","var helpers = require(\"../../utils/helpers\");\n\nmodule.exports = function(){\n\treturn {\n\t\tgetVertices: function(relations){\n\t\t\tvar ids = {};\n\t\t\tvar rel;\n\t\t\tfor(var i = 0, len = relations.length; i < len; i++){\n\t\t\t\trel = relations[i];\n\t\t\t\tids[rel.target] = rel.target;\n\t\t\t\tids[rel.source] = rel.source;\n\t\t\t}\n\n\t\t\tvar vertices = [];\n\t\t\tvar id;\n\t\t\tfor(var i in ids){\n\t\t\t\tid = ids[i];\n\t\t\t\tvertices.push(id);\n\t\t\t}\n\n\t\t\treturn vertices;\n\t\t},\n\t\ttopologicalSort: function(edges){\n\t\t\tvar vertices = this.getVertices(edges);\n\t\t\tvar hash = {};\n\n\t\t\tfor(var i = 0, len = vertices.length; i < len; i ++){\n\t\t\t\thash[vertices[i]] = {id: vertices[i], $source:[], $target:[], $incoming: 0};\n\t\t\t}\n\n\t\t\tfor(var i = 0, len = edges.length; i < len; i++){\n\t\t\t\tvar successor = hash[edges[i].target];\n\t\t\t\tsuccessor.$target.push(i);\n\t\t\t\tsuccessor.$incoming = successor.$target.length;\n\t\t\t\thash[edges[i].source].$source.push(i);\n\n\t\t\t}\n\n\t\t\t// topological sort, Kahn's algorithm\n\t\t\tvar S = vertices.filter(function(v){ return !hash[v].$incoming; });\n\n\t\t\tvar L = [];\n\n\t\t\twhile(S.length){\n\t\t\t\tvar n = S.pop();\n\n\t\t\t\tL.push(n);\n\n\t\t\t\tvar node = hash[n];\n\n\t\t\t\tfor(var i = 0; i < node.$source.length; i++){\n\t\t\t\t\tvar m = hash[edges[node.$source[i]].target];\n\t\t\t\t\tm.$incoming--;\n\t\t\t\t\tif(!m.$incoming){\n\t\t\t\t\t\tS.push(m.id);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn L;\n\n\t\t},\n\t\tgroupAdjacentEdges: function(edges){\n\t\t\tvar res = {};\n\t\t\tvar edge;\n\t\t\tfor(var i = 0, len = edges.length; i < len; i++){\n\t\t\t\tedge = edges[i];\n\t\t\t\tif(!res[edge.source]){\n\t\t\t\t\tres[edge.source] = [];\n\t\t\t\t}\n\t\t\t\tres[edge.source].push(edge);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\ttarjanStronglyConnectedComponents: function(vertices, edges){\n\t\t\t//https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm\n\t\t\t// iterative implementation\n\t\t\tvar verticesHash = {};\n\t\t\tvar stack = [];\n\t\t\tvar edgesFromTasks = this.groupAdjacentEdges(edges);\n\t\t\tvar recurse = false;\n\t\t\tvar connectedComponents = [];\n\n\t\t\tfor(var i = 0; i < vertices.length; i++){\n\t\t\t\tvar root = getVertex(vertices[i]);\n\t\t\t\tif(root.visited) continue;\n\t\t\t\tvar workStack = [root];\n\t\t\t\tvar index = 0;\n\t\t\t\twhile(workStack.length){\n\t\t\t\t\tvar v = workStack.pop();\n\n\t\t\t\t\tif(!v.visited){\n\t\t\t\t\t\tv.index = index;\n\t\t\t\t\t\tv.lowLink = index;\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tstack.push(v);\n\t\t\t\t\t\tv.onStack = true;\n\t\t\t\t\t\tv.visited = true;\n\t\t\t\t\t}\n\t\t\t\t\trecurse = false;\n\t\t\t\t\tvar edges = edgesFromTasks[v.id] || [];\n\t\t\t\t\tfor(var e = 0; e < edges.length; e++){\n\t\t\t\t\t\tvar w = getVertex(edges[e].target);\n\t\t\t\t\t\tw.edge = edges[e];\n\t\t\t\t\t\tif(w.index === undefined){\n\t\t\t\t\t\t\tworkStack.push(v);\n\t\t\t\t\t\t\tworkStack.push(w);\n\t\t\t\t\t\t\trecurse = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}else if(w.onStack){\n\t\t\t\t\t\t\tv.lowLink = Math.min(v.lowLink, w.index);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(recurse)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (v.index == v.lowLink){\n\t\t\t\t\t\tvar com = {tasks:[], links:[]};\n\t\t\t\t\t\twhile(true){\n\t\t\t\t\t\t\tw = stack.pop();\n\t\t\t\t\t\t\tw.onStack = false;\n\t\t\t\t\t\t\tcom.tasks.push(w.id);\n\t\t\t\t\t\t\tif(w.edge){\n\t\t\t\t\t\t\t\tcom.links.push(w.edge.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(w == v){\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconnectedComponents.push(com);\n\t\t\t\t\t}\n\t\t\t\t\tif(workStack.length){\n\t\t\t\t\t\tw = v;\n\t\t\t\t\t\tv = workStack[workStack.length - 1];\n\t\t\t\t\t\tv.lowLink = Math.min(v.lowLink, w.lowLink);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn connectedComponents;\n\n\t\t\tfunction getVertex(id){\n\t\t\t\tif(!verticesHash[id]){\n\t\t\t\t\tverticesHash[id] = {id: id, onStack:false, index: undefined, lowLink: undefined, edge: undefined};\n\t\t\t\t}\n\n\t\t\t\treturn verticesHash[id];\n\t\t\t}\n\t\t},\n\n\t\tfindLoops: function(relations){\n\t\t\tvar cycles = [];\n\n\t\t\thelpers.forEach(relations, function(rel){\n\t\t\t\tif(rel.target == rel.source)\n\t\t\t\t\tcycles.push([rel.target, rel.source]);\n\t\t\t});\n\n\t\t\tvar vertices = this.getVertices(relations);\n\n\t\t\tvar connectedComponents = this.tarjanStronglyConnectedComponents(vertices, relations);\n\t\t\thelpers.forEach(connectedComponents, function(component){\n\t\t\t\tif(component.tasks.length > 1){\n\t\t\t\t\tcycles.push(component);//{ tasks: [task ids], links: [links ids]}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn cycles;\n\t\t\t//{task:id, link:link.type, lag: link.lag || 0, source: link.source}\n\t\t}\n\t};\n};","module.exports = function (gantt) {\n\t// helpers for building chain of dependencies, used for critical path calculation and for auto scheduling\n\n\tgantt._get_linked_task = function (link, getTarget) {\n\t\tvar task = null;\n\t\tvar taskId = getTarget ? link.target : link.source;\n\n\t\tif (gantt.isTaskExists(taskId)) {\n\t\t\ttask = gantt.getTask(taskId);\n\t\t}\n\n\t\treturn task;\n\t};\n\tgantt._get_link_target = function (link) {\n\t\treturn gantt._get_linked_task(link, true);\n\t};\n\n\tgantt._get_link_source = function (link) {\n\t\treturn gantt._get_linked_task(link, false);\n\t};\n\n\tvar caching = false;\n\tvar formattedLinksStash = {};\n\tvar inheritedSuccessorsStash = {};\n\tvar inheritedPredecessorsStash = {};\n\tvar getPredecessorsCache = {};\n\n\n\tgantt._isLinksCacheEnabled = function () {\n\t\treturn caching;\n\t};\n\tgantt._startLinksCache = function () {\n\t\tformattedLinksStash = {};\n\t\tinheritedSuccessorsStash = {};\n\t\tinheritedPredecessorsStash = {};\n\t\tgetPredecessorsCache = {};\n\t\tcaching = true;\n\t};\n\tgantt._endLinksCache = function () {\n\t\tformattedLinksStash = {};\n\t\tinheritedSuccessorsStash = {};\n\t\tinheritedPredecessorsStash = {};\n\t\tgetPredecessorsCache = {};\n\t\tcaching = false;\n\t};\n\n\tgantt._formatLink = function (link) {\n\n\n\t\tif (caching && formattedLinksStash[link.id]) {\n\t\t\treturn formattedLinksStash[link.id];\n\t\t}\n\n\t\tvar relations = [];\n\t\tvar target = this._get_link_target(link);\n\t\tvar source = this._get_link_source(link);\n\n\t\tif (!(source && target)) {\n\t\t\treturn relations;\n\t\t}\n\n\t\tif ((gantt.isSummaryTask(target) && gantt.isChildOf(source.id, target.id)) || (gantt.isSummaryTask(source) && gantt.isChildOf(target.id, source.id))) {\n\t\t\treturn relations;\n\t\t}\n\n\n\t\t// there are three kinds of connections at this point\n\t\t// task -> task - regular link\n\t\t// task -> project - transform it into set of regular links (task -> [each subtask]), use offset beetween subtask and project dates as lag, in order not to change mutual positions of subtasks inside a project\n\t\t// project -> task - transform it into ([each subtask] -> task) links\n\t\t// project -> project - transform it into ([each subtask of p1] -> [each subtask of p2]) links\n\n\t\tvar from = this._getImplicitLinks(link, source, function (c) {\n\t\t\treturn 0;\n\t\t}, true);\n\n\t\tvar respectTargetOffset = gantt.config.auto_scheduling_move_projects;\n\t\tvar targetDates = this.isSummaryTask(target) ? this.getSubtaskDates(target.id) : {\n\t\t\tstart_date: target.start_date,\n\t\t\tend_date: target.end_date\n\t\t};\n\t\tvar to = this._getImplicitLinks(link, target, function (c) {\n\t\t\tif (!respectTargetOffset) {\n\t\t\t\treturn 0;\n\t\t\t} else {\n\n\t\t\t\tif (!c.$target.length && !(gantt.getState().drag_id == c.id)) {// drag_id - virtual lag shouldn't restrict task that is being moved inside project\n\t\t\t\t\treturn gantt.calculateDuration({\n\t\t\t\t\t\tstart_date: targetDates.start_date,\n\t\t\t\t\t\tend_date: c.start_date,\n\t\t\t\t\t\ttask: source\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfor (var i = 0, fromLength = from.length; i < fromLength; i++) {\n\t\t\tvar fromTask = from[i];\n\t\t\tfor (var j = 0, toLength = to.length; j < toLength; j++) {\n\t\t\t\tvar toTask = to[j];\n\n\t\t\t\tvar lag = fromTask.lag * 1 + toTask.lag * 1;\n\n\t\t\t\tvar subtaskLink = {\n\t\t\t\t\tid: link.id,\n\t\t\t\t\ttype: link.type,\n\t\t\t\t\tsource: fromTask.task,\n\t\t\t\t\ttarget: toTask.task,\n\t\t\t\t\tlag: (link.lag * 1 || 0) + lag\n\t\t\t\t};\n\n\t\t\t\trelations.push(gantt._convertToFinishToStartLink(toTask.task, subtaskLink, source, target, fromTask.taskParent, toTask.taskParent));\n\t\t\t}\n\t\t}\n\n\t\tif (caching)\n\t\t\tformattedLinksStash[link.id] = relations;\n\n\t\treturn relations;\n\t};\n\n\tgantt._isAutoSchedulable = function (task) {\n\t\treturn task.auto_scheduling !== false;\n\t};\n\n\tgantt._getImplicitLinks = function (link, parent, selectOffset, selectSourceLinks) {\n\t\tvar relations = [];\n\n\t\tif (this.isSummaryTask(parent)) {\n\n\t\t\t// if the summary task contains multiple chains of linked tasks - no need to consider every task of the chain,\n\t\t\t// it will be enough to check the first/last tasks of the chain\n\t\t\t// special conditions if there are unscheduled tasks in the chain, or negative lag values that put the end date of the successor task prior to its predecessors' date\n\t\t\tvar children = {};\n\t\t\tthis.eachTask(function (c) {\n\t\t\t\tif (!this.isSummaryTask(c)) {\n\t\t\t\t\tchildren[c.id] = c;\n\t\t\t\t}\n\t\t\t}, parent.id);\n\n\t\t\tvar skipChild;\n\n\t\t\tfor (var c in children) {\n\t\t\t\tvar task = children[c];\n\t\t\t\tvar linksCollection = selectSourceLinks ? task.$source : task.$target;\n\n\t\t\t\tskipChild = false;\n\n\t\t\t\tfor (var l = 0; l < linksCollection.length; l++) {\n\t\t\t\t\tvar siblingLink = gantt.getLink(linksCollection[l]);\n\t\t\t\t\tvar siblingId = selectSourceLinks ? siblingLink.target : siblingLink.source;\n\t\t\t\t\tvar siblingTask = children[siblingId];\n\t\t\t\t\tif (siblingTask && task.auto_scheduling !== false && siblingTask.auto_scheduling !== false) {\n\t\t\t\t\t\tif ((siblingLink.target == siblingTask.id && Math.abs(siblingLink.lag) <= siblingTask.duration) ||\n\t\t\t\t\t\t\t(siblingLink.target == task.id && Math.abs(siblingLink.lag) <= task.duration)) {\n\t\t\t\t\t\t\tskipChild = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skipChild) {\n\t\t\t\t\trelations.push({ task: task.id, taskParent: task.parent, lag: selectOffset(task) });\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\trelations.push({ task: parent.id, taskParent: parent.parent, lag: 0 });\n\t\t}\n\n\t\treturn relations;\n\t};\n\n\tgantt._getDirectDependencies = function (task, selectSuccessors) {\n\n\t\tvar links = [],\n\t\t\tsuccessors = [];\n\n\t\tvar linksIds = selectSuccessors ? task.$source : task.$target;\n\n\t\tfor (var i = 0; i < linksIds.length; i++) {\n\t\t\tvar link = this.getLink(linksIds[i]);\n\t\t\tif (this.isTaskExists(link.source) && this.isTaskExists(link.target)) {\n\t\t\t\tvar target = this.getTask(link.target);\n\t\t\t\tif (this._isAutoSchedulable(target)) {\n\t\t\t\t\tlinks.push(this.getLink(linksIds[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\tsuccessors = successors.concat(this._formatLink(links[i]));\n\t\t}\n\n\t\treturn successors;\n\t};\n\n\tgantt._getInheritedDependencies = function (task, selectSuccessors) {\n\n\t\t//var successors = [];\n\t\tvar stop = false;\n\t\tvar inheritedRelations = [];\n\t\tvar cacheCollection;\n\t\tif (this.isTaskExists(task.id)) {\n\t\t\tthis.eachParent(function (parent) {\n\t\t\t\tif (stop)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (caching) {\n\t\t\t\t\tcacheCollection = selectSuccessors ? inheritedSuccessorsStash : inheritedPredecessorsStash;\n\t\t\t\t\tif (cacheCollection[parent.id]) {\n\t\t\t\t\t\tinheritedRelations = inheritedRelations.concat(cacheCollection[parent.id]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar parentDependencies;\n\t\t\t\tif (this.isSummaryTask(parent)) {\n\t\t\t\t\tif (!this._isAutoSchedulable(parent)) {\n\t\t\t\t\t\tstop = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentDependencies = this._getDirectDependencies(parent, selectSuccessors);\n\t\t\t\t\t\tif (caching) {\n\t\t\t\t\t\t\tcacheCollection[parent.id] = parentDependencies;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tinheritedRelations = inheritedRelations.concat(parentDependencies);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}, task.id, this);\n\t\t}\n\n\t\treturn inheritedRelations;\n\t};\n\n\n\tgantt._getDirectSuccessors = function (task) {\n\t\treturn this._getDirectDependencies(task, true);\n\t};\n\n\tgantt._getInheritedSuccessors = function (task) {\n\t\treturn this._getInheritedDependencies(task, true);\n\t};\n\n\tgantt._getDirectPredecessors = function (task) {\n\t\treturn this._getDirectDependencies(task, false);\n\t};\n\n\tgantt._getInheritedPredecessors = function (task) {\n\t\treturn this._getInheritedDependencies(task, false);\n\t};\n\n\tgantt._getSuccessors = function (task, skipInherited) {\n\t\tvar successors = this._getDirectSuccessors(task);\n\t\tif (skipInherited) {\n\t\t\treturn successors;\n\t\t} else {\n\t\t\treturn successors.concat(this._getInheritedSuccessors(task));\n\t\t}\n\t};\n\n\tgantt._getPredecessors = function (task, skipInherited) {\n\t\tvar key = task.id + skipInherited;\n\t\tvar result;\n\n\t\tif (caching && getPredecessorsCache[key]) {\n\t\t\treturn getPredecessorsCache[key];\n\t\t}\n\n\t\tvar predecessors = this._getDirectPredecessors(task);\n\t\tif (skipInherited) {\n\t\t\tresult = predecessors;\n\t\t} else {\n\t\t\tresult = predecessors.concat(this._getInheritedPredecessors(task));\n\t\t}\n\t\tif (caching) {\n\t\t\tgetPredecessorsCache[key] = result;\n\t\t}\n\t\treturn result;\n\t};\n\n\n\tgantt._convertToFinishToStartLink = function (id, link, sourceTask, targetTask, sourceParent, targetParent) {\n\t\t// convert finish-to-finish, start-to-finish and start-to-start to finish-to-start link and provide some additional properties\n\t\tvar res = {\n\t\t\ttarget: id,\n\t\t\tlink: gantt.config.links.finish_to_start,\n\t\t\tid: link.id,\n\t\t\tlag: link.lag || 0,\n\t\t\tsource: link.source,\n\t\t\tpreferredStart: null,\n\t\t\tsourceParent: sourceParent,\n\t\t\ttargetParent: targetParent,\n\t\t\thashSum: null\n\t\t};\n\n\t\tvar additionalLag = 0;\n\t\tswitch (link.type) {\n\t\t\tcase gantt.config.links.start_to_start:\n\t\t\t\tadditionalLag = -sourceTask.duration;\n\t\t\t\tbreak;\n\t\t\tcase gantt.config.links.finish_to_finish:\n\t\t\t\tadditionalLag = -targetTask.duration;\n\t\t\t\tbreak;\n\t\t\tcase gantt.config.links.start_to_finish:\n\t\t\t\tadditionalLag = -sourceTask.duration - targetTask.duration;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tadditionalLag = 0;\n\t\t}\n\n\t\tres.lag += additionalLag;\n\t\tres.hashSum = res.lag + \"_\" + res.link + \"_\" + res.source + \"_\" + res.target;\n\t\treturn res;\n\t};\n};","import { ConnectedGroupsHelper } from \"./connected_groups\";\n\nexport function attachUIHandlers(\n\tgantt: any,\n\tlinksBuilder: any,\n\tloopsFinder: any,\n\tconnectedGroupsHelper: ConnectedGroupsHelper\n) {\n\tlet _attachAutoSchedulingHandlers = function() {\n\t\tfunction _autoScheduleAfterLinkChange(id: LinkID, link: ILink) {\n\t\t\tif (gantt.config.auto_scheduling && !gantt._autoscheduling_in_progress) {\n\t\t\t\tgantt.autoSchedule(link.source);\n\t\t\t}\n\t\t}\n\n\t\tgantt.attachEvent(\"onAfterLinkUpdate\", _autoScheduleAfterLinkChange);\n\t\tgantt.attachEvent(\"onAfterLinkAdd\", _autoScheduleAfterLinkChange);\n\n\t\tgantt.attachEvent(\"onAfterLinkDelete\", function(id: LinkID, link: ILink) {\n\t\t\tif (\n\t\t\t\tgantt.config.auto_scheduling &&\n\t\t\t\t!gantt._autoscheduling_in_progress &&\n\t\t\t\tgantt.isTaskExists(link.target)\n\t\t\t) {\n\t\t\t\t// after link deleted - auto schedule target for other relations that may be left\n\t\t\t\tconst target = gantt.getTask(link.target);\n\t\t\t\tconst predecessors = gantt._getPredecessors(target);\n\t\t\t\tif (predecessors.length) {\n\t\t\t\t\tgantt.autoSchedule(predecessors[0].source, false);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tgantt.attachEvent(\"onParse\", function() {\n\t\t\tif (\n\t\t\t\tgantt.config.auto_scheduling &&\n\t\t\t\tgantt.config.auto_scheduling_initial\n\t\t\t) {\n\t\t\t\tgantt.autoSchedule();\n\t\t\t}\n\t\t});\n\n\t\tfunction _preventCircularLink(id: LinkID, link: ILink): boolean {\n\t\t\tif (gantt.isCircularLink(link)) {\n\t\t\t\tgantt.callEvent(\"onCircularLinkError\", [\n\t\t\t\t\tlink,\n\t\t\t\t\tloopsFinder.getLoopContainingLink(link)\n\t\t\t\t]);\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tfunction _preventDescendantLink(id: LinkID, link: ILink): boolean {\n\t\t\tconst source = gantt.getTask(link.source);\n\t\t\tconst target = gantt.getTask(link.target);\n\n\t\t\tif (!gantt.config.auto_scheduling_descendant_links) {\n\t\t\t\tif (\n\t\t\t\t\t(gantt.isChildOf(source.id, target.id) &&\n\t\t\t\t\t\tgantt.isSummaryTask(target)) ||\n\t\t\t\t\t(gantt.isChildOf(target.id, source.id) && gantt.isSummaryTask(source))\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tgantt.attachEvent(\"onBeforeLinkAdd\", _preventCircularLink);\n\t\tgantt.attachEvent(\"onBeforeLinkAdd\", _preventDescendantLink);\n\t\tgantt.attachEvent(\"onBeforeLinkUpdate\", _preventCircularLink);\n\t\tgantt.attachEvent(\"onBeforeLinkUpdate\", _preventDescendantLink);\n\n\t\tfunction _datesNotEqual(\n\t\t\tdateA: Date,\n\t\t\tdateB: Date,\n\t\t\ttaskA: ITask,\n\t\t\ttaskB: ITask\n\t\t): boolean {\n\t\t\tif (!!dateA !== !!dateB) {\n\t\t\t\t// if one of dates is empty or null and the other is not\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!dateA && !dateB) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (dateA.valueOf() > dateB.valueOf()) {\n\t\t\t\treturn gantt._hasDuration({\n\t\t\t\t\tstart_date: dateB,\n\t\t\t\t\tend_date: dateA,\n\t\t\t\t\ttask: taskB\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn gantt._hasDuration({\n\t\t\t\t\tstart_date: dateA,\n\t\t\t\t\tend_date: dateB,\n\t\t\t\t\ttask: taskA\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfunction _notEqualTaskDates(task1: ITask, task2: ITask): boolean {\n\t\t\tif (_datesNotEqual(task1.start_date, task2.start_date, task1, task2)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (gantt.getConstraintType(task1) !== gantt.getConstraintType(task2)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t_datesNotEqual(\n\t\t\t\t\ttask1.constraint_date,\n\t\t\t\t\ttask2.constraint_date,\n\t\t\t\t\ttask1,\n\t\t\t\t\ttask2\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t_datesNotEqual(task1.start_date, task2.start_date, task1, task2) ||\n\t\t\t\t((_datesNotEqual(task1.end_date, task2.end_date, task1, task2) ||\n\t\t\t\t\ttask1.duration !== task2.duration) &&\n\t\t\t\t\ttask1.type !== gantt.config.types.milestone)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getRelations(id: TaskID) {\n\t\t\t// collect relations before drag and drop in order to have original positions of subtasks within project since they are used as lag when moving dependent project\n\n\t\t\t// TODO: remove in 7.0\n\t\t\tif (gantt.config.auto_scheduling_compatibility) {\n\t\t\t\t// collect only downstream dependencies since there is no backward or ALAP scheduling in pre 6.1 auto scheduling\n\t\t\t\treturn linksBuilder.getLinkedTasks(id, true);\n\t\t\t} else {\n\t\t\t\t// get all connected group (both upstream and downstream dependencies)\n\t\t\t\treturn connectedGroupsHelper.getConnectedGroupRelations(id);\n\t\t\t}\n\t\t}\n\n\t\tlet relations;\n\t\tlet movedTask;\n\t\tgantt.attachEvent(\"onBeforeTaskDrag\", function(\n\t\t\tid: TaskID,\n\t\t\tmode: string,\n\t\t\ttask: ITask\n\t\t) {\n\t\t\tif (\n\t\t\t\tgantt.config.auto_scheduling &&\n\t\t\t\tgantt.config.auto_scheduling_move_projects\n\t\t\t) {\n\t\t\t\t// collect relations before drag and drop in order to have original positions of subtasks within project since they are used as lag when moving dependent project\n\t\t\t\trelations = getRelations(id);\n\n\t\t\t\tmovedTask = id;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tfunction resetToStartLinksLags(taskId, relationsArray) {\n\t\t\t// task duration is used as lag when converting start_to_start and start_to_finish into finish_to_start links\n\t\t\t// recalculate these links if task duration has changed\n\n\t\t\tlet skipped = false;\n\t\t\tfor (let i = 0; i < relations.length; i++) {\n\t\t\t\tconst originalLink = gantt.getLink(relationsArray[i].id);\n\t\t\t\tif (\n\t\t\t\t\toriginalLink &&\n\t\t\t\t\t(originalLink.type === gantt.config.links.start_to_start ||\n\t\t\t\t\t\toriginalLink.type === gantt.config.links.start_to_finish)\n\t\t\t\t) {\n\t\t\t\t\trelationsArray.splice(i, 1);\n\t\t\t\t\ti--;\n\t\t\t\t\tskipped = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (skipped) {\n\t\t\t\tconst presentLinks = {};\n\t\t\t\tfor (let i = 0; i < relationsArray.length; i++) {\n\t\t\t\t\tpresentLinks[relationsArray[i].id] = true;\n\t\t\t\t}\n\n\t\t\t\tconst updatedLinks = getRelations(taskId);\n\n\t\t\t\tfor (let i = 0; i < updatedLinks.length; i++) {\n\t\t\t\t\tif (!presentLinks[updatedLinks[i].id]) {\n\t\t\t\t\t\trelationsArray.push(updatedLinks[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction updateTaskConstraints(task){\n\t\t\tif (gantt.config.schedule_from_end) {\n\t\t\t\ttask.constraint_type = gantt.config.constraint_types.FNLT;\n\t\t\t\ttask.constraint_date = new Date(task.end_date);\n\t\t\t} else {\n\t\t\t\ttask.constraint_type = gantt.config.constraint_types.SNET;\n\t\t\t\ttask.constraint_date = new Date(task.start_date);\n\t\t\t}\n\t\t}\n\n\t\tfunction finalizeTaskConstraints(task){\n\t\t\t// TODO: remove in 7.0\n\t\t\tif (gantt.config.auto_scheduling_compatibility && gantt.config.auto_scheduling_strict) {\n\t\t\t\tif (task.constraint_type === gantt.config.constraint_types.SNET ||\n\t\t\t\t\ttask.constraint_type === gantt.config.constraint_types.FNLT) {\n\t\t\t\t\t\ttask.constraint_type = null;\n\t\t\t\t\t\ttask.constraint_date = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _autoScheduleAfterDND = function(taskId, task) {\n\t\t\tif (gantt.config.auto_scheduling && !gantt._autoscheduling_in_progress) {\n\t\t\t\tconst newTask = gantt.getTask(taskId);\n\n\t\t\t\tif (_notEqualTaskDates(task, newTask)) {\n\t\t\t\t\tupdateTaskConstraints(newTask);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tgantt.config.auto_scheduling_move_projects &&\n\t\t\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\t\t\tmovedTask == taskId\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tgantt.calculateDuration(task) !== gantt.calculateDuration(newTask)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// task duration is used as lag when converting start_to_start and start_to_finish into finish to start links\n\t\t\t\t\t\t\t// recalculate these links if task duration has changed\n\t\t\t\t\t\t\tresetToStartLinksLags(taskId, relations);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgantt._autoSchedule(taskId, relations);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgantt.autoSchedule(newTask.id);\n\t\t\t\t\t}\n\n\t\t\t\t\tfinalizeTaskConstraints(newTask);\n\t\t\t\t}\n\t\t\t}\n\t\t\trelations = null;\n\t\t\tmovedTask = null;\n\t\t\treturn true;\n\t\t};\n\n\n\n\n\t\tlet modifiedTaskId = null;\n\t\tif (gantt.ext && gantt.ext.inlineEditors) {\n\t\t\tconst inlineEditors = gantt.ext.inlineEditors;\n\t\t\tconst autoscheduleColumns = {\n\t\t\t\tstart_date: true,\n\t\t\t\tend_date: true,\n\t\t\t\tduration: true,\n\t\t\t\tconstraint_type: true,\n\t\t\t\tconstraint_date: true\n\t\t\t};\n\n\t\t\tinlineEditors.attachEvent(\"onBeforeSave\", function(state) {\n\t\t\t\tif (autoscheduleColumns[state.columnName]) {\n\t\t\t\t\tmodifiedTaskId = state.id;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\n\t\tlet changedConstraint;\n\t\tfunction onBeforeLigthboxSaveHandler(taskId: TaskID, task: ITask): boolean {\n\t\t\tif (gantt.config.auto_scheduling && !gantt._autoscheduling_in_progress) {\n\t\t\t\tchangedConstraint = false;\n\t\t\t\tconst oldTask = gantt.getTask(taskId);\n\t\t\t\tif (_notEqualTaskDates(task, oldTask)) {\n\t\t\t\t\tmodifiedTaskId = taskId;\n\t\t\t\t\tif(gantt.getConstraintType(task) !== gantt.getConstraintType(oldTask) ||\n\t\t\t\t\t\t+task.constraint_date !== +oldTask.constraint_date\n\t\t\t\t\t){\n\t\t\t\t\t\tchangedConstraint = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction onAfterTaskUpdateHandler(taskId: TaskID, task: ITask): boolean {\n\t\t\tif (gantt.config.auto_scheduling && !gantt._autoscheduling_in_progress) {\n\t\t\t\tif (\n\t\t\t\t\tmodifiedTaskId &&\n\t\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\t\tmodifiedTaskId == taskId\n\t\t\t\t) {\n\t\t\t\t\tmodifiedTaskId = null;\n\t\t\t\t\tif(!changedConstraint){\n\t\t\t\t\t\tupdateTaskConstraints(task);\n\t\t\t\t\t}\n\t\t\t\t\tgantt.autoSchedule(task.id);\n\n\t\t\t\t\tif(!changedConstraint){\n\t\t\t\t\t\tfinalizeTaskConstraints(task);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tgantt.attachEvent(\"onBeforeTaskChanged\", function(\n\t\t\tid: TaskID,\n\t\t\tmode: string,\n\t\t\ttask: ITask\n\t\t) {\n\t\t\treturn _autoScheduleAfterDND(id, task);\n\t\t});\n\n\t\tif(gantt.ext.inlineEditors){\n\t\t\tgantt.ext.inlineEditors.attachEvent(\"onBeforeSave\", function(state){\n\t\t\t\tif (gantt.config.auto_scheduling && !gantt._autoscheduling_in_progress) {\n\t\t\t\t\tconst api = gantt.ext.inlineEditors;\n\t\t\t\t\tconst editorConfig = api.getEditorConfig(state.columnName);\n\t\t\t\t\tif(editorConfig.map_to === \"start_date\" || editorConfig.map_to === \"end_date\" || editorConfig.map_to === \"duration\"){\n\t\t\t\t\t\tmodifiedTaskId = state.id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\n\t\tgantt.attachEvent(\"onLightboxSave\", onBeforeLigthboxSaveHandler);\n\t\tgantt.attachEvent(\"onAfterTaskUpdate\", onAfterTaskUpdateHandler);\n\t};\n\n\tgantt.attachEvent(\"onGanttReady\", function() {\n\t\t_attachAutoSchedulingHandlers();\n\t\t// attach handlers only when initialized for the first time\n\t\t_attachAutoSchedulingHandlers = function() { };\n\t});\n}\n","export class LoopsFinder {\n\tprivate _linksBuilder: any;\n\tprivate _graphHelper: any;\n\tprivate _gantt: any;\n\tconstructor(gantt: any, graphHelper: any, linksBuilder: any) {\n\t\tthis._linksBuilder = linksBuilder;\n\t\tthis._graphHelper = graphHelper;\n\t\tthis._gantt = gantt;\n\t}\n\tisCircularLink = (link: ILink): boolean => {\n\t\treturn !!this.getLoopContainingLink(link);\n\t}\n\n\tgetLoopContainingLink = (link: ILink): any => {\n\t\tconst graphHelper = this._graphHelper;\n\t\tconst linksBuilder = this._linksBuilder;\n\t\tconst gantt = this._gantt;\n\n\t\tlet allRelations = linksBuilder.getLinkedTasks();\n\t\tif (!gantt.isLinkExists(link.id)) {\n\t\t\tallRelations = allRelations.concat(gantt._formatLink(link));\n\t\t}\n\n\t\tconst cycles = graphHelper.findLoops(allRelations);\n\n\t\tconst found = false;\n\t\tfor (let i = 0; i < cycles.length && !found; i++) {\n\t\t\tconst links = cycles[i].links;\n\t\t\tfor (let j = 0; j < links.length; j++) {\n\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\tif (links[j] == link.id) {\n\t\t\t\t\treturn cycles[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tfindCycles = () => {\n\t\tconst graphHelper = this._graphHelper;\n\t\tconst linksBuilder = this._linksBuilder;\n\n\t\tconst allRelations = linksBuilder.getLinkedTasks();\n\t\treturn graphHelper.findLoops(allRelations);\n\t}\n}\n","interface IFlagHash {\n\t[id: string]: boolean;\n}\n\nfunction findGroups(links: IInternalLink[]): IConnectedGroup[] {\n\tconst visited: IFlagHash = {};\n\tconst groups = [];\n\tlet source: TaskID;\n\tlet target: TaskID;\n\tlet root: TaskID;\n\t// main loop - find any unvisited vertex from the input array and\n\t// treat it as the source, then perform a breadth first search from\n\t// it. All vertices visited from this search belong to the same group\n\tfor (let i = 0; i < links.length; i++) {\n\t\tsource = links[i].source;\n\t\ttarget = links[i].target;\n\t\troot = null;\n\t\tif (!visited[source]) {\n\t\t\troot = source;\n\t\t} else if (!visited[target]) {\n\t\t\troot = target;\n\t\t}\n\t\tif (root) {\n\t\t\t// there is an unvisited vertex in this pair.\n\t\t\t// perform a breadth first search, and push the resulting\n\t\t\t// group onto the list of all groups\n\t\t\tconst length = links.length;\n\t\t\tgroups.push(breadthFirstSearch(root, links, visited));\n\t\t\tif (length !== links.length) {\n\t\t\t\ti = -1;\n\t\t\t}\n\t\t}\n\t}\n\treturn groups;\n}\n\n// Breadth First Search function\n// v is the source vertex\n// links is the input array, which contains all gantt relations\n// visited is a dictionary for keeping track of whether a node is visited\nfunction breadthFirstSearch(\n\tv: TaskID,\n\tlinks: IInternalLink[],\n\tvisited: IFlagHash\n): IConnectedGroupsDetailed {\n\tconst queue: TaskID[] = [v];\n\tconst groupTasks: TaskID[] = [];\n\tconst groupLinksInternal: { [hashSum: string]: IInternalLink } = {};\n\tconst groupLinksPublic: { [id: string]: boolean } = {};\n\n\tlet currentVertex: TaskID;\n\twhile (queue.length > 0) {\n\t\tcurrentVertex = queue.shift();\n\t\tif (!visited[currentVertex]) {\n\t\t\tvisited[currentVertex] = true;\n\t\t\tgroupTasks.push(currentVertex);\n\t\t\t// go through the input array to find vertices that are\n\t\t\t// directly adjacent to the current vertex, and put them\n\t\t\t// onto the queue\n\t\t\tfor (let i = 0; i < links.length; i++) {\n\t\t\t\tconst link = links[i];\n\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\tif ((link.source == currentVertex || link.sourceParent == currentVertex)) {\n\t\t\t\t\tif (!visited[link.target]) {\n\t\t\t\t\t\tqueue.push(link.target);\n\t\t\t\t\t\tgroupLinksPublic[link.id] = true;\n\t\t\t\t\t\tlinks.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t\tgroupLinksInternal[link.hashSum] = link;\n\n\t\t\t\t\t// tslint:disable-next-line triple-equals\n\t\t\t\t} else if ((link.target == currentVertex || link.targetParent == currentVertex)) {\n\t\t\t\t\tif (!visited[link.source]) {\n\t\t\t\t\t\tqueue.push(link.source);\n\t\t\t\t\t\tgroupLinksPublic[link.id] = true;\n\t\t\t\t\t\tlinks.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t\tgroupLinksInternal[link.hashSum] = link;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst linksArray: LinkID[] = [];\n\tconst linksObjects: IInternalLink[] = [];\n\tfor (const i in groupLinksPublic) {\n\t\tlinksArray.push(i);\n\t}\n\tfor (const i in groupLinksInternal) {\n\t\tlinksObjects.push(groupLinksInternal[i]);\n\t}\n\t// return everything in the current \"group\"\n\treturn { tasks: groupTasks, links: linksArray, processedLinks: linksObjects };\n}\n\nexport class ConnectedGroupsHelper {\n\tprivate _linksBuilder: any;\n\tprivate _gantt: any;\n\tconstructor(gantt: any, linksBuilder: any) {\n\t\tthis._linksBuilder = linksBuilder;\n\t\tthis._gantt = gantt;\n\t}\n\n\tgetConnectedGroupRelations = (id: TaskID): IInternalLink[] => {\n\t\tconst links = this._linksBuilder.getLinkedTasks();\n\t\tconst group = breadthFirstSearch(id, links, {});\n\t\treturn group.processedLinks;\n\t}\n\n\tgetConnectedGroup = (id: TaskID): IConnectedGroup | IConnectedGroup[] => {\n\t\tconst links = this._linksBuilder.getLinkedTasks();\n\t\tif (id !== undefined) {\n\t\t\tif (this._gantt.getTask(id).type === this._gantt.config.types.project) {\n\t\t\t\treturn { tasks: [], links: [] };\n\t\t\t}\n\n\t\t\tconst group = breadthFirstSearch(id, links, {});\n\t\t\treturn {\n\t\t\t\ttasks: group.tasks,\n\t\t\t\tlinks: group.links\n\t\t\t};\n\t\t} else {\n\t\t\treturn findGroups(links).map(group => ({ tasks: group.tasks, links: group.links }));\n\t\t}\n\t}\n}\n","import { TaskPlan } from \"./task_plan\";\n\nexport class AsapStrategy implements ISchedulingStrategy {\n\tstatic Create(gantt: any): AsapStrategy {\n\t\tconst instance = new AsapStrategy();\n\t\tinstance._gantt = gantt;\n\t\treturn instance;\n\t}\n\n\tprotected _gantt: any;\n\n\tresolveRelationDate(\n\t\ttaskId: TaskID,\n\t\tadjacentLinks: ITaskRelations,\n\t\tplansHash: IPlansHash\n\t): TaskPlan {\n\t\tlet minStart = null;\n\t\tlet linkId = null;\n\n\t\tlet defaultStart = null;\n\t\tconst task = this._gantt.getTask(taskId);\n\t\tconst relations = adjacentLinks.predecessors;\n\n\t\tlet minRelationDate = null;\n\t\tfor (let i = 0; i < relations.length; i++) {\n\t\t\tconst relation = relations[i];\n\n\t\t\t// .preferredStart still exists only to emulate pre 6.1 auto scheduling behavior\n\t\t\t// will be removed in future versions\n\t\t\t// TODO: remove .preferredStart in v7.0\n\t\t\tdefaultStart = relation.preferredStart;\n\n\t\t\tconst constraintDate = this.getEarliestStartDate(\n\t\t\t\trelation,\n\t\t\t\tplansHash,\n\t\t\t\ttask\n\t\t\t);\n\n\t\t\tif (this.isSmallerOrDefault(minRelationDate, constraintDate, task)) {\n\t\t\t\tminRelationDate = constraintDate;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis.isSmallerOrDefault(defaultStart, constraintDate, task) &&\n\t\t\t\tthis.isSmallerOrDefault(minStart, constraintDate, task)\n\t\t\t) {\n\t\t\t\tminStart = constraintDate;\n\t\t\t\tlinkId = relation.id;\n\t\t\t}\n\t\t}\n\n\t\tif (!relations.length && this._gantt.config.project_start) {\n\t\t\tif (this.isSmallerOrDefault(task.start_date, this._gantt.config.project_start, task)) {\n\t\t\t\tminStart = this._gantt.config.project_start;\n\t\t\t}\n\t\t}\n\n\t\tlet maxEnd = null;\n\t\tif (minStart) {\n\t\t\tminStart = this._gantt.getClosestWorkTime({\n\t\t\t\tdate: minStart,\n\t\t\t\tdir: \"future\",\n\t\t\t\ttask\n\t\t\t});\n\t\t\tmaxEnd = this._gantt.calculateEndDate({\n\t\t\t\tstart_date: minStart,\n\t\t\t\tduration: task.duration,\n\t\t\t\ttask\n\t\t\t});\n\t\t}\n\n\t\tconst masterPlan = plansHash[taskId];\n\t\tconst currentPlan = TaskPlan.Create(masterPlan);\n\n\t\tcurrentPlan.link = linkId;\n\t\tcurrentPlan.task = taskId;\n\t\tcurrentPlan.start_date = minStart;\n\t\tcurrentPlan.end_date = maxEnd;\n\t\tcurrentPlan.kind = \"asap\";\n\n\t\tif (minRelationDate) {\n\t\t\tcurrentPlan.earliestSchedulingStart = minRelationDate;\n\t\t\tcurrentPlan.earliestSchedulingEnd = this._gantt.calculateEndDate({\n\t\t\t\tstart_date: minRelationDate,\n\t\t\t\tduration: task.duration,\n\t\t\t\ttask\n\t\t\t});\n\t\t}\n\n\t\treturn currentPlan;\n\t}\n\n\tprotected isEqual(dateA: Date, dateB: Date, task: ITask): boolean {\n\t\treturn !this._gantt._hasDuration(dateA, dateB, task);\n\t}\n\n\tprotected isFirstSmaller(small: Date, big: Date, task: ITask): boolean {\n\t\tif (small.valueOf() < big.valueOf() && !this.isEqual(small, big, task)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected isSmallerOrDefault(smallDate: Date, bigDate: Date, task: ITask): boolean {\n\t\treturn !!(!smallDate || this.isFirstSmaller(smallDate, bigDate, task));\n\t}\n\n\tprotected getPredecessorEndDate(id: TaskID, plansHash: IPlansHash): Date {\n\t\tconst plan = plansHash[id];\n\t\tconst task = this._gantt.getTask(id);\n\t\tlet res;\n\n\t\tif (!(plan && (plan.start_date || plan.end_date))) {\n\t\t\tres = task.end_date;\n\t\t} else if (plan.end_date) {\n\t\t\tres = plan.end_date;\n\t\t} else {\n\t\t\tres = this._gantt.calculateEndDate({\n\t\t\t\tstart_date: plan.start_date,\n\t\t\t\tduration: task.duration,\n\t\t\t\ttask\n\t\t\t});\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tprotected getEarliestStartDate(relation: IInternalLink, plansHash: IPlansHash, task: ITask): Date {\n\t\tconst predecessorEnd = this.getPredecessorEndDate(\n\t\t\trelation.source,\n\t\t\tplansHash\n\t\t);\n\t\tconst successor = task;\n\n\t\tlet successorStart = this._gantt.getClosestWorkTime({\n\t\t\tdate: predecessorEnd,\n\t\t\tdir: \"future\",\n\t\t\ttask: successor\n\t\t});\n\n\t\tif (\n\t\t\tpredecessorEnd &&\n\t\t\trelation.lag &&\n\t\t\trelation.lag * 1 === relation.lag * 1\n\t\t) {\n\t\t\tsuccessorStart = this._gantt.calculateEndDate({\n\t\t\t\tstart_date: predecessorEnd,\n\t\t\t\tduration: relation.lag * 1,\n\t\t\t\ttask: successor\n\t\t\t});\n\t\t}\n\n\t\treturn successorStart;\n\t}\n}\n","import { TaskPlan } from \"./task_plan\";\n\nexport class AlapStrategy implements ISchedulingStrategy {\n\tstatic Create(gantt: any): AlapStrategy {\n\t\tconst instance = new AlapStrategy();\n\t\tinstance._gantt = gantt;\n\t\treturn instance;\n\t}\n\n\tprotected _gantt: any;\n\n\n\tresolveRelationDate(taskId: TaskID, adjacentLinks: ITaskRelations, plansHash: IPlansHash): TaskPlan {\n\t\tlet maxEnd = null;\n\t\tlet linkId = null;\n\t\tlet maxStart = null;\n\t\tlet defaultStart = null;\n\t\tconst task = this._gantt.getTask(taskId);\n\t\tconst relations = adjacentLinks.successors;\n\t\tlet maxRelationDate = null;\n\t\tconst masterPlan = plansHash[taskId];\n\t\tfor (let i = 0; i < relations.length; i++) {\n\t\t\tconst relation = relations[i];\n\n\t\t\t// .preferredStart still exists only to emulate pre 6.1 auto scheduling behavior\n\t\t\t// will be removed in future versions\n\t\t\t// TODO: remove .preferredStart in v7.0\n\t\t\tdefaultStart = relation.preferredStart;\n\t\t\tconst constraintDate = this.getLatestEndDate(relation, plansHash, task);\n\t\t\tconst constraintStartDate = this._gantt.calculateEndDate({ start_date: constraintDate, duration: - task.duration, task });\n\n\t\t\tif (this.isGreaterOrDefault(maxRelationDate, constraintDate, task)) {\n\t\t\t\tmaxRelationDate = constraintDate;\n\t\t\t}\n\t\t\tif (this.isGreaterOrDefault(defaultStart, constraintStartDate, task) && this.isGreaterOrDefault(maxEnd, constraintDate, task)) {\n\t\t\t\tmaxEnd = constraintDate;\n\t\t\t\tmaxStart = constraintStartDate;\n\t\t\t\tlinkId = relation.id;\n\t\t\t}\n\t\t}\n\n\t\tif (!relations.length && this._gantt.config.project_end) {\n\t\t\tif (this.isGreaterOrDefault(this._gantt.config.project_end, task.end_date, task)) {\n\t\t\t\tmaxEnd = this._gantt.config.project_end;\n\t\t\t}\n\t\t}\n\n\t\tif (maxEnd) {\n\n\t\t\tmaxEnd = this._gantt.getClosestWorkTime({ date: maxEnd, dir: \"future\", task });\n\t\t\tmaxStart = this._gantt.calculateEndDate({ start_date: maxEnd, duration: - task.duration, task });\n\t\t}\n\n\t\tconst currentPlan = TaskPlan.Create(masterPlan);\n\n\t\tcurrentPlan.link = linkId;\n\t\tcurrentPlan.task = taskId;\n\t\tcurrentPlan.end_date = maxEnd;\n\t\tcurrentPlan.start_date = maxStart;\n\t\tcurrentPlan.kind = \"alap\";\n\n\t\tif (maxRelationDate) {\n\t\t\tcurrentPlan.latestSchedulingStart = this._gantt.calculateEndDate({ start_date: maxRelationDate, duration: - task.duration, task });\n\t\t\tcurrentPlan.latestSchedulingEnd = maxRelationDate;\n\t\t}\n\n\t\treturn currentPlan;\n\n\t}\n\n\tprotected isFirstSmaller(small: Date, big: Date, task: ITask): boolean {\n\t\tif (small.valueOf() < big.valueOf() && this._gantt._hasDuration(small, big, task)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected isGreaterOrDefault(smallDate: Date, bigDate: Date, task: ITask): boolean {\n\t\treturn !!(!smallDate || this.isFirstSmaller(bigDate, smallDate, task));\n\t}\n\n\tprotected getSuccessorStartDate(id: TaskID, plansHash: IPlansHash): Date {\n\t\tconst plan = plansHash[id];\n\t\tconst task = this._gantt.getTask(id);\n\t\tlet res;\n\n\t\tif (!(plan && (plan.start_date || plan.end_date))) {\n\t\t\tres = task.start_date;\n\t\t} else if (plan.start_date) {\n\t\t\tres = plan.start_date;\n\t\t} else {\n\t\t\tres = this._gantt.calculateEndDate({ start_date: plan.end_date, duration: - task.duration, task });\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tprotected getLatestEndDate(relation: IInternalLink, plansHash: IPlansHash, task: ITask) {\n\t\tconst successorStart = this.getSuccessorStartDate(relation.target, plansHash);\n\t\tconst predecessor = task;\n\n\t\tlet predecessorEnd = this._gantt.getClosestWorkTime({ date: successorStart, dir: \"past\", task: predecessor });\n\n\t\tif (predecessorEnd && relation.lag && relation.lag * 1 === relation.lag * 1) {\n\t\t\tpredecessorEnd = this._gantt.calculateEndDate({ start_date: predecessorEnd, duration: -relation.lag * 1, task: predecessor });\n\t\t}\n\n\t\treturn predecessorEnd;\n\t}\n}","import { AlapStrategy } from \"./alap_strategy\";\nimport { AsapStrategy } from \"./asap_strategy\";\nimport { ConstraintTypes } from \"./constraint_types\";\nimport { ConstraintsHelper } from \"./constraints\";\nimport { TaskPlan } from \"./task_plan\";\n\nexport class AutoSchedulingPlanner {\n\tprivate _gantt: any;\n\tprivate _constraintsHelper: ConstraintsHelper;\n\tprivate _graphHelper: any;\n\tprivate _asapStrategy: AsapStrategy;\n\tprivate _alapStrategy: AlapStrategy;\n\n\tconstructor(\n\t\tgantt: any,\n\t\tgraphHelper: any,\n\t\tconstraintsHelper: ConstraintsHelper\n\t) {\n\t\tthis._gantt = gantt;\n\t\tthis._constraintsHelper = constraintsHelper;\n\t\tthis._graphHelper = graphHelper;\n\t\tthis._asapStrategy = AsapStrategy.Create(gantt);\n\t\tthis._alapStrategy = AlapStrategy.Create(gantt);\n\t}\n\n\tgeneratePlan(relations: IInternalLink[], constraints: ITask[]): TaskPlan[] {\n\t\tconst graphHelper = this._graphHelper;\n\t\tconst gantt = this._gantt;\n\t\tconst constraintsHelper = this._constraintsHelper;\n\t\tconst alapStrategy = this._alapStrategy;\n\t\tconst asapStrategy = this._asapStrategy;\n\n\t\tconst {\n\t\t\torderedIds,\n\t\t\treversedIds,\n\t\t\trelationsMap,\n\t\t\tplansHash } = this.buildWorkCollections(relations, constraints, graphHelper);\n\n\t\tlet result: TaskPlan[];\n\n\t\tthis.processConstraints(orderedIds, plansHash, gantt, constraintsHelper);\n\n\t\tif (gantt.config.schedule_from_end) {\n\t\t\t// when scheduling from end - iterate tasks from end and schedule them as late as possible\n\t\t\t// after that - iterate tasks from start and schedule asap tasks\n\t\t\tresult = this.iterateTasks(reversedIds, orderedIds, constraintsHelper.isAlapTask, alapStrategy, asapStrategy, relationsMap, plansHash);\n\t\t} else {\n\t\t\t// when scheduling from end - iterate tasks from start and schedule them as soon as possible\n\t\t\t// after that - iterate tasks from end and schedule asap alap\n\t\t\tresult = this.iterateTasks(orderedIds, reversedIds, constraintsHelper.isAsapTask, asapStrategy, alapStrategy, relationsMap, plansHash);\n\t\t}\n\t\treturn result;\n\t}\n\n\tapplyProjectPlan(projectPlan: TaskPlan[]): ITask[] {\n\t\tconst gantt = this._gantt;\n\n\t\tlet plan: TaskPlan;\n\t\tlet task: ITask;\n\t\tlet link: ILink;\n\t\tlet reason: ITask;\n\n\t\tconst updateTasks = [];\n\t\tfor (let i = 0; i < projectPlan.length; i++) {\n\t\t\tlink = null;\n\t\t\treason = null;\n\t\t\tplan = projectPlan[i];\n\n\t\t\tif (!plan.task) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttask = gantt.getTask(plan.task);\n\t\t\tif (plan.link) {\n\t\t\t\tlink = gantt.getLink(plan.link);\n\t\t\t\tif (plan.kind === \"asap\") {\n\t\t\t\t\treason = this._gantt.getTask(link.source);\n\t\t\t\t} else {\n\t\t\t\t\t// alap tasks are scheduled by their successors\n\t\t\t\t\treason = this._gantt.getTask(link.target);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet newDate = null;\n\t\t\tif (\n\t\t\t\tplan.start_date &&\n\t\t\t\ttask.start_date.valueOf() !== plan.start_date.valueOf()\n\t\t\t) {\n\t\t\t\tnewDate = plan.start_date;\n\t\t\t}\n\n\t\t\tif (!newDate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttask.start_date = newDate;\n\t\t\ttask.end_date = gantt.calculateEndDate(task);\n\n\t\t\tupdateTasks.push(task.id);\n\t\t\tgantt.callEvent(\"onAfterTaskAutoSchedule\", [\n\t\t\t\ttask,\n\t\t\t\tnewDate,\n\t\t\t\tlink,\n\t\t\t\treason\n\t\t\t]);\n\t\t}\n\t\treturn updateTasks;\n\t}\n\n\tprotected iterateTasks(\n\t\tmainSequence: TaskID[],\n\t\tsecondarySequence: TaskID[],\n\t\tisMainSequence: (task: ITask) => boolean,\n\t\tmainSequenceStrategy: ISchedulingStrategy,\n\t\tsecondarySequenceStrategy: ISchedulingStrategy,\n\t\trelationsMap: ITaskLinksMap,\n\t\tplansHash: IPlansHash\n\n\t): TaskPlan[] {\n\t\tconst gantt = this._gantt;\n\t\tconst result: TaskPlan[] = [];\n\n\t\tfor (let i = 0; i < mainSequence.length; i++) {\n\t\t\tconst currentId = mainSequence[i];\n\t\t\tconst task = gantt.getTask(currentId);\n\t\t\tconst plan = mainSequenceStrategy.resolveRelationDate(\n\t\t\t\tcurrentId,\n\t\t\t\trelationsMap[currentId],\n\t\t\t\tplansHash\n\t\t\t);\n\t\t\tthis.limitPlanDates(task, plan);\n\t\t\tif (isMainSequence(task)) {\n\t\t\t\tthis.processResolvedDate(task, plan, result, plansHash);\n\t\t\t} else {\n\t\t\t\tplansHash[task.id] = plan;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < secondarySequence.length; i++) {\n\t\t\tconst currentId = secondarySequence[i];\n\t\t\tconst task = gantt.getTask(currentId);\n\n\t\t\tif (!isMainSequence(task)) {\n\t\t\t\tconst plan = secondarySequenceStrategy.resolveRelationDate(\n\t\t\t\t\tcurrentId,\n\t\t\t\t\trelationsMap[currentId],\n\t\t\t\t\tplansHash\n\t\t\t\t);\n\t\t\t\tthis.limitPlanDates(task, plan);\n\t\t\t\tthis.processResolvedDate(task, plan, result, plansHash);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprotected processResolvedDate(\n\t\ttask: ITask,\n\t\tplan: TaskPlan,\n\t\tresult: TaskPlan[],\n\t\tplansHash: any\n\t): void {\n\t\tif (plan.start_date && this._gantt.isLinkExists(plan.link)) {\n\t\t\tlet link = null;\n\t\t\tlet reason = null;\n\t\t\tif (plan.link) {\n\t\t\t\tlink = this._gantt.getLink(plan.link);\n\t\t\t\tif (plan.kind === \"asap\") {\n\t\t\t\t\treason = this._gantt.getTask(link.source);\n\t\t\t\t} else {\n\t\t\t\t\t// alap tasks are scheduled by their successors\n\t\t\t\t\treason = this._gantt.getTask(link.target);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttask.start_date.valueOf() !== plan.start_date.valueOf() &&\n\t\t\t\tthis._gantt.callEvent(\"onBeforeTaskAutoSchedule\", [\n\t\t\t\t\ttask,\n\t\t\t\t\tplan.start_date,\n\t\t\t\t\tlink,\n\t\t\t\t\treason\n\t\t\t\t]) === false\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tplansHash[task.id] = plan;\n\t\tif (plan.start_date) {\n\t\t\tresult.push(plan);\n\t\t}\n\t}\n\n\tprotected limitPlanDates(task: ITask, plan: TaskPlan): TaskPlan {\n\t\tconst effectiveStart = plan.start_date || task.start_date;\n\n\t\tif (plan.earliestStart) {\n\t\t\tif (effectiveStart < plan.earliestStart) {\n\t\t\t\tplan.start_date = plan.earliestStart;\n\t\t\t\tplan.end_date = plan.earliestEnd;\n\t\t\t}\n\t\t}\n\n\t\tif (plan.latestStart) {\n\t\t\tif (effectiveStart > plan.latestStart) {\n\t\t\t\tplan.start_date = plan.latestStart;\n\t\t\t\tplan.end_date = plan.latestEnd;\n\t\t\t}\n\t\t}\n\n\t\tif (plan.latestSchedulingStart && effectiveStart > plan.latestSchedulingStart) {\n\t\t\tplan.start_date = plan.latestSchedulingStart;\n\t\t\tplan.end_date = plan.latestSchedulingEnd;\n\t\t}\n\n\t\tif (plan.earliestSchedulingStart && effectiveStart < plan.earliestSchedulingStart) {\n\t\t\tplan.start_date = plan.earliestSchedulingStart;\n\t\t\tplan.end_date = plan.earliestSchedulingEnd;\n\t\t}\n\n\t\tif (plan.start_date) { // start/end dates are either both defined or both not\n\t\t\tif (plan.start_date > plan.latestSchedulingStart ||\n\t\t\t\tplan.start_date < plan.earliestSchedulingStart ||\n\t\t\t\tplan.start_date > plan.latestStart ||\n\t\t\t\tplan.start_date < plan.earliestStart ||\n\t\t\t\tplan.end_date > plan.latestSchedulingEnd ||\n\t\t\t\tplan.end_date < plan.earliestSchedulingEnd ||\n\t\t\t\tplan.end_date > plan.latestEnd ||\n\t\t\t\tplan.end_date < plan.earliestEnd) {\n\n\t\t\t\tplan.conflict = true;\n\t\t\t}\n\t\t}\n\t\treturn plan;\n\t}\n\n\tprotected buildWorkCollections(relations: IInternalLink[], constraints: ITask[], graphHelper: any) {\n\t\tconst gantt = this._gantt;\n\t\tconst orderedIds: TaskID[] = graphHelper.topologicalSort(relations);\n\t\tconst reversedIds: TaskID[] = orderedIds.slice().reverse();\n\t\tconst plansHash: IPlansHash = {};\n\n\t\tconst relationsMap: ITaskLinksMap = {};\n\t\tfor (let i = 0, len = orderedIds.length; i < len; i++) {\n\t\t\tconst id = orderedIds[i];\n\t\t\tconst task = gantt.getTask(id);\n\t\t\tif (task.auto_scheduling === false) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trelationsMap[id] = {\n\t\t\t\tsuccessors: [],\n\t\t\t\tpredecessors: []\n\t\t\t};\n\n\t\t\tplansHash[id] = null;\n\t\t}\n\n\t\tfor (let i = 0, len = constraints.length; i < len; i++) {\n\t\t\tconst task = constraints[i];\n\n\t\t\tif (plansHash[task.id] === undefined) {\n\t\t\t\treversedIds.unshift(task.id);\n\t\t\t\torderedIds.unshift(task.id);\n\t\t\t\tplansHash[task.id] = null;\n\t\t\t\trelationsMap[task.id] = {\n\t\t\t\t\tsuccessors: [],\n\t\t\t\t\tpredecessors: []\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0, len = relations.length; i < len; i++) {\n\t\t\tconst rel = relations[i];\n\t\t\tif (relationsMap[rel.source]) {\n\t\t\t\trelationsMap[rel.source].successors.push(rel);\n\t\t\t}\n\n\t\t\tif (relationsMap[rel.target]) {\n\t\t\t\trelationsMap[rel.target].predecessors.push(rel);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\torderedIds,\n\t\t\treversedIds,\n\t\t\trelationsMap,\n\t\t\tplansHash\n\t\t};\n\t}\n\n\tprotected processConstraints(orderedIds: TaskID[], plansHash: IPlansHash, gantt: any, constraintsHelper: ConstraintsHelper) {\n\t\tfor (let i = 0; i < orderedIds.length; i++) {\n\t\t\tconst currentId = orderedIds[i];\n\t\t\tconst task = gantt.getTask(currentId);\n\n\t\t\tconst constraintType = constraintsHelper.getConstraintType(task);\n\t\t\tif (\n\t\t\t\tconstraintType &&\n\t\t\t\tconstraintType !== ConstraintTypes.ASAP &&\n\t\t\t\tconstraintType !== ConstraintTypes.ALAP\n\t\t\t) {\n\t\t\t\tconst plan = constraintsHelper.processConstraint(\n\t\t\t\t\ttask,\n\t\t\t\t\tTaskPlan.Create()\n\t\t\t\t);\n\t\t\t\tplansHash[task.id] = plan;\n\t\t\t}\n\t\t}\n\t}\n}\n","import { ConstraintTypes } from \"./constraint_types\";\nimport { TaskPlan } from \"./task_plan\";\n\nexport class ConstraintsHelper {\n\tstatic Create(gantt: any): ConstraintsHelper {\n\t\treturn new ConstraintsHelper(gantt);\n\t}\n\n\tprivate _gantt: any;\n\tprivate constructor(gantt: any) {\n\t\tthis._gantt = gantt;\n\t}\n\n\tisAsapTask = (task: ITask): boolean => {\n\t\tconst constraintType = this.getConstraintType(task);\n\t\tif (this._gantt.config.schedule_from_end) {\n\t\t\tif (constraintType === ConstraintTypes.ASAP) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tif (constraintType === ConstraintTypes.ALAP) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tisAlapTask = (task: ITask): boolean => {\n\t\treturn !this.isAsapTask(task);\n\t}\n\n\tgetConstraintType = (task: ITask): ConstraintTypes => {\n\t\t// in case of backward scheduling, tasks without explicit constraints are considered ALAP tasks\n\t\tif (task.constraint_type) {\n\t\t\treturn task.constraint_type;\n\t\t} else if (this._gantt.config.schedule_from_end) {\n\t\t\treturn ConstraintTypes.ALAP;\n\t\t} else {\n\t\t\treturn ConstraintTypes.ASAP;\n\t\t}\n\t}\n\n\thasConstraint = (task: ITask): boolean => {\n\t\treturn !!this.getConstraintType(task);\n\t}\n\n\tprocessConstraint = (task: ITask, plan: TaskPlan): TaskPlan => {\n\t\tif (this.hasConstraint(task)) {\n\t\t\tif (\n\t\t\t\ttask.constraint_type === ConstraintTypes.ALAP ||\n\t\t\t\ttask.constraint_type === ConstraintTypes.ASAP\n\t\t\t) {\n\t\t\t\t// this kind of constraint is calculated after main scheduling\n\t\t\t} else {\n\t\t\t\tconst constraintDate = task.constraint_date;\n\n\t\t\t\tconst newPlan = TaskPlan.Create(plan);\n\t\t\t\tnewPlan.task = task.id;\n\n\t\t\t\tswitch (task.constraint_type) {\n\t\t\t\t\tcase ConstraintTypes.SNET:\n\t\t\t\t\t\tnewPlan.earliestStart = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.earliestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.earliestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.SNLT:\n\t\t\t\t\t\tnewPlan.latestStart = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.latestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.latestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.FNET:\n\t\t\t\t\t\tnewPlan.earliestStart = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: constraintDate,\n\t\t\t\t\t\t\tduration: -task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.earliestEnd = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.FNLT:\n\t\t\t\t\t\tnewPlan.latestStart = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: constraintDate,\n\t\t\t\t\t\t\tduration: -task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.latestEnd = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.MSO:\n\t\t\t\t\t\tnewPlan.earliestStart = new Date(constraintDate);\n\t\t\t\t\t\tnewPlan.earliestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.earliestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.latestStart = newPlan.earliestStart;\n\t\t\t\t\t\tnewPlan.latestEnd = newPlan.earliestEnd;\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ConstraintTypes.MFO:\n\t\t\t\t\t\tnewPlan.earliestStart = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: constraintDate,\n\t\t\t\t\t\t\tduration: -task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.earliestEnd = this._gantt.calculateEndDate({\n\t\t\t\t\t\t\tstart_date: newPlan.earliestStart,\n\t\t\t\t\t\t\tduration: task.duration,\n\t\t\t\t\t\t\ttask\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnewPlan.latestStart = newPlan.earliestStart;\n\t\t\t\t\t\tnewPlan.latestEnd = newPlan.earliestEnd;\n\t\t\t\t\t\tnewPlan.link = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\treturn newPlan;\n\t\t\t}\n\t\t}\n\n\t\treturn plan;\n\t}\n\n\tgetConstraints = (id: TaskID, relations: IInternalLink[]): ITask[] => {\n\t\tconst result = [];\n\t\tconst tasks = {};\n\n\t\tconst store = (task: any) => {\n\t\t\tif (tasks[task.id]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.hasConstraint(task) && !this._gantt.isSummaryTask(task)) {\n\t\t\t\ttasks[task.id] = task;\n\t\t\t}\n\t\t};\n\n\t\tif (this._gantt.isTaskExists(id)) {\n\t\t\tconst task = this._gantt.getTask(id);\n\t\t\tstore(task);\n\t\t}\n\n\t\tthis._gantt.eachTask(task => store(task), id);\n\n\t\tlet current;\n\t\tif (relations) {\n\t\t\tfor (let i = 0; i < relations.length; i++) {\n\t\t\t\tconst rel = relations[i];\n\t\t\t\tif (!tasks[rel.target]) {\n\t\t\t\t\tcurrent = this._gantt.getTask(rel.target);\n\t\t\t\t\tstore(current);\n\t\t\t\t}\n\t\t\t\tif (!tasks[rel.source]) {\n\t\t\t\t\tcurrent = this._gantt.getTask(rel.source);\n\t\t\t\t\tstore(current);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const taskId in tasks) {\n\t\t\tresult.push(tasks[taskId]);\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","require(\"../core/relations/links_common\")(gantt);\n\nvar linksBuilder = require(\"../core/relations/links_builder\")(gantt);\nvar graphHelper = require(\"../core/relations/graph_helper\")(gantt);\nvar ConstraintTypes = require(\"./auto_scheduling/constraint_types\").ConstraintTypes;\n\nvar constraintsHelper = require(\"./auto_scheduling/constraints\").ConstraintsHelper.Create(\n\tgantt\n);\nvar AutoSchedulingPlanner = require(\"./auto_scheduling/planner\")\n\t.AutoSchedulingPlanner;\n\nvar planner = new AutoSchedulingPlanner(gantt, graphHelper, constraintsHelper);\n\nvar ConnectedGroupsHelper = require(\"./auto_scheduling/connected_groups\")\n\t.ConnectedGroupsHelper;\nvar connectedGroups = new ConnectedGroupsHelper(gantt, linksBuilder);\n\nvar LoopsFinder = require(\"./auto_scheduling/loops_finder\").LoopsFinder;\n\nvar loopsFinder = new LoopsFinder(\n\tgantt,\n\tgraphHelper,\n\tlinksBuilder\n);\n\ngantt.getConnectedGroup = connectedGroups.getConnectedGroup;\ngantt.getConstraintType = constraintsHelper.getConstraintType;\ngantt.getConstraintLimitations = function (task) {\n\tvar plan = constraintsHelper.processConstraint(task, null);\n\treturn {\n\t\tearliestStart: plan.earliestStart || null,\n\t\tearliestEnd: plan.earliestEnd || null,\n\t\tlatestStart: plan.latestStart || null,\n\t\tlatestEnd: plan.latestEnd || null\n\t};\n};\n\ngantt.isCircularLink = loopsFinder.isCircularLink;\ngantt.findCycles = loopsFinder.findCycles;\n\ngantt.config.constraint_types = ConstraintTypes;\ngantt.config.auto_scheduling = false;\ngantt.config.auto_scheduling_descendant_links = false;\ngantt.config.auto_scheduling_initial = true;\ngantt.config.auto_scheduling_strict = false;\ngantt.config.auto_scheduling_move_projects = true;\ngantt.config.project_start = null;\ngantt.config.project_end = null;\ngantt.config.schedule_from_end = false;\n\nfunction preferInitialTaskDates(startTask, relations) {\n\t// TODO: remove in 7.0\n\tif (!gantt.config.auto_scheduling_compatibility) {\n\t\treturn;\n\t}\n\n\t// .preferredStart still exists only to emulate pre 6.1 auto scheduling behavior\n\t// will be removed in future versions\n\tfor (var i = 0; i < relations.length; i++) {\n\t\tvar rel = relations[i];\n\t\tvar task = gantt.getTask(rel.target);\n\n\t\tif (!gantt.config.auto_scheduling_strict || rel.target == startTask) {\n\t\t\trel.preferredStart = new Date(task.start_date);\n\t\t}\n\t}\n}\n\nfunction updateParentsAndCallEvents(updatedTasks) {\n\tfunction resetTime(task) {\n\t\tif (batchUpdate)\n\t\t\treturn;\n\n\t\tvar start = task.start_date.valueOf(),\n\t\t\tend = task.end_date.valueOf();\n\n\t\tgantt.resetProjectDates(task);\n\t\tif (task.start_date.valueOf() != start || task.end_date.valueOf() != end) {\n\t\t\tbatchUpdate = true;\n\t\t\treturn;\n\t\t}\n\t\tvar children = gantt.getChildren(task.id);\n\t\tfor (var i = 0; !batchUpdate && i < children.length; i++) {\n\t\t\tresetTime(gantt.getTask(children[i]));\n\t\t}\n\t}\n\n\tvar batchUpdate = false;\n\t// call batchUpdate (full repaint) only if we update multiple tasks,\n\tif (updatedTasks.length == 1) {\n\t\tgantt.eachParent(resetTime, updatedTasks[0]);\n\t} else if (updatedTasks.length) {\n\t\tbatchUpdate = true;\n\t}\n\n\tfunction payload() {\n\t\tfor (var i = 0; i < updatedTasks.length; i++) {\n\t\t\tgantt.updateTask(updatedTasks[i]);\n\t\t}\n\t}\n\tif (batchUpdate) {\n\t\tgantt.batchUpdate(payload);\n\t} else {\n\t\tpayload();\n\t}\n}\n\ngantt._autoSchedule = function (id, relations) {\n\tif (gantt.callEvent(\"onBeforeAutoSchedule\", [id]) === false) {\n\t\treturn;\n\t}\n\tgantt._autoscheduling_in_progress = true;\n\n\tvar constraints = constraintsHelper.getConstraints(\n\t\tid,\n\t\tgantt.isTaskExists(id) ? relations : null\n\t);\n\n\tvar updatedTasks = [];\n\n\tvar cycles = graphHelper.findLoops(relations);\n\tif (cycles.length) {\n\t\tgantt.callEvent(\"onAutoScheduleCircularLink\", [cycles]);\n\t} else {\n\t\tpreferInitialTaskDates(id, relations);\n\n\t\tvar plan = planner.generatePlan(relations, constraints);\n\t\tupdatedTasks = planner.applyProjectPlan(plan);\n\n\t\tupdateParentsAndCallEvents(updatedTasks);\n\t}\n\n\tgantt._autoscheduling_in_progress = false;\n\tgantt.callEvent(\"onAfterAutoSchedule\", [id, updatedTasks]);\n};\n\ngantt.autoSchedule = function (id, inclusive) {\n\tif (inclusive === undefined) {\n\t\tinclusive = true;\n\t} else {\n\t\tinclusive = !!inclusive;\n\t}\n\n\tvar relations;\n\tif (id !== undefined) {\n\t\tif (gantt.config.auto_scheduling_compatible) {\n\t\t\tlinksBuilder.getLinkedTasks(id, inclusive);\n\t\t} else {\n\t\t\trelations = connectedGroups.getConnectedGroupRelations(id);\n\t\t}\n\t} else {\n\t\trelations = linksBuilder.getLinkedTasks();\n\t}\n\n\tgantt._autoSchedule(id, relations);\n};\n\ngantt.attachEvent(\"onTaskLoading\", function (task) {\n\tif (task.constraint_date && typeof task.constraint_date === \"string\") {\n\t\ttask.constraint_date = gantt.date.parseDate(task.constraint_date, \"parse_date\");\n\t}\n\ttask.constraint_type = gantt.getConstraintType(task);\n\treturn true;\n});\ngantt.attachEvent(\"onTaskCreated\", function (task) {\n\ttask.constraint_type = gantt.getConstraintType(task);\n\treturn true;\n});\n\nvar attachUIHandlers = require(\"./auto_scheduling/ui_handlers\").attachUIHandlers;\nattachUIHandlers(gantt, linksBuilder, loopsFinder, connectedGroups);\n","export class TaskPlan implements ITaskPlan {\n\tstatic Create(parent?: TaskPlan): TaskPlan {\n\t\tconst plan = new TaskPlan();\n\t\tif (parent) {\n\t\t\tfor (const i in plan) {\n\t\t\t\tif (parent[i] !== undefined) {\n\t\t\t\t\tplan[i] = parent[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn plan;\n\t}\n\n\tpublic link: string | number;\n\tpublic task: string | number;\n\t// tslint:disable-next-line variable-name\n\tpublic start_date: Date | null;\n\t// tslint:disable-next-line variable-name\n\tpublic end_date: Date | null;\n\n\tpublic latestStart: Date;\n\tpublic earliestStart: Date;\n\tpublic earliestEnd: Date;\n\tpublic latestEnd: Date;\n\n\tpublic latestSchedulingStart: Date;\n\tpublic earliestSchedulingStart: Date;\n\tpublic latestSchedulingEnd: Date;\n\tpublic earliestSchedulingEnd: Date;\n\n\tpublic kind: string;\n\tpublic conflict: boolean;\n\n\tconstructor() {\n\t\tthis.link = null;\n\t\tthis.task = null;\n\t\tthis.start_date = null;\n\t\tthis.end_date = null;\n\t\tthis.latestStart = null;\n\t\tthis.earliestStart = null;\n\t\tthis.earliestEnd = null;\n\t\tthis.latestEnd = null;\n\t\tthis.latestSchedulingStart = null;\n\t\tthis.earliestSchedulingStart = null;\n\t\tthis.latestSchedulingEnd = null;\n\t\tthis.earliestSchedulingEnd = null;\n\t\tthis.kind = \"asap\";\n\t\tthis.conflict = false;\n\t}\n}","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","module.exports = true;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = require('./_wks');\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var helpers = require(\"./helpers\");\n\nfunction copy(object) {\n\tvar i, result; // iterator, types array, result\n\n\tif (object && typeof object == \"object\") {\n\n\t\tswitch (true){\n\t\t\tcase (helpers.isDate(object)):\n\t\t\t\tresult = new Date(object);\n\t\t\t\tbreak;\n\t\t\tcase (helpers.isArray(object)):\n\t\t\t\tresult = new Array(object.length);\n\t\t\t\tfor(i = 0; i < object.length; i++){\n\t\t\t\t\tresult[i] = copy(object[i]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase (helpers.isStringObject(object)):\n\t\t\t\tresult = new String(object);\n\t\t\t\tbreak;\n\t\t\tcase (helpers.isNumberObject(object)):\n\t\t\t\tresult = new Number(object);\n\t\t\t\tbreak;\n\t\t\tcase (helpers.isBooleanObject(object)):\n\t\t\t\tresult = new Boolean(object);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresult = {};\n\t\t\t\tfor (i in object) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.apply(object, [i]))\n\t\t\t\t\t\tresult[i] = copy(object[i]);\n\t\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn result || object;\n}\n\nfunction mixin (target, source, force){\n\tfor (var f in source)\n\t\tif (((target[f] === undefined) || force)) target[f]=source[f];\n\treturn target;\n}\n\nfunction defined(obj) {\n\treturn typeof(obj) != \"undefined\";\n}\n\nvar seed;\nfunction uid() {\n\tif (!seed)\n\t\tseed = (new Date()).valueOf();\n\n\tseed++;\n\treturn seed;\n}\n\n//creates function with specified \"this\" pointer\nfunction bind(functor, object){\n\tif(functor.bind)\n\t\treturn functor.bind(object);\n\telse\n\t\treturn function(){ return functor.apply(object,arguments); };\n}\n\nfunction event(el, event, handler, capture){\n\tif (el.addEventListener)\n\t\tel.addEventListener(event, handler, capture === undefined ? false : capture);\n\n\telse if (el.attachEvent)\n\t\tel.attachEvent(\"on\"+event, handler);\n}\n\nfunction eventRemove(el, event, handler, capture){\n\tif (el.removeEventListener)\n\t\tel.removeEventListener(event, handler, capture === undefined ? false : capture);\n\n\telse if (el.detachEvent)\n\t\tel.detachEvent(\"on\"+event, handler);\n}\n\nmodule.exports = {\n\tcopy: copy,\n\tdefined: defined,\n\tmixin: mixin,\n\tuid: uid,\n\tbind: bind,\n\tevent: event,\n\teventRemove: eventRemove\n};","//returns position of html element on the page\nfunction elementPosition(elem) {\n\tvar top=0, left=0, right=0, bottom=0;\n\tif (elem.getBoundingClientRect) { //HTML5 method\n\t\tvar box = elem.getBoundingClientRect();\n\t\tvar body = document.body;\n\t\tvar docElem = (document.documentElement ||\n\t\t\tdocument.body.parentNode ||\n\t\t\tdocument.body);\n\n\t\tvar scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n\t\tvar scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n\t\tvar clientTop = docElem.clientTop || body.clientTop || 0;\n\t\tvar clientLeft = docElem.clientLeft || body.clientLeft || 0;\n\t\ttop = box.top + scrollTop - clientTop;\n\t\tleft = box.left + scrollLeft - clientLeft;\n\n\t\tright = document.body.offsetWidth - box.right;\n\t\tbottom = document.body.offsetHeight - box.bottom;\n\t} else { //fallback to naive approach\n\t\twhile(elem) {\n\t\t\ttop = top + parseInt(elem.offsetTop,10);\n\t\t\tleft = left + parseInt(elem.offsetLeft,10);\n\t\t\telem = elem.offsetParent;\n\t\t}\n\n\t\tright = document.body.offsetWidth - elem.offsetWidth - left;\n\t\tbottom = document.body.offsetHeight - elem.offsetHeight - top;\n\t}\n\treturn { y: Math.round(top), x: Math.round(left), width:elem.offsetWidth, height:elem.offsetHeight, right: Math.round(right), bottom: Math.round(bottom) };\n}\n\nfunction isVisible(node){\n\tvar display = false,\n\t\tvisibility = false;\n\tif(window.getComputedStyle){\n\t\tvar style = window.getComputedStyle(node, null);\n\t\tdisplay = style[\"display\"];\n\t\tvisibility = style[\"visibility\"];\n\t}else if(node.currentStyle){\n\t\tdisplay = node.currentStyle[\"display\"];\n\t\tvisibility = node.currentStyle[\"visibility\"];\n\t}\n\treturn (display != \"none\" && visibility != \"hidden\");\n}\n\nfunction hasNonNegativeTabIndex(node){\n\treturn !isNaN(node.getAttribute(\"tabindex\")) && (node.getAttribute(\"tabindex\")*1 >= 0);\n}\n\nfunction hasHref(node){\n\tvar canHaveHref = {\"a\": true, \"area\": true};\n\tif(canHaveHref[node.nodeName.loLowerCase()]){\n\t\treturn !!node.getAttribute(\"href\");\n\t}\n\treturn true;\n}\n\nfunction isEnabled(node){\n\tvar canDisable = {\"input\":true, \"select\":true, \"textarea\":true, \"button\":true, \"object\":true};\n\tif(canDisable[node.nodeName.toLowerCase()]){\n\t\treturn !node.hasAttribute(\"disabled\");\n\t}\n\n\treturn true;\n}\n\nfunction getFocusableNodes(root){\n\tvar nodes = root.querySelectorAll([\n\t\t\"a[href]\",\n\t\t\"area[href]\",\n\t\t\"input\",\n\t\t\"select\",\n\t\t\"textarea\",\n\t\t\"button\",\n\t\t\"iframe\",\n\t\t\"object\",\n\t\t\"embed\",\n\t\t\"[tabindex]\",\n\t\t\"[contenteditable]\"\n\t].join(\", \"));\n\n\tvar nodesArray = Array.prototype.slice.call(nodes, 0);\n\tfor(var i = 0; i < nodesArray.length; i++){\n\t\tvar node = nodesArray[i];\n\t\tvar isValid = (hasNonNegativeTabIndex(node) || isEnabled(node) || hasHref(node)) && isVisible(node);\n\t\tif(!isValid){\n\t\t\tnodesArray.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n\treturn nodesArray;\n}\n\nfunction getScrollSize(){\n\tvar div = document.createElement(\"div\");\n\tdiv.style.cssText=\"visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;\";\n\n\tdocument.body.appendChild(div);\n\tvar width = div.offsetWidth-div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn width;\n}\n\nfunction getClassName(node){\n\tif(!node) return \"\";\n\n\tvar className = node.className || \"\";\n\tif(className.baseVal)//'className' exist but not a string - IE svg element in DOM\n\t\tclassName = className.baseVal;\n\n\tif(!className.indexOf)\n\t\tclassName = \"\";\n\n\treturn _trimString(className);\n}\n\nfunction addClassName(node, className){\n\tif (className && node.className.indexOf(className) === -1) {\n\t\tnode.className += \" \" + className;\n\t}\n}\n\nfunction removeClassName(node, name) {\n\tname = name.split(\" \");\n\tfor (var i = 0; i < name.length; i++) {\n\t\tvar regEx = new RegExp(\"\\\\s?\\\\b\" + name[i] + \"\\\\b(?![-_.])\", \"\");\n\t\tnode.className = node.className.replace(regEx, \"\");\n\t}\n}\n\nfunction hasClass(element, className){\n\tif ('classList' in element) {\n\t\treturn element.classList.contains(className);\n\t} else { \n\t\treturn new RegExp(\"\\\\b\" + className + \"\\\\b\").test(element.className);\n\t}\n}\n\nfunction toNode(node) {\n\tif (typeof node === \"string\") {\n\t\treturn (document.getElementById(node) || document.querySelector(node) || document.body);\n\t}\n\treturn node || document.body;\n}\n\nvar _slave = document.createElement(\"div\");\nfunction insert(node, newone) {\n\t_slave.innerHTML = newone;\n\tvar child = _slave.firstChild;\n\tnode.appendChild(child);\n\treturn child;\n}\n\nfunction remove(node) {\n\tif (node && node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\nfunction getChildren(node, css) {\n\tvar ch = node.childNodes;\n\tvar len = ch.length;\n\tvar out = [];\n\tfor (var i = 0; i < len; i++) {\n\t\tvar obj = ch[i];\n\t\tif (obj.className && obj.className.indexOf(css) !== -1) {\n\t\t\tout.push(obj);\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction getTargetNode(e){\n\tvar trg;\n\tif (e.tagName)\n\t\ttrg = e;\n\telse {\n\t\te=e||window.event;\n\t\ttrg=e.target||e.srcElement;\n\t}\n\treturn trg;\n}\n\nfunction locateAttribute(e, attribute) {\n\tif(!attribute) return;\n\n\tvar trg = getTargetNode(e);\n\n\twhile (trg){\n\t\tif (trg.getAttribute){\t//text nodes has not getAttribute\n\t\t\tvar test = trg.getAttribute(attribute);\n\t\t\tif (test) return trg;\n\t\t}\n\t\ttrg=trg.parentNode;\n\t}\n\treturn null;\n}\n\nfunction _trimString(str){\n\tvar func = String.prototype.trim || function(){ return this.replace(/^\\s+|\\s+$/g, \"\"); };\n\treturn func.apply(str);\n}\n\nfunction locateClassName(e, classname, strict){\n\tvar trg = getTargetNode(e);\n\tvar css = \"\";\n\n\tif(strict === undefined)\n\t\tstrict = true;\n\n\twhile (trg){\n\t\tcss = getClassName(trg);\n\t\tif(css){\n\t\t\tvar ind = css.indexOf(classname);\n\t\t\tif (ind >= 0){\n\t\t\t\tif (!strict)\n\t\t\t\t\treturn trg;\n\n\t\t\t\t//check that we have exact match\n\t\t\t\tvar left = (ind === 0) || (!_trimString(css.charAt(ind - 1)));\n\t\t\t\tvar right = ((ind + classname.length >= css.length)) || (!_trimString(css.charAt(ind + classname.length)));\n\n\t\t\t\tif (left && right)\n\t\t\t\t\treturn trg;\n\t\t\t}\n\t\t}\n\t\ttrg=trg.parentNode;\n\t}\n\treturn null;\n}\n\n/*\nevent position relatively to DOM element\n */\nfunction getRelativeEventPosition(ev, node){\n\tvar d = document.documentElement;\n\tvar box = elementPosition(node);\n\n\treturn {\n\t\tx: ev.clientX + d.scrollLeft - d.clientLeft - box.x + node.scrollLeft,\n\t\ty: ev.clientY + d.scrollTop - d.clientTop - box.y + node.scrollTop\n\t};\n}\n\nfunction isChildOf(child, parent){\n\tif(!child || !parent){\n\t\treturn false;\n\t}\n\n\twhile(child && child != parent) {\n\t\tchild = child.parentNode;\n\t}\n\n\treturn child === parent;\n}\n\nfunction closest(element, selector){\n\tif(element.closest){\n\t\treturn element.closest(selector);\n\t}else if(element.matches || element.msMatchesSelector || element.webkitMatchesSelector){\n\t\tvar el = element;\n\t\tif (!document.documentElement.contains(el)) return null;\n\t\tdo {\n\t\t\tvar method = el.matches || el.msMatchesSelector || el.webkitMatchesSelector;\n\n\t\t\tif (method.call(el, selector)) return el;\n\t\t\tel = el.parentElement || el.parentNode;\n\t\t} while (el !== null && el.nodeType === 1); \n\t\treturn null;\n\t}else{\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\"Your browser is not supported\");\n\t\treturn null;\n\t}\n}\n\nmodule.exports = {\n\tgetNodePosition: elementPosition,\n\tgetFocusableNodes: getFocusableNodes,\n\tgetScrollSize: getScrollSize,\n\tgetClassName: getClassName,\n\taddClassName: addClassName,\n\tremoveClassName: removeClassName,\n\tinsertNode: insert,\n\tremoveNode: remove,\n\tgetChildNodes: getChildren,\n\ttoNode: toNode,\n\tlocateClassName:locateClassName,\n\tlocateAttribute: locateAttribute,\n\tgetTargetNode: getTargetNode,\n\tgetRelativeEventPosition: getRelativeEventPosition,\n\tisChildOf: isChildOf,\n\thasClass: hasClass,\n\tclosest: closest\n};","var utils = require(\"./utils\");\n\nfunction createScope(addEvent, removeEvent) {\n\taddEvent = addEvent || utils.event;\n\tremoveEvent = removeEvent || utils.eventRemove;\n\n\tvar handlers = [];\n\n\tvar eventScope = {\n\t\tattach: function(el, event, callback, capture){\n\t\t\thandlers.push({element: el, event:event, callback: callback, capture: capture});\n\t\t\taddEvent(el, event, callback, capture);\n\t\t},\n\t\tdetach: function(el, event, callback, capture){\n\t\t\tremoveEvent(el, event, callback, capture);\n\t\t\tfor(var i = 0; i < handlers.length; i++){\n\t\t\t\tvar handler = handlers[i];\n\t\t\t\tif (handler.element === el && handler.event === event && handler.callback === callback && handler.capture === capture) {\n\t\t\t\t\thandlers.splice(i, 1);\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdetachAll: function () {\n\t\t\tvar staticArray = handlers.slice();\n\t\t\t// original handlers array can be spliced on every iteration\n\t\t\tfor (var i = 0; i < staticArray.length; i++){\n\t\t\t\tvar handler = staticArray[i];\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, handler.capture);\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, undefined);\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, false);\n\t\t\t\teventScope.detach(handler.element, handler.event, handler.callback, true);\n\t\t\t}\n\t\t\thandlers.splice(0, handlers.length);\n\t\t},\n\t\textend: function(){\n\t\t\treturn createScope(this.event, this.eventRemove);\n\t\t}\n\t};\n\n\tif (!window.scopes) {\n\t\twindow.scopes = [];\n\t}\n\twindow.scopes.push(handlers);\n\treturn eventScope;\n}\n\nmodule.exports = createScope;","import * as domHelpers from \"../../utils/dom_helpers\";\n\ndeclare var gantt: any;\n\ninterface IViewPosition{\n\ttop: number;\n\tleft: number;\n}\n\ninterface IViewBox extends IViewPosition{\n\twidth: number;\n\theight: number;\n\tbottom: number;\n\tright: number;\n}\n\nexport class Tooltip {\n\tprivate _root: HTMLElement;\n\tprivate _tooltipNode: HTMLElement;\n\n\tgetNode() : HTMLElement {\n\t\tif (!this._tooltipNode){\n\t\t\tthis._tooltipNode = document.createElement(\"div\");\n\t\t\tthis._tooltipNode.className = \"gantt_tooltip\";\n\t\t\tgantt._waiAria.tooltipAttr(this._tooltipNode);\n\t\t}\n\t\treturn this._tooltipNode;\n\t}\n\n\tsetViewport(node: HTMLElement):Tooltip{\n\t\tthis._root = node;\n\t\treturn this;\n\t}\n\n\tshow(left: number, top: number): Tooltip;\n\tshow(event: MouseEvent) : Tooltip;\n\tshow(left: number | MouseEvent, top?: number): Tooltip {\n\t\tconst container = document.body;\n\t\tconst node = this.getNode();\n\n\t\tif(!domHelpers.isChildOf(node, container)){\n\t\t\tthis.hide();\n\t\t\tcontainer.appendChild(node);\n\t\t}\n\n\t\tif(left instanceof MouseEvent){\n\t\t\tconst position = this._calculateTooltipPosition(left);\n\t\t\ttop = position.top;\n\t\t\tleft = position.left;\n\t\t}\n\n\t\tnode.style.top = top + \"px\";\n\t\tnode.style.left = left + \"px\";\n\n\t\tgantt._waiAria.tooltipVisibleAttr(node);\n\t\treturn this;\n\t}\n\thide() : Tooltip{\n\t\tconst node = this.getNode();\n\t\tif(node && node.parentNode){\n\t\t\tnode.parentNode.removeChild(node);\n\t\t}\n\t\tgantt._waiAria.tooltipHiddenAttr(node);\n\t\treturn this;\n\t}\n\n\tsetContent(html: string) : Tooltip{\n\t\tconst node = this.getNode();\n\t\tnode.innerHTML = html;\n\t\treturn this;\n\t}\n\n\tprivate _getViewPort() : HTMLElement {\n\t\treturn this._root || document.body;\n\t}\n\n\n\tprivate _calculateTooltipPosition(event: MouseEvent): IViewPosition{\n\n\t\t// top/left coordinates inside the viewport by mouse position\n\t\tconst viewport = this._getViewPortSize();\n\t\tconst tooltipNode = this.getNode();\n\t\tconst tooltip: IViewBox = {\n\t\t\ttop:0,\n\t\t\tleft: 0,\n\t\t\twidth: tooltipNode.offsetWidth,\n\t\t\theight: tooltipNode.offsetHeight,\n\t\t\tbottom: 0,\n\t\t\tright: 0\n\t\t};\n\n\t\tconst offsetX = gantt.config.tooltip_offset_x;\n\t\tconst offsetY = gantt.config.tooltip_offset_y;\n\n\t\tconst container = document.body;\n\t\tconst mouse = domHelpers.getRelativeEventPosition(event, container);\n\t\ttooltip.top = mouse.y;\n\t\ttooltip.left = mouse.x;\n\t\ttooltip.top += offsetY;\n\t\ttooltip.left += offsetX;\n\t\ttooltip.bottom = tooltip.top + tooltip.height;\n\t\ttooltip.right = tooltip.left + tooltip.width;\n\n\t\t// edge cases when the tooltip element can be partially hidden by edges of the viewport\n\t\tif(tooltip.top < viewport.top){\n\t\t\ttooltip.top = viewport.top;\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\n\t\t}else if(tooltip.bottom > viewport.bottom){\n\t\t\ttooltip.bottom = viewport.bottom;\n\t\t\ttooltip.top = tooltip.bottom - tooltip.height;\n\t\t}\n\n\t\tif(tooltip.left < viewport.left){\n\t\t\ttooltip.left = viewport.left;\n\t\t\ttooltip.right = viewport.left + tooltip.width;\n\t\t}else if(tooltip.right > viewport.right){\n\t\t\ttooltip.right = viewport.right;\n\t\t\ttooltip.left = tooltip.right - tooltip.width;\n\t\t}\n\n\t\tif(mouse.x >= tooltip.left && mouse.x <= tooltip.right) {\n\t\t\ttooltip.left = mouse.x - tooltip.width - offsetX;\n\t\t\ttooltip.right = tooltip.left + tooltip.width;\n\t\t}\n\n\t\tif(mouse.y >= tooltip.top && mouse.y <= tooltip.bottom) {\n\t\t\ttooltip.top = mouse.y - tooltip.height - offsetY;\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\n\t\t}\n\n\t\treturn tooltip;\n\t}\n\n\tprivate _getViewPortSize() : IViewBox {\n\t\tconst container = this._getViewPort();\n\t\tlet viewport = container;\n\t\tlet scrollTop = window.scrollY + document.body.scrollTop;\n\t\tlet scrollLeft = window.scrollX + document.body.scrollLeft;\n\t\tlet pos;\n\t\t// support for the initial tooltip mode where the tooltip element was attached to the data area of gantt\n\t\tif(container === gantt.$task_data){\n\t\t\tviewport = gantt.$task;\n\t\t\tscrollTop = 0;\n\t\t\tscrollLeft = 0;\n\t\t\tpos = domHelpers.getNodePosition(gantt.$task);\n\t\t}else{\n\t\t\tpos = domHelpers.getNodePosition(viewport);\n\t\t}\n\t\treturn {\n\t\t\tleft:pos.x + scrollLeft,\n\t\t\ttop: pos.y + scrollTop,\n\t\t\twidth: pos.width,\n\t\t\theight: pos.height,\n\t\t\tbottom: pos.y + pos.height + scrollTop,\n\t\t\tright: pos.x + pos.width + scrollLeft\n\t\t};\n\t}\n}\n","import * as domEventsScope from \"../../utils/dom_event_scope\";\nimport * as domHelpers from \"../../utils/dom_helpers\";\nimport * as helpers from \"../../utils/helpers\";\nimport { Tooltip } from \"./tooltip\";\n\ninterface ITrackerTarget {\n\tselector: string;\n\tonmouseenter: (event: MouseEvent, node: HTMLElement) => void;\n\tonmousemove: (event: MouseEvent, node: HTMLElement) => void;\n\tonmouseleave: (event: MouseEvent, node: HTMLElement) => void;\n\tglobal: boolean;\n}\n\ninterface ITooltipConfig {\n\tselector: string;\n\thtml: (event: MouseEvent, node: HTMLElement) => string;\n\tglobal: boolean;\n}\n\ndeclare var gantt:any;\n\nexport class TooltipManager{\n\ttooltip: Tooltip = new Tooltip();\n\tprotected _domEvents: any;\n\tprivate _listeners: object = {};\n\tprivate delayShow: any;\n\tprivate delayHide: any;\n\n\tconstructor() {\n\t\tthis._domEvents = domEventsScope();\n\t\tthis._initDelayedFunctions();\n\t}\n\n\tdestructor(): void{\n\t\tthis.tooltip.hide();\n\t\tthis._domEvents.detachAll();\n\t}\n\thideTooltip(): void{\n\t\tthis.delayHide();\n\t}\n\tattach(config: ITrackerTarget): void {\n\t\tlet root = document.body;\n\t\tif(!config.global){\n\t\t\troot = gantt.$root;\n\t\t}\n\n\t\tlet watchableTarget = null;\n\t\tconst handler = (event) => {\n\t\t\tconst eventTarget = domHelpers.getTargetNode(event);\n\t\t\tconst targetNode = domHelpers.closest(eventTarget, config.selector);\n\t\t\tif(domHelpers.isChildOf(eventTarget, this.tooltip.getNode())){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst doOnMouseEnter = () => {\n\t\t\t\twatchableTarget = targetNode;\n\t\t\t\tconfig.onmouseenter(event, targetNode);\n\t\t\t};\n\n\t\t\tif(watchableTarget){\n\t\t\t\tif(targetNode && targetNode === watchableTarget){\n\t\t\t\t\tconfig.onmousemove(event, targetNode);\n\t\t\t\t}else{\n\t\t\t\t\tconfig.onmouseleave(event, watchableTarget);\n\t\t\t\t\twatchableTarget = null;\n\n\t\t\t\t\tif(targetNode && targetNode !== watchableTarget){\n\t\t\t\t\t\tdoOnMouseEnter();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(targetNode){\n\t\t\t\t\tdoOnMouseEnter();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.detach(config.selector);\n\t\tthis._domEvents.attach(root, \"mousemove\", handler);\n\t\tthis._listeners[config.selector] = {\n\t\t\tnode: root,\n\t\t\thandler\n\t\t};\n\t}\n\n\tdetach(selector: string): void {\n\t\tconst listener = this._listeners[selector];\n\t\tif(listener){\n\t\t\tthis._domEvents.detach(listener.node, \"mousemove\", listener.handler);\n\t\t}\n\t}\n\n\ttooltipFor(config: ITooltipConfig): void {\n\t\tconst cloneDomEvent = (event: MouseEvent) => {\n\t\t\tlet clone = event;\n\t\t\t// making events survive timeout in ie\n\t\t\t// tslint:disable-next-line no-string-literal\n\t\t\tif(document[\"createEventObject\"] && !document.createEvent){\n\t\t\t\t// tslint:disable-next-line no-string-literal\n\t\t\t\tclone = document[\"createEventObject\"](event);\n\t\t\t}\n\t\t\treturn clone;\n\t\t};\n\t\tthis._initDelayedFunctions();\n\t\tthis.attach({\n\t\t\tselector: config.selector,\n\t\t\tglobal: config.global,\n\t\t\tonmouseenter:(event: MouseEvent, node: HTMLElement) => {\n\t\t\t\tconst html = config.html(event, node);\n\t\t\t\tif(html){\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonmousemove:(event: MouseEvent, node: HTMLElement) => {\n\t\t\t\tconst html = config.html(event, node);\n\t\t\t\tif(html){\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\n\t\t\t\t}else{\n\t\t\t\t\tthis.delayShow.$cancelTimeout();\n\t\t\t\t\tthis.delayHide();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonmouseleave:() => {\n\t\t\t\tthis.delayShow.$cancelTimeout();\n\t\t\t\tthis.delayHide();\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate _initDelayedFunctions(){\n\t\t// reset delayed functions in order to apply current values of tooltip_timeout\n\t\tif(this.delayShow){\n\t\t\tthis.delayShow.$cancelTimeout();\n\t\t}\n\t\tif(this.delayHide){\n\t\t\tthis.delayHide.$cancelTimeout();\n\t\t}\n\t\tthis.tooltip.hide();\n\n\t\tthis.delayShow = helpers.delay((event: MouseEvent, html: string) => {\n\t\t\tif(gantt.callEvent(\"onBeforeTooltip\", [event]) === false) {\n\t\t\t\tthis.tooltip.hide();\n\t\t\t} else {\n\t\t\t\tthis.tooltip.setContent(html);\n\t\t\t\tthis.tooltip.show(event);\n\t\t\t}\n\t\t}, gantt.config.tooltip_timeout || 1);\n\n\t\tthis.delayHide = helpers.delay(() => {\n\t\t\tthis.delayShow.$cancelTimeout();\n\t\t\tthis.tooltip.hide();\n\t\t}, gantt.config.tooltip_hide_timeout || 1);\n\t}\n\n}","declare var gantt;\n\ngantt.config.tooltip_timeout = 30;\ngantt.config.tooltip_offset_y = 20;\ngantt.config.tooltip_offset_x = 10;\ngantt.config.tooltip_hide_timeout = 30;\n\nimport {TooltipManager} from \"./tooltipManager\";\n\nconst tooltipManager = new TooltipManager();\n\ngantt.ext.tooltips = tooltipManager;\n\ngantt.attachEvent(\"onGanttReady\", function(){\n\n\ttooltipManager.tooltipFor({\n\t\tselector: \"[\"+gantt.config.task_attribute+\"]:not(.gantt_task_row)\",\n\t\thtml: (event: MouseEvent) => {\n\t\t\tif (gantt.config.touch && !gantt.config.touch_tooltip) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst targetTaskId = gantt.locate(event);\n\t\t\tif(gantt.isTaskExists(targetTaskId)){\n\t\t\t\tconst task = gantt.getTask(targetTaskId);\n\t\t\t\treturn gantt.templates.tooltip_text(task.start_date, task.end_date, task);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tglobal: false\n\t});\n});\n\ngantt.attachEvent(\"onDestroy\", function() {\n\ttooltipManager.destructor();\n});\n\ngantt.attachEvent(\"onLightbox\", function() {\n\ttooltipManager.hideTooltip();\n});\nconst isLinkCreate = () => {\n\tconst state = gantt.getState();\n\treturn !!state.link_source_id;\n};\ngantt.attachEvent(\"onBeforeTooltip\", function() {\n\tif (isLinkCreate()){\n\t\treturn false;\n\t}\n});\n\ngantt.attachEvent(\"onGanttScroll\", function(){\n\ttooltipManager.hideTooltip();\n});\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n"],"sourceRoot":""}