slickgrid
Version:
A lightning fast JavaScript grid/spreadsheet
9 lines • 5.14 kB
JavaScript
/**
* SlickGrid v3.0.2
* (c) 2009-present Michael Leibman
* homepage: http://github.com/mleibman/slickgrid
* license: MIT
* date: 2022-11-14
* file: ./plugins/slick.draggablegrouping.js
*/
!function(I){I.extend(!0,window,{Slick:{DraggableGrouping:function(c){var n,p,g,a,k,u,m,C,b,s={},o=new Slick.Event,i=new Slick.EventHandler,y=[];var h=[];function t(d,i){var t=i.attr("data-id").replace(this._gridUid,""),l=!0;h.forEach(function(e,o,r){e.id==t&&(l=!1)}),l&&(g.forEach(function(e,o,r){var l,n,a,s;e.id!=t||null==e.grouping||I.isEmptyObject(e.grouping)||(l=I("<div id='"+p+e.id+"_entry' data-id='"+e.id+"' class='slick-dropped-grouping'>"),n=i.find(".slick-column-name"),I("<div class='slick-dropped-grouping-title' style='display: inline-flex'>"+(0<n.length?n:i).text()+"</div>").appendTo(l),n=I("<div class='slick-groupby-remove'></div>"),c.deleteIconCssClass&&n.addClass(c.deleteIconCssClass),c.deleteIconImage&&n.css("background","url("+c.deleteIconImage+") no-repeat center right"),c.deleteIconCssClass||c.deleteIconImage||n.addClass("slick-groupby-remove-image"),n.appendTo(l),I("</div>").appendTo(l),l.appendTo(d),h.push(e),v("add-group"),a=e.id,s=l,I("#"+p+a+"_entry >.slick-groupby-remove").on("click",function(){I(this).off("click");var e=a,l=(s.remove(),[]);g.forEach(function(e,o,r){l[e.id]=e}),function(e){var o,r,l=arguments,n=l.length;for(;1<n&&e.length;)for(o=l[--n];-1!=(r=e.indexOf(o));)e.splice(r,1)}(h,l[e]),0===h.length&&(u.show(),m.hide()),v("remove-group")}))}),m.show())}function v(e){var l;0===h.length?(a.setGrouping([]),o.notify({caller:e,groupColumns:[]})):(l=[],h.forEach(function(e,o,r){l.push(e.grouping)}),a.setGrouping(l),o.notify({caller:e,groupColumns:l}))}I.extend(this,{init:function(e){c=I.extend(!0,{},s,c),p=(n=e).getUID(),g=n.getColumns(),a=n.getData(),y=g,(k=I(n.getPreHeaderPanel())).addClass("slick-dropzone");var d,e=c.dropPlaceHolderText||"Drop a column header here to group by the column",o=(k.html("<div class='slick-placeholder'>"+e+"</div><div class='slick-group-toggle-all expanded' style='display:none'></div>"),u=k.find(".slick-placeholder"),(m=k.find(".slick-group-toggle-all")).hide(),e=k[0],d=Sortable.create(e,{group:"shared",ghostClass:"slick-droppable-sortitem-hover",draggable:".slick-dropped-grouping",dragoverBubble:!0,onAdd:function(e){var o=e.item;o.getAttribute("id").replace(p,"")&&t(k[0],I(Sortable.utils.clone(e.item))),e.clone.style.opacity=.5,o.parentNode.removeChild(o)},onUpdate:function(e){for(var o=d.toArray(),r=[],l=0,n=o.length;l<n;l++)for(var a=0,s=h.length;a<s;a++)if(h[a].id==o[l]){r.push(h[a]);break}h=r,v("sort-group")}}),I(".slick-placeholder"));o.on("dragover",function(e){e.preventDefault()}),o.on("dragenter",function(e){o.parent().addClass("slick-dropzone-placeholder-hover")}),o.on("dragleave",function(e){o.parent().removeClass("slick-dropzone-placeholder-hover")}),m.on("click",function(e){this.classList.contains("collapsed")?(this.classList.remove("collapsed"),this.classList.add("expanded"),a.expandAllGroups()):(this.classList.add("collapsed"),this.classList.remove("expanded"),a.collapseAllGroups())}),i.subscribe(n.onHeaderCellRendered,function(e,o){var r=o.column,o=o.node;I.isEmptyObject(r.grouping)||(r=I("<span class='slick-column-groupable' />"),c.groupIconCssClass&&r.addClass(c.groupIconCssClass),c.groupIconImage&&r.css("background","url("+c.groupIconImage+") no-repeat center center"),I(o).css("cursor","pointer").append(r))});for(var r=0;r<g.length;r++){var l=g[r].field;n.updateColumnHeader(l)}},destroy:function(){I(".slick-placeholder").off("dragover dragenter dragleave"),o.unsubscribe(),i.unsubscribeAll(),C&&(C.destroy(),b.destroy())},pluginName:"DraggableGrouping",onGroupChanged:o,setDroppedGroups:function(e){var o=e instanceof Array?e:[e];u.hide();for(var r=0;r<o.length;r++){var l=I(n.getHeaderColumn(o[r]));t(k,l)}},clearDroppedGroups:function(){h=[],v("clear-all"),k.find(".slick-dropped-grouping").remove(),m.hide(),u.show()},getSetupColumnReorder:function(c,p,e,g,u,o,h,r,v){var f=I(c.getPreHeaderPanel()),l={animation:50,ghostClass:"slick-sortable-placeholder",draggable:".slick-header-column",dataIdAttr:"data-id",group:{name:"shared",pull:"clone",put:!1},revertClone:!0,onStart:function(){I(".slick-dropzone").addClass("slick-dropzone-hover"),f.find(".slick-placeholder").show(),f.find(".slick-dropped-grouping").hide(),m.hide()},onEnd:function(e){const o=f.find(".slick-placeholder");if(k.removeClass("slick-dropzone-hover"),o.addClass("slick-dropzone-placeholder-hover"),I(".slick-dropzone").removeClass("slick-dropzone-hover"),I(".slick-placeholder").parent().removeClass("slick-dropzone-placeholder-hover"),0<f.find(".slick-dropped-grouping").length&&(f.find(".slick-placeholder").hide(),f.find(".slick-dropped-grouping").show(),m.show()),c.getEditorLock().commitCurrentEdit()){var r=C.toArray();if(1<p.length)for(var l=1,n=p.length;l<n;l+=1)for(var a=b.toArray(),s=0,d=a.length;s<d;s+=1)r.push(a[s]);for(var i=[],t=0;t<r.length;t++)i.push(y[h(r[t])]);g(i),v(c.onColumnsReordered,{grid:c}),e.stopPropagation(),u(),y=i}}};p[0]&&(C=Sortable.create(p[0],l)),p[1]&&(b=Sortable.create(p[1],l))}})}}})}(jQuery);