Spaces:
Running
Running
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 non_ue_menu_settings(options, node) { | |
options.push(null); | |
options.push( | |
{ | |
content: node.properties.rejects_ue_links ? "Allow UE Links" : "Reject UE Links", | |
has_submenu: false, | |
callback: () => { node.properties.rejects_ue_links = !!!node.properties.rejects_ue_links }, | |
} | |
) | |
} | |
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); // divider | |
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); // divider | |
} | |
export { main_menu_settings, node_menu_settings, canvas_menu_settings, non_ue_menu_settings } |