7 lines
10 KiB
JavaScript
7 lines
10 KiB
JavaScript
/*! ColReorder 2.0.4
|
|
* © SpryMedia Ltd - datatables.net/license
|
|
*/
|
|
import jQuery from"jquery";import DataTable from"datatables.net";let $=jQuery;function arrayMove(t,e,r,o){var n=t.splice(e,r);n.unshift(0),n.unshift(o<e?o:o-r+1),t.splice.apply(t,n)}function finalise(t){t.rows().invalidate("data"),t.column(0).visible(t.column(0).visible()),t.columns.adjust();var e=t.colReorder.order();t.trigger("columns-reordered",[{order:e,mapping:invertKeyValues(e)}])}function getOrder(t){return t.settings()[0].aoColumns.map(function(t){return t._crOriginalIdx})}function headerUpdate(t,e,r,o){for(var n=[],s=0;s<t.length;s++){var i=t[s];arrayMove(i,r[0],r.length,o);for(var a=0;a<i.length;a++){var l,d=i[a].cell;n.includes(d)||(l=d.getAttribute("data-dt-column").split(",").map(function(t){return e[t]}).join(","),d.setAttribute("data-dt-column",l),n.push(d))}}}function init(t){t.columns().iterator("column",function(t,e){t=t.aoColumns;void 0===t[e]._crOriginalIdx&&(t[e]._crOriginalIdx=e)})}function invertKeyValues(t){for(var e=[],r=0;r<t.length;r++)e[t[r]]=r;return e}function move(t,e,r){var o,n=t.settings()[0],s=n.aoColumns,i=s.map(function(t,e){return e});if(!e.includes(r)){arrayMove(i,e[0],e.length,r);var a=invertKeyValues(i);for(arrayMove(s,e[0],e.length,r),o=0;o<n.aoData.length;o++){var l=n.aoData[o];if(l){var d=l.anCells;if(d)for(arrayMove(d,e[0],e.length,r),c=0;c<d.length;c++)l.nTr&&d[c]&&s[c].bVisible&&l.nTr.appendChild(d[c]),d[c]&&d[c]._DT_CellIndex&&(d[c]._DT_CellIndex.column=c)}}for(o=0;o<s.length;o++){for(var u=s[o],c=0;c<u.aDataSort.length;c++)u.aDataSort[c]=a[u.aDataSort[c]];u.idx=a[u.idx],u.bVisible&&n.colgroup.append(u.colEl)}headerUpdate(n.aoHeader,a,e,r),headerUpdate(n.aoFooter,a,e,r),arrayMove(n.aoPreSearchCols,e[0],e.length,r),orderingIndexes(a,n.aaSorting),Array.isArray(n.aaSortingFixed)?orderingIndexes(a,n.aaSortingFixed):(n.aaSortingFixed.pre||n.aaSortingFixed.post)&&orderingIndexes(a,n.aaSortingFixed.pre),n.aLastSort.forEach(function(t){t.src=a[t.src]}),t.trigger("column-reorder",[t.settings()[0],{from:e,to:r,mapping:a}])}}function orderingIndexes(t,e){if(e)for(var r=0;r<e.length;r++){var o=e[r];"number"==typeof o?e[r]=t[o]:$.isPlainObject(o)&&void 0!==o.idx?o.idx=t[o.idx]:Array.isArray(o)&&"number"==typeof o[0]&&(o[0]=t[o[0]])}}function setOrder(t,e,r){var o=!1;if(e.length!==t.columns().count())t.error("ColReorder - column count mismatch");else{for(var n=invertKeyValues(e=r?transpose(t,e,"toCurrent"):e),s=0;s<n.length;s++){var i=n.indexOf(s);s!==i&&(arrayMove(n,i,1,s),move(t,[i],s),o=!0)}o&&finalise(t)}}function structureFill(t){for(var e=[],r=0;r<t.length;r++){e.push([]);for(var o=0;o<t[r].length;o++){var n=t[r][o];if(n)for(var s=0;s<n.rowspan;s++){e[r+s]||(e[r+s]=[]);for(var i=0;i<n.colspan;i++)e[r+s][o+i]=n.cell}}}return e}function transpose(t,e,r){var o=t.colReorder.order(),n=t.settings()[0].aoColumns;return"toCurrent"===r||"fromOriginal"===r?Array.isArray(e)?e.map(function(t){return o.indexOf(t)}):o.indexOf(e):Array.isArray(e)?e.map(function(t){return n[t]._crOriginalIdx}):n[e]._crOriginalIdx}function validateMove(t,e,r){var o=t.columns().count();return!(e[0]<r&&r<e[e.length]||e[0]<0&&e[e.length-1]>o||r<0&&o<r||!e.includes(r)&&(!validateStructureMove(t.table().header.structure(),e,r)||!validateStructureMove(t.table().footer.structure(),e,r)))}function validateStructureMove(t,e,r){for(var o=structureFill(t),n=0;n<o.length;n++)arrayMove(o[n],e[0],e.length,r);for(n=0;n<o.length;n++)for(var s=[],i=0;i<o[n].length;i++){var a=o[n][i];if(s.includes(a)){if(s[s.length-1]!==a)return!1}else s.push(a)}return!0}var ColReorder=function(){function n(o,t){this.dom={drag:null},this.c={columns:null,enable: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 e,r=this;o.settings()[0]._colReorder||((o.settings()[0]._colReorder=this).dt=o,$.extend(this.c,n.defaults,t),init(o),o.on("stateSaveParams",function(t,e,r){r.colReorder=getOrder(o)}),o.on("destroy",function(){o.off(".colReorder"),o.colReorder.reset()}),t=o.state.loaded(),e=this.c.order,(e=t&&t.colReorder?t.colReorder:e)&&o.ready(function(){setOrder(o,e,!0)}),o.table().header.structure().forEach(function(t){for(var e=0;e<t.length;e++)t[e]&&t[e].cell&&r._addListener(t[e].cell)}))}return n.prototype.disable=function(){return this.c.enable=!1,this},n.prototype.enable=function(t){return!1===(t=void 0===t?!0:t)?this.disable():(this.c.enable=!0,this)},n.prototype._addListener=function(t){var e=this;$(t).on("selectstart.colReorder",function(){return!1}).on("mousedown.colReorder touchstart.colReorder",function(t){"mousedown"===t.type&&1!==t.which||e.c.enable&&e._mouseDown(t,this)})},n.prototype._createDragNode=function(){var t=this.s.mouse.target,e=t.parent(),r=e.parent(),o=r.parent(),n=t.clone();this.dom.drag=$(o[0].cloneNode(!1)).addClass("dtcr-cloned").append($(r[0].cloneNode(!1)).append($(e[0].cloneNode(!1)).append(n[0]))).css({position:"absolute",top:0,left:0,width:$(t).outerWidth(),height:$(t).outerHeight()}).appendTo("body")},n.prototype._cursorPosition=function(t,e){return(-1!==t.type.indexOf("touch")?t.originalEvent.touches[0]:t)[e]},n.prototype._mouseDown=function(t,e){for(var r=this,o=$(t.target).closest("th, td"),n=o.offset(),s=this.dt.columns(this.c.columns).indexes().toArray(),i=$(e).attr("data-dt-column").split(",").map(function(t){return parseInt(t,10)}),a=0;a<i.length;a++)if(!s.includes(i[a]))return!1;this.s.mouse.start.x=this._cursorPosition(t,"pageX"),this.s.mouse.start.y=this._cursorPosition(t,"pageY"),this.s.mouse.offset.x=this._cursorPosition(t,"pageX")-n.left,this.s.mouse.offset.y=this._cursorPosition(t,"pageY")-n.top,this.s.mouse.target=o,this.s.mouse.targets=i;for(var l=0;l<i.length;l++){var d=this.dt.cells(null,i[l],{page:"current"}).nodes().to$(),u="dtcr-moving";0===l&&(u+=" dtcr-moving-first"),l===i.length-1&&(u+=" dtcr-moving-last"),d.addClass(u)}this._regions(i),this._scrollRegions(),$(document).on("mousemove.colReorder touchmove.colReorder",function(t){r._mouseMove(t)}).on("mouseup.colReorder touchend.colReorder",function(t){r._mouseUp(t)})},n.prototype._mouseMove=function(t){if(null===this.dom.drag){if(Math.pow(Math.pow(this._cursorPosition(t,"pageX")-this.s.mouse.start.x,2)+Math.pow(this._cursorPosition(t,"pageY")-this.s.mouse.start.y,2),.5)<5)return;$(document.body).addClass("dtcr-dragging"),this._createDragNode()}this.dom.drag.css({left:this._cursorPosition(t,"pageX")-this.s.mouse.offset.x,top:this._cursorPosition(t,"pageY")-this.s.mouse.offset.y});var e=$(this.dt.table().node()).offset().left,r=this._cursorPosition(t,"pageX")-e,e=this.s.dropZones.find(function(t){return t.left<=r&&r<=t.left+t.width});this.s.mouse.absLeft=this._cursorPosition(t,"pageX"),e&&!e.self&&this._move(e,r)},n.prototype._mouseUp=function(t){$(document).off(".colReorder"),$(document.body).removeClass("dtcr-dragging"),this.dom.drag&&(this.dom.drag.remove(),this.dom.drag=null),this.s.scrollInterval&&clearInterval(this.s.scrollInterval),this.dt.cells(".dtcr-moving").nodes().to$().removeClass("dtcr-moving dtcr-moving-first dtcr-moving-last")},n.prototype._move=function(t,e){var r,o,n=this,s=(this.dt.colReorder.move(this.s.mouse.targets,t.colIdx),this.s.mouse.targets=$(this.s.mouse.target).attr("data-dt-column").split(",").map(function(t){return parseInt(t,10)}),this._regions(this.s.mouse.targets),this.s.mouse.targets.filter(function(t){return n.dt.column(t).visible()})),t=this.s.dropZones.find(function(t){return t.colIdx===s[0]}),i=this.s.dropZones.indexOf(t);t.left>e&&(o=t.left-e,r=this.s.dropZones[i-1],t.left-=o,t.width+=o,r)&&(r.width-=o),(t=this.s.dropZones.find(function(t){return t.colIdx===s[s.length-1]})).left+t.width<e&&(r=e-(t.left+t.width),o=this.s.dropZones[i+1],t.width+=r,o)&&(o.left+=r,o.width-=r)},n.prototype._regions=function(n){var s=this,i=[],a=0,l=0,d=this.dt.columns(this.c.columns).indexes().toArray(),u=this.dt.columns().widths();this.dt.columns().every(function(t,e,r){var o;this.visible()&&(o=u[t],d.includes(t)&&(validateMove(s.dt,n,t)?i.push({colIdx:t,left:a-l,self:n[0]<=t&&t<=n[n.length-1],width:o+l}):t<n[0]?i.length&&(i[i.length-1].width+=o):t>n[n.length-1]&&(l+=o)),a+=o)}),this.s.dropZones=i},n.prototype._isScrolling=function(){return this.dt.table().body().parentNode!==this.dt.table().header().parentNode},n.prototype._scrollRegions=function(){var e,r,o,n;this._isScrolling()&&(e=this,r=$(this.dt.table().container()).position().left,o=$(this.dt.table().container()).outerWidth(),n=this.dt.table().body().parentElement.parentElement,this.s.scrollInterval=setInterval(function(){var t=e.s.mouse.absLeft;t<r+75&&n.scrollLeft?n.scrollLeft-=5:r+o-75<t&&n.scrollLeft<n.scrollWidth&&(n.scrollLeft+=5)},25))},n.defaults={columns:"",enable:!0,order:null},n.version="2.0.4",n}();
|
|
/*! ColReorder 2.0.4
|
|
* © SpryMedia Ltd - datatables.net/license
|
|
*/DataTable.Api.register("colReorder.enable()",function(e){return this.iterator("table",function(t){t._colReorder&&t._colReorder.enable(e)})}),DataTable.Api.register("colReorder.disable()",function(){return this.iterator("table",function(t){t._colReorder&&t._colReorder.disable()})}),DataTable.Api.register("colReorder.move()",function(t,e){return init(this),validateMove(this,t=Array.isArray(t)?t:[t],e)?this.tables().every(function(){move(this,t,e),finalise(this)}):(this.error("ColReorder - invalid move"),this)}),DataTable.Api.register("colReorder.order()",function(t,e){return init(this),t?this.tables().every(function(){setOrder(this,t,e)}):this.context.length?getOrder(this):null}),DataTable.Api.register("colReorder.reset()",function(){return init(this),this.tables().every(function(){var t=this.columns().every(function(t){return t}).flatten().toArray();setOrder(this,t,!0)})}),DataTable.Api.register("colReorder.transpose()",function(t,e){return init(this),transpose(this,t,e=e||"toCurrent")}),DataTable.ColReorder=ColReorder,$(document).on("stateLoadInit.dt",function(t,e,r){if("dt"===t.namespace){t=new DataTable.Api(e);if(r.colReorder)if(t.ready())setOrder(t,r.colReorder,!0);else if(orderingIndexes(r.colReorder,r.order),r.columns){for(var o=0;o<r.columns.length;o++)r.columns[o]._cr_sort=r.colReorder[o];r.columns.sort(function(t,e){return t._cr_sort-e._cr_sort})}}}),$(document).on("preInit.dt",function(t,e){var r,o;"dt"===t.namespace&&(t=e.oInit.colReorder,o=DataTable.defaults.colReorder,t||o)&&(r=$.extend({},o,t),!1!==t)&&(o=new DataTable.Api(e),new ColReorder(o,r))});export default DataTable; |