-
-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathdragster.min.js
More file actions
13 lines (13 loc) · 8.7 KB
/
dragster.min.js
File metadata and controls
13 lines (13 loc) · 8.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
/*@preserve
* Dragster - drag'n'drop library v2.0.0
* https://github.com/sunpietro/dragster
*
* Copyright 2015-2017 Piotr Nalepa
* http://blog.piotrnalepa.pl
*
* Released under the MIT license
* https://github.com/sunpietro/dragster/blob/master/LICENSE
*
* Date: 2017-06-28T22:30Z
*/
let Dragster=function(Y={}){function e(){}var p,h,f,v,a,E,x,r,s,X,q,l,F,d,i,c,L,U,n,u,m,w,k,z,J,t="dragster-",W="is-dragging",y=t+"draggable",C=t+"drag-region",D=t+"drop-placeholder",j=t+"temp",G=j+"-container",K=t+"is-hidden",g=t+"replacable",b="touchstart",B="touchmove",T="touchend",Q="mousedown",H="mousemove",M="mouseup",N="top",P="bottom",R="px",o="div",S={elementSelector:".dragster-block",regionSelector:".dragster-region",dragHandleCssClass:!1,dragOnlyRegionCssClass:t+"region--drag-only",replaceElements:!1,updateRegionsHeight:!0,minimumRegionHeight:60,onBeforeDragStart:e,onAfterDragStart:e,onBeforeDragMove:e,onAfterDragMove:e,onBeforeDragEnd:e,onAfterDragEnd:e,onAfterDragDrop:e,scrollWindowOnDrag:!1,cloneElements:!1,wrapDraggableElements:!0,shadowElementUnderMouse:!1},V=!1,Z=!1,$={drag:{node:null},drop:{node:null},shadow:{node:null,top:0,left:0},placeholder:{node:null,position:null},dropped:null,clonedFrom:null,clonedTo:null},I={},_=window.innerHeight,A=Math.floor(65536*(1+Math.random())).toString(16),S={...S,...Y},ee=function(){return[].slice.call(document.querySelectorAll(S.elementSelector))},ne=function(){return[].slice.call(document.querySelectorAll(S.regionSelector))},te=function(e){if(!1===S.wrapDraggableElements)return console.warn("You have disabled the default behavior of wrapping the draggable elements. If you want Dragster.js to work properly you still will have to do this manually.\n\nMore info: https://github.com/sunpietro/dragster/blob/master/README.md#user-content-wrapdraggableelements---boolean"),!1;e.forEach(function(e){var n=X(),t=e.parentNode;if(t.classList.contains(y))return!1;t.insertBefore(n,e),t.removeChild(e),n.appendChild(e)})},oe=ee(),O=ne();return S.replaceElements&&((t=document.createElement(o)).classList.add(K),t.classList.add(G),document.body.appendChild(t)),p=function(e,n){var t=e.parentNode;if(t&&(!e.classList||!e.classList.contains(C)||e.classList.contains(S.dragOnlyRegionCssClass)))return n(e)?e:n(t)?t:p(t,n)},d=function(e){[].slice.call(document.getElementsByClassName(e)).forEach(function(e){e.dataset.dragsterId===A&&e.parentNode.removeChild(e)})},i=function(e,n){n&&(O.forEach(function(e){e.removeEventListener(n,a.mousemove)}),document.body.removeEventListener(n,a.mousemove)),e&&e.classList.remove(W),[].slice.call(document.getElementsByClassName(y)).forEach(function(e){e.firstChild||e.parentNode.removeChild(e)}),d(D),d(j),L()},c=function(){[].slice.call(document.getElementsByClassName(g)).forEach(function(e){e.classList.remove(g)})},X=function(){var e=document.createElement(o);return e.classList.add(y),e.dataset.dragsterId=A,e},l=function(){var e=document.createElement(o);return e.classList.add(D),e.dataset.dragsterId=A,e},q=function(){var e=document.createElement(o);return e.classList.add(j),e.classList.add(K),e.style.position="fixed",e.dataset.dragsterId=A,document.body.appendChild(e),e},r=function(e,n){var t;e&&e.parentNode&&(t=!1===S.wrapDraggableElements?e:e.nextSibling,e.parentNode.insertBefore(n,t))},s=function(e,n){e&&e.parentNode&&e.parentNode.insertBefore(n,e)},E=function(e){return e.classList&&e.classList.contains(y)&&e.dataset.dragsterId===A},x=function(e){return e.classList&&e.classList.contains(S.dragOnlyRegionCssClass)},L=function(){var e,t;S.updateRegionsHeight&&(e=[].slice.call(document.getElementsByClassName(C)),t=e.map(function(e){var t,e=[].slice.call(e.querySelectorAll(S.elementSelector));return e.length?(t=S.minimumRegionHeight,e.forEach(function(e){var n=window.getComputedStyle(e);t+=e.offsetHeight+parseInt(n.marginTop,10)+parseInt(n.marginBottom,10)}),t):null}),e.forEach(function(e,n){null!==t[n]&&(e.style.height=t[n]+R)}))},u=function(e,n){i(v,e),i(v,n)},a={mousedown:function(e){var n,t,o,r;return!(S.dragHandleCssClass&&("string"!=typeof S.dragHandleCssClass||!e.target.classList.contains(S.dragHandleCssClass))||(o=e.type===b,r=e.changedTouches?e.changedTouches[0]:e,I=JSON.parse(JSON.stringify($)),e.dragster=I,!1===S.onBeforeDragStart(e))||3===e.which||(e.preventDefault(),!(v=p(e.target,E))))&&(n=o?B:H,t=o?T:M,O.forEach(function(e){e.addEventListener(n,a.mousemove,!1),e.addEventListener(t,a.mouseup,!1)}),document.body.addEventListener(n,a.mousemove,!1),document.body.addEventListener(t,a.mouseup,!1),o=v.getBoundingClientRect(),k=o.left-r.clientX,z=o.top-r.clientY,(h=q()).innerHTML=v.innerHTML,h.style.width=o.width+R,h.style.height=o.height+R,h.dataset.dragsterId=A,f=h.getBoundingClientRect(),v.classList.add(W),I.drag.node=v,I.shadow.node=h,e.dragster=I,void S.onAfterDragStart(e))},mousemove:function(e){if(e.dragster=I,!1===S.onBeforeDragMove(e)||!f)return!1;e.preventDefault();var n=e.changedTouches?e.changedTouches[0]:e,t=n.view?n.view.pageXOffset:0,o=n.view?n.view.pageYOffset:0,r=n.clientY+o,t=n.clientX+t,a=document.elementFromPoint(n.clientX,n.clientY),s=p(a,E),n=S.shadowElementUnderMouse?n.clientY+z:n.clientY,t=S.shadowElementUnderMouse?t+k:t-f.width/2,l=I.drag.node&&I.drag.node.dataset,d=!(!s||!p(s,x)),i=a.dataset.dragsterId===A,c=a.classList.contains(C)&&i,i=a.classList.contains(S.dragOnlyRegionCssClass)&&i,u=a.classList.contains(D),m=0<a.getElementsByClassName(y).length,g=0<a.getElementsByClassName(D).length;clearTimeout(F),h.style.top=n+R,h.style.left=t+R,h.classList.remove(K),I.shadow.top=n,I.shadow.left=t,l||c||u?s&&s!==v&&!d?(w.removePlaceholders(),w.addPlaceholderOnTarget(s,r,o)):!c||i||m||g?c&&!i&&m&&!g&&(w.removePlaceholders(),w.addPlaceholderInRegionBelowTargets(a)):(w.removePlaceholders(),w.addPlaceholderInRegion(a)):w.removePlaceholders(),S.scrollWindowOnDrag&&U(e),L(),S.onAfterDragMove(e)},mouseup:function(e){e.dragster=I;var n,t,o,r=e.type===b,a=r?B:H,r=r?T:M;return!1!==S.onBeforeDragEnd(e)&&(n=S.replaceElements?g:D,n=document.getElementsByClassName(n)[0],o=!(!v||!p(v,x)),o=S.cloneElements&&o,F=setTimeout(u,200),c(),v)&&n?(t=p(n,E),v!==(t=t||n)&&(S.replaceElements||o?S.replaceElements&&!o?(e.dragster=m.replaceElements(e.dragster,t),S.onAfterDragDrop(e)):!S.replaceElements&&o&&(e.dragster=m.cloneElements(e.dragster,n,t),S.onAfterDragDrop(e)):(e.dragster=m.moveElement(e.dragster,n,t),S.onAfterDragDrop(e)),t.classList.remove("is-drag-over")),u(a,r),void S.onAfterDragEnd(e)):(u(a,r),!1)}},w={addPlaceholderOnTarget:function(e,n,t){var o=e.getBoundingClientRect(),r=l(),a=o.height/2;c(),S.replaceElements?e.classList.add(g):n-t-o.top<a&&!V?(d(D),r.dataset.placeholderPosition=N,s(e.firstChild,r),I.placeholder.position=N):o.bottom-(n-t)<a&&!Z&&(d(D),r.dataset.placeholderPosition=P,e.appendChild(r),I.placeholder.position=P),I.placeholder.node=r,I.drop.node=e},addPlaceholderInRegion:function(e){var n=l();e.appendChild(n),I.placeholder.position=P,I.placeholder.node=n,I.drop.node=e},addPlaceholderInRegionBelowTargets:function(e){var e=[].slice.call(e.getElementsByClassName(y)).filter(function(e){return e.dataset.dragsterId===A}),e=e[e.length-1],n=l();n.dataset.placeholderPosition=P,d(D),e.appendChild(n),I.placeholder.position=P,I.placeholder.node=n,I.drop.node=e},removePlaceholders:function(){S.replaceElements?c():d(D)}},m={moveElement:function(e,n,t){var o=!1===S.wrapDraggableElements?v:X();return n.dataset.placeholderPosition===N?s(t,o):!1===S.wrapDraggableElements?r(o,t):r(t,o),v.firstChild&&!0===S.wrapDraggableElements&&o.appendChild(v.firstChild),e.dropped=o,e},replaceElements:function(e,n){var t=document.getElementsByClassName(G)[0];return t.innerHTML=v.innerHTML,v.innerHTML=n.innerHTML,n.innerHTML=t.innerHTML,t.innerHTML="",e.dropped=t,e},cloneElements:function(e,n,t){var o=v.cloneNode(!0);return(n.dataset.placeholderPosition===N?s:r)(t,o),i(o),e.clonedFrom=v,e.clonedTo=o,e}},U=function(e){e=e.changedTouches?e.changedTouches[0]:e;_-e.clientY<60?window.scrollBy(0,10):e.clientY<60&&window.scrollBy(0,-10)},n=function(){_=window.innerHeight},te(oe),(J=function(){O.forEach(function(e){e.classList.add(C),e.dataset.dragsterId=A,e.addEventListener(Q,a.mousedown,!1),e.addEventListener(b,a.mousedown,!1)})})(),window.addEventListener("resize",n,!1),{update:function(){oe=ee(),te(oe),L(),n()},updateRegions:function(){O=ne(),J()},destroy:function(){O.forEach(function(e){e.classList.remove(C),e.removeEventListener(Q,a.mousedown,!1),e.removeEventListener(H,a.mousemove,!1),e.removeEventListener(M,a.mouseup,!1),e.removeEventListener(b,a.mousedown,!1),e.removeEventListener(B,a.mousemove,!1),e.removeEventListener(T,a.mouseup,!1)}),document.body.removeEventListener(H,a.mousemove,!1),document.body.removeEventListener(B,a.mousemove,!1),document.body.removeEventListener(M,a.mouseup,!1),document.body.removeEventListener(T,a.mouseup,!1),window.removeEventListener("resize",n,!1)}}};export default Dragster;