|
import { app } from "../../scripts/app.js";
|
|
import { GraphAnalyser } from "./use_everywhere_graph_analysis.js";
|
|
import { LinkRenderController } from "./use_everywhere_ui.js";
|
|
import { convert_to_links, remove_all_ues } from "./use_everywhere_apply.js";
|
|
import { has_priority_boost } from "./use_everywhere_utilities.js";
|
|
|
|
function main_menu_settings() {
|
|
|
|
app.ui.settings.addSetting({
|
|
id: "AE.details",
|
|
name: "Anything Everywhere show node details",
|
|
type: "boolean",
|
|
defaultValue: false,
|
|
});
|
|
app.ui.settings.addSetting({
|
|
id: "AE.autoprompt",
|
|
name: "Anything Everywhere? autocomplete (may require page reload)",
|
|
type: "boolean",
|
|
defaultValue: true,
|
|
});
|
|
app.ui.settings.addSetting({
|
|
id: "AE.checkloops",
|
|
name: "Anything Everywhere check loops",
|
|
type: "boolean",
|
|
defaultValue: true,
|
|
});
|
|
app.ui.settings.addSetting({
|
|
id: "AE.showlinks",
|
|
name: "Anything Everywhere show links",
|
|
type: "combo",
|
|
options: [ {value:0, text:"All off"}, {value:1, text:"Selected nodes"}, {value:2, text:"Mouseover node"}, {value:3, text:"Selected and mouseover nodes"}, {value:4, text:"All on"}],
|
|
defaultValue: 0,
|
|
onChange: app.graph.change.bind(app.graph),
|
|
});
|
|
app.ui.settings.addSetting({
|
|
id: "AE.animate",
|
|
name: "Anything Everywhere animate UE links",
|
|
type: "combo",
|
|
options: [ {value:0, text:"Off"}, {value:1, text:"Dots"}, {value:2, text:"Pulse"}, {value:3, text:"Both"}, ],
|
|
defaultValue: 3,
|
|
onChange: app.graph.change.bind(app.graph),
|
|
});
|
|
app.ui.settings.addSetting({
|
|
id: "AE.stop.animation.running",
|
|
name: "Anything Everywhere turn animation off when running",
|
|
type: "boolean",
|
|
defaultValue: true,
|
|
onChange: app.graph.change.bind(app.graph),
|
|
});
|
|
app.ui.settings.addSetting({
|
|
id: "AE.highlight",
|
|
name: "Anything Everywhere highlight connected nodes",
|
|
type: "boolean",
|
|
defaultValue: true,
|
|
onChange: app.graph.change.bind(app.graph),
|
|
});
|
|
app.ui.settings.addSetting({
|
|
id: "AE.replacesearch",
|
|
name: "Anything Everywhere replace search",
|
|
type: "boolean",
|
|
defaultValue: true,
|
|
});
|
|
}
|
|
|
|
function submenu(properties, property, options, e, menu, node) {
|
|
const current = properties[property] ? (properties[property]==2 ? 3 : 2 ) : 1;
|
|
const submenu = new LiteGraph.ContextMenu(
|
|
options,
|
|
{ event: e, callback: inner_function, parentMenu: menu, node: node }
|
|
);
|
|
const current_element = submenu.root.querySelector(`:nth-child(${current})`);
|
|
if (current_element) current_element.style.borderLeft = "2px solid #484";
|
|
function inner_function(v) {
|
|
if (node) {
|
|
const choice = Object.values(options).indexOf(v);
|
|
properties[property] = choice;
|
|
LinkRenderController.instance().mark_link_list_outdated();
|
|
}
|
|
}
|
|
}
|
|
|
|
const GROUP_RESTRICTION_OPTIONS = ["No restrictions", "Send only within group", "Send only not within group"]
|
|
function group_restriction_submenu(value, options, e, menu, node) {
|
|
submenu(node.properties, "group_restricted", GROUP_RESTRICTION_OPTIONS, e, menu, node);
|
|
}
|
|
|
|
const COLOR_RESTRICTION_OPTIONS = ["No restrictions", "Send only to same color", "Send only to different color"]
|
|
function color_restriction_submenu(value, options, e, menu, node) {
|
|
submenu(node.properties, "color_restricted", COLOR_RESTRICTION_OPTIONS, e, menu, node);
|
|
}
|
|
|
|
function priority_boost_submenu(value, options, e, menu, node) {
|
|
const current = (node.properties["priority_boost"] ? node.properties["priority_boost"] : 0) + 1;
|
|
const submenu = new LiteGraph.ContextMenu(
|
|
[0,1,2,3,4,5,6,7,8,9],
|
|
{ event: e, callback: function (v) {
|
|
node.properties["priority_boost"] = parseInt(v);
|
|
LinkRenderController.instance().mark_link_list_outdated();
|
|
},
|
|
parentMenu: menu, node:node}
|
|
)
|
|
const current_element = submenu.root.querySelector(`:nth-child(${current})`);
|
|
if (current_element) current_element.style.borderLeft = "2px solid #484";
|
|
}
|
|
|
|
function node_menu_settings(options, node) {
|
|
options.push(null);
|
|
if (has_priority_boost(node)) options.push(
|
|
{
|
|
content: "Priority Boost",
|
|
has_submenu: true,
|
|
callback: priority_boost_submenu,
|
|
}
|
|
)
|
|
options.push(
|
|
{
|
|
content: "Group Restrictions",
|
|
has_submenu: true,
|
|
callback: group_restriction_submenu,
|
|
},
|
|
{
|
|
content: "Color Restrictions",
|
|
has_submenu: true,
|
|
callback: color_restriction_submenu,
|
|
},
|
|
{
|
|
content: "Convert to real links",
|
|
callback: async () => {
|
|
const ues = await GraphAnalyser.instance().analyse_graph();
|
|
convert_to_links(ues, node.id);
|
|
app.graph.remove(node);
|
|
}
|
|
}
|
|
)
|
|
options.push(null);
|
|
}
|
|
|
|
function canvas_menu_settings(options) {
|
|
options.push(null);
|
|
options.push({
|
|
content: (app.ui.settings.getSettingValue('AE.showlinks', 0)>0) ? "Hide UE links" : "Show UE links",
|
|
callback: () => {
|
|
const setTo = (app.ui.settings.getSettingValue('AE.showlinks', 0)>0) ? 0 : 4;
|
|
app.ui.settings.setSettingValue('AE.showlinks', setTo);
|
|
app.graph.change();
|
|
}
|
|
},
|
|
{
|
|
content: "Convert all UEs to real links",
|
|
callback: async () => {
|
|
if (window.confirm("This will convert all links created by Use Everywhere to real links, and delete all the Use Everywhere nodes. Is that what you want?")) {
|
|
const ues = await GraphAnalyser.instance().analyse_graph();
|
|
LinkRenderController.instance().pause();
|
|
convert_to_links(ues, -1);
|
|
remove_all_ues();
|
|
app.graph.change();
|
|
}
|
|
}
|
|
});
|
|
if (GraphAnalyser.instance().ambiguity_messages.length) {
|
|
options.push({
|
|
content: "Show UE broadcast clashes",
|
|
callback: async () => {
|
|
alert(GraphAnalyser.instance().ambiguity_messages.join("\n"))
|
|
}
|
|
})
|
|
}
|
|
options.push(null);
|
|
}
|
|
|
|
export { main_menu_settings, node_menu_settings, canvas_menu_settings } |