UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

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