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