{"version":3,"file":"kendo.treeview.draganddrop.min.js","names":["factory","define","amd","$","kendo","ui","extend","VISIBILITY","KSTATEHOVER","window","jQuery","HierarchicalDragAndDrop","Class","init","element","options","this","hovered","dragstart","noop","drag","drop","dragend","_draggable","Draggable","ignore","filter","autoScroll","cursorOffset","left","top","support","mobileOS","zoomLevel","hint","_hint","bind","dragcancel","$angular","holdToDrag","hintText","_removeTouchHover","touch","find","removeClass","_hintStatus","newStatus","statusElement","trim","className","replace","e","source","currentTarget","closest","itemSelector","preventDefault","reorderable","dropHint","css","appendTo","hoveredItem","itemHeight","itemTop","itemContent","delta","insertOnTop","insertOnBottom","addChild","itemData","position","status","target","dropTarget","eventTarget","container","allowedContainers","length","contains","itemFromTarget","item","_outerHeight","content","getOffset","y","location","_lastHover","toggleClass","dropHintContainer","first","last","originalEvent","pageY","pageX","x","substring","setStatus","value","indexOf","remove","destination","eventArgs","dropPrevented","dropPositionFrom","valid","setValid","newValid","dropped","destroy"],"sources":["kendo.treeview.draganddrop.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.draganddrop'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"treeview.draganddrop\",\n name: \"Hierarchical Drag & Drop\",\n category: \"framework\",\n depends: [ \"core\", \"draganddrop\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo;\n var ui = kendo.ui;\n var extend = $.extend;\n var VISIBILITY = \"visibility\";\n var KSTATEHOVER = \"k-hover\";\n var INPUTSELECTOR = \"input,a:not(.k-in),textarea,.k-multiselect-wrap,select,button,a.k-button>.k-icon,button.k-button>.k-icon,span.k-icon.k-i-arrow-60-right,span.k-icon.k-i-arrow-45-down-right\";\n var DROPHINTTEMPLATE = \"
\" +\n \"
\" +\n \"
\" +\n \"
\";\n\n ui.HierarchicalDragAndDrop = kendo.Class.extend({\n init: function(element, options) {\n this.element = element;\n this.hovered = element;\n this.options = extend({\n dragstart: $.noop, drag: $.noop, drop: $.noop, dragend: $.noop\n }, options);\n\n this._draggable = new ui.Draggable(element, {\n ignore: INPUTSELECTOR,\n filter: options.filter,\n autoScroll: options.autoScroll,\n cursorOffset: {\n left: 10,\n top: kendo.support.mobileOS ? -40 / kendo.support.zoomLevel() : 10\n },\n hint: this._hint.bind(this),\n dragstart: this.dragstart.bind(this),\n dragcancel: this.dragcancel.bind(this),\n drag: this.drag.bind(this),\n dragend: this.dragend.bind(this),\n $angular: options.$angular,\n holdToDrag: options.holdToDrag\n });\n },\n\n _hint: function(element) {\n return \"
\" +\n \"\" +\n this.options.hintText(element) +\n \"
\";\n },\n\n _removeTouchHover: function() {\n if (kendo.support.touch && this.hovered) {\n this.hovered.find(\".\" + KSTATEHOVER).removeClass(KSTATEHOVER);\n this.hovered = false;\n }\n },\n\n _hintStatus: function(newStatus) {\n var statusElement = this._draggable.hint.find(\".k-drag-status\")[0];\n\n if (newStatus) {\n statusElement.className = \"k-icon k-drag-status \" + newStatus;\n } else {\n return kendo.trim(statusElement.className.replace(/(p|k)-(icon|drag-status)/g, \"\"));\n }\n },\n\n dragstart: function(e) {\n this.source = e.currentTarget.closest(this.options.itemSelector);\n\n if (this.options.dragstart(this.source)) {\n e.preventDefault();\n }\n\n if (this.options.reorderable) {\n this.dropHint = $(DROPHINTTEMPLATE)\n .css(VISIBILITY, \"hidden\")\n .appendTo(this.element);\n } else {\n this.dropHint = $();\n }\n },\n\n drag: function(e) {\n var options = this.options;\n var source = this.source;\n var target = this.dropTarget = $(kendo.eventTarget(e));\n var container = target.closest(options.allowedContainers);\n var hoveredItem, itemHeight, itemTop, itemContent, delta;\n var insertOnTop, insertOnBottom, addChild;\n var itemData, position, status;\n\n if (!container.length) {\n // dragging outside of allowed elements\n status = \"k-i-cancel\";\n this._removeTouchHover();\n } else if (source[0] == target[0] || options.contains(source[0], target[0])) {\n // dragging item within itself\n status = \"k-i-cancel\";\n } else {\n // moving or reordering item\n status = \"k-i-insert-middle\";\n\n itemData = options.itemFromTarget(target);\n hoveredItem = itemData.item;\n\n if (hoveredItem.length) {\n this._removeTouchHover();\n itemHeight = kendo._outerHeight(hoveredItem);\n itemContent = itemData.content;\n\n if (options.reorderable) {\n delta = itemHeight / (itemContent.length > 0 ? 4 : 2);\n itemTop = kendo.getOffset(hoveredItem).top;\n\n insertOnTop = e.y.location < (itemTop + delta);\n insertOnBottom = (itemTop + itemHeight - delta) < e.y.location;\n addChild = itemContent.length && !insertOnTop && !insertOnBottom;\n } else {\n addChild = true;\n insertOnTop = false;\n insertOnBottom = false;\n }\n\n this.hovered = addChild ? container : false;\n\n this.dropHint.css(VISIBILITY, addChild ? \"hidden\" : \"visible\");\n\n if (this._lastHover && this._lastHover[0] != itemContent[0]) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n\n this._lastHover = itemContent.toggleClass(KSTATEHOVER, addChild);\n\n if (addChild) {\n status = \"k-i-plus\";\n } else {\n position = hoveredItem.position();\n position.top += insertOnTop ? 0 : itemHeight;\n\n this.dropHint.css(position)\n [insertOnTop ? \"prependTo\" : \"appendTo\"]\n (options.dropHintContainer(hoveredItem));\n\n if (insertOnTop && itemData.first) {\n status = \"k-i-insert-up\";\n }\n\n if (insertOnBottom && itemData.last) {\n status = \"k-i-insert-down\";\n }\n }\n } else if (target[0] != this.dropHint[0]) {\n if (this._lastHover) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n\n if (!$.contains(this.element[0], container[0])) {\n // moving node to different element\n status = \"k-i-plus\";\n } else {\n status = \"k-i-cancel\";\n }\n }\n }\n\n this.options.drag({\n originalEvent: e.originalEvent,\n source: source,\n target: target,\n pageY: e.y.location,\n pageX: e.x.location,\n status: status.substring(2),\n setStatus: function(value) {\n status = value;\n }\n });\n\n if (status.indexOf(\"k-i-insert\") !== 0) {\n this.dropHint.css(VISIBILITY, \"hidden\");\n }\n\n this._hintStatus(status);\n },\n\n dragcancel: function() {\n this.dropHint.remove();\n },\n\n dragend: function(e) {\n var position = \"over\",\n source = this.source,\n destination,\n dropHint = this.dropHint,\n dropTarget = this.dropTarget,\n eventArgs, dropPrevented;\n\n if (dropHint.css(VISIBILITY) == \"visible\") {\n position = this.options.dropPositionFrom(dropHint);\n destination = dropHint.closest(this.options.itemSelector);\n } else if (dropTarget) {\n destination = dropTarget.closest(this.options.itemSelector);\n\n // moving node to root element\n if (!destination.length) {\n destination = dropTarget.closest(this.options.allowedContainers);\n }\n }\n\n eventArgs = {\n originalEvent: e.originalEvent,\n source: source[0],\n destination: destination[0],\n valid: this._hintStatus() != \"k-i-cancel\",\n setValid: function(newValid) {\n this.valid = newValid;\n },\n dropTarget: dropTarget[0],\n position: position\n };\n\n dropPrevented = this.options.drop(eventArgs);\n\n dropHint.remove();\n this._removeTouchHover();\n if (this._lastHover) {\n this._lastHover.removeClass(KSTATEHOVER);\n }\n\n if (!eventArgs.valid || dropPrevented) {\n this._draggable.dropped = eventArgs.valid;\n return;\n }\n\n this._draggable.dropped = true;\n\n this.options.dragend({\n originalEvent: e.originalEvent,\n source: source,\n destination: destination,\n position: position\n });\n },\n\n destroy: function() {\n this._lastHover = this.hovered = null;\n this._draggable.destroy();\n }\n });\n\n })(window.kendo.jQuery);\n\n}));\n"]}