Vultr console paste

Add a Paste button to Vultr console

当前为 2019-11-08 提交的版本,查看 最新版本

// ==UserScript==
// @name           Vultr console paste
// @name:zh        Vultr 控制台 粘贴功能
// @version        0.2
// @description    Add a Paste button to Vultr console
// @description:zh 给Vultr的控制台添加一个粘贴按钮
// @author         Sam0230
// @match          *://my.vultr.com/*/novnc/*
// @grant          none
// @run-at         document-start
// @namespace https://gf.qytechs.cn/users/305841
// ==/UserScript==

(function() {
    'use strict';
    let ASCIIString = function ASCIIChar(str) {
        return (str == str.match(/[\t-~]*/)[0]);
    }
    let clearNonASCIIChar = function clearNonASCIIChar(str) {
        let result = str.match(/[\t-~]/g);
        if (!result) {
            result = [];
        }
        return result.join("");
    }
    let sendString = window.sendString = function sendString(str) {
        let KeyCode = str.charCodeAt(), needShift = ('~!@#$%^&*()_+{}|:"<>?'.indexOf(str[0]) != -1);
        if (KeyCode == "\n".charCodeAt()) {
            KeyCode = XK_Return;
        }
        if (KeyCode == "\t".charCodeAt()) {
            KeyCode = XK_Tab;
        }
        if (needShift) {
            rfb.sendKey(XK_Shift_L, true);
        }
        rfb.sendKey(KeyCode);
        if (needShift) {
            rfb.sendKey(XK_Shift_L, false);
        }
        if (str.length != 1) {
            setTimeout(sendString.bind(this, str.slice(1)), 15);
        }
    }
    let pasteButton = document.createElement("input"), textarea = document.createElement("textarea"), CapsLockButton = document.createElement("input");
    pasteButton.type = "button";
    pasteButton.value = "Paste";
    pasteButton.id = "pasteButton";
    pasteButton.style.display = "inline";
    pasteButton.disabled = true;
    textarea.placeholder="Paste";
    textarea.id = "pasteTextarea";
    textarea.style.display = "inline";
    textarea.style.position = "relative";
    textarea.style.top = "4px";
    textarea.style.height = "13px";
    textarea.cols = "6";
    textarea.style.border = "none";
    textarea.style.resize = "none";
    textarea.onfocus = function () {
        rfb._keyboard.ungrab();
        rfb._mouse.ungrab();
    }
    textarea.onblur = function () {
        setInterval(function () {
            rfb._keyboard.grab();
            rfb._mouse.grab();
        }, 50);
    }
    textarea.oninput = function () {
        textarea.value = clearNonASCIIChar(textarea.value);
    }
    CapsLockButton.type = "button";
    CapsLockButton.value = "CapsLock";
    CapsLockButton.id = "CapsLockButton";
    CapsLockButton.style.display = "inline";
    CapsLockButton.disabled = true;
    let addButton = function addButton() {
        if (!document.getElementById("noVNC_buttons")) {
            setTimeout(addButton, 25);
            return;
        }
        document.getElementById("noVNC_buttons").appendChild(textarea);
        document.getElementById("noVNC_buttons").appendChild(pasteButton);
        document.getElementById("noVNC_buttons").appendChild(CapsLockButton);
        let enableButton = function enableButton() {
            if (!document.getElementById("noVNC_canvas") || document.getElementById("noVNC_canvas").height == 20) {
                setTimeout(enableButton, 25);
                return;
            }
            pasteButton.disabled = false;
            pasteButton.onclick = function () {
                textarea.value = clearNonASCIIChar(textarea.value);
                let text = textarea.value;
                textarea.value = "";
                sendString(text);
            }
            CapsLockButton.disabled = false;
            CapsLockButton.onclick = function () {
                rfb.sendKey(XK_Caps_Lock, 1);
            }
        }
        setTimeout(enableButton, 0);
    }
    setTimeout(addButton, 0);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址