datatables.net-colreorder
Version:
ColReorder for DataTables
4 lines • 11.2 kB
JavaScript
/*! ColReorder 3.0.0 for DataTables
* Copyright (c) SpryMedia Ltd - datatables.net/license
*/
(t=>{var r;"function"==typeof define&&define.amd?define(["datatables.net"],function(e){return t(window,document,e)}):"object"==typeof exports?(r=function(e){e.DataTable||require("datatables.net")(e)},"undefined"==typeof window?module.exports=function(e){return e=e||window,r(e),t(0,e.document,e.DataTable)}:(r(window),module.exports=t(window,window.document,window.DataTable))):t(window,document,window.DataTable)})(function(e,l,s){var a=s.Dom,o=s.Api,h=s.util;function f(e,t,r,o){var s=e.splice(t,r);s.unshift(0),s.unshift(o<t?o:o-r+1),e.splice.apply(e,s)}function c(e){e.rows().invalidate("data"),e.column(0).visible(e.column(0).visible()),e.columns.adjust();var t=e.colReorder.order();e.trigger("columns-reordered",[{order:t,mapping:m(t)}])}function n(e){return e.settings()[0].columns.map(function(e){return e._crOriginalIdx})}function g(t,r,o,s){var n=[];for(let e=0;e<t.length;e++){var i=t[e];f(i,o[0],o.length,s);for(let e=0;e<i.length;e++){var l,a=i[e].cell;n.includes(a)||(l=a.getAttribute("data-dt-column").split(",").map(function(e){return r[e]}).join(","),a.setAttribute("data-dt-column",l),n.push(a))}}}function i(e){e.columns().iterator("column",function(e,t){e=e.columns;void 0===e[t]._crOriginalIdx&&(e[t]._crOriginalIdx=t)})}function m(t){var r=[];for(let e=0;e<t.length;e++)r[t[e]]=e;return r}function p(t,r){for(let e=0;e<t.length;e++)t[e]=r[t[e]];return t.sort(),t}function d(e,t,r){let s,n,i=e.settings()[0];var l=i.columns,a=l.map(function(e,t){return t});if(!t.includes(r)){f(a,t[0],t.length,r);let o=m(a);for(f(l,t[0],t.length,r),s=0;s<i.data.length;s++){var c=i.data[s];if(c){var d=c.cells;if(d)for(f(d,t[0],t.length,r),n=0;n<d.length;n++)c.tr&&d[n]&&l[n].visible&&c.tr.appendChild(d[n]),d[n]&&d[n]._DT_CellIndex&&(d[n]._DT_CellIndex.column=n)}}for(s=0;s<l.length;s++){var u=l[s];p(u.orderData,o),u.idx=o[u.idx],u.visible&&i.colgroup.append(u.colEl)}g(i.header,o,t,r),g(i.footer,o,t,r),h.object.each(i.searches,(e,t)=>{var r=p(t.columns,o);"*"!==e&&(i.searches[r.join(",")+"-transposed"]=t,delete i.searches[e])}),h.object.each(i.searches,(e,t)=>{e.includes("-transposed")&&(i.searches[e.replace("-transposed","")]=t,delete i.searches[e])}),h.object.each(i.searchesFixed,(e,t)=>{h.object.each(i.searchesFixed[e],(e,t)=>{p(t.columns,o)}),"*"!==e&&(i.searchesFixed[e+"-transposed"]=i.searchesFixed[e],delete i.searchesFixed[e])}),h.object.each(i.searchesFixed,(e,t)=>{var r;e.includes("-transposed")&&(r=t[Object.keys(t)[0]],i.searchesFixed[r.columns.join(",")]=t,delete i.searchesFixed[e])}),v(o,i.order),Array.isArray(i.orderFixed)?v(o,i.orderFixed):(i.orderFixed.pre||i.orderFixed.post)&&v(o,i.orderFixed.pre),i.lastOrder.forEach(function(e){e.src=o[e.src]}),e.trigger("column-reorder",[e.settings()[0],{from:t,to:r,mapping:o}])}}function v(t,r){if(r)for(let e=0;e<r.length;e++){var o=r[e];"number"==typeof o?r[e]=t[o]:h.is.plainObject(o)&&void 0!==o.idx?o.idx=t[o.idx]:Array.isArray(o)&&"number"==typeof o[0]&&(o[0]=t[o[0]])}}function u(e,t,r){let o=!1,s;if(t.length!==e.columns().count())e.error("ColReorder - column count mismatch");else{var n=m(t=r?b(e,t,"toCurrent"):t);for(s=0;s<n.length;s++){var i=n.indexOf(s);s!==i&&(f(n,i,1,s),d(e,[i],s),o=!0)}o&&c(e)}}function b(e,t,r){var o=e.colReorder.order(),s=e.settings()[0].columns;return"toCurrent"===r||"fromOriginal"===r?Array.isArray(t)?t.map(function(e){return o.indexOf(e)}):o.indexOf(t):Array.isArray(t)?t.map(function(e){return s[e]._crOriginalIdx}):s[t]._crOriginalIdx}function _(e,t,r){var o=e.columns().count();return!(t[0]<r&&r<t[t.length]||t[0]<0&&t[t.length-1]>o||r<0&&o<r||!t.includes(r)&&(!w(e.table().header.structure(),t,r)||!w(e.table().footer.structure(),t,r)))}function w(e,t,r){var o=(e=>{var s=[];for(let o=0;o<e.length;o++){s.push([]);for(let r=0;r<e[o].length;r++){var n=e[o][r];if(n)for(let t=0;t<n.rowspan;t++){s[o+t]||(s[o+t]=[]);for(let e=0;e<n.colspan;e++)s[o+t][r+e]=n.cell}}}return s})(e);let s;for(s=0;s<o.length;s++)f(o[s],t[0],t.length,r);for(s=0;s<o.length;s++){var n=[];for(let e=0;e<o[s].length;e++){var i=o[s][e];if(n.includes(i)){if(n[n.length-1]!==i)return}else n.push(i)}}return 1}if(!s.versionCheck("3"))throw"Warning: ColReorder requires DataTables 3 or newer";class R{disable(){return this.c.enable=!1,this}enable(e=!0){return!1===e?this.disable():(this.c.enable=!0,this)}constructor(o,t){this.dom={drag:null},this.c={columns:null,enable:null,headerRows:null,order:null},this.s={dropZones:[],mouse:{absLeft:-1,offset:{x:-1,y:-1},start:{x:-1,y:-1},target:null,targets:[]},scrollInterval:null};var r=o.settings()[0];if(!r._colReorder){(o.settings()[0]._colReorder=this).dt=o,h.object.assign(this.c,R.defaults,t),i(o),o.on("stateSaveParams",function(e,t,r){r.colReorder=n(o)}),o.on("destroy",function(){o.off(".colReorder"),o.colReorder.reset()});r=o.state.loaded();let e=this.c.order;(e=r&&r.colReorder&&o.columns().count()===r.colReorder.length?r.colReorder:e)&&o.ready(function(){u(o,e,!0)}),o.table().header.structure().forEach((t,r)=>{var o=this.c.headerRows;for(let e=0;e<t.length;e++)o&&!o.includes(r)||t[e]&&t[e].cell&&this._addListener(t[e].cell)})}}_addListener(e){let r=this;a.s(e).on("selectstart.colReorder",function(){return!1}).on("mousedown.colReorder touchstart.colReorder",function(e){var t;"mousedown"===e.type&&1!==e.which||!r.c.enable||(t=a.s(this).find("button.dtcc-button_reorder")).count()&&e.target!==t.get(0)&&0===t.find(e.target).count()||r._mouseDown(e,this)})}_createDragNode(){var e=this.s.mouse.target,t=e.parent(),r=t.parent(),o=r.parent(),s=e.clone();this.dom.drag=a.s(o.get(0).cloneNode(!1)).classAdd("dtcr-cloned").append(a.s(r.get(0).cloneNode(!1)).append(a.s(t.get(0).cloneNode(!1)).append(s.get(0)))).css({position:"absolute",top:"0",left:"0",width:e.width("outer")+"px",height:e.height("outer")+"px"}).appendTo("body")}_cursorPosition(e,t){return(-1!==e.type.indexOf("touch")?e.originalEvent.touches[0]:e)[t]}_mouseDown(e,t){var r=a.s(e.target).closest("th, td"),o=r.offset(),s=this.dt.columns(this.c.columns).indexes().toArray(),n=a.s(t).attr("data-dt-column").split(",").map(function(e){return parseInt(e,10)});for(let e=0;e<n.length;e++)if(!s.includes(n[e]))return!1;this.s.mouse.start.x=this._cursorPosition(e,"pageX"),this.s.mouse.start.y=this._cursorPosition(e,"pageY"),this.s.mouse.offset.x=this._cursorPosition(e,"pageX")-o.left,this.s.mouse.offset.y=this._cursorPosition(e,"pageY")-o.top,this.s.mouse.target=r,this.s.mouse.targets=n;for(let t=0;t<n.length;t++){var i=a.s(this.dt.cells(null,n[t],{page:"current"}).nodes().toArray());let e="dtcr-moving";0===t&&(e+=" dtcr-moving-first"),t===n.length-1&&(e+=" dtcr-moving-last"),i.classAdd(e)}this._regions(n),this._scrollRegions(),a.s(l).on("mousemove.colReorder touchmove.colReorder",e=>{this._mouseMove(e)}).on("mouseup.colReorder touchend.colReorder",e=>{this._mouseUp(e)})}_mouseMove(e){if(null===this.dom.drag){if(Math.pow(Math.pow(this._cursorPosition(e,"pageX")-this.s.mouse.start.x,2)+Math.pow(this._cursorPosition(e,"pageY")-this.s.mouse.start.y,2),.5)<5)return;a.s(l.body).classAdd("dtcr-dragging"),this._createDragNode()}this.dom.drag.css({left:this._cursorPosition(e,"pageX")-this.s.mouse.offset.x,top:this._cursorPosition(e,"pageY")-this.s.mouse.offset.y});var t=this.dt.table().node(),r=a.s(t).offset().left,r=this._cursorPosition(e,"pageX")-r;let o;o=this._isRtl()?t.clientWidth-r:r;t=this.s.dropZones.find(function(e){return e.inlineStart<=o&&o<=e.inlineStart+e.width});this.s.mouse.absLeft=this._cursorPosition(e,"pageX"),t&&!t.self&&this._move(t,o)}_mouseUp(e){a.s(l).off(".colReorder"),a.s(l.body).classRemove("dtcr-dragging"),this.dom.drag&&(this.dom.drag.remove(),this.dom.drag=null,this.s.mouse.target.on("click.dtcr",function(e){return!1}),setTimeout(()=>{this.s.mouse.target.off(".dtcr")},10)),this.s.scrollInterval&&clearInterval(this.s.scrollInterval),a.s(this.dt.cells(".dtcr-moving").nodes().toArray()).classRemove("dtcr-moving dtcr-moving-first dtcr-moving-last")}_move(e,t){let r=this,o=(this.dt.colReorder.move(this.s.mouse.targets,e.colIdx),this.s.mouse.targets=this.s.mouse.target.attr("data-dt-column").split(",").map(function(e){return parseInt(e,10)}),this._regions(this.s.mouse.targets),this.s.mouse.targets.filter(function(e){return r.dt.column(e).visible()})),s=this.s.dropZones.find(function(e){return e.colIdx===o[0]});var n,i,e=this.s.dropZones.indexOf(s);s.inlineStart>t&&(i=s.inlineStart-t,n=this.s.dropZones[e-1],s.inlineStart-=i,s.width+=i,n)&&(n.width-=i),(s=this.s.dropZones.find(function(e){return e.colIdx===o[o.length-1]})).inlineStart+s.width<t&&(n=t-(s.inlineStart+s.width),i=this.s.dropZones[e+1],s.width+=n,i)&&(i.inlineStart+=n,i.width-=n)}_regions(s){let n=this,i=[],l=0,a=0,c=this.dt.columns(this.c.columns).indexes().toArray(),d=this.dt.columns().widths();this.dt.columns().every(function(e,t,r){var o;this.visible()&&(o=d[e],c.includes(e)&&(_(n.dt,s,e)?i.push({colIdx:e,inlineStart:l-a,self:s[0]<=e&&e<=s[s.length-1],width:o+a}):e<s[0]?i.length&&(i[i.length-1].width+=o):e>s[s.length-1]&&(a+=o)),l+=o)}),this.s.dropZones=i}_isScrolling(){return this.dt.table().body().parentNode!==this.dt.table().header().parentNode}_scrollRegions(){if(this._isScrolling()){let t=this,r=a.s(this.dt.table().container()).offset().left,o=a.s(this.dt.table().container()).width("outer"),s=this.dt.table().body().parentElement.parentElement;this.s.scrollInterval=setInterval(function(){var e=t.s.mouse.absLeft;-1!==e&&(e<r+75&&s.scrollLeft?s.scrollLeft-=5:e>r+o-75&&s.scrollLeft<s.scrollWidth&&(s.scrollLeft+=5))},25)}}_isRtl(){return"rtl"===a.s(this.dt.table().node()).css("direction")}}return R.defaults={columns:"",enable:!0,headerRows:null,order:null},R.version="3.0.0",o.register("colReorder.enable()",function(t){return this.iterator("table",function(e){e._colReorder&&e._colReorder.enable(t)})}),o.register("colReorder.disable()",function(){return this.iterator("table",function(e){e._colReorder&&e._colReorder.disable()})}),o.register("colReorder.move()",function(e,t){return i(this),_(this,e=Array.isArray(e)?e:[e],t)?this.tables().every(function(){d(this,e,t),c(this)}):(this.error("ColReorder - invalid move"),this)}),o.register("colReorder.order()",function(e,t){return i(this),e?this.tables().every(function(){u(this,e,t)}):this.context.length?n(this):null}),o.register("colReorder.reset()",function(){return i(this),this.tables().every(function(){var e=this.columns().every(function(e){return e}).flatten().toArray();u(this,e,!0)})}),o.register("colReorder.transpose()",function(e,t){return i(this),b(this,e,t=t||"toCurrent")}),s.ColReorder=R,a.s(l).on("stateLoadInit.dt",function(e,t,r){if("dt"===e.namespace){e=new o(t);if(r.colReorder&&e.columns().count()===r.colReorder.length)if(e.ready())u(e,r.colReorder,!0);else if(v(r.colReorder,r.order),r.columns){for(let e=0;e<r.columns.length;e++)r.columns[e]._cr_sort=r.colReorder[e];r.columns.sort(function(e,t){return e._cr_sort-t._cr_sort})}}}),a.s(l).on("preInit.dt",function(e,t){var r,o;"dt"===e.namespace&&(e=t.init.colReorder,o=s.defaults.colReorder,e||o)&&(r={},h.is.plainObject(o)&&h.object.assign(r,o),h.is.plainObject(e)&&h.object.assign(r,e),!1!==e)&&(o=new s.Api(t),new R(o,r))}),s});