Mobius1/Selectable

View on GitHub
selectable.min.js

Summary

Maintainability
A
0 mins
Test Coverage
/*
 Selectable
 Copyright (c) 2017 Karl Saunders (Mobius1)
 Licensed under MIT (http://www.opensource.org/licenses/mit-license.php)

 Version: 0.22.0

*/
(function(G,v){"object"===typeof exports?module.exports=v("Selectable"):"function"===typeof define&&define.amd?define([],v):G.Selectable=v("Selectable")})("undefined"!==typeof global?global:this.window||this.global,function(){function G(a,b){for(var c=[],d=0,e=b.length;d<e;d++){var g=b[d];g=Math.hypot(g.rect.x1-parseInt(a.clientX),g.rect.y1-parseInt(a.clientY));c.push(parseInt(g))}c=c.indexOf(Math.min.apply(Math,c));return b[c].node}function v(a,b){return a&&a!==document.documentElement&&(b(a)?a:
    v(a.parentNode,b))}function C(a){return"[object Object]"===Object.prototype.toString.call(a)}function w(a){return Array.isArray(a)||a instanceof HTMLCollection||a instanceof NodeList}function H(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];d&&C(d)?(a[c]=a[c]||{},H(a[c],d)):a[c]=d}return a}function D(a,b){var c=a.style;if(a){if(void 0===b)return window.getComputedStyle(a);if(C(b))for(var d in b)d in c||(d="-webkit-"+d),a.style[d]=b[d]+("string"==typeof b[d]?"":"opacity"===d?"":"px")}}function E(a){var b=
    window;a=a.getBoundingClientRect();var c=document.documentElement||document.body.parentNode||document.body,d=void 0!==b.pageXOffset?b.pageXOffset:c.scrollLeft;b=void 0!==b.pageYOffset?b.pageYOffset:c.scrollTop;return{x1:a.left+d,x2:a.left+a.width+d,y1:a.top+b,y2:a.top+a.height+b,height:a.height,width:a.width}}function J(a,b,c){var d;return function(){c=c||this;if(!d)return a.apply(c,arguments),d=!0,setTimeout(function(){d=!1},b)}}var x=function(a){return!!a.ctrlKey||!!a.metaKey},y=["x","y"],t={x:"x1",
    y:"y1"},z={x:"x2",y:"y2"},I=function(a){this.version="0.22.0";this.v=this.version.split(".").map(function(b){return parseInt(b,10)});this.touch="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch;this.init(a)};I.prototype={init:function(a){if(!this.initialised){this.config=H({filter:".ui-selectable",tolerance:"touch",container:document.body,touch:!0,toggleTouch:!0,toggle:!1,autoRefresh:!0,throttle:50,lassoSelect:"normal",autoScroll:{threshold:0,increment:10},saveState:!1,
    ignore:!1,maxSelectable:!1,lasso:{border:"1px dotted #000",backgroundColor:"rgba(52, 152, 219, 0.2)"},keys:["shiftKey","ctrlKey","metaKey",""],classes:{lasso:"ui-lasso",handle:"ui-handle",selected:"ui-selected",container:"ui-container",selecting:"ui-selecting",selectable:"ui-selectable",deselecting:"ui-deselecting"}},a);this.origin={x:0,y:0};this.mouse={x:0,y:0};var b=this.config;this.autoscroll=C(b.autoScroll);this.lasso=!1;b.lasso&&C(b.lasso)&&(this.lasso=document.createElement("div"),this.lasso.className=
    b.classes.lasso,D(this.lasso,H({position:"absolute",boxSizing:"border-box",opacity:0},b.lasso)));this.touch&&(b.toggle=b.toggleTouch);b.touch||(this.touch=!1);this.callbacks={};var c="_start _touchstart _drag _end _keyup _keydown _blur _focus".split(" ");a=0;for(var d=c.length;a<d;a++){var e=c[a];this.callbacks[e]=this[e].bind(this)}this.callbacks._refresh=J(this.refresh,b.throttle,this);this.autoscroll&&(this.callbacks._scroll=this._onScroll.bind(this));this.setContainer();this.scroll={x:this.bodyContainer?
    window.pageXOffset:this.container.scrollLeft,y:this.bodyContainer?window.pageYOffset:this.container.scrollTop};w(b.filter)?this.nodes=[].slice.call(b.filter):"string"===typeof b.filter&&(this.nodes=[].slice.call(this.container.querySelectorAll(b.filter)));this.hasHandle=!1!==b.handle&&"string"===typeof b.handle;a=0;for(d=this.nodes.length;a<d;a++)if(c=this.nodes[a],c.classList.add(b.classes.selectable),this.hasHandle&&(c=c.querySelectorAll(b.handle),c.length)){e=0;for(var g=c.length;e<g;e++)c[e].classList.add(b.classes.handle)}this.update();
    this.enable();var l=this;setTimeout(function(){b.saveState&&l.state("save");l.emit("init");l.initialised=!0},10)}},update:function(){this._loadItems();this.refresh();this.emit("update",this.items)},refresh:function(){var a=window.innerWidth,b=window.innerHeight,c=this.bodyContainer?window.pageXOffset:this.container.scrollLeft,d=this.bodyContainer?window.pageYOffset:this.container.scrollTop;this.offsetWidth=this.container.offsetWidth;this.offsetHeight=this.container.offsetHeight;this.clientWidth=this.container.clientWidth;
    this.clientHeight=this.container.clientHeight;this.scrollWidth=this.container.scrollWidth;this.scrollHeight=this.container.scrollHeight;this.boundingRect=E(this.container);this.bodyContainer&&(this.boundingRect.x2=a,this.boundingRect.y2=b);this.scroll={x:c,y:d,max:{x:this.scrollWidth-(this.bodyContainer?a:this.clientWidth),y:this.scrollHeight-(this.bodyContainer?b:this.clientHeight)},size:{x:this.clientWidth,y:this.clientHeight},scrollable:{x:this.scrollWidth>this.offsetWidth,y:this.scrollHeight>
    this.offsetHeight}};for(a=0;a<this.nodes.length;a++)this.items[a].rect=E(this.nodes[a]);this.emit("refresh")},attachEvents:function(){var a=this.callbacks;this.detachEvents();if(this.touch){if(this.on(this.container,"touchstart",a._touchstart),this.on(document,"touchend",a._end),this.on(document,"touchcancel",a._end),!1!==this.lasso)this.on(document,"touchmove",a._drag)}else if(this.on(this.container,"mousedown",a._start),this.on(document,"mouseup",a._end),this.on(document,"keydown",a._keydown),this.on(document,
    "keyup",a._keyup),this.on(this.container,"mouseenter",a._focus),this.on(this.container,"mouseover",a._focus),this.on(this.container,"mouseleave",a._blur),!1!==this.lasso)this.on(document,"mousemove",a._drag);if(this.autoscroll)this.on(this.bodyContainer?window:this.container,"scroll",a._scroll);this.on(window,"resize",a._refresh);this.on(window,"scroll",a._refresh)},detachEvents:function(){var a=this.callbacks;this.off(this.container,"mousedown",a._start);this.off(document,"mousemove",a._drag);this.off(document,
    "mouseup",a._end);this.off(document,"keydown",a._keydown);this.off(document,"keyup",a._keyup);this.off(this.container,"mouseenter",a._focus);this.off(this.container,"mouseover",a._focus);this.off(this.container,"mouseleave",a._blur);this.autoscroll&&this.off(this.bodyContainer?window:this.container,"scroll",a._scroll);this.off(this.container,"touchstart",a._touchstart);this.off(document,"touchend",a._end);this.off(document,"touchcancel",a._end);this.off(document,"touchmove",a._drag);this.off(window,
    "resize",a._refresh);this.off(window,"scroll",a._refresh)},bind:function(){this.attachEvents()},unbind:function(){this.detachEvents()},setContainer:function(a){var b=this.config;if(this.container){var c=this.container;this.detachEvents()}void 0===a&&(b.appendTo?(a=b.appendTo,b.container=b.appendTo):b.container&&(a=b.container));"string"===typeof a?this.container=document.querySelector(a):a instanceof Element&&a.nodeName&&(this.container=a);this.container.classList.add(b.classes.container);this.container._selectable=
    this;c&&(c.classList.remove(b.classes.container),delete c._selectable);this.bodyContainer=this.container===document.body;this._loadItems();this.autoscroll&&"static"===D(this.container).position&&!this.bodyContainer&&(this.container.style.position="relative");this.attachEvents()},select:function(a,b,c){b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:!1;c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:!0;if(w(a)){for(var d=this.getSelectedItems().length,e=0;e<a.length&&!(this.config.maxSelectable&&
    d>=this.config.maxSelectable);e++)this.select(a[e],!1,!1),d++;c&&this.config.saveState&&this.state("save");return this.getSelectedItems()}if(a=this.get(a)){if(this.config.toggle&&"drag"===this.config.toggle&&!b&&a.selected&&!this.cmdDown)return this.deselect(a,!1);d=a.node;e=this.config.classes;d.classList.remove(e.selecting);d.classList.add(e.selected);a.selecting=!1;a.selected=!0;a.startselected=!0;c&&this.config.saveState&&this.state("save");this.emit("select",a);return a}return!1},deselect:function(a,
    b){if(w(a)){for(var c=0;c<a.length;c++)this.deselect(a[c],!1);b&&this.config.saveState&&this.state("save");return this.getSelectedItems()}if(a=this.get(a)){c=a.node;var d=this.config.classes;a.selecting=!1;a.selected=!1;a.deselecting=!1;a.startselected=!1;c.classList.remove(d.deselecting);c.classList.remove(d.selecting);c.classList.remove(d.selected);b&&this.config.saveState&&this.state("save");this.emit("deselect",a);return a}return!1},toggle:function(a,b){if(void 0===a)return this.invert();var c=
    this.get(a);if(c){this._isCollection(c)||(c=[c]);for(var d=0,e=c.length;d<e;d++){var g=c[d];void 0!==b?b?this.select(g,!1,!1):this.deselect(g,!1):g.selected?this.deselect(g,!1):this.select(g,!1,!1)}this.config.saveState&&this.state("save")}},add:function(a){var b=[];"string"===typeof a&&(a=[].slice.call(this.container.querySelectorAll(a)));w(a)||(a=[a]);for(var c=0,d=a.length;c<d;c++){var e=a[c];if(0>this.nodes.indexOf(e)&&e instanceof Element&&(b.push(e),e.classList.add(this.config.classes.selectable),
    this.hasHandle&&(e=e.querySelectorAll(this.config.handle),0<e.length)))for(var g=0,l=e.length;g<l;g++)e[g].classList.add(this.config.classes.handle)}this.nodes=this.nodes.concat(b);this.update();for(c=0;c<b.length;c++)this.emit("add",this.get(b[c]))},remove:function(a,b){if(a=this.get(a)){if(w(a))for(var c=a.length-1;0<=c;c--)this.remove(a[c],0<c);else{c=a.node;var d=this.config.classes;c.classList.remove(d.selectable);c.classList.remove(d.deselecting);c.classList.remove(d.selecting);c.classList.remove(d.selected);
    if(this.hasHandle){var e=c.querySelectorAll(this.config.handle);if(e.length){c=0;for(var g=e.length;c<g;c++)e[c].classList.remove(d.handle)}}this.nodes.splice(this.nodes.indexOf(a.node),1);this.emit("remove",a)}b||this.update();return!0}return!1},selectAll:function(){var a=this.items.length;this.config.maxSelectable&&this.config.maxSelectable<a&&(a=this.config.maxSelectable);for(var b=0;b<a;b++)this.select(this.items[b],!0,!1);this.config.saveState&&this.state("save")},invert:function(){var a=this.getItems();
    if(this.config.maxSelectable&&this.config.maxSelectable<a.length)return this._maxReached();for(a=0;a<this.items.length;a++){var b=this.items[a];b.selected?this.deselect(b,!1):this.select(b,!1,!1)}this.config.saveState&&this.state("save")},clear:function(a){a=0<arguments.length&&void 0!==arguments[0]?!1:!0;for(var b=this.items.length-1;0<=b;b--)this.deselect(this.items[b],!1);a&&this.config.saveState&&this.state("save")},get:function(a){var b=!1;"string"===typeof a&&(a=[].slice.call(this.container.querySelectorAll(a)));
    if(w(a)){b=[];for(var c=0;c<a.length;c++){var d=this.get(a[c]);d&&b.push(d)}}else isNaN(a)?a instanceof Element?b=this.items[this.nodes.indexOf(a)]:C(a)&&0<=this.items.indexOf(a)&&(b=a):0<=this.items.indexOf(this.items[a])&&(b=this.items[a]);return b},getItems:function(){return this.items},getNodes:function(){return this.nodes},getFirstSelectedItem:function(){return this.getSelectedItems()[0]},getFirstSelectedNode:function(){return this.getSelectedNodes()[0]},getSelectedItems:function(a){return this.getItems().filter(function(b){return a?
    !b.selected:b.selected})},getUnSelectedItems:function(a){return this.getItems().filter(function(b){return!b.selected})},getSelectedNodes:function(){return this.getSelectedItems().map(function(a){return a.node})},getUnSelectedNodes:function(){return this.getUnSelectedItems().map(function(a){return a.node})},state:function(a){var b=!1,c=!1;switch(a){case "save":this.states=this.states||[];this.states.push(this.getSelectedNodes());c=this.config.saveState;c="isInteger"in Number?Number.isInteger(c):!isNaN(c);
    c&&this.states.length>this.config.saveState&&this.states.shift();this.currentState=this.states.length-1;c=!0;break;case "undo":0<this.currentState&&(this.currentState--,c=b=!0);break;case "redo":this.currentState<this.states.length-1&&(this.currentState++,c=b=!0);break;case "clear":this.states=[],this.currentState=!1}b&&(this.clear(!1),this.select(this.states[this.currentState],!1,!1));c&&this.emit("state."+a,this.states[this.currentState],this.states)},undo:function(){this.state("undo")},redo:function(){this.state("redo")},
    enable:function(){if(!this.enabled){var a=this.config.keys;this.enabled=!0;this.canShift=0<=a.indexOf("shiftKey");this.canCtrl=0<=a.indexOf("ctrlKey");this.canMeta=0<=a.indexOf("metaKey");this.attachEvents();this.container.classList.add(this.config.classes.container);this.emit("enable")}return this.enabled},disable:function(){this.enabled&&(this.enabled=!1,this.detachEvents(),this.container.classList.remove(this.config.classes.container),this.emit("disabled"));return this.enabled},destroy:function(){this.initialised&&
    (this.disable(),this.emit("destroyed"),this.listeners=!1,this.clear(),this.state("clear"),this.remove(this.items),this.callbacks=null,this.initialised=!1)},on:function(a,b,c){"string"===typeof a?(this.listeners=this.listeners||{},this.listeners[a]=this.listeners[a]||[],this.listeners[a].push({callback:b,once:!1})):a.addEventListener(b,c,!1)},once:function(a,b,c){"string"===typeof a?(this.listeners=this.listeners||{},this.listeners[a]=this.listeners[a]||[],this.listeners[a].push({callback:b,once:!0})):
    a.addEventListener(b,c,!1)},off:function(a,b,c){if("string"===typeof a){if(this.listeners=this.listeners||{},!1!==a in this.listeners){c=0;for(var d=this.listeners[a].length;c<d;c++)this.listeners[a][c].callback===b&&this.listeners[a].splice(c,1)}}else a.removeEventListener(b,c)},emit:function(a){this.listeners=this.listeners||{};if(!1!==a in this.listeners)for(var b=0,c=this.listeners[a].length;b<c;b++)this.listeners[a][b].callback.apply(this,Array.prototype.slice.call(arguments,1)),this.listeners[a][b].once&&
    this.off(a,this.listeners[a][b].callback)},_maxReached:function(){return this.emit("maxitems")},_touchstart:function(a){this.off(this.container,"mousedown",this.callbacks.start);this._start(a)},_start:function(a){var b=this,c=this._getEvent(a),d=this.config,e,g=x(a)&&(this.canCtrl||this.canMeta),l=this.canShift&&!!a.shiftKey,h=this.getSelectedItems().length,m=d.maxSelectable;if(m&&h>=m&&(g||l))return this._maxReached();if(!(!this.container.contains(a.target)||3===a.which||0<a.button||d.disabled)){if(this.scroll.scrollable.y&&
    c.pageX>this.boundingRect.x1+this.scroll.size.x||this.scroll.scrollable.x&&c.pageY>this.boundingRect.y1+this.scroll.size.y)return!1;if(this.config.ignore){m=!1;var f=this.config.ignore;Array.isArray(f)||(f=[f]);for(h=0;h<f.length;h++)if(a.target.closest(f[h])){m=!0;break}if(m)return!1}if(this.hasHandle&&!a.target.classList.contains(d.classes.handle))return!1;m=v(a.target,function(r){return r===b.container||r.classList.contains(d.classes.selectable)});if(!m)return!1;-1===["INPUT","SELECT","BUTTON",
    "TEXTAREA","OPTION"].indexOf(a.target.tagName)&&a.preventDefault();this.dragging=!0;this.origin={x:c.pageX+(this.bodyContainer?0:this.scroll.x),y:c.pageY+(this.bodyContainer?0:this.scroll.y),scroll:{x:this.scroll.x,y:this.scroll.y}};this.lasso&&this.container.appendChild(this.lasso);m!==this.container?(f=this.get(m),f.selecting=!0,m.classList.add(d.classes.selecting),this.emit("selecting",c,f)):"sequential"==d.lassoSelect&&(m=G(c,this.items));d.autoRefresh&&this.refresh();if(l&&this.startEl&&m!==
    this.container){f=this.getItems();var k=this.getNodes().indexOf(m);h=this.getNodes().indexOf(this.getFirstSelectedNode());if(k>h)for(h+=1;h<k;h++)f[h].selecting=!0,this.emit("selecting",c,f[h]);else for(--h;h>k;h--)f[h].selecting=!0,this.emit("selecting",c,f[h])}for(h=0;h<this.items.length;h++){f=this.items[h];k=f.node;var n=k===m;f.selected&&(f.startselected=!0,(d.toggle||g?!n:n||l)||(k.classList.remove(d.classes.selected),f.selected=!1,k.classList.add(d.classes.deselecting),f.deselecting=!0,this.emit("deselecting",
    c,f)));n&&(e=f)}this.startEl=m;this.emit("start",a,e)}},_drag:function(a){var b=this.config;if(!(b.disabled||!this.dragging||a.shiftKey&&this.canShift)){var c=this._getEvent(a);x(a);this.mouse={x:c.pageX,y:c.pageY};this.current={x1:this.origin.x,y1:this.origin.y,x2:this.mouse.x+(this.bodyContainer?0:this.scroll.x),y2:this.mouse.y+(this.bodyContainer?0:this.scroll.y)};for(var d=0;d<y.length;d++){var e=y[d];if(this.current[t[e]]>this.current[z[e]]){var g=this.current[z[e]];this.current[z[e]]=this.current[t[e]];
    this.current[t[e]]=g}}this.coords={x1:this.current.x1,x2:this.current.x2-this.current.x1,y1:this.current.y1,y2:this.current.y2-this.current.y1};if("normal"===b.lassoSelect)for(d=0;d<this.items.length;d++)this._highlight(this.items[d],x(a)&&(this.canCtrl||this.canMeta),c);else"sequential"===b.lassoSelect&&this._sequentialSelect(c);this.autoscroll&&(this.bodyContainer||(this.coords.x1-=this.boundingRect.x1,this.coords.y1-=this.boundingRect.y1),this._autoScroll());this.lasso&&(this.bodyContainer||!this.autoscroll||
    this.config.autoScroll.lassoOverflow||this._limitLasso(),D(this.lasso,{left:this.coords.x1,top:this.coords.y1,width:this.coords.x2,height:this.coords.y2,opacity:1}));this.emit("drag",a,this.coords)}},_end:function(a){if(this.dragging){this.dragging=!1;var b=this.config,c=a.target,d=this._getEvent(a),e=[],g=[],l=this.getSelectedItems().length,h=b.maxSelectable;this.lasso&&this.container.contains(this.lasso)&&this.container.removeChild(this.lasso);this.lasso&&(D(this.lasso,{opacity:0,left:0,width:0,
    top:0,height:0}),c=document.elementFromPoint(d.pageX,d.pageY),c||(c=this.container));c=v(c,function(n){return n.classList.contains(b.classes.selectable)});for(var m=!1,f=0;f<this.items.length;f++){var k=this.items[f];b.toggle&&k.node===c&&k.node===this.startEl&&k.selecting&&k.startselected&&(k.deselecting=!0,k.selecting=!1,this.emit("deselecting",d,k));k.deselecting&&(g.push(k),this.deselect(k,!1));k.selecting&&(h&&l+e.length>=h?(k.selecting=!1,k.node.classList.remove(b.classes.selecting),m=!0):(e.push(k),
    this.select(k,!1,!1)))}b.saveState&&this.state("save");this.emit("end",a,e,g);if(m)return this._maxReached()}},_keydown:function(a){this.cmdDown=x(a)&&(this.canCtrl||this.canMeta);var b=!1;void 0!==a.key?b=a.key:void 0!==a.keyCode&&(b=a.keyCode);if(b)if(this.cmdDown&&this.focused)switch(b){case 65:case "a":case "A":a.preventDefault();this.selectAll();break;case 89:case "y":case "Y":this.state("redo");break;case 90:case "z":case "Z":this.state("undo")}else switch(b){case 32:case " ":this.toggle(document.activeElement)}},
    _keyup:function(a){this.cmdDown=x(a)&&(this.canCtrl||this.canMeta)},_onScroll:function(a){this.scroll.x=this.bodyContainer?window.pageXOffset:this.container.scrollLeft;this.scroll.y=this.bodyContainer?window.pageYOffset:this.container.scrollTop;for(a=0;a<this.items.length;a++)this.items[a].rect=E(this.items[a].node)},_loadItems:function(){var a,b=this.config;this.nodes=[].slice.call(this.container.querySelectorAll("."+b.classes.selectable));this.items=[];if(this.nodes.length)for(var c=0;c<this.nodes.length;c++){var d=
    this.nodes[c];d.classList.add(b.classes.selectable);var e={node:d,rect:E(d),startselected:!1,selected:d.classList.contains(b.classes.selected),selecting:d.classList.contains(b.classes.selecting),deselecting:d.classList.contains(b.classes.deselecting)},g=this._get2DTransformation(d);if(g){var l=d;var h=a=0;do a+=l.offsetTop||0,h+=l.offsetLeft||0,l=l.offsetParent;while(l);l=h;h=g.translate;var m=g.origin,f=g.scale,k=m.x;m=m.y;var n=d.offsetWidth/2,r=d.offsetHeight/2;d=l+(n-k)*f+k;var q=a+(r-m)*f+m;
    n*=f;f*=r;f=[{x:d-n,y:q-f},{x:d+n,y:q-f},{x:d+n,y:q+f},{x:d-n,y:q+f}];for(d=0;3>=d;d++){q=f;n=d;r=f[d].x+h.x;var u=f[d].y+h.y,A=l+k+h.x,B=a+m+h.y,p=g.angle;p=p*Math.PI/180;q[n]={x:Math.cos(p)*(r-A)-Math.sin(p)*(u-B)+A,y:Math.sin(p)*(r-A)+Math.cos(p)*(u-B)+B}}e.transform={rect:f}}this.items.push(e)}},_getEvent:function(a){return this.touch?"touchend"===a.type?a.changedTouches[0]:a.touches[0]:a},_autoScroll:function(){var a=this.config.autoScroll,b=a.increment;a=a.threshold;var c={x:0,y:0};this.bodyContainer&&
    (this.mouse.x-=this.scroll.x,this.mouse.y-=this.scroll.y);for(var d=0;d<y.length;d++){var e=y[d];this.mouse[e]>=this.boundingRect[z[e]]-a&&this.scroll[e]<this.scroll.max[e]?c[e]=b:this.mouse[e]<=this.boundingRect[t[e]]+a&&0<this.scroll[e]&&(c[e]=-b)}this.bodyContainer?window.scrollBy(c.x,c.y):(this.container.scrollTop+=c.y,this.container.scrollLeft+=c.x)},_limitLasso:function(){for(var a=0;a<y.length;a++){var b=y[a],c=this.boundingRect[t[b]]+this.scroll.size[b];if(this.mouse[b]>=c&&this.scroll[b]>=
    this.scroll.max[b]){var d=this.origin[b]-this.boundingRect[t[b]]-this.scroll[b];this.coords[t[b]]=this.origin[b]-this.boundingRect[t[b]];this.coords[z[b]]=c-d-this.boundingRect[t[b]]}this.mouse[b]<=this.boundingRect[t[b]]&&0>=this.scroll[b]&&(this.coords[t[b]]=0,this.coords[z[b]]=this.origin[b]-this.boundingRect[t[b]])}},_sequentialSelect:function(a){var b=this.config.classes,c=document.elementFromPoint(a.pageX,a.pageY-window.pageYOffset);if(c&&(c=c.closest("."+b.selectable))){if(this.mouse.y>this.origin.y){var d=
    this.nodes.indexOf(this.startEl);var e=this.nodes.indexOf(c)}else this.mouse.y<this.origin.y&&(d=this.nodes.indexOf(c),e=this.nodes.indexOf(this.startEl));for(c=0;c<this.items.length;c++){var g=this.items[c];c>=d&&c<=e?this._highlight(g,x(a)&&(this.canCtrl||this.canMeta)):(g.selecting=!1,g.node.classList.remove(b.selecting))}}},_highlight:function(a,b,c){var d=this.config,e=a.node,g=!1,l=this.bodyContainer?0:this.scroll.x,h=this.bodyContainer?0:this.scroll.y;if("normal"===d.lassoSelect)if("touch"===
    d.tolerance)if(a.transform)a:{g=[{x:this.origin.x,y:this.origin.y},{x:this.mouse.x+l,y:this.origin.y},{x:this.mouse.x+l,y:this.mouse.y+h},{x:this.origin.x,y:this.mouse.y+h}],l=a.transform.rect;var m,f,k,n=[g,l];for(h=0;h<n.length;h++){var r=n[h];for(m=0;m<r.length;m++){var q=r[m];var u=r[(m+1)%r.length];var A=u.y-q.y,B=q.x-u.x;q=u=void 0;for(f=0;f<g.length;f++){var p=A*g[f].x+B*g[f].y;(void 0===q||p<q)&&(q=p);(void 0===u||u<p)&&(u=p)}var F=k=void 0;for(f=0;f<l.length;f++)p=A*l[f].x+B*l[f].y,(void 0===
    F||p<F)&&(F=p),(void 0===k||k<p)&&(k=p);if(u<F||k<q){g=!1;break a}}}g=!0}else g=!(a.rect.x1+l>this.current.x2||a.rect.x2+l<this.current.x1||a.rect.y1+h>this.current.y2||a.rect.y2+h<this.current.y1);else"fit"===d.tolerance&&(g=a.rect.x1+l>this.current.x1&&a.rect.x2+l<this.current.x2&&a.rect.y1+h>this.current.y1&&a.rect.y2+h<this.current.y2);else g=!0;g?(a.selected&&!d.toggle&&(e.classList.remove(d.classes.selected),a.selected=!1),a.deselecting&&(!d.toggle||d.toggle&&"drag"!==d.toggle)&&(e.classList.remove(d.classes.deselecting),
    a.deselecting=!1),a.selecting||(e.classList.add(d.classes.selecting),a.selecting=!0,this.emit("selecting",c,a))):(a.selecting&&(e.classList.remove(d.classes.selecting),a.selecting=!1,b&&a.startselected?(e.classList.add(d.classes.selected),a.selected=!0):a.startselected&&!d.toggle&&(e.classList.add(d.classes.deselecting),a.deselecting=!0,this.emit("deselecting",c,a))),!a.selected||b||a.startselected||(e.classList.remove(d.classes.selected),a.selected=!1,e.classList.add(d.classes.deselecting),a.deselecting=
    !0,this.emit("deselecting",c,a)))},_focus:function(a){this.focused=!0;this.container.classList.add("ui-focused")},_blur:function(a){this.focused=!1;this.container.classList.remove("ui-focused")},_get2DTransformation:function(a){a=window.getComputedStyle(a,null);var b=a.getPropertyValue("-webkit-transform")||a.getPropertyValue("-moz-transform")||a.getPropertyValue("-ms-transform")||a.getPropertyValue("-o-transform")||a.getPropertyValue("transform")||!1;if(b&&"none"!==b){b=b.split("(")[1].split(")")[0].split(", ");
    var c=parseFloat(b[0]),d=parseFloat(b[1]),e=Math.sqrt(c*c+d*d);a=a.transformOrigin.split(" ").map(function(g){return parseFloat(g)});return{angle:Math.round(180/Math.PI*Math.atan2(d,c)),scale:e,origin:{x:parseFloat(a[0]),y:parseFloat(a[1])},translate:{x:parseFloat(b[4]),y:parseFloat(b[5])}}}return!1}};return I});