the_king_of_crap / TEL 快捷键

// ==UserScript==
// @name         TEL 快捷键
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  TEL + 快捷键
// @author       The King of Crap
// @match        https://tel.tigermed.net/*
// @icon         https://tel.tigermed.net/moodle/theme/image.php/clean/theme/1590472767/favicon
// @license      MIT
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==

/*
使用指南:使用如下快捷键。Q键和R键需要打开两个页面配合使用。
------------------------------------------------------------
快捷键:
数字键1:模拟鼠标对选项a进行点击。
数字键2:模拟鼠标对选项b进行点击。
数字键3:模拟鼠标对选项c进行点击。
数字键4:模拟鼠标对选项d进行点击。
数字键5:模拟鼠标对选项e进行点击。
数字键6:模拟鼠标对选项f进行点击。
数字键7:模拟鼠标对选项g进行点击。
`~(在数字键1左侧):单选题点击最后一项选项;多选题点击全部选项。
空格:点击下一题或者所有可能的确认选项。
Q:将题目复制到剪切板。
R:直接在当前页面搜索题目,并跳转;题目内容由Q键复制得到。
------------------------------------------------------------
*/

(function () {
  document.querySelector("html").addEventListener('keydown', function (e) {

    /* 快捷键分配为:R */
    if (e.keyCode == 82) {
      var text = GM_getValue("question");
      if (!window.find(text, false)) {
        window.find(text, false, true);
      }
    }

    function trim(s) {
      return (s || '').replace(/^\s+|\s+$/g, '');
    }

    /* 快捷键分配为:Q */
    if (e.keyCode == 81) {
      text = document.querySelector(".qtext").innerText;
      text = trim(text);
      if (text.indexOf(":") > 0) {
          text = text.substr(0, text.indexOf(":"));
      } else if (text.indexOf("?") > 0) {
          text = text.substr(0, text.indexOf("?"));
      }
      
      GM_setValue("question", text);

      let transfer = document.createElement('input');
      document.body.appendChild(transfer);
      transfer.value = text;
      transfer.focus();
      transfer.select();
      if (document.execCommand('copy')) {
        document.execCommand('copy');
      }
      transfer.blur();
      console.log('复制成功');
      document.body.removeChild(transfer);
    }

    /* 快捷键分配为:Space Bar */
    if (e.keyCode == 32) {
      if (document.querySelector("input[value='Next page']")) {
        document.querySelector("input[value='Next page']").click();
      }
      else if (document.querySelector("input[value='Finish attempt ...']")) {
        document.querySelector("input[value='Finish attempt ...']").click();
      }
      else if (document.querySelector("input[value='Submit all and finish'][type='button']")) {
        document.querySelector("input[value='Submit all and finish'][type='button']").click();
      }
      else if (document.querySelector("input[value='Submit all and finish']")) {
        document.querySelector("input[value='Submit all and finish']").click();
      }
    }

    /* 快捷键分配为:1 */
    if (e.keyCode == 49) {
      if (document.querySelector("input[type='radio'][id$=answer0]")) {
        document.querySelector("input[type='radio'][id$=answer0]").click();
      }
      else if (document.querySelector("input[type='checkbox'][id$=choice0]")) {
        document.querySelector("input[type='checkbox'][id$=choice0]").click();
      }
    }

    /* 快捷键分配为:2 */
    if (e.keyCode == 50) {
      if (document.querySelector("input[type='radio'][id$=answer1]")) {
        document.querySelector("input[type='radio'][id$=answer1]").click();
      }
      else if (document.querySelector("input[type='checkbox'][id$=choice1]")) {
        document.querySelector("input[type='checkbox'][id$=choice1]").click();
      }
    }

    /* 快捷键分配为:3 */
    if (e.keyCode == 51) {
      if (document.querySelector("input[type='radio'][id$=answer2]")) {
        document.querySelector("input[type='radio'][id$=answer2]").click();
      }
      else {
        document.querySelector("input[type='checkbox'][id$=choice2]").click();
      }
    }

    /* 快捷键分配为:4 */
    if (e.keyCode == 52) {
      if (document.querySelector("input[type='radio'][id$=answer3]")) {
        document.querySelector("input[type='radio'][id$=answer3]").click();
      }
      else if (document.querySelector("input[type='checkbox'][id$=choice3]")) {
        document.querySelector("input[type='checkbox'][id$=choice3]").click();
      }
    }

    /* 快捷键分配为:5 */
    if (e.keyCode == 53) {
      if (document.querySelector("input[type='radio'][id$=answer4]")) {
        document.querySelector("input[type='radio'][id$=answer4]").click();
      }
      else if (document.querySelector("input[type='checkbox'][id$=choice4]")) {
        document.querySelector("input[type='checkbox'][id$=choice4]").click();
      }
    }

    /* 快捷键分配为:6 */
    if (e.keyCode == 54) {
      if (document.querySelector("input[type='radio'][id$=answer5]")) {
        document.querySelector("input[type='radio'][id$=answer5]").click();
      }
      else if (document.querySelector("input[type='checkbox'][id$=choice5]")) {
        document.querySelector("input[type='checkbox'][id$=choice5]").click();
      }
    }

    /* 快捷键分配为:7 */
    if (e.keyCode == 55) {
      if (document.querySelector("input[type='radio'][id$=answer6]")) {
        document.querySelector("input[type='radio'][id$=answer6]").click();
      }
      else if (document.querySelector("input[type='checkbox'][id$=choice6]")) {
        document.querySelector("input[type='checkbox'][id$=choice6]").click();
      }
    }

    /* 快捷键分配为:`~ */
    if (e.keyCode == 192) {
      if (document.querySelector("input[type='radio'][id$=answer0]")) {
        for (var i = 0; i < 10; i++) {
          if (document.querySelector("input[type='radio'][id$=answer" + i + "]")) {
            document.querySelector("input[type='radio'][id$=answer" + i + "]").click();
          }
          else {
            break;
          }
        }
      }
      else if (document.querySelector("input[type='checkbox'][id$=choice0]")) {
        for (i = 0; i < 10; i++) {
          if (document.querySelector("input[type='checkbox'][id$=choice" + i + "]")) {
            document.querySelector("input[type='checkbox'][id$=choice" + i + "]").click();
          }
          else {
            break;
          }
        }
      }
    }
  });
})();

