{"version":3,"sources":["kendo.groupable.js"],"names":["f","define","$","undefined","dropCueOffsetTop","element","position","top","kendo","window","Widget","ui","proxy","isRtl","NS","CHANGE","indicatorTmpl","template","useWithBlock","hint","target","title","attr","htmlEncode","css","width","paddingLeft","paddingRight","lineHeight","height","paddingTop","paddingBottom","html","prepend","dropCue","Groupable","extend","init","options","draggable","horizontalCuePosition","that","this","group","guid","intializePositions","_intializePositions","dropCuePositions","_dropCuePositions","fn","call","support","Draggable","filter","draggableElements","groupContainer","kendoDropTarget","dragenter","e","_canDrag","currentTarget","find","removeClass","addClass","appendTo","dragleave","remove","drop","targetElement","field","sourceIndicator","indicator","lastCuePosition","length","hasClass","_dropCuePosition","getOffset","left","parseInt","_canDrop","before","buildIndicator","after","_change","append","kendoDraggable","dragcancel","_dragCancel","dragstart","marginLeft","elementPosition","outerWidth","dragend","_dragEnd","drag","_drag","on","preventDefault","_removeIndicator","parent","current","newIndicator","bind","marginRight","allowDrag","dataSource","_refreshHandler","unbind","refresh","empty","map","item","fieldName","dir","join","_invalidateGroupContainer","destroy","off","data","events","name","messages","indicators","grep","replace","ns","descriptors","aggregates","names","idx","cell","aggregate","member","split","push","toArray","trigger","groups","right","is","Math","ceil","event","x","location","source","next","result","dropped","plugin","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.groupable.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.groupable', [\n 'kendo.core',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'groupable',\n name: 'Groupable',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, isRtl = false, NS = '.kendoGroupable', CHANGE = 'change', indicatorTmpl = kendo.template('
' + '' + '(sorted ${(data.dir || \"asc\") == \"asc\" ? \"ascending\": \"descending\"})' + '${data.title ? data.title: data.field}' + '' + '' + '' + '' + '
', { useWithBlock: false }), hint = function (target) {\n var title = target.attr(kendo.attr('title'));\n if (title) {\n title = kendo.htmlEncode(title);\n }\n return $('
').css({\n width: target.width(),\n paddingLeft: target.css('paddingLeft'),\n paddingRight: target.css('paddingRight'),\n lineHeight: target.height() + 'px',\n paddingTop: target.css('paddingTop'),\n paddingBottom: target.css('paddingBottom')\n }).html(title || target.attr(kendo.attr('field'))).prepend('');\n }, dropCue = $('
');\n function dropCueOffsetTop(element) {\n return element.position().top + 3;\n }\n var Groupable = Widget.extend({\n init: function (element, options) {\n var that = this, group = kendo.guid(), intializePositions = proxy(that._intializePositions, that), draggable, horizontalCuePosition, dropCuePositions = that._dropCuePositions = [];\n Widget.fn.init.call(that, element, options);\n isRtl = kendo.support.isRtl(element);\n horizontalCuePosition = isRtl ? 'right' : 'left';\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 that.groupContainer = $(that.options.groupContainer, that.element).kendoDropTarget({\n group: draggable.options.group,\n dragenter: function (e) {\n if (that._canDrag(e.draggable.currentTarget)) {\n e.draggable.hint.find('.k-drag-status').removeClass('k-i-denied').addClass('k-i-add');\n dropCue.css('top', dropCueOffsetTop(that.groupContainer)).css(horizontalCuePosition, 0).appendTo(that.groupContainer);\n }\n },\n dragleave: function (e) {\n e.draggable.hint.find('.k-drag-status').removeClass('k-i-add').addClass('k-i-denied');\n dropCue.remove();\n },\n drop: function (e) {\n var targetElement = e.draggable.currentTarget, field = targetElement.attr(kendo.attr('field')), title = targetElement.attr(kendo.attr('title')), sourceIndicator = that.indicator(field), dropCuePositions = that._dropCuePositions, lastCuePosition = dropCuePositions[dropCuePositions.length - 1], position;\n if (!targetElement.hasClass('k-group-indicator') && !that._canDrag(targetElement)) {\n return;\n }\n if (lastCuePosition) {\n position = that._dropCuePosition(kendo.getOffset(dropCue).left + 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 position.element.before(sourceIndicator || that.buildIndicator(field, title));\n } else {\n position.element.after(sourceIndicator || that.buildIndicator(field, title));\n }\n that._change();\n }\n } else {\n that.groupContainer.append(that.buildIndicator(field, title));\n that._change();\n }\n }\n }).kendoDraggable({\n filter: 'div.k-group-indicator',\n hint: hint,\n group: draggable.options.group,\n dragcancel: proxy(that._dragCancel, that),\n dragstart: function (e) {\n var element = e.currentTarget, marginLeft = parseInt(element.css('marginLeft'), 10), elementPosition = element.position(), left = isRtl ? elementPosition.left - marginLeft : elementPosition.left + element.outerWidth();\n intializePositions();\n dropCue.css({\n top: dropCueOffsetTop(that.groupContainer),\n left: left\n }).appendTo(that.groupContainer);\n this.hint.find('.k-drag-status').removeClass('k-i-denied').addClass('k-i-add');\n },\n dragend: function () {\n that._dragEnd(this);\n },\n drag: proxy(that._drag, that)\n }).on('click' + NS, '.k-button', function (e) {\n e.preventDefault();\n that._removeIndicator($(this).parent());\n }).on('click' + NS, '.k-link', function (e) {\n var current = $(this).parent(), newIndicator = that.buildIndicator(current.attr(kendo.attr('field')), current.attr(kendo.attr('title')), current.attr(kendo.attr('dir')) == 'asc' ? 'desc' : 'asc');\n current.before(newIndicator).remove();\n that._change();\n e.preventDefault();\n });\n draggable.bind([\n 'dragend',\n 'dragcancel',\n 'dragstart',\n 'drag'\n ], {\n dragend: function () {\n that._dragEnd(this);\n },\n dragcancel: proxy(that._dragCancel, that),\n dragstart: function (e) {\n var element, marginRight, left;\n if (!that.options.allowDrag && !that._canDrag(e.currentTarget)) {\n e.preventDefault();\n return;\n }\n intializePositions();\n if (dropCuePositions.length) {\n element = dropCuePositions[dropCuePositions.length - 1].element;\n marginRight = parseInt(element.css('marginRight'), 10);\n left = element.position().left + element.outerWidth() + marginRight;\n } else {\n left = 0;\n }\n },\n drag: proxy(that._drag, that)\n });\n that.dataSource = that.options.dataSource;\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n if (that.dataSource) {\n that.dataSource.bind('change', that._refreshHandler);\n that.refresh();\n }\n },\n refresh: function () {\n var that = this, dataSource = that.dataSource;\n if (that.groupContainer) {\n that.groupContainer.empty().append($.map(dataSource.group() || [], function (item) {\n var fieldName = item.field;\n var attr = kendo.attr('field');\n var element = that.element.find(that.options.filter).filter(function () {\n return $(this).attr(attr) === fieldName;\n });\n return that.buildIndicator(item.field, element.attr(kendo.attr('title')), item.dir);\n }).join(''));\n }\n that._invalidateGroupContainer();\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.groupContainer.off(NS);\n if (that.groupContainer.data('kendoDropTarget')) {\n that.groupContainer.data('kendoDropTarget').destroy();\n }\n if (that.groupContainer.data('kendoDraggable')) {\n that.groupContainer.data('kendoDraggable').destroy();\n }\n if (!that.options.draggable) {\n that.draggable.destroy();\n }\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind('change', that._refreshHandler);\n that._refreshHandler = null;\n }\n that.groupContainer = that.element = that.draggable = null;\n },\n events: ['change'],\n options: {\n name: 'Groupable',\n filter: 'th',\n draggableElements: 'th',\n messages: { empty: 'Drag a column header and drop it here to group by that column' }\n },\n indicator: function (field) {\n var indicators = $('.k-group-indicator', this.groupContainer);\n return $.grep(indicators, function (item) {\n return $(item).attr(kendo.attr('field')) === field;\n })[0];\n },\n buildIndicator: function (field, title, dir) {\n return indicatorTmpl({\n field: field.replace(/\"/g, '\\''),\n dir: dir,\n title: title,\n ns: kendo.ns\n });\n },\n descriptors: function () {\n var that = this, indicators = $('.k-group-indicator', that.groupContainer), aggregates, names, field, idx, length;\n aggregates = that.element.find(that.options.filter).map(function () {\n var cell = $(this), aggregate = cell.attr(kendo.attr('aggregates')), member = cell.attr(kendo.attr('field'));\n if (aggregate && aggregate !== '') {\n names = aggregate.split(',');\n aggregate = [];\n for (idx = 0, length = names.length; idx < length; idx++) {\n aggregate.push({\n field: member,\n aggregate: names[idx]\n });\n }\n }\n return aggregate;\n }).toArray();\n return $.map(indicators, function (item) {\n item = $(item);\n field = item.attr(kendo.attr('field'));\n return {\n field: field,\n dir: item.attr(kendo.attr('dir')),\n aggregates: aggregates || []\n };\n });\n },\n _removeIndicator: function (indicator) {\n var that = this;\n indicator.remove();\n that._invalidateGroupContainer();\n that._change();\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 _dropCuePosition: function (position) {\n var dropCuePositions = this._dropCuePositions;\n if (!dropCue.is(':visible') || dropCuePositions.length === 0) {\n return;\n }\n position = Math.ceil(position);\n var lastCuePosition = dropCuePositions[dropCuePositions.length - 1], left = lastCuePosition.left, right = lastCuePosition.right, marginLeft = parseInt(lastCuePosition.element.css('marginLeft'), 10), marginRight = parseInt(lastCuePosition.element.css('marginRight'), 10);\n if (position >= right && !isRtl || position < left && isRtl) {\n position = {\n left: lastCuePosition.element.position().left + (!isRtl ? lastCuePosition.element.outerWidth() + marginRight : -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 if (position) {\n position = {\n left: isRtl ? position.element.position().left + position.element.outerWidth() + marginRight : position.element.position().left - marginLeft,\n element: position.element,\n before: true\n };\n }\n }\n return position;\n },\n _drag: function (event) {\n var position = this._dropCuePosition(event.x.location);\n if (position) {\n dropCue.css({\n left: position.left,\n right: 'auto'\n });\n }\n },\n _canDrag: function (element) {\n var field = element.attr(kendo.attr('field'));\n return element.attr(kendo.attr('groupable')) != 'false' && field && (element.hasClass('k-group-indicator') || !this.indicator(field));\n },\n _canDrop: function (source, target, position) {\n var next = source.next(), 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, field = draggable.currentTarget.attr(kendo.attr('field')), sourceIndicator = that.indicator(field);\n if (draggable !== that.options.draggable && !draggable.dropped && sourceIndicator) {\n that._removeIndicator($(sourceIndicator));\n }\n that._dragCancel();\n },\n _dragCancel: function () {\n dropCue.remove();\n this._dropCuePositions = [];\n },\n _intializePositions: function () {\n var that = this, indicators = $('.k-group-indicator', that.groupContainer), left;\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 + item.outerWidth(), 10),\n element: item\n };\n });\n },\n _invalidateGroupContainer: function () {\n var groupContainer = this.groupContainer;\n if (groupContainer && groupContainer.is(':empty')) {\n groupContainer.html(this.options.messages.empty);\n }\n }\n });\n kendo.ui.plugin(Groupable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}