| | import { api } from "../../../scripts/api.js"; |
| | import { app } from "../../../scripts/app.js"; |
| | import { $el } from "../../../scripts/ui.js"; |
| | import { ConfigSetting, addJNodesSetting } from "./common/SettingsManager.js" |
| |
|
| | |
| | |
| | |
| |
|
| | |
| |
|
| | var progressBar; |
| | var progressBarContainer; |
| |
|
| | app.registerExtension({ |
| | name: "JNodes.StatusProgressBar", |
| | async setup() { |
| |
|
| | const featureName = "StatusIndicators.ProgressBar."; |
| |
|
| | class CustomConfigSetting extends ConfigSetting { |
| | constructor(settingName, defaultValue) { |
| | super(featureName + settingName, defaultValue); |
| | } |
| | } |
| | |
| | let setting_bEnabled = new CustomConfigSetting("bEnabled", false); |
| |
|
| | const labelWidget = $el("label", { |
| | textContent: "Show Progress Bar Above menu:", |
| | }); |
| |
|
| | const settingWidget = $el("input", { |
| | type: "checkbox", |
| | checked: setting_bEnabled.value, |
| | onchange: (e) => { |
| | setting_bEnabled.value = e.target.checked; |
| |
|
| | if (e.target.checked) { |
| | setup(); |
| | } else { |
| | teardown(); |
| | } |
| | }, |
| | }); |
| |
|
| | addJNodesSetting(labelWidget, settingWidget); |
| |
|
| | function createProgressBar() { |
| | const menu = document.querySelector(".comfy-menu"); |
| |
|
| | progressBar = $el("div", { |
| | id: "progressBar", |
| | style: { |
| | transition: 'width 0.25s', |
| | width: '0%', |
| | height: '100%', |
| | clipPath: 'inset(0)', |
| | background: "green", |
| | marginTop: '0', |
| | marginLeft: '0', |
| | marginRight: '0', |
| | marginBottom: '0h', |
| | } |
| | }); |
| |
|
| | progressBarContainer = $el("div", { |
| | id: "progressBarContainer", |
| | style: { |
| | width: '100%', |
| | height: '0.5vh', |
| | display: 'flex', |
| | marginTop: '0', |
| | marginLeft: '0.1vh', |
| | marginRight: '0.1vh', |
| | marginBottom: '0.5vh', |
| | } |
| | }, [ |
| | progressBar |
| | ] |
| | ); |
| |
|
| | menu.prepend(progressBarContainer); |
| | } |
| |
|
| | function removeProgressBar() { |
| | if (progressBarContainer) { |
| | const menu = document.querySelector(".comfy-menu"); |
| |
|
| | menu.removeChild(progressBarContainer); |
| | } |
| | } |
| |
|
| | function updateProgressBar(progress) { |
| | if (setting_bEnabled.value && progressBar) { |
| | progressBar.style.width = `${progress}%`; |
| | } |
| | } |
| |
|
| | function addListeners() { |
| | api.addEventListener("progress", ({ detail }) => { |
| | if (setting_bEnabled.value) { |
| | const { value, max } = detail; |
| | const progress = Math.floor((value / max) * 100); |
| |
|
| | if (!isNaN(progress)) { |
| | updateProgressBar(progress); |
| | } |
| | } |
| | }); |
| |
|
| | api.addEventListener("executed", async ({ detail }) => { |
| | updateProgressBar(0); |
| | }); |
| | } |
| |
|
| | function setup() { |
| | createProgressBar(); |
| | addListeners(); |
| | } |
| |
|
| | function teardown() { |
| | removeProgressBar(); |
| | } |
| |
|
| | if (setting_bEnabled.value) { |
| | setup(); |
| | } |
| | }, |
| | }); |
| |
|