您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A simple userscript menu manager, treats all menu items as a GMX_menu object.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/473817/1240400/GMX_menu.js
- // ==UserScript==
- // @name GMX_menu
- // @namespace https://greasyfork.org/users/1001518
- // @version 0.1.1
- // @description A simple userscript menu manager, treats all menu items as a GMX_menu object.
- // @author DianaBlessU
- // @grant GM_registerMenuCommand
- // @grant GM_unregisterMenuCommand
- // ==/UserScript==
- class GMX_Menu{
- items = [];
- item_ids = [];
- auto_refresh = true;
- constructor(options) {
- if (options) this.install(options)
- }
- install(options){
- if (options){
- this.auto_refresh = options.autoRefresh ?? true;
- this.items = options.items ?? [];
- this.refresh();
- }
- }
- uninstall(){
- this.items = [];
- this.refresh();
- }
- refresh(){
- this.item_ids.forEach(id => GM_unregisterMenuCommand(id));
- this.item_ids = [];
- this.items.forEach(item => {
- if (item.separator){
- let item_str = "➖➖➖➖➖➖➖➖➖➖"
- this.item_ids.push(GM_registerMenuCommand(item_str))
- }else{
- let item_str = (item.checked==null) ? `${item.text}` : `${item.checked ? '✅':'🟩'} ${item.text}`
- this.item_ids.push(GM_registerMenuCommand(item_str, event => this.triggerSelect(item.name, event)));
- }
- })
- }
- getItem(name){
- return this.items.filter(item => item.name == name)[0]
- }
- renderSelect(name){
- let item = this.getItem(name);
- if (!item) throw new ReferenceError(`No items named '${name}'`)
- let refresh_needed = false;
- if (item.checked != null){
- if (item.group != null && item.checked == false){
- this.items.forEach(co_item => {
- if (co_item.group == item.group) co_item.checked = false
- })
- item.checked = true;
- refresh_needed = true;
- } else if (item.group == null) {
- item.checked = !item.checked;
- refresh_needed = true;
- }
- }
- if (refresh_needed && this.auto_refresh) {
- this.refresh();
- }
- return item.checked
- }
- triggerSelect(name, event){
- let item = this.getItem(name);
- if (!item) throw new ReferenceError(`No items named '${name}'`)
- this.renderSelect(name);
- item.callback(event);
- }
- setText(name, text) {
- let item = this.getItem(name);
- if (!item) throw new ReferenceError(`No items named '${name}'`)
- item.text = text;
- if (this.auto_refresh){
- this.refresh();
- }
- }
- isChecked(name){
- let item = this.getItem(name);
- if (!item) throw new ReferenceError(`No items named '${name}'`)
- return item.checked;
- }
- }
- window.GMX_menu = new GMX_Menu();