|
1 | 1 | /** |
2 | | - * angular-drag-and-drop-lists v1.4.0 |
| 2 | + * angular-drag-and-drop-lists v2.0.0 |
3 | 3 | * |
4 | 4 | * Copyright (c) 2014 Marcel Juenemann marcel@juenemann.cc |
5 | 5 | * Copyright (c) 2014-2016 Google Inc. |
6 | 6 | * https://github.com/marceljuenemann/angular-drag-and-drop-lists |
7 | 7 | * |
8 | 8 | * License: MIT |
9 | 9 | */ |
10 | | -angular.module("dndLists",[]).directive("dndDraggable",["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround",function(e,n,r,t){return function(a,d,o){d.attr("draggable","true"),o.dndDisableIf&&a.$watch(o.dndDisableIf,function(e){d.attr("draggable",!e)}),d.on("dragstart",function(i){return i=i.originalEvent||i,"false"==d.attr("draggable")?!0:(i.dataTransfer.setData("Text",angular.toJson(a.$eval(o.dndDraggable))),i.dataTransfer.effectAllowed=o.dndEffectAllowed||"move",d.addClass("dndDragging"),n(function(){d.addClass("dndDraggingSource")},0),r.dropEffect="none",t.isDragging=!0,t.dragType=o.dndType?a.$eval(o.dndType):void 0,i._dndHandle&&i.dataTransfer.setDragImage&&i.dataTransfer.setDragImage(d[0],0,0),e(o.dndDragstart)(a,{event:i}),void i.stopPropagation())}),d.on("dragend",function(i){i=i.originalEvent||i |
11 | | -var f=r.dropEffect |
12 | | -a.$apply(function(){switch(f){case"move":e(o.dndMoved)(a,{event:i}) |
| 10 | +!function(e){var n="application/x-dnd",a="application/json",r="Text" |
| 11 | +e.directive("dndDraggable",["$parse","$timeout",function(e,d){return function(o,i,l){i.attr("draggable","true"),l.dndDisableIf&&o.$watch(l.dndDisableIf,function(e){i.attr("draggable",!e)}),i.on("dragstart",function(s){if(s=s.originalEvent||s,"false"==i.attr("draggable"))return!0 |
| 12 | +t.dropEffect="none",t.isDragging=!0,t.itemType=l.dndType&&o.$eval(l.dndType).toLowerCase() |
| 13 | +var f=o.$eval(l.dndDraggable),g=n+(t.itemType?"-"+t.itemType:"") |
| 14 | +try{s.dataTransfer.setData(g,angular.toJson(f))}catch(c){var u=angular.toJson({item:f,type:t.itemType}) |
| 15 | +try{s.dataTransfer.setData(a,u)}catch(c){s.dataTransfer.setData(r,u)}}s.dataTransfer.effectAllowed=l.dndEffectAllowed||"move",i.addClass("dndDragging"),d(function(){i.addClass("dndDraggingSource")},0),s._dndHandle&&s.dataTransfer.setDragImage&&s.dataTransfer.setDragImage(i[0],0,0),e(l.dndDragstart)(o,{event:s}),s.stopPropagation()}),i.on("dragend",function(n){n=n.originalEvent||n |
| 16 | +var a=t.dropEffect |
| 17 | +o.$apply(function(){switch(a){case"move":e(l.dndMoved)(o,{event:n}) |
13 | 18 | break |
14 | | -case"copy":e(o.dndCopied)(a,{event:i}) |
| 19 | +case"copy":e(l.dndCopied)(o,{event:n}) |
15 | 20 | break |
16 | | -case"none":e(o.dndCanceled)(a,{event:i})}e(o.dndDragend)(a,{event:i,dropEffect:f})}),d.removeClass("dndDragging"),n(function(){d.removeClass("dndDraggingSource")},0),t.isDragging=!1,i.stopPropagation()}),d.on("click",function(n){o.dndSelected&&(n=n.originalEvent||n,a.$apply(function(){e(o.dndSelected)(a,{event:n})}),n.stopPropagation())}),d.on("selectstart",function(){this.dragDrop&&this.dragDrop()})}}]).directive("dndList",["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround",function(e,n,r,t){return function(a,d,o){function i(e,n,r){var t=E?e.offsetX||e.layerX:e.offsetY||e.layerY,a=E?n.offsetWidth:n.offsetHeight,d=E?n.offsetLeft:n.offsetTop |
17 | | -return d=r?d:0,d+a/2>t}function f(){var e |
18 | | -return angular.forEach(d.children(),function(n){var r=angular.element(n) |
19 | | -r.hasClass("dndPlaceholder")&&(e=r)}),e||angular.element("<li class='dndPlaceholder'></li>")}function l(){return Array.prototype.indexOf.call(D.children,v)}function g(e){if(!t.isDragging&&!y)return!1 |
20 | | -if(!c(e.dataTransfer.types))return!1 |
21 | | -if(o.dndAllowedTypes&&t.isDragging){var n=a.$eval(o.dndAllowedTypes) |
22 | | -if(angular.isArray(n)&&-1===n.indexOf(t.dragType))return!1}return o.dndDisableIf&&a.$eval(o.dndDisableIf)?!1:!0}function s(){return p.remove(),d.removeClass("dndDragover"),!0}function u(n,r,d,o){return e(n)(a,{event:r,index:d,item:o||void 0,external:!t.isDragging,type:t.isDragging?t.dragType:void 0})}function c(e){if(!e)return!0 |
23 | | -for(var n=0;n<e.length;n++)if("Text"===e[n]||"text/plain"===e[n])return!0 |
24 | | -return!1}var p=f(),v=p[0],D=d[0] |
25 | | -p.remove() |
26 | | -var E=o.dndHorizontalList&&a.$eval(o.dndHorizontalList),y=o.dndExternalSources&&a.$eval(o.dndExternalSources) |
27 | | -d.on("dragenter",function(e){return e=e.originalEvent||e,g(e)?void e.preventDefault():!0}),d.on("dragover",function(e){if(e=e.originalEvent||e,!g(e))return!0 |
28 | | -if(v.parentNode!=D&&d.append(p),e.target!==D){for(var n=e.target;n.parentNode!==D&&n.parentNode;)n=n.parentNode |
29 | | -n.parentNode===D&&n!==v&&(i(e,n)?D.insertBefore(v,n):D.insertBefore(v,n.nextSibling))}else if(i(e,v,!0))for(;v.previousElementSibling&&(i(e,v.previousElementSibling,!0)||0===v.previousElementSibling.offsetHeight);)D.insertBefore(v,v.previousElementSibling) |
30 | | -else for(;v.nextElementSibling&&!i(e,v.nextElementSibling,!0);)D.insertBefore(v,v.nextElementSibling.nextElementSibling) |
31 | | -return o.dndDragover&&!u(o.dndDragover,e,l())?s():(d.addClass("dndDragover"),e.preventDefault(),e.stopPropagation(),!1)}),d.on("drop",function(e){if(e=e.originalEvent||e,!g(e))return!0 |
| 21 | +case"none":e(l.dndCanceled)(o,{event:n})}e(l.dndDragend)(o,{event:n,dropEffect:a})}),i.removeClass("dndDragging"),d(function(){i.removeClass("dndDraggingSource")},0),t.isDragging=!1,n.stopPropagation()}),i.on("click",function(n){l.dndSelected&&(n=n.originalEvent||n,o.$apply(function(){e(l.dndSelected)(o,{event:n})}),n.stopPropagation())}),i.on("selectstart",function(){this.dragDrop&&this.dragDrop()})}}]),e.directive("dndList",["$parse","$timeout",function(e,d){return function(o,i,l){function s(e){if(!e)return r |
| 22 | +for(var t=0;t<e.length;t++)if(e[t]==r||e[t]==a||e[t].substr(0,n.length)==n)return e[t] |
| 23 | +return null}function f(e){return t.isDragging?t.itemType||void 0:e==r||e==a?null:e&&e.substr(n.length+1)||void 0}function g(e){return m.disabled?!1:m.externalSources||t.isDragging?m.allowedTypes&&null!==e?e&&-1!=m.allowedTypes.indexOf(e):!0:!1}function c(){return D.remove(),i.removeClass("dndDragover"),!0}function u(n,a,r,d,i){return e(n)(o,{event:a,index:void 0!==d?d:p(),item:i||void 0,external:!t.isDragging,type:r})}function p(){return Array.prototype.indexOf.call(T.children,y)}function v(){var e |
| 24 | +return angular.forEach(i.children(),function(n){var a=angular.element(n) |
| 25 | +a.hasClass("dndPlaceholder")&&(e=a)}),e||angular.element("<li class='dndPlaceholder'></li>")}var D=v() |
| 26 | +D.remove() |
| 27 | +var y=D[0],T=i[0],m={} |
| 28 | +i.on("dragenter",function(e){e=e.originalEvent||e |
| 29 | +var n=l.dndAllowedTypes&&o.$eval(l.dndAllowedTypes) |
| 30 | +m={allowedTypes:angular.isArray(n)&&n.join("|").toLowerCase().split("|"),disabled:l.dndDisableIf&&o.$eval(l.dndDisableIf),externalSources:l.dndExternalSources&&o.$eval(l.dndExternalSources),horizontal:l.dndHorizontalList&&o.$eval(l.dndHorizontalList)} |
| 31 | +var a=s(e.dataTransfer.types) |
| 32 | +return a&&g(f(a))?void e.preventDefault():!0}),i.on("dragover",function(e){e=e.originalEvent||e |
| 33 | +var n=s(e.dataTransfer.types),a=f(n) |
| 34 | +if(!n||!g(a))return!0 |
| 35 | +if(y.parentNode!=T&&i.append(D),e.target!=T){for(var r=e.target;r.parentNode!=T&&r.parentNode;)r=r.parentNode |
| 36 | +if(r.parentNode==T&&r!=y){var t=r.getBoundingClientRect() |
| 37 | +if(m.horizontal)var d=e.clientX<t.left+t.width/2 |
| 38 | +else var d=e.clientY<t.top+t.height/2 |
| 39 | +T.insertBefore(y,d?r:r.nextSibling)}}return l.dndDragover&&!u(l.dndDragover,e,a)?c():(i.addClass("dndDragover"),e.preventDefault(),e.stopPropagation(),!1)}),i.on("drop",function(e){e=e.originalEvent||e |
| 40 | +var n=s(e.dataTransfer.types),d=f(n) |
| 41 | +if(!n||!g(d))return!0 |
32 | 42 | e.preventDefault() |
33 | | -var n,t=e.dataTransfer.getData("Text")||e.dataTransfer.getData("text/plain") |
34 | | -try{n=JSON.parse(t)}catch(d){return s()}var i=l() |
35 | | -return o.dndDrop&&(n=u(o.dndDrop,e,i,n),!n)?s():(n!==!0&&a.$apply(function(){a.$eval(o.dndList).splice(i,0,n)}),u(o.dndInserted,e,i,n),"none"===e.dataTransfer.dropEffect?"copy"===e.dataTransfer.effectAllowed||"move"===e.dataTransfer.effectAllowed?r.dropEffect=e.dataTransfer.effectAllowed:r.dropEffect=e.ctrlKey?"copy":"move":r.dropEffect=e.dataTransfer.dropEffect,s(),e.stopPropagation(),!1)}),d.on("dragleave",function(e){e=e.originalEvent||e,d.removeClass("dndDragover"),n(function(){d.hasClass("dndDragover")||p.remove()},100)})}}]).directive("dndNodrag",function(){return function(e,n,r){n.attr("draggable","true"),n.on("dragstart",function(e){e=e.originalEvent||e,e._dndHandle||(e.dataTransfer.types&&e.dataTransfer.types.length||e.preventDefault(),e.stopPropagation())}),n.on("dragend",function(e){e=e.originalEvent||e,e._dndHandle||e.stopPropagation()})}}).directive("dndHandle",function(){return function(e,n,r){n.attr("draggable","true"),n.on("dragstart dragend",function(e){e=e.originalEvent||e,e._dndHandle=!0})}}).factory("dndDragTypeWorkaround",function(){return{}}).factory("dndDropEffectWorkaround",function(){return{}}); |
| 43 | +try{var i=JSON.parse(e.dataTransfer.getData(n))}catch(v){return c()}if((n==r||n==a)&&(d=i.type||void 0,i=i.item,!g(d)))return c() |
| 44 | +var D=p() |
| 45 | +return l.dndDrop&&(i=u(l.dndDrop,e,d,D,i),!i)?c():(i!==!0&&o.$apply(function(){o.$eval(l.dndList).splice(D,0,i)}),u(l.dndInserted,e,d,D,i),"none"===e.dataTransfer.dropEffect?"copy"===e.dataTransfer.effectAllowed||"move"===e.dataTransfer.effectAllowed?t.dropEffect=e.dataTransfer.effectAllowed:t.dropEffect=e.ctrlKey?"copy":"move":t.dropEffect=e.dataTransfer.dropEffect,c(),e.stopPropagation(),!1)}),i.on("dragleave",function(e){e=e.originalEvent||e,i.removeClass("dndDragover"),d(function(){i.hasClass("dndDragover")||D.remove()},100)})}}]),e.directive("dndNodrag",function(){return function(e,n,a){n.attr("draggable","true"),n.on("dragstart",function(e){e=e.originalEvent||e,e._dndHandle||(e.dataTransfer.types&&e.dataTransfer.types.length||e.preventDefault(),e.stopPropagation())}),n.on("dragend",function(e){e=e.originalEvent||e,e._dndHandle||e.stopPropagation()})}}),e.directive("dndHandle",function(){return function(e,n,a){n.attr("draggable","true"),n.on("dragstart dragend",function(e){e=e.originalEvent||e,e._dndHandle=!0})}}) |
| 46 | +var t={}}(angular.module("dndLists",[])); |
0 commit comments