You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1 regel
2.8 KiB

  1. {"ast":null,"code":"import { eventScope } from '../utils/';\nvar KEY_CODE;\n\n(function (KEY_CODE) {\n KEY_CODE[KEY_CODE[\"TAB\"] = 9] = \"TAB\";\n KEY_CODE[KEY_CODE[\"SPACE\"] = 32] = \"SPACE\";\n KEY_CODE[KEY_CODE[\"PAGE_UP\"] = 33] = \"PAGE_UP\";\n KEY_CODE[KEY_CODE[\"PAGE_DOWN\"] = 34] = \"PAGE_DOWN\";\n KEY_CODE[KEY_CODE[\"END\"] = 35] = \"END\";\n KEY_CODE[KEY_CODE[\"HOME\"] = 36] = \"HOME\";\n KEY_CODE[KEY_CODE[\"LEFT\"] = 37] = \"LEFT\";\n KEY_CODE[KEY_CODE[\"UP\"] = 38] = \"UP\";\n KEY_CODE[KEY_CODE[\"RIGHT\"] = 39] = \"RIGHT\";\n KEY_CODE[KEY_CODE[\"DOWN\"] = 40] = \"DOWN\";\n})(KEY_CODE || (KEY_CODE = {}));\n\nexport function keyboardHandler(scrollbar) {\n var addEvent = eventScope(scrollbar);\n var container = scrollbar.containerEl;\n addEvent(container, 'keydown', function (evt) {\n var activeElement = document.activeElement;\n\n if (activeElement !== container && !container.contains(activeElement)) {\n return;\n }\n\n if (isEditable(activeElement)) {\n return;\n }\n\n var delta = getKeyDelta(scrollbar, evt.keyCode || evt.which);\n\n if (!delta) {\n return;\n }\n\n var x = delta[0],\n y = delta[1];\n scrollbar.addTransformableMomentum(x, y, evt, function (willScroll) {\n if (willScroll) {\n evt.preventDefault();\n } else {\n scrollbar.containerEl.blur();\n\n if (scrollbar.parent) {\n scrollbar.parent.containerEl.focus();\n }\n }\n });\n });\n}\n\nfunction getKeyDelta(scrollbar, keyCode) {\n var size = scrollbar.size,\n limit = scrollbar.limit,\n offset = scrollbar.offset;\n\n switch (keyCode) {\n case KEY_CODE.TAB:\n return handleTabKey(scrollbar);\n\n case KEY_CODE.SPACE:\n return [0, 200];\n\n case KEY_CODE.PAGE_UP:\n return [0, -size.container.height + 40];\n\n case KEY_CODE.PAGE_DOWN:\n return [0, size.container.height - 40];\n\n case KEY_CODE.END:\n return [0, limit.y - offset.y];\n\n case KEY_CODE.HOME:\n return [0, -offset.y];\n\n case KEY_CODE.LEFT:\n return [-40, 0];\n\n case KEY_CODE.UP:\n return [0, -40];\n\n case KEY_CODE.RIGHT:\n return [40, 0];\n\n case KEY_CODE.DOWN:\n return [0, 40];\n\n default:\n return null;\n }\n}\n\nfunction handleTabKey(scrollbar) {\n // handle in next frame\n requestAnimationFrame(function () {\n scrollbar.scrollIntoView(document.activeElement, {\n offsetTop: scrollbar.size.container.height / 2,\n onlyScrollIfNeeded: true\n });\n });\n}\n\nfunction isEditable(elem) {\n if (elem.tagName === 'INPUT' || elem.tagName === 'SELECT' || elem.tagName === 'TEXTAREA' || elem.isContentEditable) {\n return !elem.disabled;\n }\n\n return false;\n}","map":null,"metadata":{},"sourceType":"module"}