/*! Scroller 3.0.0 for DataTables
 * Copyright (c) SpryMedia Ltd - datatables.net/license
 */
import DataTable,{util,Dom,Api}from"datatables.net";if(!DataTable||!DataTable.versionCheck||!DataTable.versionCheck("3"))throw"Warning: AutoFill requires DataTables 3 or greater";class Scroller{measure(s=!0){this.s.autoHeight&&this._calcRowHeight();var t=this.s.heights,o=(t.row&&(t.viewport=this._parseHeight(this.dom.scroller.css("max-height")),this.s.viewportRows=Math.floor(t.viewport/t.row)+1,this.s.dt.pageLength=this.s.viewportRows*this.c.displayBuffer),this.dom.label);t.labelHeight=o.css("display","block").height("outer"),o.css("display",""),t.xbar=this.dom.scroller.get(0).offsetHeight-this.dom.scroller.get(0).clientHeight,void 0!==s&&!s||this.s.dtApi.draw(!1)}pageInfo(){var s=this.dom.scroller.scrollTop(),t=this.s.dtApi.page.info().recordsDisplay,o=Math.ceil(this.pixelsToRow(s+this.s.heights.viewport,!1,this.s.ani));return{start:Math.floor(this.pixelsToRow(s,!1,this.s.ani)),end:t<o?t-1:o-1}}pixelsToRow(s,t=0,o=!1){s-=this.s.baseScrollTop,o=o?(this._domain("physicalToVirtual",this.s.baseScrollTop)+s)/this.s.heights.row:s/this.s.heights.row+this.s.baseRowTop;return o}rowToPixels(s,t,o){s-=this.s.baseRowTop,o=o?this._domain("virtualToPhysical",this.s.baseScrollTop):this.s.baseScrollTop;return o+=s*this.s.heights.row,t||void 0===t?Math.floor(o):o}scrollToRow(s,t=0){var o=this.rowToPixels(s),e=this.s.dtApi.page.info(),i=s-(this.c.displayBuffer-1)/2*this.s.viewportRows;i<0&&(i=0),(o>this.s.redrawBottom||o<this.s.redrawTop)&&e.start!==i&&(o=this._domain("virtualToPhysical",s*this.s.heights.row),this.s.redrawTop<o)&&o<this.s.redrawBottom&&(this.s.forceReposition=!0),this.dom.scroller.scrollTop(o)}constructor(s,t){void 0===t&&(t={});s=new DataTable.Api(s),this.s={ani:!1,dt:s.settings()[0],dtApi:s,tableTop:0,tableBottom:0,redrawTop:0,redrawBottom:0,autoHeight:!0,viewportRows:0,stateTO:null,stateSaveThrottle:function(){},drawTO:null,heights:{jump:0,page:0,virtual:0,scroll:0,row:0,viewport:0,labelHeight:0,xbar:0},topRowFloat:0,scrollDrawDiff:null,labelVisible:!1,forceReposition:!1,baseRowTop:0,baseScrollTop:0,mousedown:!1,lastScrollTop:0,ignoreScroll:!1,scrollType:"cont",skip:!1,targetTop:0},this.c=util.object.assign({},Scroller.defaults,t),s=Dom.s(this.s.dtApi.table().node().parentNode);this.dom={force:Dom.c("div"),label:Dom.c("div").classAdd("dts_label").text("0"),scroller:s,table:s.children("table").eq(0)},this.s.dt.scroller||(this.s.dt.scroller=this)._init()}_init(){var e=this,s=this.s.dtApi;if(!this.s.dt.features.paging)throw new Error("Pagination must be enabled for Scroller to operate");this.dom.force.css({position:"relative",top:"0",left:"0",width:"1px"}),this.dom.scroller.append(this.dom.force).css("position","relative"),this.dom.table.css({position:"absolute",top:"0",left:"0"}),Dom.s(s.table().container()).classAdd("dts"),this.dom.label.appendTo(this.dom.scroller),"auto"==this.c.rowHeight?this.s.autoHeight=!0:this.s.heights.row=this._parseHeight(this.c.rowHeight),this.s.ignoreScroll=!0,this.dom.scroller.on("scroll.dt-scroller",function(s){e._scroll.call(e)}),this.dom.scroller.on("touchstart.dt-scroller",function(){e._scroll.call(e)}),this.dom.scroller.on("mousedown.dt-scroller",function(){e.s.mousedown=!0}).on("mouseup.dt-scroller",function(){e.s.labelVisible=!1,e.s.mousedown=!1,e.dom.label.css("display","none")}),Dom.w.on("resize.dt-scroller",function(){e.measure(!1),e._info()});var i=!0,r=s.state.loaded();s.on("stateSaveParams.scroller",function(s,t,o){i&&r?(o.scroller=r.scroller,i=!1,o.scroller&&(e.s.lastScrollTop=o.scroller.scrollTop)):o.scroller={topRow:e.s.topRowFloat,baseRowTop:e.s.baseRowTop}}),s.on("stateLoadParams.scroller",function(s,t,o){void 0!==o.scroller&&e.scrollToRow(o.scroller.topRow)}),this.measure(!1),r&&r.scroller&&(this.s.topRowFloat=r.scroller.topRow,this.s.baseRowTop=r.scroller.baseRowTop,this.s.baseScrollTop=this.s.baseRowTop*this.s.heights.row,r.scroller.scrollTop=this._domain("physicalToVirtual",this.s.topRowFloat*this.s.heights.row)),e.s.stateSaveThrottle=DataTable.util.throttle(function(){e.s.dtApi.state.save()},500),s.on("init.scroller",function(){e.measure(!1),e.s.scrollType="jump",e._draw(),s.on("draw.scroller",function(){e._draw()})}),s.on("preDraw.dt.scroller",function(){e._scrollForce()}),s.on("destroy.scroller",function(){Dom.w.off("resize.dt-scroller"),e.dom.scroller.off(".dt-scroller"),e.dom.table.off(".scroller"),Dom.s(e.s.dtApi.table().container()).classRemove("dts"),e.dom.table.css({position:"",top:"",left:""})})}_calcRowHeight(){var s=this.s.dt,t=this.dom.table,o=t.clone(!1),e=Dom.c("tbody").appendTo(o),s=s.classes,s={container:s.container,scroller:s.scrolling.container,body:s.scrolling.body},i=Dom.c("div").classAdd(s.container).classAdd("DTS").append(Dom.c("div").classAdd(s.scroller).append(Dom.c("div").classAdd(s.body))),r=(t.children("tbody > tr:nth-child(-n+3)").clone().appendTo(e),e.find("tr").count());if(1===r)e.prepend(Dom.c("tr").append(Dom.c("td").html("&#160;"))),e.prepend(Dom.c("tr").append(Dom.c("td").html("&#160;")));else for(;r<3;r++)e.prepend(Dom.c("tr").append(Dom.c("td").html("&#160;")));i.find("div."+s.body).append(o);s=t.parent();s.isVisible()||(s=Dom.s("body")),i.find("input").attrRemove("name"),i.appendTo(s),this.s.heights.row=e.find("tr").eq(1).height("outer"),i.remove()}_draw(){var s=this.s.dtApi.page.info(),t=this,o=this.s.heights,e=this.dom.scroller.scrollTop(),i=this.dom.table.height(),r=s.start,l=s.length,s=s.recordsDisplay,a=e+o.viewport,h=(this.s.skip=!0,!this.s.dt.wasOrdered&&!this.s.dt.wasFiltered||0!==r||this.s.dt.drawHold||(this.s.topRowFloat=0),e="jump"===this.s.scrollType?this._domain("virtualToPhysical",this.s.topRowFloat*o.row):e,this.s.baseScrollTop=e,this.s.baseRowTop=this.s.topRowFloat,e-(this.s.topRowFloat-r)*o.row),r=(0===r?h=0:s<=r+l?h=o.scroll-i:h+i<a&&(this.s.baseScrollTop+=1+((s=a-i)-h),h=s),this.dom.table.css("top",h+"px"),this.s.tableTop=h,this.s.tableBottom=i+this.s.tableTop,(e-this.s.tableTop)*this.c.boundaryScale);this.s.redrawTop=e-r,this.s.redrawBottom=e+r>o.scroll-o.viewport-o.row?o.scroll-o.viewport-o.row:e+r,this.s.skip=!1,t.s.ignoreScroll&&(this.s.dt.features.stateSave&&null!==this.s.dt.stateLoaded&&void 0!==this.s.dt.stateLoaded.scroller?((l=!(!t.s.dt.ajax||this.s.dt.features.serverSide))&&2<=this.s.dt.drawCount||!l&&1<=this.s.dt.drawCount)&&setTimeout(function(){t.dom.scroller.scrollTop(t.s.dt.stateLoaded.scroller.scrollTop),setTimeout(function(){t.s.ignoreScroll=!1},0)},0):t.s.ignoreScroll=!1),this.s.dt.features.info&&setTimeout(function(){t._info.call(t)},0),this.dom.table.trigger("position.dts.dt",!1,[h])}_domain(s,t){var o,e=this.s.heights,i=1e4;return e.virtual===e.scroll||t<i?t:"virtualToPhysical"===s&&t>=e.virtual-i?(o=e.virtual-t,e.scroll-o):"physicalToVirtual"===s&&t>=e.scroll-i?(o=e.scroll-t,e.virtual-o):(e=i-(o=(e.virtual-i-i)/(e.scroll-i-i))*i,"virtualToPhysical"===s?(t-e)/o:o*t+e)}_info(){var s=this.s.dt,t=this.s.dtApi,o=s.language,e=t.page.info(),i=e.recordsDisplay,e=e.recordsTotal,r=(this.s.lastScrollTop-this.s.baseScrollTop)/this.s.heights.row,r=Math.floor(this.s.baseRowTop+r)+1,l=(r="jump"===this.s.scrollType?Math.floor(this.s.topRowFloat)+1:r)+Math.floor(this.s.heights.viewport/this.s.heights.row),l=i<l?i:l,a=0===i&&i==e?o.infoEmpty+o.infoPostFix:0===i?o.infoEmpty+" "+o.infoFiltered+o.infoPostFix:i==e?o.info+o.infoPostFix:o.info+" "+o.infoFiltered+o.infoPostFix,o=(a=this._macros(a,r,l,e,i),o.infoCallback);o&&(a=o.call(s.instance,s,r,l,e,i,a)),Dom.s(t.table().container()).find("div.dt-info").each(function(s){Dom.s(s).html(a),t.trigger("info",[t.settings()[0],s,a])})}_macros(s,t,o,e,i){var r=this.s.dtApi,l=this.s.dt,a=l.formatNumber;return s.replace(/_START_/g,a.call(l,t,l)).replace(/_END_/g,a.call(l,o,l)).replace(/_MAX_/g,a.call(l,e,l)).replace(/_TOTAL_/g,a.call(l,i,l)).replace(/_ENTRIES_/g,r.i18n("entries","")).replace(/_ENTRIES-MAX_/g,r.i18n("entries","",e)).replace(/_ENTRIES-TOTAL_/g,r.i18n("entries","",i))}_parseHeight(s){var t,o;return"number"==typeof s?s:null!==(s=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))(px|em|rem|vh)$/.exec(s))&&(o=parseFloat(s[1]),"px"===(s=s[2])?t=o:"vh"===s?t=o/100*Dom.w.height():"rem"===s?t=o*parseFloat(Dom.s(":root").css("font-size")):"em"===s&&(t=o*parseFloat(Dom.s("body").css("font-size"))),t)||0}_scroll(){var s,t=this,o=this.s.heights,e=this.dom.scroller.scrollTop(),i=this.s.dtApi.page.info();this.s.skip||this.s.ignoreScroll||e!==this.s.lastScrollTop&&(this.s.dt.wasFiltered||this.s.dt.wasOrdered?this.s.lastScrollTop=0:(this.s.stateTO&&clearTimeout(this.s.stateTO),this.s.stateTO=setTimeout(function(){t.s.dtApi.state.save(),t._info()},250),this.s.scrollType=Math.abs(e-this.s.lastScrollTop)>o.viewport?"jump":"cont",this.s.topRowFloat="cont"===this.s.scrollType?this.pixelsToRow(e,!1,!1):this._domain("physicalToVirtual",e)/o.row,this.s.topRowFloat<0&&(this.s.topRowFloat=0),this.s.forceReposition||e<this.s.redrawTop||e>this.s.redrawBottom?(s=Math.ceil((this.c.displayBuffer-1)/2*this.s.viewportRows),s=Math.floor(this.s.topRowFloat)-s,this.s.forceReposition=!1,s<=0?s=0:s+i.length>i.recordsDisplay?(s=i.recordsDisplay-i.length)<0&&(s=0):s%2!=0&&s++,(this.s.targetTop=s)!=i.start&&(this.s.tableTop=this.dom.table.offset().top,this.s.tableBottom=this.dom.table.height()+this.s.tableTop,s=function(){t.s.dt.displayStart=t.s.targetTop,t.s.dtApi.draw("page")},this.s.dt.features.serverSide?(this.s.forceReposition=!0,this.dom.table.trigger("scroller-will-draw.dt"),t.s.dtApi.processing(!0),this.s.drawTO&&clearTimeout(this.s.drawTO),this.s.drawTO=setTimeout(s,this.c.serverWait)):s())):this.s.topRowFloat=this.pixelsToRow(e,!1,!0),this._info(),this.s.lastScrollTop=e,this.s.stateSaveThrottle(),"jump"===this.s.scrollType&&this.s.mousedown&&(this.s.labelVisible=!0),this.s.labelVisible&&(i=(o.viewport-o.labelHeight-o.xbar)/o.scroll,this.dom.label.html(this.s.dt.formatNumber(Math.floor(this.s.topRowFloat)+1,this.s.dt)).css("top",e+e*i+"px").css("display","block"))))}_scrollForce(){var s=this.s.heights;s.virtual=s.row*this.s.dtApi.page.info().recordsDisplay,s.scroll=s.virtual,1e6<s.scroll&&(s.scroll=1e6),this.dom.force.css("height",s.scroll>this.s.heights.row?s.scroll+"px":this.s.heights.row+"px")}}Scroller.defaults={boundaryScale:.5,displayBuffer:9,rowHeight:"auto",serverWait:200},Scroller.version="3.0.0",DataTable.Scroller=Scroller,Api.register("scroller()",function(){return this.inst(this.context)}),Api.register("scroller().rowToPixels()",function(s,t,o){var e=this.context;if(e.length&&e[0].scroller)return e[0].scroller.rowToPixels(s,t,o)}),Api.register("scroller().pixelsToRow()",function(s,t,o){var e=this.context;if(e.length&&e[0].scroller)return e[0].scroller.pixelsToRow(s,t,o)}),["scroller().scrollToRow()","scroller.toPosition()"].forEach(s=>{Api.register(s,function(t,o){return this.iterator("table",function(s){s.scroller&&s.scroller.scrollToRow(t,o)}),this})}),Api.register("row().scrollTo()",function(o){var e=this;return this.iterator("row",function(s,t){s.scroller&&(t=e.rows({order:"applied",search:"applied"}).indexes().indexOf(t),s.scroller.scrollToRow(t,o))}),this}),Api.register("scroller.measure()",function(t){return this.iterator("table",function(s){s.scroller&&s.scroller.measure(t)}),this}),Api.register("scroller.page()",function(){var s=this.context;if(s.length&&s[0].scroller)return s[0].scroller.pageInfo()}),Dom.s(document).on("preInit.dt.dtscroller",function(s,t){var o,e;"dt"===s.namespace&&(s=t.init.scroller,o=DataTable.defaults.scroller,s||o)&&(e={},util.is.plainObject(o)&&util.object.assign(e,o),util.is.plainObject(s)&&util.object.assign(e,s),!1!==s)&&new Scroller(t,e)});export default DataTable;