forked from maxazan/angular-multiple-selection
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmultiple-selection.min.js
More file actions
1 lines (1 loc) · 3.08 KB
/
multiple-selection.min.js
File metadata and controls
1 lines (1 loc) · 3.08 KB
1
!function(){function a(b){for(var c=[],d=b.children(),e=0;e<d.length;e++){var f=angular.element(d[e]);f.scope().isSelectable?c.push(f):f.scope().$id!=b.scope().$id&&f.scope().isSelectableZone===!0||(c=c.concat(a(f)))}return c}function b(b){for(var c=a(b),d=0;d<c.length;d++)c[d].scope().isSelected=!1}function c(a){var b,c={top:0,left:0},d=a&&a.ownerDocument;return b=d.documentElement,void 0!==typeof a.getBoundingClientRect&&(c=a.getBoundingClientRect()),{top:c.top+(window.pageYOffset||b.scrollTop)-(b.clientTop||0),left:c.left+(window.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}}angular.module("multipleSelection",[]).directive("multipleSelectionItem",[function(){return{scope:!0,restrict:"A",link:function(b,c,d,e){b.isSelectable=!0,b.isSelecting=!1,b.isSelected=!1,c.on("mousedown",function(b){if(c.scope().isSelected)b.ctrlKey&&(c.scope().isSelected=!1,c.scope().$apply());else{if(!b.ctrlKey)for(var d=a(c.parent()),e=0;e<d.length;e++)d[e].scope().isSelectable&&(d[e].scope().isSelecting!==!0&&d[e].scope().isSelected!==!0||(d[e].scope().isSelecting=!1,d[e].scope().isSelected=!1,d[e].scope().$apply()));c.scope().isSelected=!0,c.scope().$apply()}b.stopPropagation()})}}}]).directive("multipleSelectionZone",["$document",function(d){return{scope:!0,restrict:"A",link:function(e,f,g,h){function o(a,b){return(b.beginX<=a.beginX&&a.beginX<=b.endX||a.beginX<=b.beginX&&b.beginX<=a.endX)&&(b.beginY<=a.beginY&&a.beginY<=b.endY||a.beginY<=b.beginY&&b.beginY<=a.endY)}function p(a,b,c,d){var e={};return a>c?(e.beginX=c,e.endX=a):(e.beginX=a,e.endX=c),b>d?(e.beginY=d,e.endY=b):(e.beginY=b,e.endY=d),e}function q(a,b,c,d,e){var f=p(b,c,d,e);n.css({top:f.beginY+"px",left:f.beginX+"px",width:f.endX-f.beginX+"px",height:f.endY-f.beginY+"px"})}function r(b){b.preventDefault(),q(n,l,m,b.pageX,b.pageY);for(var d=a(f),e=0;e<d.length;e++)o(p(c(d[e][0]).left,c(d[e][0]).top,c(d[e][0]).left+d[e].prop("offsetWidth"),c(d[e][0]).top+d[e].prop("offsetHeight")),p(l,m,b.pageX,b.pageY))?d[e].scope().isSelecting===!1&&(d[e].scope().isSelecting=!0,d[e].scope().$apply()):d[e].scope().isSelecting===!0&&(d[e].scope().isSelecting=!1,d[e].scope().$apply())}function s(b){b.preventDefault(),n.remove();for(var c=a(f),e=0;e<c.length;e++)c[e].scope().isSelecting===!0&&(c[e].scope().isSelecting=!1,c[e].scope().isSelected=!b.ctrlKey||!c[e].scope().isSelected,c[e].scope().$apply());d.off("mousemove",r),d.off("mouseup",s)}e.isSelectableZone=!0;var i=g.multipleSelectionZone,j=g.multipleSelectionZoneField;i&&i.length>0&&j&&j.length>0&&(e.$parent.$parent[i]=function(){var b=[],c=a(f);return angular.forEach(c,function(a){a.scope().isSelected&&b.push(a.scope()[j])}),b});var k=g.multipleSelectionClear;k&&k.length>0&&(e.$parent.$parent[k]=function(){b(f)});var n,l=0,m=0;f.on("mousedown",function(b){if(b.preventDefault(),!b.ctrlKey)for(var c=a(f),e=0;e<c.length;e++)c[e].scope().isSelecting!==!0&&c[e].scope().isSelected!==!0||(c[e].scope().isSelecting=!1,c[e].scope().isSelected=!1,c[e].scope().$apply());l=b.pageX,m=b.pageY,n=angular.element("<div></div>").addClass("select-helper"),d.find("body").eq(0).append(n),d.on("mousemove",r),d.on("mouseup",s)})}}}])}();