@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines • 9.4 kB
JavaScript
/* @license */
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`kendo.core.min.js`),require(`kendo.draganddrop.min.js`),require(`kendo.chip.min.js`),require(`kendo.chiplist.min.js`),require(`kendo.icons.min.js`)):typeof define==`function`&&define.amd?define([`exports`,`kendo.core.min`,`kendo.draganddrop.min`,`kendo.chip.min`,`kendo.chiplist.min`,`kendo.icons.min`],t):(e=typeof globalThis<`u`?globalThis:e||self,t((e.kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Groupable={}),e.kendo._globals.Core,e.kendo._globals.Draganddrop,e.kendo._globals.Chip,e.kendo._globals.Chiplist,e.kendo._globals.Icons))})(this,function(e,t,n,r,i,a){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let o={id:`groupable`,name:`Groupable`,category:`framework`,depends:[`core`,`draganddrop`,`icons`,`chip`,`chiplist`],advanced:!0};(function(e,t){var n=window.kendo,r=n.ui.Widget,i=n._outerWidth,a=n.attr,o=e.extend,s=e.each,c=!1,l=`dir`,u=`field`,d=`title`,f=`asc`,p=`desc`,m=`removeGroup`,h=`group-sort`,g=`k-grouping-drop-container`,_=`.kendoGroupable`,v=`change`,y=function(t){var r=t.attr(n.attr(`title`));return r&&=n.htmlEncode(r),e(`<div class="k-group-clue k-drag-clue" />`).html(r||n.htmlEncode(t.attr(n.attr(`field`)))).prepend(n.ui.icon({icon:`cancel`,iconClass:`k-drag-status`}))},b=e(`<div class="k-grouping-dropclue"/>`);function x(e){e.contents().filter(function(){return this.nodeType===3}).remove()}var S=r.extend({init:function(t,a){var s=this,l=n.guid(),u=s._intializePositions.bind(s),d,f;s._dropCuePositions=[],r.fn.init.call(s,t,a),c=n.support.isRtl(t),f=c?`right`:`left`,s.draggable=d=s.options.draggable||new n.ui.Draggable(s.element,{filter:s.options.draggableElements,hint:y,group:l}),s.groupContainer=e(s.options.groupContainer,s.element).kendoDropTarget({group:d.options.group,dragenter:function(e){s._canDrag(e.draggable.currentTarget)&&(n.ui.icon(e.draggable.hint.find(`.k-drag-status`),{icon:`plus`}),b.css(f,0).appendTo(s.groupContainer))},dragleave:function(e){n.ui.icon(e.draggable.hint.find(`.k-drag-status`),{icon:`cancel`}),b.remove()},drop:function(t){var r=t.draggable.currentTarget,i=r.attr(n.attr(`field`)),a=r.attr(n.attr(`title`)),l=r.attr(`id`),u=s.indicator(i),d=s._dropCuePositions,f=d[d.length-1],p,m=`after`,g=c||!f?0:f.element.parent().position().left,_=o({},s.options.sort,r.data(h)),v=_.dir;!r.hasClass(`k-chip`)&&!s._canDrag(r)||(f?(p=s._dropCuePosition(n.getOffset(b).left+g+parseInt(f.element.css(`marginLeft`),10)*(c?-1:1)+parseInt(f.element.css(`marginRight`),10)),p&&s._canDrop(e(u),p.element,p.left)&&(p.before&&(m=`before`),p.element[m](u||s.buildIndicator(i,a,v,l).wrapper),s._setIndicatorSortOptions(i,_),s._change())):(x(s._messageContainer),s._list.element.show(),s._list.add(s.buildIndicator(i,a,v,l).element),s._setIndicatorSortOptions(i,_),s._change()))}}).kendoDraggable({filter:`div.k-chip`,hint:y,group:d.options.group,dragcancel:s._dragCancel.bind(s),dragstart:function(e){var t=e.currentTarget,r=parseInt(t.css(`marginLeft`),10),a=t.position(),o=c?a.left-r:a.left+i(t);u(),b.css(`left`,o).appendTo(s.groupContainer),n.ui.icon(this.hint.find(`.k-drag-status`),{icon:`plus`})},dragend:function(){s._dragEnd(this)},drag:s._drag.bind(s)}),d.bind([`dragend`,`dragcancel`,`dragstart`,`drag`],{dragend:function(){s._dragEnd(this)},dragcancel:s._dragCancel.bind(s),dragstart:function(e){if(!s.options.allowDrag&&!s._canDrag(e.currentTarget)){e.preventDefault();return}u()},drag:s._drag.bind(s)}),s.dataSource=s.options.dataSource,s._messageContainer=s.groupContainer.find(`.`+g),s._messageContainer.length||(s._messageContainer=e(`<div/>`).addClass(g).appendTo(s.groupContainer)),s._createList(),s.dataSource&&s._refreshHandler?s.dataSource.unbind(v,s._refreshHandler):s._refreshHandler=s.refresh.bind(s),s.dataSource&&(s.dataSource.bind(`change`,s._refreshHandler),s.refresh())},refresh:function(){var t=this,n=t.dataSource.group()||[],r=a(u),i=a(d);let c=t.options._groupableFieldsData;t.groupContainer&&(t._list&&(t._list.remove(t._list.items()),t._list.element.hide()),n.length&&x(t._messageContainer),s(n,function(n,a){var s=a.field,l=a.dir,u=t.element.find(t.options.filter).filter(function(){return e(this).attr(r)===s});if(!u.length&&c){let e=c.filter(function(e){return e.field===s})[0]||{};var d=t.buildIndicator(s,e.title,l,e.id)}else var d=t.buildIndicator(s,u.attr(i),l,u.attr(`id`));t._list.add(d.element),t._list.element.show(),t._setIndicatorSortOptions(s,o({},t.options.sort,{dir:l,compare:a.compare}))})),t._invalidateGroupContainer()},destroy:function(){var e=this;r.fn.destroy.call(e),e.groupContainer.off(_),e.groupContainer.data(`kendoDropTarget`)&&e.groupContainer.data(`kendoDropTarget`).destroy(),e.groupContainer.data(`kendoDraggable`)&&e.groupContainer.data(`kendoDraggable`).destroy(),e.options.draggable||e.draggable.destroy(),e.dataSource&&e._refreshHandler&&(e.dataSource.unbind(`change`,e._refreshHandler),e._refreshHandler=null),e._list&&e._list.destroy(),e.groupContainer=e.element=e.draggable=null},events:[`change`,`removeGroup`],options:{name:`Groupable`,filter:`th`,draggableElements:`th`,messages:{empty:`Drag a column header and drop it here to group by that column`},sort:{dir:f,compare:null},enableContextMenu:!1},indicator:function(t){var r=e(`.k-chip`,this.groupContainer);return e.grep(r,function(r){return e(r).attr(n.attr(`field`))===t})[0]},removeHandler:function(e){this._removeIndicator(e.sender.wrapper)},clickHandler:function(t){var n=this,r=t.sender.wrapper.find(`.k-chip-icon`),i=r.attr(a(l))===f?p:f;e(t.originalEvent.target).closest(`.k-groupable-context-menu`).length||(r.attr(a(l),i),n._change())},buildIndicator:function(t,r,i,a){var o=this,s,c,l;return i=i||(o.options.sort||{}).dir||f,s=e(`<div/>`).kendoChip({icon:`sort-${(i||`asc`)==`asc`?`asc-small`:`desc-small`}`,iconClass:`k-chip-icon`,label:`${n.htmlEncode(r||t)}`,removable:!0,size:o.options.size,remove:o.removeHandler.bind(o),click:o.clickHandler.bind(o),actions:o.options.enableContextMenu?[{icon:`more-vertical`,iconClass:`k-groupable-context-menu`}]:null}).data(`kendoChip`),l=s.wrapper,c=l.find(`.k-chip-icon`).first(),l.attr(`data-${n.ns}field`,t),l.attr(`data-${n.ns}title`,r||``),a&&l.attr(`data-${n.ns}id`,a),c.attr(`title`,`(sorted ${i==`asc`?`ascending`:`descending`})`),c.attr(`data-${n.ns}dir`,i),s},_setIndicatorSortOptions:function(t,n){e(this.indicator(t)).data(h,n)},aggregates:function(){var t=this,r,i,a;return t.element.find(t.options.filter).map(function(){var t=e(this),o=t.attr(n.attr(`aggregates`)),s=t.attr(n.attr(`field`));if(o&&o!==``)for(r=o.split(`,`),o=[],i=0,a=r.length;i<a;i++)o.push({field:s,aggregate:r[i]});return o}).toArray()},descriptors:function(){var t=this,r=e(`.k-chip`,t.groupContainer),i,a=t.aggregates();return e.map(r,function(r){r=e(r),i=r.attr(n.attr(`field`));var o=t.options.sort||{},s=r.data(h)||{},c=r.find(`.k-chip-icon`);return{field:i,dir:c.attr(n.attr(`dir`)),aggregates:a||[],colID:r.attr(n.attr(`id`)),compare:s.compare||o.compare}})},_removeIndicator:function(e){var t=this;t.trigger(m,{field:e.attr(n.attr(`field`)),colID:e.attr(n.attr(`id`))}),t._list.remove(e),e.off(),e.removeData(),t._invalidateGroupContainer(),t._change()},_change:function(){var e=this;if(e.dataSource){var t=e.descriptors();if(e.trigger(`change`,{groups:t})){e.refresh();return}e.dataSource.group(t)}},_dropCuePosition:function(t){var n=this,r=this._dropCuePositions;if(!(!b.is(`:visible`)||r.length===0)){t=Math.ceil(t);var a=r[r.length-1],o=a.left,s=a.right,l=parseInt(a.element.css(`marginLeft`),10),u=parseInt(a.element.css(`marginRight`),10),d=a.element.parent().position().left-parseInt(n.groupContainer.css(`paddingLeft`),10);return t>=s&&!c||t<o&&c?t={left:a.element.position().left+(c?d-l:i(a.element)+u),element:a.element,before:!1}:(t=e.grep(r,function(e){return e.left<=t&&t<=e.right||c&&t>e.right})[0],t&&={left:c?t.element.position().left+i(t.element)+u+d:t.element.position().left-l,element:t.element,before:!0}),t}},_drag:function(e){var t=this._dropCuePosition(e.x.location);t&&b.css({left:t.left,right:`auto`})},_canDrag:function(e){var t=e.attr(n.attr(`field`));return e.attr(n.attr(`groupable`))!=`false`&&t&&(e.hasClass(`k-chip`)||!this.indicator(t))&&!this.dataSource?._requestInProgress},_canDrop:function(e,t,n){var r=e.next();return e[0]!==t[0]&&(!r[0]||t[0]!==r[0]||!c&&n>r.position().left||c&&n<r.position().left)},_dragEnd:function(t){var r=this,i=t.currentTarget.attr(n.attr(`field`)),a=r.indicator(i);t!==r.options.draggable&&!t.dropped&&a&&r._removeIndicator(e(a)),r._dragCancel()},_dragCancel:function(){b.remove(),this._dropCuePositions=[]},_intializePositions:function(){var t=this,r=e(`.k-chip`,t.groupContainer),a;t._dropCuePositions=e.map(r,function(t){return t=e(t),a=n.getOffset(t).left,{left:parseInt(a,10),right:parseInt(a+i(t),10),element:t}})},_invalidateGroupContainer:function(){var e=this,t=e.groupContainer,n=e._list;t&&n&&n.element.is(`:empty`)&&this._messageContainer.text(this.options.messages.empty)},_createList:function(){var t=this;t.groupContainer.find(`.k-chip-list`).remove(),t._list=e(`<div/>`).kendoChipList({selectable:`none`,size:t.options.size}).data(`kendoChipList`),t._list.element.insertBefore(t._messageContainer)}});n.ui.plugin(S)})(window.kendo.jQuery);var s=kendo;e.__meta__=o,e.default=s});
//# sourceMappingURL=kendo.groupable.min.js.map