{"version":3,"sources":["kendo.gantt.timeline.js"],"names":["f","define","$","trimOptions","options","name","prefix","views","getWorkDays","workDays","dayIndex","workWeekStart","push","workWeekEnd","blurActiveElement","activeElement","kendo","_activeElement","nodeName","toLowerCase","blur","timelineStyles","GanttTimeline","Widget","ui","kendoDomElement","dom","element","kendoTextElement","text","kendoHtmlElement","html","isPlainObject","outerWidth","_outerWidth","outerHeight","_outerHeight","extend","proxy","browser","support","isRtl","keys","Query","data","STRING","NS","CLICK","DBLCLICK","MOUSEMOVE","MOUSEENTER","MOUSELEAVE","KEYDOWN","DOT","TIME_HEADER_TEMPLATE","template","DAY_HEADER_TEMPLATE","WEEK_HEADER_TEMPLATE","MONTH_HEADER_TEMPLATE","YEAR_HEADER_TEMPLATE","RESIZE_HINT","RESIZE_TOOLTIP_TEMPLATE","PERCENT_RESIZE_TOOLTIP_TEMPLATE","TASK_TOOLTIP_TEMPLATE","OFFSET_TOOLTIP_TEMPLATE","PLANNED_TOOLTIP_TEMPLATE","SIZE_CALCULATION_TEMPLATE","defaultViews","day","type","week","month","year","viewStyles","alt","reset","nonWorking","header","gridHeader","gridHeaderWrap","gridContent","tasksWrapper","rowsTable","columnsTable","tasksTable","dependenciesWrapper","resource","resourceAlt","task","taskSingle","taskMilestone","taskSummary","taskWrap","taskMilestoneWrap","taskSummaryWrap","taskPlanned","taskPlannedMoment","taskPlannedDuration","taskPlannedMomentLeft","taskAdvanced","taskDelayed","taskOffset","taskOffsetWrap","taskInnerWrap","resourcesWrap","taskDot","taskDotStart","taskDotEnd","taskDragHandle","taskContent","taskTemplate","taskActions","taskDelete","taskComplete","taskDetails","taskDetailsPercent","link","icon","iconDelete","taskResizeHandle","taskResizeHandleWest","taskResizeHandleEast","taskSummaryProgress","taskSummaryComplete","line","lineHorizontal","lineVertical","arrowWest","arrowEast","dragHint","dependencyHint","tooltipWrapper","tooltipContent","tooltipCallout","callout","marquee","marqueeColor","offsetTooltipAdvanced","offsetTooltipDelay","plannedTooltip","GanttView","init","fn","call","this","title","find","styles","content","contentWidth","width","_workDays","_headerTree","headerTree","_taskTree","taskTree","_taskTemplate","Template","templateSettings","_dependencyTree","dependencyTree","_taskCoordinates","_currentTime","destroy","clearTimeout","_tooltipTimeout","headerRow","_dragHint","_resizeHint","_resizeTooltip","_taskTooltip","_percentCompleteResizeTooltip","showWorkHours","showWorkDays","workDayStart","Date","workDayEnd","hourSpan","slotSize","currentTimeMarker","updateInterval","renderLayout","_slots","_createSlots","_tableWidth","_calculateTableWidth","createLayout","_layout","_slotDimensions","_adjustHeight","height","rows","headers","_headers","colgroup","_colgroup","tree","table","style","role","render","last","slot","i","length","children","slots","_timeSlots","offsetLeft","offsetWidth","tasks","contentTable","totalHeight","taskCount","_rowsTable","_columnsTable","_tasksTable","calculatedSize","row","_contentHeight","_rowHeight","undefined","_renderCurrentTime","rowCount","attributes","className","_createTable","slotSpan","cells","slotsCount","totalSpan","span","colspan","isNonWorking","cell","position","plannedPosition","resourcesPosition","resourceStyle","l","coordinates","size","_calculateMilestoneWidth","milestoneWidth","Math","round","resourcesField","resourcesMargin","_calculateResourcesMargin","taskBorderWidth","_calculateTaskBorderWidth","showPlannedTasks","addCoordinates","rowIndex","taskLeft","left","taskRight","isMilestone","id","start","end","_taskPosition","_taskPositionPlanned","borderWidth","_renderTask","max","clientWidth","_renderResources","tbody","cols","currentSpan","tableWidth","maxSpan","boundingClientRect","milestone","append","getBoundingClientRect","right","remove","margin","wrapper","parseInt","css","computedStyle","getComputedStyles","parseFloat","taskWrapper","taskElement","progressHandleOffset","plannedElement","endTaskDotLeft","offsetElement","editable","wrapClassName","dragHandleStyle","taskWrapAttr","endTaskDotRight","taskFullWidth","_renderPlannedMilestone","_renderPlannedSingleTask","summary","_renderSummary","_renderMilestone","_renderSingleTask","plannedStart","plannedEnd","resize","update","href","aria-label","dependencyCreate","dragPercentComplete","percentComplete","progressWidth","taskChildren","classes","widthExceptDelay","data-uid","uid","showPlanned","margin-left","margin-right","resources","color","get","reverse","startLeft","_offset","endLeft","date","startOffset","slotDuration","startIndex","slotOffset","_slotIndex","field","value","middle","startIdx","endIdx","slice","ceil","_timeByPosition","x","snap","snapToEnd","duration","_slotByPosition","offset","getTime","slotIndex","_renderDependencies","dependencies","elements","apply","_renderDependency","dependency","method","predecessor","predecessorId","successor","successorId","attr","_renderFF","from","to","lines","_dependencyFF","_arrow","_renderSS","_renderFS","_dependencyFS","_renderSF","delta","that","top","dir","overlap","arrowOverlap","rowHeight","minLineWidth","fromTop","floor","toTop","addHorizontal","_line","addVertical","abs","minLineHeight","minDistance","direction","j","count","_createDragHint","clone","addClass","cursor","visibility","closest","_updateDragHint","_removeDragHint","_createResizeHint","tooltipHeight","tooltipTop","taskTop","messages","format","resizeTooltipFormat","_resizeTooltipWidth","_resizeTooltipTop","_updateResizeHint","resizeStart","tooltipLeft","tablesWidth","scrollbar","tooltipWidth","tableOffset","min-width","appendTo","_removeResizeHint","_updatePercentCompleteTooltip","tooltip","tooltipMiddle","arrow","arrowHeight","_removePercentCompleteTooltip","_updateDependencyDragHint","useVML","_removeDependencyDragHint","_creteVmlDependencyDragHint","_creteDependencyDragHint","deltaX","deltaY","y","sqrt","angle","atan","PI","transform-origin","-ms-transform-origin","-webkit-transform-origin","transform","-ms-transform","-webkit-transform","hint","outerHTML","_createTaskTooltip","mouseLeft","contentOffset","contentScrollLeft","scrollLeft","parents","first","rowOffset","scrollTop","_adjustTooltipDimensions","_removeTaskTooltip","_createOffsetTooltip","hours","days","_offsetTooltip","offsetValue","plannedTasksMessages","plannedTasks","minutes","offsetText","offsetPrefix","_removeOffsetTooltip","_createPlannedTooltip","_plannedTooltip","editorMessages","editor","startDate","toString","endDate","_removePlannedTooltip","_scrollTo","elementLeft","elementWidth","elementRight","rowTop","rowBottom","contentTop","contentHeight","contentBottom","contentLeft","contentRight","scrollbarWidth","_scrollToDate","viewStart","viewEnd","columnLevels","level","column","headerText","levelIndex","levelCount","columnIndex","columnCount","_hours","slotEnd","isWorkHour","getHours","setHours","_days","isWorkDay","nextDay","_isWorkDay","_weeks","daySlots","firstDay","calendarInfo","dayOfWeek","addDays","_months","endMonth","firstDayOfMonth","setMonth","getMonth","_years","monthSpan","_slotHeaders","columns","getDay","getCulture","calendars","standard","currentTime","_getCurrentTime","timeOffset","tablesWrap","markerOptions","_currentTimeUpdateTimer","setInterval","GanttDayView","timeHeaderTemplate","dayHeaderTemplate","range","optionsRange","getDate","getMilliseconds","daySlot","hourSlots","GanttWeekView","weekHeaderTemplate","endDay","rangeEnd","setDate","GanttMonthView","monthHeaderTemplate","lastDayOfMonth","GanttYearView","yearHeaderTemplate","monthSlots","each","index","gridContentWrap","taskWrapActive","hovered","selected","origin","_wrapper","_domTrees","_views","_selectable","_draggable","_resizable","_percentResizeDraggable","_createDependencyDraggable","_attachEvents","_tooltip","selectable","clearInterval","_unbindView","_selectedView","_moveDraggable","_resizeDraggable","_percentDraggable","_dependencyDraggable","touch","off","calculateSize","calculatedRowHeight","calculatedCellHeight","_calculatedSize","Tree","view","isSettings","defaultView","_selectedViewName","_selectView","trigger","action","_initializeView","_viewByIndex","newRange","newDate","getter","window","Error","_range","startOrder","endOrder","sort","toArray","_render","_tasks","_taskByUid","currentStart","cleanUp","dragInProgress","move","Draggable","distance","filter","holdToDrag","mobileOS","ignore","bind","e","currentTarget","parent","preventDefault","location","throttle","updateHintDate","userEvents","currentEnd","hasClass","taskElementOffset","timelineOffset","originalPercentWidth","maxPercentWidth","currentPercentComplete","updateElement","siblings","initialDelta","currentWidth","min","originalHandle","startX","startY","hoveredHandle","hoveredTask","msie","version","removeClass","toggleHandles","toggleClass","document","namespaces","add","elementOffset","tablesOffset","target","currentX","currentY","elementUnderCursor","fromStart","toStart","predecessorElement","successorElement","on","stopPropagation","ctrlKey","elementFromPoint","clientX","clientY","click","selectDependency","clearSelection","select","_tabindex","selectedDependency","keyCode","DELETE","dependencyDestroy","kendoTouch","doubletap","currentMousePosition","tooltipOptions","mouseMoveHandler","visible","relatedTarget","currentPosition","client","setTimeout","_offsetTooltipTimeout","_plannedTooltipTimeout","_setPlanned","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.gantt.timeline.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.gantt.timeline', [\n 'kendo.dom',\n 'kendo.touch',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'gantt.timeline',\n name: 'Gantt Timeline',\n category: 'web',\n description: 'The Gantt Timeline',\n depends: [\n 'dom',\n 'touch',\n 'draganddrop'\n ],\n hidden: true\n };\n (function ($) {\n var Widget = kendo.ui.Widget;\n var kendoDomElement = kendo.dom.element;\n var kendoTextElement = kendo.dom.text;\n var kendoHtmlElement = kendo.dom.html;\n var isPlainObject = $.isPlainObject;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var extend = $.extend;\n var proxy = $.proxy;\n var browser = kendo.support.browser;\n var isRtl = false;\n var keys = kendo.keys;\n var Query = kendo.data.Query;\n var STRING = 'string';\n var NS = '.kendoGanttTimeline';\n var CLICK = 'click';\n var DBLCLICK = 'dblclick';\n var MOUSEMOVE = 'mousemove';\n var MOUSEENTER = 'mouseenter';\n var MOUSELEAVE = 'mouseleave';\n var KEYDOWN = 'keydown';\n var DOT = '.';\n var TIME_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'t\\')#');\n var DAY_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'ddd M/dd\\')#');\n var WEEK_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'ddd M/dd\\')# - #=kendo.toString(kendo.date.addDays(end, -1), \\'ddd M/dd\\')#');\n var MONTH_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'MMM\\')#');\n var YEAR_HEADER_TEMPLATE = kendo.template('#=kendo.toString(start, \\'yyyy\\')#');\n var RESIZE_HINT = kendo.template('
' + '
' + '
');\n var RESIZE_TOOLTIP_TEMPLATE = kendo.template('
' + '
' + '
#=messages.start#: #=kendo.toString(start, format)#
' + '
#=messages.end#: #=kendo.toString(end, format)#
' + '
' + '
');\n var PERCENT_RESIZE_TOOLTIP_TEMPLATE = kendo.template('
' + '
#=text#%
' + '
' + '
');\n var TASK_TOOLTIP_TEMPLATE = kendo.template('
' + '#=kendo.htmlEncode(task.title)#' + '
#=kendo.toString(task.percentComplete, \"p0\")#
' + '' + '
');\n var OFFSET_TOOLTIP_TEMPLATE = kendo.template('#=offsetPrefix#: #=offsetText#');\n var PLANNED_TOOLTIP_TEMPLATE = kendo.template('
' + '
#=plannedStart#: #=startDate#
' + '
#=plannedEnd#: #=endDate#
' + '
');\n var SIZE_CALCULATION_TEMPLATE = '' + '' + '' + '' + '' + '' + '
 
';\n var defaultViews = {\n day: { type: 'kendo.ui.GanttDayView' },\n week: { type: 'kendo.ui.GanttWeekView' },\n month: { type: 'kendo.ui.GanttMonthView' },\n year: { type: 'kendo.ui.GanttYearView' }\n };\n function trimOptions(options) {\n delete options.name;\n delete options.prefix;\n delete options.views;\n return options;\n }\n function getWorkDays(options) {\n var workDays = [];\n var dayIndex = options.workWeekStart;\n workDays.push(dayIndex);\n while (options.workWeekEnd != dayIndex) {\n if (dayIndex > 6) {\n dayIndex -= 7;\n } else {\n dayIndex++;\n }\n workDays.push(dayIndex);\n }\n return workDays;\n }\n function blurActiveElement() {\n var activeElement = kendo._activeElement();\n if (activeElement && activeElement.nodeName.toLowerCase() !== 'body') {\n $(activeElement).blur();\n }\n }\n var viewStyles = {\n alt: 'k-alt',\n reset: 'k-reset',\n nonWorking: 'k-nonwork-hour',\n header: 'k-header',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n tasksWrapper: 'k-gantt-tables',\n rowsTable: 'k-gantt-rows',\n columnsTable: 'k-gantt-columns',\n tasksTable: 'k-gantt-tasks',\n dependenciesWrapper: 'k-gantt-dependencies',\n resource: 'k-resource',\n resourceAlt: 'k-resource k-alt',\n task: 'k-task',\n taskSingle: 'k-task-single',\n taskMilestone: 'k-task-milestone',\n taskSummary: 'k-task-summary',\n taskWrap: 'k-task-wrap',\n taskMilestoneWrap: 'k-milestone-wrap',\n taskSummaryWrap: 'k-summary-wrap',\n taskPlanned: 'k-task-planned',\n taskPlannedMoment: 'k-task-moment',\n taskPlannedDuration: 'k-task-duration',\n taskPlannedMomentLeft: 'k-moment-left',\n taskAdvanced: 'k-task-advanced',\n taskDelayed: 'k-task-delayed',\n taskOffset: 'k-task-offset',\n taskOffsetWrap: 'k-task-offset-wrap',\n taskInnerWrap: 'k-task-inner-wrap',\n resourcesWrap: 'k-resources-wrap',\n taskDot: 'k-task-dot',\n taskDotStart: 'k-task-start',\n taskDotEnd: 'k-task-end',\n taskDragHandle: 'k-task-draghandle',\n taskContent: 'k-task-content',\n taskTemplate: 'k-task-template',\n taskActions: 'k-task-actions',\n taskDelete: 'k-task-delete',\n taskComplete: 'k-task-complete',\n taskDetails: 'k-task-details',\n taskDetailsPercent: 'k-task-pct',\n link: 'k-link',\n icon: 'k-icon',\n iconDelete: 'k-i-close',\n taskResizeHandle: 'k-resize-handle',\n taskResizeHandleWest: 'k-resize-w',\n taskResizeHandleEast: 'k-resize-e',\n taskSummaryProgress: 'k-task-summary-progress',\n taskSummaryComplete: 'k-task-summary-complete',\n line: 'k-gantt-line',\n lineHorizontal: 'k-gantt-line-h',\n lineVertical: 'k-gantt-line-v',\n arrowWest: 'k-arrow-w',\n arrowEast: 'k-arrow-e',\n dragHint: 'k-drag-hint',\n dependencyHint: 'k-gantt-dependency-hint',\n tooltipWrapper: 'k-tooltip',\n tooltipContent: 'k-tooltip-content',\n tooltipCallout: 'k-callout k-callout-s',\n callout: 'k-callout',\n marquee: 'k-marquee k-gantt-marquee',\n marqueeColor: 'k-marquee-color',\n offsetTooltipAdvanced: 'k-offset-tooltip-advanced',\n offsetTooltipDelay: 'k-offset-tooltip-delayed',\n plannedTooltip: 'k-planned-tooltip'\n };\n var GanttView = kendo.ui.GanttView = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.title = this.options.title || this.options.name;\n this.header = this.element.find(DOT + GanttView.styles.gridHeader);\n this.content = this.element.find(DOT + GanttView.styles.gridContent);\n this.contentWidth = this.content.width();\n this._workDays = getWorkDays(this.options);\n this._headerTree = options.headerTree;\n this._taskTree = options.taskTree;\n this._taskTemplate = options.taskTemplate ? kendo.template(options.taskTemplate, extend({}, kendo.Template, options.templateSettings)) : null;\n this._dependencyTree = options.dependencyTree;\n this._taskCoordinates = {};\n this._currentTime();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n clearTimeout(this._tooltipTimeout);\n this.headerRow = null;\n this.header = null;\n this.content = null;\n this._dragHint = null;\n this._resizeHint = null;\n this._resizeTooltip = null;\n this._taskTooltip = null;\n this._percentCompleteResizeTooltip = null;\n this._headerTree = null;\n this._taskTree = null;\n this._dependencyTree = null;\n },\n options: {\n showWorkHours: false,\n showWorkDays: false,\n workDayStart: new Date(1980, 1, 1, 8, 0, 0),\n workDayEnd: new Date(1980, 1, 1, 17, 0, 0),\n workWeekStart: 1,\n workWeekEnd: 5,\n hourSpan: 1,\n slotSize: 100,\n currentTimeMarker: { updateInterval: 10000 }\n },\n renderLayout: function () {\n this._slots = this._createSlots();\n this._tableWidth = this._calculateTableWidth();\n this.createLayout(this._layout());\n this._slotDimensions();\n this._adjustHeight();\n this.content.find(DOT + GanttView.styles.dependenciesWrapper).width(this._tableWidth);\n },\n _adjustHeight: function () {\n if (this.content) {\n this.content.height(this.element.height() - outerHeight(this.header));\n }\n },\n createLayout: function (rows) {\n var headers = this._headers(rows);\n var colgroup = this._colgroup();\n var tree = this._headerTree;\n var header = kendoDomElement('tbody', null, headers);\n var table = kendoDomElement('table', {\n style: { width: this._tableWidth + 'px' },\n role: 'presentation'\n }, [\n colgroup,\n header\n ]);\n tree.render([table]);\n this.headerRow = this.header.find('table:first tr').last();\n },\n _slotDimensions: function () {\n var headers = this.headerRow[0].children;\n var slots = this._timeSlots();\n var slot;\n var header;\n for (var i = 0, length = headers.length; i < length; i++) {\n header = headers[i];\n slot = slots[i];\n slot.offsetLeft = header.offsetLeft;\n slot.offsetWidth = header.offsetWidth;\n }\n },\n render: function (tasks) {\n var taskCount = tasks.length;\n var styles = GanttView.styles;\n var contentTable;\n var rowsTable = this._rowsTable(taskCount);\n var columnsTable = this._columnsTable(taskCount);\n var tasksTable = this._tasksTable(tasks);\n var currentTimeMarker = this.options.currentTimeMarker;\n var calculatedSize = this.options.calculatedSize;\n var totalHeight;\n this._taskTree.render([\n rowsTable,\n columnsTable,\n tasksTable\n ]);\n contentTable = this.content.find(DOT + styles.rowsTable);\n if (calculatedSize) {\n totalHeight = calculatedSize.row * tasks.length;\n this.content.find(DOT + styles.tasksTable).height(totalHeight);\n contentTable.height(totalHeight);\n }\n this._contentHeight = contentTable.height();\n this._rowHeight = calculatedSize ? calculatedSize.row : this._contentHeight / contentTable.find('tr').length;\n this.content.find(DOT + styles.columnsTable).height(this._contentHeight);\n if (currentTimeMarker !== false && currentTimeMarker.updateInterval !== undefined) {\n this._renderCurrentTime();\n }\n },\n _rowsTable: function (rowCount) {\n var rows = [];\n var row;\n var styles = GanttView.styles;\n var attributes = [\n null,\n { className: styles.alt }\n ];\n for (var i = 0; i < rowCount; i++) {\n row = kendoDomElement('tr', attributes[i % 2], [kendoDomElement('td', null, [kendoTextElement('\\xA0')])]);\n rows.push(row);\n }\n return this._createTable(1, rows, { className: styles.rowsTable });\n },\n _columnsTable: function () {\n var cells = [];\n var row;\n var styles = GanttView.styles;\n var slots = this._timeSlots();\n var slotsCount = slots.length;\n var slot;\n var slotSpan;\n var totalSpan = 0;\n var attributes;\n for (var i = 0; i < slotsCount; i++) {\n slot = slots[i];\n attributes = {};\n slotSpan = slot.span;\n totalSpan += slotSpan;\n if (slotSpan !== 1) {\n attributes.colspan = slotSpan;\n }\n if (slot.isNonWorking) {\n attributes.className = styles.nonWorking;\n }\n cells.push(kendoDomElement('td', attributes, [kendoTextElement('\\xA0')]));\n }\n row = kendoDomElement('tr', null, cells);\n return this._createTable(totalSpan, [row], { className: styles.columnsTable });\n },\n _tasksTable: function (tasks) {\n var rows = [];\n var row;\n var cell;\n var position;\n var plannedPosition;\n var task;\n var styles = GanttView.styles;\n var coordinates = this._taskCoordinates = {};\n var size = this._calculateMilestoneWidth();\n var milestoneWidth = Math.round(size.width);\n var resourcesField = this.options.resourcesField;\n var className = [\n styles.resource,\n styles.resourceAlt\n ];\n var calculatedSize = this.options.calculatedSize;\n var resourcesPosition;\n var resourcesMargin = this._calculateResourcesMargin();\n var taskBorderWidth = this._calculateTaskBorderWidth();\n var resourceStyle;\n var showPlannedTasks = this.options.showPlannedTasks;\n var addCoordinates = function (rowIndex) {\n var taskLeft;\n var taskRight;\n taskLeft = position.left;\n taskRight = taskLeft + position.width;\n if (task.isMilestone()) {\n taskLeft -= milestoneWidth / 2;\n taskRight = taskLeft + milestoneWidth;\n }\n coordinates[task.id] = {\n start: taskLeft,\n end: taskRight,\n rowIndex: rowIndex\n };\n };\n for (var i = 0, l = tasks.length; i < l; i++) {\n task = tasks[i];\n position = this._taskPosition(task);\n if (showPlannedTasks) {\n plannedPosition = this._taskPositionPlanned(task);\n plannedPosition.borderWidth = taskBorderWidth;\n }\n position.borderWidth = taskBorderWidth;\n row = kendoDomElement('tr', null);\n cell = kendoDomElement('td');\n if (task.start <= this.end && task.end >= this.start) {\n cell.children.push(this._renderTask(tasks[i], position, plannedPosition));\n if (task[resourcesField] && task[resourcesField].length) {\n if (isRtl) {\n resourcesPosition = this._tableWidth - position.left;\n } else {\n resourcesPosition = Math.max(position.width || size.clientWidth, 0) + position.left;\n }\n resourceStyle = { width: this._tableWidth - (resourcesPosition + resourcesMargin) + 'px' };\n resourceStyle[isRtl ? 'right' : 'left'] = resourcesPosition + 'px';\n if (calculatedSize) {\n resourceStyle.height = calculatedSize.cell + 'px';\n }\n cell.children.push(kendoDomElement('div', {\n className: styles.resourcesWrap,\n style: resourceStyle\n }, this._renderResources(task[resourcesField], className[i % 2])));\n }\n addCoordinates(i);\n }\n row.children.push(cell);\n rows.push(row);\n }\n return this._createTable(1, rows, { className: GanttView.styles.tasksTable });\n },\n _createTable: function (colspan, rows, styles) {\n var cols = [];\n var colgroup;\n var tbody;\n for (var i = 0; i < colspan; i++) {\n cols.push(kendoDomElement('col'));\n }\n colgroup = kendoDomElement('colgroup', null, cols);\n tbody = kendoDomElement('tbody', null, rows);\n if (!styles.style) {\n styles.style = {};\n }\n styles.style.width = this._tableWidth + 'px';\n styles.role = 'presentation';\n return kendoDomElement('table', styles, [\n colgroup,\n tbody\n ]);\n },\n _calculateTableWidth: function () {\n var slots = this._timeSlots();\n var maxSpan = 0;\n var totalSpan = 0;\n var currentSpan;\n var tableWidth;\n for (var i = 0, length = slots.length; i < length; i++) {\n currentSpan = slots[i].span;\n totalSpan += currentSpan;\n if (currentSpan > maxSpan) {\n maxSpan = currentSpan;\n }\n }\n tableWidth = Math.round(totalSpan * this.options.slotSize / maxSpan);\n return tableWidth;\n },\n _calculateMilestoneWidth: function () {\n var size;\n var className = GanttView.styles.task + ' ' + GanttView.styles.taskMilestone;\n var milestone = $('
');\n var boundingClientRect;\n this.content.append(milestone);\n boundingClientRect = milestone[0].getBoundingClientRect();\n size = {\n 'width': boundingClientRect.right - boundingClientRect.left,\n 'clientWidth': milestone[0].clientWidth\n };\n milestone.remove();\n return size;\n },\n _calculateResourcesMargin: function () {\n var margin;\n var wrapper = $('
');\n this.content.append(wrapper);\n margin = parseInt(wrapper.css(isRtl ? 'margin-right' : 'margin-left'), 10);\n wrapper.remove();\n return margin;\n },\n _calculateTaskBorderWidth: function () {\n var width;\n var className = GanttView.styles.task + ' ' + GanttView.styles.taskSingle;\n var task = $('
');\n var computedStyle;\n this.content.append(task);\n computedStyle = kendo.getComputedStyles(task[0], ['border-left-width']);\n width = parseFloat(computedStyle['border-left-width'], 10);\n task.remove();\n return width;\n },\n _renderTask: function (task, position, plannedPosition) {\n var editable = this.options.editable;\n var taskLeft = position.left;\n var styles = GanttView.styles;\n var wrapClassName = styles.taskWrap;\n var calculatedSize = this.options.calculatedSize;\n var dragHandleStyle = {};\n var taskWrapAttr = {\n className: wrapClassName,\n style: { left: taskLeft + 'px' }\n };\n var children = [];\n var endTaskDotRight = 0;\n var taskFullWidth = position.width;\n var taskWrapper, taskElement, progressHandleOffset, plannedElement;\n var endTaskDotLeft, taskOffsetWrap, offsetElement, offsetWidth;\n if (calculatedSize) {\n taskWrapAttr.style.height = calculatedSize.cell + 'px';\n }\n if (plannedPosition) {\n if (task.isMilestone()) {\n plannedElement = this._renderPlannedMilestone(position, plannedPosition);\n } else {\n plannedElement = this._renderPlannedSingleTask(position, plannedPosition, task);\n }\n children.push(plannedElement);\n if (isRtl && plannedPosition.left <= position.left) {\n taskWrapAttr.style.left = plannedPosition.left + 'px';\n }\n }\n if (task.summary) {\n taskElement = this._renderSummary(task, position, plannedPosition);\n taskWrapAttr.className += ' ' + styles.taskSummaryWrap;\n } else if (task.isMilestone()) {\n taskElement = this._renderMilestone(task, position);\n taskWrapAttr.className += ' ' + styles.taskMilestoneWrap;\n } else {\n taskElement = this._renderSingleTask(task, position, plannedPosition);\n }\n if (plannedPosition && !task.isMilestone() && task.plannedStart < task.end && task.plannedEnd > task.start && task.plannedEnd < task.end) {\n if (isRtl) {\n taskFullWidth = position.left + position.width - plannedPosition.left;\n } else {\n taskFullWidth = plannedPosition.left + plannedPosition.width - position.left;\n }\n if (isRtl) {\n offsetWidth = plannedPosition.left - position.left;\n } else {\n offsetWidth = position.left + position.width - (plannedPosition.left + plannedPosition.width);\n }\n offsetElement = kendoDomElement('div', {\n className: styles.taskOffset,\n style: { width: offsetWidth - 2 * plannedPosition.borderWidth + 'px' }\n });\n if (editable && editable.resize !== false && editable.update !== false && !task.summary) {\n if (editable.destroy !== false) {\n offsetElement.children.push(kendoDomElement('span', { className: styles.taskActions }, [kendoDomElement('a', {\n className: styles.link + ' ' + styles.taskDelete,\n href: '#',\n 'aria-label': 'Delete'\n }, [kendoDomElement('span', { className: styles.icon + ' ' + styles.iconDelete })])]));\n }\n if (isRtl) {\n offsetElement.children.push(kendoDomElement('span', {\n className: styles.taskResizeHandle + ' ' + styles.taskResizeHandleWest,\n style: { right: position.width - 5 + 'px' }\n }));\n } else {\n offsetElement.children.push(kendoDomElement('span', { className: styles.taskResizeHandle + ' ' + styles.taskResizeHandleEast }));\n }\n }\n taskOffsetWrap = kendoDomElement('div', { className: styles.taskOffsetWrap + ' ' + styles.taskInnerWrap }, [\n taskElement,\n offsetElement\n ]);\n children.push(taskOffsetWrap);\n } else if (plannedPosition) {\n children.push(kendoDomElement('div', { className: styles.taskInnerWrap }, [taskElement]));\n } else {\n children.push(taskElement);\n }\n taskWrapper = kendoDomElement('div', taskWrapAttr, children);\n if (editable && editable.dependencyCreate !== false) {\n if (plannedPosition && task.plannedEnd > task.end) {\n endTaskDotRight = plannedPosition.left + plannedPosition.width - position.left - position.width - 3 + 'px';\n }\n taskWrapper.children.push(kendoDomElement('div', { className: styles.taskDot + ' ' + styles.taskDotStart }));\n if (isRtl) {\n endTaskDotRight = 'auto';\n if (plannedPosition && task.plannedEnd > task.end) {\n endTaskDotLeft = position.left - plannedPosition.left + 'px';\n }\n }\n taskWrapper.children.push(kendoDomElement('div', {\n className: styles.taskDot + ' ' + styles.taskDotEnd,\n style: {\n right: endTaskDotRight,\n left: endTaskDotLeft\n }\n }));\n }\n if (!task.summary && !task.isMilestone() && editable && editable.dragPercentComplete !== false && editable.update !== false && this._taskTemplate === null) {\n progressHandleOffset = Math.round(taskFullWidth * task.percentComplete);\n dragHandleStyle[isRtl ? 'right' : 'left'] = progressHandleOffset + 'px';\n taskWrapper.children.push(kendoDomElement('div', {\n className: styles.taskDragHandle,\n style: dragHandleStyle\n }));\n }\n return taskWrapper;\n },\n _renderSingleTask: function (task, position, plannedPosition) {\n var styles = GanttView.styles;\n var progressWidth;\n var taskChildren = [];\n var taskContent;\n var editable = this.options.editable;\n var classes = styles.task + ' ' + styles.taskSingle;\n var widthExceptDelay = position.width;\n if (plannedPosition) {\n if (task.plannedEnd && task.plannedEnd <= task.start) {\n classes += ' ' + styles.taskDelayed;\n } else if (task.plannedEnd && task.plannedEnd > task.end) {\n classes += ' ' + styles.taskAdvanced;\n } else if (task.plannedEnd && task.plannedEnd < task.end) {\n if (!isRtl) {\n widthExceptDelay = widthExceptDelay - (position.left + position.width - plannedPosition.left - plannedPosition.width);\n } else {\n widthExceptDelay = widthExceptDelay + position.left - plannedPosition.left;\n }\n }\n }\n progressWidth = Math.round(widthExceptDelay * task.percentComplete);\n if (this._taskTemplate !== null) {\n taskContent = kendoHtmlElement(this._taskTemplate(task));\n } else {\n taskContent = kendoTextElement(task.title);\n taskChildren.push(kendoDomElement('div', {\n className: styles.taskComplete,\n style: { width: progressWidth + 'px' }\n }));\n }\n var content = kendoDomElement('div', { className: styles.taskContent }, [kendoDomElement('div', { className: styles.taskTemplate }, [taskContent])]);\n taskChildren.push(content);\n if (editable) {\n if (editable.destroy !== false && (!plannedPosition || !task.plannedEnd || (task.end <= task.plannedEnd || task.start >= task.plannedEnd))) {\n content.children.push(kendoDomElement('span', { className: styles.taskActions }, [kendoDomElement('a', {\n className: styles.link + ' ' + styles.taskDelete,\n href: '#',\n 'aria-label': 'Delete'\n }, [kendoDomElement('span', { className: styles.icon + ' ' + styles.iconDelete })])]));\n }\n if (editable.resize !== false && editable.update !== false) {\n content.children.push(kendoDomElement('span', { className: styles.taskResizeHandle + ' ' + styles.taskResizeHandleWest }));\n content.children.push(kendoDomElement('span', { className: styles.taskResizeHandle + ' ' + styles.taskResizeHandleEast }));\n }\n }\n var element = kendoDomElement('div', {\n className: classes,\n 'data-uid': task.uid,\n style: { width: Math.max(widthExceptDelay - position.borderWidth * 2, 0) + 'px' }\n }, taskChildren);\n return element;\n },\n _renderMilestone: function (task) {\n var styles = GanttView.styles;\n var classes = styles.task + ' ' + styles.taskMilestone;\n var showPlanned = this.options.showPlannedTasks;\n if (showPlanned && task.plannedEnd && task.plannedEnd < task.start) {\n classes += ' ' + styles.taskDelayed;\n } else if (task.plannedStart && task.plannedStart > task.end) {\n classes += ' ' + styles.taskAdvanced;\n }\n return kendoDomElement('div', {\n className: classes,\n 'data-uid': task.uid\n });\n },\n _renderSummary: function (task, position, plannedPosition) {\n var styles = GanttView.styles;\n var widthExceptDelay = position.width;\n var progressWidth;\n var classes = styles.task + ' ' + styles.taskSummary;\n if (plannedPosition) {\n if (task.plannedEnd && task.plannedEnd <= task.start) {\n classes += ' ' + styles.taskDelayed;\n } else if (task.plannedEnd && task.plannedEnd > task.end) {\n classes += ' ' + styles.taskAdvanced;\n } else if (task.plannedEnd && task.plannedEnd < task.end) {\n if (!isRtl) {\n widthExceptDelay = widthExceptDelay - (position.left + position.width - plannedPosition.left - plannedPosition.width);\n } else {\n widthExceptDelay = widthExceptDelay + position.left - plannedPosition.left;\n }\n }\n }\n progressWidth = Math.round(widthExceptDelay * task.percentComplete);\n var element = kendoDomElement('div', {\n className: classes,\n 'data-uid': task.uid,\n style: { width: widthExceptDelay + 'px' }\n }, [kendoDomElement('div', {\n className: styles.taskSummaryProgress,\n style: { width: progressWidth + 'px' }\n }, [kendoDomElement('div', {\n className: styles.taskSummaryComplete,\n style: { width: position.width + 'px' }\n })])]);\n return element;\n },\n _renderPlannedSingleTask: function (position, plannedPosition, task) {\n var styles = GanttView.styles;\n var children = [];\n var style = {};\n if (task.plannedStart && task.plannedEnd) {\n children.push(kendoDomElement('div', { className: styles.taskPlannedMoment + ' ' + styles.taskPlannedMomentLeft }));\n children.push(kendoDomElement('div', {\n className: styles.taskPlannedDuration,\n style: { width: Math.max(plannedPosition.width - plannedPosition.borderWidth * 2 - 16, 0) + 'px' }\n }));\n children.push(kendoDomElement('div', { className: styles.taskPlannedMoment }));\n } else if (task.plannedStart) {\n children.push(kendoDomElement('div', { className: styles.taskPlannedMoment + ' ' + styles.taskPlannedMomentLeft }));\n } else if (task.plannedEnd) {\n children.push(kendoDomElement('div', {\n className: styles.taskPlannedMoment,\n style: { 'margin-left': Math.max(plannedPosition.width - 5, 0) + 'px' }\n }));\n }\n if (isRtl) {\n style = { 'margin-right': position.left - plannedPosition.left + position.width - plannedPosition.width + 'px' };\n } else {\n style = { 'margin-left': plannedPosition.left - position.left + 'px' };\n }\n var element = kendoDomElement('div', {\n className: styles.taskPlanned,\n style: style\n }, children);\n return element;\n },\n _renderPlannedMilestone: function (position, plannedPosition) {\n var styles = GanttView.styles;\n var style = {};\n var element;\n if (isRtl) {\n style = { 'margin-right': position.left - plannedPosition.left + 'px' };\n } else {\n style = { 'margin-left': plannedPosition.left - position.left + 'px' };\n }\n element = kendoDomElement('div', {\n className: styles.taskPlanned,\n style: style\n }, [kendoDomElement('div', { className: styles.taskPlannedMoment })]);\n return element;\n },\n _renderResources: function (resources, className) {\n var children = [];\n var resource;\n for (var i = 0, length = resources.length; i < length; i++) {\n resource = resources[i];\n children.push(kendoDomElement('span', {\n className: className,\n style: { 'color': resource.get('color') }\n }, [kendoTextElement(resource.get('name'))]));\n }\n if (isRtl) {\n children.reverse();\n }\n return children;\n },\n _taskPosition: function (task) {\n var round = Math.round;\n var startLeft = round(this._offset(isRtl ? task.end : task.start));\n var endLeft = round(this._offset(isRtl ? task.start : task.end));\n return {\n left: startLeft,\n width: endLeft - startLeft\n };\n },\n _taskPositionPlanned: function (task) {\n var round = Math.round;\n var startLeft = round(this._offset(isRtl ? task.plannedEnd : task.plannedStart));\n var endLeft = round(this._offset(isRtl ? task.plannedStart : task.plannedEnd));\n return {\n left: startLeft,\n width: endLeft - startLeft\n };\n },\n _offset: function (date) {\n var slots = this._timeSlots();\n var slot;\n var startOffset;\n var slotDuration;\n var slotOffset = 0;\n var startIndex;\n if (!slots.length) {\n return 0;\n }\n startIndex = this._slotIndex('start', date);\n slot = slots[startIndex];\n if (slot.end < date) {\n slotOffset = slot.offsetWidth;\n } else if (slot.start <= date) {\n startOffset = date - slot.start;\n slotDuration = slot.end - slot.start;\n slotOffset = startOffset / slotDuration * slot.offsetWidth;\n }\n if (isRtl) {\n slotOffset = slot.offsetWidth + 1 - slotOffset;\n }\n return slot.offsetLeft + slotOffset;\n },\n _slotIndex: function (field, value, reverse) {\n var slots = this._timeSlots();\n var startIdx = 0;\n var endIdx = slots.length - 1;\n var middle;\n if (reverse) {\n slots = [].slice.call(slots).reverse();\n }\n do {\n middle = Math.ceil((endIdx + startIdx) / 2);\n if (slots[middle][field] < value) {\n startIdx = middle;\n } else {\n if (middle === endIdx) {\n middle--;\n }\n endIdx = middle;\n }\n } while (startIdx !== endIdx);\n if (reverse) {\n startIdx = slots.length - 1 - startIdx;\n }\n return startIdx;\n },\n _timeByPosition: function (x, snap, snapToEnd) {\n var slot = this._slotByPosition(x);\n if (snap) {\n return snapToEnd ? slot.end : slot.start;\n }\n var offsetLeft = x - this.element.find(DOT + GanttView.styles.tasksTable).offset().left;\n var duration = slot.end - slot.start;\n var slotOffset = offsetLeft - slot.offsetLeft;\n if (isRtl) {\n slotOffset = slot.offsetWidth - slotOffset;\n }\n return new Date(slot.start.getTime() + duration * (slotOffset / slot.offsetWidth));\n },\n _slotByPosition: function (x) {\n var offsetLeft = x - this.element.find(DOT + GanttView.styles.tasksTable).offset().left;\n var slotIndex = this._slotIndex('offsetLeft', offsetLeft, isRtl);\n return this._timeSlots()[slotIndex];\n },\n _renderDependencies: function (dependencies) {\n var elements = [];\n var tree = this._dependencyTree;\n for (var i = 0, l = dependencies.length; i < l; i++) {\n elements.push.apply(elements, this._renderDependency(dependencies[i]));\n }\n tree.render(elements);\n },\n _renderDependency: function (dependency) {\n var predecessor = this._taskCoordinates[dependency.predecessorId];\n var successor = this._taskCoordinates[dependency.successorId];\n var elements;\n var method;\n if (!predecessor || !successor) {\n return [];\n }\n method = '_render' + [\n 'FF',\n 'FS',\n 'SF',\n 'SS'\n ][isRtl ? 3 - dependency.type : dependency.type];\n elements = this[method](predecessor, successor);\n for (var i = 0, length = elements.length; i < length; i++) {\n elements[i].attr['data-uid'] = dependency.uid;\n }\n return elements;\n },\n _renderFF: function (from, to) {\n var lines = this._dependencyFF(from, to, false);\n lines[lines.length - 1].children[0] = this._arrow(true);\n return lines;\n },\n _renderSS: function (from, to) {\n var lines = this._dependencyFF(to, from, true);\n lines[0].children[0] = this._arrow(false);\n return lines.reverse();\n },\n _renderFS: function (from, to) {\n var lines = this._dependencyFS(from, to, false);\n lines[lines.length - 1].children[0] = this._arrow(false);\n return lines;\n },\n _renderSF: function (from, to) {\n var lines = this._dependencyFS(to, from, true);\n lines[0].children[0] = this._arrow(true);\n return lines.reverse();\n },\n _dependencyFF: function (from, to, reverse) {\n var that = this;\n var lines = [];\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var dir = reverse ? 'start' : 'end';\n var delta;\n var overlap = 2;\n var arrowOverlap = 1;\n var rowHeight = this._rowHeight;\n var minLineWidth = 10;\n var fromTop = from.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var toTop = to.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var styles = GanttView.styles;\n var addHorizontal = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineHorizontal, {\n left: left + 'px',\n top: top + 'px',\n width: width + 'px'\n }));\n };\n var addVertical = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineVertical, {\n left: left + 'px',\n top: top + 'px',\n height: height + 'px'\n }));\n };\n left = from[dir];\n top = fromTop;\n width = minLineWidth;\n delta = to[dir] - from[dir];\n if (delta > 0 !== reverse) {\n width = Math.abs(delta) + minLineWidth;\n }\n if (reverse) {\n left -= width;\n width -= arrowOverlap;\n addHorizontal();\n } else {\n addHorizontal();\n left += width - overlap;\n }\n if (toTop < top) {\n height = top - toTop;\n height += overlap;\n top = toTop;\n addVertical();\n } else {\n height = toTop - top;\n height += overlap;\n addVertical();\n top += height - overlap;\n }\n width = Math.abs(left - to[dir]);\n if (!reverse) {\n width -= arrowOverlap;\n left -= width;\n }\n addHorizontal();\n return lines;\n },\n _dependencyFS: function (from, to, reverse) {\n var that = this;\n var lines = [];\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var rowHeight = this._rowHeight;\n var minLineHeight = Math.floor(rowHeight / 2);\n var minLineWidth = 10;\n var minDistance = 2 * minLineWidth;\n var delta = to.start - from.end;\n var overlap = 2;\n var arrowOverlap = 1;\n var fromTop = from.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var toTop = to.rowIndex * rowHeight + Math.floor(rowHeight / 2) - 1;\n var styles = GanttView.styles;\n var addHorizontal = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineHorizontal, {\n left: left + 'px',\n top: top + 'px',\n width: width + 'px'\n }));\n };\n var addVertical = function () {\n lines.push(that._line(styles.line + ' ' + styles.lineVertical, {\n left: left + 'px',\n top: top + 'px',\n height: height + 'px'\n }));\n };\n left = from.end;\n top = fromTop;\n width = minLineWidth;\n if (reverse) {\n left += arrowOverlap;\n if (delta > minDistance) {\n width = delta - (minLineWidth - overlap);\n }\n width -= arrowOverlap;\n }\n addHorizontal();\n left += width - overlap;\n if (delta <= minDistance) {\n height = reverse ? Math.abs(toTop - fromTop) - minLineHeight : minLineHeight;\n if (toTop < fromTop) {\n top -= height;\n height += overlap;\n addVertical();\n } else {\n addVertical();\n top += height;\n }\n width = from.end - to.start + minDistance;\n if (width < minLineWidth) {\n width = minLineWidth;\n }\n left -= width - overlap;\n addHorizontal();\n }\n if (toTop < fromTop) {\n height = top - toTop;\n top = toTop;\n height += overlap;\n addVertical();\n } else {\n height = toTop - top;\n addVertical();\n top += height;\n }\n width = to.start - left;\n if (!reverse) {\n width -= arrowOverlap;\n }\n addHorizontal();\n return lines;\n },\n _line: function (className, styles) {\n return kendoDomElement('div', {\n className: className,\n style: styles\n });\n },\n _arrow: function (direction) {\n return kendoDomElement('span', { className: direction ? GanttView.styles.arrowWest : GanttView.styles.arrowEast });\n },\n _colgroup: function () {\n var slots = this._timeSlots();\n var count = slots.length;\n var cols = [];\n for (var i = 0; i < count; i++) {\n for (var j = 0, length = slots[i].span; j < length; j++) {\n cols.push(kendoDomElement('col'));\n }\n }\n return kendoDomElement('colgroup', null, cols);\n },\n _createDragHint: function (element) {\n var styles = GanttView.styles;\n var plannedElement;\n this._dragHint = element.clone().addClass(styles.dragHint).css({ 'cursor': 'move' });\n plannedElement = this._dragHint.find(DOT + styles.taskPlanned);\n plannedElement.css({ 'visibility': 'hidden' });\n if (isRtl && element.find(DOT + styles.taskAdvanced).length > 0) {\n plannedElement.css({\n 'margin-right': 'auto',\n 'width': 0\n });\n this._dragHint.find(DOT + styles.taskDotEnd).css({ 'left': 0 });\n }\n element.closest('td').append(this._dragHint);\n },\n _updateDragHint: function (start) {\n var left = this._offset(start);\n this._dragHint.css({ 'left': left });\n },\n _removeDragHint: function () {\n this._dragHint.remove();\n this._dragHint = null;\n },\n _createResizeHint: function (task) {\n var styles = GanttView.styles;\n var taskTop = this._taskCoordinates[task.id].rowIndex * this._rowHeight;\n var tooltipHeight;\n var tooltipTop;\n var options = this.options;\n var messages = options.messages;\n this._resizeHint = $(RESIZE_HINT({ styles: styles })).css({\n 'top': 0,\n 'height': this._contentHeight\n });\n this.content.append(this._resizeHint);\n this._resizeTooltip = $(RESIZE_TOOLTIP_TEMPLATE({\n styles: styles,\n start: task.start,\n end: task.end,\n messages: messages.views,\n format: options.resizeTooltipFormat\n })).css({\n 'top': 0,\n 'left': 0\n });\n this.content.append(this._resizeTooltip);\n this._resizeTooltipWidth = outerWidth(this._resizeTooltip);\n tooltipHeight = outerHeight(this._resizeTooltip);\n tooltipTop = taskTop - tooltipHeight;\n if (tooltipTop < 0) {\n tooltipTop = taskTop + this._rowHeight;\n }\n this._resizeTooltipTop = tooltipTop;\n },\n _updateResizeHint: function (start, end, resizeStart) {\n var left = this._offset(isRtl ? end : start);\n var right = this._offset(isRtl ? start : end);\n var width = right - left;\n var tooltipLeft = resizeStart !== isRtl ? left : right;\n var tablesWidth = this._tableWidth - kendo.support.scrollbar();\n var tooltipWidth = this._resizeTooltipWidth;\n var options = this.options;\n var messages = options.messages;\n var tableOffset = this.element.find(DOT + GanttView.styles.tasksTable).offset().left - this.element.find(DOT + GanttView.styles.tasksWrapper).offset().left;\n if (isRtl) {\n left += tableOffset;\n }\n this._resizeHint.css({\n 'left': left,\n 'width': width\n });\n if (this._resizeTooltip) {\n this._resizeTooltip.remove();\n }\n tooltipLeft -= Math.round(tooltipWidth / 2);\n if (tooltipLeft < 0) {\n tooltipLeft = 0;\n } else if (tooltipLeft + tooltipWidth > tablesWidth) {\n tooltipLeft = tablesWidth - tooltipWidth;\n }\n if (isRtl) {\n tooltipLeft += tableOffset;\n }\n this._resizeTooltip = $(RESIZE_TOOLTIP_TEMPLATE({\n styles: GanttView.styles,\n start: start,\n end: end,\n messages: messages.views,\n format: options.resizeTooltipFormat\n })).css({\n 'top': this._resizeTooltipTop,\n 'left': tooltipLeft,\n 'min-width': tooltipWidth\n }).appendTo(this.content);\n },\n _removeResizeHint: function () {\n this._resizeHint.remove();\n this._resizeHint = null;\n this._resizeTooltip.remove();\n this._resizeTooltip = null;\n },\n _updatePercentCompleteTooltip: function (top, left, text) {\n this._removePercentCompleteTooltip();\n var tooltip = this._percentCompleteResizeTooltip = $(PERCENT_RESIZE_TOOLTIP_TEMPLATE({\n styles: GanttView.styles,\n text: text\n })).appendTo(this.element);\n var tooltipMiddle = Math.round(outerWidth(tooltip) / 2);\n var arrow = tooltip.find(DOT + GanttView.styles.callout);\n var arrowHeight = Math.round(outerWidth(arrow) / 2);\n tooltip.css({\n 'top': top - (outerHeight(tooltip) + arrowHeight),\n 'left': left - tooltipMiddle\n });\n arrow.css('left', tooltipMiddle - arrowHeight);\n },\n _removePercentCompleteTooltip: function () {\n if (this._percentCompleteResizeTooltip) {\n this._percentCompleteResizeTooltip.remove();\n }\n this._percentCompleteResizeTooltip = null;\n },\n _updateDependencyDragHint: function (from, to, useVML) {\n this._removeDependencyDragHint();\n if (useVML) {\n this._creteVmlDependencyDragHint(from, to);\n } else {\n this._creteDependencyDragHint(from, to);\n }\n },\n _creteDependencyDragHint: function (from, to) {\n var styles = GanttView.styles;\n var deltaX = to.x - from.x;\n var deltaY = to.y - from.y;\n var width = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n var angle = Math.atan(deltaY / deltaX);\n if (deltaX < 0) {\n angle += Math.PI;\n }\n $('
').css({\n 'top': from.y,\n 'left': from.x,\n 'width': width,\n 'transform-origin': '0% 0',\n '-ms-transform-origin': '0% 0',\n '-webkit-transform-origin': '0% 0',\n 'transform': 'rotate(' + angle + 'rad)',\n '-ms-transform': 'rotate(' + angle + 'rad)',\n '-webkit-transform': 'rotate(' + angle + 'rad)'\n }).appendTo(this.content);\n },\n _creteVmlDependencyDragHint: function (from, to) {\n var hint = $('').appendTo(this.content);\n hint[0].outerHTML = hint[0].outerHTML;\n },\n _removeDependencyDragHint: function () {\n this.content.find(DOT + GanttView.styles.dependencyHint).remove();\n },\n _createTaskTooltip: function (task, element, mouseLeft) {\n var styles = GanttView.styles;\n var options = this.options;\n var content = this.content;\n var contentOffset = content.offset();\n var contentScrollLeft = kendo.scrollLeft(content);\n var row = $(element).parents('tr').first();\n var rowOffset = row.offset();\n var template = options.tooltip && options.tooltip.template ? kendo.template(options.tooltip.template) : TASK_TOOLTIP_TEMPLATE;\n var left = isRtl ? mouseLeft - (contentOffset.left + contentScrollLeft + kendo.support.scrollbar()) : mouseLeft - (contentOffset.left - contentScrollLeft);\n var top = rowOffset.top + outerHeight(row) - contentOffset.top + content.scrollTop();\n var tooltip = this._taskTooltip = $('
' + '
');\n tooltip.css({\n 'left': left,\n 'top': top\n }).appendTo(content).find(DOT + styles.taskContent).append(template({\n styles: styles,\n task: task,\n messages: options.messages.views\n }));\n this._adjustTooltipDimensions(tooltip, rowOffset, contentOffset, left, contentScrollLeft);\n },\n _removeTaskTooltip: function () {\n if (this._taskTooltip) {\n this._taskTooltip.remove();\n }\n this._taskTooltip = null;\n },\n _createOffsetTooltip: function (task, element, mouseLeft) {\n var styles = GanttView.styles;\n var content = this.content;\n var contentOffset = content.offset();\n var contentScrollLeft = kendo.scrollLeft(content);\n var row = element.parents('tr').first();\n var rowOffset = row.offset();\n var left = isRtl ? mouseLeft - (contentOffset.left + contentScrollLeft + kendo.support.scrollbar()) : mouseLeft - (contentOffset.left - contentScrollLeft);\n var top = rowOffset.top + outerHeight(row) - contentOffset.top + content.scrollTop();\n var tooltip = this._offsetTooltip = $('
');\n var offsetValue = Math.round((task.end.getTime() - task.plannedEnd.getTime()) / 60000);\n var plannedTasksMessages = this.options.messages.plannedTasks;\n var minutes = offsetValue % 60;\n var offsetText = minutes + ' ' + plannedTasksMessages.minutes;\n var hours, days;\n if (offsetValue >= 60) {\n hours = offsetValue = Math.floor(offsetValue / 60);\n offsetText = hours + ' ' + plannedTasksMessages.hours;\n if (minutes !== 0) {\n offsetText += ' ' + minutes + ' ' + plannedTasksMessages.minutes;\n }\n if (offsetValue >= 24) {\n hours = offsetValue % 24;\n days = offsetValue = Math.floor(offsetValue / 24);\n offsetText = days + ' ' + plannedTasksMessages.days;\n if (hours !== 0) {\n offsetText += ' ' + hours + ' ' + plannedTasksMessages.hours;\n }\n }\n }\n tooltip.css({\n 'left': left,\n 'top': top\n }).addClass(styles.offsetTooltipDelay).appendTo(content).append(OFFSET_TOOLTIP_TEMPLATE({\n offsetPrefix: plannedTasksMessages.offsetTooltipDelay,\n offsetText: offsetText\n }));\n this._adjustTooltipDimensions(tooltip, rowOffset, contentOffset, left, contentScrollLeft);\n },\n _removeOffsetTooltip: function () {\n if (this._offsetTooltip) {\n this._offsetTooltip.remove();\n }\n this._offsetTooltip = null;\n },\n _createPlannedTooltip: function (task, element, mouseLeft) {\n var styles = GanttView.styles;\n var content = this.content;\n var contentOffset = content.offset();\n var contentScrollLeft = kendo.scrollLeft(content);\n var row = element.parents('tr').first();\n var rowOffset = row.offset();\n var left = isRtl ? mouseLeft - (contentOffset.left + contentScrollLeft + kendo.support.scrollbar()) : mouseLeft - (contentOffset.left - contentScrollLeft);\n var top = rowOffset.top + outerHeight(row) - contentOffset.top + content.scrollTop();\n var tooltip = this._plannedTooltip = $('
');\n var editorMessages = this.options.messages.editor;\n tooltip.css({\n 'left': left,\n 'top': top\n }).appendTo(content).append(PLANNED_TOOLTIP_TEMPLATE({\n plannedStart: editorMessages.plannedStart,\n startDate: kendo.toString(task.plannedStart, 'H:mm tt ddd, MMM dd'),\n plannedEnd: editorMessages.plannedEnd,\n endDate: kendo.toString(task.plannedEnd, 'H:mm tt ddd, MMM dd')\n }));\n this._adjustTooltipDimensions(tooltip, rowOffset, contentOffset, left, contentScrollLeft);\n },\n _removePlannedTooltip: function () {\n if (this._plannedTooltip) {\n this._plannedTooltip.remove();\n }\n this._plannedTooltip = null;\n },\n _adjustTooltipDimensions: function (tooltip, rowOffset, contentOffset, left, contentScrollLeft) {\n var content = this.content;\n var contentWidth = content.width();\n var tooltipWidth;\n if (outerHeight(tooltip) < rowOffset.top - contentOffset.top) {\n tooltip.css('top', rowOffset.top - contentOffset.top - outerHeight(tooltip) + content.scrollTop());\n }\n tooltipWidth = outerWidth(tooltip);\n if (tooltipWidth + left - contentScrollLeft > contentWidth) {\n left -= tooltipWidth;\n if (left < contentScrollLeft) {\n left = contentScrollLeft + contentWidth - (tooltipWidth + 17);\n }\n tooltip.css('left', left);\n }\n },\n _scrollTo: function (element) {\n var elementLeft = element.offset().left;\n var elementWidth = element.width();\n var elementRight = elementLeft + elementWidth;\n var row = element.closest('tr');\n var rowTop = row.offset().top;\n var rowHeight = row.height();\n var rowBottom = rowTop + rowHeight;\n var content = this.content;\n var contentOffset = content.offset();\n var contentTop = contentOffset.top;\n var contentHeight = content.height();\n var contentBottom = contentTop + contentHeight;\n var contentLeft = contentOffset.left;\n var contentWidth = content.width();\n var contentRight = contentLeft + contentWidth;\n var scrollbarWidth = kendo.support.scrollbar();\n if (rowTop < contentTop) {\n content.scrollTop(content.scrollTop() + (rowTop - contentTop));\n } else if (rowBottom > contentBottom) {\n content.scrollTop(content.scrollTop() + (rowBottom + scrollbarWidth - contentBottom));\n }\n if (elementLeft < contentLeft && elementWidth > contentWidth && elementRight < contentRight || elementRight > contentRight && elementWidth < contentWidth) {\n content.scrollLeft(content.scrollLeft() + (elementRight + scrollbarWidth - contentRight));\n } else if (elementRight > contentRight && elementWidth > contentWidth && elementLeft > contentLeft || elementLeft < contentLeft && elementWidth < contentWidth) {\n content.scrollLeft(content.scrollLeft() + (elementLeft - contentLeft));\n }\n },\n _scrollToDate: function (date) {\n var viewStart = this.start;\n var viewEnd = this.end;\n var offset;\n if (date >= viewStart && date < viewEnd) {\n offset = this._offset(date);\n if (kendo.support.isRtl(this.element)) {\n offset = this._tableWidth - offset;\n }\n kendo.scrollLeft(this.content, offset);\n }\n },\n _timeSlots: function () {\n if (!this._slots || !this._slots.length) {\n return [];\n }\n return this._slots[this._slots.length - 1];\n },\n _headers: function (columnLevels) {\n var rows = [];\n var level;\n var headers;\n var column;\n var headerText;\n var styles = GanttView.styles;\n for (var levelIndex = 0, levelCount = columnLevels.length; levelIndex < levelCount; levelIndex++) {\n level = columnLevels[levelIndex];\n headers = [];\n for (var columnIndex = 0, columnCount = level.length; columnIndex < columnCount; columnIndex++) {\n column = level[columnIndex];\n headerText = kendoHtmlElement(column.text);\n headers.push(kendoDomElement('td', {\n colspan: column.span,\n className: styles.header + (column.isNonWorking ? ' ' + styles.nonWorking : '')\n }, [headerText]));\n }\n rows.push(kendoDomElement('tr', null, headers));\n }\n return rows;\n },\n _hours: function (start, end) {\n var slotEnd;\n var slots = [];\n var options = this.options;\n var workDayStart = options.workDayStart.getHours();\n var workDayEnd = options.workDayEnd.getHours();\n var isWorkHour;\n var hours;\n var hourSpan = options.hourSpan;\n start = new Date(start);\n end = new Date(end);\n if (options.showWorkHours) {\n start.setHours(workDayStart);\n }\n while (start < end) {\n slotEnd = new Date(start);\n hours = slotEnd.getHours();\n isWorkHour = hours >= workDayStart && hours < workDayEnd;\n slotEnd.setHours(slotEnd.getHours() + hourSpan);\n if (hours == slotEnd.getHours()) {\n slotEnd.setHours(slotEnd.getHours() + 2 * hourSpan);\n }\n if (!options.showWorkHours || isWorkHour) {\n slots.push({\n start: start,\n end: slotEnd,\n isNonWorking: !isWorkHour,\n span: 1\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _days: function (start, end) {\n var slotEnd;\n var slots = [];\n var isWorkDay;\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = end < kendo.date.nextDay(start) ? end : kendo.date.nextDay(start);\n isWorkDay = this._isWorkDay(start);\n if (!this.options.showWorkDays || isWorkDay) {\n slots.push({\n start: start,\n end: slotEnd,\n isNonWorking: !isWorkDay,\n span: 1\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _weeks: function (start, end) {\n var slotEnd;\n var slots = [];\n var firstDay = this.calendarInfo().firstDay;\n var daySlots;\n var span;\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = kendo.date.dayOfWeek(kendo.date.addDays(start, 1), firstDay, 1);\n if (slotEnd > end) {\n slotEnd = end;\n }\n daySlots = this._days(start, slotEnd);\n span = daySlots.length;\n if (span > 0) {\n slots.push({\n start: daySlots[0].start,\n end: daySlots[span - 1].end,\n span: span\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _months: function (start, end) {\n var slotEnd;\n var endMonth;\n var slots = [];\n var daySlots;\n var span;\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = new Date(start);\n endMonth = kendo.date.firstDayOfMonth(new Date(slotEnd.setMonth(slotEnd.getMonth() + 1)));\n slotEnd = end < endMonth ? end : endMonth;\n daySlots = this._days(start, slotEnd);\n span = daySlots.length;\n if (span > 0) {\n slots.push({\n start: daySlots[0].start,\n end: daySlots[span - 1].end,\n span: span\n });\n }\n start = slotEnd;\n }\n return slots;\n },\n _years: function (start, end) {\n var slotEnd;\n var monthSpan;\n var endMonth;\n var slots = [];\n start = new Date(start);\n end = new Date(end);\n while (start < end) {\n slotEnd = new Date(start);\n slotEnd = kendo.date.firstDayOfMonth(new Date(slotEnd.setMonth(12)));\n if (slotEnd >= end) {\n slotEnd = end;\n }\n endMonth = slotEnd.getMonth() || 12;\n monthSpan = endMonth - start.getMonth();\n slots.push({\n start: start,\n end: slotEnd,\n span: monthSpan\n });\n start = slotEnd;\n }\n return slots;\n },\n _slotHeaders: function (slots, template) {\n var columns = [];\n var slot;\n for (var i = 0, l = slots.length; i < l; i++) {\n slot = slots[i];\n columns.push({\n text: template(slot),\n isNonWorking: !!slot.isNonWorking,\n span: slot.span\n });\n }\n return columns;\n },\n _isWorkDay: function (date) {\n var day = date.getDay();\n var workDays = this._workDays;\n for (var i = 0, l = workDays.length; i < l; i++) {\n if (workDays[i] === day) {\n return true;\n }\n }\n return false;\n },\n calendarInfo: function () {\n return kendo.getCulture().calendars.standard;\n },\n _renderCurrentTime: function () {\n var currentTime = this._getCurrentTime();\n var timeOffset = this._offset(currentTime);\n var element = $('
');\n var viewStyles = GanttView.styles;\n var tablesWrap = this.element.find(DOT + viewStyles.tasksWrapper);\n var tasksTable = this.element.find(DOT + viewStyles.tasksTable);\n var slot;\n if (!this.content || !this._timeSlots().length) {\n return;\n }\n this.content.find('.k-current-time').remove();\n slot = this._timeSlots()[this._slotIndex('start', currentTime)];\n if (currentTime < slot.start || currentTime > slot.end) {\n return;\n }\n if (tablesWrap.length && tasksTable.length) {\n timeOffset += tasksTable.offset().left - tablesWrap.offset().left;\n }\n element.css({\n left: timeOffset + 'px',\n top: '0px',\n width: '1px',\n height: this._contentHeight + 'px'\n }).appendTo(this.content);\n },\n _getCurrentTime: function () {\n return new Date();\n },\n _currentTime: function () {\n var markerOptions = this.options.currentTimeMarker;\n if (markerOptions !== false && markerOptions.updateInterval !== undefined) {\n this._renderCurrentTime();\n this._currentTimeUpdateTimer = setInterval(proxy(this._renderCurrentTime, this), markerOptions.updateInterval);\n }\n }\n });\n extend(true, GanttView, { styles: viewStyles });\n kendo.ui.GanttDayView = GanttView.extend({\n name: 'day',\n options: {\n timeHeaderTemplate: TIME_HEADER_TEMPLATE,\n dayHeaderTemplate: DAY_HEADER_TEMPLATE,\n resizeTooltipFormat: 'h:mm tt ddd, MMM d'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n this.start = kendo.date.getDate(range.start);\n this.end = kendo.date.getDate(range.end);\n if (kendo.date.getMilliseconds(range.end) > 0 || this.end.getTime() === this.start.getTime()) {\n this.end = kendo.date.addDays(this.end, 1);\n }\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.getDate(optionsRange.start);\n this.start.setHours(optionsRange.start.getHours());\n }\n if (optionsRange && optionsRange.end) {\n this.end = kendo.date.getDate(optionsRange.end);\n this.end.setHours(optionsRange.end.getHours());\n }\n },\n _createSlots: function () {\n var daySlots;\n var daySlot;\n var hourSlots;\n var hours;\n var slots = [];\n daySlots = this._days(this.start, this.end);\n hourSlots = [];\n for (var i = 0, l = daySlots.length; i < l; i++) {\n daySlot = daySlots[i];\n hours = this._hours(daySlot.start, daySlot.end);\n daySlot.span = hours.length;\n hourSlots.push.apply(hourSlots, hours);\n }\n slots.push(daySlots);\n slots.push(hourSlots);\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.dayHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.timeHeaderTemplate)));\n return rows;\n }\n });\n kendo.ui.GanttWeekView = GanttView.extend({\n name: 'week',\n options: {\n dayHeaderTemplate: DAY_HEADER_TEMPLATE,\n weekHeaderTemplate: WEEK_HEADER_TEMPLATE,\n resizeTooltipFormat: 'h:mm tt ddd, MMM d'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n var calendarInfo = this.calendarInfo();\n var firstDay = calendarInfo.firstDay;\n var rangeEnd = range.end;\n var endDay;\n if (firstDay === rangeEnd.getDay()) {\n rangeEnd.setDate(rangeEnd.getDate() + 7);\n }\n this.start = kendo.date.getDate(kendo.date.dayOfWeek(range.start, firstDay, -1));\n this.end = kendo.date.getDate(kendo.date.dayOfWeek(rangeEnd, firstDay, 1));\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.getDate(optionsRange.start);\n }\n if (optionsRange && optionsRange.end) {\n endDay = new Date(optionsRange.end);\n if (kendo.date.getDate(endDay) < optionsRange.end) {\n this.end = kendo.date.getDate(new Date(endDay.setDate(endDay.getDate() + 1)));\n } else {\n this.end = kendo.date.getDate(endDay);\n }\n }\n },\n _createSlots: function () {\n var slots = [];\n slots.push(this._weeks(this.start, this.end));\n slots.push(this._days(this.start, this.end));\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.weekHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.dayHeaderTemplate)));\n return rows;\n }\n });\n kendo.ui.GanttMonthView = GanttView.extend({\n name: 'month',\n options: {\n weekHeaderTemplate: WEEK_HEADER_TEMPLATE,\n monthHeaderTemplate: MONTH_HEADER_TEMPLATE,\n resizeTooltipFormat: 'dddd, MMM d, yyyy'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n var endDay;\n this.start = kendo.date.firstDayOfMonth(range.start);\n this.end = kendo.date.addDays(kendo.date.getDate(kendo.date.lastDayOfMonth(range.end)), 1);\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.getDate(optionsRange.start);\n }\n if (optionsRange && optionsRange.end) {\n endDay = new Date(optionsRange.end);\n if (kendo.date.getDate(endDay) < optionsRange.end) {\n this.end = kendo.date.getDate(new Date(endDay.setDate(endDay.getDate() + 1)));\n } else {\n this.end = kendo.date.getDate(endDay);\n }\n }\n },\n _createSlots: function () {\n var slots = [];\n slots.push(this._months(this.start, this.end));\n slots.push(this._weeks(this.start, this.end));\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.monthHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.weekHeaderTemplate)));\n return rows;\n }\n });\n kendo.ui.GanttYearView = GanttView.extend({\n name: 'year',\n options: {\n yearHeaderTemplate: YEAR_HEADER_TEMPLATE,\n monthHeaderTemplate: MONTH_HEADER_TEMPLATE,\n resizeTooltipFormat: 'dddd, MMM d, yyyy'\n },\n range: function (range) {\n var optionsRange = this.options.range;\n var firstDayOfMonth;\n this.start = kendo.date.firstDayOfMonth(new Date(range.start.setMonth(0)));\n this.end = kendo.date.firstDayOfMonth(new Date(range.end.setMonth(12)));\n if (optionsRange && optionsRange.start) {\n this.start = kendo.date.firstDayOfMonth(optionsRange.start);\n }\n if (optionsRange && optionsRange.end) {\n firstDayOfMonth = kendo.date.firstDayOfMonth(optionsRange.end);\n this.end = kendo.date.getDate(new Date(firstDayOfMonth.setMonth(firstDayOfMonth.getMonth() + 1)));\n }\n },\n _createSlots: function () {\n var slots = [];\n var monthSlots = this._months(this.start, this.end);\n $(monthSlots).each(function (index, slot) {\n slot.span = 1;\n });\n slots.push(this._years(this.start, this.end));\n slots.push(monthSlots);\n return slots;\n },\n _layout: function () {\n var rows = [];\n var options = this.options;\n rows.push(this._slotHeaders(this._slots[0], kendo.template(options.yearHeaderTemplate)));\n rows.push(this._slotHeaders(this._slots[1], kendo.template(options.monthHeaderTemplate)));\n return rows;\n }\n });\n var timelineStyles = {\n wrapper: 'k-timeline k-grid k-widget',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n gridContentWrap: 'k-grid-content',\n tasksWrapper: 'k-gantt-tables',\n dependenciesWrapper: 'k-gantt-dependencies',\n task: 'k-task',\n taskOffset: 'k-task-offset',\n taskOffsetWrap: 'k-task-offset-wrap',\n taskPlanned: 'k-task-planned',\n line: 'k-gantt-line',\n taskResizeHandle: 'k-resize-handle',\n taskResizeHandleWest: 'k-resize-w',\n taskDragHandle: 'k-task-draghandle',\n taskComplete: 'k-task-complete',\n taskDelete: 'k-task-delete',\n taskWrapActive: 'k-task-wrap-active',\n taskWrap: 'k-task-wrap',\n taskDot: 'k-task-dot',\n taskDotStart: 'k-task-start',\n taskDotEnd: 'k-task-end',\n hovered: 'k-state-hover',\n selected: 'k-state-selected',\n origin: 'k-origin'\n };\n var GanttTimeline = kendo.ui.GanttTimeline = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n if (!this.options.views || !this.options.views.length) {\n this.options.views = [\n 'day',\n 'week',\n 'month'\n ];\n }\n isRtl = kendo.support.isRtl(element);\n this._wrapper();\n this._domTrees();\n this._views();\n this._selectable();\n this._draggable();\n this._resizable();\n this._percentResizeDraggable();\n this._createDependencyDraggable();\n this._attachEvents();\n this._tooltip();\n },\n options: {\n name: 'GanttTimeline',\n messages: {\n views: {\n day: 'Day',\n week: 'Week',\n month: 'Month',\n year: 'Year',\n start: 'Start',\n end: 'End'\n }\n },\n snap: true,\n selectable: true,\n editable: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n clearTimeout(this._tooltipTimeout);\n if (this._currentTimeUpdateTimer) {\n clearInterval(this._currentTimeUpdateTimer);\n }\n this._unbindView(this._selectedView);\n if (this._moveDraggable) {\n this._moveDraggable.destroy();\n }\n if (this._resizeDraggable) {\n this._resizeDraggable.destroy();\n }\n if (this._percentDraggable) {\n this._percentDraggable.destroy();\n }\n if (this._dependencyDraggable) {\n this._dependencyDraggable.destroy();\n }\n if (this.touch) {\n this.touch.destroy();\n }\n this._headerTree = null;\n this._taskTree = null;\n this._dependencyTree = null;\n this.wrapper.off(NS);\n kendo.destroy(this.wrapper);\n },\n _wrapper: function () {\n var styles = GanttTimeline.styles;\n var that = this;\n var options = this.options;\n var calculateSize = function () {\n var rowHeight = typeof options.rowHeight === STRING ? options.rowHeight : options.rowHeight + 'px';\n var table = $(kendo.format(SIZE_CALCULATION_TEMPLATE, rowHeight));\n var calculatedRowHeight;\n var calculatedCellHeight;\n var content = that.wrapper.find(DOT + styles.tasksWrapper);\n content.append(table);\n calculatedRowHeight = outerHeight(table.find('tr'));\n calculatedCellHeight = table.find('td').height();\n table.remove();\n return {\n 'row': calculatedRowHeight,\n 'cell': calculatedCellHeight\n };\n };\n this.wrapper = this.element.addClass(styles.wrapper).append('
').append('
');\n if (options.rowHeight) {\n this._calculatedSize = calculateSize();\n }\n },\n _domTrees: function () {\n var styles = GanttTimeline.styles;\n var tree = kendo.dom.Tree;\n var wrapper = this.wrapper;\n this._headerTree = new tree(wrapper.find(DOT + styles.gridHeaderWrap)[0]);\n this._taskTree = new tree(wrapper.find(DOT + styles.tasksWrapper)[0]);\n this._dependencyTree = new tree(wrapper.find(DOT + styles.dependenciesWrapper)[0]);\n },\n _views: function () {\n var views = this.options.views;\n var view;\n var isSettings;\n var name;\n var defaultView;\n var selected;\n this.views = {};\n for (var i = 0, l = views.length; i < l; i++) {\n view = views[i];\n isSettings = isPlainObject(view);\n if (isSettings && view.selectable === false) {\n continue;\n }\n name = isSettings ? typeof view.type !== 'string' ? view.title : view.type : view;\n defaultView = defaultViews[name];\n if (defaultView) {\n if (isSettings) {\n view.type = defaultView.type;\n }\n defaultView.title = this.options.messages.views[name];\n }\n view = extend({ title: name }, defaultView, isSettings ? view : {});\n if (name) {\n this.views[name] = view;\n if (!selected || view.selected) {\n selected = name;\n }\n }\n }\n if (selected) {\n this._selectedViewName = selected;\n }\n },\n view: function (name) {\n if (name) {\n this._selectView(name);\n this.trigger('navigate', {\n view: name,\n action: 'changeView'\n });\n }\n return this._selectedView;\n },\n _selectView: function (name) {\n if (name && this.views[name]) {\n if (this._selectedView) {\n this._unbindView(this._selectedView);\n }\n this._selectedView = this._initializeView(name);\n this._selectedViewName = name;\n }\n },\n _viewByIndex: function (index) {\n var view;\n var views = this.views;\n for (view in views) {\n if (!index) {\n return view;\n }\n index--;\n }\n },\n _initializeView: function (name) {\n var view = this.views[name];\n if (view) {\n var type = view.type;\n if (typeof type === 'string') {\n type = kendo.getter(view.type)(window);\n }\n if (type) {\n var newRange = {};\n extend(newRange, this.options.range, view.range);\n var newDate = view.date || this.options.date;\n view = new type(this.wrapper, trimOptions(extend(true, {\n headerTree: this._headerTree,\n taskTree: this._taskTree,\n dependencyTree: this._dependencyTree,\n calculatedSize: this._calculatedSize\n }, view, this.options, {\n date: newDate,\n range: newRange\n })));\n } else {\n throw new Error('There is no such view');\n }\n }\n return view;\n },\n _unbindView: function (view) {\n if (view) {\n view.destroy();\n }\n },\n _range: function (tasks) {\n var startOrder = {\n field: 'start',\n dir: 'asc'\n };\n var endOrder = {\n field: 'end',\n dir: 'desc'\n };\n if (!tasks || !tasks.length) {\n return {\n start: new Date(),\n end: new Date()\n };\n }\n var start = new Query(tasks).sort(startOrder).toArray()[0].start || new Date();\n var end = new Query(tasks).sort(endOrder).toArray()[0].end || new Date();\n return {\n start: new Date(start),\n end: new Date(end)\n };\n },\n _render: function (tasks) {\n var view = this.view();\n var range = this._range(tasks);\n var date = view.options.date;\n this._tasks = tasks;\n view.range(range);\n view.renderLayout();\n view.render(tasks);\n if (date) {\n view._scrollToDate(date);\n }\n },\n _renderDependencies: function (dependencies) {\n this.view()._renderDependencies(dependencies);\n },\n _taskByUid: function (uid) {\n var tasks = this._tasks;\n var length = tasks.length;\n var task;\n for (var i = 0; i < length; i++) {\n task = tasks[i];\n if (task.uid === uid) {\n return task;\n }\n }\n },\n _draggable: function () {\n var that = this;\n var element;\n var task;\n var currentStart;\n var startOffset;\n var snap = this.options.snap;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n var cleanUp = function () {\n that.view()._removeDragHint();\n if (element) {\n element.css('opacity', 1);\n }\n element = null;\n task = null;\n that.dragInProgress = false;\n };\n if (!editable || editable.move === false || editable.update === false) {\n return;\n }\n this._moveDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.task + ',' + DOT + styles.taskOffset,\n holdToDrag: kendo.support.mobileOS,\n ignore: DOT + styles.taskResizeHandle\n });\n this._moveDraggable.bind('dragstart', function (e) {\n var view = that.view();\n element = e.currentTarget.closest(DOT + styles.taskWrap);\n task = that._taskByUid(e.currentTarget.parent().find(DOT + styles.task).attr('data-uid'));\n if (that.trigger('moveStart', { task: task })) {\n e.preventDefault();\n return;\n }\n currentStart = task.start;\n startOffset = view._timeByPosition(e.x.location, snap) - currentStart;\n view._createDragHint(element);\n element.css('opacity', 0.5);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n var view = that.view();\n var date = new Date(view._timeByPosition(e.x.location, snap) - startOffset);\n var updateHintDate = date;\n if (!that.trigger('move', {\n task: task,\n start: date\n })) {\n currentStart = date;\n if (isRtl) {\n updateHintDate = new Date(currentStart.getTime() + task.duration());\n }\n view._updateDragHint(updateHintDate);\n }\n }, 15)).bind('dragend', function () {\n that.trigger('moveEnd', {\n task: task,\n start: currentStart\n });\n cleanUp();\n }).bind('dragcancel', function () {\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _resizable: function () {\n var that = this;\n var element;\n var task;\n var currentStart;\n var currentEnd;\n var resizeStart;\n var snap = this.options.snap;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n var cleanUp = function () {\n that.view()._removeResizeHint();\n element = null;\n task = null;\n that.dragInProgress = false;\n };\n if (!editable || editable.resize === false || editable.update === false) {\n return;\n }\n this._resizeDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.taskResizeHandle,\n holdToDrag: false\n });\n this._resizeDraggable.bind('dragstart', function (e) {\n resizeStart = e.currentTarget.hasClass(styles.taskResizeHandleWest);\n if (isRtl) {\n resizeStart = !resizeStart;\n }\n element = e.currentTarget.closest(DOT + styles.taskWrap).find(DOT + styles.task);\n task = that._taskByUid(element.attr('data-uid'));\n if (that.trigger('resizeStart', { task: task })) {\n e.preventDefault();\n return;\n }\n currentStart = task.start;\n currentEnd = task.end;\n that.view()._createResizeHint(task);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n var view = that.view();\n var date = view._timeByPosition(e.x.location, snap, !resizeStart);\n if (resizeStart) {\n if (date < currentEnd) {\n currentStart = date;\n } else {\n currentStart = currentEnd;\n }\n } else {\n if (date > currentStart) {\n currentEnd = date;\n } else {\n currentEnd = currentStart;\n }\n }\n if (!that.trigger('resize', {\n task: task,\n start: currentStart,\n end: currentEnd\n })) {\n view._updateResizeHint(currentStart, currentEnd, resizeStart);\n }\n }, 15)).bind('dragend', function () {\n that.trigger('resizeEnd', {\n task: task,\n resizeStart: resizeStart,\n start: currentStart,\n end: currentEnd\n });\n cleanUp();\n }).bind('dragcancel', function () {\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _percentResizeDraggable: function () {\n var that = this;\n var task;\n var taskElement;\n var taskElementOffset;\n var timelineOffset;\n var originalPercentWidth;\n var maxPercentWidth;\n var currentPercentComplete;\n var tooltipTop;\n var tooltipLeft;\n var styles = GanttTimeline.styles;\n var delta;\n var editable = this.options.editable;\n var cleanUp = function () {\n that.view()._removePercentCompleteTooltip();\n taskElement = null;\n task = null;\n that.dragInProgress = false;\n };\n var updateElement = function (width) {\n var taskDragHandle = taskElement.siblings(DOT + styles.taskDragHandle);\n if (!taskDragHandle.length) {\n taskDragHandle = taskElement.closest(DOT + styles.taskWrap).find(DOT + styles.taskDragHandle);\n }\n taskDragHandle.css(isRtl ? 'right' : 'left', width);\n taskElement.find(DOT + styles.taskComplete).width(width);\n };\n if (!editable || editable.dragPercentComplete === false || editable.update === false) {\n return;\n }\n this._percentDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.taskDragHandle,\n holdToDrag: false\n });\n this._percentDraggable.bind('dragstart', function (e) {\n if (that.trigger('percentResizeStart')) {\n e.preventDefault();\n return;\n }\n taskElement = e.currentTarget.siblings(DOT + styles.task);\n if (!taskElement.length) {\n taskElement = e.currentTarget.closest(DOT + styles.taskWrap).find(DOT + styles.task);\n }\n task = that._taskByUid(taskElement.attr('data-uid'));\n currentPercentComplete = task.percentComplete;\n taskElementOffset = taskElement.offset();\n timelineOffset = this.element.offset();\n originalPercentWidth = taskElement.find(DOT + styles.taskComplete).width();\n maxPercentWidth = outerWidth(taskElement);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n delta = isRtl ? -e.x.initialDelta : e.x.initialDelta;\n var currentWidth = Math.max(0, Math.min(maxPercentWidth, originalPercentWidth + delta));\n currentPercentComplete = Math.round(currentWidth / maxPercentWidth * 100);\n updateElement(currentWidth);\n tooltipTop = taskElementOffset.top - timelineOffset.top;\n tooltipLeft = taskElementOffset.left + currentWidth - timelineOffset.left;\n if (isRtl) {\n tooltipLeft += maxPercentWidth - 2 * currentWidth;\n }\n that.view()._updatePercentCompleteTooltip(tooltipTop, tooltipLeft, currentPercentComplete);\n }, 15)).bind('dragend', function () {\n that.trigger('percentResizeEnd', {\n task: task,\n percentComplete: currentPercentComplete / 100\n });\n cleanUp();\n }).bind('dragcancel', function () {\n updateElement(originalPercentWidth);\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _createDependencyDraggable: function () {\n var that = this;\n var originalHandle;\n var hoveredHandle = $();\n var hoveredTask = $();\n var startX;\n var startY;\n var useVML = browser.msie && browser.version < 9;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n var cleanUp = function () {\n originalHandle.css('display', '').removeClass(styles.hovered);\n originalHandle.parent().removeClass(styles.origin);\n originalHandle = null;\n toggleHandles(false);\n hoveredTask = $();\n hoveredHandle = $();\n that.view()._removeDependencyDragHint();\n that.dragInProgress = false;\n };\n var toggleHandles = function (value) {\n if (!hoveredTask.hasClass(styles.origin)) {\n hoveredTask.find(DOT + styles.taskDot).css('display', value ? 'block' : '');\n hoveredHandle.toggleClass(styles.hovered, value);\n }\n };\n if (!editable || editable.dependencyCreate === false) {\n return;\n }\n if (useVML && document.namespaces) {\n document.namespaces.add('kvml', 'urn:schemas-microsoft-com:vml', '#default#VML');\n }\n this._dependencyDraggable = new kendo.ui.Draggable(this.wrapper, {\n distance: 0,\n filter: DOT + styles.taskDot,\n holdToDrag: false\n });\n this._dependencyDraggable.bind('dragstart', function (e) {\n if (that.trigger('dependencyDragStart')) {\n e.preventDefault();\n return;\n }\n originalHandle = e.currentTarget.css('display', 'block').addClass(styles.hovered);\n originalHandle.parent().addClass(styles.origin);\n var elementOffset = originalHandle.offset();\n var tablesOffset = that.wrapper.find(DOT + styles.tasksWrapper).offset();\n startX = Math.round(elementOffset.left - tablesOffset.left + outerHeight(originalHandle) / 2);\n startY = Math.round(elementOffset.top - tablesOffset.top + outerWidth(originalHandle) / 2);\n clearTimeout(that._tooltipTimeout);\n that.dragInProgress = true;\n }).bind('drag', kendo.throttle(function (e) {\n if (!that.dragInProgress) {\n return;\n }\n that.view()._removeDependencyDragHint();\n var target = $(kendo.elementUnderCursor(e));\n var tablesOffset = that.wrapper.find(DOT + styles.tasksWrapper).offset();\n var currentX = e.x.location - tablesOffset.left;\n var currentY = e.y.location - tablesOffset.top;\n that.view()._updateDependencyDragHint({\n x: startX,\n y: startY\n }, {\n x: currentX,\n y: currentY\n }, useVML);\n toggleHandles(false);\n hoveredHandle = target.hasClass(styles.taskDot) ? target : $();\n hoveredTask = target.closest(DOT + styles.taskWrap);\n toggleHandles(true);\n }, 15)).bind('dragend', function () {\n if (hoveredHandle.length) {\n var fromStart = originalHandle.hasClass(styles.taskDotStart);\n var toStart = hoveredHandle.hasClass(styles.taskDotStart);\n var type = fromStart ? toStart ? 3 : 2 : toStart ? 1 : 0;\n var predecessorElement = originalHandle.siblings(DOT + styles.task);\n if (!predecessorElement.length) {\n predecessorElement = originalHandle.closest(DOT + styles.taskWrap).find(DOT + styles.task);\n }\n var predecessor = that._taskByUid(predecessorElement.attr('data-uid'));\n var successorElement = hoveredHandle.siblings(DOT + styles.task);\n if (!successorElement.length) {\n successorElement = hoveredHandle.closest(DOT + styles.taskWrap).find(DOT + styles.task);\n }\n var successor = that._taskByUid(successorElement.attr('data-uid'));\n if (predecessor !== successor) {\n that.trigger('dependencyDragEnd', {\n type: type,\n predecessor: predecessor,\n successor: successor\n });\n }\n }\n cleanUp();\n }).bind('dragcancel', function () {\n cleanUp();\n }).userEvents.bind('select', function () {\n blurActiveElement();\n });\n },\n _selectable: function () {\n var that = this;\n var styles = GanttTimeline.styles;\n if (this.options.selectable) {\n this.wrapper.on(CLICK + NS, DOT + styles.task + ',' + DOT + styles.taskOffset, function (e) {\n e.stopPropagation();\n var uid = $(this).attr('data-uid');\n if (!uid) {\n uid = $(this).closest(DOT + styles.taskWrap).find(DOT + styles.task).data('uid');\n }\n if (!e.ctrlKey) {\n that.trigger('select', { uid: uid });\n } else {\n that.trigger('clear');\n }\n }).on(CLICK + NS, DOT + styles.taskWrap, function (e) {\n e.stopPropagation();\n $(this).css('z-index', '0');\n var target = $(document.elementFromPoint(e.clientX, e.clientY));\n if (target.hasClass(styles.line)) {\n target.click();\n }\n $(this).css('z-index', '');\n }).on(CLICK + NS, DOT + styles.tasksWrapper, function () {\n if (that.selectDependency().length > 0) {\n that.clearSelection();\n } else {\n that.trigger('clear');\n }\n }).on(CLICK + NS, DOT + styles.line, function (e) {\n e.stopPropagation();\n that.selectDependency(this);\n });\n }\n },\n select: function (value) {\n var element = this.wrapper.find(value);\n var styles = GanttTimeline.styles;\n if (element.length) {\n this.clearSelection();\n element.addClass(styles.selected);\n if (kendo.support.mobileOS) {\n element.parent().addClass(styles.taskWrapActive);\n }\n return;\n }\n return this.wrapper.find(DOT + styles.task + DOT + styles.selected);\n },\n selectDependency: function (value) {\n var element = this.wrapper.find(value);\n var uid;\n var styles = GanttTimeline.styles;\n if (element.length) {\n this.clearSelection();\n this.trigger('clear');\n uid = $(element).attr('data-uid');\n this.wrapper.find(DOT + styles.line + '[data-uid=\\'' + uid + '\\']').addClass(styles.selected);\n return;\n }\n return this.wrapper.find(DOT + styles.line + DOT + styles.selected);\n },\n clearSelection: function () {\n var styles = GanttTimeline.styles;\n this.wrapper.find(DOT + styles.selected).removeClass(styles.selected);\n if (kendo.support.mobileOS) {\n this.wrapper.find(DOT + styles.taskWrapActive).removeClass(styles.taskWrapActive);\n }\n },\n _attachEvents: function () {\n var that = this;\n var styles = GanttTimeline.styles;\n var editable = this.options.editable;\n if (editable) {\n this._tabindex();\n this.wrapper.on(CLICK + NS, DOT + styles.taskDelete, function (e) {\n that.trigger('removeTask', { uid: $(this).closest(DOT + styles.taskWrap).find(DOT + styles.task).attr('data-uid') });\n e.stopPropagation();\n e.preventDefault();\n }).on(KEYDOWN + NS, function (e) {\n var selectedDependency;\n var editable = that.options.editable;\n if (e.keyCode === keys.DELETE && editable && editable.dependencyDestroy !== false) {\n selectedDependency = that.selectDependency();\n if (selectedDependency.length) {\n that.trigger('removeDependency', { uid: selectedDependency.attr('data-uid') });\n that.clearSelection();\n }\n }\n });\n if (!kendo.support.mobileOS) {\n this.wrapper.on(DBLCLICK + NS, DOT + styles.task + ',' + DOT + styles.taskOffset, function (e) {\n if (that.options.editable.update !== false) {\n that.trigger('editTask', { uid: $(this).closest(DOT + styles.taskWrap).find(DOT + styles.task).attr('data-uid') });\n e.stopPropagation();\n e.preventDefault();\n }\n });\n } else {\n this.touch = this.wrapper.kendoTouch({\n filter: DOT + styles.task + ',' + DOT + styles.taskOffset,\n doubletap: function (e) {\n if (that.options.editable.update !== false) {\n that.trigger('editTask', { uid: $(e.touch.currentTarget).closest(DOT + styles.taskWrap).find(DOT + styles.task).attr('data-uid') });\n }\n }\n }).data('kendoTouch');\n }\n }\n },\n _tooltip: function () {\n var that = this;\n var tooltipOptions = this.options.tooltip;\n var styles = GanttTimeline.styles;\n var currentMousePosition;\n var mouseMoveHandler = function (e) {\n currentMousePosition = e.clientX;\n };\n if (tooltipOptions && tooltipOptions.visible === false) {\n return;\n }\n if (!kendo.support.mobileOS) {\n this.wrapper.on(MOUSEENTER + NS, DOT + styles.task, function () {\n var element = this;\n var task = that._taskByUid($(this).attr('data-uid'));\n if (that.dragInProgress) {\n return;\n }\n that._tooltipTimeout = setTimeout(function () {\n that.view()._createTaskTooltip(task, element, currentMousePosition);\n }, 800);\n $(this).on(MOUSEMOVE, mouseMoveHandler);\n }).on(MOUSELEAVE + NS, DOT + styles.task, function () {\n clearTimeout(that._tooltipTimeout);\n that.view()._removeTaskTooltip();\n $(this).off(MOUSEMOVE, mouseMoveHandler);\n }).on(MOUSEENTER + NS, DOT + styles.taskOffset, function () {\n var taskElement = $(this).closest(DOT + styles.taskWrap).find(DOT + styles.task);\n var task = that._taskByUid(taskElement.attr('data-uid'));\n if (that.dragInProgress) {\n return;\n }\n that._offsetTooltipTimeout = setTimeout(function () {\n that.view()._createOffsetTooltip(task, taskElement, currentMousePosition);\n }, 800);\n $(this).on(MOUSEMOVE, mouseMoveHandler);\n }).on(MOUSELEAVE + NS, DOT + styles.taskOffset, function () {\n clearTimeout(that._offsetTooltipTimeout);\n that.view()._removeOffsetTooltip();\n $(this).off(MOUSEMOVE, mouseMoveHandler);\n }).on(MOUSEENTER + NS, DOT + styles.taskPlanned, function () {\n var taskElement = $(this).closest(DOT + styles.taskWrap).find(DOT + styles.task);\n var task = that._taskByUid(taskElement.attr('data-uid'));\n that._plannedTooltipTimeout = setTimeout(function () {\n that.view()._createPlannedTooltip(task, taskElement, currentMousePosition);\n }, 800);\n $(this).on(MOUSEMOVE, mouseMoveHandler);\n }).on(MOUSELEAVE + NS, DOT + styles.taskPlanned, function () {\n clearTimeout(that._plannedTooltipTimeout);\n that.view()._removePlannedTooltip();\n $(this).off(MOUSEMOVE, mouseMoveHandler);\n });\n } else {\n this.wrapper.on(CLICK + NS, DOT + styles.taskDelete, function (e) {\n e.stopPropagation();\n that.view()._removeTaskTooltip();\n }).on(MOUSELEAVE + NS, DOT + styles.task, function (e) {\n var parents = $(e.relatedTarget).parents(DOT + styles.taskWrap, DOT + styles.task);\n if (parents.length === 0) {\n that.view()._removeTaskTooltip();\n }\n }).on(MOUSELEAVE + NS, DOT + styles.taskOffset, function (e) {\n var parents = $(e.relatedTarget).parents(DOT + styles.taskWrap, DOT + styles.task);\n if (parents.length === 0) {\n that.view()._removeOffsetTooltip();\n }\n }).on(MOUSELEAVE + NS, DOT + styles.taskPlanned, function (e) {\n var parents = $(e.relatedTarget).parents(DOT + styles.taskWrap, DOT + styles.task);\n if (parents.length === 0) {\n that.view()._removePlannedTooltip();\n }\n });\n if (this.touch) {\n this.touch.bind('tap', function (e) {\n var element = $(e.touch.target);\n var currentPosition = e.touch.x.client;\n var task;\n if (!element.hasClass(styles.task)) {\n task = that._taskByUid(element.closest(DOT + styles.taskWrap).find(DOT + styles.task).attr('data-uid'));\n if (that.view()._offsetTooltip) {\n that.view()._removeOffsetTooltip();\n }\n that.view()._createOffsetTooltip(task, element, currentPosition);\n } else {\n task = that._taskByUid(element.attr('data-uid'));\n if (that.view()._taskTooltip) {\n that.view()._removeTaskTooltip();\n }\n that.view()._createTaskTooltip(task, element, currentPosition);\n }\n }).bind('doubletap', function () {\n that.view()._removeTaskTooltip();\n that.view()._removeOffsetTooltip();\n });\n }\n }\n },\n _setPlanned: function (value) {\n this.options.showPlannedTasks = value;\n this.view().options.showPlannedTasks = value;\n }\n });\n extend(true, GanttTimeline, { styles: timelineStyles });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}