feat: add ShareDialogChooser and OpenArtShareDialog basic UI
This commit is contained in:
124
js/comfyui-share-openart.js
Normal file
124
js/comfyui-share-openart.js
Normal file
@@ -0,0 +1,124 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js"
|
||||
import { ComfyDialog, $el } from "../../scripts/ui.js";
|
||||
|
||||
const LOCAL_STORAGE_KEY = "openart_comfy_workflow_key";
|
||||
|
||||
export class OpenArtShareDialog extends ComfyDialog {
|
||||
static instance = null;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.element = $el("div.comfy-modal", {
|
||||
parent: document.body, style: {
|
||||
'overflow-y': "auto",
|
||||
}
|
||||
},
|
||||
[$el("div.comfy-modal-content",
|
||||
{},
|
||||
[...this.createButtons()]),
|
||||
]);
|
||||
this.selectedOutputIndex = 0;
|
||||
}
|
||||
readKeyFromLocalStorage() {
|
||||
return localStorage.getItem(LOCAL_STORAGE_KEY) || '';
|
||||
}
|
||||
saveKeyToLocalStorage(value) {
|
||||
localStorage.setItem(LOCAL_STORAGE_KEY, value);
|
||||
}
|
||||
createButtons() {
|
||||
const sectionStyle = {
|
||||
marginBottom: '20px',
|
||||
padding: '15px',
|
||||
borderRadius: '8px',
|
||||
boxShadow: '0 2px 4px rgba(0, 0, 0, 0.05)'
|
||||
};
|
||||
|
||||
const inputStyle = {
|
||||
display: 'block',
|
||||
minWidth: '500px',
|
||||
width: '100%',
|
||||
padding: '10px',
|
||||
margin: '10px 0',
|
||||
borderRadius: '4px',
|
||||
border: '1px solid #ddd',
|
||||
boxSizing: 'border-box'
|
||||
};
|
||||
|
||||
const headerLabelStyle = {
|
||||
color: "#f8f8f8",
|
||||
display: 'block',
|
||||
marginBottom: '15px',
|
||||
fontWeight: 'bold',
|
||||
textDecoration: 'none',
|
||||
fontSize: '20px',
|
||||
};
|
||||
|
||||
const labelStyle = {
|
||||
color: "#f8f8f8",
|
||||
display: 'block',
|
||||
marginBottom: '5px',
|
||||
fontWeight: 'bold',
|
||||
textDecoration: 'none',
|
||||
};
|
||||
|
||||
const buttonStyle = {
|
||||
padding: '10px 80px',
|
||||
margin: '10px 5px',
|
||||
borderRadius: '4px',
|
||||
border: 'none',
|
||||
cursor: 'pointer',
|
||||
color: '#fff',
|
||||
backgroundColor: '#007bff'
|
||||
};
|
||||
|
||||
this.keyInput = $el("input", { type: 'text', placeholder: "Share Your key", style: inputStyle })
|
||||
// Account Section
|
||||
const AccountSection = $el("div", { style: sectionStyle }, [
|
||||
$el("a", { style: headerLabelStyle, href: "https://openart.ai/workflows" }, ["Check out 1000+ workflows others have uploaded."]),
|
||||
$el("a", { style: headerLabelStyle, href: "https://openart.ai/workflows" }, ["You can get OpenArt key at https://openart.ai/"]),
|
||||
$el("label", { style: labelStyle }, ["OpenArt API Key"]),
|
||||
this.keyInput,
|
||||
]);
|
||||
|
||||
// Additional Inputs Section
|
||||
const additionalInputsSection = $el("div", { style: sectionStyle }, [
|
||||
$el("label", { style: labelStyle }, ["Details"]),
|
||||
$el("input", { type: "text", placeholder: "Title (required)", style: inputStyle }),
|
||||
$el("textarea", { placeholder: "Description (optional)", style: {
|
||||
...inputStyle,
|
||||
minHeight: '100px',
|
||||
} }),
|
||||
]);
|
||||
|
||||
// Share and Close Buttons
|
||||
const buttonsSection = $el("div", { style: { textAlign: 'right', marginTop: '20px', display: 'flex', justifyContent: 'space-between' } }, [
|
||||
$el("button", { type: "button", textContent: "Close", style: {
|
||||
...buttonStyle,
|
||||
backgroundColor: undefined
|
||||
}, onclick: () => { this.close(); } }),
|
||||
$el("button", { type: "submit", textContent: "Share", style: buttonStyle, onclick: () => { this.share(); } }),
|
||||
]);
|
||||
|
||||
// Final Message Section
|
||||
const finalMessage = $el("div", { style: { color: "white", textAlign: "center", padding: "10px" } }, []);
|
||||
// Composing the full layout
|
||||
const layout = [
|
||||
AccountSection,
|
||||
additionalInputsSection,
|
||||
buttonsSection,
|
||||
finalMessage,
|
||||
];
|
||||
|
||||
return layout;
|
||||
}
|
||||
async share() {
|
||||
this.saveKeyToLocalStorage(this.keyInput.value);
|
||||
}
|
||||
show({ potential_outputs, potential_output_nodes }) {
|
||||
this.element.style.display = "block";
|
||||
// read key from local storage and set it to the input
|
||||
const key = this.readKeyFromLocalStorage();
|
||||
this.keyInput.value = key;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user