xref: /plugin/combo/vendor/php-webdriver/webdriver/lib/WebDriverKeys.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace Facebook\WebDriver;
4*04fd306cSNickeau
5*04fd306cSNickeau/**
6*04fd306cSNickeau * Representations of pressable keys that aren't text.
7*04fd306cSNickeau * These are stored in the Unicode PUA (Private Use Area) code points.
8*04fd306cSNickeau * @see https://w3c.github.io/webdriver/#keyboard-actions
9*04fd306cSNickeau */
10*04fd306cSNickeauclass WebDriverKeys
11*04fd306cSNickeau{
12*04fd306cSNickeau    const NULL = "\xEE\x80\x80";
13*04fd306cSNickeau    const CANCEL = "\xEE\x80\x81";
14*04fd306cSNickeau    const HELP = "\xEE\x80\x82";
15*04fd306cSNickeau    const BACKSPACE = "\xEE\x80\x83";
16*04fd306cSNickeau    const TAB = "\xEE\x80\x84";
17*04fd306cSNickeau    const CLEAR = "\xEE\x80\x85";
18*04fd306cSNickeau    const RETURN_KEY = "\xEE\x80\x86";
19*04fd306cSNickeau    const ENTER = "\xEE\x80\x87";
20*04fd306cSNickeau    const SHIFT = "\xEE\x80\x88";
21*04fd306cSNickeau    const CONTROL = "\xEE\x80\x89";
22*04fd306cSNickeau    const ALT = "\xEE\x80\x8A";
23*04fd306cSNickeau    const PAUSE = "\xEE\x80\x8B";
24*04fd306cSNickeau    const ESCAPE = "\xEE\x80\x8C";
25*04fd306cSNickeau    const SPACE = "\xEE\x80\x8D";
26*04fd306cSNickeau    const PAGE_UP = "\xEE\x80\x8E";
27*04fd306cSNickeau    const PAGE_DOWN = "\xEE\x80\x8F";
28*04fd306cSNickeau    const END = "\xEE\x80\x90";
29*04fd306cSNickeau    const HOME = "\xEE\x80\x91";
30*04fd306cSNickeau    const ARROW_LEFT = "\xEE\x80\x92";
31*04fd306cSNickeau    const ARROW_UP = "\xEE\x80\x93";
32*04fd306cSNickeau    const ARROW_RIGHT = "\xEE\x80\x94";
33*04fd306cSNickeau    const ARROW_DOWN = "\xEE\x80\x95";
34*04fd306cSNickeau    const INSERT = "\xEE\x80\x96";
35*04fd306cSNickeau    const DELETE = "\xEE\x80\x97";
36*04fd306cSNickeau    const SEMICOLON = "\xEE\x80\x98";
37*04fd306cSNickeau    const EQUALS = "\xEE\x80\x99";
38*04fd306cSNickeau    const NUMPAD0 = "\xEE\x80\x9A";
39*04fd306cSNickeau    const NUMPAD1 = "\xEE\x80\x9B";
40*04fd306cSNickeau    const NUMPAD2 = "\xEE\x80\x9C";
41*04fd306cSNickeau    const NUMPAD3 = "\xEE\x80\x9D";
42*04fd306cSNickeau    const NUMPAD4 = "\xEE\x80\x9E";
43*04fd306cSNickeau    const NUMPAD5 = "\xEE\x80\x9F";
44*04fd306cSNickeau    const NUMPAD6 = "\xEE\x80\xA0";
45*04fd306cSNickeau    const NUMPAD7 = "\xEE\x80\xA1";
46*04fd306cSNickeau    const NUMPAD8 = "\xEE\x80\xA2";
47*04fd306cSNickeau    const NUMPAD9 = "\xEE\x80\xA3";
48*04fd306cSNickeau    const MULTIPLY = "\xEE\x80\xA4";
49*04fd306cSNickeau    const ADD = "\xEE\x80\xA5";
50*04fd306cSNickeau    const SEPARATOR = "\xEE\x80\xA6";
51*04fd306cSNickeau    const SUBTRACT = "\xEE\x80\xA7";
52*04fd306cSNickeau    const DECIMAL = "\xEE\x80\xA8";
53*04fd306cSNickeau    const DIVIDE = "\xEE\x80\xA9";
54*04fd306cSNickeau    const F1 = "\xEE\x80\xB1";
55*04fd306cSNickeau    const F2 = "\xEE\x80\xB2";
56*04fd306cSNickeau    const F3 = "\xEE\x80\xB3";
57*04fd306cSNickeau    const F4 = "\xEE\x80\xB4";
58*04fd306cSNickeau    const F5 = "\xEE\x80\xB5";
59*04fd306cSNickeau    const F6 = "\xEE\x80\xB6";
60*04fd306cSNickeau    const F7 = "\xEE\x80\xB7";
61*04fd306cSNickeau    const F8 = "\xEE\x80\xB8";
62*04fd306cSNickeau    const F9 = "\xEE\x80\xB9";
63*04fd306cSNickeau    const F10 = "\xEE\x80\xBA";
64*04fd306cSNickeau    const F11 = "\xEE\x80\xBB";
65*04fd306cSNickeau    const F12 = "\xEE\x80\xBC";
66*04fd306cSNickeau    const META = "\xEE\x80\xBD";
67*04fd306cSNickeau    const ZENKAKU_HANKAKU = "\xEE\x80\xC0";
68*04fd306cSNickeau    const RIGHT_SHIFT = "\xEE\x81\x90";
69*04fd306cSNickeau    const RIGHT_CONTROL = "\xEE\x81\x91";
70*04fd306cSNickeau    const RIGHT_ALT = "\xEE\x81\x92";
71*04fd306cSNickeau    const RIGHT_META = "\xEE\x81\x93";
72*04fd306cSNickeau    const NUMPAD_PAGE_UP = "\xEE\x81\x94";
73*04fd306cSNickeau    const NUMPAD_PAGE_DOWN = "\xEE\x81\x95";
74*04fd306cSNickeau    const NUMPAD_END = "\xEE\x81\x96";
75*04fd306cSNickeau    const NUMPAD_HOME = "\xEE\x81\x97";
76*04fd306cSNickeau    const NUMPAD_ARROW_LEFT = "\xEE\x81\x98";
77*04fd306cSNickeau    const NUMPAD_ARROW_UP = "\xEE\x81\x99";
78*04fd306cSNickeau    const NUMPAD_ARROW_RIGHT = "\xEE\x81\x9A";
79*04fd306cSNickeau    const NUMPAD_ARROW_DOWN = "\xEE\x81\x9B";
80*04fd306cSNickeau    const NUMPAD_ARROW_INSERT = "\xEE\x81\x9C";
81*04fd306cSNickeau    const NUMPAD_ARROW_DELETE = "\xEE\x81\x9D";
82*04fd306cSNickeau    // Aliases
83*04fd306cSNickeau    const LEFT_SHIFT = self::SHIFT;
84*04fd306cSNickeau    const LEFT_CONTROL = self::CONTROL;
85*04fd306cSNickeau    const LEFT_ALT = self::ALT;
86*04fd306cSNickeau    const LEFT = self::ARROW_LEFT;
87*04fd306cSNickeau    const UP = self::ARROW_UP;
88*04fd306cSNickeau    const RIGHT = self::ARROW_RIGHT;
89*04fd306cSNickeau    const DOWN = self::ARROW_DOWN;
90*04fd306cSNickeau    const COMMAND = self::META;
91*04fd306cSNickeau
92*04fd306cSNickeau    /**
93*04fd306cSNickeau     * Encode input of `sendKeys()` to appropriate format according to protocol.
94*04fd306cSNickeau     *
95*04fd306cSNickeau     * @param string|array|int|float $keys
96*04fd306cSNickeau     * @param bool $isW3cCompliant
97*04fd306cSNickeau     * @return array|string
98*04fd306cSNickeau     */
99*04fd306cSNickeau    public static function encode($keys, $isW3cCompliant = false)
100*04fd306cSNickeau    {
101*04fd306cSNickeau        if (is_numeric($keys)) {
102*04fd306cSNickeau            $keys = (string) $keys;
103*04fd306cSNickeau        }
104*04fd306cSNickeau
105*04fd306cSNickeau        if (is_string($keys)) {
106*04fd306cSNickeau            $keys = [$keys];
107*04fd306cSNickeau        }
108*04fd306cSNickeau
109*04fd306cSNickeau        if (!is_array($keys)) {
110*04fd306cSNickeau            if (!$isW3cCompliant) {
111*04fd306cSNickeau                return [];
112*04fd306cSNickeau            }
113*04fd306cSNickeau
114*04fd306cSNickeau            return '';
115*04fd306cSNickeau        }
116*04fd306cSNickeau
117*04fd306cSNickeau        $encoded = [];
118*04fd306cSNickeau        foreach ($keys as $key) {
119*04fd306cSNickeau            if (is_array($key)) {
120*04fd306cSNickeau                // handle key modifiers
121*04fd306cSNickeau                $key = implode('', $key) . self::NULL; // the NULL clears the input state (eg. previous modifiers)
122*04fd306cSNickeau            }
123*04fd306cSNickeau            $encoded[] = (string) $key;
124*04fd306cSNickeau        }
125*04fd306cSNickeau
126*04fd306cSNickeau        if (!$isW3cCompliant) {
127*04fd306cSNickeau            return $encoded;
128*04fd306cSNickeau        }
129*04fd306cSNickeau
130*04fd306cSNickeau        return implode('', $encoded);
131*04fd306cSNickeau    }
132*04fd306cSNickeau}
133