{"version":3,"sources":["webpack:///./node_modules/vuedraggable/dist/vuedraggable.js","webpack:///./node_modules/sortablejs/Sortable.js"],"names":["Symbol","iterator","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_toConsumableArray","arr","Array","isArray","arr2","from","buildAttribute","object","propName","value","undefined","buildDraggable","Sortable","removeNode","node","parentElement","removeChild","insertNodeAt","fatherNode","position","refNode","children","nextSibling","insertBefore","computeVmIndex","vnodes","element","map","elt","elm","indexOf","_computeIndexes","slots","isTransition","elmFromNodes","rawIndexes","concat","filter","ind","emit","evtName","evtData","_this","this","$nextTick","$emit","toLowerCase","delegateAndEmit","_this2","realList","eventsListened","eventsToEmit","readonlyProperties","evt","draggingElement","props","options","list","type","required","default","noTransitionOnDrag","Boolean","clone","Function","original","String","move","componentData","draggableComponent","name","data","transitionMode","noneFunctionalComponentMode","init","render","h","$slots","child","componentOptions","tag","headerOffset","_$slots","header","footer","attributes","update","$attrs","_componentData","on","_props","mounted","_this3","$el","nodeName","Error","optionsAdded","forEach","bind","onMove","originalEvent","onDragMove","draggable","_sortable","rootContainer","computeIndexes","beforeDestroy","destroy","computed","isCloning","group","pull","watch","handler","newOptionValue","property","option","deep","methods","getChildrenNodes","$children","rawNodes","_this4","visibleIndexes","getUnderlyingVm","htmlElt","index","getUnderlyingPotencialDraggableComponent","_ref","__vue__","$options","_componentTag","$parent","emitChanges","_this5","alterList","onList","newList","spliceList","_arguments","splice","apply","updatePosition","oldIndex","newIndex","getRelatedContextFromMoveEvent","_ref2","to","related","component","context","destination","getVmIndex","domIndex","indexes","numberIndexes","getComponent","componentInstance","resetTransitionData","nodes","transitionContainer","kept","onDragStart","item","_underlying_vm_","onDragAdd","updateEvenemt","added","onDragRemove","removed","onDragUpdate","moved","updateProperty","propertyName","computeFutureIndex","relatedContext","domChildren","el","style","currentDOMIndex","currentIndex","draggedInList","willInsertAfter","draggedContext","futureIndex","onDragEnd","slice","module","exports","factory","window","document","dragEl","parentEl","ghostEl","cloneEl","rootEl","nextEl","lastDownEl","scrollEl","scrollParentEl","scrollCustomFn","activeGroup","putSortable","pointerElemChangedInterval","lastPointerElemX","lastPointerElemY","tapEvt","touchEvt","lastTarget","lastDirection","lastMode","targetMoveDistance","realDragElRect","autoScrolls","scrolling","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","R_SPACE","expando","Date","getTime","win","parseInt","setTimeout","$","jQuery","Zepto","Polymer","captureMode","capture","passive","IE11OrLess","navigator","userAgent","match","Edge","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_silent","_alignedSilent","abs","Math","min","savedInputChecked","_detectDirection","elCSS","_css","elWidth","width","child1","_getChild","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","_getRect","secondChildWidth","display","flexDirection","float","touchingSideChild2","clear","_detectNearestEmptySortable","x","y","rect","threshold","emptyInsertThreshold","insideHorizontally","left","right","insideVertically","top","bottom","_isClientInRowColumn","axis","targetRect","targetS1Opp","targetS2Opp","mouseOnOppAxis","_isElInRowColumn","el1","el2","el1Rect","el2Rect","el1S1Opp","el1S2Opp","el1OppLength","height","el2S1Opp","el2S2Opp","el2OppLength","_getParentAutoScrollElement","includeSelf","getBoundingClientRect","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","parentNode","_autoScroll","_throttle","isFallback","scroll","sens","scrollSensitivity","speed","scrollSpeed","clientX","clientY","scrollThisInstance","innerWidth","innerHeight","_clearAutoScrolls","scrollFn","layersOut","currentParent","css","vx","vy","canScrollX","canScrollY","scrollPosX","scrollPosY","scrollLeft","scrollTop","documentElement","clearInterval","pid","setInterval","layer","active","_emulateDragOver","scrollOffsetY","scrollOffsetX","scrollTo","pageXOffset","pageYOffset","bubbleScroll","autoScroll","_prepareGroup","toFn","sameGroup","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","_checkAlignment","_computeIsAligned","_isTrueParentSortable","trueParent","_artificalBubble","sortable","originalEvt","method","nextParent","_extend","artificialBubble","_hideGhostForTarget","_unhideGhostForTarget","addEventListener","preventDefault","stopPropagation","stopImmediatePropagation","_throttleTimeout","nearestEmptyInsertDetectEvent","touches","nearest","_onDragOver","nodeType","toString","defaults","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","fn","charAt","nativeDraggable","_on","_onTapStart","push","get","_closest","selector","ctx","includeCTX","_matches","substring","_getParentOrHost","host","_globalDragOver","dropEffect","cancelable","event","_off","removeEventListener","_toggleClass","state","classList","className","replace","prop","val","defaultView","getComputedStyle","currentStyle","_matrix","appliedTransforms","transform","DOMMatrix","WebKitCSSMatrix","CSSMatrix","_find","tagName","getElementsByTagName","n","_dispatchEvent","targetEl","toEl","fromEl","startIndex","onName","toUpperCase","substr","CustomEvent","createEvent","initEvent","bubbles","dispatchEvent","_onMove","dragRect","retVal","onMoveFn","dragged","draggedRect","relatedRect","_disableDraggable","_unsilent","childNum","currentChild","_lastChild","last","lastElementChild","previousElementSibling","_ghostIsLast","elRect","mouseOnAxis","targetS2","spacer","_getSwapDirection","isLastTarget","targetLength","targetS1","invert","_getInsertDirection","dragElIndex","_index","targetIndex","_generateId","str","src","href","sum","charCodeAt","matches","msMatchesSelector","webkitMatchesSelector","_","callback","ms","args","_cancelThrottle","clearTimeout","dst","_clone","dom","cloneNode","_saveInputCheckedState","root","inputs","idx","checked","_nextTick","_cancelNextTick","id","container","adjustForTransform","containerRect","matrix","scaleX","a","scaleY","d","_isScrolledPast","side","parent","elSide","visible","parentSide","constructor","elementFromPoint","sortableMouseAligned","_getDirection","touch","originalTarget","shadowRoot","path","composedPath","button","isContentEditable","split","some","criteria","trim","_prepareDragStart","_handleAutoScroll","fallback","ogElemScroller","newElem","dragStartFn","ownerDocument","_lastX","_lastY","transition","_disableDelayedDrag","_triggerDragStart","_onDrop","_delayedDragTouchMoveHandler","_dragStartTimer","e","pointerType","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","_appendGhost","_nulling","bypassLastTouchCheck","inserted","dx","dy","translate3d","appendChild","_hideClone","_cloneId","_loopId","effectAllowed","_dragStartId","revert","activeSortable","isOwner","canSort","animated","completed","contains","lastPutMode","_showClone","changed","_animate","targetBeforeFirstSwap","aligned","differentLevel","scrolledPastTop","nextElementSibling","after","moveVector","prevRect","currentRect","offsetWidth","_offUpEvents","save","handleEvent","toArray","order","getAttribute","items","set","closest","querySelectorAll","removeAttribute","cloneHidden","utils","off","find","is","extend","throttle","toggleClass","nextTick","cancelNextTick","detectDirection","getChild","create","version"],"mappings":"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","file":"js/chunk-70f35996.09b34812.js","sourcesContent":["'use strict';\r\n\r\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\r\n\r\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n\r\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\r\n\r\n(function () {\r\n \"use strict\";\r\n\r\n if (!Array.from) {\r\n Array.from = function (object) {\r\n return [].slice.call(object);\r\n };\r\n }\r\n\r\n function buildAttribute(object, propName, value) {\r\n if (value == undefined) {\r\n return object;\r\n }\r\n object = object == null ? {} : object;\r\n object[propName] = value;\r\n return object;\r\n }\r\n\r\n function buildDraggable(Sortable) {\r\n function removeNode(node) {\r\n node.parentElement.removeChild(node);\r\n }\r\n\r\n function insertNodeAt(fatherNode, node, position) {\r\n var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\r\n fatherNode.insertBefore(node, refNode);\r\n }\r\n\r\n function computeVmIndex(vnodes, element) {\r\n return vnodes.map(function (elt) {\r\n return elt.elm;\r\n }).indexOf(element);\r\n }\r\n\r\n function _computeIndexes(slots, children, isTransition) {\r\n if (!slots) {\r\n return [];\r\n }\r\n\r\n var elmFromNodes = slots.map(function (elt) {\r\n return elt.elm;\r\n });\r\n var rawIndexes = [].concat(_toConsumableArray(children)).map(function (elt) {\r\n return elmFromNodes.indexOf(elt);\r\n });\r\n return isTransition ? rawIndexes.filter(function (ind) {\r\n return ind !== -1;\r\n }) : rawIndexes;\r\n }\r\n\r\n function emit(evtName, evtData) {\r\n var _this = this;\r\n\r\n this.$nextTick(function () {\r\n return _this.$emit(evtName.toLowerCase(), evtData);\r\n });\r\n }\r\n\r\n function delegateAndEmit(evtName) {\r\n var _this2 = this;\r\n\r\n return function (evtData) {\r\n if (_this2.realList !== null) {\r\n _this2['onDrag' + evtName](evtData);\r\n }\r\n emit.call(_this2, evtName, evtData);\r\n };\r\n }\r\n\r\n var eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'];\r\n var eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'];\r\n var readonlyProperties = ['Move'].concat(eventsListened, eventsToEmit).map(function (evt) {\r\n return 'on' + evt;\r\n });\r\n var draggingElement = null;\r\n\r\n var props = {\r\n options: Object,\r\n list: {\r\n type: Array,\r\n required: false,\r\n default: null\r\n },\r\n value: {\r\n type: Array,\r\n required: false,\r\n default: null\r\n },\r\n noTransitionOnDrag: {\r\n type: Boolean,\r\n default: false\r\n },\r\n clone: {\r\n type: Function,\r\n default: function _default(original) {\r\n return original;\r\n }\r\n },\r\n element: {\r\n type: String,\r\n default: 'div'\r\n },\r\n move: {\r\n type: Function,\r\n default: null\r\n },\r\n componentData: {\r\n type: Object,\r\n required: false,\r\n default: null\r\n }\r\n };\r\n\r\n var draggableComponent = {\r\n name: 'draggable',\r\n\r\n props: props,\r\n\r\n data: function data() {\r\n return {\r\n transitionMode: false,\r\n noneFunctionalComponentMode: false,\r\n init: false\r\n };\r\n },\r\n render: function render(h) {\r\n var slots = this.$slots.default;\r\n if (slots && slots.length === 1) {\r\n var child = slots[0];\r\n if (child.componentOptions && child.componentOptions.tag === \"transition-group\") {\r\n this.transitionMode = true;\r\n }\r\n }\r\n var headerOffset = 0;\r\n var children = slots;\r\n var _$slots = this.$slots,\r\n header = _$slots.header,\r\n footer = _$slots.footer;\r\n\r\n if (header) {\r\n headerOffset = header.length;\r\n children = children ? [].concat(_toConsumableArray(header), _toConsumableArray(children)) : [].concat(_toConsumableArray(header));\r\n }\r\n if (footer) {\r\n children = children ? [].concat(_toConsumableArray(children), _toConsumableArray(footer)) : [].concat(_toConsumableArray(footer));\r\n }\r\n this.headerOffset = headerOffset;\r\n var attributes = null;\r\n var update = function update(name, value) {\r\n attributes = buildAttribute(attributes, name, value);\r\n };\r\n update('attrs', this.$attrs);\r\n if (this.componentData) {\r\n var _componentData = this.componentData,\r\n on = _componentData.on,\r\n _props = _componentData.props;\r\n\r\n update('on', on);\r\n update('props', _props);\r\n }\r\n return h(this.element, attributes, children);\r\n },\r\n mounted: function mounted() {\r\n var _this3 = this;\r\n\r\n this.noneFunctionalComponentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase();\r\n if (this.noneFunctionalComponentMode && this.transitionMode) {\r\n throw new Error('Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ' + this.element);\r\n }\r\n var optionsAdded = {};\r\n eventsListened.forEach(function (elt) {\r\n optionsAdded['on' + elt] = delegateAndEmit.call(_this3, elt);\r\n });\r\n\r\n eventsToEmit.forEach(function (elt) {\r\n optionsAdded['on' + elt] = emit.bind(_this3, elt);\r\n });\r\n\r\n var options = _extends({}, this.options, optionsAdded, { onMove: function onMove(evt, originalEvent) {\r\n return _this3.onDragMove(evt, originalEvent);\r\n } });\r\n !('draggable' in options) && (options.draggable = '>*');\r\n this._sortable = new Sortable(this.rootContainer, options);\r\n this.computeIndexes();\r\n },\r\n beforeDestroy: function beforeDestroy() {\r\n if (this._sortable !== undefined) this._sortable.destroy();\r\n },\r\n\r\n\r\n computed: {\r\n rootContainer: function rootContainer() {\r\n return this.transitionMode ? this.$el.children[0] : this.$el;\r\n },\r\n isCloning: function isCloning() {\r\n return !!this.options && !!this.options.group && this.options.group.pull === 'clone';\r\n },\r\n realList: function realList() {\r\n return !!this.list ? this.list : this.value;\r\n }\r\n },\r\n\r\n watch: {\r\n options: {\r\n handler: function handler(newOptionValue) {\r\n for (var property in newOptionValue) {\r\n if (readonlyProperties.indexOf(property) == -1) {\r\n this._sortable.option(property, newOptionValue[property]);\r\n }\r\n }\r\n },\r\n\r\n deep: true\r\n },\r\n\r\n realList: function realList() {\r\n this.computeIndexes();\r\n }\r\n },\r\n\r\n methods: {\r\n getChildrenNodes: function getChildrenNodes() {\r\n if (!this.init) {\r\n this.noneFunctionalComponentMode = this.noneFunctionalComponentMode && this.$children.length == 1;\r\n this.init = true;\r\n }\r\n\r\n if (this.noneFunctionalComponentMode) {\r\n return this.$children[0].$slots.default;\r\n }\r\n var rawNodes = this.$slots.default;\r\n return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\r\n },\r\n computeIndexes: function computeIndexes() {\r\n var _this4 = this;\r\n\r\n this.$nextTick(function () {\r\n _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode);\r\n });\r\n },\r\n getUnderlyingVm: function getUnderlyingVm(htmlElt) {\r\n var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\r\n if (index === -1) {\r\n //Edge case during move callback: related element might be\r\n //an element different from collection\r\n return null;\r\n }\r\n var element = this.realList[index];\r\n return { index: index, element: element };\r\n },\r\n getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\r\n var __vue__ = _ref.__vue__;\r\n\r\n if (!__vue__ || !__vue__.$options || __vue__.$options._componentTag !== \"transition-group\") {\r\n return __vue__;\r\n }\r\n return __vue__.$parent;\r\n },\r\n emitChanges: function emitChanges(evt) {\r\n var _this5 = this;\r\n\r\n this.$nextTick(function () {\r\n _this5.$emit('change', evt);\r\n });\r\n },\r\n alterList: function alterList(onList) {\r\n if (!!this.list) {\r\n onList(this.list);\r\n } else {\r\n var newList = [].concat(_toConsumableArray(this.value));\r\n onList(newList);\r\n this.$emit('input', newList);\r\n }\r\n },\r\n spliceList: function spliceList() {\r\n var _arguments = arguments;\r\n\r\n var spliceList = function spliceList(list) {\r\n return list.splice.apply(list, _arguments);\r\n };\r\n this.alterList(spliceList);\r\n },\r\n updatePosition: function updatePosition(oldIndex, newIndex) {\r\n var updatePosition = function updatePosition(list) {\r\n return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n };\r\n this.alterList(updatePosition);\r\n },\r\n getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\r\n var to = _ref2.to,\r\n related = _ref2.related;\r\n\r\n var component = this.getUnderlyingPotencialDraggableComponent(to);\r\n if (!component) {\r\n return { component: component };\r\n }\r\n var list = component.realList;\r\n var context = { list: list, component: component };\r\n if (to !== related && list && component.getUnderlyingVm) {\r\n var destination = component.getUnderlyingVm(related);\r\n if (destination) {\r\n return _extends(destination, context);\r\n }\r\n }\r\n\r\n return context;\r\n },\r\n getVmIndex: function getVmIndex(domIndex) {\r\n var indexes = this.visibleIndexes;\r\n var numberIndexes = indexes.length;\r\n return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\r\n },\r\n getComponent: function getComponent() {\r\n return this.$slots.default[0].componentInstance;\r\n },\r\n resetTransitionData: function resetTransitionData(index) {\r\n if (!this.noTransitionOnDrag || !this.transitionMode) {\r\n return;\r\n }\r\n var nodes = this.getChildrenNodes();\r\n nodes[index].data = null;\r\n var transitionContainer = this.getComponent();\r\n transitionContainer.children = [];\r\n transitionContainer.kept = undefined;\r\n },\r\n onDragStart: function onDragStart(evt) {\r\n this.context = this.getUnderlyingVm(evt.item);\r\n evt.item._underlying_vm_ = this.clone(this.context.element);\r\n draggingElement = evt.item;\r\n },\r\n onDragAdd: function onDragAdd(evt) {\r\n this.updateEvenemt(evt);\r\n var element = evt.item._underlying_vm_;\r\n if (element === undefined) {\r\n return;\r\n }\r\n removeNode(evt.item);\r\n var newIndex = this.getVmIndex(evt.newIndex);\r\n this.spliceList(newIndex, 0, element);\r\n this.computeIndexes();\r\n var added = { element: element, newIndex: newIndex };\r\n this.emitChanges({ added: added });\r\n },\r\n onDragRemove: function onDragRemove(evt) {\r\n this.updateEvenemt(evt);\r\n insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\r\n if (this.isCloning) {\r\n removeNode(evt.clone);\r\n return;\r\n }\r\n var oldIndex = this.context.index;\r\n this.spliceList(oldIndex, 1);\r\n var removed = { element: this.context.element, oldIndex: oldIndex };\r\n this.resetTransitionData(oldIndex);\r\n this.emitChanges({ removed: removed });\r\n },\r\n onDragUpdate: function onDragUpdate(evt) {\r\n this.updateEvenemt(evt);\r\n removeNode(evt.item);\r\n insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n var oldIndex = this.context.index;\r\n var newIndex = this.getVmIndex(evt.newIndex);\r\n this.updatePosition(oldIndex, newIndex);\r\n var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };\r\n this.emitChanges({ moved: moved });\r\n },\r\n updateEvenemt: function updateEvenemt(evt) {\r\n this.updateProperty(evt, 'newIndex');\r\n this.updateProperty(evt, 'oldIndex');\r\n },\r\n updateProperty: function updateProperty(evt, propertyName) {\r\n evt.hasOwnProperty(propertyName) && (evt[propertyName] += this.headerOffset);\r\n },\r\n computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\r\n if (!relatedContext.element) {\r\n return 0;\r\n }\r\n var domChildren = [].concat(_toConsumableArray(evt.to.children)).filter(function (el) {\r\n return el.style['display'] !== 'none';\r\n });\r\n var currentDOMIndex = domChildren.indexOf(evt.related);\r\n var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\r\n var draggedInList = domChildren.indexOf(draggingElement) != -1;\r\n return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\r\n },\r\n onDragMove: function onDragMove(evt, originalEvent) {\r\n var onMove = this.move;\r\n if (!onMove || !this.realList) {\r\n return true;\r\n }\r\n\r\n var relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n var draggedContext = this.context;\r\n var futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n _extends(draggedContext, { futureIndex: futureIndex });\r\n _extends(evt, { relatedContext: relatedContext, draggedContext: draggedContext });\r\n return onMove(evt, originalEvent);\r\n },\r\n onDragEnd: function onDragEnd(evt) {\r\n this.computeIndexes();\r\n draggingElement = null;\r\n }\r\n }\r\n };\r\n return draggableComponent;\r\n }\r\n\r\n if (typeof exports == \"object\") {\r\n var Sortable = require(\"sortablejs\");\r\n module.exports = buildDraggable(Sortable);\r\n } else if (typeof define == \"function\" && define.amd) {\r\n define(['sortablejs'], function (Sortable) {\r\n return buildDraggable(Sortable);\r\n });\r\n } else if (window && window.Vue && window.Sortable) {\r\n var draggable = buildDraggable(window.Sortable);\r\n Vue.component('draggable', draggable);\r\n }\r\n})();","/**!\n * Sortable\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\n\n(function sortableModule(factory) {\n\t\"use strict\";\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(factory);\n\t}\n\telse if (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\n\t\tmodule.exports = factory();\n\t}\n\telse {\n\t\t/* jshint sub:true */\n\t\twindow[\"Sortable\"] = factory();\n\t}\n})(function sortableFactory() {\n\t\"use strict\";\n\n\tif (typeof window === \"undefined\" || !window.document) {\n\t\treturn function sortableError() {\n\t\t\tthrow new Error(\"Sortable.js requires a window with a document\");\n\t\t};\n\t}\n\n\tvar dragEl,\n\t\tparentEl,\n\t\tghostEl,\n\t\tcloneEl,\n\t\trootEl,\n\t\tnextEl,\n\t\tlastDownEl,\n\n\t\tscrollEl,\n\t\tscrollParentEl,\n\t\tscrollCustomFn,\n\n\t\toldIndex,\n\t\tnewIndex,\n\n\t\tactiveGroup,\n\t\tputSortable,\n\n\t\tautoScrolls = [],\n\t\tscrolling = false,\n\n\t\tawaitingDragStarted = false,\n\t\tignoreNextClick = false,\n\t\tsortables = [],\n\n\t\tpointerElemChangedInterval,\n\t\tlastPointerElemX,\n\t\tlastPointerElemY,\n\n\t\ttapEvt,\n\t\ttouchEvt,\n\n\t\tmoved,\n\n\n\t\tlastTarget,\n\t\tlastDirection,\n\t\tpastFirstInvertThresh = false,\n\t\tisCircumstantialInvert = false,\n\t\tlastMode, // 'swap' or 'insert'\n\n\t\ttargetMoveDistance,\n\n\n\t\tforRepaintDummy,\n\t\trealDragElRect, // dragEl rect after current animation\n\n\t\t/** @const */\n\t\tR_SPACE = /\\s+/g,\n\n\t\texpando = 'Sortable' + (new Date).getTime(),\n\n\t\twin = window,\n\t\tdocument = win.document,\n\t\tparseInt = win.parseInt,\n\t\tsetTimeout = win.setTimeout,\n\n\t\t$ = win.jQuery || win.Zepto,\n\t\tPolymer = win.Polymer,\n\n\t\tcaptureMode = {\n\t\t\tcapture: false,\n\t\t\tpassive: false\n\t\t},\n\n\t\tIE11OrLess = !!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\\.|msie|iemobile)/i),\n\t\tEdge = !!navigator.userAgent.match(/Edge/i),\n\t\t// FireFox = !!navigator.userAgent.match(/firefox/i),\n\n\t\tCSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n\n\t\t// This will not pass for IE9, because IE9 DnD only works on anchors\n\t\tsupportDraggable = ('draggable' in document.createElement('div')),\n\n\t\tsupportCssPointerEvents = (function() {\n\t\t\t// false when <= IE11\n\t\t\tif (IE11OrLess) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar el = document.createElement('x');\n\t\t\tel.style.cssText = 'pointer-events:auto';\n\t\t\treturn el.style.pointerEvents === 'auto';\n\t\t})(),\n\n\t\t_silent = false,\n\t\t_alignedSilent = false,\n\n\t\tabs = Math.abs,\n\t\tmin = Math.min,\n\n\t\tsavedInputChecked = [],\n\n\t\t_detectDirection = function(el, options) {\n\t\t\tvar elCSS = _css(el),\n\t\t\t\telWidth = parseInt(elCSS.width),\n\t\t\t\tchild1 = _getChild(el, 0, options),\n\t\t\t\tchild2 = _getChild(el, 1, options),\n\t\t\t\tfirstChildCSS = child1 && _css(child1),\n\t\t\t\tsecondChildCSS = child2 && _css(child2),\n\t\t\t\tfirstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + _getRect(child1).width,\n\t\t\t\tsecondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + _getRect(child2).width;\n\t\t\tif (elCSS.display === 'flex') {\n\t\t\t\treturn elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse'\n\t\t\t\t? 'vertical' : 'horizontal';\n\t\t\t}\n\t\t\tif (child1 && firstChildCSS.float !== 'none') {\n\t\t\t\tvar touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right';\n\n\t\t\t\treturn child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ?\n\t\t\t\t\t'vertical' : 'horizontal';\n\t\t\t}\n\t\t\treturn (child1 &&\n\t\t\t\t(\n\t\t\t\t\tfirstChildCSS.display === 'block' ||\n\t\t\t\t\tfirstChildCSS.display === 'flex' ||\n\t\t\t\t\tfirstChildCSS.display === 'table' ||\n\t\t\t\t\tfirstChildCSS.display === 'grid' ||\n\t\t\t\t\tfirstChildWidth >= elWidth &&\n\t\t\t\t\telCSS[CSSFloatProperty] === 'none' ||\n\t\t\t\t\tchild2 &&\n\t\t\t\t\telCSS[CSSFloatProperty] === 'none' &&\n\t\t\t\t\tfirstChildWidth + secondChildWidth > elWidth\n\t\t\t\t) ?\n\t\t\t\t'vertical' : 'horizontal'\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n\t\t * @param {Number} x X position\n\t\t * @param {Number} y Y position\n\t\t * @return {HTMLElement} Element of the first found nearest Sortable\n\t\t */\n\t\t_detectNearestEmptySortable = function(x, y) {\n\t\t\tfor (var i = 0; i < sortables.length; i++) {\n\t\t\t\tif (sortables[i].children.length) continue;\n\n\t\t\t\tvar rect = _getRect(sortables[i]),\n\t\t\t\t\tthreshold = sortables[i][expando].options.emptyInsertThreshold,\n\t\t\t\t\tinsideHorizontally = x >= (rect.left - threshold) && x <= (rect.right + threshold),\n\t\t\t\t\tinsideVertically = y >= (rect.top - threshold) && y <= (rect.bottom + threshold);\n\n\t\t\t\tif (insideHorizontally && insideVertically) {\n\t\t\t\t\treturn sortables[i];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_isClientInRowColumn = function(x, y, el, axis, options) {\n\t\t\tvar targetRect = _getRect(el),\n\t\t\t\ttargetS1Opp = axis === 'vertical' ? targetRect.left : targetRect.top,\n\t\t\t\ttargetS2Opp = axis === 'vertical' ? targetRect.right : targetRect.bottom,\n\t\t\t\tmouseOnOppAxis = axis === 'vertical' ? x : y;\n\n\t\t\treturn targetS1Opp < mouseOnOppAxis && mouseOnOppAxis < targetS2Opp;\n\t\t},\n\n\t\t_isElInRowColumn = function(el1, el2, axis) {\n\t\t\tvar el1Rect = el1 === dragEl && realDragElRect || _getRect(el1),\n\t\t\t\tel2Rect = el2 === dragEl && realDragElRect || _getRect(el2),\n\t\t\t\tel1S1Opp = axis === 'vertical' ? el1Rect.left : el1Rect.top,\n\t\t\t\tel1S2Opp = axis === 'vertical' ? el1Rect.right : el1Rect.bottom,\n\t\t\t\tel1OppLength = axis === 'vertical' ? el1Rect.width : el1Rect.height,\n\t\t\t\tel2S1Opp = axis === 'vertical' ? el2Rect.left : el2Rect.top,\n\t\t\t\tel2S2Opp = axis === 'vertical' ? el2Rect.right : el2Rect.bottom,\n\t\t\t\tel2OppLength = axis === 'vertical' ? el2Rect.width : el2Rect.height;\n\n\t\t\treturn (\n\t\t\t\tel1S1Opp === el2S1Opp ||\n\t\t\t\tel1S2Opp === el2S2Opp ||\n\t\t\t\t(el1S1Opp + el1OppLength / 2) === (el2S1Opp + el2OppLength / 2)\n\t\t\t);\n\t\t},\n\n\t\t_getParentAutoScrollElement = function(el, includeSelf) {\n\t\t\t// skip to window\n\t\t\tif (!el || !el.getBoundingClientRect) return win;\n\n\t\t\tvar elem = el;\n\t\t\tvar gotSelf = false;\n\t\t\tdo {\n\t\t\t\t// we don't need to get elem css if it isn't even overflowing in the first place (performance)\n\t\t\t\tif (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n\t\t\t\t\tvar elemCSS = _css(elem);\n\t\t\t\t\tif (\n\t\t\t\t\t\telem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') ||\n\t\t\t\t\t\telem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (!elem || !elem.getBoundingClientRect || elem === document.body) return win;\n\n\t\t\t\t\t\tif (gotSelf || includeSelf) return elem;\n\t\t\t\t\t\tgotSelf = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t/* jshint boss:true */\n\t\t\t} while (elem = elem.parentNode);\n\n\t\t\treturn win;\n\t\t},\n\n\t\t_autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl, /**Boolean*/isFallback) {\n\t\t\t// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n\t\t\tif (options.scroll) {\n\t\t\t\tvar _this = rootEl ? rootEl[expando] : window,\n\t\t\t\t\tsens = options.scrollSensitivity,\n\t\t\t\t\tspeed = options.scrollSpeed,\n\n\t\t\t\t\tx = evt.clientX,\n\t\t\t\t\ty = evt.clientY,\n\n\t\t\t\t\twinWidth = window.innerWidth,\n\t\t\t\t\twinHeight = window.innerHeight,\n\n\t\t\t\t\tscrollThisInstance = false;\n\n\t\t\t\t// Detect scrollEl\n\t\t\t\tif (scrollParentEl !== rootEl) {\n\t\t\t\t\t_clearAutoScrolls();\n\n\t\t\t\t\tscrollEl = options.scroll;\n\t\t\t\t\tscrollCustomFn = options.scrollFn;\n\n\t\t\t\t\tif (scrollEl === true) {\n\t\t\t\t\t\tscrollEl = _getParentAutoScrollElement(rootEl, true);\n\t\t\t\t\t\tscrollParentEl = scrollEl;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tvar layersOut = 0;\n\t\t\t\tvar currentParent = scrollEl;\n\t\t\t\tdo {\n\t\t\t\t\tvar\tel = currentParent,\n\t\t\t\t\t\trect = _getRect(el),\n\n\t\t\t\t\t\ttop = rect.top,\n\t\t\t\t\t\tbottom = rect.bottom,\n\t\t\t\t\t\tleft = rect.left,\n\t\t\t\t\t\tright = rect.right,\n\n\t\t\t\t\t\twidth = rect.width,\n\t\t\t\t\t\theight = rect.height,\n\n\t\t\t\t\t\tscrollWidth,\n\t\t\t\t\t\tscrollHeight,\n\n\t\t\t\t\t\tcss,\n\n\t\t\t\t\t\tvx,\n\t\t\t\t\t\tvy,\n\n\t\t\t\t\t\tcanScrollX,\n\t\t\t\t\t\tcanScrollY,\n\n\t\t\t\t\t\tscrollPosX,\n\t\t\t\t\t\tscrollPosY;\n\n\n\t\t\t\t\tif (el !== win) {\n\t\t\t\t\t\tscrollWidth = el.scrollWidth;\n\t\t\t\t\t\tscrollHeight = el.scrollHeight;\n\n\t\t\t\t\t\tcss = _css(el);\n\n\t\t\t\t\t\tcanScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll');\n\t\t\t\t\t\tcanScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll');\n\n\t\t\t\t\t\tscrollPosX = el.scrollLeft;\n\t\t\t\t\t\tscrollPosY = el.scrollTop;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscrollWidth = document.documentElement.scrollWidth;\n\t\t\t\t\t\tscrollHeight = document.documentElement.scrollHeight;\n\n\t\t\t\t\t\tcss = _css(document.documentElement);\n\n\t\t\t\t\t\tcanScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll' || css.overflowX === 'visible');\n\t\t\t\t\t\tcanScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll' || css.overflowY === 'visible');\n\n\t\t\t\t\t\tscrollPosX = document.documentElement.scrollLeft;\n\t\t\t\t\t\tscrollPosY = document.documentElement.scrollTop;\n\t\t\t\t\t}\n\n\t\t\t\t\tvx = canScrollX && (abs(right - x) <= sens && (scrollPosX + width) < scrollWidth) - (abs(left - x) <= sens && !!scrollPosX);\n\n\t\t\t\t\tvy = canScrollY && (abs(bottom - y) <= sens && (scrollPosY + height) < scrollHeight) - (abs(top - y) <= sens && !!scrollPosY);\n\n\n\t\t\t\t\tif (!autoScrolls[layersOut]) {\n\t\t\t\t\t\tfor (var i = 0; i <= layersOut; i++) {\n\t\t\t\t\t\t\tif (!autoScrolls[i]) {\n\t\t\t\t\t\t\t\tautoScrolls[i] = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n\t\t\t\t\t\tautoScrolls[layersOut].el = el;\n\t\t\t\t\t\tautoScrolls[layersOut].vx = vx;\n\t\t\t\t\t\tautoScrolls[layersOut].vy = vy;\n\n\t\t\t\t\t\tclearInterval(autoScrolls[layersOut].pid);\n\n\t\t\t\t\t\tif (el && (vx != 0 || vy != 0)) {\n\t\t\t\t\t\t\tscrollThisInstance = true;\n\t\t\t\t\t\t\t/* jshint loopfunc:true */\n\t\t\t\t\t\t\tautoScrolls[layersOut].pid = setInterval((function () {\n\t\t\t\t\t\t\t\t// emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n\t\t\t\t\t\t\t\tif (isFallback && this.layer === 0) {\n\t\t\t\t\t\t\t\t\tSortable.active._emulateDragOver(true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n\t\t\t\t\t\t\t\tvar scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n\t\t\t\t\t\t\t\tif ('function' === typeof(scrollCustomFn)) {\n\t\t\t\t\t\t\t\t\tif (scrollCustomFn.call(_this, scrollOffsetX, scrollOffsetY, evt, touchEvt, autoScrolls[this.layer].el) !== 'continue') {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (autoScrolls[this.layer].el === win) {\n\t\t\t\t\t\t\t\t\twin.scrollTo(win.pageXOffset + scrollOffsetX, win.pageYOffset + scrollOffsetY);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tautoScrolls[this.layer].el.scrollTop += scrollOffsetY;\n\t\t\t\t\t\t\t\t\tautoScrolls[this.layer].el.scrollLeft += scrollOffsetX;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}).bind({layer: layersOut}), 24);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlayersOut++;\n\t\t\t\t} while (options.bubbleScroll && currentParent !== win && (currentParent = _getParentAutoScrollElement(currentParent, false)));\n\t\t\t\tscrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n\t\t\t}\n\t\t}, 30),\n\n\t\t_clearAutoScrolls = function () {\n\t\t\tautoScrolls.forEach(function(autoScroll) {\n\t\t\t\tclearInterval(autoScroll.pid);\n\t\t\t});\n\t\t\tautoScrolls = [];\n\t\t},\n\n\t\t_prepareGroup = function (options) {\n\t\t\tfunction toFn(value, pull) {\n\t\t\t\treturn function(to, from, dragEl, evt) {\n\t\t\t\t\tvar sameGroup = to.options.group.name &&\n\t\t\t\t\t\t\t\t\tfrom.options.group.name &&\n\t\t\t\t\t\t\t\t\tto.options.group.name === from.options.group.name;\n\n\t\t\t\t\tif (value == null && (pull || sameGroup)) {\n\t\t\t\t\t\t// Default pull value\n\t\t\t\t\t\t// Default pull and put value if same group\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (value == null || value === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (pull && value === 'clone') {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t} else if (typeof value === 'function') {\n\t\t\t\t\t\treturn toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar otherGroup = (pull ? to : from).options.group.name;\n\n\t\t\t\t\t\treturn (value === true ||\n\t\t\t\t\t\t(typeof value === 'string' && value === otherGroup) ||\n\t\t\t\t\t\t(value.join && value.indexOf(otherGroup) > -1));\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar group = {};\n\t\t\tvar originalGroup = options.group;\n\n\t\t\tif (!originalGroup || typeof originalGroup != 'object') {\n\t\t\t\toriginalGroup = {name: originalGroup};\n\t\t\t}\n\n\t\t\tgroup.name = originalGroup.name;\n\t\t\tgroup.checkPull = toFn(originalGroup.pull, true);\n\t\t\tgroup.checkPut = toFn(originalGroup.put);\n\t\t\tgroup.revertClone = originalGroup.revertClone;\n\n\t\t\toptions.group = group;\n\t\t},\n\n\t\t_checkAlignment = function(evt) {\n\t\t\tif (!dragEl || !dragEl.parentNode) return;\n\t\t\tdragEl.parentNode[expando] && dragEl.parentNode[expando]._computeIsAligned(evt);\n\t\t},\n\n\t\t_isTrueParentSortable = function(el, target) {\n\t\t\tvar trueParent = target;\n\t\t\twhile (!trueParent[expando]) {\n\t\t\t\ttrueParent = trueParent.parentNode;\n\t\t\t}\n\n\t\t\treturn el === trueParent;\n\t\t},\n\n\t\t_artificalBubble = function(sortable, originalEvt, method) {\n\t\t\t// Artificial IE bubbling\n\t\t\tvar nextParent = sortable.parentNode;\n\t\t\twhile (nextParent && !nextParent[expando]) {\n\t\t\t\tnextParent = nextParent.parentNode;\n\t\t\t}\n\n\t\t\tif (nextParent) {\n\t\t\t\tnextParent[expando][method](_extend(originalEvt, {\n\t\t\t\t\tartificialBubble: true\n\t\t\t\t}));\n\t\t\t}\n\t\t},\n\n\t\t_hideGhostForTarget = function() {\n\t\t\tif (!supportCssPointerEvents && ghostEl) {\n\t\t\t\t_css(ghostEl, 'display', 'none');\n\t\t\t}\n\t\t},\n\n\t\t_unhideGhostForTarget = function() {\n\t\t\tif (!supportCssPointerEvents && ghostEl) {\n\t\t\t\t_css(ghostEl, 'display', '');\n\t\t\t}\n\t\t};\n\n\n\t// #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\tdocument.addEventListener('click', function(evt) {\n\t\tif (ignoreNextClick) {\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation && evt.stopPropagation();\n\t\t\tevt.stopImmediatePropagation && evt.stopImmediatePropagation();\n\t\t\tignoreNextClick = false;\n\t\t\treturn false;\n\t\t}\n\t}, true);\n\n\tvar nearestEmptyInsertDetectEvent = function(evt) {\n\t\tevt = evt.touches ? evt.touches[0] : evt;\n\t\tif (dragEl) {\n\t\t\tvar nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n\t\t\tif (nearest) {\n\t\t\t\tnearest[expando]._onDragOver({\n\t\t\t\t\tclientX: evt.clientX,\n\t\t\t\t\tclientY: evt.clientY,\n\t\t\t\t\ttarget: nearest,\n\t\t\t\t\trootEl: nearest\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\t// We do not want this to be triggered if completed (bubbling canceled), so only define it here\n\t_on(document, 'dragover', nearestEmptyInsertDetectEvent);\n\t_on(document, 'mousemove', nearestEmptyInsertDetectEvent);\n\t_on(document, 'touchmove', nearestEmptyInsertDetectEvent);\n\n\t/**\n\t * @class Sortable\n\t * @param {HTMLElement} el\n\t * @param {Object} [options]\n\t */\n\tfunction Sortable(el, options) {\n\t\tif (!(el && el.nodeType && el.nodeType === 1)) {\n\t\t\tthrow 'Sortable: `el` must be HTMLElement, not ' + {}.toString.call(el);\n\t\t}\n\n\t\tthis.el = el; // root element\n\t\tthis.options = options = _extend({}, options);\n\n\n\t\t// Export instance\n\t\tel[expando] = this;\n\n\t\t// Default options\n\t\tvar defaults = {\n\t\t\tgroup: null,\n\t\t\tsort: true,\n\t\t\tdisabled: false,\n\t\t\tstore: null,\n\t\t\thandle: null,\n\t\t\tscroll: true,\n\t\t\tscrollSensitivity: 30,\n\t\t\tscrollSpeed: 10,\n\t\t\tbubbleScroll: true,\n\t\t\tdraggable: /[uo]l/i.test(el.nodeName) ? '>li' : '>*',\n\t\t\tswapThreshold: 1, // percentage; 0 <= x <= 1\n\t\t\tinvertSwap: false, // invert always\n\t\t\tinvertedSwapThreshold: null, // will be set to same as swapThreshold if default\n\t\t\tremoveCloneOnHide: true,\n\t\t\tdirection: function() {\n\t\t\t\treturn _detectDirection(el, this.options);\n\t\t\t},\n\t\t\tghostClass: 'sortable-ghost',\n\t\t\tchosenClass: 'sortable-chosen',\n\t\t\tdragClass: 'sortable-drag',\n\t\t\tignore: 'a, img',\n\t\t\tfilter: null,\n\t\t\tpreventOnFilter: true,\n\t\t\tanimation: 0,\n\t\t\teasing: null,\n\t\t\tsetData: function (dataTransfer, dragEl) {\n\t\t\t\tdataTransfer.setData('Text', dragEl.textContent);\n\t\t\t},\n\t\t\tdropBubble: false,\n\t\t\tdragoverBubble: false,\n\t\t\tdataIdAttr: 'data-id',\n\t\t\tdelay: 0,\n\t\t\ttouchStartThreshold: parseInt(window.devicePixelRatio, 10) || 1,\n\t\t\tforceFallback: false,\n\t\t\tfallbackClass: 'sortable-fallback',\n\t\t\tfallbackOnBody: false,\n\t\t\tfallbackTolerance: 0,\n\t\t\tfallbackOffset: {x: 0, y: 0},\n\t\t\tsupportPointer: Sortable.supportPointer !== false && (\n\t\t\t\t('PointerEvent' in window) ||\n\t\t\t\twindow.navigator && ('msPointerEnabled' in window.navigator) // microsoft\n\t\t\t),\n\t\t\temptyInsertThreshold: 5\n\t\t};\n\n\n\t\t// Set default options\n\t\tfor (var name in defaults) {\n\t\t\t!(name in options) && (options[name] = defaults[name]);\n\t\t}\n\n\t\t_prepareGroup(options);\n\n\t\t// Bind all private methods\n\t\tfor (var fn in this) {\n\t\t\tif (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n\t\t\t\tthis[fn] = this[fn].bind(this);\n\t\t\t}\n\t\t}\n\n\t\t// Setup drag mode\n\t\tthis.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n\t\t// Bind events\n\t\tif (options.supportPointer) {\n\t\t\t_on(el, 'pointerdown', this._onTapStart);\n\t\t} else {\n\t\t\t_on(el, 'mousedown', this._onTapStart);\n\t\t\t_on(el, 'touchstart', this._onTapStart);\n\t\t}\n\n\t\tif (this.nativeDraggable) {\n\t\t\t_on(el, 'dragover', this);\n\t\t\t_on(el, 'dragenter', this);\n\t\t}\n\n\t\tsortables.push(this.el);\n\n\t\t// Restore sorting\n\t\toptions.store && options.store.get && this.sort(options.store.get(this) || []);\n\t}\n\n\tSortable.prototype = /** @lends Sortable.prototype */ {\n\t\tconstructor: Sortable,\n\n\t\t_computeIsAligned: function(evt) {\n\t\t\tvar target;\n\n\t\t\tif (ghostEl && !supportCssPointerEvents) {\n\t\t\t\t_hideGhostForTarget();\n\t\t\t\ttarget = document.elementFromPoint(evt.clientX, evt.clientY);\n\t\t\t\t_unhideGhostForTarget();\n\t\t\t} else {\n\t\t\t\ttarget = evt.target;\n\t\t\t}\n\n\t\t\ttarget = _closest(target, this.options.draggable, this.el, false);\n\t\t\tif (_alignedSilent) return;\n\t\t\tif (!dragEl || dragEl.parentNode !== this.el) return;\n\n\t\t\tvar children = this.el.children;\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t// Don't change for target in case it is changed to aligned before onDragOver is fired\n\t\t\t\tif (_closest(children[i], this.options.draggable, this.el, false) && children[i] !== target) {\n\t\t\t\t\tchildren[i].sortableMouseAligned = _isClientInRowColumn(evt.clientX, evt.clientY, children[i], this._getDirection(evt, null), this.options);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Used for nulling last target when not in element, nothing to do with checking if aligned\n\t\t\tif (!_closest(target, this.options.draggable, this.el, true)) {\n\t\t\t\tlastTarget = null;\n\t\t\t}\n\n\t\t\t_alignedSilent = true;\n\t\t\tsetTimeout(function() {\n\t\t\t\t_alignedSilent = false;\n\t\t\t}, 30);\n\n\t\t},\n\n\t\t_getDirection: function(evt, target) {\n\t\t\treturn (typeof this.options.direction === 'function') ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n\t\t},\n\n\t\t_onTapStart: function (/** Event|TouchEvent */evt) {\n\t\t\tif (!evt.cancelable) return;\n\t\t\tvar _this = this,\n\t\t\t\tel = this.el,\n\t\t\t\toptions = this.options,\n\t\t\t\tpreventOnFilter = options.preventOnFilter,\n\t\t\t\ttype = evt.type,\n\t\t\t\ttouch = evt.touches && evt.touches[0],\n\t\t\t\ttarget = (touch || evt).target,\n\t\t\t\toriginalTarget = evt.target.shadowRoot && ((evt.path && evt.path[0]) || (evt.composedPath && evt.composedPath()[0])) || target,\n\t\t\t\tfilter = options.filter,\n\t\t\t\tstartIndex;\n\n\t\t\t_saveInputCheckedState(el);\n\n\n\t\t\t// IE: Calls events in capture mode if event element is nested. This ensures only correct element's _onTapStart goes through.\n\t\t\t// This process is also done in _onDragOver\n\t\t\tif (IE11OrLess && !evt.artificialBubble && !_isTrueParentSortable(el, target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\t\t\tif (dragEl) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n\t\t\t\treturn; // only left button and enabled\n\t\t\t}\n\n\t\t\t// cancel dnd if original target is content editable\n\t\t\tif (originalTarget.isContentEditable) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttarget = _closest(target, options.draggable, el, false);\n\n\t\t\tif (!target) {\n\t\t\t\tif (IE11OrLess) {\n\t\t\t\t\t_artificalBubble(el, evt, '_onTapStart');\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (lastDownEl === target) {\n\t\t\t\t// Ignoring duplicate `down`\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get the index of the dragged element within its parent\n\t\t\tstartIndex = _index(target, options.draggable);\n\n\t\t\t// Check filter\n\t\t\tif (typeof filter === 'function') {\n\t\t\t\tif (filter.call(this, evt, target, this)) {\n\t\t\t\t\t_dispatchEvent(_this, originalTarget, 'filter', target, el, el, startIndex);\n\t\t\t\t\tpreventOnFilter && evt.cancelable && evt.preventDefault();\n\t\t\t\t\treturn; // cancel dnd\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (filter) {\n\t\t\t\tfilter = filter.split(',').some(function (criteria) {\n\t\t\t\t\tcriteria = _closest(originalTarget, criteria.trim(), el, false);\n\n\t\t\t\t\tif (criteria) {\n\t\t\t\t\t\t_dispatchEvent(_this, criteria, 'filter', target, el, el, startIndex);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (filter) {\n\t\t\t\t\tpreventOnFilter && evt.cancelable && evt.preventDefault();\n\t\t\t\t\treturn; // cancel dnd\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.handle && !_closest(originalTarget, options.handle, el, false)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prepare `dragstart`\n\t\t\tthis._prepareDragStart(evt, touch, target, startIndex);\n\t\t},\n\n\n\t\t_handleAutoScroll: function(evt, fallback) {\n\t\t\tif (!dragEl || !this.options.scroll) return;\n\t\t\tvar x = evt.clientX,\n\t\t\t\ty = evt.clientY,\n\n\t\t\t\telem = document.elementFromPoint(x, y),\n\t\t\t\t_this = this;\n\n\t\t\t// IE does not seem to have native autoscroll,\n\t\t\t// Edge's autoscroll seems too conditional,\n\t\t\t// Firefox and Chrome are good\n\t\t\tif (fallback || Edge || IE11OrLess) {\n\t\t\t\t_autoScroll(evt, _this.options, elem, fallback);\n\n\t\t\t\t// Listener for pointer element change\n\t\t\t\tvar ogElemScroller = _getParentAutoScrollElement(elem, true);\n\t\t\t\tif (\n\t\t\t\t\tscrolling &&\n\t\t\t\t\t(\n\t\t\t\t\t\t!pointerElemChangedInterval ||\n\t\t\t\t\t\tx !== lastPointerElemX ||\n\t\t\t\t\t\ty !== lastPointerElemY\n\t\t\t\t\t)\n\t\t\t\t) {\n\n\t\t\t\t\tpointerElemChangedInterval && clearInterval(pointerElemChangedInterval);\n\t\t\t\t\t// Detect for pointer elem change, emulating native DnD behaviour\n\t\t\t\t\tpointerElemChangedInterval = setInterval(function() {\n\t\t\t\t\t\tif (!dragEl) return;\n\t\t\t\t\t\t// could also check if scroll direction on newElem changes due to parent autoscrolling\n\t\t\t\t\t\tvar newElem = _getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\t\t\t\t\t\tif (newElem !== ogElemScroller) {\n\t\t\t\t\t\t\togElemScroller = newElem;\n\t\t\t\t\t\t\t_clearAutoScrolls();\n\t\t\t\t\t\t\t_autoScroll(evt, _this.options, ogElemScroller, fallback);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 10);\n\t\t\t\t\tlastPointerElemX = x;\n\t\t\t\t\tlastPointerElemY = y;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n\t\t\t\tif (!_this.options.bubbleScroll || _getParentAutoScrollElement(elem, true) === window) {\n\t\t\t\t\t_clearAutoScrolls();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t_autoScroll(evt, _this.options, _getParentAutoScrollElement(elem, false), false);\n\t\t\t}\n\t\t},\n\n\t\t_prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target, /** Number */startIndex) {\n\t\t\tvar _this = this,\n\t\t\t\tel = _this.el,\n\t\t\t\toptions = _this.options,\n\t\t\t\townerDocument = el.ownerDocument,\n\t\t\t\tdragStartFn;\n\n\t\t\tif (target && !dragEl && (target.parentNode === el)) {\n\t\t\t\trootEl = el;\n\t\t\t\tdragEl = target;\n\t\t\t\tparentEl = dragEl.parentNode;\n\t\t\t\tnextEl = dragEl.nextSibling;\n\t\t\t\tlastDownEl = target;\n\t\t\t\tactiveGroup = options.group;\n\t\t\t\toldIndex = startIndex;\n\n\t\t\t\ttapEvt = {\n\t\t\t\t\ttarget: dragEl,\n\t\t\t\t\tclientX: (touch || evt).clientX,\n\t\t\t\t\tclientY: (touch || evt).clientY\n\t\t\t\t};\n\n\t\t\t\tthis._lastX = (touch || evt).clientX;\n\t\t\t\tthis._lastY = (touch || evt).clientY;\n\n\t\t\t\tdragEl.style['will-change'] = 'all';\n\t\t\t\t// undo animation if needed\n\t\t\t\tdragEl.style.transition = '';\n\t\t\t\tdragEl.style.transform = '';\n\n\t\t\t\tdragStartFn = function () {\n\t\t\t\t\t// Delayed drag has been triggered\n\t\t\t\t\t// we can re-enable the events: touchmove/mousemove\n\t\t\t\t\t_this._disableDelayedDrag();\n\n\t\t\t\t\t// Make the element draggable\n\t\t\t\t\tdragEl.draggable = _this.nativeDraggable;\n\n\t\t\t\t\t// Bind the events: dragstart/dragend\n\t\t\t\t\t_this._triggerDragStart(evt, touch);\n\n\t\t\t\t\t// Drag start event\n\t\t\t\t\t_dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, rootEl, oldIndex);\n\n\t\t\t\t\t// Chosen item\n\t\t\t\t\t_toggleClass(dragEl, options.chosenClass, true);\n\t\t\t\t};\n\n\t\t\t\t// Disable \"draggable\"\n\t\t\t\toptions.ignore.split(',').forEach(function (criteria) {\n\t\t\t\t\t_find(dragEl, criteria.trim(), _disableDraggable);\n\t\t\t\t});\n\n\t\t\t\tif (options.supportPointer) {\n\t\t\t\t\t_on(ownerDocument, 'pointerup', _this._onDrop);\n\t\t\t\t} else {\n\t\t\t\t\t_on(ownerDocument, 'mouseup', _this._onDrop);\n\t\t\t\t\t_on(ownerDocument, 'touchend', _this._onDrop);\n\t\t\t\t\t_on(ownerDocument, 'touchcancel', _this._onDrop);\n\t\t\t\t}\n\n\t\t\t\tif (options.delay) {\n\t\t\t\t\t// If the user moves the pointer or let go the click or touch\n\t\t\t\t\t// before the delay has been reached:\n\t\t\t\t\t// disable the delayed drag\n\t\t\t\t\t_on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n\t\t\t\t\t_on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n\t\t\t\t\toptions.supportPointer && _on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n\n\t\t\t\t\t_this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n\t\t\t\t} else {\n\t\t\t\t\tdragStartFn();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/e) {\n\t\t\tvar touch = e.touches ? e.touches[0] : e;\n\t\t\tif (min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY))\n\t\t\t\t\t>= this.options.touchStartThreshold\n\t\t\t) {\n\t\t\t\tthis._disableDelayedDrag();\n\t\t\t}\n\t\t},\n\n\t\t_disableDelayedDrag: function () {\n\t\t\tvar ownerDocument = this.el.ownerDocument;\n\n\t\t\tclearTimeout(this._dragStartTimer);\n\t\t\t_off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'touchend', this._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n\t\t\t_off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n\t\t\t_off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n\t\t},\n\n\t\t_triggerDragStart: function (/** Event */evt, /** Touch */touch) {\n\t\t\ttouch = touch || (evt.pointerType == 'touch' ? evt : null);\n\n\t\t\tif (!this.nativeDraggable || touch) {\n\t\t\t\tif (this.options.supportPointer) {\n\t\t\t\t\t_on(document, 'pointermove', this._onTouchMove);\n\t\t\t\t} else if (touch) {\n\t\t\t\t\t_on(document, 'touchmove', this._onTouchMove);\n\t\t\t\t} else {\n\t\t\t\t\t_on(document, 'mousemove', this._onTouchMove);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_on(dragEl, 'dragend', this);\n\t\t\t\t_on(rootEl, 'dragstart', this._onDragStart);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (document.selection) {\n\t\t\t\t\t// Timeout neccessary for IE9\n\t\t\t\t\t_nextTick(function () {\n\t\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t}\n\t\t},\n\n\t\t_dragStarted: function (fallback) {\n\t\t\tawaitingDragStarted = false;\n\t\t\tif (rootEl && dragEl) {\n\t\t\t\tif (this.nativeDraggable) {\n\t\t\t\t\t_on(document, 'dragover', this._handleAutoScroll);\n\t\t\t\t\t_on(document, 'dragover', _checkAlignment);\n\t\t\t\t}\n\t\t\t\tvar options = this.options;\n\n\t\t\t\t// Apply effect\n\t\t\t\t!fallback && _toggleClass(dragEl, options.dragClass, false);\n\t\t\t\t_toggleClass(dragEl, options.ghostClass, true);\n\n\t\t\t\t// In case dragging an animated element\n\t\t\t\t_css(dragEl, 'transform', '');\n\n\t\t\t\tSortable.active = this;\n\n\t\t\t\tfallback && this._appendGhost();\n\n\t\t\t\t// Drag start event\n\t\t\t\t_dispatchEvent(this, rootEl, 'start', dragEl, rootEl, rootEl, oldIndex);\n\t\t\t} else {\n\t\t\t\tthis._nulling();\n\t\t\t}\n\t\t},\n\n\t\t_emulateDragOver: function (bypassLastTouchCheck) {\n\t\t\tif (touchEvt) {\n\t\t\t\tif (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY && !bypassLastTouchCheck) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._lastX = touchEvt.clientX;\n\t\t\t\tthis._lastY = touchEvt.clientY;\n\n\t\t\t\t_hideGhostForTarget();\n\n\t\t\t\tvar target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n\t\t\t\tvar parent = target;\n\n\t\t\t\twhile (target && target.shadowRoot) {\n\t\t\t\t\ttarget = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n\t\t\t\t\tparent = target;\n\t\t\t\t}\n\n\t\t\t\tif (parent) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (parent[expando]) {\n\t\t\t\t\t\t\tvar inserted;\n\n\t\t\t\t\t\t\tinserted = parent[expando]._onDragOver({\n\t\t\t\t\t\t\t\tclientX: touchEvt.clientX,\n\t\t\t\t\t\t\t\tclientY: touchEvt.clientY,\n\t\t\t\t\t\t\t\ttarget: target,\n\t\t\t\t\t\t\t\trootEl: parent\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (inserted && !this.options.dragoverBubble) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttarget = parent; // store last element\n\t\t\t\t\t}\n\t\t\t\t\t/* jshint boss:true */\n\t\t\t\t\twhile (parent = parent.parentNode);\n\t\t\t\t}\n\t\t\t\tdragEl.parentNode[expando]._computeIsAligned(touchEvt);\n\n\t\t\t\t_unhideGhostForTarget();\n\t\t\t}\n\t\t},\n\n\n\t\t_onTouchMove: function (/**TouchEvent*/evt) {\n\t\t\tif (tapEvt) {\n\t\t\t\tvar\toptions = this.options,\n\t\t\t\t\tfallbackTolerance = options.fallbackTolerance,\n\t\t\t\t\tfallbackOffset = options.fallbackOffset,\n\t\t\t\t\ttouch = evt.touches ? evt.touches[0] : evt,\n\t\t\t\t\tmatrix = ghostEl && _matrix(ghostEl),\n\t\t\t\t\tscaleX = ghostEl && matrix && matrix.a,\n\t\t\t\t\tscaleY = ghostEl && matrix && matrix.d,\n\t\t\t\t\tdx = ((touch.clientX - tapEvt.clientX) + fallbackOffset.x) / (scaleX ? scaleX : 1),\n\t\t\t\t\tdy = ((touch.clientY - tapEvt.clientY) + fallbackOffset.y) / (scaleY ? scaleY : 1),\n\t\t\t\t\ttranslate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)';\n\n\n\t\t\t\t// only set the status to dragging, when we are actually dragging\n\t\t\t\tif (!Sortable.active && !awaitingDragStarted) {\n\t\t\t\t\tif (fallbackTolerance &&\n\t\t\t\t\t\tmin(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) < fallbackTolerance\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._onDragStart(evt, true);\n\t\t\t\t}\n\n\t\t\t\tthis._handleAutoScroll(touch, true);\n\n\n\t\t\t\tmoved = true;\n\t\t\t\ttouchEvt = touch;\n\n\n\t\t\t\t_css(ghostEl, 'webkitTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'mozTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'msTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'transform', translate3d);\n\n\t\t\t\tevt.cancelable && evt.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_appendGhost: function () {\n\t\t\tif (!ghostEl) {\n\t\t\t\tvar rect = _getRect(dragEl, this.options.fallbackOnBody ? document.body : rootEl, true),\n\t\t\t\t\tcss = _css(dragEl),\n\t\t\t\t\toptions = this.options;\n\n\t\t\t\tghostEl = dragEl.cloneNode(true);\n\n\t\t\t\t_toggleClass(ghostEl, options.ghostClass, false);\n\t\t\t\t_toggleClass(ghostEl, options.fallbackClass, true);\n\t\t\t\t_toggleClass(ghostEl, options.dragClass, true);\n\n\t\t\t\t_css(ghostEl, 'box-sizing', 'border-box');\n\t\t\t\t_css(ghostEl, 'margin', 0);\n\t\t\t\t_css(ghostEl, 'top', rect.top);\n\t\t\t\t_css(ghostEl, 'left', rect.left);\n\t\t\t\t_css(ghostEl, 'width', rect.width);\n\t\t\t\t_css(ghostEl, 'height', rect.height);\n\t\t\t\t_css(ghostEl, 'opacity', '0.8');\n\t\t\t\t_css(ghostEl, 'position', 'fixed');\n\t\t\t\t_css(ghostEl, 'zIndex', '100000');\n\t\t\t\t_css(ghostEl, 'pointerEvents', 'none');\n\n\t\t\t\toptions.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl);\n\t\t\t}\n\t\t},\n\n\t\t_onDragStart: function (/**Event*/evt, /**boolean*/fallback) {\n\t\t\tvar _this = this;\n\t\t\tvar dataTransfer = evt.dataTransfer;\n\t\t\tvar options = _this.options;\n\n\t\t\t// Setup clone\n\t\t\tcloneEl = _clone(dragEl);\n\n\t\t\tcloneEl.draggable = false;\n\t\t\tcloneEl.style['will-change'] = '';\n\n\t\t\tthis._hideClone();\n\n\t\t\t_toggleClass(cloneEl, _this.options.chosenClass, false);\n\n\n\t\t\t// #1143: IFrame support workaround\n\t\t\t_this._cloneId = _nextTick(function () {\n\t\t\t\tif (!_this.options.removeCloneOnHide) {\n\t\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\n\t\t\t\t}\n\t\t\t\t_dispatchEvent(_this, rootEl, 'clone', dragEl);\n\t\t\t});\n\n\n\t\t\t!fallback && _toggleClass(dragEl, options.dragClass, true);\n\n\t\t\t// Set proper drop events\n\t\t\tif (fallback) {\n\t\t\t\tignoreNextClick = true;\n\t\t\t\t_this._loopId = setInterval(_this._emulateDragOver, 50);\n\t\t\t} else {\n\t\t\t\t// Undo what was set in _prepareDragStart before drag started\n\t\t\t\t_off(document, 'mouseup', _this._onDrop);\n\t\t\t\t_off(document, 'touchend', _this._onDrop);\n\t\t\t\t_off(document, 'touchcancel', _this._onDrop);\n\n\t\t\t\tif (dataTransfer) {\n\t\t\t\t\tdataTransfer.effectAllowed = 'move';\n\t\t\t\t\toptions.setData && options.setData.call(_this, dataTransfer, dragEl);\n\t\t\t\t}\n\n\t\t\t\t_on(document, 'drop', _this);\n\n\t\t\t\t// #1276 fix:\n\t\t\t\t_css(dragEl, 'transform', 'translateZ(0)');\n\t\t\t}\n\n\t\t\tawaitingDragStarted = true;\n\n\t\t\t_this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback));\n\t\t\t_on(document, 'selectstart', _this);\n\t\t},\n\n\t\t// Returns true - if no further action is needed (either inserted or another condition)\n\t\t_onDragOver: function (/**Event*/evt) {\n\t\t\tvar el = this.el,\n\t\t\t\ttarget = evt.target,\n\t\t\t\tdragRect,\n\t\t\t\ttargetRect,\n\t\t\t\trevert,\n\t\t\t\toptions = this.options,\n\t\t\t\tgroup = options.group,\n\t\t\t\tactiveSortable = Sortable.active,\n\t\t\t\tisOwner = (activeGroup === group),\n\t\t\t\tcanSort = options.sort,\n\t\t\t\t_this = this;\n\n\t\t\tif (_silent) return;\n\n\t\t\t// IE event order fix\n\t\t\tif (IE11OrLess && !evt.rootEl && !evt.artificialBubble && !_isTrueParentSortable(el, target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return invocation when no further action is needed in another sortable\n\t\t\tfunction completed() {\n\t\t\t\tif (activeSortable) {\n\t\t\t\t\t// Set ghost class to new sortable's ghost class\n\t\t\t\t\t_toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n\t\t\t\t\t_toggleClass(dragEl, options.ghostClass, true);\n\t\t\t\t}\n\n\t\t\t\tif (putSortable !== _this && _this !== Sortable.active) {\n\t\t\t\t\tputSortable = _this;\n\t\t\t\t} else if (_this === Sortable.active) {\n\t\t\t\t\tputSortable = null;\n\t\t\t\t}\n\n\n\t\t\t\t// Null lastTarget if it is not inside a previously swapped element\n\t\t\t\tif ((target === dragEl && !dragEl.animated) || (target === el && !target.animated)) {\n\t\t\t\t\tlastTarget = null;\n\t\t\t\t}\n\t\t\t\t// no bubbling and not fallback\n\t\t\t\tif (!options.dragoverBubble && !evt.rootEl && target !== document) {\n\t\t\t\t\t_this._handleAutoScroll(evt);\n\t\t\t\t\tdragEl.parentNode[expando]._computeIsAligned(evt);\n\t\t\t\t}\n\n\t\t\t\t!options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Call when dragEl has been inserted\n\t\t\tfunction changed() {\n\t\t\t\t_dispatchEvent(_this, rootEl, 'change', target, el, rootEl, oldIndex, _index(dragEl, options.draggable), evt);\n\t\t\t}\n\n\n\t\t\tif (evt.preventDefault !== void 0) {\n\t\t\t\tevt.cancelable && evt.preventDefault();\n\t\t\t}\n\n\n\t\t\tmoved = true;\n\n\t\t\ttarget = _closest(target, options.draggable, el, true);\n\n\t\t\t// target is dragEl or target is animated\n\t\t\tif (!!_closest(evt.target, null, dragEl, true) || target.animated) {\n\t\t\t\treturn completed();\n\t\t\t}\n\n\t\t\tif (target !== dragEl) {\n\t\t\t\tignoreNextClick = false;\n\t\t\t}\n\n\t\t\tif (activeSortable && !options.disabled &&\n\t\t\t\t(isOwner\n\t\t\t\t\t? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n\t\t\t\t\t: (\n\t\t\t\t\t\tputSortable === this ||\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) &&\n\t\t\t\t\t\t\tgroup.checkPut(this, activeSortable, dragEl, evt)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tvar axis = this._getDirection(evt, target);\n\n\t\t\t\tdragRect = _getRect(dragEl);\n\n\t\t\t\tif (revert) {\n\t\t\t\t\tthis._hideClone();\n\t\t\t\t\tparentEl = rootEl; // actualization\n\n\t\t\t\t\tif (nextEl) {\n\t\t\t\t\t\trootEl.insertBefore(dragEl, nextEl);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trootEl.appendChild(dragEl);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn completed();\n\t\t\t\t}\n\n\t\t\t\tif ((el.children.length === 0) || (el.children[0] === ghostEl) ||\n\t\t\t\t\t_ghostIsLast(evt, axis, el) && !dragEl.animated\n\t\t\t\t) {\n\t\t\t\t\t//assign target only if condition is true\n\t\t\t\t\tif (el.children.length !== 0 && el.children[0] !== ghostEl && el === evt.target) {\n\t\t\t\t\t\ttarget = _lastChild(el);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\ttargetRect = _getRect(target);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isOwner) {\n\t\t\t\t\t\tactiveSortable._hideClone();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tactiveSortable._showClone(this);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\tparentEl = el; // actualization\n\t\t\t\t\t\trealDragElRect = null;\n\n\t\t\t\t\t\tchanged();\n\t\t\t\t\t\tthis._animate(dragRect, dragEl);\n\t\t\t\t\t\ttarget && this._animate(targetRect, target);\n\t\t\t\t\t\treturn completed();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (target && target !== dragEl && target.parentNode === el) {\n\t\t\t\t\tvar direction = 0,\n\t\t\t\t\t\ttargetBeforeFirstSwap,\n\t\t\t\t\t\taligned = target.sortableMouseAligned,\n\t\t\t\t\t\tdifferentLevel = dragEl.parentNode !== el,\n\t\t\t\t\t\tscrolledPastTop = _isScrolledPast(target, axis === 'vertical' ? 'top' : 'left');\n\n\t\t\t\t\tif (lastTarget !== target) {\n\t\t\t\t\t\tlastMode = null;\n\t\t\t\t\t\ttargetBeforeFirstSwap = _getRect(target)[axis === 'vertical' ? 'top' : 'left'];\n\t\t\t\t\t\tpastFirstInvertThresh = false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reference: https://www.lucidchart.com/documents/view/10fa0e93-e362-4126-aca2-b709ee56bd8b/0\n\t\t\t\t\tif (\n\t\t\t\t\t\t_isElInRowColumn(dragEl, target, axis) && aligned ||\n\t\t\t\t\t\tdifferentLevel ||\n\t\t\t\t\t\tscrolledPastTop ||\n\t\t\t\t\t\toptions.invertSwap ||\n\t\t\t\t\t\tlastMode === 'insert' ||\n\t\t\t\t\t\t// Needed, in the case that we are inside target and inserted because not aligned... aligned will stay false while inside\n\t\t\t\t\t\t// and lastMode will change to 'insert', but we must swap\n\t\t\t\t\t\tlastMode === 'swap'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// New target that we will be inside\n\t\t\t\t\t\tif (lastMode !== 'swap') {\n\t\t\t\t\t\t\tisCircumstantialInvert = options.invertSwap || differentLevel || scrolling || scrolledPastTop;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdirection = _getSwapDirection(evt, target, axis,\n\t\t\t\t\t\t\toptions.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold,\n\t\t\t\t\t\t\tisCircumstantialInvert,\n\t\t\t\t\t\t\tlastTarget === target);\n\t\t\t\t\t\tlastMode = 'swap';\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Insert at position\n\t\t\t\t\t\tdirection = _getInsertDirection(target, options);\n\t\t\t\t\t\tlastMode = 'insert';\n\t\t\t\t\t}\n\t\t\t\t\tif (direction === 0) return completed();\n\n\t\t\t\t\trealDragElRect = null;\n\t\t\t\t\tlastTarget = target;\n\n\t\t\t\t\tlastDirection = direction;\n\n\t\t\t\t\ttargetRect = _getRect(target);\n\n\t\t\t\t\tvar nextSibling = target.nextElementSibling,\n\t\t\t\t\t\tafter = false;\n\n\t\t\t\t\tafter = direction === 1;\n\n\t\t\t\t\tvar moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n\t\t\t\t\tif (moveVector !== false) {\n\t\t\t\t\t\tif (moveVector === 1 || moveVector === -1) {\n\t\t\t\t\t\t\tafter = (moveVector === 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_silent = true;\n\t\t\t\t\t\tsetTimeout(_unsilent, 30);\n\n\t\t\t\t\t\tif (isOwner) {\n\t\t\t\t\t\t\tactiveSortable._hideClone();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tactiveSortable._showClone(this);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (after && !nextSibling) {\n\t\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparentEl = dragEl.parentNode; // actualization\n\n\t\t\t\t\t\t// must be done before animation\n\t\t\t\t\t\tif (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n\t\t\t\t\t\t\ttargetMoveDistance = abs(targetBeforeFirstSwap - _getRect(target)[axis === 'vertical' ? 'top' : 'left']);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchanged();\n\t\t\t\t\t\t!differentLevel && this._animate(targetRect, target);\n\t\t\t\t\t\tthis._animate(dragRect, dragEl);\n\n\t\t\t\t\t\treturn completed();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (el.contains(dragEl)) {\n\t\t\t\t\treturn completed();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (IE11OrLess && !evt.rootEl) {\n\t\t\t\t_artificalBubble(el, evt, '_onDragOver');\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\t_animate: function (prevRect, target) {\n\t\t\tvar ms = this.options.animation;\n\n\t\t\tif (ms) {\n\t\t\t\tvar currentRect = _getRect(target);\n\n\t\t\t\tif (target === dragEl) {\n\t\t\t\t\trealDragElRect = currentRect;\n\t\t\t\t}\n\n\t\t\t\tif (prevRect.nodeType === 1) {\n\t\t\t\t\tprevRect = _getRect(prevRect);\n\t\t\t\t}\n\n\t\t\t\t// Check if actually moving position\n\t\t\t\tif ((prevRect.left + prevRect.width / 2) !== (currentRect.left + currentRect.width / 2)\n\t\t\t\t\t|| (prevRect.top + prevRect.height / 2) !== (currentRect.top + currentRect.height / 2)\n\t\t\t\t) {\n\t\t\t\t\tvar matrix = _matrix(this.el),\n\t\t\t\t\t\tscaleX = matrix && matrix.a,\n\t\t\t\t\t\tscaleY = matrix && matrix.d;\n\n\t\t\t\t\t_css(target, 'transition', 'none');\n\t\t\t\t\t_css(target, 'transform', 'translate3d('\n\t\t\t\t\t\t+ (prevRect.left - currentRect.left) / (scaleX ? scaleX : 1) + 'px,'\n\t\t\t\t\t\t+ (prevRect.top - currentRect.top) / (scaleY ? scaleY : 1) + 'px,0)'\n\t\t\t\t\t);\n\n\t\t\t\t\tforRepaintDummy = target.offsetWidth; // repaint\n\t\t\t\t\t_css(target, 'transition', 'transform ' + ms + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n\t\t\t\t\t_css(target, 'transform', 'translate3d(0,0,0)');\n\t\t\t\t}\n\n\t\t\t\t(typeof target.animated === 'number') && clearTimeout(target.animated);\n\t\t\t\ttarget.animated = setTimeout(function () {\n\t\t\t\t\t_css(target, 'transition', '');\n\t\t\t\t\t_css(target, 'transform', '');\n\t\t\t\t\ttarget.animated = false;\n\t\t\t\t}, ms);\n\t\t\t}\n\t\t},\n\n\t\t_offUpEvents: function () {\n\t\t\tvar ownerDocument = this.el.ownerDocument;\n\n\t\t\t_off(document, 'touchmove', this._onTouchMove);\n\t\t\t_off(document, 'pointermove', this._onTouchMove);\n\t\t\t_off(ownerDocument, 'mouseup', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchend', this._onDrop);\n\t\t\t_off(ownerDocument, 'pointerup', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchcancel', this._onDrop);\n\t\t\t_off(document, 'selectstart', this);\n\t\t},\n\n\t\t_onDrop: function (/**Event*/evt) {\n\t\t\tvar el = this.el,\n\t\t\t\toptions = this.options;\n\t\t\tawaitingDragStarted = false;\n\t\t\tscrolling = false;\n\t\t\tisCircumstantialInvert = false;\n\t\t\tpastFirstInvertThresh = false;\n\n\t\t\tclearInterval(this._loopId);\n\n\t\t\tclearInterval(pointerElemChangedInterval);\n\t\t\t_clearAutoScrolls();\n\t\t\t_cancelThrottle();\n\n\t\t\tclearTimeout(this._dragStartTimer);\n\n\t\t\t_cancelNextTick(this._cloneId);\n\t\t\t_cancelNextTick(this._dragStartId);\n\n\t\t\t// Unbind events\n\t\t\t_off(document, 'mousemove', this._onTouchMove);\n\n\n\t\t\tif (this.nativeDraggable) {\n\t\t\t\t_off(document, 'drop', this);\n\t\t\t\t_off(el, 'dragstart', this._onDragStart);\n\t\t\t\t_off(document, 'dragover', this._handleAutoScroll);\n\t\t\t\t_off(document, 'dragover', _checkAlignment);\n\t\t\t}\n\n\t\t\tthis._offUpEvents();\n\n\t\t\tif (evt) {\n\t\t\t\tif (moved) {\n\t\t\t\t\tevt.cancelable && evt.preventDefault();\n\t\t\t\t\t!options.dropBubble && evt.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n\t\t\t\tif (rootEl === parentEl || (putSortable && putSortable.lastPutMode !== 'clone')) {\n\t\t\t\t\t// Remove clone\n\t\t\t\t\tcloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n\t\t\t\t}\n\n\t\t\t\tif (dragEl) {\n\t\t\t\t\tif (this.nativeDraggable) {\n\t\t\t\t\t\t_off(dragEl, 'dragend', this);\n\t\t\t\t\t}\n\n\t\t\t\t\t_disableDraggable(dragEl);\n\t\t\t\t\tdragEl.style['will-change'] = '';\n\n\t\t\t\t\t// Remove class's\n\t\t\t\t\t_toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n\t\t\t\t\t_toggleClass(dragEl, this.options.chosenClass, false);\n\n\t\t\t\t\t// Drag stop event\n\t\t\t\t\t_dispatchEvent(this, rootEl, 'unchoose', dragEl, parentEl, rootEl, oldIndex, null, evt);\n\n\t\t\t\t\tif (rootEl !== parentEl) {\n\t\t\t\t\t\tnewIndex = _index(dragEl, options.draggable);\n\n\t\t\t\t\t\tif (newIndex >= 0) {\n\t\t\t\t\t\t\t// Add event\n\t\t\t\t\t\t\t_dispatchEvent(null, parentEl, 'add', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\n\t\t\t\t\t\t\t// Remove event\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'remove', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\n\t\t\t\t\t\t\t// drag from one list and drop into another\n\t\t\t\t\t\t\t_dispatchEvent(null, parentEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tputSortable && putSortable.save();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (dragEl.nextSibling !== nextEl) {\n\t\t\t\t\t\t\t// Get the index of the dragged element within its parent\n\t\t\t\t\t\t\tnewIndex = _index(dragEl, options.draggable);\n\n\t\t\t\t\t\t\tif (newIndex >= 0) {\n\t\t\t\t\t\t\t\t// drag & drop within the same list\n\t\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'update', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\t\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Sortable.active) {\n\t\t\t\t\t\t/* jshint eqnull:true */\n\t\t\t\t\t\tif (newIndex == null || newIndex === -1) {\n\t\t\t\t\t\t\tnewIndex = oldIndex;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'end', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\n\n\t\t\t\t\t\t// Save sorting\n\t\t\t\t\t\tthis.save();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tthis._nulling();\n\t\t},\n\n\t\t_nulling: function() {\n\t\t\trootEl =\n\t\t\tdragEl =\n\t\t\tparentEl =\n\t\t\tghostEl =\n\t\t\tnextEl =\n\t\t\tcloneEl =\n\t\t\tlastDownEl =\n\n\t\t\tscrollEl =\n\t\t\tscrollParentEl =\n\t\t\tautoScrolls.length =\n\n\t\t\tpointerElemChangedInterval =\n\t\t\tlastPointerElemX =\n\t\t\tlastPointerElemY =\n\n\t\t\ttapEvt =\n\t\t\ttouchEvt =\n\n\t\t\tmoved =\n\t\t\tnewIndex =\n\t\t\toldIndex =\n\n\t\t\tlastTarget =\n\t\t\tlastDirection =\n\n\t\t\tforRepaintDummy =\n\t\t\trealDragElRect =\n\n\t\t\tputSortable =\n\t\t\tactiveGroup =\n\t\t\tSortable.active = null;\n\n\t\t\tsavedInputChecked.forEach(function (el) {\n\t\t\t\tel.checked = true;\n\t\t\t});\n\n\t\t\tsavedInputChecked.length = 0;\n\t\t},\n\n\t\thandleEvent: function (/**Event*/evt) {\n\t\t\tswitch (evt.type) {\n\t\t\t\tcase 'drop':\n\t\t\t\tcase 'dragend':\n\t\t\t\t\tthis._onDrop(evt);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'dragenter':\n\t\t\t\tcase 'dragover':\n\t\t\t\t\tif (dragEl) {\n\t\t\t\t\t\tthis._onDragOver(evt);\n\t\t\t\t\t\t_globalDragOver(evt);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'selectstart':\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\n\t\t/**\n\t\t * Serializes the item into an array of string.\n\t\t * @returns {String[]}\n\t\t */\n\t\ttoArray: function () {\n\t\t\tvar order = [],\n\t\t\t\tel,\n\t\t\t\tchildren = this.el.children,\n\t\t\t\ti = 0,\n\t\t\t\tn = children.length,\n\t\t\t\toptions = this.options;\n\n\t\t\tfor (; i < n; i++) {\n\t\t\t\tel = children[i];\n\t\t\t\tif (_closest(el, options.draggable, this.el, false)) {\n\t\t\t\t\torder.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn order;\n\t\t},\n\n\n\t\t/**\n\t\t * Sorts the elements according to the array.\n\t\t * @param {String[]} order order of the items\n\t\t */\n\t\tsort: function (order) {\n\t\t\tvar items = {}, rootEl = this.el;\n\n\t\t\tthis.toArray().forEach(function (id, i) {\n\t\t\t\tvar el = rootEl.children[i];\n\n\t\t\t\tif (_closest(el, this.options.draggable, rootEl, false)) {\n\t\t\t\t\titems[id] = el;\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\torder.forEach(function (id) {\n\t\t\t\tif (items[id]) {\n\t\t\t\t\trootEl.removeChild(items[id]);\n\t\t\t\t\trootEl.appendChild(items[id]);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n\t\t * Save the current sorting\n\t\t */\n\t\tsave: function () {\n\t\t\tvar store = this.options.store;\n\t\t\tstore && store.set && store.set(this);\n\t\t},\n\n\n\t\t/**\n\t\t * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n\t\t * @param {HTMLElement} el\n\t\t * @param {String} [selector] default: `options.draggable`\n\t\t * @returns {HTMLElement|null}\n\t\t */\n\t\tclosest: function (el, selector) {\n\t\t\treturn _closest(el, selector || this.options.draggable, this.el, false);\n\t\t},\n\n\n\t\t/**\n\t\t * Set/get option\n\t\t * @param {string} name\n\t\t * @param {*} [value]\n\t\t * @returns {*}\n\t\t */\n\t\toption: function (name, value) {\n\t\t\tvar options = this.options;\n\n\t\t\tif (value === void 0) {\n\t\t\t\treturn options[name];\n\t\t\t} else {\n\t\t\t\toptions[name] = value;\n\n\t\t\t\tif (name === 'group') {\n\t\t\t\t\t_prepareGroup(options);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\n\t\t/**\n\t\t * Destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar el = this.el;\n\n\t\t\tel[expando] = null;\n\n\t\t\t_off(el, 'mousedown', this._onTapStart);\n\t\t\t_off(el, 'touchstart', this._onTapStart);\n\t\t\t_off(el, 'pointerdown', this._onTapStart);\n\n\t\t\tif (this.nativeDraggable) {\n\t\t\t\t_off(el, 'dragover', this);\n\t\t\t\t_off(el, 'dragenter', this);\n\t\t\t}\n\t\t\t// Remove draggable attributes\n\t\t\tArray.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n\t\t\t\tel.removeAttribute('draggable');\n\t\t\t});\n\n\t\t\tthis._onDrop();\n\n\t\t\tsortables.splice(sortables.indexOf(this.el), 1);\n\n\t\t\tthis.el = el = null;\n\t\t},\n\n\t\t_hideClone: function() {\n\t\t\tif (!cloneEl.cloneHidden) {\n\t\t\t\t_css(cloneEl, 'display', 'none');\n\t\t\t\tcloneEl.cloneHidden = true;\n\t\t\t\tif (cloneEl.parentNode && this.options.removeCloneOnHide) {\n\t\t\t\t\tcloneEl.parentNode.removeChild(cloneEl);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_showClone: function(putSortable) {\n\t\t\tif (putSortable.lastPutMode !== 'clone') {\n\t\t\t\tthis._hideClone();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (cloneEl.cloneHidden) {\n\t\t\t\t// show clone at dragEl or original position\n\t\t\t\tif (rootEl.contains(dragEl) && !this.options.group.revertClone) {\n\t\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\n\t\t\t\t} else if (nextEl) {\n\t\t\t\t\trootEl.insertBefore(cloneEl, nextEl);\n\t\t\t\t} else {\n\t\t\t\t\trootEl.appendChild(cloneEl);\n\t\t\t\t}\n\n\t\t\t\tif (this.options.group.revertClone) {\n\t\t\t\t\tthis._animate(dragEl, cloneEl);\n\t\t\t\t}\n\t\t\t\t_css(cloneEl, 'display', '');\n\t\t\t\tcloneEl.cloneHidden = false;\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n\t\tif (el) {\n\t\t\tctx = ctx || document;\n\n\t\t\tdo {\n\t\t\t\tif (\n\t\t\t\t\tselector != null &&\n\t\t\t\t\t(\n\t\t\t\t\t\tselector[0] === '>' && el.parentNode === ctx && _matches(el, selector.substring(1)) ||\n\t\t\t\t\t\t_matches(el, selector)\n\t\t\t\t\t) ||\n\t\t\t\t\tincludeCTX && el === ctx\n\t\t\t\t) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\n\t\t\t\tif (el === ctx) break;\n\t\t\t\t/* jshint boss:true */\n\t\t\t} while (el = _getParentOrHost(el));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\n\tfunction _getParentOrHost(el) {\n\t\treturn (el.host && el !== document && el.host.nodeType)\n\t\t\t? el.host\n\t\t\t: el.parentNode;\n\t}\n\n\n\tfunction _globalDragOver(/**Event*/evt) {\n\t\tif (evt.dataTransfer) {\n\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t}\n\t\tevt.cancelable && evt.preventDefault();\n\t}\n\n\n\tfunction _on(el, event, fn) {\n\t\tel.addEventListener(event, fn, captureMode);\n\t}\n\n\n\tfunction _off(el, event, fn) {\n\t\tel.removeEventListener(event, fn, captureMode);\n\t}\n\n\n\tfunction _toggleClass(el, name, state) {\n\t\tif (el && name) {\n\t\t\tif (el.classList) {\n\t\t\t\tel.classList[state ? 'add' : 'remove'](name);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n\t\t\t\tel.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction _css(el, prop, val) {\n\t\tvar style = el && el.style;\n\n\t\tif (style) {\n\t\t\tif (val === void 0) {\n\t\t\t\tif (document.defaultView && document.defaultView.getComputedStyle) {\n\t\t\t\t\tval = document.defaultView.getComputedStyle(el, '');\n\t\t\t\t}\n\t\t\t\telse if (el.currentStyle) {\n\t\t\t\t\tval = el.currentStyle;\n\t\t\t\t}\n\n\t\t\t\treturn prop === void 0 ? val : val[prop];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!(prop in style) && prop.indexOf('webkit') === -1) {\n\t\t\t\t\tprop = '-webkit-' + prop;\n\t\t\t\t}\n\n\t\t\t\tstyle[prop] = val + (typeof val === 'string' ? '' : 'px');\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _matrix(el) {\n\t\tvar appliedTransforms = '';\n\t\tdo {\n\t\t\tvar transform = _css(el, 'transform');\n\n\t\t\tif (transform && transform !== 'none') {\n\t\t\t\tappliedTransforms = transform + ' ' + appliedTransforms;\n\t\t\t}\n\t\t\t/* jshint boss:true */\n\t\t} while (el = el.parentNode);\n\n\t\tif (window.DOMMatrix) {\n\t\t\treturn new DOMMatrix(appliedTransforms);\n\t\t} else if (window.WebKitCSSMatrix) {\n\t\t\treturn new WebKitCSSMatrix(appliedTransforms);\n\t\t} else if (window.CSSMatrix) {\n\t\t\treturn new CSSMatrix(appliedTransforms);\n\t\t}\n\t}\n\n\n\tfunction _find(ctx, tagName, iterator) {\n\t\tif (ctx) {\n\t\t\tvar list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;\n\n\t\t\tif (iterator) {\n\t\t\t\tfor (; i < n; i++) {\n\t\t\t\t\titerator(list[i], i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn list;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\n\n\tfunction _dispatchEvent(sortable, rootEl, name, targetEl, toEl, fromEl, startIndex, newIndex, originalEvt) {\n\t\tsortable = (sortable || rootEl[expando]);\n\t\tvar evt,\n\t\t\toptions = sortable.options,\n\t\t\tonName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n\t\t// Support for new CustomEvent feature\n\t\tif (window.CustomEvent && !IE11OrLess && !Edge) {\n\t\t\tevt = new CustomEvent(name, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t} else {\n\t\t\tevt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, true);\n\t\t}\n\n\t\tevt.to = toEl || rootEl;\n\t\tevt.from = fromEl || rootEl;\n\t\tevt.item = targetEl || rootEl;\n\t\tevt.clone = cloneEl;\n\n\t\tevt.oldIndex = startIndex;\n\t\tevt.newIndex = newIndex;\n\n\t\tevt.originalEvent = originalEvt;\n\n\t\tif (rootEl) {\n\t\t\trootEl.dispatchEvent(evt);\n\t }\n\n\t\tif (options[onName]) {\n\t\t\toptions[onName].call(sortable, evt);\n\t\t}\n\t}\n\n\n\tfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt, willInsertAfter) {\n\t\tvar evt,\n\t\t\tsortable = fromEl[expando],\n\t\t\tonMoveFn = sortable.options.onMove,\n\t\t\tretVal;\n\t\t// Support for new CustomEvent feature\n\t\tif (window.CustomEvent && !IE11OrLess && !Edge) {\n\t\t\tevt = new CustomEvent('move', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t} else {\n\t\t\tevt = document.createEvent('Event');\n\t\t\tevt.initEvent('move', true, true);\n\t\t}\n\n\t\tevt.to = toEl;\n\t\tevt.from = fromEl;\n\t\tevt.dragged = dragEl;\n\t\tevt.draggedRect = dragRect;\n\t\tevt.related = targetEl || toEl;\n\t\tevt.relatedRect = targetRect || _getRect(toEl);\n\t\tevt.willInsertAfter = willInsertAfter;\n\n\t\tevt.originalEvent = originalEvt;\n\n\t\tfromEl.dispatchEvent(evt);\n\n\t\tif (onMoveFn) {\n\t\t\tretVal = onMoveFn.call(sortable, evt, originalEvt);\n\t\t}\n\n\t\treturn retVal;\n\t}\n\n\tfunction _disableDraggable(el) {\n\t\tel.draggable = false;\n\t}\n\n\tfunction _unsilent() {\n\t\t_silent = false;\n\t}\n\n\t/**\n\t * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n\t * and non-draggable elements\n\t * @param {HTMLElement} el The parent element\n\t * @param {Number} childNum The index of the child\n\t * @param {Object} options Parent Sortable's options\n\t * @return {HTMLElement} The child at index childNum, or null if not found\n\t */\n\tfunction _getChild(el, childNum, options) {\n\t\tvar currentChild = 0,\n\t\t\ti = 0,\n\t\t\tchildren = el.children;\n\n\t\twhile (i < children.length) {\n\t\t\tif (\n\t\t\t\tchildren[i].style.display !== 'none' &&\n\t\t\t\tchildren[i] !== ghostEl &&\n\t\t\t\tchildren[i] !== dragEl &&\n\t\t\t\t_closest(children[i], options.draggable, el, false)\n\t\t\t) {\n\t\t\t\tif (currentChild === childNum) {\n\t\t\t\t\treturn children[i];\n\t\t\t\t}\n\t\t\t\tcurrentChild++;\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n\t * @param {HTMLElement} el Parent element\n\t * @return {HTMLElement} The last child, ignoring ghostEl\n\t */\n\tfunction _lastChild(el) {\n\t\tvar last = el.lastElementChild;\n\n\t\twhile (last === ghostEl || last.style.display === 'none') {\n\t\t\tlast = last.previousElementSibling;\n\n\t\t\tif (!last) break;\n\t\t}\n\n\t\treturn last || null;\n\t}\n\n\tfunction _ghostIsLast(evt, axis, el) {\n\t\tvar elRect = _getRect(_lastChild(el)),\n\t\t\tmouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX,\n\t\t\tmouseOnOppAxis = axis === 'vertical' ? evt.clientX : evt.clientY,\n\t\t\ttargetS2 = axis === 'vertical' ? elRect.bottom : elRect.right,\n\t\t\ttargetS1Opp = axis === 'vertical' ? elRect.left : elRect.top,\n\t\t\ttargetS2Opp = axis === 'vertical' ? elRect.right : elRect.bottom,\n\t\t\tspacer = 10;\n\n\t\treturn (\n\t\t\taxis === 'vertical' ?\n\t\t\t\t(mouseOnOppAxis > targetS2Opp + spacer || mouseOnOppAxis <= targetS2Opp && mouseOnAxis > targetS2 && mouseOnOppAxis >= targetS1Opp) :\n\t\t\t\t(mouseOnAxis > targetS2 && mouseOnOppAxis > targetS1Opp || mouseOnAxis <= targetS2 && mouseOnOppAxis > targetS2Opp + spacer)\n\t\t);\n\t}\n\n\tfunction _getSwapDirection(evt, target, axis, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n\t\tvar targetRect = _getRect(target),\n\t\t\tmouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX,\n\t\t\ttargetLength = axis === 'vertical' ? targetRect.height : targetRect.width,\n\t\t\ttargetS1 = axis === 'vertical' ? targetRect.top : targetRect.left,\n\t\t\ttargetS2 = axis === 'vertical' ? targetRect.bottom : targetRect.right,\n\t\t\tdragRect = _getRect(dragEl),\n\t\t\tinvert = false;\n\n\n\t\tif (!invertSwap) {\n\t\t\t// Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n\t\t\tif (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n\t\t\t\t// check if past first invert threshold on side opposite of lastDirection\n\t\t\t\tif (!pastFirstInvertThresh &&\n\t\t\t\t\t(lastDirection === 1 ?\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\t// past first invert threshold, do not restrict inverted threshold to dragEl shadow\n\t\t\t\t\tpastFirstInvertThresh = true;\n\t\t\t\t}\n\n\t\t\t\tif (!pastFirstInvertThresh) {\n\t\t\t\t\tvar dragS1 = axis === 'vertical' ? dragRect.top : dragRect.left,\n\t\t\t\t\t\tdragS2 = axis === 'vertical' ? dragRect.bottom : dragRect.right;\n\t\t\t\t\t// dragEl shadow (target move distance shadow)\n\t\t\t\t\tif (\n\t\t\t\t\t\tlastDirection === 1 ?\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tmouseOnAxis > targetS2 - targetMoveDistance\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn lastDirection * -1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tinvert = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Regular\n\t\t\t\tif (\n\t\t\t\t\tmouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold) / 2) &&\n\t\t\t\t\tmouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold) / 2)\n\t\t\t\t) {\n\t\t\t\t\treturn ((mouseOnAxis > targetS1 + targetLength / 2) ? -1 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinvert = invert || invertSwap;\n\n\t\tif (invert) {\n\t\t\t// Invert of regular\n\t\t\tif (\n\t\t\t\tmouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold / 2) ||\n\t\t\t\tmouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold / 2)\n\t\t\t)\n\t\t\t{\n\t\t\t\treturn ((mouseOnAxis > targetS1 + targetLength / 2) ? 1 : -1);\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Gets the direction dragEl must be swapped relative to target in order to make it\n\t * seem that dragEl has been \"inserted\" into that element's position\n\t * @param {HTMLElement} target The target whose position dragEl is being inserted at\n\t * @param {Object} options options of the parent sortable\n\t * @return {Number} Direction dragEl must be swapped\n\t */\n\tfunction _getInsertDirection(target, options) {\n\t\tvar dragElIndex = _index(dragEl, options.draggable),\n\t\t\ttargetIndex = _index(target, options.draggable);\n\n\t\tif (dragElIndex < targetIndex) {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t}\n\n\n\t/**\n\t * Generate id\n\t * @param {HTMLElement} el\n\t * @returns {String}\n\t * @private\n\t */\n\tfunction _generateId(el) {\n\t\tvar str = el.tagName + el.className + el.src + el.href + el.textContent,\n\t\t\ti = str.length,\n\t\t\tsum = 0;\n\n\t\twhile (i--) {\n\t\t\tsum += str.charCodeAt(i);\n\t\t}\n\n\t\treturn sum.toString(36);\n\t}\n\n\t/**\n\t * Returns the index of an element within its parent for a selected set of\n\t * elements\n\t * @param {HTMLElement} el\n\t * @param {selector} selector\n\t * @return {number}\n\t */\n\tfunction _index(el, selector) {\n\t\tvar index = 0;\n\n\t\tif (!el || !el.parentNode) {\n\t\t\treturn -1;\n\t\t}\n\n\t\twhile (el && (el = el.previousElementSibling)) {\n\t\t\tif ((el.nodeName.toUpperCase() !== 'TEMPLATE') && el !== cloneEl) {\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t}\n\n\tfunction _matches(/**HTMLElement*/el, /**String*/selector) {\n\t\tif (el) {\n\t\t\ttry {\n\t\t\t\tif (el.matches) {\n\t\t\t\t\treturn el.matches(selector);\n\t\t\t\t} else if (el.msMatchesSelector) {\n\t\t\t\t\treturn el.msMatchesSelector(selector);\n\t\t\t\t} else if (el.webkitMatchesSelector) {\n\t\t\t\t\treturn el.webkitMatchesSelector(selector);\n\t\t\t\t}\n\t\t\t} catch(_) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tvar _throttleTimeout;\n\tfunction _throttle(callback, ms) {\n\t\treturn function () {\n\t\t\tif (!_throttleTimeout) {\n\t\t\t\tvar args = arguments,\n\t\t\t\t\t_this = this;\n\n\t\t\t\t_throttleTimeout = setTimeout(function () {\n\t\t\t\t\tif (args.length === 1) {\n\t\t\t\t\t\tcallback.call(_this, args[0]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback.apply(_this, args);\n\t\t\t\t\t}\n\n\t\t\t\t\t_throttleTimeout = void 0;\n\t\t\t\t}, ms);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction _cancelThrottle() {\n\t\tclearTimeout(_throttleTimeout);\n\t\t_throttleTimeout = void 0;\n\t}\n\n\tfunction _extend(dst, src) {\n\t\tif (dst && src) {\n\t\t\tfor (var key in src) {\n\t\t\t\tif (src.hasOwnProperty(key)) {\n\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn dst;\n\t}\n\n\tfunction _clone(el) {\n\t\tif (Polymer && Polymer.dom) {\n\t\t\treturn Polymer.dom(el).cloneNode(true);\n\t\t}\n\t\telse if ($) {\n\t\t\treturn $(el).clone(true)[0];\n\t\t}\n\t\telse {\n\t\t\treturn el.cloneNode(true);\n\t\t}\n\t}\n\n\tfunction _saveInputCheckedState(root) {\n\t\tsavedInputChecked.length = 0;\n\n\t\tvar inputs = root.getElementsByTagName('input');\n\t\tvar idx = inputs.length;\n\n\t\twhile (idx--) {\n\t\t\tvar el = inputs[idx];\n\t\t\tel.checked && savedInputChecked.push(el);\n\t\t}\n\t}\n\n\tfunction _nextTick(fn) {\n\t\treturn setTimeout(fn, 0);\n\t}\n\n\tfunction _cancelNextTick(id) {\n\t\treturn clearTimeout(id);\n\t}\n\n\n\t/**\n\t * Returns the \"bounding client rect\" of given element\n\t * @param {HTMLElement} el The element whose boundingClientRect is wanted\n\t * @param {[HTMLElement]} container the parent the element will be placed in\n\t * @param {[Boolean]} adjustForTransform Whether the rect should compensate for parent's transform\n\t * (used for fixed positioning on el)\n\t * @return {Object} The boundingClientRect of el\n\t */\n\tfunction _getRect(el, container, adjustForTransform) {\n\t\tif (!el.getBoundingClientRect && el !== win) return;\n\n\t\tvar elRect,\n\t\t\ttop,\n\t\t\tleft,\n\t\t\tbottom,\n\t\t\tright,\n\t\t\theight,\n\t\t\twidth;\n\n\t\tif (el !== win) {\n\t\t\telRect = el.getBoundingClientRect();\n\t\t\ttop = elRect.top;\n\t\t\tleft = elRect.left;\n\t\t\tbottom = elRect.bottom;\n\t\t\tright = elRect.right;\n\t\t\theight = elRect.height;\n\t\t\twidth = elRect.width;\n\t\t} else {\n\t\t\ttop = 0;\n\t\t\tleft = 0;\n\t\t\tbottom = window.innerHeight;\n\t\t\tright = window.innerWidth;\n\t\t\theight = window.innerHeight;\n\t\t\twidth = window.innerWidth;\n\t\t}\n\n\t\tif (adjustForTransform && el !== win) {\n\t\t\t// Adjust for translate()\n\t\t\tcontainer = container || el.parentNode;\n\n\t\t\t// solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n\t\t\t// Not needed on <= IE11\n\t\t\tif (!IE11OrLess) {\n\t\t\t\tdo {\n\t\t\t\t\tif (container && container.getBoundingClientRect && _css(container, 'transform') !== 'none') {\n\t\t\t\t\t\tvar containerRect = container.getBoundingClientRect();\n\n\t\t\t\t\t\t// Set relative to edges of padding box of container\n\t\t\t\t\t\ttop -= containerRect.top + parseInt(_css(container, 'border-top-width'));\n\t\t\t\t\t\tleft -= containerRect.left + parseInt(_css(container, 'border-left-width'));\n\t\t\t\t\t\tbottom = top + elRect.height;\n\t\t\t\t\t\tright = left + elRect.width;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t/* jshint boss:true */\n\t\t\t\t} while (container = container.parentNode);\n\t\t\t}\n\n\t\t\t// Adjust for scale()\n\t\t\tvar matrix = _matrix(el),\n\t\t\t\tscaleX = matrix && matrix.a,\n\t\t\t\tscaleY = matrix && matrix.d;\n\n\t\t\tif (matrix) {\n\t\t\t\ttop /= scaleY;\n\t\t\t\tleft /= scaleX;\n\n\t\t\t\twidth /= scaleX;\n\t\t\t\theight /= scaleY;\n\n\t\t\t\tbottom = top + height;\n\t\t\t\tright = left + width;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: top,\n\t\t\tleft: left,\n\t\t\tbottom: bottom,\n\t\t\tright: right,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t}\n\n\n\t/**\n\t * Checks if a side of an element is scrolled past a side of it's parents\n\t * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n\t * @param {String} side Side of the element in question ('top', 'left', 'right', 'bottom')\n\t * @return {Boolean} Whether the element is overflowing the viewport on the given side of it's parent\n\t */\n\tfunction _isScrolledPast(el, side) {\n\t\tvar parent = _getParentAutoScrollElement(parent, true),\n\t\t\telSide = _getRect(el)[side];\n\n\t\t/* jshint boss:true */\n\t\twhile (parent) {\n\t\t\tvar parentSide = _getRect(parent)[side],\n\t\t\t\tvisible;\n\n\t\t\tif (side === 'top' || side === 'left') {\n\t\t\t\tvisible = elSide >= parentSide;\n\t\t\t} else {\n\t\t\t\tvisible = elSide <= parentSide;\n\t\t\t}\n\n\t\t\tif (!visible) return true;\n\n\t\t\tif (parent === win) break;\n\n\t\t\tparent = _getParentAutoScrollElement(parent, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Fixed #973:\n\t_on(document, 'touchmove', function(evt) {\n\t\tif ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n\t\t\tevt.preventDefault();\n\t\t}\n\t});\n\n\n\t// Export utils\n\tSortable.utils = {\n\t\ton: _on,\n\t\toff: _off,\n\t\tcss: _css,\n\t\tfind: _find,\n\t\tis: function (el, selector) {\n\t\t\treturn !!_closest(el, selector, el, false);\n\t\t},\n\t\textend: _extend,\n\t\tthrottle: _throttle,\n\t\tclosest: _closest,\n\t\ttoggleClass: _toggleClass,\n\t\tclone: _clone,\n\t\tindex: _index,\n\t\tnextTick: _nextTick,\n\t\tcancelNextTick: _cancelNextTick,\n\t\tdetectDirection: _detectDirection,\n\t\tgetChild: _getChild\n\t};\n\n\n\t/**\n\t * Create sortable instance\n\t * @param {HTMLElement} el\n\t * @param {Object} [options]\n\t */\n\tSortable.create = function (el, options) {\n\t\treturn new Sortable(el, options);\n\t};\n\n\n\t// Export\n\tSortable.version = '1.8.3';\n\treturn Sortable;\n});\n"],"sourceRoot":""}