{"version":3,"sources":["webpack:///dhtmlxgantt.js","webpack:///webpack/bootstrap 63867f230ca27ef26312","webpack:///./sources/utils/utils.js","webpack:///./sources/utils/dom_helpers.js","webpack:///./sources/utils/eventable.js","webpack:///./sources/utils/date_helpers.js","webpack:///./sources/core/ui/layout/cell.js","webpack:///./sources/utils/extends.js","webpack:///./sources/utils/helpers.js","webpack:///./sources/utils/env.js","webpack:///./sources/core/ui/mouse_event_container.js","webpack:///./sources/utils/timeout.js","webpack:///./sources/utils/dom_event_scope.js","webpack:///./sources/core/ui/layout/layout.js","webpack:///./sources/core/ui/timeline/timeline.js","webpack:///./sources/core/ui/timeline/scales.js","webpack:///./sources/core/ui/grid/grid.js","webpack:///./sources/core/datastore/datastore.js","webpack:///./sources/core/datastore/power_array.js","webpack:///./sources/core/gantt_data_range.js","webpack:///./sources/utils/task_tree_helpers.js","webpack:///./sources/core/worktime/calendar_arguments_helper.js","webpack:///./sources/dhtmlxgantt.js","webpack:///./sources/core/gantt.js","webpack:///./sources/core/common/import.js","webpack:///./sources/core/common/services.js","webpack:///./sources/core/common/config.js","webpack:///./sources/core/common/ajax.js","webpack:///./sources/core/common/date.js","webpack:///./sources/core/common/dnd.js","webpack:///./sources/core/common/templates.js","webpack:///./sources/core/common/state.js","webpack:///./sources/core/message.js","webpack:///./sources/core/ui/index.js","webpack:///./sources/core/ui/ui_factory.js","webpack:///./sources/core/ui/configurable.js","webpack:///./sources/core/ui/mouse.js","webpack:///./sources/core/ui/gantt_layers.js","webpack:///./sources/core/ui/render/layer_engine.js","webpack:///./sources/core/ui/render/render_factory.js","webpack:///./sources/core/ui/layout/view_layout.js","webpack:///./sources/core/ui/layout/view_cell.js","webpack:///./sources/core/ui/layout/resizer_cell.gpl.js","webpack:///./sources/core/ui/layout/scrollbar_cell.js","webpack:///./sources/core/ui/timeline/tasks_canvas_render.gpl.js","webpack:///./sources/core/ui/grid/grid_resize.gpl.js","webpack:///./sources/core/ui/render/task_bar_render.js","webpack:///./sources/core/ui/render/task_bg_render.js","webpack:///./sources/core/ui/render/link_render.js","webpack:///./sources/core/ui/render/task_grid_line_render.js","webpack:///./sources/core/ui/grid/main_grid_initializer.js","webpack:///./sources/core/ui/grid/tasks_grid_dnd.js","webpack:///./sources/core/ui/timeline/main_timeline_initializer.js","webpack:///./sources/core/ui/timeline/tasks_dnd.js","webpack:///./sources/core/ui/timeline/links_dnd.js","webpack:///./sources/core/ui/main_layout_initializer.js","webpack:///./sources/core/data_task_layers.gpl.js","webpack:///./sources/core/datastore/datastore_hooks.js","webpack:///./sources/core/facades/datastore.js","webpack:///./sources/core/facades/datastore_tasks.js","webpack:///./sources/core/facades/datastore_links.js","webpack:///./sources/core/datastore/treedatastore.js","webpack:///./sources/core/datastore/select.js","webpack:///./sources/core/datastore/datastore_render.js","webpack:///./sources/core/dataprocessor/hooks.js","webpack:///./sources/core/dataprocessor/live_update_hooks.js","webpack:///./sources/core/dataprocessor/dataprocessor.js","webpack:///./sources/core/plugins/index.js","webpack:///./sources/core/plugins/autoscroll.js","webpack:///./sources/core/plugins/batch_update.js","webpack:///./sources/core/plugins/wbs.js","webpack:///./sources/core/plugins/jquery_hooks.js","webpack:///./sources/core/plugins/dhtmlx_hooks.js","webpack:///./sources/core/plugins/resources.js","webpack:///./sources/core/dynamic_loading.gpl.js","webpack:///./sources/core/grid_column_api.gpl.js","webpack:///./sources/core/wai_aria.js","webpack:///./sources/core/tasks.js","webpack:///./sources/core/load.js","webpack:///./sources/core/worktime/work_time.js","webpack:///./sources/core/worktime/calendar_manager.js","webpack:///./sources/core/worktime/strategy/calendar_strategy.js","webpack:///./sources/core/worktime/strategy/calendar_workunit_cache.js","webpack:///./sources/core/worktime/time_calculator.js","webpack:///./sources/core/worktime/strategy/no_work_time.js","webpack:///./sources/core/facades/worktime_calendars.js","webpack:///./sources/core/data.js","webpack:///./sources/core/lightbox.js","webpack:///./sources/core/lightbox_optional_time.js","webpack:///./sources/core/data_task_types.gpl.js","webpack:///./sources/core/cached_functions.js","webpack:///./sources/core/skin.js","webpack:///./sources/css/skins/skyblue.js","webpack:///./sources/css/skins/meadow.js","webpack:///./sources/css/skins/terrace.js","webpack:///./sources/css/skins/broadway.js","webpack:///./sources/css/skins/material.js","webpack:///./sources/css/skins/contrast_black.js","webpack:///./sources/css/skins/contrast_white.js","webpack:///./sources/core/touch.js","webpack:///./sources/locale/locale.js","webpack:///./sources/core/gantt_core.js","webpack:///./sources/core/common/assert.js","webpack:///./sources/core/destructor.js","webpack:///./sources/core/deprecated_warnings.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","copy","t","result","Array","Number","String","Boolean","length","dateHelper","isDate","Date","apply","mixin","target","source","force","f","undefined","defined","obj","uid","seed","valueOf","bind","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","window","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","offsetWidth","offsetHeight","parseInt","offsetTop","offsetLeft","offsetParent","y","Math","round","x","width","height","isVisible","node","display","visibility","getComputedStyle","style","currentStyle","hasNonNegativeTabIndex","isNaN","getAttribute","hasHref","a","area","nodeName","loLowerCase","isEnabled","input","select","textarea","button","toLowerCase","hasAttribute","getFocusableNodes","root","nodes","querySelectorAll","join","nodesArray","slice","splice","getScrollSize","div","createElement","cssText","appendChild","clientWidth","removeChild","getClassName","className","baseVal","indexOf","_trimString","addClassName","removeClassName","split","regEx","RegExp","replace","toNode","getElementById","querySelector","insert","newone","_slave","innerHTML","child","firstChild","remove","getChildren","css","ch","childNodes","len","out","push","getTargetNode","e","trg","tagName","srcElement","locateAttribute","attribute","str","trim","this","locateClassName","classname","strict","ind","charAt","getRelativeEventPosition","ev","pageX","pageY","pos","clientX","clientY","isChildOf","parent","getNodePosition","insertNode","removeNode","getChildNodes","makeEventable","eventHost","EventHost","catcher","callObj","createEventStorage","addEvent","attachAll","callback","callEvent","arg0","_silent_mode","handlerName","concat","checkEvent","id","list","removeEvent","detachAllEvents","_connected","_silentStart","_silentEnd","dhx_catch","z","res","zr","fields","utils","eventable","domHelpers","Cell","config","factory","gantt","$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","_hide","show","mode","index","cellIndex","moveView","hidden","$toHTML","content","header","raw","html","collapseIcon","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","b","__","constructor","create","getSecondsInUnit","unit","units","hour","forEach","arr","workArray","arrayMap","resArray","second","minute","day","week","month","quarter","year","env","isIE","navigator","userAgent","isIE6","XMLHttpRequest","isIE7","isIE8","isOpera","isChrome","isKHTML","isFF","isIPad","search","isEdge","events","mouseEvents","h","checkTimeout","host","updPerSecond","_on_timeout","timeout","ceil","setTimeout","createScope","handlers","attach","element","extend","__extends","Layout","_super","_this","$root","_parseConfig","$cells","_resizeScrollbars","autosize","scrollbars","showScrollbar","scrollbar","scrollChanged","visibleScrollbars","hideScrollbar","hiddenSrollbars","scroll","shouldHide","shouldShow","visibleGroups","group","_syncCellSizes","groupName","newSize","groups","_eachChild","_syncGroupSize","cells","_xLayout","direction","getNextSibling","ownSize","resizeSibling","getPrevSibling","siblingSize","totalGravity","totalSize","k","mainGrid","$ui","getView","$content","scrollable","grid_width","startStage","mainCall","_resizeInProgress","contentViews","getCellsByType","setContentSize","_getAutosizeMode","code","type","children","cellId","sub","alert","insertBefore","rows","cols","views","initUI","getCells","render","cellSize","contentWidth","contentHeight","resizer","max","_cleanElSize","value","toString","_getBoxStyles","computed","clientHeight","properties","styles","boxSizing","MozBoxSizing","horPaddings","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","vertPaddings","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","borderBox","innerWidth","innerHeight","outerWidth","outerHeight","boxSizes","contentSizes","_sizes","min","margin","_calcFreeSpace","side","_free","_gravity","_calcSize","_configureBorders","borderClass","lastVisibleIndex","lastCell","borderColorClass","_updateCellVisibility","oldVisibleCells","_visibleCells","firstCall","visibleCells","cellView","marginSide","dx","dy","_findBinary","array","item","prev","low","high","ScaleHelper","canvasRender","Timeline","$scaleHelper","container","$task","$task_scale","$task_data","$task_bg","$task_links","$task_bars","_tasks","col_width","full_width","trace_x","rendered","$getConfig","attr","linksAttr","bindLinks","item_attribute","link_attribute","layers","_createLayerConfig","tasks","linkLayers","links","_attachLayers","dataHeight","scale_height","refresh","backgroundImage","smart_rendering","rowStore","store","row_height","countVisible","scale","data_els","scrollHeight","scrollWidth","_refreshScales","smart_scales","scales","_scales","_getScaleChunkHtml","taskFilter","expose","renderer","taskBar","filter","taskBg","static_background","link","_taskLayers","_linkLayers","getDatastore","taskRenderer","getDataRender","createDataRender","defaultContainer","taskLayers","layer","bar_layer","addLayer","_taskRenderer","getLayer","_initStaticBackgroundRender","linkStore","linkRenderer","linkLayer","_linkRenderer","staticRender","_staticBgHandler","getScale","_clearLayers","removeLayer","_render_tasks_scales","scales_html","outer_width","state","getState","helpers","_getScales","availWidth","autosize_min_width","cfgs","prepareConfigs","min_column_width","min_date","max_date","rtl","cfg","fromPos","toPos","templates","scale_row_class","cssClass","tplClass","_prepareScaleHtml","globalConfig","globalTemplates","date","template","date_to_str","startIndex","endIndex","count","inherit_scale_class","scale_cell_class","cssclass","ariaAttr","_waiAria","getTimelineCellAttr","dateFromPos","summ","part","_getColumnDuration","posFromDate","columnIndexByDate","assert","wholeCells","partCell","days","trace_x_ascending","ignores","ignore_x","day_ind","transition","trace_index_transition","getItemPosition","task","start_date","end_date","xLeft","xRight","getItemTop","getItemHeight","task_height","offset","task_height_offset","getRowTop","task_id","getIndexById","primaryScale","subscales","sortScales","add","step","services","getSum","sizes","from","to","setSumWidth","sum_width","parts","oldWidth","diff","adjustSize","splitSize","full","shared","share","sort","initTemplate","scale_unit","date_scale","min_coll_width","container_width","minDate","maxDate","heights","configs","main_scale","initScaleConfig","processIgnores","initColSizes","limitVisibleRange","unshift","alineScaleColumns","reverseScale","setPosSettings","reverse","indexes","trace_indexes","_ignore_time_config","skip_off_time","skip","probe","isWorkTime","display_count","min_col_width","line_height","cont_width","column_count","eachColumn","iterateScales","lower_scale","upper_scale","upper_dates","lower_dates","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","gridResize","Grid","$state","gridAriaAttr","gridAttrString","gridDataAriaAttr","gridDataAttrString","$grid","gridScaleRowAttrString","$grid_scale","$grid_data","_renderHeaderResizers","doOnRender","_mouseDelegates","_addLayers","_initEvents","columns","getGridColumns","_setColumnsWidth","_getGridWidth","_initSmartRenderingPlaceholder","_calculateGridWidth","_renderGridHeader","gridLine","$rowsPlaceholder","placeholder","close","open","_getColumnWidth","column","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","grid_header_class","label","ariaAttrs","gridScaleCellAttrString","lineHeight","powerArray","DataStore","pull","$initItem","initItem","visibleOrder","$create","fullOrder","_skip_refresh","_filterRule","_searchVisibleOrder","_parseInner","data","loaded","parse","getItem","_updateOrder","updateItem","_removeItemInner","$remove","removeItem","_addItemInner","exists","silent","order","data_size","$insertAt","$find","getVisibleItems","getIndexRange","addItem","_changeIdInner","oldId","newId","changeId","_moveInner","sindex","tindex","getIdByIndex","$removeAt","move","clearAll","master","arraysEqual","arr1","arr2","quick","oldOrder","serialize","eachItem","rule","filteredOrder","Infinity","ret","getItems","_getNullIfUndefined","getFirst","getLast","getNext","getPrev","$powerArray","$each","$map","$filter","dateRangeResolver","getSubtaskDates","defaultRangeResolver","resolveConfigRange","range","start_interval","_scale_range_unit","scale_offset_minimal","helper","_init_tasks_range","calculateEndDate","duration","_min_date","_max_date","_adjust_scales","fit_tasks","old_min","old_max","copyLinkIdsArray","linkIds","targetHash","isLinkExists","getLink","copyLinkIds","$source","$target","getSubtreeLinks","rootId","isTaskExists","getTask","eachTask","getSubtreeTasks","calendarArgumentsHelper","getWorkHoursArguments","setWorkTimeArguments","unsetWorkTimeArguments","isWorkTimeArguments","duration_unit","calendar","getClosestWorkTimeArguments","dir","getDurationConfig","_getStartEndConfig","param","argumentType","duration_step","getDurationArguments","hasDurationArguments","calculateEndDateArguments","DHXGantt","version","keys","edit_save","edit_cancel","$inject","ajax","dnd","setService","templatesLoader","StateService","stateService","registerProvider","selected_task","$data","tasksStore","getSelectedId","domEvents","_eventRemoveAll","uiApi","$mouseEvents","layersApi","layersService","register","service","layout","scrollX","scrollY","finish_to_start","start_to_start","finish_to_finish","start_to_finish","types","project","milestone","work_time","correct_work_time","cascade_delete","autoscroll","autoscroll_speed","show_links","show_task_cells","branch_loading","branch_loading_property","show_loading","show_chart","show_grid","min_duration","xml_date","api_date","start_on_monday","server_utc","show_progress","select_task","scroll_on_click","preserve_scroll","readonly","date_grid","drag_links","drag_progress","drag_resize","drag_project","drag_move","drag_mode","progress","ignore","round_dnd_dates","link_wrapper_width","root_id","tree","align","time_step","task_date","time_picker","task_attribute","layer_attribute","buttons_left","_migrate_buttons","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","buttons_right","lightbox","sections","map_to","focus","project_sections","milestone_sections","single_date","drag_lightbox","details_on_create","details_on_dblclick","initial_scroll","task_scroll_offset","order_branch","order_branch_free","grid_resizer_column_attribute","grid_resizer_attribute","keep_grid_width","grid_resize","show_unscheduled","readonly_property","editable_property","calendar_property","resource_calendars","type_renderers","open_tree_initially","optimize_render","prevent_default_scroll","show_errors","wai_aria_attributes","cache","method","DOMParser","parseFromString","ActiveXObject","async","loadXML","xmltop","tagname","xhr","status","xml","responseXML","responseText","getElementsByTagName","xpath","xpathExp","docObj","selectNodes","first","ownerDocument","evaluate","XPathResult","ANY_TYPE","iterateNext","query","_call","url","headers","onLoad","getSync","put","postData","del","post","postSync","getLong","postLong","longParams","isQt","match","onreadystatechange","readyState","xmlDoc","filePath","getTime","key","setRequestHeader","toUpperCase","send","urlSeparator","month_short","month_short_hash","month_full","month_full_hash","date_part","old","setHours","hour_start","getHours","getDate","getMonth","getFullYear","setTime","time_part","week_start","shift","getDay","month_start","setDate","quarter_start","res_month","setMonth","year_start","day_start","getMinutes","setMinutes","minute_start","getSeconds","setSeconds","getMilliseconds","setMilliseconds","_add_days","inc","ndate","setYear","add_quarter","to_fixed","num","format","utc","dateToStr","Function","getISOWeek","str_to_date","splt","mask","strToDate","dateString","nday","first_thursday","year_number","ordinal_date","getUTCISOWeek","convert_to_utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","parseDate","copyDomEvent","metaKey","shiftKey","ctrlKey","altKey","DnD","_obj","_settings","inputMethods","getInputMethods","_drag_start_timer","clearDragTimer","down","accessor","original_target","touch","dragStart","touch_drag","traceDragEvents","domElement","inputMethod","mousemove","dragMove","limited_mousemove","dragScroll","preventDefault","cancelBubble","updates_per_second","mouseup","dragEnd","checkPositionChange","diff_x","diff_y","sqrt","pow","abs","sensitivity","initDnDMarker","marker","backupEventTarget","domEvent","getEvent","cloneNode","backup_element","touchEventsSupported","createEvent","touches","elementFromPoint","pointerEnabled","pointerType","msPointerEnabled","MSPOINTER_TYPE_MOUSE","clearTimeout","started","getPosition","_prevent_touch_scroll","_touch_feedback","initial","template_name","regTemplates","initTemplates","gantt_save_btn","icon_save","gantt_cancel_btn","icon_cancel","gantt_delete_btn","icon_delete","xml_format","progress_text","task_text","text","task_class","grid_row_class","task_row_class","task_cell_class","grid_indent","grid_folder","$open","grid_file","grid_open","grid_blank","isUnscheduledTask","task_unscheduled_time","grid_date_format","task_time","link_class","link_description","drag_link","from_start","to_start","link_start","link_end","drag_link_class","isLinkAllowed","tooltip_date_format","tooltip_text","stateProviders","internal","provider","unregisterProvider","usercall","modalBox","_dhx_msg_cfg","modal_key","which","keyCode","messageBox","keyboard","click","modality","cover","onkeydown","buttonAriaAttrs","messageButtonAttrString","info","position","message","onclick","messageInfoAttr","expire","timers","getFirstDefined","values","_boxStructure","ok","cancel","contentId","messageModalAttr","setAttribute","inner","title","message_ok","message_cancel","buttons","btn","_createBox","alertPopup","confirmPopup","boxPopup","box_params","params","alertBox","confirmBox","focusable","hideAll","popups","confirm","modalbox","attachInitializer","initializer","ext","onCreated","onInitialized","onDestroyed","uiFactory","createFactory","registerView","Resizer","Scrollbar","mainLayoutInitializer","ViewCell","ViewLayout","mainTimelineInitializer","mainGridInitializer","ResourceGrid","ResourceTimeline","layersEngine","createLayers","gridRenderer","renderTaskBg","renderTaskBar","renderLink","ui","parentView","createView","creator","createdViews","configure","reset","viewConstructor","ViewSettings","extendSettings","parentSettings","own","parentConfig","parentTemplates","$getTemplates","createMouseHandler","addEventTarget","eventHandlers","callHandler","eventName","args","onClick","locate","findEventHandlers","callEventHandlers","multiselect","selectTask","onContextMenu","src","taskId","linkId","returnValue","hash","delegateHandlers","handlerResult","onDoubleClick","doubleclick","showLightbox","onMouseMove","_last_move_event","contextMenu","global","createLayerFactory","createLayerEngine","previusSiblingContainer","defaultContainerSibling","createGroup","itemId","filters","addTaskLayer","_getTaskLayers","getLayers","removeTaskLayer","_clearTaskLayers","addLinkLayer","_getLinkLayers","removeLinkLayer","_clearLinkLayers","mergeFilters","filter_methods","filter_method","renderFactoryProvider","layerFactory","renderFactory","get_container","rel_root","defaultFilters","renderGroup","tempCollection","renderers","_add","pending","topmost","rel","getRenderer","eachLayer","rendererFactory","task_area_renderers","renderOne","render_item","remove_item","dom","append","task_area_pulls","clear_container","render_items","items","buffer","createDocumentFragment","vis","replace_item","item_id","newNode","replaceChild","restore","change_id","oldid","newid","clearRenderers","$cell","byMaxSize","otherCell","childConfig","$initialized","unload","outerX","outerY","childSize","ScrollbarCell","_scrollHorizontalHandler","_scrollVerticalHandler","_outerScrollVerticalHandler","_outerScrollHorizontalHandler","_mouseWheelHandler","scroll_size","_isHorizontal","scrollPosition","eachCell","_isVertical","_initVertical","_initHorizontal","_initMouseWheel","_initLinkedViews","_getRootParent","_eachView","_getLinkedViews","$scroll_hor","$scroll_ver","_updateLinkedViews","scrollHorizontally","_scrolling","codeScrollLeft","oldSize","scrollVertically","_wheel_time","_touch_scroll_active","_oldLeft","_getScrollSize","scrollSize","outerSize","isHorizontal","linked","scrollProperty","innerSizeProperty","outerProperty","_getScrollOffset","cellScrollSize","nonScrollableSize","scrollableViewPortSize","outerScroll","innerScroll","getScrollState","visible","scrollSizes","_setScrollSize","toggleVisibility","_getScaleOffset","parentLayout","vparent","_oldTop","_checkWheelTarget","targetNode","connectedViews","ff","wx","deltaX","wheelDeltaX","wy","deltaY","wheelDelta","oldLeft","detail","oldTop","createStaticBgHelper","createResizer","grid","createTaskRenderer","_render_task_element","painters","getTaskType","defaultRenderer","_task_default_render","_isAllowedUnscheduledTask","taskType","padd","link_line_width","_render_task_progress","_render_task_content","textColor","color","_combine_item_class","progressColor","_render_leftside_content","_render_rightside_content","setTaskBarAttr","isReadonly","isSummaryTask","_render_pair","outer","showLinkPoints","link_source_id","_render_side_content","_get_link_crossing_css","leftside_text","rightside_text","cond","_get_conditions","ln","tp","done","pr","backgroundColor","opacity","wrapper","drag","markerPos","leftside","basic","drag_id","link_target_id","highlight_critical_path","isCriticalTask","link_landing_area","from_id","link_from_start","link_to_start","allowDrag","dragClass","createTaskBgRender","_render_bg_line","row","j","cssTemplate","odd","getGlobalTaskIndex","createLinkRender","_render_link_element","dots","path_builder","get_points","lines","drawer","get_lines","isCriticalLink","link_arrow_size","render_line","endpoint","_render_link_arrow","borderColor","linkAttr","point","line_width","dirs","getMilestonePosition","milestoneHeight","getTaskHeight","milestoneWidth","current_pos","path","line_to","get_path","next","line","_get_line","get_wrapper_sizes","wrapper_size","get_line_sizes","line_size","marginTop","marginLeft","innerPos","get_direction","vect","current","point_to","pt","get_endpoint","xy","e_y","e_x","shiftX","lineType","get_line_type","forward","sign","createGridLineRender","_render_grid_item","has_child","textValue","aria","gridAddButtonAttrString","$level","hasChild","gridCellAttrString","$dataprocessor_class","css_template","taskRowAttr","rowDnd","extendGantt","initEvents","extendDom","clearEvents","_is_icon_open_click","showDate","conf","sorting_method","createTask","totalWidth","_init_dnd","getStore","dnd_sensitivity","hideQuickInfo","_hideQuickInfo","datastore","initial_open_state","outerHTML","getBranchIndex","$transparent","refreshData","lastTaskOfLevel","level","last_item","_getGridPos","gridHeight","_getTargetY","_getTaskByY","dropIndex","allowedLevel","over","dd","targetY","nextId","getParent","prevId","$drop_target","taskDnD","linkDnD","timeline","_linksDnD","createLinkDND","_tasksDnD","createTaskDND","_attachDomEvents","_attachStateProvider","_clearDomEvents","_clearStateProvider","getTaskTop","getTaskPosition","roundTaskDates","getTaskNode","getLinkNode","_delete_link_handler","question","confirm_link_deleting","_dhtmlx_confirm","deleteLink","coll","coll_date","scale_step","dragMultiple","_events","before_start","before_finish","after_finish","_handlers","_domEvents","clear_drag_state","set_actions","drag_from_start","evs","stage","_move","_resize","_resize_progress","on_mouse_move","on_mouse_down","on_mouse_up","start_x","start_y","coords_x","_drag_task_coords","_init_task_timing","diffValue","_find_max_shift","dragItems","correctShift","minX","maxX","maxShift","minShift","new_start","new_end","obj_s_x","obj_e_x","_mouse_position_change","oldPos","newPos","_is_number","isFinite","start_drag","sX","sY","now","timestamp","_start_dnd","_update_on_move","_update_item_on_move","original","refreshTask","curr_date","initialDrag","childDrag","_update_parents","_get_drag_mode","_fix_dnd_scale_time","fixStart","roundDate","_fix_working_times","getClosestWorkTime","correctTaskWorkTime","_finalize_mouse_up","_fireEvent","updateTask","_dhx_changed","modes","classes","dragProperty","trigger","round_task_dates","drag_state","initTaskDND","_tasks_dnd","initLinksDND","getVisibleMilestoneWidth","origWidth","isMilestone","getDndState","_link_source_task","_link_target_task","_link_source_task_start","_link_target_task_start","_link_landing","getLinePos","isStart","taskPos","xEnd","yEnd","updateMarkedHtml","advanceMarker","resetDndState","showDirectingLine","s_x","s_y","getDirectionLine","link_direction_class","dist","tan","angle","atan","coordinateCircleQuarter","PI","sin","cos","ieTransform","shiftLeft","shiftTop","eX","eY","_direction","removeDirectionLine","sid","_dir_start","landing","prevTarget","prevLanding","prevToStart","targ","_dir_end","targetChanged","_get_link_type","addLink","getVerticalScrollbar","getHorizontalScrollbar","_legacyGridResizerClass","resizers","r","gridResizer","mainTimeline","showGrid","colsWidth","grid_limits","$layout","_getVerticalScrollbar","_getHorizontalScrollbar","scrollState","gridFirst","initialWidth","prevCellWidth","nextCellWidth","viewCell","limits","newBehindSize","newFrontSize","oldBackSize","oldFrontSize","newBackSize","initDataStores","sync_link","sourceTask","targetTask","sync_link_delete","sync_links","linksStore","mapEvents","mapFrom","mapTo","sourceEvent","targetEvent","_init_task","_set_default_task_timing","setParent","_init_link","facade","facadeFactory","createDatastore","$index","resetProjectDates","_update_flags","action","batch_update","oldState","calculateScaleRange","newState","isTaskVisible","treeHelper","deletedLinks","onItemLoading","onBeforeAdd","onAfterAdd","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onIdChange","onBeforeItemMove","onAfterItemMove","onFilterItem","onItemOpen","onItemClose","onBeforeSelect","onAfterSelect","onAfterUnselect","getDatastores","storeNames","createFacade","createDatastoreFacade","createTasksFacade","createLinksFacade","TreeDataStore","createDatastoreSelect","datastoreRender","$StoreType","openInitially","storeList","bindDataStore","stores","childId","parentId","refresh_links","refreshLink","userdata","_clear_data","unselectTask","unselect","createTasksDatastoreFacade","getTaskByTime","addTask","deleteTask","getTaskCount","getVisibleTaskCount","getTaskIndex","eachParent","startTask","changeTaskId","calculateTaskLevel","calculateItemLevel","new_pid","getSiblings","getTaskByIndex","moveTask","field","desc","createLinksStoreFacade","getLinkCount","getLinks","updateLink","changeLinkId","_branches","$parentProperty","parentProperty","$getRootId","val","$openInitially","_buildTree","_add_branch","parentIndex","targetIndex","_move_branch","$rendered_parent","_replace_branch_child","_traverseBranches","branch","source_pid","tbranch","pid","siblings","_setParentInner","startItem","added_already","old_parent","new_parent","old_id","new_id","newbranch","criteria","original_criteria","els","temp","createDataStoreSelectMixin","selectedId","storeRenderCreator","skipRepaint","refreshId","renders","itemRepainter","renderItem","renderItems","addDataProcessorHooks","detachDataProcessor","dp","setGanttMode","_getRowData","afterUpdate","oldAfterUpdate","_dp","_change_id","_row_style","_delete_task","_sendTaskOrder","dataProcessorHandlers","extendDataProcessor","_ganttMode","_in_progress","_invalid","updatedRows","reqUrl","_tMode","pref","substr","taskTiming","_get_task_timing_mode","$no_start","$no_end","action_param","getUserData","row_id","setUpdated","attachDataProcessorEvents","clientSideDelete","updated","clientOnly","getTaskLinks","cascadeDelete","dpMode","updateMode","setUpdateMode","cascade","sendAllData","_tSend","_waitMode","itemLinks","batchUpdate","_serverProcessor","substring","serverProcessor","dataProcessor","_dp_init","setTransactionMode","inserted","deleted","invalid","error","_methods","liveUpdateHooks","setUserData","insertCallback","upd","_xmlNodeToJSON","methods","isExist","deleteCallback","delete","patchDataProcessor","dataprocessor","serverProcessorURL","autoUpdate","_headers","_payload","post_delim","mandatoryFields","messages","invalid_cell","enableUTFencoding","total","payload","_endnm","escape","_utf","encodeURIComponent","setDataColumns","_columns","getSyncState","enableDataNames","enablePartialDataSend","_changed","rowId","findRow","existing","set_invalid","is_invalid","_clearUpdateFlag","markRow","sendData","details","checkBeforeUpdate","mytype","_h2","editStop","_beforeSendData","_sendData","serialize_one","stack","security_key","_applyPayload","a1","that","back","ids","a3","_user","a4","gr_id","JSON","stringify","valid","_getAllData","has_one","setVerificator","verifFunction","clearVerificator","pattern","defineAction","_uActions","afterUpdateCallback","tid","btag","correct","soid","tag","finalizeUpdate","cleanUpdate","atag","anObj","setOnAfterUpdate","enableDebug","setOnBeforeUpdateHandler","func","setAutoUpdate","interval","user","_need_update","_update_busy","xml_node","afterAutoUpdate","fullSync","setInterval","loadUpdate","getUpdates","_v","nodeValue","_a","vers","upds","isScrollState","dragMarker","isResize","isLink","isMove","defineDelayTimeout","delayTimeout","speed","tick","scrollSpeed","autoscroll_delay","scrollDelay","defineScrollInterval","startPos","eventPos","clearInterval","autoscrollInterval","isScroll","posX","posY","need_scroll","currentScrollTop","scrollOuterHeight","inner_height","scrollInnerHeight","currentScrollLeft","scrollOuterWidth","inner_width","scrollInnerWidth","autoscroll_step","scrollStep","boxSize","startCoord","scrollRange","createMethod","disableMethod","methodName","dummyMethod","restoreMethod","disableMethods","methodsHash","restoreMethods","batchUpdatePayload","console","isActive","noRedraw","dp_mode","call_dp","resetProjects","createWbs","_needRecalc","_isRecalcNeeded","_isGroupSort","_groups","is_active","_getWBSCode","_calcWBS","$virtual","$wbs","_setWBSCode","getWBSCode","_isFirst","_prevSibling","_wbs","_parent","wbs","jQuery","$","fn","dhx_gantt","each","newgantt","Gantt","getGanttInstance","dhtmlx","attaches","attachGantt","cmp","attachObject","dataType","dataObj","vs","av","border","gridId","gridObj","dhtmlXCellObject","createResourceMethods","getTaskBy","propertyName","propertyValue","filterResourceTasks","getResourceTasks","resourceIds","cacheKey","resourceHash","resourceTaskCache","getResourceLoad","resourceId","resourceProperty","calculateResourceLoad","timegrid","currDate","timetable","renderResourceLine","resource","resource_property","resource_cell_class","resource_cell_value","resourceLoadCache","renderLine","filterTasks","resourceRow","resource_store","getGridColumn","stripHTMLLite","htmlText","htmlTags","extraSpaces","escapeQuotes","singleQuotes","isDisabled","getAttributeString","attributes","aria-label","_taskCommonAttr","isSelectedTask","linkTypes","toStart","fromStart","gridSeparatorAttr","lightboxHiddenAttr","lightboxVisibleAttr","lightboxAttr","lightboxButtonAttrString","buttonName","role","tabindex","lightboxHeader","headerText","lightboxSelectAttrString","time_option","years","months","hours","minutes","lightboxDurationInputAttrString","section","column_duration","aria-valuemin","attrs","new_task","buttonLabel","quickInfoAttr","quickInfoHeaderAttrString","quickInfoHeader","quickInfoButtonAttrString","tooltipAttr","tooltipVisibleAttr","tooltipHiddenAttr","load","_load_url","cl","_load_type","on_load","resp","_process_loading","collections","_load_collections","firstTask","showTask","collections_loaded","collection","serverList","option","option_key","$ignore","json","dhx_security","serializeTask","_copyObject","serializeLink","_copyLink","rawLinks","attrs_only","nodeType","_getCollections","loader","opts","itms","itm","_getXML","toptag","getXMLTopNode","skey","oldxml","startdate","est","enddate","predecessortasks","CalendarManager","TimeCalculator","worktimeFacadeFactory","manager","timeCalculator","_calendars","createArgumentsHelper","CalendarWorktimeStrategy","_getDayHoursForMultiple","calendars","currPos","is_work_hour","reduce","acc","_is_work_hour","mergeCalendars","newCalendar","createCalendar","worktime","_convertWorktimeSettings","settings","parentCalendar","defaults","fulltime","apiCore","_tryChangeCalendarSettings","getCalendar","createDefaultCalendars","getCalendars","getTaskCalendar","calendarId","addCalendar","worktimes","deleteCalendar","restoreConfigCalendars","CalendarWorkTimeStrategy","argumentsHelper","_workingUnitsCache","Cache","_getUnitOrder","_timestamp","UTC","_checkIfWorkingUnit","_isWorkTime","_is_work_day","_getWorkHours","_internDatesPull","_nextDate","_getWorkUnitsBetweenGeneric","stepStart","stepEnd","checkFirst","checkLast","isLastStep","_getHoursPerDay","_getWorkHoursForRange","_getWorkUnitsBetweenHours","firstDayStart","firstDayEnd","lastDayStart","lastDayEnd","startPart","endPart","hourRange","_getCalendar","_setCalendar","backup","_isEmptyCalendar","datesArray","isFullWeekSet","checkFullArray","getWorkHours","setWorkTime","unsetWorkTime","reset_calendar","is_work_unit","calculateDuration","hasDuration","mult","_calculateEndDate","added","_getClosestWorkTime","future_target","prev_target","both_directins","WorkUnitsCache","_cache","time","calendarManager","$disabledCalendar","NoWorkTimeCalendar","CalendarDisabledTimeStrategy","_calculateDuration","fixedUnits","createWorktimeFacade","_hasDuration","unscheduled","_defaultTaskDate","parent_id","startDate","$new","_lightbox_id","task_type","$rendered_type","task_mode","dirty","taskMode","_assign_project_dates","getSubtaskDuration","has_changed","oldStart","oldEnd","upper","lower","colIndex","steps","_is_chart_visible","_get_type_name","type_value","_lightbox_methods","_lightbox_template","getLightbox","_center_lightbox","showCover","_fill_lightbox","_get_timepicker_step","getLabel","_get_typed_lightbox_config","options","updateCollection","list_name","resetLightbox","getLightboxType","_lightbox_type","_lightbox","_is_lightbox_timepicker","wide_form","onmousedown","_ready_to_dnd","onselectstart","cursor","_init_dnd_events","sns","_render_sections","ds","t_ds","labelBlock","inputBlock","nextSibling","inputId","resizeLightbox","_init_lightbox_events","block","form_blocks","con","lightbox_additional_height","scroll_top","scroll_left","view_height","_cover","_document_height","_scroll_height","lightbox_events","_save_lightbox","$click","hideLightbox","_cancel_lightbox","sec","button_click","previousSibling","buttonTarget","getLightboxValues","_resolve_default_mapping","mapping","time_optional","duration_optional","get_value","hideCover","_custom_lightbox","_set_lightbox_values","lightbox_header","default_value","set_value","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","_focus","getTimePicker","time_format","_time_format_order","dt","limit_time_select","last_hour","first_hour","start_year","end_year","year_range","tdate","_time_values","_fill_lightbox_select","map","_get_input","_dhx_onchange","onchange","_time_format_size","auto_end_date","_update_lightbox_select","mapped_fields","singleDate","_calc_date","_get_start_date","_get_duration","endspan","_change_duration","inps","btns","charCode","duration_val","_filter","_display","allow_root","root_label","tmpDom","newOptions","onselect","_silent_redraw_lightbox","oldType","formData","updTask","_extend_to_optional","lightbox_block","optional_time","disable","enable","disabled","update_block","button_text","activate","_cached_functions","update_if_changed","active","critical_path_mode","wrap_methods","_prefetch_originals","prefetch","methodname","optimizer","argumentsArray","get_arguments_hash","cached_values","has_cached_value","get_cached_value","cache_value","arguments_hash","is_date","stringify_argument","deactivate","setup","override_gantt","gantt_methods","deactivTimeout","_configure","_get_skin","skin","href","skins","skinset","_second_column_width","_third_column_width","_redefine_lightbox_buttons","resetSkin","skyblue","meadow","terrace","broadway","_config_buttons_left","_config_buttons_right","material","indx","getTaskDND","touch_feedback","touch_feedback_duration","vibrate","_touch_events","touchHandlers","names","block_action","cloneTaskRendered","current_target","scroll_state","dblclicktime","action_mode","scroll_mode","action_start","long_tap_timer","new_scroll_state","_locate_css","_touch_drag","day_full","day_short","icon_details","icon_edit","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_wbs","column_text","column_start_date","column_add","type_task","type_project","type_milestone","weeks","resizeDelay","_reinit","edit","confirm_deleting_title","_scroll_state","x_pos","y_pos","x_inner","y_inner","oldV","oldH","newV","newH","date_x","scroll_to","visible_date","new_pos","setSizes","scrollVer","scrollHor","horState","verState","targetAttribute","_locateHTML","getTaskRowNode","changeLightboxType","prevOffset","time_unit","offsetChanged","check","deprecated","badCode","goodCode","formatting","log","warn","dhtmlxMethods","dynMethods"],"mappings":"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","file":"dhtmlxgantt.js","sourcesContent":["/*!\n * @license\n * \n * dhtmlxGantt v.5.1.0 Stardard\n * This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited.\n * \n * (c) Dinamenta, UAB.\n * \n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 20);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dateHelper = __webpack_require__(3);\n\nfunction copy(object) {\n\tvar i, t, result; // iterator, types array, result\n\n\tif (object && typeof object == \"object\") {\n\t\tresult = {};\n\t\tt = [Array,Number,String,Boolean];\n\t\tfor (i=0; i= 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 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\tif(strict === undefined)\n\t\tstrict = true;\n\n\tvar trg = getTargetNode(e);\n\tvar css = '';\n\tvar test = false;\n\twhile (trg){\n\t\tcss = getClassName(trg);\n\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\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\tif (ev.pageX || ev.pageY)\n\t\tvar pos = {x: ev.pageX, y: ev.pageY};\n\n\tvar d = document.documentElement;\n\tvar pos = {\n\t\tx: ev.clientX + d.scrollLeft - d.clientLeft,\n\t\ty: ev.clientY + d.scrollTop - d.clientTop\n\t};\n\n\tvar box = elementPosition(node);\n\tpos.x = pos.x - box.x + node.scrollLeft;\n\tpos.y = pos.y - box.y + node.scrollTop;\n\treturn pos;\n}\n\n\nfunction isChildOf(child, parent){\n\twhile(child && child != parent) {\n\t\tchild = child.parentNode;\n\t}\n\treturn child == parent;\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};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nvar 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\teventHost[list[0]].removeEvent(list[1]); //remove event\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;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nfunction isDate(obj) {\n\tvar fields = [\n\t\t\"getFullYear\",\n\t\t\"getMonth\",\n\t\t\"getDate\"\n\t];\n\t\n\tif (obj && typeof obj == \"object\") {\n\t\tfor (var i=0; i 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\tvar self = this;\n\n\t\tif(!this.$preResize){\n\t\t//\tself.callEvent(\"onResize\", [x, y]);\n\t\t}\n\t\tthis.$preResize = false;\n\t};\n\n\tCell.prototype.hide = function () {\n\t\tthis._hide(true);\n\t\tthis.resize();\n\t};\n\tCell.prototype.show = function (force) {\n\t\tthis._hide(false);\n\t\tif (force && this.$parent) {\n\t\t\tthis.$parent.show();\n\t\t}\n\t\tthis.resize();\n\t};\n\tCell.prototype._hide = function (mode) {\n\t\tif (mode === true && this.$view.parentNode) {\n\t\t\tthis.$view.parentNode.removeChild(this.$view);\n\t\t}\n\t\telse if (mode === false && !this.$view.parentNode) {\n\t\t\tvar index = this.$parent.cellIndex(this.$id);\n\t\t\tthis.$parent.moveView(this, index);\n\t\t}\n\t\tthis.$config.hidden = mode;\n\t};\n\tCell.prototype.$toHTML = function (content, css) {\n\t\tif (content === void 0) { content = \"\"; }\n\t\tcss = [(css || \"\"), (this.$config.css || \"\")].join(\" \");\n\t\tvar obj = this.$config;\n\t\tvar header = \"\";\n\t\tif (obj.raw) {\n\t\t\tcontent = typeof obj.raw === \"string\" ? obj.raw : \"\";\n\t\t}\n\t\telse {\n\t\t\tif (!content) {\n\t\t\t\tcontent = \"
\" + (obj.html || \"\") + \"
\";\n\t\t\t}\n\t\t\tif (obj.header) {\n\t\t\t\tvar collapseIcon = obj.canCollapse ? \"
\" : \"\";\n\t\t\t\theader = \"
\" + collapseIcon + \"
\" + obj.header + \"
\";\n\t\t\t}\n\t\t}\n\t\treturn \"
\" + header + content + \"
\";\n\t};\n\tCell.prototype.$fill = function (node, parent) {\n\t\tthis.$view = node;\n\t\tthis.$parent = parent;\n\t\tthis.init();\n\t};\n\tCell.prototype.getNode = function () {\n\t\treturn (this.$view.querySelector(\"gantt_layout_cell\") || this.$view);\n\t};\n\tCell.prototype.init = function () {\n\t\t// [NOT-GOOD] code is executed for each component, while it still has only one handler, it is no good\n\n\t\tvar self = this;\n\n\t\tthis._headerClickHandler = function(e){\n\t\t\tvar cellId = domHelpers.locateAttribute(e, \"data-cell-id\");\n\t\t\tif(cellId == self.$id){\n\t\t\t\tself.toggle();\n\t\t\t}\n\t\t};\n\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\n\t\tmouse.delegate(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\n\n\t\tthis.callEvent(\"onReady\", []);\n\t};\n\tCell.prototype.toggle = function () {\n\t\tthis.$config.collapsed = !this.$config.collapsed;\n\t\tthis.resize();\n\t};\n\tCell.prototype.getSize = function () {\n\t\tvar size = {\n\t\t\theight: this.$config.height || 0,\n\t\t\twidth: this.$config.width || 0,\n\t\t\tgravity: this.$config.gravity || 1,\n\t\t\tminHeight: this.$config.minHeight || 0,\n\t\t\tminWidth: this.$config.minWidth || 0,\n\t\t\tmaxHeight: this.$config.maxHeight || 100000,\n\t\t\tmaxWidth: this.$config.maxWidth || 100000\n\t\t};\n\t\tif (this.$config.collapsed) {\n\t\t\tvar mode = this.$config.mode === \"x\";\n\t\t\tsize[mode ? \"width\" : \"height\"] = size[mode ? \"maxWidth\" : \"maxHeight\"] = this.$config.headerHeight;\n\t\t}\n\t\treturn size;\n\t};\n\n\tCell.prototype.getContentSize = function(){\n\n\t\tvar width = this.$lastSize.contentX;\n\t\tif(width !== width*1){\n\t\t\twidth = this.$lastSize.width;\n\t\t}\n\n\t\tvar height = this.$lastSize.contentY;\n\t\tif(height !== height*1){\n\t\t\theight = this.$lastSize.height;\n\t\t}\n\n\t\treturn {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t};\n\n\tCell.prototype._getBorderSizes = function(){\n\t\tvar borders = {\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft: 0,\n\t\t\thorizontal: 0,\n\t\t\tvertical: 0\n\t\t};\n\t\tif(this._currentBorders){\n\t\t\tif(this._currentBorders[this._borders.left]){\n\t\t\t\tborders.left = 1;\n\t\t\t\tborders.horizontal++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.right]){\n\t\t\t\tborders.right = 1;\n\t\t\t\tborders.horizontal++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.top]){\n\t\t\t\tborders.top = 1;\n\t\t\t\tborders.vertical++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.bottom]){\n\t\t\t\tborders.bottom = 1;\n\t\t\t\tborders.vertical++;\n\t\t\t}\n\t\t}\n\n\t\treturn borders;\n\n\t};\n\n\tCell.prototype.setSize = function (x, y) {\n\t\tthis.$view.style.width = x + \"px\";\n\t\tthis.$view.style.height = y + \"px\";\n\n\t\tvar borders = this._getBorderSizes();\n\t\tvar contentY = y - borders.vertical;\n\t\tvar contentX = x - borders.horizontal;\n\n\t\tthis.$lastSize = { x: x, y: y, contentX: contentX, contentY: contentY };\n\t\tif (this.$config.header) {\n\t\t\tthis._sizeHeader();\n\t\t}else{\n\t\t\tthis._sizeContent();\n\t\t}\n\t};\n\n\tCell.prototype._borders = {\n\t\t\"left\":\"gantt_layout_cell_border_left\",\n\t\t\"right\":\"gantt_layout_cell_border_right\",\n\t\t\"top\":\"gantt_layout_cell_border_top\",\n\t\t\"bottom\":\"gantt_layout_cell_border_bottom\"\n\t};\n\n\tCell.prototype._setBorders = function(css, view){\n\t\tif(!view) {\n\t\t\tview = this;\n\t\t}\n\t\tvar node = view.$view;\n\n\t\tfor( var i in this._borders){\n\t\t\tdomHelpers.removeClassName(node, this._borders[i]);\n\t\t}\n\n\t\tif(typeof css == \"string\"){\n\t\t\tcss = [css];\n\t\t}\n\n\t\tvar cssHash = {};\n\n\t\tfor(var i = 0; i < css.length; i++){\n\t\t\tdomHelpers.addClassName(node, css[i]);\n\t\t\tcssHash[css[i]] = true;\n\t\t}\n\n\t\tview._currentBorders = cssHash;\n\t};\n\n\n\tCell.prototype._sizeContent = function(){\n\t\tvar content = this.$view.childNodes[0];\n\t\tif(content.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\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nvar 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] || unit.hour;\n}\n\nfunction forEach(arr, callback){\n\tvar workArray = arr.slice();\n\tfor(var i = 0; i < workArray.length; i++){\n\t\tcallback(workArray[i], i);\n\t}\n}\n\nfunction arrayMap(arr, callback){\n\tvar workArray = arr.slice();\n\tvar resArray = [];\n\n\tfor(var i = 0; i < workArray.length; i++){\n\t\tresArray.push(callback(workArray[i], i));\n\t}\n\n\treturn resArray;\n}\n\nmodule.exports = {\n\tgetSecondsInUnit: getSecondsInUnit,\n\tforEach: forEach,\n\tarrayMap: arrayMap\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nvar 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;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\nfunction 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;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nfunction 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;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\n\nfunction createScope(addEvent, removeEvent){\n\taddEvent = addEvent || utils.event;\n\tremoveEvent = removeEvent || utils.eventRemove;\n\n\tvar handlers = [];\n\n\treturn {\n\t\tattach: function(el, event, handler, capture){\n\t\t\thandlers.push({element: el, event:event, callback: handler, capture: capture});\n\t\t\taddEvent(el, event, handler, capture);\n\t\t},\n\t\tdetach: function(el, event, handler, capture){\n\t\t\tremoveEvent(el, event, handler, 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 === handler && 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\tfor(var i = 0; i < handlers.length; i++){\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, handlers[i].capture);\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, undefined);\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, false);\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, true);\n\t\t\t}\n\t\t\thandlers = [];\n\t\t},\n\t\textend: function(){\n\t\t\treturn createScope(this.event, this.eventRemove);\n\t\t}\n\t};\n}\n\nmodule.exports = createScope;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __extends = __webpack_require__(5),\n\tdomHelpers = __webpack_require__(1),\n\tutils = __webpack_require__(0),\n\tCell = __webpack_require__(4);\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.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\t/*if(this.$root && !this._updatingScrollbars){\n\t\t\tthis._updatingScrollbars = true;\n\t\t\teachCell(function(cell){\n\t\t\t\tif(cell.$content && cell.$content.$name == \"scroller\"){\n\t\t\t\t\tcell.$content.toggleVisibility();\n\t\t\t\t}\n\t\t\t}, this);\n\t\t\tthis._updatingScrollbars = false;\n\t\t}*/\n\n\t};\n\n\tfunction eachCell(code, root){\n\t\tif(root.$cells){\n\t\t\tfor(var i = 0; i < root.$cells.length; i++){\n\t\t\t\tcode(root.$cells[i]);\n\t\t\t\teachCell(code, root.$cells[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\n\treturn Layout;\n}(Cell));\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ScaleHelper = __webpack_require__(13);\nvar eventable = __webpack_require__(2);\nvar utils = __webpack_require__(0);\n\nvar canvasRender = __webpack_require__(43);\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\teventable(this);\n};\n\nTimeline.prototype = {\n\tinit: function(container){\n\t\tcontainer.innerHTML += \"
\";\n\t\tthis.$task = container.childNodes[0];\n\n\t\tthis.$task.innerHTML = \"
\";\n\t\tthis.$task_scale = this.$task.childNodes[0];\n\n\t\tthis.$task_data = this.$task.childNodes[1];\n\t\tthis.$task_data.innerHTML = \"
\";\n\t\tthis.$task_bg = this.$task_data.childNodes[0];\n\t\tthis.$task_links = this.$task_data.childNodes[1];\n\t\tthis.$task_bars = this.$task_data.childNodes[2];\n\n\t\tthis._tasks = {\n\t\t\tcol_width: 0,\n\t\t\twidth: [], // width of each column\n\t\t\tfull_width: 0, // width of all columns\n\t\t\ttrace_x: [],\n\t\t\trendered: {}\n\t\t};\n\n\t\tvar config = this.$getConfig();\n\t\tvar attr = config[this.$config.bind + \"_attribute\"];\n\t\tvar linksAttr = config[this.$config.bindLinks + \"_attribute\"];\n\t\tif(!attr && this.$config.bind){\n\t\t\tattr = this.$config.bind + \"_id\";\n\t\t}\n\t\tif(!linksAttr && this.$config.bindLinks){\n\t\t\tlinksAttr = this.$config.bindLinks + \"_id\";\n\t\t}\n\t\tthis.$config.item_attribute = attr || null;\n\t\tthis.$config.link_attribute = linksAttr || null;\n\n\t\tvar layers = this._createLayerConfig();\n\t\tif(!this.$config.layers){\n\t\t\tthis.$config.layers = layers.tasks;\n\t\t}\n\t\tif(!this.$config.linkLayers){\n\t\t\tthis.$config.linkLayers = layers.links;\n\t\t}\n\n\t\tthis._attachLayers(this.$gantt);\n\t\tthis.callEvent(\"onReady\", []);\n\t\t//this.refresh();\n\t},\n\n\tsetSize: function(width, height){\n\t\tvar config = this.$getConfig();\n\n\t\tif(width*1 === width){\n\t\t\tthis.$config.width = width;\n\t\t}\n\t\tif(height*1 === height){\n\n\t\t\tthis.$config.height = height;\n\t\t\tvar dataHeight = Math.max(this.$config.height - config.scale_height);\n\t\t\tthis.$task_data.style.height = dataHeight + 'px';\n\t\t}\n\n\t\tthis.refresh();\n\t\tthis.$task_bg.style.backgroundImage = \"\";\n\n\t\tif(config.smart_rendering && this.$config.rowStore){\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tthis.$task_bg.style.height = config.row_height * store.countVisible() +\"px\";\n\t\t}else{\n\t\t\tthis.$task_bg.style.height = \"\";\n\t\t}\n\n\t\tvar scale = this._tasks;\n\t\t//timeline area layers\n\t\tvar data_els = this.$task_data.childNodes;\n\t\tfor(var i= 0, len = data_els.length; i < len; i++){\n\t\t\tvar el = data_els[i];\n\t\t\tif(el.hasAttribute(\"data-layer\") && el.style)\n\t\t\t\tel.style.width = scale.full_width + \"px\";\n\t\t}\n\t},\n\n\tisVisible: function(){\n\t\tif(this.$parent && this.$parent.$config){\n\t\t\treturn !this.$parent.$config.hidden;\n\t\t}else{\n\t\t\treturn this.$task.offsetWidth;\n\t\t}\n\t},\n\n\tgetSize: function(){\n\t\tvar config = this.$getConfig();\n\t\tvar store = this.$config.rowStore;\n\n\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0,\n\t\t\tcontentWidth = this._tasks.full_width;\n\n\t\treturn {\n\t\t\tx: this.$config.width,\n\t\t\ty: this.$config.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\t},\n\n\tscrollTo: function(left, top){\n\t\tif(!this.isVisible())\n\t\t\treturn;\n\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}\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}\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 x = this.$config.scrollLeft;\n\t\tvar width = this.$config.width;\n\n\t\tvar scales = this._scales;\n\t\tthis.$task_scale.innerHTML = this._getScaleChunkHtml(scales, x, x + width);\n\t},\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.taskBg,\n\t\t\t\tcontainer: this.$task_bg,\n\t\t\t\tfilter: [\n\t\t\t\t\tfunction(){\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\tself.$config.rowStore = self.$gantt.getDatastore(self.$config.bind);\n\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\"){\n\t\t\t\t\tlayer = {renderer: layer};\n\t\t\t\t}\n\n\t\t\t\tlayer.host = this;\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.host = this;\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\tif (store) {\n\t\t\t\t\tstaticRender.render(self.$task_bg, config, self.getScale(), config.row_height * store.countVisible());\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\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\tfor(var i = 0; i < this._taskLayers.length; i++){\n\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\n\t\t}\n\t\tfor(var i = 0; i < this._linkLayers.length; i++){\n\t\t\tlinkRenderer.removeLayer(this._linkLayers[i]);\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\n\t\t\tscales_html = this._getScaleChunkHtml(cfgs, 0, this.$config.width);\n\n\t\t\touter_width = cfg.full_width + \"px\";//cfg.full_width + (this._scroll_sizes().y ? scrollSizes.scroll_size : 0) + \"px\";\n\t\t\tscale_height += \"px\";\n\t\t}\n\n\t\tthis.$task_scale.style.height = scale_height;\n\n\t\tthis.$task_data.style.width =\n\t\t\tthis.$task_scale.style.width = outer_width;\n\n\t\tthis.$task_scale.innerHTML = scales_html;\n\n\t},\n\n\t_getScaleChunkHtml: function _get_scale_chunk_html (scales, fromPos, toPos) {\n\t\tvar templates = this.$gantt.$services.templates();\n\t\tvar html = [];\n\n\t\tvar css = templates.scale_row_class;\n\t\tfor (var i = 0; i < scales.length; i++) {\n\t\t\tvar cssClass = \"gantt_scale_line\";\n\t\t\tvar tplClass = css(scales[i]);\n\t\t\tif (tplClass) {\n\t\t\t\tcssClass += \" \" + tplClass;\n\t\t\t}\n\n\t\t\thtml.push(\"
\" + this._prepareScaleHtml(scales[i], fromPos, toPos) + \"
\");\n\t\t}\n\n\t\treturn html.join(\"\");\n\t},\n\t_prepareScaleHtml: function _prepare_scale_html(config, fromPos, toPos) {\n\t\tvar globalConfig = this.$getConfig();\n\t\tvar globalTemplates = this.$gantt.$services.templates();\n\n\t\tvar cells = [];\n\t\tvar date = null, content = null, css = null;\n\n\t\tif (config.template || config.date) {\n\t\t\tcontent = config.template || this.$gantt.date.date_to_str(config.date);\n\t\t}\n\n\t\tvar startIndex = 0,\n\t\t\tendIndex = config.count;\n\n\t\tif (globalConfig.smart_scales && (!isNaN(fromPos) && !isNaN(toPos))) {\n\t\t\tstartIndex = _findBinary(config.left, fromPos);\n\t\t\tendIndex = _findBinary(config.left, toPos) + 1;\n\t\t}\n\n\t\tcss = config.css || function () {\n\t\t\t};\n\t\tif (!config.css && globalConfig.inherit_scale_class) {\n\t\t\tcss = globalTemplates.scale_cell_class;\n\t\t}\n\n\t\tfor (var i = startIndex; i < endIndex; i++) {\n\t\t\tif (!config.trace_x[i]) break;\n\n\t\t\tdate = new Date(config.trace_x[i]);\n\t\t\tvar value = content.call(this, date),\n\t\t\t\twidth = config.width[i],\n\t\t\t\theight = config.height,\n\t\t\t\tleft = config.left[i],\n\t\t\t\tstyle = \"\",\n\t\t\t\ttemplate = \"\",\n\t\t\t\tcssclass = \"\";\n\n\t\t\tif (width) {\n\t\t\t\tvar position = globalConfig.smart_scales ? (\"position:absolute;left:\" + left + \"px\") : \"\";\n\n\t\t\t\tstyle = \"width:\" + (width) + \"px;height:\" + height + \"px;\" + position;\n\t\t\t\tcssclass = \"gantt_scale_cell\" + (i == config.count - 1 ? \" gantt_last_cell\" : \"\");\n\n\t\t\t\ttemplate = css.call(this, date);\n\t\t\t\tif (template) cssclass += \" \" + template;\n\n\t\t\t\tvar ariaAttr = this.$gantt._waiAria.getTimelineCellAttr(value);\n\t\t\t\tvar cell = \"
\" + value + \"
\";\n\t\t\t\tcells.push(cell);\n\t\t\t} else {\n\t\t\t\t//do not render ignored cells\n\t\t\t}\n\n\t\t}\n\t\treturn cells.join(\"\");\n\t},\n\tdateFromPos: function dateFromPos(x) {\n\t\tvar scale = this._tasks;\n\t\tif (x < 0 || x > scale.full_width || !scale.full_width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar ind = _findBinary(this._tasks.left, x);\n\t\tvar summ = this._tasks.left[ind];\n\n\t\tvar col_width = scale.width[ind] || scale.col_width;\n\t\tvar part = 0;\n\t\tif (col_width) {\n\t\t\tpart = (x - summ) / col_width;\n\t\t\tif(scale.rtl){\n\t\t\t\tpart = 1 - part;\n\t\t\t}\n\n\t\t}\n\n\t\tvar unit = 0;\n\t\tif (part) {\n\t\t\tunit = this._getColumnDuration(scale, scale.trace_x[ind]);\n\t\t}\n\n\t\tvar date = new Date(scale.trace_x[ind].valueOf() + Math.round(part * unit));\n\t\treturn date;\n\t},\n\tposFromDate: function posFromDate(date) {\n\t\tif (!this.isVisible())\n\t\t\treturn 0;\n\n\t\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\t\treturn Math.round(pos);\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\t/*var day = null;\n\t\t for (var xind = 0, length = days.length-1; xind < length; xind++) {\n\t\t // | 8:00, 8:30 | 8:15 should be checked against 8:30\n\t\t // clicking at the most left part of the cell, say 8:30 should create event in that cell, not previous one\n\t\t day = +days[xind+1];\n\t\t if (pos < day && !ignores[day])\n\t\t break;\n\t\t }*/\n\n\t\tvar day_ind = _findBinary(days, pos);\n\t\tvar day = +days[day_ind];\n\t\twhile (ignores[day]) {\n\t\t\tday = days[++day_ind];\n\t\t}\n\n\t\tvar transition = this._tasks.trace_index_transition;\n\t\tvar index = day_ind;\n\t\tif(!day){\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[day_ind]) / this._getColumnDuration(this._tasks, days[day_ind]));\n\t\tif(transition){\n\t\t\treturn transition[index] + (1 - part);\n\t\t}else{\n\t\t\treturn index + part;\n\t\t}\n\n\t\t//return day_ind + ((date - days[day_ind]) / this._getColumnDuration(this._tasks, days[day_ind]));\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\tgetRowTop: function(index){\n\t\treturn index * this.$getConfig().row_height;\n\t},\n\n\tgetItemTop: function (task_id) {\n\t\tif(this.$config.rowStore){\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tif(!store) return 0;\n\n\t\t\treturn store.getIndexById(task_id) * this.$getConfig().row_height;\n\n\t\t}else{\n\t\t\treturn 0;\n\t\t}\n\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()].concat(config.subscales);\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\n\trefresh: function(){\n\t\tif(this.$config.bind) {\n\t\t\tthis.$config.rowStore = this.$gantt.getDatastore(this.$config.bind);\n\t\t}\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._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\n\t\tthis.$task = null;\n\t\tthis.$task_scale = null;\n\t\tthis.$task_data = null;\n\t\tthis.$task_bg = null;\n\t\tthis.$task_links = null;\n\t\tthis.$task_bars = null;\n\n\t\tthis.$gantt = null;\n\n\t\tif(this.$config.rowStore){\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\n\t\t\tthis.$config.rowStore = null;\n\t\t}\n\t\tif(this.$config.linkStore){\n\t\t\tthis.$config.linkStore = null;\n\t\t}\n\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\n\t}\n};\n\nmodule.exports = Timeline;\n\nfunction _findBinary(array, target) {\n\t// modified binary search, target value not exactly match array elements, looking for closest one\n\n\tvar low = 0, high = array.length - 1, i, item, prev;\n\twhile (low <= high) {\n\n\t\ti = Math.floor((low + high) / 2);\n\t\titem = +array[i];\n\t\tprev = +array[i - 1];\n\t\tif (item < target) {\n\t\t\tlow = i + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (item > target) {\n\t\t\tif (!(!isNaN(prev) && prev < target)) {\n\t\t\t\thigh = i - 1;\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// if target is between 'i' and 'i-1' return 'i - 1'\n\t\t\t\treturn i - 1;\n\t\t\t}\n\n\t\t}\n\t\twhile (+array[i] == +array[i + 1]) i++;\n\n\t\treturn i;\n\t}\n\treturn array.length - 1;\n}\n\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\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\tvar shared = 0;\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\tshared += share;\n\t\t\t}\n\t\t\tparts[parts.length - 1] += width;\n\t\t\t//parts[parts.length - 1] += width - shared;\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\tprimaryScale: function () {\n\n\t\t\tvar config = services.getService(\"templateLoader\");\n\t\t\tconfig.initTemplate(\"date_scale\", undefined, undefined, services.config(), services.templates());\n\n\t\t\treturn {\n\t\t\t\tunit: services.config().scale_unit,\n\t\t\t\tstep: services.config().step,\n\t\t\t\ttemplate: services.templates().date_scale,\n\t\t\t\tdate: services.config().date_scale,\n\t\t\t\tcss: services.templates().scale_cell_class\n\t\t\t};\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\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar domHelpers = __webpack_require__(1),\n\tutils = __webpack_require__(0),\n\teventable = __webpack_require__(2),\n\tgridResize = __webpack_require__(44);\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};\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\t\tcontainer.innerHTML = \"
\";\n\t\tthis.$grid = container.childNodes[0];\n\n\t\tthis.$grid.innerHTML = \"
\";\n\n\t\tthis.$grid_scale = this.$grid.childNodes[0];\n\t\tthis.$grid_data = this.$grid.childNodes[1];\n\n\t\tvar attr = this.$getConfig()[this.$config.bind + \"_attribute\"];\n\t\tif(!attr && this.$config.bind){\n\t\t\tattr = this.$config.bind + \"_id\";\n\t\t}\n\t\tthis.$config.item_attribute = attr || null;\n\t\t\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 = __webpack_require__(8)(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\tsetSize: function(width, height){\n\t\tthis.$config.width = this.$state.width = width;\n\t\tthis.$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\tinnerWidth += columns[i].width*1;\n\t\t}\n\n\t\tvar outerWidth;\n\t\tif(isNaN(innerWidth) || !this.$config.scrollable){\n\t\t\touterWidth = this._setColumnsWidth(width + 1);\n\t\t\tinnerWidth = outerWidth;\n\t\t}\n\n\t\tif(this.$config.scrollable){\n\t\t\tthis.$grid_scale.style.width = innerWidth + \"px\";\n\t\t\tthis.$grid_data.style.width = innerWidth + \"px\";\n\t\t}else{\n\t\t\tthis.$grid_scale.style.width = \"inherit\";\n\t\t\tthis.$grid_data.style.width = \"inherit\";\n\t\t}\n\t\tthis.$config.width -= 1;\n\n\t\tvar config = this.$getConfig();\n\t\tif(outerWidth !== width){\n\t\t\tconfig.grid_width = outerWidth;\n\t\t\tthis.$config.width = outerWidth - 1;\n\t\t}\n\n\t\tvar dataHeight = Math.max(this.$state.height - config.scale_height, 0);\n\t\tthis.$grid_data.style.height = dataHeight + \"px\";\n\t\tthis.refresh();\n\t},\n\tgetSize: function(){\n\n\t\tvar config = this.$getConfig();\n\n\t\tvar store = this.$config.rowStore;\n\n\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0,\n\t\t\tcontentWidth = this._getGridWidth();\n\n\t\tvar size = {\n\t\t\tx: this.$state.width,\n\t\t\ty: this.$state.height,\n\t\t\tcontentX: this.isVisible() ? contentWidth: 0,\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\n\t\t\tscrollHeight: this.isVisible() ? contentHeight: 0,\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\n\t\t};\n\n\t\treturn size;\n\t},\n\trefresh: function(){\n\t\tif(this.$config.bind)\n\t\t\tthis.$config.rowStore = this.$gantt.getDatastore(this.$config.bind);\n\n\t\tthis._initSmartRenderingPlaceholder();\n\n\t\tthis._calculateGridWidth();\n\t\tthis._renderGridHeader();\n\t},\n\tscrollTo: function(left, top){\n\t\tif(!this.isVisible())\n\t\t\treturn;\n\n\t\tif (left*1 == left){\n\t\t\tthis.$state.scrollLeft = this.$grid.scrollLeft = left;\n\t\t}\n\n\t\t// var config = this.$getConfig();\n\t\tif(top*1 == top){\n\t\t\tthis.$state.scrollTop = this.$grid_data.scrollTop = top;\n\t\t}\n\t},\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\tgetItemTop: function(id){\n\t\tif(this.$config.rowStore){\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tif(!store) return 0;\n\n\t\t\treturn store.getIndexById(id) * this.$getConfig().row_height;\n\n\t\t}else{\n\t\t\treturn 0;\n\t\t}\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.host = this;\n\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\n\t\t\tthis._taskLayers.push(bar_layer);\n\t\t}\n\n\t\tif(this.$config.bind)\n\t\t\tthis.$config.rowStore = this.$gantt.getDatastore(this.$config.bind);\n\n\t\tthis._initSmartRenderingPlaceholder();\n\t},\n\n\t_initSmartRenderingPlaceholder: function(){\n\t\tvar self = this;\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\", 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.smart_rendering) {\n\t\t\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0;\n\t\t\t\tif(contentHeight){\n\t\t\t\t\tif(self.$rowsPlaceholder && self.$rowsPlaceholder.parentNode){\n\t\t\t\t\t\tself.$rowsPlaceholder.parentNode.removeChild(self.$rowsPlaceholder);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar placeholder = self.$rowsPlaceholder = document.createElement(\"div\");\n\t\t\t\t\tplaceholder.style.visibility = \"hidden\";\n\t\t\t\t\tplaceholder.style.height = contentHeight + \"px\";\n\t\t\t\t\tplaceholder.style.width = \"1px\";\n\t\t\t\t\tself.$grid_data.appendChild(placeholder);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t_initEvents: function(){\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\tfor(var i = 0; i < this._taskLayers.length; i++){\n\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\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\t\tfor (var i=0; i 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 -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\t\t\t\t\t\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, this.$config.height);\n//\t\t\t\tthis.$parent.$config.width = cols_width;\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_renderGridHeader: function(){\n\t\tvar gantt = this.$gantt;\n\t\tvar config = this.$getConfig();\n\t\tvar locale = this.$gantt.locale;\n\t\tvar templates = this.$gantt.templates;\n\n\t\tvar columns = this.getGridColumns();\n\t\tif(config.rtl){\n\t\t\tcolumns = columns.reverse();\n\t\t}\n\t\tvar cells = [];\n\t\tvar width = 0,\n\t\t\tlabels = locale.labels;\n\n\t\tvar lineHeigth = config.scale_height - 1;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar last = i == columns.length - 1;\n\t\t\tvar col = columns[i];\n\n\t\t\t// ensure columns have non-empty names\n\t\t\tif (!col.name) {\n\t\t\t\tcol.name = gantt.uid() + \"\";\n\t\t\t}\n\n\t\t\tvar colWidth = col.width * 1;\n\n\t\t\tvar gridWidth = this._getGridWidth();\n\t\t\tif (last && gridWidth > width + colWidth)\n\t\t\t\tcol.width = colWidth = gridWidth - width;\n\t\t\twidth += colWidth;\n\t\t\tvar sort = (gantt._sort && col.name == gantt._sort.name) ? (\"
\") : \"\";\n\t\t\tvar cssClass = [\"gantt_grid_head_cell\",\n\t\t\t\t(\"gantt_grid_head_\" + col.name),\n\t\t\t\t(last ? \"gantt_last_cell\" : \"\"),\n\t\t\t\ttemplates.grid_header_class(col.name, col)].join(\" \");\n\n\t\t\tvar style = \"width:\" + (colWidth - (last ? 1 : 0)) + \"px;\";\n\t\t\tvar label = (col.label || labels[\"column_\" + col.name]);\n\t\t\tlabel = label || \"\";\n\n\t\t\tvar ariaAttrs = gantt._waiAria.gridScaleCellAttrString(col, label);\n\n\t\t\tvar cell = \"
\" + label + sort + \"
\";\n\t\t\tcells.push(cell);\n\t\t}\n\t\tthis.$grid_scale.style.height = (config.scale_height) + \"px\";\n\t\tthis.$grid_scale.style.lineHeight = lineHeigth + \"px\";\n\t\t//this.$grid_scale.style.width = \"inherit\";\n\t\tthis.$grid_scale.innerHTML = cells.join(\"\");\n\n\t\tif(this._renderHeaderResizers){\n\t\t\tthis._renderHeaderResizers();\n\t\t}\n\t},\n\n\t_getGridWidth: function(){\n\t\t// TODO: refactor/remove/comment some of _getGridWidth/this.$config.width/this.$state.width, it's not clear what they do\n\t\treturn this.$config.width;\n\t},\n\n\tdestructor: function(){\n\t\tthis._clearLayers(this.$gantt);\n\t\tthis._mouseDelegates.destructor();\n\t\tthis._mouseDelegates = null;\n\t\tthis.$grid = null;\n\t\tthis.$grid_scale = null;\n\t\tthis.$grid_data = null;\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\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\t}\n};\n\nmodule.exports = Grid;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar powerArray = __webpack_require__(16);\nvar utils = __webpack_require__(0);\nvar eventable = __webpack_require__(2);\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\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(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\tloaded.push(item);\n\t\t\t\t}\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(){ this.$insertAt(item.id,index);});\n\t\t}\n\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\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] = this._searchVisibleOrder[oldId];\n\t\tdelete this._searchVisibleOrder[oldId];\n\n\t\t//this.visibleOrder[this.visibleOrder.$find(oldId)]=newId;\n\t\tdelete this.pull[oldId];\n\t},\n\tchangeId: function(oldId, newId){\n\t\tthis._changeIdInner(oldId, newId);\n\n\t\tthis.callEvent(\"onIdChange\", [oldId, newId]);\n\n\t},\n\texists: function(id){\n\t\treturn !!(this.pull[id]);\n\t},\n\n\t_moveInner: function(sindex, tindex){\n\t\tvar id = this.getIdByIndex(sindex);\n\n\t\tthis._updateOrder(function(){\n\t\t\tthis.$removeAt(sindex);\n\t\t\tthis.$insertAt(id,Math.min(this.length, tindex));\n\t\t});\n\t\t//this.visibleOrder.$removeAt(sindex);\t//remove at old position\n\t\t//if (sindex=0 && tindex>=0, \"DataStore::move\",\"Incorrect indexes\");\n\n\t\tvar id = this.getIdByIndex(sindex);\n\t\tvar obj = this.getItem(id);\n\t\tthis._moveInner(sindex, tindex);\n\n\n\t\tif (!this._skip_refresh) {\n\t\t\t//repaint signal\n\t\t\tthis.callEvent(\"onStoreUpdated\", [obj.id, obj, \"move\"]);\n\t\t}\n\t},\n\tclearAll: function(){\n\t\tthis.pull = {};\n\t\tthis.visibleOrder = powerArray.$create();\n\t\tthis.fullOrder = powerArray.$create();\n\t\tif (this._skip_refresh) return;\n\t\tthis.callEvent(\"onClearAll\",[]);\n\t\tthis.refresh();\n\t},\n\n\tsilent:function(code, master){\n\t\tthis._skip_refresh = true;\n\t\tcode.call(master||this);\n\t\tthis._skip_refresh = false;\n\t},\n\n\tarraysEqual: function (arr1, arr2) {\n\t\tif(arr1.length !== arr2.length)\n\t\t\treturn false;\n\t\tfor(var i = 0; i < arr1.length; i++) {\n\t\t\tif(arr1[i] !== arr2[i])\n\t\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\trefresh: function(id, quick){\n\t\tif (this._skip_refresh) return;\n\n\t\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\tthis.callEvent(\"onStoreUpdated\",[id, this.pull[id], \"paint\"]);\n\t\telse\n\t\t\tthis.callEvent(\"onStoreUpdated\",[null,null,null]);\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=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=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime()+\"=1\";\n\t\t\t}\n\n\t\t\tt.open(method, url, async);\n\n\t\t\tif (headers){\n\t\t\t\tfor (var key in headers)\n\t\t\t\t\tt.setRequestHeader(key, headers[key]);\n\t\t\t} else if (method.toUpperCase() == \"POST\" || method == \"PUT\" || method == \"DELETE\") {\n\t\t\t\tt.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\t\t\t} else if (method == \"GET\") {\n\t\t\t\tpostData = null;\n\t\t\t}\n\n\t\t\tt.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n\n\t\t\tt.send(postData);\n\n\t\t\tif (!async) return {xmlDoc:t, filePath:url}; // dhtmlx-compat, response.xmlDoc.responseXML/responseText\n\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\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\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\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\", \"return \\\"\" + format + \"\\\";\");\n\n\t\t\treturn function (date) {\n\t\t\t\treturn dateToStr(date, dateHelper.to_fixed, gantt.locale, dateHelper.getISOWeek);\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\tif (!ndate) return false;\n\t\t\tvar nday = ndate.getDay();\n\t\t\tif (nday === 0) {\n\t\t\t\tnday = 7;\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\t\tgetUTCISOWeek: function (ndate) {\n\t\t\treturn this.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 (gantt.defined(format)) {\n\t\t\t\t\tif (typeof(format) == \"string\")\n\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\telse\n\t\t\t\t\t\tformat = gantt.templates.xml_date;\n\t\t\t\t}\n\t\t\t\tif (date)\n\t\t\t\t\tdate = format(date);\n\t\t\t\telse\n\t\t\t\t\tdate = null;\n\t\t\t}\n\t\t\treturn date;\n\t\t}\n\t};\n\treturn dateHelper;\n};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar eventable = __webpack_require__(2);\nvar utils = __webpack_require__(0);\nvar timeout = __webpack_require__(9);\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\tvar scroll = utils.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 (e && e.preventDefault) //Cancel default action on DND\n\t\t\t\t\te.preventDefault();\n\t\t\t\t(e || event).cancelBubble = true;\n\t\t\t\tif (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 true;\n\t\t\t\t}\n\t\t\t\treturn mousemove(e);\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\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\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;\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 true;\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\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 false;\n\t\t\t}\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\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\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\nmodule.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\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_date: date.str_to_date(c.xml_date, c.server_utc),\n\t\t\txml_format: d(c.xml_date, c.server_utc),\n\t\t\tapi_date: date.str_to_date(c.api_date),\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\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\ttask_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 \"
\";\n\t\t\t},\n\t\t\tgrid_folder: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tgrid_file: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tgrid_open: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tgrid_blank: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tdate_grid: function (date, item) {\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);\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_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 \"\" + from.text + \"\" + to.text + \"\";\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 = \"\" + from.text + \" \" + (from_start ? labels.link_start : labels.link_end) + \"
\";\n\t\t\t\tif (to) {\n\t\t\t\t\tto = gantt.getTask(to);\n\t\t\t\t\ttext += \" \" + to.text + \" \" + (to_start ? labels.link_start : labels.link_end) + \"
\";\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 \"Task: \" + event.text + \"
Start date: \" + gantt.templates.tooltip_date_format(start) + \"
End date: \" + 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};\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\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\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\nvar domHelpers = __webpack_require__(1);\n\nmodule.exports = function(gantt) {\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\t\tvar height = document.body.scrollHeight;\n\t\tmodality.cover.style.display = mode ? \"inline-block\" : \"none\";\n\t}\n\n\tfunction button(text, className, result) {\n\t\tvar buttonAriaAttrs = gantt._waiAria.messageButtonAttrString(text);\n\t\tvar name = className.toLowerCase().replace(/ /g, \"_\");\n\t\tvar button_css = \"gantt_\" + name + \"_button\" + \" dhtmlx_\" + name + \"_button\"; // dhtmlx_ok_button, dhtmlx_click_me_button\n\t\treturn \"
\" + text + \"
\";\n\t}\n\n\tfunction info(text) {\n\t\tif (!messageBox.area) {\n\t\t\tmessageBox.area = document.createElement(\"DIV\");\n\t\t\tmessageBox.area.className = \"gantt_message_area dhtmlx_message_area\";\n\t\t\tmessageBox.area.style[messageBox.position] = \"5px\";\n\t\t\tdocument.body.appendChild(messageBox.area);\n\t\t}\n\n\t\tmessageBox.hide(text.id);\n\t\tvar message = document.createElement(\"DIV\");\n\t\tmessage.innerHTML = \"
\" + text.text + \"
\";\n\t\tmessage.className = \"gantt-info dhtmlx-info gantt-\" + text.type + \" dhtmlx-\" + text.type;\n\t\tmessage.onclick = function () {\n\t\t\tmessageBox.hide(text.id);\n\t\t\ttext = null;\n\t\t};\n\n\t\tgantt._waiAria.messageInfoAttr(message);\n\n\t\tif (messageBox.position == \"bottom\" && messageBox.area.firstChild)\n\t\t\tmessageBox.area.insertBefore(message, messageBox.area.firstChild);\n\t\telse\n\t\t\tmessageBox.area.appendChild(message);\n\n\t\tif (text.expire > 0)\n\t\t\tmessageBox.timers[text.id] = window.setTimeout(function () {\n\t\t\t\tmessageBox.hide(text.id);\n\t\t\t}, text.expire);\n\n\t\tmessageBox.pull[text.id] = message;\n\t\tmessage = null;\n\n\t\treturn text.id;\n\t}\n\n\tfunction getFirstDefined() {\n\t\tvar values = [].slice.apply(arguments, [0]);\n\n\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\tif (values[i]) {\n\t\t\t\treturn values[i];\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction _boxStructure(config, ok, cancel) {\n\t\tvar box = document.createElement(\"DIV\");\n\n\t\tvar locale = gantt.locale;\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(\"dhxbox\", 1);\n\n\t\tvar inner = '';\n\n\t\tif (config.width)\n\t\t\tbox.style.width = config.width;\n\t\tif (config.height)\n\t\t\tbox.style.height = config.height;\n\t\tif (config.title)\n\t\t\tinner += '
' + config.title + '
';\n\t\tinner += '
' + (config.content ? '' : config.text) + '
';\n\t\tif (ok)\n\t\t\tinner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\n\t\tif (cancel)\n\t\t\tinner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\n\n\t\tif (config.buttons) {\n\t\t\tfor (var i = 0; i < config.buttons.length; i++) {\n\t\t\t\tvar btn = config.buttons[i];\n\t\t\t\tif (typeof btn == \"object\") {\n\t\t\t\t\t// Support { label:\"Save\", css:\"main_button\", value:\"save\" }\n\t\t\t\t\tvar label = btn.label;\n\t\t\t\t\tvar css = btn.css || (\"gantt_\" + btn.label.toLowerCase() + \"_button dhtmlx_\" + btn.label.toLowerCase() + \"_button\");\n\t\t\t\t\tvar value = btn.value || i;\n\t\t\t\t\tinner += button(label, css, value);\n\t\t\t\t} else {\n\t\t\t\t\tinner += button(btn, btn, i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinner += '
';\n\t\tbox.innerHTML = inner;\n\n\t\tif (config.content) {\n\t\t\tvar node = config.content;\n\t\t\tif (typeof node == \"string\")\n\t\t\t\tnode = document.getElementById(node);\n\t\t\tif (node.style.display == 'none')\n\t\t\t\tnode.style.display = \"\";\n\t\t\tbox.childNodes[config.title ? 1 : 0].appendChild(node);\n\t\t}\n\n\t\tbox.onclick = function (e) {\n\t\t\te = e || event;\n\t\t\tvar source = e.target || e.srcElement;\n\t\t\tif (!source.className) source = source.parentNode;\n\t\t\tif (source.className.split(\" \")[0] == \"gantt_popup_button\") {\n\t\t\t\tvar result = source.getAttribute(\"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(\"dhxbox\"))\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\tvar domHelpers = __webpack_require__(1);\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};\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar uiFactory = __webpack_require__(33),\n\tmouseEvents = __webpack_require__(35),\n\tcreateLayers = __webpack_require__(36),\n\tCell = __webpack_require__(4),\n\tLayout = __webpack_require__(11),\n\tViewLayout = __webpack_require__(39),\n\tViewCell = __webpack_require__(40),\n\tResizer = __webpack_require__(41),\n\tScrollbar = __webpack_require__(42),\n\tTimeline = __webpack_require__(12),\n\tGrid = __webpack_require__(14),\n\tResourceGrid = __webpack_require__(14),\n\tResourceTimeline = __webpack_require__(12);\n\nvar renderTaskBar = __webpack_require__(45),\n\trenderTaskBg = __webpack_require__(46),\n\trenderLink = __webpack_require__(47),\n\tgridRenderer = __webpack_require__(48);\n\nvar mainGridInitializer = __webpack_require__(49);\nvar mainTimelineInitializer = __webpack_require__(51);\nvar mainLayoutInitializer = __webpack_require__(54);\n\nfunction initUI(gantt){\n\tfunction inheritGridConfig(id){\n\t\treturn {\n\t\t\t//width: gantt.config.grid_width\n\t\t};\n\t}\n\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\n\tvar layersEngine = createLayers(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: gridRenderer(gantt),\n\t\t\ttaskBg: renderTaskBg(gantt),\n\t\t\ttaskBar: renderTaskBar(gantt),\n\t\t\tlink: renderLink(gantt)\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};\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0),\n\tconfigurable = __webpack_require__(34);\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\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\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\n\t\t\treturn extendSettings.call(this, \"config\", parentConfig);\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\n\t\t\treturn extendSettings.call(this, \"templates\", parentTemplates);\n\t\t}\n\t};\n};\n\nmodule.exports = function(obj, parent){\n\tutils.mixin(obj, configurable(parent));\n};\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar domHelpers = __webpack_require__(1);\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 trg = e.target || e.srcElement;\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 trg = e.target || e.srcElement;\n\t\t\tvar id = gantt.locate(e);\n\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.doubleclick);\n\t\t\tvar res = !gantt.checkEvent(\"onTaskDblClick\") || gantt.callEvent(\"onTaskDblClick\", [id, e]);\n\t\t\tif (res) {\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\n\t\t\t\tif (!default_action)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (id !== null && gantt.getTask(id)) {\n\t\t\t\t\tif (res && gantt.config.details_on_dblclick) {\n\t\t\t\t\t\tgantt.showLightbox(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onMouseMove(e) {\n\t\t\tif (gantt.checkEvent(\"onMouseMove\")) {\n\t\t\t\tvar id = gantt.locate(e);\n\t\t\t\tgantt._last_move_event = e;\n\t\t\t\tgantt.callEvent(\"onMouseMove\", [id, e]);\n\t\t\t}\n\t\t}\n\n\t\tfunction detach(eventName, className, handler, root) {\n\t\t\tif (eventHandlers[eventName]) {\n\t\t\t\tfor(var i = 0; i < eventHandlers[eventName].length; i++){\n\t\t\t\t\tif(eventHandlers[eventName][i].root == root){\n\t\t\t\t\t\teventHandlers[eventName].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}\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};\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar createLayerFactory = __webpack_require__(37);\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);\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\treturn taskLayers.addLayer(config);\n\t\t\t\t},\n\n\t\t\t\t/*getTaskLayer: function(id){\n\t\t\t\t\treturn taskLayers.getLayer(id);\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\t\t\t\t/*eachTaskLayer: function(code){\n\t\t\t\t\ttaskLayers.eachLayer(code);\n\t\t\t\t},*/\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\treturn linkLayers.addLayer(config);\n\t\t\t\t},\n\t\t\t\t/*getLinkLayer: function(id){\n\t\t\t\t\treturn linkLayers.getLayer(id);\n\t\t\t\t},*/\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\t\t\t\t/*eachLinkLayer: function(code){\n\t\t\t\t\tlinkLayers.eachLayer(code);\n\t\t\t\t},*/\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;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar renderFactoryProvider = __webpack_require__(38);\nvar utils = __webpack_require__(0);\n\nvar layerFactory = function(gantt){\n\n\tvar renderFactory = renderFactoryProvider(gantt);\n\treturn {\n\tcreateGroup: function (get_container, rel_root, defaultFilters) {\n\n\t\tvar renderGroup = {\n\t\t\ttempCollection: [],\n\t\t\trenderers: {},\n\t\t\tcontainer: get_container,\n\t\t\tfilters: [],\n\t\t\tgetLayers: function () {\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\tif (!this.container()) return;\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\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 = rel_root ? rel_root() : 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\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\t//config = prepareConfig(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}\n\t\t\t\tthis._add(config);\n\t\t\t\treturn (config ? config.id : undefined);\n\t\t\t},\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\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\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 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 renderOne = function(item){\n\t\t\treturn layer.renderer.call(this, item, layer.host);\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) {\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 dom = renderOne.call(gantt, item);\n\t\t\t\tthis.append(item, dom, container);\n\n\t\t\t},\n\n\t\t\tclear: function (container) {\n\t\t\t\tthis.rendered = task_area_pulls[id] = {};\n\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\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\n\t\t\t\t\tthis.render_item(items[i], buffer);\n\t\t\t\t}\n\n\t\t\t\tcontainer.appendChild(buffer);\n\t\t\t},\n\t\t\tappend: function (item, node, container) {\n\t\t\t\tif (!node) {\n\t\t\t\t\tif (this.rendered[item.id]) {\n\t\t\t\t\t\tthis.remove_item(item.id);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.rendered[item.id] && this.rendered[item.id].parentNode) {\n\t\t\t\t\tthis.replace_item(item.id, node);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.appendChild(node);\n\t\t\t\t}\n\t\t\t\tthis.rendered[item.id] = node;\n\n\t\t\t},\n\t\t\treplace_item: function (item_id, newNode) {\n\t\t\t\tvar item = this.rendered[item_id];\n\t\t\t\tif (item && item.parentNode) {\n\t\t\t\t\titem.parentNode.replaceChild(newNode, item);\n\t\t\t\t}\n\t\t\t\tthis.rendered[item_id] = newNode;\n\t\t\t},\n\t\t\tremove_item: function (item_id) {\n\t\t\t\tthis.hide(item_id);\n\t\t\t\tdelete this.rendered[item_id];\n\t\t\t},\n\t\t\thide: function (item_id) {\n\t\t\t\tvar item = this.rendered[item_id];\n\t\t\t\tif (item && item.parentNode) {\n\t\t\t\t\titem.parentNode.removeChild(item);\n\t\t\t\t}\n\t\t\t},\n\t\t\trestore: function (item) {\n\t\t\t\tvar dom = this.rendered[item.id];\n\t\t\t\tif (dom) {\n\t\t\t\t\tif (!dom.parentNode) {\n\t\t\t\t\t\tthis.append(item, dom, node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.render_item(item, node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tchange_id: function (oldid, newid) {\n\t\t\t\tthis.rendered[newid] = this.rendered[oldid];\n\t\t\t\tdelete this.rendered[oldid];\n\t\t\t},\n\t\t\trendered: task_area_pulls[id],\n\t\t\tnode: node,\n\t\t\tdestructor: function () {\n\t\t\t\tthis.clear();\n\t\t\t\tdelete task_area_renderers[id];\n\t\t\t\tdelete task_area_pulls[id];\n\t\t\t}\n\t\t};\n\n\t\treturn task_area_renderers[id];\n\t}\n\n\n\tfunction clearRenderers() {\n\t\tfor (var i in task_area_renderers) {\n\t\t\tgetRenderer(i).destructor();\n\t\t}\n\t}\n\n\treturn {\n\t\tgetRenderer: getRenderer,\n\t\tclearRenderers: clearRenderers\n\t};\n\n};\n\nmodule.exports = rendererFactory;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __extends = __webpack_require__(5),\n\tLayout = __webpack_require__(11),\n\tCell = __webpack_require__(4);\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;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __extends = __webpack_require__(5),\n\tutils = __webpack_require__(0),\n\tCell = __webpack_require__(4);\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\tvar outerX = x + borders.horizontal;\n\t\tvar outerY = y + borders.vertical;\n\t\tthis.$config.width = outerX;\n\t\tthis.$config.height = outerY;\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;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\nmodule.exports = null;\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __extends = __webpack_require__(5),\n\tdomHelpers = __webpack_require__(1),\n\tutils = __webpack_require__(0),\n\tenv = __webpack_require__(7),\n\teventable = __webpack_require__(2),\n\tCell = __webpack_require__(4);\n\nvar ScrollbarCell = (function (_super) {\n\t\"use strict\";\n\n\t__extends(ScrollbarCell, _super);\n\tfunction ScrollbarCell(parent, config, factory, gantt) {\n\n\t\tvar _this = _super.apply(this, arguments) || this;\n\t\tthis.$config = utils.mixin(config, {scroll: \"x\"});\n\t\t_this._scrollHorizontalHandler = utils.bind(_this._scrollHorizontalHandler, _this);\n\t\t_this._scrollVerticalHandler = utils.bind(_this._scrollVerticalHandler, _this);\n\t\t_this._outerScrollVerticalHandler = utils.bind(_this._outerScrollVerticalHandler, _this);\n\t\t_this._outerScrollHorizontalHandler = utils.bind(_this._outerScrollHorizontalHandler, _this);\n\t\t_this._mouseWheelHandler = utils.bind(_this._mouseWheelHandler, _this);\n\n\t\tthis.$config.hidden = true;\n\t\tvar size = gantt.config.scroll_size;\n\n\t\tif(gantt.env.isIE){\n\t\t\t// full element height/width must be bigger than just a browser scrollbar,\n\t\t\t// otherwise the scrollbar element won't be scrolled on click\n\t\t\tsize += 1;\n\t\t}\n\n\t\tif(this._isHorizontal()){\n\t\t\t_this.$config.height = size;\n\t\t\t_this.$parent.$config.height = size;\n\t\t}else{\n\t\t\t_this.$config.width = size;\n\t\t\t_this.$parent.$config.width = size;\n\t\t}\n\n\t\tthis.$config.scrollPosition = 0;\n\n\t\t_this.$name = \"scroller\";\n\t\treturn _this;\n\t}\n\n\tScrollbarCell.prototype.init = function(container){\n\t\tcontainer.innerHTML = this.$toHTML();\n\t\tthis.$view = container.firstChild;\n\n\t\tif(!this.$view){\n\t\t\tthis.init();\n\t\t}\n\t\tif(this._isVertical()){\n\t\t\tthis._initVertical();\n\t\t}else{\n\t\t\tthis._initHorizontal();\n\t\t}\n\t\tthis._initMouseWheel();\n\t\tthis._initLinkedViews();\n\t};\n\n\tScrollbarCell.prototype.$toHTML = function () {\n\t\tvar className = this._isHorizontal() ? \"gantt_hor_scroll\" : \"gantt_ver_scroll\";\n\t\treturn \"
\";\n\t};\n\n\tScrollbarCell.prototype._getRootParent = function(){\n\t\tvar parent = this.$parent;\n\t\twhile(parent && parent.$parent){\n\t\t\tparent = parent.$parent;\n\t\t}\n\t\tif(parent){\n\t\t\treturn parent;\n\t\t}\n\t};\n\n\n\tfunction eachCell(root, res){\n\t\tres.push(root);\n\t\tif(root.$cells){\n\t\t\tfor(var i = 0; i < root.$cells.length; i++){\n\t\t\t\teachCell(root.$cells[i], res);\n\t\t\t}\n\t\t}\n\t}\n\tScrollbarCell.prototype._eachView = function(){\n\t\tvar res = [];\n\t\teachCell(this._getRootParent(), res);\n\t\treturn res;\n\t};\n\n\tScrollbarCell.prototype._getLinkedViews = function(){\n\t\tvar views = this._eachView();\n\t\tvar res = [];\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\tif(views[i].$config && ((this._isVertical() && views[i].$config.scrollY == this.$id) || (this._isHorizontal() && views[i].$config.scrollX == this.$id)) ){\n\t\t\t\tres.push(views[i]);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t};\n\n\n\tScrollbarCell.prototype._initHorizontal = function(){\n\t\tthis.$scroll_hor = this.$view;\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollHorizontalHandler);\n\n\t};\n\n\tScrollbarCell.prototype._initLinkedViews = function(){\n\t\tvar views = this._getLinkedViews();\n\t\tvar css = this._isVertical() ?\"gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical\" : \"gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal\";\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\t//views[i].$config.css = [views[i].$config.css || \"\", css].join(\" \");\n\t\t\tdomHelpers.addClassName(views[i].$view || views[i].getNode(), css);\n\t\t}\n\t};\n\n\tScrollbarCell.prototype._initVertical = function(){\n\t\tthis.$scroll_ver = this.$view;\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollVerticalHandler);\n\t};\n\n\tScrollbarCell.prototype._updateLinkedViews = function(){\n\t\tvar root = this._getRootParent();\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)) 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}\n\n\t\tnode.style[property] = size + \"px\";\n\t};\n\n\tScrollbarCell.prototype._scrollVerticalHandler = function (e) {\n\t\tif(this._scrollHorizontalHandler() || this._scrolling){\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.$gantt._touch_scroll_active) return;\n\t\tvar top = this.$scroll_ver.scrollTop;\n\t\tvar prev = this._oldTop;\n\t\tif(top == prev) return;\n\n\t\tthis.scrollVertically(top);\n\n\t\tthis._oldTop = this.$scroll_ver.scrollTop;\n\n\t};\n\tScrollbarCell.prototype._outerScrollVerticalHandler = function(e){\n\t\tif(this._scrollHorizontalHandler()){\n\t\t\treturn;\n\t\t}\n\t};\n\n\tScrollbarCell.prototype._checkWheelTarget = function(targetNode){\n\t\tvar connectedViews = this._getLinkedViews().concat(this);\n\n\t\tfor(var i = 0; i < connectedViews.length; i++){\n\t\t\tvar node = connectedViews[i].$view;\n\t\t\tif(domHelpers.isChildOf(targetNode, node)){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tScrollbarCell.prototype._mouseWheelHandler = function(e){\n\t\tvar target = e.target || e.srcElement;\n\n\t\tif(!this._checkWheelTarget(target))\n\t\t\treturn;\n\n\t\tthis._wheel_time = new Date();\n\n\t\tvar res = {};\n\t\tvar ff = env.isFF;\n\t\tvar wx = ff ? (e.deltaX*-20) : e.wheelDeltaX*2;\n\t\tvar wy = ff ? (e.deltaY*-40) : e.wheelDelta;\n\n\t\tif(e.shiftKey && !(e.deltaX || e.wheelDeltaX)){\n\t\t\t// shift+mousewheel for horizontal scroll\n\t\t\twx = wy*2;\n\t\t\twy = 0;\n\t\t}\n\n\t\tif (wx && Math.abs(wx) > Math.abs(wy)){\n\t\t\tif(this._isVertical()){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(res.x) return true;//no horisontal scroll, must not block scrolling\n\t\t\tif(!this.$scroll_hor || !this.$scroll_hor.offsetWidth) return true;\n\n\t\t\tvar dir = wx/-40;\n\t\t\tvar oldLeft = this._oldLeft;\n\t\t\tvar left = oldLeft+dir*30;\n\t\t\tthis.scrollHorizontally(left);\n\t\t\tthis.$scroll_hor.scrollLeft = left;\n\t\t\t// not block scroll if position hasn't changed\n\t\t\tif(oldLeft == this.$scroll_hor.scrollLeft){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\n\t\t} else {\n\t\t\tif(this._isHorizontal()){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(res.y) return true;//no vertical scroll, must not block scrolling\n\t\t\tif(!this.$scroll_ver || !this.$scroll_ver.offsetHeight) return true;\n\n\t\t\tvar dir = wy/-40;\n\t\t\tif (typeof wy == \"undefined\")\n\t\t\t\tdir = e.detail;\n\n\t\t\tvar oldTop = this._oldTop;\n\t\t\tvar top = this.$scroll_ver.scrollTop+dir*30;\n\n\t\t\t//if(!this.$gantt.config.prevent_default_scroll &&\n\t\t\t//\t(this.$gantt._cached_scroll_pos && ((this.$gantt._cached_scroll_pos.y == top) || (this.$gantt._cached_scroll_pos.y <= 0 && top <= 0)))) return true;\n\n\n\t\t\tthis.scrollVertically(top);\n\t\t\tthis.$scroll_ver.scrollTop = top;\n\n\t\t\t// not block scroll if position hasn't changed\n\t\t\tif(oldTop == this.$scroll_ver.scrollTop){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis._oldTop = this.$scroll_ver.scrollTop;\n\t\t}\n\n\t\tif (e.preventDefault)\n\t\t\te.preventDefault();\n\t\te.cancelBubble=true;\n\t\treturn false;\n\t};\n\n\treturn ScrollbarCell;\n})(Cell);\n\nmodule.exports = ScrollbarCell;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports) {\n\nvar createStaticBgHelper = function(){\n\treturn {\n\t\trender: function(){}\n\t};\n};\n\nmodule.exports = {\n\tcreate: function(){\n\t\treturn createStaticBgHelper();\n\t}\n};\n\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\nfunction createResizer(gantt, grid){\n\treturn {\n\t\tinit: function(){},\n\t\tdoOnRender: function(){}\n\t};\n}\n\nmodule.exports = createResizer;\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports) {\n\nfunction 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\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}\n\n\t\tif (gantt.getTaskType(task.type) == cfg.types.project) {\n\t\t\tcss.push(\"gantt_project\");\n\t\t}\n\n\t\tif (gantt.isSummaryTask(task))\n\t\t\tcss.push(\"gantt_dependent_task\");\n\n\t\tif (cfg.select_task && itemId == state.selected_task)\n\t\t\tcss.push(\"gantt_selected\");\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;\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports) {\n\nfunction createTaskBgRender(gantt){\n\t//this.getTaskTop\n\tfunction _render_bg_line(item, view) {\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\t\tvar row = document.createElement(\"div\");\n\t\tif (config.show_task_cells) {\n\t\t\tfor (var j = 0; j < count; j++) {\n\t\t\t\tvar width = cfg.width[j],\n\t\t\t\t\tcssclass = \"\";\n\n\t\t\t\tif (width > 0) {//do not render skipped columns\n\t\t\t\t\tvar cell = document.createElement(\"div\");\n\t\t\t\t\tcell.style.width = (width) + \"px\";\n\n\t\t\t\t\tcssclass = \"gantt_task_cell\" + (j == count - 1 ? \" gantt_last_cell\" : \"\");\n\t\t\t\t\tcssTemplate = templates.task_cell_class(item, cfg.trace_x[j]);\n\t\t\t\t\tif (cssTemplate)\n\t\t\t\t\t\tcssclass += \" \" + cssTemplate;\n\t\t\t\t\tcell.className = cssclass;\n\n\t\t\t\t\trow.appendChild(cell);\n\t\t\t\t}\n\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.getSelectedId() == item.id) {\n\t\t\tcss += \" gantt_selected\";\n\t\t}\n\n\t\t//var row = \"
\" + cells.join(\"\") + \"
\";\n\n\t\trow.className = css;\n\n\t\tif (config.smart_rendering) {\n\t\t\trow.style.position = \"absolute\";\n\t\t\trow.style.top = view.getItemTop(item.id) + \"px\";\n\t\t\trow.style.width = \"100%\";\n\t\t}\n\t\trow.style.height = (config.row_height) + \"px\";\n\n\t\tif(view.$config.item_attribute){\n\t\t\trow.setAttribute(view.$config.item_attribute, item.id);\n\t\t}\n\n\t\treturn row;\n\t}\n\n\treturn _render_bg_line;\n}\n\nmodule.exports = createTaskBgRender;\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports) {\n\n\nfunction createLinkRender(gantt){\n\nfunction _render_link_element(link, view) {\n\tvar config = view.$getConfig();\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\tline_size = config.link_line_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\t\tvar types = config.links;\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\nreturn _render_link_element;\n\n}\n\nmodule.exports = createLinkRender;\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dateHelper = __webpack_require__(3);\n\nfunction createGridLineRender(gantt){\n\tfunction _render_grid_item(item, view) {\n\t\t//if (!_is_grid_visible.call(this))\n\t\t//\treturn null;\n\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 width = 0;\n\t\tvar has_child;\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar last = i == columns.length - 1;\n\t\t\tvar col = columns[i];\n\t\t\tvar cell;\n\n\t\t\tvar value;\n\t\t\tvar textValue;\n\t\t\tif (col.name == \"add\") {\n\t\t\t\tvar aria = gantt._waiAria.gridAddButtonAttrString(col);\n\n\t\t\t\tvalue = \"
\";\n\t\t\t\ttextValue = \"\";\n\t\t\t} else {\n\t\t\t\tif (col.template)\n\t\t\t\t\tvalue = col.template(item);\n\t\t\t\telse\n\t\t\t\t\tvalue = item[col.name];\n\n\t\t\t\tif (dateHelper.isDate(value))\n\t\t\t\t\tvalue = templates.date_grid(value, item);\n\t\t\t\ttextValue = value;\n\t\t\t\tvalue = \"
\" + value + \"
\";\n\t\t\t}\n\t\t\tvar css = \"gantt_cell\" + (last ? \" gantt_last_cell\" : \"\");\n\n\t\t\tvar tree = [];\n\t\t\tif (col.tree) {\n\t\t\t\tfor (var j = 0; j < item.$level; j++)\n\t\t\t\t\ttree.push(templates.grid_indent(item));\n\n\t\t\t\thas_child = store.hasChild(item.id);\n\t\t\t\tif (has_child) {\n\t\t\t\t\ttree.push(templates.grid_open(item));\n\t\t\t\t\ttree.push(templates.grid_folder(item));\n\t\t\t\t} else {\n\t\t\t\t\ttree.push(templates.grid_blank(item));\n\t\t\t\t\ttree.push(templates.grid_file(item));\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar style = \"width:\" + (col.width - (last ? 1 : 0)) + \"px;\";\n\t\t\tif (this.defined(col.align))\n\t\t\t\tstyle += \"text-align:\" + col.align + \";\";\n\n\t\t\tvar aria = gantt._waiAria.gridCellAttrString(col, textValue);\n\n\t\t\ttree.push(value);\n\t\t\tif(config.rtl){\n\t\t\t\ttree = tree.reverse();\n\t\t\t}\n\t\t\tcell = \"
\" + tree.join(\"\") + \"
\";\n\t\t\tcells.push(cell);\n\t\t}\n\t\tvar css = gantt.getGlobalTaskIndex(item.id) % 2 === 0 ? \"\" : \" odd\";\n\t\tcss += (item.$transparent) ? \" gantt_transparent\" : \"\";\n\n\t\tcss += (item.$dataprocessor_class ? \" \" + item.$dataprocessor_class : \"\");\n\n\t\tif (templates.grid_row_class) {\n\t\t\tvar css_template = templates.grid_row_class.call(gantt, item.start_date, item.end_date, item);\n\t\t\tif (css_template)\n\t\t\t\tcss += \" \" + css_template;\n\t\t}\n\n\t\tif(store.getSelectedId() == 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;\n\t\tel.style.height = config.row_height + \"px\";\n\t\tel.style.lineHeight = (config.row_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 _render_grid_item;\n}\n\nmodule.exports = createGridLineRender;\n\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\nvar rowDnd = __webpack_require__(50);\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}\n\n\t\t\t\tthis._mouseDelegates = __webpack_require__(8)(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\trowDnd.init(grid.$gantt, grid);\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\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(\"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\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;\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar domHelpers = __webpack_require__(1);\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\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\tstore.refresh(task.id);\n\t\t//this.refreshData();\n\t}, gantt));\n}\n\nmodule.exports = {\n\tinit: _init_dnd\n};\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0),\n\ttaskDnD = __webpack_require__(52),\n\tlinkDnD = __webpack_require__(53),\n\tdomHelpers = __webpack_require__(1);\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\tif(timeline.$config.id == \"timeline\") {\n\t\t\t\t\tthis.extendGantt(timeline);\n\t\t\t\t}\n\n\t\t\t\tthis._mouseDelegates = __webpack_require__(8)(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},\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\textendGantt: function(timeline){\n\t\t\t\tgantt.dateFromPos = gantt.bind(timeline.dateFromPos, timeline);\n\t\t\t\tgantt.posFromDate = gantt.bind(timeline.posFromDate, timeline);\n\t\t\t\tgantt.getRowTop = gantt.bind(timeline.getRowTop, timeline);\n\t\t\t\tgantt.getTaskTop = gantt.bind(timeline.getItemTop, timeline);\n\t\t\t\tgantt.getTaskPosition = gantt.bind(timeline.getItemPosition, timeline);\n\t\t\t\tgantt.getTaskHeight = gantt.bind(timeline.getItemHeight, timeline);\n\t\t\t\tgantt.columnIndexByDate = gantt.bind(timeline.columnIndexByDate, timeline);\n\t\t\t\tgantt.roundTaskDates = gantt.bind(timeline.roundTaskDates, timeline);\n\t\t\t\tgantt.getScale = gantt.bind(timeline.getScale, timeline);\n\t\t\t\tgantt.getTaskNode = function (id) {\n\t\t\t\t\treturn timeline._taskRenderer.rendered[id];\n\t\t\t\t};\n\t\t\t\tgantt.getLinkNode = function (id) {\n\t\t\t\t\treturn timeline._linkRenderer.rendered[id];\n\t\t\t\t};\n\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;\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar domHelpers = __webpack_require__(1),\n\tutils = __webpack_require__(0);\nvar timeout = __webpack_require__(9);\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(data, \"mouseup\", gantt.bind(function (e) {\n\t\t\t\tthis.on_mouse_up(e || event);\n\t\t\t}, this));\n\t\t},\n\n\t\tclear_drag_state: function () {\n\t\t\tthis.drag = {\n\t\t\t\tid: null,\n\t\t\t\tmode: null,\n\t\t\t\tpos: null,\n\t\t\t\tstart_x: null,\n\t\t\t\tstart_y: null,\n\t\t\t\tobj: null,\n\t\t\t\tleft: null\n\t\t\t};\n\t\t\tthis.dragMultiple = {};\n\t\t},\n\t\t_resize: function (ev, shift, drag) {\n\t\t\tvar cfg = timeline.$getConfig();\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\tif (drag.left) {\n\t\t\t\tev.start_date = gantt.dateFromPos(coords_x.start + shift);\n\t\t\t\tif (!ev.start_date) {\n\t\t\t\t\tev.start_date = new Date(gantt.getState().min_date);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tev.end_date = gantt.dateFromPos(coords_x.end + shift);\n\t\t\t\tif (!ev.end_date) {\n\t\t\t\t\tev.end_date = new Date(gantt.getState().max_date);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ev.end_date - ev.start_date < cfg.min_duration) {\n\t\t\t\tif (drag.left)\n\t\t\t\t\tev.start_date = gantt.calculateEndDate({start_date: ev.end_date, duration: -1, task: ev});\n\t\t\t\telse\n\t\t\t\t\tev.end_date = gantt.calculateEndDate({start_date: ev.start_date, duration: 1, task: ev});\n\t\t\t}\n\t\t\tgantt._init_task_timing(ev);\n\t\t},\n\t\t_resize_progress: function (ev, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar diffValue = !config.rtl ? (drag.pos.x - coords_x.start) : (coords_x.start - drag.pos.x);\n\n\t\t\tvar diff = Math.max(0, diffValue);\n\t\t\tev.progress = Math.min(1, diff / Math.abs(coords_x.end - coords_x.start));\n\t\t},\n\n\t\t_find_max_shift: function(dragItems, shift){\n\t\t\tvar correctShift;\n\t\t\tfor(var i in dragItems){\n\t\t\t\tvar drag = dragItems[i];\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\t\tvar minX = gantt.posFromDate( new Date(gantt.getState().min_date)),\n\t\t\t\t\tmaxX = gantt.posFromDate( new Date(gantt.getState().max_date));\n\n\t\t\t\tif(coords_x.end + shift > maxX){\n\t\t\t\t\tvar maxShift = maxX - coords_x.end;\n\t\t\t\t\tif(maxShift < correctShift || correctShift === undefined){\n\t\t\t\t\t\tcorrectShift = maxShift;\n\t\t\t\t\t}\n\t\t\t\t}else if(coords_x.start + shift < minX){\n\t\t\t\t\tvar minShift = minX - coords_x.start;\n\t\t\t\t\tif(minShift < correctShift || correctShift === undefined){\n\t\t\t\t\t\tcorrectShift = minShift;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn correctShift;\n\t\t},\n\t\t_move: function (ev, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\tvar new_start = gantt.dateFromPos(coords_x.start + shift),\n\t\t\t\tnew_end = gantt.dateFromPos(coords_x.end + shift);\n\t\t\tif (!new_start) {\n\t\t\t\tev.start_date = new Date(gantt.getState().min_date);\n\t\t\t\tev.end_date = gantt.dateFromPos(gantt.posFromDate(ev.start_date) + (coords_x.end - coords_x.start));\n\t\t\t} else if (!new_end) {\n\t\t\t\tev.end_date = new Date(gantt.getState().max_date);\n\t\t\t\tev.start_date = gantt.dateFromPos(gantt.posFromDate(ev.end_date) - (coords_x.end - coords_x.start));\n\t\t\t} else {\n\t\t\t\tev.start_date = new_start;\n\t\t\t\tev.end_date = new_end;\n\t\t\t}\n\t\t},\n\t\t_drag_task_coords: function (t, drag) {\n\t\t\tvar start = drag.obj_s_x = drag.obj_s_x || gantt.posFromDate(t.start_date);\n\t\t\tvar end = drag.obj_e_x = drag.obj_e_x || gantt.posFromDate(t.end_date);\n\t\t\treturn {\n\t\t\t\tstart: start,\n\t\t\t\tend: end\n\t\t\t};\n\t\t},\n\t\t_mouse_position_change: function (oldPos, newPos) {\n\t\t\tvar dx = oldPos.x - newPos.x,\n\t\t\t\tdy = oldPos.y - newPos.y;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t},\n\t\t_is_number: function (n) {\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t},\n\n\t\ton_mouse_move: function (e) {\n\t\t\tif (this.drag.start_drag) {\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n\n\t\t\t\tvar sX = this.drag.start_drag.start_x,\n\t\t\t\t\tsY = this.drag.start_drag.start_y;\n\n\t\t\t\tif ((Date.now() - this.drag.timestamp > 50) ||\n\t\t\t\t\t(this._is_number(sX) && this._is_number(sY) && this._mouse_position_change({\n\t\t\t\t\t\tx: sX,\n\t\t\t\t\t\ty: sY\n\t\t\t\t\t}, pos) > 20)) {\n\t\t\t\t\tthis._start_dnd(e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar drag = this.drag;\n\n\t\t\tif (drag.mode) {\n\t\t\t\tif (!timeout(this, 40))//limit update frequency\n\t\t\t\t\treturn;\n\n\t\t\t\tthis._update_on_move(e);\n\n\t\t\t}\n\t\t},\n\n\t\t_update_item_on_move: function(shift, id, mode, drag, e){\n\t\t\tvar ev = gantt.getTask(id);\n\t\t\tvar original = gantt.mixin({}, ev);\n\t\t\tvar copy = gantt.mixin({}, ev);\n\t\t\tthis._handlers[mode].apply(this, [copy, shift, drag]);\n\t\t\tgantt.mixin(ev, copy, true);\n\t\t\t//gantt._update_parents(drag.id, true);\n\t\t\tgantt.callEvent(\"onTaskDrag\", [ev.id, mode, copy, original, e]);\n\t\t\tgantt.mixin(ev, copy, true);\n\t\t\tgantt.refreshTask(id);\n\t\t},\n\n\t\t_update_on_move: function (e) {\n\t\t\tvar drag = this.drag;\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tif (drag.mode) {\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n\t\t\t\tif (drag.pos && drag.pos.x == pos.x)\n\t\t\t\t\treturn;\n\n\t\t\t\tdrag.pos = pos;\n\n\t\t\t\tvar curr_date = gantt.dateFromPos(pos.x);\n\t\t\t\tif (!curr_date || isNaN(curr_date.getTime()))\n\t\t\t\t\treturn;\n\n\n\t\t\t\tvar shift = pos.x - drag.start_x;\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tif (this._handlers[drag.mode]) {\n\n\t\t\t\t\tif(gantt.isSummaryTask(ev) && gantt.config.drag_project && drag.mode == config.drag_mode.move){\n\n\t\t\t\t\t\tvar initialDrag = {};\n\t\t\t\t\t\tinitialDrag[drag.id] = utils.copy(drag);\n\t\t\t\t\t\tvar maxShift = this._find_max_shift(utils.mixin(initialDrag, this.dragMultiple), shift);\n\t\t\t\t\t\tif(maxShift !== undefined){\n\t\t\t\t\t\t\tshift = maxShift;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n\t\t\t\t\t\tfor(var i in this.dragMultiple){\n\t\t\t\t\t\t\tvar childDrag = this.dragMultiple[i];\n\t\t\t\t\t\t\tthis._update_item_on_move(shift, childDrag.id, childDrag.mode, childDrag, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n\t\t\t\t\t}\n\t\t\t\t\tgantt._update_parents(drag.id);\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\ton_mouse_down: function (e, src) {\n\t\t\t// on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state\n\t\t\t// let's ignore right mouse button then\n\t\t\tif (e.button == 2 && e.button !== undefined)\n\t\t\t\treturn;\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar id = gantt.locate(e);\n\t\t\tvar task = null;\n\t\t\tif (gantt.isTaskExists(id)) {\n\t\t\t\ttask = gantt.getTask(id);\n\t\t\t}\n\n\t\t\tif (gantt.isReadonly(task) || this.drag.mode) return;\n\n\t\t\tthis.clear_drag_state();\n\n\t\t\tsrc = src || (e.target || e.srcElement);\n\n\t\t\tvar className = domHelpers.getClassName(src);\n\t\t\tvar drag = this._get_drag_mode(className, src);\n\n\t\t\tif (!className || !drag) {\n\t\t\t\tif (src.parentNode)\n\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\n\t\t\t\telse\n\t\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!drag) {\n\t\t\t\tif (gantt.checkEvent(\"onMouseDown\") && gantt.callEvent(\"onMouseDown\", [className.split(\" \")[0]])) {\n\t\t\t\t\tif (src.parentNode)\n\t\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\n\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (drag.mode && drag.mode != config.drag_mode.ignore && config[\"drag_\" + drag.mode]) {\n\t\t\t\t\tid = gantt.locate(src);\n\t\t\t\t\ttask = gantt.copy(gantt.getTask(id) || {});\n\n\t\t\t\t\tif (gantt.isReadonly(task)) {\n\t\t\t\t\t\tthis.clear_drag_state();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && !config.drag_project) && drag.mode != config.drag_mode.progress) {//only progress drag is allowed for tasks with flexible duration\n\t\t\t\t\t\tthis.clear_drag_state();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdrag.id = id;\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n\n\t\t\t\t\tdrag.start_x = pos.x;\n\t\t\t\t\tdrag.start_y = pos.y;\n\t\t\t\t\tdrag.obj = task;\n\t\t\t\t\tthis.drag.start_drag = drag;\n\t\t\t\t\tthis.drag.timestamp = Date.now();\n\n\t\t\t\t} else\n\t\t\t\t\tthis.clear_drag_state();\n\t\t\t}\n\t\t},\n\t\t_fix_dnd_scale_time: function (task, drag) {\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar unit = gantt.getScale().unit,\n\t\t\t\tstep = gantt.getScale().step;\n\t\t\tif (!config.round_dnd_dates) {\n\t\t\t\tunit = 'minute';\n\t\t\t\tstep = config.time_step;\n\t\t\t}\n\n\t\t\tfunction fixStart(task) {\n\t\t\t\tif (!gantt.config.correct_work_time)\n\t\t\t\t\treturn;\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\tif (!gantt.isWorkTime(task.start_date, undefined, task))\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate({\n\t\t\t\t\t\tstart_date: task.start_date,\n\t\t\t\t\t\tduration: -1,\n\t\t\t\t\t\tunit: config.duration_unit,\n\t\t\t\t\t\ttask: task\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction fixEnd(task) {\n\t\t\t\tif (!gantt.config.correct_work_time)\n\t\t\t\t\treturn;\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\tif (!gantt.isWorkTime(new Date(task.end_date - 1), undefined, task))\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate({\n\t\t\t\t\t\tstart_date: task.end_date,\n\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\tunit: config.duration_unit,\n\t\t\t\t\t\ttask: task\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (drag.mode == config.drag_mode.resize) {\n\t\t\t\tif (drag.left) {\n\t\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\n\t\t\t\t\tfixStart(task);\n\t\t\t\t} else {\n\t\t\t\t\ttask.end_date = gantt.roundDate({date: task.end_date, unit: unit, step: step});\n\t\t\t\t\tfixEnd(task);\n\t\t\t\t}\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\n\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\n\t\t\t\tfixStart(task);\n\t\t\t\ttask.end_date = gantt.calculateEndDate(task);\t\t\t\t\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\t\t\t\n\t\t\tif (drag.mode == config.drag_mode.resize) {\n\t\t\t\tif (drag.left) {\n\t\t\t\t\ttask.start_date = gantt.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\n\t\t\t\t} else {\n\t\t\t\t\ttask.end_date = gantt.getClosestWorkTime({date: task.end_date, dir: 'past', task: task});\n\t\t\t\t}\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\n\t\t\t\tgantt.correctTaskWorkTime(task);\n\t\t\t}\n\t\t},\n\n\t\t_finalize_mouse_up: function(taskId, config, drag, e){\n\t\t\tvar ev = gantt.getTask(taskId);\n\n\t\t\tif (config.work_time && config.correct_work_time) {\n\t\t\t\tthis._fix_working_times(ev, drag);\n\t\t\t}\n\n\t\t\tthis._fix_dnd_scale_time(ev, drag);\n\n\t\t\tif (!this._fireEvent(\"before_finish\", drag.mode, [taskId, drag.mode, gantt.copy(drag.obj), e])) {\n\t\t\t\t//drag.obj._dhx_changed = false;\n\t\t\t\tthis.clear_drag_state();\n\t\t\t\tif(taskId == drag.id){\n\t\t\t\t\tdrag.obj._dhx_changed = false;\n\t\t\t\t\tgantt.mixin(ev, drag.obj, true);\n\t\t\t\t}\n\n\n\t\t\t\tgantt.refreshTask(ev.id);\n\t\t\t} else {\n\t\t\t\tvar drag_id = taskId;\n\n\t\t\t\tgantt._init_task_timing(ev);\n\n\t\t\t\tthis.clear_drag_state();\n\t\t\t\tgantt.updateTask(ev.id);\n\t\t\t\tthis._fireEvent(\"after_finish\", drag.mode, [drag_id, drag.mode, e]);\n\t\t\t}\n\n\t\t},\n\n\t\ton_mouse_up: function (e) {\n\n\t\t\tvar drag = this.drag;\n\t\t\tif (drag.mode && drag.id) {\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\t//drop\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tvar dragMultiple = this.dragMultiple;\n\t\t\t\tthis._finalize_mouse_up(drag.id, config, drag, e);\n\t\t\t\tif(gantt.isSummaryTask(ev) && config.drag_project && drag.mode == config.drag_mode.move){\n\t\t\t\t\tfor(var i in dragMultiple){\n\t\t\t\t\t\tthis._finalize_mouse_up(dragMultiple[i].id, config, dragMultiple[i], e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clear_drag_state();\n\t\t},\n\t\t_get_drag_mode: function (className, el) {\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar modes = config.drag_mode;\n\t\t\tvar classes = (className || \"\").split(\" \");\n\t\t\tvar classname = classes[0];\n\t\t\tvar drag = {mode: null, left: null};\n\t\t\tswitch (classname) {\n\t\t\t\tcase \"gantt_task_line\":\n\t\t\t\tcase \"gantt_task_content\":\n\t\t\t\t\tdrag.mode = modes.move;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_task_drag\":\n\t\t\t\t\tdrag.mode = modes.resize;\n\n\t\t\t\t\tvar dragProperty = el.getAttribute(\"data-bind-property\");\n\n\t\t\t\t\tif (dragProperty == \"start_date\") {\n\t\t\t\t\t\tdrag.left = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdrag.left = false;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_task_progress_drag\":\n\t\t\t\t\tdrag.mode = modes.progress;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_link_control\":\n\t\t\t\tcase \"gantt_link_point\":\n\t\t\t\t\tdrag.mode = modes.ignore;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tdrag = null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn drag;\n\n\t\t},\n\n\t\t_start_dnd: function (e) {\n\t\t\tvar drag = this.drag = this.drag.start_drag;\n\t\t\tdelete drag.start_drag;\n\n\t\t\tvar cfg = timeline.$getConfig();\n\t\t\tvar id = drag.id;\n\t\t\tif (!cfg[\"drag_\" + drag.mode] || !gantt.callEvent(\"onBeforeDrag\", [id, drag.mode, e]) || !this._fireEvent(\"before_start\", drag.mode, [id, drag.mode, e])) {\n\t\t\t\tthis.clear_drag_state();\n\t\t\t} else {\n\t\t\t\tdelete drag.start_drag;\n\n\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\tif(gantt.isSummaryTask(task) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move){\n\t\t\t\t\tgantt.eachTask(function(child){\n\t\t\t\t\t\tthis.dragMultiple[child.id] = gantt.mixin({\n\t\t\t\t\t\t\tid: child.id,\n\t\t\t\t\t\t\tobj: child\n\t\t\t\t\t\t}, this.drag);\n\t\t\t\t\t}, task.id, this);\n\t\t\t\t}\n\n\t\t\t\tgantt.callEvent(\"onTaskDragStart\", []);\n\t\t\t}\n\n\t\t},\n\t\t_fireEvent: function (stage, mode, params) {\n\t\t\tgantt.assert(this._events[stage], \"Invalid stage:{\" + stage + \"}\");\n\n\t\t\tvar trigger = this._events[stage][mode];\n\n\t\t\tgantt.assert(trigger, \"Unknown after drop mode:{\" + mode + \"}\");\n\t\t\tgantt.assert(params, \"Invalid event arguments\");\n\n\n\t\t\tif (!gantt.checkEvent(trigger))\n\t\t\t\treturn true;\n\n\t\t\treturn gantt.callEvent(trigger, params);\n\t\t},\n\n\t\tround_task_dates: function(task){\n\t\t\tvar drag_state = this.drag;\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tif (!drag_state) {\n\t\t\t\tdrag_state = {mode: config.drag_mode.move};\n\t\t\t}\n\t\t\tthis._fix_dnd_scale_time(task, drag_state);\n\t\t},\n\t\tdestructor: function(){\n\t\t\tthis._domEvents.detachAll();\n\t\t}\n\t};\n}\n\nfunction initTaskDND() {\n\tvar _tasks_dnd;\n\treturn {\n\t\textend: function(timeline){\n\t\t\ttimeline.roundTaskDates = function (task) {\n\t\t\t\t_tasks_dnd.round_task_dates(task);\n\t\t\t};\n\n\t\t},\n\t\tinit: function(timeline, gantt){\n\t\t\t_tasks_dnd = createTaskDND(timeline, gantt);\n\t\t\t// TODO: entry point for touch handlers, move touch to timeline\n\t\t\ttimeline._tasks_dnd = _tasks_dnd;\n\t\t\treturn _tasks_dnd.init(gantt);\n\t\t},\n\t\tdestructor: function(){\n\t\t\t_tasks_dnd.destructor();\n\t\t\t_tasks_dnd = null;\n\t\t}\n\t};\n}\n\nmodule.exports = {\n\tcreateTaskDND: initTaskDND\n};\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar domHelpers = __webpack_require__(1);\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\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\tdnd.attachEvent(\"onDragMove\", gantt.bind(function(obj,e) {\n\t\tvar dd = dnd.config;\n\t\tvar pos = dnd.getPosition(e);\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\tif(landing){\n\t\t\t//refreshTask\n\t\t\tto_start = !domHelpers.locateClassName(e, end_marker);\n\t\t\tlanding = !!targ;\n\t\t}\n\n\t\t_link_target_task = targ;\n\t\t_link_landing = landing;\n\t\t_link_target_task_start = to_start;\n\n\t\tif(landing){\n\t\t\tvar t = gantt.getTask(targ);\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar node = domHelpers.locateClassName(e, link_landing_hover_area);\n\t\t\tvar shift = 0;\n\t\t\tif(node){\n\t\t\t\tshift = Math.floor(node.offsetWidth / 2);\n\t\t\t}\n\n\t\t\tthis._dir_end = getLinePos(t, !!_link_target_task_start,shift, config);\n\t\t}else{\n\t\t\tthis._dir_end = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n\t\t}\n\n\t\tvar targetChanged = !(prevLanding == landing && prevTarget == targ && prevToStart == to_start);\n\t\tif(targetChanged){\n\t\t\tif(prevTarget)\n\t\t\t\tgantt.refreshTask(prevTarget, false);\n\t\t\tif(targ)\n\t\t\t\tgantt.refreshTask(targ, false);\n\t\t}\n\n\t\tif(targetChanged){\n\t\t\tupdateMarkedHtml(dd.marker);\n\t\t}\n\n\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\n\n\t\treturn true;\n\t}, this));\n\n\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function() {\n\t\tvar drag = getDndState();\n\n\t\tif(drag.link_source_id && drag.link_target_id && drag.link_source_id != drag.link_target_id){\n\t\t\tvar type = gantt._get_link_type(drag.link_from_start, drag.link_to_start);\n\n\t\t\tvar link = {source : drag.link_source_id, target: drag.link_target_id, type:type};\n\t\t\tif(link.type && gantt.isLinkAllowed(link))\n\t\t\t\tgantt.addLink(link);\n\t\t}\n\n\t\tresetDndState();\n\n\t\tif(gantt.config.touch) {\n\t\t\tgantt.refreshData();\n\t\t}\n\t\telse {\n\t\t\tif (drag.link_source_id)\n\t\t\t\tgantt.refreshTask(drag.link_source_id, false);\n\t\t\tif (drag.link_target_id)\n\t\t\t\tgantt.refreshTask(drag.link_target_id, false);\n\t\t}\n\t\tremoveDirectionLine();\n\t}, this));\n\n\tfunction updateMarkedHtml(marker){\n\t\tvar link = getDndState();\n\n\t\tvar css = [\"gantt_link_tooltip\"];\n\t\tif(link.link_source_id && link.link_target_id){\n\t\t\tif(gantt.isLinkAllowed(link.link_source_id, link.link_target_id, link.link_from_start, link.link_to_start)){\n\t\t\t\tcss.push(\"gantt_allowed_link\");\n\t\t\t}else{\n\t\t\t\tcss.push(\"gantt_invalid_link\");\n\t\t\t}\n\t\t}\n\n\t\tvar className = gantt.templates.drag_link_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start);\n\t\tif(className)\n\t\t\tcss.push(className);\n\n\t\tvar html = \"
\" +\n\t\t\tgantt.templates.drag_link(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start) +\n\t\t\t\"
\";\n\t\tmarker.innerHTML = html;\n\t}\n\n\tfunction advanceMarker(marker, pos){\n\t\tmarker.style.left = pos.x + 5 + \"px\";\n\t\tmarker.style.top = pos.y + 5 + \"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){\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};\n\nmodule.exports = {\n\tcreateLinkDND: function(){\n\t\treturn {\n\t\t\tinit: initLinksDND\n\t\t};\n\t}\n};\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\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\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\t\n\t\t\t\t\t\tmainGrid.$config.width = gantt.config.grid_width - 1;\n\t\t\t\t\t\tif(!first){\n\t\t\t\t\t\t\tmainGrid.$parent._setContentSize(mainGrid.$config.width, mainGrid.$config.height);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\n\n\t\t\t\t\t\t\tif(mainGrid.$parent.$config.group){\n\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}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfirst = false;\n\n\t\t\t\t});\n\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\n\t\t\t},\n\t\t\tonInitialized: function (layout) {\n\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\n\t\t\t\tif(!(grid && grid.$parent && grid.$parent.$parent && grid.$parent.$parent._xLayout)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar parent = grid.$parent.$parent;\n\n\t\t\t\t//TODO: can't bind resizer to a grid in complex layouts\n\t\t\t\tvar next = parent.getNextSibling(grid.$parent.$id);\n\t\t\t\tvar gridFirst = true;\n\t\t\t\tif(!(next && next.$name == \"resizer\")){\n\t\t\t\t\tnext = parent.getPrevSibling(grid.$parent.$id);\n\t\t\t\t\tgridFirst = false;\n\t\t\t\t}\n\t\t\t\t// expose grid resize events\n\t\t\t\tif(next && next.$name == \"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\t};\n})();\n\nmodule.exports = initializer;\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(gantt) {\n\tdelete gantt.addTaskLayer;\n\tdelete gantt.addLinkLayer;\n};\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\nvar facadeFactory = __webpack_require__(57);\nvar calculateScaleRange = __webpack_require__(17);\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});\n\n\tvar linksStore = gantt.createDatastore({\n\t\tname: \"link\",\n\t\tinitItem: utils.bind(_init_link, gantt)\n\t});\n\n\ttasksStore.attachEvent(\"onBeforeRefreshAll\", function(){\n\n\t\tvar order = tasksStore.getVisibleItems();\n\n\t\tfor(var i=0; i < order.length; i++){\n\t\t\tvar item = order[i];\n\t\t\titem.$index = i;\n\t\t\tgantt.resetProjectDates(item);\n\t\t}\n\n\t});\n\n\ttasksStore.attachEvent(\"onFilterItem\", function(id, task){\n\t\tvar min = null, max = null;\n\t\tif (gantt.config.start_date && gantt.config.end_date) {\n\t\t\tif (gantt._isAllowedUnscheduledTask(task)) return true;\n\t\t\tmin = gantt.config.start_date.valueOf();\n\t\t\tmax = gantt.config.end_date.valueOf();\n\n\t\t\tif (+task.start_date > max || +task.end_date < +min)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\n\ttasksStore.attachEvent(\"onIdChange\", function(oldId, newId){\n\t\tgantt._update_flags(oldId, newId);\n\t});\n\n\ttasksStore.attachEvent(\"onAfterUpdate\", function(id){\n\t\tgantt._update_parents(id);\n\t});\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\treturn true;\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(\"onIdChange\", 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\tlinksStore.attachEvent(\"onFilterItem\", function(id, link){\n\t\tif (!gantt.config.show_links) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!(gantt.isTaskVisible(link.source) && gantt.isTaskVisible(link.target)) ||\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 = __webpack_require__(18);\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, \"xml_date\");\n\t\tif (task.end_date)\n\t\t\ttask.end_date = gantt.date.parseDate(task.end_date, \"xml_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\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\t\tif (task.parent === undefined) {\n\t\t\tthis.setParent(task, this.config.root_id);\n\t\t}\n\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\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\nvar createTasksFacade = __webpack_require__(58),\n\tcreateLinksFacade = __webpack_require__(59),\n\tDataStore = __webpack_require__(15),\n\tTreeDataStore = __webpack_require__(60),\n\tcreateDatastoreSelect = __webpack_require__(61);\nvar datastoreRender = __webpack_require__(62);\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());\n\n\t\tif(config.name){\n\n\t\t\tthis.$services.setService(\"datastore:\" + config.name, function(){return store;});\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}\n\t\t\tstoreList.push(config.name);\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}\n\n\t},\n\trefreshLink: function (linkId) {\n\t\tthis.$data.linksStore.refresh(linkId);\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\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};\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\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\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\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 = 0;\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\treturn this.$data.tasksStore.getChildren(id).slice();\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\tthis.$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\t\tthis.$data.tasksStore.sort(field, desc, parent);\n\t\tif (render) {\n\t\t\tthis.render();\n\t\t}\n\t}\n};\n};\n\nmodule.exports = createTasksDatastoreFacade;\n\n\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\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;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar powerArray = __webpack_require__(16);\nvar utils = __webpack_require__(0);\nvar eventable = __webpack_require__(2);\nvar DataStore = __webpack_require__(15);\n\nvar TreeDataStore = function(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\teventable(this);\n\n\tthis.attachEvent(\"onFilterItem\", function(id, item){\n\t\tvar open = true;\n\t\tthis.eachParent(function(parent){\n\t\t\topen = open && parent.$open;\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\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\n\t\t\tvar children = this.getChildren(newId);\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\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\t\t\tif(code)\n\t\t\t\tDataStore.prototype._updateOrder.call(this, code);\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\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].id), 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\t\t\tvar sbranch = this.getChildren(this.getParent(source.id));\n\n\t\t\tvar tbranch = this.getChildren(parent);\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;\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\tif(!this.callEvent(\"onAfterItemMove\", [sid, parent, tindex]))\n\t\t\t\treturn;\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\tvar item = this.getItem(childId);\n\t\t\tvar pid = this.getParent(childId);\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 = this.$getRootId();\n\t\t\tif(item){\n\t\t\t\tparent = item[this.$parentProperty];\n\t\t\t}\n\t\t\treturn parent;\n\n\t\t},\n\n\t\tclearAll: function(){\n\t\t\tthis._branches = {};\n\t\t\tDataStore.prototype.clearAll.call(this);\n\t\t},\n\n\t\tcalculateItemLevel: function(item){\n\t\t\tvar level = 0;\n\t\t\tthis.eachParent(function(){\n\t\t\t\tlevel++;\n\t\t\t}, item);\n\t\t\treturn level;\n\t\t},\n\n\t\t_setParentInner: function(item, new_pid, silent){\n\t\t\tif(!silent){\n\t\t\t\tif(item.hasOwnProperty(\"$rendered_parent\")){\n\t\t\t\t\tthis._move_branch(item, item.$rendered_parent, new_pid);\n\t\t\t\t}else{\n\t\t\t\t\tthis._move_branch(item, item[this.$parentProperty], new_pid);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetParent: function(item, new_pid, silent){\n\t\t\tthis._setParentInner(item, new_pid, silent);\n\n\t\t\titem[this.$parentProperty] = new_pid;\n\t\t},\n\t\teachItem: function(code, parent){\n\t\t\tparent = parent || this.$getRootId();\n\n\n\t\t\tvar branch = this.getChildren(parent);\n\t\t\tif (branch)\n\t\t\t\tfor (var i=0; i b[field];\n\t\t\t\treturn result ? 1 : -1;\n\t\t\t}) : field;\n\n\t\t\tif (desc) {\n\t\t\t\tvar original_criteria = criteria;\n\t\t\t\tcriteria = function (a, b) {\n\t\t\t\t\treturn original_criteria(b, a);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar els = this.getChildren(parent);\n\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;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\n\nfunction createDataStoreSelectMixin(){\n\tvar selectedId = null;\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\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\tthis.callEvent(\"onAfterUnselect\", [id]);\n\t\t\t}\n\t\t}\n\t};\n}\n\nmodule.exports = createDataStoreSelectMixin;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports) {\n\nvar 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};\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\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\tstore.attachEvent(\"onIdChange\", function(oldId, newId){\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});\n\n};\n\nmodule.exports = {\n\tbindDataStore: storeRenderCreator\n};\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar liveUpdateHooks = __webpack_require__(64);\nvar dateHelper = __webpack_require__(3);\nvar helpers = __webpack_require__(6);\n\nfunction addDataProcessorHooks(gantt) {\n\n\tgantt.dataProcessor = __webpack_require__(65);\n\n\tfunction detachDataProcessor(gantt, dp){\n\t\tdelete dp.$gantt;\n\t\tdelete dp.setGanttMode;\n\t\tdelete dp._getRowData;\n\t\tdp.afterUpdate = oldAfterUpdate;\n\n\t\tdelete gantt._dp;\n\t\tdelete gantt._change_id;\n\t\tdelete gantt._row_style;\n\t\tdelete gantt._delete_task;\n\t\tdelete gantt._sendTaskOrder;\n\n\t\thelpers.forEach(dataProcessorHandlers, function(e){\n\t\t\tgantt.detachEvent(e);\n\t\t});\n\t\tdataProcessorHandlers = [];\n\t}\n\n\tvar oldAfterUpdate;\n\tfunction extendDataProcessor(gantt, dp){\n\t\tdp.setGanttMode = function(mode){\n\t\t\tvar modes = dp.modes || {};\n\t\t\tif(dp._ganttMode){\n\t\t\t\tmodes[dp._ganttMode] = {\n\t\t\t\t\t_in_progress : dp._in_progress,\n\t\t\t\t\t_invalid : dp._invalid,\n\t\t\t\t\tupdatedRows : dp.updatedRows\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar newState = modes[mode];\n\t\t\tif(!newState){\n\t\t\t\tnewState = modes[mode] = {\n\t\t\t\t\t_in_progress : {},\n\t\t\t\t\t_invalid : {},\n\t\t\t\t\tupdatedRows : []\n\t\t\t\t};\n\t\t\t}\n\t\t\tdp._in_progress = newState._in_progress;\n\t\t\tdp._invalid = newState._invalid;\n\t\t\tdp.updatedRows = newState.updatedRows;\n\t\t\tdp.modes = modes;\n\t\t\tdp._ganttMode = mode;\n\t\t};\n\n\t\toldAfterUpdate = dp.afterUpdate;\n\t\tdp.afterUpdate = function(){\n\t\t\tvar xml;\n\t\t\tif(arguments.length == 3){\n\t\t\t\txml = arguments[1];\n\t\t\t}else{\n\t\t\t\t// old dataprocessor\n\t\t\t\txml = arguments[4];\n\t\t\t}\n\t\t\tvar mode = dp._ganttMode;\n\t\t\tvar reqUrl = xml.filePath;\n\n\t\t\tif(this._tMode != \"REST\"){\n\t\t\t\tif (reqUrl.indexOf(\"gantt_mode=links\") != -1) {\n\t\t\t\t\tmode = \"links\";\n\t\t\t\t}else{\n\t\t\t\t\tmode = \"tasks\";\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(reqUrl.indexOf(\"/link\") > reqUrl.indexOf(\"/task\")){\n\t\t\t\t\tmode = \"links\";\n\t\t\t\t}else{\n\t\t\t\t\tmode = \"tasks\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tdp.setGanttMode(mode);\n\n\t\t\tvar res = oldAfterUpdate.apply(dp, arguments);\n\t\t\tdp.setGanttMode(mode);\n\t\t\treturn res;\n\t\t};\n\n\t\tdp._getRowData=gantt.bind(function(id, pref) {\n\t\t\tvar task;\n\t\t\tif (dp._ganttMode == \"tasks\")\n\t\t\t\ttask = this.isTaskExists(id) ? this.getTask(id) : { id: id };\n\t\t\telse\n\t\t\t\ttask = this.isLinkExists(id) ? this.getLink(id) : { id: id };\n\n\t\t\ttask = gantt.copy(task);\n\n\t\t\tvar data = {};\n\t\t\tfor (var key in task) {\n\t\t\t\tif (key.substr(0, 1) == \"$\") continue;\n\t\t\t\tvar value = task[key];\n\t\t\t\tif (dateHelper.isDate(value))\n\t\t\t\t\tdata[key] = this.templates.xml_format(value);\n\t\t\t\telse if(value === null)\n\t\t\t\t\tdata[key] = \"\";\n\t\t\t\telse\n\t\t\t\t\tdata[key] = value;\n\t\t\t}\n\n\t\t\tvar taskTiming = this._get_task_timing_mode(task);\n\t\t\tif(taskTiming.$no_start){\n\t\t\t\ttask.start_date = \"\";\n\t\t\t\ttask.duration = \"\";\n\t\t\t}\n\t\t\tif(taskTiming.$no_end){\n\t\t\t\ttask.end_date = \"\";\n\t\t\t\ttask.duration = \"\";\n\t\t\t}\n\t\t\tdata[dp.action_param] = this.getUserData(id, dp.action_param);\n\t\t\treturn data;\n\t\t}, gantt);\n\t}\n\n\tfunction extendGantt(gantt, dp){\n\t\tgantt._change_id = gantt.bind(function(oldid, newid) {\n\t\t\tif (dp._ganttMode != \"tasks\")\n\t\t\t\tthis.changeLinkId(oldid, newid);\n\t\t\telse\n\t\t\t\tthis.changeTaskId(oldid, newid);\n\t\t}, this);\n\n\t\tgantt._row_style = function(row_id, classname){\n\t\t\tif (dp._ganttMode != \"tasks\") return;\n\t\t\tif(!gantt.isTaskExists(row_id))\n\t\t\t\treturn;\n\n\t\t\tvar task = gantt.getTask(row_id);\n\t\t\ttask.$dataprocessor_class = classname;\n\t\t\tgantt.refreshTask(row_id);\n\t\t};\n\n\t\t// fake method for dataprocessor\n\t\tgantt._delete_task = function(row_id, node){};\n\n\t\tgantt._sendTaskOrder = function(id, item){\n\t\t\tif(item.$drop_target){\n\t\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\t\tthis.getTask(id).target = item.$drop_target;\n\t\t\t\tdp.setUpdated(id, true,\"order\");\n\t\t\t\tdelete this.getTask(id).$drop_target;\n\t\t\t}\n\t\t};\n\n\t\tthis._dp = dp;\n\t}\n\n\tfunction attachDataProcessorEvents(gantt, dp){\n\t\tfunction clientSideDelete(id){\n\t\t\tvar updated = dp.updatedRows.slice();\n\t\t\tvar clientOnly = false;\n\n\t\t\tfor(var 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\tvar links = [];\n\n\t\t\tif (task.$source) {\n\t\t\t\tlinks = links.concat(task.$source);\n\t\t\t}\n\t\t\tif (task.$target) {\n\t\t\t\tlinks = links.concat(task.$target);\n\t\t\t}\n\n\t\t\treturn links;\n\t\t}\n\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterTaskAdd\", function(id, item) {\n\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\tdp.setUpdated(id,true,\"inserted\");\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterTaskUpdate\", function(id, item) {\n\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\tdp.setUpdated(id,true);\n\n\t\t\tgantt._sendTaskOrder(id, item);\n\t\t}));\n\n\t\tvar treeHelper = __webpack_require__(18);\n\t\tvar cascadeDelete = {};\n\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onBeforeTaskDelete\", function(id, item){\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\tdataProcessorHandlers.push(this.attachEvent(\"onAfterTaskDelete\", function(id, item) {\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\tvar needDbDelete = !clientSideDelete(id);\n\t\t\tif(!needDbDelete)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tif(gantt.config.cascade_delete && cascadeDelete[id]){\n\t\t\t\tvar dpMode = dp.updateMode;\n\t\t\t\tdp.setUpdateMode(\"off\");\n\n\t\t\t\tvar cascade = cascadeDelete[id];\n\t\t\t\tfor(var i in cascade.tasks){\n\t\t\t\t\tif(!clientSideDelete(i)){\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdp.setGanttMode(\"links\");\n\t\t\t\tfor(var i in cascade.links){\n\t\t\t\t\tif(!clientSideDelete(i)){\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcascadeDelete[id] = null;\n\n\t\t\t\tif(dpMode != \"off\"){\n\t\t\t\t\tdp.sendAllData();\n\t\t\t\t}\n\t\t\t\tdp.setGanttMode(\"tasks\");\n\n\t\t\t\tdp.setUpdateMode(dpMode);\n\n\t\t\t}\n\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\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterLinkUpdate\", function(id, item) {\n\t\t\tdp.setGanttMode(\"links\");\n\t\t\tdp.setUpdated(id, true);\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterLinkAdd\", function(id, item) {\n\t\t\tdp.setGanttMode(\"links\");\n\t\t\tdp.setUpdated(id, true,\"inserted\");\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterLinkDelete\", function(id, item) {\n\t\t\tdp.setGanttMode(\"links\");\n\n\t\t\tvar needDbDelete = !clientSideDelete(id);\n\t\t\tif(!needDbDelete)\n\t\t\t\treturn;\n\n\t\t\tdp.setUpdated(id, true,\"deleted\");\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onRowDragEnd\", function(id, target) {\n\t\t\tgantt._sendTaskOrder(id, gantt.getTask(id));\n\t\t}));\n\n\t\tvar tasks = null,\n\t\t\tlinks = null;\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onTaskIdChange\",function(oldId, newId){\n\t\t\tif(!dp._waitMode) return;\n\n\t\t\tvar children = gantt.getChildren(newId);\n\t\t\tif(children.length) {\n\t\t\t\ttasks = tasks || {};\n\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar 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\tvar item = this.getTask(newId),\n\t\t\t\titemLinks = getTaskLinks(item);\n\n\t\t\tif(itemLinks.length) {\n\t\t\t\tlinks = links || {};\n\n\t\t\t\tfor (var i = 0; i < itemLinks.length; i++) {\n\t\t\t\t\tvar 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(var 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(var 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\tvar url = this._serverProcessor;\n\t\t\tif(this._tMode == \"REST\"){\n\t\t\t\tvar mode = this._ganttMode.substr(0, this._ganttMode.length - 1);// links, tasks -> /link/id, /task/id\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\tthis.serverProcessor = url + gantt.ajax.urlSeparator(url) + \"gantt_mode=\" + this._ganttMode;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tvar dataProcessorHandlers = [];\n\n\tgantt._dp_init = function(dp) {\n\t\tgantt.assert(!this._dp, \"The dataProcessor is already attached to this gantt instance\");\n\n\t\tdp.setTransactionMode(\"POST\", true);\n\t\tdp.serverProcessor += (dp.serverProcessor.indexOf(\"?\") != -1 ? \"&\" : \"?\") + \"editing=true\";\n\t\tdp._serverProcessor = dp.serverProcessor;\n\t\tdp.$gantt = this;\n\t\tdp.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\tdp._methods=[\"_row_style\",\"setCellTextStyle\",\"_change_id\",\"_delete_task\"];\n\n\t\textendDataProcessor.call(this, gantt, dp);\n\t\textendGantt.call(this, gantt, dp);\n\t\tattachDataProcessorEvents.call(this, gantt, dp);\n\n\t\tdp.attachEvent(\"onDestroy\", function(){\n\t\t\tdetachDataProcessor(gantt, dp);\n\t\t});\n\t\tliveUpdateHooks(gantt, dp);\n\t};\n\n\tgantt.getUserData = function(id, name) {\n\t\tif (!this.userdata) this.userdata = {};\n\t\tif (this.userdata[id] && this.userdata[id][name]) return this.userdata[id][name];\n\t\treturn \"\";\n\t};\n\tgantt.setUserData = function(id, name, value) {\n\t\tif (!this.userdata) this.userdata = {};\n\t\tif (!this.userdata[id]) this.userdata[id] = {};\n\t\tthis.userdata[id][name] = value;\n\t};\n}\n\nmodule.exports = addDataProcessorHooks;\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__ (0);\n\nfunction updateCallback(upd, id) {\n\tvar data = upd.data || this.xml._xmlNodeToJSON(upd.firstChild);\n\tif(!this.isTaskExists(id))\n\t\treturn;\n\tvar objData = this.getTask(id);\n\tfor(var key in data) {\n\t\tvar property = data[key];\n\t\tswitch(key) {\n\t\t\tcase \"id\":\n\t\t\t\tcontinue;\n\t\t\tcase \"start_date\":\n\t\t\tcase \"end_date\":\n\t\t\t\tproperty = this.templates.xml_date(property);\n\t\t\t\tbreak;\n\t\t\tcase \"duration\":\n\t\t\t\tobjData.end_date = this.calculateEndDate({start_date: objData.start_date, duration: property, task:objData});\n\t\t\t\tbreak;\n\t\t}\n\t\tobjData[key] = property;\n\t}\n\tthis.updateTask(id);\n\tthis.refreshData();\n}\n\nfunction insertCallback(upd, id, parent, mode) {\n\tvar data = upd.data || this.xml._xmlNodeToJSON(upd.firstChild),\n\t\tmethods = {\n\t\t\tadd: this.addTask,\n\t\t\tisExist: this.isTaskExists\n\t\t};\n\tif(mode == \"links\") {\n\t\tmethods.add = this.addLink;\n\t\tmethods.isExist = this.isLinkExists;\n\t}\n\tif(methods.isExist.call(this, id))\n\t\treturn;\n\tdata.id = id;\n\tmethods.add.call(this, data);\n}\n\nfunction deleteCallback(upd, id, parent, mode) {\n\tvar methods = {\n\t\t\"delete\": this.deleteTask,\n\t\t\"isExist\": this.isTaskExists\n\t};\n\tif(mode == \"links\") {\n\t\tmethods[\"delete\"] = this.deleteLink;\n\t\tmethods.isExist = this.isLinkExists;\n\t}\n\tif(methods.isExist.call(this, id))\n\t\tmethods[\"delete\"].call(this, id);\n}\n\nfunction patchDataProcessor(gantt, dataprocessor){\n\tdataprocessor.attachEvent(\"insertCallback\", utils.bind(insertCallback, gantt));\n\tdataprocessor.attachEvent(\"updateCallback\", utils.bind(deleteCallback, gantt));\n\tdataprocessor.attachEvent(\"deleteCallback\", utils.bind(deleteCallback, gantt));\n}\n\nmodule.exports = patchDataProcessor;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\nvar eventable = __webpack_require__(2);\n\n/**\n\t* \t@desc: constructor, data processor object \n\t*\t@param: serverProcessorURL - url used for update\n\t*\t@type: public\n\t*/\nvar dataProcessor = function(serverProcessorURL){\n this.serverProcessor = serverProcessorURL;\n this.action_param=\"!nativeeditor_status\";\n \n\tthis.object = null;\n\tthis.updatedRows = []; //ids of updated rows\n\t\n\tthis.autoUpdate = true;\n\tthis.updateMode = \"cell\";\n\tthis._tMode=\"GET\"; \n\tthis._headers = null;\n\tthis._payload = null;\n\tthis.post_delim = \"_\";\n\t\n this._waitMode=0;\n this._in_progress={};//?\n this._invalid={};\n this.mandatoryFields=[];\n this.messages=[];\n \n this.styles={\n \tupdated:\"font-weight:bold;\",\n \tinserted:\"font-weight:bold;\",\n \tdeleted:\"text-decoration : line-through;\",\n \tinvalid:\"background-color:FFE0E0;\",\n \tinvalid_cell:\"border-bottom:2px solid red;\",\n \terror:\"color:red;\",\n \tclear:\"font-weight:normal;text-decoration:none;\"\n };\n \n this.enableUTFencoding(true);\n\teventable(this);\n\n return this;\n};\n\ndataProcessor.prototype={\n\tsetTransactionMode:function(mode,total){\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\t\t\t\n\t\t} else {\n \t this._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\"){\n\t\t\tthis._tSend = false;\n\t\t\tthis._endnm = true;\n\t\t\tthis._headers = this._headers || {};\n\t\t\tthis._headers[\"Content-type\"] = \"application/json\";\n\t\t}\n },\n escape:function(data){\n \tif (this._utf)\n \t\treturn encodeURIComponent(data);\n \telse\n \treturn escape(data);\n\t},\n /**\n\t* \t@desc: allows to set escaping mode\n\t*\t@param: true - utf based escaping, simple - use current page encoding\n\t*\t@type: public\n\t*/\t\n\tenableUTFencoding:function(mode){\n this._utf=!!mode;\n },\n /**\n\t* \t@desc: allows to define, which column may trigger update\n\t*\t@param: val - array or list of true/false values\n\t*\t@type: public\n\t*/\n\tsetDataColumns:function(val){\n\t\tthis._columns=(typeof val == \"string\")?val.split(\",\"):val;\n },\n /**\n\t* \t@desc: get state of updating\n\t*\t@returns: true - all in sync with server, false - some items not updated yet.\n\t*\t@type: public\n\t*/\n\tgetSyncState:function(){\n\t\treturn !this.updatedRows.length;\n\t},\n\t/**\n\t* \t@desc: enable/disable named field for data syncing, will use column ids for grid\n\t*\t@param: mode - true/false\n\t*\t@type: public\n\t*/\n\tenableDataNames:function(mode){\n\t\tthis._endnm= !!mode;\n\t},\n\t/**\n\t* \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*\t@param: mode - true/false\n\t*\t@type: public\n\t*/\n\tenablePartialDataSend:function(mode){\n\t\tthis._changed= !!mode;\n\t},\n\t/**\n\t* \t@desc: set if rows should be send to server automaticaly\n\t*\t@param: mode - \"row\" - based on row selection changed, \"cell\" - based on cell editing finished, \"off\" - manual data sending\n\t*\t@type: public\n\t*/\n\tsetUpdateMode:function(mode,dnd){\n\t\tthis.autoUpdate = (mode==\"cell\");\n\t\tthis.updateMode = mode;\n\t\tthis.dnd=dnd;\n\t},\n\tignore:function(code,master){\n\t\tthis._silent_mode=true;\n\t\tcode.call(master||window);\n\t\tthis._silent_mode=false;\n\t},\n\t/**\n\t* \t@desc: mark row as updated/normal. check mandatory fields,initiate autoupdate (if turned on)\n\t*\t@param: rowId - id of row to set update-status for\n\t*\t@param: state - true for \"updated\", false for \"not updated\"\n\t*\t@param: mode - update mode name\n\t*\t@type: public\n\t*/\n\tsetUpdated:function(rowId,state,mode){\n\t\tif (this._silent_mode) return;\n\t\tvar ind=this.findRow(rowId);\n\t\t\n\t\tmode=mode||\"updated\";\n\t\tvar existing = this.obj.getUserData(rowId,this.action_param);\n\t\tif (existing && mode == \"updated\") mode=existing;\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.obj.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} else{\n\t\t\tif (!this.is_invalid(rowId)){\n\t\t\t\tthis.updatedRows.splice(ind,1);\n\t\t\t\tthis.obj.setUserData(rowId,this.action_param,\"\");\n\t\t\t}\n\t\t}\n\n\t\t//clear changed flag\n\t\tif (!state)\n\t\t\tthis._clearUpdateFlag(rowId);\n \t\t\t\n\t\tthis.markRow(rowId,state,mode);\n\t\tif (state && this.autoUpdate) this.sendData(rowId);\n\t},\n\t_clearUpdateFlag:function(id){},\n\tmarkRow:function(id,state,mode){ \n\t\tvar str=\"\";\n\t\tvar invalid=this.is_invalid(id);\n\t\tif (invalid){\n \tstr=this.styles[invalid];\n \tstate=true;\n \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\t\t\t\n \tthis.obj[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 (var i=0; i < invalid.details.length; i++)\n\t\t\t\t\tif (invalid.details[i])\n \t\t\t\tthis.obj[this._methods[1]](id,i,str);\n\t\t\t}\n\t\t}\n\t},\n\tgetState:function(id){\n\t\treturn this.obj.getUserData(id,this.action_param);\n\t},\n\tis_invalid:function(id){\n\t\treturn this._invalid[id];\n\t},\n\tset_invalid:function(id,mode,details){ \n\t\tif (details) mode={value:mode, details:details, toString:function(){ return this.value.toString(); }};\n\t\tthis._invalid[id]=mode;\n\t},\n\t/**\n\t* \t@desc: check mandatory fields and varify values of cells, initiate update (if specified)\n\t*\t@param: rowId - id of row to set update-status for\n\t*\t@type: public\n\t*/\n\tcheckBeforeUpdate:function(rowId){ \n\t\treturn true;\n\t},\n\t/**\n\t* \t@desc: send row(s) values to server\n\t*\t@param: rowId - id of row which data to send. If not specified, then all \"updated\" rows will be send\n\t*\t@type: public\n\t*/\n\tsendData:function(rowId){\n\t\tif (this._waitMode && (this.obj.mytype==\"tree\" || this.obj._h2)) return;\n\t\tif (this.obj.editStop) this.obj.editStop();\n\t\n\t\t\n\t\tif(typeof rowId == \"undefined\" || this._tSend) return this.sendAllData();\n\t\tif (this._in_progress[rowId]) return false;\n\t\t\n\t\tthis.messages=[];\n\t\tif (!this.checkBeforeUpdate(rowId) && this.callEvent(\"onValidationError\",[rowId,this.messages])) return false;\n\t\tthis._beforeSendData(this._getRowData(rowId),rowId);\n },\n _beforeSendData:function(data,rowId){\n \tif (!this.callEvent(\"onBeforeUpdate\",[rowId,this.getState(rowId),data])) return false;\t\n\t\tthis._sendData(data,rowId);\n },\n serialize:function(data, id){\n \tif (typeof data == \"string\")\n \t\treturn data;\n \tif (typeof id != \"undefined\")\n \t\treturn this.serialize_one(data,\"\");\n \telse{\n \t\tvar stack = [];\n \t\tvar keys = [];\n \t\tfor (var key in data)\n \t\t\tif (data.hasOwnProperty(key)){\n \t\t\t\tstack.push(this.serialize_one(data[key],key+this.post_delim));\n \t\t\t\tkeys.push(key);\n\t\t\t\t}\n \t\tstack.push(\"ids=\"+this.escape(keys.join(\",\")));\n \t\tif (this.$gantt.security_key)\n\t\t\t\tstack.push(\"dhx_security=\"+this.$gantt.security_key);\n \t\treturn stack.join(\"&\");\n \t}\n },\n serialize_one:function(data, pref){\n \tif (typeof data == \"string\")\n \t\treturn data;\n \tvar stack = [];\n \tfor (var key in data)\n \t\tif (data.hasOwnProperty(key)){\n \t\t\tif ((key == \"id\" || key == this.action_param) && this._tMode == \"REST\") continue;\n \t\t\tstack.push(this.escape((pref||\"\")+key)+\"=\"+this.escape(data[key]));\n \t\t}\n\t\treturn stack.join(\"&\");\n },\n\t_applyPayload:function(url){\n\t\tvar ajax = this.$gantt.ajax;\n\t\tif (this._payload)\n\t\t\tfor (var key in this._payload)\n\t\t\t\turl = url + ajax.urlSeparator(url) + this.escape(key) + \"=\" + this.escape(this._payload[key]);\n\t\treturn url;\n\t},\n _sendData:function(a1,rowId){\n \tif (!a1) return; //nothing to send\n\t\tif (!this.callEvent(\"onBeforeDataSending\",rowId?[rowId,this.getState(rowId),a1]:[null, null, a1])) return false;\t\t\t\t\n\t\t\n \tif (rowId)\n\t\t\tthis._in_progress[rowId]=(new Date()).valueOf();\n\n\t\tvar that = this;\n\t\tvar back = function(xml){\n\t\t\tvar ids = [];\n\t\t\tif (rowId)\n\t\t\t\tids.push(rowId);\n\t\t\telse if (a1)\n\t\t\t\tfor (var key in a1)\n\t\t\t\t\tids.push(key);\n\n\t\t\treturn that.afterUpdate(that,xml,ids);\n\t\t};\n\t\tvar ajax = this.$gantt.ajax;\n\n\t\tvar a3 = this.serverProcessor+(this._user?(ajax.urlSeparator(this.serverProcessor)+[\"dhx_user=\"+this._user,\"dhx_version=\"+this.obj.getUserData(0,\"version\")].join(\"&\")):\"\");\n\t\tvar a4 = this._applyPayload(a3);\n\n\t\tif (this._tMode==\"GET\") {\n\t\t\tajax.query({\n\t\t\t\turl: a4 + ajax.urlSeparator(a4) + this.serialize(a1, rowId),\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcallback: back,\n\t\t\t\theaders: this._headers\n\t\t\t});\n\t\t} else if (this._tMode == \"POST\") {\n\t\t\tajax.query({\n\t\t\t\turl: a4,\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: this._headers,\n\t\t\t\tdata: this.serialize(a1, rowId),\n\t\t\t\tcallback: back\n\t\t\t});\n\t\t} else if (this._tMode == \"JSON\"){\n\t\t\tvar action = a1[this.action_param];\n\t\t\tvar data = {};\n\t\t\tfor (var key in a1) data[key] = a1[key];\n\t\t\tdelete data[this.action_param];\n\t\t\tdelete data.id;\n\t\t\tdelete data.gr_id;\n\n\t\t\tajax.query({\n\t\t\t\turl:a4,\n\t\t\t\tmethod:\"POST\",\n\t\t\t\theaders:this._headers,\n\t\t\t\tcallback:back,\n\t\t\t\tdata:JSON.stringify({\n\t\t\t\t\tid: rowId,\n\t\t\t\t\taction: action,\n\t\t\t\t\tdata: data\n\t\t\t\t})\n\t\t\t});\n\t\t}\n else if (this._tMode == \"REST\"){\n \tvar state = this.getState(rowId);\n \tvar url = a3.replace(/(\\&|\\?)editing\\=true/,\"\");\n \tvar data = \"\";\n \tvar method = \"post\";\n\n \tif (state == \"inserted\"){\n \t\tdata = this.serialize(a1, rowId);\n \t} else if (state == \"deleted\"){\n \t\tmethod = \"DELETE\";\n \t\turl = url + (url.slice(-1) == \"/\" ? \"\" : \"/\") + rowId;\n \t} else {\n \t\tmethod = \"PUT\";\n \t\tdata = this.serialize(a1, rowId);\n \t\turl = url + (url.slice(-1) == \"/\" ? \"\" : \"/\") + rowId;\n \t}\n\n\n \turl = this._applyPayload(url);\n \tajax.query({\n \t\turl:url,\n \t\tmethod:method,\n \t\theaders:this._headers,\n \t\tdata:data,\n \t\tcallback:back\n \t});\n }\n\n\t\tthis._waitMode++;\n },\n\tsendAllData:function(){\n\t\tif (!this.updatedRows.length) return;\t\t\t\n\n\t\tthis.messages=[]; var valid=true;\n\t\tfor (var i=0; i 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\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};\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports) {\n\nfunction 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\t function restoreMethods(){\n\t\tfor(var i in methods){\n\t\t\trestoreMethod.call(this, i);\n\t\t}\n\t}\n\n\tfunction batchUpdatePayload(callback){\n\t\ttry{\n\t\t\tcallback();\n\t\t}catch(e){\n\t\t\twindow.console.error(e);\n\t\t}\n\t}\n\n\tvar state = gantt.$services.getService(\"state\");\n\tstate.registerProvider(\"batchUpdate\", function(){\n\t\treturn {\n\t\t\tbatch_update: isActive\n\t\t};\n\t}, true);\n\n\treturn function batchUpdate(callback, noRedraw) {\n\t\tif(isActive){\n\t\t\t// batch mode is already active\n\t\t\tbatchUpdatePayload(callback);\n\t\t\treturn;\n\t\t}\n\n\t\tvar call_dp = (this._dp && this._dp.updateMode != \"off\");\n\t\tvar dp_mode;\n\t\tif (call_dp){\n\t\t\tdp_mode = this._dp.updateMode;\n\t\t\tthis._dp.setUpdateMode(\"off\");\n\t\t}\n\n\t\t// temporary disable some methods while updating multiple tasks\n\t\tvar resetProjects = {};\n\t\tvar methods = {\n\t\t\t\"render\":true,\n\t\t\t\"refreshData\":true,\n\t\t\t\"refreshTask\":true,\n\t\t\t\"refreshLink\":true,\n\t\t\t\"resetProjectDates\":function(task){\n\t\t\t\tresetProjects[task.id] = task;\n\t\t\t}\n\t\t};\n\n\t\tdisableMethods.call(this, methods);\n\n\t\tisActive = true;\n\t\tthis.callEvent(\"onBeforeBatchUpdate\", []);\n\n\t\tbatchUpdatePayload(callback);\n\n\t\tthis.callEvent(\"onAfterBatchUpdate\", []);\n\n\t\trestoreMethods.call(this);\n\n\t\t// do required updates after changes applied\n\t\tfor(var i in resetProjects){\n\t\t\tthis.resetProjectDates(resetProjects[i]);\n\t\t}\n\n\t\tisActive = false;\n\n\t\tif(!noRedraw){\n\t\t\tthis.render();\n\t\t}\n\n\t\tif (call_dp) {\n\t\t\tthis._dp.setUpdateMode(dp_mode);\n\t\t\tthis._dp.setGanttMode(\"tasks\");\n\t\t\tthis._dp.sendData();\n\t\t\tthis._dp.setGanttMode(\"links\");\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};\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports) {\n\nvar 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._groups && gantt._groups.is_active());\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\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.attachEvent(\"onAfterTaskMove\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n\n\tgantt.attachEvent(\"onBeforeParse\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n\n\tgantt.attachEvent(\"onAfterTaskDelete\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n\n\tgantt.attachEvent(\"onAfterTaskAdd\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n};\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports) {\n\nif (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})(jQuery);\n\n}\n\n\nmodule.exports = null;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports) {\n\nif (window.dhtmlx){\n\n\tif (!dhtmlx.attaches)\n\t\tdhtmlx.attaches = {};\n\n\tdhtmlx.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\tdhtmlXCellObject.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\t\tvar method_name=\"_viewRestore\";\n\t\tobj = null;\n\t\tthis.callEvent(\"_onContentAttach\",[]);\n\n\t\treturn this.dataObj;\n\t};\n}\n\nmodule.exports = null;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports) {\n\nfunction createResourceMethods(gantt){\n\n\tvar resourceTaskCache = {},\n\t\tresourceLoadCache = {};\n\n\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(){\n\t\tresourceTaskCache = {};\n\t\tresourceLoadCache = {};\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(propertyValue instanceof Array){\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\tfunction getResourceTasks(property, resourceIds) {\n\t\tvar res;\n\n\t\tvar cacheKey = resourceIds.join(\"_\") + \"_\" + property;\n\n\t\tvar resourceHash = {};\n\t\tfor(var i = 0; i < resourceIds.length; i++){\n\t\t\tresourceHash[resourceIds[i]] = 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 (resourceHash[task[property]] && task.type != gantt.config.types.project) {\n\t\t\t\t\tres.push(task);\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(resourceId, resourceProperty, scale){\n\t\tvar cacheKey = [resourceId, resourceProperty, scale.unit, scale.step].join(\"_\");\n\t\tvar res;\n\t\tif(!resourceTaskCache[cacheKey]){\n\t\t\tres = resourceTaskCache[cacheKey] = calculateResourceLoad(resourceId, resourceProperty, scale);\n\n\t\t}else{\n\t\t\tres = resourceTaskCache[cacheKey];\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction calculateResourceLoad(resourceProperty, resourceId, scale) {\n\n\t\tvar tasks = getTaskBy(resourceProperty, resourceId);\n\t\tvar step = scale.unit;\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[step + \"_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, 1, step);\n\n\t\t\t\tif (!gantt.isWorkTime({date: date, task: task})) {\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\t\ttasks: []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\ttimegrid[timestamp].tasks.push(task);\n\t\t\t}\n\t\t}\n\n\t\tvar timetable = [];\n\t\tvar start, end;\n\t\tfor (var i in timegrid) {\n\t\t\tstart = new Date(i * 1);\n\t\t\tend = gantt.date.add(start, 1, step);\n\t\t\ttimetable.push({\n\t\t\t\tstart_date: start,\n\t\t\t\tend_date: end,\n\t\t\t\ttasks: timegrid[i].tasks\n\t\t\t});\n\t\t}\n\n\t\treturn timetable;\n\t}\n\n\tfunction renderResourceLine(resource, timeline) {\n\t\tvar config = timeline.$getConfig(),\n\t\t\ttemplates = timeline.$getTemplates();\n\t\tvar timetable = getResourceLoad(config.resource_property, resource.id, timeline.getScale());\n\n\t\tvar cells = [];\n\t\tfor (var i = 0; i < timetable.length; i++) {\n\n\t\t\tvar day = timetable[i];\n\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\n\t\t\t\tcells.push(el);\n\t\t\t}\n\n\t\t}\n\n\t\tvar row = null;\n\t\tif(cells.length){\n\t\t\trow = document.createElement(\"div\");\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\trow.appendChild(cells[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn row;\n\t}\n\treturn {\n\t\trenderLine: renderResourceLine,\n\t\tfilterTasks: getTaskBy\n\t};\n}\n\nmodule.exports = function(gantt){\n\tvar methods = createResourceMethods(gantt);\n\n\tgantt.getTaskBy = methods.filterTasks;\n\tgantt.$ui.layers.resourceRow = methods.renderLine;\n\tgantt.config.resource_property = \"owner_id\";\n\tgantt.config.resource_store = \"resource\";\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\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(gantt) {\n};\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports) {\n\nmodule.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\n/***/ }),\n/* 75 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(gantt){\n\n\tvar htmlTags = new RegExp(\"<(?:.|\\n)*?>\", \"gm\");\n\tvar extraSpaces = new RegExp(\" +\", \"gm\");\n\n\tfunction stripHTMLLite(htmlText){\n\t\treturn (htmlText + \"\")\n\t\t\t.replace(htmlTags, \" \").\n\t\t\treplace(extraSpaces, \" \");\n\t}\n\n\tvar singleQuotes = new RegExp(\"'\", \"gm\");\n\tfunction escapeQuotes(text){\n\t\treturn (text + \"\").replace(singleQuotes, \"'\");\n\t}\n\n\tgantt._waiAria = {\n\t\tgetAttributeString: function(attr){\n\t\t\tvar attributes = [\" \"];\n\t\t\tfor(var i in attr){\n\t\t\t\tvar text = escapeQuotes(stripHTMLLite(attr[i]));\n\t\t\t\tattributes.push(i + \"='\" + text + \"'\");\n\t\t\t}\n\t\t\tattributes.push(\" \");\n\t\t\treturn attributes.join(\" \");\n\n\t\t},\n\n\t\tgetTimelineCellAttr:function(dateString){\n\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": dateString});\n\t\t},\n\n\n\t\t_taskCommonAttr: function(task, div){\n\n\t\t\tif(!(task.start_date && task.end_date))\n\t\t\t\treturn;\n\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(gantt.templates.tooltip_text(task.start_date, task.end_date, task)));\n\n\t\t\tif(gantt.isReadonly(task)){\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\n\n\n\t\t\t}\n\n\t\t\tif(task.$dataprocessor_class){\n\t\t\t\tdiv.setAttribute(\"aria-busy\", true);\n\t\t\t}\n\n\n\t\t\tdiv.setAttribute(\"aria-selected\",\n\t\t\t\t(gantt.getState().selected_task == task.id || (gantt.isSelectedTask && gantt.isSelectedTask(task.id))) ? \"true\" : \"false\");\n\t\t},\n\n\t\tsetTaskBarAttr: function(task, div){\n\t\t\tthis._taskCommonAttr(task, div);\n\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.drag_move){\n\t\t\t\tif(task.id != gantt.getState().drag_id){\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\n\t\t\t\t}else{\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", true);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\ttaskRowAttr: function(task, div){\n\n\t\t\tthis._taskCommonAttr(task, div);\n\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.order_branch){\n\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\n\t\t\t}\n\n\t\t\tdiv.setAttribute(\"role\", \"row\");\n\n\t\t\tdiv.setAttribute(\"aria-level\", task.$level);\n\n\t\t\tif(gantt.hasChild(task.id)){\n\t\t\t\tdiv.setAttribute(\"aria-expanded\", task.$open ? \"true\" : \"false\");\n\t\t\t}\n\t\t},\n\n\t\tlinkAttr: function(link, div){\n\n\t\t\tvar linkTypes = gantt.config.links;\n\n\t\t\tvar toStart = link.type == linkTypes.finish_to_start || link.type == linkTypes.start_to_start;\n\t\t\tvar fromStart = link.type == linkTypes.start_to_start || link.type == linkTypes.start_to_finish;\n\n\t\t\tvar content = gantt.locale.labels.link + \" \" + gantt.templates.drag_link(link.source, fromStart, link.target, toStart);\n\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(content));\n\t\t\tif(gantt.isReadonly(link)){\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\n\t\t\t}\n\t\t},\n\n\t\tgridSeparatorAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"separator\");\n\t\t},\n\n\t\tlightboxHiddenAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t},\n\n\t\tlightboxVisibleAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\n\t\t},\n\n\t\tlightboxAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t\tdiv.firstChild.setAttribute(\"role\", \"heading\");\n\t\t},\n\n\t\tlightboxButtonAttrString:function(buttonName){\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\":gantt.locale.labels[buttonName], \"tabindex\":\"0\"});\n\t\t},\n\n\t\tlightboxHeader: function(div, headerText){\n\t\t\tdiv.setAttribute(\"aria-label\", headerText);\n\t\t},\n\n\t\tlightboxSelectAttrString: function(time_option){\n\t\t\tvar label = \"\";\n\n\t\t\tswitch (time_option) {\n\t\t\t\tcase \"%Y\":\n\t\t\t\t\tlabel = gantt.locale.labels.years;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%m\":\n\t\t\t\t\tlabel = gantt.locale.labels.months;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%d\":\n\t\t\t\t\tlabel = gantt.locale.labels.days;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%H:%i\":\n\t\t\t\t\tlabel = gantt.locale.labels.hours + gantt.locale.labels.minutes;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": label});\n\t\t},\n\n\t\tlightboxDurationInputAttrString: function(section){\n\t\t\treturn this.getAttributeString({\"aria-label\": gantt.locale.labels.column_duration, \"aria-valuemin\": \"0\"});\n\t\t},\n\n\t\tgridAttrString: function(){\n\t\t\treturn [\" role='treegrid'\", gantt.config.multiselect ? \"aria-multiselectable='true'\" : \"aria-multiselectable='false'\", \" \"].join(\" \");\n\t\t},\n\n\n\t\tgridScaleRowAttrString: function(){\n\t\t\treturn \"role='row'\";\n\t\t},\n\n\t\tgridScaleCellAttrString: function(column, label){\n\t\t\tvar attrs = \"\";\n\t\t\tif(column.name == \"add\"){\n\t\t\t\tattrs = this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\n\t\t\t}else{\n\n\t\t\t\tvar attributes = {\n\t\t\t\t\t\"role\":\"columnheader\",\n\t\t\t\t\t\"aria-label\": label\n\t\t\t\t};\n\n\t\t\t\tif(gantt._sort && gantt._sort.name == column.name){\n\t\t\t\t\tif(gantt._sort.direction == \"asc\"){\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"ascending\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"descending\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tattrs = this.getAttributeString(attributes);\n\t\t\t}\n\t\t\treturn attrs;\n\t\t},\n\n\t\tgridDataAttrString: function(){\n\t\t\treturn \"role='rowgroup'\";\n\t\t},\n\n\t\tgridCellAttrString: function(column, textValue){\n\t\t\treturn this.getAttributeString({\"role\":\"gridcell\", \"aria-label\": textValue});\n\t\t},\n\n\t\tgridAddButtonAttrString: function(column){\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\n\t\t},\n\n\t\tmessageButtonAttrString: function(buttonLabel){\n\t\t\treturn \"tabindex='0' role='button' aria-label='\"+buttonLabel+\"'\";\n\t\t},\n\n\t\tmessageInfoAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"alert\");\n\t\t\t//div.setAttribute(\"tabindex\", \"-1\");\n\t\t},\n\n\t\tmessageModalAttr: function(div, uid){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t\tif(uid){\n\t\t\t\tdiv.setAttribute(\"aria-labelledby\", uid);\n\t\t\t}\n\n\t\t//\tdiv.setAttribute(\"tabindex\", \"-1\");\n\t\t},\n\n\t\tquickInfoAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t},\n\n\t\tquickInfoHeaderAttrString: function(){\n\t\t\treturn \" role='heading' \";\n\t\t},\n\n\t\tquickInfoHeader: function(div, header){\n\t\t\tdiv.setAttribute(\"aria-label\", header);\n\t\t},\n\n\t\tquickInfoButtonAttrString: function(label){\n\t\t\treturn gantt._waiAria.getAttributeString({\"role\":\"button\", \"aria-label\":label, \"tabindex\":\"0\"});\n\t\t},\n\n\t\ttooltipAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"tooltip\");\n\t\t},\n\n\t\ttooltipVisibleAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\n\t\t},\n\n\t\ttooltipHiddenAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t};\n\n\tfunction isDisabled(){\n\t\treturn !gantt.config.wai_aria_attributes;\n\t}\n\n\tfor(var i in gantt._waiAria){\n\t\tgantt._waiAria[i] = (function(payload){\n\t\t\treturn function(){\n\t\t\t\tif(isDisabled()){\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn payload.apply(this, arguments);\n\t\t\t};\n\t\t})(gantt._waiAria[i]);\n\t}\n\n\n};\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\nvar dateHelper = __webpack_require__(3);\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\tthis.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\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\tgantt.json = {\n\t\tparse: function (data) {\n\t\t\tgantt.assert(data, \"Invalid data\");\n\n\t\t\tif (typeof data == \"string\") {\n\t\t\t\tif (window.JSON)\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\telse {\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.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 (dateHelper.isDate(copy[key])) {\n\t\t\t\t\tcopy[key] = gantt.templates.xml_format(copy[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t},\n\t\tserialize: function () {\n\t\t\tvar tasks = [];\n\t\t\tvar links = [];\n\n\t\t\tgantt.eachTask(function (obj) {\n\t\t\t\tgantt.resetProjectDates(obj);\n\t\t\t\ttasks.push(this.serializeTask(obj));\n\t\t\t}, gantt.config.root_id, this);\n\n\t\t\tvar rawLinks = gantt.getLinks();\n\t\t\tfor (var i = 0; i < rawLinks.length; i++) {\n\t\t\t\tlinks.push(this.serializeLink(rawLinks[i]));\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: tasks,\n\t\t\t\tlinks: links\n\t\t\t};\n\t\t}\n\t};\n\n\t/*\n\t\n\t\t\n\t\t\tMy task 1\n\t\t\t16.08.2013\n\t\t\t22.08.2013\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t*/\n\n\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) throw \"Invalid XML data\";\n\n\t\t\tvar skey = xml.getAttribute(\"dhx_security\");\n\t\t\tif (skey)\n\t\t\t\tgantt.security_key = skey;\n\n\t\t\treturn xml;\n\t\t},\n\t\tparse: function (text, loader) {\n\t\t\tloader = this._getXML(text, loader);\n\t\t\tvar data = {};\n\n\t\t\tvar evs = data.data = [];\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\n\n\t\t\tfor (var i = 0; i < xml.length; i++)\n\t\t\t\tevs[i] = this._xmlNodeToJSON(xml[i]);\n\n\t\t\tdata.collections = this._getCollections(loader);\n\t\t\treturn data;\n\t\t},\n\t\t_copyLink: function (obj) {\n\t\t\treturn \"\";\n\t\t},\n\t\t_copyObject: function (obj) {\n\t\t\treturn \"\";\n\t\t},\n\t\tserialize: function () {\n\t\t\tvar tasks = [];\n\t\t\tvar links = [];\n\n\t\t\tvar json = gantt.json.serialize();\n\t\t\tfor (var i = 0, len = json.data.length; i < len; i++) {\n\t\t\t\ttasks.push(this._copyObject(json.data[i]));\n\t\t\t}\n\t\t\tfor (var i = 0, len = json.links.length; i < len; i++) {\n\t\t\t\tlinks.push(this._copyLink(json.links[i]));\n\t\t\t}\n\t\t\treturn \"\" + tasks.join(\"\") + \"\" + links.join(\"\") + \"\";\n\t\t}\n\t};\n\n\n\tgantt.oldxml = {\n\t\tparse: function (text, loader) {\n\t\t\tloader = gantt.xml._getXML(text, loader, \"projects\");\n\t\t\tvar data = {collections: {links: []}};\n\n\t\t\tvar evs = data.data = [];\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\n\n\t\t\tfor (var i = 0; i < xml.length; i++) {\n\t\t\t\tevs[i] = gantt.xml._xmlNodeToJSON(xml[i]);\n\t\t\t\tvar parent = xml[i].parentNode;\n\n\t\t\t\tif (parent.tagName == \"project\")\n\t\t\t\t\tevs[i].parent = \"project-\" + parent.getAttribute(\"id\");\n\t\t\t\telse\n\t\t\t\t\tevs[i].parent = parent.parentNode.getAttribute(\"id\");\n\t\t\t}\n\n\t\t\txml = gantt.ajax.xpath(\"//project\", loader);\n\t\t\tfor (var i = 0; i < xml.length; i++) {\n\t\t\t\tvar ev = gantt.xml._xmlNodeToJSON(xml[i], true);\n\t\t\t\tev.id = \"project-\" + ev.id;\n\t\t\t\tevs.push(ev);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < evs.length; i++) {\n\t\t\t\tvar ev = evs[i];\n\t\t\t\tev.start_date = ev.startdate || ev.est;\n\t\t\t\tev.end_date = ev.enddate;\n\t\t\t\tev.text = ev.name;\n\t\t\t\tev.duration = ev.duration / 8;\n\t\t\t\tev.open = 1;\n\t\t\t\tif (!ev.duration && !ev.end_date) ev.duration = 1;\n\t\t\t\tif (ev.predecessortasks)\n\t\t\t\t\tdata.collections.links.push({\n\t\t\t\t\t\ttarget: ev.id,\n\t\t\t\t\t\tsource: ev.predecessortasks,\n\t\t\t\t\t\ttype: gantt.config.links.finish_to_start\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t\tserialize: function () {\n\t\t\tgantt.message(\"Serialization to 'old XML' is not implemented\");\n\t\t}\n\t};\n\n\tgantt.serverList = function (name, array) {\n\t\tif (array) {\n\t\t\tthis.serverList[name] = array.slice(0);\n\t\t} else if (!this.serverList[name]) {\n\t\t\tthis.serverList[name] = [];\n\t\t}\n\t\treturn this.serverList[name];\n\t};\n\n};\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar CalendarManager = __webpack_require__(79),\n\tTimeCalculator = __webpack_require__(82),\n\tworktimeFacadeFactory = __webpack_require__(84),\n\tutils = __webpack_require__(0);\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\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(0);\nvar createArgumentsHelper = __webpack_require__(19);\nvar CalendarWorktimeStrategy = __webpack_require__(80);\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\tgetTaskCalendar: function (task) {\n\t\tvar config = this.$gantt.$services.config();\n\t\tif (!task) {\n\t\t\treturn this.getCalendar();\n\t\t} else if (task[config.calendar_property]) {\n\t\t\treturn this.getCalendar(task[config.calendar_property]);\n\t\t} else if (config.resource_calendars) {\n\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\n\t\treturn 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.$services.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.$services.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.$services.config();\n\t\tthis.restoreConfigCalendars(this.defaults);\n\t\tthis.restoreConfigCalendars(config.worktimes);\n\t}\n};\n\nmodule.exports = CalendarManager;\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Cache = __webpack_require__(81),\n\tutils = __webpack_require__(0);\n\nfunction CalendarWorkTimeStrategy(gantt, argumentsHelper){\n\tthis.argumentsHelper = argumentsHelper;\n\tthis.$gantt = gantt;\n\tthis._workingUnitsCache = new Cache();\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\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_getWorkHoursForRange: function (from, to) {\n\t\tvar hours = 0;\n\t\tvar start = new Date(from),\n\t\t\tend = new Date(to);\n\n\t\twhile (start.valueOf() < end.valueOf()) {\n\t\t\tif (this._isWorkTime(start, \"day\"))\n\t\t\t\thours += this._getHoursPerDay(start);\n\t\t\tstart = this._nextDate(start, \"day\", 1);\n\t\t}\n\t\treturn hours;\n\t},\n\t_getWorkUnitsBetweenHours: 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 hourRange = this._getWorkHoursForRange(firstDayEnd, lastDayStart);\n\t\t\thourRange = ((hourRange / step) + startPart + endPart);\n\n\t\t\treturn hourRange;\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\t\tvar is_work_unit = this._workingUnitsCache.get(unit, date);\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.put(unit, date, 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\n\t\tvar res = 0;\n\t\tif (config.unit == \"hour\") {\n\t\t\tres = this._getWorkUnitsBetweenHours(config.start_date, config.end_date, config.unit, config.step);\n\t\t} else {\n\t\t\tres = this._getWorkUnitsBetweenGeneric(config.start_date, config.end_date, config.unit, config.step);\n\t\t}\n\n\t\t// getDuration.. 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\tvar mult = (config.duration >= 0) ? 1 : -1;\n\t\treturn this._calculateEndDate(from, duration, unit, step * mult);\n\t},\n\t_calculateEndDate: function (from, duration, unit, step) {\n\t\tif (!unit)\n\t\t\treturn false;\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\twhile (added < duration) {\n\t\t\tvar next = this._nextDate(start, unit, step);\n\t\t\t//if(this.isWorkTime(step > 0 ? start : next, unit))\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\tstart = next;\n\t\t}\n\t\treturn start;\n\t},\n\n\tgetClosestWorkTime: function () {\n\t\tvar config = this.argumentsHelper.getClosestWorkTimeArguments.apply( this.argumentsHelper, arguments);\n\t\treturn this._getClosestWorkTime(config);\n\t},\n\n\t_getClosestWorkTime: function (settings) {\n\t\tif (this._isWorkTime(settings.date, settings.unit))\n\t\t\treturn settings.date;\n\n\t\tvar unit = settings.unit;\n\n\t\tvar curr = this.$gantt.date[unit + '_start'](settings.date);\n\n\t\tvar future_target = new Date(curr),\n\t\t\tprev_target = new Date(curr),\n\t\t\ttick = true,\n\t\t\tmaximum_loop = 3000,//be extra sure we won't fall into infinite loop, 3k seems big enough\n\t\t\tcount = 0,\n\t\t\tboth_directins = (settings.dir == 'any' || !settings.dir);\n\n\t\tvar inc = 1;\n\t\tif (settings.dir == 'past')\n\t\t\tinc = -1;\n\n\t\t//will seek closest working hour in future or in past, one step in one direction per iteration\n\t\twhile (!this._isWorkTime(curr, unit)) {\n\n\t\t\tif (both_directins) {\n\t\t\t\tcurr = tick ? future_target : prev_target;\n\t\t\t\tinc = inc * (-1);\n\t\t\t}\n\t\t\tvar tzOffset = curr.getTimezoneOffset();\n\t\t\tcurr = this.$gantt.date.add(curr, inc, unit);\n\n\t\t\tcurr = this.$gantt._correct_dst_change(curr, tzOffset, inc, unit);\n\t\t\tif (this.$gantt.date[unit + '_start'])\n\t\t\t\tcurr = this.$gantt.date[unit + '_start'](curr);\n\n\t\t\tif (both_directins) {\n\t\t\t\tif (tick) {\n\t\t\t\t\tfuture_target = curr;\n\t\t\t\t} else {\n\t\t\t\t\tprev_target = curr;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttick = !tick;\n\t\t\tcount++;\n\t\t\tif (count > maximum_loop) {\n\t\t\t\tthis.$gantt.assert(false, \"Invalid working time check\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tif (curr == prev_target || settings.dir == 'past') {\n\t\t\tcurr = this.$gantt.date.add(curr, 1, unit);\n\t\t}\n\n\t\treturn curr;\n\t}\n};\n\nmodule.exports = CalendarWorkTimeStrategy;\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports) {\n\nfunction WorkUnitsCache() {\n\tthis._cache = {};\n}\n\nWorkUnitsCache.prototype = {\n\t// cache previously calculated worktime\n\tget: function (unit, date) {\n\t\tvar result = -1;// default value (if not existed in the cache)\n\n\t\tvar cache = this._cache;\n\t\tif (cache && cache[unit]) {\n\t\t\tvar units = cache[unit];\n\t\t\tvar time = date.getTime();\n\t\t\tif (units[time] !== undefined)\n\t\t\t\tresult = units[time];\n\t\t}\n\t\treturn result;\n\t},\n\n\tput: function (unit, date, value) {\n\t\tif (!unit || !date) return false;\n\n\t\tvar cache = this._cache;\n\n\t\tvar time = date.getTime();\n\n\t\tvalue = !!value;\n\n\t\tif (!cache) return false;\n\t\tif (!cache[unit]) cache[unit] = {};\n\t\tcache[unit][time] = value;\n\t\treturn true;\n\t},\n\n\tclear: function () {\n\t\tthis._cache = {};\n\t}\n};\n\nmodule.exports = WorkUnitsCache;\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar createArgumentsHelper = __webpack_require__(19),\n\tNoWorkTimeCalendar = __webpack_require__(83);\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\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\nfunction 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\t\t\tstep = config.step;\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;\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// TODO: rework public api for date methods\nvar utils = __webpack_require__(0);\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\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dateHelper = __webpack_require__(3),\n\thelpers = __webpack_require__(6);\n\nmodule.exports = function(gantt) {\n\n\tgantt.isUnscheduledTask = function (task) {\n\t\treturn (!!task.unscheduled || !task.start_date);\n\t};\n\n\tgantt._isAllowedUnscheduledTask = function (task) {\n\t\treturn !!(task.unscheduled && gantt.config.show_unscheduled);\n\t};\n\n\tgantt.isTaskVisible = function (id) {\n\t\tif (!this.isTaskExists(id))\n\t\t\treturn false;\n\n\t\tvar task = this.getTask(id),\n\t\t\ttype = this.getTaskType(task.type);\n\n\t\tif (!((+task.start_date <= +this._max_date && +task.end_date >= +this._min_date) || gantt._isAllowedUnscheduledTask(task))){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn !!(gantt.getGlobalTaskIndex(id) >= 0);\n\t};\n\n\tgantt._defaultTaskDate = function (item, parent_id) {\n\t\tvar parent = (parent_id && parent_id != this.config.root_id) ? this.getTask(parent_id) : false,\n\t\t\tstartDate = '';\n\t\tif (parent) {\n\t\t\tstartDate = parent.start_date;\n\t\t} else {\n\t\t\tvar first = this.getTaskByIndex(0);\n\t\t\tstartDate = first ? (first.start_date ? first.start_date : (first.end_date ? this.calculateEndDate({\n\t\t\t\tstart_date: first.end_date,\n\t\t\t\tduration: -this.config.duration_step\n\t\t\t}) : '')) : this.config.start_date || this.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, this.getParent(task));\n\t\ttask.duration = task.duration || this.config.duration_step;\n\t\ttask.end_date = task.end_date || this.calculateEndDate(task);\n\t};\n\n\tgantt.createTask = function (item, parent, index) {\n\t\titem = item || {};\n\t\tif (!gantt.defined(item.id))\n\t\t\titem.id = gantt.uid();\n\n\t\tif (!item.start_date) {\n\t\t\titem.start_date = gantt._defaultTaskDate(item, parent);\n\t\t}\n\t\tif (item.text === undefined) {\n\t\t\titem.text = gantt.locale.labels.new_task;\n\t\t}\n\t\tif (item.duration === undefined) {\n\t\t\titem.duration = 1;\n\t\t}\n\n\t\tif (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\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\t\ttask.duration = task.duration || 0;\n\t};\n\n\tgantt.isSummaryTask = function (task) {\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\tif (dateHelper.isDate(config)) {\n\t\t\tconfig = {\n\t\t\t\tdate: config,\n\t\t\t\tunit: gantt.getScale().unit,\n\t\t\t\tstep: gantt.getScale().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\tvar scale = gantt.getScale();\n\t\tvar upper, lower, colIndex;\n\t\tif (unit == scale.unit && steps == scale.step &&\n\t\t\t+date >= +gantt._min_date && +date <= +gantt._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 (!gantt.getScale().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(gantt.getScale().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(this._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};\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = function(gantt) {\n\tvar domHelpers = __webpack_require__(1),\n\t\thelpers = __webpack_require__(6);\n\n\tgantt._lightbox_methods = {};\n\tgantt._lightbox_template = \"
 
\";\n\n\n\t//TODO: gantt._lightbox_id is changed from data.js and accessed from autoscheduling, check if it can be removed from gantt object\n\tvar state = gantt.$services.getService(\"state\");\n\tstate.registerProvider(\"lightbox\", function(){\n\t\treturn {\n\t\t\tlightbox: gantt._lightbox_id\n\t\t};\n\t});\n\n\tgantt.showLightbox = function (id) {\n\t\tif (!id || gantt.isReadonly(this.getTask(id))) return;\n\t\tif (!this.callEvent(\"onBeforeLightbox\", [id])) return;\n\n\t\tvar task = this.getTask(id);\n\n\t\tvar box = this.getLightbox(this.getTaskType(task.type));\n\t\tthis._center_lightbox(box);\n\t\tthis.showCover();\n\t\tthis._fill_lightbox(id, box);\n\n\t\tthis._waiAria.lightboxVisibleAttr(box);\n\n\t\tthis.callEvent(\"onLightbox\", [id]);\n\t};\n\n\tfunction _is_chart_visible(gantt) {\n\t\tvar timeline = gantt.$ui.getView(\"timeline\");\n\t\tif(timeline && timeline.isVisible()){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tgantt._get_timepicker_step = function () {\n\t\tif (this.config.round_dnd_dates) {\n\t\t\tvar scale = gantt.getScale(),\n\t\t\t\tstep = (helpers.getSecondsInUnit(scale.unit) * scale.step) / 60;//timepicker step is measured in minutes\n\t\t\tif (step >= 60 * 24 || !_is_chart_visible(this)) {\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\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\tvar d = document.createElement(\"DIV\");\n\t\t\td.className = \"gantt_cal_light\";\n\n\t\t\tvar full_width = this._is_lightbox_timepicker();\n\t\t\tif (gantt.config.wide_form || full_width)\n\t\t\t\td.className += \" gantt_cal_light_wide\";\n\n\t\t\tif (full_width) {\n\t\t\t\tgantt.config.wide_form = true;\n\t\t\t\td.className += \" gantt_cal_light_full\";\n\t\t\t}\n\n\n\t\t\td.style.visibility = \"hidden\";\n\n\t\t\tvar html = this._lightbox_template;\n\n\t\t\tvar ariaAttr;\n\t\t\tvar buttons = this.config.buttons_left;\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\t// needed to migrate from 'dhx_something' to 'gantt_something' naming in a lightbox\n\t\t\t\tvar button = this.config._migrate_buttons[buttons[i]] ? this.config._migrate_buttons[buttons[i]] : buttons[i];\n\n\t\t\t\tariaAttr = this._waiAria.lightboxButtonAttrString(button);\n\t\t\t\thtml += \"
\" + this.locale.labels[button] + \"
\";\n\n\t\t\t}\n\t\t\tbuttons = this.config.buttons_right;\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\tvar button = this.config._migrate_buttons[buttons[i]] ? this.config._migrate_buttons[buttons[i]] : buttons[i];\n\t\t\t\tariaAttr = this._waiAria.lightboxButtonAttrString(button);\n\n\t\t\t\thtml += \"
\" + this.locale.labels[button] + \"
\";\n\n\t\t\t}\n\t\t\thtml += \"\";\n\t\t\td.innerHTML = html;\n\n\t\t\tgantt._waiAria.lightboxAttr(d);\n\n\t\t\tif (gantt.config.drag_lightbox) {\n\t\t\t\td.firstChild.onmousedown = gantt._ready_to_dnd;\n\t\t\t\td.firstChild.onselectstart = function () {\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t\td.firstChild.style.cursor = \"pointer\";\n\t\t\t\tgantt._init_dnd_events();\n\n\t\t\t}\n\n\t\t\tdocument.body.insertBefore(d, document.body.firstChild);\n\t\t\tthis._lightbox = d;\n\n\t\t\tvar sns = this._get_typed_lightbox_config(type);\n\t\t\thtml = this._render_sections(sns);\n\n\t\t\tvar ds = d.getElementsByTagName(\"div\");\n\t\t\tfor (var i = 0; i < ds.length; i++) {\n\t\t\t\tvar t_ds = ds[i];\n\t\t\t\tif (t_ds.className == \"gantt_cal_larea\") {\n\t\t\t\t\tt_ds.innerHTML = html;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// bind labels to lightbox inputs\n\t\t\tfor (var i = 0; i < sns.length; i++) {\n\t\t\t\tvar section = sns[i];\n\t\t\t\tif (!section.id || !document.getElementById(section.id))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar labelBlock = document.getElementById(section.id);\n\t\t\t\tvar label = labelBlock.querySelector(\"label\");\n\t\t\t\tvar inputBlock = labelBlock.nextSibling;\n\t\t\t\tif (!inputBlock)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar input = inputBlock.querySelector(\"input, select, textarea\");\n\t\t\t\tif (input) {\n\t\t\t\t\tsection.inputId = input.id || \"input_\" + gantt.uid();\n\t\t\t\t\tif (!input.id)\n\t\t\t\t\t\tinput.id = section.inputId;\n\n\t\t\t\t\tlabel.setAttribute(\"for\", section.inputId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//sizes\n\t\t\tthis.resizeLightbox();\n\n\t\t\tthis._init_lightbox_events(this);\n\t\t\td.style.display = \"none\";\n\t\t\td.style.visibility = \"visible\";\n\t\t}\n\t\treturn this._lightbox;\n\t};\n\n\tgantt._render_sections = function (sns) {\n\t\tvar html = \"\";\n\t\tfor (var i = 0; i < sns.length; i++) {\n\t\t\tvar block = this.form_blocks[sns[i].type];\n\t\t\tif (!block) continue; //ignore incorrect blocks\n\t\t\tsns[i].id = \"area_\" + this.uid();\n\n\t\t\tvar display = sns[i].hidden ? \" style='display:none'\" : \"\";\n\t\t\tvar button = \"\";\n\t\t\tif (sns[i].button) {\n\t\t\t\tbutton = \"
\" + this.locale.labels[\"button_\" + sns[i].button] + \"
\";\n\t\t\t}\n\t\t\tif (this.config.wide_form) {\n\t\t\t\thtml += \"
\";\n\t\t\t}\n\t\t\thtml += \"
\" + block.render.call(this, sns[i]);\n\t\t\thtml += \"
\";\n\t\t}\n\t\treturn html;\n\t};\n\n\n\tgantt.resizeLightbox = function () {\n\t\tvar d = this._lightbox;\n\t\tif (!d) return;\n\n\t\tvar con = d.childNodes[1];\n\t\tcon.style.height = \"0px\";\n\t\tcon.style.height = con.scrollHeight + \"px\";\n\t\td.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\n\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 (e) {\n\t\t\tgantt._save_lightbox();\n\t\t};\n\n\n\t\tgantt.lightbox_events[\"gantt_delete_btn\"] = function (e) {\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 (e) {\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(\"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(\"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(\"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 32: {//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);\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}\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};\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((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 = (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}\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 time_format = sns.time_format;\n\t\t\tif (!time_format) {\n\t\t\t\t// default order\n\t\t\t\tvar time_format = [\"%d\", \"%m\", \"%Y\"];\n\t\t\t\tif (helpers.getSecondsInUnit(gantt.getScale().unit) < helpers.getSecondsInUnit(\"day\")) {\n\t\t\t\t\ttime_format.push(\"%H:%i\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t// map: default order => real one\n\t\t\tsns._time_format_order = {size: 0};\n\n\n\t\t\tvar cfg = this.config;\n\t\t\tvar dt = this.date.date_part(new Date(gantt._min_date.valueOf()));\n\t\t\tvar last = 24 * 60, first = 0;\n\t\t\tif (gantt.config.limit_time_select) {\n\t\t\t\tlast = 60 * cfg.last_hour + 1;\n\t\t\t\tfirst = 60 * cfg.first_hour;\n\t\t\t\tdt.setHours(cfg.first_hour);\n\t\t\t}\n\t\t\tvar html = \"\";\n\n\t\t\tfor (var p = 0; p < time_format.length; p++) {\n\t\t\t\tvar time_option = time_format[p];\n\n\t\t\t\t// adding spaces between selects\n\t\t\t\tif (p > 0) {\n\t\t\t\t\thtml += \" \";\n\t\t\t\t}\n\n\t\t\t\tvar options = '';\n\t\t\t\tswitch (time_option) {\n\t\t\t\t\tcase \"%Y\":\n\t\t\t\t\t\tsns._time_format_order[2] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//year\n\n\t\t\t\t\t\tvar range, offset, start_year, end_year;\n\n\t\t\t\t\t\tif (sns.year_range) {\n\t\t\t\t\t\t\tif (!isNaN(sns.year_range)) {\n\t\t\t\t\t\t\t\trange = sns.year_range;\n\t\t\t\t\t\t\t} else if (sns.year_range.push) {\n\t\t\t\t\t\t\t\t// if\n\t\t\t\t\t\t\t\tstart_year = sns.year_range[0];\n\t\t\t\t\t\t\t\tend_year = sns.year_range[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trange = range || 10;\n\t\t\t\t\t\toffset = offset || Math.floor(range / 2);\n\t\t\t\t\t\tstart_year = start_year || dt.getFullYear() - offset;\n\t\t\t\t\t\tend_year = end_year || start_year + range;\n\n\n\t\t\t\t\t\tfor (var i = start_year; i < end_year; i++)\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%m\":\n\t\t\t\t\t\tsns._time_format_order[1] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//month\n\t\t\t\t\t\tfor (var i = 0; i < 12; i++)\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%d\":\n\t\t\t\t\t\tsns._time_format_order[0] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//days\n\t\t\t\t\t\tfor (var i = 1; i < 32; i++)\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%H:%i\":\n\t\t\t\t\t\t// var last = 24*60, first = 0;\n\t\t\t\t\t\tsns._time_format_order[3] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//hours\n\t\t\t\t\t\tvar i = first;\n\t\t\t\t\t\tvar tdate = dt.getDate();\n\t\t\t\t\t\tsns._time_values = [];\n\n\t\t\t\t\t\twhile (i < last) {\n\t\t\t\t\t\t\tvar time = this.templates.time_picker(dt);\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\t\tsns._time_values.push(i);\n\t\t\t\t\t\t\tdt.setTime(dt.valueOf() + this._get_timepicker_step() * 60 * 1000);\n\t\t\t\t\t\t\tvar diff = (dt.getDate() != tdate) ? 1 : 0; // moved or not to the next day\n\t\t\t\t\t\t\ti = diff * 24 * 60 + dt.getHours() * 60 + dt.getMinutes();\n\t\t\t\t\t\t}\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\n\t\t\t\tif (options) {\n\n\t\t\t\t\tvar ariaAttrs = gantt._waiAria.lightboxSelectAttrString(time_option);\n\n\t\t\t\t\tvar readonly = sns.readonly ? \"disabled='disabled'\" : \"\";\n\t\t\t\t\tvar display = hidden ? \" style='display:none' \" : \"\";\n\t\t\t\t\thtml += \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn html;\n\t\t},\n\t\t_fill_lightbox_select: function (s, i, d, map, cfg) {\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: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar height = (sns.height || \"30\") + \"px\";\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tnode.innerHTML = value || \"\";\n\t\t\t},\n\t\t\tget_value: function (node, ev, config) {\n\t\t\t\treturn node.innerHTML || \"\";\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t}\n\t\t},\n\t\ttextarea: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar height = (sns.height || \"130\") + \"px\";\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tset_value: function (node, value, ev) {\n\t\t\t\tthis.form_blocks.textarea._get_input(node).value = value || \"\";\n\t\t\t},\n\t\t\tget_value: function (node, ev) {\n\t\t\t\treturn this.form_blocks.textarea._get_input(node).value;\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tvar a = this.form_blocks.textarea._get_input(node);\n\t\t\t\tgantt._focus(a, true);\n\t\t\t},\n\t\t\t_get_input: function (node) {\n\t\t\t\treturn node.querySelector(\"textarea\");\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar height = (sns.height || \"23\") + \"px\";\n\t\t\t\tvar html = \"
\";\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, sns) {\n\t\t\t\tvar select = node.firstChild;\n\t\t\t\tif (!select._dhx_onchange && sns.onchange) {\n\t\t\t\t\tselect.onchange = sns.onchange;\n\t\t\t\t\tselect._dhx_onchange = true;\n\t\t\t\t}\n\t\t\t\tif (typeof value == \"undefined\")\n\t\t\t\t\tvalue = (select.options[0] || {}).value;\n\t\t\t\tselect.value = value || \"\";\n\t\t\t},\n\t\t\tget_value: function (node, ev) {\n\t\t\t\treturn node.firstChild.value;\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tvar a = node.firstChild;\n\t\t\t\tgantt._focus(a, true);\n\t\t\t}\n\t\t},\n\t\ttime: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar time = this.form_blocks.getTimePicker.call(this, sns);\n\t\t\t\tvar parts = [\"
\"];\n\t\t\t\tparts.push(time);\n\n\t\t\t\tif (sns.single_date) {\n\t\t\t\t\ttime = this.form_blocks.getTimePicker.call(this, sns, true);\n\t\t\t\t\tparts.push(\"\");\n\t\t\t\t} else {\n\t\t\t\t\tparts.push(\"  –  \");\n\t\t\t\t}\n\n\t\t\t\tparts.push(time);\n\t\t\t\tparts.push(\"
\");\n\t\t\t\treturn parts.join('');\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tvar cfg = config;\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\n\t\t\t\tvar map = config._time_format_order;\n\t\t\t\tvar map_size = config._time_format_size;\n\n\t\t\t\tif (cfg.auto_end_date) {\n\t\t\t\t\tvar _update_lightbox_select = function () {\n\t\t\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\t\t\tend_date = gantt.calculateEndDate({start_date: start_date, duration: 1, task: ev});\n\t\t\t\t\t\tthis.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n\t\t\t\t\t};\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\ts[i].onchange = _update_lightbox_select;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar mapping = gantt._resolve_default_mapping(config);\n\n\t\t\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\n\n\t\t\t\tvar start_date = ev[mapping.start_date] || new Date();\n\t\t\t\tvar end_date = ev[mapping.end_date] || gantt.calculateEndDate({\n\t\t\t\t\tstart_date: start_date,\n\t\t\t\t\tduration: 1,\n\t\t\t\t\ttask: ev\n\t\t\t\t});\n\n\t\t\t\tthis.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\n\t\t\t\tthis.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n\t\t\t},\n\n\t\t\tget_value: function (node, ev, config) {\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\t\t\t\tvar map = config._time_format_order;\n\n\t\t\t\tvar hours = 0, minutes = 0;\n\t\t\t\tif (gantt.defined(map[3])) {\n\t\t\t\t\tvar time = parseInt(s[map[3]].value, 10);\n\t\t\t\t\thours = Math.floor(time / 60);\n\t\t\t\t\tminutes = time % 60;\n\t\t\t\t}\n\t\t\t\tvar start_date = new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\n\n\t\t\t\thours = minutes = 0;\n\t\t\t\tif (gantt.defined(map[3])) {\n\t\t\t\t\tvar time = parseInt(s[map.size + map[3]].value, 10);\n\t\t\t\t\thours = Math.floor(time / 60);\n\t\t\t\t\tminutes = time % 60;\n\t\t\t\t}\n\t\t\t\tvar end_date = new Date(s[map[2] + map.size].value, s[map[1] + map.size].value, s[map[0] + map.size].value, hours, minutes);\n\n\t\t\t\tif (end_date <= start_date)\n\t\t\t\t\tend_date = gantt.date.add(start_date, gantt._get_timepicker_step(), \"minute\");\n\n\t\t\t\tvar mapped_fields = gantt._resolve_default_mapping(config);\n\n\t\t\t\tvar res = {\n\t\t\t\t\tstart_date: new Date(start_date),\n\t\t\t\t\tend_date: new Date(end_date)\n\t\t\t\t};\n\t\t\t\tif (typeof mapped_fields == \"string\") {\n\t\t\t\t\treturn res.start_date;\n\t\t\t\t} else {\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\n\t\t\t}\n\t\t},\n\t\tduration: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar time = this.form_blocks.getTimePicker.call(this, sns);\n\t\t\t\ttime = \"
\" + time + \"
\";\n\t\t\t\tvar label = this.locale.labels[this.config.duration_unit + \"s\"];\n\n\t\t\t\tvar singleDate = sns.single_date ? ' style=\"display:none\"' : \"\";\n\t\t\t\tvar readonly = sns.readonly ? \" disabled='disabled'\" : \"\";\n\n\t\t\t\tvar ariaAttr = this._waiAria.lightboxDurationInputAttrString(sns);\n\n\t\t\t\tvar duration = \"
\" +\n\t\t\t\t\t\"\" +\n\t\t\t\t\t\"\" +\n\t\t\t\t\t\" \" + label + \" \" +\n\t\t\t\t\t\"
\";\n\t\t\t\tvar html = \"
\" + time + \" \" + duration + \"
\";\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tvar cfg = config;\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\t\t\t\tvar inps = node.getElementsByTagName(\"input\");\n\n\t\t\t\tvar duration = inps[1];\n\t\t\t\tvar btns = [inps[0], inps[2]];\n\t\t\t\tvar endspan = node.getElementsByTagName(\"span\")[0];\n\n\t\t\t\tvar map = config._time_format_order;\n\n\t\t\t\tfunction _calc_date() {\n\t\t\t\t\tvar start_date = gantt.form_blocks.duration._get_start_date.call(gantt, node, config);\n\t\t\t\t\tvar duration = gantt.form_blocks.duration._get_duration.call(gantt, node, config);\n\t\t\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: ev});\n\n\t\t\t\t\tendspan.innerHTML = gantt.templates.task_date(end_date);\n\t\t\t\t}\n\n\t\t\t\tfunction _change_duration(step) {\n\t\t\t\t\tvar value = duration.value;\n\t\t\t\t\tvalue = parseInt(value, 10);\n\t\t\t\t\tif (window.isNaN(value))\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\tvalue += step;\n\t\t\t\t\tif (value < 1) value = 1;\n\t\t\t\t\tduration.value = value;\n\t\t\t\t\t_calc_date();\n\t\t\t\t}\n\n\t\t\t\tbtns[0].onclick = gantt.bind(function () {\n\t\t\t\t\t_change_duration(-1 * this.config.duration_step);\n\t\t\t\t}, this);\n\t\t\t\tbtns[1].onclick = gantt.bind(function () {\n\t\t\t\t\t_change_duration(1 * this.config.duration_step);\n\t\t\t\t}, this);\n\t\t\t\ts[0].onchange = _calc_date;\n\t\t\t\ts[1].onchange = _calc_date;\n\t\t\t\ts[2].onchange = _calc_date;\n\t\t\t\tif (s[3]) s[3].onchange = _calc_date;\n\t\t\t\tduration.onkeydown = gantt.bind(function (e) {\n\t\t\t\t\te = e || window.event;\n\t\t\t\t\t// up\n\t\t\t\t\tvar code = (e.charCode || e.keyCode || e.which);\n\n\t\t\t\t\tif (code == 40) {\n\t\t\t\t\t\t_change_duration(-1 * this.config.duration_step);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// down\n\t\t\t\t\tif (code == 38) {\n\t\t\t\t\t\t_change_duration(1 * this.config.duration_step);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\twindow.setTimeout(function (e) {\n\t\t\t\t\t\t_calc_date();\n\t\t\t\t\t}, 1);\n\t\t\t\t}, this);\n\n\t\t\t\tduration.onchange = gantt.bind(function (e) {\n\t\t\t\t\t_calc_date();\n\t\t\t\t}, this);\n\n\t\t\t\tvar mapping = gantt._resolve_default_mapping(config);\n\t\t\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\n\n\t\t\t\tvar start_date = ev[mapping.start_date] || new Date();\n\t\t\t\tvar end_date = ev[mapping.end_date] || gantt.calculateEndDate({\n\t\t\t\t\tstart_date: start_date,\n\t\t\t\t\tduration: 1,\n\t\t\t\t\ttask: ev\n\t\t\t\t});\n\t\t\t\tvar duration_val = Math.round(ev[mapping.duration]) || gantt.calculateDuration({\n\t\t\t\t\tstart_date: start_date,\n\t\t\t\t\tend_date: end_date,\n\t\t\t\t\ttask: ev\n\t\t\t\t});\n\n\t\t\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\n\t\t\t\tduration.value = duration_val;\n\t\t\t\t_calc_date();\n\t\t\t},\n\n\t\t\t_get_start_date: function (node, config) {\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\t\t\t\tvar map = config._time_format_order;\n\t\t\t\tvar hours = 0;\n\t\t\t\tvar minutes = 0;\n\t\t\t\tif (gantt.defined(map[3])) {\n\t\t\t\t\tvar input = s[map[3]];\n\t\t\t\t\tvar time = parseInt(input.value, 10);\n\t\t\t\t\tif (isNaN(time) && input.hasAttribute(\"data-value\")) {\n\t\t\t\t\t\ttime = parseInt(input.getAttribute(\"data-value\"), 10);\n\t\t\t\t\t}\n\n\t\t\t\t\thours = Math.floor(time / 60);\n\t\t\t\t\tminutes = time % 60;\n\t\t\t\t}\n\t\t\t\treturn new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\n\t\t\t},\n\t\t\t_get_duration: function (node, config) {\n\t\t\t\tvar duration = node.getElementsByTagName(\"input\")[1];\n\t\t\t\tduration = parseInt(duration.value, 10);\n\t\t\t\tif (!duration || window.isNaN(duration)) duration = 1;\n\t\t\t\tif (duration < 0) duration *= -1;\n\t\t\t\treturn duration;\n\t\t\t},\n\n\t\t\tget_value: function (node, ev, config) {\n\t\t\t\tvar start_date = gantt.form_blocks.duration._get_start_date(node, config);\n\t\t\t\tvar duration = gantt.form_blocks.duration._get_duration(node, config);\n\n\t\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: ev});\n\t\t\t\tvar mapped_fields = gantt._resolve_default_mapping(config);\n\t\t\t\tvar res = {\n\t\t\t\t\tstart_date: new Date(start_date),\n\t\t\t\t\tend_date: new Date(end_date),\n\t\t\t\t\tduration: duration\n\t\t\t\t};\n\t\t\t\tif (typeof mapped_fields == \"string\") {\n\t\t\t\t\treturn res.start_date;\n\t\t\t\t} else {\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\n\t\t\t}\n\t\t},\n\t\tparent: {\n\t\t\t_filter: function (options, config, item_id) {\n\t\t\t\tvar filter = config.filter || function () {\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\n\t\t\t\toptions = options.slice(0);\n\n\t\t\t\tfor (var i = 0; i < options.length; i++) {\n\t\t\t\t\tvar task = options[i];\n\t\t\t\t\tif (task.id == item_id || gantt.isChildOf(task.id, item_id) || filter(task.id, task) === false) {\n\t\t\t\t\t\toptions.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\treturn options;\n\t\t\t},\n\n\t\t\t_display: function (config, item_id) {\n\t\t\t\tvar tasks = [],\n\t\t\t\t\toptions = [];\n\t\t\t\tif (item_id) {\n\t\t\t\t\ttasks = gantt.getTaskByTime();\n\t\t\t\t\tif (config.allow_root) {\n\t\t\t\t\t\ttasks.unshift({id: gantt.config.root_id, text: config.root_label || \"\"});\n\t\t\t\t\t}\n\t\t\t\t\ttasks = this._filter(tasks, config, item_id);\n\t\t\t\t\tif (config.sort) {\n\t\t\t\t\t\ttasks.sort(config.sort);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar text = config.template || gantt.templates.task_text;\n\t\t\t\tfor (var i = 0; i < tasks.length; i++) {\n\t\t\t\t\tvar label = text.apply(gantt, [tasks[i].start_date, tasks[i].end_date, tasks[i]]);\n\t\t\t\t\tif (label === undefined) {\n\t\t\t\t\t\tlabel = \"\";\n\t\t\t\t\t}\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tkey: tasks[i].id,\n\t\t\t\t\t\tlabel: label\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconfig.options = options;\n\t\t\t\tconfig.map_to = config.map_to || \"parent\";\n\t\t\t\treturn gantt.form_blocks.select.render.apply(this, arguments);\n\t\t\t},\n\t\t\trender: function (sns) {\n\t\t\t\treturn gantt.form_blocks.parent._display(sns, false);\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tvar tmpDom = document.createElement(\"div\");\n\t\t\t\ttmpDom.innerHTML = gantt.form_blocks.parent._display(config, ev.id);\n\t\t\t\tvar newOptions = tmpDom.removeChild(tmpDom.firstChild);\n\t\t\t\tnode.onselect = null;\n\t\t\t\tnode.parentNode.replaceChild(newOptions, node);\n\n\t\t\t\treturn gantt.form_blocks.select.set_value.apply(gantt, [newOptions, value, ev, config]);\n\t\t\t},\n\t\t\tget_value: function () {\n\t\t\t\treturn gantt.form_blocks.select.get_value.apply(gantt, arguments);\n\t\t\t},\n\t\t\tfocus: function () {\n\t\t\t\treturn gantt.form_blocks.select.focus.apply(gantt, arguments);\n\t\t\t}\n\t\t}\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} 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};\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(gantt) {\n\n\tgantt.getTaskType = function (type) {\n\t\treturn \"task\";\n\t};\n};\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports) {\n\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'_isCriticalTask',\n\t\t\t'isCriticalLink',\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};\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports) {\n\nfunction _configure(col, data, force) {\n\tfor (var key in data)\n\t\tif (typeof col[key] == \"undefined\" || force)\n\t\t\tcol[key] = data[key];\n}\n\nfunction _get_skin(force, gantt) {\n\tvar skin = gantt.skin;\n\tif (!skin || force) {\n\t\tvar links = document.getElementsByTagName(\"link\");\n\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\tvar res = links[i].href.match(\"dhtmlxgantt_([a-z\\_]+).css\");\n\t\t\tif (res) {\n\t\t\t\tif (gantt.skins[res[1]] || !skin) {\n\t\t\t\t\tskin = res[1];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgantt.skin = skin || \"terrace\";\n\tvar skinset = gantt.skins[gantt.skin] || gantt.skins[\"terrace\"];\n\n\t//apply skin related settings\n\t_configure(gantt.config, skinset.config, force);\n\n\tvar config = gantt.getGridColumns();\n\tif (config[1] && !gantt.defined(config[1].width))\n\t\tconfig[1].width = skinset._second_column_width;\n\tif (config[2] && !gantt.defined(config[2].width))\n\t\tconfig[2].width = skinset._third_column_width;\n\t\n\tfor (var i=0; i column.width) ? column.min_width : column.width;\n\t\t\t\tcolumn.width = (column.max_width && column.max_width < column.width) ? column.max_width : column.width;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (skinset.config.task_height)\n\t\tgantt.config.task_height = skinset.config.task_height || \"full\"; \n\n\tif (skinset._lightbox_template)\n\t\tgantt._lightbox_template = skinset._lightbox_template;\n\n\tif (skinset._redefine_lightbox_buttons) {\n\t\tgantt.config.buttons_right = skinset._redefine_lightbox_buttons[\"buttons_right\"];\n\t\tgantt.config.buttons_left = skinset._redefine_lightbox_buttons[\"buttons_left\"];\n\t}\n\n\n\tgantt.resetLightbox();\n}\n\nmodule.exports = function(gantt) {\n\tif(!gantt.resetSkin){\n\t\tgantt.resetSkin = function () {\n\t\t\tthis.skin = \"\";\n\t\t\t_get_skin(true, this);\n\t\t};\n\t\tgantt.skins = {};\n\n\t\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\n\t\t\t_get_skin(false, this);\n\t\t});\n\t}\n};\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports) {\n\n\n\nmodule.exports = function(gantt) {\n\tgantt.skins.broadway = {\n\t\tconfig: {\n\t\t\tgrid_width: 360,\n\t\t\trow_height: 35,\n\t\t\tscale_height: 35,\n\t\t\tlink_line_width: 1,\n\t\t\tlink_arrow_size: 7,\n\t\t\tlightbox_additional_height: 86\n\t\t},\n\t\t_second_column_width: 90,\n\t\t_third_column_width: 80,\n\n\t\t_lightbox_template: \"
 
\",\n\t\t_config_buttons_left: {},\n\t\t_config_buttons_right: {\n\t\t\t\"gantt_delete_btn\": \"icon_delete\",\n\t\t\t\"gantt_save_btn\": \"icon_save\"\n\t\t}\n\t};\n};\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports) {\n\nmodule.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};\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports) {\n\nmodule.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 dblclick_timer = 0;\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(\"task_id\") && task.getAttribute(\"task_id\") == 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};\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(gantt) {\n\tgantt.locale = {\n\t\tdate: {\n\t\t\tmonth_full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\tday_full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tday_short: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n\t\t},\n\t\tlabels: {\n\t\t\tnew_task: \"New task\",\n\t\t\ticon_save: \"Save\",\n\t\t\ticon_cancel: \"Cancel\",\n\t\t\ticon_details: \"Details\",\n\t\t\ticon_edit: \"Edit\",\n\t\t\ticon_delete: \"Delete\",\n\t\t\tconfirm_closing: \"\",//Your changes will be lost, are you sure?\n\t\t\tconfirm_deleting: \"Task will be deleted permanently, are you sure?\",\n\t\t\tsection_description: \"Description\",\n\t\t\tsection_time: \"Time period\",\n\t\t\tsection_type: \"Type\",\n\n\t\t\t/* grid columns */\n\t\t\tcolumn_wbs: \"WBS\",\n\t\t\tcolumn_text: \"Task name\",\n\t\t\tcolumn_start_date: \"Start time\",\n\t\t\tcolumn_duration: \"Duration\",\n\t\t\tcolumn_add: \"\",\n\n\t\t\t/* link confirmation */\n\t\t\tlink: \"Link\",\n\t\t\tconfirm_link_deleting: \"will be deleted\",\n\t\t\tlink_start: \" (start)\",\n\t\t\tlink_end: \" (end)\",\n\n\t\t\ttype_task: \"Task\",\n\t\t\ttype_project: \"Project\",\n\t\t\ttype_milestone: \"Milestone\",\n\n\t\t\tminutes: \"Minutes\",\n\t\t\thours: \"Hours\",\n\t\t\tdays: \"Days\",\n\t\t\tweeks: \"Week\",\n\t\t\tmonths: \"Months\",\n\t\t\tyears: \"Years\",\n\n\t\t\t/* message popup */\n\t\t\tmessage_ok: \"OK\",\n\t\t\tmessage_cancel: \"Cancel\"\n\n\t\t}\n\t};\n};\n\n\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar domHelpers = __webpack_require__(1),\n\thelpers = __webpack_require__(6);\n\nmodule.exports = function(gantt){\n\tvar calculateScaleRange = __webpack_require__(17);\n\n\tgantt.assert = __webpack_require__(101)(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\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\n\t\t//can be called only once\n\t\tthis.init = function(node){\n\t\t\tif (this.$container && this.$container.parentNode){\n\t\t\t\tthis.$container.parentNode.removeChild(this.$container);\n\t\t\t\tthis.$container = null;\n\t\t\t}\n\n\t\t\tif(this.$layout){\n\t\t\t\tthis.$layout.clear();\n\t\t\t}\n\t\t\tthis._reinit(node);\n\t\t};\n\n\t\tthis._reinit(node);\n\t};\n\n\tgantt._reinit = function(node){\n\t\tthis.callEvent(\"onBeforeGanttReady\", []);\n\t\t//this._init_tasks_range();\n\t\tthis.resetLightbox();\n\t\tthis._update_flags();\n\n\n\t\tvar config = this.$services.getService(\"templateLoader\");\n\t\tconfig.initTemplates(this);\n\n\t\tthis._clearTaskLayers();\n\t\tthis._clearLinkLayers();\n\n\t\t//this.clear\n\t\tif(this.$layout){\n\t\t\tthis.$layout.destructor();\n\t\t\tthis.$ui.reset();\n\t\t}\n\n\t\tthis.$root = domHelpers.toNode(node);\n\t\tif(this.$root){\n\t\t\tthis.$root.innerHTML = \"\";\n\t\t}\n\t\tthis.$root.gantt = this;\n\t\tcalculateScaleRange(this);\n\t\tthis.config.layout.id = \"main\";\n\t\tthis.$layout = this.$ui.createView(\"layout\", node, this.config.layout);\n\n\t\tthis.$layout.attachEvent(\"onBeforeResize\", function(){\n\t\t\tvar storeNames = gantt.$services.getService(\"datastores\");\n\t\t\tfor(var i = 0; i < storeNames.length; i++){\n\t\t\t\tgantt.getDatastore(storeNames[i]).filter();\n\t\t\t}\n\t\t});\n\n\t\tthis.$layout.attachEvent(\"onResize\", function(){\n\t\t\tgantt.refreshData();\n\t\t});\n\n\t\tthis.callEvent(\"onGanttLayoutReady\", []);\n\t\tthis.$layout.render();\n\n\t\tgantt.$container = this.$layout.$container.firstChild;\n\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\tgantt.$click={\n\t\tbuttons:{\n\t\t\t\"edit\":function(id){\n\t\t\t\tgantt.showLightbox(id);\n\t\t\t},\n\t\t\t\"delete\":function(id){\n\t\t\t\tvar question = gantt.locale.labels.confirm_deleting;\n\t\t\t\tvar title = gantt.locale.labels.confirm_deleting_title;\n\n\t\t\t\tgantt._dhtmlx_confirm(question, title, function(){\n\t\t\t\t\tif(!gantt.isTaskExists(id)){\n\t\t\t\t\t\tgantt.hideLightbox();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\t\tif(task.$new){\n\t\t\t\t\t\tgantt.silent(function(){\n\t\t\t\t\t\t\tgantt.deleteTask(id, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tgantt.refreshData();\n\t\t\t\t\t}else{\n\t\t\t\t\t\tgantt.deleteTask(id);\n\t\t\t\t\t}\n\n\t\t\t\t\tgantt.hideLightbox();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tgantt.getScrollState = function(){\n\t\tvar state = this._scroll_state();\n\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};\n\n\tgantt.scrollTo = function(left, top){\n\t\tvar vertical = this._getVerticalScrollbar();\n\t\tvar horizontal = this._getHorizontalScrollbar();\n\n\t\tvar oldV = vertical.getScrollState(),\n\t\t\toldH = horizontal.getScrollState();\n\n\t\tif (left*1 == left){\n\t\t\thorizontal.scroll(left);\n\t\t}\n\t\tif(top*1 == top){\n\t\t\tvertical.scroll(top);\n\t\t}\n\n\t\tvar newV = vertical.getScrollState(),\n\t\t\tnewH = horizontal.getScrollState();\n\n\t\tthis.callEvent(\"onGanttScroll\", [oldH.position, oldV.position, newH.position, newV.position]);\n\t};\n\n\tgantt.showDate = function(date){\n\t\tvar date_x = this.posFromDate(date);\n\t\tvar scroll_to = Math.max(date_x - this.config.task_scroll_offset, 0);\n\t\tthis.scrollTo(scroll_to);\n\t};\n\tgantt.showTask = function(id) {\n\t\tvar pos = this.getTaskPosition(this.getTask(id));\n\n\t\tvar left = Math.max(pos.left - this.config.task_scroll_offset, 0);\n\n\t\tvar dataHeight = this._scroll_state().y;\n\t\tvar top;\n\t\tif(!dataHeight){\n\t\t\ttop = pos.top;\n\t\t}else{\n\t\t\ttop = pos.top - (dataHeight - this.config.row_height)/2;\n\t\t}\n\n\t\tthis.scrollTo(left, top);\n\t};\n\n//renders self\n\tgantt.render = function(){\n\t\tthis.callEvent(\"onBeforeGanttRender\", []);\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._scroll_state = function(){\n\t\tvar result = {\n\t\t\tx: false,\n\t\t\ty: false,\n\t\t\tx_pos: 0,\n\t\t\ty_pos: 0,\n\t\t\tscroll_size: this.config.scroll_size + 1,//1px for inner content\n\t\t\tx_inner: 0,\n\t\t\ty_inner: 0\n\t\t};\n\n\t\tvar scrollVer = gantt._getVerticalScrollbar(),\n\t\t\tscrollHor = gantt._getHorizontalScrollbar();\n\t\tif(scrollHor){\n\t\t\tvar horState = scrollHor.getScrollState();\n\t\t\tif(horState.visible){\n\t\t\t\tresult.x = horState.size;\n\t\t\t\tresult.x_inner = horState.scrollSize;\n\t\t\t}\n\t\t\tresult.x_pos = horState.position || 0;\n\t\t}\n\n\t\tif(scrollVer){\n\t\t\tvar verState = scrollVer.getScrollState();\n\t\t\tif(verState.visible){\n\t\t\t\tresult.y = verState.size;\n\n\t\t\t\tresult.y_inner = verState.scrollSize;\n\t\t\t}\n\t\t\tresult.y_pos = verState.position || 0;\n\t\t}\n\n\t\treturn result;\n\t};\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.getGridColumns = function(){\n\t\treturn gantt.config.columns.slice();\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};\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports) {\n\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\t//jshint -W087\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\t\t\t\tdebugger;\n\t\t\t}\n\t\t}\n\t};\n};\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports) {\n\nfunction extend(gantt){\n\n\tgantt.destructor = function(){\n\t\tgantt.callEvent(\"onDestroy\", []);\n\n\t\tthis.clearAll();\n\t\tthis.detachAllEvents();\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\n\t\tthis.$services.destructor();\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};\n}\n\nmodule.exports = extend;\n\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(gantt){\n\n\tfunction deprecated(badCode, goodCode) {\n\n\t\tvar formatting = gantt.env.isIE ? \"\" : \"%c\";\n\n\n\t\tvar message = [\n\t\t\tformatting, \"\\\"\", badCode, \"\\\"\", formatting,\n\t\t\t\" has been deprecated in dhtmlxGantt v4.0 and will stop working in v6.0. 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\tfunction wrapDeprecated(method) {\n\t\treturn function () {\n\t\t\tdeprecated(\"dhtmlx.\" + method, \"gantt.\" + method);\n\t\t\treturn gantt[method].apply(gantt, arguments);\n\t\t};\n\t}\n\n\t/* dhtmlx */\n\n\n\tif (!window.dhtmlx)\n\t\twindow.dhtmlx = {};\n\n\tvar dhtmlxMethods = [\n\t\t\"message\",\n\t\t\"alert\",\n\t\t\"confirm\",\n\t\t\"modalbox\",\n\t\t\"uid\",\n\t\t\"copy\",\n\t\t\"mixin\",\n\t\t\"defined\",\n\t\t\"bind\",\n\t\t\"assert\"\n\t];\n\n\tvar dynMethods = [];\n\n\tfor(var i = 0; i < dhtmlxMethods.length; i++){\n\t\t// wrap dhtmlx methods with 'deprecated' warnings\n\t\t// do not wrap if methods are defined by dhtmlxSuite\n\t\tif(!window.dhtmlx[dhtmlxMethods[i]]){\n\t\t\tdynMethods.push(dhtmlxMethods[i]);\n\t\t\tdhtmlx[dhtmlxMethods[i]] = wrapDeprecated(dhtmlxMethods[i]);\n\t\t}\n\t}\n\n\tgantt.attachEvent(\"onDestroy\", function(){\n\t\tfor(var i = 0; i < dynMethods.length; i++){\n\t\t\tdelete window.dhtmlx[dynMethods[i]];\n\t\t}\n\t\tdynMethods = null;\n\n\t});\n\n\t/* global functions */\n\n\n\tif (!window.dataProcessor) {\n\t\twindow.dataProcessor = function (url) {\n\t\t\tdeprecated(\"new dataProcessor(url)\", \"new gantt.dataProcessor(url)\");\n\t\t\treturn new gantt.dataProcessor(url);\n\t\t};\n\t\tgantt.attachEvent(\"onDestroy\", function(){\n\t\t\twindow.dataProcessor = null;\n\t\t});\n\t}\n\n};\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// dhtmlxgantt.js"," \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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 63867f230ca27ef26312","var dateHelper = require(\"./date_helpers\");\n\nfunction copy(object) {\n\tvar i, t, result; // iterator, types array, result\n\n\tif (object && typeof object == \"object\") {\n\t\tresult = {};\n\t\tt = [Array,Number,String,Boolean];\n\t\tfor (i=0; i= 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 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\tif(strict === undefined)\n\t\tstrict = true;\n\n\tvar trg = getTargetNode(e);\n\tvar css = '';\n\tvar test = false;\n\twhile (trg){\n\t\tcss = getClassName(trg);\n\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\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\tif (ev.pageX || ev.pageY)\n\t\tvar pos = {x: ev.pageX, y: ev.pageY};\n\n\tvar d = document.documentElement;\n\tvar pos = {\n\t\tx: ev.clientX + d.scrollLeft - d.clientLeft,\n\t\ty: ev.clientY + d.scrollTop - d.clientTop\n\t};\n\n\tvar box = elementPosition(node);\n\tpos.x = pos.x - box.x + node.scrollLeft;\n\tpos.y = pos.y - box.y + node.scrollTop;\n\treturn pos;\n}\n\n\nfunction isChildOf(child, parent){\n\twhile(child && child != parent) {\n\t\tchild = child.parentNode;\n\t}\n\treturn child == parent;\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/utils/dom_helpers.js\n// module id = 1\n// module chunks = 0","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\teventHost[list[0]].removeEvent(list[1]); //remove event\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/utils/eventable.js\n// module id = 2\n// module chunks = 0","function isDate(obj) {\n\tvar fields = [\n\t\t\"getFullYear\",\n\t\t\"getMonth\",\n\t\t\"getDate\"\n\t];\n\t\n\tif (obj && typeof obj == \"object\") {\n\t\tfor (var i=0; i 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\tvar self = this;\n\n\t\tif(!this.$preResize){\n\t\t//\tself.callEvent(\"onResize\", [x, y]);\n\t\t}\n\t\tthis.$preResize = false;\n\t};\n\n\tCell.prototype.hide = function () {\n\t\tthis._hide(true);\n\t\tthis.resize();\n\t};\n\tCell.prototype.show = function (force) {\n\t\tthis._hide(false);\n\t\tif (force && this.$parent) {\n\t\t\tthis.$parent.show();\n\t\t}\n\t\tthis.resize();\n\t};\n\tCell.prototype._hide = function (mode) {\n\t\tif (mode === true && this.$view.parentNode) {\n\t\t\tthis.$view.parentNode.removeChild(this.$view);\n\t\t}\n\t\telse if (mode === false && !this.$view.parentNode) {\n\t\t\tvar index = this.$parent.cellIndex(this.$id);\n\t\t\tthis.$parent.moveView(this, index);\n\t\t}\n\t\tthis.$config.hidden = mode;\n\t};\n\tCell.prototype.$toHTML = function (content, css) {\n\t\tif (content === void 0) { content = \"\"; }\n\t\tcss = [(css || \"\"), (this.$config.css || \"\")].join(\" \");\n\t\tvar obj = this.$config;\n\t\tvar header = \"\";\n\t\tif (obj.raw) {\n\t\t\tcontent = typeof obj.raw === \"string\" ? obj.raw : \"\";\n\t\t}\n\t\telse {\n\t\t\tif (!content) {\n\t\t\t\tcontent = \"
\" + (obj.html || \"\") + \"
\";\n\t\t\t}\n\t\t\tif (obj.header) {\n\t\t\t\tvar collapseIcon = obj.canCollapse ? \"
\" : \"\";\n\t\t\t\theader = \"
\" + collapseIcon + \"
\" + obj.header + \"
\";\n\t\t\t}\n\t\t}\n\t\treturn \"
\" + header + content + \"
\";\n\t};\n\tCell.prototype.$fill = function (node, parent) {\n\t\tthis.$view = node;\n\t\tthis.$parent = parent;\n\t\tthis.init();\n\t};\n\tCell.prototype.getNode = function () {\n\t\treturn (this.$view.querySelector(\"gantt_layout_cell\") || this.$view);\n\t};\n\tCell.prototype.init = function () {\n\t\t// [NOT-GOOD] code is executed for each component, while it still has only one handler, it is no good\n\n\t\tvar self = this;\n\n\t\tthis._headerClickHandler = function(e){\n\t\t\tvar cellId = domHelpers.locateAttribute(e, \"data-cell-id\");\n\t\t\tif(cellId == self.$id){\n\t\t\t\tself.toggle();\n\t\t\t}\n\t\t};\n\n\t\tvar mouse = this.$gantt.$services.getService(\"mouseEvents\");\n\t\tmouse.delegate(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\n\n\t\tthis.callEvent(\"onReady\", []);\n\t};\n\tCell.prototype.toggle = function () {\n\t\tthis.$config.collapsed = !this.$config.collapsed;\n\t\tthis.resize();\n\t};\n\tCell.prototype.getSize = function () {\n\t\tvar size = {\n\t\t\theight: this.$config.height || 0,\n\t\t\twidth: this.$config.width || 0,\n\t\t\tgravity: this.$config.gravity || 1,\n\t\t\tminHeight: this.$config.minHeight || 0,\n\t\t\tminWidth: this.$config.minWidth || 0,\n\t\t\tmaxHeight: this.$config.maxHeight || 100000,\n\t\t\tmaxWidth: this.$config.maxWidth || 100000\n\t\t};\n\t\tif (this.$config.collapsed) {\n\t\t\tvar mode = this.$config.mode === \"x\";\n\t\t\tsize[mode ? \"width\" : \"height\"] = size[mode ? \"maxWidth\" : \"maxHeight\"] = this.$config.headerHeight;\n\t\t}\n\t\treturn size;\n\t};\n\n\tCell.prototype.getContentSize = function(){\n\n\t\tvar width = this.$lastSize.contentX;\n\t\tif(width !== width*1){\n\t\t\twidth = this.$lastSize.width;\n\t\t}\n\n\t\tvar height = this.$lastSize.contentY;\n\t\tif(height !== height*1){\n\t\t\theight = this.$lastSize.height;\n\t\t}\n\n\t\treturn {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t};\n\n\tCell.prototype._getBorderSizes = function(){\n\t\tvar borders = {\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft: 0,\n\t\t\thorizontal: 0,\n\t\t\tvertical: 0\n\t\t};\n\t\tif(this._currentBorders){\n\t\t\tif(this._currentBorders[this._borders.left]){\n\t\t\t\tborders.left = 1;\n\t\t\t\tborders.horizontal++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.right]){\n\t\t\t\tborders.right = 1;\n\t\t\t\tborders.horizontal++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.top]){\n\t\t\t\tborders.top = 1;\n\t\t\t\tborders.vertical++;\n\t\t\t}\n\n\t\t\tif(this._currentBorders[this._borders.bottom]){\n\t\t\t\tborders.bottom = 1;\n\t\t\t\tborders.vertical++;\n\t\t\t}\n\t\t}\n\n\t\treturn borders;\n\n\t};\n\n\tCell.prototype.setSize = function (x, y) {\n\t\tthis.$view.style.width = x + \"px\";\n\t\tthis.$view.style.height = y + \"px\";\n\n\t\tvar borders = this._getBorderSizes();\n\t\tvar contentY = y - borders.vertical;\n\t\tvar contentX = x - borders.horizontal;\n\n\t\tthis.$lastSize = { x: x, y: y, contentX: contentX, contentY: contentY };\n\t\tif (this.$config.header) {\n\t\t\tthis._sizeHeader();\n\t\t}else{\n\t\t\tthis._sizeContent();\n\t\t}\n\t};\n\n\tCell.prototype._borders = {\n\t\t\"left\":\"gantt_layout_cell_border_left\",\n\t\t\"right\":\"gantt_layout_cell_border_right\",\n\t\t\"top\":\"gantt_layout_cell_border_top\",\n\t\t\"bottom\":\"gantt_layout_cell_border_bottom\"\n\t};\n\n\tCell.prototype._setBorders = function(css, view){\n\t\tif(!view) {\n\t\t\tview = this;\n\t\t}\n\t\tvar node = view.$view;\n\n\t\tfor( var i in this._borders){\n\t\t\tdomHelpers.removeClassName(node, this._borders[i]);\n\t\t}\n\n\t\tif(typeof css == \"string\"){\n\t\t\tcss = [css];\n\t\t}\n\n\t\tvar cssHash = {};\n\n\t\tfor(var i = 0; i < css.length; i++){\n\t\t\tdomHelpers.addClassName(node, css[i]);\n\t\t\tcssHash[css[i]] = true;\n\t\t}\n\n\t\tview._currentBorders = cssHash;\n\t};\n\n\n\tCell.prototype._sizeContent = function(){\n\t\tvar content = this.$view.childNodes[0];\n\t\tif(content.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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/layout/cell.js\n// module id = 4\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/utils/extends.js\n// module id = 5\n// module chunks = 0","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] || unit.hour;\n}\n\nfunction forEach(arr, callback){\n\tvar workArray = arr.slice();\n\tfor(var i = 0; i < workArray.length; i++){\n\t\tcallback(workArray[i], i);\n\t}\n}\n\nfunction arrayMap(arr, callback){\n\tvar workArray = arr.slice();\n\tvar resArray = [];\n\n\tfor(var i = 0; i < workArray.length; i++){\n\t\tresArray.push(callback(workArray[i], i));\n\t}\n\n\treturn resArray;\n}\n\nmodule.exports = {\n\tgetSecondsInUnit: getSecondsInUnit,\n\tforEach: forEach,\n\tarrayMap: arrayMap\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/utils/helpers.js\n// module id = 6\n// module chunks = 0","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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/utils/env.js\n// module id = 7\n// module chunks = 0","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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/mouse_event_container.js\n// module id = 8\n// module chunks = 0","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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/utils/timeout.js\n// module id = 9\n// module chunks = 0","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\treturn {\n\t\tattach: function(el, event, handler, capture){\n\t\t\thandlers.push({element: el, event:event, callback: handler, capture: capture});\n\t\t\taddEvent(el, event, handler, capture);\n\t\t},\n\t\tdetach: function(el, event, handler, capture){\n\t\t\tremoveEvent(el, event, handler, 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 === handler && 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\tfor(var i = 0; i < handlers.length; i++){\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, handlers[i].capture);\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, undefined);\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, false);\n\t\t\t\tremoveEvent(handlers[i].element, handlers[i].event, handlers[i].callback, true);\n\t\t\t}\n\t\t\thandlers = [];\n\t\t},\n\t\textend: function(){\n\t\t\treturn createScope(this.event, this.eventRemove);\n\t\t}\n\t};\n}\n\nmodule.exports = createScope;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/utils/dom_event_scope.js\n// module id = 10\n// module chunks = 0","var __extends = require(\"../../../utils/extends\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\"),\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.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\t/*if(this.$root && !this._updatingScrollbars){\n\t\t\tthis._updatingScrollbars = true;\n\t\t\teachCell(function(cell){\n\t\t\t\tif(cell.$content && cell.$content.$name == \"scroller\"){\n\t\t\t\t\tcell.$content.toggleVisibility();\n\t\t\t\t}\n\t\t\t}, this);\n\t\t\tthis._updatingScrollbars = false;\n\t\t}*/\n\n\t};\n\n\tfunction eachCell(code, root){\n\t\tif(root.$cells){\n\t\t\tfor(var i = 0; i < root.$cells.length; i++){\n\t\t\t\tcode(root.$cells[i]);\n\t\t\t\teachCell(code, root.$cells[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\n\treturn Layout;\n}(Cell));\n\nmodule.exports = Layout;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/layout/layout.js\n// module id = 11\n// module chunks = 0","var ScaleHelper = require(\"./scales_ignore\");\nvar eventable = require(\"../../../utils/eventable\");\nvar utils = require(\"../../../utils/utils\");\n\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\teventable(this);\n};\n\nTimeline.prototype = {\n\tinit: function(container){\n\t\tcontainer.innerHTML += \"
\";\n\t\tthis.$task = container.childNodes[0];\n\n\t\tthis.$task.innerHTML = \"
\";\n\t\tthis.$task_scale = this.$task.childNodes[0];\n\n\t\tthis.$task_data = this.$task.childNodes[1];\n\t\tthis.$task_data.innerHTML = \"
\";\n\t\tthis.$task_bg = this.$task_data.childNodes[0];\n\t\tthis.$task_links = this.$task_data.childNodes[1];\n\t\tthis.$task_bars = this.$task_data.childNodes[2];\n\n\t\tthis._tasks = {\n\t\t\tcol_width: 0,\n\t\t\twidth: [], // width of each column\n\t\t\tfull_width: 0, // width of all columns\n\t\t\ttrace_x: [],\n\t\t\trendered: {}\n\t\t};\n\n\t\tvar config = this.$getConfig();\n\t\tvar attr = config[this.$config.bind + \"_attribute\"];\n\t\tvar linksAttr = config[this.$config.bindLinks + \"_attribute\"];\n\t\tif(!attr && this.$config.bind){\n\t\t\tattr = this.$config.bind + \"_id\";\n\t\t}\n\t\tif(!linksAttr && this.$config.bindLinks){\n\t\t\tlinksAttr = this.$config.bindLinks + \"_id\";\n\t\t}\n\t\tthis.$config.item_attribute = attr || null;\n\t\tthis.$config.link_attribute = linksAttr || null;\n\n\t\tvar layers = this._createLayerConfig();\n\t\tif(!this.$config.layers){\n\t\t\tthis.$config.layers = layers.tasks;\n\t\t}\n\t\tif(!this.$config.linkLayers){\n\t\t\tthis.$config.linkLayers = layers.links;\n\t\t}\n\n\t\tthis._attachLayers(this.$gantt);\n\t\tthis.callEvent(\"onReady\", []);\n\t\t//this.refresh();\n\t},\n\n\tsetSize: function(width, height){\n\t\tvar config = this.$getConfig();\n\n\t\tif(width*1 === width){\n\t\t\tthis.$config.width = width;\n\t\t}\n\t\tif(height*1 === height){\n\n\t\t\tthis.$config.height = height;\n\t\t\tvar dataHeight = Math.max(this.$config.height - config.scale_height);\n\t\t\tthis.$task_data.style.height = dataHeight + 'px';\n\t\t}\n\n\t\tthis.refresh();\n\t\tthis.$task_bg.style.backgroundImage = \"\";\n\n\t\tif(config.smart_rendering && this.$config.rowStore){\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tthis.$task_bg.style.height = config.row_height * store.countVisible() +\"px\";\n\t\t}else{\n\t\t\tthis.$task_bg.style.height = \"\";\n\t\t}\n\n\t\tvar scale = this._tasks;\n\t\t//timeline area layers\n\t\tvar data_els = this.$task_data.childNodes;\n\t\tfor(var i= 0, len = data_els.length; i < len; i++){\n\t\t\tvar el = data_els[i];\n\t\t\tif(el.hasAttribute(\"data-layer\") && el.style)\n\t\t\t\tel.style.width = scale.full_width + \"px\";\n\t\t}\n\t},\n\n\tisVisible: function(){\n\t\tif(this.$parent && this.$parent.$config){\n\t\t\treturn !this.$parent.$config.hidden;\n\t\t}else{\n\t\t\treturn this.$task.offsetWidth;\n\t\t}\n\t},\n\n\tgetSize: function(){\n\t\tvar config = this.$getConfig();\n\t\tvar store = this.$config.rowStore;\n\n\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0,\n\t\t\tcontentWidth = this._tasks.full_width;\n\n\t\treturn {\n\t\t\tx: this.$config.width,\n\t\t\ty: this.$config.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\t},\n\n\tscrollTo: function(left, top){\n\t\tif(!this.isVisible())\n\t\t\treturn;\n\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}\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}\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 x = this.$config.scrollLeft;\n\t\tvar width = this.$config.width;\n\n\t\tvar scales = this._scales;\n\t\tthis.$task_scale.innerHTML = this._getScaleChunkHtml(scales, x, x + width);\n\t},\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.taskBg,\n\t\t\t\tcontainer: this.$task_bg,\n\t\t\t\tfilter: [\n\t\t\t\t\tfunction(){\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\tself.$config.rowStore = self.$gantt.getDatastore(self.$config.bind);\n\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\"){\n\t\t\t\t\tlayer = {renderer: layer};\n\t\t\t\t}\n\n\t\t\t\tlayer.host = this;\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.host = this;\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\tif (store) {\n\t\t\t\t\tstaticRender.render(self.$task_bg, config, self.getScale(), config.row_height * store.countVisible());\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\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\tfor(var i = 0; i < this._taskLayers.length; i++){\n\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\n\t\t}\n\t\tfor(var i = 0; i < this._linkLayers.length; i++){\n\t\t\tlinkRenderer.removeLayer(this._linkLayers[i]);\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\n\t\t\tscales_html = this._getScaleChunkHtml(cfgs, 0, this.$config.width);\n\n\t\t\touter_width = cfg.full_width + \"px\";//cfg.full_width + (this._scroll_sizes().y ? scrollSizes.scroll_size : 0) + \"px\";\n\t\t\tscale_height += \"px\";\n\t\t}\n\n\t\tthis.$task_scale.style.height = scale_height;\n\n\t\tthis.$task_data.style.width =\n\t\t\tthis.$task_scale.style.width = outer_width;\n\n\t\tthis.$task_scale.innerHTML = scales_html;\n\n\t},\n\n\t_getScaleChunkHtml: function _get_scale_chunk_html (scales, fromPos, toPos) {\n\t\tvar templates = this.$gantt.$services.templates();\n\t\tvar html = [];\n\n\t\tvar css = templates.scale_row_class;\n\t\tfor (var i = 0; i < scales.length; i++) {\n\t\t\tvar cssClass = \"gantt_scale_line\";\n\t\t\tvar tplClass = css(scales[i]);\n\t\t\tif (tplClass) {\n\t\t\t\tcssClass += \" \" + tplClass;\n\t\t\t}\n\n\t\t\thtml.push(\"
\" + this._prepareScaleHtml(scales[i], fromPos, toPos) + \"
\");\n\t\t}\n\n\t\treturn html.join(\"\");\n\t},\n\t_prepareScaleHtml: function _prepare_scale_html(config, fromPos, toPos) {\n\t\tvar globalConfig = this.$getConfig();\n\t\tvar globalTemplates = this.$gantt.$services.templates();\n\n\t\tvar cells = [];\n\t\tvar date = null, content = null, css = null;\n\n\t\tif (config.template || config.date) {\n\t\t\tcontent = config.template || this.$gantt.date.date_to_str(config.date);\n\t\t}\n\n\t\tvar startIndex = 0,\n\t\t\tendIndex = config.count;\n\n\t\tif (globalConfig.smart_scales && (!isNaN(fromPos) && !isNaN(toPos))) {\n\t\t\tstartIndex = _findBinary(config.left, fromPos);\n\t\t\tendIndex = _findBinary(config.left, toPos) + 1;\n\t\t}\n\n\t\tcss = config.css || function () {\n\t\t\t};\n\t\tif (!config.css && globalConfig.inherit_scale_class) {\n\t\t\tcss = globalTemplates.scale_cell_class;\n\t\t}\n\n\t\tfor (var i = startIndex; i < endIndex; i++) {\n\t\t\tif (!config.trace_x[i]) break;\n\n\t\t\tdate = new Date(config.trace_x[i]);\n\t\t\tvar value = content.call(this, date),\n\t\t\t\twidth = config.width[i],\n\t\t\t\theight = config.height,\n\t\t\t\tleft = config.left[i],\n\t\t\t\tstyle = \"\",\n\t\t\t\ttemplate = \"\",\n\t\t\t\tcssclass = \"\";\n\n\t\t\tif (width) {\n\t\t\t\tvar position = globalConfig.smart_scales ? (\"position:absolute;left:\" + left + \"px\") : \"\";\n\n\t\t\t\tstyle = \"width:\" + (width) + \"px;height:\" + height + \"px;\" + position;\n\t\t\t\tcssclass = \"gantt_scale_cell\" + (i == config.count - 1 ? \" gantt_last_cell\" : \"\");\n\n\t\t\t\ttemplate = css.call(this, date);\n\t\t\t\tif (template) cssclass += \" \" + template;\n\n\t\t\t\tvar ariaAttr = this.$gantt._waiAria.getTimelineCellAttr(value);\n\t\t\t\tvar cell = \"
\" + value + \"
\";\n\t\t\t\tcells.push(cell);\n\t\t\t} else {\n\t\t\t\t//do not render ignored cells\n\t\t\t}\n\n\t\t}\n\t\treturn cells.join(\"\");\n\t},\n\tdateFromPos: function dateFromPos(x) {\n\t\tvar scale = this._tasks;\n\t\tif (x < 0 || x > scale.full_width || !scale.full_width) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar ind = _findBinary(this._tasks.left, x);\n\t\tvar summ = this._tasks.left[ind];\n\n\t\tvar col_width = scale.width[ind] || scale.col_width;\n\t\tvar part = 0;\n\t\tif (col_width) {\n\t\t\tpart = (x - summ) / col_width;\n\t\t\tif(scale.rtl){\n\t\t\t\tpart = 1 - part;\n\t\t\t}\n\n\t\t}\n\n\t\tvar unit = 0;\n\t\tif (part) {\n\t\t\tunit = this._getColumnDuration(scale, scale.trace_x[ind]);\n\t\t}\n\n\t\tvar date = new Date(scale.trace_x[ind].valueOf() + Math.round(part * unit));\n\t\treturn date;\n\t},\n\tposFromDate: function posFromDate(date) {\n\t\tif (!this.isVisible())\n\t\t\treturn 0;\n\n\t\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\t\treturn Math.round(pos);\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\t/*var day = null;\n\t\t for (var xind = 0, length = days.length-1; xind < length; xind++) {\n\t\t // | 8:00, 8:30 | 8:15 should be checked against 8:30\n\t\t // clicking at the most left part of the cell, say 8:30 should create event in that cell, not previous one\n\t\t day = +days[xind+1];\n\t\t if (pos < day && !ignores[day])\n\t\t break;\n\t\t }*/\n\n\t\tvar day_ind = _findBinary(days, pos);\n\t\tvar day = +days[day_ind];\n\t\twhile (ignores[day]) {\n\t\t\tday = days[++day_ind];\n\t\t}\n\n\t\tvar transition = this._tasks.trace_index_transition;\n\t\tvar index = day_ind;\n\t\tif(!day){\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[day_ind]) / this._getColumnDuration(this._tasks, days[day_ind]));\n\t\tif(transition){\n\t\t\treturn transition[index] + (1 - part);\n\t\t}else{\n\t\t\treturn index + part;\n\t\t}\n\n\t\t//return day_ind + ((date - days[day_ind]) / this._getColumnDuration(this._tasks, days[day_ind]));\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\tgetRowTop: function(index){\n\t\treturn index * this.$getConfig().row_height;\n\t},\n\n\tgetItemTop: function (task_id) {\n\t\tif(this.$config.rowStore){\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tif(!store) return 0;\n\n\t\t\treturn store.getIndexById(task_id) * this.$getConfig().row_height;\n\n\t\t}else{\n\t\t\treturn 0;\n\t\t}\n\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()].concat(config.subscales);\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\n\trefresh: function(){\n\t\tif(this.$config.bind) {\n\t\t\tthis.$config.rowStore = this.$gantt.getDatastore(this.$config.bind);\n\t\t}\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._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\n\t\tthis.$task = null;\n\t\tthis.$task_scale = null;\n\t\tthis.$task_data = null;\n\t\tthis.$task_bg = null;\n\t\tthis.$task_links = null;\n\t\tthis.$task_bars = null;\n\n\t\tthis.$gantt = null;\n\n\t\tif(this.$config.rowStore){\n\t\t\tthis.$config.rowStore.detachEvent(this._staticBgHandler);\n\t\t\tthis.$config.rowStore = null;\n\t\t}\n\t\tif(this.$config.linkStore){\n\t\t\tthis.$config.linkStore = null;\n\t\t}\n\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\n\t}\n};\n\nmodule.exports = Timeline;\n\nfunction _findBinary(array, target) {\n\t// modified binary search, target value not exactly match array elements, looking for closest one\n\n\tvar low = 0, high = array.length - 1, i, item, prev;\n\twhile (low <= high) {\n\n\t\ti = Math.floor((low + high) / 2);\n\t\titem = +array[i];\n\t\tprev = +array[i - 1];\n\t\tif (item < target) {\n\t\t\tlow = i + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (item > target) {\n\t\t\tif (!(!isNaN(prev) && prev < target)) {\n\t\t\t\thigh = i - 1;\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t// if target is between 'i' and 'i-1' return 'i - 1'\n\t\t\t\treturn i - 1;\n\t\t\t}\n\n\t\t}\n\t\twhile (+array[i] == +array[i + 1]) i++;\n\n\t\treturn i;\n\t}\n\treturn array.length - 1;\n}\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/timeline/timeline.js\n// module id = 12\n// module chunks = 0","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\tvar shared = 0;\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\tshared += share;\n\t\t\t}\n\t\t\tparts[parts.length - 1] += width;\n\t\t\t//parts[parts.length - 1] += width - shared;\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\tprimaryScale: function () {\n\n\t\t\tvar config = services.getService(\"templateLoader\");\n\t\t\tconfig.initTemplate(\"date_scale\", undefined, undefined, services.config(), services.templates());\n\n\t\t\treturn {\n\t\t\t\tunit: services.config().scale_unit,\n\t\t\t\tstep: services.config().step,\n\t\t\t\ttemplate: services.templates().date_scale,\n\t\t\t\tdate: services.config().date_scale,\n\t\t\t\tcss: services.templates().scale_cell_class\n\t\t\t};\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/timeline/scales.js\n// module id = 13\n// module chunks = 0","var domHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\"),\n\teventable = require(\"../../../utils/eventable\"),\n\tgridResize = require(\"./grid_resize\");\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};\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\t\tcontainer.innerHTML = \"
\";\n\t\tthis.$grid = container.childNodes[0];\n\n\t\tthis.$grid.innerHTML = \"
\";\n\n\t\tthis.$grid_scale = this.$grid.childNodes[0];\n\t\tthis.$grid_data = this.$grid.childNodes[1];\n\n\t\tvar attr = this.$getConfig()[this.$config.bind + \"_attribute\"];\n\t\tif(!attr && this.$config.bind){\n\t\t\tattr = this.$config.bind + \"_id\";\n\t\t}\n\t\tthis.$config.item_attribute = attr || null;\n\t\t\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\tsetSize: function(width, height){\n\t\tthis.$config.width = this.$state.width = width;\n\t\tthis.$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\tinnerWidth += columns[i].width*1;\n\t\t}\n\n\t\tvar outerWidth;\n\t\tif(isNaN(innerWidth) || !this.$config.scrollable){\n\t\t\touterWidth = this._setColumnsWidth(width + 1);\n\t\t\tinnerWidth = outerWidth;\n\t\t}\n\n\t\tif(this.$config.scrollable){\n\t\t\tthis.$grid_scale.style.width = innerWidth + \"px\";\n\t\t\tthis.$grid_data.style.width = innerWidth + \"px\";\n\t\t}else{\n\t\t\tthis.$grid_scale.style.width = \"inherit\";\n\t\t\tthis.$grid_data.style.width = \"inherit\";\n\t\t}\n\t\tthis.$config.width -= 1;\n\n\t\tvar config = this.$getConfig();\n\t\tif(outerWidth !== width){\n\t\t\tconfig.grid_width = outerWidth;\n\t\t\tthis.$config.width = outerWidth - 1;\n\t\t}\n\n\t\tvar dataHeight = Math.max(this.$state.height - config.scale_height, 0);\n\t\tthis.$grid_data.style.height = dataHeight + \"px\";\n\t\tthis.refresh();\n\t},\n\tgetSize: function(){\n\n\t\tvar config = this.$getConfig();\n\n\t\tvar store = this.$config.rowStore;\n\n\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0,\n\t\t\tcontentWidth = this._getGridWidth();\n\n\t\tvar size = {\n\t\t\tx: this.$state.width,\n\t\t\ty: this.$state.height,\n\t\t\tcontentX: this.isVisible() ? contentWidth: 0,\n\t\t\tcontentY: this.isVisible() ? (config.scale_height + contentHeight) : 0,\n\t\t\tscrollHeight: this.isVisible() ? contentHeight: 0,\n\t\t\tscrollWidth: this.isVisible() ? contentWidth : 0\n\t\t};\n\n\t\treturn size;\n\t},\n\trefresh: function(){\n\t\tif(this.$config.bind)\n\t\t\tthis.$config.rowStore = this.$gantt.getDatastore(this.$config.bind);\n\n\t\tthis._initSmartRenderingPlaceholder();\n\n\t\tthis._calculateGridWidth();\n\t\tthis._renderGridHeader();\n\t},\n\tscrollTo: function(left, top){\n\t\tif(!this.isVisible())\n\t\t\treturn;\n\n\t\tif (left*1 == left){\n\t\t\tthis.$state.scrollLeft = this.$grid.scrollLeft = left;\n\t\t}\n\n\t\t// var config = this.$getConfig();\n\t\tif(top*1 == top){\n\t\t\tthis.$state.scrollTop = this.$grid_data.scrollTop = top;\n\t\t}\n\t},\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\tgetItemTop: function(id){\n\t\tif(this.$config.rowStore){\n\t\t\tvar store = this.$config.rowStore;\n\t\t\tif(!store) return 0;\n\n\t\t\treturn store.getIndexById(id) * this.$getConfig().row_height;\n\n\t\t}else{\n\t\t\treturn 0;\n\t\t}\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.host = this;\n\t\t\tvar bar_layer = taskRenderer.addLayer(layer);\n\t\t\tthis._taskLayers.push(bar_layer);\n\t\t}\n\n\t\tif(this.$config.bind)\n\t\t\tthis.$config.rowStore = this.$gantt.getDatastore(this.$config.bind);\n\n\t\tthis._initSmartRenderingPlaceholder();\n\t},\n\n\t_initSmartRenderingPlaceholder: function(){\n\t\tvar self = this;\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\", 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.smart_rendering) {\n\t\t\t\tvar contentHeight = store ? config.row_height * store.countVisible() : 0;\n\t\t\t\tif(contentHeight){\n\t\t\t\t\tif(self.$rowsPlaceholder && self.$rowsPlaceholder.parentNode){\n\t\t\t\t\t\tself.$rowsPlaceholder.parentNode.removeChild(self.$rowsPlaceholder);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar placeholder = self.$rowsPlaceholder = document.createElement(\"div\");\n\t\t\t\t\tplaceholder.style.visibility = \"hidden\";\n\t\t\t\t\tplaceholder.style.height = contentHeight + \"px\";\n\t\t\t\t\tplaceholder.style.width = \"1px\";\n\t\t\t\t\tself.$grid_data.appendChild(placeholder);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t_initEvents: function(){\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\tfor(var i = 0; i < this._taskLayers.length; i++){\n\t\t\ttaskRenderer.removeLayer(this._taskLayers[i]);\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\t\tfor (var i=0; i 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 -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\t\t\t\t\t\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, this.$config.height);\n//\t\t\t\tthis.$parent.$config.width = cols_width;\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_renderGridHeader: function(){\n\t\tvar gantt = this.$gantt;\n\t\tvar config = this.$getConfig();\n\t\tvar locale = this.$gantt.locale;\n\t\tvar templates = this.$gantt.templates;\n\n\t\tvar columns = this.getGridColumns();\n\t\tif(config.rtl){\n\t\t\tcolumns = columns.reverse();\n\t\t}\n\t\tvar cells = [];\n\t\tvar width = 0,\n\t\t\tlabels = locale.labels;\n\n\t\tvar lineHeigth = config.scale_height - 1;\n\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar last = i == columns.length - 1;\n\t\t\tvar col = columns[i];\n\n\t\t\t// ensure columns have non-empty names\n\t\t\tif (!col.name) {\n\t\t\t\tcol.name = gantt.uid() + \"\";\n\t\t\t}\n\n\t\t\tvar colWidth = col.width * 1;\n\n\t\t\tvar gridWidth = this._getGridWidth();\n\t\t\tif (last && gridWidth > width + colWidth)\n\t\t\t\tcol.width = colWidth = gridWidth - width;\n\t\t\twidth += colWidth;\n\t\t\tvar sort = (gantt._sort && col.name == gantt._sort.name) ? (\"
\") : \"\";\n\t\t\tvar cssClass = [\"gantt_grid_head_cell\",\n\t\t\t\t(\"gantt_grid_head_\" + col.name),\n\t\t\t\t(last ? \"gantt_last_cell\" : \"\"),\n\t\t\t\ttemplates.grid_header_class(col.name, col)].join(\" \");\n\n\t\t\tvar style = \"width:\" + (colWidth - (last ? 1 : 0)) + \"px;\";\n\t\t\tvar label = (col.label || labels[\"column_\" + col.name]);\n\t\t\tlabel = label || \"\";\n\n\t\t\tvar ariaAttrs = gantt._waiAria.gridScaleCellAttrString(col, label);\n\n\t\t\tvar cell = \"
\" + label + sort + \"
\";\n\t\t\tcells.push(cell);\n\t\t}\n\t\tthis.$grid_scale.style.height = (config.scale_height) + \"px\";\n\t\tthis.$grid_scale.style.lineHeight = lineHeigth + \"px\";\n\t\t//this.$grid_scale.style.width = \"inherit\";\n\t\tthis.$grid_scale.innerHTML = cells.join(\"\");\n\n\t\tif(this._renderHeaderResizers){\n\t\t\tthis._renderHeaderResizers();\n\t\t}\n\t},\n\n\t_getGridWidth: function(){\n\t\t// TODO: refactor/remove/comment some of _getGridWidth/this.$config.width/this.$state.width, it's not clear what they do\n\t\treturn this.$config.width;\n\t},\n\n\tdestructor: function(){\n\t\tthis._clearLayers(this.$gantt);\n\t\tthis._mouseDelegates.destructor();\n\t\tthis._mouseDelegates = null;\n\t\tthis.$grid = null;\n\t\tthis.$grid_scale = null;\n\t\tthis.$grid_data = null;\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\n\t\tthis.callEvent(\"onDestroy\", []);\n\t\tthis.detachAllEvents();\n\t}\n};\n\nmodule.exports = Grid;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/grid/grid.js\n// module id = 14\n// module chunks = 0","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\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(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\tloaded.push(item);\n\t\t\t\t}\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(){ this.$insertAt(item.id,index);});\n\t\t}\n\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\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] = this._searchVisibleOrder[oldId];\n\t\tdelete this._searchVisibleOrder[oldId];\n\n\t\t//this.visibleOrder[this.visibleOrder.$find(oldId)]=newId;\n\t\tdelete this.pull[oldId];\n\t},\n\tchangeId: function(oldId, newId){\n\t\tthis._changeIdInner(oldId, newId);\n\n\t\tthis.callEvent(\"onIdChange\", [oldId, newId]);\n\n\t},\n\texists: function(id){\n\t\treturn !!(this.pull[id]);\n\t},\n\n\t_moveInner: function(sindex, tindex){\n\t\tvar id = this.getIdByIndex(sindex);\n\n\t\tthis._updateOrder(function(){\n\t\t\tthis.$removeAt(sindex);\n\t\t\tthis.$insertAt(id,Math.min(this.length, tindex));\n\t\t});\n\t\t//this.visibleOrder.$removeAt(sindex);\t//remove at old position\n\t\t//if (sindex=0 && tindex>=0, \"DataStore::move\",\"Incorrect indexes\");\n\n\t\tvar id = this.getIdByIndex(sindex);\n\t\tvar obj = this.getItem(id);\n\t\tthis._moveInner(sindex, tindex);\n\n\n\t\tif (!this._skip_refresh) {\n\t\t\t//repaint signal\n\t\t\tthis.callEvent(\"onStoreUpdated\", [obj.id, obj, \"move\"]);\n\t\t}\n\t},\n\tclearAll: function(){\n\t\tthis.pull = {};\n\t\tthis.visibleOrder = powerArray.$create();\n\t\tthis.fullOrder = powerArray.$create();\n\t\tif (this._skip_refresh) return;\n\t\tthis.callEvent(\"onClearAll\",[]);\n\t\tthis.refresh();\n\t},\n\n\tsilent:function(code, master){\n\t\tthis._skip_refresh = true;\n\t\tcode.call(master||this);\n\t\tthis._skip_refresh = false;\n\t},\n\n\tarraysEqual: function (arr1, arr2) {\n\t\tif(arr1.length !== arr2.length)\n\t\t\treturn false;\n\t\tfor(var i = 0; i < arr1.length; i++) {\n\t\t\tif(arr1[i] !== arr2[i])\n\t\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\trefresh: function(id, quick){\n\t\tif (this._skip_refresh) return;\n\n\t\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\tthis.callEvent(\"onStoreUpdated\",[id, this.pull[id], \"paint\"]);\n\t\telse\n\t\t\tthis.callEvent(\"onStoreUpdated\",[null,null,null]);\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=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=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime()+\"=1\";\n\t\t\t}\n\n\t\t\tt.open(method, url, async);\n\n\t\t\tif (headers){\n\t\t\t\tfor (var key in headers)\n\t\t\t\t\tt.setRequestHeader(key, headers[key]);\n\t\t\t} else if (method.toUpperCase() == \"POST\" || method == \"PUT\" || method == \"DELETE\") {\n\t\t\t\tt.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\t\t\t} else if (method == \"GET\") {\n\t\t\t\tpostData = null;\n\t\t\t}\n\n\t\t\tt.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n\n\t\t\tt.send(postData);\n\n\t\t\tif (!async) return {xmlDoc:t, filePath:url}; // dhtmlx-compat, response.xmlDoc.responseXML/responseText\n\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/common/ajax.js\n// module id = 26\n// module chunks = 0","/*\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\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\", \"return \\\"\" + format + \"\\\";\");\n\n\t\t\treturn function (date) {\n\t\t\t\treturn dateToStr(date, dateHelper.to_fixed, gantt.locale, dateHelper.getISOWeek);\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\tif (!ndate) return false;\n\t\t\tvar nday = ndate.getDay();\n\t\t\tif (nday === 0) {\n\t\t\t\tnday = 7;\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\t\tgetUTCISOWeek: function (ndate) {\n\t\t\treturn this.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 (gantt.defined(format)) {\n\t\t\t\t\tif (typeof(format) == \"string\")\n\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\telse\n\t\t\t\t\t\tformat = gantt.templates.xml_date;\n\t\t\t\t}\n\t\t\t\tif (date)\n\t\t\t\t\tdate = format(date);\n\t\t\t\telse\n\t\t\t\t\tdate = null;\n\t\t\t}\n\t\t\treturn date;\n\t\t}\n\t};\n\treturn dateHelper;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/common/date.js\n// module id = 27\n// module chunks = 0","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\tvar scroll = utils.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 (e && e.preventDefault) //Cancel default action on DND\n\t\t\t\t\te.preventDefault();\n\t\t\t\t(e || event).cancelBubble = true;\n\t\t\t\tif (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 true;\n\t\t\t\t}\n\t\t\t\treturn mousemove(e);\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\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\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;\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 true;\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\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 false;\n\t\t\t}\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\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\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/common/dnd.js\n// module id = 28\n// module chunks = 0","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\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_date: date.str_to_date(c.xml_date, c.server_utc),\n\t\t\txml_format: d(c.xml_date, c.server_utc),\n\t\t\tapi_date: date.str_to_date(c.api_date),\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\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\ttask_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 \"
\";\n\t\t\t},\n\t\t\tgrid_folder: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tgrid_file: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tgrid_open: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tgrid_blank: function (item) {\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tdate_grid: function (date, item) {\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);\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_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 \"\" + from.text + \"\" + to.text + \"\";\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 = \"\" + from.text + \" \" + (from_start ? labels.link_start : labels.link_end) + \"
\";\n\t\t\t\tif (to) {\n\t\t\t\t\tto = gantt.getTask(to);\n\t\t\t\t\ttext += \" \" + to.text + \" \" + (to_start ? labels.link_start : labels.link_end) + \"
\";\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 \"Task: \" + event.text + \"
Start date: \" + gantt.templates.tooltip_date_format(start) + \"
End date: \" + 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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/common/templates.js\n// module id = 29\n// module chunks = 0","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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/common/state.js\n// module id = 30\n// module chunks = 0","var utils = require(\"../utils/utils\");\nvar domHelpers = require(\"../utils/dom_helpers\");\n\nmodule.exports = function(gantt) {\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\t\tvar height = document.body.scrollHeight;\n\t\tmodality.cover.style.display = mode ? \"inline-block\" : \"none\";\n\t}\n\n\tfunction button(text, className, result) {\n\t\tvar buttonAriaAttrs = gantt._waiAria.messageButtonAttrString(text);\n\t\tvar name = className.toLowerCase().replace(/ /g, \"_\");\n\t\tvar button_css = \"gantt_\" + name + \"_button\" + \" dhtmlx_\" + name + \"_button\"; // dhtmlx_ok_button, dhtmlx_click_me_button\n\t\treturn \"
\" + text + \"
\";\n\t}\n\n\tfunction info(text) {\n\t\tif (!messageBox.area) {\n\t\t\tmessageBox.area = document.createElement(\"DIV\");\n\t\t\tmessageBox.area.className = \"gantt_message_area dhtmlx_message_area\";\n\t\t\tmessageBox.area.style[messageBox.position] = \"5px\";\n\t\t\tdocument.body.appendChild(messageBox.area);\n\t\t}\n\n\t\tmessageBox.hide(text.id);\n\t\tvar message = document.createElement(\"DIV\");\n\t\tmessage.innerHTML = \"
\" + text.text + \"
\";\n\t\tmessage.className = \"gantt-info dhtmlx-info gantt-\" + text.type + \" dhtmlx-\" + text.type;\n\t\tmessage.onclick = function () {\n\t\t\tmessageBox.hide(text.id);\n\t\t\ttext = null;\n\t\t};\n\n\t\tgantt._waiAria.messageInfoAttr(message);\n\n\t\tif (messageBox.position == \"bottom\" && messageBox.area.firstChild)\n\t\t\tmessageBox.area.insertBefore(message, messageBox.area.firstChild);\n\t\telse\n\t\t\tmessageBox.area.appendChild(message);\n\n\t\tif (text.expire > 0)\n\t\t\tmessageBox.timers[text.id] = window.setTimeout(function () {\n\t\t\t\tmessageBox.hide(text.id);\n\t\t\t}, text.expire);\n\n\t\tmessageBox.pull[text.id] = message;\n\t\tmessage = null;\n\n\t\treturn text.id;\n\t}\n\n\tfunction getFirstDefined() {\n\t\tvar values = [].slice.apply(arguments, [0]);\n\n\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\tif (values[i]) {\n\t\t\t\treturn values[i];\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction _boxStructure(config, ok, cancel) {\n\t\tvar box = document.createElement(\"DIV\");\n\n\t\tvar locale = gantt.locale;\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(\"dhxbox\", 1);\n\n\t\tvar inner = '';\n\n\t\tif (config.width)\n\t\t\tbox.style.width = config.width;\n\t\tif (config.height)\n\t\t\tbox.style.height = config.height;\n\t\tif (config.title)\n\t\t\tinner += '
' + config.title + '
';\n\t\tinner += '
' + (config.content ? '' : config.text) + '
';\n\t\tif (ok)\n\t\t\tinner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\n\t\tif (cancel)\n\t\t\tinner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\n\n\t\tif (config.buttons) {\n\t\t\tfor (var i = 0; i < config.buttons.length; i++) {\n\t\t\t\tvar btn = config.buttons[i];\n\t\t\t\tif (typeof btn == \"object\") {\n\t\t\t\t\t// Support { label:\"Save\", css:\"main_button\", value:\"save\" }\n\t\t\t\t\tvar label = btn.label;\n\t\t\t\t\tvar css = btn.css || (\"gantt_\" + btn.label.toLowerCase() + \"_button dhtmlx_\" + btn.label.toLowerCase() + \"_button\");\n\t\t\t\t\tvar value = btn.value || i;\n\t\t\t\t\tinner += button(label, css, value);\n\t\t\t\t} else {\n\t\t\t\t\tinner += button(btn, btn, i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinner += '
';\n\t\tbox.innerHTML = inner;\n\n\t\tif (config.content) {\n\t\t\tvar node = config.content;\n\t\t\tif (typeof node == \"string\")\n\t\t\t\tnode = document.getElementById(node);\n\t\t\tif (node.style.display == 'none')\n\t\t\t\tnode.style.display = \"\";\n\t\t\tbox.childNodes[config.title ? 1 : 0].appendChild(node);\n\t\t}\n\n\t\tbox.onclick = function (e) {\n\t\t\te = e || event;\n\t\t\tvar source = e.target || e.srcElement;\n\t\t\tif (!source.className) source = source.parentNode;\n\t\t\tif (source.className.split(\" \")[0] == \"gantt_popup_button\") {\n\t\t\t\tvar result = source.getAttribute(\"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(\"dhxbox\"))\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\tvar domHelpers = require(\"../utils/dom_helpers\");\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/message.js\n// module id = 31\n// module chunks = 0","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\nvar renderTaskBar = require(\"./render/task_bar_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 inheritGridConfig(id){\n\t\treturn {\n\t\t\t//width: gantt.config.grid_width\n\t\t};\n\t}\n\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\n\tvar layersEngine = createLayers(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: gridRenderer(gantt),\n\t\t\ttaskBg: renderTaskBg(gantt),\n\t\t\ttaskBar: renderTaskBar(gantt),\n\t\t\tlink: renderLink(gantt)\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/index.js\n// module id = 32\n// module chunks = 0","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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/ui_factory.js\n// module id = 33\n// module chunks = 0","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\n\t\t\treturn extendSettings.call(this, \"config\", parentConfig);\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\n\t\t\treturn extendSettings.call(this, \"templates\", parentTemplates);\n\t\t}\n\t};\n};\n\nmodule.exports = function(obj, parent){\n\tutils.mixin(obj, configurable(parent));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/configurable.js\n// module id = 34\n// module chunks = 0","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 trg = e.target || e.srcElement;\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 trg = e.target || e.srcElement;\n\t\t\tvar id = gantt.locate(e);\n\n\t\t\tvar handlers = findEventHandlers(e, eventHandlers.doubleclick);\n\t\t\tvar res = !gantt.checkEvent(\"onTaskDblClick\") || gantt.callEvent(\"onTaskDblClick\", [id, e]);\n\t\t\tif (res) {\n\t\t\t\tvar default_action = callEventHandlers(handlers, e, id);\n\t\t\t\tif (!default_action)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (id !== null && gantt.getTask(id)) {\n\t\t\t\t\tif (res && gantt.config.details_on_dblclick) {\n\t\t\t\t\t\tgantt.showLightbox(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onMouseMove(e) {\n\t\t\tif (gantt.checkEvent(\"onMouseMove\")) {\n\t\t\t\tvar id = gantt.locate(e);\n\t\t\t\tgantt._last_move_event = e;\n\t\t\t\tgantt.callEvent(\"onMouseMove\", [id, e]);\n\t\t\t}\n\t\t}\n\n\t\tfunction detach(eventName, className, handler, root) {\n\t\t\tif (eventHandlers[eventName]) {\n\t\t\t\tfor(var i = 0; i < eventHandlers[eventName].length; i++){\n\t\t\t\t\tif(eventHandlers[eventName][i].root == root){\n\t\t\t\t\t\teventHandlers[eventName].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}\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/mouse.js\n// module id = 35\n// module chunks = 0","var createLayerFactory = require(\"./render/layer_engine\");\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);\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\treturn taskLayers.addLayer(config);\n\t\t\t\t},\n\n\t\t\t\t/*getTaskLayer: function(id){\n\t\t\t\t\treturn taskLayers.getLayer(id);\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\t\t\t\t/*eachTaskLayer: function(code){\n\t\t\t\t\ttaskLayers.eachLayer(code);\n\t\t\t\t},*/\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\treturn linkLayers.addLayer(config);\n\t\t\t\t},\n\t\t\t\t/*getLinkLayer: function(id){\n\t\t\t\t\treturn linkLayers.getLayer(id);\n\t\t\t\t},*/\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\t\t\t\t/*eachLinkLayer: function(code){\n\t\t\t\t\tlinkLayers.eachLayer(code);\n\t\t\t\t},*/\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/gantt_layers.js\n// module id = 36\n// module chunks = 0","var renderFactoryProvider = require(\"./render_factory\");\nvar utils = require(\"../../../utils/utils\");\n\nvar layerFactory = function(gantt){\n\n\tvar renderFactory = renderFactoryProvider(gantt);\n\treturn {\n\tcreateGroup: function (get_container, rel_root, defaultFilters) {\n\n\t\tvar renderGroup = {\n\t\t\ttempCollection: [],\n\t\t\trenderers: {},\n\t\t\tcontainer: get_container,\n\t\t\tfilters: [],\n\t\t\tgetLayers: function () {\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\tif (!this.container()) return;\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\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 = rel_root ? rel_root() : 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\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\t//config = prepareConfig(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}\n\t\t\t\tthis._add(config);\n\t\t\t\treturn (config ? config.id : undefined);\n\t\t\t},\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/render/layer_engine.js\n// module id = 37\n// module chunks = 0","var 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 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 renderOne = function(item){\n\t\t\treturn layer.renderer.call(this, item, layer.host);\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) {\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 dom = renderOne.call(gantt, item);\n\t\t\t\tthis.append(item, dom, container);\n\n\t\t\t},\n\n\t\t\tclear: function (container) {\n\t\t\t\tthis.rendered = task_area_pulls[id] = {};\n\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\t\t\t\tfor (var i = 0, vis = items.length; i < vis; i++) {\n\t\t\t\t\tthis.render_item(items[i], buffer);\n\t\t\t\t}\n\n\t\t\t\tcontainer.appendChild(buffer);\n\t\t\t},\n\t\t\tappend: function (item, node, container) {\n\t\t\t\tif (!node) {\n\t\t\t\t\tif (this.rendered[item.id]) {\n\t\t\t\t\t\tthis.remove_item(item.id);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.rendered[item.id] && this.rendered[item.id].parentNode) {\n\t\t\t\t\tthis.replace_item(item.id, node);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.appendChild(node);\n\t\t\t\t}\n\t\t\t\tthis.rendered[item.id] = node;\n\n\t\t\t},\n\t\t\treplace_item: function (item_id, newNode) {\n\t\t\t\tvar item = this.rendered[item_id];\n\t\t\t\tif (item && item.parentNode) {\n\t\t\t\t\titem.parentNode.replaceChild(newNode, item);\n\t\t\t\t}\n\t\t\t\tthis.rendered[item_id] = newNode;\n\t\t\t},\n\t\t\tremove_item: function (item_id) {\n\t\t\t\tthis.hide(item_id);\n\t\t\t\tdelete this.rendered[item_id];\n\t\t\t},\n\t\t\thide: function (item_id) {\n\t\t\t\tvar item = this.rendered[item_id];\n\t\t\t\tif (item && item.parentNode) {\n\t\t\t\t\titem.parentNode.removeChild(item);\n\t\t\t\t}\n\t\t\t},\n\t\t\trestore: function (item) {\n\t\t\t\tvar dom = this.rendered[item.id];\n\t\t\t\tif (dom) {\n\t\t\t\t\tif (!dom.parentNode) {\n\t\t\t\t\t\tthis.append(item, dom, node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.render_item(item, node);\n\t\t\t\t}\n\t\t\t},\n\t\t\tchange_id: function (oldid, newid) {\n\t\t\t\tthis.rendered[newid] = this.rendered[oldid];\n\t\t\t\tdelete this.rendered[oldid];\n\t\t\t},\n\t\t\trendered: task_area_pulls[id],\n\t\t\tnode: node,\n\t\t\tdestructor: function () {\n\t\t\t\tthis.clear();\n\t\t\t\tdelete task_area_renderers[id];\n\t\t\t\tdelete task_area_pulls[id];\n\t\t\t}\n\t\t};\n\n\t\treturn task_area_renderers[id];\n\t}\n\n\n\tfunction clearRenderers() {\n\t\tfor (var i in task_area_renderers) {\n\t\t\tgetRenderer(i).destructor();\n\t\t}\n\t}\n\n\treturn {\n\t\tgetRenderer: getRenderer,\n\t\tclearRenderers: clearRenderers\n\t};\n\n};\n\nmodule.exports = rendererFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/render/render_factory.js\n// module id = 38\n// module chunks = 0","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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/layout/view_layout.js\n// module id = 39\n// module chunks = 0","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\tvar outerX = x + borders.horizontal;\n\t\tvar outerY = y + borders.vertical;\n\t\tthis.$config.width = outerX;\n\t\tthis.$config.height = outerY;\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/layout/view_cell.js\n// module id = 40\n// module chunks = 0","module.exports = null;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/layout/resizer_cell.gpl.js\n// module id = 41\n// module chunks = 0","var __extends = require(\"../../../utils/extends\"),\n\tdomHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\"),\n\tenv = require(\"../../../utils/env\"),\n\teventable = require(\"../../../utils/eventable\"),\n\tCell = require(\"./cell\");\n\nvar ScrollbarCell = (function (_super) {\n\t\"use strict\";\n\n\t__extends(ScrollbarCell, _super);\n\tfunction ScrollbarCell(parent, config, factory, gantt) {\n\n\t\tvar _this = _super.apply(this, arguments) || this;\n\t\tthis.$config = utils.mixin(config, {scroll: \"x\"});\n\t\t_this._scrollHorizontalHandler = utils.bind(_this._scrollHorizontalHandler, _this);\n\t\t_this._scrollVerticalHandler = utils.bind(_this._scrollVerticalHandler, _this);\n\t\t_this._outerScrollVerticalHandler = utils.bind(_this._outerScrollVerticalHandler, _this);\n\t\t_this._outerScrollHorizontalHandler = utils.bind(_this._outerScrollHorizontalHandler, _this);\n\t\t_this._mouseWheelHandler = utils.bind(_this._mouseWheelHandler, _this);\n\n\t\tthis.$config.hidden = true;\n\t\tvar size = gantt.config.scroll_size;\n\n\t\tif(gantt.env.isIE){\n\t\t\t// full element height/width must be bigger than just a browser scrollbar,\n\t\t\t// otherwise the scrollbar element won't be scrolled on click\n\t\t\tsize += 1;\n\t\t}\n\n\t\tif(this._isHorizontal()){\n\t\t\t_this.$config.height = size;\n\t\t\t_this.$parent.$config.height = size;\n\t\t}else{\n\t\t\t_this.$config.width = size;\n\t\t\t_this.$parent.$config.width = size;\n\t\t}\n\n\t\tthis.$config.scrollPosition = 0;\n\n\t\t_this.$name = \"scroller\";\n\t\treturn _this;\n\t}\n\n\tScrollbarCell.prototype.init = function(container){\n\t\tcontainer.innerHTML = this.$toHTML();\n\t\tthis.$view = container.firstChild;\n\n\t\tif(!this.$view){\n\t\t\tthis.init();\n\t\t}\n\t\tif(this._isVertical()){\n\t\t\tthis._initVertical();\n\t\t}else{\n\t\t\tthis._initHorizontal();\n\t\t}\n\t\tthis._initMouseWheel();\n\t\tthis._initLinkedViews();\n\t};\n\n\tScrollbarCell.prototype.$toHTML = function () {\n\t\tvar className = this._isHorizontal() ? \"gantt_hor_scroll\" : \"gantt_ver_scroll\";\n\t\treturn \"
\";\n\t};\n\n\tScrollbarCell.prototype._getRootParent = function(){\n\t\tvar parent = this.$parent;\n\t\twhile(parent && parent.$parent){\n\t\t\tparent = parent.$parent;\n\t\t}\n\t\tif(parent){\n\t\t\treturn parent;\n\t\t}\n\t};\n\n\n\tfunction eachCell(root, res){\n\t\tres.push(root);\n\t\tif(root.$cells){\n\t\t\tfor(var i = 0; i < root.$cells.length; i++){\n\t\t\t\teachCell(root.$cells[i], res);\n\t\t\t}\n\t\t}\n\t}\n\tScrollbarCell.prototype._eachView = function(){\n\t\tvar res = [];\n\t\teachCell(this._getRootParent(), res);\n\t\treturn res;\n\t};\n\n\tScrollbarCell.prototype._getLinkedViews = function(){\n\t\tvar views = this._eachView();\n\t\tvar res = [];\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\tif(views[i].$config && ((this._isVertical() && views[i].$config.scrollY == this.$id) || (this._isHorizontal() && views[i].$config.scrollX == this.$id)) ){\n\t\t\t\tres.push(views[i]);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t};\n\n\n\tScrollbarCell.prototype._initHorizontal = function(){\n\t\tthis.$scroll_hor = this.$view;\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollHorizontalHandler);\n\n\t};\n\n\tScrollbarCell.prototype._initLinkedViews = function(){\n\t\tvar views = this._getLinkedViews();\n\t\tvar css = this._isVertical() ?\"gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical\" : \"gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal\";\n\t\tfor(var i = 0; i < views.length; i++){\n\t\t\t//views[i].$config.css = [views[i].$config.css || \"\", css].join(\" \");\n\t\t\tdomHelpers.addClassName(views[i].$view || views[i].getNode(), css);\n\t\t}\n\t};\n\n\tScrollbarCell.prototype._initVertical = function(){\n\t\tthis.$scroll_ver = this.$view;\n\t\tthis.$domEvents.attach(this.$view, \"scroll\", this._scrollVerticalHandler);\n\t};\n\n\tScrollbarCell.prototype._updateLinkedViews = function(){\n\t\tvar root = this._getRootParent();\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)) 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}\n\n\t\tnode.style[property] = size + \"px\";\n\t};\n\n\tScrollbarCell.prototype._scrollVerticalHandler = function (e) {\n\t\tif(this._scrollHorizontalHandler() || this._scrolling){\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.$gantt._touch_scroll_active) return;\n\t\tvar top = this.$scroll_ver.scrollTop;\n\t\tvar prev = this._oldTop;\n\t\tif(top == prev) return;\n\n\t\tthis.scrollVertically(top);\n\n\t\tthis._oldTop = this.$scroll_ver.scrollTop;\n\n\t};\n\tScrollbarCell.prototype._outerScrollVerticalHandler = function(e){\n\t\tif(this._scrollHorizontalHandler()){\n\t\t\treturn;\n\t\t}\n\t};\n\n\tScrollbarCell.prototype._checkWheelTarget = function(targetNode){\n\t\tvar connectedViews = this._getLinkedViews().concat(this);\n\n\t\tfor(var i = 0; i < connectedViews.length; i++){\n\t\t\tvar node = connectedViews[i].$view;\n\t\t\tif(domHelpers.isChildOf(targetNode, node)){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tScrollbarCell.prototype._mouseWheelHandler = function(e){\n\t\tvar target = e.target || e.srcElement;\n\n\t\tif(!this._checkWheelTarget(target))\n\t\t\treturn;\n\n\t\tthis._wheel_time = new Date();\n\n\t\tvar res = {};\n\t\tvar ff = env.isFF;\n\t\tvar wx = ff ? (e.deltaX*-20) : e.wheelDeltaX*2;\n\t\tvar wy = ff ? (e.deltaY*-40) : e.wheelDelta;\n\n\t\tif(e.shiftKey && !(e.deltaX || e.wheelDeltaX)){\n\t\t\t// shift+mousewheel for horizontal scroll\n\t\t\twx = wy*2;\n\t\t\twy = 0;\n\t\t}\n\n\t\tif (wx && Math.abs(wx) > Math.abs(wy)){\n\t\t\tif(this._isVertical()){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(res.x) return true;//no horisontal scroll, must not block scrolling\n\t\t\tif(!this.$scroll_hor || !this.$scroll_hor.offsetWidth) return true;\n\n\t\t\tvar dir = wx/-40;\n\t\t\tvar oldLeft = this._oldLeft;\n\t\t\tvar left = oldLeft+dir*30;\n\t\t\tthis.scrollHorizontally(left);\n\t\t\tthis.$scroll_hor.scrollLeft = left;\n\t\t\t// not block scroll if position hasn't changed\n\t\t\tif(oldLeft == this.$scroll_hor.scrollLeft){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis._oldLeft = this.$scroll_hor.scrollLeft;\n\t\t} else {\n\t\t\tif(this._isHorizontal()){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(res.y) return true;//no vertical scroll, must not block scrolling\n\t\t\tif(!this.$scroll_ver || !this.$scroll_ver.offsetHeight) return true;\n\n\t\t\tvar dir = wy/-40;\n\t\t\tif (typeof wy == \"undefined\")\n\t\t\t\tdir = e.detail;\n\n\t\t\tvar oldTop = this._oldTop;\n\t\t\tvar top = this.$scroll_ver.scrollTop+dir*30;\n\n\t\t\t//if(!this.$gantt.config.prevent_default_scroll &&\n\t\t\t//\t(this.$gantt._cached_scroll_pos && ((this.$gantt._cached_scroll_pos.y == top) || (this.$gantt._cached_scroll_pos.y <= 0 && top <= 0)))) return true;\n\n\n\t\t\tthis.scrollVertically(top);\n\t\t\tthis.$scroll_ver.scrollTop = top;\n\n\t\t\t// not block scroll if position hasn't changed\n\t\t\tif(oldTop == this.$scroll_ver.scrollTop){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis._oldTop = this.$scroll_ver.scrollTop;\n\t\t}\n\n\t\tif (e.preventDefault)\n\t\t\te.preventDefault();\n\t\te.cancelBubble=true;\n\t\treturn false;\n\t};\n\n\treturn ScrollbarCell;\n})(Cell);\n\nmodule.exports = ScrollbarCell;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/layout/scrollbar_cell.js\n// module id = 42\n// module chunks = 0","var createStaticBgHelper = function(){\n\treturn {\n\t\trender: function(){}\n\t};\n};\n\nmodule.exports = {\n\tcreate: function(){\n\t\treturn createStaticBgHelper();\n\t}\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/timeline/tasks_canvas_render.gpl.js\n// module id = 43\n// module chunks = 0","function createResizer(gantt, grid){\n\treturn {\n\t\tinit: function(){},\n\t\tdoOnRender: function(){}\n\t};\n}\n\nmodule.exports = createResizer;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/grid/grid_resize.gpl.js\n// module id = 44\n// module chunks = 0","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\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}\n\n\t\tif (gantt.getTaskType(task.type) == cfg.types.project) {\n\t\t\tcss.push(\"gantt_project\");\n\t\t}\n\n\t\tif (gantt.isSummaryTask(task))\n\t\t\tcss.push(\"gantt_dependent_task\");\n\n\t\tif (cfg.select_task && itemId == state.selected_task)\n\t\t\tcss.push(\"gantt_selected\");\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/render/task_bar_render.js\n// module id = 45\n// module chunks = 0","function createTaskBgRender(gantt){\n\t//this.getTaskTop\n\tfunction _render_bg_line(item, view) {\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\t\tvar row = document.createElement(\"div\");\n\t\tif (config.show_task_cells) {\n\t\t\tfor (var j = 0; j < count; j++) {\n\t\t\t\tvar width = cfg.width[j],\n\t\t\t\t\tcssclass = \"\";\n\n\t\t\t\tif (width > 0) {//do not render skipped columns\n\t\t\t\t\tvar cell = document.createElement(\"div\");\n\t\t\t\t\tcell.style.width = (width) + \"px\";\n\n\t\t\t\t\tcssclass = \"gantt_task_cell\" + (j == count - 1 ? \" gantt_last_cell\" : \"\");\n\t\t\t\t\tcssTemplate = templates.task_cell_class(item, cfg.trace_x[j]);\n\t\t\t\t\tif (cssTemplate)\n\t\t\t\t\t\tcssclass += \" \" + cssTemplate;\n\t\t\t\t\tcell.className = cssclass;\n\n\t\t\t\t\trow.appendChild(cell);\n\t\t\t\t}\n\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.getSelectedId() == item.id) {\n\t\t\tcss += \" gantt_selected\";\n\t\t}\n\n\t\t//var row = \"
\" + cells.join(\"\") + \"
\";\n\n\t\trow.className = css;\n\n\t\tif (config.smart_rendering) {\n\t\t\trow.style.position = \"absolute\";\n\t\t\trow.style.top = view.getItemTop(item.id) + \"px\";\n\t\t\trow.style.width = \"100%\";\n\t\t}\n\t\trow.style.height = (config.row_height) + \"px\";\n\n\t\tif(view.$config.item_attribute){\n\t\t\trow.setAttribute(view.$config.item_attribute, item.id);\n\t\t}\n\n\t\treturn row;\n\t}\n\n\treturn _render_bg_line;\n}\n\nmodule.exports = createTaskBgRender;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/render/task_bg_render.js\n// module id = 46\n// module chunks = 0","\nfunction createLinkRender(gantt){\n\nfunction _render_link_element(link, view) {\n\tvar config = view.$getConfig();\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\tline_size = config.link_line_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\t\tvar types = config.links;\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\nreturn _render_link_element;\n\n}\n\nmodule.exports = createLinkRender;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/render/link_render.js\n// module id = 47\n// module chunks = 0","var dateHelper = require(\"../../../utils/date_helpers\");\n\nfunction createGridLineRender(gantt){\n\tfunction _render_grid_item(item, view) {\n\t\t//if (!_is_grid_visible.call(this))\n\t\t//\treturn null;\n\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 width = 0;\n\t\tvar has_child;\n\t\tfor (var i = 0; i < columns.length; i++) {\n\t\t\tvar last = i == columns.length - 1;\n\t\t\tvar col = columns[i];\n\t\t\tvar cell;\n\n\t\t\tvar value;\n\t\t\tvar textValue;\n\t\t\tif (col.name == \"add\") {\n\t\t\t\tvar aria = gantt._waiAria.gridAddButtonAttrString(col);\n\n\t\t\t\tvalue = \"
\";\n\t\t\t\ttextValue = \"\";\n\t\t\t} else {\n\t\t\t\tif (col.template)\n\t\t\t\t\tvalue = col.template(item);\n\t\t\t\telse\n\t\t\t\t\tvalue = item[col.name];\n\n\t\t\t\tif (dateHelper.isDate(value))\n\t\t\t\t\tvalue = templates.date_grid(value, item);\n\t\t\t\ttextValue = value;\n\t\t\t\tvalue = \"
\" + value + \"
\";\n\t\t\t}\n\t\t\tvar css = \"gantt_cell\" + (last ? \" gantt_last_cell\" : \"\");\n\n\t\t\tvar tree = [];\n\t\t\tif (col.tree) {\n\t\t\t\tfor (var j = 0; j < item.$level; j++)\n\t\t\t\t\ttree.push(templates.grid_indent(item));\n\n\t\t\t\thas_child = store.hasChild(item.id);\n\t\t\t\tif (has_child) {\n\t\t\t\t\ttree.push(templates.grid_open(item));\n\t\t\t\t\ttree.push(templates.grid_folder(item));\n\t\t\t\t} else {\n\t\t\t\t\ttree.push(templates.grid_blank(item));\n\t\t\t\t\ttree.push(templates.grid_file(item));\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar style = \"width:\" + (col.width - (last ? 1 : 0)) + \"px;\";\n\t\t\tif (this.defined(col.align))\n\t\t\t\tstyle += \"text-align:\" + col.align + \";\";\n\n\t\t\tvar aria = gantt._waiAria.gridCellAttrString(col, textValue);\n\n\t\t\ttree.push(value);\n\t\t\tif(config.rtl){\n\t\t\t\ttree = tree.reverse();\n\t\t\t}\n\t\t\tcell = \"
\" + tree.join(\"\") + \"
\";\n\t\t\tcells.push(cell);\n\t\t}\n\t\tvar css = gantt.getGlobalTaskIndex(item.id) % 2 === 0 ? \"\" : \" odd\";\n\t\tcss += (item.$transparent) ? \" gantt_transparent\" : \"\";\n\n\t\tcss += (item.$dataprocessor_class ? \" \" + item.$dataprocessor_class : \"\");\n\n\t\tif (templates.grid_row_class) {\n\t\t\tvar css_template = templates.grid_row_class.call(gantt, item.start_date, item.end_date, item);\n\t\t\tif (css_template)\n\t\t\t\tcss += \" \" + css_template;\n\t\t}\n\n\t\tif(store.getSelectedId() == 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;\n\t\tel.style.height = config.row_height + \"px\";\n\t\tel.style.lineHeight = (config.row_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 _render_grid_item;\n}\n\nmodule.exports = createGridLineRender;\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/render/task_grid_line_render.js\n// module id = 48\n// module chunks = 0","var utils = require(\"../../../utils/utils\");\nvar rowDnd = require(\"./tasks_grid_dnd\");\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}\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\trowDnd.init(grid.$gantt, grid);\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\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(\"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\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/grid/main_grid_initializer.js\n// module id = 49\n// module chunks = 0","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\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\tstore.refresh(task.id);\n\t\t//this.refreshData();\n\t}, gantt));\n}\n\nmodule.exports = {\n\tinit: _init_dnd\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/grid/tasks_grid_dnd.js\n// module id = 50\n// module chunks = 0","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\tif(timeline.$config.id == \"timeline\") {\n\t\t\t\t\tthis.extendGantt(timeline);\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 (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},\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\textendGantt: function(timeline){\n\t\t\t\tgantt.dateFromPos = gantt.bind(timeline.dateFromPos, timeline);\n\t\t\t\tgantt.posFromDate = gantt.bind(timeline.posFromDate, timeline);\n\t\t\t\tgantt.getRowTop = gantt.bind(timeline.getRowTop, timeline);\n\t\t\t\tgantt.getTaskTop = gantt.bind(timeline.getItemTop, timeline);\n\t\t\t\tgantt.getTaskPosition = gantt.bind(timeline.getItemPosition, timeline);\n\t\t\t\tgantt.getTaskHeight = gantt.bind(timeline.getItemHeight, timeline);\n\t\t\t\tgantt.columnIndexByDate = gantt.bind(timeline.columnIndexByDate, timeline);\n\t\t\t\tgantt.roundTaskDates = gantt.bind(timeline.roundTaskDates, timeline);\n\t\t\t\tgantt.getScale = gantt.bind(timeline.getScale, timeline);\n\t\t\t\tgantt.getTaskNode = function (id) {\n\t\t\t\t\treturn timeline._taskRenderer.rendered[id];\n\t\t\t\t};\n\t\t\t\tgantt.getLinkNode = function (id) {\n\t\t\t\t\treturn timeline._linkRenderer.rendered[id];\n\t\t\t\t};\n\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/timeline/main_timeline_initializer.js\n// module id = 51\n// module chunks = 0","var domHelpers = require(\"../../../utils/dom_helpers\"),\n\tutils = require(\"../../../utils/utils\");\nvar timeout = require(\"../../../utils/timeout\");\n\nfunction createTaskDND(timeline, gantt){\n\tvar services = gantt.$services;\n\treturn {\n\t\tdrag: null,\n\t\tdragMultiple: {},\n\t\t_events: {\n\t\t\tbefore_start: {},\n\t\t\tbefore_finish: {},\n\t\t\tafter_finish: {}\n\t\t},\n\t\t_handlers: {},\n\t\tinit: function () {\n\t\t\tthis._domEvents = gantt._createDomEventScope();\n\t\t\tthis.clear_drag_state();\n\t\t\tvar drag = gantt.config.drag_mode;\n\t\t\tthis.set_actions();\n\n\t\t\tvar stateService = services.getService(\"state\");\n\t\t\tstateService.registerProvider(\"tasksDnd\", utils.bind(function(){\n\t\t\t\treturn {\n\t\t\t\t\tdrag_id : this.drag ? this.drag.id : undefined,\n\t\t\t\t\tdrag_mode : this.drag ? this.drag.mode : undefined,\n\t\t\t\t\tdrag_from_start : this.drag ? this.drag.left : undefined\n\t\t\t\t};\n\t\t\t}, this));\n\n\t\t\tvar evs = {\n\t\t\t\t\"before_start\": \"onBeforeTaskDrag\",\n\t\t\t\t\"before_finish\": \"onBeforeTaskChanged\",\n\t\t\t\t\"after_finish\": \"onAfterTaskDrag\"\n\t\t\t};\n\t\t\t//for now, all drag operations will trigger the same events\n\t\t\tfor (var stage in this._events) {\n\t\t\t\tfor (var mode in drag) {\n\t\t\t\t\tthis._events[stage][mode] = evs[stage];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._handlers[drag.move] = this._move;\n\t\t\tthis._handlers[drag.resize] = this._resize;\n\t\t\tthis._handlers[drag.progress] = this._resize_progress;\n\t\t},\n\t\tset_actions: function () {\n\t\t\tvar data = timeline.$task_data;\n\t\t\tthis._domEvents.attach(data, \"mousemove\", gantt.bind(function (e) {\n\t\t\t\tthis.on_mouse_move(e || event);\n\t\t\t}, this));\n\t\t\tthis._domEvents.attach(data, \"mousedown\", gantt.bind(function (e) {\n\t\t\t\tthis.on_mouse_down(e || event);\n\t\t\t}, this));\n\t\t\tthis._domEvents.attach(data, \"mouseup\", gantt.bind(function (e) {\n\t\t\t\tthis.on_mouse_up(e || event);\n\t\t\t}, this));\n\t\t},\n\n\t\tclear_drag_state: function () {\n\t\t\tthis.drag = {\n\t\t\t\tid: null,\n\t\t\t\tmode: null,\n\t\t\t\tpos: null,\n\t\t\t\tstart_x: null,\n\t\t\t\tstart_y: null,\n\t\t\t\tobj: null,\n\t\t\t\tleft: null\n\t\t\t};\n\t\t\tthis.dragMultiple = {};\n\t\t},\n\t\t_resize: function (ev, shift, drag) {\n\t\t\tvar cfg = timeline.$getConfig();\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\tif (drag.left) {\n\t\t\t\tev.start_date = gantt.dateFromPos(coords_x.start + shift);\n\t\t\t\tif (!ev.start_date) {\n\t\t\t\t\tev.start_date = new Date(gantt.getState().min_date);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tev.end_date = gantt.dateFromPos(coords_x.end + shift);\n\t\t\t\tif (!ev.end_date) {\n\t\t\t\t\tev.end_date = new Date(gantt.getState().max_date);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ev.end_date - ev.start_date < cfg.min_duration) {\n\t\t\t\tif (drag.left)\n\t\t\t\t\tev.start_date = gantt.calculateEndDate({start_date: ev.end_date, duration: -1, task: ev});\n\t\t\t\telse\n\t\t\t\t\tev.end_date = gantt.calculateEndDate({start_date: ev.start_date, duration: 1, task: ev});\n\t\t\t}\n\t\t\tgantt._init_task_timing(ev);\n\t\t},\n\t\t_resize_progress: function (ev, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar diffValue = !config.rtl ? (drag.pos.x - coords_x.start) : (coords_x.start - drag.pos.x);\n\n\t\t\tvar diff = Math.max(0, diffValue);\n\t\t\tev.progress = Math.min(1, diff / Math.abs(coords_x.end - coords_x.start));\n\t\t},\n\n\t\t_find_max_shift: function(dragItems, shift){\n\t\t\tvar correctShift;\n\t\t\tfor(var i in dragItems){\n\t\t\t\tvar drag = dragItems[i];\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\t\tvar minX = gantt.posFromDate( new Date(gantt.getState().min_date)),\n\t\t\t\t\tmaxX = gantt.posFromDate( new Date(gantt.getState().max_date));\n\n\t\t\t\tif(coords_x.end + shift > maxX){\n\t\t\t\t\tvar maxShift = maxX - coords_x.end;\n\t\t\t\t\tif(maxShift < correctShift || correctShift === undefined){\n\t\t\t\t\t\tcorrectShift = maxShift;\n\t\t\t\t\t}\n\t\t\t\t}else if(coords_x.start + shift < minX){\n\t\t\t\t\tvar minShift = minX - coords_x.start;\n\t\t\t\t\tif(minShift < correctShift || correctShift === undefined){\n\t\t\t\t\t\tcorrectShift = minShift;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn correctShift;\n\t\t},\n\t\t_move: function (ev, shift, drag) {\n\t\t\tvar coords_x = this._drag_task_coords(ev, drag);\n\t\t\tvar new_start = gantt.dateFromPos(coords_x.start + shift),\n\t\t\t\tnew_end = gantt.dateFromPos(coords_x.end + shift);\n\t\t\tif (!new_start) {\n\t\t\t\tev.start_date = new Date(gantt.getState().min_date);\n\t\t\t\tev.end_date = gantt.dateFromPos(gantt.posFromDate(ev.start_date) + (coords_x.end - coords_x.start));\n\t\t\t} else if (!new_end) {\n\t\t\t\tev.end_date = new Date(gantt.getState().max_date);\n\t\t\t\tev.start_date = gantt.dateFromPos(gantt.posFromDate(ev.end_date) - (coords_x.end - coords_x.start));\n\t\t\t} else {\n\t\t\t\tev.start_date = new_start;\n\t\t\t\tev.end_date = new_end;\n\t\t\t}\n\t\t},\n\t\t_drag_task_coords: function (t, drag) {\n\t\t\tvar start = drag.obj_s_x = drag.obj_s_x || gantt.posFromDate(t.start_date);\n\t\t\tvar end = drag.obj_e_x = drag.obj_e_x || gantt.posFromDate(t.end_date);\n\t\t\treturn {\n\t\t\t\tstart: start,\n\t\t\t\tend: end\n\t\t\t};\n\t\t},\n\t\t_mouse_position_change: function (oldPos, newPos) {\n\t\t\tvar dx = oldPos.x - newPos.x,\n\t\t\t\tdy = oldPos.y - newPos.y;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t},\n\t\t_is_number: function (n) {\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t},\n\n\t\ton_mouse_move: function (e) {\n\t\t\tif (this.drag.start_drag) {\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n\n\t\t\t\tvar sX = this.drag.start_drag.start_x,\n\t\t\t\t\tsY = this.drag.start_drag.start_y;\n\n\t\t\t\tif ((Date.now() - this.drag.timestamp > 50) ||\n\t\t\t\t\t(this._is_number(sX) && this._is_number(sY) && this._mouse_position_change({\n\t\t\t\t\t\tx: sX,\n\t\t\t\t\t\ty: sY\n\t\t\t\t\t}, pos) > 20)) {\n\t\t\t\t\tthis._start_dnd(e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar drag = this.drag;\n\n\t\t\tif (drag.mode) {\n\t\t\t\tif (!timeout(this, 40))//limit update frequency\n\t\t\t\t\treturn;\n\n\t\t\t\tthis._update_on_move(e);\n\n\t\t\t}\n\t\t},\n\n\t\t_update_item_on_move: function(shift, id, mode, drag, e){\n\t\t\tvar ev = gantt.getTask(id);\n\t\t\tvar original = gantt.mixin({}, ev);\n\t\t\tvar copy = gantt.mixin({}, ev);\n\t\t\tthis._handlers[mode].apply(this, [copy, shift, drag]);\n\t\t\tgantt.mixin(ev, copy, true);\n\t\t\t//gantt._update_parents(drag.id, true);\n\t\t\tgantt.callEvent(\"onTaskDrag\", [ev.id, mode, copy, original, e]);\n\t\t\tgantt.mixin(ev, copy, true);\n\t\t\tgantt.refreshTask(id);\n\t\t},\n\n\t\t_update_on_move: function (e) {\n\t\t\tvar drag = this.drag;\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tif (drag.mode) {\n\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n\t\t\t\tif (drag.pos && drag.pos.x == pos.x)\n\t\t\t\t\treturn;\n\n\t\t\t\tdrag.pos = pos;\n\n\t\t\t\tvar curr_date = gantt.dateFromPos(pos.x);\n\t\t\t\tif (!curr_date || isNaN(curr_date.getTime()))\n\t\t\t\t\treturn;\n\n\n\t\t\t\tvar shift = pos.x - drag.start_x;\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tif (this._handlers[drag.mode]) {\n\n\t\t\t\t\tif(gantt.isSummaryTask(ev) && gantt.config.drag_project && drag.mode == config.drag_mode.move){\n\n\t\t\t\t\t\tvar initialDrag = {};\n\t\t\t\t\t\tinitialDrag[drag.id] = utils.copy(drag);\n\t\t\t\t\t\tvar maxShift = this._find_max_shift(utils.mixin(initialDrag, this.dragMultiple), shift);\n\t\t\t\t\t\tif(maxShift !== undefined){\n\t\t\t\t\t\t\tshift = maxShift;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n\t\t\t\t\t\tfor(var i in this.dragMultiple){\n\t\t\t\t\t\t\tvar childDrag = this.dragMultiple[i];\n\t\t\t\t\t\t\tthis._update_item_on_move(shift, childDrag.id, childDrag.mode, childDrag, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n\t\t\t\t\t}\n\t\t\t\t\tgantt._update_parents(drag.id);\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\ton_mouse_down: function (e, src) {\n\t\t\t// on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state\n\t\t\t// let's ignore right mouse button then\n\t\t\tif (e.button == 2 && e.button !== undefined)\n\t\t\t\treturn;\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar id = gantt.locate(e);\n\t\t\tvar task = null;\n\t\t\tif (gantt.isTaskExists(id)) {\n\t\t\t\ttask = gantt.getTask(id);\n\t\t\t}\n\n\t\t\tif (gantt.isReadonly(task) || this.drag.mode) return;\n\n\t\t\tthis.clear_drag_state();\n\n\t\t\tsrc = src || (e.target || e.srcElement);\n\n\t\t\tvar className = domHelpers.getClassName(src);\n\t\t\tvar drag = this._get_drag_mode(className, src);\n\n\t\t\tif (!className || !drag) {\n\t\t\t\tif (src.parentNode)\n\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\n\t\t\t\telse\n\t\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!drag) {\n\t\t\t\tif (gantt.checkEvent(\"onMouseDown\") && gantt.callEvent(\"onMouseDown\", [className.split(\" \")[0]])) {\n\t\t\t\t\tif (src.parentNode)\n\t\t\t\t\t\treturn this.on_mouse_down(e, src.parentNode);\n\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (drag.mode && drag.mode != config.drag_mode.ignore && config[\"drag_\" + drag.mode]) {\n\t\t\t\t\tid = gantt.locate(src);\n\t\t\t\t\ttask = gantt.copy(gantt.getTask(id) || {});\n\n\t\t\t\t\tif (gantt.isReadonly(task)) {\n\t\t\t\t\t\tthis.clear_drag_state();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((gantt.isSummaryTask(task) && !config.drag_project) && drag.mode != config.drag_mode.progress) {//only progress drag is allowed for tasks with flexible duration\n\t\t\t\t\t\tthis.clear_drag_state();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdrag.id = id;\n\t\t\t\t\tvar pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n\n\t\t\t\t\tdrag.start_x = pos.x;\n\t\t\t\t\tdrag.start_y = pos.y;\n\t\t\t\t\tdrag.obj = task;\n\t\t\t\t\tthis.drag.start_drag = drag;\n\t\t\t\t\tthis.drag.timestamp = Date.now();\n\n\t\t\t\t} else\n\t\t\t\t\tthis.clear_drag_state();\n\t\t\t}\n\t\t},\n\t\t_fix_dnd_scale_time: function (task, drag) {\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar unit = gantt.getScale().unit,\n\t\t\t\tstep = gantt.getScale().step;\n\t\t\tif (!config.round_dnd_dates) {\n\t\t\t\tunit = 'minute';\n\t\t\t\tstep = config.time_step;\n\t\t\t}\n\n\t\t\tfunction fixStart(task) {\n\t\t\t\tif (!gantt.config.correct_work_time)\n\t\t\t\t\treturn;\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\tif (!gantt.isWorkTime(task.start_date, undefined, task))\n\t\t\t\t\ttask.start_date = gantt.calculateEndDate({\n\t\t\t\t\t\tstart_date: task.start_date,\n\t\t\t\t\t\tduration: -1,\n\t\t\t\t\t\tunit: config.duration_unit,\n\t\t\t\t\t\ttask: task\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction fixEnd(task) {\n\t\t\t\tif (!gantt.config.correct_work_time)\n\t\t\t\t\treturn;\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\tif (!gantt.isWorkTime(new Date(task.end_date - 1), undefined, task))\n\t\t\t\t\ttask.end_date = gantt.calculateEndDate({\n\t\t\t\t\t\tstart_date: task.end_date,\n\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\tunit: config.duration_unit,\n\t\t\t\t\t\ttask: task\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (drag.mode == config.drag_mode.resize) {\n\t\t\t\tif (drag.left) {\n\t\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\n\t\t\t\t\tfixStart(task);\n\t\t\t\t} else {\n\t\t\t\t\ttask.end_date = gantt.roundDate({date: task.end_date, unit: unit, step: step});\n\t\t\t\t\tfixEnd(task);\n\t\t\t\t}\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\n\t\t\t\ttask.start_date = gantt.roundDate({date: task.start_date, unit: unit, step: step});\n\t\t\t\tfixStart(task);\n\t\t\t\ttask.end_date = gantt.calculateEndDate(task);\t\t\t\t\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\t\t\t\n\t\t\tif (drag.mode == config.drag_mode.resize) {\n\t\t\t\tif (drag.left) {\n\t\t\t\t\ttask.start_date = gantt.getClosestWorkTime({date: task.start_date, dir: 'future', task: task});\n\t\t\t\t} else {\n\t\t\t\t\ttask.end_date = gantt.getClosestWorkTime({date: task.end_date, dir: 'past', task: task});\n\t\t\t\t}\n\t\t\t} else if (drag.mode == config.drag_mode.move) {\n\t\t\t\tgantt.correctTaskWorkTime(task);\n\t\t\t}\n\t\t},\n\n\t\t_finalize_mouse_up: function(taskId, config, drag, e){\n\t\t\tvar ev = gantt.getTask(taskId);\n\n\t\t\tif (config.work_time && config.correct_work_time) {\n\t\t\t\tthis._fix_working_times(ev, drag);\n\t\t\t}\n\n\t\t\tthis._fix_dnd_scale_time(ev, drag);\n\n\t\t\tif (!this._fireEvent(\"before_finish\", drag.mode, [taskId, drag.mode, gantt.copy(drag.obj), e])) {\n\t\t\t\t//drag.obj._dhx_changed = false;\n\t\t\t\tthis.clear_drag_state();\n\t\t\t\tif(taskId == drag.id){\n\t\t\t\t\tdrag.obj._dhx_changed = false;\n\t\t\t\t\tgantt.mixin(ev, drag.obj, true);\n\t\t\t\t}\n\n\n\t\t\t\tgantt.refreshTask(ev.id);\n\t\t\t} else {\n\t\t\t\tvar drag_id = taskId;\n\n\t\t\t\tgantt._init_task_timing(ev);\n\n\t\t\t\tthis.clear_drag_state();\n\t\t\t\tgantt.updateTask(ev.id);\n\t\t\t\tthis._fireEvent(\"after_finish\", drag.mode, [drag_id, drag.mode, e]);\n\t\t\t}\n\n\t\t},\n\n\t\ton_mouse_up: function (e) {\n\n\t\t\tvar drag = this.drag;\n\t\t\tif (drag.mode && drag.id) {\n\t\t\t\tvar config = timeline.$getConfig();\n\t\t\t\t//drop\n\t\t\t\tvar ev = gantt.getTask(drag.id);\n\n\t\t\t\tvar dragMultiple = this.dragMultiple;\n\t\t\t\tthis._finalize_mouse_up(drag.id, config, drag, e);\n\t\t\t\tif(gantt.isSummaryTask(ev) && config.drag_project && drag.mode == config.drag_mode.move){\n\t\t\t\t\tfor(var i in dragMultiple){\n\t\t\t\t\t\tthis._finalize_mouse_up(dragMultiple[i].id, config, dragMultiple[i], e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clear_drag_state();\n\t\t},\n\t\t_get_drag_mode: function (className, el) {\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar modes = config.drag_mode;\n\t\t\tvar classes = (className || \"\").split(\" \");\n\t\t\tvar classname = classes[0];\n\t\t\tvar drag = {mode: null, left: null};\n\t\t\tswitch (classname) {\n\t\t\t\tcase \"gantt_task_line\":\n\t\t\t\tcase \"gantt_task_content\":\n\t\t\t\t\tdrag.mode = modes.move;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_task_drag\":\n\t\t\t\t\tdrag.mode = modes.resize;\n\n\t\t\t\t\tvar dragProperty = el.getAttribute(\"data-bind-property\");\n\n\t\t\t\t\tif (dragProperty == \"start_date\") {\n\t\t\t\t\t\tdrag.left = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdrag.left = false;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_task_progress_drag\":\n\t\t\t\t\tdrag.mode = modes.progress;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"gantt_link_control\":\n\t\t\t\tcase \"gantt_link_point\":\n\t\t\t\t\tdrag.mode = modes.ignore;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tdrag = null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn drag;\n\n\t\t},\n\n\t\t_start_dnd: function (e) {\n\t\t\tvar drag = this.drag = this.drag.start_drag;\n\t\t\tdelete drag.start_drag;\n\n\t\t\tvar cfg = timeline.$getConfig();\n\t\t\tvar id = drag.id;\n\t\t\tif (!cfg[\"drag_\" + drag.mode] || !gantt.callEvent(\"onBeforeDrag\", [id, drag.mode, e]) || !this._fireEvent(\"before_start\", drag.mode, [id, drag.mode, e])) {\n\t\t\t\tthis.clear_drag_state();\n\t\t\t} else {\n\t\t\t\tdelete drag.start_drag;\n\n\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\tif(gantt.isSummaryTask(task) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move){\n\t\t\t\t\tgantt.eachTask(function(child){\n\t\t\t\t\t\tthis.dragMultiple[child.id] = gantt.mixin({\n\t\t\t\t\t\t\tid: child.id,\n\t\t\t\t\t\t\tobj: child\n\t\t\t\t\t\t}, this.drag);\n\t\t\t\t\t}, task.id, this);\n\t\t\t\t}\n\n\t\t\t\tgantt.callEvent(\"onTaskDragStart\", []);\n\t\t\t}\n\n\t\t},\n\t\t_fireEvent: function (stage, mode, params) {\n\t\t\tgantt.assert(this._events[stage], \"Invalid stage:{\" + stage + \"}\");\n\n\t\t\tvar trigger = this._events[stage][mode];\n\n\t\t\tgantt.assert(trigger, \"Unknown after drop mode:{\" + mode + \"}\");\n\t\t\tgantt.assert(params, \"Invalid event arguments\");\n\n\n\t\t\tif (!gantt.checkEvent(trigger))\n\t\t\t\treturn true;\n\n\t\t\treturn gantt.callEvent(trigger, params);\n\t\t},\n\n\t\tround_task_dates: function(task){\n\t\t\tvar drag_state = this.drag;\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tif (!drag_state) {\n\t\t\t\tdrag_state = {mode: config.drag_mode.move};\n\t\t\t}\n\t\t\tthis._fix_dnd_scale_time(task, drag_state);\n\t\t},\n\t\tdestructor: function(){\n\t\t\tthis._domEvents.detachAll();\n\t\t}\n\t};\n}\n\nfunction initTaskDND() {\n\tvar _tasks_dnd;\n\treturn {\n\t\textend: function(timeline){\n\t\t\ttimeline.roundTaskDates = function (task) {\n\t\t\t\t_tasks_dnd.round_task_dates(task);\n\t\t\t};\n\n\t\t},\n\t\tinit: function(timeline, gantt){\n\t\t\t_tasks_dnd = createTaskDND(timeline, gantt);\n\t\t\t// TODO: entry point for touch handlers, move touch to timeline\n\t\t\ttimeline._tasks_dnd = _tasks_dnd;\n\t\t\treturn _tasks_dnd.init(gantt);\n\t\t},\n\t\tdestructor: function(){\n\t\t\t_tasks_dnd.destructor();\n\t\t\t_tasks_dnd = null;\n\t\t}\n\t};\n}\n\nmodule.exports = {\n\tcreateTaskDND: initTaskDND\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/timeline/tasks_dnd.js\n// module id = 52\n// module chunks = 0","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\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\tdnd.attachEvent(\"onDragMove\", gantt.bind(function(obj,e) {\n\t\tvar dd = dnd.config;\n\t\tvar pos = dnd.getPosition(e);\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\tif(landing){\n\t\t\t//refreshTask\n\t\t\tto_start = !domHelpers.locateClassName(e, end_marker);\n\t\t\tlanding = !!targ;\n\t\t}\n\n\t\t_link_target_task = targ;\n\t\t_link_landing = landing;\n\t\t_link_target_task_start = to_start;\n\n\t\tif(landing){\n\t\t\tvar t = gantt.getTask(targ);\n\n\t\t\tvar config = timeline.$getConfig();\n\t\t\tvar node = domHelpers.locateClassName(e, link_landing_hover_area);\n\t\t\tvar shift = 0;\n\t\t\tif(node){\n\t\t\t\tshift = Math.floor(node.offsetWidth / 2);\n\t\t\t}\n\n\t\t\tthis._dir_end = getLinePos(t, !!_link_target_task_start,shift, config);\n\t\t}else{\n\t\t\tthis._dir_end = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n\t\t}\n\n\t\tvar targetChanged = !(prevLanding == landing && prevTarget == targ && prevToStart == to_start);\n\t\tif(targetChanged){\n\t\t\tif(prevTarget)\n\t\t\t\tgantt.refreshTask(prevTarget, false);\n\t\t\tif(targ)\n\t\t\t\tgantt.refreshTask(targ, false);\n\t\t}\n\n\t\tif(targetChanged){\n\t\t\tupdateMarkedHtml(dd.marker);\n\t\t}\n\n\t\tshowDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\n\n\t\treturn true;\n\t}, this));\n\n\n\tdnd.attachEvent(\"onDragEnd\", gantt.bind(function() {\n\t\tvar drag = getDndState();\n\n\t\tif(drag.link_source_id && drag.link_target_id && drag.link_source_id != drag.link_target_id){\n\t\t\tvar type = gantt._get_link_type(drag.link_from_start, drag.link_to_start);\n\n\t\t\tvar link = {source : drag.link_source_id, target: drag.link_target_id, type:type};\n\t\t\tif(link.type && gantt.isLinkAllowed(link))\n\t\t\t\tgantt.addLink(link);\n\t\t}\n\n\t\tresetDndState();\n\n\t\tif(gantt.config.touch) {\n\t\t\tgantt.refreshData();\n\t\t}\n\t\telse {\n\t\t\tif (drag.link_source_id)\n\t\t\t\tgantt.refreshTask(drag.link_source_id, false);\n\t\t\tif (drag.link_target_id)\n\t\t\t\tgantt.refreshTask(drag.link_target_id, false);\n\t\t}\n\t\tremoveDirectionLine();\n\t}, this));\n\n\tfunction updateMarkedHtml(marker){\n\t\tvar link = getDndState();\n\n\t\tvar css = [\"gantt_link_tooltip\"];\n\t\tif(link.link_source_id && link.link_target_id){\n\t\t\tif(gantt.isLinkAllowed(link.link_source_id, link.link_target_id, link.link_from_start, link.link_to_start)){\n\t\t\t\tcss.push(\"gantt_allowed_link\");\n\t\t\t}else{\n\t\t\t\tcss.push(\"gantt_invalid_link\");\n\t\t\t}\n\t\t}\n\n\t\tvar className = gantt.templates.drag_link_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start);\n\t\tif(className)\n\t\t\tcss.push(className);\n\n\t\tvar html = \"
\" +\n\t\t\tgantt.templates.drag_link(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start) +\n\t\t\t\"
\";\n\t\tmarker.innerHTML = html;\n\t}\n\n\tfunction advanceMarker(marker, pos){\n\t\tmarker.style.left = pos.x + 5 + \"px\";\n\t\tmarker.style.top = pos.y + 5 + \"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){\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};\n\nmodule.exports = {\n\tcreateLinkDND: function(){\n\t\treturn {\n\t\t\tinit: initLinksDND\n\t\t};\n\t}\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/timeline/links_dnd.js\n// module id = 53\n// module chunks = 0","var 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\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\t\n\t\t\t\t\t\tmainGrid.$config.width = gantt.config.grid_width - 1;\n\t\t\t\t\t\tif(!first){\n\t\t\t\t\t\t\tmainGrid.$parent._setContentSize(mainGrid.$config.width, mainGrid.$config.height);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tmainGrid.$parent.$config.width = gantt.config.grid_width;\n\n\t\t\t\t\t\t\tif(mainGrid.$parent.$config.group){\n\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}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfirst = false;\n\n\t\t\t\t});\n\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\n\t\t\t},\n\t\t\tonInitialized: function (layout) {\n\t\t\t\tvar grid = gantt.$ui.getView(\"grid\");\n\t\t\t\tif(!(grid && grid.$parent && grid.$parent.$parent && grid.$parent.$parent._xLayout)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar parent = grid.$parent.$parent;\n\n\t\t\t\t//TODO: can't bind resizer to a grid in complex layouts\n\t\t\t\tvar next = parent.getNextSibling(grid.$parent.$id);\n\t\t\t\tvar gridFirst = true;\n\t\t\t\tif(!(next && next.$name == \"resizer\")){\n\t\t\t\t\tnext = parent.getPrevSibling(grid.$parent.$id);\n\t\t\t\t\tgridFirst = false;\n\t\t\t\t}\n\t\t\t\t// expose grid resize events\n\t\t\t\tif(next && next.$name == \"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\t};\n})();\n\nmodule.exports = initializer;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/ui/main_layout_initializer.js\n// module id = 54\n// module chunks = 0","module.exports = function(gantt) {\n\tdelete gantt.addTaskLayer;\n\tdelete gantt.addLinkLayer;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/data_task_layers.gpl.js\n// module id = 55\n// module chunks = 0","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});\n\n\tvar linksStore = gantt.createDatastore({\n\t\tname: \"link\",\n\t\tinitItem: utils.bind(_init_link, gantt)\n\t});\n\n\ttasksStore.attachEvent(\"onBeforeRefreshAll\", function(){\n\n\t\tvar order = tasksStore.getVisibleItems();\n\n\t\tfor(var i=0; i < order.length; i++){\n\t\t\tvar item = order[i];\n\t\t\titem.$index = i;\n\t\t\tgantt.resetProjectDates(item);\n\t\t}\n\n\t});\n\n\ttasksStore.attachEvent(\"onFilterItem\", function(id, task){\n\t\tvar min = null, max = null;\n\t\tif (gantt.config.start_date && gantt.config.end_date) {\n\t\t\tif (gantt._isAllowedUnscheduledTask(task)) return true;\n\t\t\tmin = gantt.config.start_date.valueOf();\n\t\t\tmax = gantt.config.end_date.valueOf();\n\n\t\t\tif (+task.start_date > max || +task.end_date < +min)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\n\ttasksStore.attachEvent(\"onIdChange\", function(oldId, newId){\n\t\tgantt._update_flags(oldId, newId);\n\t});\n\n\ttasksStore.attachEvent(\"onAfterUpdate\", function(id){\n\t\tgantt._update_parents(id);\n\t});\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\treturn true;\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(\"onIdChange\", 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\tlinksStore.attachEvent(\"onFilterItem\", function(id, link){\n\t\tif (!gantt.config.show_links) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!(gantt.isTaskVisible(link.source) && gantt.isTaskVisible(link.target)) ||\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, \"xml_date\");\n\t\tif (task.end_date)\n\t\t\ttask.end_date = gantt.date.parseDate(task.end_date, \"xml_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\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\t\tif (task.parent === undefined) {\n\t\t\tthis.setParent(task, this.config.root_id);\n\t\t}\n\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/datastore/datastore_hooks.js\n// module id = 56\n// module chunks = 0","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());\n\n\t\tif(config.name){\n\n\t\t\tthis.$services.setService(\"datastore:\" + config.name, function(){return store;});\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}\n\t\t\tstoreList.push(config.name);\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}\n\n\t},\n\trefreshLink: function (linkId) {\n\t\tthis.$data.linksStore.refresh(linkId);\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\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/facades/datastore.js\n// module id = 57\n// module chunks = 0","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\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\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 = 0;\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\treturn this.$data.tasksStore.getChildren(id).slice();\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\tthis.$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\t\tthis.$data.tasksStore.sort(field, desc, parent);\n\t\tif (render) {\n\t\t\tthis.render();\n\t\t}\n\t}\n};\n};\n\nmodule.exports = createTasksDatastoreFacade;\n\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/facades/datastore_tasks.js\n// module id = 58\n// module chunks = 0","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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/facades/datastore_links.js\n// module id = 59\n// module chunks = 0","var powerArray = require(\"./power_array\");\nvar utils = require(\"../../utils/utils\");\nvar eventable = require(\"../../utils/eventable\");\nvar DataStore = require(\"./datastore\");\n\nvar TreeDataStore = function(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\teventable(this);\n\n\tthis.attachEvent(\"onFilterItem\", function(id, item){\n\t\tvar open = true;\n\t\tthis.eachParent(function(parent){\n\t\t\topen = open && parent.$open;\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\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\n\t\t\tvar children = this.getChildren(newId);\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\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\t\t\tif(code)\n\t\t\t\tDataStore.prototype._updateOrder.call(this, code);\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\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].id), 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\t\t\tvar sbranch = this.getChildren(this.getParent(source.id));\n\n\t\t\tvar tbranch = this.getChildren(parent);\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;\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\tif(!this.callEvent(\"onAfterItemMove\", [sid, parent, tindex]))\n\t\t\t\treturn;\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\tvar item = this.getItem(childId);\n\t\t\tvar pid = this.getParent(childId);\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 = this.$getRootId();\n\t\t\tif(item){\n\t\t\t\tparent = item[this.$parentProperty];\n\t\t\t}\n\t\t\treturn parent;\n\n\t\t},\n\n\t\tclearAll: function(){\n\t\t\tthis._branches = {};\n\t\t\tDataStore.prototype.clearAll.call(this);\n\t\t},\n\n\t\tcalculateItemLevel: function(item){\n\t\t\tvar level = 0;\n\t\t\tthis.eachParent(function(){\n\t\t\t\tlevel++;\n\t\t\t}, item);\n\t\t\treturn level;\n\t\t},\n\n\t\t_setParentInner: function(item, new_pid, silent){\n\t\t\tif(!silent){\n\t\t\t\tif(item.hasOwnProperty(\"$rendered_parent\")){\n\t\t\t\t\tthis._move_branch(item, item.$rendered_parent, new_pid);\n\t\t\t\t}else{\n\t\t\t\t\tthis._move_branch(item, item[this.$parentProperty], new_pid);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetParent: function(item, new_pid, silent){\n\t\t\tthis._setParentInner(item, new_pid, silent);\n\n\t\t\titem[this.$parentProperty] = new_pid;\n\t\t},\n\t\teachItem: function(code, parent){\n\t\t\tparent = parent || this.$getRootId();\n\n\n\t\t\tvar branch = this.getChildren(parent);\n\t\t\tif (branch)\n\t\t\t\tfor (var i=0; i b[field];\n\t\t\t\treturn result ? 1 : -1;\n\t\t\t}) : field;\n\n\t\t\tif (desc) {\n\t\t\t\tvar original_criteria = criteria;\n\t\t\t\tcriteria = function (a, b) {\n\t\t\t\t\treturn original_criteria(b, a);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar els = this.getChildren(parent);\n\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/datastore/treedatastore.js\n// module id = 60\n// module chunks = 0","\nfunction createDataStoreSelectMixin(){\n\tvar selectedId = null;\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\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\tthis.callEvent(\"onAfterUnselect\", [id]);\n\t\t\t}\n\t\t}\n\t};\n}\n\nmodule.exports = createDataStoreSelectMixin;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/datastore/select.js\n// module id = 61\n// module chunks = 0","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};\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\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\tstore.attachEvent(\"onIdChange\", function(oldId, newId){\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});\n\n};\n\nmodule.exports = {\n\tbindDataStore: storeRenderCreator\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/datastore/datastore_render.js\n// module id = 62\n// module chunks = 0","var liveUpdateHooks = require(\"./live_update_hooks\");\nvar dateHelper = require(\"../../utils/date_helpers\");\nvar helpers = require(\"../../utils/helpers\");\n\nfunction addDataProcessorHooks(gantt) {\n\n\tgantt.dataProcessor = require(\"./dataprocessor\");\n\n\tfunction detachDataProcessor(gantt, dp){\n\t\tdelete dp.$gantt;\n\t\tdelete dp.setGanttMode;\n\t\tdelete dp._getRowData;\n\t\tdp.afterUpdate = oldAfterUpdate;\n\n\t\tdelete gantt._dp;\n\t\tdelete gantt._change_id;\n\t\tdelete gantt._row_style;\n\t\tdelete gantt._delete_task;\n\t\tdelete gantt._sendTaskOrder;\n\n\t\thelpers.forEach(dataProcessorHandlers, function(e){\n\t\t\tgantt.detachEvent(e);\n\t\t});\n\t\tdataProcessorHandlers = [];\n\t}\n\n\tvar oldAfterUpdate;\n\tfunction extendDataProcessor(gantt, dp){\n\t\tdp.setGanttMode = function(mode){\n\t\t\tvar modes = dp.modes || {};\n\t\t\tif(dp._ganttMode){\n\t\t\t\tmodes[dp._ganttMode] = {\n\t\t\t\t\t_in_progress : dp._in_progress,\n\t\t\t\t\t_invalid : dp._invalid,\n\t\t\t\t\tupdatedRows : dp.updatedRows\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar newState = modes[mode];\n\t\t\tif(!newState){\n\t\t\t\tnewState = modes[mode] = {\n\t\t\t\t\t_in_progress : {},\n\t\t\t\t\t_invalid : {},\n\t\t\t\t\tupdatedRows : []\n\t\t\t\t};\n\t\t\t}\n\t\t\tdp._in_progress = newState._in_progress;\n\t\t\tdp._invalid = newState._invalid;\n\t\t\tdp.updatedRows = newState.updatedRows;\n\t\t\tdp.modes = modes;\n\t\t\tdp._ganttMode = mode;\n\t\t};\n\n\t\toldAfterUpdate = dp.afterUpdate;\n\t\tdp.afterUpdate = function(){\n\t\t\tvar xml;\n\t\t\tif(arguments.length == 3){\n\t\t\t\txml = arguments[1];\n\t\t\t}else{\n\t\t\t\t// old dataprocessor\n\t\t\t\txml = arguments[4];\n\t\t\t}\n\t\t\tvar mode = dp._ganttMode;\n\t\t\tvar reqUrl = xml.filePath;\n\n\t\t\tif(this._tMode != \"REST\"){\n\t\t\t\tif (reqUrl.indexOf(\"gantt_mode=links\") != -1) {\n\t\t\t\t\tmode = \"links\";\n\t\t\t\t}else{\n\t\t\t\t\tmode = \"tasks\";\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(reqUrl.indexOf(\"/link\") > reqUrl.indexOf(\"/task\")){\n\t\t\t\t\tmode = \"links\";\n\t\t\t\t}else{\n\t\t\t\t\tmode = \"tasks\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tdp.setGanttMode(mode);\n\n\t\t\tvar res = oldAfterUpdate.apply(dp, arguments);\n\t\t\tdp.setGanttMode(mode);\n\t\t\treturn res;\n\t\t};\n\n\t\tdp._getRowData=gantt.bind(function(id, pref) {\n\t\t\tvar task;\n\t\t\tif (dp._ganttMode == \"tasks\")\n\t\t\t\ttask = this.isTaskExists(id) ? this.getTask(id) : { id: id };\n\t\t\telse\n\t\t\t\ttask = this.isLinkExists(id) ? this.getLink(id) : { id: id };\n\n\t\t\ttask = gantt.copy(task);\n\n\t\t\tvar data = {};\n\t\t\tfor (var key in task) {\n\t\t\t\tif (key.substr(0, 1) == \"$\") continue;\n\t\t\t\tvar value = task[key];\n\t\t\t\tif (dateHelper.isDate(value))\n\t\t\t\t\tdata[key] = this.templates.xml_format(value);\n\t\t\t\telse if(value === null)\n\t\t\t\t\tdata[key] = \"\";\n\t\t\t\telse\n\t\t\t\t\tdata[key] = value;\n\t\t\t}\n\n\t\t\tvar taskTiming = this._get_task_timing_mode(task);\n\t\t\tif(taskTiming.$no_start){\n\t\t\t\ttask.start_date = \"\";\n\t\t\t\ttask.duration = \"\";\n\t\t\t}\n\t\t\tif(taskTiming.$no_end){\n\t\t\t\ttask.end_date = \"\";\n\t\t\t\ttask.duration = \"\";\n\t\t\t}\n\t\t\tdata[dp.action_param] = this.getUserData(id, dp.action_param);\n\t\t\treturn data;\n\t\t}, gantt);\n\t}\n\n\tfunction extendGantt(gantt, dp){\n\t\tgantt._change_id = gantt.bind(function(oldid, newid) {\n\t\t\tif (dp._ganttMode != \"tasks\")\n\t\t\t\tthis.changeLinkId(oldid, newid);\n\t\t\telse\n\t\t\t\tthis.changeTaskId(oldid, newid);\n\t\t}, this);\n\n\t\tgantt._row_style = function(row_id, classname){\n\t\t\tif (dp._ganttMode != \"tasks\") return;\n\t\t\tif(!gantt.isTaskExists(row_id))\n\t\t\t\treturn;\n\n\t\t\tvar task = gantt.getTask(row_id);\n\t\t\ttask.$dataprocessor_class = classname;\n\t\t\tgantt.refreshTask(row_id);\n\t\t};\n\n\t\t// fake method for dataprocessor\n\t\tgantt._delete_task = function(row_id, node){};\n\n\t\tgantt._sendTaskOrder = function(id, item){\n\t\t\tif(item.$drop_target){\n\t\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\t\tthis.getTask(id).target = item.$drop_target;\n\t\t\t\tdp.setUpdated(id, true,\"order\");\n\t\t\t\tdelete this.getTask(id).$drop_target;\n\t\t\t}\n\t\t};\n\n\t\tthis._dp = dp;\n\t}\n\n\tfunction attachDataProcessorEvents(gantt, dp){\n\t\tfunction clientSideDelete(id){\n\t\t\tvar updated = dp.updatedRows.slice();\n\t\t\tvar clientOnly = false;\n\n\t\t\tfor(var 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\tvar links = [];\n\n\t\t\tif (task.$source) {\n\t\t\t\tlinks = links.concat(task.$source);\n\t\t\t}\n\t\t\tif (task.$target) {\n\t\t\t\tlinks = links.concat(task.$target);\n\t\t\t}\n\n\t\t\treturn links;\n\t\t}\n\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterTaskAdd\", function(id, item) {\n\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\tdp.setUpdated(id,true,\"inserted\");\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterTaskUpdate\", function(id, item) {\n\t\t\tdp.setGanttMode(\"tasks\");\n\t\t\tdp.setUpdated(id,true);\n\n\t\t\tgantt._sendTaskOrder(id, item);\n\t\t}));\n\n\t\tvar treeHelper = require(\"../../utils/task_tree_helpers\");\n\t\tvar cascadeDelete = {};\n\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onBeforeTaskDelete\", function(id, item){\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\tdataProcessorHandlers.push(this.attachEvent(\"onAfterTaskDelete\", function(id, item) {\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\tvar needDbDelete = !clientSideDelete(id);\n\t\t\tif(!needDbDelete)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tif(gantt.config.cascade_delete && cascadeDelete[id]){\n\t\t\t\tvar dpMode = dp.updateMode;\n\t\t\t\tdp.setUpdateMode(\"off\");\n\n\t\t\t\tvar cascade = cascadeDelete[id];\n\t\t\t\tfor(var i in cascade.tasks){\n\t\t\t\t\tif(!clientSideDelete(i)){\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdp.setGanttMode(\"links\");\n\t\t\t\tfor(var i in cascade.links){\n\t\t\t\t\tif(!clientSideDelete(i)){\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcascadeDelete[id] = null;\n\n\t\t\t\tif(dpMode != \"off\"){\n\t\t\t\t\tdp.sendAllData();\n\t\t\t\t}\n\t\t\t\tdp.setGanttMode(\"tasks\");\n\n\t\t\t\tdp.setUpdateMode(dpMode);\n\n\t\t\t}\n\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\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterLinkUpdate\", function(id, item) {\n\t\t\tdp.setGanttMode(\"links\");\n\t\t\tdp.setUpdated(id, true);\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterLinkAdd\", function(id, item) {\n\t\t\tdp.setGanttMode(\"links\");\n\t\t\tdp.setUpdated(id, true,\"inserted\");\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onAfterLinkDelete\", function(id, item) {\n\t\t\tdp.setGanttMode(\"links\");\n\n\t\t\tvar needDbDelete = !clientSideDelete(id);\n\t\t\tif(!needDbDelete)\n\t\t\t\treturn;\n\n\t\t\tdp.setUpdated(id, true,\"deleted\");\n\t\t}));\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onRowDragEnd\", function(id, target) {\n\t\t\tgantt._sendTaskOrder(id, gantt.getTask(id));\n\t\t}));\n\n\t\tvar tasks = null,\n\t\t\tlinks = null;\n\t\tdataProcessorHandlers.push(this.attachEvent(\"onTaskIdChange\",function(oldId, newId){\n\t\t\tif(!dp._waitMode) return;\n\n\t\t\tvar children = gantt.getChildren(newId);\n\t\t\tif(children.length) {\n\t\t\t\ttasks = tasks || {};\n\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar 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\tvar item = this.getTask(newId),\n\t\t\t\titemLinks = getTaskLinks(item);\n\n\t\t\tif(itemLinks.length) {\n\t\t\t\tlinks = links || {};\n\n\t\t\t\tfor (var i = 0; i < itemLinks.length; i++) {\n\t\t\t\t\tvar 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(var 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(var 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\tvar url = this._serverProcessor;\n\t\t\tif(this._tMode == \"REST\"){\n\t\t\t\tvar mode = this._ganttMode.substr(0, this._ganttMode.length - 1);// links, tasks -> /link/id, /task/id\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\tthis.serverProcessor = url + gantt.ajax.urlSeparator(url) + \"gantt_mode=\" + this._ganttMode;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tvar dataProcessorHandlers = [];\n\n\tgantt._dp_init = function(dp) {\n\t\tgantt.assert(!this._dp, \"The dataProcessor is already attached to this gantt instance\");\n\n\t\tdp.setTransactionMode(\"POST\", true);\n\t\tdp.serverProcessor += (dp.serverProcessor.indexOf(\"?\") != -1 ? \"&\" : \"?\") + \"editing=true\";\n\t\tdp._serverProcessor = dp.serverProcessor;\n\t\tdp.$gantt = this;\n\t\tdp.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\tdp._methods=[\"_row_style\",\"setCellTextStyle\",\"_change_id\",\"_delete_task\"];\n\n\t\textendDataProcessor.call(this, gantt, dp);\n\t\textendGantt.call(this, gantt, dp);\n\t\tattachDataProcessorEvents.call(this, gantt, dp);\n\n\t\tdp.attachEvent(\"onDestroy\", function(){\n\t\t\tdetachDataProcessor(gantt, dp);\n\t\t});\n\t\tliveUpdateHooks(gantt, dp);\n\t};\n\n\tgantt.getUserData = function(id, name) {\n\t\tif (!this.userdata) this.userdata = {};\n\t\tif (this.userdata[id] && this.userdata[id][name]) return this.userdata[id][name];\n\t\treturn \"\";\n\t};\n\tgantt.setUserData = function(id, name, value) {\n\t\tif (!this.userdata) this.userdata = {};\n\t\tif (!this.userdata[id]) this.userdata[id] = {};\n\t\tthis.userdata[id][name] = value;\n\t};\n}\n\nmodule.exports = addDataProcessorHooks;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/dataprocessor/hooks.js\n// module id = 63\n// module chunks = 0","var utils = require (\"../../utils/utils\");\n\nfunction updateCallback(upd, id) {\n\tvar data = upd.data || this.xml._xmlNodeToJSON(upd.firstChild);\n\tif(!this.isTaskExists(id))\n\t\treturn;\n\tvar objData = this.getTask(id);\n\tfor(var key in data) {\n\t\tvar property = data[key];\n\t\tswitch(key) {\n\t\t\tcase \"id\":\n\t\t\t\tcontinue;\n\t\t\tcase \"start_date\":\n\t\t\tcase \"end_date\":\n\t\t\t\tproperty = this.templates.xml_date(property);\n\t\t\t\tbreak;\n\t\t\tcase \"duration\":\n\t\t\t\tobjData.end_date = this.calculateEndDate({start_date: objData.start_date, duration: property, task:objData});\n\t\t\t\tbreak;\n\t\t}\n\t\tobjData[key] = property;\n\t}\n\tthis.updateTask(id);\n\tthis.refreshData();\n}\n\nfunction insertCallback(upd, id, parent, mode) {\n\tvar data = upd.data || this.xml._xmlNodeToJSON(upd.firstChild),\n\t\tmethods = {\n\t\t\tadd: this.addTask,\n\t\t\tisExist: this.isTaskExists\n\t\t};\n\tif(mode == \"links\") {\n\t\tmethods.add = this.addLink;\n\t\tmethods.isExist = this.isLinkExists;\n\t}\n\tif(methods.isExist.call(this, id))\n\t\treturn;\n\tdata.id = id;\n\tmethods.add.call(this, data);\n}\n\nfunction deleteCallback(upd, id, parent, mode) {\n\tvar methods = {\n\t\t\"delete\": this.deleteTask,\n\t\t\"isExist\": this.isTaskExists\n\t};\n\tif(mode == \"links\") {\n\t\tmethods[\"delete\"] = this.deleteLink;\n\t\tmethods.isExist = this.isLinkExists;\n\t}\n\tif(methods.isExist.call(this, id))\n\t\tmethods[\"delete\"].call(this, id);\n}\n\nfunction patchDataProcessor(gantt, dataprocessor){\n\tdataprocessor.attachEvent(\"insertCallback\", utils.bind(insertCallback, gantt));\n\tdataprocessor.attachEvent(\"updateCallback\", utils.bind(deleteCallback, gantt));\n\tdataprocessor.attachEvent(\"deleteCallback\", utils.bind(deleteCallback, gantt));\n}\n\nmodule.exports = patchDataProcessor;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/dataprocessor/live_update_hooks.js\n// module id = 64\n// module chunks = 0","var utils = require(\"../../utils/utils\");\nvar eventable = require(\"../../utils/eventable\");\n\n/**\n\t* \t@desc: constructor, data processor object \n\t*\t@param: serverProcessorURL - url used for update\n\t*\t@type: public\n\t*/\nvar dataProcessor = function(serverProcessorURL){\n this.serverProcessor = serverProcessorURL;\n this.action_param=\"!nativeeditor_status\";\n \n\tthis.object = null;\n\tthis.updatedRows = []; //ids of updated rows\n\t\n\tthis.autoUpdate = true;\n\tthis.updateMode = \"cell\";\n\tthis._tMode=\"GET\"; \n\tthis._headers = null;\n\tthis._payload = null;\n\tthis.post_delim = \"_\";\n\t\n this._waitMode=0;\n this._in_progress={};//?\n this._invalid={};\n this.mandatoryFields=[];\n this.messages=[];\n \n this.styles={\n \tupdated:\"font-weight:bold;\",\n \tinserted:\"font-weight:bold;\",\n \tdeleted:\"text-decoration : line-through;\",\n \tinvalid:\"background-color:FFE0E0;\",\n \tinvalid_cell:\"border-bottom:2px solid red;\",\n \terror:\"color:red;\",\n \tclear:\"font-weight:normal;text-decoration:none;\"\n };\n \n this.enableUTFencoding(true);\n\teventable(this);\n\n return this;\n};\n\ndataProcessor.prototype={\n\tsetTransactionMode:function(mode,total){\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\t\t\t\n\t\t} else {\n \t this._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\"){\n\t\t\tthis._tSend = false;\n\t\t\tthis._endnm = true;\n\t\t\tthis._headers = this._headers || {};\n\t\t\tthis._headers[\"Content-type\"] = \"application/json\";\n\t\t}\n },\n escape:function(data){\n \tif (this._utf)\n \t\treturn encodeURIComponent(data);\n \telse\n \treturn escape(data);\n\t},\n /**\n\t* \t@desc: allows to set escaping mode\n\t*\t@param: true - utf based escaping, simple - use current page encoding\n\t*\t@type: public\n\t*/\t\n\tenableUTFencoding:function(mode){\n this._utf=!!mode;\n },\n /**\n\t* \t@desc: allows to define, which column may trigger update\n\t*\t@param: val - array or list of true/false values\n\t*\t@type: public\n\t*/\n\tsetDataColumns:function(val){\n\t\tthis._columns=(typeof val == \"string\")?val.split(\",\"):val;\n },\n /**\n\t* \t@desc: get state of updating\n\t*\t@returns: true - all in sync with server, false - some items not updated yet.\n\t*\t@type: public\n\t*/\n\tgetSyncState:function(){\n\t\treturn !this.updatedRows.length;\n\t},\n\t/**\n\t* \t@desc: enable/disable named field for data syncing, will use column ids for grid\n\t*\t@param: mode - true/false\n\t*\t@type: public\n\t*/\n\tenableDataNames:function(mode){\n\t\tthis._endnm= !!mode;\n\t},\n\t/**\n\t* \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*\t@param: mode - true/false\n\t*\t@type: public\n\t*/\n\tenablePartialDataSend:function(mode){\n\t\tthis._changed= !!mode;\n\t},\n\t/**\n\t* \t@desc: set if rows should be send to server automaticaly\n\t*\t@param: mode - \"row\" - based on row selection changed, \"cell\" - based on cell editing finished, \"off\" - manual data sending\n\t*\t@type: public\n\t*/\n\tsetUpdateMode:function(mode,dnd){\n\t\tthis.autoUpdate = (mode==\"cell\");\n\t\tthis.updateMode = mode;\n\t\tthis.dnd=dnd;\n\t},\n\tignore:function(code,master){\n\t\tthis._silent_mode=true;\n\t\tcode.call(master||window);\n\t\tthis._silent_mode=false;\n\t},\n\t/**\n\t* \t@desc: mark row as updated/normal. check mandatory fields,initiate autoupdate (if turned on)\n\t*\t@param: rowId - id of row to set update-status for\n\t*\t@param: state - true for \"updated\", false for \"not updated\"\n\t*\t@param: mode - update mode name\n\t*\t@type: public\n\t*/\n\tsetUpdated:function(rowId,state,mode){\n\t\tif (this._silent_mode) return;\n\t\tvar ind=this.findRow(rowId);\n\t\t\n\t\tmode=mode||\"updated\";\n\t\tvar existing = this.obj.getUserData(rowId,this.action_param);\n\t\tif (existing && mode == \"updated\") mode=existing;\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.obj.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} else{\n\t\t\tif (!this.is_invalid(rowId)){\n\t\t\t\tthis.updatedRows.splice(ind,1);\n\t\t\t\tthis.obj.setUserData(rowId,this.action_param,\"\");\n\t\t\t}\n\t\t}\n\n\t\t//clear changed flag\n\t\tif (!state)\n\t\t\tthis._clearUpdateFlag(rowId);\n \t\t\t\n\t\tthis.markRow(rowId,state,mode);\n\t\tif (state && this.autoUpdate) this.sendData(rowId);\n\t},\n\t_clearUpdateFlag:function(id){},\n\tmarkRow:function(id,state,mode){ \n\t\tvar str=\"\";\n\t\tvar invalid=this.is_invalid(id);\n\t\tif (invalid){\n \tstr=this.styles[invalid];\n \tstate=true;\n \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\t\t\t\n \tthis.obj[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 (var i=0; i < invalid.details.length; i++)\n\t\t\t\t\tif (invalid.details[i])\n \t\t\t\tthis.obj[this._methods[1]](id,i,str);\n\t\t\t}\n\t\t}\n\t},\n\tgetState:function(id){\n\t\treturn this.obj.getUserData(id,this.action_param);\n\t},\n\tis_invalid:function(id){\n\t\treturn this._invalid[id];\n\t},\n\tset_invalid:function(id,mode,details){ \n\t\tif (details) mode={value:mode, details:details, toString:function(){ return this.value.toString(); }};\n\t\tthis._invalid[id]=mode;\n\t},\n\t/**\n\t* \t@desc: check mandatory fields and varify values of cells, initiate update (if specified)\n\t*\t@param: rowId - id of row to set update-status for\n\t*\t@type: public\n\t*/\n\tcheckBeforeUpdate:function(rowId){ \n\t\treturn true;\n\t},\n\t/**\n\t* \t@desc: send row(s) values to server\n\t*\t@param: rowId - id of row which data to send. If not specified, then all \"updated\" rows will be send\n\t*\t@type: public\n\t*/\n\tsendData:function(rowId){\n\t\tif (this._waitMode && (this.obj.mytype==\"tree\" || this.obj._h2)) return;\n\t\tif (this.obj.editStop) this.obj.editStop();\n\t\n\t\t\n\t\tif(typeof rowId == \"undefined\" || this._tSend) return this.sendAllData();\n\t\tif (this._in_progress[rowId]) return false;\n\t\t\n\t\tthis.messages=[];\n\t\tif (!this.checkBeforeUpdate(rowId) && this.callEvent(\"onValidationError\",[rowId,this.messages])) return false;\n\t\tthis._beforeSendData(this._getRowData(rowId),rowId);\n },\n _beforeSendData:function(data,rowId){\n \tif (!this.callEvent(\"onBeforeUpdate\",[rowId,this.getState(rowId),data])) return false;\t\n\t\tthis._sendData(data,rowId);\n },\n serialize:function(data, id){\n \tif (typeof data == \"string\")\n \t\treturn data;\n \tif (typeof id != \"undefined\")\n \t\treturn this.serialize_one(data,\"\");\n \telse{\n \t\tvar stack = [];\n \t\tvar keys = [];\n \t\tfor (var key in data)\n \t\t\tif (data.hasOwnProperty(key)){\n \t\t\t\tstack.push(this.serialize_one(data[key],key+this.post_delim));\n \t\t\t\tkeys.push(key);\n\t\t\t\t}\n \t\tstack.push(\"ids=\"+this.escape(keys.join(\",\")));\n \t\tif (this.$gantt.security_key)\n\t\t\t\tstack.push(\"dhx_security=\"+this.$gantt.security_key);\n \t\treturn stack.join(\"&\");\n \t}\n },\n serialize_one:function(data, pref){\n \tif (typeof data == \"string\")\n \t\treturn data;\n \tvar stack = [];\n \tfor (var key in data)\n \t\tif (data.hasOwnProperty(key)){\n \t\t\tif ((key == \"id\" || key == this.action_param) && this._tMode == \"REST\") continue;\n \t\t\tstack.push(this.escape((pref||\"\")+key)+\"=\"+this.escape(data[key]));\n \t\t}\n\t\treturn stack.join(\"&\");\n },\n\t_applyPayload:function(url){\n\t\tvar ajax = this.$gantt.ajax;\n\t\tif (this._payload)\n\t\t\tfor (var key in this._payload)\n\t\t\t\turl = url + ajax.urlSeparator(url) + this.escape(key) + \"=\" + this.escape(this._payload[key]);\n\t\treturn url;\n\t},\n _sendData:function(a1,rowId){\n \tif (!a1) return; //nothing to send\n\t\tif (!this.callEvent(\"onBeforeDataSending\",rowId?[rowId,this.getState(rowId),a1]:[null, null, a1])) return false;\t\t\t\t\n\t\t\n \tif (rowId)\n\t\t\tthis._in_progress[rowId]=(new Date()).valueOf();\n\n\t\tvar that = this;\n\t\tvar back = function(xml){\n\t\t\tvar ids = [];\n\t\t\tif (rowId)\n\t\t\t\tids.push(rowId);\n\t\t\telse if (a1)\n\t\t\t\tfor (var key in a1)\n\t\t\t\t\tids.push(key);\n\n\t\t\treturn that.afterUpdate(that,xml,ids);\n\t\t};\n\t\tvar ajax = this.$gantt.ajax;\n\n\t\tvar a3 = this.serverProcessor+(this._user?(ajax.urlSeparator(this.serverProcessor)+[\"dhx_user=\"+this._user,\"dhx_version=\"+this.obj.getUserData(0,\"version\")].join(\"&\")):\"\");\n\t\tvar a4 = this._applyPayload(a3);\n\n\t\tif (this._tMode==\"GET\") {\n\t\t\tajax.query({\n\t\t\t\turl: a4 + ajax.urlSeparator(a4) + this.serialize(a1, rowId),\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcallback: back,\n\t\t\t\theaders: this._headers\n\t\t\t});\n\t\t} else if (this._tMode == \"POST\") {\n\t\t\tajax.query({\n\t\t\t\turl: a4,\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: this._headers,\n\t\t\t\tdata: this.serialize(a1, rowId),\n\t\t\t\tcallback: back\n\t\t\t});\n\t\t} else if (this._tMode == \"JSON\"){\n\t\t\tvar action = a1[this.action_param];\n\t\t\tvar data = {};\n\t\t\tfor (var key in a1) data[key] = a1[key];\n\t\t\tdelete data[this.action_param];\n\t\t\tdelete data.id;\n\t\t\tdelete data.gr_id;\n\n\t\t\tajax.query({\n\t\t\t\turl:a4,\n\t\t\t\tmethod:\"POST\",\n\t\t\t\theaders:this._headers,\n\t\t\t\tcallback:back,\n\t\t\t\tdata:JSON.stringify({\n\t\t\t\t\tid: rowId,\n\t\t\t\t\taction: action,\n\t\t\t\t\tdata: data\n\t\t\t\t})\n\t\t\t});\n\t\t}\n else if (this._tMode == \"REST\"){\n \tvar state = this.getState(rowId);\n \tvar url = a3.replace(/(\\&|\\?)editing\\=true/,\"\");\n \tvar data = \"\";\n \tvar method = \"post\";\n\n \tif (state == \"inserted\"){\n \t\tdata = this.serialize(a1, rowId);\n \t} else if (state == \"deleted\"){\n \t\tmethod = \"DELETE\";\n \t\turl = url + (url.slice(-1) == \"/\" ? \"\" : \"/\") + rowId;\n \t} else {\n \t\tmethod = \"PUT\";\n \t\tdata = this.serialize(a1, rowId);\n \t\turl = url + (url.slice(-1) == \"/\" ? \"\" : \"/\") + rowId;\n \t}\n\n\n \turl = this._applyPayload(url);\n \tajax.query({\n \t\turl:url,\n \t\tmethod:method,\n \t\theaders:this._headers,\n \t\tdata:data,\n \t\tcallback:back\n \t});\n }\n\n\t\tthis._waitMode++;\n },\n\tsendAllData:function(){\n\t\tif (!this.updatedRows.length) return;\t\t\t\n\n\t\tthis.messages=[]; var valid=true;\n\t\tfor (var i=0; i 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\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/plugins/autoscroll.js\n// module id = 67\n// module chunks = 0","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\t function restoreMethods(){\n\t\tfor(var i in methods){\n\t\t\trestoreMethod.call(this, i);\n\t\t}\n\t}\n\n\tfunction batchUpdatePayload(callback){\n\t\ttry{\n\t\t\tcallback();\n\t\t}catch(e){\n\t\t\twindow.console.error(e);\n\t\t}\n\t}\n\n\tvar state = gantt.$services.getService(\"state\");\n\tstate.registerProvider(\"batchUpdate\", function(){\n\t\treturn {\n\t\t\tbatch_update: isActive\n\t\t};\n\t}, true);\n\n\treturn function batchUpdate(callback, noRedraw) {\n\t\tif(isActive){\n\t\t\t// batch mode is already active\n\t\t\tbatchUpdatePayload(callback);\n\t\t\treturn;\n\t\t}\n\n\t\tvar call_dp = (this._dp && this._dp.updateMode != \"off\");\n\t\tvar dp_mode;\n\t\tif (call_dp){\n\t\t\tdp_mode = this._dp.updateMode;\n\t\t\tthis._dp.setUpdateMode(\"off\");\n\t\t}\n\n\t\t// temporary disable some methods while updating multiple tasks\n\t\tvar resetProjects = {};\n\t\tvar methods = {\n\t\t\t\"render\":true,\n\t\t\t\"refreshData\":true,\n\t\t\t\"refreshTask\":true,\n\t\t\t\"refreshLink\":true,\n\t\t\t\"resetProjectDates\":function(task){\n\t\t\t\tresetProjects[task.id] = task;\n\t\t\t}\n\t\t};\n\n\t\tdisableMethods.call(this, methods);\n\n\t\tisActive = true;\n\t\tthis.callEvent(\"onBeforeBatchUpdate\", []);\n\n\t\tbatchUpdatePayload(callback);\n\n\t\tthis.callEvent(\"onAfterBatchUpdate\", []);\n\n\t\trestoreMethods.call(this);\n\n\t\t// do required updates after changes applied\n\t\tfor(var i in resetProjects){\n\t\t\tthis.resetProjectDates(resetProjects[i]);\n\t\t}\n\n\t\tisActive = false;\n\n\t\tif(!noRedraw){\n\t\t\tthis.render();\n\t\t}\n\n\t\tif (call_dp) {\n\t\t\tthis._dp.setUpdateMode(dp_mode);\n\t\t\tthis._dp.setGanttMode(\"tasks\");\n\t\t\tthis._dp.sendData();\n\t\t\tthis._dp.setGanttMode(\"links\");\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/plugins/batch_update.js\n// module id = 68\n// module chunks = 0","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._groups && gantt._groups.is_active());\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\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.attachEvent(\"onAfterTaskMove\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n\n\tgantt.attachEvent(\"onBeforeParse\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n\n\tgantt.attachEvent(\"onAfterTaskDelete\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n\n\tgantt.attachEvent(\"onAfterTaskAdd\", function() {\n\t\twbs.reset();\n\t\treturn true;\n\t});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/plugins/wbs.js\n// module id = 69\n// module chunks = 0","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})(jQuery);\n\n}\n\n\nmodule.exports = null;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/plugins/jquery_hooks.js\n// module id = 70\n// module chunks = 0","if (window.dhtmlx){\n\n\tif (!dhtmlx.attaches)\n\t\tdhtmlx.attaches = {};\n\n\tdhtmlx.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\tdhtmlXCellObject.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\t\tvar method_name=\"_viewRestore\";\n\t\tobj = null;\n\t\tthis.callEvent(\"_onContentAttach\",[]);\n\n\t\treturn this.dataObj;\n\t};\n}\n\nmodule.exports = null;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/plugins/dhtmlx_hooks.js\n// module id = 71\n// module chunks = 0","function createResourceMethods(gantt){\n\n\tvar resourceTaskCache = {},\n\t\tresourceLoadCache = {};\n\n\tgantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(){\n\t\tresourceTaskCache = {};\n\t\tresourceLoadCache = {};\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(propertyValue instanceof Array){\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\tfunction getResourceTasks(property, resourceIds) {\n\t\tvar res;\n\n\t\tvar cacheKey = resourceIds.join(\"_\") + \"_\" + property;\n\n\t\tvar resourceHash = {};\n\t\tfor(var i = 0; i < resourceIds.length; i++){\n\t\t\tresourceHash[resourceIds[i]] = 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 (resourceHash[task[property]] && task.type != gantt.config.types.project) {\n\t\t\t\t\tres.push(task);\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(resourceId, resourceProperty, scale){\n\t\tvar cacheKey = [resourceId, resourceProperty, scale.unit, scale.step].join(\"_\");\n\t\tvar res;\n\t\tif(!resourceTaskCache[cacheKey]){\n\t\t\tres = resourceTaskCache[cacheKey] = calculateResourceLoad(resourceId, resourceProperty, scale);\n\n\t\t}else{\n\t\t\tres = resourceTaskCache[cacheKey];\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction calculateResourceLoad(resourceProperty, resourceId, scale) {\n\n\t\tvar tasks = getTaskBy(resourceProperty, resourceId);\n\t\tvar step = scale.unit;\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[step + \"_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, 1, step);\n\n\t\t\t\tif (!gantt.isWorkTime({date: date, task: task})) {\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\t\ttasks: []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\ttimegrid[timestamp].tasks.push(task);\n\t\t\t}\n\t\t}\n\n\t\tvar timetable = [];\n\t\tvar start, end;\n\t\tfor (var i in timegrid) {\n\t\t\tstart = new Date(i * 1);\n\t\t\tend = gantt.date.add(start, 1, step);\n\t\t\ttimetable.push({\n\t\t\t\tstart_date: start,\n\t\t\t\tend_date: end,\n\t\t\t\ttasks: timegrid[i].tasks\n\t\t\t});\n\t\t}\n\n\t\treturn timetable;\n\t}\n\n\tfunction renderResourceLine(resource, timeline) {\n\t\tvar config = timeline.$getConfig(),\n\t\t\ttemplates = timeline.$getTemplates();\n\t\tvar timetable = getResourceLoad(config.resource_property, resource.id, timeline.getScale());\n\n\t\tvar cells = [];\n\t\tfor (var i = 0; i < timetable.length; i++) {\n\n\t\t\tvar day = timetable[i];\n\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\n\t\t\t\tcells.push(el);\n\t\t\t}\n\n\t\t}\n\n\t\tvar row = null;\n\t\tif(cells.length){\n\t\t\trow = document.createElement(\"div\");\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\trow.appendChild(cells[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn row;\n\t}\n\treturn {\n\t\trenderLine: renderResourceLine,\n\t\tfilterTasks: getTaskBy\n\t};\n}\n\nmodule.exports = function(gantt){\n\tvar methods = createResourceMethods(gantt);\n\n\tgantt.getTaskBy = methods.filterTasks;\n\tgantt.$ui.layers.resourceRow = methods.renderLine;\n\tgantt.config.resource_property = \"owner_id\";\n\tgantt.config.resource_store = \"resource\";\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/plugins/resources.js\n// module id = 72\n// module chunks = 0","module.exports = function(gantt) {\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/dynamic_loading.gpl.js\n// module id = 73\n// module chunks = 0","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\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/grid_column_api.gpl.js\n// module id = 74\n// module chunks = 0","module.exports = function(gantt){\n\n\tvar htmlTags = new RegExp(\"<(?:.|\\n)*?>\", \"gm\");\n\tvar extraSpaces = new RegExp(\" +\", \"gm\");\n\n\tfunction stripHTMLLite(htmlText){\n\t\treturn (htmlText + \"\")\n\t\t\t.replace(htmlTags, \" \").\n\t\t\treplace(extraSpaces, \" \");\n\t}\n\n\tvar singleQuotes = new RegExp(\"'\", \"gm\");\n\tfunction escapeQuotes(text){\n\t\treturn (text + \"\").replace(singleQuotes, \"'\");\n\t}\n\n\tgantt._waiAria = {\n\t\tgetAttributeString: function(attr){\n\t\t\tvar attributes = [\" \"];\n\t\t\tfor(var i in attr){\n\t\t\t\tvar text = escapeQuotes(stripHTMLLite(attr[i]));\n\t\t\t\tattributes.push(i + \"='\" + text + \"'\");\n\t\t\t}\n\t\t\tattributes.push(\" \");\n\t\t\treturn attributes.join(\" \");\n\n\t\t},\n\n\t\tgetTimelineCellAttr:function(dateString){\n\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": dateString});\n\t\t},\n\n\n\t\t_taskCommonAttr: function(task, div){\n\n\t\t\tif(!(task.start_date && task.end_date))\n\t\t\t\treturn;\n\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(gantt.templates.tooltip_text(task.start_date, task.end_date, task)));\n\n\t\t\tif(gantt.isReadonly(task)){\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\n\n\n\t\t\t}\n\n\t\t\tif(task.$dataprocessor_class){\n\t\t\t\tdiv.setAttribute(\"aria-busy\", true);\n\t\t\t}\n\n\n\t\t\tdiv.setAttribute(\"aria-selected\",\n\t\t\t\t(gantt.getState().selected_task == task.id || (gantt.isSelectedTask && gantt.isSelectedTask(task.id))) ? \"true\" : \"false\");\n\t\t},\n\n\t\tsetTaskBarAttr: function(task, div){\n\t\t\tthis._taskCommonAttr(task, div);\n\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.drag_move){\n\t\t\t\tif(task.id != gantt.getState().drag_id){\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\n\t\t\t\t}else{\n\t\t\t\t\tdiv.setAttribute(\"aria-grabbed\", true);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\ttaskRowAttr: function(task, div){\n\n\t\t\tthis._taskCommonAttr(task, div);\n\n\t\t\tif(!gantt.isReadonly(task) && gantt.config.order_branch){\n\t\t\t\tdiv.setAttribute(\"aria-grabbed\", false);\n\t\t\t}\n\n\t\t\tdiv.setAttribute(\"role\", \"row\");\n\n\t\t\tdiv.setAttribute(\"aria-level\", task.$level);\n\n\t\t\tif(gantt.hasChild(task.id)){\n\t\t\t\tdiv.setAttribute(\"aria-expanded\", task.$open ? \"true\" : \"false\");\n\t\t\t}\n\t\t},\n\n\t\tlinkAttr: function(link, div){\n\n\t\t\tvar linkTypes = gantt.config.links;\n\n\t\t\tvar toStart = link.type == linkTypes.finish_to_start || link.type == linkTypes.start_to_start;\n\t\t\tvar fromStart = link.type == linkTypes.start_to_start || link.type == linkTypes.start_to_finish;\n\n\t\t\tvar content = gantt.locale.labels.link + \" \" + gantt.templates.drag_link(link.source, fromStart, link.target, toStart);\n\n\t\t\tdiv.setAttribute(\"aria-label\", stripHTMLLite(content));\n\t\t\tif(gantt.isReadonly(link)){\n\t\t\t\tdiv.setAttribute(\"aria-readonly\", true);\n\t\t\t}\n\t\t},\n\n\t\tgridSeparatorAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"separator\");\n\t\t},\n\n\t\tlightboxHiddenAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t},\n\n\t\tlightboxVisibleAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\n\t\t},\n\n\t\tlightboxAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t\tdiv.firstChild.setAttribute(\"role\", \"heading\");\n\t\t},\n\n\t\tlightboxButtonAttrString:function(buttonName){\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\":gantt.locale.labels[buttonName], \"tabindex\":\"0\"});\n\t\t},\n\n\t\tlightboxHeader: function(div, headerText){\n\t\t\tdiv.setAttribute(\"aria-label\", headerText);\n\t\t},\n\n\t\tlightboxSelectAttrString: function(time_option){\n\t\t\tvar label = \"\";\n\n\t\t\tswitch (time_option) {\n\t\t\t\tcase \"%Y\":\n\t\t\t\t\tlabel = gantt.locale.labels.years;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%m\":\n\t\t\t\t\tlabel = gantt.locale.labels.months;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%d\":\n\t\t\t\t\tlabel = gantt.locale.labels.days;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%H:%i\":\n\t\t\t\t\tlabel = gantt.locale.labels.hours + gantt.locale.labels.minutes;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn gantt._waiAria.getAttributeString({\"aria-label\": label});\n\t\t},\n\n\t\tlightboxDurationInputAttrString: function(section){\n\t\t\treturn this.getAttributeString({\"aria-label\": gantt.locale.labels.column_duration, \"aria-valuemin\": \"0\"});\n\t\t},\n\n\t\tgridAttrString: function(){\n\t\t\treturn [\" role='treegrid'\", gantt.config.multiselect ? \"aria-multiselectable='true'\" : \"aria-multiselectable='false'\", \" \"].join(\" \");\n\t\t},\n\n\n\t\tgridScaleRowAttrString: function(){\n\t\t\treturn \"role='row'\";\n\t\t},\n\n\t\tgridScaleCellAttrString: function(column, label){\n\t\t\tvar attrs = \"\";\n\t\t\tif(column.name == \"add\"){\n\t\t\t\tattrs = this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\n\t\t\t}else{\n\n\t\t\t\tvar attributes = {\n\t\t\t\t\t\"role\":\"columnheader\",\n\t\t\t\t\t\"aria-label\": label\n\t\t\t\t};\n\n\t\t\t\tif(gantt._sort && gantt._sort.name == column.name){\n\t\t\t\t\tif(gantt._sort.direction == \"asc\"){\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"ascending\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tattributes[\"aria-sort\"] = \"descending\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tattrs = this.getAttributeString(attributes);\n\t\t\t}\n\t\t\treturn attrs;\n\t\t},\n\n\t\tgridDataAttrString: function(){\n\t\t\treturn \"role='rowgroup'\";\n\t\t},\n\n\t\tgridCellAttrString: function(column, textValue){\n\t\t\treturn this.getAttributeString({\"role\":\"gridcell\", \"aria-label\": textValue});\n\t\t},\n\n\t\tgridAddButtonAttrString: function(column){\n\t\t\treturn this.getAttributeString({\"role\":\"button\", \"aria-label\": gantt.locale.labels.new_task});\n\t\t},\n\n\t\tmessageButtonAttrString: function(buttonLabel){\n\t\t\treturn \"tabindex='0' role='button' aria-label='\"+buttonLabel+\"'\";\n\t\t},\n\n\t\tmessageInfoAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"alert\");\n\t\t\t//div.setAttribute(\"tabindex\", \"-1\");\n\t\t},\n\n\t\tmessageModalAttr: function(div, uid){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t\tif(uid){\n\t\t\t\tdiv.setAttribute(\"aria-labelledby\", uid);\n\t\t\t}\n\n\t\t//\tdiv.setAttribute(\"tabindex\", \"-1\");\n\t\t},\n\n\t\tquickInfoAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"dialog\");\n\t\t},\n\n\t\tquickInfoHeaderAttrString: function(){\n\t\t\treturn \" role='heading' \";\n\t\t},\n\n\t\tquickInfoHeader: function(div, header){\n\t\t\tdiv.setAttribute(\"aria-label\", header);\n\t\t},\n\n\t\tquickInfoButtonAttrString: function(label){\n\t\t\treturn gantt._waiAria.getAttributeString({\"role\":\"button\", \"aria-label\":label, \"tabindex\":\"0\"});\n\t\t},\n\n\t\ttooltipAttr: function(div){\n\t\t\tdiv.setAttribute(\"role\", \"tooltip\");\n\t\t},\n\n\t\ttooltipVisibleAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"false\");\n\t\t},\n\n\t\ttooltipHiddenAttr: function(div){\n\t\t\tdiv.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t};\n\n\tfunction isDisabled(){\n\t\treturn !gantt.config.wai_aria_attributes;\n\t}\n\n\tfor(var i in gantt._waiAria){\n\t\tgantt._waiAria[i] = (function(payload){\n\t\t\treturn function(){\n\t\t\t\tif(isDisabled()){\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn payload.apply(this, arguments);\n\t\t\t};\n\t\t})(gantt._waiAria[i]);\n\t}\n\n\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/wai_aria.js\n// module id = 75\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/tasks.js\n// module id = 76\n// module chunks = 0","var utils = require(\"../utils/utils\");\nvar dateHelper = require(\"../utils/date_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\tthis.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\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\tgantt.json = {\n\t\tparse: function (data) {\n\t\t\tgantt.assert(data, \"Invalid data\");\n\n\t\t\tif (typeof data == \"string\") {\n\t\t\t\tif (window.JSON)\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\telse {\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.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 (dateHelper.isDate(copy[key])) {\n\t\t\t\t\tcopy[key] = gantt.templates.xml_format(copy[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t},\n\t\tserialize: function () {\n\t\t\tvar tasks = [];\n\t\t\tvar links = [];\n\n\t\t\tgantt.eachTask(function (obj) {\n\t\t\t\tgantt.resetProjectDates(obj);\n\t\t\t\ttasks.push(this.serializeTask(obj));\n\t\t\t}, gantt.config.root_id, this);\n\n\t\t\tvar rawLinks = gantt.getLinks();\n\t\t\tfor (var i = 0; i < rawLinks.length; i++) {\n\t\t\t\tlinks.push(this.serializeLink(rawLinks[i]));\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: tasks,\n\t\t\t\tlinks: links\n\t\t\t};\n\t\t}\n\t};\n\n\t/*\n\t\n\t\t\n\t\t\tMy task 1\n\t\t\t16.08.2013\n\t\t\t22.08.2013\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t*/\n\n\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) throw \"Invalid XML data\";\n\n\t\t\tvar skey = xml.getAttribute(\"dhx_security\");\n\t\t\tif (skey)\n\t\t\t\tgantt.security_key = skey;\n\n\t\t\treturn xml;\n\t\t},\n\t\tparse: function (text, loader) {\n\t\t\tloader = this._getXML(text, loader);\n\t\t\tvar data = {};\n\n\t\t\tvar evs = data.data = [];\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\n\n\t\t\tfor (var i = 0; i < xml.length; i++)\n\t\t\t\tevs[i] = this._xmlNodeToJSON(xml[i]);\n\n\t\t\tdata.collections = this._getCollections(loader);\n\t\t\treturn data;\n\t\t},\n\t\t_copyLink: function (obj) {\n\t\t\treturn \"\";\n\t\t},\n\t\t_copyObject: function (obj) {\n\t\t\treturn \"\";\n\t\t},\n\t\tserialize: function () {\n\t\t\tvar tasks = [];\n\t\t\tvar links = [];\n\n\t\t\tvar json = gantt.json.serialize();\n\t\t\tfor (var i = 0, len = json.data.length; i < len; i++) {\n\t\t\t\ttasks.push(this._copyObject(json.data[i]));\n\t\t\t}\n\t\t\tfor (var i = 0, len = json.links.length; i < len; i++) {\n\t\t\t\tlinks.push(this._copyLink(json.links[i]));\n\t\t\t}\n\t\t\treturn \"\" + tasks.join(\"\") + \"\" + links.join(\"\") + \"\";\n\t\t}\n\t};\n\n\n\tgantt.oldxml = {\n\t\tparse: function (text, loader) {\n\t\t\tloader = gantt.xml._getXML(text, loader, \"projects\");\n\t\t\tvar data = {collections: {links: []}};\n\n\t\t\tvar evs = data.data = [];\n\t\t\tvar xml = gantt.ajax.xpath(\"//task\", loader);\n\n\t\t\tfor (var i = 0; i < xml.length; i++) {\n\t\t\t\tevs[i] = gantt.xml._xmlNodeToJSON(xml[i]);\n\t\t\t\tvar parent = xml[i].parentNode;\n\n\t\t\t\tif (parent.tagName == \"project\")\n\t\t\t\t\tevs[i].parent = \"project-\" + parent.getAttribute(\"id\");\n\t\t\t\telse\n\t\t\t\t\tevs[i].parent = parent.parentNode.getAttribute(\"id\");\n\t\t\t}\n\n\t\t\txml = gantt.ajax.xpath(\"//project\", loader);\n\t\t\tfor (var i = 0; i < xml.length; i++) {\n\t\t\t\tvar ev = gantt.xml._xmlNodeToJSON(xml[i], true);\n\t\t\t\tev.id = \"project-\" + ev.id;\n\t\t\t\tevs.push(ev);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < evs.length; i++) {\n\t\t\t\tvar ev = evs[i];\n\t\t\t\tev.start_date = ev.startdate || ev.est;\n\t\t\t\tev.end_date = ev.enddate;\n\t\t\t\tev.text = ev.name;\n\t\t\t\tev.duration = ev.duration / 8;\n\t\t\t\tev.open = 1;\n\t\t\t\tif (!ev.duration && !ev.end_date) ev.duration = 1;\n\t\t\t\tif (ev.predecessortasks)\n\t\t\t\t\tdata.collections.links.push({\n\t\t\t\t\t\ttarget: ev.id,\n\t\t\t\t\t\tsource: ev.predecessortasks,\n\t\t\t\t\t\ttype: gantt.config.links.finish_to_start\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t\tserialize: function () {\n\t\t\tgantt.message(\"Serialization to 'old XML' is not implemented\");\n\t\t}\n\t};\n\n\tgantt.serverList = function (name, array) {\n\t\tif (array) {\n\t\t\tthis.serverList[name] = array.slice(0);\n\t\t} else if (!this.serverList[name]) {\n\t\t\tthis.serverList[name] = [];\n\t\t}\n\t\treturn this.serverList[name];\n\t};\n\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/load.js\n// module id = 77\n// module chunks = 0","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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/worktime/work_time.js\n// module id = 78\n// module chunks = 0","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\tgetTaskCalendar: function (task) {\n\t\tvar config = this.$gantt.$services.config();\n\t\tif (!task) {\n\t\t\treturn this.getCalendar();\n\t\t} else if (task[config.calendar_property]) {\n\t\t\treturn this.getCalendar(task[config.calendar_property]);\n\t\t} else if (config.resource_calendars) {\n\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\n\t\treturn 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.$services.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.$services.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.$services.config();\n\t\tthis.restoreConfigCalendars(this.defaults);\n\t\tthis.restoreConfigCalendars(config.worktimes);\n\t}\n};\n\nmodule.exports = CalendarManager;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/worktime/calendar_manager.js\n// module id = 79\n// module chunks = 0","var Cache = require(\"./calendar_workunit_cache\"),\n\tutils = require(\"../../../utils/utils\");\n\nfunction CalendarWorkTimeStrategy(gantt, argumentsHelper){\n\tthis.argumentsHelper = argumentsHelper;\n\tthis.$gantt = gantt;\n\tthis._workingUnitsCache = new Cache();\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\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_getWorkHoursForRange: function (from, to) {\n\t\tvar hours = 0;\n\t\tvar start = new Date(from),\n\t\t\tend = new Date(to);\n\n\t\twhile (start.valueOf() < end.valueOf()) {\n\t\t\tif (this._isWorkTime(start, \"day\"))\n\t\t\t\thours += this._getHoursPerDay(start);\n\t\t\tstart = this._nextDate(start, \"day\", 1);\n\t\t}\n\t\treturn hours;\n\t},\n\t_getWorkUnitsBetweenHours: 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 hourRange = this._getWorkHoursForRange(firstDayEnd, lastDayStart);\n\t\t\thourRange = ((hourRange / step) + startPart + endPart);\n\n\t\t\treturn hourRange;\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\t\tvar is_work_unit = this._workingUnitsCache.get(unit, date);\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.put(unit, date, 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\n\t\tvar res = 0;\n\t\tif (config.unit == \"hour\") {\n\t\t\tres = this._getWorkUnitsBetweenHours(config.start_date, config.end_date, config.unit, config.step);\n\t\t} else {\n\t\t\tres = this._getWorkUnitsBetweenGeneric(config.start_date, config.end_date, config.unit, config.step);\n\t\t}\n\n\t\t// getDuration.. 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\tvar mult = (config.duration >= 0) ? 1 : -1;\n\t\treturn this._calculateEndDate(from, duration, unit, step * mult);\n\t},\n\t_calculateEndDate: function (from, duration, unit, step) {\n\t\tif (!unit)\n\t\t\treturn false;\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\twhile (added < duration) {\n\t\t\tvar next = this._nextDate(start, unit, step);\n\t\t\t//if(this.isWorkTime(step > 0 ? start : next, unit))\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\tstart = next;\n\t\t}\n\t\treturn start;\n\t},\n\n\tgetClosestWorkTime: function () {\n\t\tvar config = this.argumentsHelper.getClosestWorkTimeArguments.apply( this.argumentsHelper, arguments);\n\t\treturn this._getClosestWorkTime(config);\n\t},\n\n\t_getClosestWorkTime: function (settings) {\n\t\tif (this._isWorkTime(settings.date, settings.unit))\n\t\t\treturn settings.date;\n\n\t\tvar unit = settings.unit;\n\n\t\tvar curr = this.$gantt.date[unit + '_start'](settings.date);\n\n\t\tvar future_target = new Date(curr),\n\t\t\tprev_target = new Date(curr),\n\t\t\ttick = true,\n\t\t\tmaximum_loop = 3000,//be extra sure we won't fall into infinite loop, 3k seems big enough\n\t\t\tcount = 0,\n\t\t\tboth_directins = (settings.dir == 'any' || !settings.dir);\n\n\t\tvar inc = 1;\n\t\tif (settings.dir == 'past')\n\t\t\tinc = -1;\n\n\t\t//will seek closest working hour in future or in past, one step in one direction per iteration\n\t\twhile (!this._isWorkTime(curr, unit)) {\n\n\t\t\tif (both_directins) {\n\t\t\t\tcurr = tick ? future_target : prev_target;\n\t\t\t\tinc = inc * (-1);\n\t\t\t}\n\t\t\tvar tzOffset = curr.getTimezoneOffset();\n\t\t\tcurr = this.$gantt.date.add(curr, inc, unit);\n\n\t\t\tcurr = this.$gantt._correct_dst_change(curr, tzOffset, inc, unit);\n\t\t\tif (this.$gantt.date[unit + '_start'])\n\t\t\t\tcurr = this.$gantt.date[unit + '_start'](curr);\n\n\t\t\tif (both_directins) {\n\t\t\t\tif (tick) {\n\t\t\t\t\tfuture_target = curr;\n\t\t\t\t} else {\n\t\t\t\t\tprev_target = curr;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttick = !tick;\n\t\t\tcount++;\n\t\t\tif (count > maximum_loop) {\n\t\t\t\tthis.$gantt.assert(false, \"Invalid working time check\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tif (curr == prev_target || settings.dir == 'past') {\n\t\t\tcurr = this.$gantt.date.add(curr, 1, unit);\n\t\t}\n\n\t\treturn curr;\n\t}\n};\n\nmodule.exports = CalendarWorkTimeStrategy;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/worktime/strategy/calendar_strategy.js\n// module id = 80\n// module chunks = 0","function WorkUnitsCache() {\n\tthis._cache = {};\n}\n\nWorkUnitsCache.prototype = {\n\t// cache previously calculated worktime\n\tget: function (unit, date) {\n\t\tvar result = -1;// default value (if not existed in the cache)\n\n\t\tvar cache = this._cache;\n\t\tif (cache && cache[unit]) {\n\t\t\tvar units = cache[unit];\n\t\t\tvar time = date.getTime();\n\t\t\tif (units[time] !== undefined)\n\t\t\t\tresult = units[time];\n\t\t}\n\t\treturn result;\n\t},\n\n\tput: function (unit, date, value) {\n\t\tif (!unit || !date) return false;\n\n\t\tvar cache = this._cache;\n\n\t\tvar time = date.getTime();\n\n\t\tvalue = !!value;\n\n\t\tif (!cache) return false;\n\t\tif (!cache[unit]) cache[unit] = {};\n\t\tcache[unit][time] = value;\n\t\treturn true;\n\t},\n\n\tclear: function () {\n\t\tthis._cache = {};\n\t}\n};\n\nmodule.exports = WorkUnitsCache;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/worktime/strategy/calendar_workunit_cache.js\n// module id = 81\n// module chunks = 0","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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/worktime/time_calculator.js\n// module id = 82\n// module chunks = 0","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\t\t\tstep = config.step;\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;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/worktime/strategy/no_work_time.js\n// module id = 83\n// module chunks = 0","// 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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/facades/worktime_calendars.js\n// module id = 84\n// module chunks = 0","var dateHelper = require(\"../utils/date_helpers\"),\n\thelpers = require(\"../utils/helpers\");\n\nmodule.exports = function(gantt) {\n\n\tgantt.isUnscheduledTask = function (task) {\n\t\treturn (!!task.unscheduled || !task.start_date);\n\t};\n\n\tgantt._isAllowedUnscheduledTask = function (task) {\n\t\treturn !!(task.unscheduled && gantt.config.show_unscheduled);\n\t};\n\n\tgantt.isTaskVisible = function (id) {\n\t\tif (!this.isTaskExists(id))\n\t\t\treturn false;\n\n\t\tvar task = this.getTask(id),\n\t\t\ttype = this.getTaskType(task.type);\n\n\t\tif (!((+task.start_date <= +this._max_date && +task.end_date >= +this._min_date) || gantt._isAllowedUnscheduledTask(task))){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn !!(gantt.getGlobalTaskIndex(id) >= 0);\n\t};\n\n\tgantt._defaultTaskDate = function (item, parent_id) {\n\t\tvar parent = (parent_id && parent_id != this.config.root_id) ? this.getTask(parent_id) : false,\n\t\t\tstartDate = '';\n\t\tif (parent) {\n\t\t\tstartDate = parent.start_date;\n\t\t} else {\n\t\t\tvar first = this.getTaskByIndex(0);\n\t\t\tstartDate = first ? (first.start_date ? first.start_date : (first.end_date ? this.calculateEndDate({\n\t\t\t\tstart_date: first.end_date,\n\t\t\t\tduration: -this.config.duration_step\n\t\t\t}) : '')) : this.config.start_date || this.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, this.getParent(task));\n\t\ttask.duration = task.duration || this.config.duration_step;\n\t\ttask.end_date = task.end_date || this.calculateEndDate(task);\n\t};\n\n\tgantt.createTask = function (item, parent, index) {\n\t\titem = item || {};\n\t\tif (!gantt.defined(item.id))\n\t\t\titem.id = gantt.uid();\n\n\t\tif (!item.start_date) {\n\t\t\titem.start_date = gantt._defaultTaskDate(item, parent);\n\t\t}\n\t\tif (item.text === undefined) {\n\t\t\titem.text = gantt.locale.labels.new_task;\n\t\t}\n\t\tif (item.duration === undefined) {\n\t\t\titem.duration = 1;\n\t\t}\n\n\t\tif (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\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\t\ttask.duration = task.duration || 0;\n\t};\n\n\tgantt.isSummaryTask = function (task) {\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\tif (dateHelper.isDate(config)) {\n\t\t\tconfig = {\n\t\t\t\tdate: config,\n\t\t\t\tunit: gantt.getScale().unit,\n\t\t\t\tstep: gantt.getScale().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\tvar scale = gantt.getScale();\n\t\tvar upper, lower, colIndex;\n\t\tif (unit == scale.unit && steps == scale.step &&\n\t\t\t+date >= +gantt._min_date && +date <= +gantt._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 (!gantt.getScale().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(gantt.getScale().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(this._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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/data.js\n// module id = 85\n// module chunks = 0","module.exports = function(gantt) {\n\tvar domHelpers = require(\"../utils/dom_helpers\"),\n\t\thelpers = require(\"../utils/helpers\");\n\n\tgantt._lightbox_methods = {};\n\tgantt._lightbox_template = \"
 
\";\n\n\n\t//TODO: gantt._lightbox_id is changed from data.js and accessed from autoscheduling, check if it can be removed from gantt object\n\tvar state = gantt.$services.getService(\"state\");\n\tstate.registerProvider(\"lightbox\", function(){\n\t\treturn {\n\t\t\tlightbox: gantt._lightbox_id\n\t\t};\n\t});\n\n\tgantt.showLightbox = function (id) {\n\t\tif (!id || gantt.isReadonly(this.getTask(id))) return;\n\t\tif (!this.callEvent(\"onBeforeLightbox\", [id])) return;\n\n\t\tvar task = this.getTask(id);\n\n\t\tvar box = this.getLightbox(this.getTaskType(task.type));\n\t\tthis._center_lightbox(box);\n\t\tthis.showCover();\n\t\tthis._fill_lightbox(id, box);\n\n\t\tthis._waiAria.lightboxVisibleAttr(box);\n\n\t\tthis.callEvent(\"onLightbox\", [id]);\n\t};\n\n\tfunction _is_chart_visible(gantt) {\n\t\tvar timeline = gantt.$ui.getView(\"timeline\");\n\t\tif(timeline && timeline.isVisible()){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tgantt._get_timepicker_step = function () {\n\t\tif (this.config.round_dnd_dates) {\n\t\t\tvar scale = gantt.getScale(),\n\t\t\t\tstep = (helpers.getSecondsInUnit(scale.unit) * scale.step) / 60;//timepicker step is measured in minutes\n\t\t\tif (step >= 60 * 24 || !_is_chart_visible(this)) {\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\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\tvar d = document.createElement(\"DIV\");\n\t\t\td.className = \"gantt_cal_light\";\n\n\t\t\tvar full_width = this._is_lightbox_timepicker();\n\t\t\tif (gantt.config.wide_form || full_width)\n\t\t\t\td.className += \" gantt_cal_light_wide\";\n\n\t\t\tif (full_width) {\n\t\t\t\tgantt.config.wide_form = true;\n\t\t\t\td.className += \" gantt_cal_light_full\";\n\t\t\t}\n\n\n\t\t\td.style.visibility = \"hidden\";\n\n\t\t\tvar html = this._lightbox_template;\n\n\t\t\tvar ariaAttr;\n\t\t\tvar buttons = this.config.buttons_left;\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\t// needed to migrate from 'dhx_something' to 'gantt_something' naming in a lightbox\n\t\t\t\tvar button = this.config._migrate_buttons[buttons[i]] ? this.config._migrate_buttons[buttons[i]] : buttons[i];\n\n\t\t\t\tariaAttr = this._waiAria.lightboxButtonAttrString(button);\n\t\t\t\thtml += \"
\" + this.locale.labels[button] + \"
\";\n\n\t\t\t}\n\t\t\tbuttons = this.config.buttons_right;\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\tvar button = this.config._migrate_buttons[buttons[i]] ? this.config._migrate_buttons[buttons[i]] : buttons[i];\n\t\t\t\tariaAttr = this._waiAria.lightboxButtonAttrString(button);\n\n\t\t\t\thtml += \"
\" + this.locale.labels[button] + \"
\";\n\n\t\t\t}\n\t\t\thtml += \"\";\n\t\t\td.innerHTML = html;\n\n\t\t\tgantt._waiAria.lightboxAttr(d);\n\n\t\t\tif (gantt.config.drag_lightbox) {\n\t\t\t\td.firstChild.onmousedown = gantt._ready_to_dnd;\n\t\t\t\td.firstChild.onselectstart = function () {\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t\td.firstChild.style.cursor = \"pointer\";\n\t\t\t\tgantt._init_dnd_events();\n\n\t\t\t}\n\n\t\t\tdocument.body.insertBefore(d, document.body.firstChild);\n\t\t\tthis._lightbox = d;\n\n\t\t\tvar sns = this._get_typed_lightbox_config(type);\n\t\t\thtml = this._render_sections(sns);\n\n\t\t\tvar ds = d.getElementsByTagName(\"div\");\n\t\t\tfor (var i = 0; i < ds.length; i++) {\n\t\t\t\tvar t_ds = ds[i];\n\t\t\t\tif (t_ds.className == \"gantt_cal_larea\") {\n\t\t\t\t\tt_ds.innerHTML = html;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// bind labels to lightbox inputs\n\t\t\tfor (var i = 0; i < sns.length; i++) {\n\t\t\t\tvar section = sns[i];\n\t\t\t\tif (!section.id || !document.getElementById(section.id))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar labelBlock = document.getElementById(section.id);\n\t\t\t\tvar label = labelBlock.querySelector(\"label\");\n\t\t\t\tvar inputBlock = labelBlock.nextSibling;\n\t\t\t\tif (!inputBlock)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar input = inputBlock.querySelector(\"input, select, textarea\");\n\t\t\t\tif (input) {\n\t\t\t\t\tsection.inputId = input.id || \"input_\" + gantt.uid();\n\t\t\t\t\tif (!input.id)\n\t\t\t\t\t\tinput.id = section.inputId;\n\n\t\t\t\t\tlabel.setAttribute(\"for\", section.inputId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//sizes\n\t\t\tthis.resizeLightbox();\n\n\t\t\tthis._init_lightbox_events(this);\n\t\t\td.style.display = \"none\";\n\t\t\td.style.visibility = \"visible\";\n\t\t}\n\t\treturn this._lightbox;\n\t};\n\n\tgantt._render_sections = function (sns) {\n\t\tvar html = \"\";\n\t\tfor (var i = 0; i < sns.length; i++) {\n\t\t\tvar block = this.form_blocks[sns[i].type];\n\t\t\tif (!block) continue; //ignore incorrect blocks\n\t\t\tsns[i].id = \"area_\" + this.uid();\n\n\t\t\tvar display = sns[i].hidden ? \" style='display:none'\" : \"\";\n\t\t\tvar button = \"\";\n\t\t\tif (sns[i].button) {\n\t\t\t\tbutton = \"
\" + this.locale.labels[\"button_\" + sns[i].button] + \"
\";\n\t\t\t}\n\t\t\tif (this.config.wide_form) {\n\t\t\t\thtml += \"
\";\n\t\t\t}\n\t\t\thtml += \"
\" + block.render.call(this, sns[i]);\n\t\t\thtml += \"
\";\n\t\t}\n\t\treturn html;\n\t};\n\n\n\tgantt.resizeLightbox = function () {\n\t\tvar d = this._lightbox;\n\t\tif (!d) return;\n\n\t\tvar con = d.childNodes[1];\n\t\tcon.style.height = \"0px\";\n\t\tcon.style.height = con.scrollHeight + \"px\";\n\t\td.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\n\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 (e) {\n\t\t\tgantt._save_lightbox();\n\t\t};\n\n\n\t\tgantt.lightbox_events[\"gantt_delete_btn\"] = function (e) {\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 (e) {\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(\"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(\"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(\"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 32: {//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);\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}\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};\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((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 = (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}\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 time_format = sns.time_format;\n\t\t\tif (!time_format) {\n\t\t\t\t// default order\n\t\t\t\tvar time_format = [\"%d\", \"%m\", \"%Y\"];\n\t\t\t\tif (helpers.getSecondsInUnit(gantt.getScale().unit) < helpers.getSecondsInUnit(\"day\")) {\n\t\t\t\t\ttime_format.push(\"%H:%i\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t// map: default order => real one\n\t\t\tsns._time_format_order = {size: 0};\n\n\n\t\t\tvar cfg = this.config;\n\t\t\tvar dt = this.date.date_part(new Date(gantt._min_date.valueOf()));\n\t\t\tvar last = 24 * 60, first = 0;\n\t\t\tif (gantt.config.limit_time_select) {\n\t\t\t\tlast = 60 * cfg.last_hour + 1;\n\t\t\t\tfirst = 60 * cfg.first_hour;\n\t\t\t\tdt.setHours(cfg.first_hour);\n\t\t\t}\n\t\t\tvar html = \"\";\n\n\t\t\tfor (var p = 0; p < time_format.length; p++) {\n\t\t\t\tvar time_option = time_format[p];\n\n\t\t\t\t// adding spaces between selects\n\t\t\t\tif (p > 0) {\n\t\t\t\t\thtml += \" \";\n\t\t\t\t}\n\n\t\t\t\tvar options = '';\n\t\t\t\tswitch (time_option) {\n\t\t\t\t\tcase \"%Y\":\n\t\t\t\t\t\tsns._time_format_order[2] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//year\n\n\t\t\t\t\t\tvar range, offset, start_year, end_year;\n\n\t\t\t\t\t\tif (sns.year_range) {\n\t\t\t\t\t\t\tif (!isNaN(sns.year_range)) {\n\t\t\t\t\t\t\t\trange = sns.year_range;\n\t\t\t\t\t\t\t} else if (sns.year_range.push) {\n\t\t\t\t\t\t\t\t// if\n\t\t\t\t\t\t\t\tstart_year = sns.year_range[0];\n\t\t\t\t\t\t\t\tend_year = sns.year_range[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trange = range || 10;\n\t\t\t\t\t\toffset = offset || Math.floor(range / 2);\n\t\t\t\t\t\tstart_year = start_year || dt.getFullYear() - offset;\n\t\t\t\t\t\tend_year = end_year || start_year + range;\n\n\n\t\t\t\t\t\tfor (var i = start_year; i < end_year; i++)\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%m\":\n\t\t\t\t\t\tsns._time_format_order[1] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//month\n\t\t\t\t\t\tfor (var i = 0; i < 12; i++)\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%d\":\n\t\t\t\t\t\tsns._time_format_order[0] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//days\n\t\t\t\t\t\tfor (var i = 1; i < 32; i++)\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"%H:%i\":\n\t\t\t\t\t\t// var last = 24*60, first = 0;\n\t\t\t\t\t\tsns._time_format_order[3] = p;\n\t\t\t\t\t\tsns._time_format_order.size++;\n\t\t\t\t\t\t//hours\n\t\t\t\t\t\tvar i = first;\n\t\t\t\t\t\tvar tdate = dt.getDate();\n\t\t\t\t\t\tsns._time_values = [];\n\n\t\t\t\t\t\twhile (i < last) {\n\t\t\t\t\t\t\tvar time = this.templates.time_picker(dt);\n\t\t\t\t\t\t\toptions += \"\";\n\t\t\t\t\t\t\tsns._time_values.push(i);\n\t\t\t\t\t\t\tdt.setTime(dt.valueOf() + this._get_timepicker_step() * 60 * 1000);\n\t\t\t\t\t\t\tvar diff = (dt.getDate() != tdate) ? 1 : 0; // moved or not to the next day\n\t\t\t\t\t\t\ti = diff * 24 * 60 + dt.getHours() * 60 + dt.getMinutes();\n\t\t\t\t\t\t}\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\n\t\t\t\tif (options) {\n\n\t\t\t\t\tvar ariaAttrs = gantt._waiAria.lightboxSelectAttrString(time_option);\n\n\t\t\t\t\tvar readonly = sns.readonly ? \"disabled='disabled'\" : \"\";\n\t\t\t\t\tvar display = hidden ? \" style='display:none' \" : \"\";\n\t\t\t\t\thtml += \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn html;\n\t\t},\n\t\t_fill_lightbox_select: function (s, i, d, map, cfg) {\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: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar height = (sns.height || \"30\") + \"px\";\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tnode.innerHTML = value || \"\";\n\t\t\t},\n\t\t\tget_value: function (node, ev, config) {\n\t\t\t\treturn node.innerHTML || \"\";\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t}\n\t\t},\n\t\ttextarea: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar height = (sns.height || \"130\") + \"px\";\n\t\t\t\treturn \"
\";\n\t\t\t},\n\t\t\tset_value: function (node, value, ev) {\n\t\t\t\tthis.form_blocks.textarea._get_input(node).value = value || \"\";\n\t\t\t},\n\t\t\tget_value: function (node, ev) {\n\t\t\t\treturn this.form_blocks.textarea._get_input(node).value;\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tvar a = this.form_blocks.textarea._get_input(node);\n\t\t\t\tgantt._focus(a, true);\n\t\t\t},\n\t\t\t_get_input: function (node) {\n\t\t\t\treturn node.querySelector(\"textarea\");\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar height = (sns.height || \"23\") + \"px\";\n\t\t\t\tvar html = \"
\";\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, sns) {\n\t\t\t\tvar select = node.firstChild;\n\t\t\t\tif (!select._dhx_onchange && sns.onchange) {\n\t\t\t\t\tselect.onchange = sns.onchange;\n\t\t\t\t\tselect._dhx_onchange = true;\n\t\t\t\t}\n\t\t\t\tif (typeof value == \"undefined\")\n\t\t\t\t\tvalue = (select.options[0] || {}).value;\n\t\t\t\tselect.value = value || \"\";\n\t\t\t},\n\t\t\tget_value: function (node, ev) {\n\t\t\t\treturn node.firstChild.value;\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tvar a = node.firstChild;\n\t\t\t\tgantt._focus(a, true);\n\t\t\t}\n\t\t},\n\t\ttime: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar time = this.form_blocks.getTimePicker.call(this, sns);\n\t\t\t\tvar parts = [\"
\"];\n\t\t\t\tparts.push(time);\n\n\t\t\t\tif (sns.single_date) {\n\t\t\t\t\ttime = this.form_blocks.getTimePicker.call(this, sns, true);\n\t\t\t\t\tparts.push(\"\");\n\t\t\t\t} else {\n\t\t\t\t\tparts.push(\"  –  \");\n\t\t\t\t}\n\n\t\t\t\tparts.push(time);\n\t\t\t\tparts.push(\"
\");\n\t\t\t\treturn parts.join('');\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tvar cfg = config;\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\n\t\t\t\tvar map = config._time_format_order;\n\t\t\t\tvar map_size = config._time_format_size;\n\n\t\t\t\tif (cfg.auto_end_date) {\n\t\t\t\t\tvar _update_lightbox_select = function () {\n\t\t\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\t\t\tend_date = gantt.calculateEndDate({start_date: start_date, duration: 1, task: ev});\n\t\t\t\t\t\tthis.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n\t\t\t\t\t};\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\ts[i].onchange = _update_lightbox_select;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar mapping = gantt._resolve_default_mapping(config);\n\n\t\t\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\n\n\t\t\t\tvar start_date = ev[mapping.start_date] || new Date();\n\t\t\t\tvar end_date = ev[mapping.end_date] || gantt.calculateEndDate({\n\t\t\t\t\tstart_date: start_date,\n\t\t\t\t\tduration: 1,\n\t\t\t\t\ttask: ev\n\t\t\t\t});\n\n\t\t\t\tthis.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\n\t\t\t\tthis.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n\t\t\t},\n\n\t\t\tget_value: function (node, ev, config) {\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\t\t\t\tvar map = config._time_format_order;\n\n\t\t\t\tvar hours = 0, minutes = 0;\n\t\t\t\tif (gantt.defined(map[3])) {\n\t\t\t\t\tvar time = parseInt(s[map[3]].value, 10);\n\t\t\t\t\thours = Math.floor(time / 60);\n\t\t\t\t\tminutes = time % 60;\n\t\t\t\t}\n\t\t\t\tvar start_date = new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\n\n\t\t\t\thours = minutes = 0;\n\t\t\t\tif (gantt.defined(map[3])) {\n\t\t\t\t\tvar time = parseInt(s[map.size + map[3]].value, 10);\n\t\t\t\t\thours = Math.floor(time / 60);\n\t\t\t\t\tminutes = time % 60;\n\t\t\t\t}\n\t\t\t\tvar end_date = new Date(s[map[2] + map.size].value, s[map[1] + map.size].value, s[map[0] + map.size].value, hours, minutes);\n\n\t\t\t\tif (end_date <= start_date)\n\t\t\t\t\tend_date = gantt.date.add(start_date, gantt._get_timepicker_step(), \"minute\");\n\n\t\t\t\tvar mapped_fields = gantt._resolve_default_mapping(config);\n\n\t\t\t\tvar res = {\n\t\t\t\t\tstart_date: new Date(start_date),\n\t\t\t\t\tend_date: new Date(end_date)\n\t\t\t\t};\n\t\t\t\tif (typeof mapped_fields == \"string\") {\n\t\t\t\t\treturn res.start_date;\n\t\t\t\t} else {\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\n\t\t\t}\n\t\t},\n\t\tduration: {\n\t\t\trender: function (sns) {\n\t\t\t\tvar time = this.form_blocks.getTimePicker.call(this, sns);\n\t\t\t\ttime = \"
\" + time + \"
\";\n\t\t\t\tvar label = this.locale.labels[this.config.duration_unit + \"s\"];\n\n\t\t\t\tvar singleDate = sns.single_date ? ' style=\"display:none\"' : \"\";\n\t\t\t\tvar readonly = sns.readonly ? \" disabled='disabled'\" : \"\";\n\n\t\t\t\tvar ariaAttr = this._waiAria.lightboxDurationInputAttrString(sns);\n\n\t\t\t\tvar duration = \"
\" +\n\t\t\t\t\t\"\" +\n\t\t\t\t\t\"\" +\n\t\t\t\t\t\" \" + label + \" \" +\n\t\t\t\t\t\"
\";\n\t\t\t\tvar html = \"
\" + time + \" \" + duration + \"
\";\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tvar cfg = config;\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\t\t\t\tvar inps = node.getElementsByTagName(\"input\");\n\n\t\t\t\tvar duration = inps[1];\n\t\t\t\tvar btns = [inps[0], inps[2]];\n\t\t\t\tvar endspan = node.getElementsByTagName(\"span\")[0];\n\n\t\t\t\tvar map = config._time_format_order;\n\n\t\t\t\tfunction _calc_date() {\n\t\t\t\t\tvar start_date = gantt.form_blocks.duration._get_start_date.call(gantt, node, config);\n\t\t\t\t\tvar duration = gantt.form_blocks.duration._get_duration.call(gantt, node, config);\n\t\t\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: ev});\n\n\t\t\t\t\tendspan.innerHTML = gantt.templates.task_date(end_date);\n\t\t\t\t}\n\n\t\t\t\tfunction _change_duration(step) {\n\t\t\t\t\tvar value = duration.value;\n\t\t\t\t\tvalue = parseInt(value, 10);\n\t\t\t\t\tif (window.isNaN(value))\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\tvalue += step;\n\t\t\t\t\tif (value < 1) value = 1;\n\t\t\t\t\tduration.value = value;\n\t\t\t\t\t_calc_date();\n\t\t\t\t}\n\n\t\t\t\tbtns[0].onclick = gantt.bind(function () {\n\t\t\t\t\t_change_duration(-1 * this.config.duration_step);\n\t\t\t\t}, this);\n\t\t\t\tbtns[1].onclick = gantt.bind(function () {\n\t\t\t\t\t_change_duration(1 * this.config.duration_step);\n\t\t\t\t}, this);\n\t\t\t\ts[0].onchange = _calc_date;\n\t\t\t\ts[1].onchange = _calc_date;\n\t\t\t\ts[2].onchange = _calc_date;\n\t\t\t\tif (s[3]) s[3].onchange = _calc_date;\n\t\t\t\tduration.onkeydown = gantt.bind(function (e) {\n\t\t\t\t\te = e || window.event;\n\t\t\t\t\t// up\n\t\t\t\t\tvar code = (e.charCode || e.keyCode || e.which);\n\n\t\t\t\t\tif (code == 40) {\n\t\t\t\t\t\t_change_duration(-1 * this.config.duration_step);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// down\n\t\t\t\t\tif (code == 38) {\n\t\t\t\t\t\t_change_duration(1 * this.config.duration_step);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\twindow.setTimeout(function (e) {\n\t\t\t\t\t\t_calc_date();\n\t\t\t\t\t}, 1);\n\t\t\t\t}, this);\n\n\t\t\t\tduration.onchange = gantt.bind(function (e) {\n\t\t\t\t\t_calc_date();\n\t\t\t\t}, this);\n\n\t\t\t\tvar mapping = gantt._resolve_default_mapping(config);\n\t\t\t\tif (typeof(mapping) === \"string\") mapping = {start_date: mapping};\n\n\t\t\t\tvar start_date = ev[mapping.start_date] || new Date();\n\t\t\t\tvar end_date = ev[mapping.end_date] || gantt.calculateEndDate({\n\t\t\t\t\tstart_date: start_date,\n\t\t\t\t\tduration: 1,\n\t\t\t\t\ttask: ev\n\t\t\t\t});\n\t\t\t\tvar duration_val = Math.round(ev[mapping.duration]) || gantt.calculateDuration({\n\t\t\t\t\tstart_date: start_date,\n\t\t\t\t\tend_date: end_date,\n\t\t\t\t\ttask: ev\n\t\t\t\t});\n\n\t\t\t\tgantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\n\t\t\t\tduration.value = duration_val;\n\t\t\t\t_calc_date();\n\t\t\t},\n\n\t\t\t_get_start_date: function (node, config) {\n\t\t\t\tvar s = node.getElementsByTagName(\"select\");\n\t\t\t\tvar map = config._time_format_order;\n\t\t\t\tvar hours = 0;\n\t\t\t\tvar minutes = 0;\n\t\t\t\tif (gantt.defined(map[3])) {\n\t\t\t\t\tvar input = s[map[3]];\n\t\t\t\t\tvar time = parseInt(input.value, 10);\n\t\t\t\t\tif (isNaN(time) && input.hasAttribute(\"data-value\")) {\n\t\t\t\t\t\ttime = parseInt(input.getAttribute(\"data-value\"), 10);\n\t\t\t\t\t}\n\n\t\t\t\t\thours = Math.floor(time / 60);\n\t\t\t\t\tminutes = time % 60;\n\t\t\t\t}\n\t\t\t\treturn new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\n\t\t\t},\n\t\t\t_get_duration: function (node, config) {\n\t\t\t\tvar duration = node.getElementsByTagName(\"input\")[1];\n\t\t\t\tduration = parseInt(duration.value, 10);\n\t\t\t\tif (!duration || window.isNaN(duration)) duration = 1;\n\t\t\t\tif (duration < 0) duration *= -1;\n\t\t\t\treturn duration;\n\t\t\t},\n\n\t\t\tget_value: function (node, ev, config) {\n\t\t\t\tvar start_date = gantt.form_blocks.duration._get_start_date(node, config);\n\t\t\t\tvar duration = gantt.form_blocks.duration._get_duration(node, config);\n\n\t\t\t\tvar end_date = gantt.calculateEndDate({start_date: start_date, duration: duration, task: ev});\n\t\t\t\tvar mapped_fields = gantt._resolve_default_mapping(config);\n\t\t\t\tvar res = {\n\t\t\t\t\tstart_date: new Date(start_date),\n\t\t\t\t\tend_date: new Date(end_date),\n\t\t\t\t\tduration: duration\n\t\t\t\t};\n\t\t\t\tif (typeof mapped_fields == \"string\") {\n\t\t\t\t\treturn res.start_date;\n\t\t\t\t} else {\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfocus: function (node) {\n\t\t\t\tgantt._focus(node.getElementsByTagName(\"select\")[0]);\n\t\t\t}\n\t\t},\n\t\tparent: {\n\t\t\t_filter: function (options, config, item_id) {\n\t\t\t\tvar filter = config.filter || function () {\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\n\t\t\t\toptions = options.slice(0);\n\n\t\t\t\tfor (var i = 0; i < options.length; i++) {\n\t\t\t\t\tvar task = options[i];\n\t\t\t\t\tif (task.id == item_id || gantt.isChildOf(task.id, item_id) || filter(task.id, task) === false) {\n\t\t\t\t\t\toptions.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\treturn options;\n\t\t\t},\n\n\t\t\t_display: function (config, item_id) {\n\t\t\t\tvar tasks = [],\n\t\t\t\t\toptions = [];\n\t\t\t\tif (item_id) {\n\t\t\t\t\ttasks = gantt.getTaskByTime();\n\t\t\t\t\tif (config.allow_root) {\n\t\t\t\t\t\ttasks.unshift({id: gantt.config.root_id, text: config.root_label || \"\"});\n\t\t\t\t\t}\n\t\t\t\t\ttasks = this._filter(tasks, config, item_id);\n\t\t\t\t\tif (config.sort) {\n\t\t\t\t\t\ttasks.sort(config.sort);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar text = config.template || gantt.templates.task_text;\n\t\t\t\tfor (var i = 0; i < tasks.length; i++) {\n\t\t\t\t\tvar label = text.apply(gantt, [tasks[i].start_date, tasks[i].end_date, tasks[i]]);\n\t\t\t\t\tif (label === undefined) {\n\t\t\t\t\t\tlabel = \"\";\n\t\t\t\t\t}\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tkey: tasks[i].id,\n\t\t\t\t\t\tlabel: label\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconfig.options = options;\n\t\t\t\tconfig.map_to = config.map_to || \"parent\";\n\t\t\t\treturn gantt.form_blocks.select.render.apply(this, arguments);\n\t\t\t},\n\t\t\trender: function (sns) {\n\t\t\t\treturn gantt.form_blocks.parent._display(sns, false);\n\t\t\t},\n\t\t\tset_value: function (node, value, ev, config) {\n\t\t\t\tvar tmpDom = document.createElement(\"div\");\n\t\t\t\ttmpDom.innerHTML = gantt.form_blocks.parent._display(config, ev.id);\n\t\t\t\tvar newOptions = tmpDom.removeChild(tmpDom.firstChild);\n\t\t\t\tnode.onselect = null;\n\t\t\t\tnode.parentNode.replaceChild(newOptions, node);\n\n\t\t\t\treturn gantt.form_blocks.select.set_value.apply(gantt, [newOptions, value, ev, config]);\n\t\t\t},\n\t\t\tget_value: function () {\n\t\t\t\treturn gantt.form_blocks.select.get_value.apply(gantt, arguments);\n\t\t\t},\n\t\t\tfocus: function () {\n\t\t\t\treturn gantt.form_blocks.select.focus.apply(gantt, arguments);\n\t\t\t}\n\t\t}\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} 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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/lightbox.js\n// module id = 86\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/lightbox_optional_time.js\n// module id = 87\n// module chunks = 0","module.exports = function(gantt) {\n\n\tgantt.getTaskType = function (type) {\n\t\treturn \"task\";\n\t};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/data_task_types.gpl.js\n// module id = 88\n// module chunks = 0","/*\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'_isCriticalTask',\n\t\t\t'isCriticalLink',\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/cached_functions.js\n// module id = 89\n// module chunks = 0","function _configure(col, data, force) {\n\tfor (var key in data)\n\t\tif (typeof col[key] == \"undefined\" || force)\n\t\t\tcol[key] = data[key];\n}\n\nfunction _get_skin(force, gantt) {\n\tvar skin = gantt.skin;\n\tif (!skin || force) {\n\t\tvar links = document.getElementsByTagName(\"link\");\n\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\tvar res = links[i].href.match(\"dhtmlxgantt_([a-z\\_]+).css\");\n\t\t\tif (res) {\n\t\t\t\tif (gantt.skins[res[1]] || !skin) {\n\t\t\t\t\tskin = res[1];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgantt.skin = skin || \"terrace\";\n\tvar skinset = gantt.skins[gantt.skin] || gantt.skins[\"terrace\"];\n\n\t//apply skin related settings\n\t_configure(gantt.config, skinset.config, force);\n\n\tvar config = gantt.getGridColumns();\n\tif (config[1] && !gantt.defined(config[1].width))\n\t\tconfig[1].width = skinset._second_column_width;\n\tif (config[2] && !gantt.defined(config[2].width))\n\t\tconfig[2].width = skinset._third_column_width;\n\t\n\tfor (var i=0; i column.width) ? column.min_width : column.width;\n\t\t\t\tcolumn.width = (column.max_width && column.max_width < column.width) ? column.max_width : column.width;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (skinset.config.task_height)\n\t\tgantt.config.task_height = skinset.config.task_height || \"full\"; \n\n\tif (skinset._lightbox_template)\n\t\tgantt._lightbox_template = skinset._lightbox_template;\n\n\tif (skinset._redefine_lightbox_buttons) {\n\t\tgantt.config.buttons_right = skinset._redefine_lightbox_buttons[\"buttons_right\"];\n\t\tgantt.config.buttons_left = skinset._redefine_lightbox_buttons[\"buttons_left\"];\n\t}\n\n\n\tgantt.resetLightbox();\n}\n\nmodule.exports = function(gantt) {\n\tif(!gantt.resetSkin){\n\t\tgantt.resetSkin = function () {\n\t\t\tthis.skin = \"\";\n\t\t\t_get_skin(true, this);\n\t\t};\n\t\tgantt.skins = {};\n\n\t\tgantt.attachEvent(\"onGanttLayoutReady\", function(){\n\t\t\t_get_skin(false, this);\n\t\t});\n\t}\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/skin.js\n// module id = 90\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/css/skins/skyblue.js\n// module id = 91\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/css/skins/meadow.js\n// module id = 92\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/css/skins/terrace.js\n// module id = 93\n// module chunks = 0","\n\nmodule.exports = function(gantt) {\n\tgantt.skins.broadway = {\n\t\tconfig: {\n\t\t\tgrid_width: 360,\n\t\t\trow_height: 35,\n\t\t\tscale_height: 35,\n\t\t\tlink_line_width: 1,\n\t\t\tlink_arrow_size: 7,\n\t\t\tlightbox_additional_height: 86\n\t\t},\n\t\t_second_column_width: 90,\n\t\t_third_column_width: 80,\n\n\t\t_lightbox_template: \"
 
\",\n\t\t_config_buttons_left: {},\n\t\t_config_buttons_right: {\n\t\t\t\"gantt_delete_btn\": \"icon_delete\",\n\t\t\t\"gantt_save_btn\": \"icon_save\"\n\t\t}\n\t};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/css/skins/broadway.js\n// module id = 94\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/css/skins/material.js\n// module id = 95\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/css/skins/contrast_black.js\n// module id = 96\n// module chunks = 0","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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/css/skins/contrast_white.js\n// module id = 97\n// module chunks = 0","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 dblclick_timer = 0;\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(\"task_id\") && task.getAttribute(\"task_id\") == 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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/touch.js\n// module id = 98\n// module chunks = 0","module.exports = function(gantt) {\n\tgantt.locale = {\n\t\tdate: {\n\t\t\tmonth_full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\tday_full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tday_short: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n\t\t},\n\t\tlabels: {\n\t\t\tnew_task: \"New task\",\n\t\t\ticon_save: \"Save\",\n\t\t\ticon_cancel: \"Cancel\",\n\t\t\ticon_details: \"Details\",\n\t\t\ticon_edit: \"Edit\",\n\t\t\ticon_delete: \"Delete\",\n\t\t\tconfirm_closing: \"\",//Your changes will be lost, are you sure?\n\t\t\tconfirm_deleting: \"Task will be deleted permanently, are you sure?\",\n\t\t\tsection_description: \"Description\",\n\t\t\tsection_time: \"Time period\",\n\t\t\tsection_type: \"Type\",\n\n\t\t\t/* grid columns */\n\t\t\tcolumn_wbs: \"WBS\",\n\t\t\tcolumn_text: \"Task name\",\n\t\t\tcolumn_start_date: \"Start time\",\n\t\t\tcolumn_duration: \"Duration\",\n\t\t\tcolumn_add: \"\",\n\n\t\t\t/* link confirmation */\n\t\t\tlink: \"Link\",\n\t\t\tconfirm_link_deleting: \"will be deleted\",\n\t\t\tlink_start: \" (start)\",\n\t\t\tlink_end: \" (end)\",\n\n\t\t\ttype_task: \"Task\",\n\t\t\ttype_project: \"Project\",\n\t\t\ttype_milestone: \"Milestone\",\n\n\t\t\tminutes: \"Minutes\",\n\t\t\thours: \"Hours\",\n\t\t\tdays: \"Days\",\n\t\t\tweeks: \"Week\",\n\t\t\tmonths: \"Months\",\n\t\t\tyears: \"Years\",\n\n\t\t\t/* message popup */\n\t\t\tmessage_ok: \"OK\",\n\t\t\tmessage_cancel: \"Cancel\"\n\n\t\t}\n\t};\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/locale/locale.js\n// module id = 99\n// module chunks = 0","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\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\n\t\t//can be called only once\n\t\tthis.init = function(node){\n\t\t\tif (this.$container && this.$container.parentNode){\n\t\t\t\tthis.$container.parentNode.removeChild(this.$container);\n\t\t\t\tthis.$container = null;\n\t\t\t}\n\n\t\t\tif(this.$layout){\n\t\t\t\tthis.$layout.clear();\n\t\t\t}\n\t\t\tthis._reinit(node);\n\t\t};\n\n\t\tthis._reinit(node);\n\t};\n\n\tgantt._reinit = function(node){\n\t\tthis.callEvent(\"onBeforeGanttReady\", []);\n\t\t//this._init_tasks_range();\n\t\tthis.resetLightbox();\n\t\tthis._update_flags();\n\n\n\t\tvar config = this.$services.getService(\"templateLoader\");\n\t\tconfig.initTemplates(this);\n\n\t\tthis._clearTaskLayers();\n\t\tthis._clearLinkLayers();\n\n\t\t//this.clear\n\t\tif(this.$layout){\n\t\t\tthis.$layout.destructor();\n\t\t\tthis.$ui.reset();\n\t\t}\n\n\t\tthis.$root = domHelpers.toNode(node);\n\t\tif(this.$root){\n\t\t\tthis.$root.innerHTML = \"\";\n\t\t}\n\t\tthis.$root.gantt = this;\n\t\tcalculateScaleRange(this);\n\t\tthis.config.layout.id = \"main\";\n\t\tthis.$layout = this.$ui.createView(\"layout\", node, this.config.layout);\n\n\t\tthis.$layout.attachEvent(\"onBeforeResize\", function(){\n\t\t\tvar storeNames = gantt.$services.getService(\"datastores\");\n\t\t\tfor(var i = 0; i < storeNames.length; i++){\n\t\t\t\tgantt.getDatastore(storeNames[i]).filter();\n\t\t\t}\n\t\t});\n\n\t\tthis.$layout.attachEvent(\"onResize\", function(){\n\t\t\tgantt.refreshData();\n\t\t});\n\n\t\tthis.callEvent(\"onGanttLayoutReady\", []);\n\t\tthis.$layout.render();\n\n\t\tgantt.$container = this.$layout.$container.firstChild;\n\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\tgantt.$click={\n\t\tbuttons:{\n\t\t\t\"edit\":function(id){\n\t\t\t\tgantt.showLightbox(id);\n\t\t\t},\n\t\t\t\"delete\":function(id){\n\t\t\t\tvar question = gantt.locale.labels.confirm_deleting;\n\t\t\t\tvar title = gantt.locale.labels.confirm_deleting_title;\n\n\t\t\t\tgantt._dhtmlx_confirm(question, title, function(){\n\t\t\t\t\tif(!gantt.isTaskExists(id)){\n\t\t\t\t\t\tgantt.hideLightbox();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar task = gantt.getTask(id);\n\t\t\t\t\tif(task.$new){\n\t\t\t\t\t\tgantt.silent(function(){\n\t\t\t\t\t\t\tgantt.deleteTask(id, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tgantt.refreshData();\n\t\t\t\t\t}else{\n\t\t\t\t\t\tgantt.deleteTask(id);\n\t\t\t\t\t}\n\n\t\t\t\t\tgantt.hideLightbox();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tgantt.getScrollState = function(){\n\t\tvar state = this._scroll_state();\n\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};\n\n\tgantt.scrollTo = function(left, top){\n\t\tvar vertical = this._getVerticalScrollbar();\n\t\tvar horizontal = this._getHorizontalScrollbar();\n\n\t\tvar oldV = vertical.getScrollState(),\n\t\t\toldH = horizontal.getScrollState();\n\n\t\tif (left*1 == left){\n\t\t\thorizontal.scroll(left);\n\t\t}\n\t\tif(top*1 == top){\n\t\t\tvertical.scroll(top);\n\t\t}\n\n\t\tvar newV = vertical.getScrollState(),\n\t\t\tnewH = horizontal.getScrollState();\n\n\t\tthis.callEvent(\"onGanttScroll\", [oldH.position, oldV.position, newH.position, newV.position]);\n\t};\n\n\tgantt.showDate = function(date){\n\t\tvar date_x = this.posFromDate(date);\n\t\tvar scroll_to = Math.max(date_x - this.config.task_scroll_offset, 0);\n\t\tthis.scrollTo(scroll_to);\n\t};\n\tgantt.showTask = function(id) {\n\t\tvar pos = this.getTaskPosition(this.getTask(id));\n\n\t\tvar left = Math.max(pos.left - this.config.task_scroll_offset, 0);\n\n\t\tvar dataHeight = this._scroll_state().y;\n\t\tvar top;\n\t\tif(!dataHeight){\n\t\t\ttop = pos.top;\n\t\t}else{\n\t\t\ttop = pos.top - (dataHeight - this.config.row_height)/2;\n\t\t}\n\n\t\tthis.scrollTo(left, top);\n\t};\n\n//renders self\n\tgantt.render = function(){\n\t\tthis.callEvent(\"onBeforeGanttRender\", []);\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._scroll_state = function(){\n\t\tvar result = {\n\t\t\tx: false,\n\t\t\ty: false,\n\t\t\tx_pos: 0,\n\t\t\ty_pos: 0,\n\t\t\tscroll_size: this.config.scroll_size + 1,//1px for inner content\n\t\t\tx_inner: 0,\n\t\t\ty_inner: 0\n\t\t};\n\n\t\tvar scrollVer = gantt._getVerticalScrollbar(),\n\t\t\tscrollHor = gantt._getHorizontalScrollbar();\n\t\tif(scrollHor){\n\t\t\tvar horState = scrollHor.getScrollState();\n\t\t\tif(horState.visible){\n\t\t\t\tresult.x = horState.size;\n\t\t\t\tresult.x_inner = horState.scrollSize;\n\t\t\t}\n\t\t\tresult.x_pos = horState.position || 0;\n\t\t}\n\n\t\tif(scrollVer){\n\t\t\tvar verState = scrollVer.getScrollState();\n\t\t\tif(verState.visible){\n\t\t\t\tresult.y = verState.size;\n\n\t\t\t\tresult.y_inner = verState.scrollSize;\n\t\t\t}\n\t\t\tresult.y_pos = verState.position || 0;\n\t\t}\n\n\t\treturn result;\n\t};\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.getGridColumns = function(){\n\t\treturn gantt.config.columns.slice();\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};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/gantt_core.js\n// module id = 100\n// module chunks = 0","/*\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\t//jshint -W087\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\t\t\t\tdebugger;\n\t\t\t}\n\t\t}\n\t};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/common/assert.js\n// module id = 101\n// module chunks = 0","function extend(gantt){\n\n\tgantt.destructor = function(){\n\t\tgantt.callEvent(\"onDestroy\", []);\n\n\t\tthis.clearAll();\n\t\tthis.detachAllEvents();\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\n\t\tthis.$services.destructor();\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};\n}\n\nmodule.exports = extend;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/destructor.js\n// module id = 102\n// module chunks = 0","module.exports = function(gantt){\n\n\tfunction deprecated(badCode, goodCode) {\n\n\t\tvar formatting = gantt.env.isIE ? \"\" : \"%c\";\n\n\n\t\tvar message = [\n\t\t\tformatting, \"\\\"\", badCode, \"\\\"\", formatting,\n\t\t\t\" has been deprecated in dhtmlxGantt v4.0 and will stop working in v6.0. 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\tfunction wrapDeprecated(method) {\n\t\treturn function () {\n\t\t\tdeprecated(\"dhtmlx.\" + method, \"gantt.\" + method);\n\t\t\treturn gantt[method].apply(gantt, arguments);\n\t\t};\n\t}\n\n\t/* dhtmlx */\n\n\n\tif (!window.dhtmlx)\n\t\twindow.dhtmlx = {};\n\n\tvar dhtmlxMethods = [\n\t\t\"message\",\n\t\t\"alert\",\n\t\t\"confirm\",\n\t\t\"modalbox\",\n\t\t\"uid\",\n\t\t\"copy\",\n\t\t\"mixin\",\n\t\t\"defined\",\n\t\t\"bind\",\n\t\t\"assert\"\n\t];\n\n\tvar dynMethods = [];\n\n\tfor(var i = 0; i < dhtmlxMethods.length; i++){\n\t\t// wrap dhtmlx methods with 'deprecated' warnings\n\t\t// do not wrap if methods are defined by dhtmlxSuite\n\t\tif(!window.dhtmlx[dhtmlxMethods[i]]){\n\t\t\tdynMethods.push(dhtmlxMethods[i]);\n\t\t\tdhtmlx[dhtmlxMethods[i]] = wrapDeprecated(dhtmlxMethods[i]);\n\t\t}\n\t}\n\n\tgantt.attachEvent(\"onDestroy\", function(){\n\t\tfor(var i = 0; i < dynMethods.length; i++){\n\t\t\tdelete window.dhtmlx[dynMethods[i]];\n\t\t}\n\t\tdynMethods = null;\n\n\t});\n\n\t/* global functions */\n\n\n\tif (!window.dataProcessor) {\n\t\twindow.dataProcessor = function (url) {\n\t\t\tdeprecated(\"new dataProcessor(url)\", \"new gantt.dataProcessor(url)\");\n\t\t\treturn new gantt.dataProcessor(url);\n\t\t};\n\t\tgantt.attachEvent(\"onDestroy\", function(){\n\t\t\twindow.dataProcessor = null;\n\t\t});\n\t}\n\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sources/core/deprecated_warnings.js\n// module id = 103\n// module chunks = 0"],"sourceRoot":""}