/*
Keycode 代码表:
keycode 0 =

keycode 1 =
keycode 2 =
keycode 3 =
keycode 4 =
keycode 5 =
keycode 6 =
keycode 7 =
keycode 8 = BackSpace
keycode 9 = Tab
keycode 10 =
keycode 11 =
keycode 12 = Clear
keycode 13 = Enter
keycode 14 =
keycode 15 =
keycode 16 = Shift_L
keycode 17 = Control_L
keycode 18 = Alt_L
keycode 19 = Pause
keycode 20 = Caps_Lock
keycode 21 =
keycode 22 =
keycode 23 =
keycode 24 =
keycode 25 =
keycode 26 =
keycode 27 = Esc Escape
keycode 28 =
keycode 29 =
keycode 30 =
keycode 31 =
keycode 32 = Space
keycode 33 = Page Up
keycode 34 = Page Down
keycode 35 = End
keycode 36 = Home
keycode 37 = Left Arrow
keycode 38 = Up Arrow
keycode 39 = Right Arrow
keycode 40 = Down Arrow
keycode 41 = Select
keycode 42 = Print
keycode 43 = Execute
keycode 44 =
keycode 45 = Insert
keycode 46 = Delete
keycode 47 = Help
keycode 48 = 0 )
keycode 49 = 1 !
keycode 50 = 2 @
keycode 51 = 3 #
keycode 52 = 4 $
keycode 53 = 5 %
keycode 54 = 6 ^
keycode 55 = 7 &
keycode 56 = 8 *
keycode 57 = 9 (
keycode 58 =
keycode 59 =
keycode 60 =
keycode 61 =
keycode 62 =
keycode 63 =
keycode 64 =
keycode 65 = a A
keycode 66 = b B
keycode 67 = c C
keycode 68 = d D
keycode 69 = e E
keycode 70 = f F
keycode 71 = g G
keycode 72 = h H
keycode 73 = i I
keycode 74 = j J
keycode 75 = k K
keycode 76 = l L
keycode 77 = m M
keycode 78 = n N
keycode 79 = o O
keycode 80 = p P
keycode 81 = q Q
keycode 82 = r R
keycode 83 = s S
keycode 84 = t T
keycode 85 = u U
keycode 86 = v V
keycode 87 = w W
keycode 88 = x X
keycode 89 = y Y
keycode 90 = z Z
keycode 91 =
keycode 92 =
keycode 93 =
keycode 94 =
keycode 95 =
keycode 96 = KP_0
keycode 97 = KP_1
keycode 98 = KP_2
keycode 99 = KP_3
keycode 100 = KP_4
keycode 101 = KP_5
keycode 102 = KP_6
keycode 103 = KP_7
keycode 104 = KP_8
keycode 105 = KP_9
keycode 106 = KP_* KP_Multiply
keycode 107 = KP_+ KP_Add
keycode 108 = KP_Enter KP_Separator
keycode 109 = KP_- KP_Subtract
keycode 110 = KP_. KP_Decimal
keycode 111 = KP_/ KP_Divide
keycode 112 = F1
keycode 113 = F2
keycode 114 = F3
keycode 115 = F4
keycode 116 = F5
keycode 117 = F6
keycode 118 = F7
keycode 119 = F8
keycode 120 = F9
keycode 121 = F10
keycode 122 = F11
keycode 123 = F12
keycode 124 = F13
keycode 125 = F14
keycode 126 = F15
keycode 127 = F16
keycode 128 = F17
keycode 129 = F18
keycode 130 = F19
keycode 131 = F20
keycode 132 = F21
keycode 133 = F22
keycode 134 = F23
keycode 135 = F24
keycode 136 = Num_Lock
keycode 137 = Scroll_Lock
keycode 138 =
keycode 139 =
keycode 140 =
keycode 141 =
keycode 142 =
keycode 143 =
keycode 144 =
keycode 145 =
keycode 146 =
keycode 147 =
keycode 148 =
keycode 149 =
keycode 150 =
keycode 151 =
keycode 152 =
keycode 153 =
keycode 154 =
keycode 155 =
keycode 156 =
keycode 157 =
keycode 158 =
keycode 159 =
keycode 160 =
keycode 161 =
keycode 162 =
keycode 163 =
keycode 164 =
keycode 165 =
keycode 166 =
keycode 167 =
keycode 168 =
keycode 169 =
keycode 170 =
keycode 171 =
keycode 172 =
keycode 173 =
keycode 174 =
keycode 175 =
keycode 176 =
keycode 177 =
keycode 178 =
keycode 179 =
keycode 180 =
keycode 181 =
keycode 182 =
keycode 183 =
keycode 184 =
keycode 185 =
keycode 186 =
keycode 187 = =+
keycode 188 = ,<
keycode 189 = -_
keycode 190 = .>
keycode 191 = /?
keycode 192 = `~
keycode 193 =
keycode 194 =
keycode 195 =
keycode 196 =
keycode 197 =
keycode 198 =
keycode 199 =
keycode 200 =
keycode 201 =
keycode 202 =
keycode 203 =
keycode 204 =
keycode 205 =
keycode 206 =
keycode 207 =
keycode 208 =
keycode 209 =
keycode 210 = plusminus hyphen macron
keycode 211 =
keycode 212 = copyright registered
keycode 213 = guillemotleft guillemotright
keycode 214 = masculine ordfeminine
keycode 215 = ae AE
keycode 216 = cent yen
keycode 217 = questiondown exclamdown
keycode 218 = onequarter onehalf threequarters
keycode 219 = [{
keycode 220 = \|
keycode 221 = ]}
keycode 222 = '"

keycode 223 =
keycode 224 =
keycode 225 =
keycode 226 =
keycode 227 = multiply division
keycode 228 = acircumflex Acircumflex
keycode 229 = ecircumflex Ecircumflex
keycode 230 = icircumflex Icircumflex
keycode 231 = ocircumflex Ocircumflex
keycode 232 = ucircumflex Ucircumflex
keycode 233 = ntilde Ntilde
keycode 234 = yacute Yacute
keycode 235 = oslash Ooblique
keycode 236 = aring Aring
keycode 237 = ccedilla Ccedilla
keycode 238 = thorn THORN
keycode 239 = eth ETH
keycode 240 = diaeresis cedilla currency
keycode 241 = agrave Agrave atilde Atilde
keycode 242 = egrave Egrave
keycode 243 = igrave Igrave
keycode 244 = ograve Ograve otilde Otilde
keycode 245 = ugrave Ugrave
keycode 246 = adiaeresis Adiaeresis
keycode 247 = ediaeresis Ediaeresis
keycode 248 = idiaeresis Idiaeresis
keycode 249 = odiaeresis Odiaeresis
keycode 250 = udiaeresis Udiaeresis
keycode 251 = ssharp question backslash
keycode 252 = asciicircum degree
keycode 253 = 3 sterling
keycode 254 = Mode_switch
*/