{"version":3,"sources":["plugins/sortable@1.7.0.js"],"names":["_typeof","Symbol","iterator","obj","constructor","prototype","factory","define","amd","module","exports","window","Sortable","el","options","nodeType","toString","call","this","_extend","expando","defaults","group","sort","disabled","store","handle","scroll","scrollSensitivity","scrollSpeed","bubbleScroll","draggable","test","nodeName","ghostClass","chosenClass","dragClass","ignore","filter","preventOnFilter","animation","setData","dataTransfer","dragEl","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","touchStartThreshold","parseInt","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","x","y","supportPointer","name","_prepareGroup","fn","charAt","bind","nativeDraggable","supportDraggable","_on","_onTapStart","touchDragOverListeners","push","_onDragOver","get","_cloneHide","sortable","state","lastPullMode","cloneEl","_css","revertClone","rootEl","insertBefore","nextEl","_animate","_closest","selector","ctx","document","parentNode","_matches","_getParentOrHost","host","_globalDragOver","evt","dropEffect","preventDefault","event","addEventListener","captureMode","_off","removeEventListener","_toggleClass","classList","className","replace","R_SPACE","prop","val","style","defaultView","getComputedStyle","currentStyle","_find","tagName","list","getElementsByTagName","i","n","length","_dispatchEvent","targetEl","toEl","fromEl","startIndex","newIndex","originalEvt","createEvent","onName","toUpperCase","substr","initEvent","to","from","item","clone","oldIndex","originalEvent","dispatchEvent","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","dragged","draggedRect","related","relatedRect","getBoundingClientRect","_disableDraggable","_unsilent","_silent","_ghostIsLast","lastEl","lastElementChild","rect","clientY","top","height","clientX","left","width","_generateId","str","src","href","sum","charCodeAt","_index","index","previousElementSibling","matches","msMatchesSelector","_","_throttle","callback","ms","_throttleTimeout","args","arguments","_this","setTimeout","apply","_cancelThrottle","clearTimeout","dst","key","hasOwnProperty","_clone","Polymer","dom","cloneNode","$","_saveInputCheckedState","root","savedInputChecked","inputs","idx","checked","_nextTick","_cancelNextTick","id","Error","parentEl","ghostEl","lastDownEl","scrollEl","scrollParentEl","scrollCustomFn","lastCSS","lastParentCSS","activeGroup","putSortable","pointerElemChangedInterval","lastPointerElemX","lastPointerElemY","tapEvt","touchEvt","moved","forRepaintDummy","autoScrolls","R_FLOAT","Date","getTime","win","jQuery","Zepto","passiveMode","createElement","supportCssPointerEvents","navigator","userAgent","match","cssText","pointerEvents","abs","Math","min","_getParentAutoScrollElement","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","body","_autoScroll","vx","vy","scrollOffsetX","scrollOffsetY","sens","speed","winWidth","innerWidth","winHeight","innerHeight","_clearAutoScrolls","scrollFn","layersOut","currentParent","right","bottom","clearInterval","pid","setInterval","scrollTo","pageXOffset","pageYOffset","scrollTop","scrollLeft","forEach","autoScroll","toFn","value","pull","ret","otherGroup","join","indexOf","originalGroup","checkPull","checkPut","put","Object","defineProperty","capture","passive","err","type","touch","touches","target","originalTarget","shadowRoot","path","button","isContentEditable","split","some","criteria","trim","_prepareDragStart","_handleAutoScroll","elementFromPoint","pointerType","ogElemScroller","newElem","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_disableDelayedDrag","_triggerDragStart","_onDrop","_delayedDragTouchMoveHandler","_dragStartTimer","e","touchType","_onDragStart","selection","empty","getSelection","removeAllRanges","_dragStarted","active","_nulling","_emulateDragOver","parent","_onTouchMove","dx","dy","translate3d","_appendGhost","ghostRect","css","marginTop","marginLeft","appendChild","useFallback","_offUpEvents","_cloneId","_loopId","effectAllowed","_dragStartId","revert","activeSortable","isOwner","isMovingBetweenSortable","canSort","stopPropagation","animated","contains","children","floating","cssFloat","display","isWide","offsetWidth","isLong","offsetHeight","halfway","nextElementSibling","after","elTop","offsetTop","tgTop","moveVector","prevRect","currentRect","removeChild","save","handleEvent","toArray","order","getAttribute","items","set","closest","option","destroy","Array","querySelectorAll","removeAttribute","splice","utils","on","off","find","is","extend","throttle","toggleClass","nextTick","cancelNextTick","create","version"],"mappings":"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","file":"../../plugins/sortable@1.7.0.js","sourcesContent":["/**!\r\n * Sortable\r\n * @author\tRubaXa \r\n * @license MIT\r\n */\r\n\r\n(function sortableModule(factory) {\r\n\t\"use strict\";\r\n\r\n\tif (typeof define === \"function\" && define.amd) {\r\n\t\tdefine(factory);\r\n\t}\r\n\telse if (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\r\n\t\tmodule.exports = factory();\r\n\t}\r\n\telse {\r\n\t\t/* jshint sub:true */\r\n\t\twindow[\"Sortable\"] = factory();\r\n\t}\r\n})(function sortableFactory() {\r\n\t\"use strict\";\r\n\r\n\tif (typeof window === \"undefined\" || !window.document) {\r\n\t\treturn function sortableError() {\r\n\t\t\tthrow new Error(\"Sortable.js requires a window with a document\");\r\n\t\t};\r\n\t}\r\n\r\n\tvar dragEl,\r\n\t\tparentEl,\r\n\t\tghostEl,\r\n\t\tcloneEl,\r\n\t\trootEl,\r\n\t\tnextEl,\r\n\t\tlastDownEl,\r\n\r\n\t\tscrollEl,\r\n\t\tscrollParentEl,\r\n\t\tscrollCustomFn,\r\n\r\n\t\tlastEl,\r\n\t\tlastCSS,\r\n\t\tlastParentCSS,\r\n\r\n\t\toldIndex,\r\n\t\tnewIndex,\r\n\r\n\t\tactiveGroup,\r\n\t\tputSortable,\r\n\r\n\t\tautoScrolls = [],\r\n\r\n\t\tpointerElemChangedInterval,\r\n\t\tlastPointerElemX,\r\n\t\tlastPointerElemY,\r\n\r\n\t\ttapEvt,\r\n\t\ttouchEvt,\r\n\r\n\t\tmoved,\r\n\r\n\t\tforRepaintDummy,\r\n\r\n\t\t/** @const */\r\n\t\tR_SPACE = /\\s+/g,\r\n\t\tR_FLOAT = /left|right|inline/,\r\n\r\n\t\texpando = 'Sortable' + (new Date).getTime(),\r\n\r\n\t\twin = window,\r\n\t\tdocument = win.document,\r\n\t\tparseInt = win.parseInt,\r\n\t\tsetTimeout = win.setTimeout,\r\n\r\n\t\t$ = win.jQuery || win.Zepto,\r\n\t\tPolymer = win.Polymer,\r\n\r\n\t\tcaptureMode = false,\r\n\t\tpassiveMode = false,\r\n\r\n\t\tsupportDraggable = ('draggable' in document.createElement('div')),\r\n\t\tsupportCssPointerEvents = (function (el) {\r\n\t\t\t// false when IE11\r\n\t\t\tif (!!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\\.|msie)/i)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tel = document.createElement('x');\r\n\t\t\tel.style.cssText = 'pointer-events:auto';\r\n\t\t\treturn el.style.pointerEvents === 'auto';\r\n\t\t})(),\r\n\r\n\t\t_silent = false,\r\n\r\n\t\tabs = Math.abs,\r\n\t\tmin = Math.min,\r\n\r\n\t\tsavedInputChecked = [],\r\n\t\ttouchDragOverListeners = [],\r\n\r\n\t\talwaysFalse = function () { return false; },\r\n\r\n\t\t_getParentAutoScrollElement = function(rootEl, includeSelf) {\r\n\t\t\t// will skip to window in _autoScroll\r\n\t\t\tif (!rootEl || !rootEl.getBoundingClientRect) return;\r\n\r\n\t\t\tvar elem = rootEl;\r\n\t\t\tvar gotSelf = false;\r\n\t\t\tdo {\r\n\t\t\t\tif (\r\n\t\t\t\t\t(elem.clientWidth < elem.scrollWidth) ||\r\n\t\t\t\t\t(elem.clientHeight < elem.scrollHeight)\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (!elem || !elem.getBoundingClientRect || elem === document.body) return;\r\n\r\n\t\t\t\t\tif (gotSelf || includeSelf) return elem;\r\n\t\t\t\t\tgotSelf = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t} while (elem = elem.parentNode);\r\n\t\t},\r\n\r\n\t\t_autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) {\r\n\t\t\t// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\r\n\t\t\tif (options.scroll) {\r\n\t\t\t\tvar _this = rootEl ? rootEl[expando] : window,\r\n\t\t\t\t\trect,\r\n\t\t\t\t\tsens = options.scrollSensitivity,\r\n\t\t\t\t\tspeed = options.scrollSpeed,\r\n\r\n\t\t\t\t\tx = evt.clientX,\r\n\t\t\t\t\ty = evt.clientY,\r\n\r\n\t\t\t\t\twinWidth = window.innerWidth,\r\n\t\t\t\t\twinHeight = window.innerHeight,\r\n\r\n\t\t\t\t\tvx,\r\n\t\t\t\t\tvy,\r\n\r\n\t\t\t\t\tscrollOffsetX,\r\n\t\t\t\t\tscrollOffsetY\r\n\t\t\t\t;\r\n\r\n\t\t\t\t// Detect scrollEl\r\n\t\t\t\tif (scrollParentEl !== rootEl) {\r\n\t\t\t\t\t_clearAutoScrolls();\r\n\r\n\t\t\t\t\tscrollEl = options.scroll;\r\n\t\t\t\t\tscrollCustomFn = options.scrollFn;\r\n\r\n\t\t\t\t\tif (scrollEl === true) {\r\n\t\t\t\t\t\tscrollEl = _getParentAutoScrollElement(rootEl, true);\r\n\t\t\t\t\t\tscrollParentEl = scrollEl;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tvar layersOut = 0;\r\n\t\t\t\tvar currentParent = scrollEl;\r\n\t\t\t\tdo {\r\n\t\t\t\t\tvar el;\r\n\r\n\t\t\t\t\tif (currentParent) {\r\n\t\t\t\t\t\tel = currentParent;\r\n\t\t\t\t\t\trect = currentParent.getBoundingClientRect();\r\n\t\t\t\t\t\tvx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens);\r\n\t\t\t\t\t\tvy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens);\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (!(vx || vy)) {\r\n\t\t\t\t\t\tvx = (winWidth - x <= sens) - (x <= sens);\r\n\t\t\t\t\t\tvy = (winHeight - y <= sens) - (y <= sens);\r\n\r\n\t\t\t\t\t\t/* jshint expr:true */\r\n\t\t\t\t\t\t(vx || vy) && (el = win);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!autoScrolls[layersOut]) {\r\n\t\t\t\t\t\tfor (var i = 0; i <= layersOut; i++) {\r\n\t\t\t\t\t\t\tif (!autoScrolls[i]) {\r\n\t\t\t\t\t\t\t\tautoScrolls[i] = {};\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (autoScrolls[layersOut].vx !== vx || autoScrolls[layersOut].vy !== vy || autoScrolls[layersOut].el !== el) {\r\n\t\t\t\t\t\tautoScrolls[layersOut].el = el;\r\n\t\t\t\t\t\tautoScrolls[layersOut].vx = vx;\r\n\t\t\t\t\t\tautoScrolls[layersOut].vy = vy;\r\n\r\n\t\t\t\t\t\tclearInterval(autoScrolls[layersOut].pid);\r\n\r\n\t\t\t\t\t\tif (el) {\r\n\t\t\t\t\t\t\tautoScrolls[layersOut].pid = setInterval((function () {\r\n\t\t\t\t\t\t\t\tscrollOffsetY = autoScrolls[this.layersOut].vy ? autoScrolls[this.layersOut].vy * speed : 0;\r\n\t\t\t\t\t\t\t\tscrollOffsetX = autoScrolls[this.layersOut].vx ? autoScrolls[this.layersOut].vx * speed : 0;\r\n\r\n\t\t\t\t\t\t\t\tif ('function' === typeof(scrollCustomFn)) {\r\n\t\t\t\t\t\t\t\t\tif (scrollCustomFn.call(_this, scrollOffsetX, scrollOffsetY, evt, touchEvt, autoScrolls[this.layersOut].el) !== 'continue') {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (autoScrolls[this.layersOut].el === win) {\r\n\t\t\t\t\t\t\t\t\twin.scrollTo(win.pageXOffset + scrollOffsetX, win.pageYOffset + scrollOffsetY);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tautoScrolls[this.layersOut].el.scrollTop += scrollOffsetY;\r\n\t\t\t\t\t\t\t\t\tautoScrolls[this.layersOut].el.scrollLeft += scrollOffsetX;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}).bind({layersOut: layersOut}), 24);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlayersOut++;\r\n\t\t\t\t} while (options.bubbleScroll && (currentParent = _getParentAutoScrollElement(currentParent, false)));\r\n\t\t\t}\r\n\t\t}, 30),\r\n\r\n\t\t_clearAutoScrolls = function () {\r\n\t\t\tautoScrolls.forEach(function(autoScroll) {\r\n\t\t\t\tclearInterval(autoScroll.pid);\r\n\t\t\t});\r\n\t\t\tautoScrolls = [];\r\n\t\t},\r\n\r\n\t\t_prepareGroup = function (options) {\r\n\t\t\tfunction toFn(value, pull) {\r\n\t\t\t\treturn function(to, from, dragEl, evt) {\r\n\t\t\t\t\tvar ret;\r\n\r\n\t\t\t\t\tif (value == null || value === false) {\r\n\t\t\t\t\t\tret = false;\r\n\t\t\t\t\t} else if (pull && value === 'clone') {\r\n\t\t\t\t\t\tret = value;\r\n\t\t\t\t\t} else if (typeof value === 'function') {\r\n\t\t\t\t\t\tret = value(to, from, dragEl, evt);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar otherGroup = (pull ? to : from).options.group.name;\r\n\r\n\t\t\t\t\t\tret = (value === true ||\r\n\t\t\t\t\t\t(typeof value === 'string' && value === otherGroup) ||\r\n\t\t\t\t\t\t(value.join && value.indexOf(otherGroup) > -1));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn ret || to.options.group.name === from.options.group.name;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar group = {};\r\n\t\t\tvar originalGroup = options.group;\r\n\r\n\t\t\tif (!originalGroup || typeof originalGroup != 'object') {\r\n\t\t\t\toriginalGroup = {name: originalGroup};\r\n\t\t\t}\r\n\r\n\t\t\tgroup.name = originalGroup.name;\r\n\t\t\tgroup.checkPull = toFn(originalGroup.pull, true);\r\n\t\t\tgroup.checkPut = toFn(originalGroup.put);\r\n\t\t\tgroup.revertClone = originalGroup.revertClone;\r\n\r\n\t\t\toptions.group = group;\r\n\t\t}\r\n\t;\r\n\r\n\t// Detect support a passive mode\r\n\ttry {\r\n\t\twindow.addEventListener('test', null, Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () {\r\n\t\t\t\t// `false`, because everything starts to work incorrectly and instead of d'n'd,\r\n\t\t\t\t// begins the page has scrolled.\r\n\t\t\t\tpassiveMode = false;\r\n\t\t\t\tcaptureMode = {\r\n\t\t\t\t\tcapture: false,\r\n\t\t\t\t\tpassive: passiveMode\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}));\r\n\t} catch (err) {}\r\n\r\n\t/**\r\n\t * @class Sortable\r\n\t * @param {HTMLElement} el\r\n\t * @param {Object} [options]\r\n\t */\r\n\tfunction Sortable(el, options) {\r\n\t\tif (!(el && el.nodeType && el.nodeType === 1)) {\r\n\t\t\tthrow 'Sortable: `el` must be HTMLElement, and not ' + {}.toString.call(el);\r\n\t\t}\r\n\r\n\t\tthis.el = el; // root element\r\n\t\tthis.options = options = _extend({}, options);\r\n\r\n\r\n\t\t// Export instance\r\n\t\tel[expando] = this;\r\n\r\n\t\t// Default options\r\n\t\tvar defaults = {\r\n\t\t\tgroup: null,\r\n\t\t\tsort: true,\r\n\t\t\tdisabled: false,\r\n\t\t\tstore: null,\r\n\t\t\thandle: null,\r\n \t\tscroll: true,\r\n\t\t\tscrollSensitivity: 30,\r\n\t\t\tscrollSpeed: 10,\r\n\t\t\tbubbleScroll: true,\r\n\t\t\tdraggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*',\r\n\t\t\tghostClass: 'sortable-ghost',\r\n\t\t\tchosenClass: 'sortable-chosen',\r\n\t\t\tdragClass: 'sortable-drag',\r\n\t\t\tignore: 'a, img',\r\n\t\t\tfilter: null,\r\n\t\t\tpreventOnFilter: true,\r\n\t\t\tanimation: 0,\r\n\t\t\tsetData: function (dataTransfer, dragEl) {\r\n\t\t\t\tdataTransfer.setData('Text', dragEl.textContent);\r\n\t\t\t},\r\n\t\t\tdropBubble: false,\r\n\t\t\tdragoverBubble: false,\r\n\t\t\tdataIdAttr: 'data-id',\r\n\t\t\tdelay: 0,\r\n\t\t\ttouchStartThreshold: parseInt(window.devicePixelRatio, 10) || 1,\r\n\t\t\tforceFallback: false,\r\n\t\t\tfallbackClass: 'sortable-fallback',\r\n\t\t\tfallbackOnBody: false,\r\n\t\t\tfallbackTolerance: 0,\r\n\t\t\tfallbackOffset: {x: 0, y: 0},\r\n\t\t\tsupportPointer: Sortable.supportPointer !== false\r\n\t\t};\r\n\r\n\r\n\t\t// Set default options\r\n\t\tfor (var name in defaults) {\r\n\t\t\t!(name in options) && (options[name] = defaults[name]);\r\n\t\t}\r\n\r\n\t\t_prepareGroup(options);\r\n\r\n\t\t// Bind all private methods\r\n\t\tfor (var fn in this) {\r\n\t\t\tif (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\r\n\t\t\t\tthis[fn] = this[fn].bind(this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Setup drag mode\r\n\t\tthis.nativeDraggable = options.forceFallback ? false : supportDraggable;\r\n\r\n\t\t// Bind events\r\n\t\t_on(el, 'mousedown', this._onTapStart);\r\n\t\t_on(el, 'touchstart', this._onTapStart);\r\n\t\toptions.supportPointer && _on(el, 'pointerdown', this._onTapStart);\r\n\r\n\t\tif (this.nativeDraggable) {\r\n\t\t\t_on(el, 'dragover', this);\r\n\t\t\t_on(el, 'dragenter', this);\r\n\t\t}\r\n\r\n\t\ttouchDragOverListeners.push(this._onDragOver);\r\n\r\n\t\t// Restore sorting\r\n\t\toptions.store && this.sort(options.store.get(this));\r\n\t}\r\n\r\n\r\n\tSortable.prototype = /** @lends Sortable.prototype */ {\r\n\t\tconstructor: Sortable,\r\n\r\n\t\t_onTapStart: function (/** Event|TouchEvent */evt) {\r\n\t\t\tvar _this = this,\r\n\t\t\t\tel = this.el,\r\n\t\t\t\toptions = this.options,\r\n\t\t\t\tpreventOnFilter = options.preventOnFilter,\r\n\t\t\t\ttype = evt.type,\r\n\t\t\t\ttouch = evt.touches && evt.touches[0],\r\n\t\t\t\ttarget = (touch || evt).target,\r\n\t\t\t\toriginalTarget = evt.target.shadowRoot && (evt.path && evt.path[0]) || target,\r\n\t\t\t\tfilter = options.filter,\r\n\t\t\t\tstartIndex;\r\n\r\n\t\t\t_saveInputCheckedState(el);\r\n\r\n\r\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.\r\n\t\t\tif (dragEl) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\r\n\t\t\t\treturn; // only left button or enabled\r\n\t\t\t}\r\n\r\n\t\t\t// cancel dnd if original target is content editable\r\n\t\t\tif (originalTarget.isContentEditable) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\ttarget = _closest(target, options.draggable, el);\r\n\r\n\t\t\tif (!target) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (lastDownEl === target) {\r\n\t\t\t\t// Ignoring duplicate `down`\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Get the index of the dragged element within its parent\r\n\t\t\tstartIndex = _index(target, options.draggable);\r\n\r\n\t\t\t// Check filter\r\n\t\t\tif (typeof filter === 'function') {\r\n\t\t\t\tif (filter.call(this, evt, target, this)) {\r\n\t\t\t\t\t_dispatchEvent(_this, originalTarget, 'filter', target, el, el, startIndex);\r\n\t\t\t\t\tpreventOnFilter && evt.preventDefault();\r\n\t\t\t\t\treturn; // cancel dnd\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (filter) {\r\n\t\t\t\tfilter = filter.split(',').some(function (criteria) {\r\n\t\t\t\t\tcriteria = _closest(originalTarget, criteria.trim(), el);\r\n\r\n\t\t\t\t\tif (criteria) {\r\n\t\t\t\t\t\t_dispatchEvent(_this, criteria, 'filter', target, el, el, startIndex);\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (filter) {\r\n\t\t\t\t\tpreventOnFilter && evt.preventDefault();\r\n\t\t\t\t\treturn; // cancel dnd\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (options.handle && !_closest(originalTarget, options.handle, el)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Prepare `dragstart`\r\n\t\t\tthis._prepareDragStart(evt, touch, target, startIndex);\r\n\t\t},\r\n\r\n\r\n\t\t_handleAutoScroll: function(evt) {\r\n\t\t\tif (!dragEl || !this.options.scroll || (this.options.supportPointer && evt.type == 'touchmove')) return;\r\n\t\t\tvar\r\n\t\t\t\tx = (evt.touches ? evt.touches[0] : evt).clientX,\r\n\t\t\t\ty = (evt.touches ? evt.touches[0] : evt).clientY,\r\n\r\n\t\t\t\telem = document.elementFromPoint(x, y),\r\n\t\t\t\t_this = this\r\n\t\t\t;\r\n\r\n\r\n\t\t\t// touch does not have native autoscroll, even with DnD enabled\r\n\t\t\tif (!_this.nativeDraggable || evt.touches || (evt.pointerType && evt.pointerType == 'touch')) {\r\n\r\n\t\t\t\t_autoScroll(evt.touches ? evt.touches[0] : evt, _this.options, elem);\r\n\r\n\t\t\t\t// Listener for pointer element change\r\n\t\t\t\tvar ogElemScroller = _getParentAutoScrollElement(elem, true);\r\n\t\t\t\tif (!pointerElemChangedInterval ||\r\n\t\t\t\t\tx != lastPointerElemX ||\r\n\t\t\t\t\ty != lastPointerElemY) {\r\n\r\n\t\t\t\t\tpointerElemChangedInterval && clearInterval(pointerElemChangedInterval);\r\n\t\t\t\t\t// Detect for pointer elem change, emulating native DnD behaviour\r\n\t\t\t\t\tpointerElemChangedInterval = setInterval(function() {\r\n\t\t\t\t\t\tif (!dragEl) return;\r\n\t\t\t\t\t\tvar newElem = _getParentAutoScrollElement(document.elementFromPoint(x, y), true);\r\n\t\t\t\t\t\tif (newElem != ogElemScroller) {\r\n\t\t\t\t\t\t\togElemScroller = newElem;\r\n\t\t\t\t\t\t\t_clearAutoScrolls();\r\n\t\t\t\t\t\t\t_autoScroll(evt.touches ? evt.touches[0] : evt, _this.options, ogElemScroller);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t\tlastPointerElemX = x;\r\n\t\t\t\t\tlastPointerElemY = y;\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// if DnD is enabled, first autoscroll will already scroll, so get parent autoscroll of first autoscroll\r\n\t\t\t\tif (!_this.options.bubbleScroll) return;\r\n\t\t\t\t_autoScroll(evt, _this.options, _getParentAutoScrollElement(elem, false));\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target, /** Number */startIndex) {\r\n\t\t\tvar _this = this,\r\n\t\t\t\tel = _this.el,\r\n\t\t\t\toptions = _this.options,\r\n\t\t\t\townerDocument = el.ownerDocument,\r\n\t\t\t\tdragStartFn;\r\n\r\n\t\t\tif (target && !dragEl && (target.parentNode === el)) {\r\n\t\t\t\ttapEvt = evt;\r\n\r\n\t\t\t\trootEl = el;\r\n\t\t\t\tdragEl = target;\r\n\t\t\t\tparentEl = dragEl.parentNode;\r\n\t\t\t\tnextEl = dragEl.nextSibling;\r\n\t\t\t\tlastDownEl = target;\r\n\t\t\t\tactiveGroup = options.group;\r\n\t\t\t\toldIndex = startIndex;\r\n\r\n\t\t\t\tthis._lastX = (touch || evt).clientX;\r\n\t\t\t\tthis._lastY = (touch || evt).clientY;\r\n\r\n\t\t\t\tdragEl.style['will-change'] = 'all';\r\n\r\n\t\t\t\tdragStartFn = function () {\r\n\t\t\t\t\t// Delayed drag has been triggered\r\n\t\t\t\t\t// we can re-enable the events: touchmove/mousemove\r\n\t\t\t\t\t_this._disableDelayedDrag();\r\n\r\n\t\t\t\t\t// Make the element draggable\r\n\t\t\t\t\tdragEl.draggable = _this.nativeDraggable;\r\n\r\n\t\t\t\t\t// Bind the events: dragstart/dragend\r\n\t\t\t\t\t_this._triggerDragStart(evt, touch);\r\n\r\n\t\t\t\t\t// Drag start event\r\n\t\t\t\t\t_dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, rootEl, oldIndex);\r\n\r\n\t\t\t\t\t// Chosen item\r\n\t\t\t\t\t_toggleClass(dragEl, options.chosenClass, true);\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Disable \"draggable\"\r\n\t\t\t\toptions.ignore.split(',').forEach(function (criteria) {\r\n\t\t\t\t\t_find(dragEl, criteria.trim(), _disableDraggable);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t_on(ownerDocument, 'mouseup', _this._onDrop);\r\n\t\t\t\t_on(ownerDocument, 'touchend', _this._onDrop);\r\n\t\t\t\t_on(ownerDocument, 'touchcancel', _this._onDrop);\r\n\t\t\t\t_on(ownerDocument, 'selectstart', _this);\r\n\t\t\t\toptions.supportPointer && _on(ownerDocument, 'pointercancel', _this._onDrop);\r\n\r\n\t\t\t\tif (options.delay) {\r\n\t\t\t\t\t// If the user moves the pointer or let go the click or touch\r\n\t\t\t\t\t// before the delay has been reached:\r\n\t\t\t\t\t// disable the delayed drag\r\n\t\t\t\t\t_on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\r\n\t\t\t\t\t_on(ownerDocument, 'touchend', _this._disableDelayedDrag);\r\n\t\t\t\t\t_on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\r\n\t\t\t\t\t_on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\r\n\t\t\t\t\t_on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\r\n\t\t\t\t\toptions.supportPointer && _on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\r\n\r\n\t\t\t\t\t_this._dragStartTimer = setTimeout(dragStartFn.bind(_this), options.delay);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdragStartFn();\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/e) {\r\n\t\t\tvar touch = e.touches ? e.touches[0] : e;\r\n\t\t\tif (min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY))\r\n\t\t\t\t\t>= this.options.touchStartThreshold\r\n\t\t\t) {\r\n\t\t\t\tthis._disableDelayedDrag();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_disableDelayedDrag: function () {\r\n\t\t\tvar ownerDocument = this.el.ownerDocument;\r\n\r\n\t\t\tclearTimeout(this._dragStartTimer);\r\n\t\t\t_off(ownerDocument, 'mouseup', this._disableDelayedDrag);\r\n\t\t\t_off(ownerDocument, 'touchend', this._disableDelayedDrag);\r\n\t\t\t_off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\r\n\t\t\t_off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\r\n\t\t\t_off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\r\n\t\t\t_off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\r\n\t\t},\r\n\r\n\t\t_triggerDragStart: function (/** Event */evt, /** Touch */touch) {\r\n\t\t\tvar touchType = evt && (evt.pointerType == 'touch' || evt.type == 'pointerDown' || evt.type == 'pointerdown')\r\n\t\t\ttouch = touch || (touchType ? evt : null);\r\n\r\n\t\t\tif (touch) {\r\n\t\t\t\t// Touch device support\r\n\t\t\t\ttapEvt = {\r\n\t\t\t\t\ttarget: dragEl,\r\n\t\t\t\t\tclientX: touch.clientX,\r\n\t\t\t\t\tclientY: touch.clientY\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis._onDragStart(tapEvt, 'touch');\r\n\t\t\t}\r\n\t\t\telse if (!this.nativeDraggable) {\r\n\t\t\t\tthis._onDragStart(tapEvt, true);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t_on(dragEl, 'dragend', this);\r\n\t\t\t\t_on(rootEl, 'dragstart', this._onDragStart);\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tif (document.selection) {\r\n\t\t\t\t\t// Timeout neccessary for IE9\r\n\t\t\t\t\t_nextTick(function () {\r\n\t\t\t\t\t\tdocument.selection.empty();\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\t}\r\n\t\t\t} catch (err) {\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_dragStarted: function () {\r\n\t\t\tif (rootEl && dragEl) {\r\n\t\t\t\t_on(document, 'drag', this._handleAutoScroll);\r\n\t\t\t\tvar options = this.options;\r\n\r\n\t\t\t\t// Apply effect\r\n\t\t\t\t_toggleClass(dragEl, options.ghostClass, true);\r\n\t\t\t\t_toggleClass(dragEl, options.dragClass, false);\r\n\r\n\t\t\t\tSortable.active = this;\r\n\r\n\t\t\t\t// Drag start event\r\n\t\t\t\t_dispatchEvent(this, rootEl, 'start', dragEl, rootEl, rootEl, oldIndex);\r\n\t\t\t} else {\r\n\t\t\t\tthis._nulling();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_emulateDragOver: function () {\r\n\t\t\tif (touchEvt) {\r\n\t\t\t\tif (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._lastX = touchEvt.clientX;\r\n\t\t\t\tthis._lastY = touchEvt.clientY;\r\n\r\n\t\t\t\tif (!supportCssPointerEvents) {\r\n\t\t\t\t\t_css(ghostEl, 'display', 'none');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\r\n\t\t\t\tvar parent = target;\r\n\r\n\t\t\t\twhile (target && target.shadowRoot) {\r\n\t\t\t\t\ttarget = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\r\n\t\t\t\t\tparent = target;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (parent) {\r\n\t\t\t\t\tdo {\r\n\t\t\t\t\t\tif (parent[expando]) {\r\n\t\t\t\t\t\t\tvar i = touchDragOverListeners.length;\r\n\t\t\t\t\t\t\twhile (i--) {\r\n\t\t\t\t\t\t\t\ttouchDragOverListeners[i]({\r\n\t\t\t\t\t\t\t\t\tclientX: touchEvt.clientX,\r\n\t\t\t\t\t\t\t\t\tclientY: touchEvt.clientY,\r\n\t\t\t\t\t\t\t\t\ttarget: target,\r\n\t\t\t\t\t\t\t\t\trootEl: parent\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (!this.options.dragoverBubble) {\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttarget = parent; // store last element\r\n\t\t\t\t\t}\r\n\t\t\t\t\t/* jshint boss:true */\r\n\t\t\t\t\twhile (parent = parent.parentNode);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!supportCssPointerEvents) {\r\n\t\t\t\t\t_css(ghostEl, 'display', '');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_onTouchMove: function (/**TouchEvent*/evt) {\r\n\t\t\tif (tapEvt) {\r\n\t\t\t\tvar\toptions = this.options,\r\n\t\t\t\t\tfallbackTolerance = options.fallbackTolerance,\r\n\t\t\t\t\tfallbackOffset = options.fallbackOffset,\r\n\t\t\t\t\ttouch = evt.touches ? evt.touches[0] : evt,\r\n\t\t\t\t\tdx = (touch.clientX - tapEvt.clientX) + fallbackOffset.x,\r\n\t\t\t\t\tdy = (touch.clientY - tapEvt.clientY) + fallbackOffset.y,\r\n\t\t\t\t\ttranslate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)';\r\n\r\n\t\t\t\t// only set the status to dragging, when we are actually dragging\r\n\t\t\t\tif (!Sortable.active) {\r\n\t\t\t\t\tif (fallbackTolerance &&\r\n\t\t\t\t\t\tmin(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) < fallbackTolerance\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._dragStarted();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// as well as creating the ghost element on the document body\r\n\t\t\t\tthis._appendGhost();\r\n\r\n\t\t\t\tmoved = true;\r\n\t\t\t\ttouchEvt = touch;\r\n\r\n\t\t\t\t_css(ghostEl, 'webkitTransform', translate3d);\r\n\t\t\t\t_css(ghostEl, 'mozTransform', translate3d);\r\n\t\t\t\t_css(ghostEl, 'msTransform', translate3d);\r\n\t\t\t\t_css(ghostEl, 'transform', translate3d);\r\n\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_appendGhost: function () {\r\n\t\t\tif (!ghostEl) {\r\n\t\t\t\tvar rect = dragEl.getBoundingClientRect(),\r\n\t\t\t\t\tcss = _css(dragEl),\r\n\t\t\t\t\toptions = this.options,\r\n\t\t\t\t\tghostRect;\r\n\r\n\t\t\t\tghostEl = dragEl.cloneNode(true);\r\n\r\n\t\t\t\t_toggleClass(ghostEl, options.ghostClass, false);\r\n\t\t\t\t_toggleClass(ghostEl, options.fallbackClass, true);\r\n\t\t\t\t_toggleClass(ghostEl, options.dragClass, true);\r\n\r\n\t\t\t\t_css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10));\r\n\t\t\t\t_css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10));\r\n\t\t\t\t_css(ghostEl, 'width', rect.width);\r\n\t\t\t\t_css(ghostEl, 'height', rect.height);\r\n\t\t\t\t_css(ghostEl, 'opacity', '0.8');\r\n\t\t\t\t_css(ghostEl, 'position', 'fixed');\r\n\t\t\t\t_css(ghostEl, 'zIndex', '100000');\r\n\t\t\t\t_css(ghostEl, 'pointerEvents', 'none');\r\n\r\n\t\t\t\toptions.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl);\r\n\r\n\t\t\t\t// Fixing dimensions.\r\n\t\t\t\tghostRect = ghostEl.getBoundingClientRect();\r\n\t\t\t\t_css(ghostEl, 'width', rect.width * 2 - ghostRect.width);\r\n\t\t\t\t_css(ghostEl, 'height', rect.height * 2 - ghostRect.height);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_onDragStart: function (/**Event*/evt, /**boolean*/useFallback) {\r\n\t\t\tvar _this = this;\r\n\t\t\tvar dataTransfer = evt.dataTransfer;\r\n\t\t\tvar options = _this.options;\r\n\r\n\t\t\t_this._offUpEvents();\r\n\r\n\t\t\tif (activeGroup.checkPull(_this, _this, dragEl, evt)) {\r\n\t\t\t\tcloneEl = _clone(dragEl);\r\n\r\n\t\t\t\tcloneEl.draggable = false;\r\n\t\t\t\tcloneEl.style['will-change'] = '';\r\n\r\n\t\t\t\t_css(cloneEl, 'display', 'none');\r\n\t\t\t\t_toggleClass(cloneEl, _this.options.chosenClass, false);\r\n\r\n\t\t\t\t// #1143: IFrame support workaround\r\n\t\t\t\t_this._cloneId = _nextTick(function () {\r\n\t\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\r\n\t\t\t\t\t_dispatchEvent(_this, rootEl, 'clone', dragEl);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t_toggleClass(dragEl, options.dragClass, true);\r\n\r\n\t\t\tif (useFallback) {\r\n\t\t\t\tif (useFallback === 'touch') {\r\n\t\t\t\t\t// Bind touch events\r\n\t\t\t\t\t_on(document, 'touchmove', _this._onTouchMove);\r\n\t\t\t\t\t// onTouchMove before handleAutoScroll in this case, because onTouchMove sets touchEvt\r\n\t\t\t\t\t_on(document, 'touchmove', _this._handleAutoScroll);\r\n\t\t\t\t\t_on(document, 'touchend', _this._onDrop);\r\n\t\t\t\t\t_on(document, 'touchcancel', _this._onDrop);\r\n\r\n\t\t\t\t\tif (options.supportPointer) {\r\n\t\t\t\t\t\t_on(document, 'pointermove', _this._handleAutoScroll);\r\n\t\t\t\t\t\t_on(document, 'pointermove', _this._onTouchMove);\r\n\t\t\t\t\t\t_on(document, 'pointerup', _this._onDrop);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Old brwoser\r\n\t\t\t\t\t_on(document, 'mousemove', _this._handleAutoScroll);\r\n\t\t\t\t\t_on(document, 'mousemove', _this._onTouchMove);\r\n\t\t\t\t\t_on(document, 'mouseup', _this._onDrop);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_this._loopId = setInterval(_this._emulateDragOver, 50);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (dataTransfer) {\r\n\t\t\t\t\tdataTransfer.effectAllowed = 'move';\r\n\t\t\t\t\toptions.setData && options.setData.call(_this, dataTransfer, dragEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_on(document, 'drop', _this);\r\n\r\n\t\t\t\t// #1143: Бывает элемент с IFrame внутри блокирует `drop`,\r\n\t\t\t\t// поэтому если вызвался `mouseover`, значит надо отменять весь d'n'd.\r\n\t\t\t\t// Breaking Chrome 62+\r\n\t\t\t\t// _on(document, 'mouseover', _this);\r\n\r\n\t\t\t\t_this._dragStartId = _nextTick(_this._dragStarted);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_onDragOver: function (/**Event*/evt) {\r\n\t\t\tvar el = this.el,\r\n\t\t\t\ttarget,\r\n\t\t\t\tdragRect,\r\n\t\t\t\ttargetRect,\r\n\t\t\t\trevert,\r\n\t\t\t\toptions = this.options,\r\n\t\t\t\tgroup = options.group,\r\n\t\t\t\tactiveSortable = Sortable.active,\r\n\t\t\t\tisOwner = (activeGroup === group),\r\n\t\t\t\tisMovingBetweenSortable = false,\r\n\t\t\t\tcanSort = options.sort;\r\n\r\n\t\t\tif (evt.preventDefault !== void 0) {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\t!options.dragoverBubble && evt.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tif (dragEl.animated) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tmoved = true;\r\n\r\n\t\t\ttarget = evt.target == el ? evt.target : _closest(evt.target, options.draggable, el);\r\n\r\n\t\t\tif (target === el) return;\r\n\r\n\t\t\tif (activeSortable && !options.disabled &&\r\n\t\t\t\t(isOwner\r\n\t\t\t\t\t? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\r\n\t\t\t\t\t: (\r\n\t\t\t\t\t\tputSortable === this ||\r\n\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t(activeSortable.lastPullMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) &&\r\n\t\t\t\t\t\t\tgroup.checkPut(this, activeSortable, dragEl, evt)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t) &&\r\n\t\t\t\t(evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback\r\n\t\t\t) {\r\n\t\t\t\tif (_silent) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdragRect = dragEl.getBoundingClientRect();\r\n\r\n\t\t\t\tif (putSortable !== this) {\r\n\t\t\t\t\tputSortable = this;\r\n\t\t\t\t\tisMovingBetweenSortable = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (revert) {\r\n\t\t\t\t\t_cloneHide(activeSortable, true);\r\n\t\t\t\t\tparentEl = rootEl; // actualization\r\n\r\n\t\t\t\t\tif (cloneEl || nextEl) {\r\n\t\t\t\t\t\trootEl.insertBefore(dragEl, cloneEl || nextEl);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!canSort) {\r\n\t\t\t\t\t\trootEl.appendChild(dragEl);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ((el.children.length === 0) || (el.children[0] === ghostEl) ||\r\n\t\t\t\t\t(el === evt.target) && (_ghostIsLast(el, evt))\r\n\t\t\t\t) {\r\n\t\t\t\t\t//assign target only if condition is true\r\n\t\t\t\t\tif (el.children.length !== 0 && el.children[0] !== ghostEl && el === evt.target) {\r\n\t\t\t\t\t\ttarget = el.lastElementChild;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\tif (target.animated) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttargetRect = target.getBoundingClientRect();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_cloneHide(activeSortable, isOwner);\r\n\r\n\t\t\t\t\tif (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt) !== false) {\r\n\t\t\t\t\t\tif (!dragEl.contains(el)) {\r\n\t\t\t\t\t\t\tel.appendChild(dragEl);\r\n\t\t\t\t\t\t\tparentEl = el; // actualization\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis._animate(dragRect, dragEl);\r\n\t\t\t\t\t\ttarget && this._animate(targetRect, target);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) {\r\n\t\t\t\t\tif (lastEl !== target) {\r\n\t\t\t\t\t\tlastEl = target;\r\n\t\t\t\t\t\tlastCSS = _css(target);\r\n\t\t\t\t\t\tlastParentCSS = _css(target.parentNode);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttargetRect = target.getBoundingClientRect();\r\n\r\n\t\t\t\t\tvar width = targetRect.right - targetRect.left,\r\n\t\t\t\t\t\theight = targetRect.bottom - targetRect.top,\r\n\t\t\t\t\t\tfloating = R_FLOAT.test(lastCSS.cssFloat + lastCSS.display)\r\n\t\t\t\t\t\t\t|| (lastParentCSS.display == 'flex' && lastParentCSS['flex-direction'].indexOf('row') === 0),\r\n\t\t\t\t\t\tisWide = (target.offsetWidth > dragEl.offsetWidth),\r\n\t\t\t\t\t\tisLong = (target.offsetHeight > dragEl.offsetHeight),\r\n\t\t\t\t\t\thalfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5,\r\n\t\t\t\t\t\tnextSibling = target.nextElementSibling,\r\n\t\t\t\t\t\tafter = false\r\n\t\t\t\t\t;\r\n\r\n\t\t\t\t\tif (floating) {\r\n\t\t\t\t\t\tvar elTop = dragEl.offsetTop,\r\n\t\t\t\t\t\t\ttgTop = target.offsetTop;\r\n\r\n\t\t\t\t\t\tif (elTop === tgTop) {\r\n\t\t\t\t\t\t\tafter = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (target.previousElementSibling === dragEl || dragEl.previousElementSibling === target) {\r\n\t\t\t\t\t\t\tafter = (evt.clientY - targetRect.top) / height > 0.5;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tafter = tgTop > elTop;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if (!isMovingBetweenSortable) {\r\n\t\t\t\t\t\tafter = (nextSibling !== dragEl) && !isLong || halfway && isLong;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\r\n\r\n\t\t\t\t\tif (moveVector !== false) {\r\n\t\t\t\t\t\tif (moveVector === 1 || moveVector === -1) {\r\n\t\t\t\t\t\t\tafter = (moveVector === 1);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_silent = true;\r\n\t\t\t\t\t\tsetTimeout(_unsilent, 30);\r\n\r\n\t\t\t\t\t\t_cloneHide(activeSortable, isOwner);\r\n\r\n\t\t\t\t\t\tif (!dragEl.contains(el)) {\r\n\t\t\t\t\t\t\tif (after && !nextSibling) {\r\n\t\t\t\t\t\t\t\tel.appendChild(dragEl);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttarget.parentNode.insertBefore(dragEl, after ? nextSibling : target);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tparentEl = dragEl.parentNode; // actualization\r\n\r\n\t\t\t\t\t\tthis._animate(dragRect, dragEl);\r\n\t\t\t\t\t\tthis._animate(targetRect, target);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_animate: function (prevRect, target) {\r\n\t\t\tvar ms = this.options.animation;\r\n\r\n\t\t\tif (ms) {\r\n\t\t\t\tvar currentRect = target.getBoundingClientRect();\r\n\r\n\t\t\t\tif (prevRect.nodeType === 1) {\r\n\t\t\t\t\tprevRect = prevRect.getBoundingClientRect();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_css(target, 'transition', 'none');\r\n\t\t\t\t_css(target, 'transform', 'translate3d('\r\n\t\t\t\t\t+ (prevRect.left - currentRect.left) + 'px,'\r\n\t\t\t\t\t+ (prevRect.top - currentRect.top) + 'px,0)'\r\n\t\t\t\t);\r\n\r\n\t\t\t\tforRepaintDummy = target.offsetWidth; // repaint\r\n\r\n\t\t\t\t_css(target, 'transition', 'all ' + ms + 'ms');\r\n\t\t\t\t_css(target, 'transform', 'translate3d(0,0,0)');\r\n\r\n\t\t\t\tclearTimeout(target.animated);\r\n\t\t\t\ttarget.animated = setTimeout(function () {\r\n\t\t\t\t\t_css(target, 'transition', '');\r\n\t\t\t\t\t_css(target, 'transform', '');\r\n\t\t\t\t\ttarget.animated = false;\r\n\t\t\t\t}, ms);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_offUpEvents: function () {\r\n\t\t\tvar ownerDocument = this.el.ownerDocument;\r\n\r\n\t\t\t_off(document, 'touchmove', this._handleAutoScroll);\r\n\t\t\t_off(document, 'pointermove', this._handleAutoScroll);\r\n\t\t\t_off(document, 'mousemove', this._handleAutoScroll);\r\n\t\t\t_off(document, 'touchmove', this._onTouchMove);\r\n\t\t\t_off(document, 'pointermove', this._onTouchMove);\r\n\t\t\t_off(ownerDocument, 'mouseup', this._onDrop);\r\n\t\t\t_off(ownerDocument, 'touchend', this._onDrop);\r\n\t\t\t_off(ownerDocument, 'pointerup', this._onDrop);\r\n\t\t\t_off(ownerDocument, 'touchcancel', this._onDrop);\r\n\t\t\t_off(ownerDocument, 'pointercancel', this._onDrop);\r\n\t\t\t_off(ownerDocument, 'selectstart', this);\r\n\t\t},\r\n\r\n\t\t_onDrop: function (/**Event*/evt) {\r\n\t\t\tvar el = this.el,\r\n\t\t\t\toptions = this.options;\r\n\r\n\t\t\tclearInterval(this._loopId);\r\n\r\n\t\t\tclearInterval(pointerElemChangedInterval);\r\n\t\t\t_clearAutoScrolls();\r\n\t\t\t_cancelThrottle();\r\n\r\n\t\t\tclearTimeout(this._dragStartTimer);\r\n\r\n\t\t\t_cancelNextTick(this._cloneId);\r\n\t\t\t_cancelNextTick(this._dragStartId);\r\n\r\n\t\t\t// Unbind events\r\n\t\t\t_off(document, 'mouseover', this);\r\n\t\t\t_off(document, 'mousemove', this._onTouchMove);\r\n\r\n\r\n\t\t\tif (this.nativeDraggable) {\r\n\t\t\t\t_off(document, 'drop', this);\r\n\t\t\t\t_off(el, 'dragstart', this._onDragStart);\r\n\t\t\t\t_off(document, 'drag', this._handleAutoScroll);\r\n\t\t\t}\r\n\r\n\t\t\tthis._offUpEvents();\r\n\r\n\t\t\tif (evt) {\r\n\t\t\t\tif (moved) {\r\n\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\t!options.dropBubble && evt.stopPropagation();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\r\n\r\n\t\t\t\tif (rootEl === parentEl || Sortable.active.lastPullMode !== 'clone') {\r\n\t\t\t\t\t// Remove clone\r\n\t\t\t\t\tcloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dragEl) {\r\n\t\t\t\t\tif (this.nativeDraggable) {\r\n\t\t\t\t\t\t_off(dragEl, 'dragend', this);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_disableDraggable(dragEl);\r\n\t\t\t\t\tdragEl.style['will-change'] = '';\r\n\r\n\t\t\t\t\t// Remove class's\r\n\t\t\t\t\t_toggleClass(dragEl, this.options.ghostClass, false);\r\n\t\t\t\t\t_toggleClass(dragEl, this.options.chosenClass, false);\r\n\r\n\t\t\t\t\t// Drag stop event\r\n\t\t\t\t\t_dispatchEvent(this, rootEl, 'unchoose', dragEl, parentEl, rootEl, oldIndex, null, evt);\r\n\r\n\t\t\t\t\tif (rootEl !== parentEl) {\r\n\t\t\t\t\t\tnewIndex = _index(dragEl, options.draggable);\r\n\r\n\t\t\t\t\t\tif (newIndex >= 0) {\r\n\t\t\t\t\t\t\t// Add event\r\n\t\t\t\t\t\t\t_dispatchEvent(null, parentEl, 'add', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\r\n\r\n\t\t\t\t\t\t\t// Remove event\r\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'remove', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\r\n\r\n\t\t\t\t\t\t\t// drag from one list and drop into another\r\n\t\t\t\t\t\t\t_dispatchEvent(null, parentEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\r\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (dragEl.nextSibling !== nextEl) {\r\n\t\t\t\t\t\t\t// Get the index of the dragged element within its parent\r\n\t\t\t\t\t\t\tnewIndex = _index(dragEl, options.draggable);\r\n\r\n\t\t\t\t\t\t\tif (newIndex >= 0) {\r\n\t\t\t\t\t\t\t\t// drag & drop within the same list\r\n\t\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'update', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\r\n\t\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (Sortable.active) {\r\n\t\t\t\t\t\t/* jshint eqnull:true */\r\n\t\t\t\t\t\tif (newIndex == null || newIndex === -1) {\r\n\t\t\t\t\t\t\tnewIndex = oldIndex;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'end', dragEl, parentEl, rootEl, oldIndex, newIndex, evt);\r\n\r\n\t\t\t\t\t\t// Save sorting\r\n\t\t\t\t\t\tthis.save();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis._nulling();\r\n\t\t},\r\n\r\n\t\t_nulling: function() {\r\n\t\t\trootEl =\r\n\t\t\tdragEl =\r\n\t\t\tparentEl =\r\n\t\t\tghostEl =\r\n\t\t\tnextEl =\r\n\t\t\tcloneEl =\r\n\t\t\tlastDownEl =\r\n\r\n\t\t\tscrollEl =\r\n\t\t\tscrollParentEl =\r\n\r\n\t\t\ttapEvt =\r\n\t\t\ttouchEvt =\r\n\r\n\t\t\tmoved =\r\n\t\t\tnewIndex =\r\n\r\n\t\t\tlastEl =\r\n\t\t\tlastCSS =\r\n\r\n\t\t\tputSortable =\r\n\t\t\tactiveGroup =\r\n\t\t\tSortable.active = null;\r\n\r\n\t\t\tsavedInputChecked.forEach(function (el) {\r\n\t\t\t\tel.checked = true;\r\n\t\t\t});\r\n\t\t\tsavedInputChecked.length = 0;\r\n\t\t},\r\n\r\n\t\thandleEvent: function (/**Event*/evt) {\r\n\t\t\tswitch (evt.type) {\r\n\t\t\t\tcase 'drop':\r\n\t\t\t\tcase 'dragend':\r\n\t\t\t\t\tthis._onDrop(evt);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'dragover':\r\n\t\t\t\tcase 'dragenter':\r\n\t\t\t\t\tif (dragEl) {\r\n\t\t\t\t\t\tthis._onDragOver(evt);\r\n\t\t\t\t\t\t_globalDragOver(evt);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'mouseover':\r\n\t\t\t\t\tthis._onDrop(evt);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase 'selectstart':\r\n\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t/**\r\n\t\t * Serializes the item into an array of string.\r\n\t\t * @returns {String[]}\r\n\t\t */\r\n\t\ttoArray: function () {\r\n\t\t\tvar order = [],\r\n\t\t\t\tel,\r\n\t\t\t\tchildren = this.el.children,\r\n\t\t\t\ti = 0,\r\n\t\t\t\tn = children.length,\r\n\t\t\t\toptions = this.options;\r\n\r\n\t\t\tfor (; i < n; i++) {\r\n\t\t\t\tel = children[i];\r\n\t\t\t\tif (_closest(el, options.draggable, this.el)) {\r\n\t\t\t\t\torder.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn order;\r\n\t\t},\r\n\r\n\r\n\t\t/**\r\n\t\t * Sorts the elements according to the array.\r\n\t\t * @param {String[]} order order of the items\r\n\t\t */\r\n\t\tsort: function (order) {\r\n\t\t\tvar items = {}, rootEl = this.el;\r\n\r\n\t\t\tthis.toArray().forEach(function (id, i) {\r\n\t\t\t\tvar el = rootEl.children[i];\r\n\r\n\t\t\t\tif (_closest(el, this.options.draggable, rootEl)) {\r\n\t\t\t\t\titems[id] = el;\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\r\n\t\t\torder.forEach(function (id) {\r\n\t\t\t\tif (items[id]) {\r\n\t\t\t\t\trootEl.removeChild(items[id]);\r\n\t\t\t\t\trootEl.appendChild(items[id]);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\r\n\r\n\t\t/**\r\n\t\t * Save the current sorting\r\n\t\t */\r\n\t\tsave: function () {\r\n\t\t\tvar store = this.options.store;\r\n\t\t\tstore && store.set(this);\r\n\t\t},\r\n\r\n\r\n\t\t/**\r\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.\r\n\t\t * @param {HTMLElement} el\r\n\t\t * @param {String} [selector] default: `options.draggable`\r\n\t\t * @returns {HTMLElement|null}\r\n\t\t */\r\n\t\tclosest: function (el, selector) {\r\n\t\t\treturn _closest(el, selector || this.options.draggable, this.el);\r\n\t\t},\r\n\r\n\r\n\t\t/**\r\n\t\t * Set/get option\r\n\t\t * @param {string} name\r\n\t\t * @param {*} [value]\r\n\t\t * @returns {*}\r\n\t\t */\r\n\t\toption: function (name, value) {\r\n\t\t\tvar options = this.options;\r\n\r\n\t\t\tif (value === void 0) {\r\n\t\t\t\treturn options[name];\r\n\t\t\t} else {\r\n\t\t\t\toptions[name] = value;\r\n\r\n\t\t\t\tif (name === 'group') {\r\n\t\t\t\t\t_prepareGroup(options);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t/**\r\n\t\t * Destroy\r\n\t\t */\r\n\t\tdestroy: function () {\r\n\t\t\tvar el = this.el;\r\n\r\n\t\t\tel[expando] = null;\r\n\r\n\t\t\t_off(el, 'mousedown', this._onTapStart);\r\n\t\t\t_off(el, 'touchstart', this._onTapStart);\r\n\t\t\t_off(el, 'pointerdown', this._onTapStart);\r\n\r\n\t\t\tif (this.nativeDraggable) {\r\n\t\t\t\t_off(el, 'dragover', this);\r\n\t\t\t\t_off(el, 'dragenter', this);\r\n\t\t\t}\r\n\r\n\t\t\t// Remove draggable attributes\r\n\t\t\tArray.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\r\n\t\t\t\tel.removeAttribute('draggable');\r\n\t\t\t});\r\n\r\n\t\t\ttouchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1);\r\n\r\n\t\t\tthis._onDrop();\r\n\r\n\t\t\tthis.el = el = null;\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tfunction _cloneHide(sortable, state) {\r\n\t\tif (sortable.lastPullMode !== 'clone') {\r\n\t\t\tstate = true;\r\n\t\t}\r\n\r\n\t\tif (cloneEl && (cloneEl.state !== state)) {\r\n\t\t\t_css(cloneEl, 'display', state ? 'none' : '');\r\n\r\n\t\t\tif (!state) {\r\n\t\t\t\tif (cloneEl.state) {\r\n\t\t\t\t\tif (sortable.options.group.revertClone) {\r\n\t\t\t\t\t\trootEl.insertBefore(cloneEl, nextEl);\r\n\t\t\t\t\t\tsortable._animate(dragEl, cloneEl);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcloneEl.state = state;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) {\r\n\t\tif (el) {\r\n\t\t\tctx = ctx || document;\r\n\r\n\t\t\tdo {\r\n\t\t\t\tif ((selector === '>*' && el.parentNode === ctx) || _matches(el, selector)) {\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t\t/* jshint boss:true */\r\n\t\t\t} while (el = _getParentOrHost(el));\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tfunction _getParentOrHost(el) {\r\n\t\treturn (el.host && el !== document && el.host.nodeType)\r\n\t\t\t? el.host\r\n\t\t\t: el.parentNode;\r\n\t}\r\n\r\n\r\n\tfunction _globalDragOver(/**Event*/evt) {\r\n\t\tif (evt.dataTransfer) {\r\n\t\t\tevt.dataTransfer.dropEffect = 'move';\r\n\t\t}\r\n\t\tevt.preventDefault();\r\n\t}\r\n\r\n\r\n\tfunction _on(el, event, fn) {\r\n\t\tel.addEventListener(event, fn, captureMode);\r\n\t}\r\n\r\n\r\n\tfunction _off(el, event, fn) {\r\n\t\tel.removeEventListener(event, fn, captureMode);\r\n\t}\r\n\r\n\r\n\tfunction _toggleClass(el, name, state) {\r\n\t\tif (el) {\r\n\t\t\tif (el.classList) {\r\n\t\t\t\tel.classList[state ? 'add' : 'remove'](name);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvar className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\r\n\t\t\t\tel.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction _css(el, prop, val) {\r\n\t\tvar style = el && el.style;\r\n\r\n\t\tif (style) {\r\n\t\t\tif (val === void 0) {\r\n\t\t\t\tif (document.defaultView && document.defaultView.getComputedStyle) {\r\n\t\t\t\t\tval = document.defaultView.getComputedStyle(el, '');\r\n\t\t\t\t}\r\n\t\t\t\telse if (el.currentStyle) {\r\n\t\t\t\t\tval = el.currentStyle;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn prop === void 0 ? val : val[prop];\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (!(prop in style)) {\r\n\t\t\t\t\tprop = '-webkit-' + prop;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstyle[prop] = val + (typeof val === 'string' ? '' : 'px');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction _find(ctx, tagName, iterator) {\r\n\t\tif (ctx) {\r\n\t\t\tvar list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;\r\n\r\n\t\t\tif (iterator) {\r\n\t\t\t\tfor (; i < n; i++) {\r\n\t\t\t\t\titerator(list[i], i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn list;\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t}\r\n\r\n\r\n\r\n\tfunction _dispatchEvent(sortable, rootEl, name, targetEl, toEl, fromEl, startIndex, newIndex, originalEvt) {\r\n\t\tsortable = (sortable || rootEl[expando]);\r\n\r\n\t\tvar evt = document.createEvent('Event'),\r\n\t\t\toptions = sortable.options,\r\n\t\t\tonName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\r\n\r\n\t\tevt.initEvent(name, true, true);\r\n\r\n\t\tevt.to = toEl || rootEl;\r\n\t\tevt.from = fromEl || rootEl;\r\n\t\tevt.item = targetEl || rootEl;\r\n\t\tevt.clone = cloneEl;\r\n\r\n\t\tevt.oldIndex = startIndex;\r\n\t\tevt.newIndex = newIndex;\r\n\r\n\t\tevt.originalEvent = originalEvt;\r\n\r\n\t\trootEl.dispatchEvent(evt);\r\n\r\n\t\tif (options[onName]) {\r\n\t\t\toptions[onName].call(sortable, evt);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt, willInsertAfter) {\r\n\t\tvar evt,\r\n\t\t\tsortable = fromEl[expando],\r\n\t\t\tonMoveFn = sortable.options.onMove,\r\n\t\t\tretVal;\r\n\r\n\t\tevt = document.createEvent('Event');\r\n\t\tevt.initEvent('move', true, true);\r\n\r\n\t\tevt.to = toEl;\r\n\t\tevt.from = fromEl;\r\n\t\tevt.dragged = dragEl;\r\n\t\tevt.draggedRect = dragRect;\r\n\t\tevt.related = targetEl || toEl;\r\n\t\tevt.relatedRect = targetRect || toEl.getBoundingClientRect();\r\n\t\tevt.willInsertAfter = willInsertAfter;\r\n\r\n\t\tevt.originalEvent = originalEvt;\r\n\r\n\t\tfromEl.dispatchEvent(evt);\r\n\r\n\t\tif (onMoveFn) {\r\n\t\t\tretVal = onMoveFn.call(sortable, evt, originalEvt);\r\n\t\t}\r\n\r\n\t\treturn retVal;\r\n\t}\r\n\r\n\r\n\tfunction _disableDraggable(el) {\r\n\t\tel.draggable = false;\r\n\t}\r\n\r\n\r\n\tfunction _unsilent() {\r\n\t\t_silent = false;\r\n\t}\r\n\r\n\r\n\t/** @returns {HTMLElement|false} */\r\n\tfunction _ghostIsLast(el, evt) {\r\n\t\tvar lastEl = el.lastElementChild,\r\n\t\t\trect = lastEl.getBoundingClientRect();\r\n\r\n\t\t// 5 — min delta\r\n\t\t// abs — нельзя добавлять, а то глюки при наведении сверху\r\n\t\treturn (evt.clientY - (rect.top + rect.height) > 5) ||\r\n\t\t\t(evt.clientX - (rect.left + rect.width) > 5);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Generate id\r\n\t * @param {HTMLElement} el\r\n\t * @returns {String}\r\n\t * @private\r\n\t */\r\n\tfunction _generateId(el) {\r\n\t\tvar str = el.tagName + el.className + el.src + el.href + el.textContent,\r\n\t\t\ti = str.length,\r\n\t\t\tsum = 0;\r\n\r\n\t\twhile (i--) {\r\n\t\t\tsum += str.charCodeAt(i);\r\n\t\t}\r\n\r\n\t\treturn sum.toString(36);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the index of an element within its parent for a selected set of\r\n\t * elements\r\n\t * @param {HTMLElement} el\r\n\t * @param {selector} selector\r\n\t * @return {number}\r\n\t */\r\n\tfunction _index(el, selector) {\r\n\t\tvar index = 0;\r\n\r\n\t\tif (!el || !el.parentNode) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\twhile (el && (el = el.previousElementSibling)) {\r\n\t\t\tif ((el.nodeName.toUpperCase() !== 'TEMPLATE') && (selector === '>*' || _matches(el, selector))) {\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\tfunction _matches(/**HTMLElement*/el, /**String*/selector) {\r\n\t\tif (el) {\r\n\t\t\ttry {\r\n\t\t\t\tif (el.matches) {\r\n\t\t\t\t\treturn el.matches(selector);\r\n\t\t\t\t} else if (el.msMatchesSelector) {\r\n\t\t\t\t\treturn el.msMatchesSelector(selector);\r\n\t\t\t\t}\r\n\t\t\t} catch(_) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar _throttleTimeout;\r\n\tfunction _throttle(callback, ms) {\r\n\t\treturn function () {\r\n\t\t\tif (!_throttleTimeout) {\r\n\t\t\t\tvar args = arguments,\r\n\t\t\t\t\t_this = this\r\n\t\t\t\t;\r\n\r\n\t\t\t\t_throttleTimeout = setTimeout(function () {\r\n\t\t\t\t\tif (args.length === 1) {\r\n\t\t\t\t\t\tcallback.call(_this, args[0]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcallback.apply(_this, args);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_throttleTimeout = void 0;\r\n\t\t\t\t}, ms);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tfunction _cancelThrottle() {\r\n\t\tclearTimeout(_throttleTimeout);\r\n\t\t_throttleTimeout = void 0;\r\n\t}\r\n\r\n\tfunction _extend(dst, src) {\r\n\t\tif (dst && src) {\r\n\t\t\tfor (var key in src) {\r\n\t\t\t\tif (src.hasOwnProperty(key)) {\r\n\t\t\t\t\tdst[key] = src[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn dst;\r\n\t}\r\n\r\n\tfunction _clone(el) {\r\n\t\tif (Polymer && Polymer.dom) {\r\n\t\t\treturn Polymer.dom(el).cloneNode(true);\r\n\t\t}\r\n\t\telse if ($) {\r\n\t\t\treturn $(el).clone(true)[0];\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn el.cloneNode(true);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _saveInputCheckedState(root) {\r\n\t\tsavedInputChecked.length = 0;\r\n\r\n\t\tvar inputs = root.getElementsByTagName('input');\r\n\t\tvar idx = inputs.length;\r\n\r\n\t\twhile (idx--) {\r\n\t\t\tvar el = inputs[idx];\r\n\t\t\tel.checked && savedInputChecked.push(el);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction _nextTick(fn) {\r\n\t\treturn setTimeout(fn, 0);\r\n\t}\r\n\r\n\tfunction _cancelNextTick(id) {\r\n\t\treturn clearTimeout(id);\r\n\t}\r\n\r\n\t// Fixed #973:\r\n\t_on(document, 'touchmove', function (evt) {\r\n\t\tif (Sortable.active) {\r\n\t\t\tevt.preventDefault();\r\n\t\t}\r\n\t});\r\n\r\n\t// Export utils\r\n\tSortable.utils = {\r\n\t\ton: _on,\r\n\t\toff: _off,\r\n\t\tcss: _css,\r\n\t\tfind: _find,\r\n\t\tis: function (el, selector) {\r\n\t\t\treturn !!_closest(el, selector, el);\r\n\t\t},\r\n\t\textend: _extend,\r\n\t\tthrottle: _throttle,\r\n\t\tclosest: _closest,\r\n\t\ttoggleClass: _toggleClass,\r\n\t\tclone: _clone,\r\n\t\tindex: _index,\r\n\t\tnextTick: _nextTick,\r\n\t\tcancelNextTick: _cancelNextTick\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Create sortable instance\r\n\t * @param {HTMLElement} el\r\n\t * @param {Object} [options]\r\n\t */\r\n\tSortable.create = function (el, options) {\r\n\t\treturn new Sortable(el, options);\r\n\t};\r\n\r\n\r\n\t// Export\r\n\tSortable.version = '1.7.0';\r\n\treturn Sortable;\r\n});"]}