{"version":3,"file":"kendo.sortable.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","Widget","ui","outerWidth","_outerWidth","outerHeight","_outerHeight","START","BEFORE_MOVE","MOVE","END","CHANGE","CANCEL","ACTION_SORT","ACTION_REMOVE","ACTION_RECEIVE","defaultHint","element","clone","defaultPlaceholder","removeAttr","css","Sortable","extend","init","options","that","this","fn","call","placeholder","hint","draggable","_createDraggable","events","name","filter","holdToDrag","disabled","container","connectWith","handler","cursorOffset","axis","ignore","autoScroll","cursor","moveOnDragEnter","destroy","Draggable","isFunction","dragstart","_dragstart","bind","dragcancel","_dragcancel","drag","_drag","dragend","_dragend","e","draggedElement","currentTarget","_placeholder","is","initialTarget","trigger","item","draggableEvent","preventDefault","before","_setCursor","_cancel","_resetCursor","targetCenter","offsetDelta","direction","sibling","getSibling","target","_findTarget","left","x","location","top","y","axisDelta","delta","eventData","list","_getElementCenter","Math","round","appendToBottom","_movePlaceholder","appendAfterHidden","_isFloating","jQuery","prev","next","length","_movementByAxis","connectedList","isDefaultPrevented","connectedListEventData","draggedIndex","indexOf","placeholderIndex","action","oldIndex","newIndex","parents","getKendoSortable","replaceWith","show","dropped","items","node","_findElementUnderCursor","contains","has","sortable","_isEmpty","_isLastHidden","eq","_searchConnectedTargets","elementUnderCursor","sender","parent","child","containsOrEqualTo","hide","sortableInstance","connected","i","_isCursorAfterLast","last","lastItemOffset","lastItem","getOffset","cursorPosition","after","append","body","document","_originalCursorType","_cursorStylesheet","appendTo","remove","center","isFloating","test","isTable","isHorizontalFlex","_items","find","children","not","index","plugin"],"sources":["kendo.sortable.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.draganddrop'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"sortable\",\n name: \"Sortable\",\n category: \"framework\",\n depends: [ \"draganddrop\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n\n START = \"start\",\n BEFORE_MOVE = \"beforeMove\",\n MOVE = \"move\",\n END = \"end\",\n CHANGE = \"change\",\n CANCEL = \"cancel\",\n\n ACTION_SORT = \"sort\",\n ACTION_REMOVE = \"remove\",\n ACTION_RECEIVE = \"receive\",\n\n DEFAULT_FILTER = \">*\",\n MISSING_INDEX = -1;\n\n function containsOrEqualTo(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n\n function defaultHint(element) {\n return element.clone();\n }\n\n function defaultPlaceholder(element) {\n return element.clone().removeAttr(\"id\").css(\"visibility\", \"hidden\");\n }\n\n var Sortable = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n if (!that.options.placeholder) {\n that.options.placeholder = defaultPlaceholder;\n }\n\n if (!that.options.hint) {\n that.options.hint = defaultHint;\n }\n\n that.draggable = that._createDraggable();\n },\n\n events: [\n START,\n BEFORE_MOVE,\n MOVE,\n END,\n CHANGE,\n CANCEL\n ],\n\n options: {\n name: \"Sortable\",\n hint: null,\n placeholder: null,\n filter: DEFAULT_FILTER,\n holdToDrag: false,\n disabled: null,\n container: null,\n connectWith: null,\n handler: null,\n cursorOffset: null,\n axis: null,\n ignore: null,\n autoScroll: false,\n cursor: \"auto\",\n moveOnDragEnter: false\n },\n\n destroy: function() {\n this.draggable.destroy();\n Widget.fn.destroy.call(this);\n },\n\n _createDraggable: function() {\n var that = this,\n element = that.element,\n options = that.options;\n\n return new kendo.ui.Draggable(element, {\n filter: options.filter,\n hint: kendo.isFunction(options.hint) ? options.hint : $(options.hint),\n holdToDrag: options.holdToDrag,\n container: options.container ? $(options.container) : null,\n cursorOffset: options.cursorOffset,\n axis: options.axis,\n ignore: options.ignore,\n autoScroll: options.autoScroll,\n dragstart: that._dragstart.bind(that),\n dragcancel: that._dragcancel.bind(that),\n drag: that._drag.bind(that),\n dragend: that._dragend.bind(that)\n });\n },\n\n _dragstart: function(e) {\n var draggedElement = this.draggedElement = e.currentTarget,\n disabled = this.options.disabled,\n handler = this.options.handler,\n _placeholder = this.options.placeholder,\n placeholder = this.placeholder = kendo.isFunction(_placeholder) ? $(_placeholder.call(this, draggedElement)) : $(_placeholder);\n\n if (disabled && draggedElement.is(disabled)) {\n e.preventDefault();\n } else if (handler && !$(e.initialTarget).is(handler)) {\n e.preventDefault();\n } else {\n\n if (this.trigger(START, { item: draggedElement, draggableEvent: e })) {\n e.preventDefault();\n } else {\n draggedElement.css(\"display\", \"none\");\n draggedElement.before(placeholder);\n\n this._setCursor();\n }\n\n }\n },\n\n _dragcancel: function() {\n this._cancel();\n this.trigger(CANCEL, { item: this.draggedElement });\n\n this._resetCursor();\n },\n\n _drag: function(e) {\n var draggedElement = this.draggedElement,\n target = this._findTarget(e),\n targetCenter,\n cursorOffset = { left: e.x.location, top: e.y.location },\n offsetDelta,\n axisDelta = { x: e.x.delta, y: e.y.delta },\n direction,\n sibling,\n getSibling,\n axis = this.options.axis,\n moveOnDragEnter = this.options.moveOnDragEnter,\n eventData = { item: draggedElement, list: this, draggableEvent: e };\n\n if (axis === \"x\" || axis === \"y\") {\n this._movementByAxis(axis, cursorOffset, axisDelta[axis], eventData);\n return;\n }\n\n if (target) {\n targetCenter = this._getElementCenter(target.element);\n\n offsetDelta = {\n left: Math.round(cursorOffset.left - targetCenter.left),\n top: Math.round(cursorOffset.top - targetCenter.top)\n };\n\n $.extend(eventData, { target: target.element });\n\n if (target.appendToBottom) {\n this._movePlaceholder(target, null, eventData);\n return;\n }\n\n if (target.appendAfterHidden) {\n this._movePlaceholder(target, \"next\", eventData);\n }\n\n if (this._isFloating(target.element)) { //horizontal\n if ((axisDelta.x < 0 && moveOnDragEnter) || (!moveOnDragEnter && offsetDelta.left < 0)) {\n direction = \"prev\";\n } else if ((axisDelta.x > 0 && moveOnDragEnter) || (!moveOnDragEnter && offsetDelta.left > 0)) {\n direction = \"next\";\n }\n } else { //vertical\n if ((axisDelta.y < 0 && moveOnDragEnter) || (!moveOnDragEnter && offsetDelta.top < 0)) {\n direction = \"prev\";\n } else if ((axisDelta.y > 0 && moveOnDragEnter) || (!moveOnDragEnter && offsetDelta.top > 0)) {\n direction = \"next\";\n }\n }\n\n if (direction) {\n getSibling = (direction === \"prev\") ? jQuery.fn.prev : jQuery.fn.next;\n\n sibling = getSibling.call(target.element);\n\n //find the prev/next visible sibling\n while (sibling.length && !sibling.is(\":visible\")) {\n sibling = getSibling.call(sibling);\n }\n\n if (sibling[0] != this.placeholder[0]) {\n this._movePlaceholder(target, direction, eventData);\n }\n }\n }\n },\n\n _dragend: function(e) {\n var placeholder = this.placeholder,\n draggedElement = this.draggedElement,\n draggedIndex = this.indexOf(draggedElement),\n placeholderIndex = this.indexOf(placeholder),\n connectWith = this.options.connectWith,\n connectedList,\n isDefaultPrevented,\n eventData,\n connectedListEventData;\n\n this._resetCursor();\n\n eventData = {\n action: ACTION_SORT,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: placeholderIndex,\n draggableEvent: e\n };\n\n if (placeholderIndex >= 0) {\n isDefaultPrevented = this.trigger(END, eventData);\n } else {\n connectedList = placeholder.parents(connectWith).getKendoSortable();\n\n eventData.action = ACTION_REMOVE;\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(placeholder)\n });\n\n isDefaultPrevented = !(!this.trigger(END, eventData) && !connectedList.trigger(END, connectedListEventData));\n }\n\n if (isDefaultPrevented || placeholderIndex === draggedIndex) {\n this._cancel();\n return;\n }\n\n placeholder.replaceWith(draggedElement);\n\n draggedElement.show();\n this.draggable.dropped = true;\n\n eventData = {\n action: this.indexOf(draggedElement) != MISSING_INDEX ? ACTION_SORT : ACTION_REMOVE,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: this.indexOf(draggedElement),\n draggableEvent: e\n };\n\n this.trigger(CHANGE, eventData);\n\n if (connectedList) {\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(draggedElement)\n });\n\n connectedList.trigger(CHANGE, connectedListEventData);\n }\n\n },\n\n _findTarget: function(e) {\n var element = this._findElementUnderCursor(e),\n items,\n connectWith = this.options.connectWith,\n node;\n\n if ($.contains(this.element[0], element)) { //the element is part of the sortable container\n items = this.items();\n node = items.filter(element)[0] || items.has(element)[0];\n\n return node ? { element: $(node), sortable: this } : null;\n } else if (this.element[0] == element && this._isEmpty()) {\n return { element: this.element, sortable: this, appendToBottom: true };\n } else if (this.element[0] == element && this._isLastHidden()) {\n node = this.items().eq(0);\n return { element: node , sortable: this, appendAfterHidden: true };\n } else if (connectWith) { //connected lists are present\n return this._searchConnectedTargets(element, e);\n }\n },\n\n _findElementUnderCursor: function(e) {\n var elementUnderCursor = kendo.elementUnderCursor(e),\n draggable = e.sender;\n\n if (containsOrEqualTo(draggable.hint[0], elementUnderCursor)) {\n draggable.hint.hide();\n elementUnderCursor = kendo.elementUnderCursor(e);\n // IE8 does not return the element in iframe from first attempt\n if (!elementUnderCursor) {\n elementUnderCursor = kendo.elementUnderCursor(e);\n }\n draggable.hint.show();\n }\n\n return elementUnderCursor;\n },\n\n _searchConnectedTargets: function(element, e) {\n var connected = $(this.options.connectWith),\n sortableInstance,\n items,\n node;\n\n for (var i = 0; i < connected.length; i++) {\n sortableInstance = connected.eq(i).getKendoSortable();\n\n if ($.contains(connected[i], element)) {\n if (sortableInstance) {\n items = sortableInstance.items();\n node = items.filter(element)[0] || items.has(element)[0];\n\n if (node) {\n sortableInstance.placeholder = this.placeholder;\n return { element: $(node), sortable: sortableInstance };\n } else {\n return null;\n }\n }\n } else if (connected[i] == element) {\n if (sortableInstance && sortableInstance._isEmpty()) {\n return { element: connected.eq(i), sortable: sortableInstance, appendToBottom: true };\n } else if (this._isCursorAfterLast(sortableInstance, e)) {\n node = sortableInstance.items().last();\n return { element: node, sortable: sortableInstance };\n }\n }\n }\n\n },\n\n _isCursorAfterLast: function(sortable, e) {\n var lastItem = sortable.items().last(),\n cursorOffset = { left: e.x.location, top: e.y.location },\n lastItemOffset,\n delta;\n\n lastItemOffset = kendo.getOffset(lastItem);\n lastItemOffset.top += outerHeight(lastItem);\n lastItemOffset.left += outerWidth(lastItem);\n\n if (this._isFloating(lastItem)) { //horizontal\n delta = lastItemOffset.left - cursorOffset.left;\n } else { //vertical\n delta = lastItemOffset.top - cursorOffset.top;\n }\n\n return delta < 0 ? true : false;\n },\n\n _movementByAxis: function(axis, cursorOffset, delta, eventData) {\n var cursorPosition = (axis === \"x\") ? cursorOffset.left : cursorOffset.top,\n target = (delta < 0) ? this.placeholder.prev() : this.placeholder.next(),\n items = this.items(),\n targetCenter;\n\n if (target.length && !target.is(\":visible\")) {\n target = (delta < 0) ? target.prev() : target.next();\n }\n\n if (!items.filter(target).length) {\n return;\n }\n\n $.extend(eventData, { target: target });\n targetCenter = this._getElementCenter(target);\n\n if (targetCenter) {\n targetCenter = (axis === \"x\") ? targetCenter.left : targetCenter.top;\n }\n\n if (target.length && delta < 0 && cursorPosition - targetCenter < 0) { //prev\n this._movePlaceholder({ element: target, sortable: this }, \"prev\", eventData);\n } else if (target.length && delta > 0 && cursorPosition - targetCenter > 0) { //next\n this._movePlaceholder({ element: target, sortable: this }, \"next\", eventData);\n }\n },\n\n _movePlaceholder: function(target, direction, eventData) {\n var placeholder = this.placeholder;\n\n if (!target.sortable.trigger(BEFORE_MOVE, eventData)) {\n\n if (!direction) {\n target.element.append(placeholder);\n } else if (direction === \"prev\") {\n target.element.before(placeholder);\n } else if (direction === \"next\") {\n target.element.after(placeholder);\n }\n\n target.sortable.trigger(MOVE, eventData);\n }\n },\n\n _setCursor: function() {\n var cursor = this.options.cursor,\n body;\n\n if (cursor && cursor !== \"auto\") {\n body = $(document.body);\n\n this._originalCursorType = body.css(\"cursor\");\n body.css({ \"cursor\": cursor });\n\n if (!this._cursorStylesheet) {\n this._cursorStylesheet = $(\"\");\n }\n\n this._cursorStylesheet.appendTo(body);\n }\n },\n\n _resetCursor: function() {\n if (this._originalCursorType) {\n $(document.body).css(\"cursor\", this._originalCursorType);\n this._originalCursorType = null;\n\n this._cursorStylesheet.remove();\n }\n },\n\n _getElementCenter: function(element) {\n var center = element.length ? kendo.getOffset(element) : null;\n if (center) {\n center.top += outerHeight(element) / 2;\n center.left += outerWidth(element) / 2;\n }\n\n return center;\n },\n\n _isFloating: function(item) {\n var isFloating = /left|right/.test(item.css('float'));\n var isTable = /inline|table-cell/.test(item.css('display'));\n var isHorizontalFlex = /flex/.test(item.parent().css('display')) && (/row|row-reverse/.test(item.parent().css('flex-direction')) || !item.parent().css('flex-direction'));\n return isFloating || isTable || isHorizontalFlex;\n },\n\n _cancel: function() {\n this.draggedElement.show();\n this.placeholder.remove();\n this.draggable.dropped = true;\n },\n\n _items: function() {\n var filter = this.options.filter,\n items;\n\n if (filter) {\n items = this.element.find(filter);\n } else {\n items = this.element.children();\n }\n\n return items;\n },\n\n indexOf: function(element) {\n var items = this._items(),\n placeholder = this.placeholder,\n draggedElement = this.draggedElement;\n\n if (placeholder && element[0] == placeholder[0]) {\n return items.not(draggedElement).index(element);\n } else {\n return items.not(placeholder).index(element);\n }\n },\n\n items: function() {\n var placeholder = this.placeholder,\n items = this._items();\n\n if (placeholder) {\n items = items.not(placeholder);\n }\n\n return items;\n },\n\n _isEmpty: function() {\n return !this.items().length;\n },\n\n _isLastHidden: function() {\n return this.items().length === 1 && this.items().is(\":hidden\");\n }\n\n });\n\n kendo.ui.plugin(Sortable);\n })(window.kendo.jQuery);\n\n}));\n"]}