@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) • 14.7 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("kendo.core.js"),require("kendo.userevents.js")):"function"==typeof define&&define.amd?define(["exports","kendo.core.min","kendo.userevents"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).kendo=t.kendo||{},t.kendo._globals=t.kendo._globals||{},t.kendo._globals.Draganddrop={}))}(this,(function(t){!function(t){var e,n=window.kendo,i=n.support,r=window.document,o=t(window),s=n.Class,a=n.ui.Widget,l=n.Observable,c=n.UserEvents,u=n.ClickMoveClick,d=t.extend,h=n.getOffset,f={},p={},g={},v=n.elementUnderCursor,_="keyup",m="change",x="dragstart",b="hold",y="drag",E="dragend",T="dragcancel",k="hintDestroyed",M="dragenter",C="dragleave",w="drop";function S(t,e){return parseInt(t.css(e),10)||0}function O(t,e){return Math.min(Math.max(t,e.min),e.max)}function D(t,e){var i=h(t),r=n._outerWidth,o=n._outerHeight,s=i.left+S(t,"borderLeftWidth")+S(t,"paddingLeft"),a=i.top+S(t,"borderTopWidth")+S(t,"paddingTop");return{x:{min:s,max:s+t.width()-r(e,!0)},y:{min:a,max:a+t.height()-o(e,!0)}}}var H,I=l.extend({init:function(e,i){var r=this,o=e[0];r.capture=!1,o.addEventListener?(t.each(n.eventMap.down.split(" "),(function(){o.addEventListener(this,r._press.bind(r),!0)})),t.each(n.eventMap.up.split(" "),(function(){o.addEventListener(this,r._release.bind(r),!0)}))):(t.each(n.eventMap.down.split(" "),(function(){o.attachEvent(this,r._press.bind(r))})),t.each(n.eventMap.up.split(" "),(function(){o.attachEvent(this,r._release.bind(r))}))),l.fn.init.call(r),r.bind(["press","release"],i||{})},captureNext:function(){this.capture=!0},cancelCapture:function(){this.capture=!1},_press:function(t){this.trigger("press"),this.capture&&t.preventDefault()},_release:function(t){var e=this;e.trigger("release"),e.capture&&(t.preventDefault(),e.cancelCapture())}}),W=l.extend({init:function(e){var n=this;l.fn.init.call(n),n.forcedEnabled=!1,t.extend(n,e),n.scale=1,n.horizontal?(n.measure="offsetWidth",n.scrollSize="scrollWidth",n.axis="x"):(n.measure="offsetHeight",n.scrollSize="scrollHeight",n.axis="y")},makeVirtual:function(){t.extend(this,{virtual:!0,forcedEnabled:!0,_virtualMin:0,_virtualMax:0})},virtualSize:function(t,e){this._virtualMin===t&&this._virtualMax===e||(this._virtualMin=t,this._virtualMax=e,this.update())},outOfBounds:function(t){return t>this.max||t<this.min},forceEnabled:function(){this.forcedEnabled=!0},getSize:function(){return this.container[0][this.measure]},getTotal:function(){return this.element[0][this.scrollSize]},rescale:function(t){this.scale=t},update:function(t){var e=this,n=e.virtual?e._virtualMax:e.getTotal(),i=n*e.scale,r=e.getSize();(0!==n||e.forcedEnabled)&&(e.max=e.virtual?-e._virtualMin:0,e.size=r,e.total=i,e.min=Math.min(e.max,r-i),e.minScale=r/n,e.centerOffset=(i-r)/2,e.enabled=e.forcedEnabled||i>r,t||e.trigger(m,e))}}),z=l.extend({init:function(t){var e=this;l.fn.init.call(e),e.x=new W(d({horizontal:!0},t)),e.y=new W(d({horizontal:!1},t)),e.container=t.container,e.forcedMinScale=t.minScale,e.maxScale=t.maxScale||100,e.bind(m,t)},rescale:function(t){this.x.rescale(t),this.y.rescale(t),this.refresh()},centerCoordinates:function(){return{x:Math.min(0,-this.x.centerOffset),y:Math.min(0,-this.y.centerOffset)}},refresh:function(){var t=this;t.x.update(),t.y.update(),t.enabled=t.x.enabled||t.y.enabled,t.minScale=t.forcedMinScale||Math.min(t.x.minScale,t.y.minScale),t.fitScale=Math.max(t.x.minScale,t.y.minScale),t.trigger(m)}}),L=l.extend({init:function(t){d(this,t),l.fn.init.call(this)},outOfBounds:function(){return this.dimension.outOfBounds(this.movable[this.axis])},dragMove:function(t){var e=this,n=e.dimension,i=e.axis,r=e.movable,o=r[i]+t;n.enabled&&((o<n.min&&t<0||o>n.max&&t>0)&&(t*=e.resistance),r.translateAxis(i,t),e.trigger(m,e))}}),P=s.extend({init:function(e){var n,i,r,o,s=this;d(s,{elastic:!0},e),r=s.elastic?.5:0,o=s.movable,s.x=n=new L({axis:"x",dimension:s.dimensions.x,resistance:r,movable:o}),s.y=i=new L({axis:"y",dimension:s.dimensions.y,resistance:r,movable:o}),s.userEvents.bind(["press","move","end","gesturestart","gesturechange"],{gesturestart:function(t){s.gesture=t,s.offset=s.dimensions.container.offset()},press:function(e){t(e.event.target).closest("a").is("[data-navigate-on-press=true]")&&e.sender.cancel()},gesturechange:function(t){var e,r=s.gesture,a=r.center,l=t.center,c=t.distance/r.distance,u=s.dimensions.minScale,d=s.dimensions.maxScale;o.scale<=u&&c<1&&(c+=.8*(1-c)),o.scale*c>=d&&(c=d/o.scale);var h=o.x+s.offset.left,f=o.y+s.offset.top;e={x:(h-a.x)*c+l.x-h,y:(f-a.y)*c+l.y-f},o.scaleWith(c),n.dragMove(e.x),i.dragMove(e.y),s.dimensions.rescale(o.scale),s.gesture=t,t.preventDefault()},move:function(t){t.event.target.tagName.match(/textarea|input/i)||(n.dimension.enabled||i.dimension.enabled?(n.dragMove(t.x.delta),i.dragMove(t.y.delta),t.preventDefault()):t.touch.skip())},end:function(t){t.preventDefault()}})}});H=i.hasHW3D?function(t,e,n){return"translate3d("+t+"px,"+e+"px,0) scale("+n+")"}:function(t,e,n){return"translate("+t+"px,"+e+"px) scale("+n+")"};var U=l.extend({init:function(e){var n=this;l.fn.init.call(n),n.element=t(e),n.element[0].style.webkitTransformOrigin="left top",n.x=0,n.y=0,n.scale=1,n._saveCoordinates(H(n.x,n.y,n.scale))},translateAxis:function(t,e){this[t]+=e,this.refresh()},scaleTo:function(t){this.scale=t,this.refresh()},scaleWith:function(t){this.scale*=t,this.refresh()},translate:function(t){this.x+=t.x,this.y+=t.y,this.refresh()},moveAxis:function(t,e){this[t]=e,this.refresh()},moveTo:function(t){d(this,{x:t.x,y:t.y}),this.refresh()},refresh:function(){var t,e=this,i=e.x,r=e.y;e.round&&(i=Math.round(i),r=Math.round(r)),(t=H(i,r,e.scale))!=e.coordinates&&(n.support.browser.msie&&n.support.browser.version<10?(e.element[0].style.position="absolute",e.element[0].style.left=e.x+"px",e.element[0].style.top=e.y+"px"):e.element[0].style.transform=t,e._saveCoordinates(t),e.trigger(m))},_saveCoordinates:function(t){this.coordinates=t}});function A(t,e){var n,i=e.options.group,r=t[i];if(a.fn.destroy.call(e),r.length>1){for(n=0;n<r.length;n++)if(r[n]==e){r.splice(n,1);break}}else r.length=0,delete t[i]}var j=a.extend({init:function(t,e){var n=this;a.fn.init.call(n,t,e);var i=n.options.group;i in p?p[i].push(n):p[i]=[n]},events:[M,C,w],options:{name:"DropTarget",group:"default"},destroy:function(){A(p,this)},_trigger:function(t,e){var n=f[this.options.group];if(n)return this.trigger(t,d({},e.event,{draggable:n,dropTarget:e.dropTarget}))},_over:function(t){this._trigger(M,t)},_out:function(t){this._trigger(C,t)},_drop:function(t){var e=f[this.options.group];e&&(e.dropped=!this._trigger(w,t))}});j.destroyGroup=function(t){var e,n=p[t]||g[t];if(n){for(e=0;e<n.length;e++)a.fn.destroy.call(n[e]);n.length=0,delete p[t],delete g[t]}},j._cache=p;var N=j.extend({init:function(t,e){var n=this;a.fn.init.call(n,t,e);var i=n.options.group;i in g?g[i].push(n):g[i]=[n]},destroy:function(){A(g,this)},options:{name:"DropTargetArea",group:"default",filter:null}}),V=a.extend({init:function(t,e){var i=this;a.fn.init.call(i,t,e),i._activated=!1,this.options.clickMoveClick&&(i.clickMoveClick=new u(i.element,{global:!0,filter:i.options.filter,start:i._startClickMoveClick.bind(i),move:i._drag.bind(i),end:i._end.bind(i),cancel:i._onCancel.bind(i)})),i.userEvents=new c(i.element,{global:!0,allowSelection:!0,filter:i.options.filter,threshold:i.options.distance,start:i._start.bind(i),hold:i._hold.bind(i),move:i._drag.bind(i),end:i._end.bind(i),cancel:i._onCancel.bind(i),select:i._select.bind(i),press:i._press.bind(i)}),n.support.touch&&!e.allowTouchActions&&i.element.find(i.options.filter).css("touch-action","none"),i._afterEndHandler=i._afterEnd.bind(i),i._captureEscape=i._captureEscape.bind(i)},events:[b,x,y,E,T,k],options:{name:"Draggable",distance:n.support.touch?0:5,group:"default",cursorOffset:null,axis:null,container:null,filter:null,ignore:null,holdToDrag:!1,showHintOnHold:!1,autoScroll:!1,dropped:!1,clickMoveClick:!1,preventOsHoldFeatures:!1,allowTouchActions:!1},cancelHold:function(){this._activated=!1},_captureEscape:function(t){var e=this;t.keyCode===n.keys.ESC&&(e.userEvents.cancel(),e.clickMoveClick&&e.clickMoveClick.cancel(),this._trigger(T,{event:t}))},_updateHint:function(e){var i,r=this,o=r.options,s=r.boundaries,a=o.axis,l=r.options.cursorOffset,c=o.updateHint;if(l?i={left:e.x.location+l.left,top:e.y.location+l.top}:0!==e.x.delta||0!==e.y.delta?(r.hintOffset.left+=e.x.delta,r.hintOffset.top+=e.y.delta,i=t.extend({},r.hintOffset)):(r.hintOffset.left=e.x.startLocation+e.x.initialDelta,r.hintOffset.top=e.y.startLocation+e.y.initialDelta,i=t.extend({},r.hintOffset)),s&&(i.top=O(i.top,s.y),i.left=O(i.left,s.x)),"x"===a?delete i.top:"y"===a&&delete i.left,c&&n.isFunction(c))return t(c.call(r,r.hint,e));r.hint.css(i)},_shouldIgnoreTarget:function(e){var n=this.options.ignore;return n&&t(e).is(n)},_select:function(t){this._shouldIgnoreTarget(t.event.target)||t.preventDefault()},_startClickMoveClick:function(t){this._activated=!0,this._start(t)},_hint:function(){var e=this,i=e.options.hint;if(i){e.hint&&e.hint.stop(!0,!0).remove(),e.hint=n.isFunction(i)?t(i.call(e,e.currentTarget)):i;var o=h(e.currentTarget);e.hintOffset=o,e.hint.css({position:"absolute",zIndex:2e4,left:o.left,top:o.top}).appendTo(r.body)}},_start:function(e){var n=this,i=n.options,o=i.container?t(i.container):null,s=i.hint;this._shouldIgnoreTarget(e.touch.initialTouch)||i.holdToDrag&&!n._activated?n.userEvents.cancel():(n.currentTarget=e.target,n.currentTargetOffset=h(n.currentTarget),s&&n._hint(),f[i.group]=n,n.dropped=!1,o&&(n.boundaries=D(o,n.hint)),t(r).on(_,n._captureEscape),n._trigger(x,e)&&(n.userEvents.cancel(),n.clickMoveClick&&n.clickMoveClick.cancel(),n._afterEnd()),n.userEvents.capture())},_hold:function(t){this.currentTarget=t.target,this._trigger(b,t)?this.userEvents.cancel():(this._activated=!0,this.options.showHintOnHold&&this._hint())},_drag:function(e){e.preventDefault();var n=this._elementUnderCursor(e);if(this.options.autoScroll&&this._cursorElement!==n&&(this._scrollableParent=q(n),this._cursorElement=n),this._lastEvent=e,this._processMovement(e,n),this.options.autoScroll&&this._scrollableParent[0]){var i=G(e.x.location,e.y.location,B(this._scrollableParent));this._scrollCompenstation=t.extend({},this.hintOffset),this._scrollVelocity=i,0===i.y&&0===i.x?(clearInterval(this._scrollInterval),this._scrollInterval=null):this._scrollInterval||(this._scrollInterval=setInterval(this._autoScroll.bind(this),50))}this.hint&&this._updateHint(e)},_processMovement:function(n,i){this._withDropTarget(i,(function(i,r){if(i){if(e){if(r===e.targetElement)return;e._trigger(C,d(n,{dropTarget:t(e.targetElement)}))}i._trigger(M,d(n,{dropTarget:t(r)})),e=d(i,{targetElement:r})}else e&&(e._trigger(C,d(n,{dropTarget:t(e.targetElement)})),e=null)})),this._trigger(y,d(n,{dropTarget:e,elementUnderCursor:i}))},_autoScroll:function(){var t=this._scrollableParent[0],e=this._scrollVelocity,n=this._scrollCompenstation;if(t){var i,s,a=this._elementUnderCursor(this._lastEvent);this._processMovement(this._lastEvent,a);var l=t===F()[0];l?(i=r.body.scrollHeight>o.height(),s=r.body.scrollWidth>o.width()):(i=t.offsetHeight<=t.scrollHeight,s=t.offsetWidth<=t.scrollWidth);var c=t.scrollTop+e.y,u=i&&c>0&&c<t.scrollHeight,d=t.scrollLeft+e.x,h=s&&d>0&&d<t.scrollWidth;u?t.scrollTop+=e.y:i&&c<0&&(t.scrollTop=0),h?t.scrollLeft+=e.x:s&&d<0&&(t.scrollLeft=0),this.hint&&l&&(h||u)&&(u&&(n.top+=e.y),h&&(n.left+=e.x),this.hint.css(n))}},_press:function(t){this.options.preventOsHoldFeatures&&(t.target.css("-webkit-user-select","none"),t.target.attr("unselectable","on"),t.target.one("contextmenu",(t=>{t.preventDefault()})))},_end:function(n){this._withDropTarget(this._elementUnderCursor(n),(function(i,r){i&&(i._drop(d({},n,{dropTarget:t(r)})),e=null)})),clearInterval(this._scrollInterval),this._scrollInterval=null,this._cancel(this._trigger(E,n))},_onCancel:function(t){this._cancel(),this._trigger(T,{event:t})},_cancel:function(t){var e=this;e._scrollableParent=null,this._cursorElement=null,clearInterval(this._scrollInterval),e._activated=!1,e.hint&&!e.dropped?setTimeout((function(){e.hint.stop(!0,!0),t?e._afterEndHandler():e.hint.animate(e.currentTargetOffset,"fast",e._afterEndHandler)}),0):e._afterEnd()},_trigger:function(t,e){return this.trigger(t,d({},e.event,{x:e.x,y:e.y,currentTarget:this.currentTarget,initialTarget:e.touch?e.touch.initialTouch:null,dropTarget:e.dropTarget,elementUnderCursor:e.elementUnderCursor,clickMoveClick:e.clickMoveClick}))},_elementUnderCursor:function(e){var n=v(e),i=this.hint;return i&&function(e,n){try{return t.contains(e,n)||e==n}catch(t){return!1}}(i[0],n)&&(i.hide(),(n=v(e))||(n=v(e)),i.show()),n},_withDropTarget:function(e,n){var r,o=this.options.group,s=p[o],a=g[o];(s&&s.length||a&&a.length)&&(r=function(e,n,r){for(var o,s,a=0,l=n&&n.length,c=r&&r.length;e&&e.parentNode;){for(a=0;a<l;a++)if((o=n[a]).element[0]===e)return{target:o,targetElement:e};for(a=0;a<c;a++)if(s=r[a],t.contains(s.element[0],e)&&i.matchesSelector.call(e,s.options.filter))return{target:s,targetElement:e};e=e.parentNode}}(e,s,a),r?n(r.target,r.targetElement):n())},destroy:function(){var t=this;a.fn.destroy.call(t),t._afterEnd(),t.userEvents.destroy(),t.clickMoveClick&&t.clickMoveClick.destroy(),this._scrollableParent=null,this._cursorElement=null,clearInterval(this._scrollInterval),t.currentTarget=null},_afterEnd:function(){var e=this;e.hint&&e.hint.remove(),delete f[e.options.group],e.trigger("destroy"),e.trigger(k),t(r).off(_,e._captureEscape)}});function B(t){var e,n,i,r=F()[0];return t[0]===r?{top:n=r.scrollTop,left:i=r.scrollLeft,bottom:n+o.height(),right:i+o.width()}:((e=t.offset()).bottom=e.top+t.height(),e.right=e.left+t.width(),e)}function F(){return t(n.support.browser.edge||n.support.browser.safari?r.body:r.documentElement)}function q(e){var i=F();if(!e||e===r.body||e===r.documentElement)return i;for(var o=t(e)[0];o&&!n.isScrollable(o)&&o!==r.body;)o=o.parentNode;return o===r.body?i:t(o)}function G(t,e,n){var i={x:0,y:0},r=50;return t-n.left<r?i.x=-(r-(t-n.left)):n.right-t<r&&(i.x=r-(n.right-t)),e-n.top<r?i.y=-(r-(e-n.top)):n.bottom-e<r&&(i.y=r-(n.bottom-e)),i}n.ui.plugin(j),n.ui.plugin(N),n.ui.plugin(V),n.TapCapture=I,n.containerBoundaries=D,d(n.ui,{Pane:P,PaneDimensions:z,Movable:U}),n.ui.Draggable.utils={autoScrollVelocity:G,scrollableViewPort:B,findScrollableParent:q}}(window.kendo.jQuery);var e=kendo;t.__meta__={id:"draganddrop",name:"Drag & drop",category:"framework",description:"Drag & drop functionality for any DOM element.",depends:["core","userevents"]},t.default=e,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=kendo.draganddrop.min.js.map