import { api } from "../../../../scripts/api.js" import { app } from "../../../../scripts/app.js"; import { $el } from "../../../../scripts/ui.js"; import { fuzzyMatch } from "./fts_fuzzy_match.js"; import { GroupNodeConfig, GroupNodeHandler } from "../../../../extensions/core/groupNode.js"; const gnc = GroupNodeConfig; //import {settingsSetup} from './functions/settings.jsb'; console.time('execution time'); const cnPath = "../extensions/ComfyUI-N-Sidebar/" function jsloader(url) { return new Promise((resolve, reject) => { const script = document.createElement("script"); const timestamp = new Date().getTime(); script.src = `${url}?v=${timestamp}`; script.type = "text/javascript"; script.onload = () => resolve(script); script.onerror = () => reject(new Error(`Failed to load script: ${url}`)); document.head.appendChild(script); }); } jsloader(cnPath + "js/functions/sb_fn.js"); jsloader(cnPath + "js/functions/utils.js"); jsloader(cnPath + "js/functions/settings.js"); let CUSTOM_COLORS; try { var response = await api.fetchApi("/jovimetrix/config", { cache: "no-store" }) const CONFIG_CORE = await response.json() CUSTOM_COLORS = CONFIG_CORE?.user?.default?.color?.theme; } catch (err) { console.log(err) } let categorySearchToggle = false; function getSidebarItemIds() { const sidebarItems = document.querySelectorAll("#sidebarBookmarks .sidebarItem"); const itemIds = []; sidebarItems.forEach(function (item) { itemIds.push(item.id); }); return itemIds; } function postPinned() { var dragItem = null; const pinnedElement = document.getElementById("sidebarBookmarks"); let sidebad_view_width = document.getElementById("sidebar_views").offsetWidth; pinnedElement.querySelectorAll(".sidebarItem").forEach(function (item) { item.addEventListener("dragstart", function (event) { dragItem = event.target; }); item.addEventListener('mouseover', function () { if (this.classList.contains('sidebarItem') && this.tagName === 'LI') { let descriptionDiv = ""; const itemPosition = getElementPosition(this); let previewDivTop = 0; const [previewContent, node_description] = createNodePreview(item.id); if (node_description) { descriptionDiv = "
" + node_description + "
"; } previewDiv.innerHTML = previewContent + descriptionDiv; previewDiv.style.display = 'block'; const correction_offset = 45; if (itemPosition.top - this.offsetHeight >= 0 && itemPosition.top + previewDiv.offsetHeight < document.body.offsetHeight) { previewDivTop = itemPosition.top - this.offsetHeight } else if (itemPosition.top - this.offsetHeight - previewDiv.offsetHeight <= 0) { previewDivTop = 0 + correction_offset; } else { previewDivTop = (itemPosition.top + this.offsetHeight) - previewDiv.offsetHeight; } let sidebar_width = parseInt(getVar("sidebarWidth")) || 500; previewDiv.style.top = `${previewDivTop}px`; const previewDivLeft = sidebar_width - sidebad_view_width + correction_offset; if (sbPosition == "left") { previewDiv.style.left = `${previewDivLeft}px`; } else { previewDiv.style.right = `${previewDivLeft}px`; } } }); item.addEventListener('mouseout', function () { previewDiv.style.display = 'none'; }) reloadCtxMenu() }); pinnedElement.addEventListener("dragover", function (event) { event.preventDefault(); }); pinnedElement.addEventListener("drop", function (event) { event.preventDefault(); if (dragItem) { var dropZone = event.target.closest("ul"); dropZone.insertBefore(dragItem, event.target); dragItem = null; //list element in sidebarBookmarks savePinnedItems(getSidebarItemIds()); } }); } function saveSidebarWidth(sideb) { const width = sideb.style.width; document.cookie = setVar("sidebarWidth", width); } function restoreSidebarWidth() { let width_sidebar = "auto"; let cookieValue = getVar("sidebarWidth"); if (cookieValue) { width_sidebar = cookieValue; } return width_sidebar; } async function pinItem(itemId) { const item = document.getElementById(itemId); const sidebarBookmarks = document.getElementById("sidebarBookmarks"); const pinnedItems = await loadPinnedItems(); if (!pinnedItems.includes(itemId)) { let addedItem = sidebarBookmarks.appendChild(item.cloneNode(true)); addedItem.lastChild.lastChild.childNodes[1].classList.add("pinned"); pinnedItems.push(itemId); savePinnedItems(pinnedItems); postPinned(); } } async function unpinItem(itemId) { const item = document.getElementById(itemId); const sidebarBookmarks = document.getElementById("sidebarBookmarks"); const pinnedItems = await loadPinnedItems(); if (pinnedItems.includes(itemId)) { sidebarBookmarks.removeChild(item); pinnedItems.splice(pinnedItems.indexOf(itemId), 1); savePinnedItems(pinnedItems); } } function removePinnedClass(itemId) { const sidebarItems = document.querySelectorAll(".sidebarItem"); sidebarItems.forEach(function (item) { if (item.id === itemId) { const path = item.querySelector("path"); if (path) { path.classList.remove("pinned"); } } }); } async function loadPinnedItemsAndAddToBookmarks() { const pinnedItems = await loadPinnedItems(); const sidebarBookmarks = document.getElementById("sidebarBookmarks"); // delete pinned const sidebarCategories = sidebarBookmarks.querySelectorAll(".sidebarItem"); sidebarCategories.forEach(category => { category.remove(); }); pinnedItems.forEach(itemId => { pinItem(itemId); const item = document.getElementById(itemId); if (item) { try{ let addedItem = sidebarBookmarks.appendChild(item.cloneNode(true)); addedItem.lastChild.lastChild.classList.add("pinned"); }catch(err){ } } }); postPinned(); } function toggleCollapsePinned() { // expand/collapse pinned const sidebarBookmarks = document.getElementById('sidebarBookmarks'); if (sidebarBookmarks.style.display === 'none') { sidebarBookmarks.style.display = 'block'; setVar('sb_pinned_collapsed', 'block'); } else { sidebarBookmarks.style.display = 'none'; setVar('sb_pinned_collapsed', 'none'); } } function toggleCollapseCustom() { if (sidebarCustomNodes.style.display === 'none') { sidebarCustomNodes.style.display = 'block'; setVar('sb_custom_collapsed', 'block'); } else { sidebarCustomNodes.style.display = 'none'; setVar('sb_custom_collapsed', 'none'); } } async function createCategoryList() { const data = LiteGraph.registered_node_types; let categories = {}; // const pinnedItems = loadPinnedItems(); //search init //get class content_sidebar element const categoriesList = document.getElementsByClassName("content_sidebar")[0]; const sidebar_main = document.getElementById('sidebar'); //const categoriesList = document.getElementById("content_sidebar"); const itemSearchInput = document.getElementById("searchInput"); itemSearchInput.addEventListener("input", async function () { // defaultSearchToggle = await getConfiguration("sb_search_type") if (defaultSearchToggle == "original" && itemSearchInput.value != "") { //search in all .sidebarItem handleSearch(categorySearchToggle, "#content_sidebar_home", "searchInput") } else { updateList(); } }); const clearIcon = document.querySelector(".clearIcon"); const searchCategoryIcon = document.querySelector(".searchCategoryIcon"); clearIcon.addEventListener("click", async function () { try { itemSearchInput.value = ""; const searchTerm = updateList(); } catch (error) { console.error("Error occurred during search:", error); } }); searchCategoryIcon.addEventListener("click", async function () { try { categorySearchToggle = !categorySearchToggle; searchCategoryIcon.style.opacity = categorySearchToggle ? "1" : "0.5"; const searchTerm = updateList(); } catch (error) { console.error("Error occurred during search:", error); } }); //end search init async function updateList() { return new Promise(async (resolve, reject) => { categories = {}; const itemSearchString = itemSearchInput.value.toLowerCase(); // delete all element conaining sidebarCategory class const sidebarCategories = categoriesList.querySelectorAll(".sidebarCategory"); sidebarCategories.forEach(category => { category.remove(); }); let shortedArray = {}; for (const objKey in data) { try { let searchable; const category = data[objKey].category.toLowerCase(); if (!categorySearchToggle) { searchable = data[objKey].title.toLowerCase(); } else { searchable = category; } if (defaultSearchToggle == "normal") { if (searchable.includes(itemSearchString) || itemSearchString === "") { if (!categories[category]) { categories[category] = []; } categories[category].push(data[objKey]); //remove category if empty // if (categories[category].length === 0) { // delete categories[category]; // } } } else { if (itemSearchString === "") { if (!categories[category]) { categories[category] = []; } categories[category].push(data[objKey]); } else { // fuzzy search for eng const [accepted, rank] = fuzzyMatch(itemSearchString, reverseAndAppend(cleanText(searchable))); if (accepted && rank >= 130) { if (!shortedArray[rank]) { shortedArray[rank] = []; } shortedArray[rank].push(data[objKey]); } } } } catch (err) { console.log(err); } } if (itemSearchString != "") { if (defaultSearchToggle !== "normal") { const ranks = Object.keys(shortedArray); ranks.sort((a, b) => b - a); ranks.forEach(rank => { const dataArr = shortedArray[rank]; dataArr.forEach(item => { if (!categories[item.category]) { categories[item.category] = []; } categories[item.category].push(item); }); }); } } else { defaultSearchOrder = await getConfiguration("sb_order_type") if (defaultSearchOrder == "alphabetical") { const sortedCategoriesData = {}; const sortedCategories = Object.keys(categories).sort(); sortedCategories.forEach(category => { sortedCategoriesData[category] = categories[category]; }); categories = sortedCategoriesData; } } renderList(); resolve(itemSearchString); }); } function buildTree(categories, useSubcategories = true) { const tree = {}; for (const category in categories) { const parts = useSubcategories ? category.split('/').filter(part => part !== '') : [category]; let current = tree; if (parts.length > 0 || !useSubcategories) { for (const part of parts) { if (!current[part]) { current[part] = {}; } current = current[part]; } if (!current.items) { current.items = []; } categories[category].forEach(displayName => { current.items.push(displayName); }); } } return tree; } function createHtmlFromTree(tree, parentElement,pinnedItems) { for (const key in tree) { if (key !== 'items') { const subfolderLi = document.createElement('li'); subfolderLi.textContent = "🗀 " + key; subfolderLi.classList.add('sidebarCategory'); subfolderLi.dataset.nameworkflow = key; const subfolderUl = document.createElement('ul'); subfolderUl.style.display = "none"; subfolderUl.classList.add('subfolder'); subfolderUl.dataset.subfolder = key; subfolderUl.id = key + "_ul"; subfolderUl.classList.add("displayNamesList"); subfolderLi.appendChild(subfolderUl); parentElement.appendChild(subfolderLi); createHtmlFromTree(tree[key], subfolderUl,pinnedItems); } } if (tree.items) { tree.items.forEach(displayName => { try { const displayNameMain = document.createElement('div'); displayNameMain.classList.add('displayName'); displayNameMain.title = displayName.title; displayNameMain.id = displayName.type; displayNameMain.textContent = displayName.title; const displayNameItem = document.createElement('li'); displayNameItem.classList.add('sidebarItem'); //displayNameItem.innerHTML = "
"+displayName.title+"
"; displayNameItem.title = displayName.title; displayNameItem.draggable = true; displayNameItem.appendChild(displayNameMain); let color; const nodeData = displayName?.nodeData; // USE NODE'S DEFAULT COLOR, IF ANY if (color === undefined && nodeData !== undefined) { color = nodeData.color; } // JOVIMETRIX CUT-OUT FOR CUSTOM COLORED NODES if (CUSTOM_COLORS) { color = CUSTOM_COLORS[displayName.title]; if (color === undefined && nodeData !== undefined) { let k = nodeData.category; while (k) { color = CUSTOM_COLORS[k]; if (color) { color = color.title; break; } const last = k.lastIndexOf('/'); k = last !== -1 ? k.substring(0, last) : ''; } } } // APPLY THE COLOR, IF ANY if (color) { displayNameItem.style = `background: ${color}`; } // displayNameItem.id = displayName.type; /* Create Pin Button */ const pinButton = document.createElement('button'); pinButton.classList.add('pinButton'); let add_class = ""; if (pinnedItems.includes(displayName.type)) { add_class = "pinned"; } pinButton.innerHTML = ` `; displayNameItem.appendChild(pinButton); /* End Pin Button */ parentElement.appendChild(displayNameItem); } catch (err) { console.log(err); } }); } } async function renderList() { return new Promise(async (resolve, reject) => { const pinnedItems = await loadPinnedItems(); // const sidebarCustomNodes = document.getElementById("sidebarCustomNodes"); let tree_view = await getConfiguration("sb_tree_view") || "multi"; if (tree_view=="multi" ) { tree_view = true; } else{ tree_view = false; } const tree = buildTree(categories,tree_view); createHtmlFromTree(tree, sidebarCustomNodes,pinnedItems); if (!categorySearchToggle && itemSearchInput.value != "") { sdExpandAll(1); } loadPinnedItemsAndAddToBookmarks(); /* preview */ const sidebarItems_cat = document.querySelectorAll('.sidebarItem'); const previewDiv = document.getElementById('previewDiv'); let sidebad_view_width = document.getElementById("sidebar_views").offsetWidth; sidebarItems_cat.forEach(item => { item.addEventListener('mouseover', function () { if (this.classList.contains('sidebarItem') && this.tagName === 'LI') { let descriptionDiv = ""; const itemPosition = getElementPosition(this); let previewDivTop = 0; const [previewContent, node_description] = createNodePreview(item.id); if (node_description) { descriptionDiv = "
" + node_description + "
"; } previewDiv.innerHTML = previewContent + descriptionDiv; previewDiv.style.display = 'block'; const correction_offset = 45; if (itemPosition.top - this.offsetHeight >= 0 && itemPosition.top + previewDiv.offsetHeight < document.body.offsetHeight) { previewDivTop = itemPosition.top - this.offsetHeight } else if (itemPosition.top - this.offsetHeight - previewDiv.offsetHeight <= 0) { previewDivTop = 0 + correction_offset; } else { previewDivTop = (itemPosition.top + this.offsetHeight) - previewDiv.offsetHeight; } let sidebar_width = parseInt(getVar("sidebarWidth")) || 500; previewDiv.style.top = `${previewDivTop}px`; const previewDivLeft = sidebar_width - sidebad_view_width + correction_offset; if (sbPosition == "left") { previewDiv.style.left = `${previewDivLeft}px`; } else { previewDiv.style.right = `${previewDivLeft}px`; } } }); item.addEventListener('mouseout', function () { previewDiv.style.display = 'none'; }) }); categoriesList.addEventListener('scroll', function () { previewDiv.style.display = 'none'; }); window.addEventListener('click', function (event) { if (!event.target.classList.contains('sidebarItem')) { previewDiv.style.display = 'none'; } }); const categoryItems = document.querySelectorAll("#content_sidebar_home .sidebarCategory"); categoryItems.forEach(function (folderItem) { folderItem.addEventListener("click", function (event) { if (event.target === event.currentTarget) { const displayNamesList = event.target.querySelector("ul"); displayNamesList.style.display = displayNamesList.style.display === "none" ? "block" : "none"; setNodeStatus('sb_categoryNodeStatus',displayNamesList.parentElement.dataset.nameworkflow, displayNamesList.style.display) } }); }); reloadCtxMenu() resolve(); }); } let udata = await updateList(); const dragHandle = document.getElementById("dragHandle"); let isDragging = false; let startX; let startWidth; dragHandle.addEventListener("mousedown", function (event) { isDragging = true; startX = event.clientX; startWidth = parseInt(window.getComputedStyle(sidebar_main).width); }); document.addEventListener("mouseup", function () { if (isDragging) { isDragging = false; saveSidebarWidth(sidebar_main); } }); document.addEventListener("mousemove", function (event) { if (!isDragging) return; const delta = event.clientX - startX; if (sbPosition === "left") { sidebar_main.style.width = (startWidth + delta) + "px"; } else { sidebar_main.style.width = (startWidth - delta) + "px"; } }); } async function addSidebar() { let draggedElementId; const sidebar_width = restoreSidebarWidth(); const response = await fetch(cnPath + 'html/sidebar.html'); let html = await response.text(); html = html.replace(/{{sidebar_width}}/g, sidebar_width); html = html.replace(/{{node_path}}/g, cnPath); const canvas = $el("sidebar", { parent: document.body, innerHTML: html }); document.getElementById("content_sidebar_home").addEventListener("click", async function (event) { const clickedElement = event.target; const pinnedItems = await loadPinnedItems(); const pinButton = clickedElement.tagName; if (pinButton == "rect" && clickedElement.classList.contains("pin_node")) { let itemId; try { itemId = clickedElement.parentElement.parentElement.parentElement.id; } catch (err) { console.log(err); } if (!pinnedItems.includes(itemId)) { const sidebarItemId = itemId; pinItem(sidebarItemId); clickedElement.parentElement.getElementsByClassName("pin_normal")[0].classList.add("pinned"); }//remove from sidebar else { if (clickedElement.parentElement.parentElement.parentElement.parentElement.id == "sidebarBookmarks") { clickedElement.parentElement.parentElement.parentElement.remove(); const itemIndex = pinnedItems.indexOf(itemId); removePinnedClass(itemId); if (itemIndex !== -1) { pinnedItems.splice(itemIndex, 1); savePinnedItems(pinnedItems); } } else { unpinItem(itemId); } clickedElement.parentElement.getElementsByClassName("pin_normal")[0].classList.remove("pinned"); } } else if ((pinButton == "rect") && clickedElement.classList.contains("expand_node")) { sdExpandAll(); } else if ((pinButton == "LABEL") && clickedElement.id === "sb_label_custom") { toggleCollapseCustom(); } }); const sidebarItems = document.querySelectorAll(".sidebar li ul li"); sidebarItems.forEach(item => { item.draggable = true; }); function handleDrop(event) { event.preventDefault(); if (event.srcElement.tagName.toLowerCase() != "canvas") { return; } const coord = convertCanvasToOffset(app.canvasEl.data.ds, [event.clientX, event.clientY]); const x = coord[0]; const y = coord[1]; sidebarAddNode(draggedElementId, draggedElementId, x, y); draggedElementId = null; } function allowDrop(event) { event.preventDefault(); } // const search_bar = document.getElementById('searchInput'); canvas.addEventListener("dragstart", function (event) { draggedElementId = event.target.id; previewDiv.style.display = 'none'; }); document.getElementById('switch_sidebar').addEventListener('click', function () { toggleSHSB(); }); document.addEventListener('drop', handleDrop); canvas.addEventListener('dragover', allowDrop); // expand/collapse pinned const pinnedLabel = document.getElementById("sb_label_pinned"); pinnedLabel.addEventListener('click', function () { toggleCollapsePinned(); }); createCategoryList(); SidebarPostBoot(); } function toggleSHSB(force = undefined) { const side_bars = document.querySelectorAll(".content_sidebar"); const main_sidebar = document.getElementById('sidebar'); const search_bar = document.getElementById('searchInput'); const scrollToTopButton = document.getElementById("sb_scrollToTopButton"); const clearIcon = document.querySelector(".clearIcon"); const searchCategoryIcon = document.querySelector(".searchCategoryIcon"); const switch_sidebar = document.getElementById('switch_sidebar'); //search_bar.classList.toggle('closed',force); side_bars.forEach(side_bar => { //side_bar.classList.toggle('closed',force); if (force !== undefined) { if (force) { side_bar.classList.add('closed'); clearIcon.classList.add('closed'); searchCategoryIcon.classList.add('closed'); search_bar.classList.add('closed'); scrollToTopButton.classList.add('closed'); } else { side_bar.classList.remove('closed'); clearIcon.classList.remove('closed'); searchCategoryIcon.classList.remove('closed'); search_bar.classList.remove('closed'); scrollToTopButton.classList.remove('closed'); setVar("sb_minimized", "true"); } } else { if (side_bar.classList.contains('closed')) { side_bar.classList.remove('closed'); clearIcon.classList.remove('closed'); searchCategoryIcon.classList.remove('closed'); search_bar.classList.remove('closed'); //fix for keyboard shortcuts if (getVar("sb_minimized") == "true") { switch_sidebar.style.filter = "brightness(0.8)"; } } else { if (getVar("sb_minimized") == "false") { side_bar.classList.add('closed'); clearIcon.classList.add('closed'); searchCategoryIcon.classList.add('closed'); search_bar.classList.add('closed'); scrollToTopButton.classList.add('closed'); switch_sidebar.style.filter = "brightness(1.0)"; } else { switch_sidebar.style.filter = "brightness(0.8)"; } } } }); if (getVar("sb_minimized") == "false") { if (force == undefined) { setVar("sb_minimized", true); } main_sidebar.style.width = '45px'; } else { if (force == undefined) { setVar("sb_minimized", false); main_sidebar.style.width = getVar("sidebarWidth") || '300px'; } else if (force == true) { main_sidebar.style.width = '45px'; } else { main_sidebar.style.width = getVar("sidebarWidth") || '300px'; } } } //option: disable auto-hide when minimized //Shortcuts function handleKeyPress(event) { if (event.altKey && event.key.toLowerCase() === "x") { //toggle sidebar if it's closed const side_bar = document.getElementById('content_sidebar_home'); if (side_bar.classList.contains('closed')) { toggleSHSB(); } //focus on searchInput searchInput.focus(); } if (event.altKey && event.key.toLowerCase() === "z") { toggleSHSB() } if (event.altKey && event.key.toLowerCase() === "g") { showSettings() } } // Custom Node View function processViews(viewsData, settingsData) { const sb = document.getElementById('sidebar'); const sbv = document.getElementById('sidebar_views'); const promises = viewsData.map(async (view) => { const icon = view.icon; if (!icon) { return; } const description = view.description; const div_view = document.createElement('div'); div_view.classList = "content_sidebar sb_hidden"; div_view.id = "panel_" + view.id; div_view.dataset.content = view.id; const bsb = document.getElementById('content_sidebar_home'); // add button to sidebarviews bsb.insertAdjacentElement('afterend', div_view); //console.log('Icon:', icon); //console.log('Descr:', description); //console.log('Panel:', view.panels); //console.log('-------------------'); await Promise.all(view.panels.map(async (panel) => { try { const timestamp = new Date().getTime(); const response = await fetch(cnPath + `panels/${panel}/${panel}.html?v=${timestamp}`); const html = await response.text(); if (html !== "404: Not Found") { //inherit width from bsb const div_panel = document.createElement('div'); div_panel.classList = "panel_sidebar"; div_panel.id = "panel_" + panel; const div_panel_title = document.createElement('label'); div_panel_title.classList = "panel_sidebar_title sb_label"; div_panel_title.id = "panel_title_" + panel; div_panel_title.innerHTML = view.id.replace("_", " "); div_panel.appendChild(div_panel_title); const canvas = $el("div", { parent: div_panel, innerHTML: html, }); div_view.insertAdjacentElement('beforeend', div_panel); jsloader(`${cnPath}panels/${panel}/${panel}.jsb`); //window.custom_templates(); console.log("LOADING " + cnPath + `panels/${panel}/${panel}.js`) } } catch (error) { console.error('Errore nel caricamento del file HTML:', error); } })); //sidebar menu const div_button = document.createElement('div'); div_button.classList = "view_button"; div_button.id = "switch_" + view.id; //inherit width from bsb div_button.dataset.tab = view.id; div_button.title = description; div_button.innerHTML += view.icon; div_button.addEventListener('click', function () { const tabId = "panel_" + this.getAttribute('data-tab'); switchTab(tabId) if (getVar("sb_auto_hide") == "false" && getVar("sb_minimized") == "true") { toggleSHSB(false); } }); sbv.appendChild(div_button); }); return Promise.all(promises).then(() => { setTimeout(() => { settingsSetup(app, $el) setContextMenu(settingsData, "#content_sidebar_home .sidebarItem", 1); switchTab(getVar('sb_current_tab')); const sidebar_view = document.getElementById('sidebar_views'); const sidebar = document.getElementById('sidebar'); sidebar_view.addEventListener('mouseover', function () { if (getVar('sb_auto_hide') == "true") { if (getVar('sb_minimized') == "true") { toggleSHSB(false); } } }); document.addEventListener('click', function (event) { //if click is outside sidebar id element if (!sidebar.contains(event.target)) { if (getVar('sb_minimized') == "true") { toggleSHSB(true); } } }); }, 100); }); } async function loadData() { try { const timestamp = new Date().getTime(); const response1 = await fetch(`${cnPath}views/views.json?v=${timestamp}`); const viewsData1 = await response1.json(); const response2 = await fetch(`${cnPath}views/custom_views.json?v=${timestamp}`); const viewsData2 = await response2.json(); const allViewsData = [...viewsData1, ...viewsData2]; const response3 = await fetch(`${cnPath}settings.json?v=${timestamp}`); const settingsData = await response3.json(); processViews(allViewsData, settingsData); } catch (error) { console.error('Error loading views:', error); } } async function SidebarPostBoot() { console.log('SidebarPostBoot'); const switch_home = document.getElementById("switch_home"); //only for home switch_home.addEventListener('click', function () { switchTab("content_sidebar_home", 1) if (getVar("sb_auto_hide") == "false" && getVar("sb_minimized") == "true") { toggleSHSB(false); } }); if (getVar("sb_minimized") == "false") { const switch_sidebar = document.getElementById('switch_sidebar'); switch_sidebar.style.filter = "brightness(0.8)"; } document.addEventListener("keydown", handleKeyPress); const sb = document.getElementById('content_sidebar_home'); const scrollToTopButton = document.getElementById("sb_scrollToTopButton"); scrollToTopButton.addEventListener("click", function () { sb.scrollTo({ top: 0, behavior: "smooth" }); }); sb.addEventListener("scroll", function () { if (sb.scrollTop > 0) { scrollToTopButton.style.display = "block"; } else { scrollToTopButton.style.display = "none"; } }); const sidebarBookmarks = document.getElementById("sidebarBookmarks"); if (getVar("sb_pinned_collapsed")) { sidebarBookmarks.style.display = getVar('sb_pinned_collapsed'); } if (getVar("sb_custom_collapsed")) { sidebarCustomNodes.style.display = getVar('sb_custom_collapsed'); } loadData(); /* const sidebar_views = document.getElementById("sidebar_views"); const sidebar = document.getElementById("sidebar"); //if is hover sidebar_views sidebar_views.addEventListener("mouseover", function() { toggleSHSB(); }) //if is not hover sidebar_views sidebar.addEventListener("mouseout", function() { toggleSHSB(); }) */ } // Function to check if the element is not an empty object function SidebarBoot() { if (Object.keys(LiteGraph.registered_node_types).length > 10) { // Execute the function when the element is not an empty object // //MIGRATION migrationSettings() addSidebarStyles("css/base_style.css"); addSidebar(); console.log('SidebarBoot'); console.timeEnd('execution time'); } else { // Retry after a period of time setTimeout(SidebarBoot, 500); // Check every 100 milliseconds } } // Start checking the element SidebarBoot();