{"version":3,"file":"uppsala.singleselect.min.js","names":["define","$","_baseSelector","_buttonSelector","_dropdownSelector","_isClosedClass","_highlightClass","clickTrap","event","$target","target","unset","$openDropdown","length","$parentDropdown","closest","hasClass","singleselect","close","off","init","setup","$baseElement","$button","find","first","addClass","attr","$dropdown","click","handleButtonClick","on","keyCode","$baseelement","toggleHighlight","change","handleDropdownOnChange","open","currentTarget","selectedIndex","removeClass"],"sources":["components/uppsala.singleselect.js"],"mappings":"AAAAA,OAAO,CAAC,WAAW,SAAUC,GAEzB,IAAIC,EAAgB,mBAChBC,EAAkB,2BAClBC,EAAoB,2BACpBC,EAAiB,yBACjBC,EAAkB,8BAkBlBC,EAAY,SAAUC,GACtB,IAAIC,EAAUR,EAAEO,EAAME,QAClBC,GAAQ,EAERC,EAAgBX,EAAEC,EAAgB,SAAWG,EAAiB,KAClE,GAAIO,EAAcC,OAAS,EAAG,CAE1B,IAAIC,EAAkBL,EAAQM,QAAQb,GAClCY,EAAgBD,SAAWC,EAAgBE,SAASX,GACpDM,GAAQ,EAERM,EAAaC,MAAMN,EAE3B,CAEID,GAtBAM,EAAaV,YACbU,EAAaV,UAAY,KACzBN,EAAE,QAAQkB,IAAI,QAASZ,GAuB/B,EAEIU,EAAe,CACfV,UAAW,KACXa,KAAM,WACFH,EAAaI,MAAMpB,EAAEC,GACzB,EACAmB,MAAO,SAAUC,GAEb,IAAIC,EAAUD,EAAaE,KAAKrB,GAAiBsB,QACjDH,EAAaI,SAASrB,GACtBkB,EAAQI,KAAK,gBAAiB,SAC9BL,EAAaI,SA/CK,+BAkDlB,IAAIE,EAAYL,EAAQC,KAAKpB,GAC7BwB,EAAUC,MAAMZ,EAAaa,mBAG7BF,EAAUG,GAAG,YAAY,SAAUvB,GAC/B,IAAqB,MAAjBA,EAAMwB,SAAoC,MAAjBxB,EAAMwB,WAC/Bf,EAAaa,kBAAkBtB,GAGV,MAAjBA,EAAMwB,SAAiB,CACvB,IAAIC,EAAehC,EAAEO,EAAME,QAAQK,QAAQE,EAAaf,eACxDe,EAAaiB,gBAAgBD,EACjC,CAER,IAGAL,EAAUO,OAAOlB,EAAamB,uBAClC,EACAN,kBAAmB,SAAUtB,GACzB,IAAIc,EAAerB,EAAEO,EAAME,QAAQK,QAAQb,GACvCqB,EAAUD,EAAaE,KAAKrB,GAAiBsB,QAE7CH,EAAaN,SAASX,GACtBY,EAAaoB,KAAKf,EAAcC,GAEhCN,EAAaC,MAAMI,GAIvBL,EAAaiB,gBAAgBZ,EACjC,EACAc,uBAAwB,SAAU5B,GAE9B,IAAIc,EAAerB,EAAEO,EAAM8B,eAAevB,QAAQb,GAClDe,EAAaiB,gBAAgBZ,EACjC,EACAY,gBAAiB,SAAUZ,GAGTA,EAAaE,KAAKrB,GAAiBsB,QACzBD,KAAKpB,GAEf,GAAGmC,cAAgB,EAExBjB,EAAaN,SAASV,IACvBgB,EAAaI,SAASpB,GAI1BgB,EAAakB,YAAYlC,EAEjC,EACA+B,KAAM,SAAUf,EAAcC,GAE1BD,EAAakB,YAAYnC,GACzBkB,EAAQI,KAAK,gBAAiB,QAvG7BV,EAAaV,YACdU,EAAaV,UAAYA,EACzBN,EAAE,QAAQ8B,GAAG,QAASxB,GAwG1B,EACAW,MAAO,SAAUI,GAEb,IAAIC,EAAUD,EAAaE,KAAKrB,GAAiBsB,QACjDH,EAAaI,SAASrB,GACtBkB,EAAQI,KAAK,gBAAiB,QAClC,GAEJ,OAAOV,CACX","ignoreList":[],"sourcesContent":["define(['jquery'], function ($) {\n\n var _baseSelector = '.js-singleselect';\n var _buttonSelector = '.js-singleselect--button';\n var _dropdownSelector = '.js-singleselect--select';\n var _isClosedClass = 'singleselect--isclosed';\n var _highlightClass = 'singleselect--ishighlighted';\n var _isinitializedClass = 'singleselect--isinitialized';\n\n var setTrap = function () {\n if (!singleselect.clickTrap) {\n singleselect.clickTrap = clickTrap;\n $(\"body\").on(\"click\", clickTrap);\n }\n }\n\n var unsetTrap = function () {\n if (singleselect.clickTrap) {\n singleselect.clickTrap = null;\n $(\"body\").off(\"click\", clickTrap);\n }\n }\n\n //click outside of singleselect should close singleselect.\n var clickTrap = function (event) {\n var $target = $(event.target);\n var unset = true;\n\n var $openDropdown = $(_baseSelector + \":not(.\" + _isClosedClass + \")\");\n if ($openDropdown.length > 0) {\n //check if we are inside open singleselect\n var $parentDropdown = $target.closest(_baseSelector);\n if ($parentDropdown.length && !$parentDropdown.hasClass(_isClosedClass)) {\n unset = false;\n } else {\n singleselect.close($openDropdown);\n }\n }\n\n if (unset) {\n unsetTrap();\n }\n }\n\n var singleselect = {\n clickTrap: null,\n init: function () {\n singleselect.setup($(_baseSelector));\n },\n setup: function ($baseElement) {\n // initiate dropdown and it's arrow\n var $button = $baseElement.find(_buttonSelector).first();\n $baseElement.addClass(_isClosedClass);\n $button.attr(\"aria-expanded\", \"false\");\n $baseElement.addClass(_isinitializedClass);\n\n // when dropdown is clicked\n var $dropdown = $button.find(_dropdownSelector);\n $dropdown.click(singleselect.handleButtonClick);\n\n // toggle arrow on enter or space\n $dropdown.on('keypress', function (event) {\n if (event.keyCode == '13' || event.keyCode == '32') {\n singleselect.handleButtonClick(event);\n\n // highlight if pressed enter\n if (event.keyCode == '13') {\n var $baseelement = $(event.target).closest(singleselect._baseSelector);\n singleselect.toggleHighlight($baseelement);\n }\n }\n });\n\n // toggle arrow on mouseclick\n $dropdown.change(singleselect.handleDropdownOnChange);\n },\n handleButtonClick: function (event) {\n var $baseElement = $(event.target).closest(_baseSelector);\n var $button = $baseElement.find(_buttonSelector).first();\n\n if ($baseElement.hasClass(_isClosedClass)) {\n singleselect.open($baseElement, $button);\n } else {\n singleselect.close($baseElement);\n }\n\n // make sure filter remains highlitghed\n singleselect.toggleHighlight($baseElement);\n },\n handleDropdownOnChange: function (event) {\n // highlight select button onchange\n var $baseElement = $(event.currentTarget).closest(_baseSelector);\n singleselect.toggleHighlight($baseElement);\n },\n toggleHighlight: function ($baseElement) {\n // highlight filter onchange\n\n var $button = $baseElement.find(_buttonSelector).first();\n var $dropdown = $button.find(_dropdownSelector);\n\n if ($dropdown[0].selectedIndex > 0) {\n // dont highlight select button\n if (!$baseElement.hasClass(_highlightClass)) {\n $baseElement.addClass(_highlightClass);\n }\n } else {\n // highlight select button\n $baseElement.removeClass(_highlightClass);\n }\n },\n open: function ($baseElement, $button) {\n // toggle dropdown-arrow\n $baseElement.removeClass(_isClosedClass);\n $button.attr(\"aria-expanded\", \"true\");\n\n setTrap();\n },\n close: function ($baseElement) {\n // toggle dropdown-arrow\n var $button = $baseElement.find(_buttonSelector).first();\n $baseElement.addClass(_isClosedClass);\n $button.attr(\"aria-expanded\", \"false\");\n }\n }\n return singleselect;\n});"]}