Spaces:
Runtime error
Runtime error
| 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); // 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 } |