{"version":3,"sources":["kendo.selectable.js"],"names":["f","define","$","undefined","collision","element","position","is","elementPosition","kendo","getOffset","right","left","width","bottom","top","height","_outerWidth","_outerHeight","overlaps","firstRect","secondRect","Selectable","window","Widget","ui","proxy","abs","Math","ARIASELECTED","SELECTED","ACTIVE","SELECTABLE","CHANGE","NS","UNSELECT","UNSELECTING","INPUTSELECTOR","msie","support","browser","supportEventDelegation","extend","on","find","trigger","end","off","init","options","multiple","that","this","fn","call","_marquee","_lastActive","addClass","relatedTarget","userEvents","UserEvents","global","allowSelection","filter","tap","_tap","touchAction","bind","_start","_move","_end","_select","events","name","inputSelectors","noop","ignoreOverlapped","addIdToRanges","_isElement","target","idx","elements","length","result","e","selected","ctrlKey","event","metaKey","shiftKey","whichCode","which","buttonCode","button","closest","_allowSelection","hasClass","clear","add","selectRange","_firstSelectee","_unselect","_notify","value","_downTarget","currentElement","cancel","useAllItems","_items","sender","capture","appendTo","document","body","css","x","client","y","_selectElement","startLocation","location","initialDelta","_invalidateSelectables","preventDefault","i","rangeSelectedAttr","attr","uid","guid","remove","removeClass","_currentlyActive","related","toSelect","items","eq","_collidesWithActiveElement","push","marqueeRect","activeElements","elemRect","activeElementRect","isRtl","leftRight","tempRect","getBoundingClientRect","val","selectElement","each","selectedRanges","map","_","elem","rangeId","mapLocation","selectedSingleItems","toArray","preventNotify","isPrevented","aria","args","removeAttr","_activeElement","resetTouchEvents","start","tmp","continuousItems","inArray","destroy","parseOptions","selectable","selectableMode","mode","asLowerString","toLowerCase","indexOf","cell","plugin","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.selectable.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.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECT = 'unselect', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up,label.k-checkbox-label.k-no-text,.k-icon.k-i-collapse,.k-icon.k-i-expand,span.k-numeric-wrap,.k-focusable', msie = kendo.support.browser.msie, supportEventDelegation = false, extend = $.extend;\n (function ($) {\n (function () {\n $('
').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').trigger('click').end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('
');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that),\n touchAction: multiple ? 'none' : 'pan-x pan-y'\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [\n CHANGE,\n UNSELECT\n ],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop,\n ignoreOverlapped: false,\n addIdToRanges: false\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target, e);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE, e);\n } else {\n that.value(target, e);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function (e) {\n var that = this, rangeSelectedAttr = kendo.attr('range-selected'), uid = kendo.guid();\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n if (that.options.addIdToRanges) {\n for (var i = 0; i < that._currentlyActive.length; i++) {\n $(that._currentlyActive[i]).attr(rangeSelectedAttr, uid);\n }\n }\n that.value(target, e);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n this._currentlyActive = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING) && !this._collidesWithActiveElement(related, position)) {\n related.addClass(ACTIVE);\n }\n this._currentlyActive.push(related[0]);\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n _collidesWithActiveElement: function (element, marqueeRect) {\n if (!this.options.ignoreOverlapped) {\n return false;\n }\n var activeElements = this._currentlyActive;\n var elemRect = element[0].getBoundingClientRect();\n var activeElementRect;\n var collision = false;\n var isRtl = kendo.support.isRtl(element);\n var leftRight = isRtl ? 'right' : 'left';\n var tempRect = {};\n marqueeRect.right = marqueeRect.left + marqueeRect.width;\n marqueeRect.bottom = marqueeRect.top + marqueeRect.height;\n for (var i = 0; i < activeElements.length; i++) {\n activeElementRect = activeElements[i].getBoundingClientRect();\n if (overlaps(elemRect, activeElementRect)) {\n tempRect[leftRight] = leftRight === 'left' ? activeElementRect.right : activeElementRect.left;\n elemRect = extend({}, elemRect, tempRect);\n if (elemRect.left > elemRect.right) {\n return true;\n }\n collision = !overlaps(elemRect, marqueeRect);\n }\n }\n return collision;\n },\n value: function (val, e) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE, e);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n selectedRanges: function () {\n var that = this;\n var rangeSelectedAttr = kendo.attr('range-selected');\n var map = {};\n that.element.find('[' + rangeSelectedAttr + ']').each(function (_, elem) {\n var rangeId = $(elem).attr(rangeSelectedAttr);\n var mapLocation = map[rangeId];\n if (!mapLocation) {\n mapLocation = map[rangeId] = [];\n }\n mapLocation.push($(elem));\n });\n return map;\n },\n selectedSingleItems: function () {\n var that = this;\n var rangeSelectedAttr = kendo.attr('range-selected');\n return that.element.find(that.options.filter + '.' + SELECTED + ':not([' + rangeSelectedAttr + '])').toArray().map(function (elem) {\n return $(elem);\n });\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n if (this.trigger(UNSELECT, { element: element })) {\n return;\n }\n var rangeSelectedAttr = kendo.attr('range-selected');\n element.removeClass(SELECTED).removeAttr(rangeSelectedAttr);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(this.options.inputSelectors)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(this.options.inputSelectors)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end, e) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE, e);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var selectableMode = selectable.mode || selectable;\n var asLowerString = typeof selectableMode === 'string' && selectableMode.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n function overlaps(firstRect, secondRect) {\n return !(firstRect.right <= secondRect.left || firstRect.left >= secondRect.right || firstRect.bottom <= secondRect.top || firstRect.top >= secondRect.bottom);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}