mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
1 line
2.3 KiB
JavaScript
1 line
2.3 KiB
JavaScript
![]() |
define(["dom","focusManager"],function(dom,focusManager){"use strict";function onKeyDown(e){if(!e.ctrlKey&&!e.shiftKey&&!e.altKey){var key=e.key,chr=key?alphanumeric(key):null;chr&&(chr=chr.toString().toUpperCase(),1===chr.length&&(currentDisplayTextContainer=this.options.itemsContainer,onAlphanumericKeyPress(e,chr)))}}function alphanumeric(value){var letterNumber=/^[0-9a-zA-Z]+$/;return value.match(letterNumber)}function ensureInputDisplayElement(){inputDisplayElement||(inputDisplayElement=document.createElement("div"),inputDisplayElement.classList.add("alphanumeric-shortcut"),inputDisplayElement.classList.add("hide"),document.body.appendChild(inputDisplayElement))}function clearAlphaNumericShortcutTimeout(){alpanumericShortcutTimeout&&(clearTimeout(alpanumericShortcutTimeout),alpanumericShortcutTimeout=null)}function resetAlphaNumericShortcutTimeout(){clearAlphaNumericShortcutTimeout(),alpanumericShortcutTimeout=setTimeout(onAlphanumericShortcutTimeout,2e3)}function onAlphanumericKeyPress(e,chr){currentDisplayText.length>=3||(ensureInputDisplayElement(),currentDisplayText+=chr,inputDisplayElement.innerHTML=currentDisplayText,inputDisplayElement.classList.remove("hide"),resetAlphaNumericShortcutTimeout())}function onAlphanumericShortcutTimeout(){var value=currentDisplayText,container=currentDisplayTextContainer;currentDisplayText="",currentDisplayTextContainer=null,inputDisplayElement.innerHTML="",inputDisplayElement.classList.add("hide"),clearAlphaNumericShortcutTimeout(),selectByShortcutValue(container,value)}function selectByShortcutValue(container,value){value=value.toUpperCase();var focusElem;"#"===value&&(focusElem=container.querySelector("*[data-prefix]")),focusElem||(focusElem=container.querySelector("*[data-prefix^='"+value+"']")),focusElem&&focusManager.focus(focusElem)}function AlphaNumericShortcuts(options){this.options=options;var keyDownHandler=onKeyDown.bind(this);dom.addEventListener(window,"keydown",keyDownHandler,{passive:!0}),this.keyDownHandler=keyDownHandler}var inputDisplayElement,currentDisplayTextContainer,alpanumericShortcutTimeout,currentDisplayText="";return AlphaNumericShortcuts.prototype.destroy=function(){var keyDownHandler=this.keyDownHandler;keyDownHandler&&(dom.removeEventListener(window,"keydown",keyDownHandler,{passive:!0}),this.keyDownHandler=null),this.options=null},AlphaNumericShortcuts});
|