{"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","aria","attr","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","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","args","removeAttr","_activeElement","resetTouchEvents","start","tmp","continuousItems","inArray","destroy","parseOptions","selectable","selectableMode","mode","asLowerString","toLowerCase","indexOf","cell","plugin","jQuery","amd","a1","a2","a3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,oBACH,aACA,oBACDD,IACL,WAwVE,MA7UC,UAAUE,EAAGC,GA+TV,QAASC,GAAUC,EAASC,GACxB,IAAKD,EAAQE,GAAG,YACZ,OAAO,CAEX,IAAIC,GAAkBC,EAAMC,UAAUL,GAAUM,EAAQL,EAASM,KAAON,EAASO,MAAOC,EAASR,EAASS,IAAMT,EAASU,MAGzH,OAFAR,GAAgBG,MAAQH,EAAgBI,KAAOH,EAAMQ,YAAYZ,GACjEG,EAAgBM,OAASN,EAAgBO,IAAMN,EAAMS,aAAab,KACzDG,EAAgBI,KAAOD,GAASH,EAAgBG,MAAQL,EAASM,MAAQJ,EAAgBO,IAAMD,GAAUN,EAAgBM,OAASR,EAASS,KAExJ,QAASI,GAASC,EAAWC,GACzB,QAASD,EAAUT,OAASU,EAAWT,MAAQQ,EAAUR,MAAQS,EAAWV,OAASS,EAAUN,QAAUO,EAAWN,KAAOK,EAAUL,KAAOM,EAAWP,QAzU9J,GASOQ,GARAb,EAAQc,OAAOd,MAAOe,EAASf,EAAMgB,GAAGD,OAAQE,EAAQxB,EAAEwB,MAAOC,EAAMC,KAAKD,IAAKE,EAAe,gBAAiBC,EAAW,mBAAoBC,EAAS,oBAAqBC,EAAa,eAAgBC,EAAS,SAAUC,EAAK,mBAAoBC,EAAW,WAAYC,EAAc,sBAAuBC,EAAgB,sPAAuPC,EAAO7B,EAAM8B,QAAQC,QAAQF,KAAMG,GAAyB,EAAOC,EAASxC,EAAEwC,QAC3oB,SAAUxC,IACN,WACGA,EAAE,2CAA2CyC,GAAG,QAAS,KAAM,WAC3DF,GAAyB,IAC1BG,KAAK,QAAQC,QAAQ,SAASC,MAAMC,UAE7C7C,GACEoB,EAAaE,EAAOkB,QACpBM,KAAM,SAAU3C,EAAS4C,GACrB,GAAiBC,GAAbC,EAAOC,IACX5B,GAAO6B,GAAGL,KAAKM,KAAKH,EAAM9C,EAAS4C,GACnCE,EAAKI,SAAWrD,EAAE,oEAClBiD,EAAKK,YAAc,KACnBL,EAAK9C,QAAQoD,SAASzB,GACtBmB,EAAKO,cAAgBP,EAAKF,QAAQS,cAClCR,EAAWC,EAAKF,QAAQC,SACpBE,KAAKH,QAAQU,MAAQT,GACrBC,EAAK9C,QAAQuD,KAAK,wBAAwB,GAE9CT,EAAKU,WAAa,GAAIpD,GAAMqD,WAAWX,EAAK9C,SACxC0D,QAAQ,EACRC,gBAAgB,EAChBC,QAAUxB,EAAkD,GAAzB,IAAMT,EAAa,KAAYmB,EAAKF,QAAQgB,OAC/EC,IAAKxC,EAAMyB,EAAKgB,KAAMhB,GACtBiB,YAAalB,EAAW,OAAS,gBAEjCA,GACAC,EAAKU,WAAWQ,KAAK,QAAS3C,EAAMyB,EAAKmB,OAAQnB,IAAOkB,KAAK,OAAQ3C,EAAMyB,EAAKoB,MAAOpB,IAAOkB,KAAK,MAAO3C,EAAMyB,EAAKqB,KAAMrB,IAAOkB,KAAK,SAAU3C,EAAMyB,EAAKsB,QAAStB,KAG7KuB,QACIzC,EACAE,GAEJc,SACI0B,KAAM,aACNV,OAAQ,KACRW,eAAgBvC,EAChBa,UAAU,EACVQ,cAAexD,EAAE2E,KACjBC,kBAAkB,EAClBC,eAAe,GAEnBC,WAAY,SAAUC,GAAV,GAEJC,GADAC,EAAW/B,KAAK/C,QACX+E,EAASD,EAASC,OAAQC,GAAS,CAE5C,KADAJ,EAASA,EAAO,GACXC,EAAM,EAAGA,EAAME,EAAQF,IACxB,GAAIC,EAASD,KAASD,EAAQ,CAC1BI,GAAS,CACT,OAGR,MAAOA,IAEXlB,KAAM,SAAUmB,GACZ,GAAgKC,GAA5JN,EAAS/E,EAAEoF,EAAEL,QAAS9B,EAAOC,KAAMoC,EAAUF,EAAEG,MAAMD,SAAWF,EAAEG,MAAMC,QAASxC,EAAWC,EAAKF,QAAQC,SAAUyC,EAAWzC,GAAYoC,EAAEG,MAAME,SAAoBC,EAAYN,EAAEG,MAAMI,MAAOC,EAAaR,EAAEG,MAAMM,QACrN5C,EAAK6B,WAAWC,EAAOe,QAAQ,IAAMhE,KAAgB4D,GAA0B,GAAbA,GAAkBE,GAA4B,GAAdA,GAGlG1C,KAAK6C,gBAAgBX,EAAEG,MAAMR,UAGlCM,EAAWN,EAAOiB,SAASpE,GACtBoB,GAAasC,GACdrC,EAAKgD,QAETlB,EAASA,EAAOmB,IAAIjD,EAAKO,cAAcuB,IACnCU,EACAxC,EAAKkD,YAAYlD,EAAKmD,iBAAkBrB,EAAQK,IAE5CC,GAAYC,GACZrC,EAAKoD,UAAUtB,GACf9B,EAAKqD,QAAQvE,EAAQqD,IAErBnC,EAAKsD,MAAMxB,EAAQK,GAEvBnC,EAAKK,YAAcL,EAAKuD,YAAczB,KAG9CX,OAAQ,SAAUgB,GACd,GAA6EqB,GAAzExD,EAAOC,KAAM6B,EAAS/E,EAAEoF,EAAEL,QAASM,EAAWN,EAAOiB,SAASpE,GAA2B0D,EAAUF,EAAEG,MAAMD,SAAWF,EAAEG,MAAMC,OAClI,IAAKtC,KAAK6C,gBAAgBX,EAAEG,MAAMR,QAAlC,CAIA,GADA9B,EAAKuD,YAAczB,GACd9B,EAAK6B,WAAWC,EAAOe,QAAQ,IAAMhE,IAEtC,MADAmB,GAAKU,WAAW+C,SAChB,CAEAzD,GAAKF,QAAQ4D,YACb1D,EAAK2D,OAAS3D,EAAK9C,QAAQuC,KAAKO,EAAKF,QAAQgB,SAE7C0C,EAAiB1B,EAAOe,QAAQ7C,EAAK9C,SACrC8C,EAAK2D,OAASH,EAAe/D,KAAKO,EAAKF,QAAQgB,SAEnDqB,EAAEyB,OAAOC,UACT7D,EAAKI,SAAS0D,SAASC,SAASC,MAAMC,KAClCxG,KAAM0E,EAAE+B,EAAEC,OAAS,EACnBvG,IAAKuE,EAAEiC,EAAED,OAAS,EAClBzG,MAAO,EACPG,OAAQ,IAEPwE,GACDrC,EAAKgD,QAETlB,EAASA,EAAOmB,IAAIjD,EAAKO,cAAcuB,IACnCM,IACApC,EAAKqE,eAAevC,GAAQ,GACxBO,GACAP,EAAOxB,SAASrB,MAI5BmC,MAAO,SAAUe,GACb,GAAInC,GAAOC,KAAM9C,GACTM,KAAM0E,EAAE+B,EAAEI,cAAgBnC,EAAE+B,EAAEK,SAAWpC,EAAE+B,EAAEK,SAAWpC,EAAE+B,EAAEI,cAC5D1G,IAAKuE,EAAEiC,EAAEE,cAAgBnC,EAAEiC,EAAEG,SAAWpC,EAAEiC,EAAEG,SAAWpC,EAAEiC,EAAEE,cAC3D5G,MAAOc,EAAI2D,EAAE+B,EAAEM,cACf3G,OAAQW,EAAI2D,EAAEiC,EAAEI,cAExBxE,GAAKI,SAAS6D,IAAI9G,GAClB6C,EAAKyE,uBAAuBtH,EAAUgF,EAAEG,MAAMD,SAAWF,EAAEG,MAAMC,SACjEJ,EAAEuC,kBAENrD,KAAM,SAAUc,GAAV,GAIEL,GAGS6C,EANT3E,EAAOC,KAAM2E,EAAoBtH,EAAMmD,KAAK,kBAAmBoE,EAAMvH,EAAMwH,MAK/E,IAJA9E,EAAKI,SAAS2E,SACd/E,EAAKoD,UAAUpD,EAAK9C,QAAQuC,KAAKO,EAAKF,QAAQgB,OAAS,IAAM7B,IAAc+F,YAAY/F,GACnF6C,EAAS9B,EAAK9C,QAAQuC,KAAKO,EAAKF,QAAQgB,OAAS,IAAMlC,GAC3DkD,EAASA,EAAOmB,IAAIjD,EAAKO,cAAcuB,IACnC9B,EAAKF,QAAQ8B,cACb,IAAS+C,EAAI,EAAGA,EAAI3E,EAAKiF,iBAAiBhD,OAAQ0C,IAC9C5H,EAAEiD,EAAKiF,iBAAiBN,IAAIlE,KAAKmE,EAAmBC,EAG5D7E,GAAKsD,MAAMxB,EAAQK,GACnBnC,EAAKK,YAAcL,EAAKuD,YACxBvD,EAAK2D,OAAS,MAElBc,uBAAwB,SAAUtH,EAAUkF,GACxC,GAAIN,GAAKE,EAA2DiD,EAASC,EAA5DrD,EAAS7B,KAAKsD,YAAY,GAAI6B,EAAQnF,KAAK0D,MAE5D,KADA1D,KAAKgF,oBACAlD,EAAM,EAAGE,EAASmD,EAAMnD,OAAQF,EAAME,EAAQF,IAC/CoD,EAAWC,EAAMC,GAAGtD,GACpBmD,EAAUC,EAASlC,IAAIhD,KAAKM,cAAc4E,IACtClI,EAAUkI,EAAUhI,IAChBgI,EAASpC,SAASpE,GACd0D,GAAWP,IAAWqD,EAAS,IAC/BD,EAAQF,YAAYrG,GAAU2B,SAASrB,GAEnCkG,EAASpC,SAASnE,IAAYuG,EAASpC,SAAS9D,IAAiBgB,KAAKqF,2BAA2BJ,EAAS/H,IAClH+H,EAAQ5E,SAAS1B,GAErBqB,KAAKgF,iBAAiBM,KAAKL,EAAQ,KAE/BC,EAASpC,SAASnE,GAClBsG,EAAQF,YAAYpG,GACbyD,GAAW8C,EAASpC,SAAS9D,IACpCiG,EAAQF,YAAY/F,GAAaqB,SAAS3B,IAK1D2G,2BAA4B,SAAUpI,EAASsI,GAAnB,GAIpBC,GACAC,EACAC,EACA1I,EACA2I,EACAC,EACAC,EAGKnB,CAZT,KAAK1E,KAAKH,QAAQ6B,iBACd,OAAO,CAWX,KATI8D,EAAiBxF,KAAKgF,iBACtBS,EAAWxI,EAAQ,GAAG6I,wBAEtB9I,GAAY,EACZ2I,EAAQtI,EAAM8B,QAAQwG,MAAM1I,GAC5B2I,EAAYD,EAAQ,QAAU,OAC9BE,KACJN,EAAYhI,MAAQgI,EAAY/H,KAAO+H,EAAY9H,MACnD8H,EAAY7H,OAAS6H,EAAY5H,IAAM4H,EAAY3H,OAC1C8G,EAAI,EAAGA,EAAIc,EAAexD,OAAQ0C,IAEvC,GADAgB,EAAoBF,EAAed,GAAGoB,wBAClC/H,EAAS0H,EAAUC,GAAoB,CAGvC,GAFAG,EAASD,GAA2B,SAAdA,EAAuBF,EAAkBnI,MAAQmI,EAAkBlI,KACzFiI,EAAWnG,KAAWmG,EAAUI,GAC5BJ,EAASjI,KAAOiI,EAASlI,MACzB,OAAO,CAEXP,IAAae,EAAS0H,EAAUF,GAGxC,MAAOvI,IAEXqG,MAAO,SAAU0C,EAAK7D,GAClB,GAAInC,GAAOC,KAAMgG,EAAgB1H,EAAMyB,EAAKqE,eAAgBrE,EAC5D,OAAIgG,IACAA,EAAIE,KAAK,WACLD,EAAchG,QAElBD,EAAKqD,QAAQvE,EAAQqD,GACrB,GAEGnC,EAAK9C,QAAQuC,KAAKO,EAAKF,QAAQgB,OAAS,IAAMnC,IAEzDwH,eAAgB,WAAA,GACRnG,GAAOC,KACP2E,EAAoBtH,EAAMmD,KAAK,kBAC/B2F,IASJ,OARApG,GAAK9C,QAAQuC,KAAK,IAAMmF,EAAoB,KAAKsB,KAAK,SAAUG,EAAGC,GAAb,GAC9CC,GAAUxJ,EAAEuJ,GAAM7F,KAAKmE,GACvB4B,EAAcJ,EAAIG,EACjBC,KACDA,EAAcJ,EAAIG,OAEtBC,EAAYjB,KAAKxI,EAAEuJ,MAEhBF,GAEXK,oBAAqB,WAAA,GACbzG,GAAOC,KACP2E,EAAoBtH,EAAMmD,KAAK,iBACnC,OAAOT,GAAK9C,QAAQuC,KAAKO,EAAKF,QAAQgB,OAAS,IAAMnC,EAAW,SAAWiG,EAAoB,MAAM8B,UAAUN,IAAI,SAAUE,GACzH,MAAOvJ,GAAEuJ,MAGjBnD,eAAgB,WACZ,GAAiBf,GAAbpC,EAAOC,IACX,OAAyB,QAArBD,EAAKK,YACEL,EAAKK,aAEhB+B,EAAWpC,EAAKsD,QACTlB,EAASH,OAAS,EAAIG,EAAS,GAAKpC,EAAK9C,QAAQuC,KAAKO,EAAKF,QAAQgB,QAAQ,KAEtFuD,eAAgB,SAAUnH,EAASyJ,GAC/B,GAAIxB,GAAWpI,EAAEG,GAAU0J,GAAeD,GAAiB1G,KAAKoD,QAAQ,UAAYnG,QAASA,GAC7FiI,GAASH,YAAYpG,GAChBgI,IACDzB,EAAS7E,SAAS3B,GACdsB,KAAKH,QAAQU,MACb2E,EAAS1E,KAAK/B,GAAc,KAIxC2E,QAAS,SAAU7B,EAAMqF,GAErB,MADAA,GAAOA,MACA5G,KAAKP,QAAQ8B,EAAMqF,IAE9BzD,UAAW,SAAUlG,GACjB,IAAI+C,KAAKP,QAAQV,GAAY9B,QAASA,IAAtC,CAGA,GAAI0H,GAAoBtH,EAAMmD,KAAK,iBAKnC,OAJAvD,GAAQ8H,YAAYrG,GAAUmI,WAAWlC,GACrC3E,KAAKH,QAAQU,MACbtD,EAAQuD,KAAK/B,GAAc,GAExBxB,IAEXoE,QAAS,SAAUa,GACXlC,KAAK6C,gBAAgBX,EAAEG,MAAMR,WACxB3C,GAAQA,IAASpC,EAAEO,EAAMyJ,kBAAkB3J,GAAG6C,KAAKH,QAAQ2B,kBAC5DU,EAAEuC,kBAId5B,gBAAiB,SAAUhB,GACvB,OAAI/E,EAAE+E,GAAQ1E,GAAG6C,KAAKH,QAAQ2B,kBAC1BxB,KAAKS,WAAW+C,SAChBxD,KAAKsD,YAAc,MACZ,IAIfyD,iBAAkB,WACd/G,KAAKS,WAAW+C,UAEpBT,MAAO,WACH,GAAIoC,GAAQnF,KAAK/C,QAAQuC,KAAKQ,KAAKH,QAAQgB,OAAS,IAAMnC,EAC1DsB,MAAKmD,UAAUgC,IAEnBlC,YAAa,SAAU+D,EAAOtH,EAAKwC,GAC/B,GAAiBJ,GAAKmF,EAAK9B,EAAvBpF,EAAOC,IAkBX,KAjBAD,EAAKgD,QACDhD,EAAK9C,QAAQ+E,OAAS,IACtBmD,EAAQpF,EAAKF,QAAQqH,mBAEpB/B,GAAUA,EAAMnD,SACjBmD,EAAQpF,EAAK9C,QAAQuC,KAAKO,EAAKF,QAAQgB,SAE3CmG,EAAQlK,EAAEqK,QAAQrK,EAAEkK,GAAO,GAAI7B,GAC/BzF,EAAM5C,EAAEqK,QAAQrK,EAAE4C,GAAK,GAAIyF,GACvB6B,EAAQtH,IACRuH,EAAMD,EACNA,EAAQtH,EACRA,EAAMuH,GAELlH,EAAKF,QAAQ4D,cACd/D,GAAOK,EAAK9C,QAAQ+E,OAAS,GAE5BF,EAAMkF,EAAOlF,GAAOpC,EAAKoC,IAC1B/B,EAAKqE,eAAee,EAAMrD,GAE9B/B,GAAKqD,QAAQvE,EAAQqD,IAEzBkF,QAAS,WACL,GAAIrH,GAAOC,IACX5B,GAAO6B,GAAGmH,QAAQlH,KAAKH,GACvBA,EAAK9C,QAAQ0C,IAAIb,GACjBiB,EAAKU,WAAW2G,UAChBrH,EAAKI,SAAWJ,EAAKK,YAAcL,EAAK9C,QAAU8C,EAAKU,WAAa,QAG5EvC,EAAWmJ,aAAe,SAAUC,GAAV,GAClBC,GAAiBD,EAAWE,MAAQF,EACpCG,EAA0C,gBAAnBF,IAA+BA,EAAeG,aACzE,QACI5H,SAAU2H,GAAiBA,EAAcE,QAAQ,eACjDC,KAAMH,GAAiBA,EAAcE,QAAQ,aAerDtK,EAAMgB,GAAGwJ,OAAO3J,IAClBC,OAAOd,MAAMyK,QACR3J,OAAOd,OACE,kBAAVR,SAAwBA,OAAOkL,IAAMlL,OAAS,SAAUmL,EAAIC,EAAIC,IACrEA,GAAMD","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 if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\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}));"]}