{"version":3,"file":"chunk-foundation.util.keyboard-ac5e6df9-esm.js","sources":["node_modules/foundation-sites/js/foundation.util.keyboard.js"],"sourcesContent":["/*******************************************\n * *\n * This util was created by Marius Olbertz *\n * Please thank Marius on GitHub /owlbertz *\n * or the web http://www.mariusolbertz.de/ *\n * *\n ******************************************/\n\nimport $ from 'jquery';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst keyCodes = {\n 9: 'TAB',\n 13: 'ENTER',\n 27: 'ESCAPE',\n 32: 'SPACE',\n 35: 'END',\n 36: 'HOME',\n 37: 'ARROW_LEFT',\n 38: 'ARROW_UP',\n 39: 'ARROW_RIGHT',\n 40: 'ARROW_DOWN'\n}\n\nvar commands = {}\n\n// Functions pulled out to be referenceable from internals\nfunction findFocusable($element) {\n if(!$element) {return false; }\n return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function() {\n if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { return false; } //only have visible elements and those that have a tabindex greater or equal 0\n return true;\n })\n .sort( function( a, b ) {\n if ($(a).attr('tabindex') === $(b).attr('tabindex')) {\n return 0;\n }\n let aTabIndex = parseInt($(a).attr('tabindex'), 10),\n bTabIndex = parseInt($(b).attr('tabindex'), 10);\n // Undefined is treated the same as 0\n if (typeof $(a).attr('tabindex') === 'undefined' && bTabIndex > 0) {\n return 1;\n }\n if (typeof $(b).attr('tabindex') === 'undefined' && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex === 0 && bTabIndex > 0) {\n return 1;\n }\n if (bTabIndex === 0 && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex < bTabIndex) {\n return -1;\n }\n if (aTabIndex > bTabIndex) {\n return 1;\n }\n });\n}\n\nfunction parseKey(event) {\n var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();\n\n // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events\n key = key.replace(/\\W+/, '');\n\n if (event.shiftKey) key = `SHIFT_${key}`;\n if (event.ctrlKey) key = `CTRL_${key}`;\n if (event.altKey) key = `ALT_${key}`;\n\n // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)\n key = key.replace(/_$/, '');\n\n return key;\n}\n\nvar Keyboard = {\n keys: getKeyCodes(keyCodes),\n\n /**\n * Parses the (keyboard) event and returns a String that represents its key\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n * @param {Event} event - the event generated by the event handler\n * @return String key - String that represents the key pressed\n */\n parseKey: parseKey,\n\n /**\n * Handles the given (keyboard) event\n * @param {Event} event - the event generated by the event handler\n * @param {String} component - Foundation component's name, e.g. Slider or Reveal\n * @param {Objects} functions - collection of functions that are to be executed\n */\n handleKey(event, component, functions) {\n var commandList = commands[component],\n keyCode = this.parseKey(event),\n cmds,\n command,\n fn;\n\n if (!commandList) return console.warn('Component not defined!');\n\n // Ignore the event if it was already handled\n if (event.zfIsKeyHandled === true) return;\n\n // This component does not differentiate between ltr and rtl\n if (typeof commandList.ltr === 'undefined') {\n cmds = commandList; // use plain list\n } else { // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa\n if (Rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);\n\n else cmds = $.extend({}, commandList.rtl, commandList.ltr);\n }\n command = cmds[keyCode];\n\n fn = functions[command];\n // Execute the handler if found\n if (fn && typeof fn === 'function') {\n var returnValue = fn.apply();\n\n // Mark the event as \"handled\" to prevent future handlings\n event.zfIsKeyHandled = true;\n\n // Execute function when event was handled\n if (functions.handled || typeof functions.handled === 'function') {\n functions.handled(returnValue);\n }\n } else {\n // Execute function when event was not handled\n if (functions.unhandled || typeof functions.unhandled === 'function') {\n functions.unhandled();\n }\n }\n },\n\n /**\n * Finds all focusable elements within the given `$element`\n * @param {jQuery} $element - jQuery object to search within\n * @return {jQuery} $focusable - all focusable elements within `$element`\n */\n\n findFocusable: findFocusable,\n\n /**\n * Returns the component name name\n * @param {Object} component - Foundation component, e.g. Slider or Reveal\n * @return String componentName\n */\n\n register(componentName, cmds) {\n commands[componentName] = cmds;\n },\n\n\n // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?\n //\n /**\n * Traps the focus in the given element.\n * @param {jQuery} $element jQuery object to trap the foucs into.\n */\n trapFocus($element) {\n var $focusable = findFocusable($element),\n $firstFocusable = $focusable.eq(0),\n $lastFocusable = $focusable.eq(-1);\n\n $element.on('keydown.zf.trapfocus', function(event) {\n if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {\n event.preventDefault();\n $firstFocusable.focus();\n }\n else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {\n event.preventDefault();\n $lastFocusable.focus();\n }\n });\n },\n /**\n * Releases the trapped focus from the given element.\n * @param {jQuery} $element jQuery object to release the focus for.\n */\n releaseFocus($element) {\n $element.off('keydown.zf.trapfocus');\n }\n}\n\n/*\n * Constants for easier comparing.\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n */\nfunction getKeyCodes(kcs) {\n var k = {};\n for (var kc in kcs) {\n if (kcs.hasOwnProperty(kc)) k[kcs[kc]] = kcs[kc];\n }\n return k;\n}\n\nexport {Keyboard};\n"],"names":["keyCodes","commands","findFocusable","$element","find","filter","$","is","attr","sort","a","b","aTabIndex","parseInt","bTabIndex","parseKey","event","key","which","keyCode","String","fromCharCode","toUpperCase","replace","shiftKey","ctrlKey","altKey","Keyboard","keys","getKeyCodes","handleKey","component","functions","commandList","cmds","command","fn","console","warn","zfIsKeyHandled","ltr","Rtl","extend","rtl","returnValue","apply","handled","unhandled","register","componentName","trapFocus","$focusable","$firstFocusable","eq","$lastFocusable","on","target","preventDefault","focus","releaseFocus","off","kcs","k","kc","hasOwnProperty"],"mappings":"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"}