FPGA-Plus

为 [FPGA Online](https://fpgaol.ustc.edu.cn/) 提供的更多功能

目前为 2023-05-08 提交的版本。查看 最新版本

// ==UserScript==
// @name         FPGA-Plus
// @namespace    http://tampermonkey.net/
// @version      0.4.1
// @description  为 [FPGA Online](https://fpgaol.ustc.edu.cn/) 提供的更多功能
// @author       PRO
// @license      gpl-3.0
// @match        *://fpgaol.ustc.edu.cn/*
// @match        http://202.38.79.134:*/*
// @grant        none
// @icon         https://fpgaol.ustc.edu.cn/favicon.ico
// ==/UserScript==

(function() {
    'use strict';
    if (window.location.hostname == 'fpgaol.ustc.edu.cn') { // Main page
        let navbar = document.querySelector(".navbar-nav");
        if (!navbar) return;
        let last = navbar.querySelector("form");
        if (!last) return;
        let hint = document.createElement("li");
        hint.classList.add("nav-item");
        hint.innerHTML = '<a class="nav-link" title="Click to copy" href="javascript:navigator.clipboard.writeText(\'xc7a100tcsg324-1\');">xc7a100tcsg324-1</a>';
        navbar.insertBefore(hint, last);
        return;
    } // Dev page
    // Visual improvements
    let rsp = document.getElementById("responsetext");
    let upload = document.getElementById("upload-button");
    upload.addEventListener("click", (e)=>{
        rsp.textContent = "Waiting...";
    });
    // Default upload
    let default_input = document.getElementById("bitstream");
    let customed = document.getElementById("file-select");
    default_input.style.fontSize = "1.3em";
    default_input.attributes.removeNamedItem("hidden");
    customed.parentNode.replaceChild(default_input, customed);
    // Led value
    //   Pre-process
    let val = 0;
    let panel = document.querySelector(".col-5.colmodule");
    panel.insertAdjacentHTML('afterbegin', '<div class="container"><span id="info" style="padding: inherit;">Bin: 0b00000000; Hex: 0x00; Dec (unsigned): 0</span></div>');
    //   Functions
    function checkbox_patch(checkbox) {
        // Check out https://github.com/PRO-2684/gadgets/blob/main/checkbox_patch/ if you're interested in this part
        const { get, set } = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'checked');
        Object.defineProperty(checkbox, 'checked', {
            get() {
                return get.call(this);
            },
            set(newVal) {
                let ret = set.call(this, newVal);
                this.dispatchEvent(new Event("change"));
                return ret;
            }
        });
    }
    function get_bit(n) {
        return (val >> n) & 1;
    }
    function set_bit(n, b) {
        if (b) {
          val |= (1 << n);
        } else {
          val &= ~(1 << n);
        }
    }
    function update() {
        let bin_str = '0b' + val.toString(2).padStart(8, '0');
        let hex_str = '0x' + val.toString(16).padStart(2, '0');
        let dec_str = val.toString();
        let res = `Bin: ${bin_str}; Hex: ${hex_str}; Dec (unsigned): ${dec_str}`;
        info.textContent = res;
    }
    //   Setup listeners & init
    for (let i = 0; i <= 7; i++) {
        let led = document.getElementById(`led${i}`);
        set_bit(i, led.checked);
        checkbox_patch(led);
        led.addEventListener("change", (e) => {
            set_bit(i, led.checked);
            update();
        });
    }
    update();
})();

QingJ © 2025

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