{"version":3,"file":"kendo.groupable.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendogroupable","js","this","$","undefined$1","kendo","window","Widget","ui","outerWidth","_outerWidth","kendoAttr","attr","extend","each","isRtl","ASCENDING","GROUP_SORT","DROP_CONTAINER","hint","target","title","htmlEncode","html","prepend","icon","iconClass","dropCue","removeText","element","contents","filter","nodeType","remove","Groupable","init","options","draggable","horizontalCuePosition","that","group","guid","intializePositions","_intializePositions","bind","_dropCuePositions","fn","call","support","Draggable","draggableElements","groupContainer","kendoDropTarget","dragenter","e","_canDrag","currentTarget","find","css","appendTo","dragleave","drop","position","targetElement","field","colID","sourceIndicator","indicator","dropCuePositions","lastCuePosition","length","method","parentLeft","parent","left","sortOptions","sort","data","dir","hasClass","_dropCuePosition","getOffset","parseInt","_canDrop","before","buildIndicator","wrapper","_setIndicatorSortOptions","_change","_messageContainer","_list","show","add","kendoDraggable","dragcancel","_dragCancel","dragstart","marginLeft","elementPosition","dragend","_dragEnd","drag","_drag","allowDrag","preventDefault","dataSource","addClass","_createList","_refreshHandler","unbind","refresh","groups","fieldAttr","titleAttr","items","hide","index","compare","_invalidateGroupContainer","destroy","off","events","name","messages","empty","indicators","grep","item","removeHandler","_removeIndicator","sender","clickHandler","dirIcon","newDir","id","kendoChip","label","removable","size","click","first","aggregates","names","idx","map","cell","aggregate","member","split","push","toArray","descriptors","indicatorSortOptions","trigger","removeData","is","Math","ceil","right","marginRight","event","x","location","source","next","dropped","list","text","kendoChipList","selectable","insertBefore","plugin","jQuery"],"sources":["kendo.groupable.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.core.js'), require('kendo.draganddrop.js'), require('kendo.chip.js'), require('kendo.chiplist.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.draganddrop', 'kendo.chip', 'kendo.chiplist', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendogroupable = global.kendogroupable || {}, global.kendogroupable.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"groupable\",\n name: \"Groupable\",\n category: \"framework\",\n depends: [ \"core\", \"draganddrop\", \"icons\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n outerWidth = kendo._outerWidth,\n kendoAttr = kendo.attr,\n extend = $.extend,\n each = $.each,\n isRtl = false,\n\n DIR = \"dir\",\n FIELD = \"field\",\n TITLE = \"title\",\n ASCENDING = \"asc\",\n DESCENDING = \"desc\",\n REMOVEGROUP = \"removeGroup\",\n GROUP_SORT = \"group-sort\",\n DROP_CONTAINER = \"k-grouping-drop-container\",\n NS = \".kendoGroupable\",\n CHANGE = \"change\",\n hint = function(target) {\n var title = target.attr(kendo.attr(\"title\"));\n if (title) {\n title = kendo.htmlEncode(title);\n }\n\n return $('
')\n .html(title || target.attr(kendo.attr(\"field\")))\n .prepend(kendo.ui.icon({ icon: \"cancel\", iconClass: \"k-drag-status\" }));\n },\n dropCue = $('
');\n\n\n function removeText(element) {\n element.contents().filter(function() {\n return this.nodeType === 3;\n }).remove();\n }\n\n var Groupable = Widget.extend({\n init: function(element, options) {\n var that = this,\n group = kendo.guid(),\n intializePositions = that._intializePositions.bind(that),\n draggable,\n horizontalCuePosition,\n dropCuePositions = that._dropCuePositions = [];\n\n Widget.fn.init.call(that, element, options);\n\n isRtl = kendo.support.isRtl(element);\n horizontalCuePosition = isRtl ? \"right\" : \"left\";\n\n that.draggable = draggable = that.options.draggable || new kendo.ui.Draggable(that.element, {\n filter: that.options.draggableElements,\n hint: hint,\n group: group\n });\n\n that.groupContainer = $(that.options.groupContainer, that.element)\n .kendoDropTarget({\n group: draggable.options.group,\n dragenter: function(e) {\n if (that._canDrag(e.draggable.currentTarget)) {\n kendo.ui.icon(e.draggable.hint.find(\".k-drag-status\"), { icon: \"plus\" });\n dropCue.css(horizontalCuePosition, 0).appendTo(that.groupContainer);\n }\n },\n dragleave: function(e) {\n kendo.ui.icon(e.draggable.hint.find(\".k-drag-status\"), { icon: \"cancel\" });\n\n dropCue.remove();\n },\n drop: function(e) {\n var targetElement = e.draggable.currentTarget,\n field = targetElement.attr(kendo.attr(\"field\")),\n title = targetElement.attr(kendo.attr(\"title\")),\n colID = targetElement.attr(\"id\"),\n sourceIndicator = that.indicator(field),\n dropCuePositions = that._dropCuePositions,\n lastCuePosition = dropCuePositions[dropCuePositions.length - 1],\n position,\n method = \"after\",\n parentLeft = isRtl || !lastCuePosition ? 0 : lastCuePosition.element.parent().position().left;\n var sortOptions = extend({}, that.options.sort, targetElement.data(GROUP_SORT));\n var dir = sortOptions.dir;\n\n if (!targetElement.hasClass(\"k-chip\") && !that._canDrag(targetElement)) {\n return;\n }\n if (lastCuePosition) {\n position = that._dropCuePosition(kendo.getOffset(dropCue).left + parentLeft + parseInt(lastCuePosition.element.css(\"marginLeft\"), 10) * (isRtl ? -1 : 1) + parseInt(lastCuePosition.element.css(\"marginRight\"), 10));\n if (position && that._canDrop($(sourceIndicator), position.element, position.left)) {\n if (position.before) {\n method = \"before\";\n }\n\n position.element[method](sourceIndicator || that.buildIndicator(field, title, dir, colID).wrapper);\n that._setIndicatorSortOptions(field, sortOptions);\n that._change();\n }\n } else {\n removeText(that._messageContainer);\n that._list.element.show();\n that._list.add(that.buildIndicator(field, title, dir, colID).element);\n that._setIndicatorSortOptions(field, sortOptions);\n that._change();\n }\n }\n })\n .kendoDraggable({\n filter: \"div.k-chip\",\n hint: hint,\n group: draggable.options.group,\n dragcancel: that._dragCancel.bind(that),\n dragstart: function(e) {\n var element = e.currentTarget,\n marginLeft = parseInt(element.css(\"marginLeft\"), 10),\n elementPosition = element.position(),\n left = isRtl ? elementPosition.left - marginLeft : elementPosition.left + outerWidth(element);\n\n intializePositions();\n dropCue.css(\"left\", left).appendTo(that.groupContainer);\n kendo.ui.icon(this.hint.find(\".k-drag-status\"), { icon: \"plus\" });\n },\n dragend: function() {\n that._dragEnd(this);\n },\n drag: that._drag.bind(that)\n });\n\n draggable.bind([ \"dragend\", \"dragcancel\", \"dragstart\", \"drag\" ],\n {\n dragend: function() {\n that._dragEnd(this);\n },\n dragcancel: that._dragCancel.bind(that),\n dragstart: function(e) {\n\n if (!that.options.allowDrag && !that._canDrag(e.currentTarget)) {\n e.preventDefault();\n return;\n }\n\n intializePositions();\n },\n drag: that._drag.bind(that)\n });\n\n that.dataSource = that.options.dataSource;\n that._messageContainer = that.groupContainer.find(\".\" + DROP_CONTAINER);\n\n if (!that._messageContainer.length) {\n that._messageContainer = $('
').addClass(DROP_CONTAINER).appendTo(that.groupContainer);\n }\n\n that._createList();\n\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n } else {\n that._refreshHandler = that.refresh.bind(that);\n }\n\n if (that.dataSource) {\n that.dataSource.bind(\"change\", that._refreshHandler);\n that.refresh();\n }\n },\n\n refresh: function() {\n var that = this,\n dataSource = that.dataSource;\n var groups = dataSource.group() || [];\n var fieldAttr = kendoAttr(FIELD);\n var titleAttr = kendoAttr(TITLE);\n\n if (that.groupContainer) {\n if (that._list) {\n that._list.remove(that._list.items());\n that._list.element.hide();\n }\n\n if (groups.length) {\n removeText(that._messageContainer);\n }\n\n each(groups, function(index, group) {\n var field = group.field;\n var dir = group.dir;\n var element = that.element\n .find(that.options.filter)\n .filter(function() {\n return $(this).attr(fieldAttr) === field;\n });\n var indicator = that.buildIndicator(field, element.attr(titleAttr), dir, element.attr(\"id\"));\n\n that._list.add(indicator.element);\n that._list.element.show();\n that._setIndicatorSortOptions(field, extend({}, that.options.sort, { dir: dir, compare: group.compare }));\n });\n }\n\n that._invalidateGroupContainer();\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n that.groupContainer.off(NS);\n\n if (that.groupContainer.data(\"kendoDropTarget\")) {\n that.groupContainer.data(\"kendoDropTarget\").destroy();\n }\n\n if (that.groupContainer.data(\"kendoDraggable\")) {\n that.groupContainer.data(\"kendoDraggable\").destroy();\n }\n\n if (!that.options.draggable) {\n that.draggable.destroy();\n }\n\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(\"change\", that._refreshHandler);\n that._refreshHandler = null;\n }\n\n if (that._list) {\n that._list.destroy();\n }\n\n that.groupContainer = that.element = that.draggable = null;\n },\n\n events: [\"change\", \"removeGroup\"],\n\n options: {\n name: \"Groupable\",\n filter: \"th\",\n draggableElements: \"th\",\n messages: {\n empty: \"Drag a column header and drop it here to group by that column\"\n },\n sort: {\n dir: ASCENDING,\n compare: null\n }\n },\n\n indicator: function(field) {\n var indicators = $(\".k-chip\", this.groupContainer);\n return $.grep(indicators, function(item)\n {\n return $(item).attr(kendo.attr(\"field\")) === field;\n })[0];\n },\n\n removeHandler: function(e) {\n var that = this;\n\n that._removeIndicator(e.sender.wrapper);\n },\n\n clickHandler: function(e) {\n var that = this;\n var indicator = e.sender.wrapper;\n var dirIcon = indicator.find(\".k-chip-icon\");\n var newDir = dirIcon.attr(kendoAttr(DIR)) === ASCENDING ? DESCENDING : ASCENDING;\n\n dirIcon.attr(kendoAttr(DIR), newDir);\n that._change();\n },\n\n buildIndicator: function(field, title, dir, id) {\n var that = this;\n var indicator;\n var icon;\n var wrapper;\n\n dir = dir || (that.options.sort || {}).dir || ASCENDING;\n indicator = $(\"
\")\n .kendoChip({\n icon: (\"sort-\" + ((dir || \"asc\") == \"asc\" ? \"asc-small\" : \"desc-small\")),\n iconClass: 'k-chip-icon',\n label: (\"\" + (title || field)),\n removable: true,\n size: that.options.size || \"medium\",\n remove: that.removeHandler.bind(that),\n click: that.clickHandler.bind(that)\n }).data(\"kendoChip\");\n wrapper = indicator.wrapper;\n icon = wrapper.find(\".k-chip-icon\").first();\n wrapper.attr((\"data-\" + (kendo.ns) + \"field\"), field);\n wrapper.attr((\"data-\" + (kendo.ns) + \"title\"), title || \"\");\n\n if (id) {\n wrapper.attr((\"data-\" + (kendo.ns) + \"id\"), id);\n }\n\n icon.attr(\"title\", (\"(sorted \" + (dir == \"asc\" ? \"ascending\" : \"descending\") + \")\"));\n icon.attr((\"data-\" + (kendo.ns) + \"dir\"), dir);\n\n return indicator;\n },\n\n _setIndicatorSortOptions: function(field, options) {\n var indicator = $(this.indicator(field));\n indicator.data(GROUP_SORT, options);\n },\n\n aggregates: function() {\n var that = this;\n var names;\n var idx;\n var length;\n\n return that.element.find(that.options.filter).map(function() {\n var cell = $(this),\n aggregate = cell.attr(kendo.attr(\"aggregates\")),\n member = cell.attr(kendo.attr(\"field\"));\n\n if (aggregate && aggregate !== \"\") {\n names = aggregate.split(\",\");\n aggregate = [];\n for (idx = 0, length = names.length; idx < length; idx++) {\n aggregate.push({ field: member, aggregate: names[idx] });\n }\n }\n return aggregate;\n }).toArray();\n },\n\n descriptors: function() {\n var that = this,\n indicators = $(\".k-chip\", that.groupContainer),\n field,\n aggregates = that.aggregates();\n\n return $.map(indicators, function(item) {\n item = $(item);\n field = item.attr(kendo.attr(\"field\"));\n var sortOptions = that.options.sort || {};\n var indicatorSortOptions = item.data(GROUP_SORT) || {};\n var dirIcon = item.find(\".k-chip-icon\");\n\n return {\n field: field,\n dir: dirIcon.attr(kendo.attr(\"dir\")),\n aggregates: aggregates || [],\n colID: item.attr(kendo.attr(\"id\")),\n compare: indicatorSortOptions.compare || sortOptions.compare\n };\n });\n },\n\n _removeIndicator: function(indicator) {\n var that = this;\n\n that.trigger(REMOVEGROUP, {\n field: indicator.attr(kendo.attr(\"field\")),\n colID: indicator.attr(kendo.attr(\"id\")),\n });\n that._list.remove(indicator);\n indicator.off();\n indicator.removeData();\n that._invalidateGroupContainer();\n that._change();\n },\n\n _change: function() {\n var that = this;\n if (that.dataSource) {\n var descriptors = that.descriptors();\n if (that.trigger(\"change\", { groups: descriptors })) {\n that.refresh();\n return;\n }\n that.dataSource.group(descriptors);\n }\n },\n\n _dropCuePosition: function(position) {\n var that = this;\n var dropCuePositions = this._dropCuePositions;\n if (!dropCue.is(\":visible\") || dropCuePositions.length === 0) {\n return;\n }\n\n position = Math.ceil(position);\n\n var lastCuePosition = dropCuePositions[dropCuePositions.length - 1],\n left = lastCuePosition.left,\n right = lastCuePosition.right,\n marginLeft = parseInt(lastCuePosition.element.css(\"marginLeft\"), 10),\n marginRight = parseInt(lastCuePosition.element.css(\"marginRight\"), 10),\n parentLeft = lastCuePosition.element.parent().position().left - parseInt(that.groupContainer.css(\"paddingLeft\"), 10);\n\n if (position >= right && !isRtl || position < left && isRtl) {\n position = {\n left: lastCuePosition.element.position().left + (!isRtl ? outerWidth(lastCuePosition.element) + marginRight : parentLeft - marginLeft),\n element: lastCuePosition.element,\n before: false\n };\n } else {\n position = $.grep(dropCuePositions, function(item) {\n return (item.left <= position && position <= item.right) || (isRtl && position > item.right);\n })[0];\n\n if (position) {\n position = {\n left: isRtl ? position.element.position().left + outerWidth(position.element) + marginRight + parentLeft : position.element.position().left - marginLeft,\n element: position.element,\n before: true\n };\n }\n }\n\n return position;\n },\n _drag: function(event) {\n var position = this._dropCuePosition(event.x.location);\n\n if (position) {\n dropCue.css({ left: position.left, right: \"auto\" });\n }\n },\n _canDrag: function(element) {\n var field = element.attr(kendo.attr(\"field\"));\n\n return element.attr(kendo.attr(\"groupable\")) != \"false\" &&\n field &&\n (element.hasClass(\"k-chip\") ||\n !this.indicator(field));\n },\n _canDrop: function(source, target, position) {\n var next = source.next(),\n result = source[0] !== target[0] && (!next[0] || target[0] !== next[0] || (!isRtl && position > next.position().left || isRtl && position < next.position().left));\n return result;\n },\n _dragEnd: function(draggable) {\n var that = this,\n field = draggable.currentTarget.attr(kendo.attr(\"field\")),\n sourceIndicator = that.indicator(field);\n\n if (draggable !== that.options.draggable && !draggable.dropped && sourceIndicator) {\n that._removeIndicator($(sourceIndicator));\n }\n\n that._dragCancel();\n },\n _dragCancel: function() {\n dropCue.remove();\n this._dropCuePositions = [];\n },\n _intializePositions: function() {\n var that = this,\n indicators = $(\".k-chip\", that.groupContainer),\n left;\n\n that._dropCuePositions = $.map(indicators, function(item) {\n item = $(item);\n left = kendo.getOffset(item).left;\n return {\n left: parseInt(left, 10),\n right: parseInt(left + outerWidth(item), 10),\n element: item\n };\n });\n },\n _invalidateGroupContainer: function() {\n var that = this;\n var groupContainer = that.groupContainer;\n var list = that._list;\n\n if (groupContainer && list && list.element.is(\":empty\")) {\n this._messageContainer.text(this.options.messages.empty);\n }\n },\n\n _createList: function() {\n var that = this;\n\n that.groupContainer.find(\".k-chip-list\").remove();\n that._list = $(\"
\").kendoChipList({ selectable: \"none\", size: that.options.size || \"medium\" }).data(\"kendoChipList\");\n that._list.element.insertBefore(that._messageContainer);\n }\n });\n\n kendo.ui.plugin(Groupable);\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}