sogo/UI/WebServerResources/js/vendor/ng-sortable.min.js.map

1 line
61 KiB
Plaintext

{"version":3,"sources":["../../bower_components/Sortable/Sortable.js","../../bower_components/Sortable/ng-sortable.js"],"names":["factory","define","amd","module","exports","Package","Sortable","window","el","options","nodeType","toString","call","this","_extend","expando","defaults","group","Math","random","sort","disabled","store","handle","scroll","scrollSensitivity","scrollSpeed","draggable","test","nodeName","ghostClass","chosenClass","ignore","filter","animation","setData","dataTransfer","dragEl","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","forceFallback","fallbackClass","fallbackOnBody","name","_prepareGroup","fn","charAt","bind","nativeDraggable","supportDraggable","_on","_onTapStart","touchDragOverListeners","push","_onDragOver","get","_cloneHide","state","cloneEl","_css","rootEl","insertBefore","_closest","selector","ctx","document","split","tag","shift","toUpperCase","re","RegExp","join","parentNode","length","className","match","_globalDragOver","evt","dropEffect","preventDefault","event","addEventListener","_off","removeEventListener","_toggleClass","classList","replace","RSPACE","prop","val","style","defaultView","getComputedStyle","currentStyle","_find","tagName","iterator","list","getElementsByTagName","i","n","_dispatchEvent","sortable","targetEl","fromEl","startIndex","newIndex","createEvent","onName","substr","initEvent","to","from","item","clone","oldIndex","dispatchEvent","_onMove","toEl","dragRect","targetRect","retVal","onMoveFn","onMove","dragged","draggedRect","related","relatedRect","getBoundingClientRect","_disableDraggable","_unsilent","_silent","_ghostIsLast","lastEl","lastElementChild","rect","clientY","top","height","clientX","right","width","_generateId","str","src","href","sum","charCodeAt","_index","index","previousElementSibling","_throttle","callback","ms","args","_this","arguments","setTimeout","apply","dst","key","hasOwnProperty","parentEl","ghostEl","nextEl","scrollEl","scrollParentEl","lastCSS","lastParentCSS","activeGroup","tapEvt","touchEvt","moved","autoScroll","Date","getTime","win","parseInt","createElement","supportCssPointerEvents","cssText","pointerEvents","abs","slice","_autoScroll","vx","vy","sens","speed","x","y","winWidth","innerWidth","winHeight","innerHeight","offsetWidth","scrollWidth","offsetHeight","scrollHeight","left","bottom","clearInterval","pid","setInterval","scrollTo","pageXOffset","pageYOffset","scrollTop","scrollLeft","forEach","groups","put","prototype","constructor","type","touch","touches","target","originalTarget","button","some","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_disableDelayedDrag","_triggerDragStart","_onDrop","_dragStartTimer","clearTimeout","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","active","_emulateDragOver","_lastX","_lastY","elementFromPoint","parent","groupName","indexOf","_onTouchMove","_appendGhost","dx","dy","translate3d","ghostRect","css","cloneNode","console","debug","marginTop","marginLeft","body","appendChild","useFallback","_offUpEvents","pull","_loopId","effectAllowed","revert","groupPut","isOwner","canSort","stopPropagation","contains","children","animated","_animate","after","floating","cssFloat","display","isWide","isLong","halfway","nextElementSibling","moveVector","elTop","offsetTop","tgTop","prevRect","currentRect","removeChild","save","handleEvent","toArray","order","getAttribute","items","id","set","closest","option","value","destroy","Array","querySelectorAll","removeAttribute","splice","utils","on","off","find","is","extend","throttle","toggleClass","create","version","require","angular","constant","directive","$parse","ngSortableConfig","removed","getSourceFactory","scope","ngRepeat","childNodes","node","nodeValue","itemsExpr","$parent","restrict","ngSortable","link","$el","_emitEvent","source","getSource","model","models","_sync","prevItems","copy","$apply","watchers","Object","keys","reduce","opts","onStart","onEnd","onAdd","onUpdate","onRemove","onSort","unwatch","$watch"],"mappings":"CAOA,SAAWA,GACV,YAEsB,mBAAXC,SAAyBA,OAAOC,IAC1CD,OAAOD,GAEkB,mBAAVG,SAAkD,mBAAlBA,QAAOC,QACtDD,OAAOC,QAAUJ,IAEU,mBAAZK,SACfC,SAAWN,IAIXO,OAAiB,SAAIP,KAEpB,WACF,YAqJA,SAASM,GAASE,EAAIC,GACrB,IAAMD,IAAMA,EAAGE,UAA4B,IAAhBF,EAAGE,SAC7B,KAAM,kDAAoDC,SAASC,KAAKJ,EAGzEK,MAAKL,GAAKA,EACVK,KAAKJ,QAAUA,EAAUK,KAAYL,GAIrCD,EAAGO,GAAWF,IAId,IAAIG,IACHC,MAAOC,KAAKC,SACZC,MAAM,EACNC,UAAU,EACVC,MAAO,KACPC,OAAQ,KACRC,QAAQ,EACRC,kBAAmB,GACnBC,YAAa,GACbC,UAAW,SAASC,KAAKpB,EAAGqB,UAAY,KAAO,KAC/CC,WAAY,iBACZC,YAAa,kBACbC,OAAQ,SACRC,OAAQ,KACRC,UAAW,EACXC,QAAS,SAAUC,EAAcC,GAChCD,EAAaD,QAAQ,OAAQE,EAAOC,cAErCC,YAAY,EACZC,gBAAgB,EAChBC,WAAY,UACZC,MAAO,EACPC,eAAe,EACfC,cAAe,oBACfC,gBAAgB,EAKjB,KAAK,GAAIC,KAAQ9B,KACd8B,IAAQrC,MAAaA,EAAQqC,GAAQ9B,EAAS8B,GAGjDC,GAActC,EAGd,KAAK,GAAIuC,KAAMnC,MACO,MAAjBmC,EAAGC,OAAO,KACbpC,KAAKmC,GAAMnC,KAAKmC,GAAIE,KAAKrC,MAK3BA,MAAKsC,gBAAkB1C,EAAQkC,eAAgB,EAAQS,EAGvDC,EAAI7C,EAAI,YAAaK,KAAKyC,aAC1BD,EAAI7C,EAAI,aAAcK,KAAKyC,aAEvBzC,KAAKsC,kBACRE,EAAI7C,EAAI,WAAYK,MACpBwC,EAAI7C,EAAI,YAAaK,OAGtB0C,EAAuBC,KAAK3C,KAAK4C,aAGjChD,EAAQa,OAAST,KAAKO,KAAKX,EAAQa,MAAMoC,IAAI7C,OAutB9C,QAAS8C,GAAWC,GACfC,GAAYA,EAAQD,QAAUA,IACjCE,EAAKD,EAAS,UAAWD,EAAQ,OAAS,KACzCA,GAASC,EAAQD,OAASG,EAAOC,aAAaH,EAASxB,GACxDwB,EAAQD,MAAQA,GAKlB,QAASK,GAAyBzD,EAAe0D,EAA0BC,GAC1E,GAAI3D,EAAI,CACP2D,EAAMA,GAAOC,EACbF,EAAWA,EAASG,MAAM,IAE1B,IAAIC,GAAMJ,EAASK,QAAQC,cAC1BC,EAAK,GAAIC,QAAO,OAASR,EAASS,KAAK,KAAO,WAAY,IAE3D,GACC,IACU,OAARL,GAAgB9D,EAAGoE,aAAeT,IACzB,KAARG,GAAc9D,EAAGqB,SAAS2C,eAAiBF,MAC1CJ,EAASW,UAAY,IAAMrE,EAAGsE,UAAY,KAAKC,MAAMN,QAAWI,QAAUX,EAASW,QAGtF,MAAOrE,SAGFA,IAAO2D,IAAQ3D,EAAKA,EAAGoE,aAG/B,MAAO,MAIR,QAASI,GAA0BC,GAC9BA,EAAI7C,eACP6C,EAAI7C,aAAa8C,WAAa,QAE/BD,EAAIE,iBAIL,QAAS9B,GAAI7C,EAAI4E,EAAOpC,GACvBxC,EAAG6E,iBAAiBD,EAAOpC,GAAI,GAIhC,QAASsC,GAAK9E,EAAI4E,EAAOpC,GACxBxC,EAAG+E,oBAAoBH,EAAOpC,GAAI,GAInC,QAASwC,GAAahF,EAAIsC,EAAMc,GAC/B,GAAIpD,EACH,GAAIA,EAAGiF,UACNjF,EAAGiF,UAAU7B,EAAQ,MAAQ,UAAUd,OAEnC,CACJ,GAAIgC,IAAa,IAAMtE,EAAGsE,UAAY,KAAKY,QAAQC,EAAQ,KAAKD,QAAQ,IAAM5C,EAAO,IAAK,IAC1FtC,GAAGsE,WAAaA,GAAalB,EAAQ,IAAMd,EAAO,KAAK4C,QAAQC,EAAQ,MAM1E,QAAS7B,GAAKtD,EAAIoF,EAAMC,GACvB,GAAIC,GAAQtF,GAAMA,EAAGsF,KAErB,IAAIA,EAAO,CACV,GAAY,SAARD,EAQH,MAPIzB,GAAS2B,aAAe3B,EAAS2B,YAAYC,iBAChDH,EAAMzB,EAAS2B,YAAYC,iBAAiBxF,EAAI,IAExCA,EAAGyF,eACXJ,EAAMrF,EAAGyF,cAGM,SAATL,EAAkBC,EAAMA,EAAID,EAG7BA,KAAQE,KACbF,EAAO,WAAaA,GAGrBE,EAAMF,GAAQC,GAAsB,gBAARA,GAAmB,GAAK,OAMvD,QAASK,GAAM/B,EAAKgC,EAASC,GAC5B,GAAIjC,EAAK,CACR,GAAIkC,GAAOlC,EAAImC,qBAAqBH,GAAUI,EAAI,EAAGC,EAAIH,EAAKxB,MAE9D,IAAIuB,EACH,KAAWI,EAAJD,EAAOA,IACbH,EAASC,EAAKE,GAAIA,EAIpB,OAAOF,GAGR,SAKD,QAASI,GAAeC,EAAU3C,EAAQjB,EAAM6D,EAAUC,EAAQC,EAAYC,GAC7E,GAAI7B,GAAMb,EAAS2C,YAAY,SAC9BtG,GAAWiG,GAAY3C,EAAOhD,IAAUN,QACxCuG,EAAS,KAAOlE,EAAKG,OAAO,GAAGuB,cAAgB1B,EAAKmE,OAAO,EAE5DhC,GAAIiC,UAAUpE,GAAM,GAAM,GAE1BmC,EAAIkC,GAAKpD,EACTkB,EAAImC,KAAOR,GAAU7C,EACrBkB,EAAIoC,KAAOV,GAAY5C,EACvBkB,EAAIqC,MAAQzD,EAEZoB,EAAIsC,SAAWV,EACf5B,EAAI6B,SAAWA,EAEf/C,EAAOyD,cAAcvC,GAEjBxE,EAAQuG,IACXvG,EAAQuG,GAAQpG,KAAK8F,EAAUzB,GAKjC,QAASwC,GAAQb,EAAQc,EAAMrF,EAAQsF,EAAUhB,EAAUiB,GAC1D,GAAI3C,GAGH4C,EAFAnB,EAAWE,EAAO7F,GAClB+G,EAAWpB,EAASjG,QAAQsH,MAmB7B,OAhBA9C,GAAMb,EAAS2C,YAAY,SAC3B9B,EAAIiC,UAAU,QAAQ,GAAM,GAE5BjC,EAAIkC,GAAKO,EACTzC,EAAImC,KAAOR,EACX3B,EAAI+C,QAAU3F,EACd4C,EAAIgD,YAAcN,EAClB1C,EAAIiD,QAAUvB,GAAYe,EAC1BzC,EAAIkD,YAAcP,GAAcF,EAAKU,wBAErCxB,EAAOY,cAAcvC,GAEjB6C,IACHD,EAASC,EAASlH,KAAK8F,EAAUzB,IAG3B4C,EAIR,QAASQ,GAAkB7H,GAC1BA,EAAGmB,WAAY,EAIhB,QAAS2G,KACRC,GAAU,EAKX,QAASC,GAAahI,EAAIyE,GACzB,GAAIwD,GAASjI,EAAGkI,iBACdC,EAAOF,EAAOL,uBAEhB,QAASnD,EAAI2D,SAAWD,EAAKE,IAAMF,EAAKG,QAAU,GAAO7D,EAAI8D,SAAWJ,EAAKK,MAAQL,EAAKM,OAAS,IAAOR,EAU3G,QAASS,GAAY1I,GAKpB,IAJA,GAAI2I,GAAM3I,EAAG2F,QAAU3F,EAAGsE,UAAYtE,EAAG4I,IAAM5I,EAAG6I,KAAO7I,EAAG8B,YAC3DiE,EAAI4C,EAAItE,OACRyE,EAAM,EAEA/C,KACN+C,GAAOH,EAAII,WAAWhD,EAGvB,OAAO+C,GAAI3I,SAAS,IAQrB,QAAS6I,GAAOhJ,GACf,GAAIiJ,GAAQ,CAEZ,KAAKjJ,IAAOA,EAAGoE,WACd,MAAO,EAGR,MAAOpE,IAAOA,EAAKA,EAAGkJ,yBACa,aAA9BlJ,EAAGqB,SAAS2C,eACfiF,GAIF,OAAOA,GAGR,QAASE,GAAUC,EAAUC,GAC5B,GAAIC,GAAMC,CAEV,OAAO,YACO,SAATD,IACHA,EAAOE,UACPD,EAAQlJ,KAERoJ,WAAW,WACU,IAAhBH,EAAKjF,OACR+E,EAAShJ,KAAKmJ,EAAOD,EAAK,IAE1BF,EAASM,MAAMH,EAAOD,GAGvBA,EAAO,QACLD,KAKN,QAAS/I,GAAQqJ,EAAKf,GACrB,GAAIe,GAAOf,EACV,IAAK,GAAIgB,KAAOhB,GACXA,EAAIiB,eAAeD,KACtBD,EAAIC,GAAOhB,EAAIgB,GAKlB,OAAOD,GAtqCR,GAAI9H,GACHiI,EACAC,EACA1G,EACAE,EACAyG,EAEAC,EACAC,EAEAjC,EACAkC,EACAC,EAEArD,EACAT,EAEA+D,EAGAC,EACAC,EAEAC,EALAC,KAQAtF,EAAS,OAET5E,EAAU,YAAa,GAAKmK,OAAMC,UAElCC,EAAM7K,OACN6D,EAAWgH,EAAIhH,SACfiH,EAAWD,EAAIC,SAEfjI,KAAsB,aAAegB,GAASkH,cAAc,QAC5DC,EAA0B,SAAW/K,GAGpC,MAFAA,GAAK4D,EAASkH,cAAc,KAC5B9K,EAAGsF,MAAM0F,QAAU,sBACe,SAA3BhL,EAAGsF,MAAM2F,iBAGjBlD,GAAU,EAEVmD,EAAMxK,KAAKwK,IAGXnI,MAFWoI,UAIXC,EAAcjC,EAAU,SAAoB1E,EAAgBxE,EAAyBsD,GAEpF,GAAIA,GAAUtD,EAAQe,OAAQ,CAC7B,GAAIhB,GACHmI,EAUAkD,EACAC,EAVAC,EAAOtL,EAAQgB,kBACfuK,EAAQvL,EAAQiB,YAEhBuK,EAAIhH,EAAI8D,QACRmD,EAAIjH,EAAI2D,QAERuD,EAAW5L,OAAO6L,WAClBC,EAAY9L,OAAO+L,WAOpB,IAAI5B,IAAmB3G,IACtB0G,EAAWhK,EAAQe,OACnBkJ,EAAiB3G,EAEb0G,KAAa,GAAM,CACtBA,EAAW1G,CAEX,GACC,IAAK0G,EAAS8B,YAAc9B,EAAS+B,aACnC/B,EAASgC,aAAehC,EAASiC,aAElC,YAGOjC,EAAWA,EAAS7F,YAI3B6F,IACHjK,EAAKiK,EACL9B,EAAO8B,EAASrC,wBAChByD,GAAMH,EAAI/C,EAAKK,MAAQiD,IAAMF,IAASL,EAAI/C,EAAKgE,KAAOV,IAAMF,GAC5DD,GAAMJ,EAAI/C,EAAKiE,OAASV,IAAMH,IAASL,EAAI/C,EAAKE,IAAMqD,IAAMH,IAIvDF,GAAMC,IACXD,GAAsBE,GAAhBI,EAAWF,IAAmBF,GAALE,GAC/BH,GAAuBC,GAAjBM,EAAYH,IAAmBH,GAALG,IAG/BL,GAAMC,KAAQtL,EAAK4K,IAIjBH,EAAWY,KAAOA,GAAMZ,EAAWa,KAAOA,GAAMb,EAAWzK,KAAOA,IACrEyK,EAAWzK,GAAKA,EAChByK,EAAWY,GAAKA,EAChBZ,EAAWa,GAAKA,EAEhBe,cAAc5B,EAAW6B,KAErBtM,IACHyK,EAAW6B,IAAMC,YAAY,WACxBvM,IAAO4K,EACVA,EAAI4B,SAAS5B,EAAI6B,YAAcpB,EAAKG,EAAOZ,EAAI8B,YAAcpB,EAAKE,IAElEF,IAAOtL,EAAG2M,WAAarB,EAAKE,GAC5BH,IAAOrL,EAAG4M,YAAcvB,EAAKG,KAE5B,QAIJ,IAEHjJ,EAAgB,SAAUtC,GACzB,GAAIQ,GAAQR,EAAQQ,KAEfA,IAAyB,gBAATA,KACpBA,EAAQR,EAAQQ,OAAS6B,KAAM7B,KAG/B,OAAQ,OAAOoM,QAAQ,SAAUjD,GAC3BA,IAAOnJ,KACZA,EAAMmJ,IAAO,KAIf3J,EAAQ6M,OAAS,IAAMrM,EAAM6B,MAAQ7B,EAAMsM,IAAI5I,KAAO,IAAM1D,EAAMsM,IAAI5I,KAAK,KAAO,IAAM,IA+jC1F,OAz+BArE,GAASkN,WACRC,YAAanN,EAEbgD,YAAa,SAAiC2B,GAC7C,GAAI8E,GAAQlJ,KACXL,EAAKK,KAAKL,GACVC,EAAUI,KAAKJ,QACfiN,EAAOzI,EAAIyI,KACXC,EAAQ1I,EAAI2I,SAAW3I,EAAI2I,QAAQ,GACnCC,GAAUF,GAAS1I,GAAK4I,OACxBC,EAAiBD,EACjB5L,EAASxB,EAAQwB,MAGlB,MAAa,cAATyL,GAAuC,IAAfzI,EAAI8I,QAAgBtN,EAAQY,YAIxDwM,EAAS5J,EAAS4J,EAAQpN,EAAQkB,UAAWnB,IAE7C,CAQA,GAHA+G,EAAWiC,EAAOqE,GAGI,kBAAX5L,IACV,GAAIA,EAAOrB,KAAKC,KAAMoE,EAAK4I,EAAQhN,MAGlC,MAFA4F,GAAesD,EAAO+D,EAAgB,SAAUD,EAAQrN,EAAI+G,OAC5DtC,GAAIE,qBAID,IAAIlD,IACRA,EAASA,EAAOoC,MAAM,KAAK2J,KAAK,SAAUC,GAGzC,MAFAA,GAAWhK,EAAS6J,EAAgBG,EAASC,OAAQ1N,GAEjDyN,GACHxH,EAAesD,EAAOkE,EAAU,SAAUJ,EAAQrN,EAAI+G,IAC/C,GAFR,UAQA,WADAtC,GAAIE,gBAMF1E,GAAQc,SAAW0C,EAAS6J,EAAgBrN,EAAQc,OAAQf,IAMhEK,KAAKsN,kBAAkBlJ,EAAK0I,EAAOE,KAGpCM,kBAAmB,SAAsBlJ,EAAiB0I,EAAyBE,GAClF,GAICO,GAJGrE,EAAQlJ,KACXL,EAAKuJ,EAAMvJ,GACXC,EAAUsJ,EAAMtJ,QAChB4N,EAAgB7N,EAAG6N,aAGhBR,KAAWxL,GAAWwL,EAAOjJ,aAAepE,IAC/CsK,EAAS7F,EAETlB,EAASvD,EACT6B,EAASwL,EACTvD,EAAWjI,EAAOuC,WAClB4F,EAASnI,EAAOiM,YAChBzD,EAAcpK,EAAQQ,MAEtBmN,EAAc,WAGbrE,EAAMwE,sBAGNlM,EAAOV,WAAY,EAGnB6D,EAAanD,EAAQ0H,EAAMtJ,QAAQsB,aAAa,GAGhDgI,EAAMyE,kBAAkBb,IAIzBlN,EAAQuB,OAAOqC,MAAM,KAAKgJ,QAAQ,SAAUY,GAC3C/H,EAAM7D,EAAQ4L,EAASC,OAAQ7F,KAGhChF,EAAIgL,EAAe,UAAWtE,EAAM0E,SACpCpL,EAAIgL,EAAe,WAAYtE,EAAM0E,SACrCpL,EAAIgL,EAAe,cAAetE,EAAM0E,SAEpChO,EAAQiC,OAIXW,EAAIgL,EAAe,UAAWtE,EAAMwE,qBACpClL,EAAIgL,EAAe,WAAYtE,EAAMwE,qBACrClL,EAAIgL,EAAe,cAAetE,EAAMwE,qBACxClL,EAAIgL,EAAe,YAAatE,EAAMwE,qBACtClL,EAAIgL,EAAe,YAAatE,EAAMwE,qBAEtCxE,EAAM2E,gBAAkBzE,WAAWmE,EAAa3N,EAAQiC,QAExD0L,MAKHG,oBAAqB,WACpB,GAAIF,GAAgBxN,KAAKL,GAAG6N,aAE5BM,cAAa9N,KAAK6N,iBAClBpJ,EAAK+I,EAAe,UAAWxN,KAAK0N,qBACpCjJ,EAAK+I,EAAe,WAAYxN,KAAK0N,qBACrCjJ,EAAK+I,EAAe,cAAexN,KAAK0N,qBACxCjJ,EAAK+I,EAAe,YAAaxN,KAAK0N,qBACtCjJ,EAAK+I,EAAe,YAAaxN,KAAK0N,sBAGvCC,kBAAmB,SAAsBb,GACpCA,GAEH7C,GACC+C,OAAQxL,EACR0G,QAAS4E,EAAM5E,QACfH,QAAS+E,EAAM/E,SAGhB/H,KAAK+N,aAAa9D,EAAQ,UAEjBjK,KAAKsC,iBAIdE,EAAIhB,EAAQ,UAAWxB,MACvBwC,EAAIU,EAAQ,YAAalD,KAAK+N,eAJ9B/N,KAAK+N,aAAa9D,GAAQ,EAO3B,KACK1G,EAASyK,UACZzK,EAASyK,UAAUC,QAEnBvO,OAAOwO,eAAeC,kBAEtB,MAAOC,MAIVC,aAAc,WACTnL,GAAU1B,IAEbmD,EAAanD,EAAQxB,KAAKJ,QAAQqB,YAAY,GAE9CxB,EAAS6O,OAAStO,KAGlB4F,EAAe5F,KAAMkD,EAAQ,QAAS1B,EAAQ0B,EAAQwD,KAIxD6H,iBAAkB,WACjB,GAAIrE,EAAU,CACb,GAAIlK,KAAKwO,SAAWtE,EAAShC,SAAWlI,KAAKyO,SAAWvE,EAASnC,QAChE,MAGD/H,MAAKwO,OAAStE,EAAShC,QACvBlI,KAAKyO,OAASvE,EAASnC,QAElB2C,GACJzH,EAAKyG,EAAS,UAAW,OAG1B,IAAIsD,GAASzJ,EAASmL,iBAAiBxE,EAAShC,QAASgC,EAASnC,SACjE4G,EAAS3B,EACT4B,EAAY,IAAM5O,KAAKJ,QAAQQ,MAAM6B,KACrCyD,EAAIhD,EAAuBsB,MAE5B,IAAI2K,EACH,EAAG,CACF,GAAIA,EAAOzO,IAAYyO,EAAOzO,GAASN,QAAQ6M,OAAOoC,QAAQD,GAAa,GAAI,CAC9E,KAAOlJ,KACNhD,EAAuBgD,IACtBwC,QAASgC,EAAShC,QAClBH,QAASmC,EAASnC,QAClBiF,OAAQA,EACR9J,OAAQyL,GAIV,OAGD3B,EAAS2B,QAGHA,EAASA,EAAO5K,WAGnB2G,IACJzH,EAAKyG,EAAS,UAAW,MAM5BoF,aAAc,SAAyB1K,GACtC,GAAI6F,EAAQ,CAENxK,EAAS6O,QACbtO,KAAKqO,eAINrO,KAAK+O,cAEL,IAAIjC,GAAQ1I,EAAI2I,QAAU3I,EAAI2I,QAAQ,GAAK3I,EAC1C4K,EAAKlC,EAAM5E,QAAU+B,EAAO/B,QAC5B+G,EAAKnC,EAAM/E,QAAUkC,EAAOlC,QAC5BmH,EAAc9K,EAAI2I,QAAU,eAAiBiC,EAAK,MAAQC,EAAK,QAAU,aAAeD,EAAK,MAAQC,EAAK,KAE3G9E,IAAQ,EACRD,EAAW4C,EAEX7J,EAAKyG,EAAS,kBAAmBwF,GACjCjM,EAAKyG,EAAS,eAAgBwF,GAC9BjM,EAAKyG,EAAS,cAAewF,GAC7BjM,EAAKyG,EAAS,YAAawF,GAE3B9K,EAAIE,mBAINyK,aAAc,WACb,IAAKrF,EAAS,CACb,GAGCyF,GAHGrH,EAAOtG,EAAO+F,wBACjB6H,EAAMnM,EAAKzB,GACX5B,EAAUI,KAAKJ,OAGhB8J,GAAUlI,EAAO6N,WAAU,GAE3B1K,EAAa+E,EAAS9J,EAAQqB,YAAY,GAC1C0D,EAAa+E,EAAS9J,EAAQmC,eAAe,GAEvBuN,QAAQC,MAAM,cAAgBzH,EAAKE,KACnCsH,QAAQC,MAAM,mBAAqBH,EAAII,WAC7DvM,EAAKyG,EAAS,MAAO5B,EAAKE,IAAMwC,EAAS4E,EAAII,UAAW,KACxDvM,EAAKyG,EAAS,OAAQ5B,EAAKgE,KAAOtB,EAAS4E,EAAIK,WAAY,KAC3DxM,EAAKyG,EAAS,QAAS5B,EAAKM,OAC5BnF,EAAKyG,EAAS,SAAU5B,EAAKG,QAC7BhF,EAAKyG,EAAS,UAAW,OACzBzG,EAAKyG,EAAS,WAAY,SAC1BzG,EAAKyG,EAAS,SAAU,UACxBzG,EAAKyG,EAAS,gBAAiB,QAE/B9J,EAAQoC,gBAAkBuB,EAASmM,KAAKC,YAAYjG,IAAYxG,EAAOyM,YAAYjG,GAGnFyF,EAAYzF,EAAQnC,wBACpBtE,EAAKyG,EAAS,QAAsB,EAAb5B,EAAKM,MAAY+G,EAAU/G,OAClDnF,EAAKyG,EAAS,SAAwB,EAAd5B,EAAKG,OAAakH,EAAUlH,UAItD8F,aAAc,SAAoB3J,EAAiBwL,GAClD,GAAIrO,GAAe6C,EAAI7C,aACtB3B,EAAUI,KAAKJ,OAEhBI,MAAK6P,eAEmB,SAApB7F,EAAY8F,OACf9M,EAAUxB,EAAO6N,WAAU,GAC3BpM,EAAKD,EAAS,UAAW,QACzBE,EAAOC,aAAaH,EAASxB,IAG1BoO,GAEiB,UAAhBA,GAEHpN,EAAIe,EAAU,YAAavD,KAAK8O,cAChCtM,EAAIe,EAAU,WAAYvD,KAAK4N,SAC/BpL,EAAIe,EAAU,cAAevD,KAAK4N,WAGlCpL,EAAIe,EAAU,YAAavD,KAAK8O,cAChCtM,EAAIe,EAAU,UAAWvD,KAAK4N,UAG/B5N,KAAK+P,QAAU7D,YAAYlM,KAAKuO,iBAAkB,MAG9ChN,IACHA,EAAayO,cAAgB,OAC7BpQ,EAAQ0B,SAAW1B,EAAQ0B,QAAQvB,KAAKC,KAAMuB,EAAcC,IAG7DgB,EAAIe,EAAU,OAAQvD,MACtBoJ,WAAWpJ,KAAKqO,aAAc,KAIhCzL,YAAa,SAAoBwB,GAChC,GACC4I,GACAlG,EACAmJ,EAHGtQ,EAAKK,KAAKL,GAIbC,EAAUI,KAAKJ,QACfQ,EAAQR,EAAQQ,MAChB8P,EAAW9P,EAAMsM,IACjByD,EAAWnG,IAAgB5J,EAC3BgQ,EAAUxQ,EAAQW,IASnB,IAP2B,SAAvB6D,EAAIE,iBACPF,EAAIE,kBACH1E,EAAQ+B,gBAAkByC,EAAIiM,mBAGhClG,GAAQ,EAEJH,IAAgBpK,EAAQY,WAC1B2P,EACEC,IAAYH,GAAU/M,EAAOoN,SAAS9O,IACtCwI,EAAY8F,MAAQI,IACpBlG,EAAY/H,OAAS7B,EAAM6B,MAC3BiO,EAASrB,UAAYqB,EAASrB,QAAQ7E,EAAY/H,UAGrC,SAAfmC,EAAIlB,QAAqBkB,EAAIlB,SAAWlD,KAAKL,IAC7C,CAID,GAFAoL,EAAY3G,EAAKxE,EAASI,KAAKL,IAE3B+H,EACH,MAMD,IAHAsF,EAAS5J,EAASgB,EAAI4I,OAAQpN,EAAQkB,UAAWnB,GACjDmH,EAAWtF,EAAO+F,wBAEd0I,EAUH,MATAnN,IAAW,QAEPE,GAAW2G,EACdzG,EAAOC,aAAa3B,EAAQwB,GAAW2G,GAE9ByG,GACTlN,EAAOyM,YAAYnO,GAOrB,IAA4B,IAAvB7B,EAAG4Q,SAASvM,QAAkBrE,EAAG4Q,SAAS,KAAO7G,GACpD/J,IAAOyE,EAAI4I,SAAYA,EAASrF,EAAahI,EAAIyE,IACjD,CAED,GAAI4I,EAAQ,CACX,GAAIA,EAAOwD,SACV,MAGDzJ,GAAaiG,EAAOzF,wBAGrBzE,EAAWqN,GAEPvJ,EAAQ1D,EAAQvD,EAAI6B,EAAQsF,EAAUkG,EAAQjG,MAAgB,IAC5DvF,EAAO8O,SAAS3Q,KACpBA,EAAGgQ,YAAYnO,GACfiI,EAAW9J,GAGZK,KAAKyQ,SAAS3J,EAAUtF,GACxBwL,GAAUhN,KAAKyQ,SAAS1J,EAAYiG,QAGjC,IAAIA,IAAWA,EAAOwD,UAAYxD,IAAWxL,GAA0C,SAA/BwL,EAAOjJ,WAAW7D,GAAsB,CAChG0H,IAAWoF,IACdpF,EAASoF,EACTlD,EAAU7G,EAAK+J,GACfjD,EAAgB9G,EAAK+J,EAAOjJ,YAI7B,IAUC2M,GAVG3J,EAAaiG,EAAOzF,wBACvBa,EAAQrB,EAAWoB,MAAQpB,EAAW+E,KACtC7D,EAASlB,EAAWgF,OAAShF,EAAWiB,IACxC2I,EAAW,oBAAoB5P,KAAK+I,EAAQ8G,SAAW9G,EAAQ+G,UACjC,QAAzB9G,EAAc8G,SAAwE,IAAnD9G,EAAc,kBAAkB8E,QAAQ,OAChFiC,EAAU9D,EAAOtB,YAAclK,EAAOkK,YACtCqF,EAAU/D,EAAOpB,aAAepK,EAAOoK,aACvCoF,GAAWL,GAAYvM,EAAI8D,QAAUnB,EAAW+E,MAAQ1D,GAAShE,EAAI2D,QAAUhB,EAAWiB,KAAOC,GAAU,GAC3GwF,EAAcT,EAAOiE,mBACrBC,EAAatK,EAAQ1D,EAAQvD,EAAI6B,EAAQsF,EAAUkG,EAAQjG,EAI5D,IAAImK,KAAe,EAAO,CAMzB,GALAxJ,GAAU,EACV0B,WAAW3B,EAAW,IAEtB3E,EAAWqN,GAEQ,IAAfe,GAAmC,KAAfA,EACvBR,EAAwB,IAAfQ,MAEL,IAAIP,EAAU,CAClB,GAAIQ,GAAQ3P,EAAO4P,UAClBC,EAAQrE,EAAOoE,SAGfV,GADGS,IAAUE,EACJrE,EAAOnE,yBAA2BrH,IAAYsP,GAAUE,GAAWF,EAEpEO,EAAQF,MAGjBT,GAASjD,IAAgBjM,IAAYuP,GAAUC,GAAWD,CAGtDvP,GAAO8O,SAAS3Q,KAChB+Q,IAAUjD,EACb9N,EAAGgQ,YAAYnO,GAEfwL,EAAOjJ,WAAWZ,aAAa3B,EAAQkP,EAAQjD,EAAcT,IAI/DvD,EAAWjI,EAAOuC,WAElB/D,KAAKyQ,SAAS3J,EAAUtF,GACxBxB,KAAKyQ,SAAS1J,EAAYiG,OAM9ByD,SAAU,SAAUa,EAAUtE,GAC7B,GAAIhE,GAAKhJ,KAAKJ,QAAQyB,SAEtB,IAAI2H,EAAI,CACP,GAAIuI,GAAcvE,EAAOzF,uBAEzBtE,GAAK+J,EAAQ,aAAc,QAC3B/J,EAAK+J,EAAQ,YAAa,gBACtBsE,EAASxF,KAAOyF,EAAYzF,MAAQ,OACpCwF,EAAStJ,IAAMuJ,EAAYvJ,KAAO,SAGtCgF,EAAOtB,YAEPzI,EAAK+J,EAAQ,aAAc,OAAShE,EAAK,MACzC/F,EAAK+J,EAAQ,YAAa,sBAE1Bc,aAAad,EAAOwD,UACpBxD,EAAOwD,SAAWpH,WAAW,WAC5BnG,EAAK+J,EAAQ,aAAc,IAC3B/J,EAAK+J,EAAQ,YAAa,IAC1BA,EAAOwD,UAAW,GAChBxH,KAIL6G,aAAc,WACb,GAAIrC,GAAgBxN,KAAKL,GAAG6N,aAE5B/I,GAAKlB,EAAU,YAAavD,KAAK8O,cACjCrK,EAAK+I,EAAe,UAAWxN,KAAK4N,SACpCnJ,EAAK+I,EAAe,WAAYxN,KAAK4N,SACrCnJ,EAAK+I,EAAe,cAAexN,KAAK4N,UAGzCA,QAAS,SAAoBxJ,GAC5B,GAAIzE,GAAKK,KAAKL,GACbC,EAAUI,KAAKJ,OAEhBoM,eAAchM,KAAK+P,SACnB/D,cAAc5B,EAAW6B,KACzB6B,aAAa9N,KAAK6N,iBAGlBpJ,EAAKlB,EAAU,YAAavD,KAAK8O,cAE7B9O,KAAKsC,kBACRmC,EAAKlB,EAAU,OAAQvD,MACvByE,EAAK9E,EAAI,YAAaK,KAAK+N,eAG5B/N,KAAK6P,eAEDzL,IACC+F,IACH/F,EAAIE,kBACH1E,EAAQ8B,YAAc0C,EAAIiM,mBAG5B3G,GAAWA,EAAQ3F,WAAWyN,YAAY9H,GAEtClI,IACCxB,KAAKsC,iBACRmC,EAAKjD,EAAQ,UAAWxB,MAGzBwH,EAAkBhG,GAGlBmD,EAAanD,EAAQxB,KAAKJ,QAAQqB,YAAY,GAC9C0D,EAAanD,EAAQxB,KAAKJ,QAAQsB,aAAa,GAE3CgC,IAAWuG,GACdxD,EAAW0C,EAAOnH,GAEdyE,GAAY,IAEfL,EAAe,KAAM6D,EAAU,OAAQjI,EAAQ0B,EAAQwD,EAAUT,GACjEL,EAAe5F,KAAMkD,EAAQ,OAAQ1B,EAAQ0B,EAAQwD,EAAUT,GAG/DL,EAAe,KAAM6D,EAAU,MAAOjI,EAAQ0B,EAAQwD,EAAUT,GAGhEL,EAAe5F,KAAMkD,EAAQ,SAAU1B,EAAQ0B,EAAQwD,EAAUT,MAKlEjD,GAAWA,EAAQe,WAAWyN,YAAYxO,GAEtCxB,EAAOiM,cAAgB9D,IAE1B1D,EAAW0C,EAAOnH,GAEdyE,GAAY,IAEfL,EAAe5F,KAAMkD,EAAQ,SAAU1B,EAAQ0B,EAAQwD,EAAUT,GACjEL,EAAe5F,KAAMkD,EAAQ,OAAQ1B,EAAQ0B,EAAQwD,EAAUT,MAK9DxG,EAAS6O,SACK,OAAbrI,GAAkC,KAAbA,IACxBA,EAAWS,GAGZd,EAAe5F,KAAMkD,EAAQ,MAAO1B,EAAQ0B,EAAQwD,EAAUT,GAG9DjG,KAAKyR,SAKPvO,EACA1B,EACAiI,EACAC,EACAC,EACA3G,EAEA4G,EACAC,EAEAI,EACAC,EAEAC,EACAlE,EAEA2B,EACAkC,EAEAE,EACAvK,EAAS6O,OAAS,OAKpBoD,YAAa,SAAoBtN,GAChC,GAAIyI,GAAOzI,EAAIyI,IAEF,cAATA,GAAgC,cAATA,EACtBrL,IACHxB,KAAK4C,YAAYwB,GACjBD,EAAgBC,IAGA,SAATyI,GAA4B,YAATA,GAC3B7M,KAAK4N,QAAQxJ,IASfuN,QAAS,WAQR,IAPA,GACChS,GADGiS,KAEHrB,EAAWvQ,KAAKL,GAAG4Q,SACnB7K,EAAI,EACJC,EAAI4K,EAASvM,OACbpE,EAAUI,KAAKJ,QAEL+F,EAAJD,EAAOA,IACb/F,EAAK4Q,EAAS7K,GACVtC,EAASzD,EAAIC,EAAQkB,UAAWd,KAAKL,KACxCiS,EAAMjP,KAAKhD,EAAGkS,aAAajS,EAAQgC,aAAeyG,EAAY1I,GAIhE,OAAOiS,IAQRrR,KAAM,SAAUqR,GACf,GAAIE,MAAY5O,EAASlD,KAAKL,EAE9BK,MAAK2R,UAAUnF,QAAQ,SAAUuF,EAAIrM,GACpC,GAAI/F,GAAKuD,EAAOqN,SAAS7K,EAErBtC,GAASzD,EAAIK,KAAKJ,QAAQkB,UAAWoC,KACxC4O,EAAMC,GAAMpS,IAEXK,MAEH4R,EAAMpF,QAAQ,SAAUuF,GACnBD,EAAMC,KACT7O,EAAOsO,YAAYM,EAAMC,IACzB7O,EAAOyM,YAAYmC,EAAMC,QAS5BN,KAAM,WACL,GAAIhR,GAAQT,KAAKJ,QAAQa,KACzBA,IAASA,EAAMuR,IAAIhS,OAUpBiS,QAAS,SAAUtS,EAAI0D,GACtB,MAAOD,GAASzD,EAAI0D,GAAYrD,KAAKJ,QAAQkB,UAAWd,KAAKL,KAU9DuS,OAAQ,SAAUjQ,EAAMkQ,GACvB,GAAIvS,GAAUI,KAAKJ,OAEnB,OAAc,UAAVuS,EACIvS,EAAQqC,IAEfrC,EAAQqC,GAAQkQ,OAEH,UAATlQ,GACHC,EAActC,MASjBwS,QAAS,WACR,GAAIzS,GAAKK,KAAKL,EAEdA,GAAGO,GAAW,KAEduE,EAAK9E,EAAI,YAAaK,KAAKyC,aAC3BgC,EAAK9E,EAAI,aAAcK,KAAKyC,aAExBzC,KAAKsC,kBACRmC,EAAK9E,EAAI,WAAYK,MACrByE,EAAK9E,EAAI,YAAaK,OAIvBqS,MAAM1F,UAAUH,QAAQzM,KAAKJ,EAAG2S,iBAAiB,eAAgB,SAAU3S,GAC1EA,EAAG4S,gBAAgB,eAGpB7P,EAAuB8P,OAAO9P,EAAuBmM,QAAQ7O,KAAK4C,aAAc,GAEhF5C,KAAK4N,UAEL5N,KAAKL,GAAKA,EAAK,OA+PjBF,EAASgT,OACRC,GAAIlQ,EACJmQ,IAAKlO,EACL2K,IAAKnM,EACL2P,KAAMvN,EACNwN,GAAI,SAAUlT,EAAI0D,GACjB,QAASD,EAASzD,EAAI0D,EAAU1D,IAEjCmT,OAAQ7S,EACR8S,SAAUjK,EACVmJ,QAAS7O,EACT4P,YAAarO,EACbiE,MAAOD,GASRlJ,EAASwT,OAAS,SAAUtT,EAAIC,GAC/B,MAAO,IAAIH,GAASE,EAAIC,IAKzBH,EAASyT,QAAU,QACZzT,IC7tCR,SAAWN,GACV,YAEsB,mBAAXC,SAAyBA,OAAOC,IAC1CD,QAAQ,UAAW,cAAeD,GAEP,kBAAZgU,UAA6C,gBAAZ5T,UAA0C,gBAAXD,SAC/E6T,QAAQ,WACRhU,EAAQiU,QAASD,QAAQ,eACzB7T,OAAOC,QAAU,eAETG,OAAO0T,SAAW1T,OAAOD,UACjCN,EAAQiU,QAAS3T,WAEhB,SAAU2T,EAAS3T,GACrB,YAWA,IAAIS,GAAU,sBAEdkT,GAAQ9T,OAAO,kBACb+T,SAAS,oBAAqB,SAC9BA,SAAS,uBACTC,UAAU,cAAe,SAAU,mBAAoB,SAAUC,EAAQC,GACzE,GAAIC,GACHhG,EACAiG,EAAmB,SAA0B/T,EAAIgU,GAChD,GAAIC,MAAcxS,OAAOrB,KAAKJ,EAAGkU,WAAY,SAAUC,GACtD,MACqB,KAAlBA,EAAKjU,UACmC,KAAxCiU,EAAKC,UAAUlF,QAAQ,eAExB,EAEH,KAAK+E,EAEJ,MAAO,YACN,MAAO,MAKTA,GAAWA,EAASG,UAAU7P,MAAM,0DAEpC,IAAI8P,GAAYT,EAAOK,EAAS,GAEhC,OAAO,YACN,MAAOI,GAAUL,EAAMM,cAM1B,QACCC,SAAU,KACVP,OAASQ,WAAY,MACrBC,KAAM,SAAUT,EAAOU,GAUtB,QAASC,GAAqBlQ,EAAcoC,GAC3C,GAAIvE,GAAO,KAAOmC,EAAIyI,KAAKzK,OAAO,GAAGuB,cAAgBS,EAAIyI,KAAKzG,OAAO,GACjEmO,EAASC,GAGb5U,GAAQqC,IAASrC,EAAQqC,IACxBwS,MAAOjO,GAAQ+N,EAAOnQ,EAAI6B,UAC1ByO,OAAQH,EACR7N,SAAUtC,EAAIsC,SACdT,SAAU7B,EAAI6B,WAKhB,QAAS0O,GAAgBvQ,GACxB,GAAI0N,GAAQ0C,GAEZ,IAAK1C,EAAL,CAKA,GAAIpL,GAAWtC,EAAIsC,SAClBT,EAAW7B,EAAI6B,QAEhB,IAAItG,IAAOyE,EAAImC,KAAM,CACpB,GAAIqO,GAAYxQ,EAAImC,KAAKrG,IAEzBuT,GAAUmB,EAAUlO,GAEhBtC,EAAIqC,OACPgN,EAAUL,EAAQyB,KAAKpB,GACvBmB,EAAUpC,OAAO/S,EAASgT,MAAM7J,MAAMxE,EAAIqC,OAAQ,EAAGmO,EAAUpC,OAAO9L,EAAU,GAAG,IACnFtC,EAAImC,KAAKiL,YAAYpN,EAAIqC,QAGzBmO,EAAUpC,OAAO9L,EAAU,GAG5BoL,EAAMU,OAAOvM,EAAU,EAAGwN,GAE1BrP,EAAImC,KAAKpD,aAAaiB,EAAIoC,KAAMiH,OAGhCqE,GAAMU,OAAOvM,EAAU,EAAG6L,EAAMU,OAAO9L,EAAU,GAAG,GAGrDiN,GAAMmB,UAxDP,GAICjP,GAJGlG,EAAK0U,EAAI,GACZzU,EAAUwT,EAAQN,OAAOa,EAAMQ,eAAkBX,GACjDuB,KACAP,EAAYd,EAAiB/T,EAAIgU,EAIlChU,GAAGO,GAAWsU,EAqDd3O,EAAWpG,EAASwT,OAAOtT,EAAIqV,OAAOC,KAAKrV,GAASsV,OAAO,SAAUC,EAAMlT,GAE1E,MADAkT,GAAKlT,GAAQkT,EAAKlT,IAASrC,EAAQqC,GAC5BkT,IAEPC,QAAS,SAAoBhR,GAC5BqJ,EAAcrJ,EAAIoC,KAAKiH,YACvB6G,EAAWlQ,GACXuP,EAAMmB,UAEPO,MAAO,SAAoBjR,GAC1BkQ,EAAWlQ,EAAKqP,GAChBE,EAAMmB,UAEPQ,MAAO,SAAoBlR,GAC1BuQ,EAAMvQ,GACNkQ,EAAWlQ,EAAKqP,GAChBE,EAAMmB,UAEPS,SAAU,SAAoBnR,GAC7BuQ,EAAMvQ,GACNkQ,EAAWlQ,IAEZoR,SAAU,SAAoBpR,GAC7BkQ,EAAWlQ,EAAKqP,IAEjBgC,OAAQ,SAAoBrR,GAC3BkQ,EAAWlQ,OAIbiQ,EAAI3B,GAAG,WAAY,WAClBU,EAAQ5G,QAAQuI,EAAU,SAAyBW,GAClDA,MAGD7P,EAASuM,UAETzS,EAAGO,GAAW,KACdP,EAAK,KACLoV,EAAW,KACXlP,EAAW,KACX4H,EAAc,OAGf2F,EAAQ5G,SACP,OAAQ,WAAY,YAAa,SAAU,YAAa,QAAS,aAAc,SAC/E,UAAW,QAAS,QAAS,WAAY,WAAY,UACnD,SAAUvK,GACZ8S,EAASpS,KAAKgR,EAAMgC,OAAO,cAAgB1T,EAAM,SAAUkQ,GAC5C,SAAVA,IACHvS,EAAQqC,GAAQkQ,EAEX,WAAWpR,KAAKkB,IACpB4D,EAASqM,OAAOjQ,EAAMkQ","file":"ng-sortable.min.js","sourcesContent":["/**!\n * Sortable\n * @author\tRubaXa <trash@rubaxa.org>\n * @license MIT\n */\n\n\n(function (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 if (typeof Package !== \"undefined\") {\n\t\tSortable = factory(); // export for Meteor.js\n\t}\n\telse {\n\t\t/* jshint sub:true */\n\t\twindow[\"Sortable\"] = factory();\n\t}\n})(function () {\n\t\"use strict\";\n\n\tvar dragEl,\n\t\tparentEl,\n\t\tghostEl,\n\t\tcloneEl,\n\t\trootEl,\n\t\tnextEl,\n\n\t\tscrollEl,\n\t\tscrollParentEl,\n\n\t\tlastEl,\n\t\tlastCSS,\n\t\tlastParentCSS,\n\n\t\toldIndex,\n\t\tnewIndex,\n\n\t\tactiveGroup,\n\t\tautoScroll = {},\n\n\t\ttapEvt,\n\t\ttouchEvt,\n\n\t\tmoved,\n\n\t\t/** @const */\n\t\tRSPACE = /\\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\n\t\tsupportDraggable = !!('draggable' in document.createElement('div')),\n\t\tsupportCssPointerEvents = (function (el) {\n\t\t\tel = 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\n\t\tabs = Math.abs,\n\t\tslice = [].slice,\n\n\t\ttouchDragOverListeners = [],\n\n\t\t_autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) {\n\t\t\t// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n\t\t\tif (rootEl && options.scroll) {\n\t\t\t\tvar el,\n\t\t\t\t\trect,\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\tvx,\n\t\t\t\t\tvy\n\t\t\t\t;\n\n\t\t\t\t// Delect scrollEl\n\t\t\t\tif (scrollParentEl !== rootEl) {\n\t\t\t\t\tscrollEl = options.scroll;\n\t\t\t\t\tscrollParentEl = rootEl;\n\n\t\t\t\t\tif (scrollEl === true) {\n\t\t\t\t\t\tscrollEl = rootEl;\n\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((scrollEl.offsetWidth < scrollEl.scrollWidth) ||\n\t\t\t\t\t\t\t\t(scrollEl.offsetHeight < scrollEl.scrollHeight)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/* jshint boss:true */\n\t\t\t\t\t\t} while (scrollEl = scrollEl.parentNode);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (scrollEl) {\n\t\t\t\t\tel = scrollEl;\n\t\t\t\t\trect = scrollEl.getBoundingClientRect();\n\t\t\t\t\tvx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens);\n\t\t\t\t\tvy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens);\n\t\t\t\t}\n\n\n\t\t\t\tif (!(vx || vy)) {\n\t\t\t\t\tvx = (winWidth - x <= sens) - (x <= sens);\n\t\t\t\t\tvy = (winHeight - y <= sens) - (y <= sens);\n\n\t\t\t\t\t/* jshint expr:true */\n\t\t\t\t\t(vx || vy) && (el = win);\n\t\t\t\t}\n\n\n\t\t\t\tif (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) {\n\t\t\t\t\tautoScroll.el = el;\n\t\t\t\t\tautoScroll.vx = vx;\n\t\t\t\t\tautoScroll.vy = vy;\n\n\t\t\t\t\tclearInterval(autoScroll.pid);\n\n\t\t\t\t\tif (el) {\n\t\t\t\t\t\tautoScroll.pid = setInterval(function () {\n\t\t\t\t\t\t\tif (el === win) {\n\t\t\t\t\t\t\t\twin.scrollTo(win.pageXOffset + vx * speed, win.pageYOffset + vy * speed);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvy && (el.scrollTop += vy * speed);\n\t\t\t\t\t\t\t\tvx && (el.scrollLeft += vx * speed);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 24);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 30),\n\n\t\t_prepareGroup = function (options) {\n\t\t\tvar group = options.group;\n\n\t\t\tif (!group || typeof group != 'object') {\n\t\t\t\tgroup = options.group = {name: group};\n\t\t\t}\n\n\t\t\t['pull', 'put'].forEach(function (key) {\n\t\t\t\tif (!(key in group)) {\n\t\t\t\t\tgroup[key] = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\toptions.groups = ' ' + group.name + (group.put.join ? ' ' + group.put.join(' ') : '') + ' ';\n\t\t}\n\t;\n\n\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, and 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\n\t\t// Default options\n\t\tvar defaults = {\n\t\t\tgroup: Math.random(),\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\tdraggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*',\n\t\t\tghostClass: 'sortable-ghost',\n\t\t\tchosenClass: 'sortable-chosen',\n\t\t\tignore: 'a, img',\n\t\t\tfilter: null,\n\t\t\tanimation: 0,\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\tforceFallback: false,\n\t\t\tfallbackClass: 'sortable-fallback',\n\t\t\tfallbackOnBody: false\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) === '_') {\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\t_on(el, 'mousedown', this._onTapStart);\n\t\t_on(el, 'touchstart', this._onTapStart);\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\ttouchDragOverListeners.push(this._onDragOver);\n\n\t\t// Restore sorting\n\t\toptions.store && this.sort(options.store.get(this));\n\t}\n\n\n\tSortable.prototype = /** @lends Sortable.prototype */ {\n\t\tconstructor: Sortable,\n\n\t\t_onTapStart: function (/** Event|TouchEvent */evt) {\n\t\t\tvar _this = this,\n\t\t\t\tel = this.el,\n\t\t\t\toptions = this.options,\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 = target,\n\t\t\t\tfilter = options.filter;\n\n\n\t\t\tif (type === 'mousedown' && evt.button !== 0 || options.disabled) {\n\t\t\t\treturn; // only left button or enabled\n\t\t\t}\n\n\t\t\ttarget = _closest(target, options.draggable, el);\n\n\t\t\tif (!target) {\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\toldIndex = _index(target);\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, oldIndex);\n\t\t\t\t\tevt.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);\n\n\t\t\t\t\tif (criteria) {\n\t\t\t\t\t\t_dispatchEvent(_this, criteria, 'filter', target, el, oldIndex);\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\tevt.preventDefault();\n\t\t\t\t\treturn; // cancel dnd\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tif (options.handle && !_closest(originalTarget, options.handle, el)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// Prepare `dragstart`\n\t\t\tthis._prepareDragStart(evt, touch, target);\n\t\t},\n\n\t\t_prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) {\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\ttapEvt = evt;\n\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\tactiveGroup = options.group;\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 = true;\n\n\t\t\t\t\t// Chosen item\n\t\t\t\t\t_toggleClass(dragEl, _this.options.chosenClass, true);\n\n\t\t\t\t\t// Bind the events: dragstart/dragend\n\t\t\t\t\t_this._triggerDragStart(touch);\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\t_on(ownerDocument, 'mouseup', _this._onDrop);\n\t\t\t\t_on(ownerDocument, 'touchend', _this._onDrop);\n\t\t\t\t_on(ownerDocument, 'touchcancel', _this._onDrop);\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._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'touchmove', _this._disableDelayedDrag);\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_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._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'touchmove', this._disableDelayedDrag);\n\t\t},\n\n\t\t_triggerDragStart: function (/** Touch */touch) {\n\t\t\tif (touch) {\n\t\t\t\t// Touch device support\n\t\t\t\ttapEvt = {\n\t\t\t\t\ttarget: dragEl,\n\t\t\t\t\tclientX: touch.clientX,\n\t\t\t\t\tclientY: touch.clientY\n\t\t\t\t};\n\n\t\t\t\tthis._onDragStart(tapEvt, 'touch');\n\t\t\t}\n\t\t\telse if (!this.nativeDraggable) {\n\t\t\t\tthis._onDragStart(tapEvt, true);\n\t\t\t}\n\t\t\telse {\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\tdocument.selection.empty();\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 () {\n\t\t\tif (rootEl && dragEl) {\n\t\t\t\t// Apply effect\n\t\t\t\t_toggleClass(dragEl, this.options.ghostClass, true);\n\n\t\t\t\tSortable.active = this;\n\n\t\t\t\t// Drag start event\n\t\t\t\t_dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex);\n\t\t\t}\n\t\t},\n\n\t\t_emulateDragOver: function () {\n\t\t\tif (touchEvt) {\n\t\t\t\tif (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis._lastX = touchEvt.clientX;\n\t\t\t\tthis._lastY = touchEvt.clientY;\n\n\t\t\t\tif (!supportCssPointerEvents) {\n\t\t\t\t\t_css(ghostEl, 'display', 'none');\n\t\t\t\t}\n\n\t\t\t\tvar target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY),\n\t\t\t\t\tparent = target,\n\t\t\t\t\tgroupName = ' ' + this.options.group.name + '',\n\t\t\t\t\ti = touchDragOverListeners.length;\n\n\t\t\t\tif (parent) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (parent[expando] && parent[expando].options.groups.indexOf(groupName) > -1) {\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\ttouchDragOverListeners[i]({\n\t\t\t\t\t\t\t\t\tclientX: touchEvt.clientX,\n\t\t\t\t\t\t\t\t\tclientY: touchEvt.clientY,\n\t\t\t\t\t\t\t\t\ttarget: target,\n\t\t\t\t\t\t\t\t\trootEl: parent\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\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\n\t\t\t\tif (!supportCssPointerEvents) {\n\t\t\t\t\t_css(ghostEl, 'display', '');\n\t\t\t\t}\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\t// only set the status to dragging, when we are actually dragging\n\t\t\t\tif (!Sortable.active) {\n\t\t\t\t\tthis._dragStarted();\n\t\t\t\t}\n\n\t\t\t\t// as well as creating the ghost element on the document body\n\t\t\t\tthis._appendGhost();\n\n\t\t\t\tvar touch = evt.touches ? evt.touches[0] : evt,\n\t\t\t\t\tdx = touch.clientX - tapEvt.clientX,\n\t\t\t\t\tdy = touch.clientY - tapEvt.clientY,\n\t\t\t\t\ttranslate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)';\n\n\t\t\t\tmoved = true;\n\t\t\t\ttouchEvt = touch;\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.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 = dragEl.getBoundingClientRect(),\n\t\t\t\t\tcss = _css(dragEl),\n\t\t\t\t\toptions = this.options,\n\t\t\t\t\tghostRect;\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\n console.debug('rect.top = ' + rect.top);\n console.debug('css.marginTop = ' + css.marginTop);\n\t\t\t\t_css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10));\n\t\t\t\t_css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10));\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\n\t\t\t\t// Fixing dimensions.\n\t\t\t\tghostRect = ghostEl.getBoundingClientRect();\n\t\t\t\t_css(ghostEl, 'width', rect.width * 2 - ghostRect.width);\n\t\t\t\t_css(ghostEl, 'height', rect.height * 2 - ghostRect.height);\n\t\t\t}\n\t\t},\n\n\t\t_onDragStart: function (/**Event*/evt, /**boolean*/useFallback) {\n\t\t\tvar dataTransfer = evt.dataTransfer,\n\t\t\t\toptions = this.options;\n\n\t\t\tthis._offUpEvents();\n\n\t\t\tif (activeGroup.pull == 'clone') {\n\t\t\t\tcloneEl = dragEl.cloneNode(true);\n\t\t\t\t_css(cloneEl, 'display', 'none');\n\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\n\t\t\t}\n\n\t\t\tif (useFallback) {\n\n\t\t\t\tif (useFallback === 'touch') {\n\t\t\t\t\t// Bind touch events\n\t\t\t\t\t_on(document, 'touchmove', this._onTouchMove);\n\t\t\t\t\t_on(document, 'touchend', this._onDrop);\n\t\t\t\t\t_on(document, 'touchcancel', this._onDrop);\n\t\t\t\t} else {\n\t\t\t\t\t// Old brwoser\n\t\t\t\t\t_on(document, 'mousemove', this._onTouchMove);\n\t\t\t\t\t_on(document, 'mouseup', this._onDrop);\n\t\t\t\t}\n\n\t\t\t\tthis._loopId = setInterval(this._emulateDragOver, 50);\n\t\t\t}\n\t\t\telse {\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\t\t\t\tsetTimeout(this._dragStarted, 0);\n\t\t\t}\n\t\t},\n\n\t\t_onDragOver: function (/**Event*/evt) {\n\t\t\tvar el = this.el,\n\t\t\t\ttarget,\n\t\t\t\tdragRect,\n\t\t\t\trevert,\n\t\t\t\toptions = this.options,\n\t\t\t\tgroup = options.group,\n\t\t\t\tgroupPut = group.put,\n\t\t\t\tisOwner = (activeGroup === group),\n\t\t\t\tcanSort = options.sort;\n\n\t\t\tif (evt.preventDefault !== void 0) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\t!options.dragoverBubble && evt.stopPropagation();\n\t\t\t}\n\n\t\t\tmoved = true;\n\n\t\t\tif (activeGroup && !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: activeGroup.pull && groupPut && (\n\t\t\t\t\t\t(activeGroup.name === group.name) || // by Name\n\t\t\t\t\t\t(groupPut.indexOf && ~groupPut.indexOf(activeGroup.name)) // by Array\n\t\t\t\t\t)\n\t\t\t\t) &&\n\t\t\t\t(evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback\n\t\t\t) {\n\t\t\t\t// Smart auto-scrolling\n\t\t\t\t_autoScroll(evt, options, this.el);\n\n\t\t\t\tif (_silent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttarget = _closest(evt.target, options.draggable, el);\n\t\t\t\tdragRect = dragEl.getBoundingClientRect();\n\n\t\t\t\tif (revert) {\n\t\t\t\t\t_cloneHide(true);\n\n\t\t\t\t\tif (cloneEl || nextEl) {\n\t\t\t\t\t\trootEl.insertBefore(dragEl, cloneEl || nextEl);\n\t\t\t\t\t}\n\t\t\t\t\telse if (!canSort) {\n\t\t\t\t\t\trootEl.appendChild(dragEl);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\n\t\t\t\tif ((el.children.length === 0) || (el.children[0] === ghostEl) ||\n\t\t\t\t\t(el === evt.target) && (target = _ghostIsLast(el, evt))\n\t\t\t\t) {\n\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\tif (target.animated) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetRect = target.getBoundingClientRect();\n\t\t\t\t\t}\n\n\t\t\t\t\t_cloneHide(isOwner);\n\n\t\t\t\t\tif (_onMove(rootEl, el, dragEl, dragRect, target, targetRect) !== false) {\n\t\t\t\t\t\tif (!dragEl.contains(el)) {\n\t\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\t\tparentEl = el; // actualization\n\t\t\t\t\t\t}\n\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}\n\t\t\t\t}\n\t\t\t\telse if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) {\n\t\t\t\t\tif (lastEl !== target) {\n\t\t\t\t\t\tlastEl = target;\n\t\t\t\t\t\tlastCSS = _css(target);\n\t\t\t\t\t\tlastParentCSS = _css(target.parentNode);\n\t\t\t\t\t}\n\n\n\t\t\t\t\tvar targetRect = target.getBoundingClientRect(),\n\t\t\t\t\t\twidth = targetRect.right - targetRect.left,\n\t\t\t\t\t\theight = targetRect.bottom - targetRect.top,\n\t\t\t\t\t\tfloating = /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display)\n\t\t\t\t\t\t\t|| (lastParentCSS.display == 'flex' && lastParentCSS['flex-direction'].indexOf('row') === 0),\n\t\t\t\t\t\tisWide = (target.offsetWidth > dragEl.offsetWidth),\n\t\t\t\t\t\tisLong = (target.offsetHeight > dragEl.offsetHeight),\n\t\t\t\t\t\thalfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5,\n\t\t\t\t\t\tnextSibling = target.nextElementSibling,\n\t\t\t\t\t\tmoveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect),\n\t\t\t\t\t\tafter\n\t\t\t\t\t;\n\n\t\t\t\t\tif (moveVector !== false) {\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\t_cloneHide(isOwner);\n\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\t\t\t\t\t\telse if (floating) {\n\t\t\t\t\t\t\tvar elTop = dragEl.offsetTop,\n\t\t\t\t\t\t\t\ttgTop = target.offsetTop;\n\n\t\t\t\t\t\t\tif (elTop === tgTop) {\n\t\t\t\t\t\t\t\tafter = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tafter = tgTop > elTop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tafter = (nextSibling !== dragEl) && !isLong || halfway && isLong;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!dragEl.contains(el)) {\n\t\t\t\t\t\t\tif (after && !nextSibling) {\n\t\t\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n\t\t\t\t\t\t\t}\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\tthis._animate(dragRect, dragEl);\n\t\t\t\t\t\tthis._animate(targetRect, target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\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 = target.getBoundingClientRect();\n\n\t\t\t\t_css(target, 'transition', 'none');\n\t\t\t\t_css(target, 'transform', 'translate3d('\n\t\t\t\t\t+ (prevRect.left - currentRect.left) + 'px,'\n\t\t\t\t\t+ (prevRect.top - currentRect.top) + 'px,0)'\n\t\t\t\t);\n\n\t\t\t\ttarget.offsetWidth; // repaint\n\n\t\t\t\t_css(target, 'transition', 'all ' + ms + 'ms');\n\t\t\t\t_css(target, 'transform', 'translate3d(0,0,0)');\n\n\t\t\t\tclearTimeout(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(ownerDocument, 'mouseup', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchend', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchcancel', this._onDrop);\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\n\t\t\tclearInterval(this._loopId);\n\t\t\tclearInterval(autoScroll.pid);\n\t\t\tclearTimeout(this._dragStartTimer);\n\n\t\t\t// Unbind events\n\t\t\t_off(document, 'mousemove', this._onTouchMove);\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}\n\n\t\t\tthis._offUpEvents();\n\n\t\t\tif (evt) {\n\t\t\t\tif (moved) {\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t!options.dropBubble && evt.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tghostEl && ghostEl.parentNode.removeChild(ghostEl);\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\n\t\t\t\t\t// Remove class's\n\t\t\t\t\t_toggleClass(dragEl, this.options.ghostClass, false);\n\t\t\t\t\t_toggleClass(dragEl, this.options.chosenClass, false);\n\n\t\t\t\t\tif (rootEl !== parentEl) {\n\t\t\t\t\t\tnewIndex = _index(dragEl);\n\n\t\t\t\t\t\tif (newIndex >= 0) {\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, rootEl, oldIndex, newIndex);\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex);\n\n\t\t\t\t\t\t\t// Add event\n\t\t\t\t\t\t\t_dispatchEvent(null, parentEl, 'add', dragEl, rootEl, oldIndex, newIndex);\n\n\t\t\t\t\t\t\t// Remove event\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Remove clone\n\t\t\t\t\t\tcloneEl && cloneEl.parentNode.removeChild(cloneEl);\n\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);\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, rootEl, oldIndex, newIndex);\n\t\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex);\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\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, rootEl, oldIndex, newIndex);\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\t// Nulling\n\t\t\t\trootEl =\n\t\t\t\tdragEl =\n\t\t\t\tparentEl =\n\t\t\t\tghostEl =\n\t\t\t\tnextEl =\n\t\t\t\tcloneEl =\n\n\t\t\t\tscrollEl =\n\t\t\t\tscrollParentEl =\n\n\t\t\t\ttapEvt =\n\t\t\t\ttouchEvt =\n\n\t\t\t\tmoved =\n\t\t\t\tnewIndex =\n\n\t\t\t\tlastEl =\n\t\t\t\tlastCSS =\n\n\t\t\t\tactiveGroup =\n\t\t\t\tSortable.active = null;\n\t\t\t}\n\t\t},\n\n\n\t\thandleEvent: function (/**Event*/evt) {\n\t\t\tvar type = evt.type;\n\n\t\t\tif (type === 'dragover' || type === 'dragenter') {\n\t\t\t\tif (dragEl) {\n\t\t\t\t\tthis._onDragOver(evt);\n\t\t\t\t\t_globalDragOver(evt);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (type === 'drop' || type === 'dragend') {\n\t\t\t\tthis._onDrop(evt);\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)) {\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)) {\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(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);\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\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\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\ttouchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1);\n\n\t\t\tthis._onDrop();\n\n\t\t\tthis.el = el = null;\n\t\t}\n\t};\n\n\n\tfunction _cloneHide(state) {\n\t\tif (cloneEl && (cloneEl.state !== state)) {\n\t\t\t_css(cloneEl, 'display', state ? 'none' : '');\n\t\t\t!state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl);\n\t\t\tcloneEl.state = state;\n\t\t}\n\t}\n\n\n\tfunction _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) {\n\t\tif (el) {\n\t\t\tctx = ctx || document;\n\t\t\tselector = selector.split('.');\n\n\t\t\tvar tag = selector.shift().toUpperCase(),\n\t\t\t\tre = new RegExp('\\\\s(' + selector.join('|') + ')(?=\\\\s)', 'g');\n\n\t\t\tdo {\n\t\t\t\tif (\n\t\t\t\t\t(tag === '>*' && el.parentNode === ctx) || (\n\t\t\t\t\t\t(tag === '' || el.nodeName.toUpperCase() == tag) &&\n\t\t\t\t\t\t(!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (el !== ctx && (el = el.parentNode));\n\t\t}\n\n\t\treturn null;\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.preventDefault();\n\t}\n\n\n\tfunction _on(el, event, fn) {\n\t\tel.addEventListener(event, fn, false);\n\t}\n\n\n\tfunction _off(el, event, fn) {\n\t\tel.removeEventListener(event, fn, false);\n\t}\n\n\n\tfunction _toggleClass(el, name, state) {\n\t\tif (el) {\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(RSPACE, ' ').replace(' ' + name + ' ', ' ');\n\t\t\t\tel.className = (className + (state ? ' ' + name : '')).replace(RSPACE, ' ');\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)) {\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\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, fromEl, startIndex, newIndex) {\n\t\tvar evt = document.createEvent('Event'),\n\t\t\toptions = (sortable || rootEl[expando]).options,\n\t\t\tonName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n\n\t\tevt.initEvent(name, true, true);\n\n\t\tevt.to = 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\trootEl.dispatchEvent(evt);\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) {\n\t\tvar evt,\n\t\t\tsortable = fromEl[expando],\n\t\t\tonMoveFn = sortable.options.onMove,\n\t\t\tretVal;\n\n\t\tevt = document.createEvent('Event');\n\t\tevt.initEvent('move', true, true);\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 || toEl.getBoundingClientRect();\n\n\t\tfromEl.dispatchEvent(evt);\n\n\t\tif (onMoveFn) {\n\t\t\tretVal = onMoveFn.call(sortable, evt);\n\t\t}\n\n\t\treturn retVal;\n\t}\n\n\n\tfunction _disableDraggable(el) {\n\t\tel.draggable = false;\n\t}\n\n\n\tfunction _unsilent() {\n\t\t_silent = false;\n\t}\n\n\n\t/** @returns {HTMLElement|false} */\n\tfunction _ghostIsLast(el, evt) {\n\t\tvar lastEl = el.lastElementChild,\n\t\t\t\trect = lastEl.getBoundingClientRect();\n\n\t\treturn ((evt.clientY - (rect.top + rect.height) > 5) || (evt.clientX - (rect.right + rect.width) > 5)) && lastEl; // min delta\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\n\t * @param {HTMLElement} el\n\t * @return {number}\n\t */\n\tfunction _index(el) {\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') {\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t}\n\n\tfunction _throttle(callback, ms) {\n\t\tvar args, _this;\n\n\t\treturn function () {\n\t\t\tif (args === void 0) {\n\t\t\t\targs = arguments;\n\t\t\t\t_this = this;\n\n\t\t\t\tsetTimeout(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\targs = void 0;\n\t\t\t\t}, ms);\n\t\t\t}\n\t\t};\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\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);\n\t\t},\n\t\textend: _extend,\n\t\tthrottle: _throttle,\n\t\tclosest: _closest,\n\t\ttoggleClass: _toggleClass,\n\t\tindex: _index\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.4.2';\n\treturn Sortable;\n});\n","/**\n * @author RubaXa <trash@rubaxa.org>\n * @licence MIT\n */\n(function (factory) {\n\t'use strict';\n\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['angular', './Sortable'], factory);\n\t}\n\telse if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n\t\trequire('angular');\n\t\tfactory(angular, require('./Sortable'));\n\t\tmodule.exports = 'ng-sortable';\n\t}\n\telse if (window.angular && window.Sortable) {\n\t\tfactory(angular, Sortable);\n\t}\n})(function (angular, Sortable) {\n\t'use strict';\n\n\n\t/**\n\t * @typedef {Object} ngSortEvent\n\t * @property {*} model List item\n\t * @property {Object|Array} models List of items\n\t * @property {number} oldIndex before sort\n\t * @property {number} newIndex after sort\n\t */\n\n\tvar expando = 'Sortable:ng-sortable';\n\n\tangular.module('ng-sortable', [])\n\t\t.constant('ngSortableVersion', '0.4.0')\n\t\t.constant('ngSortableConfig', {})\n\t\t.directive('ngSortable', ['$parse', 'ngSortableConfig', function ($parse, ngSortableConfig) {\n\t\t\tvar removed,\n\t\t\t\tnextSibling,\n\t\t\t\tgetSourceFactory = function getSourceFactory(el, scope) {\n\t\t\t\t\tvar ngRepeat = [].filter.call(el.childNodes, function (node) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t(node.nodeType === 8) &&\n\t\t\t\t\t\t\t\t(node.nodeValue.indexOf('ngRepeat:') !== -1)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t})[0];\n\n\t\t\t\t\tif (!ngRepeat) {\n\t\t\t\t\t\t// Without ng-repeat\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// tests: http://jsbin.com/kosubutilo/1/edit?js,output\n\t\t\t\t\tngRepeat = ngRepeat.nodeValue.match(/ngRepeat:\\s*(?:\\(.*?,\\s*)?([^\\s)]+)[\\s)]+in\\s+([^\\s|]+)/);\n\n\t\t\t\t\tvar itemsExpr = $parse(ngRepeat[2]);\n\n\t\t\t\t\treturn function () {\n\t\t\t\t\t\treturn itemsExpr(scope.$parent) || [];\n\t\t\t\t\t};\n\t\t\t\t};\n\n\n\t\t\t// Export\n\t\t\treturn {\n\t\t\t\trestrict: 'AC',\n\t\t\t\tscope: { ngSortable: \"=?\" },\n\t\t\t\tlink: function (scope, $el) {\n\t\t\t\t\tvar el = $el[0],\n\t\t\t\t\t\toptions = angular.extend(scope.ngSortable || {}, ngSortableConfig),\n\t\t\t\t\t\twatchers = [],\n\t\t\t\t\t\tgetSource = getSourceFactory(el, scope),\n\t\t\t\t\t\tsortable\n\t\t\t\t\t;\n\n\t\t\t\t\tel[expando] = getSource;\n\n\t\t\t\t\tfunction _emitEvent(/**Event*/evt, /*Mixed*/item) {\n\t\t\t\t\t\tvar name = 'on' + evt.type.charAt(0).toUpperCase() + evt.type.substr(1);\n\t\t\t\t\t\tvar source = getSource();\n\n\t\t\t\t\t\t/* jshint expr:true */\n\t\t\t\t\t\toptions[name] && options[name]({\n\t\t\t\t\t\t\tmodel: item || source[evt.newIndex],\n\t\t\t\t\t\t\tmodels: source,\n\t\t\t\t\t\t\toldIndex: evt.oldIndex,\n\t\t\t\t\t\t\tnewIndex: evt.newIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\n\t\t\t\t\tfunction _sync(/**Event*/evt) {\n\t\t\t\t\t\tvar items = getSource();\n\n\t\t\t\t\t\tif (!items) {\n\t\t\t\t\t\t\t// Without ng-repeat\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar oldIndex = evt.oldIndex,\n\t\t\t\t\t\t\tnewIndex = evt.newIndex;\n\n\t\t\t\t\t\tif (el !== evt.from) {\n\t\t\t\t\t\t\tvar prevItems = evt.from[expando]();\n\n\t\t\t\t\t\t\tremoved = prevItems[oldIndex];\n\n\t\t\t\t\t\t\tif (evt.clone) {\n\t\t\t\t\t\t\t\tremoved = angular.copy(removed);\n\t\t\t\t\t\t\t\tprevItems.splice(Sortable.utils.index(evt.clone), 0, prevItems.splice(oldIndex, 1)[0]);\n\t\t\t\t\t\t\t\tevt.from.removeChild(evt.clone);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tprevItems.splice(oldIndex, 1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titems.splice(newIndex, 0, removed);\n\n\t\t\t\t\t\t\tevt.from.insertBefore(evt.item, nextSibling); // revert element\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\titems.splice(newIndex, 0, items.splice(oldIndex, 1)[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t}\n\n\n\t\t\t\t\tsortable = Sortable.create(el, Object.keys(options).reduce(function (opts, name) {\n\t\t\t\t\t\topts[name] = opts[name] || options[name];\n\t\t\t\t\t\treturn opts;\n\t\t\t\t\t}, {\n\t\t\t\t\t\tonStart: function (/**Event*/evt) {\n\t\t\t\t\t\t\tnextSibling = evt.item.nextSibling;\n\t\t\t\t\t\t\t_emitEvent(evt);\n\t\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonEnd: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_emitEvent(evt, removed);\n\t\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonAdd: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_sync(evt);\n\t\t\t\t\t\t\t_emitEvent(evt, removed);\n\t\t\t\t\t\t\tscope.$apply();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonUpdate: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_sync(evt);\n\t\t\t\t\t\t\t_emitEvent(evt);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonRemove: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_emitEvent(evt, removed);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonSort: function (/**Event*/evt) {\n\t\t\t\t\t\t\t_emitEvent(evt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\n\t\t\t\t\t$el.on('$destroy', function () {\n\t\t\t\t\t\tangular.forEach(watchers, function (/** Function */unwatch) {\n\t\t\t\t\t\t\tunwatch();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tsortable.destroy();\n\n\t\t\t\t\t\tel[expando] = null;\n\t\t\t\t\t\tel = null;\n\t\t\t\t\t\twatchers = null;\n\t\t\t\t\t\tsortable = null;\n\t\t\t\t\t\tnextSibling = null;\n\t\t\t\t\t});\n\n\t\t\t\t\tangular.forEach([\n\t\t\t\t\t\t'sort', 'disabled', 'draggable', 'handle', 'animation', 'group', 'ghostClass', 'filter',\n\t\t\t\t\t\t'onStart', 'onEnd', 'onAdd', 'onUpdate', 'onRemove', 'onSort'\n\t\t\t\t\t], function (name) {\n\t\t\t\t\t\twatchers.push(scope.$watch('ngSortable.' + name, function (value) {\n\t\t\t\t\t\t\tif (value !== void 0) {\n\t\t\t\t\t\t\t\toptions[name] = value;\n\n\t\t\t\t\t\t\t\tif (!/^on[A-Z]/.test(name)) {\n\t\t\t\t\t\t\t\t\tsortable.option(name, value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\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}]);\n});\n"]}