UNPKG

viewfinder-regular

Version:

Remote isolated browser platform by Dosyago

2,370 lines (2,286 loc) 320 kB
(function () { 'use strict'; function handleSelectMessage(_ref, state) { let { selectInput: { selectOpen, values }, executionContextId } = _ref; state.waitingExecutionContext = executionContextId; if (state.ignoreSelectInputEvents) return; toggleSelect({ selectOpen, values }); } function toggleSelect(_ref2) { let { selectOpen, values } = _ref2; const input = document.querySelector('#selectinput'); if (selectOpen) { input.innerHTML = values; input.classList.add('open'); //input.focus(); } else { input.classList.remove('open'); input.innerHTML = ""; //input.blur(); } } /* eslint-disable no-useless-escape */ const keys = { '0': { 'keyCode': 48, 'key': '0', 'code': 'Digit0' }, '1': { 'keyCode': 49, 'key': '1', 'code': 'Digit1' }, '2': { 'keyCode': 50, 'key': '2', 'code': 'Digit2' }, '3': { 'keyCode': 51, 'key': '3', 'code': 'Digit3' }, '4': { 'keyCode': 52, 'key': '4', 'code': 'Digit4' }, '5': { 'keyCode': 53, 'key': '5', 'code': 'Digit5' }, '6': { 'keyCode': 54, 'key': '6', 'code': 'Digit6' }, '7': { 'keyCode': 55, 'key': '7', 'code': 'Digit7' }, '8': { 'keyCode': 56, 'key': '8', 'code': 'Digit8' }, '9': { 'keyCode': 57, 'key': '9', 'code': 'Digit9' }, 'Power': { 'key': 'Power', 'code': 'Power' }, 'Eject': { 'key': 'Eject', 'code': 'Eject' }, 'Abort': { 'keyCode': 3, 'code': 'Abort', 'key': 'Cancel' }, 'Help': { 'keyCode': 6, 'code': 'Help', 'key': 'Help' }, 'Backspace': { 'keyCode': 8, 'code': 'Backspace', 'key': 'Backspace' }, 'Tab': { 'keyCode': 9, 'code': 'Tab', 'key': 'Tab' }, 'Numpad5': { 'keyCode': 12, 'shiftKeyCode': 101, 'key': 'Clear', 'code': 'Numpad5', 'shiftKey': '5', 'location': 3 }, 'NumpadEnter': { 'keyCode': 13, 'code': 'NumpadEnter', 'key': 'Enter', 'text': '\r', 'location': 3 }, 'Enter': { 'keyCode': 13, 'code': 'Enter', 'key': 'Enter', 'text': '\r' }, '\r': { 'keyCode': 13, 'code': 'Enter', 'key': 'Enter', 'text': '\r' }, '\n': { 'keyCode': 13, 'code': 'Enter', 'key': 'Enter', 'text': '\r' }, 'ShiftLeft': { 'keyCode': 16, 'code': 'ShiftLeft', 'key': 'Shift', 'location': 1 }, 'ShiftRight': { 'keyCode': 16, 'code': 'ShiftRight', 'key': 'Shift', 'location': 2 }, 'ControlLeft': { 'keyCode': 17, 'code': 'ControlLeft', 'key': 'Control', 'location': 1 }, 'ControlRight': { 'keyCode': 17, 'code': 'ControlRight', 'key': 'Control', 'location': 2 }, 'AltLeft': { 'keyCode': 18, 'code': 'AltLeft', 'key': 'Alt', 'location': 1 }, 'AltRight': { 'keyCode': 18, 'code': 'AltRight', 'key': 'Alt', 'location': 2 }, 'Pause': { 'keyCode': 19, 'code': 'Pause', 'key': 'Pause' }, 'CapsLock': { 'keyCode': 20, 'code': 'CapsLock', 'key': 'CapsLock' }, 'Escape': { 'keyCode': 27, 'code': 'Escape', 'key': 'Escape' }, 'Convert': { 'keyCode': 28, 'code': 'Convert', 'key': 'Convert' }, 'NonConvert': { 'keyCode': 29, 'code': 'NonConvert', 'key': 'NonConvert' }, 'Space': { 'keyCode': 32, 'code': 'Space', 'key': ' ' }, 'Numpad9': { 'keyCode': 33, 'shiftKeyCode': 105, 'key': 'PageUp', 'code': 'Numpad9', 'shiftKey': '9', 'location': 3 }, 'PageUp': { 'keyCode': 33, 'code': 'PageUp', 'key': 'PageUp' }, 'Numpad3': { 'keyCode': 34, 'shiftKeyCode': 99, 'key': 'PageDown', 'code': 'Numpad3', 'shiftKey': '3', 'location': 3 }, 'PageDown': { 'keyCode': 34, 'code': 'PageDown', 'key': 'PageDown' }, 'End': { 'keyCode': 35, 'code': 'End', 'key': 'End' }, 'Numpad1': { 'keyCode': 35, 'shiftKeyCode': 97, 'key': 'End', 'code': 'Numpad1', 'shiftKey': '1', 'location': 3 }, 'Home': { 'keyCode': 36, 'code': 'Home', 'key': 'Home' }, 'Numpad7': { 'keyCode': 36, 'shiftKeyCode': 103, 'key': 'Home', 'code': 'Numpad7', 'shiftKey': '7', 'location': 3 }, 'ArrowLeft': { 'keyCode': 37, 'code': 'ArrowLeft', 'key': 'ArrowLeft' }, 'Numpad4': { 'keyCode': 37, 'shiftKeyCode': 100, 'key': 'ArrowLeft', 'code': 'Numpad4', 'shiftKey': '4', 'location': 3 }, 'Numpad8': { 'keyCode': 38, 'shiftKeyCode': 104, 'key': 'ArrowUp', 'code': 'Numpad8', 'shiftKey': '8', 'location': 3 }, 'ArrowUp': { 'keyCode': 38, 'code': 'ArrowUp', 'key': 'ArrowUp' }, 'ArrowRight': { 'keyCode': 39, 'code': 'ArrowRight', 'key': 'ArrowRight' }, 'Numpad6': { 'keyCode': 39, 'shiftKeyCode': 102, 'key': 'ArrowRight', 'code': 'Numpad6', 'shiftKey': '6', 'location': 3 }, 'Numpad2': { 'keyCode': 40, 'shiftKeyCode': 98, 'key': 'ArrowDown', 'code': 'Numpad2', 'shiftKey': '2', 'location': 3 }, 'ArrowDown': { 'keyCode': 40, 'code': 'ArrowDown', 'key': 'ArrowDown' }, 'Select': { 'keyCode': 41, 'code': 'Select', 'key': 'Select' }, 'Open': { 'keyCode': 43, 'code': 'Open', 'key': 'Execute' }, 'PrintScreen': { 'keyCode': 44, 'code': 'PrintScreen', 'key': 'PrintScreen' }, 'Insert': { 'keyCode': 45, 'code': 'Insert', 'key': 'Insert' }, 'Numpad0': { 'keyCode': 45, 'shiftKeyCode': 96, 'key': 'Insert', 'code': 'Numpad0', 'shiftKey': '0', 'location': 3 }, 'Delete': { 'keyCode': 46, 'code': 'Delete', 'key': 'Delete' }, 'NumpadDecimal': { 'keyCode': 46, 'shiftKeyCode': 110, 'code': 'NumpadDecimal', 'key': '\u0000', 'shiftKey': '.', 'location': 3 }, 'Digit0': { 'keyCode': 48, 'code': 'Digit0', 'shiftKey': ')', 'key': '0' }, 'Digit1': { 'keyCode': 49, 'code': 'Digit1', 'shiftKey': '!', 'key': '1' }, 'Digit2': { 'keyCode': 50, 'code': 'Digit2', 'shiftKey': '@', 'key': '2' }, 'Digit3': { 'keyCode': 51, 'code': 'Digit3', 'shiftKey': '#', 'key': '3' }, 'Digit4': { 'keyCode': 52, 'code': 'Digit4', 'shiftKey': '$', 'key': '4' }, 'Digit5': { 'keyCode': 53, 'code': 'Digit5', 'shiftKey': '%', 'key': '5' }, 'Digit6': { 'keyCode': 54, 'code': 'Digit6', 'shiftKey': '^', 'key': '6' }, 'Digit7': { 'keyCode': 55, 'code': 'Digit7', 'shiftKey': '&', 'key': '7' }, 'Digit8': { 'keyCode': 56, 'code': 'Digit8', 'shiftKey': '*', 'key': '8' }, 'Digit9': { 'keyCode': 57, 'code': 'Digit9', 'shiftKey': '\(', 'key': '9' }, 'KeyA': { 'keyCode': 65, 'code': 'KeyA', 'shiftKey': 'A', 'key': 'a' }, 'KeyB': { 'keyCode': 66, 'code': 'KeyB', 'shiftKey': 'B', 'key': 'b' }, 'KeyC': { 'keyCode': 67, 'code': 'KeyC', 'shiftKey': 'C', 'key': 'c' }, 'KeyD': { 'keyCode': 68, 'code': 'KeyD', 'shiftKey': 'D', 'key': 'd' }, 'KeyE': { 'keyCode': 69, 'code': 'KeyE', 'shiftKey': 'E', 'key': 'e' }, 'KeyF': { 'keyCode': 70, 'code': 'KeyF', 'shiftKey': 'F', 'key': 'f' }, 'KeyG': { 'keyCode': 71, 'code': 'KeyG', 'shiftKey': 'G', 'key': 'g' }, 'KeyH': { 'keyCode': 72, 'code': 'KeyH', 'shiftKey': 'H', 'key': 'h' }, 'KeyI': { 'keyCode': 73, 'code': 'KeyI', 'shiftKey': 'I', 'key': 'i' }, 'KeyJ': { 'keyCode': 74, 'code': 'KeyJ', 'shiftKey': 'J', 'key': 'j' }, 'KeyK': { 'keyCode': 75, 'code': 'KeyK', 'shiftKey': 'K', 'key': 'k' }, 'KeyL': { 'keyCode': 76, 'code': 'KeyL', 'shiftKey': 'L', 'key': 'l' }, 'KeyM': { 'keyCode': 77, 'code': 'KeyM', 'shiftKey': 'M', 'key': 'm' }, 'KeyN': { 'keyCode': 78, 'code': 'KeyN', 'shiftKey': 'N', 'key': 'n' }, 'KeyO': { 'keyCode': 79, 'code': 'KeyO', 'shiftKey': 'O', 'key': 'o' }, 'KeyP': { 'keyCode': 80, 'code': 'KeyP', 'shiftKey': 'P', 'key': 'p' }, 'KeyQ': { 'keyCode': 81, 'code': 'KeyQ', 'shiftKey': 'Q', 'key': 'q' }, 'KeyR': { 'keyCode': 82, 'code': 'KeyR', 'shiftKey': 'R', 'key': 'r' }, 'KeyS': { 'keyCode': 83, 'code': 'KeyS', 'shiftKey': 'S', 'key': 's' }, 'KeyT': { 'keyCode': 84, 'code': 'KeyT', 'shiftKey': 'T', 'key': 't' }, 'KeyU': { 'keyCode': 85, 'code': 'KeyU', 'shiftKey': 'U', 'key': 'u' }, 'KeyV': { 'keyCode': 86, 'code': 'KeyV', 'shiftKey': 'V', 'key': 'v' }, 'KeyW': { 'keyCode': 87, 'code': 'KeyW', 'shiftKey': 'W', 'key': 'w' }, 'KeyX': { 'keyCode': 88, 'code': 'KeyX', 'shiftKey': 'X', 'key': 'x' }, 'KeyY': { 'keyCode': 89, 'code': 'KeyY', 'shiftKey': 'Y', 'key': 'y' }, 'KeyZ': { 'keyCode': 90, 'code': 'KeyZ', 'shiftKey': 'Z', 'key': 'z' }, 'MetaLeft': { 'keyCode': 91, 'code': 'MetaLeft', 'key': 'Meta', 'location': 1 }, 'MetaRight': { 'keyCode': 92, 'code': 'MetaRight', 'key': 'Meta', 'location': 2 }, 'ContextMenu': { 'keyCode': 93, 'code': 'ContextMenu', 'key': 'ContextMenu' }, 'NumpadMultiply': { 'keyCode': 106, 'code': 'NumpadMultiply', 'key': '*', 'location': 3 }, 'NumpadAdd': { 'keyCode': 107, 'code': 'NumpadAdd', 'key': '+', 'location': 3 }, 'NumpadSubtract': { 'keyCode': 109, 'code': 'NumpadSubtract', 'key': '-', 'location': 3 }, 'NumpadDivide': { 'keyCode': 111, 'code': 'NumpadDivide', 'key': '/', 'location': 3 }, 'F1': { 'keyCode': 112, 'code': 'F1', 'key': 'F1' }, 'F2': { 'keyCode': 113, 'code': 'F2', 'key': 'F2' }, 'F3': { 'keyCode': 114, 'code': 'F3', 'key': 'F3' }, 'F4': { 'keyCode': 115, 'code': 'F4', 'key': 'F4' }, 'F5': { 'keyCode': 116, 'code': 'F5', 'key': 'F5' }, 'F6': { 'keyCode': 117, 'code': 'F6', 'key': 'F6' }, 'F7': { 'keyCode': 118, 'code': 'F7', 'key': 'F7' }, 'F8': { 'keyCode': 119, 'code': 'F8', 'key': 'F8' }, 'F9': { 'keyCode': 120, 'code': 'F9', 'key': 'F9' }, 'F10': { 'keyCode': 121, 'code': 'F10', 'key': 'F10' }, 'F11': { 'keyCode': 122, 'code': 'F11', 'key': 'F11' }, 'F12': { 'keyCode': 123, 'code': 'F12', 'key': 'F12' }, 'F13': { 'keyCode': 124, 'code': 'F13', 'key': 'F13' }, 'F14': { 'keyCode': 125, 'code': 'F14', 'key': 'F14' }, 'F15': { 'keyCode': 126, 'code': 'F15', 'key': 'F15' }, 'F16': { 'keyCode': 127, 'code': 'F16', 'key': 'F16' }, 'F17': { 'keyCode': 128, 'code': 'F17', 'key': 'F17' }, 'F18': { 'keyCode': 129, 'code': 'F18', 'key': 'F18' }, 'F19': { 'keyCode': 130, 'code': 'F19', 'key': 'F19' }, 'F20': { 'keyCode': 131, 'code': 'F20', 'key': 'F20' }, 'F21': { 'keyCode': 132, 'code': 'F21', 'key': 'F21' }, 'F22': { 'keyCode': 133, 'code': 'F22', 'key': 'F22' }, 'F23': { 'keyCode': 134, 'code': 'F23', 'key': 'F23' }, 'F24': { 'keyCode': 135, 'code': 'F24', 'key': 'F24' }, 'NumLock': { 'keyCode': 144, 'code': 'NumLock', 'key': 'NumLock' }, 'ScrollLock': { 'keyCode': 145, 'code': 'ScrollLock', 'key': 'ScrollLock' }, 'AudioVolumeMute': { 'keyCode': 173, 'code': 'AudioVolumeMute', 'key': 'AudioVolumeMute' }, 'AudioVolumeDown': { 'keyCode': 174, 'code': 'AudioVolumeDown', 'key': 'AudioVolumeDown' }, 'AudioVolumeUp': { 'keyCode': 175, 'code': 'AudioVolumeUp', 'key': 'AudioVolumeUp' }, 'MediaTrackNext': { 'keyCode': 176, 'code': 'MediaTrackNext', 'key': 'MediaTrackNext' }, 'MediaTrackPrevious': { 'keyCode': 177, 'code': 'MediaTrackPrevious', 'key': 'MediaTrackPrevious' }, 'MediaStop': { 'keyCode': 178, 'code': 'MediaStop', 'key': 'MediaStop' }, 'MediaPlayPause': { 'keyCode': 179, 'code': 'MediaPlayPause', 'key': 'MediaPlayPause' }, 'Semicolon': { 'keyCode': 186, 'code': 'Semicolon', 'shiftKey': ':', 'key': ';' }, 'Equal': { 'keyCode': 187, 'code': 'Equal', 'shiftKey': '+', 'key': '=' }, 'NumpadEqual': { 'keyCode': 187, 'code': 'NumpadEqual', 'key': '=', 'location': 3 }, 'Comma': { 'keyCode': 188, 'code': 'Comma', 'shiftKey': '\<', 'key': ',' }, 'Minus': { 'keyCode': 189, 'code': 'Minus', 'shiftKey': '_', 'key': '-' }, 'Period': { 'keyCode': 190, 'code': 'Period', 'shiftKey': '>', 'key': '.' }, 'Slash': { 'keyCode': 191, 'code': 'Slash', 'shiftKey': '?', 'key': '/' }, 'Backquote': { 'keyCode': 192, 'code': 'Backquote', 'shiftKey': '~', 'key': '`' }, 'BracketLeft': { 'keyCode': 219, 'code': 'BracketLeft', 'shiftKey': '{', 'key': '[' }, 'Backslash': { 'keyCode': 220, 'code': 'Backslash', 'shiftKey': '|', 'key': '\\' }, 'BracketRight': { 'keyCode': 221, 'code': 'BracketRight', 'shiftKey': '}', 'key': ']' }, 'Quote': { 'keyCode': 222, 'code': 'Quote', 'shiftKey': '"', 'key': '\'' }, 'AltGraph': { 'keyCode': 225, 'code': 'AltGraph', 'key': 'AltGraph' }, 'Props': { 'keyCode': 247, 'code': 'Props', 'key': 'CrSel' }, 'Cancel': { 'keyCode': 3, 'key': 'Cancel', 'code': 'Abort' }, 'Clear': { 'keyCode': 12, 'key': 'Clear', 'code': 'Numpad5', 'location': 3 }, 'Shift': { 'keyCode': 16, 'key': 'Shift', 'code': 'ShiftLeft', 'location': 1 }, 'Control': { 'keyCode': 17, 'key': 'Control', 'code': 'ControlLeft', 'location': 1 }, 'Alt': { 'keyCode': 18, 'key': 'Alt', 'code': 'AltLeft', 'location': 1 }, 'Accept': { 'keyCode': 30, 'key': 'Accept' }, 'ModeChange': { 'keyCode': 31, 'key': 'ModeChange' }, ' ': { 'keyCode': 32, 'key': ' ', 'code': 'Space' }, 'Print': { 'keyCode': 42, 'key': 'Print' }, 'Execute': { 'keyCode': 43, 'key': 'Execute', 'code': 'Open' }, '\u0000': { 'keyCode': 46, 'key': '\u0000', 'code': 'NumpadDecimal', 'location': 3 }, 'a': { 'keyCode': 65, 'key': 'a', 'code': 'KeyA' }, 'b': { 'keyCode': 66, 'key': 'b', 'code': 'KeyB' }, 'c': { 'keyCode': 67, 'key': 'c', 'code': 'KeyC' }, 'd': { 'keyCode': 68, 'key': 'd', 'code': 'KeyD' }, 'e': { 'keyCode': 69, 'key': 'e', 'code': 'KeyE' }, 'f': { 'keyCode': 70, 'key': 'f', 'code': 'KeyF' }, 'g': { 'keyCode': 71, 'key': 'g', 'code': 'KeyG' }, 'h': { 'keyCode': 72, 'key': 'h', 'code': 'KeyH' }, 'i': { 'keyCode': 73, 'key': 'i', 'code': 'KeyI' }, 'j': { 'keyCode': 74, 'key': 'j', 'code': 'KeyJ' }, 'k': { 'keyCode': 75, 'key': 'k', 'code': 'KeyK' }, 'l': { 'keyCode': 76, 'key': 'l', 'code': 'KeyL' }, 'm': { 'keyCode': 77, 'key': 'm', 'code': 'KeyM' }, 'n': { 'keyCode': 78, 'key': 'n', 'code': 'KeyN' }, 'o': { 'keyCode': 79, 'key': 'o', 'code': 'KeyO' }, 'p': { 'keyCode': 80, 'key': 'p', 'code': 'KeyP' }, 'q': { 'keyCode': 81, 'key': 'q', 'code': 'KeyQ' }, 'r': { 'keyCode': 82, 'key': 'r', 'code': 'KeyR' }, 's': { 'keyCode': 83, 'key': 's', 'code': 'KeyS' }, 't': { 'keyCode': 84, 'key': 't', 'code': 'KeyT' }, 'u': { 'keyCode': 85, 'key': 'u', 'code': 'KeyU' }, 'v': { 'keyCode': 86, 'key': 'v', 'code': 'KeyV' }, 'w': { 'keyCode': 87, 'key': 'w', 'code': 'KeyW' }, 'x': { 'keyCode': 88, 'key': 'x', 'code': 'KeyX' }, 'y': { 'keyCode': 89, 'key': 'y', 'code': 'KeyY' }, 'z': { 'keyCode': 90, 'key': 'z', 'code': 'KeyZ' }, 'Meta': { 'keyCode': 91, 'key': 'Meta', 'code': 'MetaLeft', 'location': 1 }, '*': { 'keyCode': 106, 'key': '*', 'code': 'NumpadMultiply', 'location': 3 }, '+': { 'keyCode': 107, 'key': '+', 'code': 'NumpadAdd', 'location': 3 }, '-': { 'keyCode': 109, 'key': '-', 'code': 'NumpadSubtract', 'location': 3 }, '/': { 'keyCode': 111, 'key': '/', 'code': 'NumpadDivide', 'location': 3 }, ';': { 'keyCode': 186, 'key': ';', 'code': 'Semicolon' }, '=': { 'keyCode': 187, 'key': '=', 'code': 'Equal' }, ',': { 'keyCode': 188, 'key': ',', 'code': 'Comma' }, '.': { 'keyCode': 190, 'key': '.', 'code': 'Period' }, '`': { 'keyCode': 192, 'key': '`', 'code': 'Backquote' }, '[': { 'keyCode': 219, 'key': '[', 'code': 'BracketLeft' }, '\\': { 'keyCode': 220, 'key': '\\', 'code': 'Backslash' }, ']': { 'keyCode': 221, 'key': ']', 'code': 'BracketRight' }, '\'': { 'keyCode': 222, 'key': '\'', 'code': 'Quote' }, 'Attn': { 'keyCode': 246, 'key': 'Attn' }, 'CrSel': { 'keyCode': 247, 'key': 'CrSel', 'code': 'Props' }, 'ExSel': { 'keyCode': 248, 'key': 'ExSel' }, 'EraseEof': { 'keyCode': 249, 'key': 'EraseEof' }, 'Play': { 'keyCode': 250, 'key': 'Play' }, 'ZoomOut': { 'keyCode': 251, 'key': 'ZoomOut' }, ')': { 'keyCode': 48, 'key': ')', 'code': 'Digit0' }, '!': { 'keyCode': 49, 'key': '!', 'code': 'Digit1' }, '@': { 'keyCode': 50, 'key': '@', 'code': 'Digit2' }, '#': { 'keyCode': 51, 'key': '#', 'code': 'Digit3' }, '$': { 'keyCode': 52, 'key': '$', 'code': 'Digit4' }, '%': { 'keyCode': 53, 'key': '%', 'code': 'Digit5' }, '^': { 'keyCode': 54, 'key': '^', 'code': 'Digit6' }, '&': { 'keyCode': 55, 'key': '&', 'code': 'Digit7' }, '(': { 'keyCode': 57, 'key': '\(', 'code': 'Digit9' }, 'A': { 'keyCode': 65, 'key': 'A', 'code': 'KeyA' }, 'B': { 'keyCode': 66, 'key': 'B', 'code': 'KeyB' }, 'C': { 'keyCode': 67, 'key': 'C', 'code': 'KeyC' }, 'D': { 'keyCode': 68, 'key': 'D', 'code': 'KeyD' }, 'E': { 'keyCode': 69, 'key': 'E', 'code': 'KeyE' }, 'F': { 'keyCode': 70, 'key': 'F', 'code': 'KeyF' }, 'G': { 'keyCode': 71, 'key': 'G', 'code': 'KeyG' }, 'H': { 'keyCode': 72, 'key': 'H', 'code': 'KeyH' }, 'I': { 'keyCode': 73, 'key': 'I', 'code': 'KeyI' }, 'J': { 'keyCode': 74, 'key': 'J', 'code': 'KeyJ' }, 'K': { 'keyCode': 75, 'key': 'K', 'code': 'KeyK' }, 'L': { 'keyCode': 76, 'key': 'L', 'code': 'KeyL' }, 'M': { 'keyCode': 77, 'key': 'M', 'code': 'KeyM' }, 'N': { 'keyCode': 78, 'key': 'N', 'code': 'KeyN' }, 'O': { 'keyCode': 79, 'key': 'O', 'code': 'KeyO' }, 'P': { 'keyCode': 80, 'key': 'P', 'code': 'KeyP' }, 'Q': { 'keyCode': 81, 'key': 'Q', 'code': 'KeyQ' }, 'R': { 'keyCode': 82, 'key': 'R', 'code': 'KeyR' }, 'S': { 'keyCode': 83, 'key': 'S', 'code': 'KeyS' }, 'T': { 'keyCode': 84, 'key': 'T', 'code': 'KeyT' }, 'U': { 'keyCode': 85, 'key': 'U', 'code': 'KeyU' }, 'V': { 'keyCode': 86, 'key': 'V', 'code': 'KeyV' }, 'W': { 'keyCode': 87, 'key': 'W', 'code': 'KeyW' }, 'X': { 'keyCode': 88, 'key': 'X', 'code': 'KeyX' }, 'Y': { 'keyCode': 89, 'key': 'Y', 'code': 'KeyY' }, 'Z': { 'keyCode': 90, 'key': 'Z', 'code': 'KeyZ' }, ':': { 'keyCode': 186, 'key': ':', 'code': 'Semicolon' }, '<': { 'keyCode': 188, 'key': '\<', 'code': 'Comma' }, '_': { 'keyCode': 189, 'key': '_', 'code': 'Minus' }, '>': { 'keyCode': 190, 'key': '>', 'code': 'Period' }, '?': { 'keyCode': 191, 'key': '?', 'code': 'Slash' }, '~': { 'keyCode': 192, 'key': '~', 'code': 'Backquote' }, '{': { 'keyCode': 219, 'key': '{', 'code': 'BracketLeft' }, '|': { 'keyCode': 220, 'key': '|', 'code': 'Backslash' }, '}': { 'keyCode': 221, 'key': '}', 'code': 'BracketRight' }, '"': { 'keyCode': 222, 'key': '"', 'code': 'Quote' } }; const FRAME_CONTROL = false; const WorldName = 'PlanetZanj'; const SHORT_TIMEOUT = 1000; const MIN_DELTA = 40; const MIN_PIX_DELTA = 8; const THRESHOLD_DELTA = 1; const DOM_DELTA_PIXEL = 0; const DOM_DELTA_LINE = 1; const DOM_DELTA_PAGE = 2; const LINE_HEIGHT_GUESS = 32; const SYNTHETIC_CTRL = e => keyEvent({ key: 'Control', originalType: e.originalType }, 2, true); function translator(e) { let handled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { type: 'case' }; handled.type = handled.type || 'case'; switch (e.type) { case "touchcancel": { return { command: { name: "Input.dispatchTouchEvent", params: { type: "touchCancel" } } }; } case "mousedown": case "mouseup": case "mousemove": case "pointerdown": case "pointerup": case "pointermove": { let button = "none"; if (!e.type.endsWith("move")) { if (e.button == 0) { button = "left"; } else { button = "right"; } } return { command: { name: "Input.emulateTouchFromMouseEvent", params: { x: Math.round(e.bitmapX), y: Math.round(e.bitmapY), type: e.type.endsWith("down") ? "mousePressed" : e.type.endsWith("up") ? "mouseReleased" : "mouseMoved", button, clickCount: !e.type.endsWith("move") ? 1 : 0, modifiers: encodeModifiers(e.originalEvent) }, requiresShot: !e.originalEvent.noShot && e.type.endsWith("down") } }; } case "wheel": { // if we use emulateTouchFromMouseEvent we need a button value const deltaMode = e.originalEvent.deltaMode; const deltaX = adjustWheelDeltaByMode(e.originalEvent.deltaX, deltaMode); const deltaY = adjustWheelDeltaByMode(e.originalEvent.deltaY, deltaMode); const { contextId } = e; const clientX = 0; const clientY = 0; const deltas = { deltaX, deltaY, clientX, clientY }; let retVal; if (deltaX > MIN_DELTA || deltaY > MIN_DELTA) { const retVal1 = { command: { name: "Runtime.evaluate", params: { expression: "self.ensureScroll(".concat(JSON.stringify(deltas), ");"), includeCommandLineAPI: false, userGesture: true, contextId, timeout: SHORT_TIMEOUT } } }; const retVal2 = mouseEvent(e, deltaX, deltaY); retVal = [retVal1, retVal2]; } else { retVal = mouseEvent(e, deltaX, deltaY); } return retVal; } case "auth-response": { const { requestId, authResponse } = e; return { command: { name: "Fetch.continueWithAuth", params: { requestId, authChallengeResponse: authResponse } } }; } case "resample-imagery": { const { down, up, averageBw } = e; return { command: { isZombieLordCommand: true, name: "Connection.resampleImagery", params: { averageBw, down, up } } }; } case "control-chars": { return keyEvent(e); } case "keydown": if (!e.key || !e.code) { return; } else if (e.key == "Unidentified" || e.code == "Unidentified") { return; } else { return keyEvent(e); } case "keyup": if (!e.key || !e.code) { return; } else if (e.key == "Unidentified" || e.code == "Unidentified") { return; } else { return keyEvent(e); } case "keypress": { if (e.code == "Unidentified") { if (e.key.length) { const text = e.key; return { command: { name: "Input.insertText", params: { text }, requiresShot: true, ignoreHash: true } }; } else return; } else if (e.key == "Unidentified") { if (e.code.length) { const text = e.code; return { command: { name: "Input.insertText", params: { text }, requiresShot: true, ignoreHash: true } }; } else return; } else return keyEvent(e); } case "typing": { if (e.isComposing || !e.characters) return;else return { command: { name: "Input.insertText", params: { text: e.characters || '' }, requiresShot: true, ignoreHash: true } }; } case "typing-syncValue": { return { command: { name: "Runtime.evaluate", params: { expression: "syncFocusedInputToValue(\"".concat(e.encodedValue, "\");"), includeCommandLineAPI: false, userGesture: true, contextId: e.contextId, timeout: SHORT_TIMEOUT }, requiresShot: true, ignoreHash: true } }; } case "typing-deleteContentBackward": { if (!e.encodedValueToDelete) return;else return { command: { name: "Runtime.evaluate", params: { expression: "fromFocusedInputDeleteLastOccurrenceOf(\"".concat(e.encodedValueToDelete, "\");"), includeCommandLineAPI: false, userGesture: true, contextId: e.contextId, timeout: SHORT_TIMEOUT }, requiresShot: true } }; } case "url-address": { return { command: { name: "Page.navigate", params: { url: e.address }, requiresLoad: true, requiresShot: true, requiresTailShot: true } }; } case "setDocument": { const { frameId, sessionId, html } = e; if (frameId) { return { command: { name: "Page.setDocumentContent", params: { html, frameId, sessionId }, requiresShot: true } }; } else { return { chain: [{ command: { name: "Page.getFrameTree", params: {} } }, _ref => { let { frameTree: { frame: { id: frameId } } } = _ref; return { command: { name: "Page.setDocumentContent", params: { html, frameId }, requiresShot: true } }; }] }; } } case "history": { switch (e.action) { case "reload": case "stop": { return { command: { requiresLoad: e.action == "reload", requiresShot: e.action == "reload", name: e.action == "reload" ? "Page.reload" : "Page.stopLoading", params: {} } }; } case "back": case "forward": { return { chain: [{ command: { name: "Page.getNavigationHistory", params: {} } }, _ref2 => { let { currentIndex, entries } = _ref2; const intendedEntry = entries[currentIndex + (e.action == "back" ? -1 : +1)]; if (intendedEntry) { return { command: { name: "Page.navigateToHistoryEntry", params: { entryId: intendedEntry.id }, requiresLoad: true, requiresShot: true, requiresTailShot: true } }; } }] }; } default: { throw new TypeError("Unkown history action ".concat(e.action)); } } } case "touchscroll": { let { deltaX, deltaY, bitmapX: clientX, bitmapY: clientY, contextId } = e; // only one scroll direction at a time if (Math.abs(deltaY) > Math.abs(deltaX)) { deltaX = 0; if (Math.abs(deltaY) > 0.2 * self.ViewportHeight) { deltaY = Math.round(5.718 * deltaY); } } else { deltaY = 0; if (Math.abs(deltaX) > 0.3 * self.ViewportWidth) { deltaX = Math.round(5.718 * deltaX); } } clientX = Math.round(clientX); clientY = Math.round(clientY); const deltas = { deltaX, deltaY, clientX, clientY }; const retVal1 = { command: { name: "Runtime.evaluate", params: { expression: "self.ensureScroll(".concat(JSON.stringify(deltas), ");"), includeCommandLineAPI: false, userGesture: true, contextId, timeout: SHORT_TIMEOUT } } }; const retVal2 = mouseEvent(e, deltaX, deltaY); const retVal = [retVal1, retVal2]; return retVal; } case "zoom": { /** retval does not work. Expanding pinch is OK, but contracting seems to fail **/ /* const retVal = { command: { name: "Input.synthesizePinchGesture", params: { relativeSpeed: 300, scaleFactor: e.scale, gestureSourceType: "touch", x: Math.round(e.bitmapX), y: Math.round(e.bitmapY) }, requiresShot: true, requiresExtraWait: true, extraWait: 300 } }; */ /** so we are using emulation and multiplying the scale factor in the event listener **/ const retVal2 = { command: { name: "Emulation.setPageScaleFactor", params: { pageScaleFactor: e.scale }, requiresShot: true, requiresExtraWait: true, extraWait: 300 } }; return retVal2; } case "select": { const retVal = { command: { name: "Runtime.evaluate", params: { expression: "self.setSelectValue(\"".concat(e.value, "\");"), includeCommandLineAPI: false, userGesture: true, contextId: e.executionContext, timeout: SHORT_TIMEOUT }, requiresShot: true, requiresExtraWait: true, extraWait: 300 } }; return retVal; } case "window-bounds": { let { width, height, targetId } = e; width = parseInt(width); height = parseInt(height); const retVal = { chain: [{ command: { name: "Browser.getWindowForTarget", params: { targetId } } }, _ref3 => { let { windowId, bounds } = _ref3; if (bounds.width == width && bounds.height == height) return; const retVal = { command: { name: "Browser.setWindowBounds", params: { windowId, bounds: { width, height } }, requiresWindowId: true } }; return retVal; }] }; return retVal; } case "window-bounds-preImplementation": { let { width, height, mobile } = e; width = parseInt(width); height = parseInt(height); const retVal = { command: { name: "Emulation.setDeviceMetricsOverride", params: { width, height, mobile, deviceScaleFactor: 1, screenOrientation: { angle: 90, type: 'landscapePrimary' } } }, requiresShot: true }; return retVal; } case "user-agent": { const { userAgent, platform, acceptLanguage } = e; const retVal = { command: { name: "Network.setUserAgentOverride", params: { userAgent, platform, acceptLanguage } } }; return retVal; } case "hide-scrollbars": { const retVal = { command: { name: "Emulation.setScrollbarsHidden", params: { hidden: true } } }; return retVal; } case "buffered-results-collection": { return e; } case "doShot": { return { command: { isZombieLordCommand: true, name: "Connection.doShot", params: {} } }; } case "canKeysInput": { return { chain: [{ command: { isZombieLordCommand: true, name: "Connection.getContextIdsForActiveSession", params: { worldName: WorldName } } }, _ref4 => { let { contextIds } = _ref4; return contextIds.map(contextId => ({ command: { name: "Runtime.evaluate", params: { expression: "canKeysInput();", contextId: contextId, timeout: SHORT_TIMEOUT } } })); }] }; } case "describeNode": { const { backendNodeId } = e; return { command: { name: "DOM.describeNode", params: { backendNodeId } } }; } case "getElementInfo": { return { chain: [{ command: { isZombieLordCommand: true, name: "Connection.getContextIdsForActiveSession", params: { worldName: WorldName } } }, _ref5 => { let { contextIds } = _ref5; return contextIds.map(contextId => ({ command: { name: "Runtime.evaluate", params: { expression: "getElementInfo(".concat(JSON.stringify(e.data), ");"), contextId: contextId, timeout: SHORT_TIMEOUT } } })); }] }; } case "getFavicon": { return { chain: [{ command: { isZombieLordCommand: true, name: "Connection.getAllContextIds", params: { worldName: WorldName } } }, _ref6 => { let { sessionContextIdPairs } = _ref6; return sessionContextIdPairs.map(_ref7 => { let { sessionId, contextId } = _ref7; return { command: { name: "Runtime.evaluate", params: { sessionId, contextId, expression: "getFaviconElement();", timeout: SHORT_TIMEOUT } } }; }); }] }; } case "newIncognitoTab": { return { chain: [{ command: { name: "Target.createBrowserContext", params: {} } }, _ref8 => { let { browserContextId } = _ref8; return { command: { name: "Target.createTarget", params: { browserContextId, url: "about:blank", enableBeginFrameControl: FRAME_CONTROL } } }; }] }; } case "isMobile": { return { command: { isZombieLordCommand: true, name: "Connection.setIsMobile", params: {} } }; } case "isSafari": { return { command: { isZombieLordCommand: true, name: "Connection.setIsSafari", params: {} } }; } case "isFirefox": { return { command: { isZombieLordCommand: true, name: "Connection.setIsFirefox", params: {} } }; } case "clearAllPageHistory": { return { chain: [{ command: { isZombieLordCommand: true, name: "Connection.getAllSessionIds", params: {} } }, _ref9 => { let { sessionIds } = _ref9; return sessionIds.map(sessionId => { return { command: { name: "Page.resetNavigationHistory", params: { sessionId } } }; }); }] }; } case "clearCache": { return { command: { name: "Network.clearBrowserCache", params: {} } }; } case "clearCookies": { return { command: { name: "Network.clearBrowserCookies", params: {} } }; } case "respond-to-modal": { let accept = false; let { response, sessionId, promptText } = e; if (response == "ok") { accept = true; } return { command: { name: "Page.handleJavaScriptDialog", params: { accept, promptText, sessionId } } }; } default: { if (!!e.command && !!e.command.name || Array.isArray(e)) { handled.type = 'default'; return e; } else { handled.type = 'unhandled'; return; } } } } function mouseEvent(e) { let deltaX = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; let deltaY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; return { command: { name: "Input.dispatchMouseEvent", params: { x: Math.round(e.bitmapX), y: Math.round(e.bitmapY), type: "mouseWheel", deltaX, deltaY }, requiresShot: true } }; } function keyEvent(e) { let modifiers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; let SYNTHETIC = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; const id = e.key && e.key.length > 1 ? e.key : e.code; const def = keys[id]; const text = e.originalType == "keypress" ? String.fromCharCode(e.keyCode) : undefined; modifiers = modifiers || encodeModifiers(e.originalEvent); let type; if (e.originalType == "keydown") { if (text) type = "keyDown";else type = "rawKeyDown"; } else if (e.originalType == "keypress") { type = "char"; } else { type = "keyUp"; } const retVal = { command: { name: "Input.dispatchKeyEvent", params: { type, text, unmodifiedText: text, code: def.code, key: def.key, windowsVirtualKeyCode: e.keyCode, modifiers }, requiresShot: e.key == "Enter" || e.key == "Tab" || e.key == "Delete", ignoreHash: e.key == "Enter" || e.key == "Tab" || e.key == "Delete" } }; if (!SYNTHETIC && retVal.command.params.key == 'Meta') { return [retVal, SYNTHETIC_CTRL(e)]; } return retVal; } function encodeModifiers(originalEvent) { let modifiers = 0; if (originalEvent.altKey) { modifiers += 1; } if (originalEvent.ctrlKey || originalEvent.metaKey) { modifiers += 2; } if (originalEvent.metaKey) { modifiers += 4; } if (originalEvent.shiftKey) { modifiers += 8; } return modifiers; } function adjustWheelDeltaByMode(delta, mode) { if (delta == 0) return delta; let threshold = Math.abs(delta) > THRESHOLD_DELTA; if (!threshold) { delta = Math.sqrt(Math.abs(delta)) * Math.sign(delta); } switch (mode) { case DOM_DELTA_PIXEL: //console.log("pix mode", delta); if (threshold && Math.abs(delta) < MIN_PIX_DELTA) { delta = Math.sign(delta) * MIN_PIX_DELTA; } break; case DOM_DELTA_LINE: //console.log("line mode", delta); delta = delta * LINE_HEIGHT_GUESS; if (threshold && Math.abs(delta) < MIN_DELTA) { delta = Math.sign(delta) * MIN_DELTA; } break; case DOM_DELTA_PAGE: //console.log("page mode", delta); delta = delta * self.ViewportHeight; if (threshold && Math.abs(delta) < MIN_DELTA) { delta = Math.sign(delta) * MIN_DELTA; } break; } return delta; } const SafariPlatform = /^((?!chrome|android).)*safari/i; const MobilePlatform = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i; const FirefoxPlatform = /firefox/i; const iden = e => e; const isSafari = () => SafariPlatform.test(navigator.userAgent); const BLANK = "about:blank"; const DEBUG = { loggableEvents: new Set([ /*typing events*/ 'keydown', 'keypress', 'keyup', 'compositionstart', 'compositionupdate', 'compositionend', 'input', 'beforeinput', /*pointing events*/ 'pointerdown', 'pointerup', 'pointermove', 'touchmove', 'touchstart', 'touchcancel', 'mousedown', 'mouseup', 'mousemove', 'click', 'contextmenu', 'dblclick']), activateNewTab: false, frameControl: FRAME_CONTROL, pluginsMenu: false, serviceWorker: false, delayUnload: true, neonMode: false, resetCache: false, dev: false, val: