A simple userscript menu manager, treats all menu items as a GMX_menu object.
Key Features:
- Create and access menu items via GMX_menu object, no need to care the item order.
- Caption text of menu item can be changed at any time.
- Menu item can act as a Check box.
- Menu items can act as a radio button group.
Usage:
// To use this script, you need to grant GM_registerMenuCommand and GM_unregisterMenuCommand.
// Install a new menu, (all previous menu items will be removed)
// The value of name must be unique in the menu.
// If autoRefresh is true, when the menu item is modified, the rerendering will be automatically executed,
// otherwise its appearance will remain unchanged unless you manually call the GMX_menu.refresh() method.
// If a menu item has a checked attribute, it will be rendered as a checkable entry.
// If it also has a group attribute at the same time, it will be associated to a radio button group.
const sampleOptions = {
autoRefresh: true,
items: [
{name: "cmd1", text: "🥣 Radio 1", checked: true, group: "g1", callback: ()=>{alert("Radio 1 clicked!")}},
{name: "cmd2", text: "⭐ Radio 2", checked: false, group: "g1", callback: ()=>{alert("Radio 2 clicked!")}},
{name: "sep1", separator: true},
{name: "cmd3", text: "🍬 Checkbox 3", checked: false, callback: ()=>{alert("Checkbox 3 clicked!")}},
{name: "cmd4", text: "🍦 Command 4", callback: ()=>{alert("Command 4 clicked!")}},
]
}
GMX_menu.install(sampleOptions);
// Remove menu.
GMX_menu.uninstall()
// Change the caption text of a menu item by name.
GMX_menu.setText(name, text)
// Get the check state of a menu item by name.
// If the item is unchackable, it will returns undefined.
GMX_menu.isChecked(name)
// Trigger the select event of specific menu item by name.
// The check state of the item will also be changed if it's checkable.
GMX_menu.triggerSelect(name)
// Select the specific item on userscript menu without excuting it's callback function.
// Usually used to modify the check state of a specific menu item.
GMX_menu.renderSelect(name)
// Rebuild the whole menu by installed option.
GMX_menu.refresh()