| import { app } from "../../../scripts/app.js"; |
| import { $el } from "../../../scripts/ui.js"; |
|
|
| const colorShade = (col, amt) => { |
| col = col.replace(/^#/, ""); |
| if (col.length === 3) col = col[0] + col[0] + col[1] + col[1] + col[2] + col[2]; |
|
|
| let [r, g, b] = col.match(/.{2}/g); |
| [r, g, b] = [parseInt(r, 16) + amt, parseInt(g, 16) + amt, parseInt(b, 16) + amt]; |
|
|
| r = Math.max(Math.min(255, r), 0).toString(16); |
| g = Math.max(Math.min(255, g), 0).toString(16); |
| b = Math.max(Math.min(255, b), 0).toString(16); |
|
|
| const rr = (r.length < 2 ? "0" : "") + r; |
| const gg = (g.length < 2 ? "0" : "") + g; |
| const bb = (b.length < 2 ? "0" : "") + b; |
|
|
| return `#${rr}${gg}${bb}`; |
| }; |
|
|
| app.registerExtension({ |
| name: "pysssss.CustomColors", |
| setup() { |
| let picker; |
| let activeNode; |
| const onMenuNodeColors = LGraphCanvas.onMenuNodeColors; |
| LGraphCanvas.onMenuNodeColors = function (value, options, e, menu, node) { |
| const r = onMenuNodeColors.apply(this, arguments); |
| requestAnimationFrame(() => { |
| const menus = document.querySelectorAll(".litecontextmenu"); |
| for (let i = menus.length - 1; i >= 0; i--) { |
| if (menus[i].firstElementChild.textContent.includes("No color") || menus[i].firstElementChild.value?.content?.includes("No color")) { |
| $el( |
| "div.litemenu-entry.submenu", |
| { |
| parent: menus[i], |
| $: (el) => { |
| el.onclick = () => { |
| LiteGraph.closeAllContextMenus(); |
| if (!picker) { |
| picker = $el("input", { |
| type: "color", |
| parent: document.body, |
| style: { |
| display: "none", |
| }, |
| }); |
| picker.onchange = () => { |
| if (activeNode) { |
| const fApplyColor = function(node){ |
| if (picker.value) { |
| if (node.constructor === LiteGraph.LGraphGroup) { |
| node.color = picker.value; |
| } else { |
| node.color = colorShade(picker.value, 20); |
| node.bgcolor = picker.value; |
| } |
| } |
| } |
| const graphcanvas = LGraphCanvas.active_canvas; |
| if (!graphcanvas.selected_nodes || Object.keys(graphcanvas.selected_nodes).length <= 1){ |
| fApplyColor(activeNode); |
| } else { |
| for (let i in graphcanvas.selected_nodes) { |
| fApplyColor(graphcanvas.selected_nodes[i]); |
| } |
| } |
|
|
| activeNode.setDirtyCanvas(true, true); |
| } |
| }; |
| } |
| activeNode = null; |
| picker.value = node.bgcolor; |
| activeNode = node; |
| picker.click(); |
| }; |
| }, |
| }, |
| [ |
| $el("span", { |
| style: { |
| paddingLeft: "4px", |
| display: "block", |
| }, |
| textContent: "🎨 Custom", |
| }), |
| ] |
| ); |
| break; |
| } |
| } |
| }); |
| return r; |
| }; |
| }, |
| }); |
|
|