您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
为 [FPGA Online](https://fpgaol.ustc.edu.cn/) 提供的更多功能
当前为
// ==UserScript== // @name FPGA-Plus // @namespace http://tampermonkey.net/ // @version 0.4.2 // @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'; let name = "FPGA-Plus"; let toast = (s, error=false) => { if (error) { console.error(`[${name}] ${s}`); } else { console.log(`[${name}] ${s}`); } alert(`[${name}] ${s}`); }; 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 parts = "xc7a100tcsg324-1"; 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</a>'; navbar.insertBefore(hint, last); let link = document.createElement("a"); link.classList.add("nav-link"); link.text = parts; link.title = "Click to copy"; link.href = "javascript:void(0);"; link.addEventListener("click", (e) => { navigator.clipboard.writeText(parts); if (window.invoke_toastify) { invoke_toastify(); toast = (s, error = false) => { window.toast(`[${name}] ${s}`, error); }; } toast("Copied!"); }); hint.appendChild(link); 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或关注我们的公众号极客氢云获取最新地址