@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines (2 loc) • 3.77 kB
JavaScript
!function(t){"function"==typeof define&&define.amd?define(["kendo.data.min","kendo.draganddrop.min"],t):t()}((function(){var t,i,o,e,s,n,r,a;t=window.kendo.jQuery,i=window.kendo,o=i.ui,e=t.extend,s="visibility",n="k-drag-status",r='<span class="k-drag-status"></span>',a="k-hover",o.HierarchicalDragAndDrop=i.Class.extend({init:function(s,n){this.element=s,this.hovered=s,this.options=e({dragstart:t.noop,drag:t.noop,drop:t.noop,dragend:t.noop},n),this._draggable=new o.Draggable(s,{ignore:"input,a:not(.k-in),textarea,.k-multiselect-wrap,select,button,a.k-button>.k-icon,button.k-button>.k-icon,span.k-toggle-icon,a.k-button>.k-svg-icon,button.k-button>.k-svg-icon",filter:n.filter,autoScroll:n.autoScroll,cursorOffset:{left:10,top:i.support.mobileOS?-40/i.support.zoomLevel():10},hint:this._hint.bind(this),dragstart:this.dragstart.bind(this),dragcancel:this.dragcancel.bind(this),drag:this.drag.bind(this),dragend:this.dragend.bind(this),$angular:n.$angular,holdToDrag:n.holdToDrag})},_hint:function(t){return"<div class='k-drag-clue'>"+r+this.options.hintText(t)+"</div>"},_removeTouchHover:function(){i.support.touch&&this.hovered&&(this.hovered.find(".k-hover").removeClass(a),this.hovered=!1)},_hintStatus:function(t){var i=this._draggable.hint.find("."+n);t?(this.status=t,o.icon(i,{icon:t})):(this.status="",i.replaceWith(r))},dragstart:function(i){this.source=i.currentTarget.closest(this.options.itemSelector),this.options.dragstart(this.source)&&i.preventDefault(),this.options.reorderable?this.dropHint=t("<div class='k-drop-hint k-drop-hint-h'><div class='k-drop-hint-start'></div><div class='k-drop-hint-line'></div></div>").css(s,"hidden").appendTo(this.element):this.dropHint=t()},drag:function(o){var e,n,r,d,h,l,c,p,g,u,v,f=this.options,m=this.source,b=this.dropTarget=t(i.eventTarget(o)),k=b.closest(f.allowedContainers);k.length?m[0]==b[0]||f.contains(m[0],b[0])?v="cancel":(v="insert-middle",(e=(g=f.itemFromTarget(b)).item).length?(this._removeTouchHover(),n=i._outerHeight(e),d=g.content,f.reorderable?(h=n/(d.length>0?4:2),r=i.getOffset(e).top,l=o.y.location<r+h,c=r+n-h<o.y.location,p=d.length&&!l&&!c):(p=!0,l=!1,c=!1),this.hovered=!!p&&k,this.dropHint.css(s,p?"hidden":"visible"),this._lastHover&&this._lastHover[0]!=d[0]&&this._lastHover.removeClass(a),this._lastHover=d.toggleClass(a,p),p?v="plus":((u=e.position()).top+=l?0:n,this.dropHint.css(u)[l?"prependTo":"appendTo"](f.dropHintContainer(e)),l&&g.first&&(v="insert-top"),c&&g.last&&(v="insert-bottom"))):b[0]!=this.dropHint[0]&&(this._lastHover&&this._lastHover.removeClass(a),v=t.contains(this.element[0],k[0])?"cancel":"plus")):(v="cancel",this._removeTouchHover()),this.options.drag({originalEvent:o.originalEvent,source:m,target:b,pageY:o.y.location,pageX:o.x.location,status:v,setStatus:function(t){v=t}}),0!==v.indexOf("insert")&&this.dropHint.css(s,"hidden"),this._hintStatus(v)},dragcancel:function(){this.dropHint.remove()},dragend:function(t){var i,o,e,n="over",r=this.source,d=this.dropHint,h=this.dropTarget;"visible"==d.css(s)?(n=this.options.dropPositionFrom(d),i=d.closest(this.options.itemSelector)):h&&((i=h.closest(this.options.itemSelector)).length||(i=h.closest(this.options.allowedContainers))),o={originalEvent:t.originalEvent,source:r[0],destination:i[0],valid:"cancel"!=this.status,setValid:function(t){this.valid=t},dropTarget:h[0],position:n},e=this.options.drop(o),d.remove(),this._removeTouchHover(),this._lastHover&&this._lastHover.removeClass(a),o.valid&&!e?(this._draggable.dropped=!0,this.options.dragend({originalEvent:t.originalEvent,source:r,destination:i,position:n})):this._draggable.dropped=o.valid},destroy:function(){this._lastHover=this.hovered=null,this._draggable.destroy()}})}));
//# sourceMappingURL=kendo.treeview.draganddrop.min.js.map