1{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/./sources/utils/utils.js","webpack://[name]/./sources/utils/dom_helpers.js","webpack://[name]/./sources/utils/helpers.js","webpack://[name]/./sources/utils/extends.js","webpack://[name]/./sources/utils/eventable.js","webpack://[name]/./sources/core/lightbox/controls/base_control.js","webpack://[name]/./sources/core/ui/grid/editors/editors/base.js","webpack://[name]/./sources/core/ui/layout/cell.js","webpack://[name]/./sources/utils/env.js","webpack://[name]/./sources/core/lightbox/controls/select_control.js","webpack://[name]/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/drop_target.js","webpack://[name]/./sources/core/ui/render/viewport/get_bar_rectangle.js","webpack://[name]/./sources/core/ui/mouse_event_container.js","webpack://[name]/./sources/core/ui/timeline/scales.js","webpack://[name]/./sources/core/ui/timeline/timeline.js","webpack://[name]/./sources/core/ui/render/is_legacy_smart_render.js","webpack://[name]/(webpack)/buildin/global.js","webpack://[name]/./sources/utils/dom_event_scope.js","webpack://[name]/./sources/utils/html_helpers.js","webpack://[name]/./sources/core/worktime/calendar_arguments_helper.js","webpack://[name]/./sources/core/common/duration_formatter_numeric.ts","webpack://[name]/./sources/utils/task_tree_helpers.js","webpack://[name]/./sources/core/gantt_data_range.js","webpack://[name]/./sources/core/datastore/power_array.js","webpack://[name]/./sources/core/datastore/datastore.js","webpack://[name]/./sources/core/ui/render/viewport/get_bg_row_rectangle.js","webpack://[name]/./sources/core/ui/render/task_bar_render.js","webpack://[name]/./sources/core/ui/grid/grid.js","webpack://[name]/./sources/core/ui/row_position_mixin.js","webpack://[name]/./sources/core/ui/layout/layout.js","webpack://[name]/./sources/core/ui/render/viewport/get_grid_row_rectangle.js","webpack://[name]/./node_modules/process/browser.js","webpack://[name]/./sources/utils/timeout.js","webpack://[name]/./sources/publish_helpers/void_script_third.ts","webpack://[name]/./sources/core/destructor.js","webpack://[name]/./sources/core/common/assert.js","webpack://[name]/./sources/core/gantt_core.js","webpack://[name]/./sources/locale/index.js","webpack://[name]/./sources/core/touch.js","webpack://[name]/./sources/css/skins/contrast_white.js","webpack://[name]/./sources/css/skins/contrast_black.js","webpack://[name]/./sources/css/skins/material.js","webpack://[name]/./sources/css/skins/broadway.js","webpack://[name]/./sources/css/skins/terrace.js","webpack://[name]/./sources/css/skins/meadow.js","webpack://[name]/./sources/css/skins/skyblue.js","webpack://[name]/./sources/core/skin.js","webpack://[name]/./sources/core/cached_functions.js","webpack://[name]/./sources/core/data_task_types.gpl.js","webpack://[name]/./sources/core/lightbox_optional_time.js","webpack://[name]/./sources/core/lightbox/controls/constraint_control.js","webpack://[name]/./sources/core/lightbox/controls/parent_control.js","webpack://[name]/./sources/core/lightbox/controls/duration_control.js","webpack://[name]/./sources/core/lightbox/controls/radio_control.js","webpack://[name]/./sources/core/lightbox/controls/checkbox_control.js","webpack://[name]/./sources/core/lightbox/controls/time_control.js","webpack://[name]/./sources/core/lightbox/controls/textarea_control.js","webpack://[name]/./sources/core/lightbox/controls/template_control.js","webpack://[name]/./sources/core/lightbox/index.js","webpack://[name]/./sources/publish_helpers/void_script_second.ts","webpack://[name]/./sources/core/data.js","webpack://[name]/./sources/core/facades/worktime_calendars.js","webpack://[name]/./sources/core/worktime/strategy/no_work_time.js","webpack://[name]/./sources/core/worktime/time_calculator.js","webpack://[name]/./sources/core/worktime/strategy/work_unit_cache/workunit_object_cache.ts","webpack://[name]/./sources/core/worktime/strategy/work_unit_cache/workunit_map_cache.ts","webpack://[name]/./sources/core/worktime/strategy/work_unit_cache/index.ts","webpack://[name]/./sources/core/worktime/strategy/calendar_strategy.js","webpack://[name]/./sources/core/worktime/calendar_manager.js","webpack://[name]/./sources/core/worktime/work_time.js","webpack://[name]/./sources/core/load.js","webpack://[name]/./sources/core/tasks.js","webpack://[name]/./sources/core/wai_aria.js","webpack://[name]/./sources/core/grid_column_api.gpl.js","webpack://[name]/./sources/core/dynamic_loading.gpl.js","webpack://[name]/./sources/core/plugins/timeline_zoom.ts","webpack://[name]/./sources/core/common/link_formatter_simple.ts","webpack://[name]/./sources/core/plugins/formatters.js","webpack://[name]/./sources/core/plugins/auto_task_types.js","webpack://[name]/./sources/core/plugins/new_task_placeholder.js","webpack://[name]/./sources/core/plugins/resources.js","webpack://[name]/./sources/core/plugins/dhtmlx_hooks.js","webpack://[name]/./sources/core/plugins/jquery_hooks.js","webpack://[name]/./sources/core/plugins/wbs.js","webpack://[name]/./sources/core/plugins/batch_update.js","webpack://[name]/./sources/core/plugins/autoscroll.js","webpack://[name]/./sources/core/plugins/index.js","webpack://[name]/./sources/core/dataprocessor/simple_storage.ts","webpack://[name]/./sources/core/dataprocessor/extend_gantt.ts","webpack://[name]/./sources/core/dataprocessor/data_processor_events.ts","webpack://[name]/./sources/core/dataprocessor/data_processor.ts","webpack://[name]/./sources/core/dataprocessor/index.js","webpack://[name]/./sources/core/datastore/datastore_render.js","webpack://[name]/./sources/core/datastore/select.js","webpack://[name]/./sources/core/datastore/treedatastore.js","webpack://[name]/./sources/core/facades/datastore_links.js","webpack://[name]/./sources/core/facades/datastore_tasks.js","webpack://[name]/./sources/core/facades/datastore.js","webpack://[name]/./sources/core/datastore/datastore_hooks.js","webpack://[name]/./sources/core/facades/layout.js","webpack://[name]/./sources/core/data_task_layers.gpl.js","webpack://[name]/./sources/core/ui/main_layout_initializer.js","webpack://[name]/./sources/core/ui/timeline/links_dnd.js","webpack://[name]/./sources/core/ui/timeline/tasks_dnd.js","webpack://[name]/./sources/core/ui/timeline/main_timeline_initializer.js","webpack://[name]/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/highlight.js","webpack://[name]/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/multi_level.js","webpack://[name]/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/locked_level.js","webpack://[name]/./sources/core/ui/grid/tasks_grid_dnd_marker.js","webpack://[name]/./sources/core/ui/grid/tasks_grid_dnd.js","webpack://[name]/./sources/core/ui/grid/main_grid_initializer.js","webpack://[name]/./sources/core/ui/render/task_grid_line_render.js","webpack://[name]/./sources/core/ui/render/viewport/get_link_rectangle.js","webpack://[name]/./sources/core/ui/render/link_render.js","webpack://[name]/./sources/core/ui/render/task_bg_render.js","webpack://[name]/./sources/core/ui/render/task_split_render.js","webpack://[name]/./sources/core/ui/render/task_bar_smart_render.js","webpack://[name]/./sources/core/ui/grid/editors/linked_properties.js","webpack://[name]/./sources/core/ui/grid/editors/editors/duration.js","webpack://[name]/./sources/core/ui/grid/editors/editors/predecessor.js","webpack://[name]/./sources/core/ui/grid/editors/editors/date.js","webpack://[name]/./sources/core/ui/grid/editors/editors/select.js","webpack://[name]/./sources/core/ui/grid/editors/editors/number.js","webpack://[name]/./sources/core/ui/grid/editors/editors/text.js","webpack://[name]/./sources/core/ui/grid/editors/keyboard_mappings/keyboard_navigation.js","webpack://[name]/./sources/core/ui/grid/editors/keyboard_mappings/default.js","webpack://[name]/./sources/core/ui/grid/editors/keyboard_mappings.js","webpack://[name]/./sources/core/ui/grid/editors/controller.js","webpack://[name]/./sources/core/ui/grid/grid_resize.gpl.js","webpack://[name]/./sources/core/ui/timeline/tasks_canvas_render.gpl.js","webpack://[name]/./sources/core/ui/layout/scrollbar_cell.js","webpack://[name]/./sources/core/ui/layout/resizer_cell.gpl.js","webpack://[name]/./sources/core/ui/layout/view_cell.js","webpack://[name]/./sources/core/ui/layout/view_layout.js","webpack://[name]/./sources/core/ui/render/viewport/is_in_viewport.js","webpack://[name]/./sources/core/ui/render/render_factory.js","webpack://[name]/./sources/core/ui/render/layer_engine.js","webpack://[name]/./sources/core/ui/gantt_layers.js","webpack://[name]/./sources/core/ui/mouse.js","webpack://[name]/./sources/core/ui/configurable.js","webpack://[name]/./sources/core/ui/ui_factory.js","webpack://[name]/./sources/core/ui/index.js","webpack://[name]/./sources/core/message.js","webpack://[name]/./node_modules/setimmediate/setImmediate.js","webpack://[name]/./node_modules/timers-browserify/main.js","webpack://[name]/./node_modules/bluebird/js/browser/bluebird.js","webpack://[name]/./sources/utils/promise.js","webpack://[name]/./sources/core/common/state.js","webpack://[name]/./sources/core/common/templates.js","webpack://[name]/./sources/core/common/dnd.js","webpack://[name]/./sources/core/common/date.js","webpack://[name]/./sources/core/common/serialize.ts","webpack://[name]/./sources/core/common/ajax.js","webpack://[name]/./sources/core/common/config.ts","webpack://[name]/./sources/core/common/services.js","webpack://[name]/./sources/core/common/import.js","webpack://[name]/./sources/constants/index.js","webpack://[name]/./sources/core/gantt.js","webpack://[name]/./sources/core/deprecated_warnings.js","webpack://[name]/./sources/dhtmlxgantt.gpl.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","seed","helpers","copy","result","isDate","Date","isArray","Array","length","isStringObject","String","isNumberObject","Number","isBooleanObject","Boolean","constructor","toString","isCustomType","apply","defined","obj","mixin","target","source","force","f","undefined","uid","valueOf","functor","arguments","event","el","handler","capture","addEventListener","attachEvent","eventRemove","removeEventListener","detachEvent","elementPosition","elem","top","left","right","bottom","getBoundingClientRect","box","body","document","docElem","documentElement","parentNode","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","offsetWidth","offsetHeight","parseInt","offsetTop","offsetLeft","offsetParent","y","Math","round","x","width","height","isVisible","node","display","visibility","getComputedStyle","style","currentStyle","hasNonNegativeTabIndex","isNaN","getAttribute","hasHref","a","area","nodeName","loLowerCase","isEnabled","input","select","textarea","button","toLowerCase","hasAttribute","getClassName","className","baseVal","indexOf","_trimString","_slave","createElement","getTargetNode","e","tagName","srcElement","str","trim","this","replace","getNodePosition","getFocusableNodes","nodes","querySelectorAll","join","nodesArray","slice","splice","getScrollSize","div","cssText","appendChild","clientWidth","removeChild","addClassName","removeClassName","split","regEx","RegExp","insertNode","newone","innerHTML","child","firstChild","removeNode","getChildNodes","css","ch","childNodes","len","out","push","toNode","getElementById","querySelector","locateClassName","classname","strict","trg","ind","charAt","locateAttribute","attribute","getRelativeEventPosition","ev","clientX","clientY","isChildOf","parent","hasClass","element","classList","contains","test","closest","selector","matches","msMatchesSelector","webkitMatchesSelector","parentElement","nodeType","console","error","units","second","minute","hour","day","week","month","quarter","year","getFullYear","getMonth","getDate","arrayFilter","arr","callback","filter","getSecondsInUnit","unit","forEach","workArray","arrayMap","map","resArray","arrayFind","find","arrayDifference","item","arraySome","hashToArray","hash","sortArrayOfHash","field","desc","compare","b","sort","throttle","timeout","wait","setTimeout","pop","isValidDate","getTime","Function","delay","timer","$cancelTimeout","$pending","args","clearTimeout","$execute","objectKeys","keys","requestAnimationFrame","w","webkitRequestAnimationFrame","msRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","cb","isEventable","__","EventHost","_connected","_silent_mode","_silentStart","_silentEnd","createEventStorage","dhx_catch","z","res","zr","addEvent","removeEvent","id","eventHost","catcher","callObj","attachAll","callEvent","arg0","handlerName","concat","checkEvent","list","eventName","eventId","detachAllEvents","dummy","log","BaseControl","render","set_value","get_value","focus","gantt","BaseEditor","show","column","config","placeholder","hide","get_input","is_changed","currentValue","is_valid","save","utils","eventable","domHelpers","Cell","$container","$parent","$config","headerHeight","$gantt","$domEvents","_createDomEventScope","$id","$name","$factory","destructor","$view","$services","getService","detach","_headerClickHandler","detachAll","cell","scrollTo","clear","getNode","padding","resize","final","$preResize","topCont","topSize","getSize","minWidth","maxWidth","minHeight","maxHeight","setSize","_hide","index","cellIndex","moveView","hidden","$toHTML","content","header","raw","html","canCollapse","$fill","init","self","toggle","delegate","collapsed","size","gravity","getContentSize","$lastSize","contentX","contentY","_getBorderSizes","borders","horizontal","vertical","_currentBorders","_borders","_sizeHeader","_sizeContent","_setBorders","view","cssHash","xLayout","floor","transform","env","isIE","navigator","userAgent","isIE6","XMLHttpRequest","isIE7","isIE8","isOpera","isChrome","isKHTML","isFF","isIPad","search","isEdge","__extends","htmlHelpers","_super","SelectControl","sns","getHtmlSelect","options","_dhx_onchange","onchange","_focus","createDropTargetObject","targetParent","targetIndex","targetId","nextSibling","prevSibling","nextSiblingTarget","dndTaskId","targetTaskId","store","getParent","getBranchIndex","prevSiblingTarget","firstChildTarget","lastChildTarget","children","getChildren","start_date","end_date","startCoord","posFromDate","endCoord","min","max","$getConfig","getItemTop","row_height","events","mouseEvents","h","dateHelper","date","services","getSum","sizes","from","to","summ","setSumWidth","sum_width","scale","parts","diff","adjustSize","full_width","splitSize","count","full","share","sortScales","scales","cellSize","step","add","_isLegacyMode","scaleConfig","scale_unit","date_scale","subscales","_prepareScaleObject","format","template","date_to_str","primaryScale","templates","legacyMode","initTemplate","scale_cell_class","getSubScales","prepareConfigs","min_coll_width","container_width","scale_height","minDate","maxDate","rtl","heights","configs","main_scale","cfg","initScaleConfig","processIgnores","initColSizes","limitVisibleRange","unshift","alineScaleColumns","reverseScale","setPosSettings","reverse","trace_x","indexes","trace_indexes","trace_index_transition","_ignore_time_config","skip_off_time","skip","probe","isWorkTime","ignore_x","display_count","min_col_width","line_height","cont_width","column_count","col_width","ignores","min_date","max_date","eachColumn","trace_x_ascending","iterateScales","lower_scale","upper_scale","upper_dates","lower_dates","prev","end","prevUpper","up","target_index","upper_start","upper_end","lower_start","lower_end","targetWidth","start","curr","tzOffset","getTimezoneOffset","_correct_dst_change","dates","last","lastDate","outDate","shared","ScaleHelper","topPositionMixin","canvasRender","Timeline","$scaleHelper","_posFromDateCache","_timelineDragScroll","_findBinary","array","low","high","container","$task","$task_scale","$task_data","$task_bg","$task_links","$task_bars","_tasks","rendered","attr","linksAttr","bindLinks","item_attribute","link_attribute","layers","_createLayerConfig","tasks","linkLayers","links","_attachLayers","ext","dragTimeline","attach","dataHeight","refresh","backgroundImage","smart_rendering","rowStore","countVisible","data_els","contentHeight","contentWidth","scrollHeight","scrollWidth","scrolled","_refreshScales","smart_scales","viewPort","getViewPort","_scales","_getScaleChunkHtml","x_end","y_end","taskFilter","expose","renderer","$ui","taskBar","taskSplitBar","append","taskBg","link","_taskLayers","_linkLayers","_bindStore","taskRenderer","getDataRender","createDataRender","defaultContainer","taskLayers","layer","update","bar_layer","addLayer","_taskRenderer","getLayer","_initStaticBackgroundRender","linkStore","getDatastore","linkRenderer","linkLayer","_linkRenderer","staticRender","_staticBgHandler","static_background","staticBgContainer","$task_bg_static","insertBefore","getScale","destroy","_clearLayers","removeLayer","_render_tasks_scales","scales_html","outer_width","state","getState","_getScales","availWidth","autosize","autosize_min_width","cfgs","min_column_width","fromPos","toPos","scale_row_class","cssClass","tplClass","_prepareScaleHtml","globalConfig","globalTemplates","cells","startIndex","endIndex","inherit_scale_class","cssclass","_waiAria","getTimelineCellAttr","dateFromPos","part","_getColumnDuration","dateValue","columnIndexByDate","assert","wholeCells","partCell","pos","roundPos","_getNextVisibleColumn","columns","visibleDateIndex","_getPrevVisibleColumn","_getClosestVisibleColumn","days","dateIndex","visibleIndex","visibleDate","transition","getItemPosition","task","xLeft","xRight","getItemHeight","task_height","offset","task_height_offset","_timelineCacheAttached","_resetTopPositionHeight","_unbindStore","_smart_render","g","eval","createScope","handlers","eventScope","staticArray","extend","scopes","attributes","_this","entry","_attributes","getHtmlOption","label","_getHtmlContainer","getHtmlButton","getHtmlDiv","getHtmlLabel","getHtmlInput","_getHtmlAttributes","tag","IsWorkTimeArgument","calendar","ClosestWorkTimeArgument","dir","CalculateEndDateArgument","duration","GetDurationArgument","getWorkHoursArguments","Error","setWorkTimeArguments","unsetWorkTimeArguments","isWorkTimeArguments","processedConfig","duration_unit","getClosestWorkTimeArguments","arg","_getStartEndConfig","param","argumentType","duration_step","getDurationArguments","hasDurationArguments","calculateEndDateArguments","DurationFormatterNumeric","canParse","parse","settings","copyLinkIdsArray","linkIds","targetHash","isLinkExists","getLink","copyLinkIds","$source","$target","getSubtreeLinks","rootId","isTaskExists","getTask","eachTask","getSubtreeTasks","PrimaryScaleHelper","_init_tasks_range","scale_offset_minimal","helper","_scale_range_unit","range","start_interval","resolveConfigRange","getSubtaskDates","dateRangeResolver","calculateEndDate","_min_date","_max_date","fit_tasks","old_min","old_max","_adjust_scales","$powerArray","$create","$removeAt","$remove","$find","$insertAt","data","$each","master","$map","$filter","powerArray","DataStore","pull","$initItem","initItem","visibleOrder","fullOrder","_skip_refresh","_filterRule","_searchVisibleOrder","_parseInner","loaded","getItem","_updateOrder","code","updateItem","_removeItemInner","removeItem","_addItemInner","exists","silent","order","data_size","getVisibleItems","getIndexRange","addItem","_changeIdInner","oldId","newId","changeId","_moveInner","sindex","tindex","getIdByIndex","move","clearAll","arraysEqual","arr1","arr2","quick","oldOrder","serialize","eachItem","rule","filteredOrder","Infinity","ret","getItems","getIndexById","_getNullIfUndefined","getFirst","getLast","getNext","getPrev","_task_default_render","_isAllowedUnscheduledTask","_isTaskInTimelineLimits","$getTemplates","taskType","getTaskType","type","padd","types","milestone","link_line_width","setAttribute","show_progress","done","progress","pr","progressColor","backgroundColor","opacity","progress_text","position","wrapper","drag_progress","isReadonly","drag","markerPos","_render_task_progress","task_text","_render_task_content","textColor","color","basic","itemId","project","isSummaryTask","isSplitTask","open_split_tasks","$open","select_task","isSelectedTask","drag_id","drag_mode","touch_drag","link_source_id","link_target_id","highlight_critical_path","isCriticalTask","link_landing_area","from_id","from_start","link_from_start","to_start","link_to_start","allowDrag","isLinkAllowed","dragClass","_combine_item_class","task_class","styles","side","_get_link_crossing_css","_render_side_content","leftside_text","_render_leftside_content","rightside_text","_render_rightside_content","setTaskBarAttr","drag_resize","_render_pair","drag_links","show_links","outer","inner","showLinkPoints","touch","text","cond","leftside","start_to_start","finish_to_start","finish_to_finish","_get_conditions","ln","tp","type_renderers","defaultRenderer","gridResize","Grid","$state","gridAriaAttr","gridAttrString","gridDataAriaAttr","gridDataAttrString","$grid","gridScaleRowAttrString","$grid_scale","$grid_data","resizer","_renderHeaderResizers","doOnRender","_mouseDelegates","_addLayers","_initEvents","_validateColumnWidth","numericWidth","outerWidth","getGridColumns","innerWidth","scrollable","_setColumnsWidth","grid_width","_getGridWidth","_gridCacheAttached","_initSmartRenderingPlaceholder","_calculateGridWidth","_renderGridHeader","getColumnIndex","getColumn","gridLine","_refreshPlaceholderOnStoreUpdate","scrollY","scroll","getView","getScrollState","scrollSize","$rowsPlaceholder","close","open","_getColumnWidth","min_width","min_grid_column_width","new_width","max_width","_getGridWidthLimits","min_limit","max_limit","newWidth","start_index","columns_width","final_width","extra_width","start_width","col","iterator","curExtra","_getColsTotalWidth","cols_width","v","parseFloat","unknown","gridWidth","autofit","delta","changed","_setContentSize","locale","labels","lineHeigth","colWidth","_sort","direction","grid_header_class","gridScaleCellAttrString","lineHeight","topCache","getRowTop","taskId","itemIndex","parentId","Layout","$root","_parseConfig","$cells","_resizeScrollbars","scrollbars","scrollbar","scrollChanged","visibleScrollbars","hiddenSrollbars","showScrollbar","hideScrollbar","shouldHide","shouldShow","visibleGroups","group","_syncCellSizes","groupName","newSize","groups","_eachChild","_syncGroupSize","_xLayout","getNextSibling","ownSize","resizeSibling","getPrevSibling","siblingSize","totalGravity","totalSize","k","mainGrid","$content","startStage","mainCall","_resizeInProgress","contentViews","getCellsByType","setContentSize","_getAutosizeMode","isChild","cellId","sub","alert","rows","cols","views","initUI","getCells","_cleanElSize","_getBoxStyles","computed","properties","boxSizing","clientHeight","MozBoxSizing","horPaddings","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","vertPaddings","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","borderBox","innerHeight","outerHeight","boxSizes","contentSizes","_sizes","margin","_calcFreeSpace","_free","_gravity","_calcSize","_configureBorders","borderClass","lastVisibleIndex","lastCell","borderColorClass","_updateCellVisibility","oldVisibleCells","_visibleCells","firstCall","visibleCells","cellView","marginSide","dx","dy","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","noop","nextTick","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","host","updPerSecond","_on_timeout","ceil","default","_eventRemoveAll","$layout","resetLightbox","_dp","$destroyed","check","message","show_errors","expire","calculateScaleRange","scroll_size","_reinit","dropLayout","reset","rebuildLayout","layout","createView","storeNames","refreshData","getPropertyValue","resizeWatcher","tabIndex","wai_aria_attributes","contentWindow","listenWindowResize","addResizeListener","resizeDelay","resetLayout","$mouseEvents","_update_flags","initTemplates","_clearTaskLayers","_clearLinkLayers","$click","buttons","edit","showLightbox","delete","question","confirm_deleting","confirm_deleting_title","_dhtmlx_confirm","$new","deleteTask","hideLightbox","posX","_getHorizontalScrollbar","codeScrollLeft","visible_date","task_scroll_offset","preserve_scroll","new_pos","showDate","setSizes","locate","targetAttribute","task_attribute","_locate_css","_locateHTML","getTaskRowNode","els","changeLightboxType","getLightboxType","_silent_redraw_lightbox","_get_link_type","start_to_finish","prevOffset","time_unit","offsetChanged","$data","tasksStore","_isSplitItem","_is_icon_open_click","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","getTaskDND","_tasks_dnd","touch_feedback","touch_feedback_duration","_prevent_touch_scroll","_touch_feedback","vibrate","touchEventsSupported","createEvent","_touch_events","touches","pageX","pageY","pointerEnabled","pointerType","msPointerEnabled","MSPOINTER_TYPE_MOUSE","touchHandlers","names","accessor","ignore","scroll_state","dblclicktime","action_mode","scroll_mode","action_start","long_tap_timer","current_target","start_drag","on_mouse_move","preventDefault","cancelBubble","abs","_touch_scroll_active","new_scroll_state","block_action","on_mouse_down","renders","_getTaskLayers","isTaskVisible","cloneNode","cloneTaskRendered","_start_dnd","_touch_drag","refreshTask","on_mouse_up","now","onDoubleClick","skins","link_arrow_size","lightbox_additional_height","_second_column_width","_third_column_width","material","_redefine_lightbox_buttons","buttons_left","buttons_right","getTaskNode","indx","broadway","_lightbox_template","_config_buttons_left","_config_buttons_right","gantt_delete_btn","gantt_save_btn","terrace","meadow","skyblue","_get_skin","skin","getElementsByTagName","href","match","skinset","_configure","resetSkin","activate","_cached_functions","update_if_changed","active","cache","critical_path_mode","wrap_methods","methods","_prefetch_originals","prefetch","methodname","original","optimizer","argumentsArray","get_arguments_hash","cached_values","has_cached_value","get_cached_value","cache_value","arguments_hash","is_date","getUTCDate","values","stringify_argument","deactivate","setup","override_gantt","gantt_methods","optimize_render","deactivTimeout","_extend_to_optional","lightbox_block","optional_time","section","mapping","_resolve_default_mapping","disable","val","enable","disabled","update_block","_lightbox_id","previousSibling","button_text","resizeLightbox","button_click","_get_typed_lightbox_config","form_blocks","duration_optional","time_optional","time","ConstraintControl","isNonTimedConstraint","constraint_types","ASAP","ALAP","toggleTimeSelect","timeSelects","typeValue","isNonTimed","getTimePicker","typeSelect","_time_format_order","_eventsInitialized","constraintDate","_fill_lightbox_select","constraintType","getConstraintType","getTimePickerValue","ParentControl","_display","item_id","getTaskByTime","allow_root","root_id","root_label","_filter","map_to","tmpDom","newOptions","onselect","replaceChild","DurationControl","getFormatter","formatter","_getStartDate","_getDuration","singleDate","single_date","readonly","ariaAttr","lightboxDurationInputAttrString","durationInputClass","duration_val","inps","btns","endspan","_calc_date","task_end_date","task_date","_change_duration","onclick","onkeydown","charCode","keyCode","which","constants","KEY_CODES","DOWN","UP","calculateDuration","startDate","endDate","RadioControl","radio","default_value","checked","CheckboxControl","checkboxes","TimeControl","auto_end_date","_update_lightbox_select","selects","_get_timepicker_step","_getEndDate","TextareaControl","_get_input","TemplateControl","ResourcesControl","getHtmlButtons","floatRight","_migrate_buttons","lightboxButtonAttrString","getHtmlTimePickerOptions","start_year","end_year","tdate","timeFormat","year_range","first","_time_values","time_picker","setTime","getHours","getMinutes","_lightbox_methods","registerProvider","lightbox","getLightbox","_center_lightbox","showCover","_fill_lightbox","lightboxVisibleAttr","round_dnd_dates","timeline","_is_chart_visible","time_step","getLabel","sections","j","updateCollection","list_name","collection","serverList","_lightbox_type","lightboxDiv","fullWidth","classNames","_lightbox","_is_lightbox_timepicker","wide_form","lightboxAttr","drag_lightbox","onmousedown","_ready_to_dnd","onselectstart","cursor","_init_dnd_events","_render_sections","labelBlock","inputBlock","inputId","bindLabelsToInputs","_init_lightbox_events","block","con","scroll_top","scroll_left","view_height","_cover","_document_height","_scroll_height","lightbox_events","_save_lightbox","gantt_cancel_btn","_cancel_lightbox","src","sec","buttonTarget","SPACE","shiftKey","click","edit_save","edit_cancel","getLightboxValues","addTask","getTaskIndex","updateTask","lightboxHiddenAttr","hideCover","_custom_lightbox","_set_lightbox_values","lightboxHeader","lightbox_header","task_time","substr","getLightboxSection","getValue","setValue","get_template_control","control","get_select_control","get_textarea_control","get_time_control","_move_while_dnd","_finish_dnd","_dnd_start_lb","gantt_unselectable","lb","_lb_start","ariaAttrs","date_part","time_format","getTimeFormat","limit_time_select","first_hour","last_hour","setHours","lightboxSelectAttrString","needSetTime","mapOffset","checkbox","resources","constraint","ok","opts","confirm","type_value","oldType","formData","updTask","isUnscheduledTask","unscheduled","show_unscheduled","taskStart","taskEnd","getGlobalTaskIndex","_getProjectEnd","project_end","_getProjectStart","project_start","_defaultTaskDate","parent_id","schedule_from_end","getTaskByIndex","_set_default_task_timing","createTask","setParent","details_on_create","selectTask","showTask","oldid","newid","unselect","getSelectedId","_get_task_timing_mode","task_type","$no_start","$no_end","$rendered_type","_init_task_timing","task_mode","dirty","resetProjectDates","taskMode","_assign_project_dates","getSubtaskDuration","task_id","taskTiming","_update_parents","pid","has_changed","oldStart","oldEnd","roundDate","upper","lower","colIndex","steps","correctTaskWorkTime","work_time","correct_work_time","getClosestWorkTime","calendarManager","timeCalculator","getWorkHours","setWorkTime","unsetWorkTime","_hasDuration","hasDuration","createCalendar","addCalendar","getCalendar","getCalendars","getTaskCalendar","deleteCalendar","CalendarDisabledTimeStrategy","argumentsHelper","_calculateDuration","fixedUnits","createArgumentsHelper","NoWorkTimeCalendar","TimeCalculator","$disabledCalendar","_getCalendar","manager","WorkUnitsObjectCache","timestamp","_cache","setItem","WorkUnitsMapCache","has","unitCache","Map","set","workunit_map_cache_1","workunit_object_cache_1","createCacheObject","cacheFactory","CalendarWorkTimeStrategy","_workingUnitsCache","_getUnitOrder","_timestamp","UTC","_checkIfWorkingUnit","_isWorkTime","_is_work_day","_getWorkHours","_is_work_hour","_internDatesPull","_nextDate","_getWorkUnitsBetweenGeneric","stepStart","stepEnd","next","checkFirst","checkLast","isLastStep","_getMinutesPerDay","_getHoursPerDay","_getWorkUnitsForRange","getUnitsPerDay","total","_getWorkUnitsBetweenQuick","firstDayStart","firstDayEnd","day_start","lastDayStart","lastDayEnd","startPart","endPart","worktime","_setCalendar","_tryChangeCalendarSettings","payload","backup","JSON","stringify","_isEmptyCalendar","datesArray","isFullWeekSet","checkFullArray","getDay","reset_calendar","dateKey","is_work_unit","mult","_calculateEndDate","_calculateMinuteEndDate","_calculateHourEndDate","_addInterval","stopAction","added","current","interval","getSeconds","getMilliseconds","durationLeft","setMinutes","setSeconds","_getClosestWorkTime","inputDate","_getClosestWorkTimePast","_getClosestWorkTimeFuture","closestFuture","closestPast","_getClosestWorkTimeGeneric","increment","unitOrder","biggerTimeUnit","CalendarWorktimeStrategy","CalendarManager","_calendars","_getDayHoursForMultiple","calendars","tick","currPos","reduce","acc","mergeCalendars","newCalendar","_convertWorktimeSettings","parentCalendar","defaults","fulltime","apiCore","createDefaultCalendars","_getOwnCalendar","calendar_property","resource_calendars","resource","calendarId","inherit_calendar","stop","eachParent","worktimes","restoreConfigCalendars","global","worktimeFacadeFactory","facade","jsonParseError","load","url","_load_url","cl","_load_type","ajax","on_load","xmlDoc","responseText","resp","status","responseURL","_process_loading","collections","_load_collections","linksStore","initial_scroll","firstTask","collections_loaded","option","option_key","$ignore","json","dhx_security","security_key","serializeTask","_copyObject","serializeLink","_copyLink","xml_format","formate_date","rawLinks","getLinks","xml","_xmlNodeToJSON","attrs_only","nodeValue","_getCollections","loader","xpath","itms","attrs","_getXML","toptag","getXMLTopNode","xmltop","xmlParseError","skey","evs","oldxml","startdate","est","enddate","predecessortasks","editable_property","readonly_property","htmlTags","extraSpaces","stripHTMLLite","htmlText","singleQuotes","escapeQuotes","getAttributeString","dateString","aria-label","_taskCommonAttr","tooltip_text","$dataprocessor_class","drag_move","taskRowAttr","order_branch","$level","hasChild","linkAttr","linkTypes","toStart","fromStart","drag_link","gridSeparatorAttr","buttonName","role","tabindex","headerText","time_option","aria-valuemin","multiselect","gridCellAttrString","textValue","editor","gridAddButtonAttrString","messageButtonAttrString","buttonLabel","messageInfoAttr","messageModalAttr","quickInfoAttr","quickInfoHeaderAttrString","quickInfoHeader","quickInfoButtonAttrString","tooltipAttr","tooltipVisibleAttr","tooltipHiddenAttr","getGridColumn","USE_KEY","_defaultScales","TimelineZoom","zoomIn","getCurrentLevel","setLevel","zoomOut","_levels","_activeLevelIndex","getLevels","level","zoomLevel","_getZoomIndexByName","_setLevel","levelName","_getVisibleDate","scrollPos","_visibleDate","cursorOffset","nextConfig","chartConfig","cursorDate","newPosition","middleDate","_attachWheelEvent","_domEvents","_useKey","_handler","_defaultHandler","timelineOffset","wheelUp","deltaY","wheelDelta","stopPropagation","_setScaleSettings","_setScaleDates","_initialStartDate","_initialEndDate","activeLevelIndex","_mapScales","levels","_minColumnWidth","minColumnWidth","_maxColumnWidth","maxColumnWidth","_widthStep","widthStep","useKey","_initialized","trigger","_stepUp","_stepDown","nextLevel","newColumnWidth","LinkFormatterSimple","_getWBSCode","_linkReg","linkPart","exec","_findSource","_gantt","lag","pred","getWBSCode","reqTemplate","wbs","getTaskByWBSCode","DurationFormatter","LinkFormatter","formatters","durationFormatter","enter","linkFormatter","callIfEnabled","auto_types","updateParents","childId","batchUpdate","checkParent","targetType","getTaskTypeToUpdate","updateTaskType","setTaskType","delTaskParent","group_mode","allTypes","hasChildren","originalRowDndParent","originalMoveTaskParent","isParsingDone","updateAfterRemoveChild","sid","placeholder_task","insertPlaceholder","placeholders","getTaskBy","afterEdit","newTask","dataProcessor","_silencedPlaceholder","setUpdated","ready","isPlaceholderTask","isPlaceholderLink","action","commands","command","entity","getRectangle","createResourceMethods","resourceTaskCache","propertyName","propertyValue","filterResourceTasks","getResourceTasks","falsyValuePreffix","random","resourceHashFunction","resourceIds","cacheKey","resourceHash","resourceId","resourceValue","resource_id","getResourceLoad","resourceProperty","$role","scaleUnit","scaleStep","timegrid","currDate","timetable","resource_render_empty_cells","calculateResourceLoad","renderBar","renderConnection","prevLevel","isColumnVisible","columnIndex","cellLeftCoord","cellRightCoord","selectAssignments","resource_property","owners","renderLine","renderedResourceLines","renderResourceLineCell","resource_cell_class","resource_cell_value","detachRenderedResourceLine","viewport","smartRendering","row","renderHistogram","renderedHistogramCells","renderedHistogramRows","renderedHistogramCapacity","detachRenderedHistogramCell","renderedRow","renderCapacityElement","capacityMatrix","maxCapacity","renderedElement","capacityElement","capacity","colStart","colEnd","bar","connection","renderHistogramLine","renderHistogramCell","histogram_cell_class","histogram_cell_label","fill","histogram_cell_allocated","histogram_cell_capacity","renderedCell","filterTasks","getResourceAssignments","assignments","resourceRow","resourceHistogram","resource_store","dhtmlx","attaches","attachGantt","cmp","attachObject","dataType","dataObj","that","vs","av","grid","border","gridId","gridObj","dhtmlXCellObject","jQuery","$","fn","dhx_gantt","each","newgantt","Gantt","getGanttInstance","_needRecalc","_isRecalcNeeded","_isGroupSort","_calcWBS","$virtual","$wbs","_setWBSCode","getByWBSCode","currentNode","_isFirst","_prevSibling","_wbs","_parent","createWbs","resetCache","createMethod","isActive","disableMethod","methodName","dummyMethod","restoreMethod","restoreMethods","batchUpdatePayload","batch_update","noRedraw","dp_mode","call_dp","updateMode","setUpdateMode","resetProjects","refreshLink","methodsHash","setGanttMode","sendData","scrollRange","scrollStep","scrollDelay","scrollSpeed","isMove","delayTimeout","startPos","started","eventPos","isDisplayed","isScrollState","dragMarker","isResize","isLink","isClickDrag","autoscroll","defineDelayTimeout","speed","autoscroll_speed","setInterval","autoscroll_delay","defineScrollInterval","clearInterval","autoscrollInterval","isScroll","posY","need_scroll","scrollState","currentScrollTop","scrollOuterHeight","inner_height","scrollInnerHeight","currentScrollLeft","scrollOuterWidth","inner_width","scrollInnerWidth","autoscroll_step","boxSize","zoom","SimpleStorage","_storage","storeItem","getStoredItem","dp","getUserData","userdata","setUserData","_change_id","_ganttMode","changeLinkId","changeTaskId","_row_style","rowId","_delete_task","_sendTaskOrder","$drop_target","setDp","DataProcessorEvents","$dp","_dataProcessorHandlers","treeHelper","cascadeDelete","clientSideDelete","updated","updatedRows","clientOnly","_in_progress","cascade_delete","dpMode","cascade","sendAllData","_tSend","_waitMode","itemLinks","_links","getTaskLinks","updateLink","_tMode","_serverProcessor","substring","serverProcessor","pluralizedMode","urlSeparator","upd","isExist","addLink","objData","xml_date","parse_date","deleteLink","data_processor_events_1","extend_gantt_1","simple_storage_1","createDataProcessor","router","tMode","DataProcessor","setTransactionMode","serverProcessorURL","action_param","autoUpdate","_headers","_payload","_postDelim","_invalid","messages","inserted","deleted","invalid","invalid_cell","enableUTFencoding","headers","_endnm","_serializeAsJson","_router","escape","_utf","encodeURIComponent","setDataColumns","_columns","getSyncState","enableDataNames","enablePartialDataSend","_changed","dnd","findRow","existing","set_invalid","is_invalid","markRow","_methods","details","getActionByState","checkBeforeUpdate","editStop","_beforeSendData","_getRowData","_serializeAsJSON","serialize_one","stack","pref","serialized","valid","_forEachUpdatedRow","_sendData","_getAllData","pattern","defineAction","_uActions","afterUpdateCallback","tid","btag","ganttMode","correct","originalSid","afterUpdate","_xml","getGanttMode","reqUrl","filePath","finalizeUpdate","cleanUpdate","atag","_dp_init","_setDefaultTransactionMode","dataProcessorEvents","setOnAfterUpdate","setOnBeforeUpdateHandler","setAutoUpdate","user","_user","_needUpdate","_updateBusy","afterAutoUpdate","fullSync","loadUpdate","xml_node","getUpdates","vers","_getXmlNodeValue","updates","status_1","parent_1","modes","newState","_applyPayload","_cleanupArgumentsBeforeSend","dataToSend","processedData","_cleanupItemBeforeSend","updatedItem","output","queryParams","ids","urlParams","method","preprocessedData","query","taskState_1","taskAction","ganttMode_1","_onResolvedCreateUpdate","actionPromise","then","hasOne","_prepareDataItem","rawItem","processedItem","format_date","dataItem","DEPRECATED_api","server","getDataProcessorModes","getAvailableModes","bindDataStore","itemRepainter","getLayers","render_item","renderers","render_items","update_items","skipRepaint","onUpdateRequest","change_id","refreshId","selectedId","deleteItem","subItem","isSelected","TreeDataStore","_branches","$parentProperty","parentProperty","$getRootId","$openInitially","openInitially","_ganttConfig","getConfig","canOpenSplitTasks","_buildTree","_add_branch","calculateItemLevel","_move_branch","$rendered_parent","_replace_branch_child","_traverseBranches","branch","items","source_pid","tbranch","getSiblings","siblings","_setParentInner","new_pid","startItem","parentsHash","added_already","old_parent","new_parent","old_id","new_id","newbranch","criteria","original_criteria","temp","getLinkCount","getTaskCount","getVisibleTaskCount","startTask","calculateTaskLevel","moveTask","createTasksFacade","createLinksFacade","createDatastoreSelect","datastoreRender","getDatastores","createDatastoreFacade","createDatastore","$StoreType","open_tree_initially","dropService","setService","storeList","stores","refresh_links","linkId","_clear_data","unselectTask","facadeFactory","parseDate","originalTask","checkLinkedTaskVisibility","sync_link","sourceTask","targetTask","sync_link_delete","sync_links","mapEvents","conf","mapFrom","mapTo","sourceEvent","targetEvent","$index","show_tasks_outside_timescale","oldState","sourceVisible","targetVisible","deletedLinks","onItemLoading","onBeforeAdd","onAfterAdd","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onIdChange","onBeforeItemMove","onAfterItemMove","onFilterItem","onItemOpen","onItemClose","onBeforeSelect","onAfterSelect","onAfterUnselect","getTimeline","getGrid","getVerticalScrollbar","getHorizontalScrollbar","DEFAULT_VALUE","tryCall","fallback","getTaskTop","getTaskPosition","getTaskHeight","roundTaskDates","getLinkNode","oldH","oldV","newV","newH","date_x","scroll_to","_scroll_state","x_pos","y_pos","x_inner","y_inner","scrollVer","scrollHor","horState","visible","verState","addTaskLayer","addLinkLayer","initializer","_legacyGridResizerClass","resizers","gridResizer","onCreated","mainTimeline","show_chart","showGrid","show_grid","colsWidth","grid_limits","original_grid_width","skinSettings","_initScrollStateEvents","_getVerticalScrollbar","oldPos","newPos","$scroll_ver","$scroll_hor","_findGridResizer","gridFirst","_getSiblings","_behind","_front","onInitialized","resizeInfo","initialWidth","prevCellWidth","nextCellWidth","viewCell","limits","newBehindSize","newFrontSize","oldBackSize","oldFrontSize","newBackSize","oldSize","onDestroyed","initLinksDND","_link_landing","_link_target_task","_link_target_task_start","_link_source_task","_link_source_task_start","markerDefaultOffset","scrollDefaultSize","getDndState","DnD","sensitivity","updates_per_second","getLinePos","shift","isStart","taskPos","xEnd","yEnd","milestoneWidth","origWidth","sqrt","getVisibleMilestoneWidth","getMilestonePosition","isMilestone","getPosition","markerSize","getMarkerSize","viewportSize","getVieportSize","offsetX","tooltip_offset_x","offsetY","tooltip_offset_y","updateMarkedHtml","drag_link_class","resetDndState","showDirectingLine","s_x","s_y","e_x","e_y","_direction","getDirectionLine","link_direction_class","dist","pow","tan","angle","atan","coordinateCircleQuarter","PI","sin","cos","ieTransform","shiftLeft","shiftTop","sX","eX","sY","eY","_dir_start","dd","advanceMarker","landing","prevTarget","prevLanding","prevToStart","targ","_dir_end","targetChanged","createLinkDND","createTaskDND","round_task_dates","dragMultiple","_events","before_start","before_finish","after_finish","_handlers","clear_drag_state","set_actions","drag_from_start","stage","_move","_resize","_resize_progress","start_x","start_y","coords_x","_drag_task_coords","minDurationInUnits","_calculateMinDuration","min_duration","diffValue","_find_max_shift","dragItems","correctShift","minX","maxX","maxShift","minShift","new_start","new_end","obj_s_x","obj_e_x","_mouse_position_change","_is_number","isFinite","_update_on_move","_update_item_on_move","curr_date","dragHash","_isMultiselect","getSelectedTasks","drag_project","initialDrag","childDrag","_get_drag_mode","_fix_dnd_scale_time","fixStart","fixEnd","_fix_working_times","_finalize_mouse_up","_fireEvent","_dhx_changed","dragProperty","selectedTasksIds","selectedTask","_addSubtasksToDragMultiple","params","drag_state","drag_multiple","summaryId","taskDnD","linkDnD","_linksDnD","_tasksDnD","_attachDomEvents","_attachStateProvider","extendDom","_clearDomEvents","_clearStateProvider","_delete_link_handler","link_description","coll","coll_date","scale_step","unregisterProvider","gridToPageCoordinates","gridPos","removeLineHighlight","markerLine","highlightPosition","ePos","gridHeight","getTaskMarkerPosition","pointerEvents","markerFolder","highlightFolder","linePos","indentNode","indent","itemTop","itemHeight","childCount","getLineMarkerPosition","highlightRow","dropTarget","relTargetPos","eventTop","findClosesTarget","allowedLevel","targetLevel","findTargetAbove","findTargetBelow","rootLevel","getLockedLevelTarget","getMultiLevelTarget","higlighter","dnd_sensitivity","hideQuickInfo","_hideQuickInfo","initial_open_state","outerHTML","drop_target","$transparent","getDropPosition","getTargetTaskId","lockLevel","order_branch_free","getStore","lastTaskOfLevel","last_item","_getGridPos","_getTargetY","_getTaskByY","dropIndex","targetY","over","nextId","prevId","rowDnd","rowDndMarker","extendGantt","inlineEditors","_inlineEditors","createEditors","initEvents","clearEvents","scroll_on_click","sorting_method","callHandler","totalWidth","getRowRectangle","aria","date_grid","tree","grid_indent","grid_blank","grid_file","grid_open","grid_folder","align","grid_row_class","css_template","barRectangle","sourceBox","targetBox","getLinkRectangle","drawer","current_pos","dirs","down","path","point","get_lines","dots","line_to","get_path","line","_get_line","get_wrapper_sizes","wrapper_size","link_wrapper_width","get_line_sizes","line_size","marginTop","marginLeft","render_line","innerPos","get_direction","vect","path_builder","point_to","get_points","pt","get_endpoint","xy","shiftX","lineType","get_line_type","forward","sign","milestoneHeight","lines","cssTemplate","link_class","isCriticalLink","endpoint","line_width","_render_link_arrow","borderColor","isLegacyRender","viewportLeft","viewPortRight","firstCellIndex","lastCellIndex","renderedCells","isRendered","detachRenderedCell","getCellTemplate","task_cell_class","warn","timeline_cell_class","renderOneCell","cssTemplateContent","static_background_cells","cellTemplate","show_task_cells","odd","task_row_class","getBarRectangle","createBaseBarRender","defaultRender","sub_tasks","keepDatesOnEdit","keepDurationOnEdit","defaultActionOnEdit","TextEditor","PredecessorEditor","parseInputString","predecessors","delimiter","formatPredecessors","formatLinkKey","getLinksDiff","predecessorCodes","selectedLinks","getSelectedLinks","existingLinksSearch","linksToAdd","linkKey","linksToDelete","remove","linksDiff","autoSchedule","inputPredecessors","taskPredecessors","html5DateFormat","dateToStr","strToDate","DateEditor","str_to_date","minValue","maxValue","parsed","SelectEditor","optionsHtml","NumberEditor","controller","onBlurDelay","keyNav","keyboardNavigation","activeCell","locateCell","columnName","editorState","getEditorConfig","startEdit","hasEditor","keyboard","preventKeyNav","ENTER","ctrlKey","metaKey","ESC","LEFT","RIGHT","editorType","DELETE","TAB","editPrevCell","editNextCell","modifiers","anyModifier","alt","ctrl","meta","getCommandHandler","onShow","onHide","isChanged","defaultPrevented","shouldPrevent","defaultMapping","keyNavMappings","setMapping","getMapping","keyboard_navigation_cells","getKeyboardMapping","textEditorFactory","numberEditorFactory","selectEditorFactory","dateEditorFactory","predecessorEditorFactory","durationEditorFactory","linkedPropertiesProcessor","initConfigs","editor_types","number","predecessor","keyboardMapping","eventBus","inlineEditController","_createPlaceholder","_getEditorPosition","findVisibleIndex","updateTaskDateProperties","_itemId","_columnName","_editor","_editorType","_placeholder","editorConfig","_getItemValue","newValue","oldValue","inline_editors_date_processing","_findEditableCell","nextIndex","nextColumn","getNextCell","getFirstCell","getLastCell","canChangeRow","moveRow","nextItem","editNextRow","editPrevRow","handlerId","ScrollbarCell","SCROLL_MODIFIER_KEYS","_scrollHorizontalHandler","_scrollVerticalHandler","_outerScrollVerticalHandler","_outerScrollHorizontalHandler","_mouseWheelHandler","_isHorizontal","scrollPosition","_isVertical","_initVertical","_initHorizontal","_initMouseWheel","_initLinkedViews","_getRootParent","_eachView","eachCell","_getLinkedViews","scrollX","_updateLinkedViews","scrollHorizontally","_scrolling","scrollVertically","_wheel_time","_oldLeft","_getScrollSize","outerSize","isHorizontal","linked","scrollProperty","innerSizeProperty","outerProperty","_getScrollOffset","cellScrollSize","nonScrollableSize","outerScroll","innerScroll","scrollSizes","_setScrollSize","toggleVisibility","_getScaleOffset","parentLayout","_oldTop","_checkWheelTarget","targetNode","connectedViews","ff","wx","deltaX","wheelDeltaX","wy","horizontalScrollModifier","horizontal_scroll_key","oldLeft","detail","oldTop","ViewCell","childConfig","$initialized","unload","outerX","outerY","childSize","ViewLayout","$cell","byMaxSize","otherCell","isInViewPort","basicGetRectangle","task_area_pulls","task_area_renderers","getRenderer","renderMethod","updateMethod","layer_attribute","rendererViewPort","dom","remove_item","clear_container","buffer","createDocumentFragment","vis","itemNode","restore","replace_item","newNode","clearRenderers","renderFactoryProvider","mergeFilters","filter_methods","filter_method","renderFactory","createGroup","getContainer","relativeRoot","defaultFilters","initLayer","renderGroup","tempCollection","filters","_add","pending","topmost","rel","requestUpdate","eachLayer","createLayerFactory","previusSiblingContainer","defaultContainerSibling","removeTaskLayer","_getLinkLayers","removeLinkLayer","createMouseHandler","eventHandlers","doubleclick","contextMenu","addEventTarget","onClick","findEventHandlers","callEventHandlers","onContextMenu","returnValue","delegateHandlers","handlerResult","details_on_dblclick","onMouseMove","_last_move_event","domEvents","elementHandlers","ViewSettings","extendSettings","parentSettings","own","parentView","parentConfig","parentTemplates","configurable","createFactory","createdViews","creator","configure","registerView","viewConstructor","uiFactory","createLayers","Resizer","Scrollbar","ResourceGrid","ResourceTimeline","ResourceHistogram","gridEditorsFactory","renderTaskBar","renderSplitTaskBar","renderTaskBg","renderLink","gridRenderer","mainGridInitializer","mainTimelineInitializer","mainLayoutInitializer","attachInitializer","layersEngine","layersApi","layersService","boxAttribute","_dhx_msg_cfg","usercall","modalBox","modal_key","messageBox","modality","cover","buttonAriaAttrs","getFirstDefined","_createBox","cancel","contentId","btn","_boxStructure","alertPopup","confirmPopup","boxPopup","box_params","focusable","timers","info","hideAll","popups","modalbox","setImmediate","registerImmediate","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","getPrototypeOf","handle","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","messagePrefix","onGlobalMessage","installPostMessageImplementation","MessageChannel","channel","port1","port2","installMessageChannelImplementation","script","onreadystatechange","installReadyStateChangeImplementation","clearImmediate","scope","Timeout","clearFn","_id","_clearFn","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","u","_dereq_","1","Promise","SomePromiseArray","_SomePromiseArray","any","promises","promise","setHowMany","setUnwrap","2","firstLineError","schedule","Queue","util","Async","_customScheduler","_isTickUsed","_lateQueue","_normalQueue","_haveDrainedQueues","_trampolineEnabled","drainQueues","_drainQueues","_schedule","AsyncInvokeLater","receiver","_queueTick","AsyncInvoke","AsyncSettlePromises","_pushOne","_drainQueue","_drainQueueStep","_settlePromises","setScheduler","hasCustomScheduler","enableTrampoline","disableTrampolineIfNecessary","hasDevTools","haveItemsQueued","fatalError","isNode","stderr","write","exit","throwLater","invokeLater","invoke","settlePromises","_reset","./queue","./schedule","./util","3","INTERNAL","tryConvertToPromise","debug","calledBind","rejectThis","_","_reject","targetRejected","context","promiseRejectionQueued","bindingPromise","_then","bindingResolved","thisArg","_bitField","_resolveCallback","bindingRejected","_propagateFrom","propagateFromFunction","_boundValue","boundValueFunction","maybePromise","_target","_setBoundTo","_setOnCancel","_boundTo","_isBound","resolve","4","old","bluebird","noConflict","./promise","5","cr","callerCache","getterCache","canEvaluate","caller","classString","TypeError","ensureMethod","namedGetter","indexedGetter","isIdentifier","isIndex","maybeGetter","getGetter","6","PromiseArray","apiRejection","tryCatch","errorObj","async","_async","cancellation","_warn","_isCancellable","_cancelBy","_isFollowing","_followee","_cancelBranched","_cancellationParent","_setWillBeCancelled","_branchHasCancelled","_branchesRemainingToCancel","_enoughBranchesHaveCancelled","canceller","_invokeOnCancel","_cancel","_setCancelled","_cancelPromises","_length","_unsetOnCancel","_onCancelField","isPending","_isCancelled","isCancellable","isCancelled","_doInvokeOnCancel","onCancelCallback","internalOnly","_attachExtraTrace","_resultCancelled","_onCancel","_invokeInternalOnCancel","7","NEXT_FILTER","getKeys","instances","boundTo","predicateLoop","matchesPredicate","isObject","./es5","8","longStackTraces","contextStack","Context","_trace","CapturedTrace","peekContext","lastIndex","_promiseCreated","_pushContext","_popContext","_peekContext","trace","deactivateLongStackTraces","activateLongStackTraces","Promise_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","ctx","9","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","getDomain","_getDomain","Warning","es5","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","warnings","wForgottenReturn","suppressUnhandledRejections","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejection","_notifyUnhandledRejectionIsHandled","fireRejectionEvent","_setReturnedNonUndefined","_returnedNonUndefined","_isRejectionUnhandled","reason","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_unsetRejectionIsUnhandled","shouldUseOwnTrace","onPossiblyUnhandledRejection","domain","domainBind","onUnhandledRejectionHandled","disableLongStackTraces","longStackTracesIsSupported","Promise_captureStackTrace","_captureStackTrace","Promise_attachExtraTrace","Promise_dereferenceTrace","_dereferenceTrace","longStackTracesCaptureStackTrace","longStackTracesAttachExtraTrace","longStackTracesDereferenceTrace","hasLongStackTraces","fireDomEvent","CustomEvent","dispatchEvent","eventData","cancelable","domEvent","Event","initCustomEvent","fireGlobalEvent","generatePromiseLifecycleEventObject","eventToObjectGenerator","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","warning","unhandledRejection","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","defaultFireEvent","cancellationExecute","executor","reject","onCancel","_attachCancellationCallback","cancellationAttachCancellationCallback","previousOnCancel","cancellationOnCancel","cancellationSetOnCancel","cancellationClearCancellationData","cancellationPropagateFrom","flags","branchesRemainingToCancel","warningsOption","_clearCancellationData","_execute","monitoring","isFulfilled","ignoreSelf","attachExtraTrace","__stackCleaned__","parseStackAndMessage","notEnumerableProp","formatAndLogError","cleanStack","isTraceLine","isInternalFrame","shouldIgnore","stackFramesAsArray","isSoft","localHandler","localEventFired","formatNonError","newStr","maxChars","snip","captureStackTrace","parseLineInfoRegex","parseLineInfo","fileName","_promisesCreated","uncycle","inherits","stackToIndex","currentStack","cycleEdgeNode","currentChildLength","stacks","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","removeDuplicateOrEmptyJumps","reconstructStack","v8stackFramePattern","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","err","isTTY","checkForgottenReturns","handlerLine","creatorLine","traceLines","lineMatches","firstUserLine","msg","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","deprecated","replacement","./errors","10","returner","thrower","thenReturn","thenThrow","catchThrow","_reason","caught","catchReturn","_value","11","PromiseReduce","PromiseAll","all","promiseAllThis","mapSeries","12","_TypeError","_RangeError","Objectfreeze","freeze","subError","nameProperty","defaultMessage","SubError","CancellationError","TimeoutError","AggregateError","RangeError","writable","OperationalError","cause","errorTypes","RejectionError","13","isES5","getDescriptor","getOwnPropertyDescriptor","getOwnPropertyNames","propertyIsWritable","prop","descriptor","proto","ObjectKeys","14","PromiseMap","15","catchFilter","PassThroughHandlerContext","called","cancelPromise","FinallyHandlerCancelReaction","finallyHandler","checkCancel","succeed","fail","reasonOrValue","isFinallyHandler","isRejected","_passThrough","success","lastly","tap","tapCatch","handlerOrPredicate","catchInstances","./catch_filter","16","Proxyable","errors","yieldHandlers","PromiseSpawn","generatorFunction","yieldHandler","internal","_finallyPromise","_promise","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_yieldedPromise","_cancellationPhase","_isResolved","_cleanup","_fulfill","_promiseCancelled","implementsReturn","coroutine","returnSentinel","_continue","_promiseFulfilled","_promiseRejected","_run","_rejectCallback","traceParent","promiseFromYieldHandler","bitField","_proxy","PromiseSpawn$","generator","spawn","addYieldHandler","17","spread","18","MappingPromiseArray","limit","constructor$","_callback","_preservedValues","_limit","_inFlight","_queue","_asyncInit","concurrency","_init$","_init","_values","preservedValues","totalResolved","_totalResolved","_resolve","booleans","19","_resolveFromSyncValue","attempt","20","maybeWrapAsError","rErrorKey","wrapAsOperationalError","isUntypedError","markAsOriginatingFromRejection","multiArgs","wrapped","21","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","adapter","22","makeSelfResolutionError","reflectHandler","PromiseInspection","UNDEFINED_BINDING","APPLY","createContext","nodebackForPromise","_fulfillmentHandler0","_rejectionHandler0","_promise0","_receiver0","_resolveFromExecutor","deferResolve","deferReject","fillTypes","reflect","didFulfill","didReject","_setIsFinal","toJSON","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","is","fromNode","fromCallback","_isFateSealed","_setAsyncGuaranteed","cast","_setFulfilled","fulfilled","rejected","internalData","haveInternalData","settler","_settlePromiseCtx","_settlePromiseLateCancellationObserver","_addCallbacks","_setLength","_setRejected","_setFollowing","_isFinal","_unsetCancelled","_receiverAt","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallback0","follower","fulfill","_migrateCallbackAt","base","proxyable","shouldBind","_setFollowee","synchronous","ignoreNonErrorWarnings","ensureErrorObject","hasStack","_settlePromiseFromHandler","_settlePromise","isPromise","asyncGuaranteed","_settlePromise0","_clearCallbackDataAtIndex","_fulfillPromises","_rejectPromises","defer","toFastProperties","./any.js","./async","./bind","./call_get.js","./cancel","./context","./debuggability","./direct_resolve","./each.js","./filter.js","./finally","./generators.js","./join","./map.js","./method","./nodeback","./nodeify.js","./promise_array","./promisify.js","./props.js","./race.js","./reduce.js","./settle.js","./some.js","./synchronous_inspection","./thenables","./timers.js","./using.js","23","resolveValueIfEmpty","asArray","_iterate","_resolveEmptyArray","toResolutionValue","getActualLength","shouldCopyValues","isResolved","24","THIS","withAppended","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","suffix","getDataPropertyOrDefault","promisifiableMethods","suffixRegexp","inheritedDataKeys","passesDefaultFilter","keyWithoutAsyncSuffix","checkValid","escapeIdentRegex","makeNodePromisified","makeNodePromisifiedEval","defaultThis","promisified","promisifyAll","promisifier","promisifiedKey","promisify","copyDescriptors","isClass","25","Es6Map","mapToEntries","extractEntry","PropertiesPromiseArray","entries","isMap","_isMap","props","castValue","entriesToMap","keyOffset","26","_capacity","_willBeOverCapacity","_checkCapacity","wrapMask","front","_resizeTo","oldCapacity","moveItemsCount","srcIndex","dst","dstIndex","arrayMove","27","raceLater","race","28","ReductionPromiseArray","initialValue","_each","_fn","_initialValue","_currentCancellable","_eachValues","completed","valueOrReason","gotAccum","accum","_gotAccum","gotValue","_eachComplete","sender","_resultCancelled$","29","NativePromise","getNativePromise","MutationObserver","GlobalSetImmediate","ProcessNextTick","isRecentNode","nativePromise","standalone","cordova","toggleScheduled","div2","o2","observe","disconnect","30","SettledPromiseArray","_promiseResolved","inspection","_settledValueField","settle","31","CANCELLATION","_howMany","_unwrap","some","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","_addFulfilled","_fulfilled","_addRejected","_checkOutcome","_rejected","32","__isCancelled","33","hasProp","doGetThen","getThen","isAnyBluebirdPromise","doThenable","34","HandleWrapper","afterValue","ms","successClear","failureClear","handleWrapper","afterTimeout","35","NULL","dispose","thenable","_isDisposable","_getDisposer","_setDisposable","castPreservingDisposable","tryDispose","Disposer","_data","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","ResourceList","doDispose","_unsetDisposable","using","spreadArgs","disposer","reflectedResources","resultPromise","inspections","_disposer","36","tryCatchTarget","globalObject","tryCatcher","Child","Parent","T","isPrimitive","maybeError","safeToString","appendee","defaultValue","excludedPrototypes","isExcludedProto","visitedKeys","enumeration","thisAssignmentPattern","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","FakeConstructor","ic","foo","rident","filledRange","prefix","isError","ArrayFrom","itResult","it","hasEnvVariables","chrome","loadTimes","P","stateProviders","provider","regTemplates","initial","template_name","date_format","server_utc","task_unscheduled_time","grid_date_format","tooltip_date_format","copyDomEvent","altKey","_obj","_settings","inputMethods","getInputMethods","_drag_start_timer","clearDragTimer","original_target","dragStart","traceDragEvents","domElement","inputMethod","mousemove","dragMove","dragScroll","limited_mousemove","dndActive","mouseup","dragEnd","checkPositionChange","diff_x","diff_y","initDnDMarker","backupEventTarget","getEvent","backup_element","elementFromPoint","month_short_hash","month_full_hash","hour_start","time_part","week_start","start_on_monday","month_start","setDate","quarter_start","res_month","setMonth","year_start","minute_start","setMilliseconds","_add_days","inc","ndate","setYear","add_quarter","to_fixed","num","utc","getISOWeek","getWeek","splt","mask","_getWeekNumber","isoWeek","nday","first_thursday","year_number","ordinal_date","getUTCISOWeek","convert_to_utc","getUTCFullYear","getUTCMonth","getUTCHours","getUTCMinutes","getUTCSeconds","createConfig","DOMParser","parseFromString","ActiveXObject","loadXML","tagname","xhr","responseXML","xpathExp","docObj","selectNodes","ownerDocument","evaluate","XPathResult","ANY_TYPE","iterateNext","_call","onLoad","getSync","put","postData","del","post","postSync","isQt","readyState","setRequestHeader","toUpperCase","send","branch_loading","branch_loading_property","show_loading","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","project_sections","milestone_sections","grid_resizer_column_attribute","grid_resizer_attribute","keep_grid_width","grid_resize","prevent_default_scroll","drag_timeline","service","$inject","license","templatesLoader","stateService","selected_task","uiApi","createLayoutFacade"],"mappings":"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","file":"dhtmlxgantt.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(\"dhtmlxgantt\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dhtmlxgantt\"] = factory();\n\telse\n\t\troot[\"dhtmlxgantt\"] = factory();\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 = 161);\n","var helpers = require(\"./helpers\");\n\nfunction isCustomType(object){\n\tvar constructorString = object.constructor.toString();\n\tvar plainObjectConstructor = ({}).constructor.toString();\n\n\treturn constructorString !== plainObjectConstructor;\n}\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\tif(isCustomType(object)){\n\t\t\t\t\tresult = Object.create(object);\n\t\t\t\t}else{\n\t\t\t\t\tresult = {};\n\t\t\t\t}\n\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 isValidDate(obj){\n\treturn isDate(obj) && !isNaN(obj.getTime());\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\tisValidDate: isValidDate,\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};","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 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 = \"<div class='gantt_layout_content' \"+(css ? \" class='\"+css+\"' \" : \"\")+\" >\" + (obj.html || \"\") + \"</div>\";\n\t\t\t}\n\t\t\tif (obj.header) {\n\t\t\t\tvar collapseIcon = obj.canCollapse ? \"<div class='gantt_layout_header_arrow'></div>\" : \"\";\n\t\t\t\theader = \"<div class='gantt_layout_header'>\" + collapseIcon + \"<div class='gantt_layout_header_content'>\" + obj.header + \"</div></div>\";\n\t\t\t}\n\t\t}\n\t\treturn \"<div class='gantt_layout_cell \" + css + \"' data-cell-id='\" + this.$id + \"'>\" + header + content + \"</div>\";\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","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 __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 = \"<div class='gantt_cal_ltext' style='height:\" + height + \";'>\";\n\n\t\thtml += htmlHelpers.getHtmlSelect(sns.options, [{ key: \"style\", value: \"width:100%;\" }]);\n\t\thtml += \"</div>\";\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\tvar config = view.$getConfig();\n\treturn {\n\t\ttop: view.getItemTop(item.id),\n\t\theight: config.row_height,\n\t\tleft: left,\n\t\twidth: right - left\n\t};\n};","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 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","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\tthis._timelineDragScroll = null;\n\tutils.mixin(this, topPositionMixin());\n\teventable(this);\n};\n\nTimeline.prototype = {\n\tinit: function(container) {\n\t\tcontainer.innerHTML += \"<div class='gantt_task' style='width:inherit;height:inherit;'></div>\";\n\t\tthis.$task = container.childNodes[0];\n\n\t\tthis.$task.innerHTML = \"<div class='gantt_task_scale'></div><div class='gantt_data_area'></div>\";\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 = \"<div class='gantt_task_bg'></div><div class='gantt_links_area'></div><div class='gantt_bars_area'></div>\";\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\tif (this.$gantt.ext.dragTimeline) {\n\t\t\tthis._timelineDragScroll = this.$gantt.ext.dragTimeline.create();\n\t\t\tthis._timelineDragScroll.attach(this);\n\t\t}\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(\"<div class=\\\"\" + cssClass + \"\\\" style=\\\"height:\" + (scales[i].height) +\n\t\t\t\t\"px;position:relative;line-height:\" + (scales[i].height) + \"px\\\">\" + this._prepareScaleHtml(scales[i], fromPos, toPos) + \"</div>\");\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 = \"<div class='\" + cssclass + \"'\" + ariaAttr + \" style='\" + style + \"'>\" + value + \"</div>\";\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\tif(this._timelineDragScroll) {\n\t\t\tthis._timelineDragScroll.destructor();\n\t\t\tthis._timelineDragScroll = 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","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 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 \"<input\" + _getHtmlAttributes(attributes || []) + \">\";\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 || \"\") + \"</\" + tag +\">\";\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 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\n\t\t\tif(!helpers.isValidDate(config.date)){\n\t\t\t\tgantt.assert(false, \"Invalid date argument for getWorkHours method\");\n\t\t\t\tthrow new Error(\"Invalid date argument for getWorkHours method\");\n\t\t\t}\n\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\tif(!helpers.isValidDate(processedConfig.date)){\n\t\t\t\tgantt.assert(false, \"Invalid date argument for isWorkTime method\");\n\t\t\t\tthrow new Error(\"Invalid date argument for isWorkTime method\");\n\t\t\t}\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\tif(!helpers.isValidDate(processedConfig.date)){\n\t\t\t\tgantt.assert(false, \"Invalid date argument for getClosestWorkTime method\");\n\t\t\t\tthrow new Error(\"Invalid date argument for getClosestWorkTime method\");\n\t\t\t}\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\tif(!helpers.isValidDate(config.start_date)){\n\t\t\t\tgantt.assert(false, \"Invalid start_date argument for getDuration method\");\n\t\t\t\tthrow new Error(\"Invalid start_date argument for getDuration method\");\n\t\t\t}\n\n\t\t\tif(!helpers.isValidDate(config.end_date)){\n\t\t\t\tgantt.assert(false, \"Invalid end_date argument for getDuration method\");\n\t\t\t\tthrow new Error(\"Invalid end_date argument for getDuration method\");\n\t\t\t}\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\n\t\t\t\t// received a task object as an argument\n\t\t\t\t// ignore 'unit' and 'step' properties in this case, since it's likely a part of data model of a task\n\t\t\t\tprocessedConfig.unit = null;\n\t\t\t\tprocessedConfig.step = null;\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\tif(!helpers.isValidDate(processedConfig.start_date)){\n\t\t\t\tgantt.assert(false, \"Invalid start_date argument for calculateEndDate method\");\n\t\t\t\tthrow new Error(\"Invalid start_date argument for calculateEndDate method\");\n\t\t\t}\n\n\t\t\treturn processedConfig;\n\t\t}\n\t};\n};\n\n\nmodule.exports = calendarArgumentsHelper;","export default class DurationFormatterNumeric implements IDurationFormatter {\n\tstatic create = (settings: IDurationFormatterConfig = null): IDurationFormatter => {\n\t\treturn new DurationFormatterNumeric();\n\t}\n\tcanParse = (value: string) : boolean => {\n\t\treturn !isNaN(this.parse(value));\n\t}\n\tformat = (value: number) : string => {\n\t\treturn String(value);\n\t}\n\tparse = (value: string) : number => {\n\t\treturn parseInt(value, 10);\n\t}\n}","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 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<this.length; i++)\n\t\t\tif (data==this[i]) return i;\n\t\treturn -1;\n\t},\n\t//execute some method for each element of array\n\t$each:function(functor,master){\n\t\tfor (var i=0; i < this.length; i++)\n\t\t\tfunctor.call((master||this),this[i]);\n\t},\n\t//create new array from source, by using results of functor\n\t$map:function(functor,master){\n\t\tfor (var i=0; i < this.length; i++)\n\t\t\tthis[i]=functor.call((master||this),this[i]);\n\t\treturn this;\n\t},\n\t$filter:function(functor, master){\n\t\tfor (var i=0; i < this.length; i++)\n\t\t\tif (!functor.call((master||this),this[i])){\n\t\t\t\tthis.splice(i,1);\n\t\t\t\ti--;\n\t\t\t}\n\t\treturn this;\n\t}\n};\n\nmodule.exports = $powerArray;","var powerArray = require(\"./power_array\");\nvar utils = require(\"../../utils/utils\");\nvar eventable = require(\"../../utils/eventable\");\n\nvar DataStore = function(config){\n\tthis.pull = {};\n\tthis.$initItem = config.initItem;\n\tthis.visibleOrder = powerArray.$create();\n\tthis.fullOrder = powerArray.$create();\n\tthis._skip_refresh = false;\n\tthis._filterRule = null;\n\tthis._searchVisibleOrder = {};\n\tthis.$config = config;\n\teventable(this);\n\treturn this;\n};\nDataStore.prototype = {\n\n\t_parseInner: function(data){\n\t\tvar item = null,\n\t\t\tloaded = [];\n\t\tfor(var i = 0, len = data.length; i< len; i++){\n\t\t\titem = data[i];\n\t\t\tif(this.$initItem){\n\t\t\t\titem = this.$initItem(utils.copy(item));\n\t\t\t}\n\t\t\tif(this.callEvent(\"onItemLoading\", [item])){\n\t\t\t\tif (!this.pull.hasOwnProperty(item.id)) {\n\t\t\t\t\tthis.fullOrder.push(item.id);\n\t\t\t\t}\n\t\t\t\tloaded.push(item);\n\t\t\t\tthis.pull[item.id] = item;\n\t\t\t}\n\t\t}\n\t\treturn loaded;\n\t},\n\tparse: function(data){\n\t\tthis.callEvent(\"onBeforeParse\", [data]);\n\t\tvar loaded = this._parseInner(data);\n\t\tthis.refresh();\n\t\tthis.callEvent(\"onParse\", [loaded]);\n\t},\n\tgetItem: function(id){\n\t\treturn this.pull[id];\n\t},\n\n\t_updateOrder: function(code){\n\t\tcode.call(this.visibleOrder);\n\t\tcode.call(this.fullOrder);\n\t},\n\tupdateItem: function(id, item){\n\t\tif (!utils.defined(item)) item = this.getItem(id);\n\n\t\tif (!this._skip_refresh) {\n\t\t\tif (this.callEvent(\"onBeforeUpdate\", [item.id, item]) === false) return false;\n\t\t}\n\t\tthis.pull[id]=item;\n\t\tif (!this._skip_refresh) {\n\t\t\tthis.callEvent(\"onAfterUpdate\", [item.id, item]);\n\t\t\tthis.callEvent(\"onStoreUpdated\", [item.id, item, \"update\"]);\n\t\t}\n\t},\n\n\t_removeItemInner: function(id){\n\t\t//clear from collections\n\t\t//this.visibleOrder.$remove(id);\n\t\tthis._updateOrder(function(){ this.$remove(id);});\n\t\tdelete this.pull[id];\n\t},\n\n\tremoveItem: function(id){\n\t\t//utils.assert(this.exists(id), \"Not existing ID in remove command\"+id);\n\n\t\tvar obj = this.getItem(id);\t//save for later event\n\t\tif (!this._skip_refresh) {\n\t\t\tif (this.callEvent(\"onBeforeDelete\", [obj.id, obj]) === false) return false;\n\t\t}\n\n\t\tthis._removeItemInner(id);\n\n\t\tif (!this._skip_refresh) {\n\t\t\tthis.filter();\n\t\t\tthis.callEvent(\"onAfterDelete\", [obj.id, obj]);\n\t\t\t//repaint signal\n\t\t\tthis.callEvent(\"onStoreUpdated\", [obj.id, obj, \"delete\"]);\n\t\t}\n\t},\n\n\t_addItemInner: function(item, index){\n\t\t//in case of treetable order is sent as 3rd parameter\n\t\t//var order = index;\n\n\t\tif(this.exists(item.id)){\n\t\t\tthis.silent(function(){this.updateItem(item.id, item);});\n\t\t}else{\n\t\t\tvar order = this.visibleOrder;\n\n\t\t\t//by default item is added to the end of the list\n\t\t\tvar data_size = order.length;\n\n\t\t\tif (!utils.defined(index) || index < 0)\n\t\t\t\tindex = data_size;\n\t\t\t//check to prevent too big indexes\n\t\t\tif (index > 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<tindex) tindex--;\t//correct shift, caused by element removing\n\t\t//this.visibleOrder.$insertAt(id,Math.min(this.visibleOrder.length, tindex));\t//insert at new position\n\t},\n\n\tmove: function(sindex, tindex){\n\t\t//gantt.assert(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<this.fullOrder.length; i++) {\n\t\t\tvar item = this.pull[this.fullOrder[i]];\n\t\t\tcode.call(this, item);\n\t\t}\n\t},\n\t\n\tfilter: function(rule){\n\t\tthis.callEvent(\"onBeforeFilter\", []);\n\t\tvar filteredOrder = powerArray.$create();\n\t\tthis.eachItem(function(item){\n\t\t\tif(this.callEvent(\"onFilterItem\", [item.id, item])){\n\t\t\t\tfilteredOrder.push(item.id);\n\t\t\t}\n\t\t});\n\n\t\tthis.visibleOrder = filteredOrder;\n\t\tthis._searchVisibleOrder = {};\n\t\tfor(var i = 0; i < this.visibleOrder.length; i++){\n\t\t\tthis._searchVisibleOrder[this.visibleOrder[i]] = i;\n\t\t}\n\t\tthis.callEvent(\"onFilter\", []);\n\t},\n\n\tgetIndexRange: function(from, to){\n\t\tto=Math.min((to||Infinity),this.countVisible()-1);\n\n\t\tvar ret= [];\n\t\tfor (var i=(from||0); i <= to; i++)\n\t\t\tret.push(this.getItem(this.visibleOrder[i]));\n\t\treturn ret;\n\t},\n\tgetItems: function(){\n\t\tvar res = [];\n\t\tfor(var i in this.pull){\n\t\t\tres.push(this.pull[i]);\n\t\t}\n\t/*\tfor(var i = 0; i < this.fullOrder.length; i++){\n\n\t\t}*/\n\t\treturn res;\n\t},\n\n\tgetIdByIndex: function(index){\n\t\treturn this.visibleOrder[index];\n\t},\n\tgetIndexById: function(id){\n\t\tvar res = this._searchVisibleOrder[id];\n\t\tif(res === undefined){\n\t\t\tres = -1;\n\t\t}\n\t\treturn res;\n\t},\n\t_getNullIfUndefined: function(value){\n\t\tif(value === undefined){\n\t\t\treturn null;\n\t\t}else{\n\t\t\treturn value;\n\t\t}\n\t},\n\tgetFirst: function(){\n\t\treturn this._getNullIfUndefined(this.visibleOrder[0]);\n\t},\n\tgetLast: function(){\n\t\treturn this._getNullIfUndefined(this.visibleOrder[this.visibleOrder.length-1]);\n\t},\n\tgetNext: function(id){\n\t\treturn this._getNullIfUndefined(this.visibleOrder[this.getIndexById(id) + 1]);\n\t},\n\tgetPrev: function(id){\n\t\treturn this._getNullIfUndefined(this.visibleOrder[this.getIndexById(id) - 1]);\n\t},\n\tdestructor: function(){\n\t\tthis.detachAllEvents();\n\t\tthis.pull = null;\n\t\tthis.$initItem = null;\n\t\tthis.visibleOrder = null;\n\t\tthis.fullOrder = null;\n\t\tthis._skip_refresh = null;\n\t\tthis._filterRule = null;\n\t\tthis._searchVisibleOrder = null;\n\t}\n};\n\nmodule.exports = DataStore;","module.exports = function(item, view){\n\tvar config = view.$getConfig();\n\n\treturn {\n\t\ttop: view.getItemTop(item.id),\n\t\theight: config.row_height,\n\t\tleft: 0,\n\t\tright: Infinity\n\t};\n};","function createTaskRenderer(gantt) {\n\n\tfunction _render_task_element(task, view) {\n\t\tvar config = view.$getConfig();\n\t\tvar painters = config.type_renderers;\n\t\tvar renderer = painters[gantt.getTaskType(task.type)],\n\t\t\tdefaultRenderer = _task_default_render;\n\n\t\tif (!renderer) {\n\t\t\treturn defaultRenderer.call(gantt, task, view);\n\t\t}else{\n\t\t\treturn renderer.call(gantt, task, function(task){ return defaultRenderer.call(gantt, task, view);}, view);\n\t\t}\n\t}\n\n\tfunction _task_default_render(task, view) {\n\t\tif (gantt._isAllowedUnscheduledTask(task))\n\t\t\treturn;\n\n\t\tif (!gantt._isTaskInTimelineLimits(task)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar pos = view.getItemPosition(task);\n\n\t\tvar cfg = view.$getConfig(),\n\t\t\ttemplates = view.$getTemplates();\n\t\tvar height = view.getItemHeight();\n\n\t\tvar taskType = gantt.getTaskType(task.type);\n\n\t\tvar padd = Math.floor((gantt.config.row_height - height) / 2);\n\t\tif (taskType == cfg.types.milestone && cfg.link_line_width > 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 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 = \"<div class='gantt_grid' style='height:inherit;width:inherit;' \" + gridAriaAttr + \"></div>\";\n\t\tthis.$grid = container.childNodes[0];\n\n\t\tthis.$grid.innerHTML = \"<div class='gantt_grid_scale' \" +\n\t\t\tgantt._waiAria.gridScaleRowAttrString() + \"></div><div class='gantt_grid_data' \" + gridDataAriaAttr + \"></div>\";\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\tif(outerWidth !== undefined){\n\t\t\t\tconfig.grid_width = outerWidth;\n\t\t\t\tthis.$config.width = outerWidth - 1;\n\t\t\t}else{\n\t\t\t\tif(!isNaN(innerWidth)){\n\t\t\t\t\tthis._setColumnsWidth(innerWidth);\n\t\t\t\t\tconfig.grid_width = innerWidth;\n\t\t\t\t\tthis.$config.width = innerWidth - 1;\n\t\t\t\t}\n\t\t\t}\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) ? (\"<div class='gantt_sort gantt_\" + gantt._sort.direction + \"'></div>\") : \"\";\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 = \"<div class='\" + cssClass + \"' style='\" + style + \"' \" + ariaAttrs + \" data-column-id='\" + col.name + \"' column_id='\" + col.name + \"'>\" + label + sort + \"</div>\";\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","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 __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;","// 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\n\tvar dropLayout = (function dropLayout(){\n\t\tif(this.$layout){\n\t\t\tthis.$layout.destructor();\n\t\t\tthis.$layout = null;\n\t\t\tthis.$ui.reset();\n\t\t}\n\t}).bind(gantt);\n\n\tvar rebuildLayout = (function rebuildLayout(){\n\t\t\n\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\", this.$root, 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\tthis.$container = this.$layout.$container.firstChild;\n\n\t\taddResizeListener(this);\n\t}).bind(gantt);\n\n\tgantt.resetLayout = function(){\n\t\tdropLayout();\n\t\trebuildLayout();\n\t\tthis.render();\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\tdropLayout();\n\t\tthis.$root = domHelpers.toNode(node);\n\t\trebuildLayout();\n\t\t//this.clear\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\t\tif(gantt.config.wai_aria_attributes){\n\t\t\tresizeWatcher.setAttribute(\"role\", \"none\");\n\t\t\tresizeWatcher.setAttribute(\"aria-hidden\", true);\n\t\t}\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\tif (gantt.isReadonly(gantt.getTask(id))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tgantt.showLightbox(id);\n\t\t\t},\n\t\t\t\"delete\": function(id) {\n\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\tif (gantt.isReadonly(task)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\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\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 <b>task</b>=\"+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: \"<div class='gantt_cal_ltitle'><span class='gantt_mark'>&nbsp;</span><span class='gantt_time'></span><span class='gantt_title'></span><div class='gantt_cancel_btn'></div></div><div class='gantt_cal_larea'></div>\",\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<config.length; i++) {\n\t\tvar column = config[i];\n\t\tif (column.name == \"add\") {\n\t\t\tif(!column.width){\n\t\t\t\tcolumn.width = 44;\n\t\t\t}\n\t\t\tif (!(gantt.defined(column.min_width) && gantt.defined(column.max_width))) {\n\t\t\t\tcolumn.min_width = column.min_width || column.width;\n\t\t\t\tcolumn.max_width = column.max_width || column.width;\n\t\t\t}\n\t\t\tif (column.min_width)\n\t\t\t\tcolumn.min_width = +column.min_width;\n\t\t\tif (column.max_width)\n\t\t\t\tcolumn.max_width = +column.max_width;\n\t\t\tif (column.width) {\n\t\t\t\tcolumn.width = +column.width;\n\t\t\t\tcolumn.width = (column.min_width && column.min_width > 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};","module.exports = function(gantt) {\n\n\tgantt.getTaskType = function (type) {\n\t\treturn \"task\";\n\t};\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 = \"<div class='gantt_cal_ltext gantt_section_\" + sns.name + \"' style='height:\" + height + \";'>\";\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 += \"<span data-constraint-type-select>\" + htmlHelpers.getHtmlSelect(sns.options, [{ key: \"data-type\", value: \"constraint-type\" }]) + \"</span>\";\n\n\t\tvar timeLabel = gantt.locale.labels[\"constraint_date\"] || \"Constraint date\";\n\t\thtml += \"<label data-constraint-time-select>\" + timeLabel + \": \" + gantt.form_blocks.getTimePicker.call(this, sns) + \"</label>\";\n\n\t\thtml += \"</div>\";\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 __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\");\nvar DurationFormatterNumeric = require(\"../../common/duration_formatter_numeric\").default;\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\tfunction getFormatter(config) {\n\t\treturn config.formatter || new DurationFormatterNumeric();\n\t}\n\n\t__extends(DurationControl, _super);\n\n\tDurationControl.prototype.render = function(sns) {\n\t\tvar time = \"<div class='gantt_time_selects'>\" + gantt.form_blocks.getTimePicker.call(this, sns) + \"</div>\";\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\n\t\tvar durationInputClass = \"gantt_duration_value\";\n\t\tif(sns.formatter) {\n\t\t\tlabel = \"\";\n\t\t\tdurationInputClass += \" gantt_duration_value_formatted\" ;\n\t\t}\n\n\t\tvar duration = \"<div class='gantt_duration' \" + singleDate + \">\" +\n\t\t\t\"<input type='button' class='gantt_duration_dec' value='−'\" + readonly + \">\" +\n\t\t\t\"<input type='text' value='5days' class='\"+durationInputClass+\"'\" + readonly + \" \" + ariaAttr + \">\" +\n\t\t\t\"<input type='button' class='gantt_duration_inc' value='+'\" + readonly + \">\"+label+\"<span></span>\" +\n\t\t\t\"</div>\";\n\t\tvar html = \"<div style='height:\" + (sns.height || 30) + \"px;padding-top:0px;font-size:inherit;' class='gantt_section_time'>\" + time + \" \" + duration + \"</div>\";\n\t\treturn html;\n\t};\n\n\tDurationControl.prototype.set_value = function(node, value, ev, 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\tvar template = gantt.templates.task_end_date || gantt.templates.task_date;\n\t\t\tendspan.innerHTML = template(end_date);\n\t\t}\n\n\t\tfunction _change_duration(step) {\n\t\t\tvar value = duration.value;\n\n\t\t\tvalue = getFormatter(config).parse(value);\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 = getFormatter(config).format(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\t\tduration_val = getFormatter(config).format(duration_val);\n\n\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, config);\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, config) {\n\t\tvar duration = node.getElementsByTagName(\"input\")[1];\n\n\t\tduration = getFormatter(config).parse(duration.value);\n\t\tif (!duration || window.isNaN(duration)) duration = 1;\n\t\tif (duration < 0) duration *= -1;\n\t\treturn duration;\n\t}\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 = \"<div class='gantt_cal_ltext' style='height:\" + height + \";'>\";\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 += \"<label><input type='radio' value='\" + sns.options[i].key + \"' name='\" + sns.name + \"'>\" + sns.options[i].label + \"</label>\";\n\t\t\t}\n\t\t}\n\n\t\thtml += \"</div>\";\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 = \"<div class='gantt_cal_ltext' style='height:\" + height + \";'>\";\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 += \"<label><input type='checkbox' value='\" + sns.options[i].key + \"' name='\" + sns.name + \"'>\" + sns.options[i].label + \"</label>\";\n\t\t\t}\n\t\t}\n\t\thtml += \"</div>\";\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 = \"<div style='height:\" + (sns.height || 30) + \"px;padding-top:0px;font-size:inherit;text-align:center;' class='gantt_section_time'>\";\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 += \"<span></span>\";\n\t\t} else {\n\t\t\thtml += \"<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>\";\n\t\t}\n\n\t\thtml += time;\n\t\thtml += \"</div>\";\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 \"<div class='gantt_cal_ltext' style='height:\" + height + \";'><textarea></textarea></div>\";\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 \"<div class='gantt_cal_ltext gantt_cal_template' style='height:\" + height + \";'></div>\";\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 = \"<div class='gantt_cal_ltitle'><span class='gantt_mark'>&nbsp;</span><span class='gantt_time'></span><span class='gantt_title'></span></div><div class='gantt_cal_larea'></div>\";\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 (!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 = \"<div class='gantt_custom_button' data-index='\" + i + \"'><div class='gantt_custom_button_\" + sns[i].button + \"'></div><div class='gantt_custom_button_label'>\" + this.locale.labels[\"button_\" + sns[i].button] + \"</div></div>\";\n\t\t\t}\n\t\t\tif (this.config.wide_form) {\n\t\t\t\thtml += \"<div class='gantt_wrap_section' \" + display + \">\";\n\t\t\t}\n\t\t\thtml += \"<div id='\" + sns[i].id + \"' class='gantt_cal_lsection'><label>\" + button + this.locale.labels[\"section_\" + sns[i].name] + \"</label></div>\" + block.render.call(this, sns[i]);\n\t\t\thtml += \"</div>\";\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 += \"<select \" + readonly + display + ariaAttrs + \">\" + options + \"</select>\";\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 += \"<div \" + ariaAttr + \" class='gantt_btn_set gantt_left_btn_set \" + button + \"_set'\" + (floatRight ? \" style='float:right;'\" : \"\") + \"><div dhx_button='1' data-dhx-button='1' class='\" + button + \"'></div><div>\" + gantt.locale.labels[button] + \"</div></div>\";\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 += \"<option value='\" + (i) + \"'>\" + (i) + \"</option>\";\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 += \"<option value='\" + i + \"'>\" + gantt.locale.date.month_full[i] + \"</option>\";\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 += \"<option value='\" + i + \"'>\" + i + \"</option>\";\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 += \"<option value='\" + i + \"'>\" + time + \"</option>\";\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 <b>task</b>=\"+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._isTaskInTimelineLimits = function(task) {\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\t\treturn !!(taskStart && taskEnd && taskStart <= this._max_date.valueOf() && taskEnd >= this._min_date.valueOf());\n\t};\n\tgantt.isTaskVisible = function (id) {\n\t\tif (!this.isTaskExists(id)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar task = this.getTask(id);\n\t\tif (!(this._isAllowedUnscheduledTask(task) || this._isTaskInTimelineLimits(task))) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn !!(this.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\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 <b>task</b>=\"+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<string, Map<string, boolean>>;\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<string, boolean>();\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<string, Map<string, boolean>>();\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\tstart: 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 <a href='\" + resp.xmlDoc.responseURL + \"' target='_blank'>\" \n\t\t\t\t+ resp.xmlDoc.responseURL + \"</a>, 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<data>\n\t\t<task id:\"some\" parent_id=\"0\" progress=\"0.5\">\n\t\t\t<text>My task 1</text>\n\t\t\t<start_date>16.08.2013</start_date>\n\t\t\t<end_date>22.08.2013</end_date>\n\t\t</task>\n\t\t<coll_options>\n\t\t\t<links>\n\t\t\t\t<link source='a1' target='b2' type='c3' />\n\t\t\t</links>\n\t\t</coll_options>\n\t</data>\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 \"<item id='\" + obj.id + \"' source='\" + obj.source + \"' target='\" + obj.target + \"' type='\" + obj.type + \"' />\";\n\t\t},\n\t\t_copyObject: function (obj) {\n\t\t\treturn \"<task id='\" + obj.id + \"' parent='\" + (obj.parent || \"\") + \"' start_date='\" + obj.start_date + \"' duration='\" + obj.duration + \"' open='\" + (!!obj.open) + \"' progress='\" + obj.progress + \"' end_date='\" + obj.end_date + \"'><![CDATA[\" + obj.text + \"]]></task>\";\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 \"<data>\" + tasks.join(\"\") + \"<coll_options for='links'>\" + links.join(\"\") + \"</coll_options></data>\";\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, \"&#39;\");\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(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, task){\n\t\t\tvar attributes = {\"role\":\"gridcell\", \"aria-label\": textValue};\n\t\t\tif(!column.editor || gantt.isReadonly(task)){\n\t\t\t\tattributes[\"aria-readonly\"] = true;\n\t\t\t}\n\n\t\t\treturn this.getAttributeString(attributes);\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};","module.exports = function(gantt) {\n};","import * as env from \"../../utils/env\";\nimport * as eventable from \"../../utils/eventable\";\nimport { IScale, TModifierKeys } 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\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: TModifierKeys;\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}","export default class LinkFormatterSimple implements ILinkFormatter {\n\tstatic create = (settings: ILinkFormatterConfig = null, gantt: any): LinkFormatterSimple => {\n\t\treturn new LinkFormatterSimple(gantt);\n\t}\n\tprotected _linkReg: RegExp;\n\tprotected _gantt: any;\n\n\tconstructor(gantt: any) {\n\t\tthis._linkReg = /^[0-9\\.]+/;\n\t\tthis._gantt = gantt;\n\t}\n\n\tformat = (link: ILink) : string => {\n\t\tconst wbs = this._getWBSCode(link.source);\n\t\treturn wbs;\n\t}\n\n\tcanParse = (value: string) : boolean => {\n\t\treturn this._linkReg.test(value);\n\t}\n\tparse = (value: string) : ILink => {\n\t\tif(!this.canParse(value)){\n\t\t\treturn null;\n\t\t}\n\n\t\tconst linkPart = this._linkReg.exec(value)[0].trim();\n\n\t\tconst source = this._findSource(linkPart) || null;\n\n\t\treturn {\n\t\t\tid: undefined,\n\t\t\tsource,\n\t\t\ttarget: null,\n\t\t\ttype: this._gantt.config.links.finish_to_start,\n\t\t\tlag: 0\n\t\t};\n\t}\n\n\tprotected _getWBSCode = (source: number | string) => {\n\t\tconst pred = this._gantt.getTask(source);\n\t\treturn this._gantt.getWBSCode(pred);\n\t}\n\n\tprotected _findSource = (value: string) => {\n\t\tconst reqTemplate = new RegExp(\"^[0-9\\.]+\", \"i\");\n\t\tif(reqTemplate.exec(value)){\n\t\t\tconst wbs = reqTemplate.exec(value)[0];\n\t\t\tconst task = this._gantt.getTaskByWBSCode(wbs);\n\t\t\tif(task){\n\t\t\t\treturn task.id;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}","\nvar DurationFormatter = require(\"../common/duration_formatter\").default;\nvar LinkFormatter = require(\"../common/link_formatter\").default;\n\nmodule.exports = function(gantt){\n\tgantt.ext.formatters = {\n\t\tdurationFormatter: function(settings){\n\t\t\tif(!settings){\n\t\t\t\tsettings = {};\n\t\t\t}\n\t\t\tif(!settings.store){\n\t\t\t\tsettings.store = gantt.config.duration_unit;\n\t\t\t}\n\t\t\tif(!settings.enter){\n\t\t\t\tsettings.enter = gantt.config.duration_unit;\n\t\t\t}\n\t\t\treturn DurationFormatter.create(settings, gantt);\n\t\t},\n\t\tlinkFormatter: function(settings){\n\t\t\treturn LinkFormatter.create(settings, gantt);\n\t\t}\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\tfunction isPlaceholderTask(taskId){\n\t\tif(gantt.config.types.placeholder && gantt.isTaskExists(taskId)){\n\t\t\tvar task = gantt.getTask(taskId);\n\t\t\tif(task.type == gantt.config.types.placeholder){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tfunction isPlaceholderLink(link){\n\t\tif(isPlaceholderTask(link.source) || isPlaceholderTask(link.target)){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tgantt.attachEvent(\"onLinkValidation\", function(link){\n\t\tif(isPlaceholderLink(link)){\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\tgantt.attachEvent(\"onBeforeLinkAdd\", function(id,link){\n\t\tif(isPlaceholderLink(link)){\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\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\t\t\tvar smartRendering = !!viewport;//no viewport means smart rendering is disabled\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(smartRendering && !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\t\t\tvar smartRendering = !!viewPort;//no viewport means smart rendering is disabled\n\t\t\tfor(var i = 0; i < scale.trace_x.length; i++){\n\t\t\t\tif(smartRendering && !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 = \"<div class='gantt_histogram_label'>\" + content +\"</div>\";\n\t\t\t\t}\n\n\t\t\t\tif (fill) {\n\t\t\t\t\tcontent = \"<div class='gantt_histogram_fill' style='height:\"+(Math.min(fill/maxCapacity||0, 1)*100)+\"%;'></div>\" + 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\n\t\t\tvar smartRendering = !!viewport;//no viewport means smart rendering is disabled\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(smartRendering && !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\tvar smartRendering = !!viewport;//no viewport means smart rendering is disabled\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(smartRendering && !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}, false);\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\trequire(\"./formatters\")\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};","import * as utils from \"../../utils/utils\";\n\nexport default class SimpleStorage {\n\tpublic static create = () : SimpleStorage => {\n\t\treturn new SimpleStorage();\n\t}\n\n\tprotected _storage: { [id: string]: any; };\n\n\tprotected constructor() {\n\t\tthis._storage = {};\n\t}\n\n\tpublic clear = (): void => {\n\t\tthis._storage = {};\n\t}\n\n\tpublic storeItem = (item: any): void => {\n\t\tthis._storage[item.id] = utils.copy(item);\n\t}\n\n\tpublic getStoredItem = (id: string): any => {\n\t\treturn this._storage[id] || null;\n\t}\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.storeItem(cascade.tasks[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.storeItem(cascade.links[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\n\t\t\tdp.storeItem(item);\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\t\t\tdp.storeItem(item);\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\";\nimport SimpleStorage from \"./simple_storage\";\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\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 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 _storage: SimpleStorage;\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._storage = SimpleStorage.create();\n\t\tthis._invalid = {};\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\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 automatically\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 verify values of cells, initiate update (if specified). Can be redefined in order to provide custom validation\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.$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;\n\t\t}\n\t\tthis._beforeSendData(this._getRowData(rowId), 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\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\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);\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\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 (!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}\n\t\t\t});\n\t\t}\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, ganttMode: string) {\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\tthis.setGanttMode(ganttMode);\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, mode);\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, mode);\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\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: gantt - dhtmlxGantt object to attach this data-processor to\n\t * @type: public\n\t */\n\tinit(gantt: any) {\n\t\tif (this._initialized) {\n\t\t\treturn;\n\t\t}\n\t\tthis.$gantt = gantt;\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\tsetOnAfterUpdate(handler) {\n\t\tthis.attachEvent(\"onAfterUpdate\", handler);\n\t}\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\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 response\n\t\tif status == collision version is deprecated\n\t\tset flag for autoupdating immediately\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\tajax.get(url, callback);\n\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._getXmlNodeValue(vers[0]));\n\n\t\t\tconst updates = ajax.xpath(\"//update\", xml);\n\t\t\tif (updates.length) {\n\t\t\t\tthis._silent_mode = true;\n\n\t\t\t\tfor (let i = 0; i < updates.length; i++) {\n\t\t\t\t\tconst status = updates[i].getAttribute(\"status\");\n\t\t\t\t\tconst id = updates[i].getAttribute(\"id\");\n\t\t\t\t\tconst parent = updates[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\", [updates[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\", [updates[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\", [updates[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._storage.clear();\n\t\tthis._storage = null;\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\t_storage: this._storage,\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\t_storage : SimpleStorage.create(),\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._storage = newState._storage;\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\tstoreItem(item) {\n\t\tthis._storage.storeItem(item);\n\t}\n\n\turl(url: string) {\n\t\tthis.serverProcessor = this._serverProcessor = url;\n\t}\n\n\tprotected _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\tprotected _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\tprotected _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// GET/POST/JSON modes of the dataProcessor didn't send the whole data items in 'delete' requests\n\t// clear extra info from the data in order not to change the request format\n\tprotected _cleanupArgumentsBeforeSend(dataToSend: any) {\n\t\tlet processedData;\n\t\tif(dataToSend[this.action_param] === undefined){// hash of updated items, and not an individual item\n\t\t\tprocessedData = {};\n\t\t\tfor(const i in dataToSend) {\n\t\t\t\tprocessedData[i] = this._cleanupArgumentsBeforeSend(dataToSend[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tprocessedData = this._cleanupItemBeforeSend(dataToSend);\n\t\t}\n\t\treturn processedData;\n\t}\n\tprotected _cleanupItemBeforeSend(updatedItem: any) {\n\t\tlet output = null;\n\t\tif(updatedItem){\n\t\t\tif(updatedItem[this.action_param] === \"deleted\"){\n\t\t\t\toutput = {};\n\t\t\t\toutput.id = updatedItem.id;\n\t\t\t\toutput[this.action_param] = updatedItem[this.action_param];\n\t\t\t}else{\n\t\t\t\toutput = updatedItem;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tprotected _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, ganttMode);\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\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\n\t\t\t\tqueryParams.url = url + ajax.urlSeparator(url) + this.serialize(data, rowId);\n\t\t\t\tqueryParams.method = \"GET\";\n\t\t\t\tbreak;\n\t\t\tcase \"POST\":\n\t\t\t\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\n\t\t\t\tqueryParams.url = url;\n\t\t\t\tqueryParams.method = \"POST\";\n\t\t\t\tqueryParams.data = this.serialize(data, rowId);\n\t\t\t\tbreak;\n\t\t\tcase \"JSON\":\n\t\t\t\tdata = {};\n\t\t\t\tconst preprocessedData = this._cleanupItemBeforeSend(dataToSend);\n\t\t\t\tfor (const key in preprocessedData) {\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] = preprocessedData[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\tprotected _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\tprotected _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\t/* returns xml node value\n\t\t@param node\n\t\t\txml node\n\t*/\n\tprotected _getXmlNodeValue(node) {\n\t\tif (node.firstChild) {\n\t\t\treturn node.firstChild.nodeValue;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tprotected _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\tprotected _prepareDataItem(rawItem: any): any {\n\t\tconst processedItem = {};\n\n\t\tfor (const key in rawItem) {\n\t\t\tif (key.substr(0, 1) === \"$\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst value = rawItem[key];\n\t\t\tif (helpers.isDate(value)) {\n\t\t\t\tprocessedItem[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\tprocessedItem[key] = \"\";\n\t\t\t} else {\n\t\t\t\tprocessedItem[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tprocessedItem[this.action_param] = this.$gantt.getUserData(rawItem.id, this.action_param);\n\t\treturn processedItem;\n\t}\n\n\tprotected getStoredItem(id){\n\t\treturn this._storage.getStoredItem(id);\n\t}\n\n\tprotected _getRowData(id) {\n\t\tlet dataItem;\n\t\tconst gantt = this.$gantt;\n\t\tif (this.getGanttMode() === \"task\") {\n\t\t\tif(gantt.isTaskExists(id)){\n\t\t\t\tdataItem =this.$gantt.getTask(id);\n\t\t\t}\n\t\t} else {\n\t\t\tif(gantt.isLinkExists(id)){\n\t\t\t\tdataItem =this.$gantt.getLink(id);\n\t\t\t}\n\t\t}\n\n\t\tif (!dataItem) {\n\t\t\tdataItem = this.getStoredItem(id);\n\t\t}\n\n\t\tif (!dataItem) {\n\t\t\tdataItem = { id };\n\t\t}\n\n\t\treturn this._prepareDataItem(dataItem);\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 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<branch.length; i++){\n\t\t\t\t\tvar item = this.pull[branch[i]];\n\t\t\t\t\tcode.call(this, item);\n\t\t\t\t\tif (this.hasChild(item.id))\n\t\t\t\t\t\tthis.eachItem(code, item.id);\n\t\t\t\t}\n\t\t},\n\t\teachParent: function(code, startItem) {\n\t\t\tvar parentsHash = {};\n\t\t\tvar item = startItem;\n\t\t\tvar parent = this.getParent(item);\n\n\t\t\twhile (this.exists(parent)) {\n\t\t\t\tif (parentsHash[parent]) {\n\t\t\t\t\tthrow new Error(\"Invalid tasks tree. Cyclic reference has been detected on task \" + parent);\n\t\t\t\t}\n\t\t\t\tparentsHash[parent] = true;\n\t\t\t\titem = this.getItem(parent);\n\t\t\t\tcode.call(this, item);\n\t\t\t\tparent = this.getParent(item);\n\t\t\t}\n\t\t},\n\t\t_add_branch: function(item, index, parent){\n\t\t\tvar pid = parent === undefined ? this.getParent(item) : parent;\n\t\t\tif (!this.hasChild(pid))\n\t\t\t\tthis._branches[pid] = powerArray.$create();\n\t\t\tvar branch = this.getChildren(pid);\n\t\t\tvar added_already = false;\n\t\t\tfor(var i = 0, length = branch.length; i < length; i++){\n\t\t\t\tif(branch[i] == item.id){\n\t\t\t\t\tadded_already = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!added_already){\n\t\t\t\tif(index*1 == index){\n\n\t\t\t\t\tbranch.splice(index, 0, item.id);\n\t\t\t\t}else{\n\t\t\t\t\tbranch.push(item.id);\n\t\t\t\t}\n\n\t\t\t\titem.$rendered_parent = pid;\n\t\t\t}\n\t\t},\n\t\t_move_branch: function(item, old_parent, new_parent){\n\t\t\t//this.setParent(item, new_parent);\n\t\t\t//this._sync_parent(task);\n\t\t\tthis._replace_branch_child(old_parent, item.id);\n\t\t\tif(this.exists(new_parent) || new_parent == this.$getRootId()){\n\n\t\t\t\tthis._add_branch(item, undefined, new_parent);\n\t\t\t}else{\n\t\t\t\tdelete this._branches[item.id];\n\t\t\t}\n\t\t\titem.$level =  this.calculateItemLevel(item);\n\t\t\tthis.eachItem(function(child){\n\t\t\t\tchild.$level = this.calculateItemLevel(child);\n\t\t\t}, item.id);\n\t\t},\n\n\t\t_replace_branch_child: function(node, old_id, new_id){\n\t\t\tvar branch = this.getChildren(node);\n\t\t\tif (branch && node !== undefined){\n\t\t\t\tvar newbranch = powerArray.$create();\n\t\t\t\tfor (var i=0; i<branch.length; i++){\n\t\t\t\t\tif (branch[i] != old_id)\n\t\t\t\t\t\tnewbranch.push(branch[i]);\n\t\t\t\t\telse if (new_id)\n\t\t\t\t\t\tnewbranch.push(new_id);\n\t\t\t\t}\n\t\t\t\tthis._branches[node] = newbranch;\n\t\t\t}\n\n\t\t},\n\n\t\tsort: function(field, desc, parent){\n\t\t\tif (!this.exists(parent)) {\n\t\t\t\tparent = this.$getRootId();\n\t\t\t}\n\n\t\t\tif (!field) field = \"order\";\n\t\t\tvar criteria = (typeof(field) == \"string\") ? (function(a, b) {\n\t\t\t\tif(a[field] == b[field]){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar result = a[field] > 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\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\tif (gantt.config.show_tasks_outside_timescale) {\n\t\t\treturn true;\n\t\t}\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\tdelete gantt.addTaskLayer;\n\tdelete gantt.addLinkLayer;\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\tif(gantt.env.isEdge){ // to fix margin collapsing\n\t\t\t\tthis._dir_end.y += window.scrollY;\n\t\t\t}\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 = \"<div class='\"+className+ \"'>\" +\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\"</div>\";\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\");\nvar utils = require(\"../../../utils/utils\");\nvar timeout = require(\"../../../utils/timeout\");\nvar helpers = require(\"../../../utils/helpers\");\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(task, shift, drag) {\n\t\t\tvar cfg = timeline.$getConfig();\n\t\t\tvar coords_x = this._drag_task_coords(task, drag);\n\t\t\tif (drag.left) {\n\t\t\t\ttask.start_date = gantt.dateFromPos(coords_x.start + shift);\n\t\t\t\tif (!task.start_date) {\n\t\t\t\t\ttask.start_date = new Date(gantt.getState().min_date);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttask.end_date = gantt.dateFromPos(coords_x.end + shift);\n\t\t\t\tif (!task.end_date) {\n\t\t\t\t\ttask.end_date = new Date(gantt.getState().max_date);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar minDurationInUnits = this._calculateMinDuration(cfg.min_duration, cfg.duration_unit);\n\t\t\tif (task.end_date - task.start_date < cfg.min_duration) {\n\t\t\t\tif (drag.left)\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate(task.end_date, -minDurationInUnits, cfg.duration_unit, task);\n\t\t\t\telse\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate(task.start_date, minDurationInUnits, cfg.duration_unit, task);\n\t\t\t}\n\t\t\tgantt._init_task_timing(task);\n\t\t},\n\t\t_calculateMinDuration: function(duration, unit) {\n\t\t\tvar inMs = {\n\t\t\t\t\"minute\": 60000,\n\t\t\t\t\"hour\": 3600000,\n\t\t\t\t\"day\": 86400000,\n\t\t\t\t\"week\": 604800000,\n\t\t\t\t\"month\": 2419200000,\n\t\t\t\t\"year\": 31356000000\n\t\t\t};\n\t\t\treturn Math.ceil(duration / inMs[unit]);\n\t\t},\n\t\t_resize_progress: function(task, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(task, 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\ttask.progress = Math.min(1, diff / Math.abs(coords_x.end - coords_x.start));\n\t\t},\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 task = gantt.getTask(drag.id);\n\n\t\t\t\tvar coords_x = this._drag_task_coords(task, drag);\n\t\t\t\tvar minX = gantt.posFromDate(new Date(gantt.getState().min_date));\n\t\t\t\tvar maxX = 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(task, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(task, 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\ttask.start_date = new Date(gantt.getState().min_date);\n\t\t\t\ttask.end_date = gantt.dateFromPos(gantt.posFromDate(task.start_date) + (coords_x.end - coords_x.start));\n\t\t\t} else if (!new_end) {\n\t\t\t\ttask.end_date = new Date(gantt.getState().max_date);\n\t\t\t\ttask.start_date = gantt.dateFromPos(gantt.posFromDate(task.end_date) - (coords_x.end - coords_x.start));\n\t\t\t} else {\n\t\t\t\ttask.start_date = new_start;\n\t\t\t\ttask.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 task = gantt.getTask(id);\n\t\t\tvar original = gantt.mixin({}, task);\n\t\t\tvar copy = gantt.mixin({}, task);\n\t\t\tthis._handlers[mode].apply(this, [copy, shift, drag]);\n\t\t\tgantt.mixin(task, copy, true);\n\t\t\t//gantt._update_parents(drag.id, true);\n\t\t\tgantt.callEvent(\"onTaskDrag\", [task.id, mode, copy, original, e]);\n\t\t\tgantt.mixin(task, 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 task = gantt.getTask(drag.id);\n\t\t\t\tif (this._handlers[drag.mode]) {\n\t\t\t\t\tif (drag.mode === config.drag_mode.move) {\n\t\t\t\t\t\tvar dragHash = {};\n\n\t\t\t\t\t\tif (this._isMultiselect()) {\n\t\t\t\t\t\t\tvar selectedTasksIds = gantt.getSelectedTasks();\n\t\t\t\t\t\t\tif (selectedTasksIds.indexOf(drag.id) >= 0) {\n\t\t\t\t\t\t\t\tdragHash = this.dragMultiple;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project) {\n\t\t\t\t\t\t\tvar initialDrag = {};\n\t\t\t\t\t\t\tinitialDrag[drag.id] = utils.copy(drag);\n\t\t\t\t\t\t\tdragHash = utils.mixin(initialDrag, this.dragMultiple);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar maxShift = this._find_max_shift(dragHash, 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\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 dragHash) {\n\t\t\t\t\t\t\tvar childDrag =  dragHash[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\t// for resize and progress\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 task = gantt.getTask(taskId);\n\n\t\t\tif (config.work_time && config.correct_work_time) {\n\t\t\t\tthis._fix_working_times(task, drag);\n\t\t\t}\n\n\t\t\tthis._fix_dnd_scale_time(task, 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(task, drag.obj, true);\n\t\t\t\t}\n\n\n\t\t\t\tgantt.refreshTask(task.id);\n\t\t\t} else {\n\t\t\t\tvar drag_id = taskId;\n\n\t\t\t\tgantt._init_task_timing(task);\n\n\t\t\t\tthis.clear_drag_state();\n\t\t\t\tgantt.updateTask(task.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 task = gantt.getTask(drag.id);\n\t\t\t\tvar dragMultiple = this.dragMultiple;\n\n\t\t\t\tif (drag.mode === config.drag_mode.move) {\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && config.drag_project) || (this._isMultiselect())) {\n\t\t\t\t\t\tfor (var i in dragMultiple) {\n\t\t\t\t\t\t\tthis._finalize_mouse_up(dragMultiple[i].id, config, dragMultiple[i], e);\n\t\t\t\t\t\t}\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\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\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\tif (gantt.isReadonly(task)){\n\t\t\t\t\tthis.clear_drag_state();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this._isMultiselect()) {\n\t\t\t\t\t// for don't move selected tasks when drag unselected task\n\t\t\t\t\tvar selectedTasksIds = gantt.getSelectedTasks();\n\t\t\t\t\tif (selectedTasksIds.indexOf(drag.id) >= 0) {\n\t\t\t\t\t\thelpers.forEach(selectedTasksIds, gantt.bind(function(taskId) {\n\t\t\t\t\t\t\tvar selectedTask = gantt.getTask(taskId);\n\t\t\t\t\t\t\tif (gantt.isSummaryTask(selectedTask) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\n\t\t\t\t\t\t\t\tthis._addSubtasksToDragMultiple(selectedTask.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.dragMultiple[taskId] = gantt.mixin({\n\t\t\t\t\t\t\t\tid: selectedTask.id,\n\t\t\t\t\t\t\t\tobj: gantt.copy(selectedTask)\n\t\t\t\t\t\t\t}, this.drag);\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// for move unselected summary\n\t\t\t\tif (gantt.isSummaryTask(task) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\n\t\t\t\t\tthis._addSubtasksToDragMultiple(task.id);\n\t\t\t\t}\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\t_isMultiselect: function() {\n\t\t\treturn gantt.config.drag_multiple && !!(gantt.getSelectedTasks && gantt.getSelectedTasks().length > 0);\n\t\t},\n\t\t_addSubtasksToDragMultiple: function(summaryId) {\n\t\t\tgantt.eachTask(function(child) {\n\t\t\t\tthis.dragMultiple[child.id] = gantt.mixin({\n\t\t\t\t\tid: child.id,\n\t\t\t\t\tobj: gantt.copy(child)\n\t\t\t\t}, this.drag);\n\t\t\t}, summaryId, this);\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 = \"<div class='gantt_grid_dnd_marker_line'></div>\";\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 = \"<div class='gantt_grid_dnd_marker_line'></div>\";\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 = \"<div class='gantt_grid_dnd_marker_folder'></div>\";\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 = \"<div \" + aria + \" class='gantt_add'></div>\";\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, col.name);\n\t\t\t\t}\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 = \"<div class='gantt_tree_content'>\" + value + \"</div>\";\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, item);\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 = \"<div class='\" + css + \"' data-column-index='\"+i+\"' data-column-name='\"+col.name+\"' style='\" + style + \"' \" + aria + \">\" + tree.join(\"\") + \"</div>\";\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.max(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] = {};\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\tcell.style.position = \"absolute\";\n\t\t\tcell.style.left = scale.left[columnIndex] + \"px\";\n\t\t\trenderedCells[item.id][columnIndex] = cell;\n\t\t\tvisibleCells[item.id][columnIndex] = columnIndex;\n\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}else{\n\t\t\trow.style.position = \"relative\";\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 TextEditor() {\n\t\tvar self = BaseEditor.apply(this, arguments) || this;\n\t\treturn self;\n\t}\n\n\t__extends(TextEditor, BaseEditor);\n\n\tfunction getFormatter(config) {\n\t\treturn config.formatter || gantt.ext.formatters.durationFormatter();\n\t}\n\tutils.mixin(TextEditor.prototype, {\n\t\tshow: function (id, column, config, placeholder) {\n\t\t\tvar html = \"<div><input type='text' name='\" + column.name + \"'></div>\";\n\t\t\tplaceholder.innerHTML = html;\n\t\t},\n\t\tset_value: function (value, id, column, node) {\n\t\t\tthis.get_input(node).value = getFormatter(column.editor).format(value);\n\t\t},\n\t\tget_value: function (id, column, node) {\n\t\t\treturn getFormatter(column.editor).parse(this.get_input(node).value || \"\");\n\t\t}\n\t}, true);\n\n\treturn TextEditor;\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 getFormatter(config) {\n\t\treturn config.formatter || gantt.ext.formatters.linkFormatter();\n\t}\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\tlabels.push(getFormatter(config).format(link));\n\t\t}\n\t\treturn labels.join((config.delimiter || \",\") + \" \");\n\t}\n\n\tfunction getSelectedLinks(taskId, predecessorCodes, config) {\n\t\tvar links = [];\n\t\tpredecessorCodes.forEach(function (code) {\n\t\t\tvar link = getFormatter(config).parse(code);\n\t\t\tif(link){\n\t\t\t\tlink.target = taskId;\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 formatLinkKey(link){\n\t\treturn link.source + \"_\" + link.target + \"_\" + link.type + \"_\" + (link.lag||0);\n\t}\n\n\tfunction getLinksDiff(task, predecessorCodes, config) {\n\t\tvar selectedLinks = getSelectedLinks(task.id, predecessorCodes, config);\n\t\tvar existingLinksSearch = {};\n\t\ttask.$target.forEach(function (linkId) {\n\t\t\tvar link = gantt.getLink(linkId);\n\t\t\texistingLinksSearch[formatLinkKey(link)] = link.id;\n\t\t});\n\n\t\tvar linksToAdd = [];\n\t\tselectedLinks.forEach(function (link) {\n\t\t\tvar linkKey = formatLinkKey(link);\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 = \"<div><input type='text' name='\" + column.name + \"'></div>\";\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), column.editor);\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\t\t\tinit();\n\t\t\tvar minValue = null;\n\t\t\tvar maxValue = null;\n\n\t\t\tif(typeof config.min === \"function\"){\n\t\t\t\tminValue = config.min(id, column);\n\t\t\t}else{\n\t\t\t\tminValue = config.min;\n\t\t\t}\n\n\t\t\tif(typeof config.max === \"function\"){\n\t\t\t\tmaxValue = config.max(id, column);\n\t\t\t}else{\n\t\t\t\tmaxValue = config.max;\n\t\t\t}\n\n\t\t\tvar minAttr = minValue ? \" min='\" + dateToStr(minValue)+\"' \"  : \"\";\n\t\t\tvar maxAttr = maxValue ? \" max='\" + dateToStr(maxValue)+\"' \"  : \"\";\n\t\t\tvar html = \"<div style='width:140px'><input type='date' \" + minAttr + maxAttr + \" name='\" + column.name + \"'></div>\";\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 = \"<div><select name='\" + column.name + \"'>\";\n\t\t\tvar optionsHtml = [],\n\t\t\t\toptions = config.options || [];\n\n\t\t\tfor (var i = 0; i < options.length; i++) {\n\t\t\t\toptionsHtml.push(\"<option value='\" + config.options[i].key + \"'>\" + options[i].label + \"</option>\");\n\t\t\t}\n\n\t\t\thtml += optionsHtml.join(\"\") + \"</select></div>\";\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 = \"<div><input type='number' min='\" + min + \"' max='\" + max + \"' name='\" + column.name + \"'></div>\";\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 = \"<div><input type='text' name='\" + column.name + \"'></div>\";\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((hasEditor && controller.isVisible()) || 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} else if(hasEditor && controller.isVisible()){\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\tcontroller.hide();\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\tvar gantt = grid.$gantt;\n\t\t\n\n\t\tif(gantt.ext && gantt.ext.keyboardNavigation){\n\t\t\tvar keyNav = gantt.ext.keyboardNavigation;\n\t\t\tkeyNav.attachEvent(\"onKeyDown\", function(command, e){\n\t\t\t\tvar keyboard = gantt.constants.KEY_CODES;\n\t\t\t\tvar keyCode = e.keyCode;\n\t\t\t\tvar preventKeyNav = false;\n\n\t\t\t\tswitch (keyCode){\n\t\t\t\t\tcase keyboard.SPACE:\n\t\t\t\t\t\tif(controller.isVisible()){\n\t\t\t\t\t\t\tpreventKeyNav = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (preventKeyNav){\n\t\t\t\t\treturn false;\n\t\t\t\t} else{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\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.UP:\n\t\t\t\tcase keyboard.DOWN:\n\t\t\t\t\tif (controller.isVisible()) {\n\t\t\t\t\t\tcontroller.hide();\n\t\t\t\t\t\tshouldPrevent = false;\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 (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\"),\n\tdurationEditorFactory = require(\"./editors/duration\");\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\tduration: new (durationEditorFactory(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;","function createResizer(gantt, grid){\n\treturn {\n\t\tinit: function(){},\n\t\tdoOnRender: function(){}\n\t};\n}\n\nmodule.exports = createResizer;","var createStaticBgHelper = function(){\n\treturn {\n\t\trender: function () { },\n\t\tdestroy: function () { }\n\t};\n};\n\nmodule.exports = {\n\tcreate: function(){\n\t\treturn createStaticBgHelper();\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\tvar SCROLL_MODIFIER_KEYS = [\"altKey\", \"shiftKey\", \"metaKey\"]; // it's no way to disable ctrl+wheel\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 \"<div class='gantt_layout_cell \"+className+\"'><div style='\"+(this._isHorizontal() ? \"width:2000px\" : \"height:2000px\")+\"'></div></div>\";\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\tvar horizontalScrollModifier = this.$gantt.config.horizontal_scroll_key;\n\n\t\tif (horizontalScrollModifier !== false) {\n\t\t\tif (SCROLL_MODIFIER_KEYS.indexOf(horizontalScrollModifier) >= 0) {\n\t\t\t\tif(e[horizontalScrollModifier] && !(e.deltaX || e.wheelDeltaX)){\n\t\t\t\t\t// shift+mousewheel for horizontal scroll\n\t\t\t\t\twx = wy*2;\n\t\t\t\t\twy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\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;","module.exports = null;","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(!this.rendered){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\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 && !gantt.isReadonly()) {\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 \"<div \" + buttonAriaAttrs + \" class='gantt_popup_button dhtmlx_popup_button \" + button_css + \"' data-result='\" + result + \"' result='\" + result + \"' ><div>\" + text + \"</div></div>\";\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 = \"<div>\" + text.text + \"</div>\";\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 += '<div class=\"gantt_popup_title dhtmlx_popup_title\">' + config.title + '</div>';\n\t\tinner += '<div class=\"gantt_popup_text dhtmlx_popup_text\" id=\"' + contentId + '\"><span>' + (config.content ? '' : config.text) + '</span></div><div  class=\"gantt_popup_controls dhtmlx_popup_controls\">';\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 += '</div>';\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 <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n","/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2018 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n/**\n * bluebird build version 3.5.4\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n\n},{}],2:[function(_dereq_,module,exports){\n\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = _dereq_(\"./schedule\");\nvar Queue = _dereq_(\"./queue\");\nvar util = _dereq_(\"./util\");\n\nfunction Async() {\n    this._customScheduler = false;\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._haveDrainedQueues = false;\n    this._trampolineEnabled = true;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n    var prev = this._schedule;\n    this._schedule = fn;\n    this._customScheduler = true;\n    return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n    return this._customScheduler;\n};\n\nAsync.prototype.enableTrampoline = function() {\n    this._trampolineEnabled = true;\n};\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n    if (util.hasDevTools) {\n        this._trampolineEnabled = false;\n    }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n    if (isNode) {\n        process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n            \"\\n\");\n        process.exit(2);\n    } else {\n        this.throwLater(e);\n    }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nif (!util.hasDevTools) {\n    Async.prototype.invokeLater = AsyncInvokeLater;\n    Async.prototype.invoke = AsyncInvoke;\n    Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n    Async.prototype.invokeLater = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvokeLater.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                setTimeout(function() {\n                    fn.call(receiver, arg);\n                }, 100);\n            });\n        }\n    };\n\n    Async.prototype.invoke = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvoke.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                fn.call(receiver, arg);\n            });\n        }\n    };\n\n    Async.prototype.settlePromises = function(promise) {\n        if (this._trampolineEnabled) {\n            AsyncSettlePromises.call(this, promise);\n        } else {\n            this._schedule(function() {\n                promise._settlePromises();\n            });\n        }\n    };\n}\n\nfunction _drainQueue(queue) {\n    while (queue.length() > 0) {\n        _drainQueueStep(queue);\n    }\n}\n\nfunction _drainQueueStep(queue) {\n    var fn = queue.shift();\n    if (typeof fn !== \"function\") {\n        fn._settlePromises();\n    } else {\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n}\n\nAsync.prototype._drainQueues = function () {\n    _drainQueue(this._normalQueue);\n    this._reset();\n    this._haveDrainedQueues = true;\n    _drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue\":26,\"./schedule\":29,\"./util\":36}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (((this._bitField & 50397184) === 0)) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    if (!calledBind) {\n        calledBind = true;\n        Promise.prototype._propagateFrom = debug.propagateFromFunction();\n        Promise.prototype._boundValue = debug.boundValueFunction();\n    }\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, undefined, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, undefined, ret, context);\n        ret._setOnCancel(maybePromise);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 2097152;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~2097152);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n    return Promise.resolve(value).bind(thisArg);\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n    try { if (Promise === bluebird) Promise = old; }\n    catch (e) {}\n    return bluebird;\n}\nvar bluebird = _dereq_(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise\":22}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!true) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var args = [].slice.call(arguments, 1);;\n    if (!true) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util\":36}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n    if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n    var promise = this;\n    var child = promise;\n    while (promise._isCancellable()) {\n        if (!promise._cancelBy(child)) {\n            if (child._isFollowing()) {\n                child._followee().cancel();\n            } else {\n                child._cancelBranched();\n            }\n            break;\n        }\n\n        var parent = promise._cancellationParent;\n        if (parent == null || !parent._isCancellable()) {\n            if (promise._isFollowing()) {\n                promise._followee().cancel();\n            } else {\n                promise._cancelBranched();\n            }\n            break;\n        } else {\n            if (promise._isFollowing()) promise._followee().cancel();\n            promise._setWillBeCancelled();\n            child = promise;\n            promise = parent;\n        }\n    }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n    this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n    return this._branchesRemainingToCancel === undefined ||\n           this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n    if (canceller === this) {\n        this._branchesRemainingToCancel = 0;\n        this._invokeOnCancel();\n        return true;\n    } else {\n        this._branchHasCancelled();\n        if (this._enoughBranchesHaveCancelled()) {\n            this._invokeOnCancel();\n            return true;\n        }\n    }\n    return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n    if (this._enoughBranchesHaveCancelled()) {\n        this._cancel();\n    }\n};\n\nPromise.prototype._cancel = function() {\n    if (!this._isCancellable()) return;\n    this._setCancelled();\n    async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n    if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n    this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n    return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n    return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n    if (util.isArray(onCancelCallback)) {\n        for (var i = 0; i < onCancelCallback.length; ++i) {\n            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n        }\n    } else if (onCancelCallback !== undefined) {\n        if (typeof onCancelCallback === \"function\") {\n            if (!internalOnly) {\n                var e = tryCatch(onCancelCallback).call(this._boundValue());\n                if (e === errorObj) {\n                    this._attachExtraTrace(e.e);\n                    async.throwLater(e.e);\n                }\n            }\n        } else {\n            onCancelCallback._resultCancelled(this);\n        }\n    }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n    var onCancelCallback = this._onCancel();\n    this._unsetOnCancel();\n    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n    if (this._isCancellable()) {\n        this._doInvokeOnCancel(this._onCancel(), true);\n        this._unsetOnCancel();\n    }\n};\n\nPromise.prototype._resultCancelled = function() {\n    this.cancel();\n};\n\n};\n\n},{\"./util\":36}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar getKeys = _dereq_(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n    return function(e) {\n        var boundTo = promise._boundValue();\n        predicateLoop: for (var i = 0; i < instances.length; ++i) {\n            var item = instances[i];\n\n            if (item === Error ||\n                (item != null && item.prototype instanceof Error)) {\n                if (e instanceof item) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (typeof item === \"function\") {\n                var matchesPredicate = tryCatch(item).call(boundTo, e);\n                if (matchesPredicate === errorObj) {\n                    return matchesPredicate;\n                } else if (matchesPredicate) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (util.isObject(e)) {\n                var keys = getKeys(item);\n                for (var j = 0; j < keys.length; ++j) {\n                    var key = keys[j];\n                    if (item[key] != e[key]) {\n                        continue predicateLoop;\n                    }\n                }\n                return tryCatch(cb).call(boundTo, e);\n            }\n        }\n        return NEXT_FILTER;\n    };\n}\n\nreturn catchFilter;\n};\n\n},{\"./es5\":13,\"./util\":36}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n    this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (this._trace !== undefined) {\n        this._trace._promiseCreated = null;\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (this._trace !== undefined) {\n        var trace = contextStack.pop();\n        var ret = trace._promiseCreated;\n        trace._promiseCreated = null;\n        return ret;\n    }\n    return null;\n};\n\nfunction createContext() {\n    if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n    var Promise_pushContext = Promise.prototype._pushContext;\n    var Promise_popContext = Promise.prototype._popContext;\n    var Promise_PeekContext = Promise._peekContext;\n    var Promise_peekContext = Promise.prototype._peekContext;\n    var Promise_promiseCreated = Promise.prototype._promiseCreated;\n    Context.deactivateLongStackTraces = function() {\n        Promise.prototype._pushContext = Promise_pushContext;\n        Promise.prototype._popContext = Promise_popContext;\n        Promise._peekContext = Promise_PeekContext;\n        Promise.prototype._peekContext = Promise_peekContext;\n        Promise.prototype._promiseCreated = Promise_promiseCreated;\n        longStackTraces = false;\n    };\n    longStackTraces = true;\n    Promise.prototype._pushContext = Context.prototype._pushContext;\n    Promise.prototype._popContext = Context.prototype._popContext;\n    Promise._peekContext = Promise.prototype._peekContext = peekContext;\n    Promise.prototype._promiseCreated = function() {\n        var ctx = this._peekContext();\n        if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n    };\n};\nreturn Context;\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, Context) {\nvar getDomain = Promise._getDomain;\nvar async = Promise._async;\nvar Warning = _dereq_(\"./errors\").Warning;\nvar util = _dereq_(\"./util\");\nvar es5 = _dereq_(\"./es5\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n                        (true ||\n                         util.env(\"BLUEBIRD_DEBUG\") ||\n                         util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n    (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nPromise.prototype.suppressUnhandledRejections = function() {\n    var target = this._target();\n    target._bitField = ((target._bitField & (~1048576)) |\n                      524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 524288) !== 0) return;\n    this._setRejectionIsUnhandled();\n    var self = this;\n    setTimeout(function() {\n        self._notifyUnhandledRejection();\n    }, 1);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n    return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._settledValue();\n        this._setUnhandledRejectionIsNotified();\n        fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~1048576);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n    return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var domain = getDomain();\n    possiblyUnhandledRejection =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var domain = getDomain();\n    unhandledRejectionHandled =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() && !config.longStackTraces) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (!config.longStackTraces && longStackTracesIsSupported()) {\n        var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n        var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n        var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n        config.longStackTraces = true;\n        disableLongStackTraces = function() {\n            if (async.haveItemsQueued() && !config.longStackTraces) {\n                throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n            }\n            Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n            Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n            Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n            Context.deactivateLongStackTraces();\n            async.enableTrampoline();\n            config.longStackTraces = false;\n        };\n        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n        Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n        Context.activateLongStackTraces();\n        async.disableTrampolineIfNecessary();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return config.longStackTraces && longStackTracesIsSupported();\n};\n\nvar fireDomEvent = (function() {\n    try {\n        if (typeof CustomEvent === \"function\") {\n            var event = new CustomEvent(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var eventData = {\n                    detail: event,\n                    cancelable: true\n                };\n                es5.defineProperty(\n                    eventData, \"promise\", {value: event.promise});\n                es5.defineProperty(eventData, \"reason\", {value: event.reason});\n                var domEvent = new CustomEvent(name.toLowerCase(), eventData);\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else if (typeof Event === \"function\") {\n            var event = new Event(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = new Event(name.toLowerCase(), {\n                    cancelable: true\n                });\n                domEvent.detail = event;\n                es5.defineProperty(domEvent, \"promise\", {value: event.promise});\n                es5.defineProperty(domEvent, \"reason\", {value: event.reason});\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else {\n            var event = document.createEvent(\"CustomEvent\");\n            event.initCustomEvent(\"testingtheevent\", false, true, {});\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = document.createEvent(\"CustomEvent\");\n                domEvent.initCustomEvent(name.toLowerCase(), false, true,\n                    event);\n                return !util.global.dispatchEvent(domEvent);\n            };\n        }\n    } catch (e) {}\n    return function() {\n        return false;\n    };\n})();\n\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function() {\n            return process.emit.apply(process, arguments);\n        };\n    } else {\n        if (!util.global) {\n            return function() {\n                return false;\n            };\n        }\n        return function(name) {\n            var methodName = \"on\" + name.toLowerCase();\n            var method = util.global[methodName];\n            if (!method) return false;\n            method.apply(util.global, [].slice.call(arguments, 1));\n            return true;\n        };\n    }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n    return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n    promiseCreated: generatePromiseLifecycleEventObject,\n    promiseFulfilled: generatePromiseLifecycleEventObject,\n    promiseRejected: generatePromiseLifecycleEventObject,\n    promiseResolved: generatePromiseLifecycleEventObject,\n    promiseCancelled: generatePromiseLifecycleEventObject,\n    promiseChained: function(name, promise, child) {\n        return {promise: promise, child: child};\n    },\n    warning: function(name, warning) {\n        return {warning: warning};\n    },\n    unhandledRejection: function (name, reason, promise) {\n        return {reason: reason, promise: promise};\n    },\n    rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent.apply(null, arguments);\n    } catch (e) {\n        async.throwLater(e);\n        globalEventFired = true;\n    }\n\n    var domEventFired = false;\n    try {\n        domEventFired = fireDomEvent(name,\n                    eventToObjectGenerator[name].apply(null, arguments));\n    } catch (e) {\n        async.throwLater(e);\n        domEventFired = true;\n    }\n\n    return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n    opts = Object(opts);\n    if (\"longStackTraces\" in opts) {\n        if (opts.longStackTraces) {\n            Promise.longStackTraces();\n        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n            disableLongStackTraces();\n        }\n    }\n    if (\"warnings\" in opts) {\n        var warningsOption = opts.warnings;\n        config.warnings = !!warningsOption;\n        wForgottenReturn = config.warnings;\n\n        if (util.isObject(warningsOption)) {\n            if (\"wForgottenReturn\" in warningsOption) {\n                wForgottenReturn = !!warningsOption.wForgottenReturn;\n            }\n        }\n    }\n    if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n        if (async.haveItemsQueued()) {\n            throw new Error(\n                \"cannot enable cancellation after promises are in use\");\n        }\n        Promise.prototype._clearCancellationData =\n            cancellationClearCancellationData;\n        Promise.prototype._propagateFrom = cancellationPropagateFrom;\n        Promise.prototype._onCancel = cancellationOnCancel;\n        Promise.prototype._setOnCancel = cancellationSetOnCancel;\n        Promise.prototype._attachCancellationCallback =\n            cancellationAttachCancellationCallback;\n        Promise.prototype._execute = cancellationExecute;\n        propagateFromFunction = cancellationPropagateFrom;\n        config.cancellation = true;\n    }\n    if (\"monitoring\" in opts) {\n        if (opts.monitoring && !config.monitoring) {\n            config.monitoring = true;\n            Promise.prototype._fireEvent = activeFireEvent;\n        } else if (!opts.monitoring && config.monitoring) {\n            config.monitoring = false;\n            Promise.prototype._fireEvent = defaultFireEvent;\n        }\n    }\n    return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n    try {\n        executor(resolve, reject);\n    } catch (e) {\n        return e;\n    }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n    ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._dereferenceTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n    ;\n    ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n    var promise = this;\n    try {\n        executor(resolve, reject, function(onCancel) {\n            if (typeof onCancel !== \"function\") {\n                throw new TypeError(\"onCancel must be a function, got: \" +\n                                    util.toString(onCancel));\n            }\n            promise._attachCancellationCallback(onCancel);\n        });\n    } catch (e) {\n        return e;\n    }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n    if (!this._isCancellable()) return this;\n\n    var previousOnCancel = this._onCancel();\n    if (previousOnCancel !== undefined) {\n        if (util.isArray(previousOnCancel)) {\n            previousOnCancel.push(onCancel);\n        } else {\n            this._setOnCancel([previousOnCancel, onCancel]);\n        }\n    } else {\n        this._setOnCancel(onCancel);\n    }\n}\n\nfunction cancellationOnCancel() {\n    return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n    this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n    this._cancellationParent = undefined;\n    this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n    if ((flags & 1) !== 0) {\n        this._cancellationParent = parent;\n        var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n        if (branchesRemainingToCancel === undefined) {\n            branchesRemainingToCancel = 0;\n        }\n        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n    }\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n    this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n    if (canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n}\n\nfunction longStackTracesDereferenceTrace() {\n    this._trace = undefined;\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n                               parent) {\n    if (returnValue === undefined && promiseCreated !== null &&\n        wForgottenReturn) {\n        if (parent !== undefined && parent._returnedNonUndefined()) return;\n        if ((promise._bitField & 65535) === 0) return;\n\n        if (name) name = name + \" \";\n        var handlerLine = \"\";\n        var creatorLine = \"\";\n        if (promiseCreated._trace) {\n            var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n            var stack = cleanStack(traceLines);\n            for (var i = stack.length - 1; i >= 0; --i) {\n                var line = stack[i];\n                if (!nodeFramePattern.test(line)) {\n                    var lineMatches = line.match(parseLinePattern);\n                    if (lineMatches) {\n                        handlerLine  = \"at \" + lineMatches[1] +\n                            \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n                    }\n                    break;\n                }\n            }\n\n            if (stack.length > 0) {\n                var firstUserLine = stack[0];\n                for (var i = 0; i < traceLines.length; ++i) {\n\n                    if (traceLines[i] === firstUserLine) {\n                        if (i > 0) {\n                            creatorLine = \"\\n\" + traceLines[i - 1];\n                        }\n                        break;\n                    }\n                }\n\n            }\n        }\n        var msg = \"a promise was created in a \" + name +\n            \"handler \" + handlerLine + \"but was not returned from it, \" +\n            \"see http://goo.gl/rRqMUw\" +\n            creatorLine;\n        promise._warn(msg, true, promiseCreated);\n    }\n}\n\nfunction deprecated(name, replacement) {\n    var message = name +\n        \" is deprecated and will be removed in a future version.\";\n    if (replacement) message += \" Use \" + replacement + \" instead.\";\n    return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n    if (!config.warnings) return;\n    var warning = new Warning(message);\n    var ctx;\n    if (shouldUseOwnTrace) {\n        promise._attachExtraTrace(warning);\n    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n\n    if (!activeFireEvent(\"warning\", warning)) {\n        formatAndLogError(warning, \"\", true);\n    }\n}\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = \"    (No stack trace)\" === line ||\n            stackFramePattern.test(line);\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0 && error.name != \"SyntaxError\") {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nfunction parseStackAndMessage(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n    };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (util.isObject(error)) {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof printWarning === \"function\") {\n            printWarning(message, isSoft);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    if (name === \"unhandledRejection\") {\n        if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n            formatAndLogError(reason, \"Unhandled rejection \");\n        }\n    } else {\n        activeFireEvent(name, promise);\n    }\n}\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj && typeof obj.toString === \"function\"\n            ? obj.toString() : util.toString(obj);\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n    return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n    if (!longStackTracesIsSupported()) return;\n    var firstStackLines = firstLineError.stack.split(\"\\n\");\n    var lastStackLines = lastLineError.stack.split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    this._promisesCreated = 0;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit += 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit += 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit -= 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit += 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit -= 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    printWarning = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        printWarning = function(message, isSoft) {\n            var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n            console.warn(color + message + \"\\u001b[0m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        printWarning = function(message, isSoft) {\n            console.warn(\"%c\" + message,\n                        isSoft ? \"color: darkorange\" : \"color: red\");\n        };\n    }\n}\n\nvar config = {\n    warnings: warnings,\n    longStackTraces: false,\n    cancellation: false,\n    monitoring: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n    longStackTraces: function() {\n        return config.longStackTraces;\n    },\n    warnings: function() {\n        return config.warnings;\n    },\n    cancellation: function() {\n        return config.cancellation;\n    },\n    monitoring: function() {\n        return config.monitoring;\n    },\n    propagateFromFunction: function() {\n        return propagateFromFunction;\n    },\n    boundValueFunction: function() {\n        return boundValueFunction;\n    },\n    checkForgottenReturns: checkForgottenReturns,\n    setBounds: setBounds,\n    warn: warn,\n    deprecated: deprecated,\n    CapturedTrace: CapturedTrace,\n    fireDomEvent: fireDomEvent,\n    fireGlobalEvent: fireGlobalEvent\n};\n};\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n    return this.value;\n}\nfunction thrower() {\n    throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value instanceof Promise) value.suppressUnhandledRejections();\n    return this._then(\n        returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    return this._then(\n        thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n    if (arguments.length <= 1) {\n        return this._then(\n            undefined, thrower, undefined, {reason: reason}, undefined);\n    } else {\n        var _reason = arguments[1];\n        var handler = function() {throw _reason;};\n        return this.caught(reason, handler);\n    }\n};\n\nPromise.prototype.catchReturn = function (value) {\n    if (arguments.length <= 1) {\n        if (value instanceof Promise) value.suppressUnhandledRejections();\n        return this._then(\n            undefined, returner, undefined, {value: value}, undefined);\n    } else {\n        var _value = arguments[1];\n        if (_value instanceof Promise) _value.suppressUnhandledRejections();\n        var handler = function() {return _value;};\n        return this.caught(value, handler);\n    }\n};\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n    return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n\n},{}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n        value: errorTypes,\n        writable: false,\n        enumerable: false,\n        configurable: false\n    });\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n\n},{\"./es5\":13,\"./util\":36}],13:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n\n},{}],14:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n    this.promise = promise;\n    this.type = type;\n    this.handler = handler;\n    this.called = false;\n    this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n    return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n    this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n    checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n    if (ctx.cancelPromise != null) {\n        if (arguments.length > 1) {\n            ctx.cancelPromise._reject(reason);\n        } else {\n            ctx.cancelPromise._cancel();\n        }\n        ctx.cancelPromise = null;\n        return true;\n    }\n    return false;\n}\n\nfunction succeed() {\n    return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n    if (checkCancel(this, reason)) return;\n    errorObj.e = reason;\n    return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    if (!this.called) {\n        this.called = true;\n        var ret = this.isFinallyHandler()\n            ? handler.call(promise._boundValue())\n            : handler.call(promise._boundValue(), reasonOrValue);\n        if (ret === NEXT_FILTER) {\n            return ret;\n        } else if (ret !== undefined) {\n            promise._setReturnedNonUndefined();\n            var maybePromise = tryConvertToPromise(ret, promise);\n            if (maybePromise instanceof Promise) {\n                if (this.cancelPromise != null) {\n                    if (maybePromise._isCancelled()) {\n                        var reason =\n                            new CancellationError(\"late cancellation observer\");\n                        promise._attachExtraTrace(reason);\n                        errorObj.e = reason;\n                        return errorObj;\n                    } else if (maybePromise.isPending()) {\n                        maybePromise._attachCancellationCallback(\n                            new FinallyHandlerCancelReaction(this));\n                    }\n                }\n                return maybePromise._then(\n                    succeed, fail, undefined, this, undefined);\n            }\n        }\n    }\n\n    if (promise.isRejected()) {\n        checkCancel(this);\n        errorObj.e = reasonOrValue;\n        return errorObj;\n    } else {\n        checkCancel(this);\n        return reasonOrValue;\n    }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n    if (typeof handler !== \"function\") return this.then();\n    return this._then(success,\n                      fail,\n                      undefined,\n                      new PassThroughHandlerContext(this, type, handler),\n                      undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThrough(handler,\n                             0,\n                             finallyHandler,\n                             finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n    return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n    var len = arguments.length;\n    if(len === 1) {\n        return this._passThrough(handlerOrPredicate,\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    } else {\n         var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return Promise.reject(new TypeError(\n                    \"tapCatch statement predicate: \"\n                    + \"expecting an object but got \" + util.classString(item)\n                ));\n            }\n        }\n        catchInstances.length = j;\n        var handler = arguments[i];\n        return this._passThrough(catchFilter(catchInstances, handler, this),\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n\n},{\"./catch_filter\":7,\"./util\":36}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise,\n                          Proxyable,\n                          debug) {\nvar errors = _dereq_(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    if (debug.cancellation()) {\n        var internal = new Promise(INTERNAL);\n        var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n        this._promise = internal.lastly(function() {\n            return _finallyPromise;\n        });\n        internal._captureStackTrace();\n        internal._setOnCancel(this);\n    } else {\n        var promise = this._promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n    }\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n    this._yieldedPromise = null;\n    this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n    return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n    this._promise = this._generator = null;\n    if (debug.cancellation() && this._finallyPromise !== null) {\n        this._finallyPromise._fulfill();\n        this._finallyPromise = null;\n    }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n    if (this._isResolved()) return;\n    var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n    var result;\n    if (!implementsReturn) {\n        var reason = new Promise.CancellationError(\n            \"generator .return() sentinel\");\n        Promise.coroutine.returnSentinel = reason;\n        this._promise._attachExtraTrace(reason);\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n                                                         reason);\n        this._promise._popContext();\n    } else {\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"return\"]).call(this._generator,\n                                                          undefined);\n        this._promise._popContext();\n    }\n    this._cancellationPhase = true;\n    this._yieldedPromise = null;\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n    this._yieldedPromise = null;\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n    this._yieldedPromise = null;\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n    if (this._yieldedPromise instanceof Promise) {\n        var promise = this._yieldedPromise;\n        this._yieldedPromise = null;\n        promise.cancel();\n    }\n};\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    var promise = this._promise;\n    if (result === errorObj) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._rejectCallback(result.e, false);\n        }\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._resolveCallback(value);\n        }\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._promiseRejected(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise = maybePromise._target();\n        var bitField = maybePromise._bitField;\n        ;\n        if (((bitField & 50397184) === 0)) {\n            this._yieldedPromise = maybePromise;\n            maybePromise._proxy(this, null);\n        } else if (((bitField & 33554432) !== 0)) {\n            Promise._async.invoke(\n                this._promiseFulfilled, this, maybePromise._value()\n            );\n        } else if (((bitField & 16777216) !== 0)) {\n            Promise._async.invoke(\n                this._promiseRejected, this, maybePromise._reason()\n            );\n        } else {\n            this._promiseCancelled();\n        }\n    }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        var ret = spawn.promise();\n        spawn._generator = generator;\n        spawn._promiseFulfilled(undefined);\n        return ret;\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,\n         getDomain) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!true) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var promiseSetter = function(i) {\n        return new Function(\"promise\", \"holder\", \"                           \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = promise;                                         \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var generateHolderClass = function(total) {\n        var props = new Array(total);\n        for (var i = 0; i < props.length; ++i) {\n            props[i] = \"this.p\" + (i+1);\n        }\n        var assignment = props.join(\" = \") + \" = null;\";\n        var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n            return \"                                                         \\n\\\n                promise = \" + prop + \";                                      \\n\\\n                if (promise instanceof Promise) {                            \\n\\\n                    promise.cancel();                                        \\n\\\n                }                                                            \\n\\\n            \";\n        }).join(\"\\n\");\n        var passedArguments = props.join(\", \");\n        var name = \"Holder$\" + total;\n\n\n        var code = \"return function(tryCatch, errorObj, Promise, async) {    \\n\\\n            'use strict';                                                    \\n\\\n            function [TheName](fn) {                                         \\n\\\n                [TheProperties]                                              \\n\\\n                this.fn = fn;                                                \\n\\\n                this.asyncNeeded = true;                                     \\n\\\n                this.now = 0;                                                \\n\\\n            }                                                                \\n\\\n                                                                             \\n\\\n            [TheName].prototype._callFunction = function(promise) {          \\n\\\n                promise._pushContext();                                      \\n\\\n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \\n\\\n                promise._popContext();                                       \\n\\\n                if (ret === errorObj) {                                      \\n\\\n                    promise._rejectCallback(ret.e, false);                   \\n\\\n                } else {                                                     \\n\\\n                    promise._resolveCallback(ret);                           \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype.checkFulfillment = function(promise) {       \\n\\\n                var now = ++this.now;                                        \\n\\\n                if (now === [TheTotal]) {                                    \\n\\\n                    if (this.asyncNeeded) {                                  \\n\\\n                        async.invoke(this._callFunction, this, promise);     \\n\\\n                    } else {                                                 \\n\\\n                        this._callFunction(promise);                         \\n\\\n                    }                                                        \\n\\\n                                                                             \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype._resultCancelled = function() {              \\n\\\n                [CancellationCode]                                           \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            return [TheName];                                                \\n\\\n        }(tryCatch, errorObj, Promise, async);                               \\n\\\n        \";\n\n        code = code.replace(/\\[TheName\\]/g, name)\n            .replace(/\\[TheTotal\\]/g, total)\n            .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n            .replace(/\\[TheProperties\\]/g, assignment)\n            .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n        return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n                           (tryCatch, errorObj, Promise, async);\n    };\n\n    var holderClasses = [];\n    var thenCallbacks = [];\n    var promiseSetters = [];\n\n    for (var i = 0; i < 8; ++i) {\n        holderClasses.push(generateHolderClass(i + 1));\n        thenCallbacks.push(thenCallback(i + 1));\n        promiseSetters.push(promiseSetter(i + 1));\n    }\n\n    reject = function (reason) {\n        this._reject(reason);\n    };\n}}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!true) {\n            if (last <= 8 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var HolderClass = holderClasses[last - 1];\n                var holder = new HolderClass(fn);\n                var callbacks = thenCallbacks;\n\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        var bitField = maybePromise._bitField;\n                        ;\n                        if (((bitField & 50397184) === 0)) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                            promiseSetters[i](maybePromise, holder);\n                            holder.asyncNeeded = false;\n                        } else if (((bitField & 33554432) !== 0)) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else if (((bitField & 16777216) !== 0)) {\n                            ret._reject(maybePromise._reason());\n                        } else {\n                            ret._cancel();\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n\n                if (!ret._isFateSealed()) {\n                    if (holder.asyncNeeded) {\n                        var domain = getDomain();\n                        if (domain !== null) {\n                            holder.fn = util.domainBind(domain, holder.fn);\n                        }\n                    }\n                    ret._setAsyncGuaranteed();\n                    ret._setOnCancel(holder);\n                }\n                return ret;\n            }\n        }\n    }\n    var args = [].slice.call(arguments);;\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util\":36}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var domain = getDomain();\n    this._callback = domain === null ? fn : util.domainBind(domain, fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = [];\n    async.invoke(this._asyncInit, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n    this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n\n    if (index < 0) {\n        index = (index * -1) - 1;\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return true;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return false;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var promise = this._promise;\n        var callback = this._callback;\n        var receiver = promise._boundValue();\n        promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        var promiseCreated = promise._popContext();\n        debug.checkForgottenReturns(\n            ret,\n            promiseCreated,\n            preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n            promise\n        );\n        if (ret === errorObj) {\n            this._reject(ret.e);\n            return true;\n        }\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            var bitField = maybePromise._bitField;\n            ;\n            if (((bitField & 50397184) === 0)) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = maybePromise;\n                maybePromise._proxy(this, (index + 1) * -1);\n                return false;\n            } else if (((bitField & 33554432) !== 0)) {\n                ret = maybePromise._value();\n            } else if (((bitField & 16777216) !== 0)) {\n                this._reject(maybePromise._reason());\n                return true;\n            } else {\n                this._cancel();\n                return true;\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n        return true;\n    }\n    return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n\n    var limit = 0;\n    if (options !== undefined) {\n        if (typeof options === \"object\" && options !== null) {\n            if (typeof options.concurrency !== \"number\") {\n                return Promise.reject(\n                    new TypeError(\"'concurrency' must be a number but it is \" +\n                                    util.classString(options.concurrency)));\n            }\n            limit = options.concurrency;\n        } else {\n            return Promise.reject(new TypeError(\n                            \"options argument must be an object but it is \" +\n                             util.classString(options)));\n        }\n    }\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n    return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    return map(promises, fn, options, _filter);\n};\n\n\n};\n\n},{\"./util\":36}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        var promiseCreated = ret._popContext();\n        debug.checkForgottenReturns(\n            value, promiseCreated, \"Promise.method\", ret);\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value;\n    if (arguments.length > 1) {\n        debug.deprecated(\"calling Promise.try with more than 1 argument\");\n        var arg = arguments[1];\n        var ctx = arguments[2];\n        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n                                  : tryCatch(fn).call(ctx, arg);\n    } else {\n        value = tryCatch(fn)();\n    }\n    var promiseCreated = ret._popContext();\n    debug.checkForgottenReturns(\n        value, promiseCreated, \"Promise.try\", ret);\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n\n},{\"./util\":36}],20:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = _dereq_(\"./es5\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n    return function(err, value) {\n        if (promise === null) return;\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (!multiArgs) {\n            promise._fulfill(value);\n        } else {\n            var args = [].slice.call(arguments, 1);;\n            promise._fulfill(args);\n        }\n        promise = null;\n    };\n}\n\nmodule.exports = nodebackForPromise;\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var newReason = new Error(reason + \"\");\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n                                                                     options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n\n},{\"./util\":36}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = _dereq_(\"./util\");\n\nvar getDomain;\nif (util.isNode) {\n    getDomain = function() {\n        var ret = process.domain;\n        if (ret === undefined) ret = null;\n        return ret;\n    };\n} else {\n    getDomain = function() {\n        return null;\n    };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar es5 = _dereq_(\"./es5\");\nvar Async = _dereq_(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = _dereq_(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n    _dereq_(\"./promise_array\")(Promise, INTERNAL,\n                               tryConvertToPromise, apiRejection, Proxyable);\nvar Context = _dereq_(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\nvar debug = _dereq_(\"./debuggability\")(Promise, Context);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n    _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n    if (self == null || self.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (typeof executor !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n    }\n\n}\n\nfunction Promise(executor) {\n    if (executor !== INTERNAL) {\n        check(this, executor);\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._resolveFromExecutor(executor);\n    this._promiseCreated();\n    this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return apiRejection(\"Catch statement predicate: \" +\n                    \"expecting an object but got \" + util.classString(item));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n        return this.then(undefined, catchFilter(catchInstances, fn, this));\n    }\n    return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflectHandler,\n        reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n    if (debug.warnings() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n    var promise =\n        this._then(didFulfill, didReject, undefined, undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    if (arguments.length > 0) {\n        this._warn(\".all() was passed arguments but it does not take any\");\n    }\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n                                         : false;\n    var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true);\n    }\n    if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._setFulfilled();\n        ret._rejectionHandler0 = obj;\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    _,    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n    var target = this._target();\n    var bitField = target._bitField;\n\n    if (!haveInternalData) {\n        promise._propagateFrom(this, 3);\n        promise._captureStackTrace();\n        if (receiver === undefined &&\n            ((this._bitField & 2097152) !== 0)) {\n            if (!((bitField & 50397184) === 0)) {\n                receiver = this._boundValue();\n            } else {\n                receiver = target === this ? undefined : this._boundTo;\n            }\n        }\n        this._fireEvent(\"promiseChained\", this, promise);\n    }\n\n    var domain = getDomain();\n    if (!((bitField & 50397184) === 0)) {\n        var handler, value, settler = target._settlePromiseCtx;\n        if (((bitField & 33554432) !== 0)) {\n            value = target._rejectionHandler0;\n            handler = didFulfill;\n        } else if (((bitField & 16777216) !== 0)) {\n            value = target._fulfillmentHandler0;\n            handler = didReject;\n            target._unsetRejectionIsUnhandled();\n        } else {\n            settler = target._settlePromiseLateCancellationObserver;\n            value = new CancellationError(\"late cancellation observer\");\n            target._attachExtraTrace(value);\n            handler = didReject;\n        }\n\n        async.invoke(settler, target, {\n            handler: domain === null ? handler\n                : (typeof handler === \"function\" &&\n                    util.domainBind(domain, handler)),\n            promise: promise,\n            receiver: receiver,\n            value: value\n        });\n    } else {\n        target._addCallbacks(didFulfill, didReject, promise, receiver, domain);\n    }\n\n    return promise;\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n    return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -65536) |\n        (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 33554432;\n    this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 16777216;\n    this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 67108864;\n    this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n    this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n    this._bitField = this._bitField | 65536;\n    this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n    this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n    if (async.hasCustomScheduler()) return;\n    this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0 ? this._receiver0 : this[\n            index * 4 - 4 + 3];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return this[\n            index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n    var bitField = follower._bitField;\n    var fulfill = follower._fulfillmentHandler0;\n    var reject = follower._rejectionHandler0;\n    var promise = follower._promise0;\n    var receiver = follower._receiverAt(0);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    promise,\n    receiver,\n    domain\n) {\n    var index = this._length();\n\n    if (index >= 65535 - 4) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        this._receiver0 = receiver;\n        if (typeof fulfill === \"function\") {\n            this._fulfillmentHandler0 =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    } else {\n        var base = index * 4 - 4;\n        this[base + 2] = promise;\n        this[base + 3] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n    this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (((this._bitField & 117506048) !== 0)) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n    var promise = maybePromise._target();\n\n    if (promise === this) {\n        this._reject(makeSelfResolutionError());\n        return;\n    }\n\n    var bitField = promise._bitField;\n    if (((bitField & 50397184) === 0)) {\n        var len = this._length();\n        if (len > 0) promise._migrateCallback0(this);\n        for (var i = 1; i < len; ++i) {\n            promise._migrateCallbackAt(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(promise);\n    } else if (((bitField & 33554432) !== 0)) {\n        this._fulfill(promise._value());\n    } else if (((bitField & 16777216) !== 0)) {\n        this._reject(promise._reason());\n    } else {\n        var reason = new CancellationError(\"late cancellation observer\");\n        promise._attachExtraTrace(reason);\n        this._reject(reason);\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n        var message = \"a promise was rejected with a non-error: \" +\n            util.classString(reason);\n        this._warn(message, true);\n    }\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n    if (executor === INTERNAL) return;\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = this._execute(executor, function(value) {\n        promise._resolveCallback(value);\n    }, function (reason) {\n        promise._rejectCallback(reason, synchronous);\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined) {\n        promise._rejectCallback(r, true);\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    var bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY) {\n        if (!value || typeof value.length !== \"number\") {\n            x = errorObj;\n            x.e = new TypeError(\"cannot .spread() a non-array: \" +\n                                    util.classString(value));\n        } else {\n            x = tryCatch(handler).apply(this._boundValue(), value);\n        }\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    var promiseCreated = promise._popContext();\n    bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n\n    if (x === NEXT_FILTER) {\n        promise._reject(value);\n    } else if (x === errorObj) {\n        promise._rejectCallback(x.e, false);\n    } else {\n        debug.checkForgottenReturns(x, promiseCreated, \"\",  promise, this);\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n    var isPromise = promise instanceof Promise;\n    var bitField = this._bitField;\n    var asyncGuaranteed = ((bitField & 134217728) !== 0);\n    if (((bitField & 65536) !== 0)) {\n        if (isPromise) promise._invokeInternalOnCancel();\n\n        if (receiver instanceof PassThroughHandlerContext &&\n            receiver.isFinallyHandler()) {\n            receiver.cancelPromise = promise;\n            if (tryCatch(handler).call(receiver, value) === errorObj) {\n                promise._reject(errorObj.e);\n            }\n        } else if (handler === reflectHandler) {\n            promise._fulfill(reflectHandler.call(receiver));\n        } else if (receiver instanceof Proxyable) {\n            receiver._promiseCancelled(promise);\n        } else if (isPromise || promise instanceof PromiseArray) {\n            promise._cancel();\n        } else {\n            receiver.cancel();\n        }\n    } else if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            if (asyncGuaranteed) promise._setAsyncGuaranteed();\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof Proxyable) {\n        if (!receiver._isResolved()) {\n            if (((bitField & 33554432) !== 0)) {\n                receiver._promiseFulfilled(value, promise);\n            } else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (asyncGuaranteed) promise._setAsyncGuaranteed();\n        if (((bitField & 33554432) !== 0)) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value);\n        }\n    }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n    var handler = ctx.handler;\n    var promise = ctx.promise;\n    var receiver = ctx.receiver;\n    var value = ctx.value;\n    if (typeof handler === \"function\") {\n        if (!(promise instanceof Promise)) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (promise instanceof Promise) {\n        promise._reject(value);\n    }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n    this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n    var promise = this._promise0;\n    var receiver = this._receiverAt(0);\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    var base = index * 4 - 4;\n    this[base + 2] =\n    this[base + 3] =\n    this[base + 0] =\n    this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._reject(err);\n    }\n    this._setFulfilled();\n    this._rejectionHandler0 = value;\n\n    if ((bitField & 65535) > 0) {\n        if (((bitField & 134217728) !== 0)) {\n            this._settlePromises();\n        } else {\n            async.settlePromises(this);\n        }\n        this._dereferenceTrace();\n    }\n};\n\nPromise.prototype._reject = function (reason) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    this._setRejected();\n    this._fulfillmentHandler0 = reason;\n\n    if (this._isFinal()) {\n        return async.fatalError(reason, util.isNode);\n    }\n\n    if ((bitField & 65535) > 0) {\n        async.settlePromises(this);\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._fulfillmentHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, value);\n    }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._rejectionHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, reason);\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    var bitField = this._bitField;\n    var len = (bitField & 65535);\n\n    if (len > 0) {\n        if (((bitField & 16842752) !== 0)) {\n            var reason = this._fulfillmentHandler0;\n            this._settlePromise0(this._rejectionHandler0, reason, bitField);\n            this._rejectPromises(len, reason);\n        } else {\n            var value = this._rejectionHandler0;\n            this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n            this._fulfillPromises(len, value);\n        }\n        this._setLength(0);\n    }\n    this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n    var bitField = this._bitField;\n    if (((bitField & 33554432) !== 0)) {\n        return this._rejectionHandler0;\n    } else if (((bitField & 16777216) !== 0)) {\n        return this._fulfillmentHandler0;\n    }\n};\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n    debug.deprecated(\"Promise.defer\", \"new Promise\");\n    var promise = new Promise(INTERNAL);\n    return {\n        promise: promise,\n        resolve: deferResolve,\n        reject: deferReject\n    };\n};\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\n_dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n    debug);\n_dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n_dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n_dereq_(\"./direct_resolve\")(Promise);\n_dereq_(\"./synchronous_inspection\")(Promise);\n_dereq_(\"./join\")(\n    Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);\nPromise.Promise = Promise;\nPromise.version = \"3.5.4\";\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./call_get.js')(Promise);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n_dereq_('./timers.js')(Promise, INTERNAL, debug);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./settle.js')(Promise, PromiseArray, debug);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./filter.js')(Promise, INTERNAL);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./any.js')(Promise);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    debug.setBounds(Async.firstLineError, util.lastLineError);               \n    return Promise;                                                          \n\n};\n\n},{\"./any.js\":1,\"./async\":2,\"./bind\":3,\"./call_get.js\":5,\"./cancel\":6,\"./catch_filter\":7,\"./context\":8,\"./debuggability\":9,\"./direct_resolve\":10,\"./each.js\":11,\"./errors\":12,\"./es5\":13,\"./filter.js\":14,\"./finally\":15,\"./generators.js\":16,\"./join\":17,\"./map.js\":18,\"./method\":19,\"./nodeback\":20,\"./nodeify.js\":21,\"./promise_array\":23,\"./promisify.js\":24,\"./props.js\":25,\"./race.js\":27,\"./reduce.js\":28,\"./settle.js\":30,\"./some.js\":31,\"./synchronous_inspection\":32,\"./thenables\":33,\"./timers.js\":34,\"./using.js\":35,\"./util\":36}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection, Proxyable) {\nvar util = _dereq_(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    case -6: return new Map();\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    if (values instanceof Promise) {\n        promise._propagateFrom(values, 3);\n    }\n    promise._setOnCancel(this);\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        var bitField = values._bitField;\n        ;\n        this._values = values;\n\n        if (((bitField & 50397184) === 0)) {\n            this._promise._setAsyncGuaranteed();\n            return values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n        } else if (((bitField & 33554432) !== 0)) {\n            values = values._value();\n        } else if (((bitField & 16777216) !== 0)) {\n            return this._reject(values._reason());\n        } else {\n            return this._cancel();\n        }\n    }\n    values = util.asArray(values);\n    if (values === null) {\n        var err = apiRejection(\n            \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n        this._promise._rejectCallback(err, false);\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var result = this._promise;\n    var isResolved = false;\n    var bitField = null;\n    for (var i = 0; i < len; ++i) {\n        var maybePromise = tryConvertToPromise(values[i], result);\n\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            bitField = maybePromise._bitField;\n        } else {\n            bitField = null;\n        }\n\n        if (isResolved) {\n            if (bitField !== null) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        } else if (bitField !== null) {\n            if (((bitField & 50397184) === 0)) {\n                maybePromise._proxy(this, i);\n                this._values[i] = maybePromise;\n            } else if (((bitField & 33554432) !== 0)) {\n                isResolved = this._promiseFulfilled(maybePromise._value(), i);\n            } else if (((bitField & 16777216) !== 0)) {\n                isResolved = this._promiseRejected(maybePromise._reason(), i);\n            } else {\n                isResolved = this._promiseCancelled(i);\n            }\n        } else {\n            isResolved = this._promiseFulfilled(maybePromise, i);\n        }\n    }\n    if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n    if (this._isResolved() || !this._promise._isCancellable()) return;\n    this._values = null;\n    this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n    this._cancel();\n    return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n    this._totalResolved++;\n    this._reject(reason);\n    return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n    if (this._isResolved()) return;\n    var values = this._values;\n    this._cancel();\n    if (values instanceof Promise) {\n        values.cancel();\n    } else {\n        for (var i = 0; i < values.length; ++i) {\n            if (values[i] instanceof Promise) {\n                values[i].cancel();\n            }\n        }\n    }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util\":36}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util\");\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!true) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n    var body = \"'use strict';                                                \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise, \" + multiArgs + \");   \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n    \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode);\n    body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\n                        body)(\n                    Promise,\n                    fn,\n                    receiver,\n                    withAppended,\n                    maybeWrapAsError,\n                    nodebackForPromise,\n                    util.tryCatch,\n                    util.errorObj,\n                    util.notEnumerableProp,\n                    INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise, multiArgs);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key,\n                                           fn, suffix, multiArgs);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n    return makeNodePromisified(callback, receiver, undefined,\n                                callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    options = Object(options);\n    var receiver = options.context === undefined ? THIS : options.context;\n    var multiArgs = !!options.multiArgs;\n    var ret = promisify(fn, receiver, multiArgs);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    options = Object(options);\n    var multiArgs = !!options.multiArgs;\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier,\n                multiArgs);\n            promisifyAll(value, suffix, filter, promisifier, multiArgs);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n\n},{\"./errors\":12,\"./nodeback\":20,\"./util\":36}],25:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n    var index = 0;\n    var size = 0;\n\n    function extractEntry(value, key) {\n        this[index] = value;\n        this[index + size] = key;\n        index++;\n    }\n\n    return function mapToEntries(map) {\n        size = map.size;\n        index = 0;\n        var ret = new Array(map.size * 2);\n        map.forEach(extractEntry, ret);\n        return ret;\n    };\n})();\n\nvar entriesToMap = function(entries) {\n    var ret = new Es6Map();\n    var length = entries.length / 2 | 0;\n    for (var i = 0; i < length; ++i) {\n        var key = entries[length + i];\n        var value = entries[i];\n        ret.set(key, value);\n    }\n    return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n    var isMap = false;\n    var entries;\n    if (Es6Map !== undefined && obj instanceof Es6Map) {\n        entries = mapToEntries(obj);\n        isMap = true;\n    } else {\n        var keys = es5.keys(obj);\n        var len = keys.length;\n        entries = new Array(len * 2);\n        for (var i = 0; i < len; ++i) {\n            var key = keys[i];\n            entries[i] = obj[key];\n            entries[i + len] = key;\n        }\n    }\n    this.constructor$(entries);\n    this._isMap = isMap;\n    this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val;\n        if (this._isMap) {\n            val = entriesToMap(this._values);\n        } else {\n            val = {};\n            var keyOffset = this.length();\n            for (var i = 0, len = this.length(); i < len; ++i) {\n                val[this._values[i + keyOffset]] = this._values[i];\n            }\n        }\n        this._resolve(val);\n        return true;\n    }\n    return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 2);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n\n},{\"./es5\":13,\"./util\":36}],26:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else {\n        promises = util.asArray(promises);\n        if (promises === null)\n            return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 3);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n\n},{\"./util\":36}],28:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n    this.constructor$(promises);\n    var domain = getDomain();\n    this._fn = domain === null ? fn : util.domainBind(domain, fn);\n    if (initialValue !== undefined) {\n        initialValue = Promise.resolve(initialValue);\n        initialValue._attachCancellationCallback(this);\n    }\n    this._initialValue = initialValue;\n    this._currentCancellable = null;\n    if(_each === INTERNAL) {\n        this._eachValues = Array(this._length);\n    } else if (_each === 0) {\n        this._eachValues = null;\n    } else {\n        this._eachValues = undefined;\n    }\n    this._promise._captureStackTrace();\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n    if (this._eachValues !== undefined && \n        this._eachValues !== null && \n        accum !== INTERNAL) {\n        this._eachValues.push(accum);\n    }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n    if (this._eachValues !== null) {\n        this._eachValues.push(value);\n    }\n    return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n    this._resolve(this._eachValues !== undefined ? this._eachValues\n                                                 : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n    this._promise._resolveCallback(value);\n    this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n    if (sender === this._initialValue) return this._cancel();\n    if (this._isResolved()) return;\n    this._resultCancelled$();\n    if (this._currentCancellable instanceof Promise) {\n        this._currentCancellable.cancel();\n    }\n    if (this._initialValue instanceof Promise) {\n        this._initialValue.cancel();\n    }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n    this._values = values;\n    var value;\n    var i;\n    var length = values.length;\n    if (this._initialValue !== undefined) {\n        value = this._initialValue;\n        i = 0;\n    } else {\n        value = Promise.resolve(values[0]);\n        i = 1;\n    }\n\n    this._currentCancellable = value;\n\n    if (!value.isRejected()) {\n        for (; i < length; ++i) {\n            var ctx = {\n                accum: null,\n                value: values[i],\n                index: i,\n                length: length,\n                array: this\n            };\n            value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n        }\n    }\n\n    if (this._eachValues !== undefined) {\n        value = value\n            ._then(this._eachComplete, undefined, undefined, this, undefined);\n    }\n    value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n    if (this.isFulfilled()) {\n        array._resolve(valueOrReason);\n    } else {\n        array._reject(valueOrReason);\n    }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nfunction gotAccum(accum) {\n    this.accum = accum;\n    this.array._gotAccum(accum);\n    var value = tryConvertToPromise(this.value, this.array._promise);\n    if (value instanceof Promise) {\n        this.array._currentCancellable = value;\n        return value._then(gotValue, undefined, undefined, this, undefined);\n    } else {\n        return gotValue.call(this, value);\n    }\n}\n\nfunction gotValue(value) {\n    var array = this.array;\n    var promise = array._promise;\n    var fn = tryCatch(array._fn);\n    promise._pushContext();\n    var ret;\n    if (array._eachValues !== undefined) {\n        ret = fn.call(promise._boundValue(), value, this.index, this.length);\n    } else {\n        ret = fn.call(promise._boundValue(),\n                              this.accum, value, this.index, this.length);\n    }\n    if (ret instanceof Promise) {\n        array._currentCancellable = ret;\n    }\n    var promiseCreated = promise._popContext();\n    debug.checkForgottenReturns(\n        ret,\n        promiseCreated,\n        array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n        promise\n    );\n    return ret;\n}\n};\n\n},{\"./util\":36}],29:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n           typeof NativePromise.resolve === \"function\") {\n    var nativePromise = NativePromise.resolve();\n    schedule = function(fn) {\n        nativePromise.then(fn);\n    };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            (window.navigator.standalone || window.cordova))) {\n    schedule = (function() {\n        var div = document.createElement(\"div\");\n        var opts = {attributes: true};\n        var toggleScheduled = false;\n        var div2 = document.createElement(\"div\");\n        var o2 = new MutationObserver(function() {\n            div.classList.toggle(\"foo\");\n            toggleScheduled = false;\n        });\n        o2.observe(div2, opts);\n\n        var scheduleToggle = function() {\n            if (toggleScheduled) return;\n            toggleScheduled = true;\n            div2.classList.toggle(\"foo\");\n        };\n\n        return function schedule(fn) {\n            var o = new MutationObserver(function() {\n                o.disconnect();\n                fn();\n            });\n            o.observe(div, opts);\n            scheduleToggle();\n        };\n    })();\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":36}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 33554432;\n    ret._settledValueField = value;\n    return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 16777216;\n    ret._settledValueField = reason;\n    return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    debug.deprecated(\".settle()\", \".reflect()\");\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return Promise.settle(this);\n};\n};\n\n},{\"./util\":36}],31:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar RangeError = _dereq_(\"./errors\").RangeError;\nvar AggregateError = _dereq_(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n        return true;\n    }\n    return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n    if (this._values instanceof Promise || this._values == null) {\n        return this._cancel();\n    }\n    this._addRejected(CANCELLATION);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            if (this._values[i] !== CANCELLATION) {\n                e.push(this._values[i]);\n            }\n        }\n        if (e.length > 0) {\n            this._reject(e);\n        } else {\n            this._cancel();\n        }\n        return true;\n    }\n    return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors\":12,\"./util\":36}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValueField = promise._isFateSealed()\n            ? promise._settledValue() : undefined;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValueField = undefined;\n    }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n    return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n    return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n    return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n    return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n    return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n    return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n    return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n    return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n    return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n    return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n    return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n    return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n    return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n    return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    target._unsetRejectionIsUnhandled();\n    return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) return obj;\n        var then = getThen(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n                obj._then(\n                    ret._fulfill,\n                    ret._reject,\n                    undefined,\n                    ret,\n                    null\n                );\n                return ret;\n            }\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction doGetThen(obj) {\n    return obj.then;\n}\n\nfunction getThen(obj) {\n    try {\n        return doGetThen(obj);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    try {\n        return hasProp.call(obj, \"_promise0\");\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x, resolve, reject);\n    synchronous = false;\n\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolve(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function reject(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util\":36}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = _dereq_(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle)  {\n    this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n    clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n    var ret;\n    var handle;\n    if (value !== undefined) {\n        ret = Promise.resolve(value)\n                ._then(afterValue, null, null, ms, undefined);\n        if (debug.cancellation() && value instanceof Promise) {\n            ret._setOnCancel(value);\n        }\n    } else {\n        ret = new Promise(INTERNAL);\n        handle = setTimeout(function() { ret._fulfill(); }, +ms);\n        if (debug.cancellation()) {\n            ret._setOnCancel(new HandleWrapper(handle));\n        }\n        ret._captureStackTrace();\n    }\n    ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n    var err;\n    if (typeof message !== \"string\") {\n        if (message instanceof Error) {\n            err = message;\n        } else {\n            err = new TimeoutError(\"operation timed out\");\n        }\n    } else {\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._reject(err);\n\n    if (parent != null) {\n        parent.cancel();\n    }\n};\n\nfunction successClear(value) {\n    clearTimeout(this.handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    clearTimeout(this.handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret, parent;\n\n    var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n        if (ret.isPending()) {\n            afterTimeout(ret, message, parent);\n        }\n    }, ms));\n\n    if (debug.cancellation()) {\n        parent = this.then();\n        ret = parent._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n        ret._setOnCancel(handleWrapper);\n    } else {\n        ret = this._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n    }\n\n    return ret;\n};\n\n};\n\n},{\"./util\":36}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext, INTERNAL, debug) {\n    var util = _dereq_(\"./util\");\n    var TypeError = _dereq_(\"./errors\").TypeError;\n    var inherits = _dereq_(\"./util\").inherits;\n    var errorObj = util.errorObj;\n    var tryCatch = util.tryCatch;\n    var NULL = {};\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = new Promise(INTERNAL);\n        function iterator() {\n            if (i >= len) return ret._fulfill();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret;\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return NULL;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== NULL\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    function ResourceList(length) {\n        this.length = length;\n        this.promise = null;\n        this[length-1] = null;\n    }\n\n    ResourceList.prototype._resultCancelled = function() {\n        var len = this.length;\n        for (var i = 0; i < len; ++i) {\n            var item = this[i];\n            if (item instanceof Promise) {\n                item.cancel();\n            }\n        }\n    };\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n        }\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new ResourceList(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var reflectedResources = new Array(resources.length);\n        for (var i = 0; i < reflectedResources.length; ++i) {\n            reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n        }\n\n        var resultPromise = Promise.all(reflectedResources)\n            .then(function(inspections) {\n                for (var i = 0; i < inspections.length; ++i) {\n                    var inspection = inspections[i];\n                    if (inspection.isRejected()) {\n                        errorObj.e = inspection.error();\n                        return errorObj;\n                    } else if (!inspection.isFulfilled()) {\n                        resultPromise.cancel();\n                        return;\n                    }\n                    inspections[i] = inspection.value();\n                }\n                promise._pushContext();\n\n                fn = tryCatch(fn);\n                var ret = spreadArgs\n                    ? fn.apply(undefined, inspections) : fn(inspections);\n                var promiseCreated = promise._popContext();\n                debug.checkForgottenReturns(\n                    ret, promiseCreated, \"Promise.using\", promise);\n                return ret;\n            });\n\n        var promise = resultPromise.lastly(function() {\n            var inspection = new Promise.PromiseInspection(resultPromise);\n            return dispose(resources, inspection);\n        });\n        resources.promise = promise;\n        promise._setOnCancel(resources);\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 131072;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 131072) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~131072);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n\n},{\"./errors\":12,\"./util\":36}],36:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    this !== undefined ? this : null;\n\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return typeof value === \"function\" ||\n           typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function FakeConstructor() {}\n    FakeConstructor.prototype = obj;\n    var receiver = new FakeConstructor();\n    function ic() {\n        return typeof receiver.foo;\n    }\n    ic();\n    ic();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction isError(obj) {\n    return obj instanceof Error ||\n        (obj !== null &&\n           typeof obj === \"object\" &&\n           typeof obj.message === \"string\" &&\n           typeof obj.name === \"string\");\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar asArray = function(v) {\n    if (es5.isArray(v)) {\n        return v;\n    }\n    return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n    var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n        return Array.from(v);\n    } : function(v) {\n        var ret = [];\n        var it = v[Symbol.iterator]();\n        var itResult;\n        while (!((itResult = it.next()).done)) {\n            ret.push(itResult.value);\n        }\n        return ret;\n    };\n\n    asArray = function(v) {\n        if (es5.isArray(v)) {\n            return v;\n        } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n            return ArrayFrom(v);\n        }\n        return null;\n    };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n    typeof process.env !== \"undefined\";\n\nfunction env(key) {\n    return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n    if (typeof Promise === \"function\") {\n        try {\n            var promise = new Promise(function(){});\n            if ({}.toString.call(promise) === \"[object Promise]\") {\n                return Promise;\n            }\n        } catch (e) {}\n    }\n}\n\nfunction domainBind(self, cb) {\n    return self.bind(cb);\n}\n\nvar ret = {\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    asArray: asArray,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    isError: isError,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n                 typeof chrome.loadTimes === \"function\",\n    isNode: isNode,\n    hasEnvVariables: hasEnvVariables,\n    env: env,\n    global: globalObject,\n    getNativePromise: getNativePromise,\n    domainBind: domainBind\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version;\n    if (process.versions && process.versions.node) {    \n        version = process.versions.node.split(\".\").map(Number);\n    } else if (process.version) {\n        version = process.version.split(\".\").map(Number);\n    }\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5\":13}]},{},[4])(4)\n});                    ;if (typeof window !== 'undefined' && window !== null) {                               window.P = window.Promise;                                                     } else if (typeof self !== 'undefined' && self !== null) {                             self.P = self.Promise;                                                         }","module.exports = require(\"bluebird\");","var utils = require(\"../../utils/utils\");\n\nvar StateService = (function(){\n\tvar stateProviders = {};\n\n\tfunction getState(name){\n\t\tif(name){\n\t\t\treturn stateProviders[name].method();\n\t\t}else{\n\t\t\tvar res = {};\n\t\t\tfor(var i in stateProviders){\n\t\t\t\tif(!stateProviders[i].internal)\n\t\t\t\t\tutils.mixin(res, stateProviders[i].method(), true);\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tfunction registerProvider(name, provider, internal){\n\t\tstateProviders[name] = { method: provider, internal: internal};\n\t}\n\n\tfunction unregisterProvider(name){\n\t\tdelete stateProviders[name];\n\t}\n\n\treturn {\n\t\tgetState: getState,\n\t\tregisterProvider: registerProvider,\n\t\tunregisterProvider: unregisterProvider\n\t};\n});\n\nmodule.exports = StateService;\n\n","module.exports = function(gantt) {\n\n\tvar regTemplates = {};\n\n\tfunction initTemplate(name, initial, template_name) {\n\t\ttemplate_name = template_name || name;\n\t\tvar config = gantt.config,\n\t\t\ttemplates = gantt.templates;\n\n\t\tif (gantt.config[name] && regTemplates[template_name] != config[name]) {\n\t\t\tif (!(initial && templates[template_name])) {\n\t\t\t\ttemplates[template_name] = gantt.date.date_to_str(config[name]);\n\t\t\t\tregTemplates[template_name] = config[name];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction initTemplates() {\n\t\tvar labels = gantt.locale.labels;\n\t\tlabels.gantt_save_btn = labels.icon_save;\n\t\tlabels.gantt_cancel_btn = labels.icon_cancel;\n\t\tlabels.gantt_delete_btn = labels.icon_delete;\n\n\n\t\tvar date = gantt.date;\n\n\t\t//build configuration based templates\n\t\tvar d = date.date_to_str;\n\t\tvar c = gantt.config;\n\t\tvar format_date = d(c.xml_date || c.date_format, c.server_utc);\n\t\tvar parse_date = date.str_to_date(c.xml_date || c.date_format, c.server_utc);\n\n\t\tinitTemplate(\"date_scale\", true, undefined, gantt.config, gantt.templates);\n\t\tinitTemplate(\"date_grid\", true, \"grid_date_format\", gantt.config, gantt.templates);\n\t\tinitTemplate(\"task_date\", true, undefined, gantt.config, gantt.templates);\n\n\t\tgantt.mixin(gantt.templates, {\n\t\t\txml_format: format_date, // deprecated\n\t\t\tformat_date: format_date,\n\n\t\t\txml_date: parse_date, // deprecated\n\t\t\tparse_date: parse_date,\n\n\t\t\tprogress_text: function (start, end, task) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\t\t\tgrid_header_class: function (column, config) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\n\t\t\ttask_text: function (start, end, task) {\n\t\t\t\treturn task.text;\n\t\t\t},\n\t\t\ttask_class: function (start, end, task) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\t\t\ttask_end_date: function (date) {\n\t\t\t\treturn gantt.templates.task_date(date);\n\t\t\t},\n\t\t\tgrid_row_class: function (start, end, task) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\t\t\ttask_row_class: function (start, end, task) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\t\t\ttimeline_cell_class: function (item, date) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\t\t\tscale_cell_class: function (date) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\t\t\tscale_row_class: function (date) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\n\t\t\tgrid_indent: function (item) {\n\t\t\t\treturn \"<div class='gantt_tree_indent'></div>\";\n\t\t\t},\n\t\t\tgrid_folder: function (item) {\n\t\t\t\treturn \"<div class='gantt_tree_icon gantt_folder_\" + (item.$open ? \"open\" : \"closed\") + \"'></div>\";\n\t\t\t},\n\t\t\tgrid_file: function (item) {\n\t\t\t\treturn \"<div class='gantt_tree_icon gantt_file'></div>\";\n\t\t\t},\n\t\t\tgrid_open: function (item) {\n\t\t\t\treturn \"<div class='gantt_tree_icon gantt_\" + (item.$open ? \"close\" : \"open\") + \"'></div>\";\n\t\t\t},\n\t\t\tgrid_blank: function (item) {\n\t\t\t\treturn \"<div class='gantt_tree_icon gantt_blank'></div>\";\n\t\t\t},\n\t\t\tdate_grid: function (date, item, column) {\n\t\t\t\tif (item && gantt.isUnscheduledTask(item) && gantt.config.show_unscheduled) {\n\t\t\t\t\treturn gantt.templates.task_unscheduled_time(item);\n\t\t\t\t} else {\n\t\t\t\t\treturn gantt.templates.grid_date_format(date, column);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttask_time: function (start, end, ev) {\n\t\t\t\tif (gantt.isUnscheduledTask(ev) && gantt.config.show_unscheduled) {\n\t\t\t\t\treturn gantt.templates.task_unscheduled_time(ev);\n\t\t\t\t} else {\n\t\t\t\t\treturn gantt.templates.task_date(start) + \" - \" + gantt.templates.task_end_date(end);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttask_unscheduled_time: function (task) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\n\t\t\ttime_picker: d(c.time_picker),\n\t\t\tlink_class: function (link) {\n\t\t\t\treturn \"\";\n\t\t\t},\n\t\t\tlink_description: function (link) {\n\t\t\t\tvar from = gantt.getTask(link.source),\n\t\t\t\t\tto = gantt.getTask(link.target);\n\n\t\t\t\treturn \"<b>\" + from.text + \"</b> &ndash;  <b>\" + to.text + \"</b>\";\n\t\t\t},\n\n\t\t\tdrag_link: function (from, from_start, to, to_start) {\n\t\t\t\tfrom = gantt.getTask(from);\n\t\t\t\tvar labels = gantt.locale.labels;\n\n\t\t\t\tvar text = \"<b>\" + from.text + \"</b> \" + (from_start ? labels.link_start : labels.link_end) + \"<br/>\";\n\t\t\t\tif (to) {\n\t\t\t\t\tto = gantt.getTask(to);\n\t\t\t\t\ttext += \"<b> \" + to.text + \"</b> \" + (to_start ? labels.link_start : labels.link_end) + \"<br/>\";\n\t\t\t\t}\n\t\t\t\treturn text;\n\t\t\t},\n\t\t\tdrag_link_class: function (from, from_start, to, to_start) {\n\t\t\t\tvar add = \"\";\n\n\t\t\t\tif (from && to) {\n\t\t\t\t\tvar allowed = gantt.isLinkAllowed(from, to, from_start, to_start);\n\t\t\t\t\tadd = \" \" + (allowed ? \"gantt_link_allow\" : \"gantt_link_deny\");\n\t\t\t\t}\n\n\t\t\t\treturn \"gantt_link_tooltip\" + add;\n\t\t\t},\n\n\t\t\t/* used for aria-labels of bar elements and for tooltip.js */\n\t\t\ttooltip_date_format: date.date_to_str(\"%Y-%m-%d\"),\n\t\t\ttooltip_text: function (start, end, event) {\n\t\t\t\treturn \"<b>Task:</b> \" + event.text + \"<br/><b>Start date:</b> \" + gantt.templates.tooltip_date_format(start) + \"<br/><b>End date:</b> \" + gantt.templates.tooltip_date_format(end);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn {\n\t\tinitTemplates: initTemplates,\n\t\tinitTemplate: initTemplate\n\t};\n\n};","var eventable = require(\"../../utils/eventable\");\nvar utils = require(\"../../utils/utils\");\nvar timeout = require(\"../../utils/timeout\");\n\nmodule.exports = function(gantt){\n\n\tfunction copyDomEvent(e){\n\t\treturn {\n\t\t\ttarget: e.target || e.srcElement,\n\t\t\tpageX: e.pageX,\n\t\t\tpageY: e.pageY,\n\t\t\tclientX: e.clientX,\n\t\t\tclientY: e.clientY,\n\t\t\tmetaKey: e.metaKey,\n\t\t\tshiftKey: e.shiftKey,\n\t\t\tctrlKey: e.ctrlKey,\n\t\t\taltKey: e.altKey\n\t\t};\n\t}\n\n\tfunction DnD(obj, config) {\n\t\tthis._obj = obj;\n\t\tthis._settings = config || {};\n\t\teventable(this);\n\n\t\tvar inputMethods = this.getInputMethods();\n\n\t\tthis._drag_start_timer = null;\n\t\tgantt.attachEvent(\"onGanttScroll\", utils.bind(function (left, top) {\n\t\t\tthis.clearDragTimer();\n\t\t}, this));\n\n\t\tfor(var i = 0; i < inputMethods.length; i++){\n\t\t\t(utils.bind(function(input){\n\n\t\t\t\tgantt.event(obj, input.down, utils.bind(function (e) {\n\t\t\t\t\tif(!input.accessor(e)){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._settings.original_target = copyDomEvent(e);\n\n\t\t\t\t\tif (gantt.config.touch) {\n\t\t\t\t\t\tthis.clearDragTimer();\n\n\t\t\t\t\t\tthis._drag_start_timer = setTimeout(utils.bind(function () {\n\t\t\t\t\t\t\tthis.dragStart(obj, e, input);\n\t\t\t\t\t\t}, this), gantt.config.touch_drag);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.dragStart(obj, e, input);\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\n\t\t\t\tgantt.event(document.body, input.up, utils.bind(function (e) {\n\t\t\t\t\tif(!input.accessor(e)){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clearDragTimer();\n\t\t\t\t}, this));\n\n\t\t\t}, this))(inputMethods[i]);\n\t\t}\n\t}\n\n\tDnD.prototype = {\n\t\ttraceDragEvents: function (domElement, inputMethod) {\n\t\t\tvar mousemove = utils.bind(function (e) {\n\t\t\t\treturn this.dragMove(domElement, e, inputMethod.accessor);\n\t\t\t}, this);\n\t\t\tutils.bind(function (e) {\n\t\t\t\treturn this.dragScroll(domElement, e);\n\t\t\t}, this);\n\n\t\t\tvar limited_mousemove = utils.bind(function (e) {\n\t\t\t\tif (this.config.started && utils.defined(this.config.updates_per_second)) {\n\t\t\t\t\tif (!timeout(this, this.config.updates_per_second))\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar dndActive = mousemove(e);\n\n\t\t\t\tif (dndActive) {\n\t\t\t\t\tif (e && e.preventDefault) //Cancel default action on DND\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te .cancelBubble = true;\n\t\t\t\t}\n\n\t\t\t\treturn dndActive;\n\t\t\t}, this);\n\n\t\t\tvar mouseup = utils.bind(function (e) {\n\t\t\t\tgantt.eventRemove(document.body, inputMethod.move, limited_mousemove);\n\t\t\t\tgantt.eventRemove(document.body, inputMethod.up, mouseup);\n\t\t\t\treturn this.dragEnd(domElement);\n\t\t\t}, this);\n\n\t\t\tgantt.event(document.body, inputMethod.move, limited_mousemove);\n\t\t\tgantt.event(document.body, inputMethod.up, mouseup);\n\t\t},\n\t\tcheckPositionChange: function (pos) {\n\t\t\tvar diff_x = pos.x - this.config.pos.x;\n\t\t\tvar diff_y = pos.y - this.config.pos.y;\n\t\t\tvar distance = Math.sqrt(Math.pow(Math.abs(diff_x), 2) + Math.pow(Math.abs(diff_y), 2));\n\n\t\t\tif (distance > this.config.sensitivity) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tinitDnDMarker: function () {\n\t\t\t// create dnd placeholder and put it in dom\n\t\t\tvar marker = this.config.marker = document.createElement(\"div\");\n\t\t\tmarker.className = \"gantt_drag_marker\";\n\t\t\tmarker.innerHTML = \"Dragging object\";\n\t\t\tdocument.body.appendChild(marker);\n\t\t},\n\t\tbackupEventTarget: function (domEvent, getEvent) {\n\t\t\tif (!gantt.config.touch) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// keep original event target in DOM in order to keep dnd on touchmove event\n\t\t\tvar e = getEvent(domEvent);\n\n\t\t\tvar el = e.target || e.srcElement;\n\t\t\tvar copy = el.cloneNode(true);\n\t\t\t//this.config.target.target = copy;\n\t\t\tthis.config.original_target = copyDomEvent(e);\n\t\t\tthis.config.original_target.target = copy;\n\t\t\tthis.config.backup_element = el;\n\t\t\tel.parentNode.appendChild(copy);\n\n\t\t\tel.style.display = \"none\";\n\t\t\tdocument.body.appendChild(el);\n\t\t},\n\t\tgetInputMethods: function () {\n\t\t\t// bind actions to browser events\n\t\t\tvar inputMethods = [];\n\n\t\t\tinputMethods.push({\n\t\t\t\t\"move\": \"mousemove\",\n\t\t\t\t\"down\": \"mousedown\",\n\t\t\t\t\"up\": \"mouseup\",\n\t\t\t\t\"accessor\": function (e) {\n\t\t\t\t\treturn e;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (gantt.config.touch) {\n\n\t\t\t\tvar touchEventsSupported = true;\n\t\t\t\ttry{\n\t\t\t\t\tdocument.createEvent(\"TouchEvent\");\n\t\t\t\t}catch (e){\n\t\t\t\t\ttouchEventsSupported = false;\n\t\t\t\t}\n\n\t\t\t\tif(touchEventsSupported){\n\t\t\t\t\tinputMethods.push({\n\t\t\t\t\t\t\"move\": \"touchmove\",\n\t\t\t\t\t\t\"down\": \"touchstart\",\n\t\t\t\t\t\t\"up\": \"touchend\",\n\t\t\t\t\t\t\"accessor\": function (ev) {\n\t\t\t\t\t\t\tif (ev.touches && ev.touches.length > 1) return null;\n\t\t\t\t\t\t\tif (ev.touches[0])\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttarget: document.elementFromPoint(ev.touches[0].clientX, ev.touches[0].clientY),\n\t\t\t\t\t\t\t\t\tpageX: ev.touches[0].pageX,\n\t\t\t\t\t\t\t\t\tpageY: ev.touches[0].pageY,\n\t\t\t\t\t\t\t\t\tclientX: ev.touches[0].clientX,\n\t\t\t\t\t\t\t\t\tclientY: ev.touches[0].clientY\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\treturn ev;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}else if(window.navigator.pointerEnabled){\n\t\t\t\t\tinputMethods.push({\n\t\t\t\t\t\t\"move\": \"pointermove\",\n\t\t\t\t\t\t\"down\": \"pointerdown\",\n\t\t\t\t\t\t\"up\": \"pointerup\",\n\t\t\t\t\t\t\"accessor\": function (ev) {\n\t\t\t\t\t\t\tif (ev.pointerType == \"mouse\") return null;\n\t\t\t\t\t\t\treturn ev;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t}else if (window.navigator.msPointerEnabled){\n\t\t\t\t\tinputMethods.push({\n\t\t\t\t\t\t\"move\": \"MSPointerMove\",\n\t\t\t\t\t\t\"down\": \"MSPointerDown\",\n\t\t\t\t\t\t\"up\": \"MSPointerUp\",\n\t\t\t\t\t\t\"accessor\": function (ev) {\n\t\t\t\t\t\t\tif (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\n\t\t\t\t\t\t\treturn ev;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn inputMethods;\n\t\t},\n\t\tclearDragTimer: function () {\n\t\t\tif (this._drag_start_timer) {\n\t\t\t\tclearTimeout(this._drag_start_timer);\n\t\t\t\tthis._drag_start_timer = null;\n\t\t\t}\n\t\t},\n\t\tdragStart: function (obj, e, inputMethod) {\n\t\t\tif (this.config && this.config.started) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.config = {\n\t\t\t\tobj: obj,\n\t\t\t\tmarker: null,\n\t\t\t\tstarted: false,\n\t\t\t\tpos: this.getPosition(e),\n\t\t\t\tsensitivity: 4\n\t\t\t};\n\t\t\tif (this._settings)\n\t\t\t\tutils.mixin(this.config, this._settings, true);\n\n\n\t\t\tthis.traceDragEvents(obj, inputMethod);\n\n\t\t\tgantt._prevent_touch_scroll = true;\n\t\t\tdocument.body.className += \" gantt_noselect\";\n\n\t\t\tif (gantt.config.touch) {\n\t\t\t\tthis.dragMove(obj, e, inputMethod.accessor);\n\t\t\t}\n\n\t\t},\n\t\tdragMove: function (obj, e, getEvent) {\n\t\t\tvar source = getEvent(e);\n\t\t\tif (!source) return false;\n\n\t\t\tif (!this.config.marker && !this.config.started) {\n\t\t\t\tvar pos = this.getPosition(source);\n\n\t\t\t\tif (gantt.config.touch || this.checkPositionChange(pos)) {\n\t\t\t\t\t// real drag starts here,\n\t\t\t\t\t// when user moves mouse at first time after onmousedown\n\t\t\t\t\tthis.config.started = true;\n\t\t\t\t\tthis.config.ignore = false;\n\t\t\t\t\tif (this.callEvent(\"onBeforeDragStart\", [obj, this.config.original_target]) === false) {\n\t\t\t\t\t\tthis.config.ignore = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tthis.backupEventTarget(e, getEvent);\n\t\t\t\t\tthis.initDnDMarker();\n\t\t\t\t\tgantt._touch_feedback();\n\t\t\t\t\tthis.callEvent(\"onAfterDragStart\", [obj, this.config.original_target]);\n\t\t\t\t} else {\n\t\t\t\t\tthis.config.ignore = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.config.ignore) {\n\t\t\t\tsource.pos = this.getPosition(source);\n\t\t\t\tthis.config.marker.style.left = source.pos.x + \"px\";\n\t\t\t\tthis.config.marker.style.top = source.pos.y + \"px\";\n\t\t\t\tthis.callEvent(\"onDragMove\", [obj, source]);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tdragEnd: function (obj) {\n\t\t\tvar target = this.config.backup_element;\n\t\t\tif (target && target.parentNode) {\n\t\t\t\ttarget.parentNode.removeChild(target);\n\t\t\t}\n\t\t\tgantt._prevent_touch_scroll = false;\n\t\t\tif (this.config.marker) {\n\t\t\t\tthis.config.marker.parentNode.removeChild(this.config.marker);\n\t\t\t\tthis.config.marker = null;\n\n\t\t\t\tthis.callEvent(\"onDragEnd\", []);\n\t\t\t}\n\t\t\tthis.config.started = false;\n\t\t\tdocument.body.className = document.body.className.replace(\" gantt_noselect\", \"\");\n\t\t},\n\n\t\tgetPosition: function (e) {\n\t\t\tvar x = 0, y = 0;\n\t\t\te = e || window.event;\n\t\t\tif (e.pageX || e.pageY) {\n\t\t\t\tx = e.pageX;\n\t\t\t\ty = e.pageY;\n\t\t\t} else if (e.clientX || e.clientY) {\n\t\t\t\tx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n\t\t\t\ty = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n\t\t\t}\n\t\t\treturn {x: x, y: y};\n\t\t}\n\t};\n\n\treturn DnD;\n};\n","/*\n %d - the day as a number with a leading zero ( 01 to 31 );\n %j - the day as a number without a leading zero ( 1 to 31 );\n %D - the day as an abbreviation ( Sun to Sat );\n %l - the day as a full name ( Sunday to Saturday );\n %W - the ISO-8601 week number of the year. Weeks start on Monday; 1)\n %m - the month as a number without a leading zero ( 1 to 12 );\n %n - the month as a number with a leading zero ( 01 to 12);\n %M - the month as an abbreviation ( Jan to Dec );\n %F - the month as a full name ( January to December );\n %y - the year as a two-digit number ( 00 to 99 );\n %Y - the year as a four-digit number ( 1900–9999 );\n %h - the hour based on the 12-hour clock ( 00 to 11 );\n %H - the hour based on the 24-hour clock ( 00 to 23 );\n %i - the minute as a number with a leading zero ( 00 to 59 );\n %s - the second as a number without a leading zero ( 00 to 59 ); 2)\n %a - displays am (for times from midnight until noon) and pm (for times from noon until midnight);\n %A - displays AM (for times from midnight until noon) and PM (for times from noon until midnight).\n*/\n\nmodule.exports = function(gantt) {\n\tvar dateHelper = {\n\t\tinit: function () {\n\t\t\tvar locale = gantt.locale;\n\n\t\t\tvar s = locale.date.month_short;\n\t\t\tvar t = locale.date.month_short_hash = {};\n\t\t\tfor (var i = 0; i < s.length; i++)\n\t\t\t\tt[s[i]] = i;\n\n\t\t\tvar s = locale.date.month_full;\n\t\t\tvar t = locale.date.month_full_hash = {};\n\t\t\tfor (var i = 0; i < s.length; i++)\n\t\t\t\tt[s[i]] = i;\n\t\t},\n\t\tdate_part: function (date) {\n\t\t\tvar old = new Date(date);\n\t\t\tdate.setHours(0);\n\t\t\tthis.hour_start(date);\n\t\t\tif (date.getHours() && //shift to yesterday on dst\n\t\t\t\t(date.getDate() < old.getDate() || date.getMonth() < old.getMonth() || date.getFullYear() < old.getFullYear()))\n\t\t\t\tdate.setTime(date.getTime() + 60 * 60 * 1000 * (24 - date.getHours()));\n\t\t\treturn date;\n\t\t},\n\t\ttime_part: function (date) {\n\t\t\treturn (date.valueOf() / 1000 - date.getTimezoneOffset() * 60) % 86400;\n\t\t},\n\t\tweek_start: function (date) {\n\t\t\tvar shift = date.getDay();\n\t\t\tif (gantt.config.start_on_monday) {\n\t\t\t\tif (shift === 0) shift = 6;\n\t\t\t\telse shift--;\n\t\t\t}\n\t\t\treturn this.date_part(this.add(date, -1 * shift, \"day\"));\n\t\t},\n\t\tmonth_start: function (date) {\n\t\t\tdate.setDate(1);\n\t\t\treturn this.date_part(date);\n\t\t},\n\t\tquarter_start: function (date) {\n\t\t\tthis.month_start(date);\n\t\t\tvar m = date.getMonth(),\n\t\t\t\tres_month;\n\n\t\t\tif (m >= 9) {\n\t\t\t\tres_month = 9;\n\t\t\t} else if (m >= 6) {\n\t\t\t\tres_month = 6;\n\t\t\t} else if (m >= 3) {\n\t\t\t\tres_month = 3;\n\t\t\t} else {\n\t\t\t\tres_month = 0;\n\t\t\t}\n\n\t\t\tdate.setMonth(res_month);\n\t\t\treturn date;\n\t\t},\n\t\tyear_start: function (date) {\n\t\t\tdate.setMonth(0);\n\t\t\treturn this.month_start(date);\n\t\t},\n\t\tday_start: function (date) {\n\t\t\treturn this.date_part(date);\n\t\t},\n\t\thour_start: function (date) {\n\t\t\tif (date.getMinutes())\n\t\t\t\tdate.setMinutes(0);\n\t\t\tthis.minute_start(date);\n\n\t\t\treturn date;\n\t\t},\n\t\tminute_start: function (date) {\n\t\t\tif (date.getSeconds())\n\t\t\t\tdate.setSeconds(0);\n\t\t\tif (date.getMilliseconds())\n\t\t\t\tdate.setMilliseconds(0);\n\t\t\treturn date;\n\t\t},\n\t\t_add_days: function (date, inc) {\n\t\t\tvar ndate = new Date(date.valueOf());\n\n\t\t\tndate.setDate(ndate.getDate() + inc);\n\t\t\tif (inc >= 0 && (!date.getHours() && ndate.getHours()) &&//shift to yesterday on dst\n\t\t\t\t(ndate.getDate() <= date.getDate() || ndate.getMonth() < date.getMonth() || ndate.getFullYear() < date.getFullYear()))\n\t\t\t\tndate.setTime(ndate.getTime() + 60 * 60 * 1000 * (24 - ndate.getHours()));\n\t\t\treturn ndate;\n\t\t},\n\n\t\tadd: function (date, inc, mode) {\n\t\t\t/*jsl:ignore*/\n\t\t\tvar ndate = new Date(date.valueOf());\n\t\t\tswitch (mode) {\n\t\t\t\tcase \"day\":\n\t\t\t\t\tndate = this._add_days(ndate, inc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"week\":\n\t\t\t\t\tndate = this._add_days(ndate, inc * 7);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"month\":\n\t\t\t\t\tndate.setMonth(ndate.getMonth() + inc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"year\":\n\t\t\t\t\tndate.setYear(ndate.getFullYear() + inc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hour\":\n\t\t\t\t\t/*\n\t\t\t\t\t\tadding hours/minutes via setHour(getHour() + inc) gives weird result when\n\t\t\t\t\t\tadding one hour to the time before switch to a Daylight Saving time\n\n\t\t\t\t\t\texample: //Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\n\t\t\t\t\t\tnew Date(2014, 02, 30, 1).setHours(2)\n\t\t\t\t\t\t>>Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\n\n\t\t\t\t\t\tsetTime seems working as expected\n\t\t\t\t\t */\n\t\t\t\t\tndate.setTime(ndate.getTime() + inc * 60 * 60 * 1000);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"minute\":\n\n\t\t\t\t\tndate.setTime(ndate.getTime() + inc * 60 * 1000);\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this[\"add_\" + mode](date, inc, mode);\n\t\t\t}\n\t\t\treturn ndate;\n\t\t\t/*jsl:end*/\n\t\t},\n\t\tadd_quarter: function (date, inc) {\n\t\t\treturn this.add(date, inc * 3, \"month\");\n\t\t},\n\n\t\tto_fixed: function (num) {\n\t\t\tif (num < 10) return \"0\" + num;\n\t\t\treturn num;\n\t\t},\n\t\tcopy: function (date) {\n\t\t\treturn new Date(date.valueOf());\n\t\t},\n\t\tdate_to_str: function (format, utc) {\n\t\t\tformat = format.replace(/%[a-zA-Z]/g, function (a) {\n\t\t\t\tswitch (a) {\n\t\t\t\t\tcase \"%d\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed(date.getDate())+\\\"\";\n\t\t\t\t\tcase \"%m\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed((date.getMonth()+1))+\\\"\";\n\t\t\t\t\tcase \"%j\":\n\t\t\t\t\t\treturn \"\\\"+date.getDate()+\\\"\";\n\t\t\t\t\tcase \"%n\":\n\t\t\t\t\t\treturn \"\\\"+(date.getMonth()+1)+\\\"\";\n\t\t\t\t\tcase \"%y\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed(date.getFullYear()%100)+\\\"\";\n\t\t\t\t\tcase \"%Y\":\n\t\t\t\t\t\treturn \"\\\"+date.getFullYear()+\\\"\";\n\t\t\t\t\tcase \"%D\":\n\t\t\t\t\t\treturn \"\\\"+locale.date.day_short[date.getDay()]+\\\"\";\n\t\t\t\t\tcase \"%l\":\n\t\t\t\t\t\treturn \"\\\"+locale.date.day_full[date.getDay()]+\\\"\";\n\t\t\t\t\tcase \"%M\":\n\t\t\t\t\t\treturn \"\\\"+locale.date.month_short[date.getMonth()]+\\\"\";\n\t\t\t\t\tcase \"%F\":\n\t\t\t\t\t\treturn \"\\\"+locale.date.month_full[date.getMonth()]+\\\"\";\n\t\t\t\t\tcase \"%h\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed((date.getHours()+11)%12+1)+\\\"\";\n\t\t\t\t\tcase \"%g\":\n\t\t\t\t\t\treturn \"\\\"+((date.getHours()+11)%12+1)+\\\"\";\n\t\t\t\t\tcase \"%G\":\n\t\t\t\t\t\treturn \"\\\"+date.getHours()+\\\"\";\n\t\t\t\t\tcase \"%H\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed(date.getHours())+\\\"\";\n\t\t\t\t\tcase \"%i\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed(date.getMinutes())+\\\"\";\n\t\t\t\t\tcase \"%a\":\n\t\t\t\t\t\treturn \"\\\"+(date.getHours()>11?\\\"pm\\\":\\\"am\\\")+\\\"\";\n\t\t\t\t\tcase \"%A\":\n\t\t\t\t\t\treturn \"\\\"+(date.getHours()>11?\\\"PM\\\":\\\"AM\\\")+\\\"\";\n\t\t\t\t\tcase \"%s\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed(date.getSeconds())+\\\"\";\n\t\t\t\t\tcase \"%W\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed(getISOWeek(date))+\\\"\";\n\t\t\t\t\tcase \"%w\":\n\t\t\t\t\t\treturn \"\\\"+to_fixed(getWeek(date))+\\\"\";\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (utc) format = format.replace(/date\\.get/g, \"date.getUTC\");\n\t\t\tvar dateToStr = new Function(\"date\", \"to_fixed\", \"locale\", \"getISOWeek\", \"getWeek\", \"return \\\"\" + format + \"\\\";\");\n\n\t\t\treturn function (date) {\n\t\t\t\treturn dateToStr(date, dateHelper.to_fixed, gantt.locale, dateHelper.getISOWeek, dateHelper.getWeek);\n\t\t\t};\n\t\t},\n\t\tstr_to_date: function (format, utc) {\n\t\t\tvar splt = \"var temp=date.match(/[a-zA-Z]+|[0-9]+/g);\";\n\t\t\tvar mask = format.match(/%[a-zA-Z]/g);\n\t\t\tfor (var i = 0; i < mask.length; i++) {\n\t\t\t\tswitch (mask[i]) {\n\t\t\t\t\tcase \"%j\":\n\t\t\t\t\tcase \"%d\":\n\t\t\t\t\t\tsplt += \"set[2]=temp[\" + i + \"]||1;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%n\":\n\t\t\t\t\tcase \"%m\":\n\t\t\t\t\t\tsplt += \"set[1]=(temp[\" + i + \"]||1)-1;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%y\":\n\t\t\t\t\t\tsplt += \"set[0]=temp[\" + i + \"]*1+(temp[\" + i + \"]>50?1900:2000);\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%g\":\n\t\t\t\t\tcase \"%G\":\n\t\t\t\t\tcase \"%h\":\n\t\t\t\t\tcase \"%H\":\n\t\t\t\t\t\tsplt += \"set[3]=temp[\" + i + \"]||0;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%i\":\n\t\t\t\t\t\tsplt += \"set[4]=temp[\" + i + \"]||0;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%Y\":\n\t\t\t\t\t\tsplt += \"set[0]=temp[\" + i + \"]||0;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%a\":\n\t\t\t\t\tcase \"%A\":\n\t\t\t\t\t\tsplt += \"set[3]=set[3]%12+((temp[\" + i + \"]||'').toLowerCase()=='am'?0:12);\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%s\":\n\t\t\t\t\t\tsplt += \"set[5]=temp[\" + i + \"]||0;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%M\":\n\t\t\t\t\t\tsplt += \"set[1]=locale.date.month_short_hash[temp[\" + i + \"]]||0;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%F\":\n\t\t\t\t\t\tsplt += \"set[1]=locale.date.month_full_hash[temp[\" + i + \"]]||0;\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar code = \"set[0],set[1],set[2],set[3],set[4],set[5]\";\n\t\t\tif (utc) code = \" Date.UTC(\" + code + \")\";\n\t\t\tvar strToDate = new Function(\"date\", \"locale\", \"var set=[0,0,1,0,0,0]; \" + splt + \" return new Date(\" + code + \");\");\n\n\t\t\treturn function (dateString) {\n\t\t\t\treturn strToDate(dateString, gantt.locale);\n\t\t\t};\n\t\t},\n\t\tgetISOWeek: function (ndate) {\n\t\t\treturn gantt.date._getWeekNumber(ndate, true);\n\t\t},\n\t\t_getWeekNumber: function(ndate, isoWeek){\n\t\t\tif (!ndate) return false;\n\t\t\tvar nday = ndate.getDay();\n\t\t\tif(isoWeek){\n\t\t\t\tif (nday === 0) {\n\t\t\t\t\tnday = 7;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar first_thursday = new Date(ndate.valueOf());\n\t\t\tfirst_thursday.setDate(ndate.getDate() + (4 - nday));\n\t\t\tvar year_number = first_thursday.getFullYear(); // year of the first Thursday\n\t\t\tvar ordinal_date = Math.round((first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date)\n\t\t\tvar week_number = 1 + Math.floor(ordinal_date / 7);\n\t\t\treturn week_number;\n\t\t},\n\n\t\tgetWeek: function(ndate){\n\t\t\treturn gantt.date._getWeekNumber(ndate, gantt.config.start_on_monday);\n\t\t},\n\t\tgetUTCISOWeek: function (ndate) {\n\t\t\treturn gantt.date.getISOWeek(ndate);\n\t\t},\n\t\tconvert_to_utc: function (date) {\n\t\t\treturn new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\n\t\t},\n\t\tparseDate: function (date, format) {\n\t\t\t// raw date may be of type string, number (timestamp) or something else\n\t\t\t// do not check for instanceof Date explicitly, since we may swap native date with different date implementation at some point\n\t\t\tif (date && !date.getFullYear) {\n\t\t\t\tif (typeof(format) !== \"function\") {\n\t\t\t\t\tif (typeof(format) === \"string\") {\n\t\t\t\t\t\tif (format === \"parse_date\") {\n\t\t\t\t\t\t\tformat = gantt.templates.parse_date;\n\t\t\t\t\t\t\tif (gantt.defined(gantt.templates.xml_date) && gantt.templates.parse_date !== gantt.templates.xml_date) {\n\t\t\t\t\t\t\t\tformat = gantt.templates.xml_date;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = gantt.defined(gantt.templates[format]) ? gantt.templates[format] : gantt.date.str_to_date(format);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tformat = gantt.templates.xml_date !== gantt.templates.parse_date ? gantt.templates.xml_date : gantt.templates.parse_date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (date) {\n\t\t\t\t\tdate = format(date);\n\t\t\t\t} else {\n\t\t\t\t\tdate = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t}\n\t};\n\treturn dateHelper;\n};","export default function serialize(data: object | string) {\n\tif (typeof data === \"string\" || typeof data === \"number\") {\n\t\treturn data;\n\t}\n\n\tlet result = \"\";\n\n\tfor (const key in data) {\n\t\tlet serialized = \"\";\n\t\tif (data.hasOwnProperty(key)) {\n\t\t\tif (typeof data[key] === \"string\") {\n\t\t\t\tserialized = encodeURIComponent(data[key]);\n\t\t\t} else if (typeof data[key] === \"number\") {\n\t\t\t\tserialized = data[key];\n\t\t\t} else {\n\t\t\t\tserialized = encodeURIComponent(JSON.stringify(data[key]));\n\t\t\t}\n\t\t\tserialized = key + \"=\" + serialized;\n\n\t\t\tif (result.length) {\n\t\t\t\tserialized = \"&\" + serialized;\n\t\t\t}\n\t\t\tresult += serialized;\n\t\t}\n\t}\n\treturn result;\n}\n","var env = require(\"../../utils/env\");\nvar serialize = require(\"./serialize\").default;\n\nfunction createConfig(method, args) {\n\tvar result = {\n\t\tmethod: method\n\t};\n\n\tif (args.length === 0) {\n\t\tthrow new Error(\"Arguments list of query is wrong.\");\n\t}\n\tif (args.length === 1) {\n\t\tif (typeof args[0] === \"string\") {\n\t\t\tresult.url = args[0];\n\t\t\tresult.async = true;\n\t\t} else {\n\t\t\tresult.url = args[0].url;\n\t\t\tresult.async = (args[0].async || true);\n\t\t\tresult.callback = args[0].callback;\n\t\t\tresult.headers = args[0].headers;\n\t\t}\n\t\tif (method === \"POST\" || \"PUT\") {\n\t\t\tif (args[0].data) {\n\t\t\t\tif (typeof args[0].data !== \"string\") {\n\t\t\t\t\tresult.data = serialize(args[0].data);\n\t\t\t\t} else {\n\t\t\t\t\tresult.data = args[0].data;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult.data = \"\";\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tresult.url = args[0];\n\tswitch(method) {\n\t\tcase \"GET\":\n\t\tcase \"DELETE\":\n\t\t\tresult.callback = args[1];\n\t\t\tresult.headers = args[2];\n\t\tbreak;\n\t\tcase \"POST\":\n\t\tcase \"PUT\":\n\t\t\tif (args[1]) {\n\t\t\t\tif (typeof args[1] !== \"string\") {\n\t\t\t\t\tresult.data = serialize(args[1]);\n\t\t\t\t} else {\n\t\t\t\t\tresult.data = args[1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult.data = \"\";\n\t\t\t}\n\t\t\tresult.callback = args[2];\n\t\t\tresult.headers = args[3];\n\t\tbreak;\n\t}\n\treturn result;\n}\n\nmodule.exports = function(gantt) {\n\treturn {\n\n\t\t// if false - dhxr param will added to prevent caching on client side (default),\n\t\t// if true - do not add extra params\n\t\tcache: true,\n\n\t\t// default method for load/loadStruct, post/get allowed\n\t\t// get - since 4.1.1, this should fix 412 error for macos safari\n\t\tmethod: \"get\",\n\n\t\tparse: function(data) {\n\t\t\tif (typeof data !== \"string\") return data;\n\n\t\t\tvar obj;\n\t\t\tdata = data.replace(/^[\\s]+/,\"\");\n\t\t\tif (window.DOMParser && !env.isIE) { // ff,ie9\n\t\t\t\tobj = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t\t} else if (window.ActiveXObject !== window.undefined) {\n\t\t\t\tobj = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n\t\t\t\tobj.async = \"false\";\n\t\t\t\tobj.loadXML(data);\n\t\t\t}\n\t\t\treturn obj;\n\t\t},\n\t\txmltop: function(tagname, xhr, obj) {\n\t\t\tif (typeof xhr.status == \"undefined\" || xhr.status < 400) {\n\t\t\t\tvar xml = (!xhr.responseXML) ? this.parse(xhr.responseText || xhr) : (xhr.responseXML || xhr);\n\t\t\t\tif (xml && xml.documentElement !== null && !xml.getElementsByTagName(\"parsererror\").length) {\n\t\t\t\t\treturn xml.getElementsByTagName(tagname)[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj !== -1) gantt.callEvent(\"onLoadXMLError\",[\"Incorrect XML\", arguments[1], obj]);\n\t\t\treturn document.createElement(\"DIV\");\n\t\t},\n\t\txpath: function(xpathExp, docObj) {\n\t\t\tif (!docObj.nodeName) docObj = docObj.responseXML || docObj;\n\t\t\tif (env.isIE) {\n\t\t\t\treturn docObj.selectNodes(xpathExp)||[];\n\t\t\t} else {\n\t\t\t\tvar rows = [];\n\t\t\t\tvar first;\n\t\t\t\tvar col = (docObj.ownerDocument||docObj).evaluate(xpathExp, docObj, null, XPathResult.ANY_TYPE, null);\n\n\t\t\t\twhile (true){\n\t\t\t\t\tfirst = col.iterateNext();\n\t\t\t\t\tif(first){\n\t\t\t\t\t\trows.push(first);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn rows;\n\t\t\t}\n\t\t},\n\t\tquery: function(config) {\n\t\t\treturn this._call(\n\t\t\t\t(config.method || \"GET\"),\n\t\t\t\tconfig.url,\n\t\t\t\tconfig.data || \"\",\n\t\t\t\t(config.async || true),\n\t\t\t\tconfig.callback,\n\t\t\t\tconfig.headers\n\t\t\t);\n\t\t},\n\t\tget: function(url, onLoad, headers) {\n\t\t\tvar config = createConfig(\"GET\", arguments);\n\t\t\treturn this.query(config);\n\t\t},\n\t\tgetSync: function(url, headers) {\n\t\t\tvar config = createConfig(\"GET\", arguments);\n\t\t\tconfig.async = false;\n\t\t\treturn this.query(config);\n\t\t},\n\t\tput: function(url, postData, onLoad, headers) {\n\t\t\tvar config = createConfig(\"PUT\", arguments);\n\t\t\treturn this.query(config);\n\t\t},\n\t\tdel: function(url, onLoad, headers) {\n\t\t\t/**\n\t\t\t * https://tools.ietf.org/html/rfc7231#section-4.3.5\n\t\t\t * A payload within a DELETE request message has no defined semantics;\n\t\t\t * sending a payload body on a DELETE request might cause some existing\n\t\t\t * implementations to reject the request.\n\t\t\t */\n\t\t\tvar config = createConfig(\"DELETE\", arguments);\n\t\t\treturn this.query(config);\n\t\t},\n\t\tpost: function(url, postData, onLoad, headers) {\n\t\t\tif (arguments.length == 1) {\n\t\t\t\tpostData = \"\";\n\t\t\t} else if (arguments.length == 2 && (typeof(postData) == \"function\" || typeof(window[postData]) == \"function\")) {\n\t\t\t\tonLoad = postData;\n\t\t\t\tpostData = \"\";\n\t\t\t}\n\t\t\tvar config = createConfig(\"POST\", arguments);\n\t\t\treturn this.query(config);\n\t\t},\n\t\tpostSync: function(url, postData, headers) {\n\t\t\tpostData = (postData === null ? \"\" : String(postData));\n\n\t\t\tvar config = createConfig(\"POST\", arguments);\n\t\t\tconfig.async = false;\n\t\t\treturn this.query(config);\n\t\t},\n\t\t_call: function(method, url, postData, async, onLoad, headers) {\n\t\t\treturn new gantt.Promise(function(resolve, reject) {\n\t\t\t\tvar t = (window.XMLHttpRequest && !env.isIE ? new XMLHttpRequest() : new window.ActiveXObject(\"Microsoft.XMLHTTP\"));\n\t\t\t\tvar isQt = (navigator.userAgent.match(/AppleWebKit/) !== null && navigator.userAgent.match(/Qt/) !== null && navigator.userAgent.match(/Safari/) !== null);\n\n\t\t\t\tif (!!async) {\n\t\t\t\t\tt.onreadystatechange = function() {\n\t\t\t\t\t\tif ((t.readyState == 4) || (isQt && t.readyState == 3)) { // what for long response and status 404?\n\t\t\t\t\t\t\tif (t.status != 200 || t.responseText === \"\")\n\t\t\t\t\t\t\t\tif (!gantt.callEvent(\"onAjaxError\", [t])) return;\n\n\t\t\t\t\t\t\twindow.setTimeout(function() {\n\t\t\t\t\t\t\t\tif (typeof(onLoad) == \"function\") {\n\t\t\t\t\t\t\t\t\tonLoad.apply(window, [{xmlDoc:t, filePath:url}]); // dhtmlx-compat, response.xmlDoc.responseXML/responseText\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresolve(t);\n\t\t\t\t\t\t\t\tif (typeof(onLoad) == \"function\") {\n\t\t\t\t\t\t\t\t\tonLoad = null;\n\t\t\t\t\t\t\t\t\tt = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (method == \"GET\" && !this.cache) {\n\t\t\t\t\turl += (url.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime()+\"=1\";\n\t\t\t\t}\n\n\t\t\t\tt.open(method, url, async);\n\n\t\t\t\tif (headers){\n\t\t\t\t\tfor (var key in headers)\n\t\t\t\t\t\tt.setRequestHeader(key, headers[key]);\n\t\t\t\t} else if (method.toUpperCase() == \"POST\" || method == \"PUT\" || method == \"DELETE\") {\n\t\t\t\t\tt.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\t\t\t\t} else if (method == \"GET\") {\n\t\t\t\t\tpostData = null;\n\t\t\t\t}\n\n\t\t\t\tt.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n\n\t\t\t\tt.send(postData);\n\n\t\t\t\tif (!async) return {xmlDoc:t, filePath:url}; // dhtmlx-compat, response.xmlDoc.responseXML/responseText\n\t\t\t});\n\t\t},\n\t\turlSeparator: function(str){\n\t\t\tif (str.indexOf(\"?\") != -1)\n\t\t\t\treturn \"&\";\n\t\t\telse\n\t\t\t\treturn \"?\";\n\t\t}\n\t};\n};\n","type DurationUnits = \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\";\ntype Align = \"left\" | \"center\" | \"right\";\ntype SectionType = \"textarea\"\n\t\t\t\t\t| \"time\"\n\t\t\t\t\t| \"duration\"\n\t\t\t\t\t| \"select\"\n\t\t\t\t\t| \"typeselect\"\n\t\t\t\t\t| \"parent\"\n\t\t\t\t\t| \"template\"\n\t\t\t\t\t| \"checkbox\"\n\t\t\t\t\t| \"radio\"\n\t\t\t\t\t| \"resources\"\n\t\t\t\t\t| \"constraint\";\n\ntype LightboxSection = Array<ILightboxSection\n\t| ILightboxTimeAndDurationSection\n\t| ILightboxInputControl\n\t| ILightboxSelectControl\n\t| ILightboxParentControl\n\t| ILightboxTypeselectControl>;\n\ntype LayoutView = \"grid\"\n\t| \"timeline\"\n\t| \"resizer\"\n\t| \"scrollbar\"\n\t| \"resourceGrid\"\n\t| \"resourceTimeline\";\n\ninterface IColumnItem {\n\tname: string;\n\tlabel?: string;\n\ttree?: boolean;\n\talign?: Align;\n\thide?: boolean;\n\tmax_width?: number;\n\tmin_width?: number;\n\tresize?: boolean;\n\ttemplate?: (obj: any) => string;\n\twidth?: number | \"*\";\n}\n\nexport type TModifierKeys = \"metaKey\" | \"ctrlKey\" | \"altKey\" | \"shiftKey\" | false | undefined;\n\nexport interface IScale {\n\tcss?: () => string;\n\tdate?: string;\n\tstep: number;\n\ttemplate?: (date: Date) => string;\n\tunit: DurationUnits;\n}\n\ninterface ILightboxSection {\n\tname: string;\n\tmap_to: string;\n\ttype: SectionType;\n\theight?: number;\n\tfocus?: boolean;\n}\n\ninterface ILightboxTimeAndDurationSection extends ILightboxSection {\n\treadonly: boolean;\n\tyear_range: number[] | number;\n\tsingle_date: boolean;\n\ttime_format: string;\n}\n\ninterface ILightboxInputControl extends ILightboxSection {\n\tdefault_value?: any;\n\toptions?: Array<{key: string, label: string}>;\n}\n\ninterface ILightboxSelectControl extends ILightboxInputControl {\n\tonchange: () => boolean | undefined;\n}\n\ninterface ILightboxParentControl extends ILightboxSection {\n\tallow_root: boolean;\n\troot_label: string;\n\tsort?: (a: any, b: any) => -1 | 0 | 1;\n\tfilter?: (task: string | number | object) => boolean;\n\ttemplate?: (start: Date, end: Date, ev: object) => string;\n}\n\ninterface ILightboxTypeselectControl extends ILightboxSection {\n\tfilter?: (typeName: string) => boolean;\n}\n\n\ninterface ILayoutScrollbar {\n\tview: \"scrollbar\";\n\tscroll?: \"x\" | \"y\";\n\tid: string;\n\theight?: number;\n\twidth?: number;\n}\n\ninterface ILayoutView {\n\tview: LayoutView;\n\tid?: string;\n\tscrollX?: string;\n\tscrollY?: string;\n\tconfig?: object;\n}\n\ninterface ILayoutGrid extends ILayoutView {\n\tview: \"grid\";\n\tbind?: string;\n}\n\ninterface ILayoutTimeline extends ILayoutView {\n\tview: \"timeline\";\n\tbindLinks?: string;\n\tlayers?: any[];\n}\n\ninterface ILayoutResizer {\n\tview?: undefined;\n\tresizer: boolean;\n\twidth: number;\n}\n\ninterface ILayoutResourceGrid extends ILayoutView {\n\tview: \"resourceGrid\";\n\twidth: number;\n\tgroup: \"string\";\n}\n\ninterface ILayoutResourceTimeline extends ILayoutView {\n\tview: \"resourceTimeline\";\n\twidth: number;\n\tgroup: \"string\";\n}\n\ninterface ILayoutHtml {\n\thtml: string;\n\tcss: string;\n\twidth: number;\n}\n\ntype LayoutRow = ILayoutGrid\n\t| ILayoutTimeline\n\t| ILayoutResizer\n\t| ILayoutResourceGrid\n\t| ILayoutResourceTimeline\n\t| ILayoutHtml\n\t| ILayoutScrollbar\n\t| { cols: LayoutCol[] };\n\ntype LayoutCol = ILayoutGrid\n\t| ILayoutTimeline\n\t| ILayoutResizer\n\t| ILayoutResourceGrid\n\t| ILayoutResourceTimeline\n\t| ILayoutHtml\n\t| ILayoutScrollbar\n\t| { rows: LayoutRow[] };\n\ninterface ILayout {\n\tcss: string;\n\trows?: LayoutRow[];\n\tcols?: LayoutCol[];\n}\n\ninterface IGanttConfig {\n\tlayout: ILayout;\n\tlinks: {\n\t\tfinish_to_start: \"0\";\n\t\tstart_to_start: \"1\";\n\t\tfinish_to_finish: \"2\";\n\t\tstart_to_finish: \"3\";\n\t};\n\ttypes: {\n\t\ttask: string;\n\t\tproject: string;\n\t\tmilestone: string;\n\t};\n\tauto_types: boolean;\n\tduration_unit: DurationUnits;\n\twork_time: boolean;\n\tcorrect_work_time: boolean;\n\tskip_off_time: boolean;\n\tcascade_delete: boolean;\n\tautosize: boolean | string;\n\tautoscroll: boolean;\n\tshow_links: boolean;\n\tshow_task_cells: boolean;\n\tautosize_min_width: number;\n\tautoscroll_speed: number;\n\n\tstatic_background: boolean;\n\tstatic_background_cells: boolean;\n\tbranch_loading: boolean;\n\tbranch_loading_property: string;\n\tshow_loading: boolean;\n\tshow_chart: boolean;\n\tshow_grid: boolean;\n\tmin_duration: number;\n\tdate_format: string; // use instead xml_date\n\txml_date?: string; // deprecated\n\tstart_on_monday: boolean;\n\tserver_utc: boolean;\n\tshow_progress: boolean;\n\tfit_tasks: boolean;\n\tselect_task: boolean;\n\tscroll_on_click: boolean;\n\tsmart_rendering: boolean;\n\tpreserve_scroll: boolean;\n\treadonly: boolean;\n\n\t/*grid */\n\tdate_grid: string;\n\n\tdrag_links: boolean;\n\tdrag_progress: boolean;\n\tdrag_resize: boolean;\n\tdrag_project: boolean;\n\tdrag_move: boolean;\n\tdrag_mode: {\n\t\tresize: \"resize\",\n\t\tprogress: \"progress\",\n\t\tmove: \"move\",\n\t\tignore: \"ignore\"\n\t};\n\tround_dnd_dates: boolean;\n\tlink_wrapper_width: number;\n\troot_id: string | number;\n\n\tautofit: boolean;\n\tcolumns: IColumnItem[];\n\n\t/* scale*/\n\t/* it will be deprecated */\n\tdate_scale?: string;\n\tstep?: number;\n\tscale_unit?: DurationUnits;\n\tsubscales?: IScale[];\n\t/* it will be deprecated end */\n\n\tscales: IScale[];\n\n\tscale_offset_minimal: boolean;\n\n\tinherit_scale_class: boolean;\n\n\n\ttime_step: number;\n\tduration_step: number;\n\n\n\ttask_date: string;\n\ttime_picker: string;\n\ttask_attribute: string;\n\tlink_attribute: string;\n\tlayer_attribute: string;\n\tbuttons_left: string[];\n\t_migrate_buttons: {\n\t\tdhx_save_btn: \"gantt_save_btn\",\n\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\n\t\tdhx_delete_btn: \"gantt_delete_btn\"\n\t};\n\n\tbuttons_right: string[];\n\n\n\tlightbox: {\n\t\tsections?: LightboxSection,\n\t\tproject_sections?: LightboxSection,\n\t\tmilestone_sections?: LightboxSection\n\t};\n\tdrag_lightbox: boolean;\n\tsort: boolean;\n\tdetails_on_create: boolean;\n\tdetails_on_dblclick: boolean;\n\tinitial_scroll: boolean;\n\ttask_scroll_offset: number;\n\n\torder_branch: boolean;\n\torder_branch_free: boolean;\n\n\ttask_height: number | \"full\";\n\tmin_column_width: number;\n\n\t// min width for grid column (when resizing)\n\tmin_grid_column_width: number;\n\t// name of the attribute with column index for resize element\n\tgrid_resizer_column_attribute: string;\n\t// name of the attribute with column index for resize element\n\tgrid_resizer_attribute: string;\n\n\t// grid width can be increased after the column has been resized\n\tkeep_grid_width: boolean;\n\n\t// grid width can be adjusted\n\tgrid_resize: boolean;\n\n\tshow_tasks_outside_timescale: boolean;\n\tshow_unscheduled: boolean;\n\treadonly_property: string;\n\teditable_property: string;\n\tcalendar_property: string;\n\tresource_calendars: object;\n\tinherit_calendar: boolean;\n\ttype_renderers: object;\n\n\topen_tree_initially: boolean;\n\toptimize_render: boolean;\n\tprevent_default_scroll: boolean;\n\tshow_errors: boolean;\n\twai_aria_attributes: boolean;\n\tsmart_scales: boolean;\n\trtl: boolean;\n\tplaceholder_task: boolean;\n\thorizontal_scroll_key: TModifierKeys;\n\tdrag_timeline: {\n\t\tuseKey: TModifierKeys;\n\t\tignore: string;\n\t};\n\tdrag_multiple: boolean;\n}\n\nmodule.exports = () => {\n\tconst result: IGanttConfig = {\n\t\tlayout: {\n\t\t\tcss: \"gantt_container\",\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\tcols: [\n\t\t\t\t\t\t{view: \"grid\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\n\t\t\t\t\t\t{resizer: true, width: 1},\n\t\t\t\t\t\t{view: \"timeline\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\n\t\t\t\t\t\t{view: \"scrollbar\", id: \"scrollVer\"}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{view: \"scrollbar\", id: \"scrollHor\", height: 20}\n\t\t\t]\n\t\t},\n\t\tlinks: {\n\t\t\tfinish_to_start: \"0\",\n\t\t\tstart_to_start: \"1\",\n\t\t\tfinish_to_finish: \"2\",\n\t\t\tstart_to_finish: \"3\"\n\t\t},\n\t\ttypes: {\n\t\t\ttask: \"task\",\n\t\t\tproject: \"project\",\n\t\t\tmilestone: \"milestone\"\n\t\t},\n\t\tauto_types: false,\n\t\tduration_unit: \"day\",\n\t\twork_time: false,\n\t\tcorrect_work_time: false,\n\t\tskip_off_time: false,\n\n\t\tcascade_delete: true,\n\n\t\tautosize: false,\n\t\tautosize_min_width: 0,\n\t\tautoscroll: true,\n\t\tautoscroll_speed: 30,\n\n\t\tshow_links: true,\n\t\tshow_task_cells: true,\n\t\t// replace backgroung of the task area with a canvas img\n\t\tstatic_background: false,\n\t\tstatic_background_cells: true,\n\t\tbranch_loading: false,\n\t\tbranch_loading_property: \"$has_child\",\n\t\tshow_loading: false,\n\t\tshow_chart: true,\n\t\tshow_grid: true,\n\t\tmin_duration: 60 * 60 * 1000,\n\t\tdate_format: \"%d-%m-%Y %H:%i\", // use instead xml_date\n\t\txml_date: undefined, // \"%d-%m-%Y %H:%i\", // deprecated\n\t\tstart_on_monday: true,\n\t\tserver_utc: false,\n\t\tshow_progress: true,\n\t\tfit_tasks: false,\n\t\tselect_task: true,\n\t\tscroll_on_click: true,\n\t\tsmart_rendering: true,\n\t\tpreserve_scroll: true,\n\t\treadonly: false,\n\n\t\t/*grid */\n\t\tdate_grid: \"%Y-%m-%d\",\n\n\t\tdrag_links: true,\n\t\tdrag_progress: true,\n\t\tdrag_resize: true,\n\t\tdrag_project: false,\n\t\tdrag_move: true,\n\t\tdrag_mode: {\n\t\t\tresize: \"resize\",\n\t\t\tprogress: \"progress\",\n\t\t\tmove: \"move\",\n\t\t\tignore: \"ignore\"\n\t\t},\n\t\tround_dnd_dates: true,\n\t\tlink_wrapper_width: 20,\n\t\troot_id: 0,\n\n\t\tautofit: false, // grid column automatic fit grid_width config\n\t\tcolumns: [\n\t\t\t{name: \"text\", tree: true, width: \"*\", resize: true},\n\t\t\t{name: \"start_date\", align: \"center\", resize: true},\n\t\t\t{name: \"duration\", align: \"center\"},\n\t\t\t{name: \"add\", width: 44}\n\t\t],\n\n\t\t/*scale*/\n\n\t\tscale_offset_minimal: true,\n\t\tinherit_scale_class: false,\n\n\t\tscales: [\n\t\t\t{\n\t\t\t\tunit: \"day\",\n\t\t\t\tstep: 1,\n\t\t\t\tdate: \"%d %M\"\n\t\t\t}\n\t\t],\n// \t\tdate_scale: \"%d %M\",\n\n\t\ttime_step: 60,\n\t\tduration_step: 1,\n\t\ttask_date: \"%d %F %Y\",\n\t\ttime_picker: \"%H:%i\",\n\t\ttask_attribute: \"task_id\",\n\t\tlink_attribute: \"link_id\",\n\t\tlayer_attribute: \"data-layer\",\n\t\tbuttons_left: [\n\t\t\t\"gantt_save_btn\",\n\t\t\t\"gantt_cancel_btn\"\n\t\t],\n\t\t_migrate_buttons: {\n\t\t\tdhx_save_btn: \"gantt_save_btn\",\n\t\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\n\t\t\tdhx_delete_btn: \"gantt_delete_btn\"\n\t\t},\n\t\tbuttons_right: [\n\t\t\t\"gantt_delete_btn\"\n\t\t],\n\t\tlightbox: {\n\t\t\tsections: [\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\n\t\t\t\t{name: \"time\", type: \"duration\", map_to: \"auto\"}\n\t\t\t],\n\t\t\tproject_sections: [\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\n\t\t\t\t{name: \"time\", type: \"duration\", readonly: true, map_to: \"auto\"}\n\t\t\t],\n\t\t\tmilestone_sections: [\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\n\t\t\t\t{name: \"time\", type: \"duration\", single_date: true, map_to: \"auto\"}\n\t\t\t]\n\t\t},\n\t\tdrag_lightbox: true,\n\t\tsort: false,\n\t\tdetails_on_create: true,\n\t\tdetails_on_dblclick: true,\n\t\tinitial_scroll: true,\n\t\ttask_scroll_offset: 100,\n\n\t\torder_branch: false,\n\t\torder_branch_free: false,\n\n\t\ttask_height: \"full\",// number px of 'full' for row height\n\t\tmin_column_width: 70,\n\n\t\t// min width for grid column (when resizing)\n\t\tmin_grid_column_width: 70,\n\t\t// name of the attribute with column index for resize element\n\t\tgrid_resizer_column_attribute: \"column_index\",\n\t\t// name of the attribute with column index for resize element\n\t\tgrid_resizer_attribute: \"grid_resizer\",\n\n\t\t// grid width can be increased after the column has been resized\n\t\tkeep_grid_width: false,\n\n\t\t// grid width can be adjusted\n\t\tgrid_resize: false,\n\n\t\tshow_tasks_outside_timescale: false,\n\t\tshow_unscheduled: true,\n\n\t\t//\n\t\treadonly_property: \"readonly\",\n\t\teditable_property: \"editable\",\n\t\tcalendar_property: \"calendar_id\",\n\t\tresource_calendars: {},\n\t\tinherit_calendar: false,\n\t\ttype_renderers: {},\n\n\t\topen_tree_initially: false,\n\t\toptimize_render: true,\n\t\tprevent_default_scroll: false,\n\t\tshow_errors: true,\n\t\twai_aria_attributes: true,\n\t\tsmart_scales: true,\n\t\trtl:false,\n\t\tplaceholder_task: false,\n\t\thorizontal_scroll_key: \"shiftKey\",\n\t\tdrag_timeline: {\n\t\t\tuseKey: undefined,\n\t\t\tignore: \".gantt_task_line, .gantt_task_link\"\n\t\t},\n\t\tdrag_multiple: true\n\t};\n\treturn result;\n};\n","module.exports = function(){\n\tvar services = {};\n\tfunction register (name, getter){\n\t\tservices[name] = getter;\n\t}\n\n\tfunction getService(name){\n\t\tif(!services[name]){\n\t\t\treturn null;\n\t\t}\n\t\treturn services[name]();\n\t}\n\n\tfunction dropService(name) {\n\t\tif (services[name]) {\n\t\t\tdelete services[name];\n\t\t}\n\t}\n\n\tvar servicesEnum = {\n\t\t\"config\": \"config\",\n\t\t\"templates\": \"templates\",\n\t\t\"locale\": \"locale\"\n\t};\n\n\treturn {\n\t\tservices: servicesEnum,\n\t\tsetService: register,\n\t\tgetService: getService,\n\t\tdropService: dropService,\n\t\tconfig: function(){\n\t\t\treturn this.getService(\"config\");\n\t\t},\n\t\ttemplates: function(){\n\t\t\treturn this.getService(\"templates\");\n\t\t},\n\t\tlocale: function(){\n\t\t\treturn this.getService(\"locale\");\n\t\t},\n\t\tdestructor: function(){\n\t\t\tfor(var i in services){\n\t\t\t\tif(services[i]){\n\t\t\t\t\tvar service = services[i];\n\t\t\t\t\tif(service && service.destructor){\n\t\t\t\t\t\tservice.destructor();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tservices = null;\n\t\t}\n\t};\n};\n","module.exports = function(gantt){\n\tgantt.$inject = function(module){\n\t\treturn module(this.$services);\n\t};\n};","module.exports = {\n\tKEY_CODES: {\n\t\tUP: 38,\n\t\tDOWN: 40,\n\t\tLEFT: 37,\n\t\tRIGHT: 39,\n\t\tSPACE: 32,\n\t\tENTER: 13,\n\t\tDELETE: 46,\n\t\tESC: 27,\n\t\tTAB: 9\n\t}\n};","require(\"css/skins/terrace.less\");\n\nfunction DHXGantt(){\n\tthis.constants = require(\"./../constants\");\n\tthis.version = VERSION;\n\tthis.license = LICENSE;\n\tthis.templates = {};\n\tthis.ext = {};\n\tthis.keys = {\n\t\tedit_save: this.constants.KEY_CODES.ENTER,\n\t\tedit_cancel: this.constants.KEY_CODES.ESC\n\t};\n}\n\nmodule.exports = function() {\n\t// use a named constructor to make gantt instance discoverable in heap snapshots\n\tvar gantt = new DHXGantt();\n\n\trequire(\"./common/import\")(gantt);\n\n\tgantt.$services = gantt.$inject(require(\"./common/services\"));\n\tgantt.config = gantt.$inject(require(\"./common/config\"));\n\tgantt.ajax =  require(\"./common/ajax\")(gantt);\n\tgantt.date = require(\"./common/date\")(gantt);\n\tvar dnd = require(\"./common/dnd\")(gantt);\n\tgantt.$services.setService(\"dnd\", function(){return dnd;});\n\n\tgantt.$services.setService(\"config\", function () {\n\t\treturn gantt.config;\n\t});\n\tgantt.$services.setService(\"date\", function () {\n\t\treturn gantt.date;\n\t});\n\tgantt.$services.setService(\"locale\", function () {\n\t\treturn gantt.locale;\n\t});\n\tgantt.$services.setService(\"templates\", function () {\n\t\treturn gantt.templates;\n\t});\n\n\tvar templatesLoader = require(\"./common/templates\")(gantt);\n\tgantt.$services.setService(\"templateLoader\", function () {\n\t\treturn templatesLoader;\n\t});\n\n\tvar eventable = require(\"../utils/eventable\");\n\teventable(gantt);\n\n\tvar StateService = require(\"./common/state\");\n\tvar stateService = new StateService();\n\n\tstateService.registerProvider(\"global\", function () {\n\t\tvar res = {\n\t\t\tmin_date: gantt._min_date,\n\t\t\tmax_date: gantt._max_date,\n\t\t\tselected_task: null\n\t\t};\n\n\t\t// do not throw error if getState called from non-initialized gantt\n\t\tif(gantt.$data && gantt.$data.tasksStore){\n\t\t\tres.selected_task = gantt.$data.tasksStore.getSelectedId();\n\t\t}\n\t\treturn res;\n\t});\n\tgantt.getState = stateService.getState;\n\tgantt.$services.setService(\"state\", function () {\n\t\treturn stateService;\n\t});\n\n\tvar utils = require(\"../utils/utils\");\n\tutils.mixin(gantt, utils);\n\n\tgantt.Promise = require(\"../utils/promise\");\n\tgantt.env = require(\"../utils/env\");\n\n\tvar domHelpers = require(\"../utils/dom_helpers\");\n\tgantt.utils = {\n\t\tdom: {\n\t\t\tgetNodePosition: domHelpers.getNodePosition,\n\t\t\tgetRelativeEventPosition: domHelpers.getRelativeEventPosition,\n\t\t\tisChildOf: domHelpers.isChildOf,\n\t\t\thasClass: domHelpers.hasClass,\n\t\t\tclosest: domHelpers.closest\n\t\t}\n\t};\n\n\tvar domEvents = require(\"../utils/dom_event_scope\")();\n\tgantt.event = domEvents.attach;\n\tgantt.eventRemove = domEvents.detach;\n\tgantt._eventRemoveAll = domEvents.detachAll;\n\tgantt._createDomEventScope = domEvents.extend;\n\n\tutils.mixin(gantt, require(\"./message\")(gantt));\n\tvar uiApi = require(\"./ui/index\").init(gantt);\n\tgantt.$ui = uiApi.factory;\n\tgantt.$ui.layers = uiApi.render;\n\tgantt.$mouseEvents = uiApi.mouseEvents;\n\tgantt.$services.setService(\"mouseEvents\", function () {\n\t\treturn gantt.$mouseEvents;\n\t});\n\tgantt.mixin(gantt, uiApi.layersApi);\n\n\trequire(\"./data_task_layers\")(gantt);\n\n\tgantt.$services.setService(\"layers\", function () {\n\t\treturn uiApi.layersService;\n\t});\n\n\tvar createLayoutFacade = require(\"./facades/layout\");\n\tgantt.mixin(gantt, createLayoutFacade());\n\n\trequire(\"./datastore/datastore_hooks\")(gantt);\n\n\tvar DataProcessor = require(\"./dataprocessor\");\n\tgantt.dataProcessor = DataProcessor.DEPRECATED_api;\n\tgantt.createDataProcessor = DataProcessor.createDataProcessor;\n\n\trequire(\"./plugins\")(gantt);\n\n\trequire(\"./dynamic_loading\")(gantt);\n\trequire(\"./grid_column_api\")(gantt);\n\trequire(\"./wai_aria\")(gantt);\n\trequire(\"./tasks\")(gantt);\n\trequire(\"./load\")(gantt);\n\trequire(\"./worktime/work_time\")(gantt);\n\trequire(\"./data\")(gantt);\n\n\trequire(\"../publish_helpers/void_script_second\").default(gantt);\n\n\trequire(\"./lightbox\")(gantt);\n\trequire(\"./lightbox_optional_time\")(gantt);\n\trequire(\"./data_task_types\")(gantt);\n\trequire(\"./cached_functions\")(gantt);\n\trequire(\"./skin\")(gantt);\n\trequire(\"../css/skins/skyblue\")(gantt);\n\trequire(\"../css/skins/meadow\")(gantt);\n\trequire(\"../css/skins/terrace\")(gantt);\n\trequire(\"../css/skins/broadway\")(gantt);\n\trequire(\"../css/skins/material\")(gantt);\n\trequire(\"../css/skins/contrast_black\")(gantt);\n\trequire(\"../css/skins/contrast_white\")(gantt);\n\trequire(\"./touch\")(gantt);\n\trequire(\"../locale\")(gantt);\n\trequire(\"./gantt_core\")(gantt);\n\trequire(\"./destructor\")(gantt);\n\trequire(\"../publish_helpers/void_script_third\").default(gantt);\n\treturn gantt;\n};","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};","import * as warnings from \"./core/deprecated_warnings\";\nimport * as base from \"./core/gantt\";\n\n\nconst gantt = (window as any).gantt = base();\nwarnings(gantt);\n\nexport default gantt;\nexport { gantt };"],"sourceRoot":""}