{"version":3,"sources":["webpack:///webpack:///webpack/universalModuleDefinition","webpack:///webpack:///webpack/bootstrap","webpack:///webpack:///sources/utils/utils.js","webpack:///webpack:///sources/utils/dom_helpers.js","webpack:///webpack:///sources/utils/helpers.js","webpack:///webpack:///sources/utils/extends.js","webpack:///webpack:///sources/utils/eventable.js","webpack:///webpack:///sources/core/lightbox/controls/base_control.js","webpack:///webpack:///sources/core/ui/layout/cell.js","webpack:///webpack:///sources/core/ui/grid/editors/editors/base.js","webpack:///webpack:///sources/utils/env.js","webpack:///webpack:///sources/utils/html_helpers.js","webpack:///webpack:///sources/core/lightbox/controls/select_control.js","webpack:///webpack:///sources/core/ui/grid/tasks_grid_dnd_marker_helpers/drop_target.js","webpack:///webpack:///sources/core/ui/render/viewport/get_bar_rectangle.js","webpack:///webpack:///sources/core/ui/resource_store_mixin.js","webpack:///webpack:///sources/core/ui/mouse_event_container.js","webpack:///webpack:///sources/core/ui/grid/grid.js","webpack:///webpack:///sources/core/ui/render/is_legacy_smart_render.js","webpack:///webpack:///(webpack)/buildin/global.js","webpack:///webpack:///sources/utils/dom_event_scope.js","webpack:///webpack:///sources/core/worktime/calendar_arguments_helper.js","webpack:///webpack:///sources/utils/task_tree_helpers.js","webpack:///webpack:///sources/core/gantt_data_range.js","webpack:///webpack:///sources/core/datastore/treedatastore.js","webpack:///webpack:///sources/core/datastore/power_array.js","webpack:///webpack:///sources/core/datastore/datastore.js","webpack:///webpack:///sources/core/ui/render/viewport/get_bg_row_rectangle.js","webpack:///webpack:///sources/core/ui/render/task_bar_render.js","webpack:///webpack:///sources/core/ui/timeline/resource_timeline.js","webpack:///webpack:///sources/core/ui/row_position_mixin.js","webpack:///webpack:///sources/core/ui/timeline/scales.js","webpack:///webpack:///sources/core/ui/timeline/scales_ignore.js","webpack:///webpack:///sources/core/ui/timeline/timeline.js","webpack:///webpack:///sources/core/ui/layout/layout.js","webpack:///webpack:///sources/core/ui/render/viewport/get_grid_row_rectangle.js","webpack:///webpack:///node_modules/process/browser.js","webpack:///webpack:///sources/utils/timeout.js","webpack:///webpack:///sources/core/deprecated_warnings.js","webpack:///webpack:///sources/publish_helpers/void_script_third.ts","webpack:///webpack:///sources/core/destructor.js","webpack:///webpack:///sources/core/common/assert.js","webpack:///webpack:///sources/core/gantt_core.js","webpack:///webpack:///sources/locale/index.js","webpack:///webpack:///sources/core/touch.js","webpack:///webpack:///sources/css/skins/contrast_white.js","webpack:///webpack:///sources/css/skins/contrast_black.js","webpack:///webpack:///sources/css/skins/material.js","webpack:///webpack:///sources/css/skins/broadway.js","webpack:///webpack:///sources/css/skins/terrace.js","webpack:///webpack:///sources/css/skins/meadow.js","webpack:///webpack:///sources/css/skins/skyblue.js","webpack:///webpack:///sources/core/skin.js","webpack:///webpack:///sources/core/cached_functions.js","webpack:///webpack:///sources/core/lightbox/controls/typeselect_control.js","webpack:///webpack:///sources/core/data_task_types.js","webpack:///webpack:///sources/core/lightbox_optional_time.js","webpack:///webpack:///sources/core/lightbox/controls/constraint_control.js","webpack:///webpack:///sources/core/lightbox/controls/resources_control.js","webpack:///webpack:///sources/core/lightbox/controls/parent_control.js","webpack:///webpack:///sources/core/lightbox/controls/duration_control.js","webpack:///webpack:///sources/core/lightbox/controls/radio_control.js","webpack:///webpack:///sources/core/lightbox/controls/checkbox_control.js","webpack:///webpack:///sources/core/lightbox/controls/time_control.js","webpack:///webpack:///sources/core/lightbox/controls/textarea_control.js","webpack:///webpack:///sources/core/lightbox/controls/template_control.js","webpack:///webpack:///sources/core/lightbox/index.js","webpack:///webpack:///sources/publish_helpers/void_script_second.ts","webpack:///webpack:///sources/core/data.js","webpack:///webpack:///sources/core/facades/worktime_calendars.js","webpack:///webpack:///sources/core/worktime/strategy/no_work_time.js","webpack:///webpack:///sources/core/worktime/time_calculator.js","webpack:///webpack:///sources/core/worktime/strategy/work_unit_cache/workunit_object_cache.ts","webpack:///webpack:///sources/core/worktime/strategy/work_unit_cache/workunit_map_cache.ts","webpack:///webpack:///sources/core/worktime/strategy/work_unit_cache/index.ts","webpack:///webpack:///sources/core/worktime/strategy/calendar_strategy.js","webpack:///webpack:///sources/core/worktime/calendar_manager.js","webpack:///webpack:///sources/core/worktime/work_time.js","webpack:///webpack:///sources/core/load.js","webpack:///webpack:///sources/core/tasks.js","webpack:///webpack:///sources/core/wai_aria.js","webpack:///webpack:///sources/core/grid_column_api.gpl.js","webpack:///webpack:///sources/core/grid_column_api.js","webpack:///webpack:///sources/core/dynamic_loading.js","webpack:///webpack:///sources/core/plugins/timeline_zoom.ts","webpack:///webpack:///sources/core/plugins/auto_task_types.js","webpack:///webpack:///sources/core/plugins/new_task_placeholder.js","webpack:///webpack:///sources/core/plugins/resources.js","webpack:///webpack:///sources/core/plugins/dhtmlx_hooks.js","webpack:///webpack:///sources/core/plugins/jquery_hooks.js","webpack:///webpack:///sources/core/plugins/wbs.js","webpack:///webpack:///sources/core/plugins/batch_update.js","webpack:///webpack:///sources/core/plugins/autoscroll.js","webpack:///webpack:///sources/core/plugins/index.js","webpack:///webpack:///sources/core/dataprocessor/extend_gantt.ts","webpack:///webpack:///sources/core/dataprocessor/data_processor_events.ts","webpack:///webpack:///sources/core/dataprocessor/data_processor.ts","webpack:///webpack:///sources/core/dataprocessor/index.js","webpack:///webpack:///sources/core/datastore/datastore_render.js","webpack:///webpack:///sources/core/datastore/select.js","webpack:///webpack:///sources/core/facades/datastore_links.js","webpack:///webpack:///sources/core/facades/datastore_tasks.js","webpack:///webpack:///sources/core/facades/datastore.js","webpack:///webpack:///sources/core/datastore/datastore_hooks.js","webpack:///webpack:///sources/core/facades/layout.js","webpack:///webpack:///sources/core/data_task_layers.js","webpack:///webpack:///sources/core/ui/main_layout_initializer.js","webpack:///webpack:///sources/core/ui/timeline/links_dnd.js","webpack:///webpack:///sources/core/ui/timeline/tasks_dnd.js","webpack:///webpack:///sources/core/ui/timeline/main_timeline_initializer.js","webpack:///webpack:///sources/core/ui/grid/tasks_grid_dnd_marker_helpers/highlight.js","webpack:///webpack:///sources/core/ui/grid/tasks_grid_dnd_marker_helpers/multi_level.js","webpack:///webpack:///sources/core/ui/grid/tasks_grid_dnd_marker_helpers/locked_level.js","webpack:///webpack:///sources/core/ui/grid/tasks_grid_dnd_marker.js","webpack:///webpack:///sources/core/ui/grid/tasks_grid_dnd.js","webpack:///webpack:///sources/core/ui/grid/main_grid_initializer.js","webpack:///webpack:///sources/core/ui/render/task_grid_line_render.js","webpack:///webpack:///sources/core/ui/render/viewport/get_link_rectangle.js","webpack:///webpack:///sources/core/ui/render/link_render.js","webpack:///webpack:///sources/core/ui/render/task_bg_render.js","webpack:///webpack:///sources/core/ui/render/task_split_render.js","webpack:///webpack:///sources/core/ui/render/task_bar_smart_render.js","webpack:///webpack:///sources/core/ui/grid/editors/linked_properties.js","webpack:///webpack:///sources/core/ui/grid/editors/editors/predecessor.js","webpack:///webpack:///sources/core/ui/grid/editors/editors/date.js","webpack:///webpack:///sources/core/ui/grid/editors/editors/select.js","webpack:///webpack:///sources/core/ui/grid/editors/editors/number.js","webpack:///webpack:///sources/core/ui/grid/editors/editors/text.js","webpack:///webpack:///sources/core/ui/grid/editors/keyboard_mappings/keyboard_navigation.js","webpack:///webpack:///sources/core/ui/grid/editors/keyboard_mappings/default.js","webpack:///webpack:///sources/core/ui/grid/editors/keyboard_mappings.js","webpack:///webpack:///sources/core/ui/grid/editors/controller.js","webpack:///webpack:///sources/core/ui/timeline/resource_histogram.js","webpack:///webpack:///sources/core/ui/grid/resource_grid.js","webpack:///webpack:///sources/core/ui/grid/grid_resize.js","webpack:///webpack:///sources/core/ui/timeline/tasks_canvas_render.js","webpack:///webpack:///sources/core/ui/layout/scrollbar_cell.js","webpack:///webpack:///sources/core/ui/layout/resizer_cell.js","webpack:///webpack:///sources/core/ui/layout/view_cell.js","webpack:///webpack:///sources/core/ui/layout/view_layout.js","webpack:///webpack:///sources/core/ui/render/viewport/is_in_viewport.js","webpack:///webpack:///sources/core/ui/render/render_factory.js","webpack:///webpack:///sources/core/ui/render/layer_engine.js","webpack:///webpack:///sources/core/ui/gantt_layers.js","webpack:///webpack:///sources/core/ui/mouse.js","webpack:///webpack:///sources/core/ui/configurable.js","webpack:///webpack:///sources/core/ui/ui_factory.js","webpack:///webpack:///sources/core/ui/index.js","webpack:///webpack:///sources/core/message.js","webpack:///webpack:///node_modules/setimmediate/setImmediate.js","webpack:///webpack:///node_modules/timers-browserify/main.js","webpack:///webpack:///node_modules/bluebird/js/browser/bluebird.js","webpack:///webpack:///sources/utils/promise.js","webpack:///webpack:///sources/core/common/state.js","webpack:///webpack:///sources/core/common/templates.js","webpack:///webpack:///sources/core/common/dnd.js","webpack:///webpack:///sources/core/common/date.js","webpack:///webpack:///sources/core/common/serialize.ts","webpack:///webpack:///sources/core/common/ajax.js","webpack:///webpack:///sources/core/common/config.ts","webpack:///webpack:///sources/core/common/services.js","webpack:///webpack:///sources/core/common/import.js","webpack:///webpack:///sources/constants/index.js","webpack:///webpack:///sources/core/gantt.js","webpack:///webpack:///sources/core/gantt_factory.js","webpack:///webpack:///sources/dhtmlxgantt.enterprise.ts"],"names":["t","e","exports","Object","C_agent_work_28_s_node_modules_babel_runtime_corejs2_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_19__","module","define","__webpack_require__","i","n","window","r","l","modules","enumerable","Symbol","toStringTag","value","__esModule","create","d","bind","default","prototype","hasOwnProperty","call","s","seed","copy","isDate","result","isArray","isStringObject","isNumberObject","isBooleanObject","defined","mixin","undefined","uid","functor","apply","arguments","event","el","eventRemove","getBoundingClientRect","a","body","docElem","document","scrollTop","scrollLeft","clientTop","clientLeft","top","left","right","bottom","elem","y","visibility","getComputedStyle","display","node","isNaN","getAttribute","nodeName","loLowerCase","o","input","toLowerCase","className","u","createElement","c","target","String","this","replace","getNodePosition","getFocusableNodes","querySelectorAll","join","nodesArray","hasNonNegativeTabIndex","getScrollSize","div","offsetWidth","clientWidth","getClassName","addClassName","removeClassName","name","RegExp","insertNode","_slave","firstChild","removeNode","getChildNodes","childNodes","len","out","obj","toNode","locateClassName","css","strict","indexOf","charAt","trg","locateAttribute","getTargetNode","getRelativeEventPosition","documentElement","box","x","isChildOf","child","hasClass","element","test","closest","matches","msMatchesSelector","webkitMatchesSelector","contains","nodeType","console","second","minute","hour","day","week","month","quarter","year","filter","callback","getSecondsInUnit","forEach","arr","slice","arrayMap","map","resArray","arrayFind","find","arrayFilter","arrayDifference","arraySome","length","hashToArray","hash","sortArrayOfHash","desc","throttle","wait","setTimeout","timeout","Array","Function","toString","constructor","delay","timer","clearTimeout","objectKeys","keys","key","requestAnimationFrame","w","isEventable","attachEvent","detachEvent","EventHost","_silentStart","_silentEnd","z","res","dhx_catch","eventHost","addEvent","_silent_mode","split","eventName","eventId","BaseControl","eventable","domHelpers","Cell","parent","headerHeight","detach","$parent","resize","$container","topSize","topCont","force","$view","parentNode","cellIndex","$id","content","$config","header","querySelector","self","delegate","height","width","gravity","minHeight","minWidth","maxHeight","maxWidth","collapsed","mode","size","$lastSize","contentX","contentY","horizontal","vertical","borders","_getBorderSizes","view","_borders","cssHash","xLayout","Math","floor","BaseEditor","show","hide","set_value","get_value","get_input","is_changed","valueOf","currentValue","is_valid","save","focus","isIE","isIE6","isIE7","isIE8","isOpera","isChrome","isKHTML","isFF","isIPad","isEdge","htmlHelpers","getHtmlSelect","_this","options","helpers","_attributes","entry","innerHTML","attributes","getHtmlOption","getHtmlButton","getHtmlDiv","getHtmlLabel","getHtmlInput","html","_super","__extends","SelectControl","select","gantt","createDropTargetObject","targetParent","targetIndex","targetId","nextSibling","prevSibling","utils","nextSiblingTarget","store","prevSiblingTarget","firstChildTarget","lastChildTarget","getChildren","start_date","end_date","startCoord","endCoord","$gantt","$data","tasksStore","ownStore","handlerIdProperty","tasks","init","destroyGrid","initGrid","destructor","clearTaskStoreHandler","_linkToTaskStore","rowStore","delayRender","getState","lightbox","_updateNestedTasks","resourceStore","fetchTasks","config","resource_property","toAdd","toDelete","$role","toAddArray","events","$services","getService","mouseEvents","gridResize","topPositionMixin","Grid","gridAriaAttr","gridDataAriaAttr","container","$getConfig","attr","layers","_createLayerConfig","resizer","_validateColumnWidth","numericWidth","column","setSize","outerWidth","getGridColumns","innerWidth","max","$state","scale_height","getSize","contentHeight","contentWidth","scrollHeight","scrollWidth","_bindStore","getDatastore","_gridCacheAttached","_unbindStore","refresh","getViewPort","y_end","x_end","scrollTo","isVisible","scrolled","getColumnIndex","columns","getColumn","getItemHeight","row_height","renderer","_addLayers","taskRenderer","defaultContainer","$grid_data","taskLayers","layer","addLayer","_refreshPlaceholderOnStoreUpdate","smart_rendering","scrollY","$ui","getView","scroll","$rowsPlaceholder","placeholder","_initSmartRenderingPlaceholder","_initEvents","item_attribute","_clearLayers","_taskLayers","_getColumnWidth","min_width","min_grid_column_width","new_width","_getGridWidthLimits","min_limit","max_limit","_setColumnsWidth","columns_width","final_width","start_index","start_width","share","extra_width","col","h","f","_","_getColsTotalWidth","cols_width","parseFloat","_calculateGridWidth","unknown","v","_getGridWidth","autofit","round","delta","diff","index","changed","_renderGridHeader","locale","templates","labels","lineHeigth","gridWidth","last","_sort","direction","cssClass","style","label","cell","_waiAria","gridScaleCellAttrString","cells","_smart_render","g","removeEvent","eventScope","attach","handlers","handler","detachAll","extend","getWorkHoursArguments","date","setWorkTimeArguments","unsetWorkTimeArguments","isWorkTimeArguments","processedConfig","unit","getClosestWorkTimeArguments","_getStartEndConfig","param","getDurationArguments","hasDurationArguments","calculateEndDateArguments","targetHash","copyLinkIdsArray","getSubtreeLinks","copyLinkIds","rootId","getSubtreeTasks","PrimaryScaleHelper","primaryScale","step","scale_offset_minimal","scales","helper","range","Date","start_interval","end","getSubtaskDates","duration","_init_tasks_range","fit_tasks","_min_date","old_max","_max_date","_adjust_scales","DataStore","TreeDataStore","_ganttConfig","canOpenSplitTasks","open","item","_buildTree","_isSplitItem","render","hasChild","id","parse","_parseInner","_addItemInner","getParent","getIndexById","_changeIdInner","visibleOrder","_traverseBranches","_branches","code","_updateOrder","_removeItemInner","items","move","tindex","getItem","source_pid","tbranch","callEvent","calculateItemLevel","$level","source","getBranchIndex","$create","exists","$getRootId","pid","getSiblings","getNextSibling","getPrevSibling","clearAll","level","_setParentInner","silent","setParent","eachItem","pull","eachParent","Error","parentsHash","_add_branch","added_already","branch","_move_branch","_replace_branch_child","newbranch","new_id","sort","field","criteria","temp","els","close","$powerArray","$removeAt","pos","$remove","$insertAt","splice","$find","$each","$map","$filter","loaded","updateItem","_skip_refresh","removeItem","data_size","getVisibleItems","getIndexRange","addItem","_searchVisibleOrder","changeId","_moveInner","getIdByIndex","arraysEqual","args","count","fullOrder","countVisible","serialize","filteredOrder","to","ret","getItems","_getNullIfUndefined","getFirst","getLast","getNext","getPrev","_isAllowedUnscheduledTask","getItemPosition","cfg","taskType","padd","progress","task","pr","wrapper","drag_progress","isReadonly","markerPos","drag","_render_task_progress","template","itemId","state","link_landing_area","link_source_id","from_start","to_start","allowDrag","dragClass","p","styles","rtl","leftside_text","side","rightside_text","m","_render_pair","outer","inner","showLinkPoints","$source","$target","ln","getLink","tp","type","setAttribute","type_renderers","defaultRenderer","Timeline","resourceStoreMixin","ResourceTimeline","taskFilter","links","_resetTopPositionHeight","topCache","getRowTop","getItemTop","isSplitTask","services","getSum","from","summ","setSumWidth","scale","splitSize","adjustSize","full","parts","sortScales","add","cellSize","_isLegacyMode","scale_unit","date_scale","subscales","_prepareScaleObject","format","legacyMode","scaleConfig","getSubScales","prepareConfigs","full_width","configs","main_scale","reverseScale","trace_indexes","setPosSettings","trace_x","_ignore_time_config","skip_off_time","probe","skip","processIgnores","initColSizes","display_count","column_count","min_col_width","cont_width","ignore_x","initScaleConfig","col_width","min_date","max_date","iterateScales","lower_dates","prev","prevUpper","up","alineScaleColumns","targetWidth","eachColumn","dateHelper","start","curr","getTimezoneOffset","limitVisibleRange","dates","lastDate","outDate","shared","ignore_time","ignore","canvasRender","low","high","rendered","linksAttr","_tasks","data_els","_refreshScales","smart_scales","expose","append","_attachLayers","getDataRender","$task_data","update","bindLinks","linkRenderer","linkLayers","_initStaticBackgroundRender","staticRender","static_background","staticBgContainer","_linkLayers","_render_tasks_scales","scales_html","outer_width","$scaleHelper","autosize","availWidth","min_column_width","_getScaleChunkHtml","tplClass","_prepareScaleHtml","globalTemplates","endIndex","globalConfig","startIndex","cssclass","getTimelineCellAttr","dateFromPos","part","posFromDate","_posFromDateCache","columnIndexByDate","partCell","wholeCells","_getNextVisibleColumn","visibleDateIndex","_getPrevVisibleColumn","_getClosestVisibleColumn","days","ignores","visibleIndex","visibleDate","transition","_getColumnDuration","xRight","xLeft","task_height_offset","getScale","_getScales","_timelineCacheAttached","Layout","scrollbar","visibleScrollbars","hiddenSrollbars","scrollChanged","hideScrollbar","showScrollbar","visibleGroups","groups","_xLayout","resizeSibling","$name","totalSize","k","mainGrid","mainCall","contentViews","getCellsByType","_getAutosizeMode","$cells","children","alert","ind","rows","cols","views","$factory","initUI","$content","$toHTML","sub","$root","properties","boxSizing","computed","horPaddings","vertPaddings","borderBox","innerHeight","outerHeight","boxSizes","contentSizes","_sizes","min","lastVisibleIndex","hidden","borderColorClass","lastCell","_visibleCells","firstCall","visibleCells","padding","margin","marginSide","cellView","dy","dx","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","currentQueue","draining","queueIndex","queue","drainQueue","runClearTimeout","process","runTimeout","Item","_on_timeout","ceil","host","check","resizeDelay","initTemplates","calculateScaleRange","getPropertyValue","resizeWatcher","listenWindowResize","addResizeListener","buttons","edit","delete","confirm_deleting","title","$new","getScrollState","posX","visible_date","preserve_scroll","task_attribute","attribute","getLightboxType","link","offsetChanged","srcElement","month_full","month_short","day_full","day_short","new_task","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","section_description","section_time","section_type","column_wbs","column_text","column_start_date","column_duration","column_add","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","weeks","months","years","message_ok","message_cancel","section_constraint","constraint_type","constraint_date","asap","alap","snet","snlt","fnet","fnlt","mso","mfo","resources_filter_placeholder","resources_filter_label","_tasks_dnd","navigator","touch","userAgent","touchEventsSupported","touches","ev","pageX","pageY","clientX","clientY","pointerType","MSPOINTER_TYPE_MOUSE","scroll_state","action_mode","scroll_mode","action_start","long_tap_timer","current_target","touchHandlers","push","start_drag","_prevent_touch_scroll","dblclicktime","locate","_getTaskLayers","isTaskVisible","cloneNode","renders","cloneTaskRendered","onDoubleClick","block_action","grid_width","link_line_width","link_arrow_size","lightbox_additional_height","_second_column_width","_third_column_width","_redefine_lightbox_buttons","buttons_left","buttons_right","getTaskNode","indx","_lightbox_template","_config_buttons_left","_config_buttons_right","gantt_delete_btn","gantt_save_btn","skin","getElementsByTagName","href","match","skins","terrace","_configure","skinset","_get_skin","cache","critical_path_mode","wrap_methods","_prefetch_originals","object","prefetch","argumentsArray","active","get_arguments_hash","optimizer","has_cached_value","get_cached_value","cache_value","data","is_date","getUTCDate","values","stringify_argument","activate","deactivate","clear","setup","gantt_methods","override_gantt","update_if_changed","deactivTimeout","TypeselectControl","types","sns","onchange","oldOnChange","checkType","optional_time","_resolve_default_mapping","val","disabled","update_block","button","previousSibling","button_text","disable","section","enable","button_click","_lightbox_id","_get_typed_lightbox_config","constraint_types","ASAP","ALAP","timeSelects","ConstraintControl","mapping","typeSelect","toggleTimeSelect","getConstraintType","constraintType","constraintDate","isNonTimedConstraint","localCache","resources","resourcesValues","eventsInitialized","ResourcesControl","resourceFilterPlaceholder","resourceFilterLabel","htmlResourceRow","checkbox","filterApplied","_setFilterCache","query","hideUnsetted","filterCache","trim","resultSns","map_to","collection","resource_id","searchResult","itemIds","comparison","context","_applyFilter","_getFilterCache","_getResourcesElement","row","valueInput","checked","defaultValue","option","_saveValues","inputs","resourcesElement","selectorAdd","selectorSub","settedValues","settedValuesHash","itemsSub","amount","b","item_id","task_text","form_blocks","ParentControl","tmpDom","removeChild","time","DurationControl","getTimePicker","singleDate","readonly","duration_val","inps","btns","endspan","_calc_date","_change_duration","constants","KEY_CODES","DOWN","endDate","startDate","RadioControl","radio","CheckboxControl","TimeControl","auto_end_date","getTimePickerValue","TextareaControl","textarea","_get_input","TemplateControl","offset","start_year","end_year","tdate","timeFormat","settings","registerProvider","getTask","round_dnd_dates","time_step","j","serverList","list","getTaskType","_lightbox_type","fullWidth","classNames","lightboxDiv","labelBlock","inputBlock","bindLabelsToInputs","_lightbox","con","pageYOffset","scroll_left","view_height","scroll_top","_cover","offsetHeight","_scroll_height","sec","src","buttonTarget","keyCode","SPACE","shiftKey","edit_save","edit_cancel","getLightboxValues","getElementById","getLightbox","lightboxHeader","block","getValue","setValue","_dnd_start_lb","now","lb","ariaAttrs","first","time_format","_time_format_order","needSetTime","mapOffset","_fill_lightbox_select","getHours","getMinutes","constraint","text","opts","ok","formData","unscheduled","show_unscheduled","isTaskExists","taskStart","taskEnd","project_end","getTaskByTime","project_start","root_id","schedule_from_end","getTaskByIndex","$open","$no_start","$no_end","$rendered_type","task_type","_get_task_timing_mode","dirty","root","taskTiming","has_changed","oldEnd","oldStart","upper","steps","colIndex","lower","dir","getWorkHours","setWorkTime","unsetWorkTime","timeCalculator","isWorkTime","getClosestWorkTime","calculateDuration","_hasDuration","hasDuration","calculateEndDate","createCalendar","addCalendar","getCalendar","getCalendars","getTaskCalendar","deleteCalendar","CalendarDisabledTimeStrategy","argumentsHelper","_calculateDuration","fixedUnits","NoWorkTimeCalendar","TimeCalculator","_getCalendar","work_time","calendarManager","calendar","WorkUnitsObjectCache","timestamp","_cache","units","WorkUnitsMapCache","has","unitCache","get","Map","set","workunit_object_cache_1","workunit_map_cache_1","CalendarWorkTimeStrategy","_getUnitOrder","_timestamp","_checkIfWorkingUnit","order","_is_work_day","_getWorkHours","_is_work_hour","_internDatesPull","_nextDate","_getWorkUnitsBetweenGeneric","stepStart","stepEnd","next","checkFirst","checkLast","isLastStep","_getMinutesPerDay","_getHoursPerDay","_getWorkUnitsForRange","getUnitsPerDay","total","_getWorkUnitsBetweenQuick","firstDayEnd","day_start","lastDayEnd","startPart","endPart","worktime","_setCalendar","_tryChangeCalendarSettings","JSON","stringify","payload","_isEmptyCalendar","datesArray","isFullWeekSet","checkFullArray","_isWorkTime","is_work_unit","_calculateEndDate","_addInterval","current","added","satrt","_calculateHourEndDate","getSeconds","getMilliseconds","durationLeft","interval","_calculateMinuteEndDate","_getClosestWorkTime","_getClosestWorkTimeFuture","closestPast","_getClosestWorkTimeGeneric","_getClosestWorkTimePast","biggerTimeUnit","increment","createArgumentsHelper","CalendarWorktimeStrategy","CalendarManager","_calendars","_getDayHoursForMultiple","tick","currPos","calendars","mergeCalendars","newCalendar","_convertWorktimeSettings","parentCalendar","defaults","fulltime","apiCore","_getOwnCalendar","calendar_property","resource_calendars","inherit_calendar","stop","restoreConfigCalendars","global","createDefaultCalendars","worktimeFacadeFactory","facade","cl","ajax","xmlDoc","responseText","status","resp","collections","initial_scroll","collections_loaded","$ignore","jsonParseError","serializeTask","_copyObject","serializeLink","_copyLink","getLinks","_xmlNodeToJSON","_getCollections","itms","attrs","_getXML","toptag","loader","xmltop","xml","xmlParseError","skey","evs","json","tagName","array","editable_property","extraSpaces","getAttributeString","aria-label","_taskCommonAttr","setTaskBarAttr","taskRowAttr","linkAttr","toStart","fromStart","gridSeparatorAttr","lightboxHiddenAttr","lightboxVisibleAttr","lightboxAttr","lightboxButtonAttrString","role","lightboxSelectAttrString","lightboxDurationInputAttrString","gridAttrString","multiselect","gridScaleRowAttrString","gridDataAttrString","gridCellAttrString","gridAddButtonAttrString","messageButtonAttrString","messageInfoAttr","messageModalAttr","quickInfoAttr","quickInfoHeaderAttrString","quickInfoHeader","quickInfoButtonAttrString","tooltipAttr","tooltipVisibleAttr","tooltipHiddenAttr","visibleColumns","old_has_children","branch_loading","_load_url","needLoading","url","USE_KEY","_defaultScales","TimelineZoom","getCurrentLevel","setLevel","_levels","_activeLevelIndex","zoomLevel","_getZoomIndexByName","assert","_setLevel","levelName","Number","scrollPos","viewPort","$task","_visibleDate","cursorOffset","nextConfig","chartConfig","cursorDate","newPosition","_getVisibleDate","middleDate","env","_domEvents","_useKey","_handler","timelineOffset","wheelUp","deltaY","wheelDelta","preventDefault","stopPropagation","_setScaleSettings","_initialStartDate","_initialEndDate","_createDomEventScope","activeLevelIndex","_mapScales","levels","_defaultHandler","_minColumnWidth","minColumnWidth","_maxColumnWidth","maxColumnWidth","_widthStep","widthStep","useKey","_initialized","trigger","_attachWheelEvent","_stepUp","_stepDown","nextLevel","_setScaleDates","newColumnWidth","targetType","updateTaskType","setTaskType","checkParent","hasChildren","allTypes","originalRowDndParent","originalMoveTaskParent","updateParents","isParsingDone","delTaskParent","updateAfterRemoveChild","getTaskBy","newTask","dataProcessor","ready","insertPlaceholder","commands","entity","action","getRectangle","filterResourceTasks","getResourceTasks","resourceTaskCache","random","falsyValuePreffix","cacheKey","resourceHash","property","resourceValue","scaleStep","timegrid","currDate","timetable","cellLeftCoord","cellRightCoord","owners","task_id","renderLine","resource_cell_class","renderedResourceLines","columnIndex","detachRenderedResourceLine","renderHistogram","renderedHistogramRows","renderedHistogramCapacity","renderedRow","renderedElement","colEnd","bar","connection","capacityElement","histogram_cell_class","fill","capacityMatrix","maxCapacity","renderedHistogramCells","histogram_cell_capacity","$","capacity","renderedCell","detachRenderedHistogramCell","filterTasks","getResourceAssignments","selectAssignments","vs","av","that","_viewRestore","grid","dhtmlXCellObject","dataObj","Gantt","getGanttInstance","newgantt","_needRecalc","reset","_isRecalcNeeded","_isGroupSort","group_mode","_getWBSCode","_setWBSCode","getWBSCode","getByWBSCode","currentNode","_calcWBS","_isFirst","$wbs","_wbs","wbs","isActive","dummyMethod","methods","restoreMethod","batch_update","batchUpdatePayload","dp_mode","_dp","updateMode","call_dp","refreshData","refreshTask","refreshLink","resetProjectDates","resetProjects","disableMethod","restoreMethods","noRedraw","scrollStep","scrollDelay","scrollSpeed","isMove","delayTimeout","startPos","started","eventPos","isResize","isLink","isClickDrag","drag_mode","autoscroll_speed","speed","defineDelayTimeout","clearInterval","defineScrollInterval","autoscroll","isDisplayed","posY","scrollState","currentScrollTop","scrollOuterHeight","scrollInnerHeight","currentScrollLeft","scrollOuterWidth","scrollInnerWidth","autoscroll_step","dp","getUserData","userdata","setUserData","_change_id","oldId","newId","_ganttMode","changeLinkId","changeTaskId","_row_style","rowId","classname","$dataprocessor_class","_delete_task","_sendTaskOrder","$drop_target","setGanttMode","setUpdated","setDp","DataProcessorEvents","$dp","_dataProcessorHandlers","treeHelper","cascadeDelete","clientSideDelete","updated","updatedRows","clientOnly","_in_progress","cascade_delete","dpMode","setUpdateMode","cascade","sendAllData","_tSend","isLinkExists","_waitMode","ch","itemLinks","_links","concat","batchUpdate","updateTask","updateLink","_tMode","_serverProcessor","substring","serverProcessor","pluralizedMode","urlSeparator","upd","addTask","isExist","addLink","objData","xml_date","parse_date","deleteTask","deleteLink","data_processor_events_1","extend_gantt_1","router","tMode","DataProcessor","setTransactionMode","serverProcessorURL","action_param","autoUpdate","_headers","_payload","_postDelim","_invalid","mandatoryFields","messages","inserted","deleted","invalid","invalid_cell","error","enableUTFencoding","headers","_endnm","_serializeAsJson","_router","_utf","encodeURIComponent","escape","_columns","_changed","dnd","master","findRow","existing","set_invalid","is_invalid","markRow","sendData","str","_methods","details","mytype","_h2","editStop","checkBeforeUpdate","_beforeSendData","_getRowData","_sendData","_serializeAsJSON","serialize_one","stack","security_key","pref","serialized","dataToSend","queryParams","ids","afterUpdate","urlParams","_user","_applyPayload","method","taskState_1","taskAction","getActionByState","ganttMode","getGanttMode","_onResolvedCreateUpdate","tag","sid","tid","afterUpdateCallback","actionPromise","then","valid","_forEachUpdatedRow","_getAllData","stop_1","hasOne","verifFunction","pattern","_uActions","btag","marker","correct","originalSid","_xml","reqUrl","filePath","finalizeUpdate","cleanUpdate","atag","xpath","anObj","_dp_init","_setDefaultTransactionMode","dataProcessorEvents","user","_needUpdate","_updateBusy","afterAutoUpdate","fullSync","setInterval","loadUpdate","xml_node","nodeValue","_v","version","getUpdates","vers","upds","status_1","parent_1","detachAllEvents","modes","newState","substr","xml_format","format_date","ReadableStream","flag","DEPRECATED_api","createDataProcessor","getDataProcessorModes","bindDataStore","itemRepainter","getLayers","renderers","update_items","refreshId","deleteItem","selectedId","unselect","subItem","getSelectedId","isSelected","getLinkCount","linksStore","getTaskCount","getVisibleTaskCount","getTaskIndex","getGlobalTaskIndex","eachTask","calculateTaskLevel","moveTask","createTasksFacade","createLinksFacade","createDatastoreSelect","datastoreRender","createDatastore","open_tree_initially","storeList","stores","_clear_data","selectTask","select_task","unselectTask","isSelectedTask","createDatastoreFacade","facadeFactory","initItem","originalTask","getConfig","sourceTask","targetTask","sync_link","mapTo","mapFrom","targetEvent","sync_links","sync_link_delete","show_links","targetVisible","deletedLinks","mapEvents","onItemLoading","onBeforeAdd","onAfterAdd","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onIdChange","onBeforeItemMove","onAfterItemMove","onFilterItem","onItemOpen","onItemClose","onBeforeSelect","onAfterSelect","onAfterUnselect","fallback","DEFAULT_VALUE","getTaskTop","getTaskPosition","getTaskHeight","roundTaskDates","tryCall","timeline","getLinkNode","oldH","position","oldV","newH","newV","showDate","scroll_to","showTask","dataHeight","_scroll_state","x_pos","y_pos","scroll_size","x_inner","y_inner","scrollVer","scrollHor","horState","verState","initializer","getVerticalScrollbar","getHorizontalScrollbar","_legacyGridResizerClass","gridResizer","onCreated","layout","mainTimeline","show_grid","showGrid","grid_limits","show_chart","original_grid_width","skinSettings","_initScrollStateEvents","_findGridResizer","gridFirst","_behind","isChild","onInitialized","resizeInfo","initialWidth","viewCell","newSize","onDestroyed","initLinksDND","_link_target_task","_link_target_task_start","_link_source_task","_link_source_task_start","markerDefaultOffset","scrollDefaultSize","link_target_id","link_from_start","link_to_start","DnD","$task_bars","sensitivity","milestone","sqrt","shift","getPosition","markerSize","viewportSize","offsetX","offsetY","scrollSize","drag_link_class","_direction","pow","dist","angle","sin","cos","abs","shiftTop","eY","resetDndState","drag_id","updateMarkedHtml","advanceMarker","prevTarget","prevLanding","prevToStart","targ","landing","_link_landing","S","targetChanged","showDirectingLine","_get_link_type","createLinkDND","createTaskDND","dragMultiple","_events","before_start","before_finish","after_finish","_handlers","drag_from_start","set_actions","clear_drag_state","start_x","start_y","_resize","coords_x","_resize_progress","_drag_task_coords","diffValue","_find_max_shift","minX","maxX","maxShift","correctShift","minShift","_move","new_start","new_end","_mouse_position_change","_is_number","isFinite","on_mouse_move","sX","sY","_update_item_on_move","original","_update_on_move","getTime","isSummaryTask","drag_project","initialDrag","on_mouse_down","checkEvent","_fix_dnd_scale_time","correct_work_time","fixStart","fixEnd","_fix_working_times","_finalize_mouse_up","_fireEvent","taskId","on_mouse_up","_get_drag_mode","_start_dnd","stage","round_task_dates","drag_state","taskDnD","linkDnD","extendDom","_clearDomEvents","_attachDomEvents","question","link_attribute","coll","coll_date","_delete_link_handler","_attachStateProvider","scale_step","_clearStateProvider","unregisterProvider","removeLineHighlight","highlightPosition","ePos","markerLine","markerFolder","highlightFolder","indentNode","indent","itemHeight","childCount","highlightRow","relTargetPos","dropTarget","rootLevel","findTargetBelow","getLockedLevelTarget","getMultiLevelTarget","higlighter","updates_per_second","drop_target","lockLevel","eventTop","targetTaskId","getStore","last_item","dd","targetY","order_branch_free","nextId","over","prevId","allowedLevel","rowDnd","rowDndMarker","order_branch","initEvents","conf","sorting_method","callHandler","clearEvents","extendGantt","getRowRectangle","textValue","aria","tree","grid_row_class","css_template","targetBox","current_pos","dirs","path","point","get_lines","get_path","line_to","line","get_wrapper_sizes","wrapper_size","lineHeight","down","get_line_sizes","line_size","marginTop","marginLeft","render_line","_get_line","get_direction","vect","path_builder","point_to","get_points","get_endpoint","xy","lineType","forward","sign","get_line_type","e_x","e_y","milestoneWidth","pt","lines","link_class","cssTemplate","endpoint","line_width","isLegacyRender","lastCellIndex","firstCellIndex","renderedCells","$getTemplates","task_cell_class","cssTemplateContent","static_background_cells","cellTemplate","show_task_cells","detachRenderedCell","createBaseBarRender","open_split_tasks","sizes","sub_tasks","keepDatesOnEdit","keepDurationOnEdit","defaultActionOnEdit","delimiter","predecessors","pred","predecessorCodes","getTaskByWBSCode","lag","existingLinksSearch","selectedLinks","linksToAdd","linksToDelete","remove","editor","linksDiff","taskPredecessors","html5DateFormat","dateToStr","strToDate","parsed","optionsHtml","parseInt","onBlurDelay","keyNav","locateCell","columnName","editorState","activeCell","controller","_is_icon_open_click","getEditorConfig","hasEditor","keyboard","preventKeyNav","ENTER","ESC","UP","LEFT","RIGHT","editorType","DELETE","TAB","modifiers","anyModifier","onShow","onHide","destroy","keyboard_navigation","defaultPrevented","shouldPrevent","keyNavMappings","setMapping","getMapping","defaultMapping","textEditorFactory","numberEditorFactory","selectEditorFactory","dateEditorFactory","predecessorEditorFactory","linkedPropertiesProcessor","number","predecessor","eventBus","createEditors","_itemId","_columnName","_editor","_editorType","_placeholder","$grid","startEdit","editorConfig","editor_types","_getItemValue","isChanged","newValue","oldValue","updateTaskDateProperties","_findEditableCell","nextColumn","getNextCell","getFirstCell","getLastCell","editNextCell","moveRow","editPrevCell","nextItem","editNextRow","editPrevRow","ResourceHistogram","ResourceGrid","_grid_resize","column_before_start","grid_resizer_column_attribute","column_after_start","column_index","column_drag_move","target_column","pointerPosition","minPointerPosition","maxPointerPosition","markerStartPosition","marker_width","keep_grid_width","limit_max","scrollable","rightColumnsWidth","column_drag_end","doOnRender","totalWidth","resize_el","createStaticBgHelper","staticBgStyleId","exec","bottomBorderColor","rightBorderColor","canvasBgCache","canvas","getContext","createImageData","image","rightBorderWidth","verticalLineColor","drawDot","bottomBorderWidth","horizontalLineColor","drawGrid","toDataURL","matrix","targetNode","bgDivs","tile","prevCell","prevWidth","widths","leftPos","maxTileSize","appVersion","currentTop","rowHeight","tileWidth","totalHeight","divs","differentWidths","styleHTML","cachedUrl","cacheUrl","bgImage","secondRow","rowStyles","cellStyles","params","createBackgroundTiles","fragment","ScrollbarCell","_isHorizontal","eachCell","_eachView","_getLinkedViews","_scrolling","scrollPosition","_isVertical","_wheel_time","_touch_scroll_active","$scroll_hor","outerSize","isHorizontal","linked","scrollProperty","innerSizeProperty","outerProperty","cellScrollSize","outerScroll","innerScroll","visible","_getScrollSize","ownSize","scrollSizes","_scrollHorizontalHandler","$scroll_ver","_checkWheelTarget","ff","wx","wy","oldLeft","_oldTop","ResizerCell","startBackSize","_getNewSizes","back","front","startFrontSize","_callStartDNDEvent","_positions","getCells","behindSide","behindMin","frontSide","frontMin","newBehindSide","newFrontSide","_getDirection","_front","group","resizers","_getResizePosition","_getGroupName","minMax","positions","_getGroupResizePosition","_xMode","frontSize","behindSize","newFrontG","newBehindG","newSizes","nextX","nextY","ViewCell","childConfig","unload","$preResize","getContentSize","$initialized","ViewLayout","$cell","byMaxSize","basicGetRectangle","task_area_pulls","task_area_renderers","updateMethod","renderMethod","render_item","rendererViewPort","isInViewPort","dom","clear_container","render_items","createDocumentFragment","itemNode","buffer","replace_item","remove_item","restore","change_id","getRenderer","clearRenderers","filter_methods","filter_method","createGroup","tempCollection","filters","getLayer","_add","pending","topmost","rel","initLayer","onUpdateRequest","eachLayer","removeLayer","renderGroup","createDataRender","previusSiblingContainer","defaultContainerSibling","$task_links","addTaskLayer","removeTaskLayer","_clearTaskLayers","addLinkLayer","_getLinkLayers","removeLinkLayer","_clearLinkLayers","createMouseHandler","click","doubleclick","contextMenu","eventHandlers","callEventHandlers","linkId","delegateHandlers","domEvents","addEventTarget","elementHandlers","onMouseMove","onContextMenu","onClick","own","ViewSettings","parentSettings","parentTemplates","parentConfig","extendSettings","configurable","createFactory","parentView","creator","createdViews","createView","registerView","createLayers","Resizer","Scrollbar","gridEditorsFactory","renderTaskBar","renderSplitTaskBar","renderTaskBg","renderLink","gridRenderer","mainGridInitializer","mainTimelineInitializer","mainLayoutInitializer","ext","factory","attachInitializer","C","inlineEditors","layersApi","gridLine","taskBg","taskBar","taskSplitBar","layersService","_dhx_msg_cfg","modalBox","usercall","which","_p","modality","contentId","cancel","btn","focusable","messageBox","message","area","popups","confirm","modalbox","setImmediate","registerImmediate","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","postMessage","importScripts","oldOnMessage","postMessageIsAsynchronous","onGlobalMessage","_i","MessageChannel","channel","script","run","clearImmediate","Timeout","_idleTimeout","msecs","_dereq_","1","_SomePromiseArray","promise","Promise","2","firstLineError","Queue","util","_drainQueueStep","fn","arg","Async","_schedule","_customScheduler","_isTickUsed","_haveDrainedQueues","isNode","AsyncInvokeLater","AsyncInvoke","AsyncSettlePromises","_drainQueue","./queue","3","rejectThis","targetRejected","bindingResolved","_bitField","bindingRejected","calledBind","_target","promiseRejectionQueued","bindingPromise","maybePromise","resolve","4","bluebird","./promise","5","getterCache","callerCache","canEvaluate","pop","classString","TypeError","_then","getter","./util","6","tryCatch","errorObj","async","cancellation","_warn","_isCancellable","_cancelBy","_cancellationParent","_branchesRemainingToCancel","isPending","_isCancelled","isCancelled","_boundValue","onCancelCallback","_onCancel","7","getKeys","predicateLoop","isObject","./es5","8","contextStack","Context","_trace","trace","_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","longStackTraces","_peekContext","ctx","9","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","_getDomain","Warning","es5","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","warnings","wForgottenReturn","fireRejectionEvent","_isRejectionUnhandled","_settledValue","F","haveItemsQueued","Z","q","_captureStackTrace","Promise_attachExtraTrace","Promise_dereferenceTrace","disableLongStackTraces","CustomEvent","detail","cancelable","eventData","dispatchEvent","Event","domEvent","createEvent","fireGlobalEvent","emit","T","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","warning","unhandledRejection","reason","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","eventToObjectGenerator","D","I","executor","A","previousOnCancel","M","_onCancelField","P","L","N","branchesRemainingToCancel","_isBound","cancellationClearCancellationData","cancellationAttachCancellationCallback","propagateFromFunction","O","R","_boundTo","H","ignoreSelf","__stackCleaned__","V","formatAndLogError","B","isTraceLine","isInternalFrame","stackFramesAsArray","W","log","U","localEventFired","localHandler","G","Q","Y","parseLineInfoRegex","K","X","fileName","J","_length","captureStackTrace","CapturedTrace","stackToIndex","nodes","cycleEdgeNode","currentChildLength","stacks","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","removeDuplicateOrEmptyJumps","v8stackFormatter","formatNonError","stackTraceLimit","shouldIgnore","hasStackAfterThrow","err","warn","isSoft","monitoring","boundValueFunction","checkForgottenReturns","_returnedNonUndefined","creatorLine","lineMatches","handlerLine","setBounds","firstFileName","lastFileName","lastStackLines","firstIndex","lastIndex","info","deprecated","replacement","fireDomEvent","./errors","10","returner","thrower","caught","_value","11","reduce","PromiseAll","12","_TypeError","Objectfreeze","inherits","notEnumerableProp","CancellationError","TimeoutError","AggregateError","_RangeError","writable","__BluebirdErrorTypes__","errorTypes","OperationalError","RejectionError","RangeError","13","freeze","defineProperty","getDescriptor","names","getPrototypeOf","isES5","propertyIsWritable","getOwnPropertyDescriptor","proto","ObjectKeys","14","15","catchFilter","cancelPromise","called","isFinallyHandler","succeed","isRejected","checkCancel","reasonOrValue","PassThroughHandlerContext","FinallyHandlerCancelReaction","fail","_passThrough","finallyHandler","reject","catchInstances","./catch_filter","16","apiRejection","INTERNAL","tryConvertToPromise","Proxyable","debug","yieldHandlers","_finallyPromise","internal","_promise","yieldHandler","PromiseSpawn","_isResolved","_generator","return","throw","_yieldedPromise","_cancellationPhase","done","traceParent","promiseFromYieldHandler","PromiseSpawn$","spawn","17","getDomain","spread","18","PromiseArray","concurrency","limit","MappingPromiseArray","_values","preservedValues","_inFlight","receiver","_totalResolved","_queue","booleans","_preservedValues","19","_popContext","20","maybeWrapAsError","errors","rErrorKey","21","newReason","adapter","errorAdapter","nodeback","22","reflectHandler","PromiseInspection","domain","APPLY","NEXT_FILTER","createContext","nodebackForPromise","msg","isFulfilled","fulfillmentValue","rejectionReason","originatesFromRejection","multiArgs","setScheduler","didFulfill","didReject","internalData","bitField","haveInternalData","_settlePromiseCtx","settler","_receiver0","follower","fulfill","_fulfillmentHandlerAt","domainBind","_rejectCallback","_fulfill","shouldBind","ensureErrorObject","hasStack","synchronous","_isFollowing","_followee","_rejectionHandler0","asyncGuaranteed","isPromise","_promise0","_reject","_isFinal","fatalError","_rejectionHandlerAt","_fulfillmentHandler0","makeSelfResolutionError","fillTypes","./any.js","23","resolveValueIfEmpty","getActualLength","isResolved","24","withAppended","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","isIdentifier","getDataPropertyOrDefault","inheritedDataKeys","passesDefaultFilter","isPromisified","hasPromisified","checkValid","makeNodePromisified","cb","promisifiableMethods","promisifiedKey","suffix","promisifier","promisifyAll","25","Es6Map","entries","isMap","castValue","PropertiesPromiseArray","_isMap","26","_capacity","_willBeOverCapacity","moveItemsCount","dst","arrayMove","27","raceLater","promises","28","initialValue","_attachCancellationCallback","_each","gotValue","ReductionPromiseArray","_eachValues","accum","_initialValue","_cancel","29","schedule","NativePromise","MutationObserver","ProcessNextTick","GlobalSetImmediate","nativePromise","toggleScheduled","div2","o2","30","SettledPromiseArray","_promiseResolved","settle","31","CANCELLATION","SomePromiseArray","_howMany","isArrayResolved","_fulfilled","howMany","_unwrap","_checkOutcome","_canPossiblyFulfill","_rejected","32","_settledValueField","__isCancelled","33","hasProp","34","HandleWrapper","thenReturn","handle","ms","afterTimeout","_setOnCancel","35","NULL","_isDisposable","_getDisposer","thenable","iterator","isDisposer","Disposer","_data","resource","tryDispose","FunctionDisposer","ResourceList","spreadArgs","_setDisposable","reflectedResources","all","resultPromise","inspections","_disposer","36","tryCatchTarget","globalObject","Child","isExcludedProto","_e2","getOwnPropertyNames","visitedKeys","enumeration","thisAssignmentPattern","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","FakeConstructor","foo","ic","E","isOperational","itResult","it","asArray","ArrayFrom","hasEnvVariables","isClass","isPrimitive","isError","toFastProperties","filledRange","markAsOriginatingFromRejection","copyDescriptors","hasDevTools","chrome","loadTimes","getNativePromise","stateProviders","template_name","initial","regTemplates","initTemplate","progress_text","grid_header_class","task_class","task_row_class","timeline_cell_class","scale_cell_class","scale_row_class","grid_indent","grid_folder","grid_file","grid_open","grid_blank","date_grid","isUnscheduledTask","task_time","task_unscheduled_time","time_picker","link_description","drag_link","tooltip_date_format","tooltip_text","metaKey","ctrlKey","altKey","getInputMethods","traceDragEvents","dragMove","accessor","dragScroll","dndActive","mouseup","dragEnd","checkPositionChange","diff_y","initDnDMarker","backupEventTarget","inputMethods","clearDragTimer","dragStart","original_target","backup_element","date_part","time_part","week_start","getDay","month_start","quarter_start","res_month","getMonth","year_start","hour_start","minute_start","_add_days","ndate","inc","add_quarter","to_fixed","num","date_to_str","utc","getISOWeek","getWeek","str_to_date","mask","splt","_getWeekNumber","isoWeek","nday","first_thursday","getFullYear","ordinal_date","start_on_monday","getUTCISOWeek","convert_to_utc","getUTCFullYear","getUTCMonth","getUTCHours","getUTCMinutes","getUTCSeconds","parseDate","responseXML","docObj","selectNodes","_call","getSync","put","del","post","postData","postSync","XMLHttpRequest","ActiveXObject","isQt","readyState","onLoad","toUpperCase","scrollX","finish_to_start","start_to_start","finish_to_finish","start_to_finish","project","auto_types","duration_unit","autosize_min_width","branch_loading_property","show_loading","min_duration","date_format","server_utc","show_progress","scroll_on_click","drag_links","drag_resize","drag_move","link_wrapper_width","align","inherit_scale_class","duration_step","task_date","layer_attribute","_migrate_buttons","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","sections","project_sections","milestone_sections","single_date","drag_lightbox","details_on_create","details_on_dblclick","task_scroll_offset","task_height","grid_resizer_attribute","grid_resize","readonly_property","optimize_render","prevent_default_scroll","show_errors","wai_aria_attributes","placeholder_task","setService","dropService","service","stateService","selected_task","$mouseEvents","_seed","plugin","_ganttPlugin"],"mappings":"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","file":"js/chunk-2d221891.71418f20.js","sourcesContent":["(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 = 170);\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 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};","module.exports = function (d, b) {\n\tfor (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\tfunction __() { this.constructor = d; }\n\td.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};","var EventHost = function(){\n\tthis._connected = [];\n\tthis._silent_mode = false;\n};\n\nEventHost.prototype = {\n\t_silentStart: function() {\n\t\tthis._silent_mode = true;\n\t},\n\t_silentEnd: function() {\n\t\tthis._silent_mode = false;\n\t}\n};\n\nvar\tcreateEventStorage = function(obj) {\n\tvar dhx_catch = [];\n\tvar z = function(){\n\t\tvar res = true;\n\t\tfor (var i = 0; i < dhx_catch.length; i++){\n\t\t\tif (dhx_catch[i]){\n\t\t\t\tvar zr = dhx_catch[i].apply(obj, arguments);\n\t\t\t\tres=res&&zr;\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t};\n\tz.addEvent=function(ev){\n\t\tif (typeof (ev) == \"function\")\n\t\t\treturn dhx_catch.push(ev)-1;\n\t\treturn false;\n\t};\n\tz.removeEvent=function(id){\n\t\tdhx_catch[id]=null;\n\t};\n\treturn z;\n};\n\nfunction makeEventable(obj){\n\n\tvar eventHost = new EventHost();\n\tobj.attachEvent=function(name, catcher, callObj){\n\t\tname='ev_'+name.toLowerCase();\n\t\tif (!eventHost[name])\n\t\t\teventHost[name] = createEventStorage(callObj||this);\n\n\t\treturn(name+':'+eventHost[name].addEvent(catcher)); //return ID (event name & event ID)\n\t};\n\tobj.attachAll = function(callback, callObj){\n\t\tthis.attachEvent('listen_all', callback, callObj);\n\t};\n\n\tobj.callEvent=function(name, arg0, callObj){\n\t\tif (eventHost._silent_mode) return true;\n\n\t\tvar handlerName = 'ev_'+name.toLowerCase();\n\n\t\tif (eventHost['ev_listen_all']){\n\t\t\teventHost['ev_listen_all'].apply(callObj || this, [name].concat(arg0));\n\t\t}\n\n\t\tif (eventHost[handlerName])\n\t\t\treturn eventHost[handlerName].apply(callObj || this, arg0);\n\t\treturn true;\n\t};\n\tobj.checkEvent=function(name){\n\t\treturn (!!eventHost['ev_'+name.toLowerCase()]);\n\t};\n\tobj.detachEvent=function(id){\n\t\tif (id){\n\t\t\tvar list = id.split(':');//get EventName and ID\n\t\t\tvar eventName = list[0];\n\t\t\tvar eventId = list[1];\n\n\t\t\tif(eventHost[eventName]){\n\t\t\t\teventHost[eventName].removeEvent(eventId); //remove event\n\t\t\t}\n\t\t}\n\t};\n\tobj.detachAllEvents = function(){\n\t\tfor (var name in eventHost){\n\t\t\tif (name.indexOf(\"ev_\") === 0)\n\t\t\t\tdelete eventHost[name];\n\t\t}\n\t};\n\n}\n\nmodule.exports = makeEventable;","function dummy() {\n\t// eslint-disable-next-line\n\tconsole.log(\"Method is not implemented.\"); \n}\nfunction BaseControl() {\n}\n\n// base methods will be runned in gantt context\nBaseControl.prototype.render = dummy; // arguments: sns\nBaseControl.prototype.set_value = dummy; // arguments: node, value, ev, sns(config)\nBaseControl.prototype.get_value = dummy; // arguments node, ev, sns(config)\nBaseControl.prototype.focus = dummy; // arguments: node\n\nmodule.exports = function(gantt) { // we could send current instance of gantt to module\n\treturn BaseControl;\n};","var utils = require(\"../../../utils/utils\"),\n\teventable = require(\"../../../utils/eventable\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\");\n\nvar Cell = (function () {\n\t\"use strict\";\n\n\tfunction Cell(parent, config, factory, gantt) {\n\t\tif (parent) {\n\t\t\tthis.$container = domHelpers.toNode(parent);\n\t\t\tthis.$parent = parent;\n\t\t}\n\t\t// save config\n\t\tthis.$config = utils.mixin(config, {\n\t\t\theaderHeight: 33\n\t\t});\n\t\tthis.$gantt = gantt;\n\t\tthis.$domEvents = gantt._createDomEventScope();\n\t\t// set id\n\t\tthis.$id = config.id || \"c\" + utils.uid();\n\n\t\tthis.$name = \"cell\";\n\t\tthis.$factory = factory;\n\n\t\teventable(this);\n\n\t}\n\n\tCell.prototype.destructor = function () {\n\t\tthis.$parent = this.$container = this.$view = null;\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\n\t\tmouse.detach(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\n\t\tthis.$domEvents.detachAll();\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\t};\n\tCell.prototype.cell = function (id) {\n\t\treturn null;\n\t};\n\n\tCell.prototype.scrollTo = function(left, top){\n\n\t\tif (left*1 == left){\n\t\t\tthis.$view.scrollLeft = left;\n\t\t}\n\t\tif(top*1 == top){\n\t\t\tthis.$view.scrollTop = top;\n\t\t}\n\t};\n\n\tCell.prototype.clear = function(){\n\t\tthis.getNode().innerHTML = \"\";\n\t\tthis.getNode().className = \"gantt_layout_content\";\n\t\tthis.getNode().style.padding = \"0\";\n\t};\n\n\tCell.prototype.resize = function (final) {\n\t\tif (this.$parent) {\n\t\t\treturn this.$parent.resize(final);\n\t\t}\n\n\t\tif(final === false){\n\t\t\tthis.$preResize = true;\n\t\t}\n\n\t\tvar topCont = this.$container;\n\t\tvar x = topCont.offsetWidth;\n\t\tvar y = topCont.offsetHeight;\n\t\tvar topSize = this.getSize();\n\t\tif (topCont === document.body) {\n\t\t\tx = document.body.offsetWidth;\n\t\t\ty = document.body.offsetHeight;\n\t\t}\n\t\tif (x < topSize.minWidth) {\n\t\t\tx = topSize.minWidth;\n\t\t}\n\t\tif (x > topSize.maxWidth) {\n\t\t\tx = topSize.maxWidth;\n\t\t}\n\t\tif (y < topSize.minHeight) {\n\t\t\ty = topSize.minHeight;\n\t\t}\n\t\tif (y > topSize.maxHeight) {\n\t\t\ty = topSize.maxHeight;\n\t\t}\n\t\tthis.setSize(x, y);\n\n\t\tif(!this.$preResize){\n\t\t//\tself.callEvent(\"onResize\", [x, y]);\n\t\t}\n\t\tthis.$preResize = false;\n\t};\n\n\tCell.prototype.hide = function () {\n\t\tthis._hide(true);\n\t\tthis.resize();\n\t};\n\tCell.prototype.show = function (force) {\n\t\tthis._hide(false);\n\t\tif (force && this.$parent) {\n\t\t\tthis.$parent.show();\n\t\t}\n\t\tthis.resize();\n\t};\n\tCell.prototype._hide = function (mode) {\n\t\tif (mode === true && this.$view.parentNode) {\n\t\t\tthis.$view.parentNode.removeChild(this.$view);\n\t\t}\n\t\telse if (mode === false && !this.$view.parentNode) {\n\t\t\tvar index = this.$parent.cellIndex(this.$id);\n\t\t\tthis.$parent.moveView(this, index);\n\t\t}\n\t\tthis.$config.hidden = mode;\n\t};\n\tCell.prototype.$toHTML = function (content, css) {\n\t\tif (content === void 0) { content = \"\"; }\n\t\tcss = [(css || \"\"), (this.$config.css || \"\")].join(\" \");\n\t\tvar obj = this.$config;\n\t\tvar header = \"\";\n\t\tif (obj.raw) {\n\t\t\tcontent = typeof obj.raw === \"string\" ? obj.raw : \"\";\n\t\t}\n\t\telse {\n\t\t\tif (!content) {\n\t\t\t\tcontent = \"
\" + (obj.html || \"\") + \"
\";\n\t\t\t}\n\t\t\tif (obj.header) {\n\t\t\t\tvar collapseIcon = obj.canCollapse ? \"
\" : \"\";\n\t\t\t\theader = \"
\" + collapseIcon + \"
\" + obj.header + \"
\";\n\t\t\t}\n\t\t}\n\t\treturn \"
\" + header + content + \"
\";\n\t};\n\tCell.prototype.$fill = function (node, parent) {\n\t\tthis.$view = node;\n\t\tthis.$parent = parent;\n\t\tthis.init();\n\t};\n\tCell.prototype.getNode = function () {\n\t\treturn (this.$view.querySelector(\"gantt_layout_cell\") || this.$view);\n\t};\n\tCell.prototype.init = function () {\n\t\t// [NOT-GOOD] code is executed for each component, while it still has only one handler, it is no good\n\n\t\tvar self = this;\n\n\t\tthis._headerClickHandler = function(e){\n\t\t\tvar cellId = domHelpers.locateAttribute(e, \"data-cell-id\");\n\t\t\tif(cellId == self.$id){\n\t\t\t\tself.toggle();\n\t\t\t}\n\t\t};\n\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\n\t\tmouse.delegate(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\n\n\t\tthis.callEvent(\"onReady\", []);\n\t};\n\tCell.prototype.toggle = function () {\n\t\tthis.$config.collapsed = !this.$config.collapsed;\n\t\tthis.resize();\n\t};\n\tCell.prototype.getSize = function () {\n\t\tvar size = {\n\t\t\theight: this.$config.height || 0,\n\t\t\twidth: this.$config.width || 0,\n\t\t\tgravity: this.$config.gravity || 1,\n\t\t\tminHeight: this.$config.minHeight || 0,\n\t\t\tminWidth: this.$config.minWidth || 0,\n\t\t\tmaxHeight: this.$config.maxHeight || 100000,\n\t\t\tmaxWidth: this.$config.maxWidth || 100000\n\t\t};\n\t\tif (this.$config.collapsed) {\n\t\t\tvar mode = this.$config.mode === \"x\";\n\t\t\tsize[mode ? \"width\" : \"height\"] = size[mode ? \"maxWidth\" : \"maxHeight\"] = this.$config.headerHeight;\n\t\t}\n\t\treturn size;\n\t};\n\n\tCell.prototype.getContentSize = function(){\n\n\t\tvar width = this.$lastSize.contentX;\n\t\tif(width !== width*1){\n\t\t\twidth = this.$lastSize.width;\n\t\t}\n\n\t\tvar height = this.$lastSize.contentY;\n\t\tif(height !== height*1){\n\t\t\theight = this.$lastSize.height;\n\t\t}\n\n\t\treturn {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t};\n\n\tCell.prototype._getBorderSizes = function(){\n\t\tvar borders = {\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft: 0,\n\t\t\thorizontal: 0,\n\t\t\tvertical: 0\n\t\t};\n\t\tif(this._currentBorders){\n\t\t\tif(this._currentBorders[this._borders.left]){\n\t\t\t\tborders.left = 1;\n\t\t\t\tborders.horizontal++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.right]){\n\t\t\t\tborders.right = 1;\n\t\t\t\tborders.horizontal++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.top]){\n\t\t\t\tborders.top = 1;\n\t\t\t\tborders.vertical++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.bottom]){\n\t\t\t\tborders.bottom = 1;\n\t\t\t\tborders.vertical++;\n\t\t\t}\n\t\t}\n\n\t\treturn borders;\n\n\t};\n\n\tCell.prototype.setSize = function (x, y) {\n\t\tthis.$view.style.width = x + \"px\";\n\t\tthis.$view.style.height = y + \"px\";\n\n\t\tvar borders = this._getBorderSizes();\n\t\tvar contentY = y - borders.vertical;\n\t\tvar contentX = x - borders.horizontal;\n\n\t\tthis.$lastSize = { x: x, y: y, contentX: contentX, contentY: contentY };\n\t\tif (this.$config.header) {\n\t\t\tthis._sizeHeader();\n\t\t}else{\n\t\t\tthis._sizeContent();\n\t\t}\n\t};\n\n\tCell.prototype._borders = {\n\t\t\"left\":\"gantt_layout_cell_border_left\",\n\t\t\"right\":\"gantt_layout_cell_border_right\",\n\t\t\"top\":\"gantt_layout_cell_border_top\",\n\t\t\"bottom\":\"gantt_layout_cell_border_bottom\"\n\t};\n\n\tCell.prototype._setBorders = function(css, view){\n\t\tif(!view) {\n\t\t\tview = this;\n\t\t}\n\t\tvar node = view.$view;\n\n\t\tfor( var i in this._borders){\n\t\t\tdomHelpers.removeClassName(node, this._borders[i]);\n\t\t}\n\n\t\tif(typeof css == \"string\"){\n\t\t\tcss = [css];\n\t\t}\n\n\t\tvar cssHash = {};\n\n\t\tfor(var i = 0; i < css.length; i++){\n\t\t\tdomHelpers.addClassName(node, css[i]);\n\t\t\tcssHash[css[i]] = true;\n\t\t}\n\n\t\tview._currentBorders = cssHash;\n\t};\n\n\n\tCell.prototype._sizeContent = function(){\n\t\tvar content = this.$view.childNodes[0];\n\t\tif(content && content.className == \"gantt_layout_content\"){\n\t\t\tcontent.style.height = this.$lastSize.contentY + \"px\";\n\t\t}\n\t};\n\n\tCell.prototype._sizeHeader = function () {\n\t\tvar size = this.$lastSize;\n\t\tsize.contentY -= this.$config.headerHeight;\n\t\tvar header = this.$view.childNodes[0];\n\t\tvar content = this.$view.childNodes[1];\n\t\tvar xLayout = this.$config.mode === \"x\";\n\t\tif (this.$config.collapsed) {\n\t\t\tcontent.style.display = \"none\";\n\t\t\tif (xLayout) {\n\t\t\t\theader.className = \"gantt_layout_header collapsed_x\";\n\t\t\t\theader.style.width = size.y + \"px\";\n\t\t\t\tvar d = Math.floor(size.y / 2 - size.x / 2);\n\t\t\t\theader.style.transform = \"rotate(90deg) translate(\" + d + \"px, \" + d + \"px)\";\n\t\t\t\tcontent.style.display = \"none\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\theader.className = \"gantt_layout_header collapsed_y\";\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (xLayout) {\n\t\t\t\theader.className = \"gantt_layout_header\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\theader.className = \"gantt_layout_header vertical\";\n\t\t\t}\n\t\t\theader.style.width = 'auto';\n\t\t\theader.style.transform = '';\n\t\t\tcontent.style.display = \"\";\n\t\t\tcontent.style.height = size.contentY + \"px\";\n\t\t}\n\t\theader.style.height = this.$config.headerHeight + \"px\";\n\t};\n\treturn Cell;\n}());\n\nmodule.exports = Cell;\n","module.exports = function (gantt) {\n\n\tvar BaseEditor = function () {\n\t};\n\n\tBaseEditor.prototype = {\n\t\tshow: function (id, column, config, placeholder) {\n\t\t},\n\t\thide: function () {\n\t\t},\n\t\tset_value: function (value, id, column, node) {\n\t\t\tthis.get_input(node).value = value;\n\t\t},\n\t\tget_value: function (id, column, node) {\n\t\t\treturn this.get_input(node).value || \"\";\n\t\t},\n\t\tis_changed: function (value, id, column, node) {\n\t\t\tvar currentValue = this.get_value(id, column, node);\n\t\t\tif (currentValue && value && currentValue.valueOf && value.valueOf) {\n\t\t\t\treturn currentValue.valueOf() != value.valueOf();\n\t\t\t} else {\n\t\t\t\treturn currentValue != value;\n\t\t\t}\n\t\t},\n\t\tis_valid: function (value, id, column, node) {\n\t\t\treturn true;\n\t\t},\n\n\t\tsave: function (id, column, node) {\n\n\t\t},\n\t\tget_input: function (node) {\n\t\t\treturn node.querySelector(\"input\");\n\t\t},\n\t\tfocus: function (node) {\n\t\t\tvar input = this.get_input(node);\n\t\t\tif (!input) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (input.focus) {\n\t\t\t\tinput.focus();\n\t\t\t}\n\n\t\t\tif (input.select) {\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t};\n\treturn BaseEditor;\n};","var env = {\n\tisIE: (navigator.userAgent.indexOf(\"MSIE\") >= 0 || navigator.userAgent.indexOf(\"Trident\") >= 0),\n\tisIE6: (!window.XMLHttpRequest && navigator.userAgent.indexOf(\"MSIE\") >= 0),\n\tisIE7: (navigator.userAgent.indexOf(\"MSIE 7.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") < 0),\n\tisIE8: (navigator.userAgent.indexOf(\"MSIE 8.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") >= 0),\n\tisOpera: (navigator.userAgent.indexOf(\"Opera\") >= 0),\n\tisChrome: (navigator.userAgent.indexOf(\"Chrome\") >= 0),\n\tisKHTML: (navigator.userAgent.indexOf(\"Safari\") >= 0 || navigator.userAgent.indexOf(\"Konqueror\") >= 0),\n\tisFF: (navigator.userAgent.indexOf(\"Firefox\") >= 0),\n\tisIPad: (navigator.userAgent.search(/iPad/gi) >= 0),\n\tisEdge: (navigator.userAgent.indexOf(\"Edge\")!=-1)\n};\n\nmodule.exports = env;","var helpers = require(\"./helpers\");\n\nvar htmlHelpers = {\n\tgetHtmlSelect: function(options, attributes, value) {\n\t\tvar innerHTML = \"\";\n\t\tvar _this = this;\n\n\t\toptions = options || [];\n\t\t\n\t\thelpers.forEach(options, function(entry) {\n\t\t\tvar _attributes = [{ key: \"value\", value: entry.key }];\n\n\t\t\tif (value == entry.key) {\n\t\t\t\t_attributes[_attributes.length] = { key: \"selected\", value: \"selected\" };\n\t\t\t}\n\t\t\tif (entry.attributes) {\n\t\t\t\t_attributes = _attributes.concat(entry.attributes);\n\t\t\t}\n\t\t\tinnerHTML += _this.getHtmlOption({ innerHTML: entry.label }, _attributes);\n\t\t});\n\n\t\treturn _getHtmlContainer(\"select\", { innerHTML: innerHTML }, attributes);\n\t},\n\tgetHtmlOption: function(options, attributes) { return _getHtmlContainer(\"option\", options, attributes); },\n\tgetHtmlButton: function(options, attributes) { return _getHtmlContainer(\"button\", options, attributes); },\n\tgetHtmlDiv: function(options, attributes) { return _getHtmlContainer(\"div\", options, attributes); },\n\tgetHtmlLabel: function(options, attributes) { return _getHtmlContainer(\"label\", options, attributes); },\n\tgetHtmlInput: function(attributes) {\n\t\treturn \"\";\n\t}\n};\n\nfunction _getHtmlContainer(tag, options, attributes) {\n\tvar html;\n\n\toptions = options || [];\n\t\n\thtml = \"<\" + tag + _getHtmlAttributes(attributes || []) + \">\" + (options.innerHTML || \"\") + \"\";\n\treturn html;\n\n}\n\nfunction _getHtmlAttributes(attributes) {\n\tvar html = \"\";\n\n\thelpers.forEach(attributes, function(entry) {\n\t\thtml += \" \" + entry.key + \"='\" + entry.value + \"'\";\n\t});\n\treturn html;\n}\n\nmodule.exports = htmlHelpers;","var __extends = require(\"../../../utils/extends\");\nvar htmlHelpers = require(\"../../../utils/html_helpers\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction SelectControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\t\n\t\treturn self; \n\t}\n\t\n\t__extends(SelectControl, _super);\n\t\n\tSelectControl.prototype.render = function(sns) {\n\t\tvar height = (sns.height || \"23\") + \"px\";\n\t\tvar html = \"
\";\n\n\t\thtml += htmlHelpers.getHtmlSelect(sns.options, [{ key: \"style\", value: \"width:100%;\" }]);\n\t\thtml += \"
\";\n\t\treturn html;\n\t};\n\n\tSelectControl.prototype.set_value = function(node, value, ev, sns) {\n\t\tvar select = node.firstChild;\n\t\tif (!select._dhx_onchange && sns.onchange) {\n\t\t\tselect.onchange = sns.onchange;\n\t\t\tselect._dhx_onchange = true;\n\t\t}\n\t\tif (typeof value === \"undefined\")\n\t\t\tvalue = (select.options[0] || {}).value;\n\t\tselect.value = value || \"\";\n\t};\n\t\n\tSelectControl.prototype.get_value = function(node) {\n\t\treturn node.firstChild.value;\n\t};\n\t\n\tSelectControl.prototype.focus = function(node) {\n\t\tvar a = node.firstChild;\n\t\tgantt._focus(a, true);\n\t};\n\t\n\treturn SelectControl;\n};","/**\n * The state object for order branch drag and drop\n */\n\nvar utils = require(\"../../../../utils/utils\");\n\nmodule.exports = {\n\tcreateDropTargetObject: function createDropTargetObject(parent) {\n\t\tvar res = {\n\t\t\ttargetParent: null,\n\t\t\ttargetIndex: 0,\n\t\t\ttargetId: null,\n\t\t\tchild: false,\n\t\t\tnextSibling: false,\n\t\t\tprevSibling: false\n\t\t};\n\n\t\tif (parent) {\n\t\t\tutils.mixin(res, parent, true);\n\t\t}\n\t\treturn res;\n\t},\n\tnextSiblingTarget: function nextSiblingTarget(dndTaskId, targetTaskId, store) {\n\t\tvar result = this.createDropTargetObject();\n\t\tresult.targetId = targetTaskId;\n\t\tresult.nextSibling = true;\n\t\tresult.targetParent = store.getParent(result.targetId);\n\t\tresult.targetIndex = store.getBranchIndex(result.targetId);\n\t\tif(store.getParent(dndTaskId) != result.targetParent || result.targetIndex < store.getBranchIndex(dndTaskId)){\n\t\t\tresult.targetIndex += 1;\n\t\t}\n\t\treturn result;\n\t},\n\tprevSiblingTarget: function prevSiblingTarget(dndTaskId, targetTaskId, store) {\n\t\tvar result = this.createDropTargetObject();\n\t\tresult.targetId = targetTaskId;\n\t\tresult.prevSibling = true;\n\t\tresult.targetParent = store.getParent(result.targetId);\n\t\tresult.targetIndex = store.getBranchIndex(result.targetId);\n\t\tif(store.getParent(dndTaskId) == result.targetParent && result.targetIndex > store.getBranchIndex(dndTaskId)){\n\t\t\tresult.targetIndex -= 1;\n\t\t}\n\t\treturn result;\n\t},\n\tfirstChildTarget: function firstChildTarget(dndTaskId, targetTaskId, store) {\n\t\tvar result = this.createDropTargetObject();\n\t\tresult.targetId = targetTaskId;\n\t\tresult.targetParent = result.targetId;\n\t\tresult.targetIndex = 0;\n\t\tresult.child = true;\n\t\treturn result;\n\t},\n\tlastChildTarget: function lastChildTarget(dndTaskId, targetTaskId, store) {\n\t\tvar children = store.getChildren(targetTaskId);\n\t\tvar result = this.createDropTargetObject();\n\t\tresult.targetId = children[children.length - 1];\n\t\tresult.targetParent = targetTaskId;\n\t\tresult.targetIndex = children.length;\n\t\tresult.nextSibling = true;\n\t\treturn result;\n\t}\n};","module.exports = function(item, view){\n\tif(!item.start_date || !item.end_date){\n\t\treturn null;\n\t}\n\tvar padding = 200;\n\tvar startCoord = view.posFromDate(item.start_date);\n\tvar endCoord = view.posFromDate(item.end_date);\n\tvar left = Math.min(startCoord, endCoord) - padding;\n\tvar right = Math.max(startCoord, endCoord) + padding;\n\n\treturn {\n\t\ttop: view.getItemTop(item.id),\n\t\theight: view.getItemHeight(item.id),\n\t\tleft: left,\n\t\twidth: right - left\n\t};\n};","var helpers = require(\"../../utils/helpers\");\n\nfunction clearTaskStoreHandler(self) {\n\tif (self._delayRender) {\n\t\tself._delayRender.$cancelTimeout();\n\t}\n\n\tif (!self.$gantt) {\n\t\treturn;\n\t}\n\n\tvar tasks = self.$gantt.$data.tasksStore;\n\tvar ownStore = self.$config.rowStore;\n\n\tvar handlerIdProperty = \"_attached_\" + ownStore.$config.name;\n\tif (self[handlerIdProperty]) {\n\t\ttasks.detachEvent(self[handlerIdProperty]);\n\t\tself[handlerIdProperty] = null;\n\t}\n\n\tif (ownStore.$attachedResourceViewHandler) {\n\t\townStore.detachEvent(ownStore.$attachedResourceViewHandler);\n\t\townStore.$attachedResourceViewHandler = null;\n\t}\n}\n\nfunction createMixin(_super){\n\n\tvar initGrid = _super.prototype.init,\n\t\tdestroyGrid = _super.prototype.destructor;\n\n\treturn {\n\t\tinit: function() {\n\t\t\tinitGrid.apply(this, arguments);\n\t\t\tthis._linkToTaskStore();\n\t\t},\n\n\t\tdestructor: function() {\n\t\t\tclearTaskStoreHandler(this);\n\t\t\tdestroyGrid.apply(this, arguments);\n\t\t},\n\n\t\t_linkToTaskStore: function () {\n\t\t\tif (this.$config.rowStore && this.$gantt.$data.tasksStore) {\n\t\t\t\tvar tasks = this.$gantt.$data.tasksStore;\n\t\t\t\tvar ownStore = this.$config.rowStore;\n\t\t\t\tclearTaskStoreHandler(this);\n\n\t\t\t\tvar self = this;\n\t\t\t\tvar delayRender = helpers.delay(function() {\n\t\t\t\t\tif (self.$gantt.getState().lightbox) {\n\t\t\t\t\t\tdelayRender();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// because rowstore could be changed during timeout\n\t\t\t\t\t\tself.$config.rowStore.refresh();\n\t\t\t\t\t}\n\t\t\t\t}, 300);\n\t\t\t\tthis._delayRender = delayRender;\n\t\t\t\tvar handlerIdProperty = \"_attached_\" + ownStore.$config.name;\n\n\t\t\t\tif (!self[handlerIdProperty]) {\n\t\t\t\t\tself[handlerIdProperty] = tasks.attachEvent(\"onStoreUpdated\", delayRender);\n\t\t\t\t}\n\n\t\t\t\tthis.$gantt.attachEvent(\"onDestroy\", function() {\n\t\t\t\t\t// detach events to don't call delayed tasks\n\t\t\t\t\tclearTaskStoreHandler(self);\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (!ownStore.$attachedResourceViewHandler) {\n\t\t\t\t\townStore.$attachedResourceViewHandler = ownStore.attachEvent(\"onBeforeStoreUpdate\", function() {\n\t\t\t\t\t\tif (self.$gantt.getState().lightbox) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (delayRender.$pending) {\n\t\t\t\t\t\t\tdelayRender.$cancelTimeout();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._updateNestedTasks();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_updateNestedTasks: function(){\n\t\t\tvar gantt = this.$gantt;\n\t\t\tvar resourceStore = gantt.getDatastore(gantt.config.resource_store);\n\t\t\tif (!resourceStore.$config.fetchTasks) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar resourceProperty = gantt.config.resource_property;\n\n\t\t\tresourceStore.silent(function(){\n\t\t\t\tvar toAddArray = [];\n\t\t\t\tvar toAdd = {};\n\t\t\t\tvar toDelete = {};\n\n\t\t\t\tresourceStore.eachItem(function(resource){\n\t\t\t\t\tif (resource.$role == \"task\") {\n\t\t\t\t\t\ttoDelete[resource.id] = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tasks = gantt.getTaskBy(resourceProperty, resource.id);\n\t\t\t\t\ttasks.forEach(function(task) {\n\t\t\t\t\t\tvar copy = gantt.copy(task);\n\t\t\t\t\t\tcopy.id = task.id + '_' + resource.id;\n\n\t\t\t\t\t\tcopy.$task_id = task.id;\n\t\t\t\t\t\tcopy.$resource_id = resource.id;\n\t\t\t\t\t\tcopy[resourceStore.$parentProperty] = resource.id;\n\t\t\t\t\t\tcopy.$role = \"task\";\n\t\t\t\t\t\ttoAddArray.push(copy);\n\t\t\t\t\t\ttoAdd[copy.id] = true;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tfor (var id in toDelete) {\n\t\t\t\t\tif (!toAdd[id]) {\n\t\t\t\t\t\tresourceStore.removeItem(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresourceStore.parse(toAddArray);\n\t\t\t});\n\t\t}\n\t};\n}\n\nmodule.exports = createMixin;","function create(gantt){\n\tvar events = [];\n\n\treturn {\n\t\tdelegate:function(event, className, handler, root) {\n\t\t\tevents.push([event, className, handler, root]);\n\n\t\t\tvar helper = gantt.$services.getService(\"mouseEvents\");\n\t\t\thelper.delegate(event, className, handler, root);\n\t\t},\n\t\tdestructor: function(){\n\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\n\t\t\tfor(var i = 0; i < events.length; i++){\n\t\t\t\tvar h = events[i];\n\t\t\t\tmouseEvents.detach(h[0], h[1], h[2], h[3]);\n\t\t\t}\n\t\t\tevents = [];\n\t\t}\n\t};\n}\n\nmodule.exports = create;","var domHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\"),\n\teventable = require(\"../../../utils/eventable\"),\n\tgridResize = require(\"./grid_resize\"),\n\ttopPositionMixin = require(\"../row_position_mixin\");\n\nvar Grid = function (parent, config, factory, gantt) {\n\tthis.$config = utils.mixin({}, config || {});\n\tthis.$gantt = gantt;\n\tthis.$parent = parent;\n\teventable(this);\n\tthis.$state = {};\n\tutils.mixin(this, topPositionMixin());\n};\n\n\nGrid.prototype = {\n\tinit: function (container) {\n\t\tvar gantt = this.$gantt;\n\t\tvar gridAriaAttr = gantt._waiAria.gridAttrString();\n\t\tvar gridDataAriaAttr = gantt._waiAria.gridDataAttrString();\n\n\n\t\tcontainer.innerHTML = \"
\";\n\t\tthis.$grid = container.childNodes[0];\n\n\t\tthis.$grid.innerHTML = \"
\";\n\n\t\tthis.$grid_scale = this.$grid.childNodes[0];\n\t\tthis.$grid_data = this.$grid.childNodes[1];\n\n\t\tvar attr = this.$getConfig()[this.$config.bind + \"_attribute\"];\n\t\tif (!attr && this.$config.bind) {\n\t\t\tattr = this.$config.bind + \"_id\";\n\t\t}\n\t\tthis.$config.item_attribute = attr || null;\n\n\t\tif (!this.$config.layers) {\n\t\t\tvar layers = this._createLayerConfig();\n\t\t\tthis.$config.layers = layers;\n\t\t}\n\n\t\tvar resizer = gridResize(gantt, this);\n\t\tresizer.init();\n\t\tthis._renderHeaderResizers = resizer.doOnRender;\n\t\tthis._mouseDelegates = require(\"../mouse_event_container\")(gantt);\n\n\t\tthis._addLayers(this.$gantt);\n\t\tthis._initEvents();\n\t\tthis.callEvent(\"onReady\", []);\n\t\t//this.refresh();\n\t},\n\n\t_validateColumnWidth: function (column, property) {\n\t\t// user can set {name:\"text\", width:\"200\",...} for some reason,\n\t\t// check and convert it to number when possible\n\t\tvar value = column[property];\n\t\tif (value && value != \"*\") {\n\t\t\tvar gantt = this.$gantt;\n\t\t\tvar numericWidth = value * 1;\n\t\t\tif (isNaN(numericWidth)) {\n\t\t\t\tgantt.assert(false, \"Wrong \" + property + \" value of column \" + column.name);\n\t\t\t} else {\n\t\t\t\tcolumn[property] = numericWidth;\n\t\t\t}\n\t\t}\n\t},\n\n\tsetSize: function (width, height) {\n\t\tthis.$config.width = this.$state.width = width;\n\t\tthis.$config.height = this.$state.height = height;\n\n\t\t// TODO: maybe inherit and override in a subclass instead of extending here\n\n\t\tvar columns = this.getGridColumns(),\n\t\t\tinnerWidth = 0;\n\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\t\tthis._validateColumnWidth(columns[i], \"min_width\");\n\t\t\tthis._validateColumnWidth(columns[i], \"max_width\");\n\t\t\tthis._validateColumnWidth(columns[i], \"width\");\n\n\t\t\tinnerWidth += columns[i].width * 1;\n\t\t}\n\n\t\tvar outerWidth;\n\t\tif (isNaN(innerWidth) || !this.$config.scrollable) {\n\t\t\touterWidth = this._setColumnsWidth(width + 1);\n\t\t\tinnerWidth = outerWidth;\n\t\t}\n\n\t\tif (this.$config.scrollable) {\n\t\t\tthis.$grid_scale.style.width = innerWidth + \"px\";\n\t\t\tthis.$grid_data.style.width = innerWidth + \"px\";\n\t\t} else {\n\t\t\tthis.$grid_scale.style.width = \"inherit\";\n\t\t\tthis.$grid_data.style.width = \"inherit\";\n\t\t}\n\t\tthis.$config.width -= 1;\n\n\t\tvar config = this.$getConfig();\n\t\tif (outerWidth !== width) {\n\t\t\tconfig.grid_width = outerWidth;\n\t\t\tthis.$config.width = outerWidth - 1;\n\t\t}\n\n\t\tvar dataHeight = Math.max(this.$state.height - config.scale_height, 0);\n\t\tthis.$grid_data.style.height = dataHeight + \"px\";\n\t\tthis.refresh();\n\t},\n\tgetSize: function () {\n\n\t\tvar config = this.$getConfig();\n\n\t\tvar store = this.$config.rowStore;\n\n\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0,\n\t\t\tcontentWidth = this._getGridWidth();\n\n\t\tvar size = {\n\t\t\tx: this.$state.width,\n\t\t\ty: this.$state.height,\n\t\t\tcontentX: this.isVisible() ? contentWidth : 0,\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\n\t\t\tscrollHeight: this.isVisible() ? contentHeight : 0,\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\n\t\t};\n\n\t\treturn size;\n\t},\n\n\t_bindStore: function () {\n\t\tif (this.$config.bind){\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\n\t\t\tthis.$config.rowStore = rowStore;\n\t\t\tif(rowStore && !rowStore._gridCacheAttached){\n\t\t\t\tvar self = this;\n\t\t\t\trowStore._gridCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function(){\n\t\t\t\t\tself._resetTopPositionHeight();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\t_unbindStore: function(){\n\t\tif (this.$config.bind){\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\n\t\t\tif(rowStore._gridCacheAttached){\n\t\t\t\trowStore.detachEvent(rowStore._gridCacheAttached);\n\t\t\t\trowStore._gridCacheAttached = false;\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function () {\n\t\tthis._bindStore();\n\n\t\tthis._resetTopPositionHeight();\n\t\tthis._initSmartRenderingPlaceholder();\n\n\t\tthis._calculateGridWidth();\n\t\tthis._renderGridHeader();\n\t},\n\n\tgetViewPort: function(){\n\t\tvar scrollLeft = this.$config.scrollLeft || 0;\n\t\tvar scrollTop = this.$config.scrollTop || 0;\n\t\tvar height = this.$config.height || 0;\n\t\tvar width = this.$config.width || 0;\n\t\treturn {\n\t\t\ty: scrollTop,\n\t\t\ty_end: scrollTop + height,\n\t\t\tx: scrollLeft,\n\t\t\tx_end: scrollLeft + width,\n\t\t\theight: height,\n\t\t\twidth: width\n\t\t};\n\t},\n\n\tscrollTo: function (left, top) {\n\t\tif (!this.isVisible())\n\t\t\treturn;\n\n\t\tvar scrolled = false;\n\n\t\tthis.$config.scrollTop = this.$config.scrollTop || 0;\n\t\tthis.$config.scrollLeft = this.$config.scrollLeft || 0;\n\n\t\tif (left * 1 == left) {\n\t\t\tthis.$config.scrollLeft = this.$state.scrollLeft = this.$grid.scrollLeft = left;\n\t\t\tscrolled = true;\n\t\t}\n\n\t\t// var config = this.$getConfig();\n\t\tif (top * 1 == top) {\n\t\t\tthis.$config.scrollTop = this.$state.scrollTop = this.$grid_data.scrollTop = top;\n\t\t\tscrolled = true;\n\t\t}\n\n\t\tif(scrolled){\n\t\t\tthis.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\n\t\t}\n\t},\n\n\tgetColumnIndex: function (name) {\n\t\tvar columns = this.$getConfig().columns;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tif (columns[i].name == name) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetColumn: function (name) {\n\t\tvar index = this.getColumnIndex(name);\n\t\tif (index === null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.$getConfig().columns[index];\n\t},\n\n\tgetGridColumns: function () {\n\t\tvar config = this.$getConfig();\n\t\treturn config.columns.slice();\n\t},\n\tisVisible: function () {\n\t\tif (this.$parent && this.$parent.$config) {\n\t\t\treturn !this.$parent.$config.hidden;\n\t\t} else {\n\t\t\treturn this.$grid.offsetWidth;\n\t\t}\n\t},\n\n\tgetItemHeight: function () {\n\t\tvar config = this.$getConfig();\n\t\treturn config.row_height;\n\t},\n\n\t_createLayerConfig: function () {\n\t\tvar gantt = this.$gantt;\n\t\tvar self = this;\n\t\tvar layers = [\n\t\t\t{\n\t\t\t\trenderer: gantt.$ui.layers.gridLine(),\n\t\t\t\tcontainer: this.$grid_data,\n\t\t\t\tfilter: [function () {\n\t\t\t\t\treturn self.isVisible();\n\t\t\t\t}]\n\t\t\t}\n\t\t];\n\t\treturn layers;\n\t},\n\n\t_addLayers: function (gantt) {\n\t\tif (!this.$config.bind)\n\t\t\treturn;\n\n\t\tthis._taskLayers = [];\n\n\t\tvar self = this;\n\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\n\n\t\tif (!taskRenderer) {\n\t\t\ttaskRenderer = layers.createDataRender({\n\t\t\t\tname: this.$config.bind,\n\t\t\t\tdefaultContainer: function () { return self.$grid_data; }\n\t\t\t});\n\t\t}\n\n\t\tvar taskLayers = this.$config.layers;\n\t\tfor (var i = 0; taskLayers && i < taskLayers.length; i++) {\n\t\t\tvar layer = taskLayers[i];\n\t\t\tlayer.view = this;\n\n\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\n\t\t\tthis._taskLayers.push(bar_layer);\n\t\t}\n\n\t\tthis._bindStore();\n\n\t\tthis._initSmartRenderingPlaceholder();\n\t},\n\n\t_refreshPlaceholderOnStoreUpdate: function (id) {\n\t\tvar config = this.$getConfig(),\n\t\t\tstore = this.$config.rowStore;\n\n\t\tif (!store || id !== null || !this.isVisible() || !config.smart_rendering) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar contentHeight;\n\t\tif (this.$config.scrollY) {\n\t\t\tvar scroll = this.$gantt.$ui.getView(this.$config.scrollY);\n\t\t\tif (scroll)\n\t\t\t\tcontentHeight = scroll.getScrollState().scrollSize;\n\t\t}\n\n\t\tif (!contentHeight) {\n\t\t\tcontentHeight = store ? config.row_height * store.countVisible() : 0;\n\t\t}\n\n\t\tif (contentHeight) {\n\t\t\tif (this.$rowsPlaceholder && this.$rowsPlaceholder.parentNode) {\n\t\t\t\tthis.$rowsPlaceholder.parentNode.removeChild(this.$rowsPlaceholder);\n\t\t\t}\n\n\t\t\tvar placeholder = this.$rowsPlaceholder = document.createElement(\"div\");\n\t\t\tplaceholder.style.visibility = \"hidden\";\n\t\t\tplaceholder.style.height = contentHeight + \"px\";\n\t\t\tplaceholder.style.width = \"1px\";\n\t\t\tthis.$grid_data.appendChild(placeholder);\n\t\t}\n\t},\n\n\t_initSmartRenderingPlaceholder: function () {\n\t\tvar store = this.$config.rowStore;\n\t\tif (!store) {\n\t\t\treturn;\n\t\t} else {\n\t\t\tthis._initSmartRenderingPlaceholder = function () { };\n\t\t}\n\t\tthis._staticBgHandler = store.attachEvent(\"onStoreUpdated\", utils.bind(this._refreshPlaceholderOnStoreUpdate, this));\n\t},\n\n\t_initEvents: function () {\n\t\tvar gantt = this.$gantt;\n\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_close\", gantt.bind(function (e, id, trg) {\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tif (!store) return true;\n\n\t\t\tvar target = domHelpers.locateAttribute(e, this.$config.item_attribute);\n\t\t\tif (target) {\n\t\t\t\tstore.close(target.getAttribute(this.$config.item_attribute));\n\n\t\t\t}\n\t\t\treturn false;\n\t\t}, this), this.$grid);\n\n\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_open\", gantt.bind(function (e, id, trg) {\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tif (!store) return true;\n\n\t\t\tvar target = domHelpers.locateAttribute(e, this.$config.item_attribute);\n\t\t\tif (target) {\n\t\t\t\tstore.open(target.getAttribute(this.$config.item_attribute));\n\n\t\t\t}\n\t\t\treturn false;\n\t\t}, this), this.$grid);\n\t},\n\n\t_clearLayers: function (gantt) {\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\n\n\t\tif (this._taskLayers) {\n\t\t\tfor (var i = 0; i < this._taskLayers.length; i++) {\n\t\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\n\t\t\t}\n\t\t}\n\n\t\tthis._taskLayers = [];\n\t},\n\n\t_getColumnWidth: function (column, config, width) {\n\t\tvar min_width = column.min_width || config.min_grid_column_width;\n\t\tvar new_width = Math.max(width, min_width || 10);\n\t\tif (column.max_width)\n\t\t\tnew_width = Math.min(new_width, column.max_width);\n\t\treturn new_width;\n\t},\n\t// return min and max possible grid width according to restricts\n\t_getGridWidthLimits: function () {\n\t\tvar config = this.$getConfig(),\n\t\t\tcolumns = this.getGridColumns(),\n\t\t\tmin_limit = 0,\n\t\t\tmax_limit = 0;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tmin_limit += columns[i].min_width ? columns[i].min_width : config.min_grid_column_width;\n\t\t\tif (max_limit !== undefined) {\n\t\t\t\tmax_limit = columns[i].max_width ? (max_limit + columns[i].max_width) : undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn [min_limit, max_limit];\n\t},\n\t// resize columns to get total newWidth, starting from columns[start_index]\n\t_setColumnsWidth: function (newWidth, start_index) {\n\t\tvar config = this.$getConfig();\n\t\tvar columns = this.getGridColumns(),\n\t\t\tcolumns_width = 0,\n\t\t\tfinal_width = newWidth;\n\n\t\tstart_index = !window.isNaN(start_index) ? start_index : -1;\n\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\t\tcolumns_width += columns[i].width * 1;\n\t\t}\n\n\t\tif (window.isNaN(columns_width)) {\n\t\t\tthis._calculateGridWidth();\n\t\t\tcolumns_width = 0;\n\t\t\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\t\t\tcolumns_width += columns[i].width * 1;\n\t\t\t}\n\t\t}\n\n\t\tvar extra_width = final_width - columns_width;\n\n\t\tvar start_width = 0;\n\t\tfor (var i = 0; i < start_index + 1; i++) {\n\t\t\tstart_width += columns[i].width;\n\t\t}\n\n\t\tcolumns_width -= start_width;\n\n\t\tfor (var i = start_index + 1; i < columns.length; i++) {\n\n\t\t\tvar col = columns[i];\n\t\t\tvar share = Math.round(extra_width * (col.width / columns_width));\n\n\t\t\t// columns have 2 additional restrict fields - min_width & max_width that are set by user\n\t\t\tif (extra_width < 0) {\n\t\t\t\tif (col.min_width && col.width + share < col.min_width)\n\t\t\t\t\tshare = col.min_width - col.width;\n\t\t\t\telse if (!col.min_width && config.min_grid_column_width && col.width + share < config.min_grid_column_width)\n\t\t\t\t\tshare = config.min_grid_column_width - col.width;\n\t\t\t} else if (col.max_width && col.width + share > col.max_width)\n\t\t\t\tshare = col.max_width - col.width;\n\n\t\t\tcolumns_width -= col.width;\n\t\t\tcol.width += share;\n\t\t\textra_width -= share;\n\n\t\t}\n\n\t\tvar iterator = extra_width > 0 ? 1 : -1;\n\t\twhile ((extra_width > 0 && iterator === 1) || (extra_width < 0 && iterator === -1)) {\n\t\t\tvar curExtra = extra_width;\n\t\t\tfor (i = start_index + 1; i < columns.length; i++) {\n\t\t\t\tvar new_width = columns[i].width + iterator;\n\n\t\t\t\tif (new_width == this._getColumnWidth(columns[i], config, new_width)) {\n\t\t\t\t\textra_width -= iterator;\n\t\t\t\t\tcolumns[i].width = new_width;\n\t\t\t\t}\n\n\t\t\t\tif (!extra_width)\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif (curExtra == extra_width)\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// if impossible to resize the right-side columns, resize the start column\n\t\tif (extra_width && start_index > -1) {\n\t\t\tvar new_width = columns[start_index].width + extra_width;\n\t\t\tif (new_width == this._getColumnWidth(columns[start_index], config, new_width))\n\t\t\t\tcolumns[start_index].width = new_width;\n\t\t}\n\n\t\t//if (this.callEvent(\"onGridResizeEnd\", [config.grid_width, final_width]) === false)\n\t\t//\treturn;\n\n\t\treturn this._getColsTotalWidth();\n\t},\n\n\t_getColsTotalWidth: function () {\n\t\tvar columns = this.getGridColumns();\n\t\tvar cols_width = 0;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar v = parseFloat(columns[i].width);\n\t\t\tif (window.isNaN(v)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcols_width += v;\n\t\t}\n\t\treturn cols_width;\n\t},\n\t_calculateGridWidth: function () {\n\t\tvar config = this.$getConfig();\n\t\tvar columns = this.getGridColumns();\n\t\tvar cols_width = 0;\n\t\tvar unknown = [];\n\t\tvar width = [];\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar v = parseFloat(columns[i].width);\n\t\t\tif (window.isNaN(v)) {\n\t\t\t\tv = config.min_grid_column_width || 10;\n\t\t\t\tunknown.push(i);\n\t\t\t}\n\t\t\twidth[i] = v;\n\t\t\tcols_width += v;\n\t\t}\n\t\tvar gridWidth = this._getGridWidth() + 1;\n\t\tif (config.autofit || unknown.length) {\n\t\t\tvar diff = gridWidth - cols_width;\n\t\t\t// TODO: logic may be improved for proportional changing of width\n\t\t\tif (config.autofit) {\n\t\t\t\t// delta must be added for all columns\n\t\t\t\tfor (var i = 0; i < width.length; i++) {\n\t\t\t\t\tvar delta = Math.round(diff / (width.length - i));\n\t\t\t\t\twidth[i] += delta;\n\t\t\t\t\tvar new_width = this._getColumnWidth(columns[i], config, width[i]);\n\n\t\t\t\t\tif (new_width != width[i]) {\n\t\t\t\t\t\tdelta = new_width - width[i];\n\t\t\t\t\t\twidth[i] = new_width;\n\t\t\t\t\t}\n\t\t\t\t\tdiff -= delta;\n\t\t\t\t}\n\t\t\t} else if (unknown.length) {\n\t\t\t\t// there are several columns with undefined width\n\t\t\t\tfor (var i = 0; i < unknown.length; i++) {\n\t\t\t\t\tvar delta = Math.round(diff / (unknown.length - i)); // no float values, just integer\n\t\t\t\t\tvar index = unknown[i];\n\t\t\t\t\twidth[index] += delta;\n\t\t\t\t\tvar new_width = this._getColumnWidth(columns[index], config, width[index]);\n\t\t\t\t\tif (new_width != width[index]) {\n\t\t\t\t\t\tdelta = new_width - width[index];\n\t\t\t\t\t\twidth[index] = new_width;\n\t\t\t\t\t}\n\t\t\t\t\tdiff -= delta;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < width.length; i++) {\n\t\t\t\tcolumns[i].width = width[i];\n\t\t\t}\n\t\t} else {\n\t\t\tvar changed = (gridWidth != cols_width);\n\t\t\tthis.$config.width = cols_width - 1;\n\t\t\tconfig.grid_width = cols_width;\n\t\t\tif (changed) {\n\t\t\t\tthis.$parent._setContentSize(this.$config.width, null);\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_renderGridHeader: function () {\n\t\tvar gantt = this.$gantt;\n\t\tvar config = this.$getConfig();\n\t\tvar locale = this.$gantt.locale;\n\t\tvar templates = this.$gantt.templates;\n\n\t\tvar columns = this.getGridColumns();\n\t\tif (config.rtl) {\n\t\t\tcolumns = columns.reverse();\n\t\t}\n\t\tvar cells = [];\n\t\tvar width = 0,\n\t\t\tlabels = locale.labels;\n\n\t\tvar lineHeigth = config.scale_height - 1;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar last = i == columns.length - 1;\n\t\t\tvar col = columns[i];\n\n\t\t\t// ensure columns have non-empty names\n\t\t\tif (!col.name) {\n\t\t\t\tcol.name = gantt.uid() + \"\";\n\t\t\t}\n\n\t\t\tvar colWidth = col.width * 1;\n\n\t\t\tvar gridWidth = this._getGridWidth();\n\t\t\tif (last && gridWidth > width + colWidth)\n\t\t\t\tcol.width = colWidth = gridWidth - width;\n\t\t\twidth += colWidth;\n\t\t\tvar sort = (gantt._sort && col.name == gantt._sort.name) ? (\"
\") : \"\";\n\t\t\tvar cssClass = [\"gantt_grid_head_cell\",\n\t\t\t\t(\"gantt_grid_head_\" + col.name),\n\t\t\t\t(last ? \"gantt_last_cell\" : \"\"),\n\t\t\t\ttemplates.grid_header_class(col.name, col)].join(\" \");\n\n\t\t\tvar style = \"width:\" + (colWidth - (last ? 1 : 0)) + \"px;\";\n\t\t\tvar label = (col.label || labels[\"column_\" + col.name] || labels[col.name]);\n\t\t\tlabel = label || \"\";\n\n\t\t\tvar ariaAttrs = gantt._waiAria.gridScaleCellAttrString(col, label);\n\n\t\t\tvar cell = \"
\" + label + sort + \"
\";\n\t\t\tcells.push(cell);\n\t\t}\n\t\tthis.$grid_scale.style.height = (config.scale_height) + \"px\";\n\t\tthis.$grid_scale.style.lineHeight = lineHeigth + \"px\";\n\t\t//this.$grid_scale.style.width = \"inherit\";\n\t\tthis.$grid_scale.innerHTML = cells.join(\"\");\n\n\t\tif (this._renderHeaderResizers) {\n\t\t\tthis._renderHeaderResizers();\n\t\t}\n\t},\n\n\t_getGridWidth: function () {\n\t\t// TODO: refactor/remove/comment some of _getGridWidth/this.$config.width/this.$state.width, it's not clear what they do\n\t\treturn this.$config.width;\n\t},\n\n\tdestructor: function () {\n\t\tthis._clearLayers(this.$gantt);\n\t\tif (this._mouseDelegates) {\n\t\t\tthis._mouseDelegates.destructor();\n\t\t\tthis._mouseDelegates = null;\n\t\t}\n\t\tthis._unbindStore();\n\t\tthis.$grid = null;\n\t\tthis.$grid_scale = null;\n\t\tthis.$grid_data = null;\n\t\tthis.$gantt = null;\n\t\tif (this.$config.rowStore) {\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\n\t\t\tthis.$config.rowStore = null;\n\t\t}\n\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\t}\n};\n\nmodule.exports = Grid;\n","module.exports = function(gantt){\n\treturn gantt.config.smart_rendering && gantt._smart_render;\n};","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\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;","var utils = require(\"../../utils/utils\");\nvar helpers = require(\"../../utils/helpers\");\n\n\nfunction IsWorkTimeArgument(date, unit, task, id, calendar){\n\tthis.date = date;\n\tthis.unit = unit;\n\tthis.task = task;\n\tthis.id = id;\n\tthis.calendar = calendar;\n\treturn this;\n}\n\nfunction ClosestWorkTimeArgument(date, dir, unit, task, id, calendar){\n\tthis.date = date;\n\tthis.dir = dir;\n\tthis.unit = unit;\n\tthis.task = task;\n\tthis.id = id;\n\tthis.calendar = calendar;\n\treturn this;\n}\n\nfunction CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar){\n\tthis.start_date = start_date;\n\tthis.duration = duration;\n\tthis.unit = unit;\n\tthis.step = step;\n\tthis.task = task;\n\tthis.id = id;\n\tthis.calendar = calendar;\n\treturn this;\n}\n\nfunction GetDurationArgument(start, end, task, calendar) {\n\tthis.start_date = start;\n\tthis.end_date = end;\n\tthis.task = task;\n\tthis.calendar = calendar;\n\tthis.unit = null;\n\tthis.step = null;\n\treturn this;\n}\n\nvar calendarArgumentsHelper = function(gantt){\n\treturn {\n\t\tgetWorkHoursArguments: function () {\n\t\t\tvar config = arguments[0];\n\t\t\tif (helpers.isDate(config)) {\n\t\t\t\tconfig = {\n\t\t\t\t\tdate: config\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tconfig = utils.mixin({}, config);\n\t\t\t}\n\t\t\treturn config;\n\t\t},\n\t\tsetWorkTimeArguments: function () {\n\t\t\treturn arguments[0];\n\t\t},\n\t\tunsetWorkTimeArguments: function () {\n\t\t\treturn arguments[0];\n\t\t},\n\t\tisWorkTimeArguments: function () {\n\t\t\tvar config = arguments[0];\n\t\t\tif(config instanceof IsWorkTimeArgument){\n\t\t\t\treturn config;\n\t\t\t}\n\n\t\t\tvar processedConfig;\n\t\t\tif (!config.date) {\n\t\t\t\t//IsWorkTimeArgument(date, unit, task, id, calendar)\n\t\t\t\tprocessedConfig = new IsWorkTimeArgument(arguments[0], arguments[1], arguments[2], null, arguments[3]);\n\t\t\t} else {\n\t\t\t\tprocessedConfig = new IsWorkTimeArgument(config.date, config.unit, config.task, null, config.calendar);\n\t\t\t}\n\n\t\t\tprocessedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\n\n\t\t\treturn processedConfig;\n\t\t},\n\t\tgetClosestWorkTimeArguments: function (arg) {\n\t\t\tvar config = arguments[0];\n\t\t\tif (config instanceof ClosestWorkTimeArgument)\n\t\t\t\treturn config;\n\n\t\t\tvar processedConfig;\n\t\t\tif (helpers.isDate(config)) {\n\t\t\t\tprocessedConfig = new ClosestWorkTimeArgument(config);\n\n\t\t\t} else {\n\t\t\t\tprocessedConfig = new ClosestWorkTimeArgument(\n\t\t\t\t\tconfig.date,\n\t\t\t\t\tconfig.dir,\n\t\t\t\t\tconfig.unit,\n\t\t\t\t\tconfig.task,\n\t\t\t\t\tnull,//config.id,\n\t\t\t\t\tconfig.calendar\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif(config.id){\n\t\t\t\tprocessedConfig.task = config;\n\t\t\t}\n\t\t\tprocessedConfig.dir = config.dir || 'any';\n\t\t\tprocessedConfig.unit = config.unit || gantt.config.duration_unit;\n\n\t\t\treturn processedConfig;\n\t\t},\n\n\t\t_getStartEndConfig: function (param) {\n\t\t\tvar argumentType = GetDurationArgument;\n\t\t\tvar config;\n\t\t\tif (param instanceof argumentType)\n\t\t\t\treturn param;\n\n\t\t\tif (helpers.isDate(param)) {\n\t\t\t\tconfig = new argumentType(arguments[0], arguments[1], arguments[2], arguments[3]);\n\t\t\t} else {\n\t\t\t\tconfig = new argumentType(param.start_date, param.end_date, param.task);\n\t\t\t\tif (param.id) {\n\t\t\t\t\tconfig.task = param;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconfig.unit = config.unit || gantt.config.duration_unit;\n\t\t\tconfig.step = config.step || gantt.config.duration_step;\n\t\t\tconfig.start_date = config.start_date || config.start || config.date;\n\n\t\t\treturn config;\n\t\t},\n\n\t\tgetDurationArguments: function (start, end, unit, step) {\n\t\t\treturn this._getStartEndConfig.apply(this, arguments);\n\t\t},\n\n\t\thasDurationArguments: function (start, end, unit, step) {\n\t\t\treturn this._getStartEndConfig.apply(this, arguments);\n\t\t},\n\n\t\tcalculateEndDateArguments: function (start, duration, unit, step) {\n\t\t\tvar config = arguments[0];\n\t\t\tif (config instanceof CalculateEndDateArgument)\n\t\t\t\treturn config;\n\n\t\t\tvar processedConfig;\n\t\t\t//CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar)\n\t\t\tif (helpers.isDate(config)) {\n\t\t\t\tprocessedConfig = new CalculateEndDateArgument(\n\t\t\t\t\targuments[0],\n\t\t\t\t\targuments[1],\n\t\t\t\t\targuments[2],\n\t\t\t\t\tundefined,\n\t\t\t\t\targuments[3],\n\t\t\t\t\tundefined,\n\t\t\t\t\targuments[4]\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\tprocessedConfig = new CalculateEndDateArgument(\n\t\t\t\t\tconfig.start_date,\n\t\t\t\t\tconfig.duration,\n\t\t\t\t\tconfig.unit,\n\t\t\t\t\tconfig.step,\n\t\t\t\t\tconfig.task,\n\t\t\t\t\tnull,//config.id,\n\t\t\t\t\tconfig.calendar\n\t\t\t\t);\n\t\t\t}\n\t\t\tif(config.id){\n\t\t\t\tprocessedConfig.task = config;\n\t\t\t}\n\n\t\t\tprocessedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\n\t\t\tprocessedConfig.step = processedConfig.step || gantt.config.duration_step;\n\n\t\t\treturn processedConfig;\n\t\t}\n\t};\n};\n\n\nmodule.exports = calendarArgumentsHelper;","function copyLinkIdsArray(gantt, linkIds, targetHash){\n\tfor(var i = 0; i < linkIds.length; i++) {\n\t\tif(gantt.isLinkExists(linkIds[i])){\n\t\t\ttargetHash[linkIds[i]] = gantt.getLink(linkIds[i]);\n\t\t}\n\t}\n}\n\nfunction copyLinkIds(gantt, task, targetHash){\n\tcopyLinkIdsArray(gantt, task.$source, targetHash);\n\tcopyLinkIdsArray(gantt, task.$target, targetHash);\n}\n\nfunction getSubtreeLinks(gantt, rootId){\n\tvar res = {};\n\n\tif(gantt.isTaskExists(rootId)){\n\t\tcopyLinkIds(gantt, gantt.getTask(rootId), res);\n\t}\n\n\tgantt.eachTask(function(child){\n\t\tcopyLinkIds(gantt, child, res);\n\t}, rootId);\n\n\treturn res;\n}\n\nfunction getSubtreeTasks(gantt, rootId){\n\tvar res = {};\n\n\tgantt.eachTask(function(child){\n\t\tres[child.id] = child;\n\t}, rootId);\n\n\treturn res;\n}\n\nmodule.exports = {\n\tgetSubtreeLinks: getSubtreeLinks,\n\tgetSubtreeTasks: getSubtreeTasks\n};","var ScaleHelper = require(\"./ui/timeline/scales_ignore\");\nvar PrimaryScaleHelper = require(\"./ui/timeline/scales\");\n\n\nfunction dateRangeResolver(gantt){\n\t//reset project timing\n\t//_get_tasks_data(gantt);\n\treturn gantt.getSubtaskDates();\n}\n\nfunction defaultRangeResolver(){\n\treturn {\n\t\tstart_date: new Date(),\n\t\tend_date: new Date()\n\t};\n}\n\nfunction resolveConfigRange(unit, gantt){\n\tvar range = {\n\t\tstart_date:null,\n\t\tend_date:null\n\t};\n\n\tif (gantt.config.start_date && gantt.config.end_date) {\n\t\trange.start_date = gantt.date[unit + \"_start\"](new Date(gantt.config.start_date));\n\n\t\tvar end = new Date(gantt.config.end_date);\n\t\tvar start_interval = gantt.date[unit + \"_start\"](new Date(end));\n\t\tif (+end != +start_interval) {\n\t\t\tend = gantt.date.add(start_interval, 1, unit);\n\t\t} else {\n\t\t\tend = start_interval;\n\t\t}\n\n\t\trange.end_date = end;\n\t}\n\treturn range;\n}\n\nfunction _scale_range_unit(gantt) {\n\tvar primaryScale = (new PrimaryScaleHelper(gantt)).primaryScale();\n\tvar unit = primaryScale.unit;\n\tvar step = primaryScale.step;\n\tif (gantt.config.scale_offset_minimal) {\n\n\t\tvar helper = new ScaleHelper(gantt);\n\t\tvar scales = [helper.primaryScale()].concat(helper.getSubScales());\n\n\t\thelper.sortScales(scales);\n\t\tunit = scales[scales.length - 1].unit;\n\t\tstep = scales[scales.length - 1].step || 1;\n\t}\n\treturn { unit:unit, step:step };\n}\n\nfunction _init_tasks_range(gantt) {\n\tvar cfg = _scale_range_unit(gantt);\n\tvar unit = cfg.unit,\n\t\tstep = cfg.step;\n\tvar range = resolveConfigRange(unit, gantt);\n\n\tif(!(range.start_date && range.end_date)){\n\t\trange = dateRangeResolver(gantt);\n\t\tif(!range.start_date || !range.end_date){\n\t\t\trange = defaultRangeResolver(gantt);\n\t\t}\n\n\t\trange.start_date = gantt.date[unit + \"_start\"](range.start_date);\n\t\trange.start_date = gantt.calculateEndDate({\n\t\t\tstart_date: gantt.date[unit + \"_start\"](range.start_date),\n\t\t\tduration: -1,\n\t\t\tunit: unit,\n\t\t\tstep:step\n\t\t});//one free column before first task\n\n\t\trange.end_date = gantt.date[unit + \"_start\"](range.end_date);\n\t\trange.end_date = gantt.calculateEndDate({start_date: range.end_date, duration: 2, unit: unit, step:step});//one free column after last task\n\t}\n\n\tgantt._min_date = range.start_date;\n\tgantt._max_date = range.end_date;\n}\n\nfunction _adjust_scales(gantt) {\n\tif (gantt.config.fit_tasks) {\n\t\tvar old_min = +gantt._min_date,\n\t\t\told_max = +gantt._max_date;\n\t\t//this._init_tasks_range();\n\t\tif (+gantt._min_date != old_min || +gantt._max_date != old_max) {\n\t\t\tgantt.render();\n\n\t\t\tgantt.callEvent(\"onScaleAdjusted\", []);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nmodule.exports = function updateTasksRange(gantt){\n\t_init_tasks_range(gantt);\n\t_adjust_scales(gantt);\n};\n","var powerArray = require(\"./power_array\");\nvar utils = require(\"../../utils/utils\");\nvar DataStore = require(\"./datastore\");\n\nvar TreeDataStore = function(config){\n\tDataStore.apply(this, [config]);\n\tthis._branches = {};\n\n\tthis.pull = {};\n\tthis.$initItem = config.initItem;\n\tthis.$parentProperty = config.parentProperty || \"parent\";\n\n\tif(typeof config.rootId !== \"function\"){\n\t\tthis.$getRootId = (function(val){\n\t\t\treturn function(){return val;};\n\t\t})(config.rootId || 0);\n\t}else{\n\t\tthis.$getRootId = config.rootId;\n\t}\n\n\t// TODO: replace with live reference to gantt config\n\tthis.$openInitially = config.openInitially;\n\n\tthis.visibleOrder = powerArray.$create();\n\tthis.fullOrder = powerArray.$create();\n\tthis._searchVisibleOrder = {};\n\tthis._skip_refresh = false;\n\n\tthis._ganttConfig = null;\n\tif(config.getConfig){\n\t\tthis._ganttConfig = config.getConfig();\n\t}\n\n\tthis.attachEvent(\"onFilterItem\", function(id, item){\n\n\t\tvar canOpenSplitTasks = false;\n\t\tif(this._ganttConfig){\n\t\t\tvar canOpenSplitTasks = this._ganttConfig.open_split_tasks;\n\t\t}\n\n\t\tvar open = true;\n\t\tthis.eachParent(function(parent){\n\t\t\topen = open && parent.$open && (canOpenSplitTasks || !this._isSplitItem(parent));\n\t\t}, item);\n\t\treturn !!open;\n\t});\n\n\treturn this;\n};\n\nTreeDataStore.prototype = utils.mixin({\n\n\t\t_buildTree: function(data){\n\t\t\tvar item = null;\n\t\t\tvar rootId = this.$getRootId();\n\t\t\tfor (var i = 0, len = data.length; i < len; i++){\n\t\t\t\titem = data[i];\n\t\t\t\tthis.setParent(item, this.getParent(item) || rootId);\n\t\t\t}\n\n\t\t\t// calculating $level for each item\n\t\t\tfor (var i = 0, len = data.length; i < len; i++){\n\t\t\t\titem = data[i];\n\t\t\t\tthis._add_branch(item);\n\t\t\t\titem.$level = this.calculateItemLevel(item);\n\n\t\t\t\tif (!utils.defined(item.$open)) {\n\t\t\t\t\titem.$open = utils.defined(item.open) ? item.open : this.$openInitially();\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tthis._updateOrder();\n\t\t},\n\t\t_isSplitItem: function(item){\n\t\t\treturn (item.render == \"split\" && this.hasChild(item.id));\n\t\t},\n\t\tparse: function(data){\n\t\t\tthis.callEvent(\"onBeforeParse\", [data]);\n\t\t\tvar loaded = this._parseInner(data);\n\t\t\tthis._buildTree(loaded);\n\t\t\tthis.filter();\n\t\t\tthis.callEvent(\"onParse\", [loaded]);\n\t\t},\n\n\t\t_addItemInner: function(item, index){\n\n\t\t\tvar parent = this.getParent(item);\n\n\t\t\tif(!utils.defined(parent)){\n\t\t\t\tparent = this.$getRootId();\n\t\t\t\tthis.setParent(item, parent);\n\t\t\t}\n\n\t\t\tvar parentIndex = this.getIndexById(parent);\n\t\t\tvar targetIndex = parentIndex + Math.min(Math.max(index, 0), this.visibleOrder.length);\n\n\t\t\tif(targetIndex*1 !== targetIndex){\n\t\t\t\ttargetIndex = undefined;\n\t\t\t}\n\t\t\tDataStore.prototype._addItemInner.call(this, item, targetIndex);\n\t\t\tthis.setParent(item, parent);\n\n\t\t\tif(item.hasOwnProperty(\"$rendered_parent\")){\n\t\t\t\tthis._move_branch(item, item.$rendered_parent);\n\t\t\t}\n\t\t\tthis._add_branch(item, index);\n\t\t},\n\t\t_changeIdInner: function(oldId, newId){\n\t\t\tvar children = this.getChildren(oldId);\n\t\t\tvar visibleOrder = this._searchVisibleOrder[oldId];\n\n\t\t\tDataStore.prototype._changeIdInner.call(this, oldId, newId);\n\n\t\t\tvar parent = this.getParent(newId);\n\n\t\t\tthis._replace_branch_child(parent, oldId, newId);\n\t\t\tfor(var i = 0; i < children.length; i++){\n\t\t\t\tthis.setParent(this.getItem(children[i]), newId);\n\t\t\t}\n\n\t\t\tthis._searchVisibleOrder[newId] = visibleOrder;\n\t\t\tdelete this._branches[oldId];\n\t\t},\n\n\t\t_traverseBranches: function(code, parent){\n\t\t\tparent = parent || this.$getRootId();\n\t\t\tvar branch = this._branches[parent];\n\t\t\tif (branch) {\n\t\t\t\tfor (var i = 0; i < branch.length; i++) {\n\t\t\t\t\tvar itemId = branch[i];\n\t\t\t\t\tcode.call(this, itemId);\n\t\t\t\t\tif (this._branches[itemId])\n\t\t\t\t\t\tthis._traverseBranches(code, itemId);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_updateOrder: function(code){\n\n\t\t\tthis.fullOrder = powerArray.$create();\n\t\t\tthis._traverseBranches(function(taskId){\n\t\t\t\tthis.fullOrder.push(taskId);\n\t\t\t});\n\n\t\t\tif(code)\n\t\t\t\tDataStore.prototype._updateOrder.call(this, code);\n\t\t},\n\n\t\t_removeItemInner: function(id){\n\n\t\t\tvar items = [];\n\t\t\tthis.eachItem(function(child){\n\t\t\t\titems.push(child);\n\t\t\t}, id);\n\n\t\t\titems.push(this.getItem(id));\n\n\t\t\tfor(var i = 0; i < items.length; i++){\n\n\t\t\t\tthis._move_branch(items[i], this.getParent(items[i]), null);\n\t\t\t\tDataStore.prototype._removeItemInner.call(this, items[i].id);\n\t\t\t\tthis._move_branch(items[i], this.getParent(items[i]), null);\n\t\t\t}\n\t\t},\n\n\t\tmove: function(sid, tindex, parent){\n\t\t\t//target id as 4th parameter\n\t\t\tvar id = arguments[3];\n\t\t\tif (id) {\n\t\t\t\tif (id === sid) return;\n\n\t\t\t\tparent = this.getParent(id);\n\t\t\t\ttindex = this.getBranchIndex(id);\n\t\t\t}\n\t\t\tif(sid == parent){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparent = parent || this.$getRootId();\n\t\t\tvar source = this.getItem(sid);\n\t\t\tvar source_pid = this.getParent(source.id);\n\n\t\t\tvar tbranch = this.getChildren(parent);\n\n\t\t\tif (tindex == -1)\n\t\t\t\ttindex = tbranch.length + 1;\n\t\t\tif (source_pid == parent) {\n\t\t\t\tvar sindex = this.getBranchIndex(sid);\n\t\t\t\tif (sindex == tindex) return;\n\t\t\t}\n\n\t\t\tif(this.callEvent(\"onBeforeItemMove\", [sid, parent, tindex]) === false)\n\t\t\t\treturn false;\n\n\t\t\tthis._replace_branch_child(source_pid, sid);\n\t\t\ttbranch = this.getChildren(parent);\n\n\t\t\tvar tid = tbranch[tindex];\n\t\t\tif (!tid) //adding as last element\n\t\t\t\ttbranch.push(sid);\n\t\t\telse\n\t\t\t\ttbranch = tbranch.slice(0, tindex).concat([ sid ]).concat(tbranch.slice(tindex));\n\n\t\t\tthis.setParent(source, parent);\n\t\t\tthis._branches[parent] = tbranch;\n\n\t\t\tvar diff = this.calculateItemLevel(source) - source.$level;\n\t\t\tsource.$level += diff;\n\t\t\tthis.eachItem(function(item){\n\t\t\t\titem.$level += diff;\n\t\t\t}, source.id, this);\n\n\n\t\t\tthis._moveInner(this.getIndexById(sid), this.getIndexById(parent) + tindex);\n\n\t\t\tthis.callEvent(\"onAfterItemMove\", [sid, parent, tindex]);\n\t\t\tthis.refresh();\n\t\t},\n\n\t\tgetBranchIndex: function(id){\n\t\t\tvar branch = this.getChildren(this.getParent(id));\n\t\t\tfor (var i = 0; i < branch.length; i++)\n\t\t\t\tif (branch[i] == id)\n\t\t\t\t\treturn i;\n\n\t\t\treturn -1;\n\t\t},\n\t\thasChild: function(id){\n\t\t\treturn (utils.defined(this._branches[id]) && this._branches[id].length);\n\t\t},\n\t\tgetChildren: function(id){\n\t\t\treturn utils.defined(this._branches[id]) ? this._branches[id] : powerArray.$create();\n\t\t},\n\n\t\tisChildOf: function(childId, parentId){\n\t\t\tif (!this.exists(childId))\n\t\t\t\treturn false;\n\t\t\tif (parentId === this.$getRootId())\n\t\t\t\treturn true;\n\n\t\t\tif (!this.hasChild(parentId))\n\t\t\t\treturn false;\n\n\t\t\tvar item = this.getItem(childId);\n\t\t\tvar pid = this.getParent(childId);\n\n\t\t\tvar parent = this.getItem(parentId);\n\t\t\tif(parent.$level >= item.$level){\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\twhile (item && this.exists(pid)) {\n\t\t\t\titem = this.getItem(pid);\n\n\t\t\t\tif (item && item.id == parentId)\n\t\t\t\t\treturn true;\n\t\t\t\tpid = this.getParent(item);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tgetSiblings: function(id){\n\t\t\tif(!this.exists(id)){\n\t\t\t\treturn powerArray.$create();\n\t\t\t}\n\t\t\tvar parent = this.getParent(id);\n\t\t\treturn this.getChildren(parent);\n\n\t\t},\n\t\tgetNextSibling: function(id){\n\t\t\tvar siblings = this.getSiblings(id);\n\t\t\tfor(var i= 0, len = siblings.length; i < len; i++){\n\t\t\t\tif(siblings[i] == id)\n\t\t\t\t\treturn siblings[i+1] || null;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetPrevSibling: function(id){\n\t\t\tvar siblings = this.getSiblings(id);\n\t\t\tfor(var i= 0, len = siblings.length; i < len; i++){\n\t\t\t\tif(siblings[i] == id)\n\t\t\t\t\treturn siblings[i-1] || null;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetParent: function(id){\n\t\t\tvar item = null;\n\t\t\tif(id.id !== undefined){\n\t\t\t\titem = id;\n\t\t\t}else{\n\t\t\t\titem = this.getItem(id);\n\t\t\t}\n\n\t\t\tvar parent;\n\t\t\tif(item){\n\t\t\t\tparent = item[this.$parentProperty];\n\t\t\t}else{\n\t\t\t\tparent = this.$getRootId();\n\t\t\t}\n\t\t\treturn parent;\n\n\t\t},\n\n\t\tclearAll: function(){\n\t\t\tthis._branches = {};\n\t\t\tDataStore.prototype.clearAll.call(this);\n\t\t},\n\n\t\tcalculateItemLevel: function(item){\n\t\t\tvar level = 0;\n\t\t\tthis.eachParent(function(){\n\t\t\t\tlevel++;\n\t\t\t}, item);\n\t\t\treturn level;\n\t\t},\n\n\t\t_setParentInner: function(item, new_pid, silent){\n\t\t\tif(!silent){\n\t\t\t\tif(item.hasOwnProperty(\"$rendered_parent\")){\n\t\t\t\t\tthis._move_branch(item, item.$rendered_parent, new_pid);\n\t\t\t\t}else{\n\t\t\t\t\tthis._move_branch(item, item[this.$parentProperty], new_pid);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetParent: function(item, new_pid, silent){\n\t\t\tthis._setParentInner(item, new_pid, silent);\n\n\t\t\titem[this.$parentProperty] = new_pid;\n\t\t},\n\t\teachItem: function(code, parent){\n\t\t\tparent = parent || this.$getRootId();\n\n\n\t\t\tvar branch = this.getChildren(parent);\n\t\t\tif (branch)\n\t\t\t\tfor (var i=0; i b[field];\n\t\t\t\treturn result ? 1 : -1;\n\t\t\t}) : field;\n\n\t\t\tif (desc) {\n\t\t\t\tvar original_criteria = criteria;\n\t\t\t\tcriteria = function (a, b) {\n\t\t\t\t\treturn original_criteria(b, a);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar els = this.getChildren(parent);\n\n\t\t\tif (els){\n\t\t\t\tvar temp = [];\n\t\t\t\tfor (var i = els.length - 1; i >= 0; i--)\n\t\t\t\t\ttemp[i] = this.getItem(els[i]);\n\n\t\t\t\ttemp.sort(criteria);\n\n\t\t\t\tfor (var i = 0; i < temp.length; i++) {\n\t\t\t\t\tels[i] = temp[i].id;\n\t\t\t\t\tthis.sort(field, desc, els[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfilter: function(rule){\n\t\t\tfor(var i in this.pull){\n\t\t\t\tif(this.pull[i].$rendered_parent !== this.getParent(this.pull[i])){\n\t\t\t\t\tthis._move_branch(this.pull[i], this.pull[i].$rendered_parent, this.getParent(this.pull[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn DataStore.prototype.filter.apply(this, arguments);\n\t\t},\n\n\t\topen: function(id){\n\t\t\tif(this.exists(id)){\n\t\t\t\tthis.getItem(id).$open = true;\n\t\t\t\tthis.callEvent(\"onItemOpen\", [id]);\n\t\t\t}\n\t\t},\n\n\t\tclose: function(id){\n\t\t\tif(this.exists(id)){\n\t\t\t\tthis.getItem(id).$open = false;\n\t\t\t\tthis.callEvent(\"onItemClose\", [id]);\n\t\t\t}\n\t\t},\n\n\t\tdestructor: function(){\n\t\t\tDataStore.prototype.destructor.call(this);\n\t\t\tthis._branches = null;\n\t\t}\n\t},\n\tDataStore.prototype\n);\n\nmodule.exports = TreeDataStore;","var utils = require(\"../../utils/utils\");\n\nvar $powerArray = {\n\t$create: function(array){\n\t\treturn utils.mixin(array || [], this);\n\t},\n\t//remove element at specified position\n\t$removeAt:function(pos,len){\n\t\tif (pos>=0) this.splice(pos,(len||1));\n\t},\n\t//find element in collection and remove it\n\t$remove:function(value){\n\t\tthis.$removeAt(this.$find(value));\n\t},\n\t//add element to collection at specific position\n\t$insertAt:function(data,pos){\n\t\tif (!pos && pos!==0) \t//add to the end by default\n\t\t\tthis.push(data);\n\t\telse {\n\t\t\tvar b = this.splice(pos,(this.length-pos));\n\t\t\tthis[pos] = data;\n\t\t\tthis.push.apply(this,b); //reconstruct array without loosing this pointer\n\t\t}\n\t},\n\t//return index of element, -1 if it doesn't exists\n\t$find:function(data){\n\t\tfor (var i=0; i data_size){\n\t\t\t\t//dhx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");\n\t\t\t\tindex = Math.min(order.length,index);\n\t\t\t}\n\t\t}\n\n\n\t\t//gantt.assert(!this.exists(id), \"Not unique ID\");\n\n\t\tthis.pull[item.id]=item;\n\t\tif (!this._skip_refresh){\n\t\t\tthis._updateOrder(function(){\n\t\t\t\tif(this.$find(item.id) === -1)\n\t\t\t\t\tthis.$insertAt(item.id,index);\n\t\t\t});\n\t\t}\n\t\tthis.filter();\n\t\t//order.$insertAt(item.id,index);\n\t},\n\n\n\tisVisible: function(id){\n\t\treturn this.visibleOrder.$find(id) > -1;\n\t},\n\tgetVisibleItems: function(){\n\t\treturn this.getIndexRange();\n\t},\n\n\taddItem: function(item, index){\n\t\tif (!utils.defined(item.id))\n\t\t\titem.id = utils.uid();\n\n\t\tif(this.$initItem){\n\t\t\titem = this.$initItem(item);\n\t\t}\n\n\t\tif (!this._skip_refresh){\n\t\t\tif (this.callEvent(\"onBeforeAdd\", [item.id, item]) === false) return false;\n\t\t}\n\n\n\t\tthis._addItemInner(item, index);\n\n\t\tif (!this._skip_refresh){\n\t\t\tthis.callEvent(\"onAfterAdd\",[item.id, item]);\n\t\t\t//repaint signal\n\t\t\tthis.callEvent(\"onStoreUpdated\",[item.id,item,\"add\"]);\n\t\t}\n\t\treturn item.id;\n\t},\n\n\t_changeIdInner: function(oldId, newId){\n\t\tif(this.pull[oldId])\n\t\t\tthis.pull[newId] = this.pull[oldId];\n\n\t\tvar visibleOrder = this._searchVisibleOrder[oldId];\n\t\tthis.pull[newId].id = newId;\n\t\tthis._updateOrder(function(){\n\t\t\tthis[this.$find(oldId)] = newId;\n\t\t});\n\t\tthis._searchVisibleOrder[newId] = visibleOrder;\n\t\tdelete this._searchVisibleOrder[oldId];\n\n\t\t//this.visibleOrder[this.visibleOrder.$find(oldId)]=newId;\n\t\tdelete this.pull[oldId];\n\t},\n\tchangeId: function(oldId, newId){\n\t\tthis._changeIdInner(oldId, newId);\n\n\t\tthis.callEvent(\"onIdChange\", [oldId, newId]);\n\n\t},\n\texists: function(id){\n\t\treturn !!(this.pull[id]);\n\t},\n\n\t_moveInner: function(sindex, tindex){\n\t\tvar id = this.getIdByIndex(sindex);\n\n\t\tthis._updateOrder(function(){\n\t\t\tthis.$removeAt(sindex);\n\t\t\tthis.$insertAt(id,Math.min(this.length, tindex));\n\t\t});\n\t\t//this.visibleOrder.$removeAt(sindex);\t//remove at old position\n\t\t//if (sindex=0 && tindex>=0, \"DataStore::move\",\"Incorrect indexes\");\n\n\t\tvar id = this.getIdByIndex(sindex);\n\t\tvar obj = this.getItem(id);\n\t\tthis._moveInner(sindex, tindex);\n\n\n\t\tif (!this._skip_refresh) {\n\t\t\t//repaint signal\n\t\t\tthis.callEvent(\"onStoreUpdated\", [obj.id, obj, \"move\"]);\n\t\t}\n\t},\n\tclearAll: function(){\n\t\tthis.pull = {};\n\t\tthis.visibleOrder = powerArray.$create();\n\t\tthis.fullOrder = powerArray.$create();\n\t\tif (this._skip_refresh) return;\n\t\tthis.callEvent(\"onClearAll\",[]);\n\t\tthis.refresh();\n\t},\n\n\tsilent:function(code, master){\n\t\tthis._skip_refresh = true;\n\t\tcode.call(master||this);\n\t\tthis._skip_refresh = false;\n\t},\n\n\tarraysEqual: function (arr1, arr2) {\n\t\tif(arr1.length !== arr2.length)\n\t\t\treturn false;\n\t\tfor(var i = 0; i < arr1.length; i++) {\n\t\t\tif(arr1[i] !== arr2[i])\n\t\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\trefresh: function(id, quick){\n\t\tif (this._skip_refresh) return;\n\n\t\tvar args;\n\t\tif (id){\n\t\t\targs = [id, this.pull[id], \"paint\"];\n\t\t}else{\n\t\t\targs = [null,null,null];\n\t\t}\n\n\t\tif(this.callEvent(\"onBeforeStoreUpdate\", args) === false){\n\t\t\treturn;\n\t\t}\n\n\t\tif(id){\n\t\t\t// if item changes visible order (e.g. expand-collapse branch) - do a complete repaint\n\t\t\tif(!quick){\n\t\t\t\tvar oldOrder = this.visibleOrder;\n\t\t\t\tthis.filter();\n\t\t\t\tif(!this.arraysEqual(oldOrder, this.visibleOrder)){\n\t\t\t\t\tid = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}else{\n\t\t\tthis.filter();\n\t\t}\n\n\t\tif (id){\n\t\t\targs = [id, this.pull[id], \"paint\"];\n\t\t}else{\n\t\t\targs = [null,null,null];\n\t\t}\n\n\t\tthis.callEvent(\"onStoreUpdated\",args);\n\t},\n\n\tcount: function(){\n\t\treturn this.fullOrder.length;\n\t},\n\tcountVisible: function(){\n\t\treturn this.visibleOrder.length;\n\t},\n\n\tsort: function(sort){},\n\n\tserialize: function(){},\n\n\teachItem: function(code){\n\t\tfor (var i=0; i 1) {\n\t\t\t//little adjust milestone position, so horisontal corners would match link arrow when thickness of link line is more than 1px\n\t\t\tpadd += 1;\n\t\t}\n\n\t\tif (taskType == cfg.types.milestone){\n\t\t\tpos.left -= Math.round(height / 2);\n\t\t\tpos.width = height;\n\t\t}\n\n\t\tvar div = document.createElement(\"div\");\n\n\t\tvar width = Math.round(pos.width);\n\n\t\tif(view.$config.item_attribute){\n\t\t\tdiv.setAttribute(view.$config.item_attribute, task.id);\n\t\t}\n\n\t\tif (cfg.show_progress && taskType != cfg.types.milestone) {\n\t\t\t_render_task_progress(task, div, width, cfg, templates);\n\t\t}\n\n\t\t//use separate div to display content above progress bar\n\t\tvar content = _render_task_content(task, width, templates);\n\t\tif (task.textColor) {\n\t\t\tcontent.style.color = task.textColor;\n\t\t}\n\t\tdiv.appendChild(content);\n\n\t\tvar css = _combine_item_class(\"gantt_task_line\",\n\t\t\ttemplates.task_class(task.start_date, task.end_date, task),\n\t\t\ttask.id,\n\t\t\tview);\n\t\tif (task.color || task.progressColor || task.textColor) {\n\t\t\tcss += \" gantt_task_inline_color\";\n\t\t}\n\t\tdiv.className = css;\n\n\t\tvar styles = [\n\t\t\t\"left:\" + pos.left + \"px\",\n\t\t\t\"top:\" + (padd + pos.top) + 'px',\n\t\t\t\"height:\" + height + 'px',\n\t\t\t\"line-height:\" + (Math.max(height < 30 ? height - 2 : height, 0)) + 'px',\n\t\t\t\"width:\" + width + 'px'\n\t\t];\n\t\tif (task.color) {\n\t\t\tstyles.push(\"background-color:\" + task.color);\n\t\t}\n\t\tif (task.textColor) {\n\t\t\tstyles.push(\"color:\" + task.textColor);\n\t\t}\n\n\t\tdiv.style.cssText = styles.join(\";\");\n\t\tvar side = _render_leftside_content(task, cfg, templates);\n\t\tif (side) div.appendChild(side);\n\n\t\tside = _render_rightside_content(task, cfg, templates);\n\t\tif (side) div.appendChild(side);\n\n\t\tgantt._waiAria.setTaskBarAttr(task, div);\n\n\t\tvar state = gantt.getState();\n\n\t\tif (!gantt.isReadonly(task)) {\n\t\t\tif (cfg.drag_resize && !gantt.isSummaryTask(task) && taskType != cfg.types.milestone) {\n\t\t\t\t_render_pair(div, \"gantt_task_drag\", task, function (css) {\n\t\t\t\t\tvar el = document.createElement(\"div\");\n\t\t\t\t\tel.className = css;\n\t\t\t\t\treturn el;\n\t\t\t\t}, cfg);\n\t\t\t}\n\t\t\tif (cfg.drag_links && cfg.show_links) {\n\t\t\t\t_render_pair(div, \"gantt_link_control\", task, function (css) {\n\t\t\t\t\tvar outer = document.createElement(\"div\");\n\t\t\t\t\touter.className = css;\n\t\t\t\t\touter.style.cssText = [\n\t\t\t\t\t\t\"height:\" + height + 'px',\n\t\t\t\t\t\t\"line-height:\" + height + 'px'\n\t\t\t\t\t].join(\";\");\n\t\t\t\t\tvar inner = document.createElement(\"div\");\n\t\t\t\t\tinner.className = \"gantt_link_point\";\n\n\t\t\t\t\tvar showLinkPoints = false;\n\t\t\t\t\tif(state.link_source_id && cfg.touch){\n\t\t\t\t\t\tshowLinkPoints = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tinner.style.display = showLinkPoints ? \"block\" : \"\";\n\t\t\t\t\touter.appendChild(inner);\n\t\t\t\t\treturn outer;\n\t\t\t\t}, cfg);\n\t\t\t}\n\t\t}\n\t\treturn div;\n\t}\n\n\tfunction _render_side_content(task, template, cssClass) {\n\t\tif (!template) return null;\n\n\t\tvar text = template(task.start_date, task.end_date, task);\n\t\tif (!text) return null;\n\t\tvar content = document.createElement(\"div\");\n\t\tcontent.className = \"gantt_side_content \" + cssClass;\n\t\tcontent.innerHTML = text;\n\t\treturn content;\n\t}\n\n\tfunction _render_leftside_content(task, cfg, templates) {\n\t\tvar css = \"gantt_left \" + _get_link_crossing_css(!cfg.rtl ? true : false, task, cfg);\n\t\treturn _render_side_content(task, templates.leftside_text, css);\n\t}\n\n\tfunction _render_rightside_content(task, cfg, templates) {\n\t\tvar css = \"gantt_right \" + _get_link_crossing_css(!cfg.rtl ? false : true, task, cfg);\n\t\treturn _render_side_content(task, templates.rightside_text, css);\n\t}\n\n\tfunction _get_link_crossing_css(left, task) {\n\t\tvar cond = _get_conditions(left);\n\n\t\tfor (var i in cond) {\n\t\t\tvar links = task[i];\n\t\t\tfor (var ln = 0; ln < links.length; ln++) {\n\t\t\t\tvar link = gantt.getLink(links[ln]);\n\n\t\t\t\tfor (var tp = 0; tp < cond[i].length; tp++) {\n\t\t\t\t\tif (link.type == cond[i][tp]) {\n\t\t\t\t\t\treturn \"gantt_link_crossing\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"\";\n\t}\n\n\n\tfunction _render_task_content(task, width, templates) {\n\t\tvar content = document.createElement(\"div\");\n\t\tif (gantt.getTaskType(task.type) != gantt.config.types.milestone)\n\t\t\tcontent.innerHTML = templates.task_text(task.start_date, task.end_date, task);\n\t\tcontent.className = \"gantt_task_content\";\n\t\t//content.style.width = width + 'px';\n\t\treturn content;\n\t}\n\n\tfunction _render_task_progress(task, element, maxWidth, cfg, templates) {\n\t\tvar done = task.progress * 1 || 0;\n\n\t\tmaxWidth = Math.max(maxWidth - 2, 0);//2px for borders\n\t\tvar pr = document.createElement(\"div\");\n\t\tvar width = Math.round(maxWidth * done);\n\n\t\twidth = Math.min(maxWidth, width);\n\t\tif (task.progressColor) {\n\t\t\tpr.style.backgroundColor = task.progressColor;\n\t\t\tpr.style.opacity = 1;\n\t\t}\n\t\tpr.style.width = width + 'px';\n\t\tpr.className = \"gantt_task_progress\";\n\t\tpr.innerHTML = templates.progress_text(task.start_date, task.end_date, task);\n\n\t\tif(cfg.rtl){\n\t\t\tpr.style.position = \"absolute\";\n\t\t\tpr.style.right = \"0px\";\n\t\t}\n\n\t\tvar wrapper = document.createElement(\"div\");\n\t\twrapper.className = \"gantt_task_progress_wrapper\";\n\t\twrapper.appendChild(pr);\n\t\telement.appendChild(wrapper);\n\n\t\tif (gantt.config.drag_progress && !gantt.isReadonly(task)) {\n\t\t\tvar drag = document.createElement(\"div\");\n\n\t\t\tvar markerPos = width;\n\t\t\tif(cfg.rtl){\n\t\t\t\tmarkerPos = maxWidth - width;\n\t\t\t}\n\n\t\t\tdrag.style.left = markerPos + 'px';\n\t\t\tdrag.className = \"gantt_task_progress_drag\";\n\t\t\tpr.appendChild(drag);\n\t\t\telement.appendChild(drag);\n\t\t}\n\t}\n\n\tfunction _get_conditions(leftside) {\n\t\tif (leftside) {\n\t\t\treturn {\n\t\t\t\t$source: [\n\t\t\t\t\tgantt.config.links.start_to_start\n\t\t\t\t],\n\t\t\t\t$target: [\n\t\t\t\t\tgantt.config.links.start_to_start,\n\t\t\t\t\tgantt.config.links.finish_to_start\n\t\t\t\t]\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\t$source: [\n\t\t\t\t\tgantt.config.links.finish_to_start,\n\t\t\t\t\tgantt.config.links.finish_to_finish\n\t\t\t\t],\n\t\t\t\t$target: [\n\t\t\t\t\tgantt.config.links.finish_to_finish\n\t\t\t\t]\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction _combine_item_class(basic, template, itemId, view) {\n\t\tvar cfg = view.$getConfig();\n\t\tvar css = [basic];\n\t\tif (template)\n\t\t\tcss.push(template);\n\n\t\tvar state = gantt.getState();\n\n\t\tvar task = gantt.getTask(itemId);\n\n\t\tif (gantt.getTaskType(task.type) == cfg.types.milestone) {\n\t\t\tcss.push(\"gantt_milestone\");\n\t\t}else if (gantt.getTaskType(task.type) == cfg.types.project) {\n\t\t\tcss.push(\"gantt_project\");\n\t\t}\n\n\t\tcss.push(\"gantt_bar_\" + gantt.getTaskType(task.type));\n\n\n\t\tif (gantt.isSummaryTask(task))\n\t\t\tcss.push(\"gantt_dependent_task\");\n\n\t\tif (gantt.isSplitTask(task) && ((cfg.open_split_tasks && !task.$open) || !cfg.open_split_tasks)) {\n\t\t\tcss.push(\"gantt_split_parent\");\n\t\t}\n\n\t\tif (cfg.select_task && gantt.isSelectedTask(itemId)) {\n\t\t\tcss.push(\"gantt_selected\");\n\t\t}\n\n\t\tif (itemId == state.drag_id) {\n\t\t\tcss.push(\"gantt_drag_\" + state.drag_mode);\n\t\t\tif (state.touch_drag) {\n\t\t\t\tcss.push(\"gantt_touch_\" + state.drag_mode);\n\t\t\t}\n\t\t}\n\n\t\tif (state.link_source_id == itemId)\n\t\t\tcss.push(\"gantt_link_source\");\n\n\t\tif (state.link_target_id == itemId)\n\t\t\tcss.push(\"gantt_link_target\");\n\n\n\t\tif (cfg.highlight_critical_path && gantt.isCriticalTask) {\n\t\t\tif (gantt.isCriticalTask(task))\n\t\t\t\tcss.push(\"gantt_critical_task\");\n\t\t}\n\n\t\tif (state.link_landing_area &&\n\t\t\t(state.link_target_id && state.link_source_id) &&\n\t\t\t(state.link_target_id != state.link_source_id)) {\n\n\t\t\tvar from_id = state.link_source_id;\n\t\t\tvar from_start = state.link_from_start;\n\t\t\tvar to_start = state.link_to_start;\n\n\t\t\tvar allowDrag = gantt.isLinkAllowed(from_id, itemId, from_start, to_start);\n\n\t\t\tvar dragClass = \"\";\n\t\t\tif (allowDrag) {\n\t\t\t\tif (to_start)\n\t\t\t\t\tdragClass = \"link_start_allow\";\n\t\t\t\telse\n\t\t\t\t\tdragClass = \"link_finish_allow\";\n\t\t\t} else {\n\t\t\t\tif (to_start)\n\t\t\t\t\tdragClass = \"link_start_deny\";\n\t\t\t\telse\n\t\t\t\t\tdragClass = \"link_finish_deny\";\n\t\t\t}\n\t\t\tcss.push(dragClass);\n\t\t}\n\t\treturn css.join(\" \");\n\t}\n\n\tfunction _render_pair(parent, css, task, content, config) {\n\t\tvar state = gantt.getState();\n\t\tvar className, element;\n\t\tif (+task.start_date >= +state.min_date) {\n\t\t\tclassName = [css, config.rtl ? \"task_right\" : \"task_left\", \"task_start_date\"];\n\t\t\telement = content(className.join(\" \"));\n\t\t\telement.setAttribute(\"data-bind-property\", \"start_date\");\n\t\t\tparent.appendChild(element);\n\t\t}\n\n\t\tif (+task.end_date <= +state.max_date){\n\t\t\tclassName = [css, config.rtl ? \"task_left\" : \"task_right\", \"task_end_date\"];\n\t\t\telement = content(className.join(\" \"));\n\t\t\telement.setAttribute(\"data-bind-property\", \"end_date\");\n\t\t\tparent.appendChild(element);\n\t\t}\n\n\t}\n\n\treturn _render_task_element;\n}\n\nmodule.exports = createTaskRenderer;","var utils = require(\"../../../utils/utils\");\nvar Timeline = require(\"./timeline\");\nvar resourceStoreMixin = require(\"../resource_store_mixin\");\nvar __extends = require(\"../../../utils/extends\");\n\nvar ResourceTimeline = (function (_super) {\n\n\tfunction ResourceTimeline(parent, config, factory, gantt) {\n\t\tvar self = _super.apply(this, arguments) || this;\n\t\tself.$config.bindLinks = null;\n\t\treturn self;\n\t}\n\n\t__extends(ResourceTimeline, _super);\n\n\tutils.mixin(ResourceTimeline.prototype, {\n\t\tinit: function(){\n\t\t\tif(this.$config.bind === undefined){\n\t\t\t\tthis.$config.bind = this.$getConfig().resource_store;\n\t\t\t}\n\t\t\t_super.prototype.init.apply(this, arguments);\n\t\t},\n\t\t_createLayerConfig: function() {\n\t\t\tvar self = this;\n\t\t\tvar taskFilter = function() {\n\t\t\t\treturn self.isVisible();\n\t\t\t};\n\n\t\t\tvar taskLayers = [\n\t\t\t\t{\n\t\t\t\t\trenderer: this.$gantt.$ui.layers.resourceRow(),\n\t\t\t\t\tcontainer: this.$task_bars,\n\t\t\t\t\tfilter: [taskFilter]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\trenderer: this.$gantt.$ui.layers.taskBg(),\n\t\t\t\t\tcontainer: this.$task_bg,\n\t\t\t\t\tfilter: [taskFilter]\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tvar linkLayers = [];\n\n\t\t\treturn {\n\t\t\t\ttasks: taskLayers,\n\t\t\t\tlinks: linkLayers\n\t\t\t};\n\t\t}\n\n\t}, true);\n\n\tutils.mixin(ResourceTimeline.prototype, resourceStoreMixin(ResourceTimeline), true);\n\n\treturn ResourceTimeline;\n})(Timeline);\n\n\nmodule.exports = ResourceTimeline;\n\n\n","function createMixin(){\n\tvar topCache = {};\n\treturn {\n\t\t_resetTopPositionHeight: function(){\n\t\t\ttopCache = {};\n\t\t},\n\n\t\t/**\n\t\t * Get top coordinate by row index (order)\n\t\t * @param {number} index\n\t\t */\n\t\tgetRowTop: function(index){\n\t\t\treturn index * this.$getConfig().row_height;\n\t\t},\n\n\t\t/**\n\t\t * Get top coordinate by item id\n\t\t * @param {*} task_id\n\t\t */\n\t\tgetItemTop: function (taskId) {\n\t\t\tif(this.$config.rowStore){\n\t\t\t\tif(topCache[taskId] !== undefined){\n\t\t\t\t\treturn topCache[taskId];\n\t\t\t\t}\n\t\t\t\tvar store = this.$config.rowStore;\n\t\t\t\tif(!store) return 0;\n\n\t\t\t\tvar itemIndex = store.getIndexById(taskId);\n\n\t\t\t\tif (itemIndex === -1 && store.getParent && store.exists(taskId)) {\n\t\t\t\t\tvar parentId = store.getParent(taskId);\n\t\t\t\t\tif (store.exists(parentId)) {\n\t\t\t\t\t\t// if task is not found in list - maybe it's parent is a split task and we should use parents index instead\n\t\t\t\t\t\tvar parent = store.getItem(parentId);\n\t\t\t\t\t\tif (this.$gantt.isSplitTask(parent)) {\n\t\t\t\t\t\t\treturn this.getRowTop(store.getIndexById(parent.id));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttopCache[taskId] = this.getRowTop(itemIndex);\n\t\t\t\treturn topCache[taskId];\n\t\t\t}else{\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t}\n\t};\n}\n\nmodule.exports = createMixin;","var utils = require(\"../../../utils/utils\");\n\nfunction ScaleHelper(gantt){\n\tvar dateHelper = gantt.date;\n\tvar services = gantt.$services;\n\n\treturn {\n\t\tgetSum: function (sizes, from, to) {\n\t\t\tif (to === undefined)\n\t\t\t\tto = sizes.length - 1;\n\t\t\tif (from === undefined)\n\t\t\t\tfrom = 0;\n\n\t\t\tvar summ = 0;\n\t\t\tfor (var i = from; i <= to; i++)\n\t\t\t\tsumm += sizes[i];\n\n\t\t\treturn summ;\n\t\t},\n\t\tsetSumWidth: function (sum_width, scale, from, to) {\n\t\t\tvar parts = scale.width;\n\n\t\t\tif (to === undefined)\n\t\t\t\tto = parts.length - 1;\n\t\t\tif (from === undefined)\n\t\t\t\tfrom = 0;\n\t\t\tvar length = to - from + 1;\n\n\t\t\tif (from > parts.length - 1 || length <= 0 || to > parts.length - 1)\n\t\t\t\treturn;\n\n\t\t\tvar oldWidth = this.getSum(parts, from, to);\n\n\t\t\tvar diff = sum_width - oldWidth;\n\n\t\t\tthis.adjustSize(diff, parts, from, to);\n\t\t\tthis.adjustSize(-diff, parts, to + 1);\n\n\t\t\tscale.full_width = this.getSum(parts);\n\t\t},\n\t\tsplitSize: function (width, count) {\n\t\t\tvar arr = [];\n\t\t\tfor (var i = 0; i < count; i++) arr[i] = 0;\n\n\t\t\tthis.adjustSize(width, arr);\n\t\t\treturn arr;\n\n\t\t},\n\t\tadjustSize: function (width, parts, from, to) {\n\t\t\tif (!from)\n\t\t\t\tfrom = 0;\n\t\t\tif (to === undefined)\n\t\t\t\tto = parts.length - 1;\n\n\t\t\tvar length = to - from + 1;\n\n\t\t\tvar full = this.getSum(parts, from, to);\n\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tvar share = Math.floor(width * (full ? (parts[i] / full) : (1 / length)));\n\n\t\t\t\tfull -= parts[i];\n\t\t\t\twidth -= share;\n\t\t\t\tlength--;\n\n\t\t\t\tparts[i] += share;\n\t\t\t}\n\t\t\tparts[parts.length - 1] += width;\n\t\t},\n\t\tsortScales: function (scales) {\n\t\t\tfunction cellSize(unit, step) {\n\t\t\t\tvar d = new Date(1970, 0, 1);\n\t\t\t\treturn dateHelper.add(d, step, unit) - d;\n\t\t\t}\n\n\t\t\tscales.sort(function (a, b) {\n\t\t\t\tif (cellSize(a.unit, a.step) < cellSize(b.unit, b.step)) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else if (cellSize(a.unit, a.step) > cellSize(b.unit, b.step)) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (var i = 0; i < scales.length; i++) {\n\t\t\t\tscales[i].index = i;\n\t\t\t}\n\t\t},\n\t\t_isLegacyMode: function(config){\n\t\t\tvar scaleConfig = config || services.config();\n\t\t\treturn scaleConfig.scale_unit || scaleConfig.date_scale || scaleConfig.subscales;\n\t\t},\n\t\t_prepareScaleObject: function(scale){\n\t\t\tvar format = scale.format;\n\t\t\tif(!format){\n\t\t\t\tformat = scale.template || scale.date || \"%d %M\";\n\t\t\t}\n\n\t\t\tif(typeof format === \"string\"){\n\t\t\t\tformat = gantt.date.date_to_str(format);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tunit: scale.unit || \"day\",\n\t\t\t\tstep: scale.step || 1,\n\t\t\t\tformat: format,\n\t\t\t\tcss: scale.css\n\t\t\t};\n\t\t},\n\t\tprimaryScale: function(config) {\n\t\t\tvar templates = services.getService(\"templateLoader\");\n\t\t\tvar legacyMode = this._isLegacyMode(config);\n\n\t\t\tvar scaleConfig = config || services.config();\n\n\t\t\tvar result;\n\t\t\tif(legacyMode){\n\t\t\t\ttemplates.initTemplate(\"date_scale\", undefined, undefined, scaleConfig, services.templates());\n\t\t\t\tresult = {\n\t\t\t\t\tunit: services.config().scale_unit,\n\t\t\t\t\tstep: services.config().step,\n\t\t\t\t\ttemplate: services.templates().date_scale,\n\t\t\t\t\tdate: services.config().date_scale,\n\t\t\t\t\tcss: services.templates().scale_cell_class\n\t\t\t\t};\n\t\t\t}else{\n\t\t\t\tvar primaryScale = scaleConfig.scales[0];\n\t\t\t\tresult = {\n\t\t\t\t\tunit: primaryScale.unit,\n\t\t\t\t\tstep: primaryScale.step,\n\t\t\t\t\ttemplate: primaryScale.template,\n\t\t\t\t\tformat: primaryScale.format,\n\t\t\t\t\tdate: primaryScale.date,\n\t\t\t\t\tcss: primaryScale.css || services.templates().scale_cell_class\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn this._prepareScaleObject(result);\n\t\t},\n\t\tgetSubScales: function(config) {\n\t\t\tvar legacyMode = this._isLegacyMode(config);\n\t\t\tvar scaleConfig = config || services.config();\n\t\t\tvar scales;\n\t\t\tif(legacyMode){\n\t\t\t\tscales = scaleConfig.subscales || [];\n\t\t\t}else{\n\t\t\t\tscales = scaleConfig.scales.slice(1);\n\t\t\t}\n\t\t\t\n\t\t\treturn scales.map(function(scale){\n\t\t\t\treturn this._prepareScaleObject(scale);\n\t\t\t}.bind(this));\n\t\t},\n\n\t\tprepareConfigs: function (scales, min_coll_width, container_width, scale_height, minDate, maxDate, rtl) {\n\t\t\tvar heights = this.splitSize(scale_height, scales.length);\n\t\t\tvar full_width = container_width;\n\n\t\t\tvar configs = [];\n\t\t\tfor (var i = scales.length - 1; i >= 0; i--) {\n\t\t\t\tvar main_scale = (i == scales.length - 1);\n\t\t\t\tvar cfg = this.initScaleConfig(scales[i], minDate, maxDate);\n\t\t\t\tif (main_scale) {\n\t\t\t\t\tthis.processIgnores(cfg);\n\t\t\t\t}\n\n\t\t\t\tthis.initColSizes(cfg, min_coll_width, full_width, heights[i]);\n\t\t\t\tthis.limitVisibleRange(cfg);\n\n\t\t\t\tif (main_scale) {\n\t\t\t\t\tfull_width = cfg.full_width;\n\t\t\t\t}\n\n\t\t\t\tconfigs.unshift(cfg);\n\t\t\t}\n\n\n\t\t\tfor (var i = 0; i < configs.length - 1; i++) {\n\t\t\t\tthis.alineScaleColumns(configs[configs.length - 1], configs[i]);\n\t\t\t}\n\t\t\tfor (var i = 0; i < configs.length; i++) {\n\n\t\t\t\tif(rtl){\n\t\t\t\t\tthis.reverseScale(configs[i]);\n\t\t\t\t}\n\t\t\t\tthis.setPosSettings(configs[i]);\n\t\t\t}\n\t\t\treturn configs;\n\n\t\t},\n\n\t\treverseScale: function(scale){\n\t\t\tscale.width = scale.width.reverse();\n\t\t\tscale.trace_x = scale.trace_x.reverse();\n\n\t\t\tvar indexes = scale.trace_indexes;\n\t\t\tscale.trace_indexes = {};\n\t\t\tscale.trace_index_transition = {};\n\t\t\tscale.rtl = true;\n\t\t\tfor(var i = 0; i < scale.trace_x.length; i++){\n\t\t\t\tscale.trace_indexes[scale.trace_x[i].valueOf()] = i;\n\t\t\t\tscale.trace_index_transition[indexes[scale.trace_x[i].valueOf()]] = i;\n\t\t\t}\n\t\t\treturn scale;\n\t\t},\n\n\t\tsetPosSettings: function (config) {\n\t\t\tfor (var i = 0, len = config.trace_x.length; i < len; i++) {\n\t\t\t\tconfig.left.push((config.width[i - 1] || 0) + (config.left[i - 1] || 0));\n\t\t\t}\n\t\t},\n\n\t\t_ignore_time_config: function (date, scale) {\n\n\t\t\tif (services.config().skip_off_time) {\n\t\t\t\tvar skip = true;\n\t\t\t\tvar probe = date;\n\n\t\t\t\t// check dates in case custom scale unit, e.g. {unit: \"month\", step: 3}\n\t\t\t\tfor (var i = 0; i < scale.step; i++) {\n\t\t\t\t\tif (i) {\n\t\t\t\t\t\tprobe = dateHelper.add(date, i, scale.unit);\n\t\t\t\t\t}\n\n\t\t\t\t\tskip = skip && !this.isWorkTime(probe, scale.unit);\n\t\t\t\t}\n\n\t\t\t\treturn skip;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t//defined in an extension\n\t\tprocessIgnores: function (config) {\n\t\t\tconfig.ignore_x = {};\n\t\t\tconfig.display_count = config.count;\n\t\t},\n\t\tinitColSizes: function (config, min_col_width, full_width, line_height) {\n\t\t\tvar cont_width = full_width;\n\n\t\t\tconfig.height = line_height;\n\n\t\t\tvar column_count = config.display_count === undefined ? config.count : config.display_count;\n\n\t\t\tif (!column_count)\n\t\t\t\tcolumn_count = 1;\n\n\t\t\tconfig.col_width = Math.floor(cont_width / column_count);\n\n\t\t\tif (min_col_width) {\n\t\t\t\tif (config.col_width < min_col_width) {\n\t\t\t\t\tconfig.col_width = min_col_width;\n\t\t\t\t\tcont_width = config.col_width * column_count;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconfig.width = [];\n\t\t\tvar ignores = config.ignore_x || {};\n\t\t\tfor (var i = 0; i < config.trace_x.length; i++) {\n\t\t\t\tif (ignores[config.trace_x[i].valueOf()] || (config.display_count == config.count)) {\n\t\t\t\t\tconfig.width[i] = 0;\n\t\t\t\t} else {\n\t\t\t\t\t// width of month columns should be proportional month duration\n\t\t\t\t\tvar width = 1;\n\t\t\t\t\tif (config.unit == \"month\") {\n\t\t\t\t\t\tvar days = Math.round((dateHelper.add(config.trace_x[i], config.step, config.unit) - config.trace_x[i]) / (1000 * 60 * 60 * 24));\n\t\t\t\t\t\twidth = days;\n\t\t\t\t\t}\n\t\t\t\t\tconfig.width[i] = width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.adjustSize(cont_width - this.getSum(config.width)/* 1 width per column from the code above */, config.width);\n\t\t\tconfig.full_width = this.getSum(config.width);\n\t\t},\n\t\tinitScaleConfig: function (config, min_date, max_date) {\n\t\t\tvar cfg = utils.mixin({\n\t\t\t\tcount: 0,\n\t\t\t\tcol_width: 0,\n\t\t\t\tfull_width: 0,\n\t\t\t\theight: 0,\n\t\t\t\twidth: [],\n\t\t\t\tleft: [],\n\t\t\t\ttrace_x: [],\n\t\t\t\ttrace_indexes: {},\n\t\t\t\tmin_date: new Date(min_date),\n\t\t\t\tmax_date: new Date(max_date)\n\t\t\t}, config);\n\n\t\t\tthis.eachColumn(config.unit, config.step, min_date, max_date, function (date) {\n\t\t\t\tcfg.count++;\n\t\t\t\tcfg.trace_x.push(new Date(date));\n\t\t\t\tcfg.trace_indexes[date.valueOf()] = cfg.trace_x.length - 1;\n\t\t\t});\n\n\t\t\tcfg.trace_x_ascending = cfg.trace_x.slice();\n\t\t\treturn cfg;\n\t\t},\n\t\titerateScales: function (lower_scale, upper_scale, from, to, callback) {\n\t\t\tvar upper_dates = upper_scale.trace_x;\n\t\t\tvar lower_dates = lower_scale.trace_x;\n\n\t\t\tvar prev = from || 0;\n\t\t\tvar end = to || (lower_dates.length - 1);\n\t\t\tvar prevUpper = 0;\n\n\n\t\t\tfor (var up = 1; up < upper_dates.length; up++) {\n\t\t\t\tvar target_index = (lower_scale.trace_indexes[+upper_dates[up]]);\n\t\t\t\tif (target_index !== undefined && target_index <= end) {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback.apply(this, [prevUpper, up, prev, target_index]);\n\t\t\t\t\t}\n\t\t\t\t\tprev = target_index;\n\t\t\t\t\tprevUpper = up;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\talineScaleColumns: function (lower_scale, upper_scale, from, to) {\n\t\t\tthis.iterateScales(lower_scale, upper_scale, from, to, function (upper_start, upper_end, lower_start, lower_end) {\n\t\t\t\tvar targetWidth = this.getSum(lower_scale.width, lower_start, lower_end - 1);\n\t\t\t\tvar actualWidth = this.getSum(upper_scale.width, upper_start, upper_end - 1);\n\t\t\t\tif (actualWidth != targetWidth) {\n\t\t\t\t\tthis.setSumWidth(targetWidth, upper_scale, upper_start, upper_end - 1);\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\n\t\teachColumn: function (unit, step, min_date, max_date, callback) {\n\t\t\tvar start = new Date(min_date),\n\t\t\t\tend = new Date(max_date);\n\t\t\tif (dateHelper[unit + \"_start\"]) {\n\t\t\t\tstart = dateHelper[unit + \"_start\"](start);\n\t\t\t}\n\n\t\t\tvar curr = new Date(start);\n\t\t\tif (+curr >= +end) {\n\t\t\t\tend = dateHelper.add(curr, step, unit);\n\t\t\t}\n\t\t\twhile (+curr < +end) {\n\t\t\t\tcallback.call(this, new Date(curr));\n\t\t\t\tvar tzOffset = curr.getTimezoneOffset();\n\t\t\t\tcurr = dateHelper.add(curr, step, unit);\n\t\t\t\tcurr = gantt._correct_dst_change(curr, tzOffset, step, unit);\n\t\t\t\tif (dateHelper[unit + '_start'])\n\t\t\t\t\tcurr = dateHelper[unit + \"_start\"](curr);\n\t\t\t}\n\t\t},\n\t\tlimitVisibleRange: function (cfg) {\n\t\t\tvar dates = cfg.trace_x;\n\n\t\t\tvar left = 0, right = cfg.width.length - 1;\n\t\t\tvar diff = 0;\n\t\t\tif (+dates[0] < +cfg.min_date && left != right) {\n\t\t\t\tvar width = Math.floor(cfg.width[0] * ((dates[1] - cfg.min_date) / (dates[1] - dates[0])));\n\t\t\t\tdiff += cfg.width[0] - width;\n\t\t\t\tcfg.width[0] = width;\n\n\t\t\t\tdates[0] = new Date(cfg.min_date);\n\t\t\t}\n\n\t\t\tvar last = dates.length - 1;\n\t\t\tvar lastDate = dates[last];\n\t\t\tvar outDate = dateHelper.add(lastDate, cfg.step, cfg.unit);\n\t\t\tif (+outDate > +cfg.max_date && last > 0) {\n\t\t\t\tvar width = cfg.width[last] - Math.floor(cfg.width[last] * ((outDate - cfg.max_date) / (outDate - lastDate)));\n\t\t\t\tdiff += cfg.width[last] - width;\n\t\t\t\tcfg.width[last] = width;\n\t\t\t}\n\n\t\t\tif (diff) {\n\t\t\t\tvar full = this.getSum(cfg.width);\n\t\t\t\tvar shared = 0;\n\t\t\t\tfor (var i = 0; i < cfg.width.length; i++) {\n\t\t\t\t\tvar share = Math.floor(diff * (cfg.width[i] / full));\n\t\t\t\t\tcfg.width[i] += share;\n\t\t\t\t\tshared += share;\n\t\t\t\t}\n\t\t\t\tthis.adjustSize(diff - shared, cfg.width);\n\t\t\t}\n\n\t\t}\n\t};\n}\n\nmodule.exports = ScaleHelper;\n","\nvar ScaleHelper = require(\"./scales\");\n\nfunction ScaleIgnoreHelper(gantt){\n\tvar helper = new ScaleHelper(gantt);\n\n\thelper.processIgnores = function (config) {\n\t\tvar display_count = config.count;\n\t\tconfig.ignore_x = {};\n\t\tif (gantt.ignore_time || gantt.config.skip_off_time) {\n\t\t\tvar ignore = gantt.ignore_time || function () {\n\t\t\t\treturn false;\n\t\t\t};\n\t\t\tdisplay_count = 0;\n\n\t\t\tfor (var i = 0; i < config.trace_x.length; i++) {\n\n\t\t\t\tif (ignore.call(gantt, config.trace_x[i]) || this._ignore_time_config.call(gantt, config.trace_x[i], config)) {\n\t\t\t\t\tconfig.ignore_x[config.trace_x[i].valueOf()] = true;\n\t\t\t\t\tconfig.ignored_colls = true;\n\t\t\t\t} else {\n\t\t\t\t\tdisplay_count++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\tconfig.display_count = display_count;\n\t};\n\n\treturn helper;\n}\n\nmodule.exports = ScaleIgnoreHelper;","var ScaleHelper = require(\"./scales_ignore\");\nvar eventable = require(\"../../../utils/eventable\");\nvar utils = require(\"../../../utils/utils\");\nvar topPositionMixin = require(\"../row_position_mixin\");\nvar canvasRender = require(\"./tasks_canvas_render\");\n\nvar Timeline = function(parent, config, factory, gantt){\n\tthis.$config = utils.mixin({}, config || {});\n\tthis.$scaleHelper = new ScaleHelper(gantt);\n\tthis.$gantt = gantt;\n\tthis._posFromDateCache = {};\n\tutils.mixin(this, topPositionMixin());\n\teventable(this);\n};\n\nTimeline.prototype = {\n\tinit: function(container){\n\t\tcontainer.innerHTML += \"
\";\n\t\tthis.$task = container.childNodes[0];\n\n\t\tthis.$task.innerHTML = \"
\";\n\t\tthis.$task_scale = this.$task.childNodes[0];\n\n\t\tthis.$task_data = this.$task.childNodes[1];\n\t\tthis.$task_data.innerHTML = \"
\";\n\t\tthis.$task_bg = this.$task_data.childNodes[0];\n\t\tthis.$task_links = this.$task_data.childNodes[1];\n\t\tthis.$task_bars = this.$task_data.childNodes[2];\n\n\t\tthis._tasks = {\n\t\t\tcol_width: 0,\n\t\t\twidth: [], // width of each column\n\t\t\tfull_width: 0, // width of all columns\n\t\t\ttrace_x: [],\n\t\t\trendered: {}\n\t\t};\n\n\t\tvar config = this.$getConfig();\n\t\tvar attr = config[this.$config.bind + \"_attribute\"];\n\t\tvar linksAttr = config[this.$config.bindLinks + \"_attribute\"];\n\t\tif(!attr && this.$config.bind){\n\t\t\tattr = this.$config.bind + \"_id\";\n\t\t}\n\t\tif(!linksAttr && this.$config.bindLinks){\n\t\t\tlinksAttr = this.$config.bindLinks + \"_id\";\n\t\t}\n\t\tthis.$config.item_attribute = attr || null;\n\t\tthis.$config.link_attribute = linksAttr || null;\n\n\t\tvar layers = this._createLayerConfig();\n\t\tif(!this.$config.layers){\n\t\t\tthis.$config.layers = layers.tasks;\n\t\t}\n\t\tif(!this.$config.linkLayers){\n\t\t\tthis.$config.linkLayers = layers.links;\n\t\t}\n\n\t\tthis._attachLayers(this.$gantt);\n\n\t\tthis.callEvent(\"onReady\", []);\n\t\t//this.refresh();\n\t},\n\n\tsetSize: function(width, height){\n\t\tvar config = this.$getConfig();\n\n\t\tif(width*1 === width){\n\t\t\tthis.$config.width = width;\n\t\t}\n\t\tif(height*1 === height){\n\n\t\t\tthis.$config.height = height;\n\t\t\tvar dataHeight = Math.max(this.$config.height - config.scale_height);\n\t\t\tthis.$task_data.style.height = dataHeight + 'px';\n\t\t}\n\n\t\tthis.refresh();\n\t\tthis.$task_bg.style.backgroundImage = \"\";\n\n\t\tif(config.smart_rendering && this.$config.rowStore){\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tthis.$task_bg.style.height = config.row_height * store.countVisible() +\"px\";\n\t\t}else{\n\t\t\tthis.$task_bg.style.height = \"\";\n\t\t}\n\n\t\tvar scale = this._tasks;\n\t\t//timeline area layers\n\t\tvar data_els = this.$task_data.childNodes;\n\t\tfor(var i= 0, len = data_els.length; i < len; i++){\n\t\t\tvar el = data_els[i];\n\t\t\tif(el.hasAttribute(\"data-layer\") && el.style)\n\t\t\t\tel.style.width = scale.full_width + \"px\";\n\t\t}\n\t},\n\n\tisVisible: function(){\n\t\tif(this.$parent && this.$parent.$config){\n\t\t\treturn !this.$parent.$config.hidden;\n\t\t}else{\n\t\t\treturn this.$task.offsetWidth;\n\t\t}\n\t},\n\n\tgetSize: function(){\n\t\tvar config = this.$getConfig();\n\t\tvar store = this.$config.rowStore;\n\n\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0,\n\t\t\tcontentWidth = this.isVisible() ? this._tasks.full_width : 0;\n\n\t\treturn {\n\t\t\tx: this.isVisible() ? this.$config.width : 0,\n\t\t\ty: this.isVisible() ? this.$config.height : 0,\n\t\t\tcontentX: this.isVisible() ? contentWidth : 0,\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\n\t\t\tscrollHeight: this.isVisible() ? contentHeight : 0,\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\n\t\t};\n\t},\n\n\tscrollTo: function(left, top){\n\t\tif(!this.isVisible())\n\t\t\treturn;\n\n\t\tvar scrolled = false;\n\n\t\tthis.$config.scrollTop = this.$config.scrollTop || 0;\n\t\tthis.$config.scrollLeft = this.$config.scrollLeft || 0;\n\t\tif(top*1 === top){\n\t\t\tthis.$config.scrollTop = top;\n\t\t\tthis.$task_data.scrollTop = this.$config.scrollTop;\n\t\t\tscrolled = true;\n\t\t}\n\t\tif (left*1 === left){\n\t\t\tthis.$task.scrollLeft = left;\n\t\t\tthis.$config.scrollLeft = this.$task.scrollLeft;\n\t\t\tthis._refreshScales();\n\t\t\tscrolled = true;\n\t\t}\n\n\t\tif(scrolled){\n\t\t\tthis.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\n\t\t}\n\t},\n\n\t_refreshScales: function _refreshScales() {\n\t\tif(!this.isVisible())\n\t\t\treturn;\n\n\t\tvar config = this.$getConfig();\n\t\tif (!config.smart_scales) return;\n\n\t\tvar viewPort = this.getViewPort();\n\n\t\tvar scales = this._scales;\n\t\tthis.$task_scale.innerHTML = this._getScaleChunkHtml(scales, viewPort.x, viewPort.x_end);\n\t},\n\n\tgetViewPort: function(){\n\t\tvar scrollLeft = this.$config.scrollLeft || 0;\n\t\tvar scrollTop = this.$config.scrollTop || 0;\n\t\tvar height = this.$config.height || 0;\n\t\tvar width = this.$config.width || 0;\n\t\treturn {\n\t\t\ty: scrollTop,\n\t\t\ty_end: scrollTop + height,\n\t\t\tx: scrollLeft,\n\t\t\tx_end: scrollLeft + width,\n\t\t\theight: height,\n\t\t\twidth: width\n\t\t};\n\t},\n\n\t_createLayerConfig: function(){\n\t\tvar self = this;\n\t\tvar taskFilter = function(){\n\t\t\treturn self.isVisible();\n\t\t};\n\n\t\tvar taskLayers = [\n\t\t\t{\n\t\t\t\texpose: true,\n\t\t\t\trenderer: this.$gantt.$ui.layers.taskBar(),\n\t\t\t\tcontainer: this.$task_bars,\n\t\t\t\tfilter: [taskFilter]\n\t\t\t},\n\t\t\t{\n\t\t\t\trenderer: this.$gantt.$ui.layers.taskSplitBar(),\n\t\t\t\tfilter: [taskFilter],\n\t\t\t\tcontainer: this.$task_bars,\n\t\t\t\tappend: true\n\t\t\t},\n\t\t\t{\n\t\t\t\trenderer: this.$gantt.$ui.layers.taskBg(),\n\t\t\t\tcontainer: this.$task_bg,\n\t\t\t\tfilter: [\n\t\t\t\t\t//function(){\n\t\t\t\t\t//\treturn !self.$getConfig().static_background;\n\t\t\t\t\t//},\n\t\t\t\t\ttaskFilter\n\t\t\t\t]\n\t\t\t}\n\t\t];\n\n\t\tvar linkLayers = [\n\t\t\t{\n\t\t\t\texpose: true,\n\t\t\t\trenderer: this.$gantt.$ui.layers.link(),\n\t\t\t\tcontainer: this.$task_links,\n\t\t\t\tfilter: [taskFilter]\n\t\t\t}\n\t\t];\n\n\t\treturn {\n\t\t\ttasks: taskLayers,\n\t\t\tlinks: linkLayers\n\t\t};\n\n\t},\n\n\t_attachLayers: function(gantt){\n\t\tthis._taskLayers = [];\n\t\tthis._linkLayers = [];\n\n\t\tvar self = this;\n\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\n\n\t\tif(this.$config.bind){\n\n\t\t\tthis._bindStore();\n\t\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\n\n\t\t\tif(!taskRenderer){\n\t\t\t\ttaskRenderer = layers.createDataRender({\n\t\t\t\t\tname: this.$config.bind,\n\t\t\t\t\tdefaultContainer: function(){ return self.$task_data;}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttaskRenderer.container = function(){ return self.$task_data;};\n\n\t\t\tvar taskLayers = this.$config.layers;\n\t\t\tfor(var i = 0; taskLayers && i < taskLayers.length; i++){\n\t\t\t\tvar layer = taskLayers[i];\n\n\t\t\t\tif(typeof layer == \"string\"){\n\t\t\t\t\tlayer = this.$gantt.$ui.layers[layer]();\n\t\t\t\t}\n\n\t\t\t\tif(typeof layer == \"function\" || (layer && layer.render && layer.update)){\n\t\t\t\t\tlayer = {renderer: layer};\n\t\t\t\t}\n\n\t\t\t\tlayer.view = this;\n\n\t\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\n\t\t\t\tthis._taskLayers.push(bar_layer);\n\t\t\t\tif(layer.expose){\n\t\t\t\t\tthis._taskRenderer = taskRenderer.getLayer(bar_layer);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._initStaticBackgroundRender();\n\t\t}\n\n\t\tif(this.$config.bindLinks){\n\t\t\tself.$config.linkStore = self.$gantt.getDatastore(self.$config.bindLinks);\n\n\t\t\tvar linkRenderer = layers.getDataRender(this.$config.bindLinks);\n\n\t\t\tif(!linkRenderer){\n\t\t\t\tlinkRenderer = layers.createDataRender({\n\t\t\t\t\tname: this.$config.bindLinks,\n\t\t\t\t\tdefaultContainer: function(){ return self.$task_data;}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar linkLayers = this.$config.linkLayers;\n\t\t\tfor(var i = 0; linkLayers && i < linkLayers.length; i++){\n\n\t\t\t\tif(typeof layer == \"string\"){\n\t\t\t\t\tlayer = this.$gantt.$ui.layers[layer]();\n\t\t\t\t}\n\n\t\t\t\tvar layer = linkLayers[i];\n\t\t\t\tlayer.view = this;\n\t\t\t//\tlayer.getViewPort = getViewPort;\n\t\t\t//\tsubscribeSmartRender(layer);\n\t\t\t\tvar linkLayer = linkRenderer.addLayer(layer);\n\t\t\t\tthis._taskLayers.push(linkLayer);\n\t\t\t\tif(linkLayers[i].expose){\n\t\t\t\t\tthis._linkRenderer = linkRenderer.getLayer(linkLayer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_initStaticBackgroundRender: function(){\n\t\tvar self = this;\n\t\tvar staticRender = canvasRender.create();\n\t\tvar store = self.$config.rowStore;\n\t\tif(!store) return;\n\n\t\tthis._staticBgHandler = store.attachEvent(\"onStoreUpdated\", function(id, item, mode){\n\t\t\tif(id !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!self.isVisible())\n\t\t\t\treturn;\n\t\t\tvar config = self.$getConfig();\n\t\t\tif(config.static_background) {\n\t\t\t\tvar store = self.$gantt.getDatastore(self.$config.bind);\n\t\t\t\tvar staticBgContainer = self.$task_bg_static;\n\t\t\t\tif(!staticBgContainer){\n\t\t\t\t\tstaticBgContainer = document.createElement(\"div\");\n\t\t\t\t\tstaticBgContainer.className = \"gantt_task_bg\";\n\t\t\t\t\tself.$task_bg_static = staticBgContainer;\n\t\t\t\t\tif(self.$task_bg.nextSibling){\n\t\t\t\t\t\tself.$task_data.insertBefore(staticBgContainer, self.$task_bg.nextSibling);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tself.$task_data.appendChild(staticBgContainer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (store) {\n\t\t\t\t\tstaticRender.render(staticBgContainer, config, self.getScale(), config.row_height * store.countVisible());\n\t\t\t\t}\n\t\t\t}else if(config.static_background){\n\t\t\t\tif(self.$task_bg_static && self.$task_bg_static.parentNode){\n\t\t\t\t\tself.$task_bg_static.parentNode.removeChild(self.$task_bg_static);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.attachEvent(\"onDestroy\", function () {\n\t\t\tstaticRender.destroy();\n\t\t});\n\t\tthis._initStaticBackgroundRender = function(){};//init once\n\t},\n\n\t_clearLayers: function(gantt){\n\t\tvar layers = this.$gantt.$services.getService(\"layers\");\n\t\tvar taskRenderer = layers.getDataRender(this.$config.bind);\n\t\tvar linkRenderer = layers.getDataRender(this.$config.bindLinks);\n\n\t\tif (this._taskLayers) {\n\t\t\tfor(var i = 0; i < this._taskLayers.length; i++){\n\t\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\n\t\t\t}\n\t\t}\n\t\tif (this._linkLayers) {\n\t\t\tfor(var i = 0; i < this._linkLayers.length; i++){\n\t\t\t\tlinkRenderer.removeLayer(this._linkLayers[i]);\n\t\t\t}\n\t\t}\n\n\t\tthis._linkLayers = [];\n\t\tthis._taskLayers = [];\n\t},\n\n\t_render_tasks_scales: function _render_tasks_scales() {\n\t\tvar config = this.$getConfig();\n\n\t\tvar scales_html = \"\",\n\t\t\touter_width = 0,\n\t\t\tscale_height = 0;\n\n\t\tvar state = this.$gantt.getState();\n\n\t\tif (this.isVisible()) {\n\t\t\tvar helpers = this.$scaleHelper;\n\t\t\tvar scales = this._getScales();\n\t\t\tscale_height = config.scale_height;\n\n\t\t\tvar availWidth = this.$config.width;\n\t\t\tif(config.autosize == \"x\" || config.autosize == \"xy\"){\n\t\t\t\tavailWidth = Math.max(config.autosize_min_width, 0);\n\t\t\t}\n\n\t\t\tvar cfgs = helpers.prepareConfigs(scales, config.min_column_width, availWidth, scale_height - 1, state.min_date, state.max_date, config.rtl);\n\t\t\tvar cfg = this._tasks = cfgs[cfgs.length - 1];\n\t\t\tthis._scales = cfgs;\n\t\t\tthis._posFromDateCache = {};\n\n\t\t\tscales_html = this._getScaleChunkHtml(cfgs, 0, this.$config.width);\n\n\t\t\touter_width = cfg.full_width + \"px\";//cfg.full_width + (this._scroll_sizes().y ? scrollSizes.scroll_size : 0) + \"px\";\n\t\t\tscale_height += \"px\";\n\t\t}\n\n\t\tthis.$task_scale.style.height = scale_height;\n\n\t\tthis.$task_data.style.width =\n\t\t\tthis.$task_scale.style.width = outer_width;\n\n\t\tthis.$task_scale.innerHTML = scales_html;\n\n\t},\n\n\t_getScaleChunkHtml: function _get_scale_chunk_html (scales, fromPos, toPos) {\n\t\tvar templates = this.$gantt.$services.templates();\n\t\tvar html = [];\n\n\t\tvar css = templates.scale_row_class;\n\t\tfor (var i = 0; i < scales.length; i++) {\n\t\t\tvar cssClass = \"gantt_scale_line\";\n\t\t\tvar tplClass = css(scales[i]);\n\t\t\tif (tplClass) {\n\t\t\t\tcssClass += \" \" + tplClass;\n\t\t\t}\n\n\t\t\thtml.push(\"
\" + this._prepareScaleHtml(scales[i], fromPos, toPos) + \"
\");\n\t\t}\n\n\t\treturn html.join(\"\");\n\t},\n\t_prepareScaleHtml: function _prepare_scale_html(config, fromPos, toPos) {\n\t\tvar globalConfig = this.$getConfig();\n\t\tvar globalTemplates = this.$gantt.$services.templates();\n\n\t\tvar cells = [];\n\t\tvar date = null, css = null;\n\n\t\tvar content = config.format || config.template || config.date;\n\n\t\tif(typeof content === \"string\"){\n\t\t\tcontent = this.$gantt.date.date_to_str(content);\n\t\t}\n\n\t\tvar startIndex = 0,\n\t\t\tendIndex = config.count;\n\n\t\tif (globalConfig.smart_scales && (!isNaN(fromPos) && !isNaN(toPos))) {\n\t\t\tstartIndex = _findBinary(config.left, fromPos);\n\t\t\tendIndex = _findBinary(config.left, toPos) + 1;\n\t\t}\n\n\t\tcss = config.css || function () {\n\t\t\t};\n\t\tif (!config.css && globalConfig.inherit_scale_class) {\n\t\t\tcss = globalTemplates.scale_cell_class;\n\t\t}\n\n\t\tfor (var i = startIndex; i < endIndex; i++) {\n\t\t\tif (!config.trace_x[i]) break;\n\n\t\t\tdate = new Date(config.trace_x[i]);\n\t\t\tvar value = content.call(this, date),\n\t\t\t\twidth = config.width[i],\n\t\t\t\theight = config.height,\n\t\t\t\tleft = config.left[i],\n\t\t\t\tstyle = \"\",\n\t\t\t\ttemplate = \"\",\n\t\t\t\tcssclass = \"\";\n\n\t\t\tif (width) {\n\t\t\t\tvar position = globalConfig.smart_scales ? (\"position:absolute;left:\" + left + \"px\") : \"\";\n\n\t\t\t\tstyle = \"width:\" + (width) + \"px;height:\" + height + \"px;\" + position;\n\t\t\t\tcssclass = \"gantt_scale_cell\" + (i == config.count - 1 ? \" gantt_last_cell\" : \"\");\n\n\t\t\t\ttemplate = css.call(this, date);\n\t\t\t\tif (template) cssclass += \" \" + template;\n\n\t\t\t\tvar ariaAttr = this.$gantt._waiAria.getTimelineCellAttr(value);\n\t\t\t\tvar cell = \"
\" + value + \"
\";\n\t\t\t\tcells.push(cell);\n\t\t\t} else {\n\t\t\t\t//do not render ignored cells\n\t\t\t}\n\n\t\t}\n\t\treturn cells.join(\"\");\n\t},\n\tdateFromPos: function dateFromPos(x) {\n\t\tvar scale = this._tasks;\n\t\tif (x < 0 || x > scale.full_width || !scale.full_width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar ind = _findBinary(this._tasks.left, x);\n\t\tvar summ = this._tasks.left[ind];\n\n\t\tvar col_width = scale.width[ind] || scale.col_width;\n\t\tvar part = 0;\n\t\tif (col_width) {\n\t\t\tpart = (x - summ) / col_width;\n\t\t\tif(scale.rtl){\n\t\t\t\tpart = 1 - part;\n\t\t\t}\n\n\t\t}\n\n\t\tvar unit = 0;\n\t\tif (part) {\n\t\t\tunit = this._getColumnDuration(scale, scale.trace_x[ind]);\n\t\t}\n\n\t\tvar date = new Date(scale.trace_x[ind].valueOf() + Math.round(part * unit));\n\t\treturn date;\n\t},\n\tposFromDate: function posFromDate(date) {\n\t\tif (!this.isVisible())\n\t\t\treturn 0;\n\n\t\tif(!date){\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar dateValue = String(date.valueOf());\n\n\t\tif(this._posFromDateCache[dateValue] !== undefined){\n\t\t\treturn this._posFromDateCache[dateValue];\n\t\t}\n\t\tvar ind = this.columnIndexByDate(date);\n\t\tthis.$gantt.assert(ind >= 0, \"Invalid day index\");\n\n\t\tvar wholeCells = Math.floor(ind);\n\t\tvar partCell = ind % 1;\n\n\t\tvar pos = this._tasks.left[Math.min(wholeCells, this._tasks.width.length - 1)];\n\t\tif (wholeCells == this._tasks.width.length)\n\t\t\tpos += this._tasks.width[this._tasks.width.length - 1];\n\t\t//for(var i=1; i <= wholeCells; i++)\n\t\t//\tpos += gantt._tasks.width[i-1];\n\n\t\tif (partCell) {\n\t\t\tif (wholeCells < this._tasks.width.length) {\n\t\t\t\tpos += this._tasks.width[wholeCells] * (partCell % 1);\n\t\t\t} else {\n\t\t\t\tpos += 1;\n\t\t\t}\n\n\t\t}\n\n\t\tvar roundPos = Math.round(pos);\n\t\tthis._posFromDateCache[dateValue] = roundPos;\n\t\treturn Math.round(roundPos);\n\t},\n\n\t_getNextVisibleColumn: function (startIndex, columns, ignores) {\n\t\t// iterate columns to the right\n\t\tvar date = +columns[startIndex];\n\t\tvar visibleDateIndex = startIndex;\n\t\twhile (ignores[date]) {\n\t\t\tvisibleDateIndex++;\n\t\t\tdate = +columns[visibleDateIndex];\n\t\t}\n\n\t\treturn visibleDateIndex;\n\t},\n\t_getPrevVisibleColumn: function (startIndex, columns, ignores) {\n\t\t// iterate columns to the left\n\t\tvar date = +columns[startIndex];\n\t\tvar visibleDateIndex = startIndex;\n\t\twhile (ignores[date]) {\n\t\t\tvisibleDateIndex--;\n\t\t\tdate = +columns[visibleDateIndex];\n\t\t}\n\t\treturn visibleDateIndex;\n\t},\n\t_getClosestVisibleColumn: function (startIndex, columns, ignores) {\n\t\tvar visibleDateIndex = this._getNextVisibleColumn(startIndex, columns, ignores);\n\t\tif (!columns[visibleDateIndex]) {\n\t\t\tvisibleDateIndex = this._getPrevVisibleColumn(startIndex, columns, ignores);\n\t\t}\n\t\treturn visibleDateIndex;\n\t},\n\tcolumnIndexByDate: function columnIndexByDate(date) {\n\t\tvar pos = new Date(date).valueOf();\n\t\tvar days = this._tasks.trace_x_ascending,\n\t\t\tignores = this._tasks.ignore_x;\n\n\t\tvar state = this.$gantt.getState();\n\n\t\tif (pos <= state.min_date) {\n\t\t\tif(this._tasks.rtl){\n\t\t\t\treturn days.length;\n\t\t\t}else{\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t}\n\n\t\tif (pos >= state.max_date) {\n\t\t\tif(this._tasks.rtl){\n\t\t\t\treturn 0;\n\t\t\t}else{\n\t\t\t\treturn days.length;\n\t\t\t}\n\t\t}\n\n\t\tvar dateIndex = _findBinary(days, pos);\n\n\t\tvar visibleIndex = this._getClosestVisibleColumn(dateIndex, days, ignores);\n\t\tvar visibleDate = days[visibleIndex];\n\t\tvar transition = this._tasks.trace_index_transition;\n\n\t\tif(!visibleDate){\n\t\t\tif(transition){\n\t\t\t\treturn transition[0];\n\t\t\t}else{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tvar part = ((date - days[visibleIndex]) / this._getColumnDuration(this._tasks, days[visibleIndex]));\n\t\tif(transition){\n\t\t\treturn transition[visibleIndex] + (1 - part);\n\t\t}else{\n\t\t\treturn visibleIndex + part;\n\t\t}\n\t},\n\tgetItemPosition:function (task, start_date, end_date) {\n\t\tvar xLeft, xRight, width;\n\t\tif(this._tasks.rtl){\n\t\t\txRight = this.posFromDate(start_date || task.start_date);\n\t\t\txLeft = this.posFromDate(end_date || task.end_date);\n\t\t}else{\n\t\t\txLeft = this.posFromDate(start_date || task.start_date);\n\t\t\txRight = this.posFromDate(end_date || task.end_date);\n\t\t}\n\t\twidth = Math.max((xRight - xLeft), 0);\n\n\t\tvar y = this.getItemTop(task.id);\n\t\tvar height = this.getItemHeight();\n\t\treturn {\n\t\t\tleft: xLeft,\n\t\t\ttop: y,\n\t\t\theight: height,\n\t\t\twidth: width\n\t\t};\n\t},\n\n\tgetItemHeight: function(){\n\t\tvar config = this.$getConfig();\n\n\t\t// height of the bar item\n\t\tvar height = config.task_height;\n\n\t\tif (height == \"full\") {\n\t\t\tvar offset = config.task_height_offset || 5;\n\t\t\theight = config.row_height - offset;\n\t\t}\n\t\t//item height cannot be bigger than row height\n\t\theight = Math.min(height, config.row_height);\n\t\treturn Math.max(height, 0);\n\t},\n\n\tgetScale: function(){\n\t\treturn this._tasks;\n\t},\n\n\t_getScales: function _get_scales() {\n\t\tvar config = this.$getConfig();\n\t\tvar helpers = this.$scaleHelper;\n\t\tvar scales = [helpers.primaryScale(config)].concat(helpers.getSubScales(config));\n\n\t\thelpers.sortScales(scales);\n\t\treturn scales;\n\t},\n\n\t_getColumnDuration: function _get_coll_duration(scale, date) {\n\t\treturn this.$gantt.date.add(date, scale.step, scale.unit) - date;\n\t},\n\t_bindStore: function () {\n\t\tif (this.$config.bind){\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\n\t\t\tthis.$config.rowStore = rowStore;\n\t\t\tif(rowStore && !rowStore._timelineCacheAttached){\n\t\t\t\tvar self = this;\n\t\t\t\trowStore._timelineCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function(){\n\t\t\t\t\tself._resetTopPositionHeight();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\t_unbindStore: function(){\n\t\tif (this.$config.bind){\n\t\t\tvar rowStore = this.$gantt.getDatastore(this.$config.bind);\n\t\t\tif(rowStore._timelineCacheAttached){\n\t\t\t\trowStore.detachEvent(rowStore._timelineCacheAttached);\n\t\t\t\trowStore._timelineCacheAttached = false;\n\t\t\t}\n\t\t}\n\t},\n\trefresh: function(){\n\t\tthis._bindStore();\n\n\t\tif(this.$config.bindLinks) {\n\t\t\tthis.$config.linkStore = this.$gantt.getDatastore(this.$config.bindLinks);\n\t\t}\n\n\t\tthis._resetTopPositionHeight();\n\t\tthis._initStaticBackgroundRender();\n\t\tthis._render_tasks_scales();\n\t},\n\n\tdestructor: function(){\n\t\tvar gantt = this.$gantt;\n\t\tthis._clearLayers(gantt);\n\t\tthis._unbindStore();\n\t\tthis.$task = null;\n\t\tthis.$task_scale = null;\n\t\tthis.$task_data = null;\n\t\tthis.$task_bg = null;\n\t\tthis.$task_links = null;\n\t\tthis.$task_bars = null;\n\n\t\tthis.$gantt = null;\n\n\t\tif(this.$config.rowStore){\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\n\t\t\tthis.$config.rowStore = null;\n\t\t}\n\t\tif(this.$config.linkStore){\n\t\t\tthis.$config.linkStore = null;\n\t\t}\n\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\n\t}\n};\n\nmodule.exports = Timeline;\n\nfunction _findBinary(array, target) {\n\t// modified binary search, target value not exactly match array elements, looking for closest one\n\n\tvar low = 0, high = array.length - 1, i, item, prev;\n\twhile (low <= high) {\n\n\t\ti = Math.floor((low + high) / 2);\n\t\titem = +array[i];\n\t\tprev = +array[i - 1];\n\t\tif (item < target) {\n\t\t\tlow = i + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (item > target) {\n\t\t\tif (!(!isNaN(prev) && prev < target)) {\n\t\t\t\thigh = i - 1;\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// if target is between 'i' and 'i-1' return 'i - 1'\n\t\t\t\treturn i - 1;\n\t\t\t}\n\n\t\t}\n\t\twhile (+array[i] == +array[i + 1]) i++;\n\n\t\treturn i;\n\t}\n\treturn array.length - 1;\n}\n\n","var __extends = require(\"../../../utils/extends\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\"),\n\tCell = require(\"./cell\");\n\nvar Layout = (function (_super) {\n\t\"use strict\";\n\n\t__extends(Layout, _super);\n\tfunction Layout(parent, config, factory) {\n\t\tvar _this = _super.apply(this, arguments) || this;\n\n\t\tif(parent)\n\t\t\t_this.$root = true;\n\n\t\t_this._parseConfig(config);\n\t\t_this.$name = \"layout\";\n\t\treturn _this;\n\t}\n\n\tLayout.prototype.destructor = function () {\n\t\tif (this.$container && this.$view) {\n\t\t\tdomHelpers.removeNode(this.$view);\n\t\t}\n\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\t\t\tvar child = this.$cells[i];\n\t\t\tchild.destructor();\n\t\t}\n\t\tthis.$cells = [];\n\n\t\t_super.prototype.destructor.call(this);\n\t};\n\n\tLayout.prototype._resizeScrollbars = function(autosize, scrollbars){\n\t\tvar scrollChanged = false;\n\t\tvar visibleScrollbars = [],\n\t\t\thiddenSrollbars = [];\n\n\t\tfunction showScrollbar(scrollbar){\n\t\t\tscrollbar.$parent.show();\n\t\t\tscrollChanged = true;\n\t\t\tvisibleScrollbars.push(scrollbar);\n\t\t}\n\t\tfunction hideScrollbar(scrollbar){\n\t\t\tscrollbar.$parent.hide();\n\t\t\tscrollChanged = true;\n\t\t\thiddenSrollbars.push(scrollbar);\n\t\t}\n\n\t\tvar scrollbar;\n\t\tfor(var i = 0; i < scrollbars.length; i++){\n\t\t\tscrollbar = scrollbars[i];\n\n\t\t\tif(autosize[scrollbar.$config.scroll]) {\n\t\t\t\thideScrollbar(scrollbar);\n\t\t\t}else if(scrollbar.shouldHide()){\n\t\t\t\thideScrollbar(scrollbar);\n\t\t\t}else if(scrollbar.shouldShow()){\n\t\t\t\tshowScrollbar(scrollbar);\n\t\t\t}else{\n\t\t\t\tif(scrollbar.isVisible()){\n\t\t\t\t\tvisibleScrollbars.push(scrollbar);\n\t\t\t\t}else{\n\t\t\t\t\thiddenSrollbars.push(scrollbar);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar visibleGroups = {};\n\t\tfor(var i = 0; i < visibleScrollbars.length; i++){\n\t\t\tif(visibleScrollbars[i].$config.group){\n\t\t\t\tvisibleGroups[visibleScrollbars[i].$config.group] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor(var i = 0; i < hiddenSrollbars.length; i++){\n\t\t\tscrollbar = hiddenSrollbars[i];\n\n\t\t\tif(scrollbar.$config.group && visibleGroups[scrollbar.$config.group]){\n\t\t\t\tshowScrollbar(scrollbar);\n\t\t\t}\n\t\t}\n\n\t\treturn scrollChanged;\n\t};\n\n\tLayout.prototype._syncCellSizes = function(groupName, newSize){\n\t\tif(!groupName)\n\t\t\treturn;\n\n\t\tvar groups = {};\n\n\t\tthis._eachChild(function(cell){\n\t\t\tif(cell.$config.group && cell.$name != \"scrollbar\" && cell.$name != \"resizer\"){\n\t\t\t\tif(!groups[cell.$config.group]){\n\t\t\t\t\tgroups[cell.$config.group] = [];\n\t\t\t\t}\n\t\t\t\tgroups[cell.$config.group].push(cell);\n\t\t\t}\n\t\t});\n\n\t\tif(groups[groupName]){\n\t\t\tthis._syncGroupSize(groups[groupName], newSize);\n\t\t}\n\t\treturn groups[groupName];\n\t};\n\n\tLayout.prototype._syncGroupSize = function(cells, newSize){\n\t\tif(!cells.length) return;\n\n\t\tvar property = cells[0].$parent._xLayout ? \"width\" : \"height\";\n\t\tvar direction = cells[0].$parent.getNextSibling(cells[0].$id) ? 1 : -1;\n\n\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\tvar ownSize = cells[i].getSize();\n\n\t\t\tvar resizeSibling = direction > 0 ? cells[i].$parent.getNextSibling(cells[i].$id) : cells[i].$parent.getPrevSibling(cells[i].$id);\n\t\t\tif(resizeSibling.$name == \"resizer\"){\n\t\t\t\tresizeSibling = direction > 0 ? resizeSibling.$parent.getNextSibling(resizeSibling.$id) : resizeSibling.$parent.getPrevSibling(resizeSibling.$id);\n\t\t\t}\n\t\t\tvar siblingSize = resizeSibling.getSize();\n\n\t\t\tif(resizeSibling[property]){\n\t\t\t\tvar totalGravity = ownSize.gravity + siblingSize.gravity;\n\t\t\t\tvar totalSize = ownSize[property] + siblingSize[property];\n\t\t\t\tvar k = totalGravity / totalSize;\n\t\t\t\tcells[i].$config.gravity = k * newSize;\n\n\t\t\t\tresizeSibling.$config[property] = totalSize - newSize;\n\t\t\t\tresizeSibling.$config.gravity = totalGravity - k * newSize;\n\t\t\t}else{\n\n\n\t\t\t\tcells[i].$config[property] = newSize;\n\t\t\t}\n\n\t\t\tvar mainGrid = this.$gantt.$ui.getView(\"grid\");\n\t\t\tif(mainGrid && cells[i].$content === mainGrid && !mainGrid.$config.scrollable){\n\t\t\t\tthis.$gantt.config.grid_width = newSize;\n\t\t\t}\n\t\t}\n\t};\n\n\tLayout.prototype.resize = function(startStage){\n\t\tvar mainCall = false;\n\t\tif(this.$root && !this._resizeInProgress){\n\t\t\tthis.callEvent(\"onBeforeResize\", []);\n\t\t\tmainCall = true;\n\t\t\tthis._resizeInProgress = true;\n\t\t}\n\n\t\t_super.prototype.resize.call(this, true);\n\t\t_super.prototype.resize.call(this, false);\n\n\t\tif(mainCall){\n\n\t\t\tvar contentViews = [];\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"viewCell\"));\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"viewLayout\"));\n\t\t\tcontentViews = contentViews.concat(this.getCellsByType(\"hostCell\"));\n\n\t\t\tvar scrollbars = this.getCellsByType(\"scroller\");\n\n\t\t\tfor(var i = 0; i < contentViews.length; i++){\n\t\t\t\tif(!contentViews[i].$config.hidden)\n\t\t\t\t\tcontentViews[i].setContentSize();\n\t\t\t}\n\n\t\t\tvar autosize = this._getAutosizeMode(this.$config.autosize);\n\n\t\t\tvar scrollChanged = this._resizeScrollbars(autosize, scrollbars);\n\n\t\t\tif(this.$config.autosize){\n\t\t\t\tthis.autosize(this.$config.autosize);\n\t\t\t\tscrollChanged = true;\n\t\t\t}\n\n\t\t\tif(scrollChanged){\n\t\t\t\tthis.resize();\n\t\t\t\tfor(var i = 0; i < contentViews.length; i++){\n\t\t\t\t\tif(!contentViews[i].$config.hidden)\n\t\t\t\t\t\tcontentViews[i].setContentSize();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.callEvent(\"onResize\", []);\n\t\t}\n\t\tif(mainCall){\n\t\t\tthis._resizeInProgress = false;\n\t\t}\n\t};\n\n\tLayout.prototype._eachChild = function(code, cell){\n\t\tcell = cell || this;\n\t\tcode(cell);\n\t\tif(cell.$cells){\n\t\t\tfor(var i = 0; i < cell.$cells.length; i++){\n\t\t\t\tthis._eachChild(code, cell.$cells[i]);\n\t\t\t}\n\t\t}\n\t};\n\n\tLayout.prototype.isChild = function(view){\n\t\tvar res = false;\n\t\tthis._eachChild(function(child){\n\t\t\tif(child === view || child.$content === view){\n\t\t\t\tres = true;\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t};\n\n\tLayout.prototype.getCellsByType = function(type){\n\t\tvar res = [];\n\t\tif(type === this.$name){\n\t\t\tres.push(this);\n\t\t}\n\n\t\tif(this.$content && this.$content.$name == type){\n\t\t\tres.push(this.$content);\n\t\t}\n\n\t\tif(this.$cells){\n\t\t\tfor(var i = 0; i < this.$cells.length; i++){\n\t\t\t\tvar children = Layout.prototype.getCellsByType.call(this.$cells[i], type);\n\t\t\t\tif(children.length){\n\t\t\t\t\tres.push.apply(res, children);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t};\n\n\tLayout.prototype.getNextSibling = function(cellId){\n\t\tvar index = this.cellIndex(cellId);\n\t\tif(index >= 0 && this.$cells[index + 1]){\n\t\t\treturn this.$cells[index + 1];\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tLayout.prototype.getPrevSibling = function(cellId){\n\t\tvar index = this.cellIndex(cellId);\n\t\tif(index >= 0 && this.$cells[index - 1]){\n\t\t\treturn this.$cells[index - 1];\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t};\n\n\n\tLayout.prototype.cell = function (id) {\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\t\t\tvar child = this.$cells[i];\n\t\t\tif (child.$id === id) {\n\t\t\t\treturn child;\n\t\t\t}\n\t\t\tvar sub = child.cell(id);\n\t\t\tif (sub) {\n\t\t\t\treturn sub;\n\t\t\t}\n\t\t}\n\t};\n\tLayout.prototype.cellIndex = function (id) {\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\t\t\tif (this.$cells[i].$id === id) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\tLayout.prototype.moveView = function (view, ind) {\n\t\tif (this.$cells[ind] !== view) {\n\t\t\treturn window.alert(\"Not implemented\");\n\t\t}\n\t\telse {\n\t\t\tind += this.$config.header ? 1 : 0;\n\t\t\tvar node = this.$view;\n\t\t\tif (ind >= node.childNodes.length) {\n\t\t\t\tnode.appendChild(view.$view);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode.insertBefore(view.$view, node.childNodes[ind]);\n\t\t\t}\n\t\t}\n\t};\n\tLayout.prototype._parseConfig = function (config) {\n\t\tthis.$cells = [];\n\t\tthis._xLayout = !config.rows;\n\t\tvar cells = config.rows || config.cols || config.views;\n\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\tvar cell = cells[i];\n\t\t\tcell.mode = this._xLayout ? \"x\" : \"y\";\n\t\t\tvar $content = this.$factory.initUI(cell, this);\n\t\t\tif(!$content){\n\t\t\t\tcells.splice(i, 1);\n\t\t\t\ti--;\n\t\t\t}else{\n\t\t\t\t$content.$parent = this;\n\t\t\t\tthis.$cells.push($content);\n\t\t\t}\n\t\t}\n\t};\n\tLayout.prototype.getCells = function () {\n\t\treturn this.$cells;\n\t};\n\tLayout.prototype.render = function () {\n\t\tvar view = domHelpers.insertNode(this.$container, this.$toHTML());\n\t\tthis.$fill(view, null);\n\t\tthis.callEvent(\"onReady\", []);\n\t\tthis.resize();\n\n\t\t// do simple repaint after the first call\n\t\tthis.render = this.resize;\n\t};\n\tLayout.prototype.$fill = function (node, parent) {\n\t\tthis.$view = node;\n\t\tthis.$parent = parent;\n\t\tvar cells = domHelpers.getChildNodes(node, \"gantt_layout_cell\");\n\t\tfor (var i = cells.length - 1; i >= 0; i--) {\n\t\t\tvar sub = this.$cells[i];\n\t\t\tsub.$fill(cells[i], this);\n\t\t\t// initially hidden cell\n\t\t\tif (sub.$config.hidden) {\n\t\t\t\tsub.$view.parentNode.removeChild(sub.$view);\n\t\t\t}\n\t\t}\n\t};\n\tLayout.prototype.$toHTML = function () {\n\t\tvar mode = this._xLayout ? \"x\" : \"y\";\n\t\tvar html = [];\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\t\t\thtml.push(this.$cells[i].$toHTML());\n\t\t}\n\t\treturn _super.prototype.$toHTML.call(this, html.join(\"\"), (this.$root ? \"gantt_layout_root \" : \"\") + \"gantt_layout gantt_layout_\" + mode);\n\t};\n\n\tLayout.prototype.getContentSize = function(mode){\n\t\tvar contentWidth = 0,\n\t\t\tcontentHeight = 0;\n\n\t\tvar cellSize, cell, borders;\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\t\t\tcell = this.$cells[i];\n\t\t\tif(cell.$config.hidden)\n\t\t\t\tcontinue;\n\n\t\t\tcellSize = cell.getContentSize(mode);\n\n\t\t\tif(cell.$config.view === \"scrollbar\" && mode[cell.$config.scroll]){\n\t\t\t\tcellSize.height = 0;\n\t\t\t\tcellSize.width = 0;\n\t\t\t}\n\n\t\t\tif(cell.$config.resizer){\n\t\t\t\tif(this._xLayout){\n\t\t\t\t\tcellSize.height = 0;\n\t\t\t\t}else{\n\t\t\t\t\tcellSize.width = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tborders = cell._getBorderSizes();\n\n\t\t\tif(this._xLayout){\n\t\t\t\tcontentWidth += (cellSize.width + borders.horizontal);\n\t\t\t\tcontentHeight = Math.max(contentHeight, (cellSize.height + borders.vertical));\n\t\t\t}else{\n\t\t\t\tcontentWidth = Math.max(contentWidth, cellSize.width + borders.horizontal);\n\t\t\t\tcontentHeight += cellSize.height + borders.vertical;\n\t\t\t}\n\t\t}\n\n\t\tborders = this._getBorderSizes();\n\t\tcontentWidth += borders.horizontal;\n\t\tcontentHeight += borders.vertical;\n\n\t\tif(this.$root){\n\t\t\tcontentWidth += 1;\n\t\t\tcontentHeight += 1;\n\t\t}\n\n\t\treturn {\n\t\t\twidth: contentWidth,\n\t\t\theight: contentHeight\n\t\t};\n\t};\n\n\tLayout.prototype._cleanElSize = function(value){\n\t\treturn ((value || \"\").toString().replace(\"px\", \"\") * 1 || 0);\n\t};\n\tLayout.prototype._getBoxStyles = function(div){\n\t\tvar computed = null;\n\t\tif(window.getComputedStyle){\n\t\t\tcomputed = window.getComputedStyle(div, null);\n\t\t}else{\n\t\t\t//IE with elem.currentStyle does not calculate sizes from %, so will use the default approach\n\t\t\tcomputed = {\n\t\t\t\t\"width\":div.clientWidth,\n\t\t\t\t\"height\":div.clientHeight\n\t\t\t};\n\t\t}\n\t\tvar properties = [\n\t\t\t\"width\",\n\t\t\t\"height\",\n\n\t\t\t\"paddingTop\",\n\t\t\t\"paddingBottom\",\n\t\t\t\"paddingLeft\",\n\t\t\t\"paddingRight\",\n\n\t\t\t\"borderLeftWidth\",\n\t\t\t\"borderRightWidth\",\n\t\t\t\"borderTopWidth\",\n\t\t\t\"borderBottomWidth\"\n\t\t];\n\t\tvar styles = {\n\t\t\tboxSizing:(computed.boxSizing == \"border-box\")\n\t\t};\n\n\t\tif(computed.MozBoxSizing){\n\t\t\tstyles.boxSizing = (computed.MozBoxSizing == \"border-box\");\n\t\t}\n\t\tfor(var i =0; i < properties.length; i++){\n\t\t\tstyles[properties[i]] = computed[properties[i]] ? this._cleanElSize(computed[properties[i]]) : 0;\n\t\t}\n\n\n\t\tvar box = {\n\t\t\thorPaddings : (styles.paddingLeft + styles.paddingRight + styles.borderLeftWidth + styles.borderRightWidth),\n\t\t\tvertPaddings : (styles.paddingTop + styles.paddingBottom + styles.borderTopWidth + styles.borderBottomWidth),\n\t\t\tborderBox: styles.boxSizing,\n\t\t\tinnerWidth : styles.width,\n\t\t\tinnerHeight : styles.height,\n\t\t\touterWidth : styles.width,\n\t\t\touterHeight : styles.height\n\t\t};\n\n\n\t\tif(box.borderBox){\n\t\t\tbox.innerWidth -= box.horPaddings;\n\t\t\tbox.innerHeight -= box.vertPaddings;\n\t\t}else{\n\t\t\tbox.outerWidth += box.horPaddings;\n\t\t\tbox.outerHeight += box.vertPaddings;\n\t\t}\n\n\t\treturn box;\n\t};\n\n\tLayout.prototype._getAutosizeMode = function(config){\n\t\tvar res = {x:false, y:false};\n\t\tif(config === \"xy\"){\n\t\t\tres.x = res.y = true;\n\t\t}else if(config === \"y\" || config === true){\n\t\t\tres.y = true;\n\t\t}else if(config === \"x\"){\n\t\t\tres.x = true;\n\t\t}\n\t\treturn res;\n\t};\n\n\tLayout.prototype.autosize = function(mode) {\n\t\tvar res = this._getAutosizeMode(mode);\n\t\tvar boxSizes = this._getBoxStyles(this.$container);\n\t\tvar contentSizes = this.getContentSize(mode);\n\n\t\tvar node = this.$container;\n\t\tif(res.x){\n\t\t\tif(boxSizes.borderBox){\n\t\t\t\tcontentSizes.width += boxSizes.horPaddings;\n\t\t\t}\n\t\t\tnode.style.width = contentSizes.width + \"px\";\n\t\t}\n\t\tif(res.y){\n\t\t\tif(boxSizes.borderBox){\n\t\t\t\tcontentSizes.height += boxSizes.vertPaddings;\n\t\t\t}\n\t\t\tnode.style.height = contentSizes.height + \"px\";\n\t\t}\n\t};\n\n\tLayout.prototype.getSize = function () {\n\t\tthis._sizes = [];\n\t\tvar width = 0;\n\t\tvar minWidth = 0;\n\t\tvar maxWidth = 100000;\n\t\tvar height = 0;\n\t\tvar maxHeight = 100000;\n\t\tvar minHeight = 0;\n\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\n\t\t\tvar size = this._sizes[i] = this.$cells[i].getSize();\n\t\t\tif (this.$cells[i].$config.hidden) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this._xLayout) {\n\t\t\t\tif (!size.width && size.minWidth) {\n\t\t\t\t\twidth += size.minWidth;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\twidth += size.width;\n\t\t\t\t}\n\t\t\t\tmaxWidth += size.maxWidth;\n\t\t\t\tminWidth += size.minWidth;\n\t\t\t\theight = Math.max(height, size.height);\n\t\t\t\tmaxHeight = Math.min(maxHeight, size.maxHeight); // min of maxHeight\n\t\t\t\tminHeight = Math.max(minHeight, size.minHeight); // max of minHeight\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!size.height && size.minHeight) {\n\t\t\t\t\theight += size.minHeight;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\theight += size.height;\n\t\t\t\t}\n\t\t\t\tmaxHeight += size.maxHeight;\n\t\t\t\tminHeight += size.minHeight;\n\t\t\t\twidth = Math.max(width, size.width);\n\t\t\t\tmaxWidth = Math.min(maxWidth, size.maxWidth); // min of maxWidth\n\t\t\t\tminWidth = Math.max(minWidth, size.minWidth); // max of minWidth\n\t\t\t}\n\t\t}\n\t\tvar self = _super.prototype.getSize.call(this);\n\t\t// maxWidth\n\t\tif (self.maxWidth >= 100000) {\n\t\t\tself.maxWidth = maxWidth;\n\t\t}\n\t\t// maxHeight\n\t\tif (self.maxHeight >= 100000) {\n\t\t\tself.maxHeight = maxHeight;\n\t\t}\n\t\t// minWidth\n\t\tself.minWidth = self.minWidth !== self.minWidth ? 0 : self.minWidth;// || self.width || Math.max(minWidth, width);\n\t\t// minHeight\n\t\tself.minHeight = self.minHeight !== self.minHeight ? 0 : self.minHeight;//self.minHeight || self.height || Math.max(minHeight, height);\n\t\t// sizes with paddings and margins\n\t\tif (this._xLayout) {\n\t\t\tself.minWidth += this.$config.margin * (this.$cells.length) || 0;\n\t\t\tself.minWidth += this.$config.padding * 2 || 0;\n\t\t\tself.minHeight += (this.$config.padding * 2) || 0;\n\t\t}\n\t\telse {\n\t\t\tself.minHeight += this.$config.margin * (this.$cells.length) || 0;\n\t\t\tself.minHeight += (this.$config.padding * 2) || 0;\n\t\t}\n\t\t\n\t\treturn self;\n\t};\n\t// calc total gravity and free space\n\tLayout.prototype._calcFreeSpace = function (s, cell, xLayout) {\n\t\tvar min = xLayout ? cell.minWidth : cell.minHeight;\n\t\tvar max = xLayout ? cell.maxWidth : cell.maxWidth;\n\t\tvar side = s;\n\t\tif (!side) {\n\t\t\tside = Math.floor(this._free / this._gravity * cell.gravity);\n\t\t\tif (side > max) {\n\t\t\t\tside = max;\n\t\t\t\tthis._free -= side;\n\t\t\t\tthis._gravity -= cell.gravity;\n\t\t\t}\n\t\t\tif (side < min) {\n\t\t\t\tside = min;\n\t\t\t\tthis._free -= side;\n\t\t\t\tthis._gravity -= cell.gravity;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (side > max) {\n\t\t\t\tside = max;\n\t\t\t}\n\t\t\tif (side < min) {\n\t\t\t\tside = min;\n\t\t\t}\n\t\t\tthis._free -= side;\n\t\t}\n\t\treturn side;\n\t};\n\tLayout.prototype._calcSize = function (s, size, xLayout) {\n\t\tvar side = s;\n\t\tvar min = xLayout ? size.minWidth : size.minHeight;\n\t\tvar max = xLayout ? size.maxWidth : size.maxHeight;\n\t\tif (!side) {\n\t\t\tside = Math.floor(this._free / this._gravity * size.gravity);\n\t\t}\n\t\tif (side > max) {\n\t\t\tside = max;\n\t\t}\n\t\tif (side < min) {\n\t\t\tside = min;\n\t\t}\n\t\treturn side;\n\t};\n\n\tLayout.prototype._configureBorders = function(){\n\t\tif(this.$root){\n\t\t\tthis._setBorders([\n\t\t\t\tthis._borders.left,\n\t\t\t\tthis._borders.top,\n\t\t\t\tthis._borders.right,\n\t\t\t\tthis._borders.bottom\n\t\t\t],\n\t\t\tthis);\n\t\t}\n\n\t\tvar borderClass = this._xLayout ? this._borders.right : this._borders.bottom;\n\n\t\tvar cells = this.$cells;\n\n\t\tvar lastVisibleIndex = cells.length - 1;\n\t\tfor(var i = lastVisibleIndex; i >= 0; i--){\n\t\t\tif (!cells[i].$config.hidden) {\n\t\t\t\tlastVisibleIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\tif (cells[i].$config.hidden) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar lastCell = i >= lastVisibleIndex;\n\t\t\tvar borderColorClass = \"\";\n\t\t\tif(!lastCell && cells[i + 1]){\n\t\t\t\tif(cells[i + 1].$config.view == \"scrollbar\"){\n\t\t\t\t\tif(this._xLayout){\n\t\t\t\t\t\tlastCell = true;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tborderColorClass = \"gantt_layout_cell_border_transparent\";\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tthis._setBorders(lastCell ? [] : [borderClass, borderColorClass], cells[i]);\n\t\t}\n\t};\n\n\tLayout.prototype._updateCellVisibility = function(){\n\t\tvar oldVisibleCells = this._visibleCells || {};\n\t\tvar firstCall = !this._visibleCells;\n\t\tvar visibleCells = {};\n\t\tvar cell;\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\n\t\t\tcell = this.$cells[i];\n\n\t\t\tif (!firstCall && cell.$config.hidden && oldVisibleCells[cell.$id]) {\n\t\t\t\tcell._hide(true);\n\t\t\t}else if(!cell.$config.hidden && !oldVisibleCells[cell.$id]){\n\t\t\t\tcell._hide(false);\n\t\t\t}\n\n\t\t\tif(!cell.$config.hidden){\n\t\t\t\tvisibleCells[cell.$id] = true;\n\t\t\t}\n\t\t}\n\t\tthis._visibleCells = visibleCells;\n\t};\n\n\tLayout.prototype.setSize = function (x, y) {\n\t\tthis._configureBorders();\n\t\t_super.prototype.setSize.call(this, x, y);\n\t\ty = this.$lastSize.contentY;\n\t\tx = this.$lastSize.contentX;\n\n\t\tvar padding = (this.$config.padding || 0);\n\t\tthis.$view.style.padding = padding + \"px\";\n\t\tthis._gravity = 0;\n\t\tthis._free = this._xLayout ? x : y;\n\t\tthis._free -= padding * 2;\n\t\t// calc all gravity\n\n\t\tvar cell,\n\t\t\tsize;\n\n\t\tthis._updateCellVisibility();\n\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\n\t\t\tcell = this.$cells[i];\n\n\t\t\tif (cell.$config.hidden) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar margin = (this.$config.margin || 0);\n\t\t\tif(cell.$name == \"resizer\" && !margin){\n\t\t\t\tmargin = -1;\n\t\t\t}\n\n\t\t\t// set margins to child cell\n\t\t\tvar cellView = cell.$view;\n\n\t\t\tvar marginSide = this._xLayout ? \"marginRight\" : \"marginBottom\";\n\t\t\tif (i !== this.$cells.length - 1) {\n\t\t\t\tcellView.style[marginSide] = margin + \"px\";\n\t\t\t\tthis._free -= margin; // calc free space without margin\n\t\t\t}\n\t\t\tsize = this._sizes[i];\n\t\t\tif (this._xLayout) {\n\t\t\t\tif (!size.width) {\n\t\t\t\t\tthis._gravity += size.gravity;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!size.height) {\n\t\t\t\t\tthis._gravity += size.gravity;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < this._sizes.length; i++) {\n\t\t\tcell = this.$cells[i];\n\n\t\t\tif (cell.$config.hidden) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tsize = this._sizes[i];\n\t\t\tvar width = size.width;\n\t\t\tvar height = size.height;\n\t\t\tif (this._xLayout) {\n\t\t\t\tthis._calcFreeSpace(width, size, true);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._calcFreeSpace(height, size, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\t\t\tcell = this.$cells[i];\n\n\t\t\tif (cell.$config.hidden) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tsize = this._sizes[i];\n\t\t\tvar dx = void 0;\n\t\t\tvar dy = void 0;\n\t\t\tif (this._xLayout) {\n\t\t\t\tdx = this._calcSize(size.width, size, true);\n\t\t\t\tdy = y - padding * 2; // layout height without paddings\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdx = x - padding * 2; // layout width without paddings\n\t\t\t\tdy = this._calcSize(size.height, size, false);\n\t\t\t}\n\n\t\t\tcell.setSize(dx, dy);\n\t\t}\n\n\t};\n\n\treturn Layout;\n}(Cell));\n\nmodule.exports = Layout;","module.exports = function(item, view){\n\treturn {\n\t\ttop: view.getItemTop(item.id),\n\t\theight: view.getItemHeight(item.id),\n\t\tleft: 0,\n\t\tright: Infinity\n\t};\n};","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","function checkTimeout(host, updPerSecond){\n\tif (!updPerSecond)\n\t\treturn true;\n\t\n\tif (host._on_timeout)\n\t\treturn false;\n\t\n\tvar timeout = Math.ceil(1000/updPerSecond);\n\tif (timeout < 2) return true;\n\n\tsetTimeout(function(){\n\t\tdelete host._on_timeout;\n\t}, timeout);\n\n\thost._on_timeout = true;\n\treturn true;\n}\n\nmodule.exports = checkTimeout;","module.exports = function(gantt){\n\n\t// no deprecated methods for now\n\n\t// eslint-disable-next-line no-unused-vars\n\tfunction deprecated(badCode, goodCode, versionDeprecated, versionDeleted) {\n\n\t\tvar formatting = gantt.env.isIE ? \"\" : \"%c\";\n\t\tversionDeprecated = versionDeprecated || \"v6.0\";\n\t\tversionDeleted = versionDeleted || \"v7.0\";\n\n\t\tvar message = [\n\t\t\tformatting, \"\\\"\", badCode, \"\\\"\", formatting,\n\t\t\t\" has been deprecated in dhtmlxGantt \", versionDeprecated, \" and will stop working in \", versionDeleted,\". Use \",\n\t\t\tformatting, \"\\\"\", goodCode, \"\\\"\", formatting,\n\t\t\t\" instead. \\nSee more details at http://docs.dhtmlx.com/gantt/migrating.html \"\n\t\t].join(\"\");\n\n\t\tvar log = window.console.warn || window.console.log;\n\n\t\tvar args = [message];\n\t\tif(!gantt.env.isIE){\n\t\t\targs = args.concat([\"font-weight:bold\", \"font-weight:normal\", \"font-weight:bold\", \"font-weight:normal\"]);\n\t\t}\n\n\t\tlog.apply(window.console, args);\n\t}\n\n\t// gantt.getSlack is defined inside an extension, leave it without message for now\n\n};","// all builds except for evaluation version get this mockup\n// the evaluation build gets actual codes\nexport default () => {};","function extend(gantt){\n\n\tgantt.destructor = function(){\n\t\tgantt.callEvent(\"onDestroy\", []);\n\t\tthis.clearAll();\n\n\t\tif(this.$root){\n\t\t\tdelete this.$root.gantt;\n\t\t}\n\n\t\tthis._eventRemoveAll();\n\t\tif(this.$layout){\n\t\t\tthis.$layout.destructor();\n\t\t}\n\n\t\tthis.resetLightbox();\n\n\t\tif(this._dp && this._dp.destructor){\n\t\t\tthis._dp.destructor();\n\t\t}\n\t\tthis.$services.destructor();\n\n\t\t// detachAllEvents should be called last, because in components may be attached events\n\t\tthis.detachAllEvents();\n\n\t\tfor(var i in this){\n\t\t\tif(i.indexOf(\"$\") === 0){\n\t\t\t\tdelete this[i];\n\t\t\t}\n\t\t}\n\t\tgantt.$destroyed = true;\n\t};\n}\n\nmodule.exports = extend;\n","/*\n \tasserts will be removed in final code, so you can place them anythere\n\twithout caring about performance impacts\n*/\n\nmodule.exports = function(gantt){\n\treturn function assert(check, message){\n\t\tif (!check){\n\t\t\tif(gantt.config.show_errors && gantt.callEvent(\"onError\",[message]) !== false) {\n\t\t\t\tgantt.message({type: \"error\", text: message, expire: -1});\n\n\t\t\t\t// eslint-disable-next-line no-debugger\n\t\t\t\tdebugger;\n\t\t\t}\n\t\t}\n\t};\n};","var domHelpers = require(\"../utils/dom_helpers\"),\n\thelpers = require(\"../utils/helpers\");\n\nmodule.exports = function(gantt){\n\tvar calculateScaleRange = require(\"./gantt_data_range\");\n\n\tgantt.assert = require(\"./common/assert\")(gantt);\n\n//initial initialization\n\tgantt.init = function(node, from, to){\n\t\tif(from && to){\n\t\t\tthis.config.start_date = this._min_date = new Date(from);\n\t\t\tthis.config.end_date = this._max_date = new Date(to);\n\t\t}\n\t\tthis.date.init();\n\n\t\tif (!this.config.scroll_size)\n\t\t\tthis.config.scroll_size = domHelpers.getScrollSize() || 1;\n\n\t\t//can be called only once\n\t\tthis.init = function(node){\n\t\t\tif (this.$container && this.$container.parentNode){\n\t\t\t\tthis.$container.parentNode.removeChild(this.$container);\n\t\t\t\tthis.$container = null;\n\t\t\t}\n\n\t\t\tif(this.$layout){\n\t\t\t\tthis.$layout.clear();\n\t\t\t}\n\t\t\tthis._reinit(node);\n\t\t};\n\n\t\tthis._reinit(node);\n\t};\n\n\tgantt._reinit = function(node){\n\t\tthis.callEvent(\"onBeforeGanttReady\", []);\n\n\t\t// detach listeners before clearing old DOM, possible IE errors when accessing detached nodes\n\t\tthis._eventRemoveAll();\n\t\tthis.$mouseEvents.reset();\n\n\t\tthis.resetLightbox();\n\t\tthis._update_flags();\n\n\n\t\tvar config = this.$services.getService(\"templateLoader\");\n\t\tconfig.initTemplates(this);\n\n\t\tthis._clearTaskLayers();\n\t\tthis._clearLinkLayers();\n\n\t\t//this.clear\n\t\tif(this.$layout){\n\t\t\tthis.$layout.destructor();\n\t\t\tthis.$ui.reset();\n\t\t}\n\n\t\tthis.$root = domHelpers.toNode(node);\n\t\tif(this.$root){\n\t\t\tthis.$root.innerHTML = \"\";\n\t\t}\n\t\tthis.$root.gantt = this;\n\t\tcalculateScaleRange(this);\n\t\tthis.config.layout.id = \"main\";\n\t\tthis.$layout = this.$ui.createView(\"layout\", node, this.config.layout);\n\n\t\tthis.$layout.attachEvent(\"onBeforeResize\", function(){\n\t\t\tvar storeNames = gantt.$services.getService(\"datastores\");\n\t\t\tfor(var i = 0; i < storeNames.length; i++){\n\t\t\t\tgantt.getDatastore(storeNames[i]).filter();\n\t\t\t}\n\t\t});\n\n\t\tthis.$layout.attachEvent(\"onResize\", function(){\n\t\t\tgantt.refreshData();\n\t\t});\n\n\t\tthis.callEvent(\"onGanttLayoutReady\", []);\n\t\tthis.$layout.render();\n\n\t\tgantt.$container = this.$layout.$container.firstChild;\n\n\t\taddResizeListener(gantt);\n\n\t\tthis.callEvent(\"onTemplatesReady\",[]);\n\t\tthis.$mouseEvents.reset(this.$root);\n\t\tthis.callEvent(\"onGanttReady\", []);\n\n\t\tthis.render();\n\t};\n\n\tfunction addResizeListener(gantt){\n\t\tvar containerStyles = window.getComputedStyle(gantt.$root);\n\t\tif(containerStyles.getPropertyValue(\"position\") == \"static\"){\n\t\t\tgantt.$root.style.position = \"relative\";\n\t\t}\n\n\t\tvar resizeWatcher = document.createElement('iframe');\n\t\tresizeWatcher.className = \"gantt_container_resize_watcher\";\n\t\tresizeWatcher.tabIndex = -1;\n\n\t\t// in some environments (namely, in SalesForce) iframe.contentWindow is not available\n\t\tgantt.$root.appendChild(resizeWatcher);\n\t\tif (resizeWatcher.contentWindow) {\n\t\t\tlistenWindowResize(gantt, resizeWatcher.contentWindow);\n\t\t} else {\n\t\t\t// if so - ditch the iframe and fallback to listening the main window resize\n\t\t\tgantt.$root.removeChild(resizeWatcher);\n\t\t\tlistenWindowResize(gantt, window);\n\t\t}\n\t}\n\n\tfunction listenWindowResize(gantt, window){\n\t\tvar resizeDelay;\n\t\tgantt.event(window, \"resize\", function(){\n\t\t\tclearTimeout(resizeDelay);\n\t\t\tresizeDelay = setTimeout(function(){\n\t\t\t\tgantt.render();\n\t\t\t}, 300);\n\t\t});\n\t}\n\n\tgantt.$click={\n\t\tbuttons:{\n\t\t\t\"edit\":function(id){\n\t\t\t\tgantt.showLightbox(id);\n\t\t\t},\n\t\t\t\"delete\":function(id){\n\t\t\t\tvar question = gantt.locale.labels.confirm_deleting;\n\t\t\t\tvar title = gantt.locale.labels.confirm_deleting_title;\n\n\t\t\t\tgantt._dhtmlx_confirm(question, title, function(){\n\t\t\t\t\tif(!gantt.isTaskExists(id)){\n\t\t\t\t\t\tgantt.hideLightbox();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\t\tif(task.$new){\n\t\t\t\t\t\tgantt.silent(function(){\n\t\t\t\t\t\t\tgantt.deleteTask(id, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tgantt.refreshData();\n\t\t\t\t\t}else{\n\t\t\t\t\t\tgantt.deleteTask(id);\n\t\t\t\t\t}\n\n\t\t\t\t\tgantt.hideLightbox();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n//renders self\n\tgantt.render = function(){\n\t\tthis.callEvent(\"onBeforeGanttRender\", []);\n\n\t\tif (!this.config.sort && this._sort) {\n\t\t\tthis._sort = undefined;\n\t\t}\n\n\t\tvar pos = this.getScrollState();\n\t\tvar posX = pos ? pos.x : 0;\n\t\tif(this._getHorizontalScrollbar()){\n\t\t\tvar scrollbar = this._getHorizontalScrollbar();\n\t\t\tposX = scrollbar.$config.codeScrollLeft || posX || 0;\n\t\t}\n\n\n\t\tvar visible_date = null;\n\t\tif(posX){\n\t\t\tvisible_date = gantt.dateFromPos(posX + this.config.task_scroll_offset);\n\t\t}\n\t\tcalculateScaleRange(this);\n\n\t\tthis.$layout.$config.autosize = this.config.autosize;\n\t\tthis.$layout.resize();\n\n\t\tif(this.config.preserve_scroll && pos){\n\n\t\t\tif(posX){\n\t\t\t\tvar new_pos = gantt.getScrollState();\n\t\t\t\tvar new_date = gantt.dateFromPos(new_pos.x);\n\t\t\t\tif(!(+visible_date == +new_date && new_pos.y == pos.y)){\n\t\t\t\t\tif(visible_date){\n\t\t\t\t\t\tthis.showDate(visible_date);\n\t\t\t\t\t}\n\t\t\t\t\tif(pos.y)\n\t\t\t\t\t\tgantt.scrollTo(undefined, pos.y);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.callEvent(\"onGanttRender\", []);\n\t};\n\n\t//TODO: add layout.resize method that wouldn't trigger data repaint\n\tgantt.setSizes = gantt.render;\n\n\tgantt.locate = function(e) {\n\t\tvar trg = domHelpers.getTargetNode(e);\n\n\t\t//ignore empty cells\n\t\tvar className = domHelpers.getClassName(trg);\n\t\tif ((className || \"\").indexOf(\"gantt_task_cell\") >= 0) return null;\n\n\t\tvar targetAttribute = arguments[1] || this.config.task_attribute;\n\n\t\tvar node = domHelpers.locateAttribute(trg, targetAttribute);\n\t\tif(node){\n\t\t\treturn node.getAttribute(targetAttribute);\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tgantt._locate_css = function(e, classname, strict){\n\t\treturn domHelpers.locateClassName(e, classname, strict);\n\t};\n\n\tgantt._locateHTML = function(e, attribute) {\n\t\treturn domHelpers.locateAttribute(e, attribute || this.config.task_attribute);\n\t};\n\n\tgantt.getTaskRowNode = function(id) {\n\t\tvar els = this.$grid_data.childNodes;\n\t\tvar attribute = this.config.task_attribute;\n\t\tfor (var i = 0; i < els.length; i++) {\n\t\t\tif (els[i].getAttribute) {\n\t\t\t\tvar value = els[i].getAttribute(attribute);\n\t\t\t\tif (value == id) return els[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tgantt.changeLightboxType = function(type){\n\t\tif(this.getLightboxType() == type)\n\t\t\treturn true;\n\t\tgantt._silent_redraw_lightbox(type);\n\t};\n\n\n\tgantt._get_link_type = function (from_start, to_start) {\n\t\tvar type = null;\n\t\tif (from_start && to_start) {\n\t\t\ttype = gantt.config.links.start_to_start;\n\t\t} else if (!from_start && to_start) {\n\t\t\ttype = gantt.config.links.finish_to_start;\n\t\t} else if (!from_start && !to_start) {\n\t\t\ttype = gantt.config.links.finish_to_finish;\n\t\t} else if (from_start && !to_start) {\n\t\t\ttype = gantt.config.links.start_to_finish;\n\t\t}\n\t\treturn type;\n\t};\n\n\tgantt.isLinkAllowed = function (from, to, from_start, to_start) {\n\t\tvar link = null;\n\t\tif (typeof(from) == \"object\") {\n\t\t\tlink = from;\n\t\t} else {\n\t\t\tlink = {source: from, target: to, type: this._get_link_type(from_start, to_start)};\n\t\t}\n\n\t\tif (!link) return false;\n\t\tif (!(link.source && link.target && link.type)) return false;\n\t\tif (link.source == link.target) return false;\n\n\t\tvar res = true;\n\t\t//any custom rules\n\t\tif (this.checkEvent(\"onLinkValidation\"))\n\t\t\tres = this.callEvent(\"onLinkValidation\", [link]);\n\n\t\treturn res;\n\t};\n\n\n\tgantt._correct_dst_change = function(date, prevOffset, step, unit){\n\t\tvar time_unit = helpers.getSecondsInUnit(unit) * step;\n\t\tif(time_unit > 60*60 && time_unit < 60*60*24){\n\t\t\t//correct dst change only if current unit is more than one hour and less than day (days have own checking), e.g. 12h\n\t\t\tvar offsetChanged = date.getTimezoneOffset() - prevOffset;\n\t\t\tif(offsetChanged){\n\t\t\t\tdate = gantt.date.add(date, offsetChanged, \"minute\");\n\t\t\t}\n\t\t}\n\t\treturn date;\n\t};\n\n\tgantt.isSplitTask = function(task){\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task=\"+task+\" of gantt.isSplitTask. Task object was expected\");\n\t\treturn this.$data.tasksStore._isSplitItem(task);\n\t};\n\n\tgantt._is_icon_open_click = function(e) {\n\t\tif (!e)\n\t\t\treturn false;\n\t\tvar target = e.target || e.srcElement;\n\t\tif (!(target && target.className))\n\t\t\treturn false;\n\t\tvar className = domHelpers.getClassName(target);\n\t\tif (className.indexOf(\"gantt_tree_icon\") !== -1 && (className.indexOf(\"gantt_close\") !== -1 || className.indexOf(\"gantt_open\") !== -1))\n\t\t\treturn true;\n\t\treturn false;\n\t};\n\n};","// default locale\n// load locale definition and wrap it into module build-time\nmodule.exports = function (gantt) {\n\tgantt.locale = {\n\tdate: {\n\t\tmonth_full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\tday_full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\tday_short: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n\t},\n\tlabels: {\n\t\tnew_task: \"New task\",\n\t\ticon_save: \"Save\",\n\t\ticon_cancel: \"Cancel\",\n\t\ticon_details: \"Details\",\n\t\ticon_edit: \"Edit\",\n\t\ticon_delete: \"Delete\",\n\t\tconfirm_closing: \"\",//Your changes will be lost, are you sure?\n\t\tconfirm_deleting: \"Task will be deleted permanently, are you sure?\",\n\t\tsection_description: \"Description\",\n\t\tsection_time: \"Time period\",\n\t\tsection_type: \"Type\",\n\n\t\t/* grid columns */\n\t\tcolumn_wbs: \"WBS\",\n\t\tcolumn_text: \"Task name\",\n\t\tcolumn_start_date: \"Start time\",\n\t\tcolumn_duration: \"Duration\",\n\t\tcolumn_add: \"\",\n\n\t\t/* link confirmation */\n\t\tlink: \"Link\",\n\t\tconfirm_link_deleting: \"will be deleted\",\n\t\tlink_start: \" (start)\",\n\t\tlink_end: \" (end)\",\n\n\t\ttype_task: \"Task\",\n\t\ttype_project: \"Project\",\n\t\ttype_milestone: \"Milestone\",\n\n\t\tminutes: \"Minutes\",\n\t\thours: \"Hours\",\n\t\tdays: \"Days\",\n\t\tweeks: \"Week\",\n\t\tmonths: \"Months\",\n\t\tyears: \"Years\",\n\n\t\t/* message popup */\n\t\tmessage_ok: \"OK\",\n\t\tmessage_cancel: \"Cancel\",\n\n\t\t/* constraints */\n\t\tsection_constraint: \"Constraint\",\n\t\tconstraint_type: \"Constraint type\",\n\t\tconstraint_date: \"Constraint date\",\n\t\tasap: \"As Soon As Possible\",\n\t\talap: \"As Late As Possible\",\n\t\tsnet: \"Start No Earlier Than\",\n\t\tsnlt: \"Start No Later Than\",\n\t\tfnet: \"Finish No Earlier Than\",\n\t\tfnlt: \"Finish No Later Than\",\n\t\tmso: \"Must Start On\",\n\t\tmfo: \"Must Finish On\",\n\n\t\t/* resource control */\n\t\tresources_filter_placeholder: \"type to filter\",\n\t\tresources_filter_label: \"hide empty\"\n\t}\n};\n};","module.exports = function(gantt) {\n\n\tgantt.config.touch_drag = 500; //nearly immediate dnd\n\tgantt.config.touch = true;\n\tgantt.config.touch_feedback = true;\n\tgantt.config.touch_feedback_duration = 1;\n\tgantt._prevent_touch_scroll = false;\n\n\n\tgantt._touch_feedback = function () {\n\t\tif (gantt.config.touch_feedback) {\n\t\t\tif (navigator.vibrate)\n\t\t\t\tnavigator.vibrate(gantt.config.touch_feedback_duration);\n\t\t}\n\t};\n\n\tgantt.attachEvent(\"onGanttReady\", gantt.bind(function(){\n\t\tif (this.config.touch != \"force\")\n\t\t\tthis.config.touch = this.config.touch &&\n\t\t\t\t((navigator.userAgent.indexOf(\"Mobile\") != -1) ||\n\t\t\t\t\t(navigator.userAgent.indexOf(\"iPad\") != -1) ||\n\t\t\t\t\t(navigator.userAgent.indexOf(\"Android\") != -1) ||\n\t\t\t\t\t(navigator.userAgent.indexOf(\"Touch\") != -1));\n\n\t\tif (this.config.touch) {\n\n\t\t\tvar touchEventsSupported = true;\n\t\t\ttry {\n\t\t\t\tdocument.createEvent(\"TouchEvent\");\n\t\t\t} catch (e) {\n\t\t\t\ttouchEventsSupported = false;\n\t\t\t}\n\n\t\t\tif (touchEventsSupported) {\n\t\t\t\tthis._touch_events([\"touchmove\", \"touchstart\", \"touchend\"], function (ev) {\n\t\t\t\t\tif (ev.touches && ev.touches.length > 1) return null;\n\t\t\t\t\tif (ev.touches[0])\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttarget: ev.target,\n\t\t\t\t\t\t\tpageX: ev.touches[0].pageX,\n\t\t\t\t\t\t\tpageY: ev.touches[0].pageY,\n\t\t\t\t\t\t\tclientX: ev.touches[0].clientX,\n\t\t\t\t\t\t\tclientY: ev.touches[0].clientY\n\t\t\t\t\t\t};\n\t\t\t\t\telse\n\t\t\t\t\t\treturn ev;\n\t\t\t\t}, function () {\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t} else if (window.navigator.pointerEnabled) {\n\t\t\t\tthis._touch_events([\"pointermove\", \"pointerdown\", \"pointerup\"], function (ev) {\n\t\t\t\t\tif (ev.pointerType == \"mouse\") return null;\n\t\t\t\t\treturn ev;\n\t\t\t\t}, function (ev) {\n\t\t\t\t\treturn (!ev || (ev.pointerType == \"mouse\" ));\n\t\t\t\t});\n\t\t\t} else if (window.navigator.msPointerEnabled) {\n\t\t\t\tthis._touch_events([\"MSPointerMove\", \"MSPointerDown\", \"MSPointerUp\"], function (ev) {\n\t\t\t\t\tif (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\n\t\t\t\t\treturn ev;\n\t\t\t\t}, function (ev) {\n\t\t\t\t\treturn (!ev || ev.pointerType == ev.MSPOINTER_TYPE_MOUSE);\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\t}, gantt));\n\n\n\tfunction getTaskDND(){\n\t\tvar _tasks_dnd;\n\t\tif(gantt.$ui.getView(\"timeline\")){\n\t\t\t_tasks_dnd = gantt.$ui.getView(\"timeline\")._tasks_dnd;\n\t\t}\n\t\treturn _tasks_dnd;\n\t}\n\n\tvar touchHandlers = [];\n\n//we can't use native scrolling, as we need to sync momentum between different parts\n//so we will block native scroll and use the custom one\n//in future we can add custom momentum\n\tgantt._touch_events = function (names, accessor, ignore) {\n\t\t//webkit on android need to be handled separately\n\t\tvar dblclicktime = 0;\n\t\tvar action_mode = false;\n\t\tvar scroll_mode = false;\n\t\tvar action_start = null;\n\t\tvar scroll_state;\n\t\tvar long_tap_timer = null;\n\t\tvar current_target = null;\n\n\n\n\t\tfor(var i = 0; i < touchHandlers.length; i++){\n\t\t\tgantt.eventRemove(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\n\t\t}\n\t\ttouchHandlers = [];\n\n\t\t//touch move\n\t\ttouchHandlers.push([gantt.$container, names[0], function (e) {\n\t\t\tvar _tasks_dnd = getTaskDND();\n\n\t\t\t\tif (ignore(e)) return;\n\n\t\t\t\t//ignore common and scrolling moves\n\t\t\t\tif (!action_mode) return;\n\n\t\t\t\tif (long_tap_timer) clearTimeout(long_tap_timer);\n\n\t\t\t\tvar source = accessor(e);\n\t\t\t\tif (_tasks_dnd && (_tasks_dnd.drag.id || _tasks_dnd.drag.start_drag)) {\n\t\t\t\t\t_tasks_dnd.on_mouse_move(source);\n\t\t\t\t\tif (e.preventDefault)\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.cancelBubble = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (!gantt._prevent_touch_scroll) {\n\t\t\t\t\tif (source && action_start) {\n\t\t\t\t\t\tvar dx = action_start.pageX - source.pageX;\n\t\t\t\t\t\tvar dy = action_start.pageY - source.pageY;\n\t\t\t\t\t\tif (!scroll_mode && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\n\t\t\t\t\t\t\tgantt._touch_scroll_active = scroll_mode = true;\n\t\t\t\t\t\t\tdblclicktime = 0;\n\t\t\t\t\t\t\tscroll_state = gantt.getScrollState();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (scroll_mode) {\n\t\t\t\t\t\t\tgantt.scrollTo(scroll_state.x + dx, scroll_state.y + dy);\n\t\t\t\t\t\t\tvar new_scroll_state = gantt.getScrollState();\n\n\t\t\t\t\t\t\tif ((scroll_state.x != new_scroll_state.x && dy > 2 * dx) ||\n\t\t\t\t\t\t\t\t(scroll_state.y != new_scroll_state.y && dx > 2 * dy )) {\n\t\t\t\t\t\t\t\treturn block_action(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn block_action(e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}]);\n\n\n\t\t//block touch context menu in IE10\n\t\ttouchHandlers.push([this.$container, \"contextmenu\", function (e) {\n\t\t\tif (action_mode)\n\t\t\t\treturn block_action(e);\n\t\t}]);\n\n\t\t//touch start\n\t\ttouchHandlers.push([this.$container, names[1], function (e) {\n\t\t\tif (ignore(e)) return;\n\t\t\tif (e.touches && e.touches.length > 1) {\n\t\t\t\taction_mode = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taction_start = accessor(e);\n\t\t\tif (!gantt._locate_css(action_start, \"gantt_hor_scroll\") && !gantt._locate_css(action_start, \"gantt_ver_scroll\")) {\n\t\t\t\taction_mode = true;\n\t\t\t}\n\t\t\tvar _tasks_dnd = getTaskDND();\n\n\t\t\t//long tap\n\t\t\tlong_tap_timer = setTimeout(function () {\n\t\t\t\tvar taskId = gantt.locate(action_start);\n\t\t\t\tif (_tasks_dnd && (taskId && !gantt._locate_css(action_start, \"gantt_link_control\") && !gantt._locate_css(action_start, \"gantt_grid_data\"))) {\n\t\t\t\t\t_tasks_dnd.on_mouse_down(action_start);\n\n\t\t\t\t\tif (_tasks_dnd.drag && _tasks_dnd.drag.start_drag) {\n\t\t\t\t\t\tcloneTaskRendered(taskId);\n\t\t\t\t\t\t_tasks_dnd._start_dnd(action_start);\n\t\t\t\t\t\tgantt._touch_drag = true;\n\n\t\t\t\t\t\tgantt.refreshTask(taskId);\n\n\t\t\t\t\t\tgantt._touch_feedback();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tlong_tap_timer = null;\n\t\t\t}, gantt.config.touch_drag);\n\t\t}]);\n\n\t\t//touch end\n\t\ttouchHandlers.push([this.$container, names[2], function (e) {\n\t\t\tif (ignore(e)) return;\n\t\t\tif (long_tap_timer) clearTimeout(long_tap_timer);\n\t\t\tgantt._touch_drag = false;\n\t\t\taction_mode = false;\n\t\t\tvar source = accessor(e);\n\n\t\t\tvar _tasks_dnd = getTaskDND();\n\n\t\t\tif(_tasks_dnd)\n\t\t\t\t_tasks_dnd.on_mouse_up(source);\n\n\t\t\tif (current_target) {\n\t\t\t\tgantt.refreshTask(gantt.locate(current_target));\n\t\t\t\tif (current_target.parentNode) {\n\t\t\t\t\tcurrent_target.parentNode.removeChild(current_target);\n\t\t\t\t\tgantt._touch_feedback();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgantt._touch_scroll_active = action_mode = scroll_mode = false;\n\t\t\tcurrent_target = null;\n\n\t\t\t//dbl-tap handling\n\t\t\tif (action_start && dblclicktime) {\n\t\t\t\tvar now = new Date();\n\t\t\t\tif ((now - dblclicktime) < 500) {\n\n\t\t\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\n\t\t\t\t\tmouseEvents.onDoubleClick(action_start);\n\t\t\t\t\tblock_action(e);\n\t\t\t\t} else\n\t\t\t\t\tdblclicktime = now;\n\t\t\t} else {\n\t\t\t\tdblclicktime = new Date();\n\t\t\t}\n\t\t}]);\n\n\t\tfor(var i = 0; i < touchHandlers.length; i++){\n\t\t\tgantt.event(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\n\t\t}\n\n\t\t//common helper, prevents event\n\t\tfunction block_action(e) {\n\t\t\tif (e && e.preventDefault)\n\t\t\t\te.preventDefault();\n\t\t\t(e || event).cancelBubble = true;\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction cloneTaskRendered(taskId) {\n\t\t\tvar renders = gantt._getTaskLayers();\n\t\t\tvar task = gantt.getTask(taskId);\n\t\t\tif (task && gantt.isTaskVisible(taskId)) {\n\t\t\t\tfor (var i = 0; i < renders.length; i++) {\n\t\t\t\t\ttask = renders[i].rendered[taskId];\n\t\t\t\t\tif (task && task.getAttribute(gantt.config.task_attribute) && task.getAttribute(gantt.config.task_attribute) == taskId) {\n\t\t\t\t\t\tvar copy = task.cloneNode(true);\n\t\t\t\t\t\tcurrent_target = task;\n\t\t\t\t\t\trenders[i].rendered[taskId] = copy;\n\t\t\t\t\t\ttask.style.display = \"none\";\n\t\t\t\t\t\tcopy.className += \" gantt_drag_move \";\n\t\t\t\t\t\ttask.parentNode.appendChild(copy);\n\t\t\t\t\t\t//return copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n};","module.exports = function(gantt) {\ngantt.skins[\"contrast_white\"] = {\n\tconfig:{\n\t\tgrid_width:360,\n\t\trow_height: 35,\n\t\tscale_height: 35,\n\t\tlink_line_width:2,\n\t\tlink_arrow_size:6,\n\t\tlightbox_additional_height:75\n\t},\n\t_second_column_width:100,\n\t_third_column_width:80\n};\n\n};","module.exports = function(gantt) {\ngantt.skins[\"contrast_black\"] = {\n\tconfig:{\n\t\tgrid_width:360,\n\t\trow_height: 35,\n\t\tscale_height: 35,\n\t\tlink_line_width:2,\n\t\tlink_arrow_size:6,\n\t\tlightbox_additional_height:75\n\t},\n\t_second_column_width:100,\n\t_third_column_width:80\n};\n\n};","module.exports = function(gantt) {\n\tgantt.skins.material = {\n\t\tconfig: {\n\t\t\tgrid_width: 411,\n\t\t\trow_height: 34,\n\t\t\ttask_height_offset: 6,\n\t\t\tscale_height: 36,\n\t\t\tlink_line_width: 2,\n\t\t\tlink_arrow_size: 6,\n\t\t\tlightbox_additional_height: 80\n\t\t},\n\t\t_second_column_width: 110,\n\t\t_third_column_width: 75,\n\t\t_redefine_lightbox_buttons: {\n\t\t\t\"buttons_left\": [\"dhx_delete_btn\"],\n\t\t\t\"buttons_right\": [\"dhx_save_btn\", \"dhx_cancel_btn\"]\n\t\t}\n\t};\n\n\tgantt.attachEvent(\"onAfterTaskDrag\", function (id) {\n\t\tvar t = gantt.getTaskNode(id);\n\t\tif (t) {\n\t\t\tt.className += \" gantt_drag_animation\";\n\t\t\tsetTimeout(function () {\n\t\t\t\tvar indx = t.className.indexOf(\" gantt_drag_animation\");\n\t\t\t\tif (indx > -1) {\n\t\t\t\t\tt.className = t.className.slice(0, indx);\n\t\t\t\t}\n\t\t\t}, 200);\n\t\t}\n\t});\n\n};","module.exports = function(gantt) {\n\tgantt.skins.broadway = {\n\t\tconfig: {\n\t\t\tgrid_width: 360,\n\t\t\trow_height: 35,\n\t\t\tscale_height: 35,\n\t\t\tlink_line_width: 1,\n\t\t\tlink_arrow_size: 7,\n\t\t\tlightbox_additional_height: 86\n\t\t},\n\t\t_second_column_width: 90,\n\t\t_third_column_width: 80,\n\n\t\t_lightbox_template: \"
 
\",\n\t\t_config_buttons_left: {},\n\t\t_config_buttons_right: {\n\t\t\t\"gantt_delete_btn\": \"icon_delete\",\n\t\t\t\"gantt_save_btn\": \"icon_save\"\n\t\t}\n\t};\n};","module.exports = function(gantt) {\ngantt.skins.terrace = {\n\tconfig:{\n\t\tgrid_width:360,\n\t\trow_height: 35,\n\t\tscale_height: 35,\n\t\tlink_line_width:2,\n\t\tlink_arrow_size:6,\n\t\tlightbox_additional_height:75\n\t},\n\t_second_column_width:90,\n\t_third_column_width:70\t\t\n};\n\n};","module.exports = function(gantt) {\ngantt.skins.meadow = {\n\tconfig:{\n\t\tgrid_width:350,\n\t\trow_height: 27,\n\t\tscale_height: 30,\n\t\tlink_line_width:2,\n\t\tlink_arrow_size:6,\n\t\tlightbox_additional_height:72\n\t},\n\t_second_column_width:95,\n\t_third_column_width:80\n};\n\n};","module.exports = function(gantt) {\ngantt.skins.skyblue = {\n\tconfig:{\n\t\tgrid_width:350,\n\t\trow_height: 27,\n\t\tscale_height: 27,\n\t\tlink_line_width:1,\n\t\tlink_arrow_size:8,\n\t\tlightbox_additional_height:75\n\t},\n\t_second_column_width:95,\n\t_third_column_width:80\n};\n\n};","function _configure(col, data, force) {\n\tfor (var key in data)\n\t\tif (typeof col[key] == \"undefined\" || force)\n\t\t\tcol[key] = data[key];\n}\n\nfunction _get_skin(force, gantt) {\n\tvar skin = gantt.skin;\n\tif (!skin || force) {\n\t\tvar links = document.getElementsByTagName(\"link\");\n\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\tvar res = links[i].href.match(\"dhtmlxgantt_([a-z_]+).css\");\n\t\t\tif (res) {\n\t\t\t\tif (gantt.skins[res[1]] || !skin) {\n\t\t\t\t\tskin = res[1];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgantt.skin = skin || \"terrace\";\n\tvar skinset = gantt.skins[gantt.skin] || gantt.skins[\"terrace\"];\n\n\t//apply skin related settings\n\t_configure(gantt.config, skinset.config, force);\n\n\tvar config = gantt.getGridColumns();\n\tif (config[1] && !gantt.defined(config[1].width))\n\t\tconfig[1].width = skinset._second_column_width;\n\tif (config[2] && !gantt.defined(config[2].width))\n\t\tconfig[2].width = skinset._third_column_width;\n\t\n\tfor (var i=0; i column.width) ? column.min_width : column.width;\n\t\t\t\tcolumn.width = (column.max_width && column.max_width < column.width) ? column.max_width : column.width;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (skinset.config.task_height)\n\t\tgantt.config.task_height = skinset.config.task_height || \"full\"; \n\n\tif (skinset._lightbox_template)\n\t\tgantt._lightbox_template = skinset._lightbox_template;\n\n\tif (skinset._redefine_lightbox_buttons) {\n\t\tgantt.config.buttons_right = skinset._redefine_lightbox_buttons[\"buttons_right\"];\n\t\tgantt.config.buttons_left = skinset._redefine_lightbox_buttons[\"buttons_left\"];\n\t}\n\n\n\tgantt.resetLightbox();\n}\n\nmodule.exports = function(gantt) {\n\tif(!gantt.resetSkin){\n\t\tgantt.resetSkin = function () {\n\t\t\tthis.skin = \"\";\n\t\t\t_get_skin(true, this);\n\t\t};\n\t\tgantt.skins = {};\n\n\t\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\n\t\t\t_get_skin(false, this);\n\t\t});\n\t}\n};","/*\n reuse results of functions that can be recalculated during rendering\n greatly increases the rendering speed when critical path enabled\n Sample - 94_dev/critical_path.html\n\n */\nmodule.exports = function(gantt){\n\ngantt._cached_functions = {\n\tcache: {},\n\tmode: false,\n\tcritical_path_mode: false,\n\twrap_methods : function(methods, object){\n\t\tif(object._prefetch_originals){\n\t\t\tfor(var i in object._prefetch_originals){\n\t\t\t\tobject[i] = object._prefetch_originals[i];\n\t\t\t}\n\t\t}\n\t\tobject._prefetch_originals = {};\n\t\tfor(var i = 0; i < methods.length; i++)\n\t\t\tthis.prefetch(methods[i], object);\n\n\t},\n\tprefetch : function(methodname, host){\n\t\tvar original = host[methodname];\n\t\tif(original){\n\t\t\tvar optimizer = this;\n\n\t\t\thost._prefetch_originals[methodname] = original;\n\t\t\thost[methodname] = function get_prefetched_value(){\n\n\t\t\t\tvar argumentsArray = new Array(arguments.length);\n\t\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\t\targumentsArray[i] = arguments[i];\n\t\t\t\t}\n\n\t\t\t\tif(optimizer.active){\n\t\t\t\t\tvar args = optimizer.get_arguments_hash(Array.prototype.slice.call(argumentsArray));\n\t\t\t\t\tif(!optimizer.cache[methodname]){\n\t\t\t\t\t\toptimizer.cache[methodname] = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tvar cached_values = optimizer.cache[methodname];\n\n\t\t\t\t\tif(optimizer.has_cached_value(cached_values, args)){\n\t\t\t\t\t\treturn optimizer.get_cached_value(cached_values, args);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tvar value = original.apply(this, argumentsArray);\n\t\t\t\t\t\toptimizer.cache_value(cached_values, args, value);\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn original.apply(this, argumentsArray);\n\t\t\t};\n\t\t}\n\t\treturn original;\n\t},\n\tcache_value: function(cache, arguments_hash, value){\n\t\tif(this.is_date(value))\n\t\t\tvalue = new Date(value);\n\t\tcache[arguments_hash] = value;\n\t},\n\thas_cached_value: function(cache, arguments_hash){\n\t\treturn cache.hasOwnProperty(arguments_hash);\n\t},\n\tget_cached_value: function(cache, arguments_hash){\n\t\tvar data = cache[arguments_hash];\n\n\t\t//for cached dates - return copy\n\t\tif(this.is_date(data)){\n\t\t\tdata = new Date(data);\n\t\t}\n\t\treturn data;\n\t},\n\tis_date: function(value){\n\t\treturn (value && value.getUTCDate);\n\t},\n\tget_arguments_hash:function(args){\n\t\tvar values = [];\n\t\tfor(var i = 0; i < args.length; i++){\n\t\t\tvalues.push(this.stringify_argument(args[i]));\n\t\t}\n\t\treturn \"(\" + values.join(\";\") + \")\";\n\t},\n\tstringify_argument: function(value){\n\t\t//expecting task or link, or any other data entries, dates and primitive values\n\t\tvar ret = \"\";\n\t\tif(value.id){\n\t\t\tret = value.id;\n\t\t}else if(this.is_date(value)){\n\t\t\tret = value.valueOf();\n\t\t}else{\n\t\t\tret = value;\n\t\t}\n\t\treturn ret + \"\";\n\t},\n\tactivate: function(){\n\t\tthis.clear();\n\t\tthis.active = true;\n\t},\n\tdeactivate: function(){\n\t\tthis.clear();\n\t\tthis.active = false;\n\t},\n\tclear: function(){\n\t\tthis.cache = {};\n\t},\n\n\tsetup: function(gantt){\n\t\tvar override_gantt = [];\n\n\t\tvar gantt_methods = [\n\t\t\t'_isProjectEnd',\n\t\t\t'_getProjectEnd',\n\t\t\t'_getSlack'\n\t\t];\n\n\n\n\t\tif(this.mode == 'auto'){\n\t\t\tif(gantt.config.highlight_critical_path){\n\t\t\t\toverride_gantt = gantt_methods;\n\t\t\t}\n\t\t}else if(this.mode === true){\n\t\t\toverride_gantt = gantt_methods;\n\t\t}\n\n\t\tthis.wrap_methods(override_gantt, gantt);\n\n\t},\n\tupdate_if_changed: function(gantt){\n\t\tvar changed = (this.critical_path_mode != gantt.config.highlight_critical_path ||\n\t\t\t\t\t\tthis.mode !== gantt.config.optimize_render);\n\t\tif(changed){\n\t\t\tthis.critical_path_mode = gantt.config.highlight_critical_path;\n\t\t\tthis.mode = gantt.config.optimize_render;\n\t\t\tthis.setup(gantt);\n\t\t}\n\t}\n};\n\nfunction activate(){\n\tgantt._cached_functions.update_if_changed(gantt);\n\tif(!gantt._cached_functions.active){\n\t\tgantt._cached_functions.activate();\n\t}\n\treturn true;\n}\ngantt.attachEvent(\"onBeforeGanttRender\", activate);\ngantt.attachEvent(\"onBeforeDataRender\", activate);\ngantt.attachEvent(\"onBeforeSmartRender\", function(){\n\tactivate();\n});\ngantt.attachEvent(\"onBeforeParse\", activate);\ngantt.attachEvent(\"onDataRender\", function(){\n\tgantt._cached_functions.deactivate();\n});\nvar deactivTimeout = null;\ngantt.attachEvent(\"onSmartRender\", function(){\n\tif(deactivTimeout)\n\t\tclearTimeout(deactivTimeout);\n\tdeactivTimeout = setTimeout(function(){\n\t\tgantt._cached_functions.deactivate();\n\t}, 1000);\n});\n\ngantt.attachEvent(\"onBeforeGanttReady\", function(){\n\tgantt._cached_functions.update_if_changed(gantt);\n\treturn true;\n});\n\n};","var __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./select_control\")(gantt);\n\n\tfunction TypeselectControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\n\t\treturn self;\n\t}\n\n\t__extends(TypeselectControl, _super);\n\n\tTypeselectControl.prototype.render = function(sns) {\n\t\tvar types = gantt.config.types,\n\t\t\tlocale = gantt.locale.labels,\n\t\t\toptions = [];\n\n\t\tvar filter = sns.filter || function (typeKey, typeValue) {\n\t\t\tif (!types.placeholder || typeValue !== types.placeholder) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tfor (var i in types) {\n\t\t\tif (!filter(i, types[i]) === false) {\n\t\t\t\toptions.push({ key: types[i], label: locale[\"type_\" + i] });\n\t\t\t}\n\t\t}\n\t\tsns.options = options;\n\n\t\tvar oldOnChange = sns.onchange;\n\t\tsns.onchange = function () {\n\t\t\tgantt.changeLightboxType(this.value);\n\t\t\tif (typeof oldOnChange == 'function') {\n\t\t\t\toldOnChange.apply(this, arguments);\n\t\t\t}\n\t\t};\n\n\t\treturn _super.prototype.render.apply(this, arguments);\n\t};\n\n\treturn TypeselectControl;\n};\n","module.exports = function(gantt) {\n\tvar TypeselectControl = require(\"./lightbox/controls/typeselect_control\")(gantt);\n\n\tgantt.getTaskType = function (type) {\n\t\tvar checkType = type;\n\t\tif(type && typeof type == \"object\"){\n\t\t\tcheckType = type.type;\n\t\t}\n\n\t\tfor (var i in this.config.types) {\n\t\t\tif (this.config.types[i] == checkType) {\n\t\t\t\treturn checkType;\n\t\t\t}\n\t\t}\n\t\treturn gantt.config.types.task;\n\t};\n\n\tgantt.form_blocks.typeselect = new TypeselectControl();\n\n};","module.exports = function(gantt) {\n\n\tgantt._extend_to_optional = function (lightbox_block) {\n\n\t\tvar duration = lightbox_block;\n\t\tvar optional_time = {\n\t\t\trender: duration.render,\n\t\t\tfocus: duration.focus,\n\t\t\tset_value: function (node, value, task, section) {\n\t\t\t\tvar mapping = gantt._resolve_default_mapping(section);\n\t\t\t\tif (!task[mapping.start_date] || (mapping.start_date == \"start_date\" && this._isAllowedUnscheduledTask(task))) {\n\t\t\t\t\toptional_time.disable(node, section);\n\t\t\t\t\tvar val = {};\n\n\t\t\t\t\tfor (var i in mapping) {\n\t\t\t\t\t\t//take default values from the time control from task start/end dates\n\t\t\t\t\t\tval[mapping[i]] = task[i];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn duration.set_value.call(gantt, node, value, val, section);//set default value\n\t\t\t\t} else {\n\t\t\t\t\toptional_time.enable(node, section);\n\t\t\t\t\treturn duration.set_value.call(gantt, node, value, task, section);\n\t\t\t\t}\n\t\t\t},\n\t\t\tget_value: function (node, task, section) {\n\t\t\t\tif (section.disabled) {\n\t\t\t\t\treturn {start_date: null};\n\t\t\t\t} else {\n\t\t\t\t\treturn duration.get_value.call(gantt, node, task, section);\n\t\t\t\t}\n\t\t\t},\n\t\t\tupdate_block: function (node, section) {\n\t\t\t\tgantt.callEvent(\"onSectionToggle\", [gantt._lightbox_id, section]);\n\t\t\t\tnode.style.display = section.disabled ? \"none\" : \"block\";\n\n\t\t\t\tif (section.button) {\n\t\t\t\t\tvar button = node.previousSibling.querySelector(\".gantt_custom_button_label\"),\n\t\t\t\t\t\tlabels = gantt.locale.labels;\n\n\t\t\t\t\tvar button_text = section.disabled ? labels[section.name + \"_enable_button\"] : labels[section.name + \"_disable_button\"];\n\n\t\t\t\t\tbutton.innerHTML = button_text;\n\t\t\t\t}\n\t\t\t\tgantt.resizeLightbox();\n\t\t\t},\n\t\t\tdisable: function (node, section) {\n\t\t\t\tsection.disabled = true;\n\t\t\t\toptional_time.update_block(node, section);\n\n\t\t\t},\n\t\t\tenable: function (node, section) {\n\t\t\t\tsection.disabled = false;\n\t\t\t\toptional_time.update_block(node, section);\n\t\t\t},\n\t\t\tbutton_click: function (index, el, section, container) {\n\t\t\t\tif (gantt.callEvent(\"onSectionButton\", [gantt._lightbox_id, section]) === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar config = gantt._get_typed_lightbox_config()[index];\n\t\t\t\tif (config.disabled) {\n\t\t\t\t\toptional_time.enable(container, config);\n\t\t\t\t} else {\n\t\t\t\t\toptional_time.disable(container, config);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn optional_time;\n\t};\n\n\tgantt.form_blocks.duration_optional = gantt._extend_to_optional(gantt.form_blocks.duration);\n\tgantt.form_blocks.time_optional = gantt._extend_to_optional(gantt.form_blocks.time);\n\n};","var __extends = require(\"../../../utils/extends\");\nvar htmlHelpers = require(\"../../../utils/html_helpers\");\n\nmodule.exports = function (gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction ConstraintControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\t\treturn self;\n\t}\n\n\t__extends(ConstraintControl, _super);\n\n\tfunction isNonTimedConstraint(value) {\n\t\tif (!value || value === gantt.config.constraint_types.ASAP || value === gantt.config.constraint_types.ALAP) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tfunction toggleTimeSelect(timeSelects, typeValue) {\n\t\tvar isNonTimed = isNonTimedConstraint(typeValue);\n\t\tfor (var i = 0; i < timeSelects.length; i++) {\n\t\t\ttimeSelects[i].disabled = isNonTimed;\n\t\t}\n\t}\n\n\tConstraintControl.prototype.render = function (sns) {\n\t\tvar height = (sns.height || 30) + \"px\";\n\t\tvar html = \"
\";\n\n\t\tvar options = [];\n\t\tfor (var i in gantt.config.constraint_types) {\n\t\t\toptions.push({ key: gantt.config.constraint_types[i], label: gantt.locale.labels[gantt.config.constraint_types[i]] });\n\t\t}\n\n\t\tsns.options = sns.options || options;\n\n\t\thtml += \"\" + htmlHelpers.getHtmlSelect(sns.options, [{ key: \"data-type\", value: \"constraint-type\" }]) + \"\";\n\n\t\tvar timeLabel = gantt.locale.labels[\"constraint_date\"] || \"Constraint date\";\n\t\thtml += \"\";\n\n\t\thtml += \"
\";\n\t\treturn html;\n\t};\n\n\tConstraintControl.prototype.set_value = function (node, value, task, config) {\n\t\tvar typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\n\t\tvar timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\n\t\tvar map = config._time_format_order;\n\n\t\tvar mapping = gantt._resolve_default_mapping(config);\n\n\t\tif (!typeSelect._eventsInitialized) {\n\t\t\ttypeSelect.addEventListener(\"change\", function (e) {\n\t\t\t\ttoggleTimeSelect(timeSelects, e.target.value);\n\t\t\t});\n\t\t\ttypeSelect._eventsInitialized = true;\n\t\t}\n\n\t\tvar constraintDate = task[mapping.constraint_date] || new Date();\n\t\tgantt.form_blocks._fill_lightbox_select(timeSelects, 0, constraintDate, map, config);\n\n\t\tvar constraintType = task[mapping.constraint_type] || gantt.getConstraintType(task);\n\t\ttypeSelect.value = constraintType;\n\t\ttoggleTimeSelect(timeSelects, constraintType);\n\t};\n\n\tConstraintControl.prototype.get_value = function (node, task, config) {\n\t\tvar typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\n\t\tvar timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\n\n\t\tvar constraintType = typeSelect.value;\n\t\tvar constraintDate = null;\n\t\tif (!isNonTimedConstraint(constraintType)) {\n\t\t\tconstraintDate = gantt.form_blocks.getTimePickerValue(timeSelects, config);\n\t\t}\n\n\t\treturn {\n\t\t\tconstraint_type: constraintType,\n\t\t\tconstraint_date: constraintDate\n\t\t};\n\t};\n\n\tConstraintControl.prototype.focus = function (node) {\n\t\tgantt._focus(node.querySelector(\"select\"));\n\t};\n\n\treturn ConstraintControl;\n};","var helpers = require(\"../../../utils/helpers\");\nvar domHelpers = require(\"../../../utils/dom_helpers\");\nvar htmlHelpers = require(\"../../../utils/html_helpers\");\nvar __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\tvar localCache = {\n\t\tresources: {},\n\t\tresourcesValues: {},\n\t\tfilter: {},\n\t\teventsInitialized: {}\n\t};\n\n\tgantt.attachEvent(\"onAfterLightbox\", _clearCached);\n\n\tfunction ResourcesControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\n\t\treturn self;\n\t}\n\n\t__extends(ResourcesControl, _super);\n\n\tResourcesControl.prototype.render = function(sns) {\n\t\tvar html;\n\t\tvar resourceFilterPlaceholder = gantt.locale.labels.resources_filter_placeholder || sns.filter_placeholder || \"type to filter\";\n\t\tvar resourceFilterLabel = gantt.locale.labels.resources_filter_label || \"hide empty\";\n\t\t// if set fixed height for this element, then resize of lightbox will be calculated improperly\n\t\thtml = \"\";\n\t\thtml += \"
\";\n\t\thtml += \"
\";\n\t\thtml += \"\";\n\t\treturn html;\n\t};\n\n\tResourcesControl.prototype.set_value = function(node, value, ev, sns) {\n\t\tvar resourcesElement = _setResourcesElement(node, sns);\n\t\tvar htmlResourceRow = \"\";\n\t\tvar data;\n\n\t\t_setFilterCache(node, sns);\n\t\t_initEvents(node, ev, sns, this);\n\n\t\thelpers.forEach(sns.options, function(entry, index) {\n\t\t\tif (sns.unassigned_value == entry.key) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdata = _getDisplayValues(sns, value, entry);\n\n\t\t\thtmlResourceRow += [\n\t\t\t\t\"\"\n\t\t\t].join(\"\");\n\t\t});\n\t\tresourcesElement.innerHTML = htmlResourceRow;\n\t\t// weird element sizes in ie11 when display empty resource list, use zoom to force repaint\n\t\tresourcesElement.style.zoom = \"1\";\n\t\tresourcesElement._offsetSizes = resourcesElement.offsetHeight;\n\t\tresourcesElement.style.zoom = \"\";\n\n\t\tgantt.resizeLightbox();\n\t\tgantt._center_lightbox(gantt.getLightbox());\n\t};\n\n\tResourcesControl.prototype.get_value = function(node, ev, sns) {\n\t\tvar amountElement = _getResourcesElement(sns);\n\t\tvar result = [];\n\t\tvar selectorAdd = _getInputElementSelector(true);\n\t\tvar selectorSub = _getInputElementSelector(false);\n\t\tvar filterCache = _getFilterCache(sns);\n\t\tvar settedValues = ev[sns.map_to] || [];\n\t\tvar settedValuesHash = {};\n\n\t\tif (filterCache.filterApplied && settedValues && settedValues.length > 0) {\n\t\t\thelpers.forEach(settedValues, function(entry) {\n\t\t\t\tsettedValuesHash[String(entry.resource_id)] = entry;\n\t\t\t});\n\t\t}\n\n\t\tvar itemsAdd = amountElement.querySelectorAll(selectorAdd);\n\t\tvar itemsSub = amountElement.querySelectorAll(selectorSub);\n\n\t\tfor (var i = 0; i < itemsSub.length; i++) {\n\t\t\tdelete settedValuesHash[itemsSub[i].getAttribute(\"data-item-id\")];\n\t\t}\n\n\t\tfor (var i = 0; i < itemsAdd.length; i++) {\n\t\t\tvar resourceId = itemsAdd[i].getAttribute(\"data-item-id\");\n\t\t\tvar amount = itemsAdd[i].value.trim();\n\n\t\t\tif (amount !== \"\" && amount !== \"0\") {\n\t\t\t\tdelete settedValuesHash[resourceId];\n\t\t\t\tresult[result.length] = { resource_id: resourceId, value: amount };\n\t\t\t}\n\t\t}\n\n\t\tfor (var item in settedValuesHash) {\n\t\t\tif (!localCache.resourcesValues[sns.id]) {\n\t\t\t\tresult[result.length] = settedValuesHash[item];\n\t\t\t} else {\n\t\t\t\tresult[result.length] = localCache.resourcesValues[sns.id][item] || settedValuesHash[item];\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tResourcesControl.prototype.focus = function(node) {\n\t\tgantt._focus(node.querySelector(\".gantt_resources\"));\n\t};\n\n\tfunction _getAmountInput(item, value, disabled) {\n\t\tvar _attributes;\n\t\tvar innerHTML = \"\";\n\n\t\tif (!item) return;\n\n\t\t_attributes = [{ key: \"data-item-id\", value: item.key }, { key: \"class\", value: \"gantt_resource_amount_input\"}];\n\t\tif (disabled) {\n\t\t\t_attributes.push({ key: \"disabled\", value: \"disabled\" });\n\t\t}\n\n\t\tif (item.options) {\n\t\t\tinnerHTML += htmlHelpers.getHtmlSelect(item.options, _attributes, value);\n\t\t} else {\n\t\t\t_attributes[_attributes.length] = { key: \"value\", value: value || \"\" };\n\t\t\tinnerHTML += htmlHelpers.getHtmlInput(_attributes);\n\t\t}\n\t\treturn innerHTML;\n\t}\n\n\tfunction _getValue(el) {\n\t\treturn el.value.trim();\n\t}\n\n\tfunction _initEvents(node, ev, sns, context) {\n\t\tif (localCache.eventsInitialized[sns.id]) return;\n\n\t\tvar _applyFilter = function(e) {\n\t\t\tvar resultSns;\n\t\t\tvar value = ev[sns.map_to];\n\t\t\tvar query;\n\t\t\tvar hideUnsetted;\n\t\t\tvar input;\n\t\t\tvar checkbox;\n\t\t\tvar filterCache = _getFilterCache(sns);\n\n\t\t\tcheckbox = filterCache.checkbox;\n\t\t\tinput = filterCache.input;\n\n\t\t\thideUnsetted = checkbox.checked;\n\t\t\tquery = _getValue(input);\n\t\t\tresultSns = _getSnsToHideUnsetted(sns, ev, query, hideUnsetted);\n\t\t\tfilterCache.filterApplied = true;\n\t\t\tcontext.form_blocks.resources.set_value(node, value, ev, resultSns);\n\t\t};\n\n\t\tfunction _resourceChangeListener(e) {\n\t\t\tvar target = e.target;\n\t\t\tvar parent;\n\t\t\tvar input;\n\n\t\t\tif (e.target.type === \"checkbox\") {\n\t\t\t\tparent = target.parentNode;\n\t\t\t\tinput = parent.querySelector(_getInputElementSelector());\n\t\t\t\tinput.disabled = !target.checked;\n\t\t\t\tvar itemId = input.getAttribute(\"data-item-id\");\n\t\t\t\tvar row = domHelpers.locateClassName(e, \"gantt_resource_row\");\n\t\t\t\tvar valueInput = row.querySelector(\".gantt_resource_amount_input\");\n\t\t\t\trow.setAttribute(\"data-checked\", target.checked);\n\t\t\t\tif (target.checked) {\n\t\t\t\t\tif (input.nodeName.toLowerCase() === \"select\") {\n\t\t\t\t\t\tgantt.callEvent(\"onResourcesSelectActivated\", [{ target: input }]);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar resId = itemId;\n\t\t\t\t\tvar defaultValue = sns.default_value;\n\t\t\t\t\tsns.options.forEach(function(option){\n\t\t\t\t\t\tif(option.key == resId && option.default_value){\n\t\t\t\t\t\t\tdefaultValue = option.default_value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif(valueInput && !valueInput.value && defaultValue !== undefined){\n\t\t\t\t\t\tvalueInput.value = defaultValue;\n\t\t\t\t\t\t_saveValues(sns, this);\n\t\t\t\t\t}\n\n\t\t\t\t\tif(valueInput.select) {\n\t\t\t\t\t\tvalueInput.select();\n\t\t\t\t\t}else if(valueInput.focus){\n\t\t\t\t\t\tvalueInput.focus();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tif (localCache.resourcesValues[sns.id]) {\n\t\t\t\t\t\tdelete localCache.resourcesValues[sns.id][itemId];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (e.target.type === \"text\" || e.target.nodeName.toLowerCase() === \"select\") {\n\t\t\t\tparent = target.parentNode.parentNode;\n\n\t\t\t\tinput = e.target;\n\t\t\t\t_saveValues(sns, this);\n\t\t\t}\n\t\t}\n\n\t\tfunction _saveValues(sns, domElement) {\n\t\t\tvar selector = _getInputElementSelector();\n\t\t\tvar inputs = domElement.querySelectorAll(selector);\n\n\t\t\tlocalCache.resourcesValues[sns.id] = localCache.resourcesValues[sns.id] || {};\n\n\t\t\tfor (var i = 0; i < inputs.length; i++) {\n\t\t\t\tvar key = inputs[i].getAttribute(\"data-item-id\");\n\n\t\t\t\tif (!inputs[i].disabled) {\n\t\t\t\t\tlocalCache.resourcesValues[sns.id][key] = inputs[i].value;\n\t\t\t\t} else {\n\t\t\t\t\tdelete localCache.resourcesValues[sns.id][key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_applyFilter = helpers.throttle(_applyFilter, 100);\n\n\t\t_getFilterCache(sns).container.addEventListener(\"keyup\", _applyFilter);\n\t\t_getFilterCache(sns).container.addEventListener(\"input\", _applyFilter, true);\n\t\t_getFilterCache(sns).container.addEventListener(\"change\", _applyFilter, true);\n\t\t_getResourcesElement(sns).addEventListener(\"input\", _resourceChangeListener);\n\t\t_getResourcesElement(sns).addEventListener(\"change\", _resourceChangeListener);\n\t\tgantt.attachEvent(\"onResourcesSelectActivated\", gantt.bind(_resourceChangeListener, _getResourcesElement(sns)));\n\t\tlocalCache.eventsInitialized[sns.id] = true;\n\t}\n\n\tfunction _getSnsToHideUnsetted(sns, ev, query, hideUnsetted) {\n\t\tvar comparison;\n\t\tvar resultSns;\n\n\t\tif (!hideUnsetted) {\n\t\t\tif (query === \"\") {// show all\n\t\t\t\treturn sns;\n\t\t\t}\n\n\t\t\tcomparison = function(entry) {// show matching labels only\n\t\t\t\tif (entry.label.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n\t\t\t\t\treturn entry;\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\tvar collection = ev[sns.map_to] || [];\n\n\t\t\tif (!helpers.isArray(collection)) {\n\t\t\t\tcollection = [collection];\n\t\t\t}\n\t\t\t\n\t\t\t// copy section array in order not to modify ev[sns.map_to]\n\t\t\tcollection = collection.slice();\n\n\t\t\tif (collection.length === 0) {//nothing setted\n\t\t\t\tcollection = [];\n\t\t\t\tresultSns = gantt.copy(sns);\n\t\t\t\tresultSns.options = [];\n\t\t\t\tfor (var key in localCache.resourcesValues[sns.id]) {\n\t\t\t\t\tcollection.push({resource_id: key, value: localCache.resourcesValues[sns.id][key]});\n\t\t\t\t}\n\n\t\t\t\tif (collection.length === 0) {\n\t\t\t\t\treturn resultSns;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var key in localCache.resourcesValues[sns.id]) {\n\t\t\t\t\tvar searchResult = helpers.arrayFind(collection, function(entry) {\n\t\t\t\t\t\treturn entry.id == key;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!searchResult) {\n\t\t\t\t\t\tcollection.push({resource_id: key, value: localCache.resourcesValues[sns.id][key]});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar itemIds = {};\n\n\t\t\tfor (var i=0; i < collection.length; i++) {\n\t\t\t\titemIds[collection[i].resource_id] = true;\n\t\t\t}\n\t\t\tcomparison = function(entry) {//show setted and filtered if field is filled\n\t\t\t\tif (itemIds[String(entry.key)] && (query === \"\" || entry.label.toLowerCase().indexOf(query.toLowerCase()) >= 0)) {\n\t\t\t\t\treturn entry;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tresultSns = gantt.copy(sns);\n\t\tresultSns.options = helpers.arrayFilter(resultSns.options, comparison);\n\t\treturn resultSns;\n\t}\n\n\tfunction _getInputElementSelector(isChecked) {\n\t\tif(isChecked === undefined){\n\t\t\treturn \".gantt_resource_amount_input\";\n\t\t}else{\n\t\t\treturn \"[data-checked='\"+(isChecked ? \"true\" : \"false\") + \"'] .gantt_resource_amount_input\";\n\t\t}\n\t}\n\n\tfunction _setResourcesElement(node, sns) {\n\t\tif (!localCache.resources[sns.id]) {\n\t\t\tlocalCache.resources[sns.id] = node.querySelector(\".gantt_resources\");\n\t\t}\n\t\treturn localCache.resources[sns.id];\n\t}\n\n\tfunction _getResourcesElement(sns) {\n\t\treturn localCache.resources[sns.id];\n\t}\n\n\tfunction _setFilterCache(node, sns) {\n\t\tif (!localCache.filter[sns.id]) {\n\t\t\tvar container = node.querySelector(\".gantt_resources_filter\");\n\t\t\tvar input = container.querySelector(\".gantt_resources_filter_input\");\n\t\t\tvar checkbox = container.querySelector(\".switch_unsetted\");\n\n\t\t\tlocalCache.filter[sns.id] = {\n\t\t\t\tcontainer: container,\n\t\t\t\tinput: input,\n\t\t\t\tcheckbox: checkbox,\n\t\t\t\tfilterApplied: false\n\t\t\t};\n\t\t}\n\t\treturn localCache.filter[sns.id];\n\t}\n\n\tfunction _getFilterCache(sns) {\n\t\treturn localCache.filter[sns.id];\n\t}\n\n\tfunction _clearCached() {\n\t\tfor (var key in localCache.filter) {\n\t\t\tlocalCache.filter[key].checkbox.checked = false;\n\t\t\tlocalCache.filter[key].input.value = \"\";\n\t\t\tlocalCache.filter[key].filterApplied = false;\n\t\t}\n\t\tlocalCache.resourcesValues = {};\n\t}\n\n\tfunction _getDisplayValues(sns, value, option) {\n\t\tvar data = {};\n\n\t\tif (value) {\n\t\t\tvar searchResult;\n\n\t\t\tif (helpers.isArray(value)) {\n\t\t\t\tsearchResult = helpers.arrayFind(value, function(val) {\n\t\t\t\t\treturn (val.resource_id == option.key);\n\t\t\t\t});\n\t\t\t} else if (value.resource_id == option.key) {\n\t\t\t\tsearchResult = value;\n\t\t\t}\n\n\t\t\tif (searchResult) {\n\t\t\t\tdata.value = searchResult.value;\n\t\t\t}\n\t\t}\n\t\tif (localCache.resourcesValues[sns.id] && localCache.resourcesValues[sns.id][option.key]) {\n\t\t\tdata.value = localCache.resourcesValues[sns.id][option.key];\n\t\t}\n\t\treturn data;\n\t}\n\n\treturn ResourcesControl;\n};","var __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./select_control\")(gantt);\n\n\tfunction ParentControl() {\n\t\tvar self = _super.apply(this, arguments) || this; \n\n\t\treturn self; \n\t}\n\n\t__extends(ParentControl, _super);\n\n\n\tParentControl.prototype.render = function(sns) {\n\t\treturn _display(sns, false);\n\t};\n\n\tParentControl.prototype.set_value = function(node, value, ev, config) {\n\t\tvar tmpDom = document.createElement(\"div\");\n\t\ttmpDom.innerHTML = _display(config, ev.id);\n\t\tvar newOptions = tmpDom.removeChild(tmpDom.firstChild);\n\t\tnode.onselect = null;\n\t\tnode.parentNode.replaceChild(newOptions, node);\n\n\t\treturn gantt.form_blocks.select.set_value.apply(gantt, [newOptions, value, ev, config]);\n\t};\n\n\tfunction _display(config, item_id) {\n\t\tvar tasks = [],\n\t\t\toptions = [];\n\t\tif (item_id) {\n\t\t\ttasks = gantt.getTaskByTime();\n\t\t\tif (config.allow_root) {\n\t\t\t\ttasks.unshift({id: gantt.config.root_id, text: config.root_label || \"\"});\n\t\t\t}\n\t\t\ttasks = _filter(tasks, config, item_id);\n\t\t\tif (config.sort) {\n\t\t\t\ttasks.sort(config.sort);\n\t\t\t}\n\t\t}\n\t\tvar text = config.template || gantt.templates.task_text;\n\t\tfor (var i = 0; i < tasks.length; i++) {\n\t\t\tvar label = text.apply(gantt, [tasks[i].start_date, tasks[i].end_date, tasks[i]]);\n\t\t\tif (label === undefined) {\n\t\t\t\tlabel = \"\";\n\t\t\t}\n\t\t\toptions.push({\n\t\t\t\tkey: tasks[i].id,\n\t\t\t\tlabel: label\n\t\t\t});\n\t\t}\n\t\tconfig.options = options;\n\t\tconfig.map_to = config.map_to || \"parent\";\n\t\treturn gantt.form_blocks.select.render.apply(this, arguments);\n\t}\n\n\tfunction _filter(options, config, item_id) {\n\t\tvar filter = config.filter || function() {\n\t\t\treturn true;\n\t\t};\n\n\t\toptions = options.slice(0);\n\n\t\tfor (var i = 0; i < options.length; i++) {\n\t\t\tvar task = options[i];\n\t\t\tif (task.id == item_id || gantt.isChildOf(task.id, item_id) || filter(task.id, task) === false) {\n\t\t\t\toptions.splice(i, 1);\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\treturn options;\n\t}\n\treturn ParentControl;\n};","var __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction DurationControl() {\n\t\tvar self = _super.apply(this, arguments) || this; \n\n\t\treturn self; \n\t}\n\n\t__extends(DurationControl, _super);\n\n\tDurationControl.prototype.render = function(sns) {\n\t\tvar time = \"
\" + gantt.form_blocks.getTimePicker.call(this, sns) + \"
\";\n\t\tvar label = gantt.locale.labels[gantt.config.duration_unit + \"s\"];\n\t\tvar singleDate = sns.single_date ? \" style='display:none'\" : \"\";\n\t\tvar readonly = sns.readonly ? \" disabled='disabled'\" : \"\";\n\t\tvar ariaAttr = gantt._waiAria.lightboxDurationInputAttrString(sns);\n\t\tvar duration = \"
\" +\n\t\t\t\"\" +\n\t\t\t\"\" +\n\t\t\t\" \" + label + \" \" +\n\t\t\t\"
\";\n\t\tvar html = \"
\" + time + \" \" + duration + \"
\";\n\t\treturn html;\n\t};\n\n\tDurationControl.prototype.set_value = function(node, value, ev, config) {\n\t\tvar cfg = config;\n\t\tvar s = node.getElementsByTagName(\"select\");\n\t\tvar inps = node.getElementsByTagName(\"input\");\n\t\tvar duration = inps[1];\n\t\tvar btns = [inps[0], inps[2]];\n\t\tvar endspan = node.getElementsByTagName(\"span\")[0];\n\t\tvar map = config._time_format_order;\n\t\tvar mapping;\n\t\tvar start_date;\n\t\tvar end_date;\n\t\tvar duration_val;\n\n\t\tfunction _calc_date() {\n\t\t\tvar start_date = _getStartDate.call(gantt, node, config);\n\t\t\tvar duration = _getDuration.call(gantt, node, config);\n\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: ev});\n\n\t\t\tendspan.innerHTML = gantt.templates.task_date(end_date);\n\t\t}\n\n\t\tfunction _change_duration(step) {\n\t\t\tvar value = duration.value;\n\n\t\t\tvalue = parseInt(value, 10);\n\t\t\tif (window.isNaN(value))\n\t\t\t\tvalue = 0;\n\t\t\tvalue += step;\n\t\t\tif (value < 1) value = 1;\n\t\t\tduration.value = value;\n\t\t\t_calc_date();\n\t\t}\n\n\t\tbtns[0].onclick = gantt.bind(function() {\n\t\t\t_change_duration(-1 * gantt.config.duration_step);\n\t\t}, this);\n\t\tbtns[1].onclick = gantt.bind(function() {\n\t\t\t_change_duration(1 * gantt.config.duration_step);\n\t\t}, this);\n\t\ts[0].onchange = _calc_date;\n\t\ts[1].onchange = _calc_date;\n\t\ts[2].onchange = _calc_date;\n\t\tif (s[3]) s[3].onchange = _calc_date;\n\n\t\tduration.onkeydown = gantt.bind(function(e) {\n\t\t\tvar code; \n\n\t\t\te = e || window.event;\n\t\t\tcode = (e.charCode || e.keyCode || e.which);\n\t\t\t\n\t\t\tif (code == gantt.constants.KEY_CODES.DOWN) {\n\t\t\t\t_change_duration(-1 * gantt.config.duration_step);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (code == gantt.constants.KEY_CODES.UP) {\n\t\t\t\t_change_duration(1 * gantt.config.duration_step);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\twindow.setTimeout(_calc_date, 1);\n\t\t}, this);\n\n\t\tduration.onchange = gantt.bind(_calc_date, this);\n\n\t\tmapping = gantt._resolve_default_mapping(config);\n\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\n\n\t\tstart_date = ev[mapping.start_date] || new Date();\n\t\tend_date = ev[mapping.end_date] || gantt.calculateEndDate({\n\t\t\tstart_date: start_date,\n\t\t\tduration: 1,\n\t\t\ttask: ev\n\t\t});\n\t\tduration_val = Math.round(ev[mapping.duration]) || gantt.calculateDuration({\n\t\t\tstart_date: start_date,\n\t\t\tend_date: end_date,\n\t\t\ttask: ev\n\t\t});\n\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\n\t\tduration.value = duration_val;\n\t\t_calc_date();\n\t};\n\n\tDurationControl.prototype.get_value = function(node, ev, config) {\n\t\tvar startDate = _getStartDate(node, config);\n\t\tvar duration = _getDuration(node, config);\n\t\tvar endDate = gantt.calculateEndDate({start_date: startDate, duration: duration, task: ev});\n\n\t\tif (typeof gantt._resolve_default_mapping(config) == \"string\") {\n\t\t\treturn startDate;\n\t\t}\n\n\t\treturn {\n\t\t\tstart_date: startDate,\n\t\t\tend_date: endDate,\n\t\t\tduration: duration\n\t\t};\n\t};\n\n\tDurationControl.prototype.focus = function(node) {\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\n\t};\n\n\n\tfunction _getStartDate(node, config) {\n\t\tvar s = node.getElementsByTagName(\"select\");\n\t\tvar map = config._time_format_order;\n\t\tvar hours = 0;\n\t\tvar minutes = 0;\n\n\t\tif (gantt.defined(map[3])) {\n\t\t\tvar input = s[map[3]];\n\t\t\tvar time = parseInt(input.value, 10);\n\t\t\tif (isNaN(time) && input.hasAttribute(\"data-value\")) {\n\t\t\t\ttime = parseInt(input.getAttribute(\"data-value\"), 10);\n\t\t\t}\n\n\t\t\thours = Math.floor(time / 60);\n\t\t\tminutes = time % 60;\n\t\t}\n\t\treturn new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\n\t}\n\n\tfunction _getDuration(node) {\n\t\tvar duration = node.getElementsByTagName(\"input\")[1];\n\n\t\tduration = parseInt(duration.value, 10);\n\t\tif (!duration || window.isNaN(duration)) duration = 1;\n\t\tif (duration < 0) duration *= -1;\n\t\treturn duration;\n\t}\n\n\n\treturn DurationControl; \n};","var __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction RadioControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\n\t\treturn self; \n\t}\n\n\t__extends(RadioControl, _super);\n\n\tRadioControl.prototype.render = function(sns) {\n\t\tvar height = (sns.height || \"23\") + \"px\";\n\t\tvar html = \"
\";\n\n\t\tif (sns.options && sns.options.length) {\n\t\t\tfor (var i = 0; i < sns.options.length; i++) {\n\t\t\t\thtml += \"\";\n\t\t\t}\n\t\t}\n\n\t\thtml += \"
\";\n\t\treturn html;\n\t};\n\n\tRadioControl.prototype.set_value = function(node, value, ev, sns) {\n\t\tvar radio;\n\n\t\tif (!sns.options || !sns.options.length) return;\n\n\t\tradio = node.querySelector(\"input[type=radio][value='\" + value + \"']\") ||\n\t\t\t\tnode.querySelector(\"input[type=radio][value='\" + sns.default_value + \"']\");\n\n\t\tif (!radio) return;\n\n\t\tif (!node._dhx_onchange && sns.onchange) {\n\t\t\tnode.onchange = sns.onchange;\n\t\t\tnode._dhx_onchange = true;\n\t\t}\n\n\t\tradio.checked = true;\n\t};\n\n\tRadioControl.prototype.get_value = function(node, ev) {\n\t\tvar result = node.querySelector(\"input[type=radio]:checked\");\n\n\t\treturn result ? result.value : \"\";\n\t};\n\n\tRadioControl.prototype.focus = function(node) {\n\t\tgantt._focus(node.querySelector(\"input[type=radio]\"));\n\t};\n\n\treturn RadioControl;\n};","var helpers = require(\"../../../utils/helpers\");\nvar __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction CheckboxControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\n\t\treturn self; \n\t}\n\n\t__extends(CheckboxControl, _super);\n\n\tCheckboxControl.prototype.render = function(sns) {\n\t\tvar height = (sns.height || \"23\") + \"px\";\n\t\tvar html = \"
\";\n\n\t\tif (sns.options && sns.options.length) {\n\t\t\tfor (var i = 0; i < sns.options.length; i++) {\n\t\t\t\thtml += \"\";\n\t\t\t}\n\t\t}\n\t\thtml += \"
\";\n\t\treturn html;\n\t};\n\n\tCheckboxControl.prototype.set_value = function(node, value, ev, sns) {\n\t\tvar checkboxes = Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]\"));\n\n\t\tif (!node._dhx_onchange && sns.onchange) {\n\t\t\tnode.onchange = sns.onchange;\n\t\t\tnode._dhx_onchange = true;\n\t\t}\n\n\t\thelpers.forEach(checkboxes, function(entry) {\n\t\t\tentry.checked = value ? value.indexOf(entry.value) >= 0 : false;\n\t\t});\n\t};\n\n\tCheckboxControl.prototype.get_value = function(node) {\n\t\treturn helpers.arrayMap(Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]:checked\")), function(entry) {\n\t\t\treturn entry.value;\n\t\t});\n\t};\n\n\tCheckboxControl.prototype.focus = function(node) {\n\t\tgantt._focus(node.querySelector(\"input[type=checkbox]\"));\n\t};\n\n\treturn CheckboxControl;\n};","var __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction TimeControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\n\t\treturn self;\n\t}\n\n\t__extends(TimeControl, _super);\n\n\tTimeControl.prototype.render = function (sns) {\n\t\tvar time = gantt.form_blocks.getTimePicker.call(this, sns);\n\t\tvar html = \"
\";\n\t\thtml += time;\n\n\t\tif (sns.single_date) {\n\t\t\ttime = gantt.form_blocks.getTimePicker.call(this, sns, true);\n\t\t\thtml += \"\";\n\t\t} else {\n\t\t\thtml += \"  –  \";\n\t\t}\n\n\t\thtml += time;\n\t\thtml += \"
\";\n\t\treturn html;\n\t};\n\n\tTimeControl.prototype.set_value = function (node, value, ev, config) {\n\t\tvar cfg = config;\n\t\tvar s = node.getElementsByTagName(\"select\");\n\t\tvar map = config._time_format_order;\n\n\t\tif (cfg.auto_end_date) {\n\t\t\tvar _update_lightbox_select = function () {\n\t\t\t\tstart_date = new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, 0, 0);\n\t\t\t\tend_date = gantt.calculateEndDate({ start_date: start_date, duration: 1, task: ev });\n\t\t\t\tgantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n\t\t\t};\n\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\ts[i].onchange = _update_lightbox_select;\n\t\t\t}\n\t\t}\n\n\t\tvar mapping = gantt._resolve_default_mapping(config);\n\n\t\tif (typeof (mapping) === \"string\") mapping = { start_date: mapping };\n\n\t\tvar start_date = ev[mapping.start_date] || new Date();\n\t\tvar end_date = ev[mapping.end_date] || gantt.calculateEndDate({\n\t\t\tstart_date: start_date,\n\t\t\tduration: 1,\n\t\t\ttask: ev\n\t\t});\n\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\n\t\tgantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n\t};\n\n\tTimeControl.prototype.get_value = function (node, ev, config) {\n\t\tvar selects = node.getElementsByTagName(\"select\");\n\t\tvar startDate;\n\t\tvar map = config._time_format_order;\n\t\tfunction _getEndDate(selects, map, startDate) {\n\t\t\tvar endDate = gantt.form_blocks.getTimePickerValue(selects, config, map.size);\n\n\t\t\tif (endDate <= startDate) {\n\t\t\t\treturn gantt.date.add(startDate, gantt._get_timepicker_step(), \"minute\");\n\t\t\t}\n\t\t\treturn endDate;\n\t\t}\n\n\t\tstartDate = gantt.form_blocks.getTimePickerValue(selects, config);\n\n\t\tif (typeof gantt._resolve_default_mapping(config) === \"string\") {\n\t\t\treturn startDate;\n\t\t}\n\n\t\treturn {\n\t\t\tstart_date: startDate,\n\t\t\tend_date: _getEndDate(selects, map, startDate)\n\t\t};\n\t};\n\n\tTimeControl.prototype.focus = function (node) {\n\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\n\t};\n\n\treturn TimeControl;\n};","var __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction TextareaControl() {\n\t\tvar self = _super.apply(this, arguments) || this;\n\n\t\treturn self; \n\t}\n\n\t__extends(TextareaControl, _super);\n\n\tTextareaControl.prototype.render = function(sns) {\n\t\tvar height = (sns.height || \"130\") + \"px\";\n\t\treturn \"
\";\n\t};\n\n\tTextareaControl.prototype.set_value = function(node, value) {\n\t\tgantt.form_blocks.textarea._get_input(node).value = value || \"\";\n\t};\n\n\tTextareaControl.prototype.get_value = function(node) {\n\t\treturn gantt.form_blocks.textarea._get_input(node).value;\n\t};\n\n\tTextareaControl.prototype.focus = function(node) {\n\t\tvar a = gantt.form_blocks.textarea._get_input(node);\n\t\tgantt._focus(a, true);\n\t};\n\n\tTextareaControl.prototype._get_input = function(node) {\n\t\treturn node.querySelector(\"textarea\");\n\t};\n\n\treturn TextareaControl;\n};","var __extends = require(\"../../../utils/extends\");\n\nmodule.exports = function(gantt) {\n\tvar _super = require(\"./base_control\")(gantt);\n\n\tfunction TemplateControl() {\n\t\tvar self = _super.apply(this, arguments) || this; \n\t\treturn self; \n\t}\n\n\t__extends(TemplateControl, _super);\n\n\n\tTemplateControl.prototype.render = function(sns) {\n\t\tvar height = (sns.height || \"30\") + \"px\";\n\t\treturn \"
\";\n\t};\n\n\tTemplateControl.prototype.set_value = function(node, value) {\n\t\tnode.innerHTML = value || \"\";\n\t};\n\n\tTemplateControl.prototype.get_value = function(node) {\n\t\treturn node.innerHTML || \"\";\n\t};\n\n\tTemplateControl.prototype.focus = function() {};\n\n\treturn TemplateControl;\n};","module.exports = function (gantt) {\n\tvar domHelpers = require(\"../../utils/dom_helpers\");\n\tvar helpers = require(\"../../utils/helpers\");\n\n\tvar TemplateControl = require(\"./controls/template_control\")(gantt);\n\tvar TextareaControl = require(\"./controls/textarea_control\")(gantt);\n\tvar TimeControl = require(\"./controls/time_control\")(gantt);\n\tvar SelectControl = require(\"./controls/select_control\")(gantt);\n\tvar CheckboxControl = require(\"./controls/checkbox_control\")(gantt);\n\tvar RadioControl = require(\"./controls/radio_control\")(gantt);\n\tvar DurationControl = require(\"./controls/duration_control\")(gantt);\n\tvar ParentControl = require(\"./controls/parent_control\")(gantt);\n\tvar ResourcesControl = require(\"./controls/resources_control\")(gantt);\n\tvar ConstraintControl = require(\"./controls/constraint_control\")(gantt);\n\n\n\tgantt._lightbox_methods = {};\n\tgantt._lightbox_template = \"
 
\";\n\n\n\t//TODO: gantt._lightbox_id is changed from data.js and accessed from autoscheduling, check if it can be removed from gantt object\n\tvar state = gantt.$services.getService(\"state\");\n\tstate.registerProvider(\"lightbox\", function () {\n\t\treturn {\n\t\t\tlightbox: gantt._lightbox_id\n\t\t};\n\t});\n\n\tgantt.showLightbox = function (id) {\n\t\tif (!id || gantt.isReadonly(this.getTask(id))) return;\n\t\tif (!this.callEvent(\"onBeforeLightbox\", [id])) return;\n\n\t\tvar task = this.getTask(id);\n\n\t\tvar box = this.getLightbox(this.getTaskType(task.type));\n\t\tthis._center_lightbox(box);\n\t\tthis.showCover();\n\t\tthis._fill_lightbox(id, box);\n\n\t\tthis._waiAria.lightboxVisibleAttr(box);\n\n\t\tthis.callEvent(\"onLightbox\", [id]);\n\t};\n\n\tfunction _is_chart_visible(gantt) {\n\t\tvar timeline = gantt.$ui.getView(\"timeline\");\n\t\tif (timeline && timeline.isVisible()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tgantt._get_timepicker_step = function () {\n\t\tif (this.config.round_dnd_dates) {\n\t\t\tvar step;\n\t\t\tif (_is_chart_visible(this)) {\n\t\t\t\tvar scale = gantt.getScale();\n\t\t\t\tstep = (helpers.getSecondsInUnit(scale.unit) * scale.step) / 60;//timepicker step is measured in minutes\n\t\t\t}\n\n\t\t\tif (!step || step >= 60 * 24) {\n\t\t\t\tstep = this.config.time_step;\n\t\t\t}\n\t\t\treturn step;\n\t\t}\n\t\treturn this.config.time_step;\n\t};\n\tgantt.getLabel = function (property, key) {\n\t\tvar sections = this._get_typed_lightbox_config();\n\t\tfor (var i = 0; i < sections.length; i++) {\n\t\t\tif (sections[i].map_to == property) {\n\t\t\t\tvar options = sections[i].options;\n\t\t\t\tfor (var j = 0; j < options.length; j++) {\n\t\t\t\t\tif (options[j].key == key) {\n\t\t\t\t\t\treturn options[j].label;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"\";\n\t};\n\n\tgantt.updateCollection = function (list_name, collection) {\n\t\tcollection = collection.slice(0);\n\t\tvar list = gantt.serverList(list_name);\n\t\tif (!list) return false;\n\t\tlist.splice(0, list.length);\n\t\tlist.push.apply(list, collection || []);\n\t\tgantt.resetLightbox();\n\t};\n\tgantt.getLightboxType = function () {\n\t\treturn this.getTaskType(this._lightbox_type);\n\t};\n\tgantt.getLightbox = function (type) {\n\t\tvar lightboxDiv;\n\t\tvar fullWidth;\n\t\tvar html;\n\t\tvar sns;\n\t\tvar ds;\n\t\tvar classNames = \"\";\n\n\t\tif (type === undefined)\n\t\t\ttype = this.getLightboxType();\n\n\t\tif (!this._lightbox || this.getLightboxType() != this.getTaskType(type)) {\n\t\t\tthis._lightbox_type = this.getTaskType(type);\n\t\t\tlightboxDiv = document.createElement(\"div\");\n\t\t\tclassNames = \"gantt_cal_light\";\n\t\t\tfullWidth = this._is_lightbox_timepicker();\n\n\t\t\tif (gantt.config.wide_form || fullWidth)\n\t\t\t\tclassNames += \" gantt_cal_light_wide\";\n\n\t\t\tif (fullWidth) {\n\t\t\t\tgantt.config.wide_form = true;\n\t\t\t\tclassNames += \" gantt_cal_light_full\";\n\t\t\t}\n\n\t\t\tlightboxDiv.className = classNames;\n\n\t\t\tlightboxDiv.style.visibility = \"hidden\";\n\t\t\thtml = this._lightbox_template;\n\n\t\t\thtml += getHtmlButtons(this.config.buttons_left);\n\t\t\thtml += getHtmlButtons(this.config.buttons_right, true);\n\n\t\t\tlightboxDiv.innerHTML = html;\n\n\t\t\tgantt._waiAria.lightboxAttr(lightboxDiv);\n\n\t\t\tif (gantt.config.drag_lightbox) {\n\t\t\t\tlightboxDiv.firstChild.onmousedown = gantt._ready_to_dnd;\n\t\t\t\tlightboxDiv.firstChild.onselectstart = function () {\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t\tlightboxDiv.firstChild.style.cursor = \"pointer\";\n\t\t\t\tgantt._init_dnd_events();\n\t\t\t}\n\n\t\t\tdocument.body.insertBefore(lightboxDiv, document.body.firstChild);\n\t\t\tthis._lightbox = lightboxDiv;\n\n\t\t\tsns = this._get_typed_lightbox_config(type);\n\t\t\thtml = this._render_sections(sns);\n\n\t\t\tds = lightboxDiv.querySelector(\"div.gantt_cal_larea\");\n\t\t\tds.innerHTML = html;\n\n\t\t\tbindLabelsToInputs(sns);\n\n\t\t\t//sizes\n\t\t\tthis.resizeLightbox();\n\n\t\t\tthis._init_lightbox_events(this);\n\t\t\tlightboxDiv.style.display = \"none\";\n\t\t\tlightboxDiv.style.visibility = \"visible\";\n\t\t}\n\t\treturn this._lightbox;\n\t};\n\n\tgantt._render_sections = function (sns) {\n\t\tvar html = \"\";\n\t\tfor (var i = 0; i < sns.length; i++) {\n\t\t\tvar block = this.form_blocks[sns[i].type];\n\t\t\tif (!block) continue; //ignore incorrect blocks\n\t\t\tsns[i].id = \"area_\" + this.uid();\n\n\t\t\tvar display = sns[i].hidden ? \" style='display:none'\" : \"\";\n\t\t\tvar button = \"\";\n\t\t\tif (sns[i].button) {\n\t\t\t\tbutton = \"
\" + this.locale.labels[\"button_\" + sns[i].button] + \"
\";\n\t\t\t}\n\t\t\tif (this.config.wide_form) {\n\t\t\t\thtml += \"
\";\n\t\t\t}\n\t\t\thtml += \"
\" + block.render.call(this, sns[i]);\n\t\t\thtml += \"
\";\n\t\t}\n\t\treturn html;\n\t};\n\n\n\tgantt.resizeLightbox = function () {\n\t\tif (!this._lightbox) return;\n\n\t\tvar con = this._lightbox.childNodes[1];\n\t\tcon.style.height = \"0px\";\n\t\tcon.style.height = con.scrollHeight + \"px\";\n\t\tthis._lightbox.style.height = con.scrollHeight + this.config.lightbox_additional_height + \"px\";\n\t\tcon.style.height = con.scrollHeight + \"px\"; //it is incredible , how ugly IE can be\n\t};\n\n\tgantt._center_lightbox = function (box) {\n\t\tif (box) {\n\t\t\tbox.style.display = \"block\";\n\n\t\t\tvar scroll_top = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\t\t\tvar scroll_left = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;\n\n\t\t\tvar view_height = window.innerHeight || document.documentElement.clientHeight;\n\n\t\t\tif (scroll_top) // if vertical scroll on window\n\t\t\t\tbox.style.top = Math.round(scroll_top + Math.max((view_height - box.offsetHeight) / 2, 0)) + \"px\";\n\t\t\telse // vertical scroll on body\n\t\t\t\tbox.style.top = Math.round(Math.max(((view_height - box.offsetHeight) / 2), 0) + 9) + \"px\"; // +9 for compatibility with auto tests\n\n\t\t\t// not quite accurate but used for compatibility reasons\n\t\t\tif (document.documentElement.scrollWidth > document.body.offsetWidth) // if horizontal scroll on the window\n\t\t\t\tbox.style.left = Math.round(scroll_left + (document.body.offsetWidth - box.offsetWidth) / 2) + \"px\";\n\t\t\telse // horizontal scroll on the body\n\t\t\t\tbox.style.left = Math.round((document.body.offsetWidth - box.offsetWidth) / 2) + \"px\";\n\t\t}\n\t};\n\tgantt.showCover = function () {\n\t\tif (this._cover) return;\n\n\t\tthis._cover = document.createElement(\"DIV\");\n\t\tthis._cover.className = \"gantt_cal_cover\";\n\t\tvar _document_height = ((document.height !== undefined) ? document.height : document.body.offsetHeight);\n\t\tvar _scroll_height = ((document.documentElement) ? document.documentElement.scrollHeight : 0);\n\t\tthis._cover.style.height = Math.max(_document_height, _scroll_height) + \"px\";\n\t\tdocument.body.appendChild(this._cover);\n\t};\n\n\n\tgantt._init_lightbox_events = function () {\n\t\tgantt.lightbox_events = {};\n\n\n\t\tgantt.lightbox_events.gantt_save_btn = function () {\n\t\t\tgantt._save_lightbox();\n\t\t};\n\n\n\t\tgantt.lightbox_events.gantt_delete_btn = function () {\n\t\t\tif (!gantt.callEvent(\"onLightboxDelete\", [gantt._lightbox_id]))\n\t\t\t\treturn;\n\n\t\t\tif (gantt.isTaskExists(gantt._lightbox_id)) {\n\t\t\t\tgantt.$click.buttons[\"delete\"](gantt._lightbox_id);\n\t\t\t} else {\n\t\t\t\tgantt.hideLightbox();\n\t\t\t}\n\n\t\t};\n\n\n\t\tgantt.lightbox_events.gantt_cancel_btn = function () {\n\t\t\tgantt._cancel_lightbox();\n\t\t};\n\n\n\t\tgantt.lightbox_events[\"default\"] = function (e, src) {\n\t\t\tif (src.getAttribute(\"data-dhx-button\")) {\n\t\t\t\tgantt.callEvent(\"onLightboxButton\", [src.className, src, e]);\n\t\t\t} else {\n\t\t\t\tvar index, block, sec;\n\n\t\t\t\tvar className = domHelpers.getClassName(src);\n\t\t\t\tif (className.indexOf(\"gantt_custom_button\") != -1) {\n\t\t\t\t\tif (className.indexOf(\"gantt_custom_button_\") != -1) {\n\t\t\t\t\t\tindex = src.parentNode.getAttribute(\"data-index\");\n\t\t\t\t\t\tsec = src;\n\t\t\t\t\t\twhile (sec && domHelpers.getClassName(sec).indexOf(\"gantt_cal_lsection\") == -1) {\n\t\t\t\t\t\t\tsec = sec.parentNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindex = src.getAttribute(\"data-index\");\n\t\t\t\t\t\tsec = src.parentNode;\n\t\t\t\t\t\tsrc = src.firstChild;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar sections = gantt._get_typed_lightbox_config();\n\n\t\t\t\tif (index) {\n\t\t\t\t\tindex = index * 1;\n\t\t\t\t\tblock = gantt.form_blocks[sections[index * 1].type];\n\t\t\t\t\tblock.button_click(index, src, sec, sec.nextSibling);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthis.event(gantt.getLightbox(), \"click\", function (e) {\n\t\t\te = e || window.event;\n\t\t\tvar src = e.target ? e.target : e.srcElement;\n\n\t\t\tvar className = domHelpers.getClassName(src);\n\t\t\tif (!className) {\n\t\t\t\tsrc = src.previousSibling;\n\t\t\t\tclassName = domHelpers.getClassName(src);\n\t\t\t}\n\t\t\tif (src && className && className.indexOf(\"gantt_btn_set\") === 0) {\n\t\t\t\tsrc = src.firstChild;\n\t\t\t\tclassName = domHelpers.getClassName(src);\n\t\t\t}\n\t\t\tif (src && className) {\n\t\t\t\tvar func = gantt.defined(gantt.lightbox_events[src.className]) ? gantt.lightbox_events[src.className] : gantt.lightbox_events[\"default\"];\n\t\t\t\treturn func(e, src);\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\tgantt.getLightbox().onkeydown = function (e) {\n\t\t\tvar event = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\t\t\tvar buttonTarget = domHelpers.getClassName(target).indexOf(\"gantt_btn_set\") > -1;\n\n\t\t\tswitch ((e || event).keyCode) {\n\t\t\t\tcase gantt.constants.KEY_CODES.SPACE: {\n\t\t\t\t\tif ((e || event).shiftKey) return;\n\t\t\t\t\tif (buttonTarget && target.click) {\n\t\t\t\t\t\ttarget.click();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase gantt.keys.edit_save:\n\t\t\t\t\tif ((e || event).shiftKey) return;\n\t\t\t\t\tif (buttonTarget && target.click) {\n\t\t\t\t\t\ttarget.click();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgantt._save_lightbox();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase gantt.keys.edit_cancel:\n\t\t\t\t\tgantt._cancel_lightbox();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t};\n\n\tgantt._cancel_lightbox = function () {\n\t\tvar task = this.getLightboxValues();\n\t\tthis.callEvent(\"onLightboxCancel\", [this._lightbox_id, task.$new]);\n\t\tif (gantt.isTaskExists(task.id) && task.$new) {\n\t\t\tthis.silent(function () {\n\t\t\t\tgantt.$data.tasksStore.removeItem(task.id);\n\t\t\t\tgantt._update_flags(task.id, null);\n\t\t\t});\n\t\t}\n\n\t\tthis.refreshData();\n\t\tthis.hideLightbox();\n\t};\n\n\tgantt._save_lightbox = function () {\n\t\tvar task = this.getLightboxValues();\n\t\tif (!this.callEvent(\"onLightboxSave\", [this._lightbox_id, task, !!task.$new]))\n\t\t\treturn;\n\n\t\tif (task.$new) {\n\t\t\tdelete task.$new;\n\t\t\tthis.addTask(task, task.parent, this.getTaskIndex(task.id));\n\t\t} else if (this.isTaskExists(task.id)) {\n\t\t\tthis.mixin(this.getTask(task.id), task, true);\n\t\t\tthis.refreshTask(task.id);\n\t\t\tthis.updateTask(task.id);\n\t\t}\n\t\tthis.refreshData();\n\n\t\t// TODO: do we need any blockable events here to prevent closing lightbox?\n\t\tthis.hideLightbox();\n\t};\n\n\tgantt._resolve_default_mapping = function (section) {\n\t\tvar mapping = section.map_to;\n\t\tvar time_controls = { \"time\": true, \"time_optional\": true, \"duration\": true, \"duration_optional\": true };\n\t\tif (time_controls[section.type]) {\n\t\t\tif (section.map_to == \"auto\") {\n\t\t\t\tmapping = { start_date: \"start_date\", end_date: \"end_date\", duration: \"duration\" };\n\t\t\t} else if (typeof (section.map_to) === \"string\") {\n\t\t\t\tmapping = { start_date: section.map_to };\n\t\t\t}\n\t\t} else if (section.type === \"constraint\") {\n\t\t\tif (!section.map_to || typeof (section.map_to) === \"string\") {\n\t\t\t\tmapping = { constraint_type: \"constraint_type\", constraint_date: \"constraint_date\" };\n\t\t\t}\n\t\t}\n\n\t\treturn mapping;\n\t};\n\n\tgantt.getLightboxValues = function () {\n\t\tvar task = {};\n\n\t\tif (gantt.isTaskExists(this._lightbox_id)) {\n\t\t\ttask = this.mixin({}, this.getTask(this._lightbox_id));\n\t\t}\n\n\t\tvar sns = this._get_typed_lightbox_config();\n\t\tfor (var i = 0; i < sns.length; i++) {\n\t\t\tvar node = document.getElementById(sns[i].id);\n\t\t\tnode = (node ? node.nextSibling : node);\n\t\t\tvar block = this.form_blocks[sns[i].type];\n\t\t\tif (!block) continue;\n\t\t\tvar res = block.get_value.call(this, node, task, sns[i]);\n\t\t\tvar map_to = gantt._resolve_default_mapping(sns[i]);\n\t\t\tif (typeof map_to == \"string\" && map_to != \"auto\") {\n\t\t\t\ttask[map_to] = res;\n\t\t\t} else if (typeof map_to == \"object\") {\n\t\t\t\tfor (var property in map_to) {\n\t\t\t\t\tif (map_to[property])\n\t\t\t\t\t\ttask[map_to[property]] = res[property];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn task;\n\t};\n\n\n\tgantt.hideLightbox = function () {\n\t\tvar box = this.getLightbox();\n\t\tif (box) box.style.display = \"none\";\n\n\t\tthis._waiAria.lightboxHiddenAttr(box);\n\t\tthis._lightbox_id = null;\n\n\t\tthis.hideCover();\n\t\tthis.callEvent(\"onAfterLightbox\", []);\n\t};\n\tgantt.hideCover = function () {\n\t\tif (this._cover)\n\t\t\tthis._cover.parentNode.removeChild(this._cover);\n\t\tthis._cover = null;\n\t};\n\n\tgantt.resetLightbox = function () {\n\t\tif (gantt._lightbox && !gantt._custom_lightbox)\n\t\t\tgantt._lightbox.parentNode.removeChild(gantt._lightbox);\n\t\tgantt._lightbox = null;\n\t\tgantt.hideCover();\n\t};\n\tgantt._set_lightbox_values = function (data, box) {\n\t\tvar task = data;\n\t\tvar s = box.getElementsByTagName(\"span\");\n\t\tvar lightboxHeader = [];\n\t\tif (gantt.templates.lightbox_header) {\n\t\t\tlightboxHeader.push(\"\");\n\t\t\tlightboxHeader.push(gantt.templates.lightbox_header(task.start_date, task.end_date, task));\n\t\t\ts[1].innerHTML = \"\";\n\t\t\ts[2].innerHTML = gantt.templates.lightbox_header(task.start_date, task.end_date, task);\n\t\t} else {\n\t\t\tlightboxHeader.push(this.templates.task_time(task.start_date, task.end_date, task));\n\t\t\tlightboxHeader.push(String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70)); //IE6 fix\n\t\t\ts[1].innerHTML = this.templates.task_time(task.start_date, task.end_date, task);\n\t\t\ts[2].innerHTML = String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70); //IE6 fix\n\t\t}\n\t\ts[1].innerHTML = lightboxHeader[0];\n\t\ts[2].innerHTML = lightboxHeader[1];\n\n\t\tgantt._waiAria.lightboxHeader(box, lightboxHeader.join(\" \"));\n\n\t\tvar sns = this._get_typed_lightbox_config(this.getLightboxType());\n\t\tfor (var i = 0; i < sns.length; i++) {\n\t\t\tvar section = sns[i];\n\n\t\t\tif (!this.form_blocks[section.type]) {\n\t\t\t\tcontinue;//skip incorrect sections, same check is done during rendering\n\t\t\t}\n\n\n\t\t\tvar node = document.getElementById(section.id).nextSibling;\n\t\t\tvar block = this.form_blocks[section.type];\n\t\t\tvar map_to = gantt._resolve_default_mapping(sns[i]);\n\t\t\tvar value = this.defined(task[map_to]) ? task[map_to] : section.default_value;\n\t\t\tblock.set_value.call(gantt, node, value, task, section);\n\n\t\t\tif (section.focus)\n\t\t\t\tblock.focus.call(gantt, node);\n\t\t}\n\t\tif (data.id)\n\t\t\tgantt._lightbox_id = data.id;\n\t};\n\tgantt._fill_lightbox = function (id, box) {\n\t\tvar task = this.getTask(id);\n\t\tthis._set_lightbox_values(task, box);\n\t};\n\n\n\tgantt.getLightboxSection = function (name) {\n\t\tvar config = this._get_typed_lightbox_config();\n\t\tvar i = 0;\n\t\tfor (i; i < config.length; i++)\n\t\t\tif (config[i].name == name)\n\t\t\t\tbreak;\n\t\tvar section = config[i];\n\t\tif (!section)\n\t\t\treturn null;\n\n\t\tif (!this._lightbox)\n\t\t\tthis.getLightbox();\n\t\tvar header = document.getElementById(section.id);\n\t\tvar node = header.nextSibling;\n\n\t\tvar result = {\n\t\t\tsection: section,\n\t\t\theader: header,\n\t\t\tnode: node,\n\t\t\tgetValue: function (ev) {\n\t\t\t\treturn gantt.form_blocks[section.type].get_value.call(gantt, node, (ev || {}), section);\n\t\t\t},\n\t\t\tsetValue: function (value, ev) {\n\t\t\t\treturn gantt.form_blocks[section.type].set_value.call(gantt, node, value, (ev || {}), section);\n\t\t\t}\n\t\t};\n\n\t\tvar handler = this._lightbox_methods[\"get_\" + section.type + \"_control\"];\n\t\treturn handler ? handler(result) : result;\n\t};\n\n\tgantt._lightbox_methods.get_template_control = function (result) {\n\t\tresult.control = result.node;\n\t\treturn result;\n\t};\n\tgantt._lightbox_methods.get_select_control = function (result) {\n\t\tresult.control = result.node.getElementsByTagName(\"select\")[0];\n\t\treturn result;\n\t};\n\tgantt._lightbox_methods.get_textarea_control = function (result) {\n\t\tresult.control = result.node.getElementsByTagName(\"textarea\")[0];\n\t\treturn result;\n\t};\n\tgantt._lightbox_methods.get_time_control = function (result) {\n\t\tresult.control = result.node.getElementsByTagName(\"select\"); // array\n\t\treturn result;\n\t};\n\n\n\tgantt._init_dnd_events = function () {\n\t\tthis.event(document.body, \"mousemove\", gantt._move_while_dnd);\n\t\tthis.event(document.body, \"mouseup\", gantt._finish_dnd);\n\t\tgantt._init_dnd_events = function () {\n\t\t};\n\t};\n\tgantt._move_while_dnd = function (e) {\n\t\tif (gantt._dnd_start_lb) {\n\t\t\tif (!document.gantt_unselectable) {\n\t\t\t\tdocument.body.className += \" gantt_unselectable\";\n\t\t\t\tdocument.gantt_unselectable = true;\n\t\t\t}\n\t\t\tvar lb = gantt.getLightbox();\n\t\t\tvar now = (e && e.target) ? [e.pageX, e.pageY] : [event.clientX, event.clientY];\n\t\t\tlb.style.top = gantt._lb_start[1] + now[1] - gantt._dnd_start_lb[1] + \"px\";\n\t\t\tlb.style.left = gantt._lb_start[0] + now[0] - gantt._dnd_start_lb[0] + \"px\";\n\t\t}\n\t};\n\tgantt._ready_to_dnd = function (e) {\n\t\tvar lb = gantt.getLightbox();\n\t\tgantt._lb_start = [parseInt(lb.style.left, 10), parseInt(lb.style.top, 10)];\n\t\tgantt._dnd_start_lb = (e && e.target) ? [e.pageX, e.pageY] : [event.clientX, event.clientY];\n\t};\n\tgantt._finish_dnd = function () {\n\t\tif (gantt._lb_start) {\n\t\t\tgantt._lb_start = gantt._dnd_start_lb = false;\n\t\t\tdocument.body.className = document.body.className.replace(\" gantt_unselectable\", \"\");\n\t\t\tdocument.gantt_unselectable = false;\n\t\t}\n\t};\n\n\n\tgantt._focus = function (node, select) {\n\t\tif (node && node.focus) {\n\t\t\tif (gantt.config.touch) {\n\t\t\t\t//do not focus editor, to prevent auto-zoom\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tif (select && node.select) node.select();\n\t\t\t\t\tnode.focus();\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// silent errors\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\n\tgantt.form_blocks = {\n\t\tgetTimePicker: function (sns, hidden) {\n\t\t\tvar html = \"\";\n\t\t\tvar cfg = this.config;\n\t\t\tvar i;\n\t\t\tvar options;\n\t\t\tvar ariaAttrs;\n\t\t\tvar readonly;\n\t\t\tvar display;\n\t\t\tvar settings = {\n\t\t\t\tfirst: 0,\n\t\t\t\tlast: 24 * 60,\n\t\t\t\tdate: this.date.date_part(new Date(gantt._min_date.valueOf())),\n\t\t\t\ttimeFormat: getTimeFormat(sns)\n\t\t\t};\n\n\t\t\t// map: default order => real one\n\t\t\tsns._time_format_order = { size: 0 };\n\n\t\t\tif (gantt.config.limit_time_select) {\n\t\t\t\tsettings.first = 60 * cfg.first_hour;\n\t\t\t\tsettings.last = 60 * cfg.last_hour + 1;\n\t\t\t\tsettings.date.setHours(cfg.first_hour);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < settings.timeFormat.length; i++) {\n\t\t\t\t// adding spaces between selects\n\t\t\t\tif (i > 0) {\n\t\t\t\t\thtml += \" \";\n\t\t\t\t}\n\n\t\t\t\toptions = getHtmlTimePickerOptions(sns, i, settings);\n\n\t\t\t\tif (options) {\n\t\t\t\t\tariaAttrs = gantt._waiAria.lightboxSelectAttrString(settings.timeFormat[i]);\n\t\t\t\t\treadonly = sns.readonly ? \"disabled='disabled'\" : \"\";\n\t\t\t\t\tdisplay = hidden ? \" style='display:none' \" : \"\";\n\t\t\t\t\thtml += \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn html;\n\t\t},\n\t\tgetTimePickerValue: function (selects, config, offset) {\n\t\t\tvar map = config._time_format_order;\n\t\t\tvar needSetTime = gantt.defined(map[3]);\n\n\t\t\tvar time;\n\t\t\tvar hours = 0;\n\t\t\tvar minutes = 0;\n\n\t\t\tvar mapOffset = offset || 0;\n\n\t\t\tif (needSetTime) {\n\t\t\t\ttime = parseInt(selects[map[3] + mapOffset].value, 10);\n\t\t\t\thours = Math.floor(time / 60);\n\t\t\t\tminutes = time % 60;\n\t\t\t}\n\t\t\treturn new Date(selects[map[2] + mapOffset].value, selects[map[1] + mapOffset].value, selects[map[0] + mapOffset].value, hours, minutes);\n\t\t},\n\n\t\t_fill_lightbox_select: function (s, i, d, map) {\n\t\t\ts[i + map[0]].value = d.getDate();\n\t\t\ts[i + map[1]].value = d.getMonth();\n\t\t\ts[i + map[2]].value = d.getFullYear();\n\t\t\tif (gantt.defined(map[3])) {\n\t\t\t\tvar v = d.getHours() * 60 + d.getMinutes();\n\t\t\t\tv = Math.round(v / gantt._get_timepicker_step()) * gantt._get_timepicker_step();\n\t\t\t\tvar input = s[i + map[3]];\n\t\t\t\tinput.value = v;\n\t\t\t\t//in case option not shown\n\t\t\t\tinput.setAttribute(\"data-value\", v);\n\t\t\t}\n\t\t},\n\t\ttemplate: new TemplateControl(),\n\t\ttextarea: new TextareaControl(),\n\t\tselect: new SelectControl(),\n\t\ttime: new TimeControl(),\n\t\tduration: new DurationControl(),\n\t\tparent: new ParentControl(),\n\t\tradio: new RadioControl(),\n\t\tcheckbox: new CheckboxControl(),\n\t\tresources: new ResourcesControl(),\n\t\tconstraint: new ConstraintControl()\n\t};\n\n\tgantt._is_lightbox_timepicker = function () {\n\t\tvar s = this._get_typed_lightbox_config();\n\t\tfor (var i = 0; i < s.length; i++)\n\t\t\tif (s[i].name == \"time\" && s[i].type == \"time\")\n\t\t\t\treturn true;\n\t\treturn false;\n\t};\n\n\tgantt._dhtmlx_confirm = function (message, title, callback, ok) {\n\t\tif (!message)\n\t\t\treturn callback();\n\t\tvar opts = { text: message };\n\t\tif (title)\n\t\t\topts.title = title;\n\t\tif (ok) {\n\t\t\topts.ok = ok;\n\t\t}\n\t\tif (callback) {\n\t\t\topts.callback = function (result) {\n\t\t\t\tif (result)\n\t\t\t\t\tcallback();\n\t\t\t};\n\t\t}\n\t\tgantt.confirm(opts);\n\t};\n\n\tfunction _get_type_name(type_value) {\n\t\tfor (var i in this.config.types) {\n\t\t\tif (this.config.types[i] == type_value) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn \"task\";\n\t}\n\n\tgantt._get_typed_lightbox_config = function (type) {\n\t\tif (type === undefined) {\n\t\t\ttype = this.getLightboxType();\n\t\t}\n\n\t\tvar field = _get_type_name.call(this, type);\n\n\t\tif (gantt.config.lightbox[field + \"_sections\"]) {\n\t\t\treturn gantt.config.lightbox[field + \"_sections\"];\n\t\t} else {\n\t\t\treturn gantt.config.lightbox.sections;\n\t\t}\n\t};\n\n\tgantt._silent_redraw_lightbox = function (type) {\n\t\tvar oldType = this.getLightboxType();\n\n\t\tif (this.getState().lightbox) {\n\t\t\tvar taskId = this.getState().lightbox;\n\t\t\tvar formData = this.getLightboxValues(),\n\t\t\t\ttask = this.copy(this.getTask(taskId));\n\n\t\t\tthis.resetLightbox();\n\n\t\t\tvar updTask = this.mixin(task, formData, true);\n\t\t\tvar box = this.getLightbox(type ? type : undefined);\n\t\t\tthis._center_lightbox(this.getLightbox());\n\t\t\tthis._set_lightbox_values(updTask, box);\n\t\t\tthis.showCover();\n\t\t} else {\n\t\t\tthis.resetLightbox();\n\t\t\tthis.getLightbox(type ? type : undefined);\n\t\t}\n\t\tthis.callEvent(\"onLightboxChange\", [oldType, this.getLightboxType()]);\n\t};\n\n\tfunction bindLabelsToInputs(sns) {\n\t\tvar section;\n\t\tvar label;\n\t\tvar labelBlock;\n\t\tvar inputBlock;\n\t\tvar input;\n\t\tvar i;\n\n\t\tfor (i = 0; i < sns.length; i++) {\n\t\t\tsection = sns[i];\n\t\t\tlabelBlock = document.getElementById(section.id);\n\n\t\t\tif (!section.id || !labelBlock) continue;\n\n\t\t\tlabel = labelBlock.querySelector(\"label\");\n\t\t\tinputBlock = labelBlock.nextSibling;\n\n\t\t\tif (!inputBlock) continue;\n\n\t\t\tinput = inputBlock.querySelector(\"input, select, textarea\");\n\t\t\tif (input) {\n\t\t\t\tinput.id = input.id || \"input_\" + gantt.uid();\n\t\t\t\tsection.inputId = input.id;\n\t\t\t\tlabel.setAttribute(\"for\", section.inputId);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getHtmlButtons(buttons, floatRight) {\n\t\tvar button;\n\t\tvar ariaAttr;\n\t\tvar html = \"\";\n\t\tvar i;\n\n\t\tfor (i = 0; i < buttons.length; i++) {\n\t\t\t// needed to migrate from 'dhx_something' to 'gantt_something' naming in a lightbox\n\t\t\tbutton = gantt.config._migrate_buttons[buttons[i]] ? gantt.config._migrate_buttons[buttons[i]] : buttons[i];\n\n\t\t\tariaAttr = gantt._waiAria.lightboxButtonAttrString(button);\n\t\t\thtml += \"
\" + gantt.locale.labels[button] + \"
\";\n\t\t}\n\t\treturn html;\n\t}\n\n\tfunction getTimeFormat(sns) {\n\t\tvar scale;\n\t\tvar unit;\n\t\tvar result;\n\n\t\tif (sns.time_format) return sns.time_format;\n\n\t\t// default order\n\t\tresult = [\"%d\", \"%m\", \"%Y\"];\n\t\tscale = gantt.getScale();\n\t\tunit = scale ? scale.unit : gantt.config.duration_unit;\n\t\tif (helpers.getSecondsInUnit(unit) < helpers.getSecondsInUnit(\"day\")) {\n\t\t\tresult.push(\"%H:%i\");\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction getHtmlTimePickerOptions(sns, index, settings) {\n\t\tvar range;\n\t\tvar offset;\n\t\tvar start_year;\n\t\tvar end_year;\n\t\tvar i;\n\t\tvar time;\n\t\tvar diff;\n\t\tvar tdate;\n\t\tvar html = \"\";\n\n\t\tswitch (settings.timeFormat[index]) {\n\t\t\tcase \"%Y\":\n\t\t\t\tsns._time_format_order[2] = index;\n\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t//year\n\n\t\t\t\tif (sns.year_range) {\n\t\t\t\t\tif (!isNaN(sns.year_range)) {\n\t\t\t\t\t\trange = sns.year_range;\n\t\t\t\t\t} else if (sns.year_range.push) {\n\t\t\t\t\t\t// if\n\t\t\t\t\t\tstart_year = sns.year_range[0];\n\t\t\t\t\t\tend_year = sns.year_range[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trange = range || 10;\n\t\t\t\toffset = offset || Math.floor(range / 2);\n\t\t\t\tstart_year = start_year || settings.date.getFullYear() - offset;\n\t\t\t\tend_year = end_year || start_year + range;\n\n\t\t\t\tfor (i = start_year; i < end_year; i++)\n\t\t\t\t\thtml += \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"%m\":\n\t\t\t\tsns._time_format_order[1] = index;\n\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t//month\n\t\t\t\tfor (i = 0; i < 12; i++)\n\t\t\t\t\thtml += \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"%d\":\n\t\t\t\tsns._time_format_order[0] = index;\n\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t//days\n\t\t\t\tfor (i = 1; i < 32; i++)\n\t\t\t\t\thtml += \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"%H:%i\":\n\t\t\t\t// var last = 24*60, first = 0;\n\t\t\t\tsns._time_format_order[3] = index;\n\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t//hours\n\t\t\t\ti = settings.first;\n\t\t\t\ttdate = settings.date.getDate();\n\t\t\t\tsns._time_values = [];\n\n\t\t\t\twhile (i < settings.last) {\n\t\t\t\t\ttime = gantt.templates.time_picker(settings.date);\n\t\t\t\t\thtml += \"\";\n\t\t\t\t\tsns._time_values.push(i);\n\t\t\t\t\tsettings.date.setTime(settings.date.valueOf() + gantt._get_timepicker_step() * 60 * 1000);\n\t\t\t\t\tdiff = (settings.date.getDate() != tdate) ? 1 : 0; // moved or not to the next day\n\t\t\t\t\ti = diff * 24 * 60 + settings.date.getHours() * 60 + settings.date.getMinutes();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn html;\n\t}\n};","// all builds except for evaluation version get this mockup\n// the evaluation build gets actual codes\nexport default () => {};","var helpers = require(\"../utils/helpers\");\n\nmodule.exports = function(gantt) {\n\n\tgantt.isUnscheduledTask = function (task) {\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task=\"+task+\" of gantt.isUnscheduledTask. Task object was expected\");\n\t\treturn (!!task.unscheduled || !task.start_date);\n\t};\n\n\tgantt._isAllowedUnscheduledTask = function (task) {\n\t\treturn !!(task.unscheduled && gantt.config.show_unscheduled);\n\t};\n\n\tgantt.isTaskVisible = function (id) {\n\t\tif (!this.isTaskExists(id))\n\t\t\treturn false;\n\n\t\tvar task = this.getTask(id);\n\n\t\tvar taskStart = task.start_date ? task.start_date.valueOf() : null;\n\t\tvar taskEnd = task.end_date ? task.end_date.valueOf() : null;\n\n\t\tif (!(gantt._isAllowedUnscheduledTask(task) || (taskStart && taskEnd && taskStart <= this._max_date.valueOf() && taskEnd >= this._min_date.valueOf()))){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn !!(gantt.getGlobalTaskIndex(id) >= 0);\n\t};\n\n\tgantt._getProjectEnd = function() {\n\t\tif(gantt.config.project_end){\n\t\t\treturn gantt.config.project_end;\n\t\t}else{\n\t\t\tvar tasks = gantt.getTaskByTime();\n\t\t\ttasks = tasks.sort(function (a, b) {\n\t\t\t\treturn +a.end_date > +b.end_date ? 1 : -1;\n\t\t\t});\n\t\t\treturn tasks.length ? tasks[tasks.length - 1].end_date : null;\n\t\t}\n\t};\n\tgantt._getProjectStart = function() {\n\t\tif (gantt.config.project_start) {\n\t\t\treturn gantt.config.project_start;\n\t\t}\n\n\t\t// use timeline start if project start is not specified\n\t\tif (gantt.config.start_date) {\n\t\t\treturn gantt.config.start_date;\n\t\t}\n\t\tif (gantt.getState().min_date) {\n\t\t\treturn gantt.getState().min_date;\n\t\t}\n\n\t\t// earliest task start if neither project start nor timeline are specified\n\t\tvar tasks = gantt.getTaskByTime();\n\t\ttasks = tasks.sort(function (a, b) {\n\t\t\treturn +a.start_date > +b.start_date ? 1 : -1;\n\t\t});\n\t\treturn tasks.length ? tasks[0].start_date : null;\n\t};\n\n\tgantt._defaultTaskDate = function (item, parent_id) {\n\t\tvar parent = (parent_id && parent_id != gantt.config.root_id) ? gantt.getTask(parent_id) : false,\n\t\t\tstartDate = null;\n\t\tif (parent) {\n\t\t\tif(gantt.config.schedule_from_end){\n\t\t\t\tstartDate = gantt.calculateEndDate({\n\t\t\t\t\tstart_date: parent.end_date,\n\t\t\t\t\tduration: - gantt.config.duration_step,\n\t\t\t\t\ttask:item\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tstartDate = parent.start_date;\n\t\t\t}\n\n\t\t} else if(gantt.config.schedule_from_end) {\n\t\t\tstartDate = gantt.calculateEndDate({\n\t\t\t\tstart_date: gantt._getProjectEnd(),\n\t\t\t\tduration: - gantt.config.duration_step,\n\t\t\t\ttask:item\n\t\t\t});\n\t\t} else {\n\t\t\tvar first = gantt.getTaskByIndex(0);\n\t\t\tstartDate = first ? (first.start_date ? first.start_date : (first.end_date ? gantt.calculateEndDate({\n\t\t\t\tstart_date: first.end_date,\n\t\t\t\tduration: -gantt.config.duration_step,\n\t\t\t\ttask:item\n\t\t\t}) : null)) : gantt.config.start_date || gantt.getState().min_date;\n\t\t}\n\t\tgantt.assert(startDate, \"Invalid dates\");\n\t\treturn new Date(startDate);\n\t};\n\n\tgantt._set_default_task_timing = function (task) {\n\t\ttask.start_date = task.start_date || gantt._defaultTaskDate(task, gantt.getParent(task));\n\t\ttask.duration = task.duration || gantt.config.duration_step;\n\t\ttask.end_date = task.end_date || gantt.calculateEndDate(task);\n\t};\n\n\tgantt.createTask = function (item, parent, index) {\n\t\titem = item || {};\n\t\tif (!gantt.defined(item.id))\n\t\t\titem.id = gantt.uid();\n\n\t\tif (!item.start_date) {\n\t\t\titem.start_date = gantt._defaultTaskDate(item, parent);\n\t\t}\n\t\tif (item.text === undefined) {\n\t\t\titem.text = gantt.locale.labels.new_task;\n\t\t}\n\t\tif (item.duration === undefined) {\n\t\t\titem.duration = 1;\n\t\t}\n\n\t\tif (this.isTaskExists(parent)) {\n\t\t\tthis.setParent(item, parent, true);\n\t\t\tvar parentObj = this.getTask(parent);\n\t\t\tparentObj.$open = true;\n\t\t}\n\n\t\tif (!this.callEvent(\"onTaskCreated\", [item])) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this.config.details_on_create) {\n\t\t\titem.$new = true;\n\t\t\tthis.silent(function(){\n\t\t\t\tgantt.$data.tasksStore.addItem(item, index);\n\t\t\t});\n\t\t\tthis.selectTask(item.id);\n\t\t\tthis.refreshData();\n\t\t\tthis.showLightbox(item.id);\n\t\t} else {\n\t\t\tif (this.addTask(item, parent, index)) {\n\t\t\t\tthis.showTask(item.id);\n\t\t\t\tthis.selectTask(item.id);\n\t\t\t}\n\t\t}\n\t\treturn item.id;\n\t};\n\n\tgantt._update_flags = function (oldid, newid) {\n\t\t// TODO: need a proper way to update all possible flags\n\t\tvar store = gantt.$data.tasksStore;\n\t\tif (oldid === undefined) {\n\t\t\tthis._lightbox_id = null;\n\n\t\t\tstore.silent(function(){\n\t\t\t\tstore.unselect();\n\t\t\t});\n\n\t\t\tif (this._tasks_dnd && this._tasks_dnd.drag) {\n\t\t\t\tthis._tasks_dnd.drag.id = null;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this._lightbox_id == oldid)\n\t\t\t\tthis._lightbox_id = newid;\n\n\t\t\t// TODO: probably can be removed\n\t\t\tif (store.getSelectedId() == oldid) {\n\t\t\t\tstore.silent(function(){\n\t\t\t\t\tstore.unselect(oldid);\n\t\t\t\t\tstore.select(newid);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this._tasks_dnd && this._tasks_dnd.drag && this._tasks_dnd.drag.id == oldid) {\n\t\t\t\tthis._tasks_dnd.drag.id = newid;\n\t\t\t}\n\t\t}\n\t};\n\n\tgantt._get_task_timing_mode = function (task, force) {\n\t\tvar task_type = this.getTaskType(task.type);\n\n\t\tvar state = {\n\t\t\ttype: task_type,\n\t\t\t$no_start: false,\n\t\t\t$no_end: false\n\t\t};\n\n\t\tif (!force && task_type == task.$rendered_type) {\n\t\t\tstate.$no_start = task.$no_start;\n\t\t\tstate.$no_end = task.$no_end;\n\t\t\treturn state;\n\t\t}\n\n\t\tif (task_type == this.config.types.project) {\n\t\t\t//project duration is always defined by children duration\n\t\t\tstate.$no_end = state.$no_start = true;\n\t\t} else if (task_type != this.config.types.milestone) {\n\t\t\t//tasks can have fixed duration, children duration(as projects), or one date fixed, and other defined by nested items\n\t\t\tstate.$no_end = !(task.end_date || task.duration);\n\t\t\tstate.$no_start = !task.start_date;\n\n\t\t\tif (this._isAllowedUnscheduledTask(task)) {\n\t\t\t\tstate.$no_end = state.$no_start = false;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t};\n\n\tgantt._init_task_timing = function (task) {\n\t\tvar task_mode = gantt._get_task_timing_mode(task, true);\n\n\t\tvar dirty = task.$rendered_type != task_mode.type;\n\n\t\tvar task_type = task_mode.type;\n\n\t\tif (dirty) {\n\t\t\ttask.$no_start = task_mode.$no_start;\n\t\t\ttask.$no_end = task_mode.$no_end;\n\t\t\ttask.$rendered_type = task_mode.type;\n\t\t}\n\n\t\tif (dirty && task_type != this.config.types.milestone) {\n\t\t\tif (task_type == this.config.types.project) {\n\t\t\t\t//project duration is always defined by children duration\n\t\t\t\tthis._set_default_task_timing(task);\n\t\t\t}\n\t\t}\n\n\t\tif (task_type == this.config.types.milestone) {\n\t\t\ttask.end_date = task.start_date;\n\t\t}\n\t\tif (task.start_date && task.end_date) {\n\t\t\ttask.duration = this.calculateDuration(task);\n\t\t}\n\n\t\tif (!task.end_date) {\n\t\t\ttask.end_date = task.start_date;\n\t\t}\n\n\t\ttask.duration = task.duration || 0;\n\t};\n\n\tgantt.isSummaryTask = function (task) {\n\t\tgantt.assert(task && task instanceof Object, \"Invalid argument task=\"+task+\" of gantt.isSummaryTask. Task object was expected\");\n\n\t\tvar mode = gantt._get_task_timing_mode(task);\n\n\t\treturn !!(mode.$no_end || mode.$no_start);\n\t};\n\n// downward calculation of project duration\n\tgantt.resetProjectDates = function (task) {\n\t\tvar taskMode = this._get_task_timing_mode(task);\n\t\tif (taskMode.$no_end || taskMode.$no_start) {\n\t\t\tvar dates = this.getSubtaskDates(task.id);\n\t\t\tthis._assign_project_dates(task, dates.start_date, dates.end_date);\n\t\t}\n\t};\n\n\tgantt.getSubtaskDuration = function (task_id) {\n\t\tvar res = 0,\n\t\t\troot = task_id !== undefined ? task_id : gantt.config.root_id;\n\n\t\tthis.eachTask(function (child) {\n\t\t\tif (this.getTaskType(child.type) == gantt.config.types.project || this.isUnscheduledTask(child))\n\t\t\t\treturn;\n\n\t\t\tres += child.duration;\n\t\t}, root);\n\n\t\treturn res;\n\t};\n\n\tgantt.getSubtaskDates = function (task_id) {\n\t\tvar min = null,\n\t\t\tmax = null,\n\t\t\troot = task_id !== undefined ? task_id : gantt.config.root_id;\n\n\t\tthis.eachTask(function (child) {\n\t\t\tif (this.getTaskType(child.type) == gantt.config.types.project || this.isUnscheduledTask(child))\n\t\t\t\treturn;\n\n\t\t\tif ((child.start_date && !child.$no_start) && (!min || min > child.start_date.valueOf()))\n\t\t\t\tmin = child.start_date.valueOf();\n\t\t\tif ((child.end_date && !child.$no_end) && (!max || max < child.end_date.valueOf()))\n\t\t\t\tmax = child.end_date.valueOf();\n\t\t}, root);\n\n\t\treturn {\n\t\t\tstart_date: min ? new Date(min) : null,\n\t\t\tend_date: max ? new Date(max) : null\n\t\t};\n\t};\n\n\tgantt._assign_project_dates = function (task, from, to) {\n\t\tvar taskTiming = this._get_task_timing_mode(task);\n\t\tif (taskTiming.$no_start) {\n\t\t\tif (from && from != Infinity) {\n\t\t\t\ttask.start_date = new Date(from);\n\t\t\t} else {\n\t\t\t\ttask.start_date = this._defaultTaskDate(task, this.getParent(task));\n\t\t\t}\n\t\t}\n\n\t\tif (taskTiming.$no_end) {\n\t\t\tif (to && to != -Infinity) {\n\t\t\t\ttask.end_date = new Date(to);\n\t\t\t} else {\n\t\t\t\ttask.end_date = this.calculateEndDate({\n\t\t\t\t\tstart_date: task.start_date,\n\t\t\t\t\tduration: this.config.duration_step,\n\t\t\t\t\ttask: task\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (taskTiming.$no_start || taskTiming.$no_end) {\n\t\t\tthis._init_task_timing(task);\n\t\t}\n\t};\n\n// upward calculation of project duration\n\tgantt._update_parents = function (taskId, silent) {\n\t\tif (!taskId) return;\n\n\t\tvar task = this.getTask(taskId);\n\t\tvar pid = this.getParent(task);\n\n\t\tvar taskTiming = this._get_task_timing_mode(task);\n\n\t\tvar has_changed = true;\n\n\t\tif (taskTiming.$no_start || taskTiming.$no_end) {\n\t\t\tvar oldStart = task.start_date.valueOf(),\n\t\t\t\toldEnd = task.end_date.valueOf();\n\n\t\t\tgantt.resetProjectDates(task);\n\n\t\t\t// not refresh parent projects if dates hasn't changed\n\t\t\tif (oldStart == task.start_date.valueOf() && oldEnd == task.end_date.valueOf()) {\n\t\t\t\thas_changed = false;\n\t\t\t}\n\n\t\t\tif (has_changed && !silent) {\n\t\t\t\tthis.refreshTask(task.id, true);\n\t\t\t}\n\t\t}\n\n\n\t\tif (has_changed && pid && this.isTaskExists(pid)) {\n\t\t\tthis._update_parents(pid, silent);\n\t\t}\n\t};\n\n\tgantt.roundDate = function (config) {\n\t\tvar scale = gantt.getScale();\n\n\t\tif (helpers.isDate(config)) {\n\t\t\tconfig = {\n\t\t\t\tdate: config,\n\t\t\t\tunit: scale ? scale.unit : gantt.config.duration_unit,\n\t\t\t\tstep: scale ? scale.step : gantt.config.duration_step\n\t\t\t};\n\t\t}\n\t\tvar date = config.date,\n\t\t\tsteps = config.step,\n\t\t\tunit = config.unit;\n\n\t\tif(!scale){\n\t\t\treturn date;\n\t\t}\n\n\t\tvar upper, lower, colIndex;\n\t\tif (unit == scale.unit && steps == scale.step &&\n\t\t\t+date >= +scale.min_date && +date <= +scale.max_date) {\n\t\t\t//find date in time scale config\n\t\t\tcolIndex = Math.floor(gantt.columnIndexByDate(date));\n\n\t\t\tif (!scale.trace_x[colIndex]) {\n\t\t\t\tcolIndex -= 1;// end of time scale\n\t\t\t\tif(scale.rtl){\n\t\t\t\t\tcolIndex = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlower = new Date(scale.trace_x[colIndex]);\n\t\t\tupper = gantt.date.add(lower, steps, unit);\n\t\t} else {\n\t\t\tcolIndex = Math.floor(gantt.columnIndexByDate(date));\n\n\t\t\tupper = gantt.date[unit + \"_start\"](new Date(scale.min_date));\n\t\t\tif (scale.trace_x[colIndex]) {\n\t\t\t\tupper = gantt.date[unit + \"_start\"](scale.trace_x[colIndex]);// end of time scale\n\t\t\t}\n\n\t\t\twhile (+upper < +date) {\n\t\t\t\tupper = gantt.date[unit + \"_start\"](gantt.date.add(upper, steps, unit));\n\n\t\t\t\tvar tzOffset = upper.getTimezoneOffset();\n\n\t\t\t\tupper = gantt._correct_dst_change(upper, tzOffset, upper, unit);\n\t\t\t\tif (gantt.date[unit + '_start'])\n\t\t\t\t\tupper = gantt.date[unit + '_start'](upper);\n\t\t\t}\n\n\t\t\tlower = gantt.date.add(upper, -1 * steps, unit);\n\n\t\t}\n\t\tif (config.dir && config.dir == 'future')\n\t\t\treturn upper;\n\t\tif (config.dir && config.dir == 'past')\n\t\t\treturn lower;\n\n\t\tif (Math.abs(date - lower) < Math.abs(upper - date)) {\n\t\t\treturn lower;\n\t\t} else {\n\t\t\treturn upper;\n\t\t}\n\n\t};\n\n\tgantt.correctTaskWorkTime = function (task) {\n\t\tif (gantt.config.work_time && gantt.config.correct_work_time) {\n\t\t\tif (!this.isWorkTime(task.start_date, undefined, task)) {\n\t\t\t\ttask.start_date = this.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\n\t\t\t} else if (!this.isWorkTime(new Date(+task.end_date - 1), undefined, task)) {\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\n\t\t\t}\n\t\t}\n\t};\n\n\tgantt.attachEvent(\"onBeforeTaskUpdate\", function (id, task) {\n\t\tgantt._init_task_timing(task);\n\t\treturn true;\n\t});\n\tgantt.attachEvent(\"onBeforeTaskAdd\", function (id, task) {\n\t\tgantt._init_task_timing(task);\n\t\treturn true;\n\t});\n\n};","// TODO: rework public api for date methods\nvar utils = require(\"../../utils/utils\");\n\nvar createWorktimeFacade = function(calendarManager, timeCalculator){\n\treturn {\n\t\tgetWorkHours: function (date) {\n\t\t\treturn timeCalculator.getWorkHours(date);\n\t\t},\n\n\t\tsetWorkTime: function (config) {\n\t\t\treturn timeCalculator.setWorkTime(config);\n\t\t},\n\n\t\tunsetWorkTime: function (config) {\n\t\t\ttimeCalculator.unsetWorkTime(config);\n\t\t},\n\n\t\tisWorkTime: function (date, unit, task) {\n\t\t\treturn timeCalculator.isWorkTime(date, unit, task);\n\t\t},\n\n\t\tgetClosestWorkTime: function (config) {\n\t\t\treturn timeCalculator.getClosestWorkTime(config);\n\t\t},\n\n\t\tcalculateDuration: function (start_date, end_date, task) {\n\t\t\treturn timeCalculator.calculateDuration(start_date, end_date, task);\n\t\t},\n\t\t_hasDuration: function (start_date, end_date, task) {\n\t\t\treturn timeCalculator.hasDuration(start_date, end_date, task);\n\t\t},\n\n\t\tcalculateEndDate: function (start, duration, unit, task) {\n\t\t\treturn timeCalculator.calculateEndDate(start, duration, unit, task);\n\t\t},\n\n\t\tcreateCalendar: utils.bind(calendarManager.createCalendar, calendarManager),\n\t\taddCalendar: utils.bind(calendarManager.addCalendar, calendarManager),\n\t\tgetCalendar: utils.bind(calendarManager.getCalendar, calendarManager),\n\t\tgetCalendars: utils.bind(calendarManager.getCalendars, calendarManager),\n\t\tgetTaskCalendar: utils.bind(calendarManager.getTaskCalendar, calendarManager),\n\t\tdeleteCalendar: utils.bind(calendarManager.deleteCalendar, calendarManager)\n\t};\n};\n\n\nmodule.exports = { create: createWorktimeFacade };\n","function CalendarDisabledTimeStrategy(gantt, argumentsHelper){\n\tthis.argumentsHelper = argumentsHelper;\n\tthis.$gantt = gantt;\n}\n\nCalendarDisabledTimeStrategy.prototype = {\n\tgetWorkHours: function () {\n\t\treturn [0, 24];\n\t},\n\tsetWorkTime: function () {\n\t\treturn true;\n\t},\n\tunsetWorkTime: function () {\n\t\treturn true;\n\t},\n\tisWorkTime: function () {\n\t\treturn true;\n\t},\n\tgetClosestWorkTime: function (config) {\n\t\tvar config = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\n\t\treturn config.date;\n\t},\n\n\tcalculateDuration: function () {\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n\t\tvar from = config.start_date,\n\t\t\tto = config.end_date,\n\t\t\tunit = config.unit,\n\t\t\tstep = config.step;\n\n\t\treturn this._calculateDuration(from, to, unit, step);\n\t},\n\t_calculateDuration: function (start, end, unit, step) {\n\t\tvar dateHelper = this.$gantt.date;\n\t\tvar fixedUnits = {\n\t\t\t\"week\": 1000 * 60 * 60 * 24 * 7,\n\t\t\t\"day\": 1000 * 60 * 60 * 24,\n\t\t\t\"hour\": 1000 * 60 * 60,\n\t\t\t\"minute\": 1000 * 60\n\t\t};\n\n\t\tvar res = 0;\n\t\tif (fixedUnits[unit]) {\n\t\t\tres = Math.round((end - start) / (step * fixedUnits[unit]));\n\t\t} else {\n\t\t\tvar from = new Date(start),\n\t\t\t\tto = new Date(end);\n\t\t\twhile (from.valueOf() < to.valueOf()) {\n\t\t\t\tres += 1;\n\t\t\t\tfrom = dateHelper.add(from, step, unit);\n\t\t\t}\n\n\t\t\tif (from.valueOf() != end.valueOf()) {\n\t\t\t\tres += (to - from) / (dateHelper.add(from, step, unit) - from);\n\t\t\t}\n\t\t}\n\n\t\treturn Math.round(res);\n\t},\n\n\thasDuration: function () {\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n\t\tvar from = config.start_date,\n\t\t\tto = config.end_date,\n\t\t\tunit = config.unit;\n\n\t\tif (!unit) {\n\t\t\treturn false;\n\t\t}\n\t\tfrom = new Date(from);\n\t\tto = new Date(to);\n\n\t\treturn (from.valueOf() < to.valueOf());\n\t},\n\n\tcalculateEndDate: function () {\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\n\n\t\tvar start = config.start_date,\n\t\t\tduration = config.duration,\n\t\t\tunit = config.unit,\n\t\t\tstep = config.step;\n\n\t\treturn this.$gantt.date.add(start, step * duration, unit);\n\t}\n};\n\nmodule.exports = CalendarDisabledTimeStrategy;","var createArgumentsHelper = require(\"./calendar_arguments_helper\"),\n\tNoWorkTimeCalendar = require(\"./strategy/no_work_time\");\n\nfunction TimeCalculator(calendarManager){\n\n\tthis.$gantt = calendarManager.$gantt;\n\tthis.argumentsHelper = createArgumentsHelper(this.$gantt);\n\tthis.calendarManager = calendarManager;\n\tthis.$disabledCalendar = new NoWorkTimeCalendar(this.$gantt, this.argumentsHelper);\n}\n\nTimeCalculator.prototype = {\n\t_getCalendar: function (config) {\n\t\tvar calendar;\n\t\tif (!this.$gantt.$services.config().work_time) {\n\t\t\tcalendar = this.$disabledCalendar;\n\t\t} else {\n\t\t\tvar manager = this.calendarManager;\n\t\t\tif (config.task) {\n\t\t\t\tcalendar = manager.getTaskCalendar(config.task);\n\t\t\t} else if (config.id) {\n\t\t\t\tcalendar = manager.getTaskCalendar(config);\n\t\t\t} else if (config.calendar) {\n\t\t\t\tcalendar = config.calendar;\n\t\t\t}\n\t\t\tif (!calendar) {\n\t\t\t\tcalendar = manager.getTaskCalendar();\n\t\t\t}\n\t\t}\n\t\treturn calendar;\n\t},\n\n\tgetWorkHours: function (config) {\n\t\tconfig = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\n\n\t\tvar calendar = this._getCalendar(config);\n\n\t\treturn calendar.getWorkHours(config.date);\n\t},\n\n\tsetWorkTime: function (config, calendar) {\n\t\tconfig = this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper, arguments);\n\n\t\tif (!calendar)\n\t\t\tcalendar = this.calendarManager.getCalendar(); // Global\n\t\treturn calendar.setWorkTime(config);\n\t},\n\n\tunsetWorkTime: function (config, calendar) {\n\t\tconfig = this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper, arguments);\n\n\t\tif (!calendar)\n\t\t\tcalendar = this.calendarManager.getCalendar(); // Global\n\t\treturn calendar.unsetWorkTime(config);\n\t},\n\tisWorkTime: function (date, unit, task, calendar) {\n\t\tvar config = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments);\n\n\t\tcalendar = this._getCalendar(config);\n\t\treturn calendar.isWorkTime(config);\n\t},\n\tgetClosestWorkTime: function (config) {\n\t\tconfig = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\n\n\t\tvar calendar = this._getCalendar(config);\n\n\t\treturn calendar.getClosestWorkTime(config);\n\t},\n\n\tcalculateDuration: function () { // start_date_date, end_date, task\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n\n\n\t\tvar calendar = this._getCalendar(config);\n\t\treturn calendar.calculateDuration(config);\n\t},\n\thasDuration: function () {\n\t\tvar config = this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper, arguments);\n\n\t\tvar calendar = this._getCalendar(config);\n\n\t\treturn calendar.hasDuration(config);\n\t},\n\tcalculateEndDate: function (config) { // start_date, duration, unit, task\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\n\n\t\tvar calendar = this._getCalendar(config);\n\t\treturn calendar.calculateEndDate(config);\n\t}\n};\n\nmodule.exports = TimeCalculator;\n\n","import { IWorkUnitCache } from \"./workunit_cache_interface\";\n\nexport class WorkUnitsObjectCache implements IWorkUnitCache {\n\tprivate _cache: any;\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tgetItem(unit: string, timestamp: string): number|boolean {\n\t\tconst cache = this._cache;\n\t\tif (cache && cache[unit]) {\n\t\t\tconst units = cache[unit];\n\n\t\t\tif (units[timestamp] !== undefined) {\n\t\t\t\treturn units[timestamp];\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\tsetItem(unit: string, timestamp: string, value: boolean): void {\n\t\tif (!unit || !timestamp) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cache = this._cache;\n\n\t\tif (!cache) {\n\t\t\treturn;\n\t\t}\n\t\tif (!cache[unit]) {\n\t\t\tcache[unit] = {};\n\t\t}\n\t\tcache[unit][timestamp] = value;\n\t}\n\tclear(): void{\n\t\tthis._cache = {};\n\t}\n}","\n\nimport { IWorkUnitCache } from \"./workunit_cache_interface\";\n\nexport class WorkUnitsMapCache implements IWorkUnitCache {\n\tprivate _cache: Map>;\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tgetItem(unit: string, timestamp: string): number|boolean {\n\t\tif (this._cache.has(unit)) {\n\t\t\tconst unitCache = this._cache.get(unit);\n\t\t\tif (unitCache.has(timestamp)) {\n\t\t\t\treturn unitCache.get(timestamp);\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\tsetItem(unit: string, timestamp: string, value: boolean): void {\n\t\tif (!unit || !timestamp) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cache = this._cache;\n\n\t\tlet unitCache;\n\t\tif (!cache.has(unit)) {\n\t\t\tunitCache = new Map();\n\t\t\tcache.set(unit, unitCache);\n\t\t} else {\n\t\t\tunitCache = cache.get(unit);\n\t\t}\n\t\tunitCache.set(timestamp, value);\n\t}\n\tclear(): void{\n\t\tthis._cache = new Map>();\n\t}\n}","import { IWorkUnitCache } from \"./workunit_cache_interface\";\nimport { WorkUnitsMapCache } from \"./workunit_map_cache\";\nimport { WorkUnitsObjectCache } from \"./workunit_object_cache\";\n\nexport function createCacheObject(): IWorkUnitCache {\n\n\t// worktime hash is on the hot path,\n\t// Map seems to work faster than plain array, use it whenever possible\n\tif (typeof Map !== \"undefined\") {\n\t\treturn new WorkUnitsMapCache();\n\t} else {\n\t\treturn new WorkUnitsObjectCache();\n\t}\n}","var cacheFactory = require(\"./work_unit_cache\"),\n\tutils = require(\"../../../utils/utils\");\n\nfunction CalendarWorkTimeStrategy(gantt, argumentsHelper){\n\tthis.argumentsHelper = argumentsHelper;\n\tthis.$gantt = gantt;\n\tthis._workingUnitsCache = cacheFactory.createCacheObject();\n}\n\nCalendarWorkTimeStrategy.prototype = {\n\tunits: [\n\t\t\"year\",\n\t\t\"month\",\n\t\t\"week\",\n\t\t\"day\",\n\t\t\"hour\",\n\t\t\"minute\"\n\t],\n\t// cache previously calculated worktime\n\t_getUnitOrder: function (unit) {\n\t\tfor (var i = 0, len = this.units.length; i < len; i++) {\n\t\t\tif (this.units[i] == unit)\n\t\t\t\treturn i;\n\t\t}\n\t},\n\t_timestamp: function (settings) {\n\n\t\tvar timestamp = null;\n\t\tif ((settings.day || settings.day === 0)) {\n\t\t\ttimestamp = settings.day;\n\t\t} else if (settings.date) {\n\t\t\t// store worktime datestamp in utc so it could be recognized in different timezones (e.g. opened locally and sent to the export service in different timezone)\n\t\t\ttimestamp = Date.UTC(settings.date.getFullYear(), settings.date.getMonth(), settings.date.getDate());\n\t\t}\n\t\treturn timestamp;\n\t},\n\t_checkIfWorkingUnit: function (date, unit, order) {\n\t\tif (order === undefined) {\n\t\t\torder = this._getUnitOrder(unit);\n\t\t}\n\n\t\t// disable worktime check for custom time units\n\t\tif (order === undefined) {\n\t\t\treturn true;\n\t\t}\n\t\tif (order) {\n\t\t\t//check if bigger time unit is a work time (hour < day < month...)\n\t\t\t//i.e. don't check particular hour if the whole day is marked as not working\n\t\t\tif (!this._isWorkTime(date, this.units[order - 1], order - 1))\n\t\t\t\treturn false;\n\t\t}\n\t\tif (!this[\"_is_work_\" + unit])\n\t\t\treturn true;\n\t\treturn this[\"_is_work_\" + unit](date);\n\t},\n\t//checkings for particular time units\n\t//methods for month-year-week can be defined, otherwise always return 'true'\n\t_is_work_day: function (date) {\n\t\tvar val = this._getWorkHours(date);\n\n\t\tif (val instanceof Array) {\n\t\t\treturn val.length > 0;\n\t\t}\n\t\treturn false;\n\t},\n\t_is_work_hour: function (date) {\n\t\tvar hours = this._getWorkHours(date); // [7,12] or []\n\t\tvar hour = date.getHours();\n\t\tfor (var i = 0; i < hours.length; i += 2) {\n\t\t\tif (hours[i + 1] === undefined) {\n\t\t\t\treturn hours[i] == hour;\n\t\t\t} else {\n\t\t\t\tif (hour >= hours[i] && hour < hours[i + 1])\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\t_internDatesPull: {},\n\t_nextDate: function (start, unit, step) {\n\t\tvar dateHelper = this.$gantt.date;\n\t\treturn dateHelper.add(start, step, unit);\n\n\t\t/*var start_value = +start,\n\t\t\tkey = unit + \"_\" + step;\n\t\tvar interned = this._internDatesPull[key];\n\t\tif(!interned){\n\t\t\tinterned = this._internDatesPull[key] = {};\n\t\t}\n\t\tvar calculated;\n\t\tif(!interned[start_value]){\n\t\t\tinterned[start_value] = calculated = dateHelper.add(start, step, unit);\n\t\t\t//interned[start_value] = dateHelper.add(start, step, unit);\n\t\t}\n\t\treturn calculated || interned[start_value];*/\n\t},\n\t_getWorkUnitsBetweenGeneric: function (from, to, unit, step) {\n\t\tvar dateHelper = this.$gantt.date;\n\t\tvar start = new Date(from),\n\t\t\tend = new Date(to);\n\t\tstep = step || 1;\n\t\tvar units = 0;\n\n\n\t\tvar next = null;\n\t\tvar stepStart,\n\t\t\tstepEnd;\n\n\t\t// calculating decimal durations, i.e. 2016-09-20 00:05:00 - 2016-09-20 01:00:00 ~ 0.95 instead of 1\n\t\t// and also 2016-09-20 00:00:00 - 2016-09-20 00:05:00 ~ 0.05 instead of 1\n\t\t// durations must be rounded later\n\t\tvar checkFirst = false;\n\t\tstepStart = dateHelper[unit + \"_start\"](new Date(start));\n\t\tif (stepStart.valueOf() != start.valueOf()) {\n\t\t\tcheckFirst = true;\n\t\t}\n\t\tvar checkLast = false;\n\t\tstepEnd = dateHelper[unit + \"_start\"](new Date(to));\n\t\tif (stepEnd.valueOf() != to.valueOf()) {\n\t\t\tcheckLast = true;\n\t\t}\n\n\t\tvar isLastStep = false;\n\t\twhile (start.valueOf() < end.valueOf()) {\n\t\t\tnext = this._nextDate(start, unit, step);\n\t\t\tisLastStep = (next.valueOf() > end.valueOf());\n\n\t\t\tif (this._isWorkTime(start, unit)) {\n\t\t\t\tif (checkFirst || (checkLast && isLastStep)) {\n\t\t\t\t\tstepStart = dateHelper[unit + \"_start\"](new Date(start));\n\t\t\t\t\tstepEnd = dateHelper.add(stepStart, step, unit);\n\t\t\t\t}\n\n\t\t\t\tif (checkFirst) {\n\t\t\t\t\tcheckFirst = false;\n\t\t\t\t\tnext = this._nextDate(stepStart, unit, step);\n\t\t\t\t\tunits += ((stepEnd.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf()));\n\t\t\t\t} else if (checkLast && isLastStep) {\n\t\t\t\t\tcheckLast = false;\n\t\t\t\t\tunits += ((end.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf()));\n\n\t\t\t\t} else {\n\t\t\t\t\tunits++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstart = next;\n\t\t}\n\t\treturn units;\n\t},\n\n\t_getMinutesPerDay: function (date) {\n\t\t// current api doesn't allow setting working minutes, so use hardcoded 60 minutes per hour\n\t\treturn this._getHoursPerDay(date) * 60;\n\t},\n\t_getHoursPerDay: function (date) {\n\t\tvar hours = this._getWorkHours(date);\n\t\tvar res = 0;\n\t\tfor (var i = 0; i < hours.length; i += 2) {\n\t\t\tres += ((hours[i + 1] - hours[i]) || 0);\n\t\t}\n\t\treturn res;\n\t},\n\t_getWorkUnitsForRange: function (from, to, unit, step) {\n\t\tvar total = 0;\n\t\tvar start = new Date(from),\n\t\t\tend = new Date(to);\n\n\t\tvar getUnitsPerDay;\n\t\tif (unit == \"minute\") {\n\t\t\tgetUnitsPerDay = utils.bind(this._getMinutesPerDay, this);\n\t\t} else {\n\t\t\tgetUnitsPerDay = utils.bind(this._getHoursPerDay, this);\n\t\t}\n\n\t\twhile (start.valueOf() < end.valueOf()) {\n\t\t\tif (this._isWorkTime(start, \"day\")) {\n\t\t\t\ttotal += getUnitsPerDay(start);\n\t\t\t}\n\t\t\tstart = this._nextDate(start, \"day\", 1);\n\t\t}\n\n\t\treturn total / step;\n\t},\n\n\t// optimized method for calculating work units duration of large time spans\n\t// implemented for hours and minutes units, bigger time units don't benefit from the optimization so much\n\t_getWorkUnitsBetweenQuick: function (from, to, unit, step) {\n\t\tvar start = new Date(from),\n\t\t\tend = new Date(to);\n\t\tstep = step || 1;\n\n\t\tvar firstDayStart = new Date(start);\n\t\tvar firstDayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(start)), 1, \"day\");\n\n\t\tif (end.valueOf() <= firstDayEnd.valueOf()) {\n\t\t\treturn this._getWorkUnitsBetweenGeneric(from, to, unit, step);\n\t\t} else {\n\n\t\t\tvar lastDayStart = this.$gantt.date.day_start(new Date(end));\n\t\t\tvar lastDayEnd = end;\n\n\t\t\tvar startPart = this._getWorkUnitsBetweenGeneric(firstDayStart, firstDayEnd, unit, step);\n\t\t\tvar endPart = this._getWorkUnitsBetweenGeneric(lastDayStart, lastDayEnd, unit, step);\n\n\t\t\tvar rangePart = this._getWorkUnitsForRange(firstDayEnd, lastDayStart, unit, step);\n\t\t\tvar total = startPart + rangePart + endPart;\n\n\t\t\treturn total;\n\t\t}\n\t},\n\n\t_getCalendar: function () {\n\t\treturn this.worktime;\n\t},\n\t_setCalendar: function (settings) {\n\t\tthis.worktime = settings;\n\t},\n\n\t_tryChangeCalendarSettings: function (payload) {\n\t\tvar backup = JSON.stringify(this._getCalendar());\n\t\tpayload();\n\t\tif (this._isEmptyCalendar(this._getCalendar())) {\n\t\t\tthis.$gantt.assert(false, \"Invalid calendar settings, no worktime available\");\n\t\t\tthis._setCalendar(JSON.parse(backup));\n\t\t\tthis._workingUnitsCache.clear();\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\n\t},\n\n\t_isEmptyCalendar: function (settings) {\n\t\tvar result = false,\n\t\t\tdatesArray = [],\n\t\t\tisFullWeekSet = true;\n\t\tfor (var i in settings.dates) {\n\t\t\tresult |= !!settings.dates[i];\n\t\t\tdatesArray.push(i);\n\t\t}\n\n\t\tvar checkFullArray = [];\n\t\tfor (var i = 0; i < datesArray.length; i++) {\n\t\t\tif (datesArray[i] < 10) {\n\t\t\t\tcheckFullArray.push(datesArray[i]);\n\t\t\t}\n\t\t}\n\t\tcheckFullArray.sort();\n\n\t\tfor (var i = 0; i < 7; i++) {\n\t\t\tif (checkFullArray[i] != i)\n\t\t\t\tisFullWeekSet = false;\n\t\t}\n\t\tif (isFullWeekSet)\n\t\t\treturn !result;\n\t\treturn !(result || !!settings.hours); // can still return false if separated dates are set to true\n\t},\n\n\tgetWorkHours: function () {\n\t\tvar config = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\n\t\treturn this._getWorkHours(config.date);\n\t},\n\t_getWorkHours: function (date) {\n\t\tvar t = this._timestamp({date: date});\n\t\tvar hours = true;\n\t\tvar calendar = this._getCalendar();\n\t\tif (calendar.dates[t] !== undefined) {\n\t\t\thours = calendar.dates[t];//custom day\n\t\t} else if (calendar.dates[date.getDay()] !== undefined) {\n\t\t\thours = calendar.dates[date.getDay()];//week day\n\t\t}\n\t\tif (hours === true) {\n\t\t\treturn calendar.hours;\n\t\t} else if (hours) {\n\t\t\treturn hours;\n\t\t}\n\t\treturn [];\n\t},\n\n\tsetWorkTime: function (settings) {\n\t\treturn this._tryChangeCalendarSettings(utils.bind(function () {\n\t\t\tvar hours = settings.hours !== undefined ? settings.hours : true;\n\t\t\tvar timestamp = this._timestamp(settings);\n\t\t\tif (timestamp !== null) {\n\t\t\t\tthis._getCalendar().dates[timestamp] = hours;\n\t\t\t} else {\n\t\t\t\tthis._getCalendar().hours = hours;\n\t\t\t}\n\t\t\tthis._workingUnitsCache.clear();\n\t\t}, this));\n\t},\n\n\tunsetWorkTime: function (settings) {\n\t\treturn this._tryChangeCalendarSettings(utils.bind(function () {\n\t\t\tif (!settings) {\n\t\t\t\tthis.reset_calendar();\n\t\t\t} else {\n\n\t\t\t\tvar timestamp = this._timestamp(settings);\n\n\t\t\t\tif (timestamp !== null) {\n\t\t\t\t\tdelete this._getCalendar().dates[timestamp];\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Clear work units cache\n\t\t\tthis._workingUnitsCache.clear();\n\t\t}, this));\n\t},\n\n\t_isWorkTime: function (date, unit, order) {\n\t\t// Check if this item has in the cache\n\n\t\t// use string keys\n\t\tvar dateKey = String(date.valueOf());\n\t\tvar is_work_unit = this._workingUnitsCache.getItem(unit, dateKey);\n\n\t\tif (is_work_unit == -1) {\n\t\t\t// calculate if not cached\n\t\t\tis_work_unit = this._checkIfWorkingUnit(date, unit, order);\n\t\t\tthis._workingUnitsCache.setItem(unit, dateKey, is_work_unit);\n\t\t}\n\n\t\treturn is_work_unit;\n\t},\n\n\tisWorkTime: function () {\n\t\tvar config = this.argumentsHelper.isWorkTimeArguments.apply( this.argumentsHelper, arguments);\n\t\treturn this._isWorkTime(config.date, config.unit);\n\t},\n\n\tcalculateDuration: function () {\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply( this.argumentsHelper, arguments);\n\n\t\tif (!config.unit) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this._calculateDuration(config.start_date, config.end_date, config.unit, config.step);\n\t},\n\n\t_calculateDuration: function (from, to, unit, step) {\n\t\tvar res = 0;\n\t\tif (unit == \"hour\" || unit == \"minute\") {\n\t\t\tres = this._getWorkUnitsBetweenQuick(from, to, unit, step);\n\t\t} else {\n\t\t\tres = this._getWorkUnitsBetweenGeneric(from, to, unit, step);\n\t\t}\n\n\t\t// getWorkUnits.. returns decimal durations\n\t\treturn Math.round(res);\n\t},\n\thasDuration: function () {\n\t\tvar config = this.argumentsHelper.getDurationArguments.apply( this.argumentsHelper, arguments);\n\n\t\tvar from = config.start_date,\n\t\t\tto = config.end_date,\n\t\t\tunit = config.unit,\n\t\t\tstep = config.step;\n\n\t\tif (!unit) {\n\t\t\treturn false;\n\t\t}\n\t\tvar start = new Date(from),\n\t\t\tend = new Date(to);\n\t\tstep = step || 1;\n\n\t\twhile (start.valueOf() < end.valueOf()) {\n\t\t\tif (this._isWorkTime(start, unit))\n\t\t\t\treturn true;\n\t\t\tstart = this._nextDate(start, unit, step);\n\t\t}\n\t\treturn false;\n\t},\n\n\tcalculateEndDate: function () {\n\t\tvar config = this.argumentsHelper.calculateEndDateArguments.apply( this.argumentsHelper, arguments);\n\n\t\tvar from = config.start_date,\n\t\t\tduration = config.duration,\n\t\t\tunit = config.unit,\n\t\t\tstep = config.step;\n\n\t\tif (!unit)\n\t\t\treturn false;\n\n\t\tvar mult = (config.duration >= 0) ? 1 : -1;\n\t\tduration = Math.abs(duration * 1);\n\t\treturn this._calculateEndDate(from, duration, unit, step * mult);\n\t},\n\n\t_calculateEndDate: function (from, duration, unit, step) {\n\t\tif (!unit)\n\t\t\treturn false;\n\n\t\tif (step == 1 && unit == \"minute\") {\n\t\t\treturn this._calculateMinuteEndDate(from, duration, step);\n\t\t} else if (step == 1 && unit == \"hour\") {\n\t\t\treturn this._calculateHourEndDate(from, duration, step);\n\t\t} else {\n\t\t\tvar interval = this._addInterval(from, duration, unit, step, null);\n\t\t\treturn interval.end;\n\t\t}\n\t},\n\n\t_addInterval: function (start, duration, unit, step, stopAction) {\n\t\tvar added = 0;\n\t\tvar current = start;\n\t\twhile (added < duration && !(stopAction && stopAction(current))) {\n\t\t\tvar next = this._nextDate(current, unit, step);\n\t\t\tif (this._isWorkTime(step > 0 ? new Date(next.valueOf() - 1) : new Date(next.valueOf() + 1), unit)) {\n\t\t\t\tadded++;\n\t\t\t}\n\t\t\tcurrent = next;\n\t\t}\n\t\treturn {\n\t\t\tend: current,\n\t\t\tsatrt: start,\n\t\t\tadded: added\n\t\t};\n\t},\n\n\t_calculateHourEndDate: function (from, duration, step) {\n\t\tvar start = new Date(from),\n\t\tadded = 0;\n\t\tstep = step || 1;\n\t\tduration = Math.abs(duration * 1);\n\n\t\tvar interval = this._addInterval(start, duration, \"hour\", step, function (date) {\n\t\t\t// iterate until hour end\n\t\t\tif (!(date.getHours() || date.getMinutes() || date.getSeconds() || date.getMilliseconds())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\tadded = interval.added;\n\t\tstart = interval.end;\n\n\t\tvar durationLeft = duration - added;\n\n\t\tif (durationLeft && durationLeft > 24) {\n\t\t\tvar current = start;\n\t\t\twhile (added < duration) {\n\t\t\t\tvar next = this._nextDate(current, \"day\", step);\n\t\t\t\t// reset to day start in case DST switch happens in the process\n\t\t\t\tnext.setHours(0);\n\t\t\t\tnext.setMinutes(0);\n\t\t\t\tnext.setSeconds(0);\n\t\t\t\tif (this._isWorkTime(step > 0 ? new Date(next.valueOf() - 1) : new Date(next.valueOf() + 1), \"day\")) {\n\t\t\t\t\tvar hours = this._getHoursPerDay(current);\n\t\t\t\t\tif (added + hours >= duration) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadded += hours;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurrent = next;\n\t\t\t}\n\t\t\tstart = current;\n\t\t}\n\n\t\tif (added < duration) {\n\t\t\tvar durationLeft = duration - added;\n\t\t\tinterval = this._addInterval(start, durationLeft, \"hour\", step, null);\n\t\t\tstart = interval.end;\n\t\t}\n\n\t\treturn start;\n\t},\n\n\t_calculateMinuteEndDate: function (from, duration, step) {\n\n\t\tvar start = new Date(from),\n\t\t\tadded = 0;\n\t\tstep = step || 1;\n\t\tduration = Math.abs(duration * 1);\n\n\t\tvar interval = this._addInterval(start, duration, \"minute\", step, function (date) {\n\t\t\t// iterate until hour end\n\t\t\tif (!(date.getMinutes() || date.getSeconds() || date.getMilliseconds())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\tadded = interval.added;\n\t\tstart = interval.end;\n\n\t\tif (added < duration) {\n\t\t\tvar left = duration - added;\n\t\t\tvar hours = Math.floor(left / 60);\n\t\t\tif (hours) {\n\t\t\t\tstart = this._calculateEndDate(start, hours, \"hour\", step > 0 ? 1 : -1);\n\t\t\t\tadded += hours * 60;\n\t\t\t}\n\t\t}\n\n\t\tif (added < duration) {\n\t\t\tvar durationLeft = duration - added;\n\t\t\tinterval = this._addInterval(start, durationLeft, \"minute\", step, null);\n\t\t\tstart = interval.end;\n\t\t}\n\n\t\treturn start;\n\t},\n\n\tgetClosestWorkTime: function () {\n\t\tvar settings = this.argumentsHelper.getClosestWorkTimeArguments.apply( this.argumentsHelper, arguments);\n\t\treturn this._getClosestWorkTime(settings.date, settings.unit, settings.dir);\n\t},\n\n\t_getClosestWorkTime: function (inputDate, unit, direction) {\n\t\tvar result = new Date(inputDate);\n\n\t\tif (this._isWorkTime(result, unit)) {\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this.$gantt.date[unit + '_start'](result);\n\n\t\tif (direction == 'any' || !direction) {\n\t\t\tvar closestFuture = this._getClosestWorkTimeFuture(result, unit);\n\t\t\tvar closestPast = this._getClosestWorkTimePast(result, unit);\n\t\t\tif (Math.abs(closestFuture - inputDate) <= Math.abs(inputDate - closestPast)) {\n\t\t\t\tresult = closestFuture;\n\t\t\t} else {\n\t\t\t\tresult = closestPast;\n\t\t\t}\n\t\t} else if (direction == \"past\") {\n\t\t\tresult = this._getClosestWorkTimePast(result, unit);\n\t\t} else {\n\t\t\tresult = this._getClosestWorkTimeFuture(result, unit);\n\t\t}\n\t\treturn result;\n\t},\n\n\t_getClosestWorkTimeFuture: function (date, unit) {\n\t\treturn this._getClosestWorkTimeGeneric(date, unit, 1);\n\t},\n\n\t_getClosestWorkTimePast: function (date, unit) {\n\t\tvar result = this._getClosestWorkTimeGeneric(date, unit, -1);\n\t\t// should return the end of the closest work interval\n\t\treturn this.$gantt.date.add(result, 1, unit);\n\t},\n\n\t_getClosestWorkTimeGeneric: function (date, unit, increment) {\n\t\tvar unitOrder = this._getUnitOrder(unit),\n\t\t\tbiggerTimeUnit = this.units[unitOrder - 1];\n\n\t\tvar result = date;\n\n\t\t// be extra sure we won't fall into infinite loop, 3k seems big enough\n\t\tvar maximumLoop = 3000,\n\t\t\tcount = 0;\n\n\t\twhile (!this._isWorkTime(result, unit)) {\n\t\t\tif (biggerTimeUnit && !this._isWorkTime(result, biggerTimeUnit)) {\n\t\t\t\t// if we look for closest work hour and detect a week-end - first find the closest work day,\n\t\t\t\t// and continue iterations after that\n\t\t\t\tif (increment > 0) {\n\t\t\t\t\tresult = this._getClosestWorkTimeFuture(result, biggerTimeUnit);\n\t\t\t\t} else {\n\t\t\t\t\tresult = this._getClosestWorkTimePast(result, biggerTimeUnit);\n\t\t\t\t}\n\n\t\t\t\tif (this._isWorkTime(result, unit)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcount++;\n\t\t\tif (count > maximumLoop) {\n\t\t\t\tthis.$gantt.assert(false, \"Invalid working time check\");\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar tzOffset = result.getTimezoneOffset();\n\t\t\tresult = this.$gantt.date.add(result, increment, unit);\n\n\t\t\tresult = this.$gantt._correct_dst_change(result, tzOffset, increment, unit);\n\t\t\tif (this.$gantt.date[unit + '_start']) {\n\t\t\t\tresult = this.$gantt.date[unit + '_start'](result);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n};\n\nmodule.exports = CalendarWorkTimeStrategy;","var utils = require(\"../../utils/utils\");\nvar createArgumentsHelper = require(\"./calendar_arguments_helper\");\nvar CalendarWorktimeStrategy = require(\"./strategy/calendar_strategy\");\n\nfunction CalendarManager (gantt){\n\tthis.$gantt = gantt;\n\tthis._calendars = {};\n}\n\nCalendarManager.prototype = {\n\t_calendars: {},\n\t_getDayHoursForMultiple: function (calendars, date) {\n\t\tvar units = [],\n\t\t\ttick = true,\n\t\t\tcurrPos = 0,\n\t\t\tis_work_hour = false,\n\t\t\tstart = this.$gantt.date.day_start(new Date(date));\n\t\tfor (var hour = 0; hour < 24; hour++) {\n\t\t\tis_work_hour = calendars.reduce(function (acc, calendar) {\n\t\t\t\treturn acc && calendar._is_work_hour(start);\n\t\t\t}, true);\n\t\t\tif (is_work_hour) {\n\t\t\t\tif (tick) {\n\t\t\t\t\tunits[currPos] = hour;\n\t\t\t\t\tunits[currPos + 1] = (hour + 1);\n\t\t\t\t\tcurrPos += 2;\n\t\t\t\t} else {\n\t\t\t\t\tunits[currPos - 1] += 1;\n\t\t\t\t}\n\t\t\t\ttick = false;\n\t\t\t} else if (!tick) {\n\t\t\t\ttick = true;\n\t\t\t}\n\t\t\tstart = this.$gantt.date.add(start, 1, \"hour\");\n\t\t}\n\t\tif (!units.length)\n\t\t\tunits = false;\n\t\treturn units;\n\t},\n\tmergeCalendars: function () {\n\t\tvar newCalendar = this.createCalendar(),\n\t\t\tday,\n\t\t\tunits = [];\n\t\tvar calendars = Array.prototype.slice.call(arguments, 0);\n\t\tnewCalendar.worktime.hours = [0, 24];\n\t\tnewCalendar.worktime.dates = {};\n\t\tvar start = this.$gantt.date.day_start(new Date(259200000)); // 1970 day=0\n\t\tfor (day = 0; day < 7; day++) {\n\t\t\tunits = this._getDayHoursForMultiple(calendars, start);\n\t\t\tnewCalendar.worktime.dates[day] = units;\n\t\t\tstart = this.$gantt.date.add(start, 1, \"day\");\n\t\t}\n\t\tfor (var i = 0; i < calendars.length; i++) {\n\t\t\tfor (var value in calendars[i].worktime.dates) if (+value > 10000) {\n\t\t\t\tunits = this._getDayHoursForMultiple(calendars, new Date(+value));\n\t\t\t\tnewCalendar.worktime.dates[value] = units;\n\t\t\t}\n\t\t}\n\t\treturn newCalendar;\n\t},\n\n\t_convertWorktimeSettings: function (settings) {\n\t\tvar days = settings.days;\n\t\tif (days) {\n\t\t\tsettings.dates = settings.dates || {};\n\t\t\tfor (var i = 0; i < days.length; i++) {\n\t\t\t\tsettings.dates[i] = days[i];\n\t\t\t\tif (!(days[i] instanceof Array)) {\n\t\t\t\t\tsettings.dates[i] = !!days[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete settings.days;\n\t\t}\n\t\treturn settings;\n\t},\n\n\tcreateCalendar: function (parentCalendar) {\n\t\tvar settings;\n\n\t\tif (!parentCalendar) {\n\t\t\tparentCalendar = {};\n\t\t}\n\n\t\tif (parentCalendar.worktime) {\n\t\t\tsettings = utils.copy(parentCalendar.worktime);\n\t\t} else {\n\t\t\tsettings = utils.copy(parentCalendar);\n\t\t}\n\n\t\tvar defaults = utils.copy(this.defaults.fulltime.worktime);\n\t\tutils.mixin(settings, defaults);\n\n\t\tvar id = utils.uid();\n\t\tvar calendar = {\n\t\t\tid: id + \"\",\n\t\t\tworktime: this._convertWorktimeSettings(settings)\n\t\t};\n\n\t\tvar apiCore = new CalendarWorktimeStrategy(this.$gantt, createArgumentsHelper(this.$gantt));\n\t\tutils.mixin(apiCore, calendar);\n\n\t\t// validate/check if empty calendar\n\t\tif (!apiCore._tryChangeCalendarSettings(function () {\n\t\t\t})) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn apiCore;\n\t\t}\n\t},\n\n\tgetCalendar: function (id) {\n\t\tid = id || \"global\";\n\t\tthis.createDefaultCalendars();\n\t\treturn this._calendars[id];\n\t},\n\n\tgetCalendars: function () {\n\t\tvar res = [];\n\t\tfor (var i in this._calendars) {\n\t\t\tres.push(this.getCalendar(i));\n\t\t}\n\t\treturn res;\n\t},\n\n\t_getOwnCalendar: function(task){\n\t\tvar config = this.$gantt.config;\n\t\tif (task[config.calendar_property]) {\n\t\t\treturn this.getCalendar(task[config.calendar_property]);\n\t\t}\n\n\t\tif (config.resource_calendars) {\n\t\t\tfor (var field in config.resource_calendars) {\n\t\t\t\tvar resource = config.resource_calendars[field];\n\t\t\t\tif (task[field]) {\n\t\t\t\t\tvar calendarId = resource[task[field]];\n\t\t\t\t\tif (calendarId) {\n\t\t\t\t\t\treturn this.getCalendar(calendarId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetTaskCalendar: function (task) {\n\t\tif (!task) {\n\t\t\treturn this.getCalendar();\n\t\t}\n\n\t\tvar calendar = this._getOwnCalendar(task);\n\t\tvar gantt = this.$gantt;\n\t\tif (!calendar && gantt.config.inherit_calendar && gantt.isTaskExists(task.parent)){\n\t\t\tvar stop = false;\n\t\t\tgantt.eachParent(function(parent){\n\t\t\t\tif(stop) return;\n\t\t\t\tif(gantt.isSummaryTask(parent)){\n\t\t\t\t\tcalendar = this._getOwnCalendar(parent);\n\t\t\t\t\tif(calendar){\n\t\t\t\t\t\tstop = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, task.id, this);\n\t\t}\n\n\t\treturn calendar || this.getCalendar();\n\t},\n\n\taddCalendar: function (calendar) { // puts new calendar to Global Storage - gantt.calendarManager._calendars {}\n\t\tif (!(calendar instanceof CalendarWorktimeStrategy)) {\n\t\t\tvar id = calendar.id;\n\t\t\tcalendar = this.createCalendar(calendar);\n\t\t\tcalendar.id = id;\n\t\t}\n\t\tvar config = this.$gantt.config;\n\n\t\tcalendar.id = calendar.id || utils.uid();\n\t\tthis._calendars[calendar.id] = calendar;\n\t\tif (!config.worktimes)\n\t\t\tconfig.worktimes = {};\n\t\tconfig.worktimes[calendar.id] = calendar.worktime;\n\t\treturn calendar.id;\n\t},\n\n\tdeleteCalendar: function (calendar) {\n\t\tvar config = this.$gantt.config;\n\t\tif (!calendar) return false;\n\t\tif (this._calendars[calendar]) {\n\t\t\tdelete this._calendars[calendar];\n\t\t\tif (config.worktimes && config.worktimes[calendar])\n\t\t\t\tdelete config.worktimes[calendar];\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\t},\n\n\trestoreConfigCalendars: function (configs) {\n\t\tfor (var i in configs) {\n\t\t\tif (this._calendars[i])\n\t\t\t\tcontinue;\n\n\t\t\tvar settings = configs[i];\n\t\t\tvar calendar = this.createCalendar(settings);\n\t\t\tcalendar.id = i;\n\t\t\tthis.addCalendar(calendar);\n\t\t}\n\t},\n\n\tdefaults: {\n\t\tglobal: {\n\t\t\tid: \"global\",\n\t\t\tworktime: {\n\t\t\t\thours: [8, 17],\n\t\t\t\tdays: [0, 1, 1, 1, 1, 1, 0]\n\t\t\t}\n\t\t},\n\t\tfulltime: {\n\t\t\tid: \"fulltime\",\n\t\t\tworktime: {\n\t\t\t\thours: [0, 24],\n\t\t\t\tdays: [1, 1, 1, 1, 1, 1, 1]\n\t\t\t}\n\t\t}\n\t},\n\n\tcreateDefaultCalendars: function () {\n\t\tvar config = this.$gantt.config;\n\t\tthis.restoreConfigCalendars(this.defaults);\n\t\tthis.restoreConfigCalendars(config.worktimes);\n\t}\n};\n\nmodule.exports = CalendarManager;","var CalendarManager = require(\"./calendar_manager\"),\n\tTimeCalculator = require(\"./time_calculator\"),\n\tworktimeFacadeFactory = require(\"../facades/worktime_calendars\"),\n\tutils = require(\"../../utils/utils\");\n\nmodule.exports = function (gantt) {\n\tvar manager = new CalendarManager(gantt),\n\ttimeCalculator = new TimeCalculator(manager);\n\tvar facade = worktimeFacadeFactory.create(manager, timeCalculator);\n\tutils.mixin(gantt, facade);\n};\n","var helpers = require(\"../utils/helpers\");\n\nmodule.exports = function(gantt) {\n\n\tgantt.load = function (url, type, callback) {\n\t\tthis._load_url = url;\n\t\tthis.assert(arguments.length, \"Invalid load arguments\");\n\n\t\tvar tp = 'json', cl = null;\n\t\tif (arguments.length >= 3) {\n\t\t\ttp = type;\n\t\t\tcl = callback;\n\t\t} else {\n\t\t\tif (typeof arguments[1] == \"string\")\n\t\t\t\ttp = arguments[1];\n\t\t\telse if (typeof arguments[1] == \"function\")\n\t\t\t\tcl = arguments[1];\n\t\t}\n\n\t\tthis._load_type = tp;\n\n\t\tthis.callEvent(\"onLoadStart\", [url, tp]);\n\n\t\treturn this.ajax.get(url, gantt.bind(function (l) {\n\t\t\tthis.on_load(l, tp);\n\t\t\tthis.callEvent(\"onLoadEnd\", [url, tp]);\n\t\t\tif (typeof cl == \"function\")\n\t\t\t\tcl.call(this);\n\t\t}, this));\n\t};\n\tgantt.parse = function (data, type) {\n\t\tthis.on_load({xmlDoc: {responseText: data}}, type);\n\t};\n\n\tgantt.serialize = function (type) {\n\t\ttype = type || \"json\";\n\t\treturn this[type].serialize();\n\t};\n\n\t/*\n\ttasks and relations\n\t{\n\tdata:[\n\t\t{\n\t\t\t\"id\":\"string\",\n\t\t\t\"text\":\"...\",\n\t\t\t\"start_date\":\"Date or string\",\n\t\t\t\"end_date\":\"Date or string\",\n\t\t\t\"duration\":\"number\",\n\t\t\t\"progress\":\"0..1\",\n\t\t\t\"parent_id\":\"string\",\n\t\t\t\"order\":\"number\"\n\t\t},...],\n\tlinks:[\n\t\t{\n\t\t\tid:\"string\",\n\t\t\tsource:\"string\",\n\t\t\ttarget:\"string\",\n\t\t\ttype:\"string\"\n\t\t},...],\n\tcollections:{\n\t\t\tcollectionName:[\n\t\t\t\t{key:, label:, optional:...},...\n\t\t\t],...\n\t\t}\n\t}\n\n\t* */\n\n\tgantt.on_load = function (resp, type) {\n\t\tif(resp.xmlDoc && resp.xmlDoc.status === 404){ // work if we don't have a file at current url\n\t\t\tthis.assert(false, \"Failed to load the data from \" \n\t\t\t\t+ resp.xmlDoc.responseURL + \", server returns 404\");\n\t\t\treturn;\n\t\t}\n\t\tthis.callEvent(\"onBeforeParse\", []);\n\t\tif (!type)\n\t\t\ttype = \"json\";\n\t\tthis.assert(this[type], \"Invalid data type:'\" + type + \"'\");\n\n\t\tvar raw = resp.xmlDoc.responseText;\n\n\t\tvar data = this[type].parse(raw, resp);\n\t\tthis._process_loading(data);\n\t};\n\n\tgantt._process_loading = function (data) {\n\t\tif(data.collections)\n\t\t\tthis._load_collections(data.collections);\n\n\t\tthis.$data.tasksStore.parse(data.data);\n\t\tvar links = data.links || (data.collections ? data.collections.links : []);\n\t\tthis.$data.linksStore.parse(links);\n\n\t\t//this._sync_links();\n\t\tthis.callEvent(\"onParse\", []);\n\t\tthis.render();\n\t\tif(this.config.initial_scroll){\n\t\t\tvar firstTask = this.getTaskByIndex(0);\n\t\t\tvar id = firstTask ? firstTask.id : this.config.root_id;\n\t\t\tif(this.isTaskExists(id))\n\t\t\t\tthis.showTask(id);\n\t\t}\n\t};\n\n\n\tgantt._load_collections = function (collections) {\n\t\tvar collections_loaded = false;\n\t\tfor (var key in collections) {\n\t\t\tif (collections.hasOwnProperty(key)) {\n\t\t\t\tcollections_loaded = true;\n\t\t\t\tvar collection = collections[key];\n\t\t\t\tvar arr = this.serverList[key];\n\t\t\t\tif (!arr) continue;\n\t\t\t\tarr.splice(0, arr.length); //clear old options\n\t\t\t\tfor (var j = 0; j < collection.length; j++) {\n\t\t\t\t\tvar option = collection[j];\n\t\t\t\t\tvar obj = this.copy(option);\n\t\t\t\t\tobj.key = obj.value;// resulting option object\n\n\t\t\t\t\tfor (var option_key in option) {\n\t\t\t\t\t\tif (option.hasOwnProperty(option_key)) {\n\t\t\t\t\t\t\tif (option_key == \"value\" || option_key == \"label\")\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\tobj[option_key] = option[option_key]; // obj['value'] = option['value']\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tarr.push(obj);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (collections_loaded)\n\t\t\tthis.callEvent(\"onOptionsLoad\", []);\n\t};\n\n\tgantt.attachEvent(\"onBeforeTaskDisplay\", function (id, task) {\n\t\treturn !task.$ignore;\n\t});\n\n\tfunction jsonParseError(data){\n\t\tgantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \"\n\t\t\t+ \"Actual argument value: \" + JSON.stringify(data));\n\t\tthrow new Error(\"Invalid argument for gantt.parse or gantt.load. An object or a JSON string of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#json is expected. Actual argument value: \"\n\t\t\t+ JSON.stringify(data));\n\t}\n\n\tgantt.json = {\n\t\tparse: function (data) {\n\t\t\tif(!data){\n\t\t\t\tjsonParseError(data);\n\t\t\t}\n\n\t\t\tif (typeof data == \"string\") {\n\t\t\t\tif (window.JSON){\n\t\t\t\t\ttry{\n\t\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(e) {\n\t\t\t\t\t\tjsonParseError(data);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgantt.assert(false, \"JSON is not supported\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!data.data){\n\t\t\t\tjsonParseError(data);\n\t\t\t}\n\n\t\t\tif (data.dhx_security)\n\t\t\t\tgantt.security_key = data.dhx_security;\n\t\t\treturn data;\n\t\t},\n\t\tserializeTask: function (task) {\n\t\t\treturn this._copyObject(task);\n\t\t},\n\t\tserializeLink: function (link) {\n\t\t\treturn this._copyLink(link);\n\t\t},\n\t\t_copyLink: function (obj) {\n\t\t\tvar copy = {};\n\t\t\tfor (var key in obj)\n\t\t\t\tcopy[key] = obj[key];\n\t\t\treturn copy;\n\t\t},\n\t\t_copyObject: function (obj) {\n\t\t\tvar copy = {};\n\t\t\tfor (var key in obj) {\n\t\t\t\tif (key.charAt(0) == \"$\")\n\t\t\t\t\tcontinue;\n\t\t\t\tcopy[key] = obj[key];\n\n\t\t\t\tif (helpers.isDate(copy[key])) {\n\t\t\t\t\tcopy[key] = gantt.templates.xml_format !== gantt.templates.formate_date ? gantt.templates.xml_format(copy[key]) : gantt.templates.formate_date(copy[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t},\n\t\tserialize: function () {\n\t\t\tvar tasks = [];\n\t\t\tvar links = [];\n\n\t\t\tgantt.eachTask(function (obj) {\n\t\t\t\tgantt.resetProjectDates(obj);\n\t\t\t\ttasks.push(this.serializeTask(obj));\n\t\t\t}, gantt.config.root_id, this);\n\n\t\t\tvar rawLinks = gantt.getLinks();\n\t\t\tfor (var i = 0; i < rawLinks.length; i++) {\n\t\t\t\tlinks.push(this.serializeLink(rawLinks[i]));\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: tasks,\n\t\t\t\tlinks: links\n\t\t\t};\n\t\t}\n\t};\n\n\t/*\n\t\n\t\t\n\t\t\tMy task 1\n\t\t\t16.08.2013\n\t\t\t22.08.2013\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t*/\n\n\tfunction xmlParseError(data){\n\t\tgantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \"\n\t\t\t+ \"Actual argument value: \" + JSON.stringify(data));\n\t\tthrow new Error(\"Invalid argument for gantt.parse or gantt.load. An XML of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#xmldhtmlxgantt20 is expected. Actual argument value: \"\n\t\t\t+ JSON.stringify(data));\n\t}\n\n\tgantt.xml = {\n\t\t_xmlNodeToJSON: function (node, attrs_only) {\n\t\t\tvar t = {};\n\t\t\tfor (var i = 0; i < node.attributes.length; i++)\n\t\t\t\tt[node.attributes[i].name] = node.attributes[i].value;\n\n\t\t\tif (!attrs_only) {\n\t\t\t\tfor (var i = 0; i < node.childNodes.length; i++) {\n\t\t\t\t\tvar child = node.childNodes[i];\n\t\t\t\t\tif (child.nodeType == 1)\n\t\t\t\t\t\tt[child.tagName] = child.firstChild ? child.firstChild.nodeValue : \"\";\n\t\t\t\t}\n\n\t\t\t\tif (!t.text) t.text = node.firstChild ? node.firstChild.nodeValue : \"\";\n\t\t\t}\n\n\t\t\treturn t;\n\t\t},\n\t\t_getCollections: function (loader) {\n\t\t\tvar collection = {};\n\t\t\tvar opts = gantt.ajax.xpath(\"//coll_options\", loader);\n\t\t\tfor (var i = 0; i < opts.length; i++) {\n\t\t\t\tvar bind = opts[i].getAttribute(\"for\");\n\t\t\t\tvar arr = collection[bind] = [];\n\t\t\t\tvar itms = gantt.ajax.xpath(\".//item\", opts[i]);\n\t\t\t\tfor (var j = 0; j < itms.length; j++) {\n\t\t\t\t\tvar itm = itms[j];\n\t\t\t\t\tvar attrs = itm.attributes;\n\t\t\t\t\tvar obj = {key: itms[j].getAttribute(\"value\"), label: itms[j].getAttribute(\"label\")};\n\t\t\t\t\tfor (var k = 0; k < attrs.length; k++) {\n\t\t\t\t\t\tvar attr = attrs[k];\n\t\t\t\t\t\tif (attr.nodeName == \"value\" || attr.nodeName == \"label\")\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tobj[attr.nodeName] = attr.nodeValue;\n\t\t\t\t\t}\n\t\t\t\t\tarr.push(obj);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn collection;\n\t\t},\n\t\t_getXML: function (text, loader, toptag) {\n\t\t\ttoptag = toptag || \"data\";\n\t\t\tif (!loader.getXMLTopNode) {\n\t\t\t\tloader = gantt.ajax.parse(loader);\n\t\t\t}\n\n\t\t\tvar xml = gantt.ajax.xmltop(toptag, loader.xmlDoc);\n\t\t\tif (!xml || xml.tagName != toptag) {\n\t\t\t\txmlParseError(text);\n\t\t\t}\n\n\t\t\tvar skey = xml.getAttribute(\"dhx_security\");\n\t\t\tif (skey)\n\t\t\t\tgantt.security_key = skey;\n\n\t\t\treturn xml;\n\t\t},\n\t\tparse: function (text, loader) {\n\t\t\tloader = this._getXML(text, loader);\n\t\t\tvar data = {};\n\n\t\t\tvar evs = data.data = [];\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\n\n\t\t\tfor (var i = 0; i < xml.length; i++)\n\t\t\t\tevs[i] = this._xmlNodeToJSON(xml[i]);\n\n\t\t\tdata.collections = this._getCollections(loader);\n\t\t\treturn data;\n\t\t},\n\t\t_copyLink: function (obj) {\n\t\t\treturn \"\";\n\t\t},\n\t\t_copyObject: function (obj) {\n\t\t\treturn \"\";\n\t\t},\n\t\tserialize: function () {\n\t\t\tvar tasks = [];\n\t\t\tvar links = [];\n\n\t\t\tvar json = gantt.json.serialize();\n\t\t\tfor (var i = 0, len = json.data.length; i < len; i++) {\n\t\t\t\ttasks.push(this._copyObject(json.data[i]));\n\t\t\t}\n\t\t\tfor (var i = 0, len = json.links.length; i < len; i++) {\n\t\t\t\tlinks.push(this._copyLink(json.links[i]));\n\t\t\t}\n\t\t\treturn \"\" + tasks.join(\"\") + \"\" + links.join(\"\") + \"\";\n\t\t}\n\t};\n\n\n\tgantt.oldxml = {\n\t\tparse: function (text, loader) {\n\t\t\tloader = gantt.xml._getXML(text, loader, \"projects\");\n\t\t\tvar data = {collections: {links: []}};\n\n\t\t\tvar evs = data.data = [];\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\n\n\t\t\tfor (var i = 0; i < xml.length; i++) {\n\t\t\t\tevs[i] = gantt.xml._xmlNodeToJSON(xml[i]);\n\t\t\t\tvar parent = xml[i].parentNode;\n\n\t\t\t\tif (parent.tagName == \"project\")\n\t\t\t\t\tevs[i].parent = \"project-\" + parent.getAttribute(\"id\");\n\t\t\t\telse\n\t\t\t\t\tevs[i].parent = parent.parentNode.getAttribute(\"id\");\n\t\t\t}\n\n\t\t\txml = gantt.ajax.xpath(\"//project\", loader);\n\t\t\tfor (var i = 0; i < xml.length; i++) {\n\t\t\t\tvar ev = gantt.xml._xmlNodeToJSON(xml[i], true);\n\t\t\t\tev.id = \"project-\" + ev.id;\n\t\t\t\tevs.push(ev);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < evs.length; i++) {\n\t\t\t\tvar ev = evs[i];\n\t\t\t\tev.start_date = ev.startdate || ev.est;\n\t\t\t\tev.end_date = ev.enddate;\n\t\t\t\tev.text = ev.name;\n\t\t\t\tev.duration = ev.duration / 8;\n\t\t\t\tev.open = 1;\n\t\t\t\tif (!ev.duration && !ev.end_date) ev.duration = 1;\n\t\t\t\tif (ev.predecessortasks)\n\t\t\t\t\tdata.collections.links.push({\n\t\t\t\t\t\ttarget: ev.id,\n\t\t\t\t\t\tsource: ev.predecessortasks,\n\t\t\t\t\t\ttype: gantt.config.links.finish_to_start\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t\tserialize: function () {\n\t\t\tgantt.message(\"Serialization to 'old XML' is not implemented\");\n\t\t}\n\t};\n\n\tgantt.serverList = function (name, array) {\n\t\tif (array) {\n\t\t\tthis.serverList[name] = array.slice(0);\n\t\t} else if (!this.serverList[name]) {\n\t\t\tthis.serverList[name] = [];\n\t\t}\n\t\treturn this.serverList[name];\n\t};\n\n};","module.exports = function(gantt) {\n\tgantt.isReadonly = function (item) {\n\t\tif (item && item[this.config.editable_property]) {\n\t\t\treturn false;\n\t\t} else {\n\t\t\treturn (item && item[this.config.readonly_property]) || this.config.readonly;\n\t\t}\n\t};\n};","module.exports = function(gantt){\n\t// TODO: why eslint fails on regexp?\n\t// eslint-disable-next-line no-control-regex\n\tvar htmlTags = new RegExp(\"<(?:.|\\n)*?>\", \"gm\");\n\tvar extraSpaces = new RegExp(\" +\", \"gm\");\n\n\tfunction stripHTMLLite(htmlText){\n\t\treturn (htmlText + \"\")\n\t\t\t.replace(htmlTags, \" \").\n\t\t\treplace(extraSpaces, \" \");\n\t}\n\n\tvar singleQuotes = new RegExp(\"'\", \"gm\");\n\tfunction escapeQuotes(text){\n\t\treturn (text + \"\").replace(singleQuotes, \"'\");\n\t}\n\n\tgantt._waiAria = {\n\t\tgetAttributeString: function(attr){\n\t\t\tvar attributes = [\" \"];\n\t\t\tfor(var i in attr){\n\t\t\t\tvar text = escapeQuotes(stripHTMLLite(attr[i]));\n\t\t\t\tattributes.push(i + \"='\" + text + \"'\");\n\t\t\t}\n\t\t\tattributes.push(\" \");\n\t\t\treturn attributes.join(\" \");\n\n\t\t},\n\n\t\tgetTimelineCellAttr:function(dateString){\n\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": dateString});\n\t\t},\n\n\t\t_taskCommonAttr: function(task, div){\n\n\t\t\tif(!(task.start_date && task.end_date))\n\t\t\t\treturn;\n\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(gantt.templates.tooltip_text(task.start_date, task.end_date, task)));\n\n\t\t\tif(gantt.isReadonly(task)){\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\n\t\t\t}\n\n\t\t\tif(task.$dataprocessor_class){\n\t\t\t\tdiv.setAttribute(\"aria-busy\", true);\n\t\t\t}\n\n\t\t\tdiv.setAttribute(\"aria-selected\", gantt.isSelectedTask(task.id) ? \"true\" : \"false\");\n\t\t},\n\n\t\tsetTaskBarAttr: function(task, div){\n\t\t\tthis._taskCommonAttr(task, div);\n\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.drag_move){\n\t\t\t\tif(task.id != gantt.getState().drag_id){\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\n\t\t\t\t}else{\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", true);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\ttaskRowAttr: function(task, div){\n\n\t\t\tthis._taskCommonAttr(task, div);\n\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.order_branch){\n\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\n\t\t\t}\n\n\t\t\tdiv.setAttribute(\"role\", \"row\");\n\n\t\t\tdiv.setAttribute(\"aria-level\", task.$level);\n\n\t\t\tif(gantt.hasChild(task.id)){\n\t\t\t\tdiv.setAttribute(\"aria-expanded\", task.$open ? \"true\" : \"false\");\n\t\t\t}\n\t\t},\n\n\t\tlinkAttr: function(link, div){\n\n\t\t\tvar linkTypes = gantt.config.links;\n\n\t\t\tvar toStart = link.type == linkTypes.finish_to_start || link.type == linkTypes.start_to_start;\n\t\t\tvar fromStart = link.type == linkTypes.start_to_start || link.type == linkTypes.start_to_finish;\n\n\t\t\tvar content = gantt.locale.labels.link + \" \" + gantt.templates.drag_link(link.source, fromStart, link.target, toStart);\n\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(content));\n\t\t\tif(gantt.isReadonly(link)){\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\n\t\t\t}\n\t\t},\n\n\t\tgridSeparatorAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"separator\");\n\t\t},\n\n\t\tlightboxHiddenAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t},\n\n\t\tlightboxVisibleAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\n\t\t},\n\n\t\tlightboxAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t\tdiv.firstChild.setAttribute(\"role\", \"heading\");\n\t\t},\n\n\t\tlightboxButtonAttrString:function(buttonName){\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\":gantt.locale.labels[buttonName], \"tabindex\":\"0\"});\n\t\t},\n\n\t\tlightboxHeader: function(div, headerText){\n\t\t\tdiv.setAttribute(\"aria-label\", headerText);\n\t\t},\n\n\t\tlightboxSelectAttrString: function(time_option){\n\t\t\tvar label = \"\";\n\n\t\t\tswitch (time_option) {\n\t\t\t\tcase \"%Y\":\n\t\t\t\t\tlabel = gantt.locale.labels.years;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%m\":\n\t\t\t\t\tlabel = gantt.locale.labels.months;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%d\":\n\t\t\t\t\tlabel = gantt.locale.labels.days;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%H:%i\":\n\t\t\t\t\tlabel = gantt.locale.labels.hours + gantt.locale.labels.minutes;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": label});\n\t\t},\n\n\t\tlightboxDurationInputAttrString: function(section){\n\t\t\treturn this.getAttributeString({\"aria-label\": gantt.locale.labels.column_duration, \"aria-valuemin\": \"0\"});\n\t\t},\n\n\t\tgridAttrString: function(){\n\t\t\treturn [\" role='treegrid'\", gantt.config.multiselect ? \"aria-multiselectable='true'\" : \"aria-multiselectable='false'\", \" \"].join(\" \");\n\t\t},\n\n\n\t\tgridScaleRowAttrString: function(){\n\t\t\treturn \"role='row'\";\n\t\t},\n\n\t\tgridScaleCellAttrString: function(column, label){\n\t\t\tvar attrs = \"\";\n\t\t\tif(column.name == \"add\"){\n\t\t\t\tattrs = this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\n\t\t\t}else{\n\n\t\t\t\tvar attributes = {\n\t\t\t\t\t\"role\":\"columnheader\",\n\t\t\t\t\t\"aria-label\": label\n\t\t\t\t};\n\n\t\t\t\tif(gantt._sort && gantt._sort.name == column.name){\n\t\t\t\t\tif(gantt._sort.direction == \"asc\"){\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"ascending\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"descending\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tattrs = this.getAttributeString(attributes);\n\t\t\t}\n\t\t\treturn attrs;\n\t\t},\n\n\t\tgridDataAttrString: function(){\n\t\t\treturn \"role='rowgroup'\";\n\t\t},\n\n\t\tgridCellAttrString: function(column, textValue){\n\t\t\treturn this.getAttributeString({\"role\":\"gridcell\", \"aria-label\": textValue});\n\t\t},\n\n\t\tgridAddButtonAttrString: function(column){\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\n\t\t},\n\n\t\tmessageButtonAttrString: function(buttonLabel){\n\t\t\treturn \"tabindex='0' role='button' aria-label='\"+buttonLabel+\"'\";\n\t\t},\n\n\t\tmessageInfoAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"alert\");\n\t\t\t//div.setAttribute(\"tabindex\", \"-1\");\n\t\t},\n\n\t\tmessageModalAttr: function(div, uid){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t\tif(uid){\n\t\t\t\tdiv.setAttribute(\"aria-labelledby\", uid);\n\t\t\t}\n\n\t\t//\tdiv.setAttribute(\"tabindex\", \"-1\");\n\t\t},\n\n\t\tquickInfoAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t},\n\n\t\tquickInfoHeaderAttrString: function(){\n\t\t\treturn \" role='heading' \";\n\t\t},\n\n\t\tquickInfoHeader: function(div, header){\n\t\t\tdiv.setAttribute(\"aria-label\", header);\n\t\t},\n\n\t\tquickInfoButtonAttrString: function(label){\n\t\t\treturn gantt._waiAria.getAttributeString({\"role\":\"button\", \"aria-label\":label, \"tabindex\":\"0\"});\n\t\t},\n\n\t\ttooltipAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"tooltip\");\n\t\t},\n\n\t\ttooltipVisibleAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\n\t\t},\n\n\t\ttooltipHiddenAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t};\n\n\tfunction isDisabled(){\n\t\treturn !gantt.config.wai_aria_attributes;\n\t}\n\n\tfor(var i in gantt._waiAria){\n\t\tgantt._waiAria[i] = (function(payload){\n\t\t\treturn function(){\n\t\t\t\tif(isDisabled()){\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn payload.apply(this, arguments);\n\t\t\t};\n\t\t})(gantt._waiAria[i]);\n\t}\n\n\n};","module.exports = function(gantt) {\n\tgantt.getGridColumn = function(name) {\n\t\tvar columns = gantt.config.columns;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tif (columns[i].name == name)\n\t\t\t\treturn columns[i];\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tgantt.getGridColumns = function() {\n\t\treturn gantt.config.columns.slice();\n\t};\n};","var Grid = require(\"./ui/grid/grid\");\n\nmodule.exports = function(gantt) {\n\trequire(\"./grid_column_api.gpl\")(gantt);\n\tGrid.prototype.getGridColumns = function () {\n\t\tvar config = this.$getConfig();\n\t\tvar columns = config.columns,\n\t\t\tvisibleColumns = [];\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tif (!columns[i].hide)\n\t\t\t\tvisibleColumns.push(columns[i]);\n\t\t}\n\n\t\treturn visibleColumns;\n\t};\n};","module.exports = function(gantt) {\n\tvar TreeDataStore = require(\"./datastore/treedatastore\");\n\n\tvar old_has_children = TreeDataStore.prototype.hasChild;\n\tgantt.$data.tasksStore.hasChild = function (id) {\n\t\tif (old_has_children.apply(this, arguments))\n\t\t\treturn true;\n\t\tif (this.exists(id)) {\n\t\t\treturn this.getItem(id)[gantt.config.branch_loading_property];\n\t\t}\n\t\treturn false;\n\t};\n\n\tfunction needLoading(id) {\n\t\tif (gantt.config.branch_loading && gantt._load_url) {\n\t\t\tvar was_rendered = gantt.getUserData(id, \"was_rendered\");\n\t\t\t// call ajax only if branch has children\n\t\t\tif (!was_rendered && (!gantt.getChildren(id).length && gantt.hasChild(id))) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tgantt.attachEvent(\"onTaskOpened\", function (id) {\n\t\tif (gantt.config.branch_loading && gantt._load_url) {\n\t\t\t// call ajax only if branch has children\n\t\t\tif (needLoading(id)) {\n\t\t\t\tvar url = gantt._load_url;\n\t\t\t\turl = url.replace(/(\\?|&)?parent_id=.+&?/, \"\");\n\t\t\t\tvar param = url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\n\t\t\t\tvar y = gantt.getScrollState().y || 0;\n\n\t\t\t\tgantt.load(url + param + \"parent_id=\" + encodeURIComponent(id), this._load_type, function () {\n\t\t\t\t\tif (y) {\n\t\t\t\t\t\tgantt.scrollTo(null, y);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tgantt.setUserData(id, \"was_rendered\", true);\n\t\t\t}\n\t\t}\n\t});\n\n};","import * as env from \"../../utils/env\";\nimport * as eventable from \"../../utils/eventable\";\nimport { IScale } from \"../common/config\";\n\ninterface ITimelineZoomConfig {\n\thandler?: (e: Event) => {};\n\tstartDate?: Date;\n\tendDate?: Date;\n\tlevels: IZoomLevel[];\n\tactiveLevelIndex?: number;\n\twidthStep?: number;\n\tminColumnWidth?: number;\n\tmaxColumnWidth?: number;\n\tuseKey?: \"ctrlKey\" | \"altKey\" | \"shiftKey\";\n\ttrigger?: \"wheel\" | null | undefined;\n\telement?: Element | (() => Element);\n}\n\ntype TPossibleKeys = \"metaKey\" | \"ctrlKey\" | \"altKey\" | \"shiftKey\" | false | undefined;\nconst USE_KEY = [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\"];\n\ninterface IZoomLevel {\n\tname?: string;\n\tscale_height?: number;\n\tmin_column_width: number;\n\tscales: IScale[];\n}\n\nconst _defaultScales = [\n\t[\n\t\t{\n\t\t\tunit: \"month\",\n\t\t\tdate: \"%M\",\n\t\t\tstep: 1\n\t\t},\n\t\t{\n\t\t\tunit: \"day\",\n\t\t\tdate: \"%d\",\n\t\t\tstep: 1\n\t\t}\n\t],\n\t[\n\t\t{\n\t\t\tunit: \"day\",\n\t\t\tdate: \"%d %M\",\n\t\t\tstep: 1\n\t\t}\n\t],\n\t[\n\t\t{\n\t\t\tunit: \"day\",\n\t\t\tdate: \"%d %M\",\n\t\t\tstep: 1\n\t\t},\n\t\t{\n\t\t\tunit: \"hour\",\n\t\t\tdate: \"%H:00\",\n\t\t\tstep: 8\n\t\t},\n\t],\n\t[\n\t\t{\n\t\t\tunit: \"day\",\n\t\t\tdate: \"%d %M\",\n\t\t\tstep: 1\n\t\t},\n\t\t{\n\t\t\tunit: \"hour\",\n\t\t\tdate: \"%H:00\",\n\t\t\tstep: 1\n\t\t},\n\t],\n];\n\nexport default class TimelineZoom {\n\tpublic attachEvent: (eventName: string, handler: () => void) => string;\n\tpublic callEvent: (eventName: string, args: any[]) => any;\n\tpublic detachEvent: (eventName: string) => any;\n\tprotected _initialStartDate: Date;\n\tprotected _initialEndDate: Date;\n\tprotected _activeLevelIndex: number;\n\tprotected _levels: IZoomLevel[];\n\tprotected _handler: (e: any) => void;\n\tprotected $gantt;\n\tprotected _widthStep: number;\n\tprotected _minColumnWidth: number;\n\tprotected _maxColumnWidth: number;\n\tprotected _useKey: TPossibleKeys;\n\tprotected _visibleDate: Date;\n\tprotected _initialized: boolean;\n\tprotected _domEvents: any;\n\n\tconstructor(gantt) {\n\t\tthis.$gantt = gantt;\n\t\tthis._domEvents = this.$gantt._createDomEventScope();\n\t}\n\n\tpublic init(config: ITimelineZoomConfig) {\n\t\tthis._initialStartDate = config.startDate;\n\t\tthis._initialEndDate = config.endDate;\n\t\tthis._activeLevelIndex = config.activeLevelIndex ? config.activeLevelIndex : 0;\n\t\tthis._levels = this._mapScales(config.levels || _defaultScales);\n\t\tthis._handler = config.handler || this._defaultHandler;\n\t\tthis._minColumnWidth = config.minColumnWidth || 60;\n\t\tthis._maxColumnWidth = config.maxColumnWidth || 240;\n\t\tthis._widthStep = config.widthStep || 3/8 * config.minColumnWidth;\n\t\tthis._useKey = config.useKey;\n\n\t\tif(!this._initialized){\n\t\t\teventable(this);\n\t\t\tthis.$gantt.attachEvent(\"onGanttScroll\", () => {\n\t\t\t\tthis._getVisibleDate();\n\t\t\t});\n\t\t}\n\n\t\tthis._domEvents.detachAll();\n\n\t\tif(config.trigger === \"wheel\"){\n\t\t\tif(this.$gantt.$root){\n\t\t\t\tthis._attachWheelEvent(config);\n\t\t\t}else{\n\t\t\t\tthis.$gantt.attachEvent(\"onGanttReady\", () => {\n\t\t\t\t\tthis._attachWheelEvent(config);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis._initialized = true;\n\t\tthis.setLevel(this._activeLevelIndex);\n\t}\n\n\tpublic zoomIn = () => {\n\t\tconst index = this.getCurrentLevel() - 1;\n\t\tif(index < 0){\n\t\t\treturn;\n\t\t}\n\t\tthis.setLevel(index);\n\t}\n\n\tpublic zoomOut = () => {\n\t\tconst index = this.getCurrentLevel() + 1;\n\t\tif(index > this._levels.length - 1){\n\t\t\treturn;\n\t\t}\n\t\tthis.setLevel(index);\n\t}\n\n\tpublic getCurrentLevel = () => {\n\t\treturn this._activeLevelIndex;\n\t}\n\n\tpublic getLevels = () => {\n\t\treturn this._levels;\n\t}\n\n\tpublic setLevel = (level: number|string) => {\n\t\tconst zoomLevel = this._getZoomIndexByName(level);\n\n\t\tif(zoomLevel === -1){\n\t\t\tthis.$gantt.assert(zoomLevel !== -1, \"Invalid zoom level for gantt.ext.zoom.setLevel. \" + level + \" is not an expected value.\");\n\t\t}\n\t\tthis._setLevel(zoomLevel, 0);\n\t}\n\n\tprotected _getZoomIndexByName = (levelName: number|string) => {\n\t\tlet zoomLevel:number = -1;\n\t\tif(typeof levelName === \"string\"){\n\t\t\tif(!isNaN(Number(levelName)) && this._levels[Number(levelName)]){\n\t\t\t\tzoomLevel = Number(levelName);\n\t\t\t}else{\n\t\t\t\tfor(let i = 0; i < this._levels.length; i++){\n\t\t\t\t\tif(this._levels[i].name === levelName){\n\t\t\t\t\t\tzoomLevel = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tzoomLevel = levelName;\n\t\t}\n\t\treturn zoomLevel;\n\t}\n\n\tprotected _mapScales(levels: IScale[][] | any): IZoomLevel[]{\n\t\treturn levels.map((l) => {\n\t\t\tif(Array.isArray(l)){\n\t\t\t\treturn {\n\t\t\t\t\tscales: l\n\t\t\t\t};\n\t\t\t}else{\n\t\t\t\treturn l;\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _getVisibleDate = () => {\n\t\tconst scrollPos = this.$gantt.getScrollState().x;\n\t\tconst viewPort = this.$gantt.$task.offsetWidth;\n\t\tthis._visibleDate = this.$gantt.dateFromPos(scrollPos + viewPort/2);\n\t}\n\n\tprotected _setLevel = (level: number, cursorOffset: number) => {\n\t\tthis._activeLevelIndex = level;\n\n\t\tconst gantt = this.$gantt;\n\t\tconst nextConfig = gantt.copy(this._levels[this._activeLevelIndex]);\n\t\tconst chartConfig = gantt.copy(nextConfig);\n\t\tdelete chartConfig.name;\n\n\t\tgantt.mixin(gantt.config, chartConfig, true);\n\n\t\tconst isRendered = !!gantt.$root;\n\n\t\tif(isRendered){\n\t\t\tif(cursorOffset){\n\t\t\t\tconst cursorDate = this.$gantt.dateFromPos(cursorOffset + this.$gantt.getScrollState().x);\n\t\t\t\tthis.$gantt.render();\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(cursorDate);\n\t\t\t\tthis.$gantt.scrollTo(newPosition - cursorOffset);\n\t\t\t}else{\n\t\t\t\tconst viewPort = this.$gantt.$task.offsetWidth;\n\t\t\t\tif(!this._visibleDate){\n\t\t\t\t\tthis._getVisibleDate();\n\t\t\t\t}\n\t\t\t\tconst middleDate = this._visibleDate;\n\t\t\t\tthis.$gantt.render();\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(middleDate);\n\t\t\t\tthis.$gantt.scrollTo(newPosition - viewPort/2);\n\t\t\t}\n\n\t\t\tthis.callEvent(\"onAfterZoom\", [this._activeLevelIndex, nextConfig]);\n\t\t}\n\t}\n\n\tprivate _attachWheelEvent = (config) => {\n\t\tconst event = env.isFF ? \"wheel\" : \"mousewheel\";\n\t\tlet el: Element;\n\t\tif(typeof config.element === \"function\"){\n\t\t\tel = config.element();\n\t\t}else{\n\t\t\tel = config.element as Element;\n\t\t}\n\t\tif (!el){\n\t\t\treturn;\n\t\t}\n\n\t\tthis._domEvents.attach(el, event, this.$gantt.bind(function(e) {\n\t\t\tif (this._useKey) {\n\t\t\t\tif (USE_KEY.indexOf(this._useKey) < 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (!e[this._useKey]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof this._handler === \"function\") {\n\t\t\t\tthis._handler.apply(this, [e]);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}, this));\n\t}\n\n\tprivate _defaultHandler = (e: any):void => {\n\t\tconst timelineOffset = this.$gantt.$task.getBoundingClientRect().x;\n\t\tconst cursorOffset = e.clientX - timelineOffset;\n\t\tconst wheelY = this.$gantt.env.isFF ? (e.deltaY*-40) : e.wheelDelta;\n\t\tlet wheelUp = false;\n\t\tif (wheelY > 0) {\n\t\t\twheelUp = true;\n\t\t}\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tthis._setScaleSettings(wheelUp, cursorOffset);\n\t}\n\n\tprivate _setScaleSettings(wheelUp: boolean, cursorOffset: number) {\n\t\tif (wheelUp) {\n\t\t\tthis._stepUp(cursorOffset);\n\t\t} else {\n\t\t\tthis._stepDown(cursorOffset);\n\t\t}\n\t}\n\n\tprivate _setScaleDates = () => {\n\t\tif(this._initialStartDate && this._initialEndDate){\n\t\t\tthis.$gantt.config.start_date = this._initialStartDate;\n\t\t\tthis.$gantt.config.end_date = this._initialEndDate;\n\t\t}\n\t}\n\n\tprivate _stepUp(cursorOffset) {\n\t\tif (this._activeLevelIndex >= this._levels.length - 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet nextLevel = this._activeLevelIndex;\n\t\tthis._setScaleDates();\n\n\t\tif(this._widthStep){\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width + this._widthStep;\n\t\t\tif (newColumnWidth > this._maxColumnWidth) {\n\t\t\t\tnewColumnWidth = this._minColumnWidth;\n\t\t\t\tnextLevel++;\n\t\t\t}\n\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\n\t\t}else{\n\t\t\tnextLevel++;\n\t\t}\n\t\tthis._setLevel(nextLevel, cursorOffset);\n\t}\n\tprivate _stepDown(cursorOffset) {\n\t\tif (this._activeLevelIndex < 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet nextLevel = this._activeLevelIndex;\n\t\tthis._setScaleDates();\n\n\t\tif(this._widthStep){\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width - this._widthStep;\n\t\t\tif (newColumnWidth < this._minColumnWidth) {\n\t\t\t\tnewColumnWidth = this._maxColumnWidth;\n\t\t\t\tnextLevel--;\n\t\t\t}\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\n\t\t}else{\n\t\t\tnextLevel--;\n\t\t}\n\t\tthis._setLevel(nextLevel, cursorOffset);\n\t}\n}","module.exports = function(gantt) {\n\tfunction isEnabled() {\n\t\treturn gantt.config.auto_types && // if enabled\n\t\t\t(gantt.getTaskType(gantt.config.types.project) == gantt.config.types.project);// and supported\n\t}\n\n\tfunction callIfEnabled(callback) {\n\t\treturn function() {\n\t\t\tif (!isEnabled()) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn callback.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction updateParents(childId) {\n\t\tgantt.batchUpdate(function() {\n\t\t\tcheckParent(childId);\n\t\t});\n\t}\n\n\tvar delTaskParent;\n\n\tfunction checkParent(id) {\n\t\tsetTaskType(id);\n\t\tvar parent = gantt.getParent(id);\n\n\t\tif (parent != gantt.config.root_id) {\n\t\t\tcheckParent(parent);\n\t\t}\n\t}\n\n\tfunction setTaskType(id) {\n\t\tid = id.id || id;\n\t\tvar task = gantt.getTask(id);\n\t\tvar targetType = getTaskTypeToUpdate(task);\n\n\t\tif (targetType !== false) {\n\t\t\tupdateTaskType(task, targetType);\n\t\t}\n\t}\n\n\tfunction updateTaskType(task, targetType) {\n\t\tif(!gantt.getState().group_mode){\n\t\t\ttask.type = targetType;\n\t\t\tgantt.updateTask(task.id);\n\t\t}\n\t}\n\n\tfunction getTaskTypeToUpdate(task) {\n\t\tvar allTypes = gantt.config.types;\n\t\tvar hasChildren = gantt.hasChild(task.id);\n\t\tvar taskType = gantt.getTaskType(task.type);\n\n\t\tif (hasChildren && taskType === allTypes.task) {\n\t\t\treturn allTypes.project;\n\t\t}\n\n\t\tif (!hasChildren && taskType === allTypes.project) {\n\t\t\treturn allTypes.task;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tvar isParsingDone = true;\n\n\tgantt.attachEvent(\"onParse\", callIfEnabled(function() {\n\t\tisParsingDone = false;\n\n\t\tgantt.batchUpdate(function() {\n\t\t\tgantt.eachTask(function(task) {\n\t\t\t\tvar targetType = getTaskTypeToUpdate(task);\n\t\t\t\tif (targetType !== false) {\n\t\t\t\t\tupdateTaskType(task, targetType);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tisParsingDone = true;\n\t}));\n\n\tgantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function(id) {\n\t\tif (isParsingDone) {\n\t\t\tupdateParents(id);\n\t\t}\n\t}));\n\n\tgantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(function(id) {\n\t\tif (isParsingDone) {\n\t\t\tupdateParents(id);\n\t\t}\n\t}));\n\n\tfunction updateAfterRemoveChild(id){\n\t\tif (id != gantt.config.root_id && gantt.isTaskExists(id)) {\n\t\t\tupdateParents(id);\n\t\t}\n\t}\n\n\tgantt.attachEvent(\"onBeforeTaskDelete\", callIfEnabled(function(id, task) {\n\t\tdelTaskParent = gantt.getParent(id);\n\t\treturn true;\n\t}));\n\n\tgantt.attachEvent(\"onAfterTaskDelete\", callIfEnabled(function(id, task) {\n\t\tupdateAfterRemoveChild(delTaskParent);\n\t}));\n\n\n\tvar originalRowDndParent;\n\n\tgantt.attachEvent(\"onRowDragStart\", callIfEnabled(function(id, target, e) {\n\t\toriginalRowDndParent = gantt.getParent(id);\n\t\treturn true;\n\t}));\n\n\tgantt.attachEvent(\"onRowDragEnd\", callIfEnabled(function(id, target) {\n\t\tupdateAfterRemoveChild(originalRowDndParent);\n\t\tupdateParents(id);\n\t}));\n\n\tvar originalMoveTaskParent;\n\n\tgantt.attachEvent(\"onBeforeTaskMove\", callIfEnabled(function(sid, parent, tindex) {\n\t\toriginalMoveTaskParent = gantt.getParent(sid);\n\t\treturn true;\n\t}));\n\n\tgantt.attachEvent(\"onAfterTaskMove\", callIfEnabled(function(id, parent, tindex) {\n\t\tif (document.querySelector(\".gantt_drag_marker\")) {\n\t\t\t// vertical dnd in progress\n\t\t\treturn;\n\t\t}\n\t\tupdateAfterRemoveChild(originalMoveTaskParent);\n\t\tupdateParents(id);\n\t}));\n};","module.exports = function addPlaceholder(gantt){\n\tfunction isEnabled(){\n\t\treturn gantt.config.placeholder_task;\n\t}\n\n\tfunction callIfEnabled(callback){\n\t\treturn function(){\n\t\t\tif(!isEnabled()){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn callback.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction silenceDataProcessor(dataProcessor){\n\t\tif(dataProcessor && !dataProcessor._silencedPlaceholder){\n\t\t\tdataProcessor._silencedPlaceholder = true;\n\t\t\tdataProcessor.attachEvent(\"onBeforeUpdate\", callIfEnabled(function(id, state, data){\n\t\t\t\tif(data.type == gantt.config.types.placeholder){\n\t\t\t\t\tdataProcessor.setUpdated(id, false);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}));\n\t\t}\n\t}\n\n\tfunction insertPlaceholder(){\n\t\tvar placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\n\t\tif(!placeholders.length || !gantt.isTaskExists(placeholders[0].id)){\n\t\t\tvar placeholder = {\n\t\t\t\tunscheduled: true,\n\t\t\t\ttype: gantt.config.types.placeholder,\n\t\t\t\tduration:0,\n\t\t\t\ttext: gantt.locale.labels.new_task\n\t\t\t};\n\t\t\tif(gantt.callEvent(\"onTaskCreated\", [placeholder]) === false){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tgantt.addTask(placeholder);\n\t\t\t\n\t\t}\n\t}\n\n\tfunction afterEdit(id){\n\t\tvar item = gantt.getTask(id);\n\t\tif(item.type == gantt.config.types.placeholder) {\n\t\t\tif(item.start_date && item.end_date && item.unscheduled){\n\t\t\t\titem.unscheduled = false;\n\t\t\t}\n\n\t\t\tgantt.batchUpdate(function(){\n\t\t\t\tvar newTask = gantt.copy(item);\n\t\t\t\tgantt.silent(function(){\n\t\t\t\t\tgantt.deleteTask(item.id);\n\t\t\t\t});\n\n\t\t\t\tdelete newTask[\"!nativeeditor_status\"];\n\t\t\t\tnewTask.type = gantt.config.types.task;\n\t\t\t\tnewTask.id = gantt.uid();\n\t\t\t\tgantt.addTask(newTask);\n\n\t\t\t\t//insertPlaceholder();\n\t\t\t});\n\n\t\t}\n\t}\n\n\tgantt.config.types.placeholder = \"placeholder\";\n\tgantt.attachEvent(\"onDataProcessorReady\", callIfEnabled(silenceDataProcessor));\n\n\tvar ready = false;\n\tgantt.attachEvent(\"onGanttReady\", function(){\n\t\tif(ready){\n\t\t\treturn;\n\t\t}\n\t\tready = true;\n\t\tgantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(afterEdit));\n\t\tgantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function(id, task){\n\t\t\tif(task.type != gantt.config.types.placeholder){\n\t\t\t\tvar placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\n\t\t\t\tplaceholders.forEach(function(p){\n\t\t\t\t\tgantt.silent(function(){\n\t\t\t\t\t\tif(gantt.isTaskExists(p.id))\n\t\t\t\t\t\t\tgantt.deleteTask(p.id);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tinsertPlaceholder();\n\t\t\t}\n\t\t}));\n\t\tgantt.attachEvent(\"onParse\", callIfEnabled(insertPlaceholder));\n\t});\n\n\tgantt.attachEvent(\"onBeforeUndoStack\", function(action){\n\t\tfor(var i = 0; i < action.commands.length; i++){\n\t\t\tvar command = action.commands[i];\n\t\t\tif(command.entity === \"task\" && command.value.type === gantt.config.types.placeholder){\n\t\t\t\taction.commands.splice(i,1);\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t});\n\n};","var helpers = require(\"../../utils/helpers\");\nvar getRectangle = require(\"../ui/render/viewport/get_bg_row_rectangle\");\n\nfunction createResourceMethods(gantt){\n\n\tvar resourceTaskCache = {};\n\n\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(){\n\t\tresourceTaskCache = {};\n\t});\n\n\tfunction getTaskBy(propertyName, propertyValue) {\n\t\tif (typeof propertyName == \"function\") {\n\t\t\treturn filterResourceTasks(propertyName);\n\t\t} else {\n\t\t\tif (helpers.isArray(propertyValue)) {\n\t\t\t\treturn getResourceTasks(propertyName, propertyValue);\n\t\t\t} else {\n\t\t\t\treturn getResourceTasks(propertyName, [propertyValue]);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction filterResourceTasks(filter) {\n\t\tvar res = [];\n\t\tgantt.eachTask(function (task) {\n\t\t\tif (filter(task)) {\n\t\t\t\tres.push(task);\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t}\n\n\tvar falsyValuePreffix = String(Math.random());\n\tfunction resourceHashFunction(value){\n\t\tif (value === null){\n\t\t\treturn falsyValuePreffix + String(value);\n\t\t}\n\t\treturn String(value);\n\t}\n\n\tfunction getResourceTasks(property, resourceIds) {\n\t\tvar res;\n\t\tvar cacheKey = resourceIds.join(\"_\") + \"_\" + property;\n\t\tvar resourceHash = {};\n\t\thelpers.forEach(resourceIds, function(resourceId) {\n\t\t\tresourceHash[resourceHashFunction(resourceId)] = true;\n\t\t});\n\n\t\tif (!resourceTaskCache[cacheKey]) {\n\t\t\tres = resourceTaskCache[cacheKey] = [];\n\t\t\tgantt.eachTask(function (task) {\n\t\t\t\tif (task.type == gantt.config.types.project) return;\n\t\t\t\tif (property in task) {\n\t\t\t\t\tvar resourceValue;\n\t\t\t\t\tif (!helpers.isArray(task[property])) {\n\t\t\t\t\t\tresourceValue = [task[property]];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresourceValue = task[property];\n\t\t\t\t\t}\n\t\t\t\t\thelpers.forEach(resourceValue, function(value) {\n\t\t\t\t\t\tif (resourceHash[resourceHashFunction(value)] || (value && resourceHash[resourceHashFunction(value.resource_id)])) {\n\t\t\t\t\t\t\tres.push(task);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tres = resourceTaskCache[cacheKey];\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tfunction getResourceLoad(resource, resourceProperty, scale, timeline){\n\t\tvar cacheKey = resource.id + \"_\" + resourceProperty + \"_\" + scale.unit + \"_\" + scale.step;\n\t\tvar res;\n\t\tif (!resourceTaskCache[cacheKey]) {\n\t\t\tres = resourceTaskCache[cacheKey] = calculateResourceLoad(resource, resourceProperty, scale, timeline);\n\n\t\t} else {\n\t\t\tres = resourceTaskCache[cacheKey];\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction calculateResourceLoad(resource, resourceProperty, scale, timeline) {\n\n\t\tvar tasks;\n\t\tif(resource.$role == \"task\"){\n\t\t\ttasks = [];\n\t\t}else{\n\t\t\ttasks = getTaskBy(resourceProperty, resource.id);\n\t\t}\n\t\tvar scaleUnit = scale.unit;\n\t\tvar scaleStep = scale.step;\n\t\tvar timegrid = {};\n\n\t\tfor (var i = 0; i < tasks.length; i++) {\n\t\t\tvar task = tasks[i];\n\n\t\t\tvar currDate = gantt.date[scaleUnit + \"_start\"](new Date(task.start_date));\n\n\t\t\twhile (currDate < task.end_date) {\n\n\t\t\t\tvar date = currDate;\n\t\t\t\tcurrDate = gantt.date.add(currDate, scaleStep, scaleUnit);\n\n\t\t\t\tif (!gantt.isWorkTime({date: date, task: task, unit: scaleUnit})) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar timestamp = date.valueOf();\n\t\t\t\tif (!timegrid[timestamp]){\n\t\t\t\t\ttimegrid[timestamp] = [];\n\t\t\t\t}\n\n\t\t\t\ttimegrid[timestamp].push(task);\n\t\t\t}\n\t\t}\n\n\t\tvar timetable = [];\n\t\tvar start, end, tasks;\n\t\tvar config = timeline.$getConfig();\n\n\t\tfor(var i = 0; i < scale.trace_x.length; i++){\n\t\t\tstart = new Date(scale.trace_x[i]);\n\t\t\tend = gantt.date.add(start, scaleStep, scaleUnit);\n\t\t\ttasks = timegrid[start.valueOf()] || [];\n\t\t\tif(tasks.length || config.resource_render_empty_cells){\n\t\t\t\ttimetable.push({\n\t\t\t\t\tstart_date: start,\n\t\t\t\t\tend_date: end,\n\t\t\t\t\ttasks: tasks\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\treturn timetable;\n\t}\n\n\tfunction generateRenderResourceLine(){\n\n\t\tvar renderedResourceLines = {};\n\n\t\tfunction renderResourceLineCell(resource, day, templates, config, timeline){\n\t\t\tvar css = templates.resource_cell_class(day.start_date, day.end_date, resource, day.tasks);\n\t\t\tvar content = templates.resource_cell_value(day.start_date, day.end_date, resource, day.tasks);\n\n\t\t\tif (css || content){\n\t\t\t\tvar sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\n\t\t\t\tvar el = document.createElement('div');\n\t\t\t\tel.className = [\"gantt_resource_marker\", css].join(\" \");\n\n\t\t\t\tel.style.cssText = [\n\t\t\t\t\t'left:' + sizes.left + 'px',\n\t\t\t\t\t'width:' + sizes.width + 'px',\n\t\t\t\t\t'height:' + (config.row_height - 1) + 'px',\n\t\t\t\t\t'line-height:' + (config.row_height - 1) + 'px',\n\t\t\t\t\t'top:' + sizes.top + 'px'\n\t\t\t\t].join(\";\");\n\n\t\t\t\tif(content)\n\t\t\t\t\tel.innerHTML = content;\n\t\t\t\t\n\t\t\t\treturn el;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction detachRenderedResourceLine(id, index){\n\t\t\tif(renderedResourceLines[id] && renderedResourceLines[id][index] &&\n\t\t\t\trenderedResourceLines[id][index].parentNode\n\t\t\t\t){\n\t\t\t\t\trenderedResourceLines[id][index].parentNode.removeChild(renderedResourceLines[id][index]);\n\t\t\t\t}\n\t\t}\n\n\t\tfunction renderResourceLine(resource, timeline, viewport) {\n\t\t\tvar config = timeline.$getConfig(),\n\t\t\t\ttemplates = timeline.$getTemplates();\n\t\t\tvar scale = timeline.getScale();\n\t\t\tvar timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\n\n\t\t\tvar cells = [];\n\t\t\trenderedResourceLines[resource.id] = {};\n\t\t\tfor (var i = 0; i < timetable.length; i++) {\n\n\t\t\t\tvar day = timetable[i];\n\t\t\t\tvar columnIndex = scale.trace_indexes[day.start_date.valueOf()];\n\t\t\t\tif(!isColumnVisible(columnIndex, scale, viewport)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar cell = renderResourceLineCell(resource, day, templates, config, timeline);\n\t\t\t\tif(cell){\n\t\t\t\t\tcells.push(cell);\n\t\t\t\t\trenderedResourceLines[resource.id][columnIndex] = cell;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar row = null;\n\t\t\tif(cells.length){\n\t\t\t\trow = document.createElement(\"div\");\n\t\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\t\trow.appendChild(cells[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn row;\n\t\t}\n\n\t\tfunction updateResourceLine(resource, node, timeline, viewport) {\n\t\t\tvar config = timeline.$getConfig(),\n\t\t\t\ttemplates = timeline.$getTemplates();\n\t\t\tvar scale = timeline.getScale();\n\t\t\tvar timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\n\n\t\t\tfor (var i = 0; i < timetable.length; i++) {\n\n\t\t\t\tvar day = timetable[i];\n\t\t\t\tvar columnIndex = scale.trace_indexes[day.start_date.valueOf()];\n\t\t\t\tif(!isColumnVisible(columnIndex, scale, viewport)){\n\t\t\t\t\tdetachRenderedResourceLine(resource.id, columnIndex);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif(!renderedResourceLines[resource.id] || !renderedResourceLines[resource.id][columnIndex]){\n\t\t\t\t\tvar cell = renderResourceLineCell(resource, day, templates, config, timeline);\n\t\t\t\t\tif(cell){\n\t\t\t\t\t\tnode.appendChild(cell);\n\t\t\t\t\t\trenderedResourceLines[resource.id][columnIndex] = cell;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(renderedResourceLines[resource.id] && renderedResourceLines[resource.id][columnIndex] && !renderedResourceLines[resource.id][columnIndex].parentNode){\n\t\t\t\t\tnode.appendChild(renderedResourceLines[resource.id][columnIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\trender: renderResourceLine,\n\t\t\tupdate: updateResourceLine,\n\t\t\tgetRectangle: getRectangle\n\t\t};\n\t}\n\t\n\tfunction renderBar(level, start, end, timeline){\n\t\tvar top = (1 - (level*1||0))*100;\n\t\tvar left = timeline.posFromDate(start);\n\t\tvar right = timeline.posFromDate(end);\n\t\tvar element = document.createElement(\"div\");\n\t\telement.className = \"gantt_histogram_hor_bar\";\n\t\telement.style.top = top + '%';\n\t\telement.style.left = left + \"px\";\n\t\telement.style.width = (right - left + 1) + \"px\";\n\t\treturn element;\n\t}\n\tfunction renderConnection(prevLevel, nextLevel, left){\n\t\tif(prevLevel === nextLevel){\n\t\t\treturn null;\n\t\t}\n\n\t\tvar top = 1 - Math.max(prevLevel, nextLevel);\n\t\tvar height = Math.abs(prevLevel - nextLevel);\n\t\tvar element = document.createElement(\"div\");\n\t\telement.className = \"gantt_histogram_vert_bar\";\n\t\telement.style.top = top*100 + \"%\";\n\t\telement.style.height = height*100 + \"%\";\n\t\telement.style.left = left + \"px\";\n\n\t\treturn element;\n\t}\n\n\tfunction isColumnVisible(columnIndex, scale, viewPort){\n\t\tvar width = scale.width[columnIndex];\n\t\tvar cellLeftCoord = scale.left[columnIndex] - width;\n\t\tvar cellRightCoord = scale.left[columnIndex] + width;\n\t\treturn (width > 0 && cellLeftCoord <= viewPort.x_end && cellRightCoord >= viewPort.x);//do not render skipped columns\n\t}\n\n\n\n\tfunction generateRenderResourceHistogram(){\n\n\t\tvar renderedHistogramCells = {};\n\t\tvar renderedHistogramRows = {};\n\t\tvar renderedHistogramCapacity = {};\n\n\t\tfunction detachRenderedHistogramCell(id, index){\n\n\t\t\tvar renderedRow = renderedHistogramCells[id];\n\t\t\tif(renderedRow && renderedRow[index] && \n\t\t\t\trenderedRow[index].parentNode\n\t\t\t\t){\n\t\t\t\t\trenderedRow[index].parentNode.removeChild(renderedRow[index]);\n\t\t\t\t}\n\t\t}\n\n\t\tfunction renderHistogramLine(capacity, timeline, maxCapacity, viewPort){\n\t\t\tvar scale = timeline.getScale();\n\n\t\t\tvar el = document.createElement(\"div\");\n\n\t\t\tfor(var i = 0; i < scale.trace_x.length; i++){\n\t\t\t\tif(!isColumnVisible(i, scale, viewPort)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar colStart = scale.trace_x[i];\n\t\t\t\tvar colEnd = scale.trace_x[i + 1] || gantt.date.add(colStart, scale.step, scale.unit);\n\t\t\t\tvar col = scale.trace_x[i].valueOf();\n\t\t\t\tvar level = Math.min(capacity[col]/maxCapacity, 1) || 0;\n\t\t\t\t// do not render histogram for lines with below zero capacity, as it's reserved for folders\n\t\t\t\tif(level < 0){\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tvar nextLevel = Math.min(capacity[colEnd.valueOf()]/maxCapacity, 1) || 0;\n\t\t\t\tvar bar = renderBar(level, colStart, colEnd, timeline);\n\t\t\t\tif(bar){\n\t\t\t\t\tel.appendChild(bar);\n\t\t\t\t}\n\t\t\t\tvar connection = renderConnection(level, nextLevel, timeline.posFromDate(colEnd));\n\t\t\t\tif(connection){\n\t\t\t\t\tel.appendChild(connection);\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn el;\n\t\t}\n\n\t\tfunction renderCapacityElement(resource, sizes, capacityMatrix, config, timeline, maxCapacity, viewport){\n\n\t\t\tvar renderedElement = renderedHistogramCapacity[resource.id];\n\t\t\tif(renderedElement && renderedElement.parentNode){\n\t\t\t\trenderedElement.parentNode.removeChild(renderedElement);\n\t\t\t}\n\n\t\t\tvar capacityElement = renderHistogramLine(capacityMatrix, timeline, maxCapacity, viewport);\n\t\t\tif (capacityElement) {\n\t\t\t\tcapacityElement.setAttribute(\"data-resource-id\", resource.id);\n\t\t\t\tcapacityElement.style.position = \"absolute\";\n\t\t\t\tcapacityElement.style.top = (sizes.top + 1) + \"px\";\n\t\t\t\tcapacityElement.style.height = (config.row_height - 1) + \"px\";\n\t\t\t\tcapacityElement.style.left = 0;\n\t\t\t}\n\t\t\treturn capacityElement;\n\t\t}\n\n\t\tfunction renderHistogramCell(resource, sizes, maxCapacity, config, templates, day){\n\t\t\tvar css = templates.histogram_cell_class(day.start_date, day.end_date, resource, day.tasks);\n\t\t\tvar content = templates.histogram_cell_label(day.start_date, day.end_date, resource, day.tasks);\n\t\t\tvar fill = templates.histogram_cell_allocated(day.start_date, day.end_date, resource, day.tasks);\n\t\t\tif(css || content){\n\t\t\t\tvar el = document.createElement('div');\n\t\t\t\tel.className = [\"gantt_histogram_cell\", css].join(\" \");\n\n\t\t\t\tel.style.cssText = [\n\t\t\t\t\t'left:' + sizes.left + 'px',\n\t\t\t\t\t'width:' + sizes.width + 'px',\n\t\t\t\t\t'height:' + (config.row_height - 1) + 'px',\n\t\t\t\t\t'line-height:' + (config.row_height - 1) + 'px',\n\t\t\t\t\t'top:' + (sizes.top + 1) + 'px'\n\t\t\t\t].join(\";\");\n\n\n\t\t\t\tif (content) {\n\t\t\t\t\tcontent = \"
\" + content +\"
\";\n\t\t\t\t}\n\n\t\t\t\tif (fill) {\n\t\t\t\t\tcontent = \"
\" + content;\n\t\t\t\t}\n\n\t\t\t\tif (content) {\n\t\t\t\t\tel.innerHTML = content;\n\t\t\t\t}\n\n\t\t\t\treturn el;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction renderResourceHistogram(resource, timeline, viewport) {\n\t\t\tvar config = timeline.$getConfig(),\n\t\t\t\ttemplates = timeline.$getTemplates();\n\t\t\tvar scale = timeline.getScale();\n\t\t\tvar timetable = getResourceLoad(resource, config.resource_property, scale, timeline);\n\n\t\t\tvar cells = [];\n\t\t\tvar capacityMatrix = {};\n\t\t\tvar maxCapacity = resource.capacity || timeline.$config.capacity || 24;\n\t\t\trenderedHistogramCells[resource.id] = {};\n\t\t\trenderedHistogramRows[resource.id] = null;\n\t\t\trenderedHistogramCapacity[resource.id] = null;\n\t\t\tfor (var i = 0; i < timetable.length; i++) {\n\t\t\t\tvar day = timetable[i];\n\t\t\t\tvar columnIndex = scale.trace_indexes[day.start_date.valueOf()];\n\t\t\t\tif(!isColumnVisible(columnIndex, scale, viewport)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar capacity = templates.histogram_cell_capacity(day.start_date, day.end_date, resource, day.tasks);\n\t\t\t\tcapacityMatrix[day.start_date.valueOf()] = capacity || 0;\n\t\t\t\tvar sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\n\n\t\t\t\tvar el = renderHistogramCell(resource, sizes, maxCapacity, config, templates, day);\n\t\t\t\tif(el){\n\t\t\t\t\tcells.push(el);\n\t\t\t\t\trenderedHistogramCells[resource.id][columnIndex] = el;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar row = null;\n\t\t\tif (cells.length) {\n\t\t\t\trow = document.createElement(\"div\");\n\t\t\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\t\t\trow.appendChild(cells[i]);\n\t\t\t\t}\n\n\t\t\t\tvar capacityElement = renderCapacityElement(resource, sizes, capacityMatrix, config, timeline, maxCapacity, viewport);\n\t\t\t\tif(capacityElement){\n\t\t\t\t\trow.appendChild(capacityElement);\n\t\t\t\t\trenderedHistogramCapacity[resource.id] = capacityElement;\n\t\t\t\t}\n\t\t\t\trenderedHistogramRows[resource.id] = row;\n\t\t\t}\n\n\t\t\treturn row;\n\t\t}\n\n\t\tfunction updateResourceHistogram(resource, node, timeline, viewport) {\n\t\t\tvar config = timeline.$getConfig(),\n\t\t\t\ttemplates = timeline.$getTemplates();\n\t\t\tvar scale = timeline.getScale();\n\t\t\tvar timetable = getResourceLoad(resource, config.resource_property, scale, timeline);\n\t\t\tvar maxCapacity = resource.capacity || timeline.$config.capacity || 24;\n\t\t\tvar capacityMatrix = {};\n\n\t\t\tfor (var i = 0; i < timetable.length; i++) {\n\t\t\t\tvar day = timetable[i];\n\t\t\t\tvar columnIndex = scale.trace_indexes[day.start_date.valueOf()];\n\t\t\t\tvar capacity = templates.histogram_cell_capacity(day.start_date, day.end_date, resource, day.tasks);\n\t\t\t\tcapacityMatrix[day.start_date.valueOf()] = capacity || 0;\n\t\t\t\tvar sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\n\n\t\t\t\tif(!isColumnVisible(columnIndex, scale, viewport)){\n\t\t\t\t\tdetachRenderedHistogramCell(resource.id, columnIndex);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar renderedCell = renderedHistogramCells[resource.id];\n\t\t\t\tif(!renderedCell || !renderedCell[columnIndex]){\n\t\t\t\t\tvar el = renderHistogramCell(resource, sizes, maxCapacity, config, templates, day);\n\t\t\t\t\tif(el){\n\t\t\t\t\t\tnode.appendChild(el);\n\t\t\t\t\t\trenderedHistogramCells[resource.id][columnIndex] = el;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(renderedCell && renderedCell[columnIndex] && !renderedCell[columnIndex].parentNode){\n\t\t\t\t\tnode.appendChild(renderedCell[columnIndex]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar capacityElement = renderCapacityElement(resource, sizes, capacityMatrix, config, timeline, maxCapacity, viewport);\n\t\t\tif(capacityElement){\n\t\t\t\tnode.appendChild(capacityElement);\n\t\t\t\trenderedHistogramCapacity[resource.id] = capacityElement;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\trender: renderResourceHistogram,\n\t\t\tupdate: updateResourceHistogram,\n\t\t\tgetRectangle: getRectangle\n\t\t};\n\t}\n\t\n\n\tfunction selectAssignments(resourceId, taskId, result){\n\t\tvar property = gantt.config.resource_property;\n\t\tvar owners = [];\n\t\tif (gantt.getDatastore(\"task\").exists(taskId)) {\n\t\t\tvar task = gantt.getTask(taskId);\n\t\t\towners = task[property] || [];\n\t\t}\n\n\t\tif (!Array.isArray(owners)) {\n\t\t\towners = [owners];\n\t\t}\n\t\tfor (var i = 0; i < owners.length; i++) {\n\t\t\tif (owners[i].resource_id == resourceId) {\n\t\t\t\tresult.push({task_id: task.id, resource_id:owners[i].resource_id, value:owners[i].value});\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getResourceAssignments(resourceId, taskId){\n\t\t// resource assignment as an independent module:\n\t\t// {taskId:, resourceId, value}\n\t\t// TODO: probably should add a separate datastore for these\n\t\tvar assignments = [];\n\t\tvar property = gantt.config.resource_property;\n\t\tif(taskId !== undefined){\n\t\t\tselectAssignments(resourceId, taskId, assignments);\n\t\t}else{\n\t\t\tvar tasks = gantt.getTaskBy(property, resourceId);\n\t\t\ttasks.forEach(function(task){\n\t\t\t\tselectAssignments(resourceId, task.id, assignments);\n\t\t\t});\n\t\t}\n\t\treturn assignments;\n\t}\n\n\treturn {\n\t\trenderLine: generateRenderResourceLine,\n\t\trenderHistogram: generateRenderResourceHistogram,\n\t\tfilterTasks: getTaskBy,\n\t\tgetResourceAssignments: getResourceAssignments\n\t};\n}\n\nmodule.exports = function(gantt){\n\tvar methods = createResourceMethods(gantt);\n\n\tgantt.getTaskBy = methods.filterTasks;\n\tgantt.getResourceAssignments = methods.getResourceAssignments;\n\tgantt.$ui.layers.resourceRow = methods.renderLine;\n\tgantt.$ui.layers.resourceHistogram = methods.renderHistogram;\n\tgantt.config.resource_property = \"owner_id\";\n\tgantt.config.resource_store = \"resource\";\n\tgantt.config.resource_render_empty_cells = false;\n\n\t/**\n\t * these are placeholder functions that should be redefined by the user\n\t*/\n\tgantt.templates.histogram_cell_class = function(start_date, end_date, resource, tasks) {};\n\tgantt.templates.histogram_cell_label = function(start_date, end_date, resource, tasks) {\n\t\treturn tasks.length + \"/3\";\n\t};\n\tgantt.templates.histogram_cell_allocated = function(start_date, end_date, resource, tasks) {\n\t\treturn tasks.length / 3;\n\t};\n\tgantt.templates.histogram_cell_capacity = function(start_date, end_date, resource, tasks) {\n\t\treturn 0;\n\t};\n\n\n\n\tgantt.templates.resource_cell_class = function(start, end, resource, tasks) {\n\t\tvar css = \"\";\n\t\tif (tasks.length <= 1) {\n\t\t\tcss = \"gantt_resource_marker_ok\";\n\t\t} else {\n\t\t\tcss = \"gantt_resource_marker_overtime\";\n\t\t}\n\t\treturn css;\n\t};\n\n\tgantt.templates.resource_cell_value = function(start, end, resource, tasks) {\n\t\treturn tasks.length * 8;\n\t};\n};\n\n\n","if (window.dhtmlx){\n\n\tif (!window.dhtmlx.attaches)\n\twindow.dhtmlx.attaches = {};\n\n\twindow.dhtmlx.attaches.attachGantt=function(start, end, gantt){\n\t\tvar obj = document.createElement(\"DIV\");\n\n\t\tgantt = gantt || window.gantt;\n\n\t\tobj.id = \"gantt_\"+ gantt.uid();\n\t\tobj.style.width = \"100%\";\n\t\tobj.style.height = \"100%\";\n\t\tobj.cmp = \"grid\";\n\n\t\tdocument.body.appendChild(obj);\n\t\tthis.attachObject(obj.id);\n\t\tthis.dataType = \"gantt\";\n\t\tthis.dataObj = gantt;\n\n\t\tvar that = this.vs[this.av];\n\t\tthat.grid = gantt;\n\n\t\tgantt.init(obj.id, start, end);\n\t\tobj.firstChild.style.border = \"none\";\n\n\t\tthat.gridId = obj.id;\n\t\tthat.gridObj = obj;\n\n\t\tvar method_name=\"_viewRestore\";\n\t\treturn this.vs[this[method_name]()].grid;\n\t};\n\n}\nif (typeof(window.dhtmlXCellObject) != \"undefined\") {\n\n\twindow.dhtmlXCellObject.prototype.attachGantt=function(start, end, gantt){\n\t\tgantt = gantt || window.gantt;\n\n\t\tvar obj = document.createElement(\"DIV\");\n\t\tobj.id = \"gantt_\"+gantt.uid();\n\t\tobj.style.width = \"100%\";\n\t\tobj.style.height = \"100%\";\n\t\tobj.cmp = \"grid\";\n\n\t\tdocument.body.appendChild(obj);\n\t\tthis.attachObject(obj.id);\n\n\t\tthis.dataType = \"gantt\";\n\t\tthis.dataObj = gantt;\n\n\t\tgantt.init(obj.id, start, end);\n\t\tobj.firstChild.style.border = \"none\";\n\n\t\tobj = null;\n\t\tthis.callEvent(\"_onContentAttach\",[]);\n\n\t\treturn this.dataObj;\n\t};\n}\n\nmodule.exports = null;","if (window.jQuery){\n\n\t(function( $ ){\n\n\t\tvar methods = [];\n\t\t$.fn.dhx_gantt = function(config){\n\t\t\tconfig = config || {};\n\t\t\tif (typeof(config) === 'string') {\n\t\t\t\tif (methods[config] ) {\n\t\t\t\t\treturn methods[config].apply(this, []);\n\t\t\t\t}else {\n\t\t\t\t\t$.error('Method ' + config + ' does not exist on jQuery.dhx_gantt');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar views = [];\n\t\t\t\tthis.each(function() {\n\t\t\t\t\tif (this && this.getAttribute){\n\t\t\t\t\t\tif (!this.gantt && !(window.gantt.$root == this)){\n\n\t\t\t\t\t\t\tvar newgantt = (window.gantt.$container && window.Gantt) ? window.Gantt.getGanttInstance():window.gantt;\n\t\t\t\t\t\t\tfor (var key in config)\n\t\t\t\t\t\t\t\tif (key!=\"data\")\n\t\t\t\t\t\t\t\t\tnewgantt.config[key] = config[key];\n\n\t\t\t\t\t\t\tnewgantt.init(this);\n\t\t\t\t\t\t\tif (config.data)\n\t\t\t\t\t\t\t\tnewgantt.parse(config.data);\n\n\t\t\t\t\t\t\tviews.push(newgantt);\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tviews.push(typeof this.gantt == \"object\" ? this.gantt : window.gantt);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\n\t\t\t\tif (views.length === 1) return views[0];\n\t\t\t\treturn views;\n\t\t\t}\n\t\t};\n\n\t})(window.jQuery);\n\n}\n\n\nmodule.exports = null;","var createWbs = (function(gantt){\n\treturn {\n\t_needRecalc: true,\n\treset: function(){\n\t\tthis._needRecalc = true;\n\t},\n\t_isRecalcNeeded: function(){\n\t\treturn (!this._isGroupSort() && this._needRecalc);\n\t},\n\t_isGroupSort: function() {\n\t\treturn !!(gantt.getState().group_mode);\n\t},\n\t_getWBSCode: function(task) {\n\t\tif(!task) return \"\";\n\n\t\tif(this._isRecalcNeeded()){\n\t\t\tthis._calcWBS();\n\t\t}\n\n\t\tif(task.$virtual) return \"\";\n\t\tif(this._isGroupSort()) return task.$wbs || \"\";\n\n\t\tif(!task.$wbs) {\n\t\t\tthis.reset();\n\t\t\tthis._calcWBS();\n\t\t}\n\t\treturn task.$wbs;\n\t},\n\t_setWBSCode: function(task, value) {\n\t\ttask.$wbs = value;\n\t},\n\tgetWBSCode: function(task) {\n\t\treturn this._getWBSCode(task);\n\t},\n\tgetByWBSCode: function(code){\n\t\tvar parts = code.split(\".\");\n\t\tvar currentNode = gantt.config.root_id;\n\t\tfor(var i = 0; i < parts.length; i++){\n\t\t\tvar children = gantt.getChildren(currentNode);\n\t\t\tvar index = parts[i]*1 - 1;\n\t\t\tif(gantt.isTaskExists(children[index])){\n\t\t\t\tcurrentNode = children[index];\n\t\t\t}else{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tif(gantt.isTaskExists(currentNode)){\n\t\t\treturn gantt.getTask(currentNode);\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t},\n\t_calcWBS: function() {\n\t\tif(!this._isRecalcNeeded()) return;\n\n\t\tvar _isFirst = true;\n\t\tgantt.eachTask(function(ch) {\n\t\t\tif(_isFirst) {\n\t\t\t\t_isFirst = false;\n\t\t\t\tthis._setWBSCode(ch, \"1\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar _prevSibling = gantt.getPrevSibling(ch.id);\n\t\t\tif (_prevSibling !== null) {\n\t\t\t\tvar _wbs = gantt.getTask(_prevSibling).$wbs;\n\t\t\t\tif(_wbs) {\n\t\t\t\t\t_wbs = _wbs.split(\".\");\n\t\t\t\t\t_wbs[_wbs.length-1]++;\n\t\t\t\t\tthis._setWBSCode(ch, _wbs.join(\".\"));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _parent = gantt.getParent(ch.id);\n\t\t\t\tthis._setWBSCode(ch, gantt.getTask(_parent).$wbs + \".1\");\n\t\t\t}\n\t\t}, gantt.config.root_id, this);\n\n\t\tthis._needRecalc = false;\n\t}\n};\n});\n\nmodule.exports = function(gantt){\n\tvar wbs = createWbs(gantt);\n\tgantt.getWBSCode = function getWBSCode(task) {\n\t\treturn wbs.getWBSCode(task);\n\t};\n\n\tgantt.getTaskByWBSCode = function(code) {\n\t\treturn wbs.getByWBSCode(code);\n\t};\n\n\tfunction resetCache(){\n\t\twbs.reset();\n\t\treturn true;\n\t}\n\n\tgantt.attachEvent(\"onAfterTaskMove\", resetCache);\n\tgantt.attachEvent(\"onBeforeParse\", resetCache);\n\tgantt.attachEvent(\"onAfterTaskDelete\", resetCache);\n\tgantt.attachEvent(\"onAfterTaskAdd\", resetCache);\n\tgantt.attachEvent(\"onAfterSort\", resetCache);\n\n};\n","function createMethod(gantt){\n\tvar methods = {};\n\tvar isActive = false;\n\tfunction disableMethod(methodName, dummyMethod){\n\t\tdummyMethod = typeof dummyMethod == \"function\" ? dummyMethod : function(){};\n\n\t\tif(!methods[methodName]){\n\t\t\tmethods[methodName] = this[methodName];\n\t\t\tthis[methodName] = dummyMethod;\n\t\t}\n\t}\n\tfunction restoreMethod(methodName){\n\t\tif(methods[methodName]){\n\t\t\tthis[methodName] = methods[methodName];\n\t\t\tmethods[methodName] = null;\n\t\t}\n\t}\n\tfunction disableMethods(methodsHash){\n\t\tfor(var i in methodsHash){\n\t\t\tdisableMethod.call(this, i, methodsHash[i]);\n\t\t}\n\t}\n\tfunction restoreMethods(){\n\t\tfor(var i in methods){\n\t\t\trestoreMethod.call(this, i);\n\t\t}\n\t}\n\n\tfunction batchUpdatePayload(callback){\n\t\ttry{\n\t\t\tcallback();\n\t\t}catch(e){\n\t\t\twindow.console.error(e);\n\t\t}\n\t}\n\n\tvar state = gantt.$services.getService(\"state\");\n\tstate.registerProvider(\"batchUpdate\", function(){\n\t\treturn {\n\t\t\tbatch_update: isActive\n\t\t};\n\t}, true);\n\n\treturn function batchUpdate(callback, noRedraw) {\n\t\tif(isActive){\n\t\t\t// batch mode is already active\n\t\t\tbatchUpdatePayload(callback);\n\t\t\treturn;\n\t\t}\n\n\t\tvar call_dp = (this._dp && this._dp.updateMode != \"off\");\n\t\tvar dp_mode;\n\t\tif (call_dp){\n\t\t\tdp_mode = this._dp.updateMode;\n\t\t\tthis._dp.setUpdateMode(\"off\");\n\t\t}\n\n\t\t// temporary disable some methods while updating multiple tasks\n\t\tvar resetProjects = {};\n\t\tvar methods = {\n\t\t\t\"render\":true,\n\t\t\t\"refreshData\":true,\n\t\t\t\"refreshTask\":true,\n\t\t\t\"refreshLink\":true,\n\t\t\t\"resetProjectDates\":function(task){\n\t\t\t\tresetProjects[task.id] = task;\n\t\t\t}\n\t\t};\n\n\t\tdisableMethods.call(this, methods);\n\n\t\tisActive = true;\n\t\tthis.callEvent(\"onBeforeBatchUpdate\", []);\n\n\t\tbatchUpdatePayload(callback);\n\n\t\tthis.callEvent(\"onAfterBatchUpdate\", []);\n\n\t\trestoreMethods.call(this);\n\n\t\t// do required updates after changes applied\n\t\tfor(var i in resetProjects){\n\t\t\tthis.resetProjectDates(resetProjects[i]);\n\t\t}\n\n\t\tisActive = false;\n\n\t\tif(!noRedraw){\n\t\t\tthis.render();\n\t\t}\n\n\t\tif (call_dp) {\n\t\t\tthis._dp.setUpdateMode(dp_mode);\n\t\t\tthis._dp.setGanttMode(\"task\");\n\t\t\tthis._dp.sendData();\n\t\t\tthis._dp.setGanttMode(\"link\");\n\t\t\tthis._dp.sendData();\n\t\t}\n\t};\n\n\n\n}\n\nmodule.exports = function(gantt){\n\tgantt.batchUpdate = createMethod(gantt);\n};","var domHelpers = require(\"../../utils/dom_helpers\");\n\nmodule.exports = function(gantt){\n\n\tvar scrollRange = 50,\n\t\tscrollStep = 30,\n\t\tscrollDelay = 10,\n\t\tscrollSpeed = 50;\n\n\tvar interval = null,\n\t\tisMove = false,\n\t\tdelayTimeout = null,\n\t\tstartPos = {\n\t\t\tstarted: false\n\t\t},\n\t\teventPos = {};\n\n\n\tfunction isDisplayed(element){\n\t\treturn element &&\n\t\t\tdomHelpers.isChildOf(element, gantt.$root) &&\n\t\t\telement.offsetHeight;\n\t}\n\n\tfunction getAutoscrollContainer(){\n\t\tvar element;\n\t\tif(isDisplayed(gantt.$task)){\n\t\t\telement = gantt.$task;\n\t\t}else if(isDisplayed(gantt.$grid)){\n\t\t\telement = gantt.$grid;\n\t\t}else{\n\t\t\telement = gantt.$root;\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tfunction isScrollState() {\n\t\tvar dragMarker = !!document.querySelector(\".gantt_drag_marker\");\n\t\tvar isResize = !!document.querySelector(\".gantt_drag_marker.gantt_grid_resize_area\");\n\t\tvar isLink = !!document.querySelector(\".gantt_link_direction\");\n\t\tvar state = gantt.getState();\n\t\tvar isClickDrag = state.autoscroll;\n\t\tisMove = dragMarker && !isResize && !isLink;\n\n\t\treturn !((!state.drag_mode && !dragMarker) || isResize) || isClickDrag;\n\t}\n\n\tfunction defineDelayTimeout(state) {\n\t\tif (delayTimeout) {\n\t\t\tclearTimeout(delayTimeout);\n\t\t\tdelayTimeout = null;\n\t\t}\n\t\tif (state) {\n\t\t\tvar speed = gantt.config.autoscroll_speed;\n\t\t\tif (speed && speed < 10) // limit speed value to 10\n\t\t\t\tspeed = 10;\n\n\t\t\tdelayTimeout = setTimeout(function() {\n\t\t\t\tinterval = setInterval(tick, speed || scrollSpeed);\n\t\t\t}, gantt.config.autoscroll_delay || scrollDelay);\n\t\t}\n\t}\n\n\tfunction defineScrollInterval(state) {\n\t\tif (state) {\n\t\t\tdefineDelayTimeout(true);\n\t\t\tif (!startPos.started) {\n\t\t\t\tstartPos.x = eventPos.x;\n\t\t\t\tstartPos.y = eventPos.y;\n\t\t\t\tstartPos.started = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (interval) {\n\t\t\t\tclearInterval(interval);\n\t\t\t\tinterval = null;\n\t\t\t}\n\t\t\tdefineDelayTimeout(false);\n\t\t\tstartPos.started = false;\n\t\t}\n\t}\n\n\tfunction autoscrollInterval(event) {\n\n\t\tvar isScroll = isScrollState();\n\n\t\tif ((interval || delayTimeout) && !isScroll) {\n\t\t\tdefineScrollInterval(false);\n\t\t}\n\n\t\tif (!gantt.config.autoscroll || !isScroll) {\n\t\t\treturn false;\n\t\t}\n\n\t\teventPos = {\n\t\t\tx: event.clientX,\n\t\t\ty: event.clientY\n\t\t};\n\n\t\tif (!interval && isScroll) {\n\t\t\tdefineScrollInterval(true);\n\t\t}\n\t}\n\n\tfunction tick() {\n\n\t\tif (!isScrollState()) {\n\t\t\tdefineScrollInterval(false);\n\t\t\treturn false;\n\t\t}\n\n\t\tvar box = domHelpers.getNodePosition(getAutoscrollContainer());\n\t\tvar posX = eventPos.x - box.x;\n\t\tvar posY = eventPos.y - box.y;\n\n\t\tvar scrollLeft = isMove ? 0 : need_scroll(posX, box.width, startPos.x - box.x);\n\t\tvar scrollTop = need_scroll(posY, box.height, startPos.y - box.y);\n\n\t\tvar scrollState = gantt.getScrollState();\n\n\t\tvar currentScrollTop = scrollState.y,\n\t\t\tscrollOuterHeight = scrollState.inner_height,\n\t\t\tscrollInnerHeight = scrollState.height,\n\t\t\tcurrentScrollLeft = scrollState.x,\n\t\t\tscrollOuterWidth = scrollState.inner_width,\n\t\t\tscrollInnerWidth = scrollState.width;\n\n\t\t// do scrolling only if we have scrollable area to do so\n\t\tif (scrollTop && !scrollOuterHeight) {\n\t\t\tscrollTop = 0;\n\t\t} else if (scrollTop < 0 && !currentScrollTop) {\n\t\t\tscrollTop = 0;\n\t\t} else if (scrollTop > 0 && currentScrollTop + scrollOuterHeight >= scrollInnerHeight + 2) {\n\t\t\tscrollTop = 0;\n\t\t}\n\n\t\tif (scrollLeft && !scrollOuterWidth) {\n\t\t\tscrollLeft = 0;\n\t\t} else if (scrollLeft < 0 && !currentScrollLeft) {\n\t\t\tscrollLeft = 0;\n\t\t} else if (scrollLeft > 0 && currentScrollLeft + scrollOuterWidth >= scrollInnerWidth) {\n\t\t\tscrollLeft = 0;\n\t\t}\n\n\t\tvar step = gantt.config.autoscroll_step;\n\n\t\tif (step && step < 2) // limit step value to 2\n\t\t\tstep = 2;\n\n\t\tscrollLeft = scrollLeft * (step || scrollStep);\n\t\tscrollTop = scrollTop * (step || scrollStep);\n\n\t\tif (scrollLeft || scrollTop) {\n\t\t\tscroll(scrollLeft, scrollTop);\n\t\t}\n\t}\n\n\tfunction need_scroll(pos, boxSize, startCoord) {\n\t\tif ((pos - scrollRange < 0) && (pos < startCoord))\n\t\t\treturn -1;\n\t\telse if ((pos > boxSize - scrollRange) && (pos > startCoord))\n\t\t\treturn 1;\n\t\treturn 0;\n\t}\n\n\tfunction scroll(left, top) {\n\t\tvar scrollState = gantt.getScrollState();\n\n\t\tvar scrollLeft = null,\n\t\t\tscrollTop = null;\n\n\t\tif (left) {\n\t\t\tscrollLeft = scrollState.x + left;\n\t\t\tscrollLeft = Math.min(scrollState.width, scrollLeft);\n\t\t\tscrollLeft = Math.max(0, scrollLeft);\n\t\t}\n\n\t\tif (top) {\n\t\t\tscrollTop = scrollState.y + top;\n\t\t\tscrollTop = Math.min(scrollState.height, scrollTop);\n\t\t\tscrollTop = Math.max(0, scrollTop);\n\t\t}\n\n\t\tgantt.scrollTo(scrollLeft, scrollTop);\n\t}\n\n\tgantt.attachEvent(\"onGanttReady\", function() {\n\t\tgantt.eventRemove(document.body, \"mousemove\", autoscrollInterval);\n\t\tgantt.event(document.body, \"mousemove\", autoscrollInterval);\n\t});\n\n};","module.exports = function(gantt){\n\tif(!gantt.ext){\n\t\tgantt.ext = {};\n\t}\n\n\tvar modules = [\n\t\trequire(\"./autoscroll\"),\n\t\trequire(\"./batch_update\"),\n\t\trequire(\"./wbs\"),\n\t\trequire(\"./jquery_hooks\"),\n\t\trequire(\"./dhtmlx_hooks\"),\n\t\trequire(\"./resources\"),\n\t\trequire(\"./new_task_placeholder\"),\n\t\trequire(\"./auto_task_types\")\n\t];\n\n\tfor(var i = 0; i < modules.length; i++){\n\t\tif(modules[i])\n\t\t\tmodules[i](gantt);\n\t}\n\n\tvar TimelineZoom = require(\"./timeline_zoom\").default;\n\tgantt.ext.zoom = new TimelineZoom(gantt);\n};","\nexport default function extendGantt(gantt: any, dp: any) {\n\tgantt.getUserData = function(id, name) {\n\t\tif (!this.userdata) {\n\t\t\tthis.userdata = {};\n\t\t}\n\t\tif (this.userdata[id] && this.userdata[id][name]) {\n\t\t\treturn this.userdata[id][name];\n\t\t}\n\t\treturn \"\";\n\t};\n\tgantt.setUserData = function(id, name, value) {\n\t\tif (!this.userdata) {\n\t\t\tthis.userdata = {};\n\t\t}\n\t\tif (!this.userdata[id]) {\n\t\t\tthis.userdata[id] = {};\n\t\t}\n\t\tthis.userdata[id][name] = value;\n\t};\n\n\tgantt._change_id = function(oldId, newId) {\n\t\tif (this._dp._ganttMode !== \"task\") {\n\t\t\tthis.changeLinkId(oldId, newId);\n\t\t} else {\n\t\t\tthis.changeTaskId(oldId, newId);\n\t\t}\n\t};\n\n\tgantt._row_style = function(rowId, classname){\n\t\tif (this._dp._ganttMode !== \"task\") {\n\t\t\treturn;\n\t\t}\n\t\tif (!gantt.isTaskExists(rowId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst task = gantt.getTask(rowId);\n\t\ttask.$dataprocessor_class = classname;\n\t\tgantt.refreshTask(rowId);\n\t};\n\n\t// fake method for dataprocessor\n\tgantt._delete_task = function(rowId, node) {}; // tslint:disable-line\n\n\tgantt._sendTaskOrder = function(id, item){\n\t\tif (item.$drop_target) {\n\t\t\tthis._dp.setGanttMode(\"task\");\n\t\t\tthis.getTask(id).target = item.$drop_target;\n\t\t\tthis._dp.setUpdated(id, true,\"order\");\n\t\t\tdelete this.getTask(id).$drop_target;\n\t\t}\n\t};\n\n\tgantt.setDp = function() {\n\t\tthis._dp = dp;\n\t};\n\n\tgantt.setDp();\n}","import * as helpers from \"../../utils/helpers\";\n\nexport default class DataProcessorEvents {\n\tprotected _dataProcessorHandlers: any[];\n\tprotected $gantt: any;\n\tprotected $dp: any;\n\n\tconstructor(gantt: any, dp: any) {\n\t\tthis.$gantt = gantt;\n\t\tthis.$dp = dp;\n\t\tthis._dataProcessorHandlers = [];\n\t}\n\n\tattach() {\n\t\tconst dp = this.$dp;\n\t\tconst gantt = this.$gantt;\n\t\tconst treeHelper = require(\"../../utils/task_tree_helpers\");\n\t\tconst cascadeDelete = {};\n\n\t\tfunction clientSideDelete(id) {\n\t\t\tconst updated = dp.updatedRows.slice();\n\t\t\tlet clientOnly = false;\n\n\t\t\tfor (let i = 0; i < updated.length && !dp._in_progress[id]; i++) {\n\t\t\t\tif (updated[i] === id) {\n\t\t\t\t\tif (gantt.getUserData(id, \"!nativeeditor_status\") === \"inserted\") {\n\t\t\t\t\t\tclientOnly = true;\n\t\t\t\t\t}\n\t\t\t\t\tdp.setUpdated(id,false);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clientOnly;\n\t\t}\n\n\t\tfunction getTaskLinks(task) {\n\t\t\tlet _links = [];\n\n\t\t\tif (task.$source) {\n\t\t\t\t_links = _links.concat(task.$source);\n\t\t\t}\n\t\t\tif (task.$target) {\n\t\t\t\t_links = _links.concat(task.$target);\n\t\t\t}\n\n\t\t\treturn _links;\n\t\t}\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskAdd\", function(id, item) { // tslint:disable-line\n\t\t\tif (gantt.isTaskExists(id)) {\n\t\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\t\tdp.setUpdated(id, true, \"inserted\");\n\t\t\t}\n\t\t}));\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskUpdate\", function(id, item) { // tslint:disable-line\n\t\t\tif (gantt.isTaskExists(id)) {\n\t\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\t\tdp.setUpdated(id, true);\n\n\t\t\t\t// gantt can be destroyed/reinitialized after dp.setUpdated\n\t\t\t\tif(gantt._sendTaskOrder){\n\t\t\t\t\tgantt._sendTaskOrder(id, item);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onBeforeTaskDelete\", function(id, item) { // tslint:disable-line\n\t\t\tif (!gantt.config.cascade_delete) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcascadeDelete[id] = {\n\t\t\t\ttasks: treeHelper.getSubtreeTasks(gantt, id),\n\t\t\t\tlinks: treeHelper.getSubtreeLinks(gantt, id)\n\t\t\t};\n\t\t\treturn true;\n\t\t}));\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskDelete\", function(id, item) { // tslint:disable-line\n\t\t\tdp.setGanttMode(\"tasks\");\n\n\t\t\t// not send delete request if item is not inserted into the db - just remove it from the client\n\t\t\tconst needDbDelete = !clientSideDelete(id);\n\t\t\tif (!needDbDelete) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (gantt.config.cascade_delete && cascadeDelete[id]) {\n\t\t\t\tconst dpMode = dp.updateMode;\n\t\t\t\tdp.setUpdateMode(\"off\");\n\n\t\t\t\tconst cascade = cascadeDelete[id];\n\t\t\t\tfor (const i in cascade.tasks) {\n\t\t\t\t\tif (!clientSideDelete(i)) {\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdp.setGanttMode(\"links\");\n\t\t\t\tfor (const i in cascade.links) {\n\t\t\t\t\tif (!clientSideDelete(i)) {\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcascadeDelete[id] = null;\n\n\t\t\t\tif (dpMode !== \"off\") {\n\t\t\t\t\tdp.sendAllData();\n\t\t\t\t}\n\t\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\t\tdp.setUpdateMode(dpMode);\n\t\t\t}\n\t\t\tdp.setUpdated(id, true, \"deleted\");\n\n\t\t\tif (dp.updateMode !== \"off\" && !dp._tSend) {\n\t\t\t\tdp.sendAllData();\n\t\t\t}\n\t\t}));\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkUpdate\", function(id, item) { // tslint:disable-line\n\t\t\tif (gantt.isLinkExists(id)) {\n\t\t\t\tdp.setGanttMode(\"links\");\n\t\t\t\tdp.setUpdated(id, true);\n\t\t\t}\n\t\t}));\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkAdd\", function(id, item) { // tslint:disable-line\n\t\t\tif (gantt.isLinkExists(id)) {\n\t\t\t\tdp.setGanttMode(\"links\");\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\n\t\t\t}\n\t\t}));\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkDelete\", function(id, item) { // tslint:disable-line\n\t\t\tdp.setGanttMode(\"links\");\n\n\t\t\tconst needDbDelete = !clientSideDelete(id);\n\t\t\tif (!needDbDelete) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdp.setUpdated(id, true,\"deleted\");\n\t\t}));\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onRowDragEnd\", function(id, target) { // tslint:disable-line\n\t\t\tgantt._sendTaskOrder(id, gantt.getTask(id));\n\t\t}));\n\n\t\tlet tasks = null;\n\t\tlet links = null;\n\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onTaskIdChange\", function(oldId, newId) { // tslint:disable-line\n\t\t\tif (!dp._waitMode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst children = gantt.getChildren(newId);\n\t\t\tif (children.length) {\n\t\t\t\ttasks = tasks || {};\n\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\t\tconst ch = this.getTask(children[i]);\n\t\t\t\t\ttasks[ch.id] = ch;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst item = this.getTask(newId);\n\t\t\tconst itemLinks = getTaskLinks(item);\n\n\t\t\tif (itemLinks.length) {\n\t\t\t\tlinks = links || {};\n\n\t\t\t\tfor (let i = 0; i < itemLinks.length; i++) {\n\t\t\t\t\tconst link = this.getLink(itemLinks[i]);\n\t\t\t\t\tlinks[link.id] = link;\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tdp.attachEvent(\"onAfterUpdateFinish\", function() {\n\t\t\tif (tasks || links) {\n\t\t\t\tgantt.batchUpdate(function() {\n\t\t\t\t\tfor (const id in tasks) {\n\t\t\t\t\t\tgantt.updateTask(tasks[id].id);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const id in links) {\n\t\t\t\t\t\tgantt.updateLink(links[id].id);\n\t\t\t\t\t}\n\t\t\t\t\ttasks = null;\n\t\t\t\t\tlinks = null;\n\t\t\t\t});\n\t\t\t\tif (tasks) {\n\t\t\t\t\tgantt._dp.setGanttMode(\"tasks\");\n\t\t\t\t} else {\n\t\t\t\t\tgantt._dp.setGanttMode(\"links\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tdp.attachEvent(\"onBeforeDataSending\", function() {\n\t\t\tif (this._tMode === \"CUSTOM\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tlet url = this._serverProcessor;\n\t\t\tif (this._tMode === \"REST-JSON\" || this._tMode === \"REST\") {\n\t\t\t\tconst mode = this._ganttMode;\n\n\t\t\t\turl = url.substring(0, url.indexOf(\"?\") > -1 ? url.indexOf(\"?\") : url.length);\n\t\t\t\t// editing=true&\n\t\t\t\tthis.serverProcessor = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + mode;\n\t\t\t} else {\n\t\t\t\tconst pluralizedMode = this._ganttMode + \"s\";\n\t\t\t\tthis.serverProcessor = url + gantt.ajax.urlSeparator(url) + \"gantt_mode=\" + pluralizedMode;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tdp.attachEvent(\"insertCallback\", function insertCallback(upd, id, parent, mode) { // tslint:disable-line\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\n\t\t\tconst methods = {\n\t\t\t\tadd: gantt.addTask,\n\t\t\t\tisExist: gantt.isTaskExists\n\t\t\t};\n\t\t\tif (mode === \"links\") {\n\t\t\t\tmethods.add = gantt.addLink;\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\n\t\t\t}\n\t\t\tif (methods.isExist.call(gantt, id)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdata.id = id;\n\t\t\tmethods.add.call(gantt, data);\n\t\t});\n\n\t\tdp.attachEvent(\"updateCallback\", function updateCallback(upd, id) {\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\n\t\t\tif (!gantt.isTaskExists(id)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst objData = gantt.getTask(id);\n\t\t\tfor (const key in data) {\n\t\t\t\tlet property = data[key];\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase \"id\":\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase \"start_date\":\n\t\t\t\t\tcase \"end_date\":\n\t\t\t\t\t\tproperty = gantt.templates.xml_date !== gantt.templates.parse_date ? gantt.templates.xml_date(property) : gantt.templates.parse_date(property);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"duration\":\n\t\t\t\t\t\tobjData.end_date = gantt.calculateEndDate({start_date: objData.start_date, duration: property, task:objData});\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tobjData[key] = property;\n\t\t\t}\n\t\t\tgantt.updateTask(id);\n\t\t\tgantt.refreshData();\n\t\t});\n\t\tdp.attachEvent(\"deleteCallback\", function deleteCallback(upd, id, parent, mode) { // tslint:disable-line\n\t\t\tconst methods = {\n\t\t\t\tdelete: gantt.deleteTask,\n\t\t\t\tisExist: gantt.isTaskExists\n\t\t\t};\n\t\t\tif (mode === \"links\") {\n\t\t\t\tmethods.delete = gantt.deleteLink;\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\n\t\t\t}\n\t\t\tif (methods.isExist.call(gantt, id)) {\n\t\t\t\tmethods.delete.call(gantt, id);\n\t\t\t}\n\t\t});\n\t}\n\n\tdetach() {\n\t\thelpers.forEach(this._dataProcessorHandlers, (e) => {\n\t\t\tthis.$gantt.detachEvent(e);\n\t\t});\n\t\tthis._dataProcessorHandlers = [];\n\t}\n}\n","import * as eventable from \"../../utils/eventable\";\nimport * as helpers from \"../../utils/helpers\";\nimport * as utils from \"../../utils/utils\";\nimport DataProcessorEvents from \"./data_processor_events\";\nimport extendGantt from \"./extend_gantt\";\n\nexport interface DataProcessor { // tslint:disable-line\n\t$gantt: any;\n\tdetachAllEvents: any;\n\tattachEvent: any;\n\tcallEvent: any;\n\n\tserverProcessor: string;\n\taction_param: string;\n\tobject: any;\n\tupdatedRows: any[];\n\tautoUpdate: boolean;\n\tupdateMode: string;\n\tmandatoryFields: any[];\n\tmessages: any[];\n\tstyles: object;\n\tdnd: any;\n}\n\nexport function createDataProcessor(config: any) {\n\tlet router;\n\tlet tMode;\n\tif (config instanceof Function) {\n\t\trouter = config;\n\t} else if (config.hasOwnProperty(\"router\")) {\n\t\trouter = config.router;\n\t} else if (config.hasOwnProperty(\"link\") && config.hasOwnProperty(\"task\")) {\n\t\trouter = config;\n\t}\n\tif (router) {\n\t\ttMode = \"CUSTOM\";\n\t} else {\n\t\ttMode = config.mode || \"REST-JSON\";\n\t}\n\tconst gantt = this; // tslint:disable-line\n\tconst dp = new DataProcessor(config.url);\n\tdp.init(gantt);\n\tdp.setTransactionMode({\n\t\tmode: tMode,\n\t\trouter\n\t}, config.batchUpdate);\n\treturn dp;\n}\n\nexport class DataProcessor {\n\tpublic modes: object;\n\tpublic serverProcessor: string;\n\tpublic action_param: string; // tslint:disable-line\n\tpublic object: any;\n\tpublic updatedRows: any[];\n\tpublic autoUpdate: boolean;\n\tpublic updateMode: string;\n\tpublic mandatoryFields: any[];\n\tpublic messages: any[];\n\tpublic styles: object;\n\tpublic dnd: any;\n\n\tprotected _tMode: string;\n\tprotected _headers: any;\n\tprotected _payload: any;\n\tprotected _postDelim: string;\n\tprotected _waitMode: number;\n\tprotected _in_progress: object; // tslint:disable-line\n\tprotected _invalid: object;\n\tprotected _tSend: boolean;\n\tprotected _endnm: boolean;\n\tprotected _serializeAsJson: boolean;\n\tprotected _router: any;\n\tprotected _utf: boolean;\n\tprotected obj: any;\n\tprotected _columns: any;\n\tprotected _changed: boolean;\n\tprotected _methods: any[];\n\tprotected _user: any;\n\tprotected _uActions: object;\n\tprotected _needUpdate: boolean;\n\tprotected _ganttMode: string;\n\n\tprotected _silent_mode: any; // tslint:disable-line\n\tprotected _updateBusy: any;\n\tprotected _serverProcessor: any;\n\tprotected _initialized: boolean;\n\n\tconstructor(serverProcessorURL?) {\n\t\tthis.serverProcessor = serverProcessorURL;\n\t\tthis.action_param = \"!nativeeditor_status\";\n\n\t\tthis.object = null;\n\t\tthis.updatedRows = []; // ids of updated rows\n\n\t\tthis.autoUpdate = true;\n\t\tthis.updateMode = \"cell\";\n\t\tthis._headers = null;\n\t\tthis._payload = null;\n\t\tthis._postDelim = \"_\";\n\n\t\tthis._waitMode = 0;\n\t\tthis._in_progress = {}; // ?\n\t\tthis._invalid = {};\n\t\tthis.mandatoryFields = [];\n\t\tthis.messages = [];\n\n\t\tthis.styles = {\n\t\t\tupdated: \"font-weight:bold;\",\n\t\t\tinserted: \"font-weight:bold;\",\n\t\t\tdeleted: \"text-decoration : line-through;\",\n\t\t\tinvalid: \"background-color:FFE0E0;\",\n\t\t\tinvalid_cell: \"border-bottom:2px solid red;\",\n\t\t\terror: \"color:red;\",\n\t\t\tclear: \"font-weight:normal;text-decoration:none;\"\n\t\t};\n\t\tthis.enableUTFencoding(true);\n\t\teventable(this);\n\t}\n\n\tsetTransactionMode(mode:any, total?:any) {\n\t\tif (typeof mode === \"object\") {\n\t\t\tthis._tMode = mode.mode || this._tMode;\n\n\t\t\tif (utils.defined(mode.headers)) {\n\t\t\t\tthis._headers = mode.headers;\n\t\t\t}\n\n\t\t\tif (utils.defined(mode.payload)) {\n\t\t\t\tthis._payload = mode.payload;\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis._tMode = mode;\n\t\t\tthis._tSend = total;\n\t\t}\n\n\t\tif (this._tMode === \"REST\") {\n\t\t\tthis._tSend = false;\n\t\t\tthis._endnm = true;\n\t\t}\n\n\t\tif (this._tMode === \"JSON\" || this._tMode === \"REST-JSON\") {\n\t\t\tthis._tSend = false;\n\t\t\tthis._endnm = true;\n\t\t\tthis._serializeAsJson = true;\n\t\t\tthis._headers = this._headers || {};\n\t\t\tthis._headers[\"Content-type\"] = \"application/json\";\n\t\t}\n\n\t\tif (this._tMode === \"CUSTOM\") {\n\t\t\tthis._tSend = false;\n\t\t\tthis._endnm = true;\n\t\t\tthis._router = mode.router;\n\t\t}\n\t}\n\n\tescape(data:any) {\n\t\tif (this._utf) {\n\t\t\treturn encodeURIComponent(data);\n\t\t} else {\n\t\t\treturn escape(data);\n\t\t}\n\t}\n\n\t/**\n\t * @desc: allows to set escaping mode\n\t * @param: true - utf based escaping, simple - use current page encoding\n\t * @type: public\n\t */\n\tenableUTFencoding(mode:boolean) {\n\t\tthis._utf = !!mode;\n\t}\n\n\n\t/**\n\t * @desc: allows to define, which column may trigger update\n\t * @param: val - array or list of true/false values\n\t * @type: public\n\t */\n\tsetDataColumns(val:string|any) {\n\t\tthis._columns = (typeof val === \"string\") ? val.split(\",\") : val;\n\t}\n\n\t/**\n\t * @desc: get state of updating\n\t * @returns: true - all in sync with server, false - some items not updated yet.\n\t * @type: public\n\t */\n\tgetSyncState() {\n\t\treturn !this.updatedRows.length;\n\t}\n\n\t/**\n\t * @desc: enable/disable named field for data syncing, will use column ids for grid\n\t * @param: mode - true/false\n\t * @type: public\n\t */\n\tenableDataNames(mode: boolean) {\n\t\tthis._endnm = !!mode;\n\t}\n\n\t/**\n\t * @desc: enable/disable mode , when only changed fields and row id send to the server side, instead of all fields in default mode\n\t * @param: mode - true/false\n\t * @type: public\n\t */\n\tenablePartialDataSend(mode: boolean) {\n\t\tthis._changed = !!mode;\n\t}\n\n\t/**\n\t * @desc: set if rows should be send to server automaticaly\n\t * @param: mode - \"row\" - based on row selection changed, \"cell\" - based on cell editing finished, \"off\" - manual data sending\n\t * @type: public\n\t */\n\tsetUpdateMode(mode: string, dnd: any) {\n\t\tthis.autoUpdate = (mode === \"cell\");\n\t\tthis.updateMode = mode;\n\t\tthis.dnd = dnd;\n\t}\n\n\tignore(code: any, master: any) {\n\t\tthis._silent_mode = true;\n\t\tcode.call(master || window);\n\t\tthis._silent_mode = false;\n\t}\n\n\t/**\n\t * @desc: mark row as updated/normal. check mandatory fields,initiate autoupdate (if turned on)\n\t * @param: rowId - id of row to set update-status for\n\t * @param: state - true for \"updated\", false for \"not updated\"\n\t * @param: mode - update mode name\n\t * @type: public\n\t */\n\tsetUpdated(rowId:number|string, state: boolean, mode?: string) {\n\t\tif (this._silent_mode) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ind = this.findRow(rowId);\n\n\t\tmode = mode || \"updated\";\n\t\tconst existing = this.$gantt.getUserData(rowId, this.action_param);\n\t\tif (existing && mode === \"updated\") {\n\t\t\tmode = existing;\n\t\t}\n\t\tif (state) {\n\t\t\tthis.set_invalid(rowId, false); // clear previous error flag\n\t\t\tthis.updatedRows[ind] = rowId;\n\t\t\tthis.$gantt.setUserData(rowId, this.action_param, mode);\n\t\t\tif (this._in_progress[rowId]) {\n\t\t\t\tthis._in_progress[rowId] = \"wait\";\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.is_invalid(rowId)) {\n\t\t\t\tthis.updatedRows.splice(ind, 1);\n\t\t\t\tthis.$gantt.setUserData(rowId, this.action_param, \"\");\n\t\t\t}\n\t\t}\n\n\t\tthis.markRow(rowId, state, mode);\n\t\tif (state && this.autoUpdate) {\n\t\t\tthis.sendData(rowId);\n\t\t}\n\t}\n\n\tmarkRow(id: number | string, state: boolean, mode: string) {\n\t\tlet str = \"\";\n\t\tconst invalid = this.is_invalid(id);\n\t\tif (invalid) {\n\t\t\tstr = this.styles[invalid];\n\t\t\tstate = true;\n\t\t}\n\t\tif (this.callEvent(\"onRowMark\", [id, state, mode, invalid])) {\n\t\t\t// default logic\n\t\t\tstr = this.styles[state ? mode : \"clear\"] + str;\n\n\t\t\tthis.$gantt[this._methods[0]](id, str);\n\n\t\t\tif (invalid && invalid.details) {\n\t\t\t\tstr += this.styles[invalid + \"_cell\"];\n\t\t\t\tfor (let i = 0; i < invalid.details.length; i++) {\n\t\t\t\t\tif (invalid.details[i]) {\n\t\t\t\t\t\tthis.$gantt[this._methods[1]](id, i, str);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActionByState(state: string):string {\n\t\tif (state === \"inserted\") {\n\t\t\treturn \"create\";\n\t\t}\n\n\t\tif (state === \"updated\") {\n\t\t\treturn \"update\";\n\t\t}\n\n\t\tif (state === \"deleted\") {\n\t\t\treturn \"delete\";\n\t\t}\n\n\t\t// reorder\n\t\treturn \"update\";\n\t}\n\n\tgetState(id: number | string) {\n\t\treturn this.$gantt.getUserData(id, this.action_param);\n\t}\n\n\tis_invalid(id: number | string) {\n\t\treturn this._invalid[id];\n\t}\n\n\tset_invalid(id: number | string, mode: any, details?) {\n\t\tif (details) {\n\t\t\tmode = {\n\t\t\t\tvalue: mode,\n\t\t\t\tdetails,\n\t\t\t\ttoString: function() { // tslint:disable-line\n\t\t\t\t\treturn this.value.toString();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tthis._invalid[id] = mode;\n\t}\n\n\t/**\n\t * @desc: check mandatory fields and varify values of cells, initiate update (if specified)\n\t * @param: rowId - id of row to set update-status for\n\t * @type: public\n\t */\n\t// tslint:disable-next-line\n\tcheckBeforeUpdate(rowId: number | string) { // ???\n\t\treturn true;\n\t}\n\n\t/**\n\t * @desc: send row(s) values to server\n\t * @param: rowId - id of row which data to send. If not specified, then all \"updated\" rows will be send\n\t * @type: public\n\t */\n\tsendData(rowId?: any) {\n\t\tif (this._waitMode && (this.$gantt.mytype === \"tree\" || this.$gantt._h2)) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.$gantt.editStop) {\n\t\t\tthis.$gantt.editStop();\n\t\t}\n\n\n\t\tif (typeof rowId === \"undefined\" || this._tSend) {\n\t\t\treturn this.sendAllData();\n\t\t}\n\t\tif (this._in_progress[rowId]) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.messages = [];\n\t\tif (!this.checkBeforeUpdate(rowId) && this.callEvent(\"onValidationError\", [rowId, this.messages])) {\n\t\t\treturn false; // ??? unreachable code, drop it?\n\t\t}\n\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\n\t}\n\n\t_beforeSendData(data: any, rowId: any) {\n\t\tif (!this.callEvent(\"onBeforeUpdate\", [rowId, this.getState(rowId), data])) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._sendData(data, rowId);\n\t}\n\n\tserialize(data: any, id: any) {\n\t\tif (this._serializeAsJson) {\n\t\t\treturn this._serializeAsJSON(data);\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\treturn data;\n\t\t}\n\t\tif (typeof id !== \"undefined\") {\n\t\t\treturn this.serialize_one(data, \"\");\n\t\t} else {\n\t\t\tconst stack = [];\n\t\t\tconst keys = [];\n\t\t\tfor (const key in data) {\n\t\t\t\tif (data.hasOwnProperty(key)) {\n\t\t\t\t\tstack.push(this.serialize_one(data[key], key + this._postDelim));\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstack.push(\"ids=\" + this.escape(keys.join(\",\")));\n\t\t\tif (this.$gantt.security_key) {\n\t\t\t\tstack.push(\"dhx_security=\" + this.$gantt.security_key);\n\t\t\t}\n\t\t\treturn stack.join(\"&\");\n\t\t}\n\t}\n\n\t_serializeAsJSON(data: any) {\n\t\tif (typeof data === \"string\") {\n\t\t\treturn data;\n\t\t}\n\n\t\tconst copy = utils.copy(data);\n\t\tif (this._tMode === \"REST-JSON\") {\n\t\t\tdelete copy.id;\n\t\t\tdelete copy[this.action_param];\n\t\t}\n\n\t\treturn JSON.stringify(copy);\n\t}\n\n\tserialize_one(data: any, pref: string) {\n\t\tif (typeof data === \"string\") {\n\t\t\treturn data;\n\t\t}\n\t\tconst stack = [];\n\t\tlet serialized = \"\";\n\t\tfor (const key in data)\n\t\t\tif (data.hasOwnProperty(key)) {\n\t\t\t\tif ((key === \"id\" ||\n\t\t\t\t\tkey == this.action_param) && // tslint:disable-line\n\t\t\t\t\tthis._tMode === \"REST\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (typeof data[key] === \"string\" || typeof data[key] === \"number\") {\n\t\t\t\t\tserialized = data[key];\n\t\t\t\t} else {\n\t\t\t\t\tserialized = JSON.stringify(data[key]);\n\t\t\t\t}\n\t\t\t\tstack.push(this.escape((pref || \"\") + key) + \"=\" + this.escape(serialized));\n\t\t\t}\n\t\treturn stack.join(\"&\");\n\t}\n\n\t_applyPayload(url: string) {\n\t\tconst ajax = this.$gantt.ajax;\n\t\tif (this._payload) {\n\t\t\tfor (const key in this._payload) {\n\t\t\t\turl = url + ajax.urlSeparator(url) + this.escape(key) + \"=\" + this.escape(this._payload[key]);\n\t\t\t}\n\t\t}\n\t\treturn url;\n\t}\n\n\t_sendData(dataToSend: any, rowId?: any) {\n\t\tif (!dataToSend) {\n\t\t\treturn; // nothing to send\n\t\t}\n\t\tif (!this.callEvent(\"onBeforeDataSending\", rowId ? [rowId, this.getState(rowId), dataToSend] : [null, null, dataToSend])) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (rowId) {\n\t\t\tthis._in_progress[rowId] = (new Date()).valueOf();\n\t\t}\n\n\t\tconst ajax = this.$gantt.ajax;\n\n\t\tif (this._tMode === \"CUSTOM\") {\n\t\t\tconst taskState = this.getState(rowId);\n\t\t\tconst taskAction = this.getActionByState(taskState);\n\t\t\tconst ganttMode = this.getGanttMode();\n\t\t\tconst _onResolvedCreateUpdate = (tag) => {\n\t\t\t\tlet action = taskState || \"updated\";\n\t\t\t\tlet sid = rowId;\n\t\t\t\tlet tid = rowId;\n\n\t\t\t\tif (tag) {\n\t\t\t\t\taction = tag.action || taskState;\n\t\t\t\t\tsid = tag.sid || sid;\n\t\t\t\t\ttid = tag.id || tag.tid || tid;\n\t\t\t\t}\n\t\t\t\tthis.afterUpdateCallback(sid, tid, action, tag);\n\t\t\t};\n\n\t\t\tlet actionPromise;\n\t\t\tif (this._router instanceof Function) {\n\t\t\t\tactionPromise = this._router(ganttMode, taskAction, dataToSend, rowId);\n\t\t\t} else if (this._router[ganttMode] instanceof Function) {\n\t\t\t\tactionPromise = this._router[ganttMode](taskAction, dataToSend, rowId);\n\t\t\t} else {\n\t\t\t\tswitch (taskState) {\n\t\t\t\t\tcase \"inserted\":\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].create(dataToSend);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"deleted\":\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].delete(rowId);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].update(dataToSend, rowId);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(actionPromise){\n\t\t\t\t// neither promise nor {tid: newId} response object\n\t\t\t\tif(!actionPromise.then &&\n\t\t\t\t\t(actionPromise.id === undefined && actionPromise.tid === undefined)){\n\t\t\t\t\tthrow new Error(\"Incorrect router return value. A Promise or a response object is expected\");\n\t\t\t\t}\n\n\t\t\t\tif(actionPromise.then){\n\t\t\t\t\tactionPromise.then(_onResolvedCreateUpdate);\n\t\t\t\t}else{\n\t\t\t\t\t// custom method may return a response object in case of sync action\n\t\t\t\t\t_onResolvedCreateUpdate(actionPromise);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t_onResolvedCreateUpdate(null);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet queryParams: any;\n\t\tqueryParams = {\n\t\t\tcallback: (xml) => {\n\t\t\t\tconst ids = [];\n\n\t\t\t\tif (rowId) {\n\t\t\t\t\tids.push(rowId);\n\t\t\t\t} else if (dataToSend) {\n\t\t\t\t\tfor (const key in dataToSend) {\n\t\t\t\t\t\tids.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.afterUpdate(this, xml, ids);\n\t\t\t},\n\t\t\theaders: this._headers\n\t\t};\n\n\t\tconst urlParams = this.serverProcessor + (this._user ? (ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, \"dhx_version=\" + this.$gantt.getUserData(0, \"version\")].join(\"&\")) : \"\");\n\t\tlet url: any = this._applyPayload(urlParams);\n\t\tlet data;\n\n\t\tswitch (this._tMode) {\n\t\t\tcase \"GET\":\n\t\t\t\tqueryParams.url = url + ajax.urlSeparator(url) + this.serialize(dataToSend, rowId);\n\t\t\t\tqueryParams.method = \"GET\";\n\t\t\t\tbreak;\n\t\t\tcase \"POST\":\n\t\t\t\tqueryParams.url = url;\n\t\t\t\tqueryParams.method = \"POST\";\n\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\n\t\t\t\tbreak;\n\t\t\tcase \"JSON\":\n\t\t\t\tdata = {};\n\t\t\t\tfor (const key in dataToSend) {\n\t\t\t\t\tif (key === this.action_param || key === \"id\" || key === \"gr_id\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdata[key] = dataToSend[key];\n\t\t\t\t}\n\n\t\t\t\tqueryParams.url = url;\n\t\t\t\tqueryParams.method = \"POST\";\n\t\t\t\tqueryParams.data = JSON.stringify({\n\t\t\t\t\tid: rowId,\n\t\t\t\t\taction: dataToSend[this.action_param],\n\t\t\t\t\tdata\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"REST\":\n\t\t\tcase \"REST-JSON\":\n\t\t\t\turl = urlParams.replace(/(&|\\?)editing=true/, \"\");\n\t\t\t\tdata = \"\";\n\n\t\t\t\tswitch (this.getState(rowId)) {\n\t\t\t\t\tcase \"inserted\":\n\t\t\t\t\t\tqueryParams.method = \"POST\";\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"deleted\":\n\t\t\t\t\t\tqueryParams.method = \"DELETE\";\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tqueryParams.method = \"PUT\";\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tqueryParams.url = this._applyPayload(url);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis._waitMode++;\n\t\treturn ajax.query(queryParams);\n\t}\n\n\t_forEachUpdatedRow(code: any) {\n\t\tconst updatedRows = this.updatedRows.slice();\n\t\tfor (let i = 0; i < updatedRows.length; i++) {\n\t\t\tconst rowId = updatedRows[i];\n\t\t\tif (this.$gantt.getUserData(rowId, this.action_param)) {\n\t\t\t\tcode.call(this, rowId);\n\t\t\t}\n\t\t}\n\t}\n\n\tsendAllData() {\n\t\tif (!this.updatedRows.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.messages = [];\n\t\tlet valid: any = true;\n\n\t\tthis._forEachUpdatedRow(function(rowId) {\n\t\t\tvalid = valid && this.checkBeforeUpdate(rowId); // ??? checkBeforeUpdate() always is true\n\t\t});\n\n\t\tif (!valid && !this.callEvent(\"onValidationError\", [\"\", this.messages])) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._tSend) {\n\t\t\tthis._sendData(this._getAllData());\n\t\t} else {\n\t\t\tlet stop = false;\n\n\t\t\t// this.updatedRows can be spliced from onBeforeUpdate via dp.setUpdated false\n\t\t\t// use an iterator instead of for(var i = 0; i < this.updatedRows; i++) then\n\t\t\tthis._forEachUpdatedRow(function(rowId) {\n\t\t\t\tif (stop) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._in_progress[rowId]) {\n\t\t\t\t\tif (this.is_invalid(rowId)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\n\t\t\t\t\tif (this._waitMode && (this.$gantt.mytype === \"tree\" || this.$gantt._h2)) {\n\t\t\t\t\t\tstop = true; // block send all for tree\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_getAllData() {\n\t\tconst out = {};\n\t\tlet hasOne = false;\n\n\t\tthis._forEachUpdatedRow(function(id) {\n\t\t\tif (this._in_progress[id] || this.is_invalid(id)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst row = this._getRowData(id);\n\t\t\tif (!this.callEvent(\"onBeforeUpdate\", [id, this.getState(id), row])) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tout[id] = row;\n\t\t\thasOne = true;\n\t\t\tthis._in_progress[id] = (new Date()).valueOf();\n\t\t});\n\n\t\treturn hasOne ? out : null;\n\t}\n\n\n\t/**\n\t * @desc: specify column which value should be verified before sending to server\n\t * @param: ind - column index (0 based)\n\t * @param: verifFunction - function(object) which should verify cell value (if not specified, then value will be compared to empty string). Two arguments will be passed into it: value and column name\n\t * @type: public\n\t */\n\tsetVerificator(ind: number, verifFunction: any) {\n\t\tthis.mandatoryFields[ind] = verifFunction || (function(value) { return (value !== \"\"); });\n\t}\n\n\t/**\n\t * @desc: remove column from list of those which should be verified\n\t * @param: ind - column Index (0 based)\n\t * @type: public\n\t */\n\tclearVerificator(ind: number) {\n\t\tthis.mandatoryFields[ind] = false;\n\t}\n\n\tfindRow(pattern: any) {\n\t\tlet i = 0;\n\t\tfor (i = 0; i < this.updatedRows.length; i++) {\n\t\t\tif (pattern == this.updatedRows[i]) { // tslint:disable-line\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn i;\n\t}\n\n\t/**\n\t * @desc: define custom actions\n\t * @param: name - name of action, same as value of action attribute\n\t * @param: handler - custom function, which receives a XMl response content for action\n\t * @type: private\n\t */\n\tdefineAction(name: string, handler: any) {\n\t\tif (!this._uActions) {\n\t\t\tthis._uActions = {};\n\t\t}\n\t\tthis._uActions[name] = handler;\n\t}\n\n\t/**\n\t * @desc: used in combination with setOnBeforeUpdateHandler to create custom client-server transport system\n\t * @param: sid - id of item before update\n\t * @param: tid - id of item after up0ate\n\t * @param: action - action name\n\t * @type: public\n\t * @topic: 0\n\t */\n\tafterUpdateCallback(sid: number | string, tid: number | string, action: string, btag: any) {\n\t\tif(!this.$gantt){\n\t\t\t// destructor has been called before the callback\n\t\t\treturn;\n\t\t}\n\n\t\tconst marker = sid;\n\t\tconst correct = (action !== \"error\" && action !== \"invalid\");\n\t\tif (!correct) {\n\t\t\tthis.set_invalid(sid, action);\n\t\t}\n\t\tif ((this._uActions) && (this._uActions[action]) && (!this._uActions[action](btag))) {\n\t\t\treturn (delete this._in_progress[marker]);\n\t\t}\n\n\t\tif (this._in_progress[marker] !== \"wait\") {\n\t\t\tthis.setUpdated(sid, false);\n\t\t}\n\n\t\tconst originalSid = sid;\n\n\t\tswitch (action) {\n\t\t\tcase \"inserted\":\n\t\t\tcase \"insert\":\n\t\t\t\tif (tid != sid) { // tslint:disable-line\n\t\t\t\t\tthis.setUpdated(sid, false);\n\t\t\t\t\tthis.$gantt[this._methods[2]](sid, tid);\n\t\t\t\t\tsid = tid;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"delete\":\n\t\t\tcase \"deleted\":\n\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"true_deleted\");\n\t\t\t\tthis.$gantt[this._methods[3]](sid);\n\t\t\t\tdelete this._in_progress[marker];\n\t\t\t\treturn this.callEvent(\"onAfterUpdate\", [sid, action, tid, btag]);\n\t\t}\n\n\t\tif (this._in_progress[marker] !== \"wait\") {\n\t\t\tif (correct) {\n\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"\");\n\t\t\t}\n\t\t\tdelete this._in_progress[marker];\n\t\t} else {\n\t\t\tdelete this._in_progress[marker];\n\t\t\tthis.setUpdated(tid, true, this.$gantt.getUserData(sid, this.action_param));\n\t\t}\n\n\t\tthis.callEvent(\"onAfterUpdate\", [originalSid, action, tid, btag]);\n\t}\n\n\t/**\n\t * @desc: response from server\n\t * @param: xml - XMLLoader object with response XML\n\t * @type: private\n\t */\n\tafterUpdate(that: any, xml: any, id?:any) {\n\t\tlet _xml;\n\t\tif (arguments.length === 3) {\n\t\t\t_xml = arguments[1];\n\t\t} else {\n\t\t\t// old dataprocessor\n\t\t\t_xml = arguments[4];\n\t\t}\n\t\tlet mode = this.getGanttMode();\n\t\tconst reqUrl = _xml.filePath || _xml.url;\n\n\t\tif (this._tMode !== \"REST\" && this._tMode !== \"REST-JSON\") {\n\t\t\tif (reqUrl.indexOf(\"gantt_mode=links\") !== -1) {\n\t\t\t\tmode = \"link\";\n\t\t\t} else {\n\t\t\t\tmode = \"task\";\n\t\t\t}\n\t\t} else {\n\t\t\tif (reqUrl.indexOf(\"/link\") > reqUrl.indexOf(\"/task\")) {\n\t\t\t\tmode = \"link\";\n\t\t\t} else {\n\t\t\t\tmode = \"task\";\n\t\t\t}\n\t\t}\n\t\tthis.setGanttMode(mode);\n\n\t\tconst ajax = this.$gantt.ajax;\n\t\t// try to use json first\n\t\tif ((window as any).JSON) {\n\t\t\tlet tag;\n\n\t\t\ttry {\n\t\t\t\ttag = JSON.parse(xml.xmlDoc.responseText);\n\t\t\t} catch (e) {\n\n\t\t\t\t// empty response also can be processed by json handler\n\t\t\t\tif (!xml.xmlDoc.responseText.length) {\n\t\t\t\t\ttag = {};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tag) {\n\t\t\t\tconst action = tag.action || this.getState(id) || \"updated\";\n\t\t\t\tconst sid = tag.sid || id[0];\n\t\t\t\tconst tid = tag.tid || id[0];\n\t\t\t\tthat.afterUpdateCallback(sid, tid, action, tag);\n\t\t\t\tthat.finalizeUpdate();\n\t\t\t\tthis.setGanttMode(mode);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// xml response\n\t\tconst top = ajax.xmltop(\"data\", xml.xmlDoc); // fix incorrect content type in IE\n\t\tif (!top) {\n\t\t\treturn this.cleanUpdate(id);\n\t\t}\n\t\tconst atag = ajax.xpath(\"//data/action\", top);\n\t\tif (!atag.length) {\n\t\t\treturn this.cleanUpdate(id);\n\t\t}\n\n\t\tfor (let i = 0; i < atag.length; i++) {\n\t\t\tconst btag = atag[i];\n\t\t\tconst action = btag.getAttribute(\"type\");\n\t\t\tconst sid = btag.getAttribute(\"sid\");\n\t\t\tconst tid = btag.getAttribute(\"tid\");\n\n\t\t\tthat.afterUpdateCallback(sid, tid, action, btag);\n\t\t}\n\t\tthat.finalizeUpdate();\n\t}\n\n\tcleanUpdate(id: any[]) {\n\t\tif (id) {\n\t\t\tfor (let i = 0; i < id.length; i++) {\n\t\t\t\tdelete this._in_progress[id[i]];\n\t\t\t}\n\t\t}\n\t}\n\n\tfinalizeUpdate() {\n\t\tif (this._waitMode) {\n\t\t\tthis._waitMode--;\n\t\t}\n\n\t\tif ((this.$gantt.mytype === \"tree\" || this.$gantt._h2) && this.updatedRows.length) {\n\t\t\tthis.sendData();\n\t\t}\n\t\tthis.callEvent(\"onAfterUpdateFinish\", []);\n\t\tif (!this.updatedRows.length) {\n\t\t\tthis.callEvent(\"onFullSync\", []);\n\t\t}\n\t}\n\n\t/**\n\t * @desc: initializes data-processor\n\t * @param: anObj - dhtmlxGrid object to attach this data-processor to\n\t * @type: public\n\t */\n\tinit(anObj: any) {\n\t\tif (this._initialized) {\n\t\t\treturn;\n\t\t}\n\t\tthis.$gantt = anObj;\n\t\tif (this.$gantt._dp_init) {\n\t\t\tthis.$gantt._dp_init(this);\n\t\t}\n\n\t\tthis._setDefaultTransactionMode();\n\n\t\tthis.styles = {\n\t\t\tupdated:\"gantt_updated\",\n\t\t\torder:\"gantt_updated\",\n\t\t\tinserted:\"gantt_inserted\",\n\t\t\tdeleted:\"gantt_deleted\",\n\t\t\tinvalid:\"gantt_invalid\",\n\t\t\terror:\"gantt_error\",\n\t\t\tclear:\"\"\n\t\t};\n\n\t\tthis._methods=[\"_row_style\",\"setCellTextStyle\",\"_change_id\",\"_delete_task\"];\n\t\textendGantt(this.$gantt, this);\n\t\tconst dataProcessorEvents = new DataProcessorEvents(this.$gantt, this);\n\t\tdataProcessorEvents.attach();\n\t\tthis.attachEvent(\"onDestroy\", function() {\n\t\t\tdelete this.setGanttMode;\n\t\t\tdelete this._getRowData;\n\n\t\t\tdelete this.$gantt._dp;\n\t\t\tdelete this.$gantt._change_id;\n\t\t\tdelete this.$gantt._row_style;\n\t\t\tdelete this.$gantt._delete_task;\n\t\t\tdelete this.$gantt._sendTaskOrder;\n\t\t\tdelete this.$gantt;\n\n\t\t\tdataProcessorEvents.detach();\n\t\t});\n\t\tthis.$gantt.callEvent(\"onDataProcessorReady\", [this]);\n\t\tthis._initialized = true;\n\t}\n\n\t_setDefaultTransactionMode() {\n\t\tif (this.serverProcessor) {\n\t\t\tthis.setTransactionMode(\"POST\", true);\n\t\t\tthis.serverProcessor += (this.serverProcessor.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + \"editing=true\";\n\t\t\tthis._serverProcessor = this.serverProcessor;\n\t\t}\n\t}\n\n\tsetOnAfterUpdate(handler) {\n\t\tthis.attachEvent(\"onAfterUpdate\", handler);\n\t}\n\n\tenableDebug(mode) {} // tslint:disable-line\n\n\tsetOnBeforeUpdateHandler(handler) {\n\t\tthis.attachEvent(\"onBeforeDataSending\", handler);\n\t}\n\n\t/* starts autoupdate mode\n\t\t@param interval time interval for sending update requests\n\t*/\n\tsetAutoUpdate(interval, user) {\n\t\tinterval = interval || 2000;\n\n\t\tthis._user = user || (new Date()).valueOf();\n\t\tthis._needUpdate = false;\n\t\t// this._loader = null;\n\t\tthis._updateBusy = false;\n\n\t\tthis.attachEvent(\"onAfterUpdate\", this.afterAutoUpdate); // arguments sid, action, tid, xml_node;\n\n\t\tthis.attachEvent(\"onFullSync\", this.fullSync);\n\n\t\twindow.setInterval(() => {\n\t\t\tthis.loadUpdate();\n\t\t}, interval);\n\t}\n\n\t/* process updating request answer\n\t\tif status == collision version is depricated\n\t\tset flag for autoupdating immidiatly\n\t*/\n\tafterAutoUpdate(sid, action, tid, xml_node) { // tslint:disable-line\n\t\tif (action === \"collision\") {\n\t\t\tthis._needUpdate = true;\n\t\t\treturn false;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t/* callback function for onFillSync event\n\t\tcall update function if it's need\n\t*/\n\tfullSync() {\n\t\tif (this._needUpdate) {\n\t\t\tthis._needUpdate = false;\n\t\t\tthis.loadUpdate();\n\t\t}\n\t\treturn true;\n\t}\n\n\t/* sends query to the server and call callback function\n\t*/\n\tgetUpdates(url, callback) {\n\t\tconst ajax = this.$gantt.ajax;\n\t\tif (this._updateBusy) {\n\t\t\treturn false;\n\t\t} else {\n\t\t\tthis._updateBusy = true;\n\t\t}\n\n\t\t// this._loader = this._loader || new dtmlXMLLoaderObject(true);\n\n\t\t// this._loader.async=true;\n\t\t// this._loader.waitCall=callback;\n\t\t// this._loader.loadXML(url);\n\t\tajax.get(url, callback);\n\n\t}\n\n\t// I didn't found some use of _v and _a functions\n\n\t/* returns xml node value\n\t\t@param node\n\t\t\txml node\n\t*/\n\t_v(node) {\n\t\tif (node.firstChild) {\n\t\t\treturn node.firstChild.nodeValue;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\n\t/* returns values array of xml nodes array\n\t\t@param arr\n\t\t\tarray of xml nodes\n\t*/\n\t_a(arr) {\n\t\tconst res = [];\n\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\tres[i] = this._v(arr[i]);\n\t\t}\n\t\treturn res;\n\t}\n\n\t/* loads updates and processes them\n\t*/\n\tloadUpdate() {\n\t\tconst ajax = this.$gantt.ajax;\n\t\tconst version = this.$gantt.getUserData(0, \"version\");\n\t\tlet url = this.serverProcessor + ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, \"dhx_version=\" + version].join(\"&\");\n\t\turl = url.replace(\"editing=true&\", \"\");\n\t\tthis.getUpdates(url, (xml) => {\n\t\t\tconst vers = ajax.xpath(\"//userdata\", xml);\n\t\t\tthis.obj.setUserData(0, \"version\", this._v(vers[0]));\n\n\t\t\tconst upds = ajax.xpath(\"//update\", xml);\n\t\t\tif (upds.length) {\n\t\t\t\tthis._silent_mode = true;\n\n\t\t\t\tfor (let i = 0; i < upds.length; i++) {\n\t\t\t\t\tconst status = upds[i].getAttribute(\"status\");\n\t\t\t\t\tconst id = upds[i].getAttribute(\"id\");\n\t\t\t\t\tconst parent = upds[i].getAttribute(\"parent\");\n\t\t\t\t\tswitch (status) {\n\t\t\t\t\t\tcase \"inserted\":\n\t\t\t\t\t\t\tthis.callEvent(\"insertCallback\", [upds[i], id, parent]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"updated\":\n\t\t\t\t\t\t\tthis.callEvent(\"updateCallback\", [upds[i], id, parent]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"deleted\":\n\t\t\t\t\t\t\tthis.callEvent(\"deleteCallback\", [upds[i], id, parent]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._silent_mode = false;\n\t\t\t}\n\n\t\t\tthis._updateBusy = false;\n\t\t});\n\t}\n\n\tdestructor() {\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\n\t\tthis.updatedRows = [];\n\t\tthis._in_progress = {}; // ?\n\t\tthis._invalid = {};\n\t\tthis._headers = null;\n\t\tthis._payload = null;\n\t\tdelete this._initialized;\n\t}\n\n\tsetGanttMode(mode) {\n\t\tif (mode === \"tasks\") {\n\t\t\tmode = \"task\";\n\t\t} else if (mode === \"links\") {\n\t\t\tmode = \"link\";\n\t\t}\n\n\t\tconst modes = this.modes || {};\n\t\tconst ganttMode = this.getGanttMode();\n\t\tif (ganttMode) {\n\t\t\tmodes[ganttMode] = {\n\t\t\t\t_in_progress : this._in_progress,\n\t\t\t\t_invalid: this._invalid,\n\t\t\t\tupdatedRows : this.updatedRows\n\t\t\t};\n\t\t}\n\n\t\tlet newState = modes[mode];\n\t\tif (!newState) {\n\t\t\tnewState = modes[mode] = {\n\t\t\t\t_in_progress : {},\n\t\t\t\t_invalid : {},\n\t\t\t\tupdatedRows : []\n\t\t\t};\n\t\t}\n\t\tthis._in_progress = newState._in_progress;\n\t\tthis._invalid = newState._invalid;\n\t\tthis.updatedRows = newState.updatedRows;\n\t\tthis.modes = modes;\n\t\tthis._ganttMode = mode;\n\t}\n\tgetGanttMode():string {\n\t\treturn this._ganttMode;\n\t}\n\n\t_getRowData(id) {\n\t\tlet task;\n\t\tif (this.getGanttMode() === \"task\") {\n\t\t\ttask = this.$gantt.isTaskExists(id) ? this.$gantt.getTask(id) : { id };\n\t\t} else {\n\t\t\ttask = this.$gantt.isLinkExists(id) ? this.$gantt.getLink(id) : { id };\n\t\t}\n\n\t\ttask = this.$gantt.copy(task);\n\n\t\tconst data = {};\n\t\tfor (const key in task) {\n\t\t\tif (key.substr(0, 1) === \"$\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst value = task[key];\n\t\t\tif (helpers.isDate(value)) {\n\t\t\t\tdata[key] = this.$gantt.templates.xml_format !== this.$gantt.templates.format_date ? this.$gantt.templates.xml_format(value) : this.$gantt.templates.format_date(value);\n\t\t\t} else if(value === null) {\n\t\t\t\tdata[key] = \"\";\n\t\t\t} else {\n\t\t\t\tdata[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tconst taskTiming = this.$gantt._get_task_timing_mode(task);\n\t\tif(taskTiming.$no_start){\n\t\t\ttask.start_date = \"\";\n\t\t\ttask.duration = \"\";\n\t\t}\n\t\tif(taskTiming.$no_end){\n\t\t\ttask.end_date = \"\";\n\t\t\ttask.duration = \"\";\n\t\t}\n\t\tdata[this.action_param] = this.$gantt.getUserData(id, this.action_param);\n\t\treturn data;\n\t}\n\n\t_isFetchResult(result) {\n\t\treturn result.body instanceof ReadableStream;\n\t}\n\n\tsetSerializeAsJSON(flag: true) {\n\t\tthis._serializeAsJson = flag;\n\t}\n}","var DataProcessor = require(\"./data_processor\");\nmodule.exports = {\n\tDEPRECATED_api: function(server) {\n\t\treturn new (DataProcessor.DataProcessor)(server);\n\t},\n\tcreateDataProcessor: DataProcessor.createDataProcessor,\n\tgetDataProcessorModes: DataProcessor.getAvailableModes\n};","var storeRenderCreator = function(name, gantt){\n\tvar store = gantt.getDatastore(name);\n\n\tvar itemRepainter = {\n\t\trenderItem: function(id, renderer){\n\n\t\t\tvar renders = renderer.getLayers();\n\n\t\t\tvar item = store.getItem(id);\n\t\t\tif(item && store.isVisible(id)) {\n\t\t\t\tfor (var i = 0; i < renders.length; i++)\n\t\t\t\t\trenders[i].render_item(item);\n\t\t\t}\n\t\t},\n\t\trenderItems: function(renderer){\n\t\t\tvar renderers = renderer.getLayers();\n\t\t\tfor (var i = 0; i < renderers.length; i++) {\n\t\t\t\trenderers[i].clear();\n\t\t\t}\n\n\t\t\tvar data = store.getVisibleItems();\n\n\t\t\tfor (var i = 0; i < renderers.length; i++) {\n\t\t\t\trenderers[i].render_items(data);\n\t\t\t}\n\t\t},\n\t\tupdateItems: function(layer) {\n\t\t\tif(layer.update_items){\n\t\t\t\tvar data = store.getVisibleItems();\n\t\t\t\tlayer.update_items(data);\n\t\t\t}\n\t\t}\n\t};\n\n\tstore.attachEvent(\"onStoreUpdated\", function(id, item, action){\n\t\tvar renderer = gantt.$services.getService(\"layers\").getDataRender(name);\n\t\tif(renderer){\n\t\t\trenderer.onUpdateRequest = function(layer){\n\t\t\t\titemRepainter.updateItems(layer);\n\t\t\t};\n\t\t}\n\t});\n\n\tfunction skipRepaint(gantt){\n\t\tvar state = gantt.$services.getService(\"state\");\n\t\tif(state.getState(\"batchUpdate\").batch_update){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tstore.attachEvent(\"onStoreUpdated\", function(id, item, action){\n\t\tif(skipRepaint(gantt)){\n\t\t\treturn;\n\t\t}\n\n\t\tvar renderer = gantt.$services.getService(\"layers\").getDataRender(name);\n\n\t\tif(renderer){\n\t\t\tif(!id || action == \"move\" || action == \"delete\"){\n\t\t\t\tstore.callEvent(\"onBeforeRefreshAll\", []);\n\t\t\t\titemRepainter.renderItems(renderer);\n\t\t\t\tstore.callEvent(\"onAfterRefreshAll\", []);\n\t\t\t}else{\n\t\t\t\tstore.callEvent(\"onBeforeRefreshItem\", [item.id]);\n\t\t\t\titemRepainter.renderItem(item.id, renderer);\n\t\t\t\tstore.callEvent(\"onAfterRefreshItem\", [item.id]);\n\t\t\t}\n\t\t}\n\n\t});\n\n\t// TODO: probably can be done more in a more efficient way\n\tstore.attachEvent(\"onItemOpen\", function(){\n\t\tgantt.render();\n\t});\n\n\tstore.attachEvent(\"onItemClose\", function(){\n\t\tgantt.render();\n\t});\n\n\tfunction refreshId(renders, oldId, newId, item) {\n\t\tfor (var i = 0; i < renders.length; i++) {\n\t\t\trenders[i].change_id(oldId, newId);\n\t\t}\n\t}\n\n\tstore.attachEvent(\"onIdChange\", function(oldId, newId){\n\n\t\t// in case of linked datastores (tasks <-> links), id change should recalculate something in linked datastore before any repaint\n\t\t// use onBeforeIdChange for this hook.\n\t\t// TODO: use something more reasonable instead\n\t\tstore.callEvent(\"onBeforeIdChange\", [oldId, newId]);\n\n\t\tif(skipRepaint(gantt)){\n\t\t\treturn;\n\t\t}\n\t\tvar renderer = gantt.$services.getService(\"layers\").getDataRender(name);\n\t\trefreshId(renderer.getLayers(), oldId, newId, store.getItem(newId));\n\t\titemRepainter.renderItem(newId, renderer);\n\t});\n\n};\n\nmodule.exports = {\n\tbindDataStore: storeRenderCreator\n};","function createDataStoreSelectMixin(store){\n\tvar selectedId = null;\n\n\tvar deleteItem = store._removeItemInner;\n\t\n\tfunction unselect(id){\n\t\tselectedId = null;\n\t\tthis.callEvent(\"onAfterUnselect\", [id]);\n\t}\n\n\tstore._removeItemInner = function(id){\n\t\tif(selectedId == id){\n\t\t\tunselect.call(this, id);\n\t\t}\n\n\t\tif(selectedId && this.eachItem){\n\t\t\tthis.eachItem(function(subItem){\n\t\t\t\tif(subItem.id == selectedId){\n\t\t\t\t\tunselect.call(this, subItem.id);\n\t\t\t\t}\n\t\t\t}, id);\n\t\t}\n\n\t\treturn deleteItem.apply(this, arguments);\n\t};\n\n\tstore.attachEvent(\"onIdChange\", function(oldId, newId) {\n\t\tif (store.getSelectedId() == oldId) {\n\t\t\tstore.silent(function () {\n\t\t\t\tstore.unselect(oldId);\n\t\t\t\tstore.select(newId);\n\t\t\t});\n\t\t}\n\t});\n\n\treturn {\n\t\tselect: function(id){\n\t\t\tif (id){\n\n\t\t\t\tif(selectedId == id)\n\t\t\t\t\treturn selectedId;\n\n\t\t\t\tif(!this._skip_refresh) {\n\t\t\t\t\tif (!this.callEvent(\"onBeforeSelect\", [id])) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.unselect();\n\n\t\t\t\tselectedId = id;\n\n\t\t\t\tif(!this._skip_refresh) {\n\t\t\t\t\tthis.refresh(id);\n\t\t\t\t\tthis.callEvent(\"onAfterSelect\", [id]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn selectedId;\n\t\t},\n\t\tgetSelectedId: function(){\n\t\t\treturn selectedId;\n\t\t},\n\t\tisSelected: function(id){\n\t\t\treturn id == selectedId;\n\t\t},\n\t\tunselect: function(id){\n\t\t\tvar id = id || selectedId;\n\t\t\tif(!id)\n\t\t\t\treturn;\n\t\t\tselectedId = null;\n\t\t\tif(!this._skip_refresh){\n\t\t\t\tthis.refresh(id);\n\t\t\t\tunselect.call(this, id);\n\t\t\t}\n\t\t}\n\t};\n}\n\nmodule.exports = createDataStoreSelectMixin;","var utils = require(\"../../utils/utils\");\n\n\nvar createLinksStoreFacade = function(){\n\treturn {\n\tgetLinkCount: function () {\n\t\treturn this.$data.linksStore.count();\n\t},\n\n\tgetLink : function (id) {\n\t\treturn this.$data.linksStore.getItem(id);\n\t},\n\n\tgetLinks : function () {\n\t\treturn this.$data.linksStore.getItems();\n\t},\n\n\tisLinkExists : function (id) {\n\t\treturn this.$data.linksStore.exists(id);\n\t},\n\n\taddLink : function (link) {\n\t\treturn this.$data.linksStore.addItem(link);\n\t},\n\n\tupdateLink : function (id, data) {\n\t\tif (!utils.defined(data))\n\t\t\tdata = this.getLink(id);\n\t\tthis.$data.linksStore.updateItem(id, data);\n\t},\n\n\tdeleteLink : function (id) {\n\t\treturn this.$data.linksStore.removeItem(id);\n\t},\n\n\tchangeLinkId : function (oldid, newid) {\n\t\treturn this.$data.linksStore.changeId(oldid, newid);\n\t}\n};\n};\n\nmodule.exports = createLinksStoreFacade;","var utils = require(\"../../utils/utils\");\n\nvar createTasksDatastoreFacade = function(){\n\treturn {\n\tgetTask: function (id) {\n\t\tthis.assert(id, \"Invalid argument for gantt.getTask\");\n\t\tvar task = this.$data.tasksStore.getItem(id);\n\t\tthis.assert(task, \"Task not found id=\" + id);\n\t\treturn task;\n\t},\n\tgetTaskByTime: function (from, to) {\n\t\tvar p = this.$data.tasksStore.getItems();\n\n\t\tvar res = [];\n\n\t\tif (!(from || to)) {\n\t\t\tres = p;\n\t\t} else {\n\t\t\tfrom = +from || -Infinity;\n\t\t\tto = +to || Infinity;\n\t\t\tfor (var t = 0; t < p.length; t++){\n\t\t\t\tvar task = p[t];\n\t\t\t\tif (+task.start_date < to && +task.end_date > from)\n\t\t\t\t\tres.push(task);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\tisTaskExists: function (id) {\n\t\tif(!this.$data || !this.$data.tasksStore){\n\t\t\treturn false;\n\t\t}\n\t\treturn this.$data.tasksStore.exists(id);\n\t},\n\tupdateTask: function (id, item) {\n\t\tif (!utils.defined(item)) item = this.getTask(id);\n\t\tthis.$data.tasksStore.updateItem(id, item);\n\t\tif(this.isTaskExists(id))\n\t\t\tthis.refreshTask(id);\n\t},\n\taddTask: function (item, parent, index) {\n\t\tif (!utils.defined(item.id))\n\t\t\titem.id = utils.uid();\n\n\t\tif (!utils.defined(parent)) parent = this.getParent(item) || 0;\n\t\tif (!this.isTaskExists(parent)) parent = this.config.root_id;\n\t\tthis.setParent(item, parent);\n\n\t\treturn this.$data.tasksStore.addItem(item, index, parent);\n\t},\n\tdeleteTask: function (id) {\n\t\treturn this.$data.tasksStore.removeItem(id);\n\t},\n\tgetTaskCount: function () {\n\t\treturn this.$data.tasksStore.count();\n\t},\n\tgetVisibleTaskCount: function () {\n\t\treturn this.$data.tasksStore.countVisible();\n\t},\n\tgetTaskIndex: function (id) {\n\t\treturn this.$data.tasksStore.getBranchIndex(id);\n\t},\n\tgetGlobalTaskIndex: function (id) {\n\t\tthis.assert(id, \"Invalid argument\");\n\t\treturn this.$data.tasksStore.getIndexById(id);\n\t},\n\teachTask: function (code, parent, master) {\n\t\treturn this.$data.tasksStore.eachItem(utils.bind(code, master||this), parent);\n\t},\n\teachParent: function (callback, startTask, master) {\n\t\treturn this.$data.tasksStore.eachParent(utils.bind(callback, master || this), startTask);\n\t},\n\tchangeTaskId: function (oldid, newid) {\n\t\tthis.$data.tasksStore.changeId(oldid, newid);\n\t\tvar task = this.$data.tasksStore.getItem(newid);\n\n\t\tvar links = [];\n\n\t\tif (task.$source) {\n\t\t\tlinks = links.concat(task.$source);\n\t\t}\n\t\tif (task.$target) {\n\t\t\tlinks = links.concat(task.$target);\n\t\t}\n\n\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\tvar link = this.getLink(links[i]);\n\t\t\tif (link.source == oldid) {\n\t\t\t\tlink.source = newid;\n\t\t\t}\n\t\t\tif (link.target == oldid) {\n\t\t\t\tlink.target = newid;\n\t\t\t}\n\t\t}\n\t},\n\tcalculateTaskLevel: function (item) {\n\t\treturn this.$data.tasksStore.calculateItemLevel(item);\n\t},\n\tgetNext: function (id) {\n\t\treturn this.$data.tasksStore.getNext(id);\n\t},\n\tgetPrev: function (id) {\n\t\treturn this.$data.tasksStore.getPrev(id);\n\t},\n\tgetParent: function (id) {\n\t\treturn this.$data.tasksStore.getParent(id);\n\t},\n\tsetParent: function (task, new_pid, silent) {\n\t\treturn this.$data.tasksStore.setParent(task, new_pid, silent);\n\t},\n\tgetSiblings: function (id) {\n\t\treturn this.$data.tasksStore.getSiblings(id).slice();\n\t},\n\tgetNextSibling: function (id) {\n\t\treturn this.$data.tasksStore.getNextSibling(id);\n\t},\n\tgetPrevSibling: function (id) {\n\t\treturn this.$data.tasksStore.getPrevSibling(id);\n\t},\n\tgetTaskByIndex: function(index){\n\t\tvar id = this.$data.tasksStore.getIdByIndex(index);\n\t\tif(this.isTaskExists(id)){\n\t\t\treturn this.getTask(id);\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t},\n\tgetChildren: function (id) {\n\t\tif(!this.hasChild(id)){\n\t\t\treturn [];\n\t\t}else{\n\t\t\treturn this.$data.tasksStore.getChildren(id).slice();\n\t\t}\n\t},\n\thasChild: function (id) {\n\t\treturn this.$data.tasksStore.hasChild(id);\n\t},\n\topen: function (id) {\n\t\tthis.$data.tasksStore.open(id);\n\t},\n\tclose: function (id) {\n\t\tthis.$data.tasksStore.close(id);\n\t},\n\tmoveTask: function (sid, tindex, parent) {\n\t\treturn this.$data.tasksStore.move.apply(this.$data.tasksStore, arguments);\n\t},\n\tsort: function(field, desc, parent, silent) {\n\t\tvar render = !silent;//4th argument to cancel redraw after sorting\n\n\t\tthis.$data.tasksStore.sort(field, desc, parent);\n\t\tthis.callEvent(\"onAfterSort\", [field, desc, parent]);\n\n\t\tif (render) {\n\t\t\tthis.render();\n\t\t}\n\t}\n};\n};\n\nmodule.exports = createTasksDatastoreFacade;\n\n\n","var utils = require(\"../../utils/utils\");\nvar createTasksFacade = require(\"./datastore_tasks\"),\n\tcreateLinksFacade = require(\"./datastore_links\"),\n\tDataStore = require(\"../datastore/datastore\"),\n\tTreeDataStore = require(\"../datastore/treedatastore\"),\n\tcreateDatastoreSelect = require(\"../datastore/select\");\nvar datastoreRender = require(\"../datastore/datastore_render\");\n\nfunction getDatastores(){\n\tvar storeNames = this.$services.getService(\"datastores\");\n\tvar res = [];\n\tfor(var i = 0; i < storeNames.length; i++){\n\t\tres.push(this.getDatastore(storeNames[i]));\n\t}\n\treturn res;\n}\n\nvar createDatastoreFacade = function(){\n\treturn {\n\tcreateDatastore: function(config){\n\n\t\tvar $StoreType = (config.type || \"\").toLowerCase() == \"treedatastore\" ? TreeDataStore : DataStore;\n\n\t\tif (config) {\n\t\t\tvar self = this;\n\t\t\tconfig.openInitially = function(){ return self.config.open_tree_initially; };\n\t\t}\n\n\t\tvar store = new $StoreType(config);\n\t\tthis.mixin(store, createDatastoreSelect(store));\n\n\t\tif (config.name) {\n\t\t\tvar servicePrefix = \"datastore:\";\n\n\t\t\tthis.$services.dropService(servicePrefix + config.name);\n\t\t\tthis.$services.setService(servicePrefix + config.name, function() { return store; } );\n\n\t\t\tvar storeList = this.$services.getService(\"datastores\");\n\t\t\tif (!storeList) {\n\t\t\t\tstoreList = [];\n\t\t\t\tthis.$services.setService(\"datastores\", function() { return storeList; });\n\t\t\t\tstoreList.push(config.name);\n\t\t\t} else if (storeList.indexOf(config.name) < 0) {\n\t\t\t\tstoreList.push(config.name);\n\t\t\t}\n\n\t\t\tdatastoreRender.bindDataStore(config.name, this);\n\t\t}\n\n\t\treturn store;\n\t},\n\tgetDatastore: function(name){\n\t\treturn this.$services.getService(\"datastore:\" + name);\n\t},\n\n\trefreshData: function () {\n\t\tvar scrollState = this.getScrollState();\n\t\tthis.callEvent(\"onBeforeDataRender\", []);\n\n\t\tvar stores = getDatastores.call(this);\n\t\tfor(var i = 0; i < stores.length; i++){\n\t\t\tstores[i].refresh();\n\t\t}\n\n\t\tif(scrollState.x || scrollState.y){\n\t\t\tthis.scrollTo(scrollState.x, scrollState.y);\n\t\t}\n\t\tthis.callEvent(\"onDataRender\", []);\n\t},\n\n\tisChildOf: function(childId, parentId){\n\t\treturn this.$data.tasksStore.isChildOf(childId, parentId);\n\t},\n\n\trefreshTask: function (taskId, refresh_links) {\n\t\tvar task = this.getTask(taskId);\n\t\tif (task && this.isTaskVisible(taskId)) {\n\n\t\t\tthis.$data.tasksStore.refresh(taskId, !!this.getState().drag_id);// do quick refresh during drag and drop\n\n\t\t\tif (refresh_links !== undefined && !refresh_links)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0; i < task.$source.length; i++) {\n\t\t\t\tthis.refreshLink(task.$source[i]);\n\t\t\t}\n\t\t\tfor (var i = 0; i < task.$target.length; i++) {\n\t\t\t\tthis.refreshLink(task.$target[i]);\n\t\t\t}\n\t\t}else if(this.isTaskExists(taskId) && this.isTaskExists(this.getParent(taskId))){\n\t\t\tthis.refreshTask(this.getParent(taskId));\n\t\t}\n\n\t},\n\trefreshLink: function (linkId) {\n\t\tthis.$data.linksStore.refresh(linkId, !!this.getState().drag_id);// do quick refresh during drag and drop\n\t},\n\n\tsilent: function(code){\n\t\tvar gantt = this;\n\t\tgantt.$data.tasksStore.silent(function(){\n\t\t\tgantt.$data.linksStore.silent(function(){\n\t\t\t\tcode();\n\t\t\t});\n\t\t});\n\t},\n\n\tclearAll: function () {\n\t\tvar stores = getDatastores.call(this);\n\t\tfor(var i = 0; i < stores.length; i++){\n\t\t\tstores[i].clearAll();\n\t\t}\n\n\t\tthis._update_flags();\n\t\tthis.userdata = {};\n\t\tthis.callEvent(\"onClear\", []);\n\t\tthis.render();\n\t},\n\t_clear_data: function () {\n\t\tthis.$data.tasksStore.clearAll();\n\t\tthis.$data.linksStore.clearAll();\n\t\tthis._update_flags();\n\t\tthis.userdata = {};\n\t},\n\n\tselectTask: function(id){\n\t\tvar store = this.$data.tasksStore;\n\t\tif(!this.config.select_task)\n\t\t\treturn false;\n\t\tif (id){\n\n\t\t\tstore.select(id);\n\t\t}\n\t\treturn store.getSelectedId();\n\t},\n\tunselectTask: function(id){\n\t\tvar store = this.$data.tasksStore;\n\t\tstore.unselect(id);\n\t},\n\tisSelectedTask: function(id){\n\t\treturn this.$data.tasksStore.isSelected(id);\n\t},\n\tgetSelectedId: function() {\n\t\treturn this.$data.tasksStore.getSelectedId();\n\t}\n};\n};\n\nfunction createFacade(){\n\tvar res = utils.mixin({}, createDatastoreFacade());\n\tutils.mixin(res, createTasksFacade());\n\tutils.mixin(res, createLinksFacade());\n\treturn res;\n}\n\n\n\n\nmodule.exports = {create: createFacade};","var utils = require(\"../../utils/utils\");\nvar facadeFactory = require(\"./../facades/datastore\");\nvar calculateScaleRange = require(\"../gantt_data_range\");\nfunction initDataStores(gantt){\n\n\tvar facade = facadeFactory.create();\n\tutils.mixin(gantt, facade);\n\tvar tasksStore = gantt.createDatastore({\n\t\tname: \"task\",\n\t\ttype: \"treeDatastore\",\n\t\trootId: function() { return gantt.config.root_id; },\n\t\tinitItem: utils.bind(_init_task, gantt),\n\t\tgetConfig: function() { return gantt.config; }\n\t});\n\n\tvar linksStore = gantt.createDatastore({\n\t\tname: \"link\",\n\t\tinitItem: utils.bind(_init_link, gantt)\n\t});\n\n\tgantt.attachEvent(\"onDestroy\", function(){\n\t\ttasksStore.destructor();\n\t\tlinksStore.destructor();\n\t});\n\n\ttasksStore.attachEvent(\"onBeforeRefreshAll\", function(){\n\n\t\tvar order = tasksStore.getVisibleItems();\n\n\t\tfor(var i=0; i < order.length; i++){\n\t\t\tvar item = order[i];\n\t\t\titem.$index = i;\n\t\t\tgantt.resetProjectDates(item);\n\t\t}\n\n\t});\n\n\ttasksStore.attachEvent(\"onFilterItem\", function(id, task){\n\t\tvar min = null, max = null;\n\t\tif (gantt.config.start_date && gantt.config.end_date) {\n\t\t\tif (gantt._isAllowedUnscheduledTask(task)) return true;\n\t\t\tmin = gantt.config.start_date.valueOf();\n\t\t\tmax = gantt.config.end_date.valueOf();\n\n\t\t\tif (+task.start_date > max || +task.end_date < +min)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\n\ttasksStore.attachEvent(\"onIdChange\", function(oldId, newId){\n\t\tgantt._update_flags(oldId, newId);\n\t});\n\n\ttasksStore.attachEvent(\"onAfterUpdate\", function(id){\n\t\tgantt._update_parents(id);\n\t\tif(gantt.getState(\"batchUpdate\").batch_update){\n\t\t\treturn true;\n\t\t}\n\n\t\tvar task = tasksStore.getItem(id);\n\t\tfor (var i = 0; i < task.$source.length; i++) {\n\t\t\tlinksStore.refresh(task.$source[i]);\n\t\t}\n\t\tfor (var i = 0; i < task.$target.length; i++) {\n\t\t\tlinksStore.refresh(task.$target[i]);\n\t\t}\n\t});\n\n\ttasksStore.attachEvent(\"onAfterItemMove\", function(sid, parent, tindex){\n\t\tvar source = gantt.getTask(sid);\n\n\t\tif(this.getNextSibling(sid) !== null){\n\t\t\tsource.$drop_target = this.getNextSibling(sid);\n\t\t} else if(this.getPrevSibling(sid) !== null){\n\t\t\tsource.$drop_target = \"next:\" + this.getPrevSibling(sid);\n\t\t}else{\n\t\t\tsource.$drop_target = \"next:null\";\n\t\t}\n\n\t});\n\n\ttasksStore.attachEvent(\"onStoreUpdated\", function(id, item, action){\n\t\tif(action == \"delete\"){\n\t\t\tgantt._update_flags(id, null);\n\t\t}\n\n\t\tvar state = gantt.$services.getService(\"state\");\n\t\tif(state.getState(\"batchUpdate\").batch_update){\n\t\t\treturn;\n\t\t}\n\n\t\tif(gantt.config.fit_tasks && action !== \"paint\"){\n\t\t\tvar oldState = gantt.getState();\n\t\t\tcalculateScaleRange(gantt);\n\t\t\tvar newState = gantt.getState();\n\n\t\t\t//this._init_tasks_range();\n\t\t\tif (+oldState.min_date != +newState.min_date || +oldState.max_date != +newState.max_date) {\n\t\t\t\tgantt.render();\n\n\t\t\t\tgantt.callEvent(\"onScaleAdjusted\", []);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\n\t\tif(action == \"add\" || action == \"move\" || action == \"delete\"){\n\t\t\tgantt.$layout.resize();\n\t\t}else if(!id){\n\t\t\tlinksStore.refresh();\n\t\t}\n\n\t});\n\n\tlinksStore.attachEvent(\"onAfterAdd\", function(id, link){\n\t\tsync_link(link);\n\t});\n\tlinksStore.attachEvent(\"onAfterUpdate\", function(id, link){\n\t\tsync_links();\n\t});\n\tlinksStore.attachEvent(\"onAfterDelete\", function(id, link){\n\t\tsync_link_delete(link);\n\t});\n\tlinksStore.attachEvent(\"onBeforeIdChange\", function(oldId, newId){\n\t\tsync_link_delete(gantt.mixin({id:oldId}, gantt.$data.linksStore.getItem(newId)));\n\t\tsync_link(gantt.$data.linksStore.getItem(newId));\n\t});\n\n\tfunction checkLinkedTaskVisibility(taskId){\n\t\tvar isVisible = gantt.isTaskVisible(taskId);\n\t\tif(!isVisible && gantt.isTaskExists(taskId)){\n\t\t\tvar parent = gantt.getParent(taskId);\n\t\t\tif(gantt.isTaskExists(parent) && gantt.isTaskVisible(parent)){\n\t\t\t\tparent = gantt.getTask(parent);\n\t\t\t\tif(gantt.isSplitTask(parent)){\n\t\t\t\t\tisVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn isVisible;\n\t}\n\n\tlinksStore.attachEvent(\"onFilterItem\", function(id, link){\n\t\tif (!gantt.config.show_links) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar sourceVisible = checkLinkedTaskVisibility(link.source);\n\t\tvar targetVisible = checkLinkedTaskVisibility(link.target);\n\n\t\tif (!(sourceVisible && targetVisible) ||\n\t\t\tgantt._isAllowedUnscheduledTask(gantt.getTask(link.source)) || gantt._isAllowedUnscheduledTask(gantt.getTask(link.target)))\n\t\t\treturn false;\n\n\t\treturn gantt.callEvent(\"onBeforeLinkDisplay\", [id, link]);\n\t});\n\n\n\t(function(){\n\t\t// delete all connected links after task is deleted\n\t\tvar treeHelper = require(\"../../utils/task_tree_helpers\");\n\t\tvar deletedLinks = {};\n\n\t\tgantt.attachEvent(\"onBeforeTaskDelete\", function(id, item){\n\t\t\tdeletedLinks[id] = treeHelper.getSubtreeLinks(gantt, id);\n\t\t\treturn true;\n\t\t});\n\n\t\tgantt.attachEvent(\"onAfterTaskDelete\", function(id, item) {\n\t\t\tif(deletedLinks[id]){\n\t\t\t\tgantt.$data.linksStore.silent(function(){\n\t\t\t\t\tfor(var i in deletedLinks[id]){\n\t\t\t\t\t\tgantt.$data.linksStore.removeItem(i);\n\t\t\t\t\t\tsync_link_delete(deletedLinks[id][i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tdeletedLinks[id] = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t})();\n\n\tgantt.attachEvent(\"onAfterLinkDelete\", function(id, link) {\n\t\tgantt.refreshTask(link.source);\n\t\tgantt.refreshTask(link.target);\n\t});\n\n\tgantt.attachEvent(\"onParse\", sync_links);\n\n\tmapEvents({\n\t\tsource: linksStore,\n\t\ttarget: gantt,\n\t\tevents:{\n\t\t\t\"onItemLoading\":\"onLinkLoading\",\n\t\t\t\"onBeforeAdd\":\"onBeforeLinkAdd\",\n\t\t\t\"onAfterAdd\":\"onAfterLinkAdd\",\n\t\t\t\"onBeforeUpdate\":\"onBeforeLinkUpdate\",\n\t\t\t\"onAfterUpdate\":\"onAfterLinkUpdate\",\n\t\t\t\"onBeforeDelete\":\"onBeforeLinkDelete\",\n\t\t\t\"onAfterDelete\":\"onAfterLinkDelete\",\n\t\t\t\"onIdChange\":\"onLinkIdChange\"\n\t\t}\n\t});\n\n\tmapEvents({\n\t\tsource: tasksStore,\n\t\ttarget: gantt,\n\t\tevents:{\n\t\t\t\"onItemLoading\":\"onTaskLoading\",\n\t\t\t\"onBeforeAdd\":\"onBeforeTaskAdd\",\n\t\t\t\"onAfterAdd\":\"onAfterTaskAdd\",\n\t\t\t\"onBeforeUpdate\":\"onBeforeTaskUpdate\",\n\t\t\t\"onAfterUpdate\":\"onAfterTaskUpdate\",\n\t\t\t\"onBeforeDelete\":\"onBeforeTaskDelete\",\n\t\t\t\"onAfterDelete\":\"onAfterTaskDelete\",\n\t\t\t\"onIdChange\":\"onTaskIdChange\",\n\t\t\t\"onBeforeItemMove\":\"onBeforeTaskMove\",\n\t\t\t\"onAfterItemMove\":\"onAfterTaskMove\",\n\t\t\t\"onFilterItem\":\"onBeforeTaskDisplay\",\n\t\t\t\"onItemOpen\":\"onTaskOpened\",\n\t\t\t\"onItemClose\":\"onTaskClosed\",\n\t\t\t\"onBeforeSelect\":\"onBeforeTaskSelected\",\n\t\t\t\"onAfterSelect\":\"onTaskSelected\",\n\t\t\t\"onAfterUnselect\":\"onTaskUnselected\"\n\t\t}\n\t});\n\n\tgantt.$data = {\n\t\ttasksStore: tasksStore,\n\t\tlinksStore: linksStore\n\t};\n\n\tfunction sync_link(link){\n\t\tif(gantt.isTaskExists(link.source)){\n\t\t\tvar sourceTask = gantt.getTask(link.source);\n\t\t\tsourceTask.$source = sourceTask.$source || [];\n\t\t\tsourceTask.$source.push(link.id);\n\t\t}\n\t\tif(gantt.isTaskExists(link.target)){\n\t\t\tvar targetTask = gantt.getTask(link.target);\n\t\t\ttargetTask.$target = targetTask.$target || [];\n\t\t\ttargetTask.$target.push(link.id);\n\t\t}\n\t}\n\n\tfunction sync_link_delete(link){\n\t\tif(gantt.isTaskExists(link.source)){\n\t\t\tvar sourceTask = gantt.getTask(link.source);\n\t\t\tfor(var i = 0; i < sourceTask.$source.length; i++){\n\t\t\t\tif(sourceTask.$source[i] == link.id){\n\t\t\t\t\tsourceTask.$source.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(gantt.isTaskExists(link.target)){\n\t\t\tvar targetTask = gantt.getTask(link.target);\n\t\t\tfor(var i = 0; i < targetTask.$target.length; i++){\n\t\t\t\tif(targetTask.$target[i] == link.id){\n\t\t\t\t\ttargetTask.$target.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction sync_links() {\n\t\tvar task = null;\n\t\tvar tasks = gantt.$data.tasksStore.getItems();\n\n\t\tfor(var i = 0, len = tasks.length; i < len; i++){\n\t\t\ttask = tasks[i];\n\t\t\ttask.$source = [];\n\t\t\ttask.$target = [];\n\t\t}\n\n\t\tvar links = gantt.$data.linksStore.getItems();\n\t\tfor (var i = 0, len = links.length; i < len; i++) {\n\n\t\t\tvar link = links[i];\n\t\t\tsync_link(link);\n\t\t}\n\t}\n\n\tfunction mapEvents(conf){\n\t\tvar mapFrom = conf.source;\n\t\tvar mapTo = conf.target;\n\t\tfor(var i in conf.events){\n\t\t\t(function(sourceEvent, targetEvent){\n\t\t\t\tmapFrom.attachEvent(sourceEvent, function(){\n\t\t\t\t\treturn mapTo.callEvent(targetEvent, Array.prototype.slice.call(arguments));\n\t\t\t\t}, targetEvent);\n\t\t\t})(i, conf.events[i]);\n\t\t}\n\t}\n\n\tfunction _init_task(task) {\n\t\tif (!this.defined(task.id))\n\t\t\ttask.id = this.uid();\n\n\t\tif (task.start_date)\n\t\t\ttask.start_date = gantt.date.parseDate(task.start_date, \"parse_date\");\n\t\tif (task.end_date)\n\t\t\ttask.end_date = gantt.date.parseDate(task.end_date, \"parse_date\");\n\n\n\t\tvar duration = null;\n\t\tif (task.duration || task.duration === 0) {\n\t\t\ttask.duration = duration = task.duration * 1;\n\t\t}\n\n\t\tif (duration) {\n\t\t\tif (task.start_date && !task.end_date) {\n\t\t\t\ttask.end_date = this.calculateEndDate(task);\n\t\t\t} else if (!task.start_date && task.end_date) {\n\t\t\t\ttask.start_date = this.calculateEndDate({\n\t\t\t\t\tstart_date: task.end_date,\n\t\t\t\t\tduration: -task.duration,\n\t\t\t\t\ttask: task\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\ttask.progress = Number(task.progress) || 0;\n\n\t\tif (this._isAllowedUnscheduledTask(task)) {\n\t\t\tthis._set_default_task_timing(task);\n\t\t}\n\t\tthis._init_task_timing(task);\n\t\tif (task.start_date && task.end_date)\n\t\t\tthis.correctTaskWorkTime(task);\n\n\t\ttask.$source = [];\n\t\ttask.$target = [];\n\n\t\tvar originalTask = this.$data.tasksStore.getItem(task.id);\n\t\tif (originalTask && !utils.defined(task.open)) {\n\t\t\t// if a task with the same id is already in the gantt and the new object doesn't specify the `open` state -\n\t\t\t// restore the `open` state we already have in the chart\n\t\t\ttask.$open = originalTask.$open;\n\t\t}\n\n\t\tif (task.parent === undefined) {\n\t\t\ttask.parent = this.config.root_id;\n\t\t}\n\t\treturn task;\n\t}\n\n\tfunction _init_link(link) {\n\t\tif (!this.defined(link.id))\n\t\t\tlink.id = this.uid();\n\t\treturn link;\n\t}\n}\n\n\nmodule.exports = initDataStores;\n","function createLayoutFacade(){\n\n\tfunction getTimeline(gantt){\n\t\treturn gantt.$ui.getView(\"timeline\");\n\t}\n\n\tfunction getGrid(gantt){\n\t\treturn gantt.$ui.getView(\"grid\");\n\t}\n\n\tfunction getVerticalScrollbar(gantt){\n\t\treturn gantt.$ui.getView(\"scrollVer\");\n\t}\n\n\tfunction getHorizontalScrollbar(gantt){\n\t\treturn gantt.$ui.getView(\"scrollHor\");\n\t}\n\n\tvar DEFAULT_VALUE = \"DEFAULT_VALUE\";\n\n\tfunction tryCall(getView, method, args, fallback){\n\t\tvar view = getView(this);\n\t\tif (!(view && view.isVisible())) {\n\t\t\tif(fallback){\n\t\t\t\treturn fallback();\n\t\t\t}else{\n\t\t\t\treturn DEFAULT_VALUE;\n\t\t\t}\n\t\t} else {\n\t\t\treturn view[method].apply(view, args);\n\t\t}\n\t}\n\n\treturn {\n\n\t\tgetColumnIndex: function(name) {\n\t\t\tvar res = tryCall.call(this, getGrid, \"getColumnIndex\", [name]);\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn 0;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\t\tdateFromPos: function(x) {\n\t\t\tvar res = tryCall.call(this, getTimeline, \"dateFromPos\", Array.prototype.slice.call(arguments));\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn this.getState().min_date;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\t\tposFromDate: function(date) {\n\t\t\tvar res = tryCall.call(this, getTimeline, \"posFromDate\", [date]);\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn 0;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\t\tgetRowTop: function(index) {\n\t\t\tvar self = this;\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getRowTop\", [index],\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getRowTop\", [index]);}\n\t\t\t\t);\n\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn 0;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\t\tgetTaskTop: function(id) {\n\t\t\tvar self = this;\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getItemTop\", [id],\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemTop\", [id]);}\n\t\t\t);\n\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn 0;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\n\t\tgetTaskPosition: function(task, start_date, end_date) {\n\t\t\tvar res = tryCall.call(this, getTimeline, \"getItemPosition\", [task, start_date, end_date]);\n\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\tvar top = this.getTaskTop(task.id);\n\t\t\t\tvar height = this.getTaskHeight();\n\n\t\t\t\treturn {\n\t\t\t\t\tleft: 0,\n\t\t\t\t\ttop: top,\n\t\t\t\t\theight: height,\n\t\t\t\t\twidth: 0\n\t\t\t\t};\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\t\tgetTaskHeight: function() {\n\t\t\tvar self = this;\n\t\t\tvar res = tryCall.call(self, getTimeline, \"getItemHeight\", [],\n\t\t\t\tfunction(){ return tryCall.call(self, getGrid, \"getItemHeight\", []);}\n\t\t\t);\n\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn 0;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\n\t\tcolumnIndexByDate: function(date) {\n\t\t\tvar res = tryCall.call(this, getTimeline, \"columnIndexByDate\", [date]);\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn 0;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\t\troundTaskDates: function() {\n\t\t\ttryCall.call(this, getTimeline, \"roundTaskDates\", []);\n\t\t},\n\n\t\tgetScale: function() {\n\t\t\tvar res = tryCall.call(this, getTimeline, \"getScale\", []);\n\t\t\tif(res === DEFAULT_VALUE){\n\t\t\t\treturn null;\n\t\t\t}else{\n\t\t\t\treturn res;\n\t\t\t}\n\t\t},\n\n\t\tgetTaskNode: function(id) {\n\t\t\tvar timeline = getTimeline(this);\n\t\t\tif (!timeline || !timeline.isVisible()) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\treturn timeline._taskRenderer.rendered[id];\n\t\t\t}\n\t\t},\n\n\n\t\tgetLinkNode: function(id) {\n\t\t\tvar timeline = getTimeline(this);\n\t\t\tif (!timeline.isVisible()) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\treturn timeline._linkRenderer.rendered[id];\n\t\t\t}\n\t\t},\n\n\t\tscrollTo: function(left, top){\n\t\t\tvar vertical = getVerticalScrollbar(this);\n\t\t\tvar horizontal = getHorizontalScrollbar(this);\n\n\t\t\tvar oldH = {position: 0},\n\t\t\t\toldV = {position: 0};\n\n\t\t\tif(vertical){\n\t\t\t\toldV = vertical.getScrollState();\n\t\t\t}\n\t\t\tif(horizontal){\n\t\t\t\toldH = horizontal.getScrollState();\n\t\t\t}\n\n\t\t\tif (horizontal && left*1 == left){\n\t\t\t\thorizontal.scroll(left);\n\t\t\t}\n\t\t\tif(vertical && top*1 == top){\n\t\t\t\tvertical.scroll(top);\n\t\t\t}\n\n\t\t\tvar newV = {position: 0},\n\t\t\t\tnewH = {position: 0};\n\t\t\tif(vertical){\n\t\t\t\tnewV = vertical.getScrollState();\n\t\t\t}\n\t\t\tif(horizontal){\n\t\t\t\tnewH = horizontal.getScrollState();\n\t\t\t}\n\n\t\t\tthis.callEvent(\"onGanttScroll\", [oldH.position, oldV.position, newH.position, newV.position]);\n\t\t},\n\n\t\tshowDate: function(date){\n\t\t\tvar date_x = this.posFromDate(date);\n\t\t\tvar scroll_to = Math.max(date_x - this.config.task_scroll_offset, 0);\n\t\t\tthis.scrollTo(scroll_to);\n\t\t},\n\t\tshowTask: function(id) {\n\t\t\tvar pos = this.getTaskPosition(this.getTask(id));\n\n\t\t\tvar left = Math.max(pos.left - this.config.task_scroll_offset, 0);\n\n\t\t\tvar dataHeight = this._scroll_state().y;\n\t\t\tvar top;\n\t\t\tif(!dataHeight){\n\t\t\t\ttop = pos.top;\n\t\t\t}else{\n\t\t\t\ttop = pos.top - (dataHeight - this.config.row_height)/2;\n\t\t\t}\n\n\t\t\tthis.scrollTo(left, top);\n\t\t},\n\t\t_scroll_state: function(){\n\t\t\tvar result = {\n\t\t\t\tx: false,\n\t\t\t\ty: false,\n\t\t\t\tx_pos: 0,\n\t\t\t\ty_pos: 0,\n\t\t\t\tscroll_size: this.config.scroll_size + 1,//1px for inner content\n\t\t\t\tx_inner: 0,\n\t\t\t\ty_inner: 0\n\t\t\t};\n\n\t\t\tvar scrollVer = getVerticalScrollbar(this),\n\t\t\t\tscrollHor = getHorizontalScrollbar(this);\n\t\t\tif(scrollHor){\n\t\t\t\tvar horState = scrollHor.getScrollState();\n\t\t\t\tif(horState.visible){\n\t\t\t\t\tresult.x = horState.size;\n\t\t\t\t\tresult.x_inner = horState.scrollSize;\n\t\t\t\t}\n\t\t\t\tresult.x_pos = horState.position || 0;\n\t\t\t}\n\n\t\t\tif(scrollVer){\n\t\t\t\tvar verState = scrollVer.getScrollState();\n\t\t\t\tif(verState.visible){\n\t\t\t\t\tresult.y = verState.size;\n\n\t\t\t\t\tresult.y_inner = verState.scrollSize;\n\t\t\t\t}\n\t\t\t\tresult.y_pos = verState.position || 0;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t\tgetScrollState: function(){\n\t\t\tvar state = this._scroll_state();\n\t\t\treturn { x:state.x_pos, y:state.y_pos, inner_width:state.x, inner_height:state.y, width: state.x_inner, height: state.y_inner };\n\t\t}\n\n\t};\n\n}\n\nmodule.exports = createLayoutFacade;","module.exports = function(gantt) {\n\n};","var domHelpers = require(\"../../utils/dom_helpers\");\n\nvar initializer = (function() {\n\treturn function (gantt) {\n\t\treturn {\n\n\t\t\tgetVerticalScrollbar: function(){\n\t\t\t\treturn gantt.$ui.getView(\"scrollVer\");\n\t\t\t},\n\t\t\tgetHorizontalScrollbar: function(){\n\t\t\t\treturn gantt.$ui.getView(\"scrollHor\");\n\t\t\t},\n\n\t\t\t_legacyGridResizerClass: function(layout){\n\t\t\t\tvar resizers = layout.getCellsByType(\"resizer\");\n\t\t\t\tfor(var i = 0; i < resizers.length; i++){\n\t\t\t\t\tvar r = resizers[i];\n\t\t\t\t\tvar gridResizer = false;\n\n\t\t\t\t\tvar prev = r.$parent.getPrevSibling(r.$id);\n\t\t\t\t\tif(prev && prev.$config && prev.$config.id === \"grid\"){\n\t\t\t\t\t\tgridResizer= true;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tvar next = r.$parent.getNextSibling(r.$id);\n\t\t\t\t\t\tif(next && next.$config && next.$config.id === \"grid\"){\n\t\t\t\t\t\t\tgridResizer= true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(gridResizer){\n\t\t\t\t\t\tr.$config.css = (r.$config.css ? r.$config.css + \" \" : \"\") + \"gantt_grid_resize_wrap\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tonCreated: function(layout) {\n\t\t\t\tvar first = true;\n\n\t\t\t\tthis._legacyGridResizerClass(layout);\n\n\t\t\t\tlayout.attachEvent(\"onBeforeResize\", function() {\n\t\t\t\t\tvar mainTimeline = gantt.$ui.getView(\"timeline\");\n\t\t\t\t\tif (mainTimeline)\n\t\t\t\t\t\tmainTimeline.$config.hidden = mainTimeline.$parent.$config.hidden = !gantt.config.show_chart;\n\n\t\t\t\t\tvar mainGrid = gantt.$ui.getView(\"grid\");\n\n\t\t\t\t\tif(!mainGrid)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar showGrid = gantt.config.show_grid;\n\t\t\t\t\tif (first) {\n\t\t\t\t\t\tvar colsWidth = mainGrid._getColsTotalWidth();\n\t\t\t\t\t\tif (colsWidth !== false){\n\t\t\t\t\t\t\tgantt.config.grid_width = colsWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tshowGrid = showGrid && !!gantt.config.grid_width;\n\t\t\t\t\t\tgantt.config.show_grid = showGrid;\n\t\t\t\t\t}\n\t\t\t\t\tmainGrid.$config.hidden = mainGrid.$parent.$config.hidden = !showGrid;\n\n\t\t\t\t\tif (!mainGrid.$config.hidden) {\n\t\t\t\t\t\t/* restrict grid width due to min_width, max_width, min_grid_column_width */\n\t\t\t\t\t\tvar grid_limits = mainGrid._getGridWidthLimits();\n\t\t\t\t\t\tif (grid_limits[0] && gantt.config.grid_width < grid_limits[0])\n\t\t\t\t\t\t\tgantt.config.grid_width = grid_limits[0];\n\t\t\t\t\t\tif (grid_limits[1] && gantt.config.grid_width > grid_limits[1])\n\t\t\t\t\t\t\tgantt.config.grid_width = grid_limits[1];\n\t\t\t\t\t\tif (mainTimeline && gantt.config.show_chart){\n\n\t\t\t\t\t\t\tmainGrid.$config.width = gantt.config.grid_width - 1;\n\t\t\t\t\t\t\tif (!first) {\n\t\t\t\t\t\t\t\tif (mainTimeline && !domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\n\t\t\t\t\t\t\t\t\t// timeline is being displayed after being not visible, reset grid with from full screen\n\t\t\t\t\t\t\t\t\tif (!mainGrid.$config.original_grid_width) {\n\t\t\t\t\t\t\t\t\t\tvar skinSettings = gantt.skins[gantt.skin];\n\t\t\t\t\t\t\t\t\t\tif(skinSettings && skinSettings.config && skinSettings.config.grid_width){\n\t\t\t\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = skinSettings.config.grid_width;\n\t\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = 0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tgantt.config.grid_width = mainGrid.$config.original_grid_width;\n\t\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tmainGrid.$parent._setContentSize(mainGrid.$config.width, null);\n\t\t\t\t\t\t\t\t\tgantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, gantt.config.grid_width);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\n\t\t\t\t\t\t\t\tif (mainGrid.$parent.$config.group) {\n\t\t\t\t\t\t\t\t\tgantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, mainGrid.$parent.$config.width);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (mainTimeline && domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\n\t\t\t\t\t\t\t\t// hiding timeline, remember grid with to restore it when timeline is displayed again\n\t\t\t\t\t\t\t\tmainGrid.$config.original_grid_width = gantt.config.grid_width;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!first) {\n\t\t\t\t\t\t\t\tmainGrid.$parent.$config.width = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfirst = false;\n\t\t\t\t});\n\t\t\t\tthis._initScrollStateEvents(layout);\n\t\t\t},\n\n\t\t\t_initScrollStateEvents: function(layout) {\n\t\t\t\tgantt._getVerticalScrollbar = this.getVerticalScrollbar;\n\t\t\t\tgantt._getHorizontalScrollbar = this.getHorizontalScrollbar;\n\n\t\t\t\tvar vertical = this.getVerticalScrollbar();\n\t\t\t\tvar horizontal = this.getHorizontalScrollbar();\n\t\t\t\tif (vertical) {\n\t\t\t\t\tvertical.attachEvent(\"onScroll\", function(oldPos, newPos, dir){\n\t\t\t\t\t\tvar scrollState = gantt.getScrollState();\n\t\t\t\t\t\tgantt.callEvent(\"onGanttScroll\", [scrollState.x, oldPos, scrollState.x, newPos]);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (horizontal) {\n\t\t\t\t\thorizontal.attachEvent(\"onScroll\", function(oldPos, newPos, dir){\n\t\t\t\t\t\tvar scrollState = gantt.getScrollState();\n\t\t\t\t\t\tgantt.callEvent(\"onGanttScroll\", [oldPos, scrollState.y, newPos, scrollState.y]);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlayout.attachEvent(\"onResize\", function(){\n\t\t\t\t\tif (vertical && !gantt.$scroll_ver){\n\t\t\t\t\t\tgantt.$scroll_ver = vertical.$scroll_ver;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (horizontal && !gantt.$scroll_hor){\n\t\t\t\t\t\tgantt.$scroll_hor = horizontal.$scroll_hor;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t_findGridResizer: function(layout, grid){\n\t\t\t\tvar resizers = layout.getCellsByType(\"resizer\");\n\n\t\t\t\tvar gridFirst = true;\n\t\t\t\tvar gridResizer;\n\t\t\t\tfor(var i = 0; i < resizers.length; i++){\n\t\t\t\t\tvar res = resizers[i];\n\t\t\t\t\tres._getSiblings();\n\t\t\t\t\tvar prev = res._behind;\n\t\t\t\t\tvar next = res._front;\n\t\t\t\t\tif(prev && prev.$content === grid || (prev.isChild && prev.isChild(grid))){\n\t\t\t\t\t\tgridResizer = res;\n\t\t\t\t\t\tgridFirst = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}else if(next && next.$content === grid || (next.isChild && next.isChild(grid))){\n\t\t\t\t\t\tgridResizer = res;\n\t\t\t\t\t\tgridFirst = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tresizer: gridResizer,\n\t\t\t\t\tgridFirst: gridFirst\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tonInitialized: function (layout) {\n\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\n\n\t\t\t\tvar resizeInfo = this._findGridResizer(layout, grid);\n\n\t\t\t\t// expose grid resize events\n\t\t\t\tif(resizeInfo.resizer){\n\t\t\t\t\tvar gridFirst = resizeInfo.gridFirst,\n\t\t\t\t\t\tnext = resizeInfo.resizer;\n\t\t\t\t\tvar initialWidth;\n\t\t\t\t\tnext.attachEvent(\"onResizeStart\", function(prevCellWidth, nextCellWidth){\n\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\n\t\t\t\t\t\tvar viewCell = grid ? grid.$parent : null;\n\t\t\t\t\t\tif(viewCell){\n\t\t\t\t\t\t\tvar limits = grid._getGridWidthLimits();\n\n\t\t\t\t\t\t\t// min grid width is defined by min widths of its columns, unless grid has horizontal scroll\n\t\t\t\t\t\t\tif(!grid.$config.scrollable)\n\t\t\t\t\t\t\t\tviewCell.$config.minWidth = limits[0];\n\n\t\t\t\t\t\t\tviewCell.$config.maxWidth = limits[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinitialWidth = gridFirst ? prevCellWidth : nextCellWidth;\n\t\t\t\t\t\treturn gantt.callEvent(\"onGridResizeStart\", [initialWidth]);\n\t\t\t\t\t});\n\t\t\t\t\tnext.attachEvent(\"onResize\", function(newBehindSize, newFrontSize){\n\t\t\t\t\t\tvar newSize = gridFirst ? newBehindSize : newFrontSize;\n\t\t\t\t\t\treturn gantt.callEvent(\"onGridResize\", [initialWidth, newSize]);\n\t\t\t\t\t});\n\t\t\t\t\tnext.attachEvent(\"onResizeEnd\", function(oldBackSize, oldFrontSize, newBackSize, newFrontSize){\n\n\t\t\t\t\t\tvar oldSize = gridFirst ? oldBackSize : oldFrontSize;\n\t\t\t\t\t\tvar newSize = gridFirst ? newBackSize : newFrontSize;\n\t\t\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\n\t\t\t\t\t\tvar viewCell = grid ? grid.$parent : null;\n\t\t\t\t\t\tif(viewCell){\n\t\t\t\t\t\t\tviewCell.$config.minWidth = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar res = gantt.callEvent(\"onGridResizeEnd\", [oldSize, newSize]);\n\t\t\t\t\t\tif(res){\n\t\t\t\t\t\t\tgantt.config.grid_width = newSize;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tonDestroyed: function (timeline) {\n\n\t\t\t}\n\t\t};\n\n\t};\n})();\n\nmodule.exports = initializer;","var domHelpers = require(\"../../../utils/dom_helpers\");\n\nvar initLinksDND = function(timeline, gantt) {\n\tvar _link_landing,\n\t\t_link_target_task,\n\t\t_link_target_task_start,\n\t\t_link_source_task,\n\t\t_link_source_task_start,\n\t\tmarkerDefaultOffset = 10,\n\t\tscrollDefaultSize = 18;\n\n\n\tfunction getVisibleMilestoneWidth() {\n\t\tvar origWidth = timeline.getItemHeight();//m-s have square shape\n\t\treturn Math.round(Math.sqrt(2 * origWidth * origWidth)) - 2;\n\t}\n\n\tfunction isMilestone(task) {\n\t\treturn gantt.getTaskType(task.type) == gantt.config.types.milestone;\n\t}\n\n\tfunction getDndState(){\n\t\treturn {\n\t\t\tlink_source_id : _link_source_task,\n\t\t\tlink_target_id : _link_target_task,\n\t\t\tlink_from_start : _link_source_task_start,\n\t\t\tlink_to_start : _link_target_task_start,\n\t\t\tlink_landing_area : _link_landing\n\t\t};\n\t}\n\n\tvar services = gantt.$services;\n\n\tvar state = services.getService(\"state\");\n\tvar DnD = services.getService(\"dnd\");\n\n\tstate.registerProvider(\"linksDnD\", getDndState);\n\n\tvar dnd = new DnD(timeline.$task_bars, { sensitivity : 0, updates_per_second : 60 }),\n\t\tstart_marker = \"task_start_date\",\n\t\tend_marker = \"task_end_date\",\n\t\tlink_edge_marker = \"gantt_link_point\",\n\t\tlink_landing_hover_area = \"gantt_link_control\";\n\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function(obj,e) {\n\t\tvar target = (e.target||e.srcElement);\n\t\tresetDndState();\n\t\tif(gantt.getState().drag_id)\n\t\t\treturn false;\n\n\t\tif(domHelpers.locateClassName(target, link_edge_marker)){\n\t\t\tif(domHelpers.locateClassName(target, start_marker))\n\t\t\t\t_link_source_task_start = true;\n\n\t\t\tvar sid = gantt.locate(e);\n\t\t\t_link_source_task = sid;\n\n\t\t\tvar t = gantt.getTask(sid);\n\t\t\tif(gantt.isReadonly(t)){\n\t\t\t\tresetDndState();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar shift = 0;\n\n\t\t\tthis._dir_start = getLinePos(t, !!_link_source_task_start, shift, timeline.$getConfig(), true);\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\n\t}, this));\n\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function(obj,e) {\n\t\tif(gantt.config.touch) {\n\t\t\tgantt.refreshData();\n\t\t}\n\t\tupdateMarkedHtml(dnd.config.marker);\n\t}, this));\n\n\tfunction getLinePos(task, to_start, shift, cfg, isStart){\n\t\tvar taskPos = getMilestonePosition(task, function(task){ return gantt.getTaskPosition(task);}, cfg);\n\n\t\tvar pos = {x: taskPos.x, y: taskPos.y};\n\t\tif(!to_start){\n\t\t\tpos.x = taskPos.xEnd;\n\t\t}\n\n\t\t//var pos = gantt._get_task_pos(task, !!to_start);\n\t\tpos.y += gantt.config.row_height/2;\n\n\t\tvar offset = isMilestone(task) && isStart ? 2 : 0;\n\n\t\tshift = shift || 0;\n\t\tif(cfg.rtl)\n\t\t\tshift = shift * -1;\n\n\t\tpos.x += (to_start ? -1 : 1)*shift - offset;\n\t\treturn pos;\n\t}\n\n\tfunction getMilestonePosition(task, getTaskPosition, cfg){\n\t\tvar pos = getTaskPosition(task);\n\n\t\tvar res = {\n\t\t\tx: pos.left,\n\t\t\ty: pos.top,\n\t\t\twidth: pos.width,\n\t\t\theight: pos.height\n\t\t};\n\n\t\tif(cfg.rtl){\n\t\t\tres.xEnd = res.x;\n\t\t\tres.x = res.xEnd + res.width;\n\t\t}else{\n\t\t\tres.xEnd = res.x + res.width;\n\t\t}\n\t\tres.yEnd = res.y + res.height;\n\n\t\tif(gantt.getTaskType(task.type) == gantt.config.types.milestone){\n\t\t\tvar milestoneWidth = getVisibleMilestoneWidth();\n\n\t\t\tres.x += (!cfg.rtl ? -1 : 1)*(milestoneWidth / 2);\n\t\t\tres.xEnd += (!cfg.rtl ? 1 : -1)*(milestoneWidth / 2);\n\n\t\t\t//pos.x -= milestoneWidth / 2;\n\t\t\t//pos.xEnd += milestoneWidth / 2;\n\t\t\tres.width = pos.xEnd - pos.x;\n\t\t}\n\n\n\t\treturn res;\n\t}\n\n\tfunction getVieportSize(){\n\t\tvar root = gantt.$root;\n\t\treturn { right: root.offsetWidth, bottom: root.offsetHeight };\n\t}\n\tfunction getMarkerSize (marker){\n\t\tvar width = 0, height = 0;\n\t\tif(marker){\n\t\t\twidth = marker.offsetWidth || 0;\n\t\t\theight = marker.offsetHeight || 0;\n\t\t}\n\t\treturn { width: width, height: height };\n\t}\n\n\tfunction getPosition(e, marker){\n\t\tvar oldPos = dnd.getPosition(e);\n\n\t\tvar markerSize = getMarkerSize(marker);\n\t\tvar viewportSize = getVieportSize();\n\n\t\tvar offsetX = gantt.config.tooltip_offset_x || markerDefaultOffset;\n\t\tvar offsetY = gantt.config.tooltip_offset_y || markerDefaultOffset;\n\n\t\tvar scrollSize = gantt.config.scroll_size || scrollDefaultSize;\n\n\t\tvar position = {\n\t\t\ty: oldPos.y + offsetY,\n\t\t\tx: oldPos.x + offsetX,\n\t\t\tbottom: oldPos.y + markerSize.height + offsetY + scrollSize,\n\t\t\tright: oldPos.x + markerSize.width + offsetX + scrollSize\n\t\t};\n\n\t\tif(position.bottom > viewportSize.bottom){\n\t\t\tposition.y = viewportSize.bottom - markerSize.height - offsetY;\n\t\t}\n\n\t\tif(position.right > viewportSize.right){\n\t\t\tposition.x = viewportSize.right - markerSize.width - offsetX;\n\t\t}\n\t\treturn position;\n\t}\n\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function(obj,e) {\n\t\tvar dd = dnd.config;\n\t\tvar pos = getPosition(e, dd.marker);\n\t\tadvanceMarker(dd.marker, pos);\n\t\tvar landing = !!domHelpers.locateClassName(e, link_landing_hover_area);\n\n\t\tvar prevTarget = _link_target_task;\n\t\tvar prevLanding = _link_landing;\n\t\tvar prevToStart = _link_target_task_start;\n\n\t\tvar targ = gantt.locate(e),\n\t\t\tto_start = true;\n\t\t\n\t\t// can drag and drop link to another gantt on the page, such links are not supported\n\t\tvar sameGantt = domHelpers.isChildOf(e.target || e.srcElement, gantt.$root);\n\t\tif(!sameGantt){\n\t\t\tlanding = false;\n\t\t\ttarg = null;\n\t\t}\n\n\t\tif(landing){\n\t\t\t//refreshTask\n\t\t\tto_start = !domHelpers.locateClassName(e, end_marker);\n\t\t\tlanding = !!targ;\n\t\t}\n\n\t\t_link_target_task = targ;\n\t\t_link_landing = landing;\n\t\t_link_target_task_start = to_start;\n\n\t\tif(landing){\n\t\t\tvar t = gantt.getTask(targ);\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar node = domHelpers.locateClassName(e, link_landing_hover_area);\n\t\t\tvar shift = 0;\n\t\t\tif(node){\n\t\t\t\tshift = Math.floor(node.offsetWidth / 2);\n\t\t\t}\n\n\t\t\tthis._dir_end = getLinePos(t, !!_link_target_task_start,shift, config);\n\t\t}else{\n\t\t\tthis._dir_end = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n\t\t}\n\n\t\tvar targetChanged = !(prevLanding == landing && prevTarget == targ && prevToStart == to_start);\n\t\tif(targetChanged){\n\t\t\tif(prevTarget)\n\t\t\t\tgantt.refreshTask(prevTarget, false);\n\t\t\tif(targ)\n\t\t\t\tgantt.refreshTask(targ, false);\n\t\t}\n\n\t\tif(targetChanged){\n\t\t\tupdateMarkedHtml(dd.marker);\n\t\t}\n\n\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\n\n\t\treturn true;\n\t}, this));\n\n\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function() {\n\t\tvar drag = getDndState();\n\n\t\tif(drag.link_source_id && drag.link_target_id && drag.link_source_id != drag.link_target_id){\n\t\t\tvar type = gantt._get_link_type(drag.link_from_start, drag.link_to_start);\n\n\t\t\tvar link = {source : drag.link_source_id, target: drag.link_target_id, type:type};\n\t\t\tif(link.type && gantt.isLinkAllowed(link)) {\n\t\t\t\tif(gantt.callEvent(\"onLinkCreated\", [link])){\n\t\t\t\t\tgantt.addLink(link);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tresetDndState();\n\n\t\tif(gantt.config.touch) {\n\t\t\tgantt.refreshData();\n\t\t}\n\t\telse {\n\t\t\tif (drag.link_source_id)\n\t\t\t\tgantt.refreshTask(drag.link_source_id, false);\n\t\t\tif (drag.link_target_id)\n\t\t\t\tgantt.refreshTask(drag.link_target_id, false);\n\t\t}\n\t\tremoveDirectionLine();\n\t}, this));\n\n\tfunction updateMarkedHtml(marker){\n\t\tvar link = getDndState();\n\n\t\tvar css = [\"gantt_link_tooltip\"];\n\t\tif(link.link_source_id && link.link_target_id){\n\t\t\tif(gantt.isLinkAllowed(link.link_source_id, link.link_target_id, link.link_from_start, link.link_to_start)){\n\t\t\t\tcss.push(\"gantt_allowed_link\");\n\t\t\t}else{\n\t\t\t\tcss.push(\"gantt_invalid_link\");\n\t\t\t}\n\t\t}\n\n\t\tvar className = gantt.templates.drag_link_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start);\n\t\tif(className)\n\t\t\tcss.push(className);\n\n\t\tvar html = \"
\" +\n\t\t\tgantt.templates.drag_link(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start) +\n\t\t\t\"
\";\n\t\tmarker.innerHTML = html;\n\t}\n\n\tfunction advanceMarker(marker, pos){\n\t\tmarker.style.left = pos.x + \"px\";\n\t\tmarker.style.top = pos.y + \"px\";\n\t}\n\n\tfunction resetDndState(){\n\t\t_link_source_task =\n\t\t\t_link_source_task_start =\n\t\t\t\t_link_target_task = null;\n\t\t_link_target_task_start = true;\n\t}\n\tfunction showDirectingLine(s_x, s_y, e_x, e_y){\n\t\tvar div = getDirectionLine();\n\n\t\tvar link = getDndState();\n\n\t\tvar css = [\"gantt_link_direction\"];\n\t\tif(gantt.templates.link_direction_class){\n\t\t\tcss.push(gantt.templates.link_direction_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start));\n\t\t}\n\n\t\tvar dist =Math.sqrt( (Math.pow(e_x - s_x, 2)) + (Math.pow(e_y - s_y, 2)) );\n\t\tdist = Math.max(0, dist - 3);\n\t\tif(!dist)\n\t\t\treturn;\n\n\t\tdiv.className = css.join(\" \");\n\t\tvar tan = (e_y - s_y)/(e_x - s_x),\n\t\t\tangle = Math.atan(tan);\n\n\t\tif(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 2){\n\t\t\tangle += Math.PI;\n\t\t}else if(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 3){\n\t\t\tangle -= Math.PI;\n\t\t}\n\n\n\n\t\tvar sin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\ttop = Math.round(s_y),\n\t\t\tleft = Math.round(s_x);\n\n\n\t\tvar style = [\n\t\t\t\"-webkit-transform: rotate(\"+angle+\"rad)\",\n\t\t\t\"-moz-transform: rotate(\"+angle+\"rad)\",\n\t\t\t\"-ms-transform: rotate(\"+angle+\"rad)\",\n\t\t\t\"-o-transform: rotate(\"+angle+\"rad)\",\n\t\t\t\"transform: rotate(\"+angle+\"rad)\",\n\t\t\t\"width:\" + Math.round(dist) + \"px\"\n\t\t];\n\n\t\tif(window.navigator.userAgent.indexOf(\"MSIE 8.0\") != -1){\n\t\t\t//ms-filter breaks styles in ie9, so add it only for 8th\n\t\t\tstyle.push(\"-ms-filter: \\\"\" + ieTransform(sin, cos) + \"\\\"\");\n\n\t\t\tvar shiftLeft = Math.abs(Math.round(s_x - e_x)),\n\t\t\t\tshiftTop = Math.abs(Math.round(e_y - s_y));\n\t\t\t//fix rotation axis\n\t\t\tswitch(coordinateCircleQuarter(s_x, e_x, s_y, e_y)){\n\t\t\t\tcase 1:\n\t\t\t\t\ttop -= shiftTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tleft -= shiftLeft;\n\t\t\t\t\ttop -= shiftTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tleft -= shiftLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\n\t\tstyle.push(\"top:\" + top + \"px\");\n\t\tstyle.push(\"left:\" + left + \"px\");\n\n\t\tdiv.style.cssText = style.join(\";\");\n\t}\n\n\tfunction ieTransform(sin, cos){\n\t\treturn \"progid:DXImageTransform.Microsoft.Matrix(\"+\n\t\t\t\"M11 = \"+cos+\",\"+\n\t\t\t\"M12 = -\"+sin+\",\"+\n\t\t\t\"M21 = \"+sin+\",\"+\n\t\t\t\"M22 = \"+cos+\",\"+\n\t\t\t\"SizingMethod = 'auto expand'\"+\n\t\t\")\";\n\t}\n\tfunction coordinateCircleQuarter(sX, eX, sY, eY){\n\t\tif(eX >= sX){\n\t\t\tif(eY <= sY){\n\t\t\t\treturn 1;\n\t\t\t}else{\n\t\t\t\treturn 4;\n\t\t\t}\n\t\t}else{\n\t\t\tif(eY <= sY){\n\t\t\t\treturn 2;\n\t\t\t}else{\n\t\t\t\treturn 3;\n\t\t\t}\n\t\t}\n\n\t}\n\tfunction getDirectionLine(){\n\t\tif(!dnd._direction || !dnd._direction.parentNode){\n\t\t\tdnd._direction = document.createElement(\"div\");\n\t\t\ttimeline.$task_links.appendChild(dnd._direction);\n\t\t}\n\t\treturn dnd._direction;\n\t}\n\tfunction removeDirectionLine(){\n\t\tif(dnd._direction){\n\t\t\tif (dnd._direction.parentNode)\t//the event line can be detached because of data refresh\n\t\t\t\tdnd._direction.parentNode.removeChild(dnd._direction);\n\n\t\t\tdnd._direction = null;\n\t\t}\n\t}\n\tgantt.attachEvent(\"onGanttRender\", gantt.bind(function() {\n\t\tif(dnd._direction){\n\t\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\n\t\t}\n\t}, this));\n};\n\nmodule.exports = {\n\tcreateLinkDND: function(){\n\t\treturn {\n\t\t\tinit: initLinksDND\n\t\t};\n\t}\n};","var domHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\");\nvar timeout = require(\"../../../utils/timeout\");\n\nfunction createTaskDND(timeline, gantt){\n\tvar services = gantt.$services;\n\treturn {\n\t\tdrag: null,\n\t\tdragMultiple: {},\n\t\t_events: {\n\t\t\tbefore_start: {},\n\t\t\tbefore_finish: {},\n\t\t\tafter_finish: {}\n\t\t},\n\t\t_handlers: {},\n\t\tinit: function () {\n\t\t\tthis._domEvents = gantt._createDomEventScope();\n\t\t\tthis.clear_drag_state();\n\t\t\tvar drag = gantt.config.drag_mode;\n\t\t\tthis.set_actions();\n\n\t\t\tvar stateService = services.getService(\"state\");\n\t\t\tstateService.registerProvider(\"tasksDnd\", utils.bind(function(){\n\t\t\t\treturn {\n\t\t\t\t\tdrag_id : this.drag ? this.drag.id : undefined,\n\t\t\t\t\tdrag_mode : this.drag ? this.drag.mode : undefined,\n\t\t\t\t\tdrag_from_start : this.drag ? this.drag.left : undefined\n\t\t\t\t};\n\t\t\t}, this));\n\n\t\t\tvar evs = {\n\t\t\t\t\"before_start\": \"onBeforeTaskDrag\",\n\t\t\t\t\"before_finish\": \"onBeforeTaskChanged\",\n\t\t\t\t\"after_finish\": \"onAfterTaskDrag\"\n\t\t\t};\n\t\t\t//for now, all drag operations will trigger the same events\n\t\t\tfor (var stage in this._events) {\n\t\t\t\tfor (var mode in drag) {\n\t\t\t\t\tthis._events[stage][mode] = evs[stage];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._handlers[drag.move] = this._move;\n\t\t\tthis._handlers[drag.resize] = this._resize;\n\t\t\tthis._handlers[drag.progress] = this._resize_progress;\n\t\t},\n\t\tset_actions: function () {\n\t\t\tvar data = timeline.$task_data;\n\t\t\tthis._domEvents.attach(data, \"mousemove\", gantt.bind(function (e) {\n\t\t\t\tthis.on_mouse_move(e || event);\n\t\t\t}, this));\n\t\t\tthis._domEvents.attach(data, \"mousedown\", gantt.bind(function (e) {\n\t\t\t\tthis.on_mouse_down(e || event);\n\t\t\t}, this));\n\t\t\tthis._domEvents.attach(gantt.$root, \"mouseup\", gantt.bind(function (e) {\n\t\t\t\tthis.on_mouse_up(e || event);\n\t\t\t}, this));\n\t\t},\n\n\t\tclear_drag_state: function () {\n\t\t\tthis.drag = {\n\t\t\t\tid: null,\n\t\t\t\tmode: null,\n\t\t\t\tpos: null,\n\t\t\t\tstart_x: null,\n\t\t\t\tstart_y: null,\n\t\t\t\tobj: null,\n\t\t\t\tleft: null\n\t\t\t};\n\t\t\tthis.dragMultiple = {};\n\t\t},\n\t\t_resize: function (ev, shift, drag) {\n\t\t\tvar cfg = timeline.$getConfig();\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\tif (drag.left) {\n\t\t\t\tev.start_date = gantt.dateFromPos(coords_x.start + shift);\n\t\t\t\tif (!ev.start_date) {\n\t\t\t\t\tev.start_date = new Date(gantt.getState().min_date);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tev.end_date = gantt.dateFromPos(coords_x.end + shift);\n\t\t\t\tif (!ev.end_date) {\n\t\t\t\t\tev.end_date = new Date(gantt.getState().max_date);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ev.end_date - ev.start_date < cfg.min_duration) {\n\t\t\t\tif (drag.left)\n\t\t\t\t\tev.start_date = gantt.calculateEndDate({start_date: ev.end_date, duration: -1, task: ev});\n\t\t\t\telse\n\t\t\t\t\tev.end_date = gantt.calculateEndDate({start_date: ev.start_date, duration: 1, task: ev});\n\t\t\t}\n\t\t\tgantt._init_task_timing(ev);\n\t\t},\n\t\t_resize_progress: function (ev, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar diffValue = !config.rtl ? (drag.pos.x - coords_x.start) : (coords_x.start - drag.pos.x);\n\n\t\t\tvar diff = Math.max(0, diffValue);\n\t\t\tev.progress = Math.min(1, diff / Math.abs(coords_x.end - coords_x.start));\n\t\t},\n\n\t\t_find_max_shift: function(dragItems, shift){\n\t\t\tvar correctShift;\n\t\t\tfor(var i in dragItems){\n\t\t\t\tvar drag = dragItems[i];\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\t\tvar minX = gantt.posFromDate( new Date(gantt.getState().min_date)),\n\t\t\t\t\tmaxX = gantt.posFromDate( new Date(gantt.getState().max_date));\n\n\t\t\t\tif(coords_x.end + shift > maxX){\n\t\t\t\t\tvar maxShift = maxX - coords_x.end;\n\t\t\t\t\tif(maxShift < correctShift || correctShift === undefined){\n\t\t\t\t\t\tcorrectShift = maxShift;\n\t\t\t\t\t}\n\t\t\t\t}else if(coords_x.start + shift < minX){\n\t\t\t\t\tvar minShift = minX - coords_x.start;\n\t\t\t\t\tif(minShift < correctShift || correctShift === undefined){\n\t\t\t\t\t\tcorrectShift = minShift;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn correctShift;\n\t\t},\n\t\t_move: function (ev, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\tvar new_start = gantt.dateFromPos(coords_x.start + shift),\n\t\t\t\tnew_end = gantt.dateFromPos(coords_x.end + shift);\n\t\t\tif (!new_start) {\n\t\t\t\tev.start_date = new Date(gantt.getState().min_date);\n\t\t\t\tev.end_date = gantt.dateFromPos(gantt.posFromDate(ev.start_date) + (coords_x.end - coords_x.start));\n\t\t\t} else if (!new_end) {\n\t\t\t\tev.end_date = new Date(gantt.getState().max_date);\n\t\t\t\tev.start_date = gantt.dateFromPos(gantt.posFromDate(ev.end_date) - (coords_x.end - coords_x.start));\n\t\t\t} else {\n\t\t\t\tev.start_date = new_start;\n\t\t\t\tev.end_date = new_end;\n\t\t\t}\n\t\t},\n\t\t_drag_task_coords: function (t, drag) {\n\t\t\tvar start = drag.obj_s_x = drag.obj_s_x || gantt.posFromDate(t.start_date);\n\t\t\tvar end = drag.obj_e_x = drag.obj_e_x || gantt.posFromDate(t.end_date);\n\t\t\treturn {\n\t\t\t\tstart: start,\n\t\t\t\tend: end\n\t\t\t};\n\t\t},\n\t\t_mouse_position_change: function (oldPos, newPos) {\n\t\t\tvar dx = oldPos.x - newPos.x,\n\t\t\t\tdy = oldPos.y - newPos.y;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t},\n\t\t_is_number: function (n) {\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t},\n\n\t\ton_mouse_move: function (e) {\n\t\t\tif (this.drag.start_drag) {\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n\n\t\t\t\tvar sX = this.drag.start_drag.start_x,\n\t\t\t\t\tsY = this.drag.start_drag.start_y;\n\n\t\t\t\tif ((Date.now() - this.drag.timestamp > 50) ||\n\t\t\t\t\t(this._is_number(sX) && this._is_number(sY) && this._mouse_position_change({\n\t\t\t\t\t\tx: sX,\n\t\t\t\t\t\ty: sY\n\t\t\t\t\t}, pos) > 20)) {\n\t\t\t\t\tthis._start_dnd(e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar drag = this.drag;\n\n\t\t\tif (drag.mode) {\n\t\t\t\tif (!timeout(this, 40))//limit update frequency\n\t\t\t\t\treturn;\n\n\t\t\t\tthis._update_on_move(e);\n\n\t\t\t}\n\t\t},\n\n\t\t_update_item_on_move: function(shift, id, mode, drag, e){\n\t\t\tvar ev = gantt.getTask(id);\n\t\t\tvar original = gantt.mixin({}, ev);\n\t\t\tvar copy = gantt.mixin({}, ev);\n\t\t\tthis._handlers[mode].apply(this, [copy, shift, drag]);\n\t\t\tgantt.mixin(ev, copy, true);\n\t\t\t//gantt._update_parents(drag.id, true);\n\t\t\tgantt.callEvent(\"onTaskDrag\", [ev.id, mode, copy, original, e]);\n\t\t\tgantt.mixin(ev, copy, true);\n\t\t\tgantt.refreshTask(id);\n\t\t},\n\n\t\t_update_on_move: function (e) {\n\t\t\tvar drag = this.drag;\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tif (drag.mode) {\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n\t\t\t\tif (drag.pos && drag.pos.x == pos.x)\n\t\t\t\t\treturn;\n\n\t\t\t\tdrag.pos = pos;\n\n\t\t\t\tvar curr_date = gantt.dateFromPos(pos.x);\n\t\t\t\tif (!curr_date || isNaN(curr_date.getTime()))\n\t\t\t\t\treturn;\n\n\n\t\t\t\tvar shift = pos.x - drag.start_x;\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tif (this._handlers[drag.mode]) {\n\n\t\t\t\t\tif(gantt.isSummaryTask(ev) && gantt.config.drag_project && drag.mode == config.drag_mode.move){\n\n\t\t\t\t\t\tvar initialDrag = {};\n\t\t\t\t\t\tinitialDrag[drag.id] = utils.copy(drag);\n\t\t\t\t\t\tvar maxShift = this._find_max_shift(utils.mixin(initialDrag, this.dragMultiple), shift);\n\t\t\t\t\t\tif(maxShift !== undefined){\n\t\t\t\t\t\t\tshift = maxShift;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n\t\t\t\t\t\tfor(var i in this.dragMultiple){\n\t\t\t\t\t\t\tvar childDrag = this.dragMultiple[i];\n\t\t\t\t\t\t\tthis._update_item_on_move(shift, childDrag.id, childDrag.mode, childDrag, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n\t\t\t\t\t}\n\t\t\t\t\tgantt._update_parents(drag.id);\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\ton_mouse_down: function (e, src) {\n\t\t\t// on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state\n\t\t\t// let's ignore right mouse button then\n\t\t\tif (e.button == 2 && e.button !== undefined)\n\t\t\t\treturn;\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar id = gantt.locate(e);\n\t\t\tvar task = null;\n\t\t\tif (gantt.isTaskExists(id)) {\n\t\t\t\ttask = gantt.getTask(id);\n\t\t\t}\n\n\t\t\tif (gantt.isReadonly(task) || this.drag.mode) return;\n\n\t\t\tthis.clear_drag_state();\n\n\t\t\tsrc = src || (e.target || e.srcElement);\n\n\t\t\tvar className = domHelpers.getClassName(src);\n\t\t\tvar drag = this._get_drag_mode(className, src);\n\n\t\t\tif (!className || !drag) {\n\t\t\t\tif (src.parentNode)\n\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\n\t\t\t\telse\n\t\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!drag) {\n\t\t\t\tif (gantt.checkEvent(\"onMouseDown\") && gantt.callEvent(\"onMouseDown\", [className.split(\" \")[0]])) {\n\t\t\t\t\tif (src.parentNode)\n\t\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\n\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (drag.mode && drag.mode != config.drag_mode.ignore && config[\"drag_\" + drag.mode]) {\n\t\t\t\t\tid = gantt.locate(src);\n\t\t\t\t\ttask = gantt.copy(gantt.getTask(id) || {});\n\n\t\t\t\t\tif (gantt.isReadonly(task)) {\n\t\t\t\t\t\tthis.clear_drag_state();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && !config.drag_project) && drag.mode != config.drag_mode.progress) {//only progress drag is allowed for tasks with flexible duration\n\t\t\t\t\t\tthis.clear_drag_state();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdrag.id = id;\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n\n\t\t\t\t\tdrag.start_x = pos.x;\n\t\t\t\t\tdrag.start_y = pos.y;\n\t\t\t\t\tdrag.obj = task;\n\t\t\t\t\tthis.drag.start_drag = drag;\n\t\t\t\t\tthis.drag.timestamp = Date.now();\n\n\t\t\t\t} else\n\t\t\t\t\tthis.clear_drag_state();\n\t\t\t}\n\t\t},\n\t\t_fix_dnd_scale_time: function (task, drag) {\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar unit = gantt.getScale().unit,\n\t\t\t\tstep = gantt.getScale().step;\n\t\t\tif (!config.round_dnd_dates) {\n\t\t\t\tunit = 'minute';\n\t\t\t\tstep = config.time_step;\n\t\t\t}\n\n\t\t\tfunction fixStart(task) {\n\t\t\t\tif (!gantt.config.correct_work_time)\n\t\t\t\t\treturn;\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\tif (!gantt.isWorkTime(task.start_date, undefined, task))\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate({\n\t\t\t\t\t\tstart_date: task.start_date,\n\t\t\t\t\t\tduration: -1,\n\t\t\t\t\t\tunit: config.duration_unit,\n\t\t\t\t\t\ttask: task\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction fixEnd(task) {\n\t\t\t\tif (!gantt.config.correct_work_time)\n\t\t\t\t\treturn;\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\tif (!gantt.isWorkTime(new Date(task.end_date - 1), undefined, task))\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate({\n\t\t\t\t\t\tstart_date: task.end_date,\n\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\tunit: config.duration_unit,\n\t\t\t\t\t\ttask: task\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (drag.mode == config.drag_mode.resize) {\n\t\t\t\tif (drag.left) {\n\t\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\n\t\t\t\t\tfixStart(task);\n\t\t\t\t} else {\n\t\t\t\t\ttask.end_date = gantt.roundDate({date: task.end_date, unit: unit, step: step});\n\t\t\t\t\tfixEnd(task);\n\t\t\t\t}\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\n\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\n\t\t\t\tfixStart(task);\n\t\t\t\ttask.end_date = gantt.calculateEndDate(task);\n\t\t\t}\n\t\t},\n\t\t_fix_working_times: function (task, drag) {\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar drag = drag || {mode: config.drag_mode.move};\n\n\t\t\tif (drag.mode == config.drag_mode.resize) {\n\t\t\t\tif (drag.left) {\n\t\t\t\t\ttask.start_date = gantt.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\n\t\t\t\t} else {\n\t\t\t\t\ttask.end_date = gantt.getClosestWorkTime({date: task.end_date, dir: 'past', task: task});\n\t\t\t\t}\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\n\t\t\t\tgantt.correctTaskWorkTime(task);\n\t\t\t}\n\t\t},\n\n\t\t_finalize_mouse_up: function(taskId, config, drag, e){\n\t\t\tvar ev = gantt.getTask(taskId);\n\n\t\t\tif (config.work_time && config.correct_work_time) {\n\t\t\t\tthis._fix_working_times(ev, drag);\n\t\t\t}\n\n\t\t\tthis._fix_dnd_scale_time(ev, drag);\n\n\t\t\tif (!this._fireEvent(\"before_finish\", drag.mode, [taskId, drag.mode, gantt.copy(drag.obj), e])) {\n\t\t\t\t//drag.obj._dhx_changed = false;\n\t\t\t\tthis.clear_drag_state();\n\t\t\t\tif(taskId == drag.id){\n\t\t\t\t\tdrag.obj._dhx_changed = false;\n\t\t\t\t\tgantt.mixin(ev, drag.obj, true);\n\t\t\t\t}\n\n\n\t\t\t\tgantt.refreshTask(ev.id);\n\t\t\t} else {\n\t\t\t\tvar drag_id = taskId;\n\n\t\t\t\tgantt._init_task_timing(ev);\n\n\t\t\t\tthis.clear_drag_state();\n\t\t\t\tgantt.updateTask(ev.id);\n\t\t\t\tthis._fireEvent(\"after_finish\", drag.mode, [drag_id, drag.mode, e]);\n\t\t\t}\n\n\t\t},\n\n\t\ton_mouse_up: function (e) {\n\n\t\t\tvar drag = this.drag;\n\t\t\tif (drag.mode && drag.id) {\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\t//drop\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\t\t\t\tvar dragMultiple = this.dragMultiple;\n\n\t\t\t\tif(gantt.isSummaryTask(ev) && config.drag_project && drag.mode == config.drag_mode.move){\n\t\t\t\t\tfor(var i in dragMultiple){\n\t\t\t\t\t\tthis._finalize_mouse_up(dragMultiple[i].id, config, dragMultiple[i], e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._finalize_mouse_up(drag.id, config, drag, e);\n\t\t\t}\n\t\t\tthis.clear_drag_state();\n\t\t},\n\t\t_get_drag_mode: function (className, el) {\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar modes = config.drag_mode;\n\t\t\tvar classes = (className || \"\").split(\" \");\n\t\t\tvar classname = classes[0];\n\t\t\tvar drag = {mode: null, left: null};\n\t\t\tswitch (classname) {\n\t\t\t\tcase \"gantt_task_line\":\n\t\t\t\tcase \"gantt_task_content\":\n\t\t\t\t\tdrag.mode = modes.move;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_task_drag\":\n\t\t\t\t\tdrag.mode = modes.resize;\n\n\t\t\t\t\tvar dragProperty = el.getAttribute(\"data-bind-property\");\n\n\t\t\t\t\tif (dragProperty == \"start_date\") {\n\t\t\t\t\t\tdrag.left = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdrag.left = false;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_task_progress_drag\":\n\t\t\t\t\tdrag.mode = modes.progress;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_link_control\":\n\t\t\t\tcase \"gantt_link_point\":\n\t\t\t\t\tdrag.mode = modes.ignore;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tdrag = null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn drag;\n\n\t\t},\n\n\t\t_start_dnd: function (e) {\n\t\t\tvar drag = this.drag = this.drag.start_drag;\n\t\t\tdelete drag.start_drag;\n\n\t\t\tvar cfg = timeline.$getConfig();\n\t\t\tvar id = drag.id;\n\t\t\tif (!cfg[\"drag_\" + drag.mode] || !gantt.callEvent(\"onBeforeDrag\", [id, drag.mode, e]) || !this._fireEvent(\"before_start\", drag.mode, [id, drag.mode, e])) {\n\t\t\t\tthis.clear_drag_state();\n\t\t\t} else {\n\t\t\t\tdelete drag.start_drag;\n\n\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\tif(gantt.isSummaryTask(task) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move){\n\t\t\t\t\tgantt.eachTask(function(child){\n\t\t\t\t\t\tthis.dragMultiple[child.id] = gantt.mixin({\n\t\t\t\t\t\t\tid: child.id,\n\t\t\t\t\t\t\tobj: gantt.copy(child)\n\t\t\t\t\t\t}, this.drag);\n\t\t\t\t\t}, task.id, this);\n\t\t\t\t}\n\n\t\t\t\tgantt.callEvent(\"onTaskDragStart\", []);\n\t\t\t}\n\n\t\t},\n\t\t_fireEvent: function (stage, mode, params) {\n\t\t\tgantt.assert(this._events[stage], \"Invalid stage:{\" + stage + \"}\");\n\n\t\t\tvar trigger = this._events[stage][mode];\n\n\t\t\tgantt.assert(trigger, \"Unknown after drop mode:{\" + mode + \"}\");\n\t\t\tgantt.assert(params, \"Invalid event arguments\");\n\n\n\t\t\tif (!gantt.checkEvent(trigger))\n\t\t\t\treturn true;\n\n\t\t\treturn gantt.callEvent(trigger, params);\n\t\t},\n\n\t\tround_task_dates: function(task){\n\t\t\tvar drag_state = this.drag;\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tif (!drag_state) {\n\t\t\t\tdrag_state = {mode: config.drag_mode.move};\n\t\t\t}\n\t\t\tthis._fix_dnd_scale_time(task, drag_state);\n\t\t},\n\t\tdestructor: function(){\n\t\t\tthis._domEvents.detachAll();\n\t\t}\n\t};\n}\n\nfunction initTaskDND() {\n\tvar _tasks_dnd;\n\treturn {\n\t\textend: function(timeline){\n\t\t\ttimeline.roundTaskDates = function (task) {\n\t\t\t\t_tasks_dnd.round_task_dates(task);\n\t\t\t};\n\n\t\t},\n\t\tinit: function(timeline, gantt){\n\t\t\t_tasks_dnd = createTaskDND(timeline, gantt);\n\t\t\t// TODO: entry point for touch handlers, move touch to timeline\n\t\t\ttimeline._tasks_dnd = _tasks_dnd;\n\t\t\treturn _tasks_dnd.init(gantt);\n\t\t},\n\t\tdestructor: function () {\n\t\t\tif (_tasks_dnd) {\n\t\t\t\t_tasks_dnd.destructor();\n\t\t\t\t_tasks_dnd = null;\n\t\t\t}\n\t\t}\n\t};\n}\n\nmodule.exports = {\n\tcreateTaskDND: initTaskDND\n};\n","var utils = require(\"../../../utils/utils\"),\n\ttaskDnD = require(\"./tasks_dnd\"),\n\tlinkDnD = require(\"./links_dnd\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\");\n\nvar initializer = (function(){\n\treturn function(gantt){\n\t\tvar services = gantt.$services;\n\t\treturn {\n\t\t\tonCreated: function (timeline) {\n\t\t\t\tvar config = timeline.$config;\n\t\t\t\tconfig.bind = utils.defined(config.bind) ? config.bind : \"task\";\n\t\t\t\tconfig.bindLinks = utils.defined(config.bindLinks) ? config.bindLinks : \"link\";\n\n\t\t\t\ttimeline._linksDnD = linkDnD.createLinkDND();\n\t\t\t\ttimeline._tasksDnD = taskDnD.createTaskDND();\n\t\t\t\ttimeline._tasksDnD.extend(timeline);\n\n\t\t\t\tthis._mouseDelegates = require(\"../mouse_event_container\")(gantt);\n\t\t\t},\n\t\t\tonInitialized: function (timeline) {\n\t\t\t\tthis._attachDomEvents(gantt);\n\n\t\t\t\tthis._attachStateProvider(gantt, timeline);\n\n\t\t\t\ttimeline._tasksDnD.init(timeline, gantt);\n\t\t\t\ttimeline._linksDnD.init(timeline, gantt);\n\n\t\t\t\tif(timeline.$config.id == \"timeline\"){\n\t\t\t\t\tthis.extendDom(timeline);\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tonDestroyed: function (timeline) {\n\t\t\t\tthis._clearDomEvents(gantt);\n\t\t\t\tthis._clearStateProvider(gantt);\n\t\t\t\tif (timeline._tasksDnD) {\n\t\t\t\t\ttimeline._tasksDnD.destructor();\n\t\t\t\t}\n\t\t\t},\n\t\t\textendDom: function(timeline){\n\t\t\t\tgantt.$task = timeline.$task;\n\t\t\t\tgantt.$task_scale = timeline.$task_scale;\n\t\t\t\tgantt.$task_data = timeline.$task_data;\n\t\t\t\tgantt.$task_bg = timeline.$task_bg;\n\t\t\t\tgantt.$task_links = timeline.$task_links;\n\t\t\t\tgantt.$task_bars = timeline.$task_bars;\n\t\t\t},\n\n\t\t\t_clearDomEvents: function(){\n\t\t\t\tthis._mouseDelegates.destructor();\n\t\t\t\tthis._mouseDelegates = null;\n\t\t\t},\n\n\t\t\t_attachDomEvents: function(gantt){\n\t\t\t\tfunction _delete_link_handler(id, e) {\n\t\t\t\t\tif (id && this.callEvent(\"onLinkDblClick\", [id, e])) {\n\n\t\t\t\t\t\tvar link = this.getLink(id);\n\t\t\t\t\t\tif (this.isReadonly(link)) return;\n\n\t\t\t\t\t\tvar title = \"\";\n\t\t\t\t\t\tvar question = this.locale.labels.link + \" \" + this.templates.link_description(this.getLink(id)) + \" \" + this.locale.labels.confirm_link_deleting;\n\n\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\tgantt._dhtmlx_confirm(question, title, function () {\n\t\t\t\t\t\t\t\tgantt.deleteLink(id);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, (this.config.touch ? 300 : 1));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_task_link\", gantt.bind(function (e, trg) {\n\t\t\t\t\tvar id = this.locate(e, this.config.link_attribute);\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tthis.callEvent(\"onLinkClick\", [id, e]);\n\t\t\t\t\t}\n\t\t\t\t}, gantt), this.$task);\n\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_scale_cell\", gantt.bind(function (e, trg) {\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n\t\t\t\t\tvar date = gantt.dateFromPos(pos.x);\n\t\t\t\t\tvar coll = Math.floor(gantt.columnIndexByDate(date));\n\n\t\t\t\t\tvar coll_date = gantt.getScale().trace_x[coll];\n\n\t\t\t\t\tgantt.callEvent(\"onScaleClick\", [e, coll_date]);\n\t\t\t\t}, gantt), this.$task);\n\n\t\t\t\tthis._mouseDelegates.delegate(\"doubleclick\", \"gantt_task_link\", gantt.bind(function (e, id, trg) {\n\t\t\t\t\tvar id = this.locate(e, gantt.config.link_attribute);\n\t\t\t\t\t_delete_link_handler.call(this, id, e);\n\t\t\t\t}, gantt), this.$task);\n\n\t\t\t\tthis._mouseDelegates.delegate(\"doubleclick\", \"gantt_link_point\", gantt.bind(function (e, id, trg) {\n\t\t\t\t\tvar id = this.locate(e),\n\t\t\t\t\t\ttask = this.getTask(id);\n\n\t\t\t\t\tvar link = null;\n\t\t\t\t\tif (trg.parentNode && domHelpers.getClassName(trg.parentNode)) {\n\t\t\t\t\t\tif (domHelpers.getClassName(trg.parentNode).indexOf(\"_left\") > -1) {\n\t\t\t\t\t\t\tlink = task.$target[0];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlink = task.$source[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (link)\n\t\t\t\t\t\t_delete_link_handler.call(this, link, e);\n\t\t\t\t\treturn false;\n\t\t\t\t}, gantt), this.$task);\n\t\t\t},\n\n\t\t\t_attachStateProvider: function(gantt, timeline){\n\t\t\t\tvar self = timeline;\n\t\t\t\tvar state = services.getService(\"state\");\n\t\t\t\tstate.registerProvider(\"tasksTimeline\", function(){\n\t\t\t\t\treturn {\n\t\t\t\t\t\tscale_unit: self._tasks ? self._tasks.unit : undefined,\n\t\t\t\t\t\tscale_step: self._tasks ? self._tasks.step : undefined\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t_clearStateProvider: function(){\n\t\t\t\tvar state = services.getService(\"state\");\n\t\t\t\tstate.unregisterProvider(\"tasksTimeline\");\n\t\t\t}\n\t\t};\n\t};\n\n})();\n\nmodule.exports = initializer;","var domHelpers = require(\"../../../../utils/dom_helpers\");\n\n/**\n * methods for highlighting current drag and drop position\n */\n\nfunction highlightPosition(target, root, grid){\n\tvar markerPos = getTaskMarkerPosition(target, grid);\n\t// setting position of row\n\troot.marker.style.left = markerPos.x + 9 + \"px\";\n\troot.marker.style.top = markerPos.y + \"px\";\n\tvar markerLine = root.markerLine;\n\tif(!markerLine){\n\t\tmarkerLine = document.createElement(\"div\");\n\t\tmarkerLine.className = \"gantt_drag_marker gantt_grid_dnd_marker\";\n\t\tmarkerLine.innerHTML = \"
\";\n\t\tmarkerLine.style.pointerEvents = \"none\";\n\t\tdocument.body.appendChild(markerLine);\n\t\troot.markerLine = markerLine;\n\t}\n\tif(target.child){\n\t\thighlightFolder(target, markerLine, grid);\n\t}else{\n\t\thighlightRow(target, markerLine, grid);\n\t}\n}\n\nfunction removeLineHighlight(root){\n\tif(root.markerLine && root.markerLine.parentNode){\n\t\troot.markerLine.parentNode.removeChild(root.markerLine);\n\t}\n\troot.markerLine = null;\n}\n\nfunction highlightRow(target, markerLine, grid){\n\tvar linePos = getLineMarkerPosition(target, grid);\n\n\tmarkerLine.innerHTML = \"
\";\n\tmarkerLine.style.left = linePos.x + \"px\";\n\tmarkerLine.style.height = \"4px\";\n\n\tmarkerLine.style.top = (linePos.y - 2) + \"px\";\n\tmarkerLine.style.width = linePos.width + \"px\";\n\n\treturn markerLine;\n}\nfunction highlightFolder(target, markerFolder, grid){\n\tvar id = target.targetParent;\n\tvar pos = gridToPageCoordinates({x: 0, y: grid.getItemTop(id)}, grid);\n\n\tmarkerFolder.innerHTML = \"
\";\n\tmarkerFolder.style.width = grid.$grid_data.offsetWidth + \"px\";\n\tmarkerFolder.style.top = pos.y + \"px\";\n\tmarkerFolder.style.left = pos.x + \"px\";\n\tmarkerFolder.style.height = grid.getItemHeight(id) + \"px\";\n\treturn markerFolder;\n}\n\nfunction getLineMarkerPosition(target, grid){\n\tvar store = grid.$config.rowStore;\n\tvar pos = {x:0, y:0};\n\tvar indentNode = grid.$grid_data.querySelector(\".gantt_tree_indent\");\n\tvar indent = 15;\n\tvar level = 0;\n\tif(indentNode){\n\t\tindent = indentNode.offsetWidth;\n\t}\n\tvar iconWidth = 40;\n\tif(target.targetId !== store.$getRootId()){\n\t\tvar itemTop = grid.getItemTop(target.targetId);\n\t\tvar itemHeight = grid.getItemHeight(target.targetId);\n\t\tlevel = store.exists(target.targetId) ? store.calculateItemLevel(store.getItem(target.targetId)) : 0;\n\n\t\tif(target.prevSibling){\n\t\t\tpos.y = itemTop;\n\t\t}else if(target.nextSibling){\n\t\t\tvar childCount = 0;\n\t\t\tstore.eachItem(function(child){\n\t\t\t\tif(store.getIndexById(child.id) !== -1)\n\t\t\t\t\tchildCount++;\n\t\t\t}, target.targetId);\n\n\t\t\tpos.y = itemTop + itemHeight + childCount*itemHeight;\n\t\t}else {\n\t\t\tpos.y = itemTop + itemHeight;\n\t\t\tlevel += 1;\n\t\t}\n\t}\n\tpos.x = iconWidth + level * indent;\n\tpos.width = Math.max(grid.$grid_data.offsetWidth - pos.x, 0);\n\treturn gridToPageCoordinates(pos, grid);\n}\n\nfunction gridToPageCoordinates(pos, grid){\n\tvar gridPos = domHelpers.getNodePosition(grid.$grid_data);\n\tpos.x += gridPos.x - grid.$grid.scrollLeft;\n\tpos.y += gridPos.y - grid.$grid_data.scrollTop;\n\treturn pos;\n}\n\nfunction getTaskMarkerPosition(e, grid) {\n\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\n\tvar ePos = domHelpers.getRelativeEventPosition(e, grid.$grid_data);\n\tvar store = grid.$config.rowStore;\n\t// row offset\n\tvar x = pos.x;\n\tvar y = ePos.y - 10;\n\n\tvar config = grid.$getConfig();\n\t// prevent moving row out of grid_data container\n\tif (y < pos.y) y = pos.y;\n\tvar gridHeight = store.countVisible() * config.row_height;\n\tif (y > pos.y + gridHeight - config.row_height) y = pos.y + gridHeight - config.row_height;\n\n\tpos.x = x;\n\tpos.y = y;\n\treturn pos;\n}\n\nmodule.exports = {\n\tremoveLineHighlight: removeLineHighlight,\n\thighlightPosition: highlightPosition\n};\n","/**\n * resolve dnd position of the task when gantt.config.order_branch_free = true\n */\n\nvar dropTarget = require(\"./drop_target\");\n\nmodule.exports = function getMultiLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store){\n\tvar result;\n\n\tif(targetTaskId !== store.$getRootId()){\n\t\tif(relTargetPos < 0.25){\n\t\t\tresult = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\n\t\t}else if(relTargetPos > 0.60 && !(store.hasChild(targetTaskId) && store.getItem(targetTaskId).$open)){\n\t\t\tresult = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\n\t\t}else {\n\t\t\tresult = dropTarget.firstChildTarget(dndTaskId, targetTaskId, store);\n\t\t}\n\t}else{\n\t\tvar rootId = store.$getRootId();\n\t\tif(store.hasChild(rootId) && eventTop >= 0){\n\t\t\tresult = dropTarget.lastChildTarget(dndTaskId, rootId, store);\n\t\t}else{\n\t\t\tresult = dropTarget.firstChildTarget(dndTaskId, rootId, store);\n\t\t}\n\t}\n\n\treturn result;\n};","/**\n * resolve dnd position of the task when gantt.config.order_branch_free = false\n */\n\nvar dropTarget = require(\"./drop_target\");\n\nfunction getLast(store){\n\tvar current = store.getNext();\n\twhile(store.exists(current)){\n\n\t\tvar next = store.getNext(current);\n\t\tif(!store.exists(next)){\n\t\t\treturn current;\n\t\t}else{\n\t\t\tcurrent = next;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction findClosesTarget(dndTaskId, taskId, allowedLevel, store, up){\n\tvar prev = taskId;\n\twhile(store.exists(prev)){\n\t\tvar targetLevel = store.calculateItemLevel(store.getItem(prev));\n\t\tif((targetLevel === allowedLevel || targetLevel === (allowedLevel - 1)) && store.getBranchIndex(prev) > -1){\n\t\t\tbreak;\n\t\t}else {\n\t\t\tprev = up ? store.getPrev(prev) : store.getNext(prev);\n\t\t}\n\t}\n\n\tif(store.exists(prev)){\n\t\tif(store.calculateItemLevel(store.getItem(prev)) === allowedLevel){\n\t\t\treturn up ? dropTarget.nextSiblingTarget(dndTaskId, prev, store) : dropTarget.prevSiblingTarget(dndTaskId, prev, store);\n\t\t}else{\n\t\t\treturn dropTarget.firstChildTarget(dndTaskId, prev, store);\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction findTargetAbove(dndTaskId, taskId, allowedLevel, store){\n\treturn findClosesTarget(dndTaskId, taskId, allowedLevel, store, true);\n}\nfunction findTargetBelow(dndTaskId, taskId, allowedLevel, store){\n\treturn findClosesTarget(dndTaskId, taskId, allowedLevel, store, false);\n}\n\nmodule.exports = function getSameLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store, level){\n\tvar result;\n\tif(targetTaskId !== store.$getRootId()) {\n\t\tif (relTargetPos < 0.5) {\n\t\t\tif (store.calculateItemLevel(store.getItem(targetTaskId)) === level) {\n\t\t\t\tif(store.getPrevSibling(targetTaskId)){\n\t\t\t\t\tresult = dropTarget.nextSiblingTarget(dndTaskId, store.getPrevSibling(targetTaskId), store);\n\t\t\t\t}else{\n\t\t\t\t\tresult = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult = findTargetAbove(dndTaskId, targetTaskId, level, store);\n\t\t\t\tif (result) {\n\t\t\t\t\tresult = findTargetBelow(dndTaskId, targetTaskId, level, store);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (store.calculateItemLevel(store.getItem(targetTaskId)) === level) {\n\t\t\t\tresult = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\n\t\t\t} else {\n\t\t\t\tresult = findTargetBelow(dndTaskId, targetTaskId, level, store);\n\t\t\t\tif (result) {\n\t\t\t\t\tresult = findTargetAbove(dndTaskId, targetTaskId, level, store);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tvar rootId = store.$getRootId();\n\t\tvar rootLevel = store.getChildren(rootId);\n\t\tresult = dropTarget.createDropTargetObject();\n\t\tif(rootLevel.length && eventTop >= 0){\n\t\t\tresult = findTargetAbove(dndTaskId, getLast(store), level, store);\n\t\t}else{\n\t\t\tresult = findTargetBelow(dndTaskId, rootId, level, store);\n\t\t}\n\t}\n\n\treturn result;\n};\n","var domHelpers = require(\"../../../utils/dom_helpers\");\nvar dropTarget = require(\"./tasks_grid_dnd_marker_helpers/drop_target\");\nvar getLockedLevelTarget = require(\"./tasks_grid_dnd_marker_helpers/locked_level\");\nvar getMultiLevelTarget = require(\"./tasks_grid_dnd_marker_helpers/multi_level\");\nvar higlighter = require(\"./tasks_grid_dnd_marker_helpers/highlight\");\n\nfunction _init_dnd(gantt, grid) {\n\tvar DnD = gantt.$services.getService(\"dnd\");\n\n\tif(!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)){\n\t\treturn;\n\t}\n\n\tfunction locate(e){\n\t\treturn domHelpers.locateAttribute(e, grid.$config.item_attribute);\n\t}\n\n\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\n\tif (gantt.defined(grid.$getConfig().dnd_sensitivity))\n\t\tdnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\n\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\n\t\tvar el = locate(e);\n\t\tif (!el) return false;\n\t\tif (gantt.hideQuickInfo) gantt._hideQuickInfo();\n\t\tif (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")){\n\t\t\treturn false;\n\t\t}\n\n\t\tvar id = el.getAttribute(grid.$config.item_attribute);\n\t\tvar datastore = grid.$config.rowStore;\n\t\tvar task = datastore.getItem(id);\n\n\t\tif (gantt.isReadonly(task))\n\t\t\treturn false;\n\n\t\tdnd.config.initial_open_state = task.$open;\n\t\tif (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\n\t\t\treturn false;\n\t\t}\n\n\t}, gantt));\n\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\n\t\tvar el = locate(e);\n\n\t\tdnd.config.marker.innerHTML = el.outerHTML;\n\t\tvar element = dnd.config.marker.firstChild;\n\t\tif(element){\n\t\t\tdnd.config.marker.style.opacity = 0.4;\n\t\t\telement.style.position = \"static\";\n\t\t\telement.style.pointerEvents = \"none\";\n\t\t}\n\n\t\tdnd.config.id = el.getAttribute(grid.$config.item_attribute);\n\n\t\tvar store = grid.$config.rowStore;\n\n\t\tvar task = store.getItem(dnd.config.id);\n\t\tdnd.config.level = store.calculateItemLevel(task);\n\t\tdnd.config.drop_target = dropTarget.createDropTargetObject({\n\t\t\ttargetParent: store.getParent(task.id),\n\t\t\ttargetIndex: store.getBranchIndex(task.id),\n\t\t\ttargetId: task.id,\n\t\t\tnextSibling: true\n\t\t});\n\n\t\ttask.$open = false;\n\t\ttask.$transparent = true;\n\t\tthis.refreshData();\n\t}, gantt));\n\n\tfunction getTargetTaskId(e){\n\t\tvar y = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\n\t\tvar store = grid.$config.rowStore;\n\n\t\ty = y || 0;\n\n\t\tif(y < 0){\n\t\t\treturn store.$getRootId();\n\t\t}\n\n\t\tvar index = Math.floor(y / grid.getItemHeight());\n\n\t\tif (index > store.countVisible() - 1)\n\t\t\treturn store.$getRootId();\n\n\t\treturn store.getIdByIndex(index);\n\t}\n\n\tfunction getDropPosition(e){\n\t\tvar targetTaskId = getTargetTaskId(e);\n\t\tvar relTargetPos = null;\n\t\tvar store = grid.$config.rowStore;\n\t\tvar config = grid.$getConfig();\n\t\tvar lockLevel = !config.order_branch_free;\n\n\t\tvar eventTop = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\n\n\t\tif(targetTaskId !== store.$getRootId()) {\n\t\t\tvar rowTop = grid.getItemTop(targetTaskId);\n\t\t\tvar rowHeight = grid.getItemHeight();\n\t\t\trelTargetPos = (eventTop - rowTop) / rowHeight;\n\t\t}\n\n\t\tvar result;\n\t\tif(!lockLevel){\n\t\t\tresult = getMultiLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store);\n\t\t}else{\n\t\t\tresult = getLockedLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store, dnd.config.level);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\n\t\tvar target = getDropPosition(e);\n\n\t\tif(!target ||\n\t\t\tgantt.callEvent(\"onBeforeRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]) === false){\n\t\t\t\ttarget = dropTarget.createDropTargetObject(dnd.config.drop_target);\n\t\t\t}\n\n\t\thiglighter.highlightPosition(target, dnd.config, grid);\n\t\tdnd.config.drop_target = target;\n\n\t\tthis.callEvent(\"onRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]);\n\t\treturn true;\n\t}, gantt));\n\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\n\t\tvar store = grid.$config.rowStore;\n\t\tvar task = store.getItem(dnd.config.id);\n\n\t\thiglighter.removeLineHighlight(dnd.config);\n\n\t\ttask.$transparent = false;\n\t\ttask.$open = dnd.config.initial_open_state;\n\t\tvar target = dnd.config.drop_target;\n\n\t\tif (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]) === false) {\n\t\t\ttask.$drop_target = null;\n\t\t} else {\n\t\t\tstore.move(dnd.config.id, target.targetIndex, target.targetParent);\n\t\t\tthis.callEvent(\"onRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]);\n\t\t}\n\t\tstore.refresh(task.id);\n\t}, gantt));\n}\n\nmodule.exports = {\n\tinit: _init_dnd\n};","var domHelpers = require(\"../../../utils/dom_helpers\");\n\nfunction _init_dnd(gantt, grid) {\n\tvar DnD = gantt.$services.getService(\"dnd\");\n\n\tif(!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)){\n\t\treturn;\n\t}\n\n\tfunction locate(e){\n\t\treturn domHelpers.locateAttribute(e, grid.$config.item_attribute);\n\t}\n\n\tfunction getStore(){\n\t\treturn gantt.getDatastore(grid.$config.bind);\n\t}\n\n\tvar dnd = new DnD(grid.$grid_data, {updates_per_second: 60});\n\tif (gantt.defined(grid.$getConfig().dnd_sensitivity))\n\t\tdnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\n\n\tdnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\n\t\tvar el = locate(e);\n\t\tif (!el) return false;\n\t\tif (gantt.hideQuickInfo) gantt._hideQuickInfo();\n\n\t\tif (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")){\n\t\t\treturn false;\n\t\t}\n\n\t\tvar id = el.getAttribute(grid.$config.item_attribute);\n\n\t\tvar datastore = getStore();\n\n\t\tvar task = datastore.getItem(id);\n\n\t\tif (gantt.isReadonly(task))\n\t\t\treturn false;\n\n\t\tdnd.config.initial_open_state = task.$open;\n\t\tif (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\n\t\t\treturn false;\n\t\t}\n\n\t}, gantt));\n\n\tdnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\n\t\tvar el = locate(e);\n\t\tdnd.config.marker.innerHTML = el.outerHTML;\n\t\tvar element = dnd.config.marker.firstChild;\n\t\tif(element){\n\t\t\telement.style.position = \"static\";\n\t\t}\n\n\t\tdnd.config.id = el.getAttribute(grid.$config.item_attribute);\n\n\t\tvar store = getStore();\n\n\t\tvar task = store.getItem(dnd.config.id);\n\t\tdnd.config.index = store.getBranchIndex(dnd.config.id);\n\t\tdnd.config.parent = task.parent;\n\t\ttask.$open = false;\n\t\ttask.$transparent = true;\n\t\tthis.refreshData();\n\t}, gantt));\n\n\tdnd.lastTaskOfLevel = function (level) {\n\t\tvar last_item = null;\n\t\tvar store = getStore();\n\t\tvar tasks = store.getItems();\n\t\tfor (var i = 0, len = tasks.length; i < len; i++) {\n\t\t\tif (tasks[i].$level == level) {\n\t\t\t\tlast_item = tasks[i];\n\t\t\t}\n\t\t}\n\t\treturn last_item ? last_item.id : null;\n\t};\n\tdnd._getGridPos = gantt.bind(function (e) {\n\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\n\t\tvar store = getStore();\n\t\t// row offset\n\t\tvar x = pos.x;\n\t\tvar y = e.pos.y - 10;\n\n\t\tvar config = grid.$getConfig();\n\t\t// prevent moving row out of grid_data container\n\t\tif (y < pos.y) y = pos.y;\n\t\tvar gridHeight = store.countVisible() * config.row_height;\n\t\tif (y > pos.y + gridHeight - config.row_height) y = pos.y + gridHeight - config.row_height;\n\n\t\tpos.x = x;\n\t\tpos.y = y;\n\t\treturn pos;\n\t}, gantt);\n\tdnd._getTargetY = gantt.bind(function (e) {\n\t\tvar pos = domHelpers.getNodePosition(grid.$grid_data);\n\n\t\tvar y = e.pageY - pos.y + (grid.$state.scrollTop || 0);\n\t\tif (y < 0)\n\t\t\ty = 0;\n\t\treturn y;\n\t}, gantt);\n\tdnd._getTaskByY = gantt.bind(function (y, dropIndex) {\n\n\t\tvar config = grid.$getConfig(),\n\t\t\tstore = getStore();\n\n\t\ty = y || 0;\n\n\t\tvar index = Math.floor(y / config.row_height);\n\t\tindex = dropIndex < index ? index - 1 : index;\n\n\t\tif (index > store.countVisible() - 1)\n\t\t\treturn null;\n\n\t\treturn store.getIdByIndex(index);\n\t}, gantt);\n\tdnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\n\t\tvar dd = dnd.config;\n\t\tvar pos = dnd._getGridPos(e);\n\n\t\tvar config = grid.$getConfig(),\n\t\t\tstore = getStore();\n\n\t\t// setting position of row\n\t\tdd.marker.style.left = pos.x + 10 + \"px\";\n\t\tdd.marker.style.top = pos.y + \"px\";\n\n\t\t// highlight row when mouseover\n\t\tvar item = store.getItem(dnd.config.id);\n\t\tvar targetY = dnd._getTargetY(e);\n\t\tvar el = dnd._getTaskByY(targetY, store.getIndexById(item.id));\n\n\t\tif (!store.exists(el)) {\n\t\t\tel = dnd.lastTaskOfLevel(config.order_branch_free ? item.$level : 0);\n\t\t\tif (el == dnd.config.id) {\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\tfunction allowedLevel(next, item) {\n\t\t\treturn (!(store.isChildOf(over.id, item.id)) && (next.$level == item.$level || config.order_branch_free));\n\t\t}\n\n\t\tif (store.exists(el)) {\n\t\t\tvar over = store.getItem(el);\n\n\t\t\tif (store.getIndexById(over.id) * config.row_height + config.row_height / 2 < targetY) {\n\t\t\t\t//hovering over bottom part of item, check can be drop to bottom\n\t\t\t\tvar index = store.getIndexById(over.id);\n\t\t\t\tvar nextId = store.getNext(over.id);//adds +1 when hovering over placeholder\n\t\t\t\tvar next = store.getItem(nextId);\n\t\t\t\tif (next) {\n\t\t\t\t\tif (next.id != item.id) {\n\t\t\t\t\t\tover = next; //there is a valid target\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (config.order_branch_free) {\n\t\t\t\t\t\t\tif (!(store.isChildOf(item.id, over.id) && store.getChildren(over.id).length == 1))\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tstore.move(item.id, store.getBranchIndex(over.id) + 1, store.getParent(over.id));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//we at end of the list, check and drop at the end of list\n\t\t\t\t\tnextId = store.getIdByIndex(index);\n\t\t\t\t\tnext = store.getItem(nextId);\n\n\t\t\t\t\tif (allowedLevel(next, item) && next.id != item.id) {\n\t\t\t\t\t\tstore.move(item.id, -1, store.getParent(next.id));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (config.order_branch_free) {\n\t\t\t\tif (over.id != item.id && allowedLevel(over, item)) {\n\t\t\t\t\tif (!store.hasChild(over.id)) {\n\t\t\t\t\t\tover.$open = true;\n\t\t\t\t\t\tstore.move(item.id, -1, over.id);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (store.getIndexById(over.id) || config.row_height / 3 < targetY) return;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//if item is on different level, check the one before it\n\t\t\tvar index = store.getIndexById(over.id),\n\t\t\t\tprevId = store.getIdByIndex(index - 1);\n\n\t\t\tvar prev = store.getItem(prevId);\n\n\t\t\tvar shift = 1;\n\t\t\twhile ((!prev || prev.id == over.id) && index - shift >= 0) {\n\n\t\t\t\tprevId = store.getIdByIndex(index - shift);\n\t\t\t\tprev = store.getItem(prevId);\n\t\t\t\tshift++;\n\t\t\t}\n\n\t\t\tif (item.id == over.id) return;\n\t\t\t//replacing item under cursor\n\t\t\tif (allowedLevel(over, item) && item.id != over.id) {\n\t\t\t\tstore.move(item.id, 0, 0, over.id);\n\n\t\t\t} else if (over.$level == item.$level - 1 && !store.getChildren(over.id).length) {\n\t\t\t\tstore.move(item.id, 0, over.id);\n\n\t\t\t} else if (prev && (allowedLevel(prev, item)) && (item.id != prev.id)) {\n\t\t\t\tstore.move(item.id, -1, store.getParent(prev.id));\n\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}, gantt));\n\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\n\t\tvar store = getStore();\n\t\tvar task = store.getItem(dnd.config.id);\n\t\ttask.$transparent = false;\n\t\ttask.$open = dnd.config.initial_open_state;\n\n\t\tif (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, dnd.config.parent, dnd.config.index]) === false) {\n\t\t\tstore.move(dnd.config.id, dnd.config.index, dnd.config.parent);\n\t\t\ttask.$drop_target = null;\n\t\t} else {\n\t\t\tthis.callEvent(\"onRowDragEnd\", [dnd.config.id, task.$drop_target]);\n\t\t}\n\n\t\tthis.refreshData();\n\t}, gantt));\n}\n\nmodule.exports = {\n\tinit: _init_dnd\n};","var utils = require(\"../../../utils/utils\");\nvar rowDnd = require(\"./tasks_grid_dnd\");\nvar rowDndMarker = require(\"./tasks_grid_dnd_marker\");\n\nvar initializer = (function(){\n\treturn function(gantt){\n\t\treturn {\n\t\t\tonCreated: function (grid) {\n\t\t\t\tgrid.$config = utils.mixin(grid.$config, {\n\t\t\t\t\tbind: \"task\"\n\t\t\t\t});\n\t\t\t\tif(grid.$config.id == \"grid\") {\n\t\t\t\t\tthis.extendGantt(grid);\n\t\t\t\t\tgantt.ext.inlineEditors = gantt.ext._inlineEditors.createEditors(grid);\n\t\t\t\t\tgantt.ext.inlineEditors.init();\n\t\t\t\t}\n\n\t\t\t\tthis._mouseDelegates = require(\"../mouse_event_container\")(gantt);\n\t\t\t},\n\t\t\tonInitialized: function (grid) {\n\t\t\t\tvar config = grid.$getConfig();\n\t\t\t\tif (config.order_branch) {\n\t\t\t\t\tif(config.order_branch == \"marker\"){\n\t\t\t\t\t\trowDndMarker.init(grid.$gantt, grid);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trowDnd.init(grid.$gantt, grid);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.initEvents(grid, gantt);\n\t\t\t\tif(grid.$config.id == \"grid\") {\n\t\t\t\t\tthis.extendDom(grid);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonDestroyed: function (grid) {\n\t\t\t\tif(grid.$config.id == \"grid\") {\n\t\t\t\t\tgantt.ext.inlineEditors.destructor();\n\t\t\t\t}\n\t\t\t\tthis.clearEvents(grid, gantt);\n\t\t\t},\n\n\t\t\tinitEvents: function (grid, gantt) {\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_row\", gantt.bind(function (e, id, trg) {\n\t\t\t\t\tvar config = grid.$getConfig();\n\t\t\t\t\tif (id !== null) {\n\t\t\t\t\t\tvar task = this.getTask(id);\n\t\t\t\t\t\tif (config.scroll_on_click && !gantt._is_icon_open_click(e))\n\t\t\t\t\t\t\tthis.showDate(task.start_date);\n\t\t\t\t\t\tgantt.callEvent(\"onTaskRowClick\", [id, trg]);\n\t\t\t\t\t}\n\t\t\t\t}, gantt), grid.$grid);\n\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_grid_head_cell\", gantt.bind(function (e, id, trg) {\n\t\t\t\t\tvar column = trg.getAttribute(\"data-column-id\");\n\n\t\t\t\t\tif (!gantt.callEvent(\"onGridHeaderClick\", [column, e]))\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar config = grid.$getConfig();\n\n\t\t\t\t\tif (column == \"add\") {\n\t\t\t\t\t\tvar mouseEvents = gantt.$services.getService(\"mouseEvents\");\n\t\t\t\t\t\tmouseEvents.callHandler(\"click\", \"gantt_add\", grid.$grid, [e, config.root_id]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (config.sort) {\n\t\t\t\t\t\tvar sorting_method = column,\n\t\t\t\t\t\t\tconf;\n\n\t\t\t\t\t\tfor (var i = 0; i < config.columns.length; i++) {\n\t\t\t\t\t\t\tif (config.columns[i].name == column) {\n\t\t\t\t\t\t\t\tconf = config.columns[i];\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\tif (conf && conf.sort !== undefined && conf.sort !== true) {\n\t\t\t\t\t\t\tsorting_method = conf.sort;\n\n\t\t\t\t\t\t\tif (!sorting_method) { // column sort property 'false', no sorting\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar sort = (this._sort && this._sort.direction && this._sort.name == column) ? this._sort.direction : \"desc\";\n\t\t\t\t\t\t// invert sort direction\n\t\t\t\t\t\tsort = (sort == \"desc\") ? \"asc\" : \"desc\";\n\t\t\t\t\t\tthis._sort = {\n\t\t\t\t\t\t\tname: column,\n\t\t\t\t\t\t\tdirection: sort\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.sort(sorting_method, sort == \"desc\");\n\t\t\t\t\t}\n\t\t\t\t}, gantt), grid.$grid);\n\n\t\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_add\", gantt.bind(function (e, id, trg) {\n\t\t\t\t\tvar config = grid.$getConfig();\n\t\t\t\t\tif (config.readonly) return;\n\n\t\t\t\t\tvar item = {};\n\t\t\t\t\tthis.createTask(item, id ? id : gantt.config.root_id);\n\n\t\t\t\t\treturn false;\n\t\t\t\t}, gantt), grid.$grid);\n\n\t\t\t},\n\n\t\t\tclearEvents: function(grid, gantt){\n\t\t\t\tthis._mouseDelegates.destructor();\n\t\t\t\tthis._mouseDelegates = null;\n\t\t\t},\n\n\t\t\textendDom: function(grid){\n\t\t\t\tgantt.$grid = grid.$grid;\n\t\t\t\tgantt.$grid_scale = grid.$grid_scale;\n\t\t\t\tgantt.$grid_data = grid.$grid_data;\n\t\t\t},\n\t\t\textendGantt: function(grid){\n\t\t\t\tgantt.getGridColumns = gantt.bind(grid.getGridColumns, grid);\n\n\t\t\t\tgrid.attachEvent(\"onColumnResizeStart\", function(){\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResizeStart\", arguments);\n\t\t\t\t});\n\t\t\t\tgrid.attachEvent(\"onColumnResize\", function(){\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResize\", arguments);\n\t\t\t\t});\n\t\t\t\tgrid.attachEvent(\"onColumnResizeEnd\", function(){\n\t\t\t\t\treturn gantt.callEvent(\"onColumnResizeEnd\", arguments);\n\t\t\t\t});\n\n\t\t\t\tgrid.attachEvent(\"onColumnResizeComplete\", function(columns, totalWidth){\n\t\t\t\t\tgantt.config.grid_width = totalWidth;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t};\n})();\n\nmodule.exports = initializer;","var helpers = require(\"../../../utils/helpers\");\nvar getRowRectangle = require(\"./viewport/get_grid_row_rectangle\");\n\nfunction createGridLineRender(gantt){\n\n\tfunction _render_grid_item(item, view, viewport) {\n\t\tvar columns = view.getGridColumns();\n\t\tvar config = view.$getConfig(),\n\t\t\ttemplates = view.$getTemplates();\n\n\t\tvar store = view.$config.rowStore;\n\n\t\tif(config.rtl){\n\t\t\tcolumns = columns.reverse();\n\t\t}\n\n\t\tvar cells = [];\n\t\tvar has_child;\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar last = i == columns.length - 1;\n\t\t\tvar col = columns[i];\n\t\t\tvar cell;\n\n\t\t\tvar value;\n\t\t\tvar textValue;\n\t\t\tif (col.name == \"add\") {\n\t\t\t\tvar aria = gantt._waiAria.gridAddButtonAttrString(col);\n\n\t\t\t\tvalue = \"
\";\n\t\t\t\ttextValue = \"\";\n\t\t\t} else {\n\t\t\t\tif (col.template)\n\t\t\t\t\tvalue = col.template(item);\n\t\t\t\telse\n\t\t\t\t\tvalue = item[col.name];\n\n\t\t\t\tif (helpers.isDate(value))\n\t\t\t\t\tvalue = templates.date_grid(value, item);\n\n\t\t\t\tif (value === null || value === undefined) {\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t}\n\n\t\t\t\ttextValue = value;\n\t\t\t\tvalue = \"
\" + value + \"
\";\n\t\t\t}\n\t\t\tvar css = \"gantt_cell\" + (last ? \" gantt_last_cell\" : \"\");\n\n\t\t\tvar tree = [];\n\t\t\tif (col.tree) {\n\t\t\t\tfor (var j = 0; j < item.$level; j++)\n\t\t\t\t\ttree.push(templates.grid_indent(item));\n\n\t\t\t\thas_child = store.hasChild(item.id) && !(gantt.isSplitTask(item) && !gantt.config.open_split_tasks);\n\t\t\t\tif (has_child) {\n\t\t\t\t\ttree.push(templates.grid_open(item));\n\t\t\t\t\ttree.push(templates.grid_folder(item));\n\t\t\t\t} else {\n\t\t\t\t\ttree.push(templates.grid_blank(item));\n\t\t\t\t\ttree.push(templates.grid_file(item));\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar style = \"width:\" + (col.width - (last ? 1 : 0)) + \"px;\";\n\t\t\tif (this.defined(col.align))\n\t\t\t\tstyle += \"text-align:\" + col.align + \";\";\n\n\t\t\tvar aria = gantt._waiAria.gridCellAttrString(col, textValue);\n\n\t\t\ttree.push(value);\n\t\t\tif(config.rtl){\n\t\t\t\ttree = tree.reverse();\n\t\t\t}\n\t\t\tcell = \"
\" + tree.join(\"\") + \"
\";\n\t\t\tcells.push(cell);\n\t\t}\n\t\tvar css = gantt.getGlobalTaskIndex(item.id) % 2 === 0 ? \"\" : \" odd\";\n\t\tcss += (item.$transparent) ? \" gantt_transparent\" : \"\";\n\n\t\tcss += (item.$dataprocessor_class ? \" \" + item.$dataprocessor_class : \"\");\n\n\t\tif (templates.grid_row_class) {\n\t\t\tvar css_template = templates.grid_row_class.call(gantt, item.start_date, item.end_date, item);\n\t\t\tif (css_template)\n\t\t\t\tcss += \" \" + css_template;\n\t\t}\n\n\t\tif(store.isSelected(item.id)) {\n\t\t\tcss += \" gantt_selected\";\n\t\t}\n\n\t\tvar el = document.createElement(\"div\");\n\t\tel.className = \"gantt_row\" + css + \" gantt_row_\" + gantt.getTaskType(item.type);\n\t\tvar height = view.getItemHeight();\n\t\tel.style.height = height + \"px\";\n\t\tel.style.lineHeight = height + \"px\";\n\n\t\tif(config.smart_rendering){\n\t\t\tel.style.position = \"absolute\";\n\t\t\tel.style.left = \"0px\";\n\t\t\tel.style.top = view.getItemTop(item.id) + \"px\";\n\t\t}\n\n\t\tif(view.$config.item_attribute){\n\t\t\tel.setAttribute(view.$config.item_attribute, item.id);\n\t\t}\n\n\t\tgantt._waiAria.taskRowAttr(item, el);\n\n\t\tel.innerHTML = cells.join(\"\");\n\t\treturn el;\n\t}\n\n\treturn {\n\t\trender: _render_grid_item,\n\t\tupdate: null,\n\t\tgetRectangle: getRowRectangle\n\t};\n}\n\nmodule.exports = createGridLineRender;","\n\nvar barRectangle = require(\"./get_bar_rectangle\");\n\nmodule.exports = function getLinkBox(item, view, gantt){\n\tif(!gantt.isTaskExists(item.source)){\n\t\treturn null;\n\t}\n\n\tif(!gantt.isTaskExists(item.target)){\n\t\treturn null;\n\t}\n\tvar sourceBox = barRectangle(gantt.getTask(item.source), view, gantt);\n\tvar targetBox = barRectangle(gantt.getTask(item.target), view, gantt);\n\n\tif(!sourceBox || !targetBox){\n\t\treturn null;\n\t}\n\n\tvar padding = 100;\n\tvar left = Math.min(sourceBox.left, targetBox.left) - padding;\n\tvar right = Math.max(sourceBox.left + sourceBox.width, targetBox.left + targetBox.width) + padding;\n\tvar top = Math.min(sourceBox.top, targetBox.top) - padding;\n\tvar bottom = Math.min(sourceBox.top + sourceBox.height, targetBox.top + targetBox.height) + padding;\n\n\treturn {\n\t\ttop: top,\n\t\theight: bottom - top,\n\t\tleft: left,\n\t\twidth: right - left\n\t};\n};\n","var getLinkRectangle = require(\"./viewport/get_link_rectangle\");\n\nfunction createLinkRender(gantt){\n\nfunction _render_link_element(link, view) {\n\tvar config = view.$getConfig();\n\n\tvar pt = path_builder.get_endpoint(link, view);\n\tvar dy = pt.e_y - pt.y;\n\tvar dx = pt.e_x - pt.x;\n\tif(!dx && !dy){\n\t\treturn null;\n\t}\n\n\n\tvar dots = path_builder.get_points(link, view);\n\tvar lines = drawer.get_lines(dots, view);\n\n\tvar div = document.createElement(\"div\");\n\n\tvar css = \"gantt_task_link\";\n\n\tif (link.color) {\n\t\tcss += \" gantt_link_inline_color\";\n\t}\n\tvar cssTemplate = gantt.templates.link_class ? gantt.templates.link_class(link) : \"\";\n\tif (cssTemplate) {\n\t\tcss += \" \" + cssTemplate;\n\t}\n\n\tif (config.highlight_critical_path && gantt.isCriticalLink) {\n\t\tif (gantt.isCriticalLink(link))\n\t\t\tcss += \" gantt_critical_link\";\n\t}\n\n\tdiv.className = css;\n\n\tif(view.$config.link_attribute){\n\t\tdiv.setAttribute(view.$config.link_attribute, link.id);\n\t}\n\n\tfor (var i = 0; i < lines.length; i++) {\n\t\tif (i == lines.length - 1) {\n\t\t\tlines[i].size -= config.link_arrow_size;\n\t\t}\n\t\tvar el = drawer.render_line(lines[i], lines[i + 1], view);\n\t\tif (link.color) {\n\t\t\tel.firstChild.style.backgroundColor = link.color;\n\t\t}\n\t\tdiv.appendChild(el);\n\t}\n\n\tvar direction = lines[lines.length - 1].direction;\n\tvar endpoint = _render_link_arrow(dots[dots.length - 1], direction, view);\n\tif (link.color) {\n\t\tendpoint.style.borderColor = link.color;\n\t}\n\tdiv.appendChild(endpoint);\n\n\tgantt._waiAria.linkAttr(link, div);\n\n\treturn div;\n}\n\nfunction _render_link_arrow(point, direction, view) {\n\tvar config = view.$getConfig();\n\tvar div = document.createElement(\"div\");\n\tvar top = point.y;\n\tvar left = point.x;\n\n\tvar size = config.link_arrow_size;\n\tvar line_width = config.row_height;\n\tvar className = \"gantt_link_arrow gantt_link_arrow_\" + direction;\n\tswitch (direction) {\n\t\tcase drawer.dirs.right:\n\t\t\ttop -= (size - line_width) / 2;\n\t\t\tleft -= size;\n\t\t\tbreak;\n\t\tcase drawer.dirs.left:\n\t\t\ttop -= (size - line_width) / 2;\n\t\t\tbreak;\n\t\tcase drawer.dirs.up:\n\t\t\tleft -= size;\n\t\t\tbreak;\n\t\tcase drawer.dirs.down:\n\t\t\ttop += size * 2;\n\t\t\tleft -= size;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tdiv.style.cssText = [\n\t\t\"top:\" + top + \"px\",\n\t\t\"left:\" + left + 'px'].join(';');\n\tdiv.className = className;\n\n\treturn div;\n}\n\n\nvar drawer = {\n\tcurrent_pos: null,\n\tdirs: {\"left\": 'left', \"right\": 'right', \"up\": 'up', \"down\": 'down'},\n\tpath: [],\n\tclear: function () {\n\t\tthis.current_pos = null;\n\t\tthis.path = [];\n\t},\n\tpoint: function (pos) {\n\t\tthis.current_pos = gantt.copy(pos);\n\t},\n\tget_lines: function (dots) {\n\t\tthis.clear();\n\t\tthis.point(dots[0]);\n\t\tfor (var i = 1; i < dots.length; i++) {\n\t\t\tthis.line_to(dots[i]);\n\t\t}\n\t\treturn this.get_path();\n\t},\n\tline_to: function (pos) {\n\t\tvar next = gantt.copy(pos);\n\t\tvar prev = this.current_pos;\n\n\t\tvar line = this._get_line(prev, next);\n\t\tthis.path.push(line);\n\t\tthis.current_pos = next;\n\t},\n\tget_path: function () {\n\t\treturn this.path;\n\t},\n\tget_wrapper_sizes: function (v, view) {\n\t\tvar config = view.$getConfig();\n\t\tvar res,\n\t\t\twrapper_size = config.link_wrapper_width,\n\t\t\ty = v.y + (config.row_height - wrapper_size) / 2;\n\t\tswitch (v.direction) {\n\t\t\tcase this.dirs.left:\n\t\t\t\tres = {\n\t\t\t\t\ttop: y,\n\t\t\t\t\theight: wrapper_size,\n\t\t\t\t\tlineHeight: wrapper_size,\n\t\t\t\t\tleft: v.x - v.size - wrapper_size / 2,\n\t\t\t\t\twidth: v.size + wrapper_size\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase this.dirs.right:\n\t\t\t\tres = {\n\t\t\t\t\ttop: y,\n\t\t\t\t\tlineHeight: wrapper_size,\n\t\t\t\t\theight: wrapper_size,\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\n\t\t\t\t\twidth: v.size + wrapper_size\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase this.dirs.up:\n\t\t\t\tres = {\n\t\t\t\t\ttop: y - v.size,\n\t\t\t\t\tlineHeight: v.size + wrapper_size,\n\t\t\t\t\theight: v.size + wrapper_size,\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\n\t\t\t\t\twidth: wrapper_size\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase this.dirs.down:\n\t\t\t\tres = {\n\t\t\t\t\ttop: y /*- wrapper_size/2*/,\n\t\t\t\t\tlineHeight: v.size + wrapper_size,\n\t\t\t\t\theight: v.size + wrapper_size,\n\t\t\t\t\tleft: v.x - wrapper_size / 2,\n\t\t\t\t\twidth: wrapper_size\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn res;\n\t},\n\tget_line_sizes: function (v, view) {\n\t\tvar config = view.$getConfig();\n\t\tvar res,\n\t\t\tline_size = config.link_line_width,\n\t\t\twrapper_size = config.link_wrapper_width,\n\t\t\tsize = v.size + line_size;\n\t\tswitch (v.direction) {\n\t\t\tcase this.dirs.left:\n\t\t\tcase this.dirs.right:\n\t\t\t\tres = {\n\t\t\t\t\theight: line_size,\n\t\t\t\t\twidth: size,\n\t\t\t\t\tmarginTop: (wrapper_size - line_size) / 2,\n\t\t\t\t\tmarginLeft: (wrapper_size - line_size) / 2\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase this.dirs.up:\n\t\t\tcase this.dirs.down:\n\t\t\t\tres = {\n\t\t\t\t\theight: size,\n\t\t\t\t\twidth: line_size,\n\t\t\t\t\tmarginTop: (wrapper_size - line_size) / 2,\n\t\t\t\t\tmarginLeft: (wrapper_size - line_size) / 2\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\n\t\treturn res;\n\t},\n\trender_line: function (v, end, view) {\n\t\tvar pos = this.get_wrapper_sizes(v, view);\n\t\tvar wrapper = document.createElement(\"div\");\n\t\twrapper.style.cssText = [\n\t\t\t\"top:\" + pos.top + \"px\",\n\t\t\t\"left:\" + pos.left + \"px\",\n\t\t\t\"height:\" + pos.height + \"px\",\n\t\t\t\"width:\" + pos.width + \"px\"\n\t\t].join(';');\n\t\twrapper.className = \"gantt_line_wrapper\";\n\n\t\tvar innerPos = this.get_line_sizes(v, view);\n\t\tvar inner = document.createElement(\"div\");\n\t\tinner.style.cssText = [\n\t\t\t\"height:\" + innerPos.height + \"px\",\n\t\t\t\"width:\" + innerPos.width + \"px\",\n\t\t\t\"margin-top:\" + innerPos.marginTop + \"px\",\n\t\t\t\"margin-left:\" + innerPos.marginLeft + \"px\"\n\t\t].join(\";\");\n\n\t\tinner.className = \"gantt_link_line_\" + v.direction;\n\t\twrapper.appendChild(inner);\n\n\t\treturn wrapper;\n\t},\n\t_get_line: function (from, to) {\n\t\tvar direction = this.get_direction(from, to);\n\t\tvar vect = {\n\t\t\tx: from.x,\n\t\t\ty: from.y,\n\t\t\tdirection: this.get_direction(from, to)\n\t\t};\n\t\tif (direction == this.dirs.left || direction == this.dirs.right) {\n\t\t\tvect.size = Math.abs(from.x - to.x);\n\t\t} else {\n\t\t\tvect.size = Math.abs(from.y - to.y);\n\t\t}\n\t\treturn vect;\n\t},\n\tget_direction: function (from, to) {\n\t\tvar direction = 0;\n\t\tif (to.x < from.x) {\n\t\t\tdirection = this.dirs.left;\n\t\t} else if (to.x > from.x) {\n\t\t\tdirection = this.dirs.right;\n\t\t} else if (to.y > from.y) {\n\t\t\tdirection = this.dirs.down;\n\t\t} else {\n\t\t\tdirection = this.dirs.up;\n\t\t}\n\t\treturn direction;\n\t}\n\n};\n\nvar path_builder = {\n\n\tpath: [],\n\tclear: function () {\n\t\tthis.path = [];\n\t},\n\tcurrent: function () {\n\t\treturn this.path[this.path.length - 1];\n\t},\n\tpoint: function (next) {\n\t\tif (!next)\n\t\t\treturn this.current();\n\n\t\tthis.path.push(gantt.copy(next));\n\t\treturn next;\n\t},\n\tpoint_to: function (direction, diff, point) {\n\t\tif (!point)\n\t\t\tpoint = gantt.copy(this.point());\n\t\telse\n\t\t\tpoint = {x: point.x, y: point.y};\n\t\tvar dir = drawer.dirs;\n\t\tswitch (direction) {\n\t\t\tcase (dir.left):\n\t\t\t\tpoint.x -= diff;\n\t\t\t\tbreak;\n\t\t\tcase (dir.right):\n\t\t\t\tpoint.x += diff;\n\t\t\t\tbreak;\n\t\t\tcase (dir.up):\n\t\t\t\tpoint.y -= diff;\n\t\t\t\tbreak;\n\t\t\tcase (dir.down):\n\t\t\t\tpoint.y += diff;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this.point(point);\n\t},\n\tget_points: function (link, view) {\n\t\tvar pt = this.get_endpoint(link, view);\n\t\tvar xy = gantt.config;\n\n\t\tvar dy = pt.e_y - pt.y;\n\t\tvar dx = pt.e_x - pt.x;\n\n\t\tvar dir = drawer.dirs;\n\n\t\tthis.clear();\n\t\tthis.point({x: pt.x, y: pt.y});\n\n\t\tvar shiftX = 2 * xy.link_arrow_size;//just random size for first line\n\t\tvar lineType = this.get_line_type(link, view.$getConfig());\n\n\t\tvar forward = (pt.e_x > pt.x);\n\t\tif (lineType.from_start && lineType.to_start) {\n\t\t\tthis.point_to(dir.left, shiftX);\n\t\t\tif (forward) {\n\t\t\t\tthis.point_to(dir.down, dy);\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t} else {\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t\tthis.point_to(dir.down, dy);\n\t\t\t}\n\t\t\tthis.point_to(dir.right, shiftX);\n\n\t\t} else if (!lineType.from_start && lineType.to_start) {\n\t\t\tforward = (pt.e_x > (pt.x + 2 * shiftX));\n\t\t\tthis.point_to(dir.right, shiftX);\n\t\t\tif (forward) {\n\t\t\t\tdx -= shiftX;\n\t\t\t\tthis.point_to(dir.down, dy);\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t} else {\n\t\t\t\tdx -= 2 * shiftX;\n\t\t\t\tvar sign = dy > 0 ? 1 : -1;\n\n\t\t\t\tthis.point_to(dir.down, sign * (xy.row_height / 2));\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t\tthis.point_to(dir.down, sign * ( Math.abs(dy) - (xy.row_height / 2)));\n\t\t\t\tthis.point_to(dir.right, shiftX);\n\t\t\t}\n\n\t\t} else if (!lineType.from_start && !lineType.to_start) {\n\t\t\tthis.point_to(dir.right, shiftX);\n\t\t\tif (forward) {\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t\tthis.point_to(dir.down, dy);\n\t\t\t} else {\n\t\t\t\tthis.point_to(dir.down, dy);\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t}\n\t\t\tthis.point_to(dir.left, shiftX);\n\t\t} else if (lineType.from_start && !lineType.to_start) {\n\n\t\t\tforward = (pt.e_x > (pt.x - 2 * shiftX));\n\t\t\tthis.point_to(dir.left, shiftX);\n\n\t\t\tif (!forward) {\n\t\t\t\tdx += shiftX;\n\t\t\t\tthis.point_to(dir.down, dy);\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t} else {\n\t\t\t\tdx += 2 * shiftX;\n\t\t\t\tvar sign = dy > 0 ? 1 : -1;\n\t\t\t\tthis.point_to(dir.down, sign * (xy.row_height / 2));\n\t\t\t\tthis.point_to(dir.right, dx);\n\t\t\t\tthis.point_to(dir.down, sign * ( Math.abs(dy) - (xy.row_height / 2)));\n\t\t\t\tthis.point_to(dir.left, shiftX);\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.path;\n\t},\n\tget_line_type: function(link, config){\n\t\tvar types = config.links;\n\t\tvar from_start = false, to_start = false;\n\t\tif (link.type == types.start_to_start) {\n\t\t\tfrom_start = to_start = true;\n\t\t} else if (link.type == types.finish_to_finish) {\n\t\t\tfrom_start = to_start = false;\n\t\t} else if (link.type == types.finish_to_start) {\n\t\t\tfrom_start = false;\n\t\t\tto_start = true;\n\t\t} else if (link.type == types.start_to_finish) {\n\t\t\tfrom_start = true;\n\t\t\tto_start = false;\n\t\t} else {\n\t\t\tgantt.assert(false, \"Invalid link type\");\n\t\t}\n\n\t\tif(config.rtl){\n\t\t\tfrom_start = !from_start;\n\t\t\tto_start = !to_start;\n\t\t}\n\n\t\treturn {from_start: from_start, to_start: to_start};\n\t},\n\n\tget_endpoint: function (link, view) {\n\t\tvar config = view.$getConfig();\n\n\t\tvar lineType = this.get_line_type(link, config);\n\t\tvar from_start = lineType.from_start,\n\t\t\tto_start = lineType.to_start;\n\n\t\tvar source = gantt.getTask(link.source);\n\t\tvar target = gantt.getTask(link.target);\n\n\t\tvar from = getMilestonePosition(source, view),\n\t\t\tto = getMilestonePosition(target, view);\n\n\t\treturn {\n\t\t\tx: from_start ? from.left : (from.left + from.width),\n\t\t\te_x: to_start ? to.left : (to.left + to.width),\n\t\t\ty: from.top,\n\t\t\te_y: to.top\n\t\t};\n\t}\n};\n\nfunction getMilestonePosition(task, view){\n\tvar config = view.$getConfig();\n\tvar pos = view.getItemPosition(task);\n\tif(gantt.getTaskType(task.type) == config.types.milestone){\n\t\tvar milestoneHeight = gantt.getTaskHeight();\n\t\tvar milestoneWidth = Math.sqrt(2*milestoneHeight*milestoneHeight);\n\t\tpos.left -= milestoneWidth / 2;\n\t\tpos.width = milestoneWidth;\n\t}\n\treturn pos;\n}\n\n\nreturn {\n\trender: _render_link_element,\n\tupdate: null,\n\tgetRectangle: getLinkRectangle\n};\n}\n\nmodule.exports = createLinkRender;","var getRowRectangle = require(\"./viewport/get_bg_row_rectangle\");\nvar isLegacyRender = require(\"./is_legacy_smart_render\");\nfunction getIndexRange(scale, viewportLeft, viewPortRight){\n\tvar firstCellIndex = 0;\n\tvar lastCellIndex = scale.left.length - 1;\n\tfor(var i = 0; i < scale.left.length; i++){\n\t\tvar left = scale.left[i];\n\t\tif(left < viewportLeft){\n\t\t\tfirstCellIndex = i;\n\t\t}\n\t\tif(left > viewPortRight){\n\t\t\tlastCellIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn {\n\t\tstart: firstCellIndex,\n\t\tend: lastCellIndex\n\t};\n}\n\nfunction createTaskBgRender(gantt){\n\tvar renderedCells = {};\n\tvar visibleCells = {};\n\n\tfunction isRendered(item, columnIndex){\n\t\tif(renderedCells[item.id][columnIndex] && renderedCells[item.id][columnIndex].parentNode){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tfunction detachRenderedCell(itemId, columnIndex){\n\t\tif(renderedCells[itemId] && renderedCells[itemId][columnIndex] &&\n\t\t\trenderedCells[itemId][columnIndex].parentNode\n\t\t\t){\n\t\t\t\trenderedCells[itemId][columnIndex].parentNode.removeChild(renderedCells[itemId][columnIndex]);\n\t\t\t}\n\t}\n\n\tfunction getCellTemplate(view){\n\t\tvar templates = view.$getTemplates();\n\t\tvar cssTemplate;\n\t\tif (typeof templates.task_cell_class !== \"undefined\") {\n\t\t\tcssTemplate = templates.task_cell_class;\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tvar log = console.warn || console.log;\n\t\t\tlog('gantt.templates.task_cell_class template is deprecated and will be removed soon. Please use gantt.templates.timeline_cell_class instead.');\n\t\t} else {\n\t\t\tcssTemplate = templates.timeline_cell_class;\n\t\t}\n\t\treturn cssTemplate;\n\t}\n\n\tfunction renderCells(item, node, view, viewPort){\n\t\tvar config = view.$getConfig();\n\t\tvar cfg = view.getScale();\n\t\tvar count = cfg.count;\n\t\tvar cssTemplate = getCellTemplate(view);\n\n\t\tif (config.show_task_cells) {\n\t\t\tif(!renderedCells[item.id]){\n\t\t\t\trenderedCells[item.id] = {};\n\t\t\t}\n\t\t\tif(!visibleCells[item.id]){\n\t\t\t\tvisibleCells[item.id] = {};\n\t\t\t}\n\n\t\t\tvar range = getIndexRange(cfg, viewPort.x, viewPort.x_end);\n\n\t\t\tfor(var i in visibleCells[item.id]){\n\t\t\t\tvar index = visibleCells[item.id][i];\n\n\t\t\t\tif(Number(index) < range.start || Number(index) > range.end){\n\t\t\t\t\tdetachRenderedCell(item.id, index);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvisibleCells[item.id][columnIndex] = {};\n\t\t\n\t\t\t// TODO: do not iterate all cell, only ones in the viewport and once that are already rendered\n\t\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n\t\t\t\tvar cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cssTemplate, config);\n\t\t\t\tif(!cell && isRendered(item, columnIndex)){\n\t\t\t\t\tdetachRenderedCell(item.id, columnIndex);\n\t\t\t\t}else if (cell && !cell.parentNode){\n\t\t\t\t\tnode.appendChild(cell);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isColumnVisible(columnIndex, scale, viewPort){\n\t\tvar width = scale.width[columnIndex];\n\t\tif(width <= 0){\n\t\t\treturn false;\n\t\t}\n\t\tif(!gantt.config.smart_rendering || isLegacyRender(gantt)){\n\t\t\treturn true;\n\t\t}\n\t\tvar cellLeftCoord = scale.left[columnIndex] - width;\n\t\tvar cellRightCoord = scale.left[columnIndex] + width;\n\t\treturn (cellLeftCoord <= viewPort.x_end && cellRightCoord >= viewPort.x);//do not render skipped columns\n\t}\n\n\tfunction renderOneCell(scale, columnIndex, item, viewPort, count, cssTemplate, config){\n\t\tvar width = scale.width[columnIndex],\n\t\t\tcssclass = \"\";\n\n\t\tif (isColumnVisible(columnIndex, scale, viewPort)) {//do not render skipped columns\n\t\t\t\n\t\t\tvar cssTemplateContent = cssTemplate(item, scale.trace_x[columnIndex]);\n\n\t\t\tif(config.static_background){\n\t\t\t\t// if cell render in static background is not allowed, or if it's a blank cell\n\t\t\t\tif(!(config.static_background_cells && cssTemplateContent)){\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(renderedCells[item.id][columnIndex]){\n\t\t\t\tvisibleCells[item.id][columnIndex] = columnIndex;\n\t\t\t\treturn renderedCells[item.id][columnIndex];\n\t\t\t}\n\t\t\tvar cell = document.createElement(\"div\");\n\t\t\tcell.style.width = (width) + \"px\";\n\n\t\t\tcssclass = \"gantt_task_cell\" + (columnIndex == count - 1 ? \" gantt_last_cell\" : \"\");\n\t\t\tif (cssTemplateContent) {\n\t\t\t\tcssclass += \" \" + cssTemplateContent;\n\t\t\t}\n\t\t\tcell.className = cssclass;\n\n\t\t\tif(gantt.config.smart_rendering){\n\t\t\t\tcell.style.position = \"absolute\";\n\t\t\t\tcell.style.left = scale.left[columnIndex] + \"px\";\n\t\t\t\trenderedCells[item.id][columnIndex] = cell;\n\t\t\t\tvisibleCells[item.id][columnIndex] = columnIndex;\n\t\t\t}\n\t\t\treturn cell;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction _render_bg_line(item, view, viewPort) {\n\t\tvar config = view.$getConfig(),\n\t\t\ttemplates = view.$getTemplates();\n\t\tvar cfg = view.getScale();\n\t\tvar count = cfg.count;\n\n\t\tif(config.static_background && !config.static_background_cells){\n\t\t\treturn null;\n\t\t}\n\n\t\tvar row = document.createElement(\"div\");\n\n\t\tvar cellTemplate = getCellTemplate(view);\n\n\t\tvar range;\n\n\t\tif(!viewPort || !config.smart_rendering || isLegacyRender(gantt)){\n\t\t\trange = {\n\t\t\t\tstart: 0,\n\t\t\t\tend: count - 1\n\t\t\t};\n\t\t} else {\n\t\t\trange = getIndexRange(cfg, viewPort.x, viewPort.x_end);\n\t\t}\n\t\tif (config.show_task_cells) {\n\t\t\trenderedCells[item.id] = {};\n\t\t\tvisibleCells[item.id] = {};\n\t\t\tfor (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n\t\t\t\tvar cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cellTemplate, config);\n\t\t\t\tif(cell){\n\t\t\t\t\trow.appendChild(cell);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar odd = gantt.getGlobalTaskIndex(item.id) % 2 !== 0;\n\t\tvar cssTemplate = templates.task_row_class(item.start_date, item.end_date, item);\n\t\tvar css = \"gantt_task_row\" + (odd ? \" odd\" : \"\") + (cssTemplate ? ' ' + cssTemplate : '');\n\n\t\tvar store = view.$config.rowStore;\n\t\tif(store.isSelected(item.id)) {\n\t\t\tcss += \" gantt_selected\";\n\t\t}\n\n\t\trow.className = css;\n\n\t\tif (config.smart_rendering) {\n\t\t\trow.style.position = \"absolute\";\n\t\t\trow.style.top = view.getItemTop(item.id) + \"px\";\n\t\t\trow.style.width = \"100%\";\n\t\t}\n\t\trow.style.height = (config.row_height) + \"px\";\n\n\t\tif(view.$config.item_attribute){\n\t\t\trow.setAttribute(view.$config.item_attribute, item.id);\n\t\t}\n\n\t\treturn row;\n\t}\n\n\treturn {\n\t\trender: _render_bg_line,\n\t\tupdate: renderCells,\n\t\tgetRectangle: getRowRectangle\n\t};\n}\n\nmodule.exports = createTaskBgRender;\n","var getBarRectangle = require(\"./viewport/get_bar_rectangle\");\nvar createBaseBarRender = require(\"./task_bar_render\");\n\nfunction createTaskRenderer(gantt){\n\tvar defaultRender = createBaseBarRender(gantt);\n\n\tfunction renderSplitTask(task, timeline) {\n\t\tif (gantt.isSplitTask(task) && ((gantt.config.open_split_tasks && !task.$open) || !gantt.config.open_split_tasks)) {\n\t\t\tvar el = document.createElement('div'),\n\t\t\t\tsizes = gantt.getTaskPosition(task);\n\n\t\t\tvar sub_tasks = gantt.getChildren(task.id);\n\n\n\t\t\tfor (var i = 0; i < sub_tasks.length; i++) {\n\t\t\t\tvar child = gantt.getTask(sub_tasks[i]);\n\n\t\t\t\tvar element = defaultRender(child, timeline);\n\t\t\t\tif(!element)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar padding = Math.floor((gantt.config.row_height - sizes.height) / 2);\n\n\t\t\t\telement.style.top = (sizes.top + padding) + \"px\";\n\t\t\t\telement.className += \" gantt_split_child\";\n\n\t\t\t\tel.appendChild(element);\n\t\t\t}\n\t\t\treturn el;\n\t\t}\n\t\treturn false;\n\t}\n\treturn {\n\t\trender: renderSplitTask,\n\t\tupdate: null,\n\t\tgetRectangle: getBarRectangle\n\t};\n}\n\nmodule.exports = createTaskRenderer;","var getBarRectangle = require(\"./viewport/get_bar_rectangle\");\nvar createBaseBarRender = require(\"./task_bar_render\");\n\nmodule.exports = function createTaskRenderer(gantt){\n\tvar defaultRender = createBaseBarRender(gantt);\n\treturn {\n\t\trender: defaultRender,\n\t\tupdate: null,\n\t\tgetRectangle: getBarRectangle\n\t};\n};","module.exports = function (gantt) {\n\treturn function processTaskDateProperties(item, mapTo, mode) {\n\t\tif (mode == \"keepDates\") {\n\t\t\tkeepDatesOnEdit(item, mapTo);\n\t\t} else if (mode == \"keepDuration\") {\n\t\t\tkeepDurationOnEdit(item, mapTo);\n\t\t} else {\n\t\t\tdefaultActionOnEdit(item, mapTo);\n\t\t}\n\t};\n\n\t// resize task\n\t// resize task when start/end/duration changes\n\tfunction keepDatesOnEdit(item, mapTo) {\n\t\tif (mapTo == \"duration\") {\n\t\t\titem.end_date = gantt.calculateEndDate(item);\n\t\t} else if (mapTo == \"end_date\" || mapTo == \"start_date\") {\n\t\t\titem.duration = gantt.calculateDuration(item);\n\t\t}\n\t}\n\n\t// move task(before 6.2)\n\t// move task when start/end dates changes\n\t// resize task when duration changes\n\tfunction keepDurationOnEdit(item, mapTo) {\n\t\tif (mapTo == \"end_date\") {\n\t\t\titem.start_date = gantt.calculateEndDate({\n\t\t\t\tstart_date: item.end_date,\n\t\t\t\tduration: -item.duration,\n\t\t\t\ttask: item\n\t\t\t}\n\t\t\t);\n\t\t} else if (mapTo == \"start_date\" || mapTo == \"duration\") {\n\t\t\titem.end_date = gantt.calculateEndDate(item);\n\t\t}\n\t}\n\n\t// default behavior\n\t// move task when start date changes\n\t// resize task when end date/duration changes\n\tfunction defaultActionOnEdit(item, mapTo) {\n\t\tif (mapTo == \"start_date\" || mapTo == \"duration\") {\n\t\t\titem.end_date = gantt.calculateEndDate(item);\n\t\t} else if (mapTo == \"end_date\") {\n\t\t\titem.duration = gantt.calculateDuration(item);\n\t\t}\n\t}\n};","module.exports = function (gantt) {\n\n\tvar BaseEditor = require(\"./base\")(gantt),\n\t\tutils = require(\"../../../../../utils/utils\");\n\tvar __extends = require(\"../../../../../utils/extends\");\n\n\tfunction PredecessorEditor() {\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\n\t\treturn self;\n\t}\n\n\t__extends(PredecessorEditor, BaseEditor);\n\n\tfunction parseInputString(value, config) {\n\t\tvar predecessors = (value || \"\").split(config.delimiter || \",\");\n\t\tfor (var i = 0; i < predecessors.length; i++) {\n\t\t\tvar val = predecessors[i].trim();\n\t\t\tif (val) {\n\t\t\t\tpredecessors[i] = val;\n\t\t\t} else {\n\t\t\t\tpredecessors.splice(i, 1);\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\tpredecessors.sort();\n\t\treturn predecessors;\n\t}\n\n\tfunction formatPredecessors(task, config, gantt) {\n\t\tvar links = task.$target;\n\t\tvar labels = [];\n\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\tvar link = gantt.getLink(links[i]);\n\t\t\tvar pred = gantt.getTask(link.source);\n\t\t\tlabels.push(gantt.getWBSCode(pred));\n\t\t}\n\t\treturn labels.join((config.delimiter || \",\") + \" \");\n\t}\n\n\tfunction getSelectedLinks(taskId, predecessorCodes) {\n\t\tvar links = [];\n\t\tpredecessorCodes.forEach(function (code) {\n\t\t\tvar predecessor = gantt.getTaskByWBSCode(code);\n\t\t\tif (predecessor) {\n\t\t\t\tvar link = {\n\t\t\t\t\tsource: predecessor.id,\n\t\t\t\t\ttarget: taskId,\n\t\t\t\t\ttype: gantt.config.links.finish_to_start,\n\t\t\t\t\tlag: 0\n\t\t\t\t};\n\t\t\t\tif (gantt.isLinkAllowed(link)) {\n\t\t\t\t\tlinks.push(link);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn links;\n\t}\n\n\tfunction getLinksDiff(task, predecessorCodes) {\n\t\tvar selectedLinks = getSelectedLinks(task.id, predecessorCodes);\n\t\tvar existingLinksSearch = {};\n\t\ttask.$target.forEach(function (linkId) {\n\t\t\tvar link = gantt.getLink(linkId);\n\t\t\texistingLinksSearch[link.source + \"_\" + link.target] = link.id;\n\t\t});\n\n\t\tvar linksToAdd = [];\n\t\tselectedLinks.forEach(function (link) {\n\t\t\tvar linkKey = link.source + \"_\" + link.target;\n\t\t\tif (!existingLinksSearch[linkKey]) {\n\t\t\t\tlinksToAdd.push(link);\n\t\t\t} else {\n\t\t\t\tdelete existingLinksSearch[linkKey];\n\t\t\t}\n\t\t});\n\n\t\tvar linksToDelete = [];\n\t\tfor (var i in existingLinksSearch) {\n\t\t\tlinksToDelete.push(existingLinksSearch[i]);\n\t\t}\n\n\t\treturn {\n\t\t\tadd: linksToAdd,\n\t\t\tremove: linksToDelete\n\t\t};\n\t}\n\n\tutils.mixin(PredecessorEditor.prototype, {\n\t\tshow: function (id, column, config, placeholder) {\n\t\t\tvar html = \"
\";\n\t\t\tplaceholder.innerHTML = html;\n\t\t},\n\t\thide: function () {\n\t\t},\n\t\tset_value: function (value, id, column, node) {\n\t\t\tthis.get_input(node).value = formatPredecessors(value, column.editor, gantt);\n\t\t},\n\t\tget_value: function (id, column, node) {\n\t\t\treturn parseInputString((this.get_input(node).value || \"\"), column.editor);\n\t\t},\n\t\tsave: function (id, column, node) {\n\t\t\tvar task = gantt.getTask(id);\n\n\t\t\tvar linksDiff = getLinksDiff(task, this.get_value(id, column, node));\n\n\t\t\tif (linksDiff.add.length || linksDiff.remove.length) {\n\t\t\t\tgantt.batchUpdate(function () {\n\t\t\t\t\tlinksDiff.add.forEach(function (link) {\n\t\t\t\t\t\tgantt.addLink(link);\n\t\t\t\t\t});\n\t\t\t\t\tlinksDiff.remove.forEach(function (linkId) {\n\t\t\t\t\t\tgantt.deleteLink(linkId);\n\t\t\t\t\t});\n\n\t\t\t\t\tif (gantt.autoSchedule)\n\t\t\t\t\t\tgantt.autoSchedule();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tis_changed: function (value, id, column, node) {\n\t\t\tvar inputPredecessors = this.get_value(id, column, node);\n\t\t\tvar taskPredecessors = parseInputString(formatPredecessors(value, column.editor, gantt), column.editor);\n\n\t\t\treturn inputPredecessors.join() !== taskPredecessors.join();\n\t\t}\n\t}, true);\n\n\treturn PredecessorEditor;\n};","module.exports = function (gantt) {\n\tvar BaseEditor = require(\"./base\")(gantt),\n\t\tutils = require(\"../../../../../utils/utils\");\n\tvar __extends = require(\"../../../../../utils/extends\");\n\n\tvar html5DateFormat = \"%Y-%m-%d\";\n\n\tvar dateToStr = null;\n\tvar strToDate = null;\n\n\tfunction init() {\n\t\tif (!dateToStr) {\n\t\t\tdateToStr = gantt.date.date_to_str(html5DateFormat);\n\t\t}\n\t\tif (!strToDate) {\n\t\t\tstrToDate = gantt.date.str_to_date(html5DateFormat);\n\t\t}\n\t}\n\n\tfunction DateEditor() {\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\n\n\t\treturn self;\n\t}\n\n\t__extends(DateEditor, BaseEditor);\n\n\tutils.mixin(DateEditor.prototype, {\n\t\tshow: function (id, column, config, placeholder) {\n\n\t\t\tinit();\n\t\t\tvar minValue = dateToStr(config.min || gantt.getState().min_date);\n\t\t\tvar maxValue = dateToStr(config.max || gantt.getState().max_date);\n\n\t\t\tvar html = \"
\";\n\t\t\tplaceholder.innerHTML = html;\n\t\t},\n\t\tset_value: function (value, id, column, node) {\n\t\t\tif (value && value.getFullYear) {\n\t\t\t\tthis.get_input(node).value = dateToStr(value);\n\t\t\t} else {\n\t\t\t\tthis.get_input(node).value = value;\n\t\t\t}\n\t\t},\n\t\tis_valid: function (value, id, column, node) {\n\t\t\tif (!value || isNaN(value.getTime()))\n\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t},\n\t\tget_value: function (id, column, node) {\n\t\t\tvar parsed;\n\t\t\ttry {\n\t\t\t\tparsed = strToDate(this.get_input(node).value || \"\");\n\t\t\t} catch (e) {\n\t\t\t\tparsed = null;// return null will cancel changes\n\t\t\t}\n\n\t\t\treturn parsed;\n\t\t}\n\t}, true);\n\n\treturn DateEditor;\n};\n","module.exports = function(gantt) {\n\tvar BaseEditor = require(\"./base\")(gantt),\n\t\tutils = require(\"../../../../../utils/utils\");\n\tvar __extends = require(\"../../../../../utils/extends\");\n\n\tfunction SelectEditor() {\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\n\t\treturn self;\n\t}\n\n\t__extends(SelectEditor, BaseEditor);\n\n\tutils.mixin(SelectEditor.prototype, {\n\t\tshow: function (id, column, config, placeholder) {\n\t\t\tvar html = \"
\";\n\t\t\tplaceholder.innerHTML = html;\n\t\t},\n\t\tget_input: function (node) {\n\t\t\treturn node.querySelector(\"select\");\n\t\t}\n\t}, true);\n\n\treturn SelectEditor;\n};","module.exports = function (gantt) {\n\n\tvar BaseEditor = require(\"./base\")(gantt),\n\t\tutils = require(\"../../../../../utils/utils\");\n\tvar __extends = require(\"../../../../../utils/extends\");\n\n\tfunction NumberEditor() {\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\n\t\treturn self;\n\t}\n\n\t__extends(NumberEditor, BaseEditor);\n\n\tutils.mixin(NumberEditor.prototype, {\n\t\tshow: function (id, column, config, placeholder) {\n\t\t\tvar min = config.min || 0,\n\t\t\t\tmax = config.max || 100;\n\n\t\t\tvar html = \"
\";\n\t\t\tplaceholder.innerHTML = html;\n\t\t},\n\t\tget_value: function (id, column, node) {\n\t\t\treturn this.get_input(node).value || \"\";\n\t\t},\n\t\tis_valid: function (value, id, column, node) {\n\t\t\treturn !isNaN(parseInt(value, 10));\n\t\t}\n\t}, true);\n\n\treturn NumberEditor;\n};","module.exports = function(gantt) {\n\n\tvar BaseEditor = require(\"./base\")(gantt),\n\t\tutils = require(\"../../../../../utils/utils\");\n\tvar __extends = require(\"../../../../../utils/extends\");\n\n\tfunction TextEditor() {\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\n\t\treturn self;\n\t}\n\n\t__extends(TextEditor, BaseEditor);\n\n\tutils.mixin(TextEditor.prototype, {\n\t\tshow: function (id, column, config, placeholder) {\n\t\t\tvar html = \"
\";\n\t\t\tplaceholder.innerHTML = html;\n\t\t}\n\t}, true);\n\n\treturn TextEditor;\n};","module.exports = {\n\tinit: function(controller, grid){\n\t\tvar self = controller;\n\t\tvar gantt = grid.$gantt;\n\n\t\tvar onBlurDelay = null;\n\t\tvar keyNav = gantt.ext.keyboardNavigation;\n\t\tkeyNav.attachEvent(\"onBeforeFocus\", function (node) {\n\t\t\tvar activeCell = controller.locateCell(node);\n\t\t\tclearTimeout(onBlurDelay);\n\t\t\tif (activeCell) {\n\t\t\t\tvar columnName = activeCell.columnName;\n\t\t\t\tvar id = activeCell.id;\n\n\t\t\t\tvar editorState = self.getState();\n\t\t\t\tif(self.isVisible()){\n\t\t\t\t\tif(editorState.id == id && editorState.columnName === columnName) {\n\t\t\t\t\t\treturn false;\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\tkeyNav.attachEvent(\"onFocus\", function (node) {\n\t\t\tvar activeCell = controller.locateCell(node);\n\t\t\tvar state = controller.getState();\n\t\t\tclearTimeout(onBlurDelay);\n\t\t\tif (activeCell && !(activeCell.id == state.id && activeCell.columnName == state.columnName)) {\n\t\t\t\tif(self.isVisible()){\n\t\t\t\t\tself.save();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tcontroller.attachEvent(\"onHide\", function(){\n\t\t\tclearTimeout(onBlurDelay);\n\t\t});\n\n\t\tkeyNav.attachEvent(\"onBlur\", function () {\n\t\t\tonBlurDelay = setTimeout(function(){\n\t\t\t\tself.save();\n\t\t\t});\n\n\t\t\treturn true;\n\t\t});\n\n\t\tgantt.attachEvent(\"onTaskDblClick\", function(id,e){\n\t\t\t// block lightbox on double click inside editor\n\t\t\tvar state = controller.getState();\n\t\t\tvar cell = controller.locateCell(e.target);\n\t\t\tif(cell && controller.isVisible() && cell.columnName == state.columnName){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tgantt.attachEvent(\"onTaskClick\", function (id, e) {\n\t\t\tif(gantt._is_icon_open_click(e))\n\t\t\t\treturn true;\n\n\t\t\tvar state = controller.getState();\n\t\t\tvar cell = controller.locateCell(e.target);\n\n\t\t\tif (cell && controller.getEditorConfig(cell.columnName)) {\n\t\t\t\tif(controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName){\n\t\t\t\t\t// do nothing if editor is already active in this cell\n\t\t\t\t}else{\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\tgantt.attachEvent(\"onEmptyClick\", function () {\n\t\t\tself.save();\n\t\t\treturn true;\n\t\t});\n\n\t\tkeyNav.attachEvent(\"onKeyDown\", function(command, e){\n\t\t\tvar activeCell = controller.locateCell(e.target);\n\t\t\tvar hasEditor = activeCell ? controller.getEditorConfig(activeCell.columnName) : false;\n\n\t\t\tvar state = controller.getState();\n\t\t\tvar keyboard = gantt.constants.KEY_CODES;\n\t\t\tvar keyCode = e.keyCode;\n\t\t\tvar preventKeyNav = false;\n\n\t\t\tswitch (keyCode){\n\t\t\t\tcase keyboard.ENTER:\n\t\t\t\t\tif(controller.isVisible()){\n\t\t\t\t\t\tcontroller.save();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}else if(hasEditor && !(e.ctrlKey || e.metaKey || e.shiftKey)){\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyboard.ESC:\n\t\t\t\t\tif(controller.isVisible()){\n\t\t\t\t\t\tcontroller.hide();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyboard.UP:\n\t\t\t\tcase keyboard.DOWN:\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyboard.LEFT:\n\t\t\t\tcase keyboard.RIGHT:\n\t\t\t\t\tif(state.editorType === \"date\"){\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyboard.SPACE:\n\t\t\t\t\tif(controller.isVisible()){\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(hasEditor && !controller.isVisible()){\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyboard.DELETE:\n\t\t\t\t\tif(hasEditor && !controller.isVisible()){\n\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyboard.TAB:\n\t\t\t\t\tif(controller.isVisible()){\n\n\t\t\t\t\t\tif(e.shiftKey){\n\t\t\t\t\t\t\tcontroller.editPrevCell(true);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcontroller.editNextCell(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar newState = controller.getState();\n\t\t\t\t\t\tif(newState.id){\n\t\t\t\t\t\t\tkeyNav.focus({type:\"taskCell\", id: newState.id, column:newState.columnName});\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(controller.isVisible())\n\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\telse{\n\n\t\t\t\t\t\t// start editing on character key\n\t\t\t\t\t\tif((keyCode >= 48 && keyCode <= 57) || // [0-9]\n\t\t\t\t\t\t\t(keyCode > 95 && keyCode < 112) || // numpad\n\t\t\t\t\t\t\t(keyCode >= 64 && keyCode <= 91) || // [a-z]\n\t\t\t\t\t\t\t(keyCode > 185 && keyCode < 193) || //;=-,etc\n\t\t\t\t\t\t\t(keyCode > 218 && keyCode < 223)\n\t\t\t\t\t\t){\n\t\t\t\t\t\t\tvar modifiers = command.modifiers;\n\n\t\t\t\t\t\t\tvar anyModifier = modifiers.alt || modifiers.ctrl || modifiers.meta || modifiers.shift;\n\t\t\t\t\t\t\tif(modifiers.alt){\n\t\t\t\t\t\t\t\t// don't start editing on alt+key\n\t\t\t\t\t\t\t}else if (anyModifier && keyNav.getCommandHandler(command, \"taskCell\")){\n\t\t\t\t\t\t\t\t// don't start editing if command already have a keyboard shortcut\n\t\t\t\t\t\t\t}else if(hasEditor && !controller.isVisible()){\n\t\t\t\t\t\t\t\tself.startEdit(activeCell.id, activeCell.columnName);\n\t\t\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (preventKeyNav){\n\t\t\t\treturn false;\n\t\t\t} else{\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t});\n\t},\n\tonShow: function(controller, placeholder, grid){},\n\tonHide: function(controller, placeholder, grid){\n\t\tvar gantt = grid.$gantt;\n\t\tgantt.focus();\n\n\t},\n\tdestroy: function(){}\n};\n\n","module.exports = {\n\tinit: function (controller, grid) {\n\t\tvar gantt = grid.$gantt;\n\n\t\tgantt.attachEvent(\"onTaskClick\", function (id, e) {\n\t\t\tif (gantt._is_icon_open_click(e))\n\t\t\t\treturn true;\n\t\t\tvar state = controller.getState();\n\t\t\tvar cell = controller.locateCell(e.target);\n\n\t\t\tif (cell && controller.getEditorConfig(cell.columnName)) {\n\t\t\t\tif (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {\n\t\t\t\t\t// do nothing if editor is already active in this cell\n\t\t\t\t} else {\n\t\t\t\t\tcontroller.startEdit(cell.id, cell.columnName);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tgantt.attachEvent(\"onEmptyClick\", function () {\n\t\t\tif (controller.isVisible() && controller.isChanged()) {\n\t\t\t\tcontroller.save();\n\t\t\t} else {\n\t\t\t\tcontroller.hide();\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\n\t\tgantt.attachEvent(\"onTaskDblClick\", function (id, e) {\n\t\t\tvar state = controller.getState();\n\t\t\tvar cell = controller.locateCell(e.target);\n\t\t\tif (cell && controller.isVisible() && cell.columnName == state.columnName) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t},\n\n\tonShow: function (controller, placeholder, grid) {\n\t\tif (grid.$getConfig().keyboard_navigation) {\n\t\t\t// keyboard navigation extension will handle arrows if enabled\n\t\t\treturn;\n\t\t}\n\t\tvar gantt = grid.$gantt;\n\t\tplaceholder.onkeydown = function (e) {\n\t\t\te = e || window.event;\n\n\t\t\tvar keyboard = gantt.constants.KEY_CODES;\n\t\t\tif (e.defaultPrevented || (e.shiftKey && e.keyCode != keyboard.TAB)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar shouldPrevent = true;\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase gantt.keys.edit_save:\n\t\t\t\t\tcontroller.save();\n\t\t\t\t\tbreak;\n\t\t\t\tcase gantt.keys.edit_cancel:\n\t\t\t\t\tcontroller.hide();\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyboard.TAB:\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tcontroller.editPrevCell(true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontroller.editNextCell(true);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tshouldPrevent = false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (shouldPrevent) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t};\n\t},\n\tonHide: function () {\n\n\t},\n\n\tdestroy: function () {\n\n\t}\n};\n\n","var defaultMapping = require(\"./keyboard_mappings/default\");\nvar keyNavMappings = require(\"./keyboard_mappings/keyboard_navigation\");\n\nmodule.exports = function(gantt){\n\n\tvar mapping = null;\n\n\treturn {\n\t\tsetMapping: function(map){\n\t\t\tmapping = map;\n\t\t},\n\t\tgetMapping: function(){\n\n\t\t\tif(mapping){\n\t\t\t\treturn mapping;\n\t\t\t}else if(gantt.config.keyboard_navigation_cells){\n\t\t\t\treturn keyNavMappings;\n\t\t\t}else{\n\t\t\t\treturn defaultMapping;\n\t\t\t}\n\t\t}\n\t};\n};\n","var getKeyboardMapping = require(\"./keyboard_mappings\");\nvar textEditorFactory = require(\"./editors/text\"),\n\tnumberEditorFactory = require(\"./editors/number\"),\n\tselectEditorFactory = require(\"./editors/select\"),\n\tdateEditorFactory = require(\"./editors/date\"),\n\tpredecessorEditorFactory = require(\"./editors/predecessor\");\nvar utils = require(\"../../../../utils/utils\");\nvar domHelpers = require(\"../../../../utils/dom_helpers\");\nvar eventable = require(\"../../../../utils/eventable\");\nvar linkedPropertiesProcessor = require(\"./linked_properties\");\n\nfunction initConfigs(gantt){\n\tgantt.config.editor_types = {\n\t\ttext: new (textEditorFactory(gantt))(),\n\t\tnumber: new (numberEditorFactory(gantt))(),\n\t\tselect: new (selectEditorFactory(gantt))(),\n\t\tdate: new (dateEditorFactory(gantt))(),\n\t\tpredecessor: new (predecessorEditorFactory(gantt))()\n\t};\n}\n\nfunction create(gantt){\n\tvar keyboardMapping = getKeyboardMapping(gantt);\n\n\tvar eventBus = {};\n\teventable(eventBus);\n\n\tfunction createGridEditors(grid) {\n\n\t\tfunction _getGridCellFromNode(node){\n\t\t\tif(!domHelpers.isChildOf(node, grid.$grid)){\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar row = domHelpers.locateAttribute(node, grid.$config.item_attribute);\n\t\t\tvar cell = domHelpers.locateAttribute(node, \"data-column-name\");\n\t\t\tif(cell){\n\t\t\t\tvar columnName = cell.getAttribute(\"data-column-name\");\n\t\t\t\tvar id = row.getAttribute(grid.$config.item_attribute);\n\t\t\t\treturn {\n\t\t\t\t\tid: id,\n\t\t\t\t\tcolumnName: columnName\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction _getEditorPosition(itemId, columnName) {\n\t\t\tvar top = grid.getItemTop(itemId);\n\t\t\tvar height = grid.getItemHeight(itemId);\n\t\t\tvar cols = grid.getGridColumns();\n\t\t\tvar left = 0,\n\t\t\t\twidth = 0;\n\n\t\t\tfor (var i = 0; i < cols.length; i++) {\n\t\t\t\tif (cols[i].name == columnName) {\n\t\t\t\t\twidth = cols[i].width;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tleft += cols[i].width;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttop: top,\n\t\t\t\tleft: left,\n\t\t\t\theight: height,\n\t\t\t\twidth: width\n\t\t\t};\n\t\t}\n\n\t\tfunction findVisibleIndex(grid, columnName) {\n\t\t\tvar columns = grid.getGridColumns();\n\t\t\tfor (var i = 0; i < columns.length; i++){\n\t\t\t\tif(columns[i].name == columnName){\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\tfunction _createPlaceholder(itemId, columnName) {\n\t\t\tvar pos = _getEditorPosition(itemId, columnName);\n\t\t\tvar el = document.createElement(\"div\");\n\t\t\tel.className = \"gantt_grid_editor_placeholder\";\n\t\t\tel.setAttribute(grid.$config.item_attribute, itemId);\n\t\t\tel.setAttribute(\"data-column-name\", columnName);\n\n\t\t\tvar visibleIndex = findVisibleIndex(grid, columnName);\n\t\t\tel.setAttribute(\"data-column-index\", visibleIndex);\n\n\t\t\tel.style.cssText = [\n\t\t\t\t\"top:\" + pos.top + \"px\",\n\t\t\t\t\"left:\" + pos.left + \"px\",\n\t\t\t\t\"width:\" + pos.width + \"px\",\n\t\t\t\t\"height:\" + pos.height + \"px\"\n\t\t\t].join(\";\");\n\n\t\t\treturn el;\n\t\t}\n\n\t\tvar updateTaskDateProperties = linkedPropertiesProcessor(gantt);\n\n\t\tvar handlers = [];\n\t\tvar store = null;\n\t\tvar controller = {\n\t\t\t_itemId: null,\n\t\t\t_columnName: null,\n\t\t\t_editor: null,\n\t\t\t_editorType: null,\n\t\t\t_placeholder: null,\n\n\t\t\tlocateCell: _getGridCellFromNode,\n\t\t\tgetEditorConfig: function (columnName) {\n\t\t\t\tvar column = grid.getColumn(columnName);\n\t\t\t\treturn column.editor;\n\t\t\t},\n\n\t\t\tinit: function () {\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\n\t\t\t\tif(mapping.init){\n\t\t\t\t\tmapping.init(this, grid);\n\t\t\t\t}\n\n\t\t\t\tstore = grid.$gantt.getDatastore(grid.$config.bind);\n\n\t\t\t\tvar self = this;\n\n\t\t\t\thandlers.push(store.attachEvent(\"onIdChange\", function(oldId, newId){\n\t\t\t\t\tif(self._itemId == oldId){\n\t\t\t\t\t\tself._itemId = newId;\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t\thandlers.push(store.attachEvent(\"onStoreUpdated\", function(){\n\t\t\t\t\tif(grid.$gantt.getState(\"batchUpdate\").batch_update){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(self.isVisible() && !store.isVisible(self._itemId)){\n\t\t\t\t\t\tself.hide();\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis.init = function(){};\n\t\t\t},\n\n\t\t\tgetState: function(){\n\t\t\t\treturn {\n\t\t\t\t\teditor: this._editor,\n\t\t\t\t\teditorType: this._editorType,\n\t\t\t\t\tplaceholder: this._placeholder,\n\t\t\t\t\tid: this._itemId,\n\t\t\t\t\tcolumnName: this._columnName\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tstartEdit: function(itemId, columnName) {\n\t\t\t\tif (this.isVisible()) {\n\t\t\t\t\tthis.save();\n\t\t\t\t}\n\n\t\t\t\tif(!store.exists(itemId)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar editorState = {id: itemId, columnName: columnName};\n\t\t\t\tif (gantt.isReadonly(store.getItem(itemId))) {\n\t\t\t\t\tthis.callEvent(\"onEditPrevent\", [editorState]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.callEvent(\"onBeforeEditStart\", [editorState]) === false) {\n\t\t\t\t\tthis.callEvent(\"onEditPrevent\", [editorState]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.show(editorState.id, editorState.columnName);\n\t\t\t\tthis.setValue();\n\n\t\t\t\tthis.callEvent(\"onEditStart\", [editorState]);\n\t\t\t},\n\t\t\tisVisible: function(){\n\t\t\t\treturn !!(this._editor && domHelpers.isChildOf(this._placeholder, document.body));\n\t\t\t},\n\t\t\tshow: function (itemId, columnName) {\n\t\t\t\tif (this.isVisible()) {\n\t\t\t\t\tthis.save();\n\t\t\t\t}\n\t\t\t\tvar editorState = {id: itemId, columnName: columnName};\n\n\t\t\t\tvar column = grid.getColumn(editorState.columnName);\n\t\t\t\tvar editorConfig = this.getEditorConfig(column.name);\n\t\t\t\tif(!editorConfig)\n\t\t\t\t\treturn;\n\n\t\t\t\tvar editor = grid.$getConfig().editor_types[editorConfig.type];\n\n\t\t\t\tvar placeholder = _createPlaceholder(editorState.id, editorState.columnName);\n\t\t\t\tgrid.$grid_data.appendChild(placeholder);\n\t\t\t\teditor.show(editorState.id, column, editorConfig, placeholder);\n\t\t\t\tthis._editor = editor;\n\t\t\t\tthis._placeholder = placeholder;\n\t\t\t\tthis._itemId = editorState.id;\n\t\t\t\tthis._columnName = editorState.columnName;\n\t\t\t\tthis._editorType = editorConfig.type;\n\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\n\t\t\t\tif(mapping.onShow){\n\t\t\t\t\tmapping.onShow(this, placeholder, grid);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tsetValue: function () {\n\t\t\t\tvar state = this.getState();\n\t\t\t\tvar itemId = state.id,\n\t\t\t\t\tcolumnName = state.columnName;\n\n\t\t\t\tvar column = grid.getColumn(columnName);\n\t\t\t\tvar item = store.getItem(itemId);\n\t\t\t\tvar editorConfig = this.getEditorConfig(columnName);\n\n\t\t\t\tif(!editorConfig)\n\t\t\t\t\treturn;\n\n\t\t\t\tvar value = item[editorConfig.map_to];\n\t\t\t\tif(editorConfig.map_to == \"auto\"){\n\t\t\t\t\tvalue = store.getItem(itemId);\n\t\t\t\t}\n\n\t\t\t\tthis._editor.set_value(value, itemId, column, this._placeholder);\n\t\t\t\tthis.focus();\n\t\t\t},\n\n\t\t\tfocus: function(){\n\t\t\t\tthis._editor.focus(this._placeholder);\n\t\t\t},\n\n\t\t\tgetValue: function () {\n\t\t\t\tvar column = grid.getColumn(this._columnName);\n\t\t\t\treturn this._editor.get_value(this._itemId, column, this._placeholder);\n\t\t\t},\n\n\t\t\t_getItemValue: function() {\n\t\t\t\tvar editorConfig = this.getEditorConfig(this._columnName);\n\n\t\t\t\tif(!editorConfig)\n\t\t\t\t\treturn;\n\n\t\t\t\tvar item = gantt.getTask(this._itemId);\n\t\t\t\tvar value = item[editorConfig.map_to];\n\t\t\t\tif(editorConfig.map_to == \"auto\"){\n\t\t\t\t\tvalue = store.getItem(this._itemId);\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t},\n\n\t\t\tisChanged: function(){\n\n\t\t\t\tvar column = grid.getColumn(this._columnName);\n\n\t\t\t\tvar value = this._getItemValue();\n\n\t\t\t\treturn this._editor.is_changed(value, this._itemId, column, this._placeholder);\n\t\t\t},\n\n\t\t\thide: function () {\n\t\t\t\tif(!this._itemId)\n\t\t\t\t\treturn;\n\n\t\t\t\tvar itemId = this._itemId,\n\t\t\t\t\tcolumnName = this._columnName;\n\n\t\t\t\tvar mapping = keyboardMapping.getMapping();\n\t\t\t\tif(mapping.onHide){\n\t\t\t\t\tmapping.onHide(this, this._placeholder, grid);\n\t\t\t\t}\n\n\t\t\t\tthis._itemId = null;\n\t\t\t\tthis._columnName = null;\n\t\t\t\tthis._editorType = null;\n\t\t\t\tif (!this._placeholder) return;\n\n\t\t\t\tif (this._editor) {\n\t\t\t\t\tthis._editor.hide(this._placeholder);\n\t\t\t\t}\n\t\t\t\tthis._editor = null;\n\t\t\t\tif (this._placeholder.parentNode) {\n\t\t\t\t\tthis._placeholder.parentNode.removeChild(this._placeholder);\n\t\t\t\t}\n\t\t\t\tthis._placeholder = null;\n\n\t\t\t\tthis.callEvent(\"onEditEnd\", [{id: itemId, columnName: columnName}]);\n\t\t\t},\n\t\t\tsave: function () {\n\t\t\t\tif(!(this.isVisible() && store.exists(this._itemId) && this.isChanged())) {\n\t\t\t\t\tthis.hide();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar itemId = this._itemId,\n\t\t\t\t\tcolumnName = this._columnName;\n\n\t\t\t\tif(!store.exists(itemId)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar item = store.getItem(itemId);\n\t\t\t\tvar editorConfig = this.getEditorConfig(columnName);\n\t\t\t\tvar editorState = {\n\t\t\t\t\tid: itemId,\n\t\t\t\t\tcolumnName: columnName,\n\t\t\t\t\tnewValue: this.getValue(),\n\t\t\t\t\toldValue: this._getItemValue()\n\t\t\t\t};\n\t\t\t\tif (this.callEvent(\"onBeforeSave\", [editorState]) !== false) {\n\t\t\t\t\tif (this._editor.is_valid(editorState.newValue, editorState.id, editorState.columnName, this._placeholder)) {\n\n\t\t\t\t\t\tvar mapTo = editorConfig.map_to;\n\t\t\t\t\t\tvar value = editorState.newValue;\n\t\t\t\t\t\tif (mapTo != \"auto\") {\n\t\t\t\t\t\t\titem[mapTo] = value;\n\t\t\t\t\t\t\tupdateTaskDateProperties(item, mapTo, gantt.config.inline_editors_date_processing);\n\n\t\t\t\t\t\t\tstore.updateItem(itemId);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._editor.save(itemId, grid.getColumn(columnName), this._placeholder);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.callEvent(\"onSave\", [editorState]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.hide();\n\t\t\t},\n\n\t\t\t_findEditableCell: function findEditableCell(start, direction){\n\t\t\t\tvar nextIndex = start;\n\t\t\t\tvar columns = grid.getGridColumns();\n\t\t\t\tvar nextColumn = columns[nextIndex];\n\n\t\t\t\tvar columnName = nextColumn ? nextColumn.name : null;\n\t\t\t\tif(columnName){\n\t\t\t\t\twhile(columnName && !this.getEditorConfig(columnName)){\n\t\t\t\t\t\tcolumnName = this._findEditableCell(start + direction, direction);\n\t\t\t\t\t}\n\t\t\t\t\treturn columnName;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\n\t\t\tgetNextCell: function moveCell(dir){\n\t\t\t\treturn this._findEditableCell(grid.getColumnIndex(this._columnName) + dir, dir);\n\t\t\t},\n\n\t\t\tgetFirstCell: function getFirstCell(){\n\t\t\t\treturn this._findEditableCell(0, 1);\n\t\t\t},\n\n\t\t\tgetLastCell: function getLastCell(){\n\t\t\t\treturn this._findEditableCell(grid.getGridColumns().length - 1, -1);\n\t\t\t},\n\n\t\t\teditNextCell: function nextCell(canChangeRow){\n\t\t\t\tvar cell = this.getNextCell(1);\n\t\t\t\tif(cell){\n\t\t\t\t\tvar nextColumn = this.getNextCell(1);\n\t\t\t\t\tif(nextColumn && this.getEditorConfig(nextColumn)){\n\t\t\t\t\t\tthis.startEdit(this._itemId, nextColumn);\n\t\t\t\t\t}\n\t\t\t\t}else if(canChangeRow && this.moveRow(1)){\n\t\t\t\t\tvar task = this.moveRow(1);\n\t\t\t\t\tcell = this.getFirstCell();\n\t\t\t\t\tif(cell && this.getEditorConfig(cell)){\n\t\t\t\t\t\tthis.startEdit(task, cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\teditPrevCell: function prevCell(canChangeRow){\n\t\t\t\tvar cell = this.getNextCell(-1);\n\t\t\t\tif(cell){\n\t\t\t\t\tvar nextColumn = this.getNextCell(-1);\n\t\t\t\t\tif(nextColumn && this.getEditorConfig(nextColumn)){\n\t\t\t\t\t\tthis.startEdit(this._itemId, nextColumn);\n\t\t\t\t\t}\n\t\t\t\t}else if(canChangeRow && this.moveRow(-1)){\n\t\t\t\t\tvar task = this.moveRow(-1);\n\t\t\t\t\tcell = this.getLastCell();\n\t\t\t\t\tif(cell && this.getEditorConfig(cell)){\n\t\t\t\t\t\tthis.startEdit(task, cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tmoveRow: function moveRow(dir) {\n\t\t\t\tvar moveTask = dir > 0 ? gantt.getNext : gantt.getPrev;\n\t\t\t\tmoveTask = gantt.bind(moveTask, gantt);\n\n\t\t\t\tvar nextItem = moveTask(this._itemId);\n\t\t\t\t// skip readonly rows\n\t\t\t\twhile (gantt.isTaskExists(nextItem) && gantt.isReadonly(gantt.getTask(nextItem))) {\n\t\t\t\t\tnextItem = moveTask(nextItem);\n\t\t\t\t}\n\t\t\t\treturn nextItem;\n\t\t\t},\n\n\t\t\teditNextRow: function nextRow(){\n\t\t\t\tvar row = this.getNextCell(1);\n\t\t\t\tif(row){\n\t\t\t\t\tthis.startEdit(row, this._columnName);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\teditPrevRow: function prevRow(){\n\t\t\t\tvar row = this.getNextCell(-1);\n\t\t\t\tif(row){\n\t\t\t\t\tthis.startEdit(row, this._columnName);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdestructor: function(){\n\t\t\t\thandlers.forEach(function(handlerId){\n\t\t\t\t\tstore.detachEvent(handlerId);\n\t\t\t\t});\n\t\t\t\tstore = null;\n\t\t\t\tthis.hide();\n\t\t\t\tthis.detachAllEvents();\n\t\t\t}\n\t\t};\n\n\t\tutils.mixin(controller, keyboardMapping);\n\t\tutils.mixin(controller, eventBus);\n\n\t\treturn controller;\n\t}\n\n\n\tvar inlineEditController = {\n\t\tinit: initConfigs,\n\t\tcreateEditors: createGridEditors\n\t};\n\n\tutils.mixin(inlineEditController, keyboardMapping);\n\tutils.mixin(inlineEditController, eventBus);\n\n\treturn inlineEditController;\n}\n\n\n\n\nmodule.exports = create;","var utils = require(\"../../../utils/utils\");\nvar ResourceTimeline = require(\"./resource_timeline\");\nvar resourceStoreMixin = require(\"../resource_store_mixin\");\nvar __extends = require(\"../../../utils/extends\");\n\nvar ResourceHistogram = (function (_super) {\n\n\tfunction ResourceHistogram(parent, config, factory, gantt) {\n\t\tvar self = _super.apply(this, arguments) || this;\n\t\tself.$config.bindLinks = null;\n\t\treturn self;\n\t}\n\n\t__extends(ResourceHistogram, _super);\n\n\tutils.mixin(ResourceHistogram.prototype, {\n\t\t_createLayerConfig: function(){\n\t\t\tvar self = this;\n\t\t\tvar taskFilter = function(){\n\t\t\t\treturn self.isVisible();\n\t\t\t};\n\n\t\t\tvar taskLayers = [\n\t\t\t\t{\n\t\t\t\t\trenderer: this.$gantt.$ui.layers.resourceHistogram(),\n\t\t\t\t\tcontainer: this.$task_bars,\n\t\t\t\t\tfilter: [taskFilter]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\trenderer: this.$gantt.$ui.layers.taskBg(),\n\t\t\t\t\tcontainer: this.$task_bg,\n\t\t\t\t\tfilter: [taskFilter]\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tvar linkLayers = [];\n\n\t\t\treturn {\n\t\t\t\ttasks: taskLayers,\n\t\t\t\tlinks: linkLayers\n\t\t\t};\n\t\t}\n\n\t}, true);\n\n\tutils.mixin(ResourceHistogram.prototype, resourceStoreMixin(_super), true);\n\n\treturn ResourceHistogram;\n})(ResourceTimeline);\n\n\nmodule.exports = ResourceHistogram;\n\n\n","var domHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\"),\n\tresourceStoreMixin = require(\"../resource_store_mixin\"),\n\tGrid = require(\"./grid\");\nvar __extends = require(\"../../../utils/extends\");\n\nvar ResourceGrid = (function (_super) {\n\n\tfunction ResourceGrid(parent, config, factory, gantt) {\n\t\treturn _super.apply(this, arguments) || this;\n\t}\n\n\t__extends(ResourceGrid, _super);\n\n\tutils.mixin(ResourceGrid.prototype, {\n\t\tinit: function(){\n\t\t\tif(this.$config.bind === undefined){\n\t\t\t\tthis.$config.bind = this.$getConfig().resource_store;\n\t\t\t}\n\t\t\t_super.prototype.init.apply(this, arguments);\n\t\t},\n\n\t\t_initEvents: function(){\n\t\t\tvar gantt = this.$gantt;\n\t\t\t_super.prototype._initEvents.apply(this, arguments);\n\t\t\tthis._mouseDelegates.delegate(\"click\", \"gantt_row\", gantt.bind(function (e, id, trg) {\n\t\t\t\tvar store = this.$config.rowStore;\n\t\t\t\tif(!store) return true;\n\n\t\t\t\tvar target = domHelpers.locateAttribute(e, this.$config.item_attribute);\n\t\t\t\tif(target){\n\t\t\t\t\tstore.select(target.getAttribute(this.$config.item_attribute));\n\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}, this), this.$grid);\n\n\t\t}\n\n\t}, true);\n\n\tutils.mixin(ResourceGrid.prototype, resourceStoreMixin(ResourceGrid), true);\n\n\treturn ResourceGrid;\n})(Grid);\n\nmodule.exports = ResourceGrid;","var domHelpers = require(\"../../../utils/dom_helpers\");\n\nfunction createResizer(gantt, grid){\n// renders resize elements in the grid header\n\tvar _render_grid_header_resize = function () {\n\t\tvar columns = grid.getGridColumns(),\n\t\t\tconfig = grid.$getConfig(),\n\t\t\twidth = 0,\n\t\t\ttotalWidth = grid.$config.width,\n\t\t\tlineHeigth = config.scale_height;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar col = columns[i];\n\n\t\t\tvar pos;\n\t\t\twidth += col.width;\n\t\t\tif(config.rtl){\n\t\t\t\tpos = totalWidth - width;\n\t\t\t}else{\n\t\t\t\tpos = width;\n\t\t\t}\n\n\t\t\tif (col.resize) {\n\t\t\t\tvar resize_el = document.createElement(\"div\");\n\t\t\t\tresize_el.className = \"gantt_grid_column_resize_wrap\";\n\t\t\t\tresize_el.style.top = \"0px\";\n\t\t\t\tresize_el.style.height = lineHeigth + \"px\";\n\t\t\t\tresize_el.innerHTML = \"
\";\n\t\t\t\tresize_el.setAttribute(config.grid_resizer_column_attribute, i);\n\n\t\t\t\tgantt._waiAria.gridSeparatorAttr(resize_el);\n\n\t\t\t\tgrid.$grid_scale.appendChild(resize_el);\n\n\t\t\t\tresize_el.style.left = Math.max(0, pos) + \"px\";\n\t\t\t}\n\t\t}\n\t};\n\n\tvar _grid_resize = {\n\t\tcolumn_before_start: gantt.bind(function (dnd, obj, e) {\n\t\t\tvar config = grid.$getConfig();\n\n\t\t\tvar el = domHelpers.locateAttribute(e, config.grid_resizer_column_attribute);\n\t\t\tif (!el) return false;\n\n\t\t\tvar column_index = this.locate(e, config.grid_resizer_column_attribute),\n\t\t\t\tcolumn = grid.getGridColumns()[column_index];\n\n\t\t\tif (grid.callEvent(\"onColumnResizeStart\", [column_index, column]) === false)\n\t\t\t\treturn false;\n\t\t}, gantt),\n\n\t\tcolumn_after_start: gantt.bind(function (dnd, obj, e) {\n\t\t\tvar config = grid.$getConfig();\n\n\t\t\tvar column_index = this.locate(e, config.grid_resizer_column_attribute);\n\t\t\tdnd.config.marker.innerHTML = \"\";\n\t\t\tdnd.config.marker.className += \" gantt_grid_resize_area\";\n\t\t\tdnd.config.marker.style.height = grid.$grid.offsetHeight + \"px\";\n\t\t\tdnd.config.marker.style.top = \"0px\";\n\t\t\tdnd.config.drag_index = column_index;\n\n\t\t}, gantt),\n\n\t\tcolumn_drag_move: gantt.bind(function (dnd, obj, e) {\n\t\t\tvar config = grid.$getConfig();\n\n\t\t\tvar dd = dnd.config,\n\t\t\t\tcolumns = grid.getGridColumns();\n\t\t\tvar index = parseInt(dd.drag_index, 10);\n\t\t\tvar target_column = columns[index];\n\t\t\tvar\tpos = domHelpers.getNodePosition(grid.$grid_scale),\n\t\t\t\tpointerPosition = parseInt(dd.marker.style.left, 10),\n\t\t\t\tminPointerPosition = target_column.min_width ? target_column.min_width : config.min_grid_column_width,\n\t\t\t\tmaxPointerPosition = grid.$grid_data.offsetWidth,// - config.min_grid_column_width * (columns.length - dd.drag_index - 2),// 1 for current column + 1 for last column\n\t\t\t\tmarkerStartPosition = 0,\n\t\t\t\tmarker_width = 0;\n\n\t\t\t\n\t\t/*\tif(config.rtl){\n\t\t\t\tindex = columns.length - 1 - index;\n\t\t\t\tcolumns = columns.reverse();\n\t\t\t}*/\n\n\t\t\tif(!config.rtl){\n\t\t\t\tpointerPosition -= pos.x - 1;\n\t\t\t}else{\n\t\t\t\tpointerPosition = (pos.x + pos.width - 1) - pointerPosition;\n\t\t\t}\n\n\t\t\t//pointerPosition -= pos.x - 1;\n\t\t\tfor (var i = 0; i < index; i++) {\n\t\t\t\tminPointerPosition += columns[i].width;\n\t\t\t\tmarkerStartPosition += columns[i].width;\n\t\t\t}\n\n\t\t\tif (pointerPosition < minPointerPosition) {\n\t\t\t\tpointerPosition = minPointerPosition;\n\t\t\t}\n\n\t\t\tif (config.keep_grid_width) {\n\t\t\t\tvar limit_max = 0;\n\t\t\t\tfor (var i=index+1; i maxPointerPosition)\n\t\t\t\t\tpointerPosition = maxPointerPosition;\n\t\t\t} else if (!grid.$config.scrollable) {\n\t\t\t\tvar targetWidth = pointerPosition;\n\t\t\t\tvar rightColumnsWidth = 0;\n\t\t\t\tfor (var i=index+1; i gantt.$container.offsetWidth){\n\t\t\t\t\tpointerPosition = gantt.$container.offsetWidth - rightColumnsWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdd.left = pointerPosition - 1;// -1 for border\n\n\t\t\tmarker_width = Math.abs(pointerPosition - markerStartPosition);\n\n\t\t\t// column.max_width - maximum width of the column, user defined\n\t\t\tif (target_column.max_width && marker_width > target_column.max_width)\n\t\t\t\tmarker_width = target_column.max_width;\n\n\t\t\tif(config.rtl){\n\t\t\t\tmarkerStartPosition = (pos.width - markerStartPosition) + 2 - marker_width;\n\t\t\t}\n\t\t\tdd.marker.style.top = pos.y + \"px\";\n\t\t\tdd.marker.style.left = pos.x - 1 + markerStartPosition + \"px\";\n\t\t\tdd.marker.style.width = marker_width + \"px\";\n\n\t\t\tgrid.callEvent(\"onColumnResize\", [index, columns[index], marker_width - 1]);\n\t\t\treturn true;\n\t\t}, gantt),\n\n\t\tcolumn_drag_end: gantt.bind(function (dnd, obj, e) {\n\t\t\tvar config = grid.$getConfig();\n\t\t\tvar columns = grid.getGridColumns(),\n\t\t\t\tcolumns_width = 0,\n\t\t\t\tindex = parseInt(dnd.config.drag_index, 10),\n\t\t\t\ttarget_column = columns[index];\n\n\t\t\t// var colIndex = index;\n\t\t\t/*if(config.rtl){\n\t\t\t\tcolIndex = columns.length - 1 - target_index;\n\t\t\t\tcolumns = columns.reverse();\n\t\t\t}*/\n\n\t\t\tfor (var i = 0; i < index; i++) {\n\t\t\t\tcolumns_width += columns[i].width;\n\t\t\t}\n\n\t\t\tvar final_width = (target_column.min_width && (dnd.config.left - columns_width) < target_column.min_width) ?\n\t\t\t\ttarget_column.min_width : (dnd.config.left - columns_width);\n\n\t\t\tif (target_column.max_width && target_column.max_width < final_width) // TODO: probably can be omitted\n\t\t\t\tfinal_width = target_column.max_width;\n\n\t\t\tif (grid.callEvent(\"onColumnResizeEnd\", [index, target_column, final_width]) === false)\n\t\t\t\treturn;\n\n\t\t\tif (target_column.width == final_width)\n\t\t\t\treturn;\n\n\t\t\ttarget_column.width = final_width;\n\n\t\t\tif (config.keep_grid_width) {\n\t\t\t\tcolumns_width = config.grid_width;\n\t\t\t} else {\n\t\t\t\t// in other case we set a new grid width and call gantt render\n\t\t\t\tfor (var i = index, l = columns.length; i < l; i++) {\n\t\t\t\t\tcolumns_width += columns[i].width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgrid.callEvent(\"onColumnResizeComplete\", [columns, grid._setColumnsWidth(columns_width, index)]);\n\n\t\t\tif(!grid.$config.scrollable){\n\t\t\t\tgantt.$layout._syncCellSizes(grid.$config.group, config.grid_width);\n\t\t\t}\n\t\t\t//grid.callEvent(\"onColumnResizeComplete\", [columns, columns_width]);\n\n\t\t\tthis.render();\n\t\t}, gantt)\n\t};\n\n// calls the initialization of the D'n'D events for resize elements\n\tvar _init_resize = function () {\n\t\tvar DnD = gantt.$services.getService(\"dnd\");\n\n\t\tvar config = grid.$getConfig();\n\n\t\tvar dnd = new DnD(grid.$grid_scale, {updates_per_second: 60});\n\t\tif (gantt.defined(config.dnd_sensitivity))\n\t\t\tdnd.config.sensitivity = config.dnd_sensitivity;\n\n\t\tdnd.attachEvent(\"onBeforeDragStart\", function (obj, e) {\n\t\t\treturn _grid_resize.column_before_start(dnd, obj, e);\n\t\t});\n\t\tdnd.attachEvent(\"onAfterDragStart\", function (obj, e) {\n\t\t\treturn _grid_resize.column_after_start(dnd, obj, e);\n\t\t});\n\t\tdnd.attachEvent(\"onDragMove\", function (obj, e) {\n\t\t\treturn _grid_resize.column_drag_move(dnd, obj, e);\n\t\t});\n\t\tdnd.attachEvent(\"onDragEnd\", function (obj, e) {\n\t\t\treturn _grid_resize.column_drag_end(dnd, obj, e);\n\t\t});\n\n\t};\n\n\treturn {\n\t\tinit: _init_resize,\n\t\tdoOnRender: _render_grid_header_resize\n\t};\n}\n\nmodule.exports = createResizer;","var utils = require(\"../../../utils/utils\"),\n\tenv = require(\"../../../utils/env\");\n\nvar createStaticBgHelper = function(utils, env){\n\n\tvar canvasBgCache = {};\n\tvar staticBgStyleId = \"gantt-static-bg-styles-\" + utils.uid();\n\n\tfunction renderBgCanvas(targetNode, config, scale, totalHeight) {\n\t\tif (!config.static_background) return;\n\n\t\tvar canvas = document.createElement(\"canvas\");\n\t\tif (!canvas.getContext) return; // if canvas is not supported (for IE8)\n\n\t\t// clear previous bg data\n\t\ttargetNode.innerHTML = \"\";\n\n\t\tvar styleParams = getCellStyles(targetNode);\n\t\tvar png = createBackgroundTiles(styleParams, config, scale);\n\t\tvar bgDivs = createBgDivs(png, config, scale, totalHeight);\n\n\t\tvar fragment = document.createDocumentFragment();\n\n\t\tbgDivs.forEach(function (div) {\n\t\t\tfragment.appendChild(div);\n\t\t});\n\n\t\ttargetNode.appendChild(fragment);\n\t}\n\n\tfunction getColumnWidths(scale) {\n\t\tvar widths = scale.width;\n\t\tvar differentWidths = {};\n\t\tfor (var i = 0; i < widths.length; i++) {\n\t\t\tif (widths[i] * 1)\n\t\t\t\tdifferentWidths[widths[i]] = true;\n\t\t}\n\t\treturn differentWidths;\n\t}\n\n\tfunction parseRgb(rgbCss) {\n\t\tvar result = /^rgba?\\(([\\d]{1,3}), *([\\d]{1,3}), *([\\d]{1,3}) *(,( *[\\d.]+ *))?\\)$/i.exec(rgbCss);\n\t\treturn result ? {\n\t\t\tr: result[1] * 1,\n\t\t\tg: result[2] * 1,\n\t\t\tb: result[3] * 1,\n\t\t\ta: (result[5] * 255) || 255\n\t\t} : null;\n\t}\n\n\tfunction getUrlFromCache(key) {\n\t\treturn canvasBgCache[key] || null;\n\t}\n\n\tfunction getHashKey(width, height, cellStyles) {\n\t\treturn (width + '' + height + cellStyles.bottomBorderColor + cellStyles.rightBorderColor).replace(/[^\\w\\d]/g, '');\n\t}\n\n\tfunction getStyleElement() {\n\t\tvar style = document.getElementById(staticBgStyleId);\n\n\t\tif (!style) {\n\t\t\tstyle = document.createElement(\"style\");\n\t\t\tstyle.id = staticBgStyleId;\n\t\t\tdocument.body.appendChild(style);\n\t\t}\n\t\treturn style;\n\t}\n\n\tfunction cleanup() {\n\t\tvar style = document.getElementById(staticBgStyleId);\n\t\tif (style && style.parentNode) {\n\t\t\tstyle.parentNode.removeChild(style);\n\t\t}\n\t}\n\n\tfunction cacheUrl(key, url) {\n\t\tcanvasBgCache[key] = url;\n\t}\n\n\tfunction generateBgUrl(width, height, cellStyles) {\n\t\t// use relatively big bg image about 500*500px in order to reduce misalignments due browser zoom\n\t\tvar cols = Math.floor(500 / width) || 1;\n\t\tvar rows = Math.floor(500 / height) || 1;\n\n\t\tvar canvas = document.createElement(\"canvas\");\n\t\tcanvas.height = height * rows;\n\t\tcanvas.width = width * cols;\n\n\t\tvar context = canvas.getContext(\"2d\");\n\n\t\tdrawGrid(height, width, rows, cols, context, cellStyles);\n\n\t\treturn canvas.toDataURL();\n\n\t\tfunction drawGrid(rowHeight, colWidth, rows, cols, context, styles) {\n\t\t\t// paint pixels manually instead of using lineTo in order to prevent canvas aliasing\n\t\t\tvar image = context.createImageData(colWidth * cols, rowHeight * rows);\n\t\t\timage.imageSmoothingEnabled = false;\n\n\t\t\tvar verticalLineWidth = styles.rightBorderWidth * 1;\n\t\t\tvar verticalLineColor = parseRgb(styles.rightBorderColor);\n\n\t\t\tvar x = 0,\n\t\t\t\ty = 0,\n\t\t\t\tw = 0;\n\n\t\t\tfor (var col = 1; col <= cols; col++) {\n\t\t\t\tx = col * colWidth - 1;\n\t\t\t\tfor (w = 0; w < verticalLineWidth; w++) {\n\t\t\t\t\tfor (y = 0; y < rowHeight * rows; y++) {\n\t\t\t\t\t\tdrawDot(x - w, y, verticalLineColor, image);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar horizontalLineWidth = styles.bottomBorderWidth * 1;\n\t\t\tvar horizontalLineColor = parseRgb(styles.bottomBorderColor);\n\n\t\t\ty = 0;\n\t\t\tfor (var row = 1; row <= rows; row++) {\n\t\t\t\ty = row * rowHeight - 1;\n\t\t\t\tfor (w = 0; w < horizontalLineWidth; w++) {\n\t\t\t\t\tfor (x = 0; x < colWidth * cols; x++) {\n\t\t\t\t\t\tdrawDot(x, y - w, horizontalLineColor, image);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontext.putImageData(image, 0, 0);\n\t\t}\n\n\t\tfunction drawDot(x, y, color, matrix) {\n\t\t\tvar rowLength = width * cols;\n\n\t\t\tvar index = (y * rowLength + x) * 4;\n\n\t\t\tmatrix.data[index] = color.r;\n\t\t\tmatrix.data[index + 1] = color.g;\n\t\t\tmatrix.data[index + 2] = color.b;\n\t\t\tmatrix.data[index + 3] = color.a;\n\t\t}\n\t}\n\n\tfunction getCssClass(key) {\n\t\treturn \"gantt-static-bg-\" + key;\n\t}\n\n\tfunction createBackgroundTiles(cellStyles, config, scale) {\n\t\tvar data = {};\n\t\tvar widths = getColumnWidths(scale),\n\t\t\theight = config.row_height;\n\n\t\tvar styleHTML = \"\";\n\t\tfor (var i in widths) {\n\n\t\t\tvar width = i * 1;\n\t\t\tvar key = getHashKey(width, height, cellStyles);\n\t\t\tvar cachedUrl = getUrlFromCache(key);\n\n\t\t\tif (!cachedUrl) {\n\t\t\t\tvar bgImage = generateBgUrl(width, height, cellStyles);\n\t\t\t\tcacheUrl(key, bgImage);\n\t\t\t\tstyleHTML += \".\" + getCssClass(key) + \"{ background-image: url('\" + bgImage + \"');}\";\n\t\t\t}\n\n\t\t\tdata[i] = getCssClass(key);\n\t\t}\n\n\t\tif (styleHTML) {\n\t\t\tvar style = getStyleElement();\n\t\t\tstyle.innerHTML += styleHTML;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction createBgDivs(bgTiles, config, scale, dataHeight) {\n\t\tvar divs = [];\n\t\tvar tile,\n\t\t\tprevWidth = 0,\n\t\t\tprevCell;\n\n\t\tvar widths = scale.width.filter(function (i) {\n\t\t\treturn !!i;\n\t\t});\n\n\t\tvar leftPos = 0;\n\n\t\t//TODO: fixme\n\t\t// bg image misalignments on horizontal scroll on very large time scales, especially in IE/Edge browsers\n\t\t// limiting max tile width seems to solve the issue, but can increase rendering time\n\t\tvar maxTileSize = 100000;\n\t\tif (env.isIE) {\n\t\t\t// special case for IE11 on win7x and probably 8x\n\t\t\tvar appVersion = navigator.appVersion || \"\";\n\t\t\tif (appVersion.indexOf(\"Windows NT 6.2\") != -1 ||\n\t\t\t\tappVersion.indexOf(\"Windows NT 6.1\") != -1 ||\n\t\t\t\tappVersion.indexOf(\"Windows NT 6.0\") != -1) {\n\n\t\t\t\tmaxTileSize = 20000;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < widths.length; i++) {\n\t\t\t//var currentWidth = cells[i].clientWidth;\n\t\t\tvar cell = widths[i];\n\n\t\t\tif ((cell != prevCell && prevCell !== undefined) || (i == widths.length - 1) || (prevWidth > maxTileSize)) {\n\n\t\t\t\tvar totalHeight = dataHeight,\n\t\t\t\t\tcurrentTop = 0,\n\t\t\t\t\trowHeight = Math.floor(maxTileSize / config.row_height) * config.row_height;\n\n\t\t\t\tvar tileWidth = prevWidth;\n\n\t\t\t\twhile (totalHeight > 0) {\n\t\t\t\t\tvar currentHeight = Math.min(totalHeight, rowHeight);\n\t\t\t\t\ttotalHeight -= rowHeight;\n\n\t\t\t\t\ttile = document.createElement(\"div\");\n\n\t\t\t\t\ttile.style.height = currentHeight + \"px\";\n\t\t\t\t\ttile.style.position = \"absolute\";\n\t\t\t\t\ttile.style.top = currentTop + \"px\";\n\t\t\t\t\ttile.style.left = leftPos + \"px\";\n\t\t\t\t\ttile.style.pointerEvents = \"none\";\n\n\t\t\t\t\ttile.style.whiteSpace = \"no-wrap\";\n\t\t\t\t\ttile.className = bgTiles[prevCell || cell];\n\n\t\t\t\t\t// if last - short by 1 px (bug fix)\n\t\t\t\t\tif (i == widths.length - 1) {\n\t\t\t\t\t\ttileWidth = cell + tileWidth - 1;\n\t\t\t\t\t}\n\t\t\t\t\ttile.style.width = tileWidth + \"px\";\n\n\t\t\t\t\tdivs.push(tile);\n\t\t\t\t\tcurrentTop += currentHeight;\n\t\t\t\t}\n\t\t\t\tprevWidth = 0;\n\t\t\t\tleftPos += tileWidth;\n\n\t\t\t\t//cell = 0;\n\t\t\t}\n\t\t\tif (cell) {\n\t\t\t\tprevWidth += cell;\n\t\t\t\tprevCell = cell;\n\t\t\t}\n\n\t\t}\n\n\t\treturn divs;\n\t}\n\n\n\tfunction createProbeElement(){\n\t\tvar cell = document.createElement(\"div\");\n\t\tcell.className = \"gantt_task_cell\";\n\t\tvar row = document.createElement(\"div\");\n\t\trow.className = \"gantt_task_row\";\n\t\trow.appendChild(cell);\n\t\treturn row;\n\t}\n\tfunction getCellStyles(targetNode) {\n\t\t// creating temp DOM structure for resolving style parameters. Will be removed after calculating.\n\t\t// Add two rows and read styles from the first one. \n\t\t// Some skins (e.g. material) define special styles for the last row, so we add a couple and read styles from one which is not the :last-child;\n\t\tvar firstRow = createProbeElement();\n\t\tvar secondRow = createProbeElement();\n\n\t\ttargetNode.appendChild(firstRow);\n\t\ttargetNode.appendChild(secondRow);\n\n\t\tvar firstRowCell = firstRow.firstChild;\n\n\t\tvar rowStyles = getComputedStyle(firstRow),\n\t\t\tcellStyles = getComputedStyle(firstRowCell);\n\n\t\tvar params = {\n\t\t\tbottomBorderWidth: rowStyles.getPropertyValue(\"border-bottom-width\").replace(\"px\", \"\"),\n\t\t\trightBorderWidth: cellStyles.getPropertyValue(\"border-right-width\").replace(\"px\", \"\"),\n\t\t\tbottomBorderColor: rowStyles.getPropertyValue(\"border-bottom-color\"),\n\t\t\trightBorderColor: cellStyles.getPropertyValue(\"border-right-color\")\n\t\t};\n\n\t\ttargetNode.removeChild(firstRow);\n\t\ttargetNode.removeChild(secondRow);\n\n\t\treturn params;\n\t}\n\n\treturn {\n\t\trender: renderBgCanvas,\n\t\tdestroy: cleanup\n\t};\n};\n\nmodule.exports = {\n\tcreate: function(){\n\t\treturn createStaticBgHelper(utils, env);\n\t}\n};\n\n","var __extends = require(\"../../../utils/extends\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\"),\n\tenv = require(\"../../../utils/env\"),\n\tCell = require(\"./cell\");\n\nvar ScrollbarCell = (function (_super) {\n\t\"use strict\";\n\n\t__extends(ScrollbarCell, _super);\n\tfunction ScrollbarCell(parent, config, factory, gantt) {\n\n\t\tvar _this = _super.apply(this, arguments) || this;\n\t\tthis.$config = utils.mixin(config, {scroll: \"x\"});\n\t\t_this._scrollHorizontalHandler = utils.bind(_this._scrollHorizontalHandler, _this);\n\t\t_this._scrollVerticalHandler = utils.bind(_this._scrollVerticalHandler, _this);\n\t\t_this._outerScrollVerticalHandler = utils.bind(_this._outerScrollVerticalHandler, _this);\n\t\t_this._outerScrollHorizontalHandler = utils.bind(_this._outerScrollHorizontalHandler, _this);\n\t\t_this._mouseWheelHandler = utils.bind(_this._mouseWheelHandler, _this);\n\n\t\tthis.$config.hidden = true;\n\t\tvar size = gantt.config.scroll_size;\n\n\t\tif(gantt.env.isIE){\n\t\t\t// full element height/width must be bigger than just a browser scrollbar,\n\t\t\t// otherwise the scrollbar element won't be scrolled on click\n\t\t\tsize += 1;\n\t\t}\n\n\t\tif(this._isHorizontal()){\n\t\t\t_this.$config.height = size;\n\t\t\t_this.$parent.$config.height = size;\n\t\t}else{\n\t\t\t_this.$config.width = size;\n\t\t\t_this.$parent.$config.width = size;\n\t\t}\n\n\t\tthis.$config.scrollPosition = 0;\n\n\t\t_this.$name = \"scroller\";\n\t\treturn _this;\n\t}\n\n\tScrollbarCell.prototype.init = function(container){\n\t\tcontainer.innerHTML = this.$toHTML();\n\t\tthis.$view = container.firstChild;\n\n\t\tif(!this.$view){\n\t\t\tthis.init();\n\t\t}\n\t\tif(this._isVertical()){\n\t\t\tthis._initVertical();\n\t\t}else{\n\t\t\tthis._initHorizontal();\n\t\t}\n\t\tthis._initMouseWheel();\n\t\tthis._initLinkedViews();\n\t};\n\n\tScrollbarCell.prototype.$toHTML = function () {\n\t\tvar className = this._isHorizontal() ? \"gantt_hor_scroll\" : \"gantt_ver_scroll\";\n\t\treturn \"
\";\n\t};\n\n\tScrollbarCell.prototype._getRootParent = function(){\n\t\tvar parent = this.$parent;\n\t\twhile(parent && parent.$parent){\n\t\t\tparent = parent.$parent;\n\t\t}\n\t\tif(parent){\n\t\t\treturn parent;\n\t\t}\n\t};\n\n\n\tfunction eachCell(root, res){\n\t\tres.push(root);\n\t\tif(root.$cells){\n\t\t\tfor(var i = 0; i < root.$cells.length; i++){\n\t\t\t\teachCell(root.$cells[i], res);\n\t\t\t}\n\t\t}\n\t}\n\tScrollbarCell.prototype._eachView = function(){\n\t\tvar res = [];\n\t\teachCell(this._getRootParent(), res);\n\t\treturn res;\n\t};\n\n\tScrollbarCell.prototype._getLinkedViews = function(){\n\t\tvar views = this._eachView();\n\t\tvar res = [];\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\tif(views[i].$config && ((this._isVertical() && views[i].$config.scrollY == this.$id) || (this._isHorizontal() && views[i].$config.scrollX == this.$id)) ){\n\t\t\t\tres.push(views[i]);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t};\n\n\n\tScrollbarCell.prototype._initHorizontal = function(){\n\t\tthis.$scroll_hor = this.$view;\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollHorizontalHandler);\n\n\t};\n\n\tScrollbarCell.prototype._initLinkedViews = function(){\n\t\tvar views = this._getLinkedViews();\n\t\tvar css = this._isVertical() ?\"gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical\" : \"gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal\";\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\t//views[i].$config.css = [views[i].$config.css || \"\", css].join(\" \");\n\t\t\tdomHelpers.addClassName(views[i].$view || views[i].getNode(), css);\n\t\t}\n\t};\n\n\tScrollbarCell.prototype._initVertical = function(){\n\t\tthis.$scroll_ver = this.$view;\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollVerticalHandler);\n\t};\n\n\tScrollbarCell.prototype._updateLinkedViews = function(){\n\t};\n\n\tScrollbarCell.prototype._initMouseWheel = function(){\n\t\tvar ff = env.isFF;\n\t\tif (ff)\n\t\t\tthis.$domEvents.attach(this._getRootParent().$view, \"wheel\", this._mouseWheelHandler);\n\t\telse\n\t\t\tthis.$domEvents.attach(this._getRootParent().$view, \"mousewheel\", this._mouseWheelHandler);\n\t};\n\n\n\n\n\tScrollbarCell.prototype.scrollHorizontally = function(left){\n\t\tif(this._scrolling) return;\n\t\tthis._scrolling = true;\n\n\t\tthis.$scroll_hor.scrollLeft = left;\n\t\tthis.$config.codeScrollLeft = left;\n\t\tleft = this.$scroll_hor.scrollLeft;\n\n\t\tvar views = this._getLinkedViews();\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\tif(views[i].scrollTo){\n\t\t\t\tviews[i].scrollTo(left, undefined);\n\t\t\t}\n\t\t}\n\t\tvar oldSize = this.$config.scrollPosition;\n\t\tthis.$config.scrollPosition = left;\n\t\tthis.callEvent(\"onScroll\", [oldSize, left, this.$config.scroll]);\n\t\tthis._scrolling = false;\n\t};\n\tScrollbarCell.prototype.scrollVertically = function(top){\n\t\tif(this._scrolling) return;\n\t\tthis._scrolling = true;\n\n\t\tthis.$scroll_ver.scrollTop = top;\n\t\ttop = this.$scroll_ver.scrollTop;\n\n\t\tvar views = this._getLinkedViews();\n\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\tif(views[i].scrollTo){\n\t\t\t\tviews[i].scrollTo(undefined, top);\n\t\t\t}\n\t\t}\n\t\tvar oldSize = this.$config.scrollPosition;\n\t\tthis.$config.scrollPosition = top;\n\t\tthis.callEvent(\"onScroll\", [oldSize, top, this.$config.scroll]);\n\t\tthis._scrolling = false;\n\t};\n\n\tScrollbarCell.prototype._isVertical = function(){\n\t\treturn this.$config.scroll == \"y\";\n\t};\n\tScrollbarCell.prototype._isHorizontal = function(){\n\t\treturn this.$config.scroll == \"x\";\n\t};\n\tScrollbarCell.prototype._scrollHorizontalHandler = function (e) {\n\t\tif(this._isVertical() || this._scrolling){\n\t\t\treturn;\n\t\t}\n\n\t\t//in safari we can catch previous onscroll after setting new value from mouse-wheel event\n\t\t//set delay to prevent value drifiting\n\t\tif ((new Date()) - ( this._wheel_time || 0 ) < 100) return true;\n\t\tif (this.$gantt._touch_scroll_active) return;\n\t\tvar left = this.$scroll_hor.scrollLeft;\n\n\t\tthis.scrollHorizontally(left);\n\n\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\n\t};\n\tScrollbarCell.prototype._outerScrollHorizontalHandler = function(e){\n\t\tif(this._isVertical()){\n\t\t\treturn;\n\t\t}\n\t};\n\n\tScrollbarCell.prototype.show = function(){\n\t\tthis.$parent.show();\n\t};\n\tScrollbarCell.prototype.hide = function(){\n\t\tthis.$parent.hide();\n\t};\n\n\tScrollbarCell.prototype._getScrollSize = function(){\n\t\tvar scrollSize = 0;\n\t\tvar outerSize = 0;\n\t\tvar isHorizontal = this._isHorizontal();\n\n\t\tvar linked = this._getLinkedViews();\n\t\tvar view;\n\t\tvar scrollProperty = isHorizontal ? \"scrollWidth\" : \"scrollHeight\",\n\t\t\tinnerSizeProperty = isHorizontal ? \"contentX\" : \"contentY\";\n\t\tvar outerProperty = isHorizontal ? \"x\" : \"y\";\n\t\tvar offset = this._getScrollOffset();\n\n\t\tfor(var i = 0; i < linked.length; i++){\n\t\t\tview = linked[i];\n\t\t\tif(!(view && view.$content && view.$content.getSize && !view.$config.hidden)) continue;\n\n\t\t\tvar sizes = view.$content.getSize();\n\t\t\tvar cellScrollSize;\n\t\t\tif(sizes.hasOwnProperty(scrollProperty)){\n\t\t\t\tcellScrollSize = sizes[scrollProperty];\n\t\t\t}else{\n\t\t\t\tcellScrollSize = sizes[innerSizeProperty];\n\t\t\t}\n\n\t\t\tif(offset){\n\t\t\t\t// precalculated vertical/horizontal offsets of scrollbar to emulate 4.x look\n\t\t\t\tif(sizes[innerSizeProperty] > sizes[outerProperty] && sizes[innerSizeProperty] > scrollSize && (cellScrollSize > (sizes[outerProperty] - offset + 2))){\n\t\t\t\t\tscrollSize = cellScrollSize + (isHorizontal ? 0 : 2);\n\t\t\t\t\touterSize = sizes[outerProperty];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tvar nonScrollableSize = Math.max(sizes[innerSizeProperty] - cellScrollSize, 0);\n\t\t\t\tvar scrollableViewPortSize = Math.max(sizes[outerProperty] - nonScrollableSize, 0);\n\t\t\t\tcellScrollSize = cellScrollSize + nonScrollableSize;\n\n\t\t\t\tif(cellScrollSize > scrollableViewPortSize && (cellScrollSize > scrollSize) ){\n\t\t\t\t\t//|| (cellScrollSize === scrollSize && sizes[outerProperty] < outerSize) // same scroll width but smaller scrollable view port\n\n\t\t\t\t\tscrollSize = cellScrollSize;\n\t\t\t\t\touterSize = sizes[outerProperty];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\touterScroll: outerSize,\n\t\t\tinnerScroll: scrollSize\n\t\t};\n\t};\n\n\tScrollbarCell.prototype.scroll = function(position){\n\t\tif(this._isHorizontal()){\n\t\t\tthis.scrollHorizontally(position);\n\t\t}else{\n\t\t\tthis.scrollVertically(position);\n\t\t}\n\t};\n\n\tScrollbarCell.prototype.getScrollState = function(){\n\t\treturn {\n\t\t\tvisible: this.isVisible(),\n\t\t\tdirection: this.$config.scroll,\n\t\t\tsize: this.$config.outerSize,\n\t\t\tscrollSize: this.$config.scrollSize || 0,\n\t\t\tposition: this.$config.scrollPosition || 0\n\t\t};\n\t};\n\n\tScrollbarCell.prototype.setSize = function(width, height){\n\t\t_super.prototype.setSize.apply(this, arguments);\n\n\t\tvar scrollSizes = this._getScrollSize();\n\n\t\tvar ownSize = (this._isVertical() ? height : width) - this._getScrollOffset() + (this._isHorizontal() ? 1 : 0);\n\n\t\tif(scrollSizes.innerScroll && ownSize > scrollSizes.outerScroll){\n\t\t\tscrollSizes.innerScroll += (ownSize - scrollSizes.outerScroll);\n\t\t}\n\t\tthis.$config.scrollSize = scrollSizes.innerScroll;\n\n\t\tthis.$config.width = width;\n\t\tthis.$config.height = height;\n\t\tthis._setScrollSize(scrollSizes.innerScroll);\n\t};\n\n\tScrollbarCell.prototype.isVisible = function(){\n\t\treturn !!(this.$parent && this.$parent.$view.parentNode);\n\t};\n\n\tScrollbarCell.prototype.shouldShow = function(){\n\t\tvar scrollSizes = this._getScrollSize();\n\t\tif(!scrollSizes.innerScroll && (this.$parent && this.$parent.$view.parentNode)){\n\t\t\treturn false;\n\t\t}else if(scrollSizes.innerScroll && !(this.$parent && this.$parent.$view.parentNode)){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tScrollbarCell.prototype.shouldHide = function(){\n\t\tvar scrollSizes = this._getScrollSize();\n\t\tif(!scrollSizes.innerScroll && (this.$parent && this.$parent.$view.parentNode)){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t};\n\n\n\tScrollbarCell.prototype.toggleVisibility = function(){\n\t\tif(this.shouldHide()){\n\t\t\tthis.hide();\n\t\t}else if(this.shouldShow()){\n\t\t\tthis.show();\n\t\t}\n\t};\n\t\n\tScrollbarCell.prototype._getScaleOffset = function(view){\n\t\tvar offset = 0;\n\t\tif(view && (view.$config.view == \"timeline\" || view.$config.view == \"grid\")){\n\t\t\toffset = view.$content.$getConfig().scale_height;\n\t\t}\n\t\treturn offset;\n\t};\n\n\tScrollbarCell.prototype._getScrollOffset = function(){\n\t\tvar offset = 0;\n\t\tif(this._isVertical()){\n\t\t\tvar parentLayout = this.$parent.$parent;\n\t\t\toffset = Math.max(\n\t\t\t\tthis._getScaleOffset(parentLayout.getPrevSibling(this.$parent.$id)),\n\t\t\t\tthis._getScaleOffset(parentLayout.getNextSibling(this.$parent.$id))\n\t\t\t\t);\n\t\t}else{\n\t\t\tvar linked = this._getLinkedViews();\n\n\t\t\tfor (var i = 0; i < linked.length; i++) {\n\t\t\t\tvar view = linked[i],\n\t\t\t\t\tvparent = view.$parent;\n\t\t\t\tvar cells = vparent.$cells;\n\n\t\t\t\tvar last = cells[cells.length - 1];\n\n\t\t\t\tif (last && last.$config.view == \"scrollbar\" && last.$config.hidden === false) {\n\t\t\t\t\toffset = last.$config.width;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\treturn offset || 0;\n\t};\n\n\tScrollbarCell.prototype._setScrollSize = function(size){\n\t\tvar property = this._isHorizontal() ? \"width\" : \"height\";\n\t\tvar scrollbar = this._isHorizontal() ? this.$scroll_hor : this.$scroll_ver;\n\n\t\tvar offset = this._getScrollOffset();\n\n\t\tvar node = scrollbar.firstChild;\n\n\t\tif(offset){\n\t\t\tif(this._isVertical()){\n\n\t\t\t\tthis.$config.outerSize = (this.$config.height - offset + 3);\n\t\t\t\tscrollbar.style.height = this.$config.outerSize + \"px\";\n\t\t\t\tscrollbar.style.top = (offset-1) + \"px\";\n\t\t\t\tdomHelpers.addClassName(scrollbar, this.$parent._borders.top);\n\t\t\t\tdomHelpers.addClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\n\t\t\t}else{\n\t\t\t\tthis.$config.outerSize = (this.$config.width - offset + 1);\n\t\t\t\tscrollbar.style.width = this.$config.outerSize + \"px\";\n\t\t\t\t//domHelpers.addClassName(scrollbar, this.$parent._borders.right);\n\t\t\t}\n\t\t}else{\n\t\t\tscrollbar.style.top = \"auto\";\n\t\t\tdomHelpers.removeClassName(scrollbar, this.$parent._borders.top);\n\t\t\tdomHelpers.removeClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\n\t\t\tthis.$config.outerSize = this.$config.height;\n\t\t}\n\n\t\tnode.style[property] = size + \"px\";\n\t};\n\n\tScrollbarCell.prototype._scrollVerticalHandler = function (e) {\n\t\tif(this._scrollHorizontalHandler() || this._scrolling){\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.$gantt._touch_scroll_active) return;\n\t\tvar top = this.$scroll_ver.scrollTop;\n\t\tvar prev = this._oldTop;\n\t\tif(top == prev) return;\n\n\t\tthis.scrollVertically(top);\n\n\t\tthis._oldTop = this.$scroll_ver.scrollTop;\n\n\t};\n\tScrollbarCell.prototype._outerScrollVerticalHandler = function(e){\n\t\tif(this._scrollHorizontalHandler()){\n\t\t\treturn;\n\t\t}\n\t};\n\n\tScrollbarCell.prototype._checkWheelTarget = function(targetNode){\n\t\tvar connectedViews = this._getLinkedViews().concat(this);\n\n\t\tfor(var i = 0; i < connectedViews.length; i++){\n\t\t\tvar node = connectedViews[i].$view;\n\t\t\tif(domHelpers.isChildOf(targetNode, node)){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tScrollbarCell.prototype._mouseWheelHandler = function(e){\n\t\tvar target = e.target || e.srcElement;\n\n\t\tif(!this._checkWheelTarget(target))\n\t\t\treturn;\n\n\t\tthis._wheel_time = new Date();\n\n\t\tvar res = {};\n\t\tvar ff = env.isFF;\n\t\tvar wx = ff ? (e.deltaX*-20) : e.wheelDeltaX*2;\n\t\tvar wy = ff ? (e.deltaY*-40) : e.wheelDelta;\n\n\t\tif(e.shiftKey && !(e.deltaX || e.wheelDeltaX)){\n\t\t\t// shift+mousewheel for horizontal scroll\n\t\t\twx = wy*2;\n\t\t\twy = 0;\n\t\t}\n\n\t\tif (wx && Math.abs(wx) > Math.abs(wy)){\n\t\t\tif(this._isVertical()){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(res.x) return true;//no horisontal scroll, must not block scrolling\n\t\t\tif(!this.$scroll_hor || !this.$scroll_hor.offsetWidth) return true;\n\n\t\t\tvar dir = wx/-40;\n\t\t\tvar oldLeft = this._oldLeft;\n\t\t\tvar left = oldLeft+dir*30;\n\t\t\tthis.scrollHorizontally(left);\n\t\t\tthis.$scroll_hor.scrollLeft = left;\n\t\t\t// not block scroll if position hasn't changed\n\t\t\tif(oldLeft == this.$scroll_hor.scrollLeft){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\n\t\t} else {\n\t\t\tif(this._isHorizontal()){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(res.y) return true;//no vertical scroll, must not block scrolling\n\t\t\tif(!this.$scroll_ver || !this.$scroll_ver.offsetHeight) return true;\n\n\t\t\tvar dir = wy/-40;\n\t\t\tif (typeof wy == \"undefined\")\n\t\t\t\tdir = e.detail;\n\n\t\t\tvar oldTop = this._oldTop;\n\t\t\tvar top = this.$scroll_ver.scrollTop+dir*30;\n\n\t\t\t//if(!this.$gantt.config.prevent_default_scroll &&\n\t\t\t//\t(this.$gantt._cached_scroll_pos && ((this.$gantt._cached_scroll_pos.y == top) || (this.$gantt._cached_scroll_pos.y <= 0 && top <= 0)))) return true;\n\n\n\t\t\tthis.scrollVertically(top);\n\t\t\tthis.$scroll_ver.scrollTop = top;\n\n\t\t\t// not block scroll if position hasn't changed\n\t\t\tif(oldTop == this.$scroll_ver.scrollTop){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis._oldTop = this.$scroll_ver.scrollTop;\n\t\t}\n\n\t\tif (e.preventDefault)\n\t\t\te.preventDefault();\n\t\te.cancelBubble=true;\n\t\treturn false;\n\t};\n\n\treturn ScrollbarCell;\n})(Cell);\n\nmodule.exports = ScrollbarCell;","var __extends = require(\"../../../utils/extends\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\"),\n\tCell = require(\"./cell\");\n\nvar ResizerCell = (function (_super) {\n\t\"use strict\";\n\n\t__extends(ResizerCell, _super);\n\tfunction ResizerCell(parent, config, factory) {\n\t\tvar _this = _super.apply(this, arguments) || this;\n\n\t\tvar startBackSize, startFrontSize;\n\n\t\t_this._moveHandler = function (e) {\n\t\t\t_this._moveResizer(_this._resizer, e.pageX, e.pageY);\n\t\t};\n\t\t_this._upHandler = function () {\n\t\t\tvar newSizes = _this._getNewSizes();\n\t\t\tif(_this.callEvent(\"onResizeEnd\", [startBackSize, startFrontSize, newSizes ? newSizes.back : 0, newSizes ? newSizes.front : 0]) !== false){\n\t\t\t\t_this._setSizes();\n\t\t\t}\n\n\t\t\t_this._setBackground(false);\n\t\t\t_this._clearResizer();\n\t\t\t_this._clearListeneres();\n\t\t};\n\n\t\t_this._clearListeneres = function(){\n\t\t\tthis.$domEvents.detach(document, \"mouseup\", _this._upHandler);\n\t\t\tthis.$domEvents.detach(document, \"mousemove\", _this._moveHandler);\n\t\t\tthis.$domEvents.detach(document, \"mousemove\", _this._startOnMove);\n\t\t\tthis.$domEvents.detach(document, \"mouseup\", _this._cancelDND);\n\t\t};\n\n\t\t_this._callStartDNDEvent = function(){\n\t\t\tif (this._xMode) {\n\t\t\t\tstartBackSize = this._behind.$config.width || this._behind.$view.offsetWidth;\n\t\t\t\tstartFrontSize = this._front.$config.width || this._front.$view.offsetWidth;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstartBackSize = this._behind.$config.height || this._behind.$view.offsetHeight;\n\t\t\t\tstartFrontSize = this._front.$config.height || this._front.$view.offsetHeight;\n\t\t\t}\n\n\t\t\tif(_this.callEvent(\"onResizeStart\", [startBackSize, startFrontSize]) === false){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\t_this._startDND = function(e){\n\t\t\tvar res = this._callStartDNDEvent();\n\t\t\tif(res === false){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar stop = false;\n\t\t\tthis._eachGroupItem(function(resizer){\n\t\t\t\tresizer._getSiblings();\n\t\t\t\tif(resizer._callStartDNDEvent() === false){\n\t\t\t\t\tstop = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(stop){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_this._moveHandler(e);\n\n\t\t\t_this.$domEvents.attach(document, \"mousemove\", _this._moveHandler);\n\t\t\t_this.$domEvents.attach(document, \"mouseup\", _this._upHandler);\n\t\t};\n\n\t\t_this._cancelDND = function(){\n\t\t\t_this._setBackground(false);\n\t\t\t_this._clearResizer();\n\t\t\t_this._clearListeneres();\n\t\t};\n\n\t\t_this._startOnMove = function(e){\n\t\t\tif(_this._isPosChanged(e)){\n\t\t\t\t_this._clearListeneres();\n\t\t\t\t_this._startDND(e);\n\t\t\t}\n\t\t};\n\n\t\t_this._downHandler = function (e) {\n\t\t\t_this._getSiblings();\n\n\t\t\tif (_this._behind.$config.collapsed || _this._front.$config.collapsed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_this._setBackground(true);\n\t\t\t_this._resizer = _this._setResizer();\n\n\t\t\t_this._positions = {\n\t\t\t\tx: e.pageX,\n\t\t\t\ty: e.pageY,\n\t\t\t\ttimestamp: Date.now()\n\t\t\t};\n\n\t\t\t_this.$domEvents.attach(document, \"mousemove\", _this._startOnMove);\n\t\t\t_this.$domEvents.attach(document, \"mouseup\", _this._cancelDND);\n\t\t};\n\t\t_this.$name = \"resizer\";\n\t\treturn _this;\n\t}\n\tResizerCell.prototype.init = function () {\n\t\tvar _this = this;\n\t\t_super.prototype.init.call(this);\n\t\tthis._xMode = this.$config.mode === \"x\";\n\t\tif (this._xMode && !this.$config.width) {\n\t\t\tthis.$config.width = this.$config.minWidth = 1;\n\t\t}\n\t\telse if (!this._xMode && !this.$config.height) {\n\t\t\tthis.$config.height = this.$config.minHeight = 1;\n\t\t}\n\n\t\tthis.$config.margin = -1;\n\n\t\tthis.$domEvents.attach(this.$view, \"mousedown\", _this._downHandler);\n\n\t};\n\tResizerCell.prototype.$toHTML = function () {\n\t\tvar mode = this.$config.mode;\n\t\tvar css = this.$config.css || \"\";\n\t\treturn \"
\";\n\t};\n\n\tResizerCell.prototype._clearResizer = function(){\n\t\tif(this._resizer){\n\t\t\tif(this._resizer.parentNode){\n\t\t\t\tthis._resizer.parentNode.removeChild(this._resizer);\n\t\t\t}\n\t\t\tthis._resizer = null;\n\t\t}\n\t};\n\n\tResizerCell.prototype._isPosChanged = function(e){\n\t\tif(!this._positions){\n\t\t\treturn false;\n\t\t}\n\n\t\tif(Math.abs(this._positions.x - e.pageX) > 3 || Math.abs(this._positions.y - e.pageY) > 3){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(Date.now() - this._positions.timestamp > 300){\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tResizerCell.prototype._getSiblings = function () {\n\t\tvar cells = this.$parent.getCells();\n\n\t\tif(this.$config.prev){\n\t\t\tthis._behind = this.$factory.getView(this.$config.prev);\n\t\t\tif(!(this._behind instanceof Cell)){\n\t\t\t\tthis._behind = this._behind.$parent;\n\t\t\t}\n\t\t}\n\t\tif(this.$config.next){\n\t\t\tthis._front = this.$factory.getView(this.$config.next);\n\t\t\tif(!(this._front instanceof Cell)){\n\t\t\t\tthis._front = this._behind.$parent;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\tif (this === cells[i]) {\n\t\t\t\tif(!this._behind)\n\t\t\t\t\tthis._behind = cells[i - 1];\n\t\t\t\tif(!this._front)\n\t\t\t\t\tthis._front = cells[i + 1];\n\t\t\t}\n\t\t}\n\t};\n\tResizerCell.prototype._setBackground = function (state) {\n\t\tvar classes = \"gantt_resizing\";\n\t\tif (!state) {\n\t\t\tdomHelpers.removeClassName(this._behind.$view, classes);\n\t\t\tdomHelpers.removeClassName(this._front.$view, classes);\n\t\t\tdomHelpers.removeClassName(document.body, 'gantt_noselect');\n\t\t\treturn;\n\t\t}\n\t\tdomHelpers.addClassName(this._behind.$view, classes, true);\n\t\tdomHelpers.addClassName(this._front.$view, classes, true);\n\t\tdomHelpers.addClassName(document.body, 'gantt_noselect', true);\n\t};\n\tResizerCell.prototype._setResizer = function () {\n\t\tvar resizer = document.createElement(\"div\");\n\t\tresizer.className = \"gantt_resizer_stick\";\n\t\tthis.$view.appendChild(resizer);\n\t\tthis.$view.style.overflow = \"visible\";\n\t\tresizer.style.height = this.$view.style.height;\n\t\treturn resizer;\n\t};\n\n\tResizerCell.prototype._getDirection = function(x, y){\n\t\tvar shift;\n\t\tif (this._xMode) {\n\t\t\tshift = x - this._positions.x;\n\t\t}else{\n\t\t\tshift = y - this._positions.y;\n\t\t}\n\t\treturn shift ? shift < 0 ? -1 : 1 : 0;\n\t};\n\n\tResizerCell.prototype._getResizePosition = function(x, y){\n\t\tvar size;\n\t\tvar behindSide;\n\t\tvar behindMin;\n\t\tvar frontSide;\n\t\tvar frontMin;\n\t\tif (this._xMode) {\n\t\t\tsize = x - this._positions.x;\n\t\t\tbehindSide = this._behind.$config.width || this._behind.$view.offsetWidth;\n\t\t\tfrontSide = this._front.$config.width || this._front.$view.offsetWidth;\n\t\t\tbehindMin = this._behind.$config.minWidth;\n\t\t\tfrontMin = this._front.$config.minWidth;\n\t\t}\n\t\telse {\n\t\t\tsize = y - this._positions.y;\n\t\t\tbehindSide = this._behind.$config.height || this._behind.$view.offsetHeight;\n\t\t\tfrontSide = this._front.$config.height || this._front.$view.offsetHeight;\n\t\t\tbehindMin = this._front.$config.minHeight;\n\t\t\tfrontMin = this._front.$config.minHeight;\n\t\t}\n\t\tvar direction = this._getDirection(x, y);\n\t\tvar newBehindSide,\n\t\t\tnewFrontSide;\n\n\t\tif (direction === -1) {\n\t\t\tnewFrontSide = frontSide - size;\n\t\t\tnewBehindSide = behindSide - Math.abs(size);\n\n\t\t\tif (frontSide - size > this._front.$config.maxWidth) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (Math.abs(size) >= behindSide) {\n\t\t\t\tsize = -Math.abs(behindSide - 2);\n\t\t\t}\n\t\t\t// if min width\n\t\t\tif (behindSide - Math.abs(size) <= behindMin) {\n\t\t\t\t//this._resizer.style.background = \"red\";\n\t\t\t\tsize = -Math.abs(behindSide - behindMin);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tnewFrontSide = frontSide - Math.abs(size);\n\t\t\tnewBehindSide = behindSide + size;\n\n\t\t\tif (behindSide + size > this._behind.$config.maxWidth) {\n\t\t\t\tsize = this._behind.$config.maxWidth - behindSide;\n\t\t\t\t// return;\n\t\t\t}\n\t\t\tif (Math.abs(size) >= frontSide) {\n\t\t\t\tsize = frontSide - 2;\n\t\t\t}\n\t\t\t// if min width\n\t\t\tif (frontSide - Math.abs(size) <= frontMin) {\n\t\t\t\tsize = Math.abs(frontSide - frontMin);\n\t\t\t}\n\t\t}\n\n\t\tif (direction === -1) {\n\t\t\tnewFrontSide = frontSide - size;\n\t\t\tnewBehindSide = behindSide - Math.abs(size);\n\t\t} else {\n\t\t\tnewFrontSide = frontSide - Math.abs(size);\n\t\t\tnewBehindSide = behindSide + size;\n\t\t}\n\n\t\treturn {\n\t\t\tsize: size,\n\t\t\tnewFrontSide: newFrontSide,\n\t\t\tnewBehindSide: newBehindSide\n\t\t};\n\t};\n\n\tResizerCell.prototype._getGroupName = function(){\n\t\tthis._getSiblings();\n\t\treturn this._front.$config.group || this._behind.$config.group;\n\t};\n\n\tResizerCell.prototype._eachGroupItem = function(callback, master){\n\t\tvar layout = this.$factory.getView(\"main\");\n\n\t\tvar group = this._getGroupName();\n\n\t\tvar resizers = layout.getCellsByType(\"resizer\");\n\t\tfor(var i = 0; i < resizers.length; i++) {\n\t\t\tif (resizers[i]._getGroupName() == group && resizers[i] != this) {\n\t\t\t\tcallback.call(master || this, resizers[i]);\n\t\t\t}\n\t\t}\n\t};\n\n\tResizerCell.prototype._getGroupResizePosition = function(x, y){\n\t\tvar sizes = this._getResizePosition(x, y);\n\n\t\tif(!this._getGroupName()){\n\t\t\treturn sizes;\n\t\t}\n\n\t\tvar positions = [sizes];\n\n\t\tthis._eachGroupItem(function(resizer){\n\t\t\tresizer._getSiblings();\n\t\t\tvar pos = utils.copy(this._positions);\n\t\t\tif(this._xMode){\n\t\t\t\tpos.x += (resizer._behind.$config.width - this._behind.$config.width);\n\t\t\t}else{\n\t\t\t\tpos.y += (resizer._behind.$config.height - this._behind.$config.height);\n\t\t\t}\n\t\t\tresizer._positions = pos;\n\t\t\tpositions.push(resizer._getResizePosition(x, y));\n\t\t});\n\n\t\tvar minMax;\n\t\tfor(var i =0; i < positions.length; i++){\n\t\t\tif(!positions[i]) return;\n\t\t\tif(minMax === undefined){\n\t\t\t\tminMax = positions[i];\n\t\t\t}else if(positions[i].newBehindSide > minMax.newBehindSide){\n\t\t\t\tminMax = positions[i];\n\t\t\t}\n\t\t}\n\n\t/*\tif(minMax != sizes){\n\t\t\tminMax.size = minMax.size;\n\t\t}*/\n\n\t\treturn minMax;\n\t};\n\n\tResizerCell.prototype._moveResizer = function (av, x, y) {\n\t\tif (x === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar sizes = this._getGroupResizePosition(x, y);\n\t\tif(!sizes)\n\t\t\treturn;\n\n\t\tif (Math.abs(sizes.size) === 1) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._xMode) {\n\t\t\tav.style.left = sizes.size + 'px';\n\t\t\tthis._positions.nextX = sizes.size || 0;\n\t\t}\n\t\telse {\n\t\t\tav.style.top = sizes.size + 'px';\n\t\t\tthis._positions.nextY = sizes.size || 0;\n\t\t}\n\n\t\tthis.callEvent(\"onResize\", [sizes.newBehindSide, sizes.newFrontSide]);\n\t};\n\tResizerCell.prototype._setGravity = function (cell) {\n\t\tvar size = this._xMode ? \"offsetWidth\" : \"offsetHeight\";\n\t\tvar position = this._xMode ? this._positions.nextX : this._positions.nextY;\n\t\tvar frontSize = this._front.$view[size];\n\t\tvar behindSize = this._behind.$view[size];\n\t\tvar frontG = this._front.getSize().gravity;\n\t\tvar behindG = this._behind.getSize().gravity;\n\t\tvar newFrontG = (frontSize - position) / frontSize * frontG;\n\t\tvar newBehindG = (behindSize + position) / behindSize * behindG;\n\t\tif (cell !== \"front\") {\n\t\t\tthis._front.$config.gravity = newFrontG;\n\t\t}\n\t\tif (cell !== \"behind\") {\n\t\t\tthis._behind.$config.gravity = newBehindG;\n\t\t}\n\t};\n\n/*\tResizerCell.prototype.setSize = function(){\n\t\t_super.apply(this, arguments)\n\t};*/\n\n\tResizerCell.prototype._getNewSizes = function(){\n\t\tvar behindSize = this._xMode ? this._behind.$config.width : this._behind.$config.height;\n\t\tvar frontSize = this._xMode ? this._front.$config.width : this._front.$config.height;\n\t\tvar position = this._xMode ? this._positions.nextX : this._positions.nextY;\n\n\t\tif(!frontSize && !behindSize){\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfront: frontSize ? ((frontSize - position) || 1) : 0,\n\t\t\tback: behindSize ? ((behindSize + position) || 1) : 0\n\t\t};\n\t};\n\n\tResizerCell.prototype._assignNewSizes = function(newSizes){\n\t\tthis._getSiblings();\n\t\tvar side = this._xMode ? 'width' : 'height';\n\n\t\t// if only gravity cells\n\t\tif (!newSizes) {\n\t\t\tthis._setGravity();\n\t\t}\n\t\telse {\n\t\t\tif (!newSizes.front) {\n\t\t\t\tthis._setGravity(\"behind\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._front.$config[side] = newSizes.front;\n\t\t\t}\n\t\t\tif (!newSizes.back) {\n\t\t\t\tthis._setGravity(\"front\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._behind.$config[side] = newSizes.back;\n\t\t\t}\n\t\t}\n\n\t};\n\n\tResizerCell.prototype._setSizes = function () {\n\t\tif (this._resizer) {\n\t\t\tthis.$view.removeChild(this._resizer);\n\t\t}\n\t\tvar newSizes = this._getNewSizes();\n\n\t\tif (this._positions.nextX || this._positions.nextY) {\n\t\t\tthis._assignNewSizes(newSizes);\n\n\t\t\tvar side = this._xMode ? 'width' : 'height';\n\t\t\tif(this._front.$config.group){\n\t\t\t\tthis.$gantt.$layout._syncCellSizes(this._front.$config.group, this._front.$config[side]);\n\t\t\t}else if(this._behind.$config.group){\n\t\t\t\tthis.$gantt.$layout._syncCellSizes(this._behind.$config.group, this._behind.$config[side]);\n\t\t\t}\n\n\t\t\tif(this._getGroupName()){\n\t\t\t\tthis.$factory.getView(\"main\").resize();\n\t\t\t}else{\n\t\t\t\tthis.$parent.resize();\n\t\t\t}\n\n\t\t}\n\t};\n\treturn ResizerCell;\n}(Cell));\n\nmodule.exports = ResizerCell;","var __extends = require(\"../../../utils/extends\"),\n\tutils = require(\"../../../utils/utils\"),\n\tCell = require(\"./cell\");\n\nvar ViewCell = (function (_super) {\n\t\"use strict\";\n\n\t__extends(ViewCell, _super);\n\tfunction ViewCell(parent, config, factory) {\n\n\t\tvar _this = _super.apply(this, arguments) || this;\n\n\t\tif(config.view){\n\t\t\tif(config.id){\n\t\t\t\t// pass id to the nested view\n\t\t\t\tthis.$id = utils.uid();\n\t\t\t}\n\t\t\tvar childConfig = utils.copy(config);\n\t\t\tdelete childConfig.config;\n\t\t\tdelete childConfig.templates;\n\n\t\t\tthis.$content = this.$factory.createView(config.view, this, childConfig, this);\n\t\t\tif(!this.$content)\n\t\t\t\treturn false;\n\t\t}\n\n\t\t_this.$name = \"viewCell\";\n\t\treturn _this;\n\t}\n\n\tViewCell.prototype.destructor = function(){\n\t\tthis.clear();\n\t\t_super.prototype.destructor.call(this);\n\t};\n\n\tViewCell.prototype.clear = function(){\n\n\t\tthis.$initialized = false;\n\n\t\t// call destructor\n\t\tif (this.$content){\n\t\t\tvar method = this.$content.unload || this.$content.destructor;\n\t\t\tif (method){\n\t\t\t\tmethod.call(this.$content);\n\t\t\t}\n\t\t}\n\n\t\t_super.prototype.clear.call(this);\n\n\t};\n\n\tViewCell.prototype.scrollTo = function(left, top){\n\n\t\tif(this.$content && this.$content.scrollTo){\n\t\t\tthis.$content.scrollTo(left, top);\n\t\t}else{\n\t\t\t_super.prototype.scrollTo.call(this, left, top);\n\t\t}\n\t};\n\n\tViewCell.prototype._setContentSize = function(x, y){\n\t\tvar borders = this._getBorderSizes();\n\t\tif(typeof x === \"number\"){\n\t\t\tvar outerX = x + borders.horizontal;\n\t\t\tthis.$config.width = outerX;\n\t\t}\n\t\tif(typeof y === \"number\"){\n\t\t\tvar outerY = y + borders.vertical;\n\t\t\tthis.$config.height = outerY;\n\t\t}\n\t};\n\n\tViewCell.prototype.setSize = function(x, y){\n\t\t_super.prototype.setSize.call(this, x, y);\n\n\t\tif(!this.$preResize && this.$content) {\n\t\t\tif (!this.$initialized) {\n\t\t\t\tthis.$initialized = true;\n\t\t\t\tvar header = this.$view.childNodes[0];\n\t\t\t\tvar content = this.$view.childNodes[1];\n\t\t\t\tif(!content) content = header;\n\n\t\t\t\t/*if(this.$content.$config){\n\t\t\t\t\tthis.$content.$config.width = this.$lastSize.contentX;\n\t\t\t\t\tthis.$content.$config.height = this.$lastSize.contentY;\n\t\t\t\t}*/\n\t\t\t\tthis.$content.init(content);\n\t\t\t}\n\t\t}\n\t};\n\n\tViewCell.prototype.setContentSize = function(){\n\t\tif(!this.$preResize && this.$content) {\n\t\t\tif (this.$initialized) {\n\t\t\t\tthis.$content.setSize(this.$lastSize.contentX, this.$lastSize.contentY);\n\t\t\t}\n\t\t}\n\t};\n\n\n\tViewCell.prototype.getContentSize = function(){\n\t\tvar size = _super.prototype.getContentSize.call(this);\n\n\t\tif(this.$content && this.$initialized){\n\t\t\tvar childSize = this.$content.getSize();\n\t\t\tsize.width = childSize.contentX === undefined ? childSize.width : childSize.contentX;\n\t\t\tsize.height = childSize.contentY === undefined ? childSize.height : childSize.contentY;\n\t\t}\n\n\t\tvar borders = this._getBorderSizes();\n\t\tsize.width += borders.horizontal;\n\t\tsize.height += borders.vertical;\n\n\t\treturn size;\n\t};\n\n\treturn ViewCell;\n}(Cell));\n\nmodule.exports = ViewCell;","var __extends = require(\"../../../utils/extends\"),\n\tLayout = require(\"./layout\"),\n\tCell = require(\"./cell\");\n\nvar ViewLayout = (function (_super) {\n\t\"use strict\";\n\n\t__extends(ViewLayout, _super);\n\tfunction ViewLayout(parent, config, factory) {\n\t\tvar _this = _super.apply(this, arguments) || this;\n\t\tfor (var i = 0; i < _this.$cells.length; i++) {\n\t\t\t_this.$cells[i].$config.hidden = (i !== 0);\n\t\t}\n\t\t_this.$cell = _this.$cells[0];\n\t\t_this.$name = \"viewLayout\";\n\n\t\treturn _this;\n\t}\n\tViewLayout.prototype.cell = function (id) {\n\t\tvar cell = _super.prototype.cell.call(this, id);\n\t\tif (!cell.$view) {\n\t\t\tthis.$fill(null, this);\n\t\t}\n\t\treturn cell;\n\t};\n\tViewLayout.prototype.moveView = function (view) {\n\t\tvar body = this.$view;\n\t\tif (this.$cell) {\n\t\t\tthis.$cell.$config.hidden = true;\n\t\t\tbody.removeChild(this.$cell.$view);\n\t\t}\n\t\tthis.$cell = view;\n\t\tbody.appendChild(view.$view);\n\t};\n\tViewLayout.prototype.setSize = function (x, y) {\n\t\tCell.prototype.setSize.call(this, x, y);\n\t};\n\n\tViewLayout.prototype.setContentSize = function(){\n\t\tvar size = this.$lastSize;\n\t\tthis.$cell.setSize(size.contentX, size.contentY);\n\t};\n\n\tViewLayout.prototype.getSize = function () {\n\t\tvar sizes = _super.prototype.getSize.call(this);\n\t\tif (this.$cell) {\n\t\t\tvar cellSize = this.$cell.getSize();\n\t\t\tif (this.$config.byMaxSize) {\n\t\t\t\tfor (var i = 0; i < this.$cells.length; i++) {\n\t\t\t\t\tvar otherCell = this.$cells[i].getSize();\n\t\t\t\t\tfor (var cell in cellSize) {\n\t\t\t\t\t\tcellSize[cell] = Math.max(cellSize[cell], otherCell[cell]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var size in sizes) {\n\t\t\t\tsizes[size] = sizes[size] || cellSize[size];\n\t\t\t}\n\t\t\tsizes.gravity = Math.max(sizes.gravity, cellSize.gravity);\n\t\t}\n\t\treturn sizes;\n\t};\n\treturn ViewLayout;\n}(Layout));\n\nmodule.exports = ViewLayout;","module.exports = function(viewport, box){\n\tif(!box){\n\t\treturn false;\n\t}\n\n\tif(box.left > viewport.x_end || box.left + box.width < viewport.x){\n\t\treturn false;\n\t}\n\n\tif(box.top > viewport.y_end || box.top + box.height < viewport.y){\n\t\treturn false;\n\t}\n\n\treturn true;\n};","var isInViewPort = require(\"./viewport/is_in_viewport\");\nvar isLegacyRender = require(\"./is_legacy_smart_render\");\nvar basicGetRectangle = require(\"./viewport/get_grid_row_rectangle\");\nvar rendererFactory = function(gantt){\n\tvar services = gantt.$services;\n\n\t//hash of dom elements is needed to redraw single bar/link\n\tvar task_area_pulls = {},\n\t\ttask_area_renderers = {};\n\n\tfunction getView(layer){\n\t\tvar view = null;\n\t\tif (typeof layer.view === \"string\") {\n\t\t\tview = gantt.$ui.getView(layer.view);\n\t\t} else if (layer.view) {\n\t\t\tview = layer.view;\n\t\t}\n\t\treturn view;\n\t}\n\n\tfunction getRenderer(id, layer, node) {\n\n\t\tif (task_area_renderers[id])\n\t\t\treturn task_area_renderers[id];\n\n\t\tif (!layer.renderer)\n\t\t\tgantt.assert(false, \"Invalid renderer call\");\n\n\t\tvar renderMethod = null;\n\t\tvar updateMethod = null;\n\t\tvar getRectangle = null;\n\n\t\tif(typeof layer.renderer === \"function\"){\n\t\t\trenderMethod = layer.renderer;\n\t\t\tgetRectangle = basicGetRectangle;\n\t\t}else{\n\t\t\trenderMethod = layer.renderer.render;\n\t\t\tupdateMethod = layer.renderer.update;\n\t\t\tgetRectangle = layer.renderer.getRectangle;\n\t\t\tif (!getRectangle && getRectangle !== null) {\n\t\t\t\tgetRectangle = basicGetRectangle;\n\t\t\t}\n\t\t}\n\n\t\tvar filter = layer.filter;\n\n\t\tif (node)\n\t\t\tnode.setAttribute(services.config().layer_attribute, true);\n\n\t\ttask_area_renderers[id] = {\n\t\t\trender_item: function (item, container, viewPort) {\n\t\t\t\tcontainer = container || node;\n\n\t\t\t\tif (filter) {\n\t\t\t\t\tif (!filter(item)) {\n\t\t\t\t\t\tthis.remove_item(item.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 view = getView(layer);\n\t\t\t\tvar rendererViewPort = viewPort;\n\t\t\t\tif(!rendererViewPort && view && view.$getConfig().smart_rendering){\n\t\t\t\t\trendererViewPort = view.getViewPort();\n\t\t\t\t}\n\n\t\t\t\tvar dom = null;\n\t\t\t\tif(!isLegacyRender(gantt) && getRectangle && rendererViewPort){\n\t\t\t\t\tif(isInViewPort(rendererViewPort, getRectangle(item, view, gantt))){\n\t\t\t\t\t\tdom = renderMethod.call(gantt, item, view, rendererViewPort);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tdom = renderMethod.call(gantt, item, view, rendererViewPort);\n\t\t\t\t}\n\t\t\t\tthis.append(item, dom, container);\n\t\t\t},\n\n\t\t\tclear: function (container) {\n\n\t\t\t\tthis.rendered = task_area_pulls[id] = {};\n\t\t\t\tif(!layer.append)\n\t\t\t\t\tthis.clear_container(container);\n\t\t\t},\n\t\t\tclear_container: function (container) {\n\t\t\t\tcontainer = container || node;\n\t\t\t\tif (container)\n\t\t\t\t\tcontainer.innerHTML = \"\";\n\t\t\t},\n\t\t\trender_items: function (items, container) {\n\t\t\t\tcontainer = container || node;\n\n\t\t\t\tvar buffer = document.createDocumentFragment();\n\t\t\t\tthis.clear(container);\n\n\t\t\t\tvar viewPort = null;\n\t\t\t\tvar view = getView(layer);\n\t\t\t\tif(view && view.$getConfig().smart_rendering){\n\t\t\t\t\tviewPort = view.getViewPort();\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\n\t\t\t\t\tthis.render_item(items[i], buffer, viewPort);\n\t\t\t\t}\n\n\t\t\t\tcontainer.appendChild(buffer, container);\n\t\t\t},\n\t\t\tupdate_items: function (items, container) {\n\t\t\t\tvar view = getView(layer);\n\t\t\t\tif(!view || !view.$getConfig().smart_rendering || isLegacyRender(gantt)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(!this.rendered){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(!getRectangle){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontainer = container || node;\n\n\t\t\t\tvar buffer = document.createDocumentFragment();\n\n\t\t\t\tvar viewPort = null;\n\t\t\t\tif(view){\n\t\t\t\t\tviewPort = view.getViewPort();\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\n\t\t\t\t\tvar item = items[i];\n\t\t\t\t\tvar itemNode = this.rendered[item.id];\n\t\t\t\t\tif (itemNode && itemNode.parentNode) {\n\t\t\t\t\t\tif (!isInViewPort(viewPort, getRectangle(item, view, gantt))) {\n\t\t\t\t\t\t\tthis.hide(item.id);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(updateMethod){\n\t\t\t\t\t\t\t\tupdateMethod.call(gantt, item, itemNode, view, viewPort);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.restore(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.render_item(items[i], buffer, viewPort);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(buffer.childNodes.length){\n\t\t\t\t\tcontainer.appendChild(buffer, container);\n\t\t\t\t}\n\t\t\t},\n\t\t\tappend: function (item, node, container) {\n\t\t\t\tif (!node) {\n\t\t\t\t\tif (this.rendered[item.id]) {\n\t\t\t\t\t\tthis.remove_item(item.id);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.rendered[item.id] && this.rendered[item.id].parentNode) {\n\t\t\t\t\tthis.replace_item(item.id, node);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.appendChild(node);\n\t\t\t\t}\n\t\t\t\tthis.rendered[item.id] = node;\n\n\t\t\t},\n\t\t\treplace_item: function (item_id, newNode) {\n\t\t\t\tvar item = this.rendered[item_id];\n\t\t\t\tif (item && item.parentNode) {\n\t\t\t\t\titem.parentNode.replaceChild(newNode, item);\n\t\t\t\t}\n\t\t\t\tthis.rendered[item_id] = newNode;\n\t\t\t},\n\t\t\tremove_item: function (item_id) {\n\t\t\t\tthis.hide(item_id);\n\t\t\t\tdelete this.rendered[item_id];\n\t\t\t},\n\t\t\thide: function (item_id) {\n\t\t\t\tvar item = this.rendered[item_id];\n\t\t\t\tif (item && item.parentNode) {\n\t\t\t\t\titem.parentNode.removeChild(item);\n\t\t\t\t}\n\t\t\t},\n\t\t\trestore: function (item) {\n\t\t\t\tvar dom = this.rendered[item.id];\n\t\t\t\tif (dom) {\n\t\t\t\t\tif (!dom.parentNode) {\n\t\t\t\t\t\tthis.append(item, dom, node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.render_item(item, node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tchange_id: function (oldid, newid) {\n\t\t\t\tthis.rendered[newid] = this.rendered[oldid];\n\t\t\t\tdelete this.rendered[oldid];\n\t\t\t},\n\t\t\trendered: task_area_pulls[id],\n\t\t\tnode: node,\n\t\t\tdestructor: function () {\n\t\t\t\tthis.clear();\n\t\t\t\tdelete task_area_renderers[id];\n\t\t\t\tdelete task_area_pulls[id];\n\t\t\t}\n\t\t};\n\n\t\treturn task_area_renderers[id];\n\t}\n\n\n\tfunction clearRenderers() {\n\t\tfor (var i in task_area_renderers) {\n\t\t\tgetRenderer(i).destructor();\n\t\t}\n\t}\n\n\treturn {\n\t\tgetRenderer: getRenderer,\n\t\tclearRenderers: clearRenderers\n\t};\n\n};\n\nmodule.exports = rendererFactory;","var renderFactoryProvider = require(\"./render_factory\");\nvar utils = require(\"../../../utils/utils\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\"),\n\tisLegacyRender = require(\"./is_legacy_smart_render\");\n\nvar layerFactory = function(gantt){\n\n\tvar renderFactory = renderFactoryProvider(gantt);\n\treturn {\n\tcreateGroup: function (getContainer, relativeRoot, defaultFilters, initLayer) {\n\n\t\tvar renderGroup = {\n\t\t\ttempCollection: [],\n\t\t\trenderers: {},\n\t\t\tcontainer: getContainer,\n\t\t\tfilters: [],\n\t\t\tgetLayers: function () {\n\t\t\t\tthis._add();// add pending layers\n\n\t\t\t\tvar res = [];\n\t\t\t\tfor (var i in this.renderers) {\n\t\t\t\t\tres.push(this.renderers[i]);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t},\n\t\t\tgetLayer: function (id) {\n\t\t\t\treturn this.renderers[id];\n\t\t\t},\n\t\t\t_add: function (layer) {\n\t\t\t\tif (layer) {\n\t\t\t\t\tlayer.id = layer.id || utils.uid();\n\t\t\t\t\tthis.tempCollection.push(layer);\n\t\t\t\t}\n\n\t\t\t\tvar container = this.container();\n\n\t\t\t\tvar pending = this.tempCollection;\n\t\t\t\tfor (var i = 0; i < pending.length; i++) {\n\t\t\t\t\tlayer = pending[i];\n\n\t\t\t\t\tif (!this.container() && !(layer && layer.container && domHelpers.isChildOf(layer.container, document.body))) continue;\n\n\t\t\t\t\tvar node = layer.container,\n\t\t\t\t\t\tid = layer.id,\n\t\t\t\t\t\ttopmost = layer.topmost;\n\t\t\t\t\tif (!node.parentNode) {\n\t\t\t\t\t\t//insert on top or below the tasks\n\t\t\t\t\t\tif (topmost) {\n\t\t\t\t\t\t\tcontainer.appendChild(node);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar rel = relativeRoot ? relativeRoot() : container.firstChild;\n\t\t\t\t\t\t\tif (rel)\n\t\t\t\t\t\t\t\tcontainer.insertBefore(node, rel);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcontainer.appendChild(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.renderers[id] = renderFactory.getRenderer(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tlayer,\n\t\t\t\t\t\tnode\n\t\t\t\t\t);\n\n\t\t\t\t\tif (initLayer) {\n\t\t\t\t\t\tinitLayer(layer, gantt);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.tempCollection.splice(i, 1);\n\t\t\t\t\ti--;\n\t\t\t\t}\n\t\t\t},\n\t\t\taddLayer: function (config) {\n\t\t\t\tif(config){\n\t\t\t\t\tif(typeof config == \"function\"){\n\t\t\t\t\t\tconfig = {renderer: config};\n\t\t\t\t\t}\n\n\t\t\t\t\tif(config.filter === undefined){\n\t\t\t\t\t\tconfig.filter = mergeFilters(defaultFilters || []);\n\t\t\t\t\t}else if(config.filter instanceof Array){\n\t\t\t\t\t\tconfig.filter.push(defaultFilters);\n\t\t\t\t\t\tconfig.filter = mergeFilters(config.filter);\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!config.container){\n\t\t\t\t\t\tconfig.container = document.createElement(\"div\");\n\t\t\t\t\t}\n\t\t\t\t\tvar self = this;\n\t\t\t\t\tconfig.requestUpdate = function(){\n\t\t\t\t\t\tif(gantt.config.smart_rendering && !isLegacyRender(gantt)){\n\t\t\t\t\t\t\tif(self.renderers[config.id]){\n\t\t\t\t\t\t\t\tself.onUpdateRequest(self.renderers[config.id]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis._add(config);\n\t\t\t\treturn (config ? config.id : undefined);\n\t\t\t},\n\t\t\tonUpdateRequest: function(layer){\n\n\t\t\t},\n\n\t\t\teachLayer: function(code){\n\t\t\t\tfor (var i in this.renderers) {\n\t\t\t\t\tcode(this.renderers[i]);\n\t\t\t\t}\n\t\t\t},\n\t\t\tremoveLayer: function (id) {\n\t\t\t\tif(!this.renderers[id])\n\t\t\t\t\treturn;\n\t\t\t\tthis.renderers[id].destructor();\n\t\t\t\tdelete this.renderers[id];\n\t\t\t},\n\t\t\tclear: function () {\n\t\t\t\tfor (var i in this.renderers) {\n\t\t\t\t\tthis.renderers[i].destructor();\n\t\t\t\t}\n\t\t\t\tthis.renderers = {};\n\t\t\t}//,\n\t\t\t//prepareConfig: prepareConfig\n\t\t};\n\n\t\tgantt.attachEvent(\"onDestroy\", function(){\n\t\t\trenderGroup.clear();\n\t\t\trenderGroup = null;\n\t\t});\n\n\t\treturn renderGroup;\n\t}\n};};\n\n\nfunction mergeFilters(filter_methods){\n\tif(!(filter_methods instanceof Array)){\n\t\tfilter_methods = Array.prototype.slice.call(arguments, 0);\n\t}\n\n\treturn function(obj){\n\t\tvar res = true;\n\t\tfor(var i = 0, len = filter_methods.length; i < len; i++){\n\t\t\tvar filter_method = filter_methods[i];\n\t\t\tif(filter_method){\n\t\t\t\tres = res && (filter_method(obj.id, obj) !== false);\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t};\n}\n\n\nmodule.exports = layerFactory;\n","var createLayerFactory = require(\"./render/layer_engine\");\n\nfunction initLayer(layer, gantt){\n\tif(!layer.view){\n\t\treturn;\n\t}\n\n\tvar view = layer.view;\n\tif(typeof view === \"string\"){\n\t\tview = gantt.$ui.getView(view);\n\t}\n\n\tif(view && view.attachEvent){\n\t\tview.attachEvent(\"onScroll\", function(){\n\t\t\tif(layer.requestUpdate){\n\t\t\t\tlayer.requestUpdate();\n\t\t\t}\n\t\t});\n\t}\n}\n\nvar createLayerEngine = function(gantt){\n\tvar factory = createLayerFactory(gantt);\n\treturn {\n\t\tgetDataRender: function(name){\n\t\t\treturn gantt.$services.getService(\"layer:\" + name) || null;\n\t\t},\n\t\tcreateDataRender: function(config){\n\t\t\tvar name = config.name,\n\t\t\t\tdefaultContainer = config.defaultContainer,\n\t\t\t\tpreviusSiblingContainer = config.defaultContainerSibling;\n\n\t\t\tvar layers = factory.createGroup(\n\t\t\t\tdefaultContainer,\n\t\t\t\tpreviusSiblingContainer,\n\t\t\t\tfunction(itemId, item){\n\t\t\t\t\tif(layers.filters){\n\t\t\t\t\t\tfor(var i = 0; i < layers.filters.length; i++){\n\t\t\t\t\t\t\tif(layers.filters[i](itemId, item) === false){\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tinitLayer\n\t\t\t);\n\n\t\t\tgantt.$services.setService(\"layer:\" + name, function(){\n\t\t\t\treturn layers;\n\t\t\t});\n\n\t\t\tgantt.attachEvent(\"onGanttReady\", function () {\n\t\t\t\tlayers.addLayer();// init layers on start\n\t\t\t});\n\n\t\t\treturn layers;\n\t\t},\n\t\tinit: function(){\n\t\t\tvar taskLayers = this.createDataRender({\n\t\t\t\tname: \"task\",\n\t\t\t\tdefaultContainer: function(){\n\t\t\t\t\tif(gantt.$task_data){\n\t\t\t\t\t\treturn gantt.$task_data;\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_data;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdefaultContainerSibling: function(){\n\t\t\t\t\tif(gantt.$task_links){\n\t\t\t\t\t\treturn gantt.$task_links;\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_links;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfilter: function(item){\n\n\t\t\t\t}\n\t\t\t}, gantt);\n\n\t\t\tvar linkLayers = this.createDataRender({\n\t\t\t\tname: \"link\",\n\t\t\t\tdefaultContainer: function(){\n\t\t\t\t\tif(gantt.$task_data){\n\t\t\t\t\t\treturn gantt.$task_data;\n\t\t\t\t\t}else if(gantt.$ui.getView(\"timeline\")){\n\t\t\t\t\t\treturn gantt.$ui.getView(\"timeline\").$task_data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, gantt);\n\n\t\t\treturn {\n\t\t\t\taddTaskLayer: function(config){\n\t\t\t\t\tif(typeof config === \"function\"){\n\t\t\t\t\t\tconfig = {\n\t\t\t\t\t\t\trenderer: config\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconfig.view = \"timeline\";\n\n\t\t\t\t\treturn taskLayers.addLayer(config);\n\t\t\t\t},\n\n\t\t\t\t_getTaskLayers: function(){\n\t\t\t\t\treturn taskLayers.getLayers();\n\t\t\t\t},\n\t\t\t\tremoveTaskLayer: function(id){\n\t\t\t\t\ttaskLayers.removeLayer(id);\n\t\t\t\t},\n\n\t\t\t\t_clearTaskLayers: function(){\n\t\t\t\t\ttaskLayers.clear();\n\t\t\t\t},\n\t\t\t\taddLinkLayer: function(config){\n\t\t\t\t\tif(typeof config === \"function\"){\n\t\t\t\t\t\tconfig = {\n\t\t\t\t\t\t\trenderer: config\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconfig.view = \"timeline\";\n\t\t\t\t\treturn linkLayers.addLayer(config);\n\t\t\t\t},\n\n\t\t\t\t_getLinkLayers: function(){\n\t\t\t\t\treturn linkLayers.getLayers();\n\t\t\t\t},\n\t\t\t\tremoveLinkLayer: function(id){\n\t\t\t\t\tlinkLayers.removeLayer(id);\n\t\t\t\t},\n\n\t\t\t\t_clearLinkLayers: function(){\n\t\t\t\t\tlinkLayers.clear();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n};\n\nmodule.exports = createLayerEngine;","var domHelpers = require(\"../../utils/dom_helpers\");\n\nvar createMouseHandler = (function(domHelpers) {\n\treturn function (gantt) {\n\t\tvar eventHandlers = {\n\t\t\t\"click\": {},\n\t\t\t\"doubleclick\": {},\n\t\t\t\"contextMenu\": {}\n\t\t};\n\n\t\tfunction addEventTarget(event, className, handler, root) {\n\t\t\tif(!eventHandlers[event][className]){\n\t\t\t\teventHandlers[event][className] = [];\n\t\t\t}\n\n\t\t\teventHandlers[event][className].push({\n\t\t\t\thandler: handler,\n\t\t\t\troot: root\n\t\t\t});\n\t\t}\n\n\t\tfunction callHandler(eventName, className, root, args) {\n\t\t\tvar handlers = eventHandlers[eventName][className];\n\t\t\tif(handlers){\n\t\t\t\tfor(var i = 0; i < handlers.length; i++){\n\t\t\t\t\tif(!(root || handlers[i].root) || handlers[i].root === root){\n\t\t\t\t\t\thandlers[i].handler.apply(this, args);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onClick(e) {\n\t\t\te = e || window.event;\n\t\t\tvar id = gantt.locate(e);\n\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.click);\n\t\t\tvar res = true;\n\t\t\tif (id !== null) {\n\t\t\t\tres = !gantt.checkEvent(\"onTaskClick\") || gantt.callEvent(\"onTaskClick\", [id, e]);\n\t\t\t} else {\n\t\t\t\tgantt.callEvent(\"onEmptyClick\", [e]);\n\t\t\t}\n\n\t\t\tif (res) {\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\n\t\t\t\tif (!default_action)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (id && gantt.getTask(id) && gantt.config.select_task && !gantt.config.multiselect) {\n\t\t\t\t\tgantt.selectTask(id);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onContextMenu(e) {\n\t\t\te = e || window.event;\n\t\t\tvar src = e.target || e.srcElement,\n\t\t\t\ttaskId = gantt.locate(src),\n\t\t\t\tlinkId = gantt.locate(src, gantt.config.link_attribute);\n\n\t\t\tvar res = !gantt.checkEvent(\"onContextMenu\") || gantt.callEvent(\"onContextMenu\", [taskId, linkId, e]);\n\t\t\tif (!res) {\n\t\t\t\tif (e.preventDefault)\n\t\t\t\t\te.preventDefault();\n\t\t\t\telse\n\t\t\t\t\te.returnValue = false;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tfunction findEventHandlers(e, hash){\n\t\t\tvar trg = e.target || e.srcElement;\n\t\t\tvar handlers = [];\n\t\t\twhile (trg) {\n\t\t\t\tvar css = domHelpers.getClassName(trg);\n\t\t\t\tif (css) {\n\t\t\t\t\tcss = css.split(\" \");\n\t\t\t\t\tfor (var i = 0; i < css.length; i++) {\n\t\t\t\t\t\tif (!css[i]) continue;\n\t\t\t\t\t\tif (hash[css[i]]) {\n\t\t\t\t\t\t\tvar delegateHandlers = hash[css[i]];\n\n\t\t\t\t\t\t\tfor(var h = 0; h < delegateHandlers.length; h++){\n\t\t\t\t\t\t\t\tif(delegateHandlers[h].root){\n\t\t\t\t\t\t\t\t\tif(!domHelpers.isChildOf(trg, delegateHandlers[h].root)){\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thandlers.push(delegateHandlers[h].handler);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttrg = trg.parentNode;\n\t\t\t}\n\t\t\treturn handlers;\n\t\t}\n\n\t\tfunction callEventHandlers(handlers, e, id){\n\t\t\tvar res = true;\n\n\t\t\tfor(var i = 0; i < handlers.length; i++){\n\t\t\t\tvar handlerResult = handlers[i].call(gantt, e, id, e.target || e.srcElement);\n\t\t\t\tres = res && !(typeof handlerResult != \"undefined\" && handlerResult !== true);\n\t\t\t}\n\n\t\t\treturn res;\n\t\t}\n\n\n\t\tfunction onDoubleClick(e) {\n\t\t\te = e || window.event;\n\t\t\tvar id = gantt.locate(e);\n\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.doubleclick);\n\t\t\t// when doubleclick fired not on task, id === null\n\t\t\tvar res = !gantt.checkEvent(\"onTaskDblClick\") || id === null || gantt.callEvent(\"onTaskDblClick\", [id, e]);\n\t\t\tif (res) {\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\n\t\t\t\tif (!default_action)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (id !== null && gantt.getTask(id)) {\n\t\t\t\t\tif (res && gantt.config.details_on_dblclick) {\n\t\t\t\t\t\tgantt.showLightbox(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onMouseMove(e) {\n\t\t\tif (gantt.checkEvent(\"onMouseMove\")) {\n\t\t\t\tvar id = gantt.locate(e);\n\t\t\t\tgantt._last_move_event = e;\n\t\t\t\tgantt.callEvent(\"onMouseMove\", [id, e]);\n\t\t\t}\n\t\t}\n\n\t\tfunction detach(eventName, className, handler, root) {\n\t\t\tif (eventHandlers[eventName] && eventHandlers[eventName][className]) {\n\t\t\t\tvar handlers = eventHandlers[eventName];\n\t\t\t\tvar elementHandlers = handlers[className];\n\t\t\t\tfor(var i = 0; i < elementHandlers.length; i++){\n\t\t\t\t\tif(elementHandlers[i].root == root){\n\t\t\t\t\t\telementHandlers.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!elementHandlers.length){\n\t\t\t\t\tdelete handlers[className];\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tvar domEvents = gantt._createDomEventScope();\n\n\t\tfunction reset(node){\n\n\t\t\tdomEvents.detachAll();\n\n\t\t\tif(node){\n\t\t\t\tdomEvents.attach(node, \"click\", onClick);\n\t\t\t\tdomEvents.attach(node, \"dblclick\", onDoubleClick);\n\t\t\t\tdomEvents.attach(node, \"mousemove\", onMouseMove);\n\t\t\t\tdomEvents.attach(node, \"contextmenu\", onContextMenu);\n\t\t\t}\n\t\t}\n\n\n\n\t\treturn {\n\t\t\treset: reset,\n\t\t\tglobal: function(event, classname, handler){\n\t\t\t\taddEventTarget(event, classname, handler, null);\n\t\t\t},\n\t\t\tdelegate: addEventTarget,\n\t\t\tdetach: detach,\n\t\t\tcallHandler: callHandler,\n\t\t\tonDoubleClick: onDoubleClick,\n\t\t\tonMouseMove: onMouseMove,\n\t\t\tonContextMenu: onContextMenu,\n\t\t\tonClick: onClick,\n\t\t\tdestructor: function(){\n\t\t\t\treset();\n\t\t\t\teventHandlers = null;\n\t\t\t\tdomEvents = null;\n\t\t\t}\n\n\t\t};\n\t};\n\n})(domHelpers);\n\n\nmodule.exports = {\n\tinit:createMouseHandler\n};","var utils = require(\"../../utils/utils\");\n\nfunction ViewSettings(config){\n\tutils.mixin(this, config, true);\n}\n\n\nfunction extendSettings (store, parentSettings){\n\tvar own = this.$config[store];\n\n\tif(own){\n\t\tif(own instanceof ViewSettings){\n\t\t\treturn own;\n\t\t}else{\n\t\t\tViewSettings.prototype = parentSettings;\n\t\t\tthis.$config[store] = new ViewSettings(own);\n\t\t\treturn this.$config[store];\n\t\t}\n\t}else{\n\t\treturn parentSettings;\n\t}\n}\n\nvar configurable = function(parentView){\n\tvar parentConfig,\n\t\tparentTemplates;\n\n\treturn {\n\t\t$getConfig: function(){\n\t\t\tif(!parentConfig){\n\t\t\t\tparentConfig = parentView ? parentView.$getConfig() : this.$gantt.config;\n\t\t\t}\n\t\t\tif(!this.$config.config){\n\t\t\t\treturn parentConfig;\n\t\t\t}else{\n\t\t\t\treturn extendSettings.call(this, \"config\", parentConfig);\n\t\t\t}\n\t\t},\n\t\t$getTemplates: function(){\n\t\t\tif(!parentTemplates){\n\t\t\t\tparentTemplates = parentView ? parentView.$getTemplates() : this.$gantt.templates;\n\t\t\t}\n\t\t\tif(!this.$config.templates){\n\t\t\t\treturn parentTemplates;\n\t\t\t}else{\n\t\t\t\treturn extendSettings.call(this, \"templates\", parentTemplates);\n\t\t\t}\n\t\t}\n\t};\n};\n\nmodule.exports = function(obj, parent){\n\tutils.mixin(obj, configurable(parent));\n};","var utils = require(\"../../utils/utils\"),\n\tconfigurable = require(\"./configurable\");\n\nvar uiFactory = function createFactory(gantt){\n\tvar views = {};\n\n\tfunction ui(cell, parentView) {\n\t\tvar content;\n\t\tvar view = \"cell\";\n\t\tif (cell.view){\n\t\t\tview = \"viewcell\";\n\t\t}else if (cell.resizer) {\n\t\t\tview = \"resizer\";\n\t\t}\n\t\telse if (cell.rows || cell.cols) {\n\t\t\tview = \"layout\";\n\t\t}\n\t\telse if (cell.views) {\n\t\t\tview = \"multiview\";\n\t\t}\n\n\t\tcontent = createView.call(this, view, null, cell, parentView);\n\t\treturn content;\n\t}\n\t\n\tvar createdViews = {};\n\n\tfunction createView(name, parent, config, parentView) {\n\t\tvar creator = views[name];\n\n\t\tif(!creator || !creator.create)\n\t\t\treturn false;\n\n\t\tif(name == \"resizer\" && !config.mode){\n\t\t\tif(parentView.$config.cols){\n\t\t\t\tconfig.mode = \"x\";\n\t\t\t}else{\n\t\t\t\tconfig.mode = \"y\";\n\t\t\t}\n\t\t}\n\n\t\tif(name == \"viewcell\" && config.view == \"scrollbar\" && !config.scroll){\n\t\t\tif(parentView.$config.cols){\n\t\t\t\tconfig.scroll = \"y\";\n\t\t\t}else{\n\t\t\t\tconfig.scroll = \"x\";\n\t\t\t}\n\t\t}\n\n\t\tvar config = utils.copy(config);\n\n\t\tif(!config.id && !createdViews[config.view]){\n\t\t\tconfig.id = config.view;\n\t\t}\n\n\t\tif(config.id && !config.css){\n\t\t\tconfig.css = config.id+\"_cell\";\n\t\t}\n\n\t\tvar view = new creator.create(parent, config, this, gantt);\n\n\t\tif(creator.configure){\n\t\t\tcreator.configure(view);\n\t\t}\n\n\t\tconfigurable(view, parentView);\n\t\tif(!view.$id){\n\t\t\tview.$id = config.id || gantt.uid();\n\t\t}\n\n\t\tif(!view.$parent && typeof parent == \"object\"){\n\t\t\tview.$parent = parent;\n\t\t}\n\t\tif(!view.$config){\n\t\t\tview.$config = config;\n\t\t}\n\n\t\tif(createdViews[view.$id]){\n\t\t\tview.$id = gantt.uid();\n\t\t}\n\n\t\tcreatedViews[view.$id] = view;\n\n\t\treturn view;\n\t}\n\n\tfunction reset(){\n\t\tcreatedViews = {};\n\t}\n\n\tfunction register(name, viewConstructor, configure){\n\t\tviews[name] = {create: viewConstructor, configure: configure};\n\t}\n\n\tfunction getView(id){\n\t\treturn createdViews[id];\n\t}\n\n\tvar factory = {\n\t\tinitUI:ui,\n\t\treset: reset,\n\t\tregisterView: register,\n\t\tcreateView: createView,\n\t\tgetView: getView\n\t};\n\n\treturn factory;\n};\n\nmodule.exports = {\n\tcreateFactory: uiFactory\n};\n\n","var uiFactory = require(\"./ui_factory\"),\n\tmouseEvents = require(\"./mouse\"),\n\tcreateLayers = require(\"./gantt_layers\"),\n\tCell = require(\"./layout/cell\"),\n\tLayout = require(\"./layout/layout\"),\n\tViewLayout = require(\"./layout/view_layout\"),\n\tViewCell = require(\"./layout/view_cell\"),\n\tResizer = require(\"./layout/resizer_cell\"),\n\tScrollbar = require(\"./layout/scrollbar_cell\"),\n\tTimeline = require(\"./timeline/timeline\"),\n\tGrid = require(\"./grid/grid\"),\n\tResourceGrid = require(\"./grid/resource_grid\"),\n\tResourceTimeline = require(\"./timeline/resource_timeline\"),\n\tResourceHistogram = require(\"./timeline/resource_histogram\");\n\n\nvar gridEditorsFactory = require(\"./grid/editors/controller\");\n\n\nvar renderTaskBar = require(\"./render/task_bar_smart_render\"),\n\trenderSplitTaskBar = require(\"./render/task_split_render\"),\n\trenderTaskBg = require(\"./render/task_bg_render\"),\n\trenderLink = require(\"./render/link_render\"),\n\tgridRenderer = require(\"./render/task_grid_line_render\");\n\nvar mainGridInitializer = require(\"./grid/main_grid_initializer\");\nvar mainTimelineInitializer = require(\"./timeline/main_timeline_initializer\");\nvar mainLayoutInitializer = require(\"./main_layout_initializer\");\n\nfunction initUI(gantt){\n\tfunction attachInitializer(view, initializer){\n\t\tvar ext = initializer(gantt);\n\t\tif(ext.onCreated)\n\t\t\text.onCreated(view);\n\t\tview.attachEvent(\"onReady\", function(){\n\t\t\tif(ext.onInitialized)\n\t\t\t\text.onInitialized(view);\n\t\t});\n\t\tview.attachEvent(\"onDestroy\", function(){\n\t\t\tif(ext.onDestroyed)\n\t\t\t\text.onDestroyed(view);\n\t\t});\n\t}\n\n\tvar factory = uiFactory.createFactory(gantt);\n\tfactory.registerView(\"cell\", Cell);\n\tfactory.registerView(\"resizer\", Resizer);\n\tfactory.registerView(\"scrollbar\", Scrollbar);\n\tfactory.registerView(\"layout\", Layout, function(view){\n\t\tvar id = view.$config ? view.$config.id : null;\n\t\tif(id === \"main\"){\n\t\t\tattachInitializer(view, mainLayoutInitializer);\n\t\t}\n\t});\n\tfactory.registerView(\"viewcell\", ViewCell);\n\tfactory.registerView(\"multiview\", ViewLayout);\n\tfactory.registerView(\"timeline\", Timeline, function(view){\n\t\tvar id = view.$config ? view.$config.id : null;\n\t\tif(id === \"timeline\" || view.$config.bind == \"task\"){\n\t\t\tattachInitializer(view, mainTimelineInitializer);\n\t\t}\n\t});\n\tfactory.registerView(\"grid\", Grid, function(view){\n\t\tvar id = view.$config ? view.$config.id : null;\n\t\tif(id === \"grid\" || view.$config.bind == \"task\"){\n\t\t\tattachInitializer(view, mainGridInitializer);\n\t\t}\n\t});\n\n\tfactory.registerView(\"resourceGrid\", ResourceGrid);\n\tfactory.registerView(\"resourceTimeline\", ResourceTimeline);\n\tfactory.registerView(\"resourceHistogram\", ResourceHistogram);\n\n\tvar layersEngine = createLayers(gantt);\n\n\tvar inlineEditors = gridEditorsFactory(gantt);\n\n\tgantt.ext.inlineEditors = inlineEditors;\n\tgantt.ext._inlineEditors = inlineEditors;\n\tinlineEditors.init(gantt);\n\n\treturn {\n\t\tfactory:factory,\n\t\tmouseEvents: mouseEvents.init(gantt),\n\t\tlayersApi: layersEngine.init(),\n\t\trender:{\n\t\t\tgridLine: function(){\n\t\t\t\treturn gridRenderer(gantt);\n\t\t\t},\n\t\t\ttaskBg: function(){\n\t\t\t\treturn renderTaskBg(gantt);\n\t\t\t},\n\t\t\ttaskBar: function(){\n\t\t\t\treturn renderTaskBar(gantt);\n\t\t\t},\n\t\t\ttaskSplitBar: function(){\n\t\t\t\treturn renderSplitTaskBar(gantt);\n\t\t\t},\n\t\t\tlink: function(){\n\t\t\t\treturn renderLink(gantt);\n\t\t\t}\n\t\t},\n\t\tlayersService: {\n\t\t\tgetDataRender: function(name){\n\t\t\t\treturn layersEngine.getDataRender(name, gantt);\n\t\t\t},\n\t\t\tcreateDataRender: function(config){\n\t\t\t\treturn layersEngine.createDataRender(config, gantt);\n\t\t\t}\n\t\t}\n\t};\n}\n\nmodule.exports = {\n\tinit: initUI\n};","var utils = require(\"../utils/utils\");\nvar domHelpers = require(\"../utils/dom_helpers\");\n\nmodule.exports = function(gantt) {\n\n\tvar boxAttribute = \"data-dhxbox\";\n\n\tvar _dhx_msg_cfg = null;\n\n\tfunction callback(config, result) {\n\t\tvar usercall = config.callback;\n\t\tmodalBox.hide(config.box);\n\n\t\t_dhx_msg_cfg = config.box = null;\n\t\tif (usercall)\n\t\t\tusercall(result);\n\t}\n\n\tfunction modal_key(e) {\n\t\tif (_dhx_msg_cfg) {\n\t\t\te = e || event;\n\t\t\tvar code = e.which || event.keyCode;\n\t\t\tvar preventDefault = false;\n\n\t\t\tif (messageBox.keyboard) {\n\t\t\t\tif (code == 13 || code == 32) {\n\t\t\t\t\t// default behavior is to confirm/submit popup on space/enter\n\t\t\t\t\t// if browser focus is set on button element - do button click instead of default behavior\n\t\t\t\t\tvar target = e.target || e.srcElement;\n\t\t\t\t\tif (domHelpers.getClassName(target).indexOf(\"gantt_popup_button\") > -1 && target.click) {\n\t\t\t\t\t\ttarget.click();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback(_dhx_msg_cfg, true);\n\t\t\t\t\t\tpreventDefault = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (code == 27) {\n\t\t\t\t\tcallback(_dhx_msg_cfg, false);\n\t\t\t\t\tpreventDefault = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (preventDefault) {\n\t\t\t\tif (e.preventDefault)\n\t\t\t\t\te.preventDefault();\n\t\t\t\treturn !(e.cancelBubble = true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n\n\tgantt.event(document, \"keydown\", modal_key, true);\n\n\tfunction modality(mode) {\n\t\tif (!modality.cover) {\n\t\t\tmodality.cover = document.createElement(\"div\");\n\t\t\t//necessary for IE only\n\t\t\tmodality.cover.onkeydown = modal_key;\n\t\t\tmodality.cover.className = \"dhx_modal_cover\";\n\t\t\tdocument.body.appendChild(modality.cover);\n\t\t}\n\n\t\tmodality.cover.style.display = mode ? \"inline-block\" : \"none\";\n\t}\n\n\tfunction button(text, className, result) {\n\t\tvar buttonAriaAttrs = gantt._waiAria.messageButtonAttrString(text);\n\t\tvar name = className.toLowerCase().replace(/ /g, \"_\");\n\t\tvar button_css = \"gantt_\" + name + \"_button\" + \" dhtmlx_\" + name + \"_button\"; // dhtmlx_ok_button, dhtmlx_click_me_button\n\t\treturn \"
\" + text + \"
\";\n\t}\n\n\tfunction info(text) {\n\t\tif (!messageBox.area) {\n\t\t\tmessageBox.area = document.createElement(\"div\");\n\t\t\tmessageBox.area.className = \"gantt_message_area dhtmlx_message_area\";\n\t\t\tmessageBox.area.style[messageBox.position] = \"5px\";\n\t\t\tdocument.body.appendChild(messageBox.area);\n\t\t}\n\n\t\tmessageBox.hide(text.id);\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.innerHTML = \"
\" + text.text + \"
\";\n\t\tmessage.className = \"gantt-info dhtmlx-info gantt-\" + text.type + \" dhtmlx-\" + text.type;\n\t\tmessage.onclick = function () {\n\t\t\tmessageBox.hide(text.id);\n\t\t\ttext = null;\n\t\t};\n\n\t\tgantt._waiAria.messageInfoAttr(message);\n\n\t\tif (messageBox.position == \"bottom\" && messageBox.area.firstChild)\n\t\t\tmessageBox.area.insertBefore(message, messageBox.area.firstChild);\n\t\telse\n\t\t\tmessageBox.area.appendChild(message);\n\n\t\tif (text.expire > 0)\n\t\t\tmessageBox.timers[text.id] = window.setTimeout(function () {\n\t\t\t\tmessageBox.hide(text.id);\n\t\t\t}, text.expire);\n\n\t\tmessageBox.pull[text.id] = message;\n\t\tmessage = null;\n\n\t\treturn text.id;\n\t}\n\n\tfunction getFirstDefined() {\n\t\tvar values = [].slice.apply(arguments, [0]);\n\n\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\tif (values[i]) {\n\t\t\t\treturn values[i];\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction _boxStructure(config, ok, cancel) {\n\t\tvar box = document.createElement(\"div\");\n\n\t\tvar contentId = utils.uid();\n\t\tgantt._waiAria.messageModalAttr(box, contentId);\n\n\n\t\tbox.className = \" gantt_modal_box dhtmlx_modal_box gantt-\" + config.type + \" dhtmlx-\" + config.type;\n\t\tbox.setAttribute(boxAttribute, 1);\n\n\t\tvar inner = '';\n\n\t\tif (config.width)\n\t\t\tbox.style.width = config.width;\n\t\tif (config.height)\n\t\t\tbox.style.height = config.height;\n\t\tif (config.title)\n\t\t\tinner += '
' + config.title + '
';\n\t\tinner += '
' + (config.content ? '' : config.text) + '
';\n\t\tif (ok)\n\t\t\tinner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\n\t\tif (cancel)\n\t\t\tinner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\n\n\t\tif (config.buttons) {\n\t\t\tfor (var i = 0; i < config.buttons.length; i++) {\n\t\t\t\tvar btn = config.buttons[i];\n\t\t\t\tif (typeof btn == \"object\") {\n\t\t\t\t\t// Support { label:\"Save\", css:\"main_button\", value:\"save\" }\n\t\t\t\t\tvar label = btn.label;\n\t\t\t\t\tvar css = btn.css || (\"gantt_\" + btn.label.toLowerCase() + \"_button dhtmlx_\" + btn.label.toLowerCase() + \"_button\");\n\t\t\t\t\tvar value = btn.value || i;\n\t\t\t\t\tinner += button(label, css, value);\n\t\t\t\t} else {\n\t\t\t\t\tinner += button(btn, btn, i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinner += '
';\n\t\tbox.innerHTML = inner;\n\n\t\tif (config.content) {\n\t\t\tvar node = config.content;\n\t\t\tif (typeof node == \"string\")\n\t\t\t\tnode = document.getElementById(node);\n\t\t\tif (node.style.display == 'none')\n\t\t\t\tnode.style.display = \"\";\n\t\t\tbox.childNodes[config.title ? 1 : 0].appendChild(node);\n\t\t}\n\n\t\tbox.onclick = function (e) {\n\t\t\te = e || event;\n\t\t\tvar source = e.target || e.srcElement;\n\t\t\tif (!source.className) source = source.parentNode;\n\t\t\tif (source.className.split(\" \")[0] == \"gantt_popup_button\") {\n\t\t\t\tvar result = source.getAttribute(\"data-result\");\n\t\t\t\tresult = (result == \"true\") || (result == \"false\" ? false : result);\n\t\t\t\tcallback(config, result);\n\t\t\t}\n\t\t};\n\t\tconfig.box = box;\n\t\tif (ok || cancel)\n\t\t\t_dhx_msg_cfg = config;\n\n\t\treturn box;\n\t}\n\n\tfunction _createBox(config, ok, cancel) {\n\t\tvar box = config.tagName ? config : _boxStructure(config, ok, cancel);\n\n\t\tif (!config.hidden)\n\t\t\tmodality(true);\n\t\tdocument.body.appendChild(box);\n\t\tvar x = Math.abs(Math.floor(((window.innerWidth || document.documentElement.offsetWidth) - box.offsetWidth) / 2));\n\t\tvar y = Math.abs(Math.floor(((window.innerHeight || document.documentElement.offsetHeight) - box.offsetHeight) / 2));\n\t\tif (config.position == \"top\")\n\t\t\tbox.style.top = \"-3px\";\n\t\telse\n\t\t\tbox.style.top = y + 'px';\n\t\tbox.style.left = x + 'px';\n\t\t//necessary for IE only\n\t\tbox.onkeydown = modal_key;\n\n\t\tmodalBox.focus(box);\n\n\t\tif (config.hidden)\n\t\t\tmodalBox.hide(box);\n\n\t\tgantt.callEvent(\"onMessagePopup\", [box]);\n\t\treturn box;\n\t}\n\n\tfunction alertPopup(config) {\n\t\treturn _createBox(config, true, false);\n\t}\n\n\tfunction confirmPopup(config) {\n\t\treturn _createBox(config, true, true);\n\t}\n\n\tfunction boxPopup(config) {\n\t\treturn _createBox(config);\n\t}\n\n\tfunction box_params(text, type, callback) {\n\t\tif (typeof text != \"object\") {\n\t\t\tif (typeof type == \"function\") {\n\t\t\t\tcallback = type;\n\t\t\t\ttype = \"\";\n\t\t\t}\n\t\t\ttext = {text: text, type: type, callback: callback};\n\t\t}\n\t\treturn text;\n\t}\n\n\tfunction params(text, type, expire, id) {\n\t\tif (typeof text != \"object\")\n\t\t\ttext = {text: text, type: type, expire: expire, id: id};\n\t\ttext.id = text.id || utils.uid();\n\t\ttext.expire = text.expire || messageBox.expire;\n\t\treturn text;\n\t}\n\n\tvar alertBox = function () {\n\t\tvar text = box_params.apply(this, arguments);\n\t\ttext.type = text.type || \"confirm\";\n\t\treturn alertPopup(text);\n\t};\n\tvar confirmBox = function () {\n\t\tvar text = box_params.apply(this, arguments);\n\t\ttext.type = text.type || \"alert\";\n\t\treturn confirmPopup(text);\n\t};\n\tvar modalBox = function () {\n\t\tvar text = box_params.apply(this, arguments);\n\t\ttext.type = text.type || \"alert\";\n\t\treturn boxPopup(text);\n\t};\n\tmodalBox.hide = function (node) {\n\t\twhile (node && node.getAttribute && !node.getAttribute(boxAttribute))\n\t\t\tnode = node.parentNode;\n\t\tif (node) {\n\t\t\tnode.parentNode.removeChild(node);\n\t\t\tmodality(false);\n\n\t\t\tgantt.callEvent(\"onAfterMessagePopup\", [node]);\n\t\t}\n\t};\n\n\tmodalBox.focus = function (node) {\n\t\tsetTimeout(function () {\n\t\t\tvar focusable = domHelpers.getFocusableNodes(node);\n\t\t\tif (focusable.length) {\n\t\t\t\tif (focusable[0].focus) focusable[0].focus();\n\t\t\t}\n\t\t}, 1);\n\t};\n\n\tvar messageBox = function (text, type, expire, id) {\n\t\ttext = params.apply(this, arguments);\n\t\ttext.type = text.type || \"info\";\n\n\t\tvar subtype = text.type.split(\"-\")[0];\n\t\tswitch (subtype) {\n\t\t\tcase \"alert\":\n\t\t\t\treturn alertPopup(text);\n\t\t\tcase \"confirm\":\n\t\t\t\treturn confirmPopup(text);\n\t\t\tcase \"modalbox\":\n\t\t\t\treturn boxPopup(text);\n\t\t\tdefault:\n\t\t\t\treturn info(text);\n\t\t}\n\t};\n\n\tmessageBox.seed = (new Date()).valueOf();\n\tmessageBox.uid = utils.uid;\n\tmessageBox.expire = 4000;\n\tmessageBox.keyboard = true;\n\tmessageBox.position = \"top\";\n\tmessageBox.pull = {};\n\tmessageBox.timers = {};\n\n\tmessageBox.hideAll = function () {\n\t\tfor (var key in messageBox.pull)\n\t\t\tmessageBox.hide(key);\n\t};\n\tmessageBox.hide = function (id) {\n\t\tvar obj = messageBox.pull[id];\n\t\tif (obj && obj.parentNode) {\n\t\t\twindow.setTimeout(function () {\n\t\t\t\tobj.parentNode.removeChild(obj);\n\t\t\t\tobj = null;\n\t\t\t}, 2000);\n\t\t\tobj.className += \" hidden\";\n\n\t\t\tif (messageBox.timers[id])\n\t\t\t\twindow.clearTimeout(messageBox.timers[id]);\n\t\t\tdelete messageBox.pull[id];\n\t\t}\n\t};\n\n\tvar popups = [];\n\tgantt.attachEvent(\"onMessagePopup\", function(box){\n\t\tpopups.push(box);\n\t});\n\tgantt.attachEvent(\"onAfterMessagePopup\", function(box){\n\t\tfor(var i = 0; i < popups.length; i++){\n\t\t\tif(popups[i] === box){\n\t\t\t\tpopups.splice(i, 1);\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t});\n\n\tgantt.attachEvent(\"onDestroy\", function(){\n\t\tif(modality.cover && modality.cover.parentNode){\n\t\t\tmodality.cover.parentNode.removeChild(modality.cover);\n\t\t}\n\n\t\tfor(var i = 0; i < popups.length; i++){\n\t\t\tif(popups[i].parentNode){\n\t\t\t\tpopups[i].parentNode.removeChild(popups[i]);\n\t\t\t}\n\t\t}\n\t\tpopups = null;\n\n\t\tif(messageBox.area && messageBox.area.parentNode){\n\t\t\tmessageBox.area.parentNode.removeChild(messageBox.area);\n\t\t}\n\t\tmessageBox = null;\n\t});\n\n\treturn {\n\t\talert: alertBox,\n\t\tconfirm: confirmBox,\n\t\tmessage: messageBox,\n\t\tmodalbox: modalBox\n\t};\n};","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a