/*! RowReorder 2.0.0 for DataTables
 * Copyright (c) SpryMedia Ltd - datatables.net/license
 */
import DataTable,{util,Dom,Api}from"datatables.net";if(!DataTable||!DataTable.versionCheck("3"))throw"DataTables RowReorder requires DataTables 3 or newer";class RowReorder{constructor(t,e={}){var o=DataTable.defaults.rowReorder,o=(this.c=util.object.assign({},util.is.plainObject(o)?o:{},RowReorder.defaults,e),this.s={bodyArea:{bottom:0,left:0,right:0,top:0},bodyTop:0,dt:new DataTable.Api(t),getDataFn:DataTable.util.get(this.c.dataSrc),middles:[],scroll:{windowHeight:0,windowWidth:0,dtTop:null,dtLeft:null,dtHeight:null,dtWidth:null},scrollInterval:null,setDataFn:DataTable.util.set(this.c.dataSrc),start:{top:0,left:0,offsetTop:0,offsetLeft:0,nodes:[],rowIndex:0},windowHeight:0,documentOuterHeight:0,domCloneOuterHeight:0,dropAllowed:!0,lastInsert:0},this.dom={clone:null,cloneParent:null,dtScroll:Dom.s(this.s.dt.table().container()).find("div.dt-scroll-body"),target:new Dom},this.s.dt.settings()[0]);o.rowreorder||(this.dom.dtScroll.count()||(this.dom.dtScroll=Dom.s(this.s.dt.table().body())),(o.rowreorder=this)._init())}_init(){var r=this,s=this.s.dt,t=Dom.s(s.table().node());"static"===t.css("position")&&t.css("position","relative"),Dom.s(s.table().container()).on("mousedown.rowReorder touchstart.rowReorder",this.c.selector,function(t){var e,o;if(r.c.enable)return!!Dom.s(t.target).filter(r.c.excludedChildren).count()||(e=Dom.s(this).closest("tr"),(o=s.row(e)).any()?(r._emitEvent("pre-row-reorder",[{node:o.node(),index:o.index()}]),r._mouseDown(t,e),!1):void 0)}),s.on("destroy.rowReorder",function(){Dom.s(s.table().container()).off(".rowReorder"),s.off(".rowReorder")}),this._keyup=this._keyup.bind(this)}_cachePositions(){var t=this.s.dt,o=Dom.s(t.table().node()).find("thead").height("outer"),e=Dom.s(t.rows({page:"current"}).nodes().toArray()).mapTo(t=>{var e=Dom.s(t).position().top-o;return(e+e+Dom.s(t).height("outer"))/2});this.s.middles=e,this.s.bodyTop=Dom.s(t.table().body()).offset().top,this.s.windowHeight=Dom.w.height(),this.s.documentOuterHeight=document.documentElement.offsetHeight,this.s.bodyArea=this._calcBodyArea()}_clone(t){var e=this.s.dt,e=Dom.s(e.table().node()).clone(!1).classAdd("dt-rowReorder-float").append(Dom.c("tbody").append(t.clone(!0))),o=t.width("outer"),r=t.height("outer"),s=Dom.s(this.s.dt.table().node()).parent(),i=s.width(),s=s.scrollLeft(),n=t.children().mapTo(t=>Dom.s(t).width()),t=(e.width(o).height(r).find("tr").children().each(function(t,e){t.style.width=n[e]+"px"}),Dom.c("div").classAdd("dt-rowReorder-float-parent").width(i).append(e).appendTo("body").scrollLeft(s));this.dom.clone=e,this.dom.cloneParent=t,this.s.domCloneOuterHeight=e.height("outer")}_clonePosition(t){var e=this.s.start,o=this._eventToPage(t,"Y")-e.top,t=this._eventToPage(t,"X")-e.left,r=this.c.snapX,o=o+e.offsetTop;this.dom.cloneParent&&(r=!0===r?e.offsetLeft:"number"==typeof r?e.offsetLeft+r:t+e.offsetLeft+this.dom.cloneParent.scrollLeft(),o<0?o=0:o+this.s.domCloneOuterHeight>this.s.documentOuterHeight&&(o=this.s.documentOuterHeight-this.s.domCloneOuterHeight),this.dom.cloneParent.css({top:o+"px",left:r+"px"}))}_emitEvent(t,e){return this.s.dt.trigger(t,e)}_eventToPage(t,e){return(-1!==t.type.indexOf("touch")?t.touches[0]:t)["page"+e]}_mouseDown(t,e){var o=this,r=this.s.dt,s=this.s.start,i=this.c.cancelable,n=e.offset(),n=(s.top=this._eventToPage(t,"Y"),s.left=this._eventToPage(t,"X"),s.offsetTop=n.top,s.offsetLeft=n.left,s.nodes=Dom.s(r.rows({page:"current"}).nodes().toArray()).get(),this._cachePositions(),this._clone(e),this._clonePosition(t),this._eventToPage(t,"Y")-this.s.bodyTop),r=(s.rowIndex=this._calcRowIndexByPos(n),(this.dom.target=e).classAdd("dt-rowReorder-moving"),Dom.s(document).on("mouseup.rowReorder touchend.rowReorder",function(t){o._mouseUp(t)}).on("mousemove.rowReorder touchmove.rowReorder",function(t){o._mouseMove(t)}),window.innerWidth===document.body.clientWidth&&Dom.s(document.body).classAdd("dt-rowReorder-noOverflow"),this.dom.dtScroll);this.s.scroll={windowHeight:Dom.w.height(),windowWidth:Dom.w.width(),dtTop:r.count()?r.offset().top:null,dtLeft:r.count()?r.offset().left:null,dtHeight:r.count()?r.height("outer"):null,dtWidth:r.count()?r.width("outer"):null},i&&Dom.s(document).on("keyup",this._keyup)}_mouseMove(t){this._clonePosition(t);for(var e,o,r=this.s.start,s=this.c.cancelable,i=(s&&(e=this.s.bodyArea,o=this._calcCloneParentArea(),this.s.dropAllowed=this._rectanglesIntersect(e,o),null!=(e=this.dom.cloneParent))&&e.classToggle("drop-not-allowed",!this.s.dropAllowed),this._eventToPage(t,"Y")-this.s.bodyTop),n=this.s.middles,l=null,d=0,a=n.length;d<a;d++)if(i<n[d]){l=d;break}null===l&&(l=n.length),s&&(this.s.dropAllowed||(l=r.rowIndex>this.s.lastInsert?r.rowIndex+1:r.rowIndex),this.dom.target.classToggle("dt-rowReorder-moving",this.s.dropAllowed)),this._moveTargetIntoPosition(l),this._shiftScroll(t)}_mouseUp(t){var e=this,o=this.s.dt,r=this.c.dataSrc;if(this.s.dropAllowed){for(var s,i,n,l=this.s.start.nodes,d=Dom.s(o.rows({page:"current"}).nodes().toArray()).sort().get(),a={},c=[],h=[],u=this.s.getDataFn,m=this.s.setDataFn,w=0,f=l.length;w<f;w++)l[w]!==d[w]&&(s=o.row(d[w]).id(),i=o.row(d[w]).data(),n=o.row(l[w]).data(),s&&(a[s]=u(n)),c.push({node:d[w],oldData:u(i),newData:u(n),newPosition:w,oldPosition:l.indexOf(d[w])}),h.push(d[w]));var p,g=[c,{dataSrc:r,nodes:h,values:a,triggerRow:o.row(this.dom.target),originalEvent:t}];this._emitEvent("row-reorder",g).includes(!1)?e._cancel():(this._cleanupDragging(),p=function(){if(e.c.update){for(w=0,f=c.length;w<f;w++){var t=o.row(c[w].node).data();m(t,c[w].newData),o.columns().every(function(){this.dataSrc()===r&&o.cell(c[w].node,this.index()).invalidate("data")})}e._emitEvent("row-reordered",g),o.draw(!1)}},this.c.editor?(this.c.enable=!1,this.c.editor.edit(h,!1,util.object.assign({submit:"changed"},this.c.formOptions)).multiSet(r,a).one("preSubmitCancelled.rowReorder",function(){e.c.enable=!0,e.c.editor.off(".rowReorder"),o.draw(!1)}).one("submitUnsuccessful.rowReorder",function(){o.draw(!1)}).one("submitSuccess.rowReorder",function(){p()}).one("submitComplete",function(){e.c.enable=!0,e.c.editor.off(".rowReorder")}).submit()):p())}else e._cancel()}_moveTargetIntoPosition(t){var e,o,r=this.s.dt;null!==this.s.lastInsert&&this.s.lastInsert===t||(e=Dom.s(r.rows({page:"current"}).nodes().toArray()).get(),o="",o=t>this.s.lastInsert?(this.dom.target.insertAfter(e[t-1]),"after"):(this.dom.target.insertBefore(e[t]),"before"),this._cachePositions(),this.s.lastInsert=t,this._emitEvent("row-reorder-changed",[{insertPlacement:o,insertPoint:t,row:r.row(this.dom.target)}]))}_cleanupDragging(){var t=this.c.cancelable;this.dom.clone.remove(),this.dom.cloneParent.remove(),this.dom.clone=null,this.dom.cloneParent=null,this.dom.target.classRemove("dt-rowReorder-moving"),Dom.s(document).off(".rowReorder"),Dom.s(document.body).classRemove("dt-rowReorder-noOverflow"),clearInterval(this.s.scrollInterval),this.s.scrollInterval=null,t&&Dom.s(document).off("keyup",this._keyup)}_shiftScroll(t){var e,o,r=this,s=this.s.scroll,i=!1,n=t.pageY-document.body.scrollTop;n<Dom.w.scrollTop()+65?e=-5:n>s.windowHeight+Dom.w.scrollTop()-65&&(e=5),null!==s.dtTop&&t.pageY<s.dtTop+65?o=-5:null!==s.dtTop&&t.pageY>s.dtTop+s.dtHeight-65&&(o=5),e||o?(s.windowVert=e,s.dtVert=o,i=!0):this.s.scrollInterval&&(clearInterval(this.s.scrollInterval),this.s.scrollInterval=null),!this.s.scrollInterval&&i&&(this.s.scrollInterval=setInterval(function(){var t;s.windowVert&&(t=Dom.w.scrollTop(),Dom.w.scrollTop(t+s.windowVert),t!==Dom.w.scrollTop())&&r.dom.cloneParent&&(t=parseFloat(r.dom.cloneParent.css("top")),r.dom.cloneParent.css("top",t+s.windowVert+"px")),s.dtVert&&(t=r.dom.dtScroll.get(0),s.dtVert)&&(t.scrollTop+=s.dtVert)},20))}_calcBodyArea(){var t=this.s.dt,t=Dom.s(t.table().body()),e=t.offset();return{left:e.left,top:e.top,right:e.left+t.width(),bottom:e.top+t.height()}}_calcCloneParentArea(){var t,e=this.dom.cloneParent;return e?{left:(t=e.offset()).left,top:t.top,right:t.left+e.width(),bottom:t.top+e.height()}:{left:0,top:0,right:0,bottom:0}}_rectanglesIntersect(t,e){return!(t.left>=e.right||e.left>=t.right||t.top>=e.bottom||e.top>=t.bottom)}_calcRowIndexByPos(r){var t=this.s.dt,e=Dom.s(t.rows({page:"current"}).nodes().toArray()).get(),s=-1,i=Dom.s(t.table().node()).find("thead").height("outer");return e.forEach((t,e)=>{var o=Dom.s(t).position().top-i,t=o+Dom.s(t).height("outer");o<=r&&r<=t&&(s=e)}),s}_keyup(t){this.c.cancelable&&27===t.which&&(t.preventDefault(),this._cancel())}_cancel(){var t=this.s.start,t=t.rowIndex>this.s.lastInsert?t.rowIndex+1:t.rowIndex;this._moveTargetIntoPosition(t),this._cleanupDragging(),this._emitEvent("row-reorder-canceled",[this.s.start.rowIndex])}}RowReorder.defaults={dataSrc:0,editor:null,enable:!0,formOptions:{},selector:"td:first-child",snapX:!1,update:!0,excludedChildren:"a",cancelable:!1},RowReorder.version="2.0.0",Api.register("rowReorder()",function(){return this}),Api.register("rowReorder.enable()",function(e){return void 0===e&&(e=!0),this.iterator("table",function(t){t.rowreorder&&(t.rowreorder.c.enable=e)})}),Api.register("rowReorder.disable()",function(){return this.iterator("table",function(t){t.rowreorder&&(t.rowreorder.c.enable=!1)})}),DataTable.RowReorder=RowReorder,Dom.s(document).on("init.dt.dtr",function(t,e,o){var r,s;"dt"===t.namespace&&(t=e.init.rowReorder,s=DataTable.defaults.rowReorder,t||s)&&(r={},util.is.plainObject(s)&&util.object.assign(r,s),util.is.plainObject(t)&&util.object.assign(r,t),!1!==t)&&(s=new DataTable.Api(e),new RowReorder(s,r))});export default DataTable;