{"version":3,"sources":["https:\/\/vlm2.ub.ac.id\/theme\/boost\/amd\/src\/aria.js"],"names":["define","$","Pending","init","focusEnd","setFocusEnd","getFocusEnd","result","keydown","e","trigger","which","keyCode","expanded","target","attr","preventDefault","click","shiftFocus","element","delayedFocus","pendingPromise","focus","resolve","bind","setTimeout","on","menu","find","menuItems","foundMenuItem","length","keypress","String","fromCharCode","closest","i","item","itemText","toLowerCase","text","trim","indexOf","next","window","addEventListener","alerts","document","querySelectorAll","Array","prototype","forEach","call","autofocusElement","innerHTML","removeAttribute"],"mappings":"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\/C,CAAuD,SAASC,CAAT,CAAY,CAC\/D,GAAIC,CAAAA,CAAO,CAAGD,CAAC,CAACE,KAAF,EAAWF,CAAC,CAACG,OAA3B,CACI+B,CAAI,GADR,CAEIhB,CAAI,CAAG1B,CAAC,CAACQ,CAAC,CAACK,MAAH,CAAD,CAAYqB,OAAZ,CAAoB,iBAApB,CAFX,CAGIC,CAAC,CAAG,CAHR,CAIIP,CAAS,GAJb,CAKA,GAAI,CAACF,CAAL,CAAW,CACP,MACH,CACDE,CAAS,CAAG5B,CAAC,CAAC0B,CAAD,CAAD,CAAQC,IAAR,CAAa,qBAAb,CAAZ,CACA,GAAI,CAACC,CAAL,CAAgB,CACZ,MACH,CAED,GAAe,EAAX,EAAAnB,CAAJ,CAAmB,CACf,IAAK0B,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAGP,CAAS,CAACE,MAAV,CAAmB,CAAnC,CAAsCK,CAAC,EAAvC,CAA2C,CACvC,GAAIP,CAAS,CAACO,CAAD,CAAT,EAAgB3B,CAAC,CAACK,MAAtB,CAA8B,CAC1B6B,CAAI,CAAGd,CAAS,CAACO,CAAC,CAAG,CAAL,CAAhB,CACA,KACH,CACJ,CACD,GAAI,CAACO,CAAL,CAAW,CAEPA,CAAI,CAAGd,CAAS,CAAC,CAAD,CACnB,CAEJ,CAZD,IAYO,IAAe,EAAX,EAAAnB,CAAJ,CAAmB,CAEtB,IAAK0B,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAGP,CAAS,CAACE,MAA1B,CAAkCK,CAAC,EAAnC,CAAuC,CACnC,GAAIP,CAAS,CAACO,CAAD,CAAT,EAAgB3B,CAAC,CAACK,MAAtB,CAA8B,CAC1B6B,CAAI,CAAGd,CAAS,CAACO,CAAC,CAAG,CAAL,CAAhB,CACA,KACH,CACJ,CACD,GAAI,CAACO,CAAL,CAAW,CAEPA,CAAI,CAAGd,CAAS,CAACA,CAAS,CAACE,MAAV,CAAmB,CAApB,CACnB,CAEJ,CAbM,IAaA,IAAe,EAAX,EAAArB,CAAJ,CAAmB,CAEtBiC,CAAI,CAAGd,CAAS,CAAC,CAAD,CAEnB,CAJM,IAIA,IAAe,EAAX,EAAAnB,CAAJ,CAAmB,CAEtBiC,CAAI,CAAGd,CAAS,CAACA,CAAS,CAACE,MAAV,CAAmB,CAApB,CACnB,CAED,GAAIY,CAAJ,CAAU,CACNlC,CAAC,CAACO,cAAF,GACAE,CAAU,CAACyB,CAAD,CACb,CAEJ,CArDD,EAsDA1C,CAAC,CAAC,WAAD,CAAD,CAAeyB,EAAf,CAAkB,oBAAlB,CAAwC,SAASjB,CAAT,CAAY,CAEhD,GAAIC,CAAAA,CAAO,CAAGT,CAAC,CAACQ,CAAC,CAACK,MAAH,CAAD,CAAYc,IAAZ,CAAiB,4BAAjB,CAAd,CACA,GAAIlB,CAAJ,CAAa,CACTQ,CAAU,CAACR,CAAD,CACb,CACJ,CAND,EASAkC,MAAM,CAACC,gBAAP,CAAwB,MAAxB,CAAgC,UAAM,CAClC,GAAMC,CAAAA,CAAM,CAAGC,QAAQ,CAACC,gBAAT,CAA0B,gDAA1B,CAAf,CACAC,KAAK,CAACC,SAAN,CAAgBC,OAAhB,CAAwBC,IAAxB,CAA6BN,CAA7B,CAAqC,SAAAO,CAAgB,CAAI,CAGrDA,CAAgB,CAACC,SAAjB,EAA8B,GAA9B,CACAD,CAAgB,CAACE,eAAjB,CAAiC,qBAAjC,CACH,CALD,CAMH,CARD,CASH,CA9KE,CAgLV,CAjLK,CAAN","sourcesContent":["\/\/ This file is part of Moodle - http:\/\/moodle.org\/\n\/\/\n\/\/ Moodle is free software: you can redistribute it and\/or modify\n\/\/ it under the terms of the GNU General Public License as published by\n\/\/ the Free Software Foundation, either version 3 of the License, or\n\/\/ (at your option) any later version.\n\/\/\n\/\/ Moodle is distributed in the hope that it will be useful,\n\/\/ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\/\/ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\/\/ GNU General Public License for more details.\n\/\/\n\/\/ You should have received a copy of the GNU General Public License\n\/\/ along with Moodle. If not, see .\n\n\/**\n * Enhancements to Bootstrap components for accessibility.\n *\n * @module theme_boost\/aria\n * @copyright 2018 Damyon Wiese \n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\ndefine(['jquery', 'core\/pending'], function($, Pending) {\n return {\n init: function() {\n \/\/ Drop downs from bootstrap don't support keyboard accessibility by default.\n var focusEnd = false,\n setFocusEnd = function() {\n focusEnd = true;\n },\n getFocusEnd = function() {\n var result = focusEnd;\n focusEnd = false;\n return result;\n };\n\n \/\/ Special handling for \"up\" keyboard control.\n $('[data-toggle=\"dropdown\"]').keydown(function(e) {\n var trigger = e.which || e.keyCode,\n expanded;\n\n \/\/ Up key opens the menu at the end.\n if (trigger == 38) {\n \/\/ Focus the end of the menu, not the beginning.\n setFocusEnd();\n }\n\n \/\/ Escape key only closes the menu, it doesn't open it.\n if (trigger == 27) {\n expanded = $(e.target).attr('aria-expanded');\n e.preventDefault();\n if (expanded == \"false\") {\n $(e.target).click();\n }\n }\n\n \/\/ Space key or Enter key opens the menu.\n if (trigger == 32 || trigger == 13) {\n \/\/ Cancel random scroll.\n e.preventDefault();\n \/\/ Open the menu instead.\n $(e.target).click();\n }\n });\n\n \/\/ Special handling for navigation keys when menu is open.\n var shiftFocus = function(element) {\n var delayedFocus = function(pendingPromise) {\n $(this).focus();\n pendingPromise.resolve();\n }.bind(element);\n setTimeout(delayedFocus, 50, new Pending('core\/aria:delayed-focus'));\n };\n\n $('.dropdown').on('shown.bs.dropdown', function(e) {\n \/\/ We need to focus on the first menuitem.\n var menu = $(e.target).find('[role=\"menu\"]'),\n menuItems = false,\n foundMenuItem = false;\n\n if (menu) {\n menuItems = $(menu).find('[role=\"menuitem\"]');\n }\n if (menuItems && menuItems.length > 0) {\n if (getFocusEnd()) {\n foundMenuItem = menuItems[menuItems.length - 1];\n } else {\n \/\/ The first menu entry, pretty reasonable.\n foundMenuItem = menuItems[0];\n }\n }\n if (foundMenuItem) {\n shiftFocus(foundMenuItem);\n }\n });\n \/\/ Search for menu items by finding the first item that has\n \/\/ text starting with the typed character (case insensitive).\n $('.dropdown [role=\"menu\"] [role=\"menuitem\"]').keypress(function(e) {\n var trigger = String.fromCharCode(e.which || e.keyCode),\n menu = $(e.target).closest('[role=\"menu\"]'),\n i = 0,\n menuItems = false,\n item,\n itemText;\n\n if (!menu) {\n return;\n }\n menuItems = $(menu).find('[role=\"menuitem\"]');\n if (!menuItems) {\n return;\n }\n\n trigger = trigger.toLowerCase();\n for (i = 0; i < menuItems.length; i++) {\n item = $(menuItems[i]);\n itemText = item.text().trim().toLowerCase();\n if (itemText.indexOf(trigger) == 0) {\n shiftFocus(item);\n break;\n }\n }\n });\n\n \/\/ Keyboard navigation for arrow keys, home and end keys.\n $('.dropdown [role=\"menu\"] [role=\"menuitem\"]').keydown(function(e) {\n var trigger = e.which || e.keyCode,\n next = false,\n menu = $(e.target).closest('[role=\"menu\"]'),\n i = 0,\n menuItems = false;\n if (!menu) {\n return;\n }\n menuItems = $(menu).find('[role=\"menuitem\"]');\n if (!menuItems) {\n return;\n }\n \/\/ Down key.\n if (trigger == 40) {\n for (i = 0; i < menuItems.length - 1; i++) {\n if (menuItems[i] == e.target) {\n next = menuItems[i + 1];\n break;\n }\n }\n if (!next) {\n \/\/ Wrap to first item.\n next = menuItems[0];\n }\n\n } else if (trigger == 38) {\n \/\/ Up key.\n for (i = 1; i < menuItems.length; i++) {\n if (menuItems[i] == e.target) {\n next = menuItems[i - 1];\n break;\n }\n }\n if (!next) {\n \/\/ Wrap to last item.\n next = menuItems[menuItems.length - 1];\n }\n\n } else if (trigger == 36) {\n \/\/ Home key.\n next = menuItems[0];\n\n } else if (trigger == 35) {\n \/\/ End key.\n next = menuItems[menuItems.length - 1];\n }\n \/\/ Variable next is set if we do want to act on the keypress.\n if (next) {\n e.preventDefault();\n shiftFocus(next);\n }\n return;\n });\n $('.dropdown').on('hidden.bs.dropdown', function(e) {\n \/\/ We need to focus on the menu trigger.\n var trigger = $(e.target).find('[data-toggle=\"dropdown\"]');\n if (trigger) {\n shiftFocus(trigger);\n }\n });\n\n \/\/ After page load, focus on any element with special autofocus attribute.\n window.addEventListener(\"load\", () => {\n const alerts = document.querySelectorAll('[data-aria-autofocus=\"true\"][role=\"alert\"]');\n Array.prototype.forEach.call(alerts, autofocusElement => {\n \/\/ According to the specification an role=\"alert\" region is only read out on change to the content\n \/\/ of that region.\n autofocusElement.innerHTML += ' ';\n autofocusElement.removeAttribute('data-aria-autofocus');\n });\n });\n }\n };\n});\n"],"file":"aria.min.js"}