From bcfe0c28743f40567cdd6fb03f3f2fad899f81d0 Mon Sep 17 00:00:00 2001 From: copusDev <147301601+copusDev@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:32:17 +0800 Subject: [PATCH] feat: copus content add rating (#1962) Co-authored-by: john --- js/comfyui-share-copus.js | 263 +++++++++++++++++++++++++++++++------- 1 file changed, 218 insertions(+), 45 deletions(-) diff --git a/js/comfyui-share-copus.js b/js/comfyui-share-copus.js index ef08c580..a9ea902a 100644 --- a/js/comfyui-share-copus.js +++ b/js/comfyui-share-copus.js @@ -71,7 +71,7 @@ export class CopusShareDialog extends ComfyDialog { this.allFiles = []; this.titleNum = 0; } - + createButtons() { const inputStyle = { display: "block", @@ -202,7 +202,7 @@ export class CopusShareDialog extends ComfyDialog { this.LockInput = $el("input", { type: "text", placeholder: "", - style: { + style: { width: "100px", padding: "7px", borderRadius: "4px", @@ -301,7 +301,7 @@ export class CopusShareDialog extends ComfyDialog { }, [] ); - + const titleNumDom = $el( "label", { @@ -342,15 +342,11 @@ export class CopusShareDialog extends ComfyDialog { ["0/70"] ); // Additional Inputs Section - const additionalInputsSection = $el( - "div", - { style: { ...sectionStyle, } }, - [ - $el("label", { style: labelStyle }, ["3️⃣ Title "]), - this.TitleInput, - titleNumDom, - ] - ); + const additionalInputsSection = $el("div", { style: { ...sectionStyle } }, [ + $el("label", { style: labelStyle }, ["3️⃣ Title "]), + this.TitleInput, + titleNumDom, + ]); const SubtitleSection = $el("div", { style: sectionStyle }, [ $el("label", { style: labelStyle }, ["4️⃣ Subtitle "]), this.SubTitleInput, @@ -392,11 +388,31 @@ export class CopusShareDialog extends ComfyDialog { }, [ this.radioButtonsCheck_lock, - $el("div", { style: { marginLeft: "5px" ,display:'flex',alignItems:'center'} }, [ - $el("span", { style: { marginLeft: "5px" } }, ["ON"]), - $el("span", { style: { marginLeft: "20px",marginRight:'10px' ,color:'#fff'} }, ["Price US$"]), - this.LockInput - ]), + $el( + "div", + { + style: { + marginLeft: "5px", + display: "flex", + alignItems: "center", + }, + }, + [ + $el("span", { style: { marginLeft: "5px" } }, ["ON"]), + $el( + "span", + { + style: { + marginLeft: "20px", + marginRight: "10px", + color: "#fff", + }, + }, + ["Price US$"] + ), + this.LockInput, + ] + ), ] ), $el( @@ -404,14 +420,28 @@ export class CopusShareDialog extends ComfyDialog { { style: { display: "flex", alignItems: "center", cursor: "pointer" } }, [ this.radioButtonsCheckOff_lock, - $el("span", { style: { marginLeft: "5px" } }, ["OFF"]), + $el( + "div", + { + style: { + marginLeft: "5px", + display: "flex", + alignItems: "center", + }, + }, + [ + $el("span", { style: { marginLeft: "5px" } }, ["OFF"]), + ] + ), ] ), - + $el( "p", { style: { fontSize: "16px", color: "#fff", margin: "10px 0 0 0" } }, - ["Get paid from your workflow. You can change the price and withdraw your earnings on Copus."] + [ + "Get paid from your workflow. You can change the price and withdraw your earnings on Copus.", + ] ), ]); @@ -432,7 +462,7 @@ export class CopusShareDialog extends ComfyDialog { }); const blockChainSection = $el("div", { style: sectionStyle }, [ - $el("label", { style: labelStyle }, ["7️⃣ Store on blockchain "]), + $el("label", { style: labelStyle }, ["8️⃣ Store on blockchain "]), $el( "label", { @@ -463,6 +493,139 @@ export class CopusShareDialog extends ComfyDialog { ), ]); + this.ratingRadioButtonsCheck0 = $el("input", { + type: "radio", + name: "content_rating", + value: "0", + id: "content_rating0", + }); + this.ratingRadioButtonsCheck1 = $el("input", { + type: "radio", + name: "content_rating", + value: "1", + id: "content_rating1", + }); + this.ratingRadioButtonsCheck2 = $el("input", { + type: "radio", + name: "content_rating", + value: "2", + id: "content_rating2", + }); + this.ratingRadioButtonsCheck_1 = $el("input", { + type: "radio", + name: "content_rating", + value: "-1", + id: "content_rating_1", + checked: true, + }); + + // content rating + const contentRatingSection = $el("div", { style: sectionStyle }, [ + $el("label", { style: labelStyle }, ["7️⃣ Content rating "]), + $el( + "label", + { + style: { + marginTop: "10px", + display: "flex", + alignItems: "center", + cursor: "pointer", + }, + }, + [ + this.ratingRadioButtonsCheck0, + $el("img", { + style: { + width: "12px", + height: "12px", + marginLeft: "5px", + }, + src: "https://static.copus.io/images/client/202507/test/b9f17da83b054d53cd0cb4508c2c30dc.png", + }), + $el("span", { style: { marginLeft: "5px", color: "#fff" } }, [ + "All ages", + ]), + ] + ), + $el( + "p", + { style: { fontSize: "10px", color: "#fff", marginLeft: "20px" } }, + ["Safe for all viewers; no profanity, violence, or mature themes."] + ), + $el( + "label", + { style: { display: "flex", alignItems: "center", cursor: "pointer" } }, + [ + this.ratingRadioButtonsCheck1, + $el("img", { + style: { + width: "12px", + height: "12px", + marginLeft: "5px", + }, + src: "https://static.copus.io/images/client/202507/test/7848bc0d3690671df21c7cf00c4cfc81.png", + }), + $el("span", { style: { marginLeft: "5px", color: "#fff" } }, [ + "13+ (Teen)", + ]), + ] + ), + $el( + "p", + { style: { fontSize: "10px", color: "#fff", marginLeft: "20px" } }, + [ + "Mild language, light themes, or cartoon violence; no explicit content. ", + ] + ), + $el( + "label", + { style: { display: "flex", alignItems: "center", cursor: "pointer" } }, + [ + this.ratingRadioButtonsCheck2, + $el("img", { + style: { + width: "12px", + height: "12px", + marginLeft: "5px", + }, + src: "https://static.copus.io/images/client/202507/test/bc51839c208d68d91173e43c23bff039.png", + }), + $el("span", { style: { marginLeft: "5px", color: "#fff" } }, [ + "18+ (Explicit)", + ]), + ] + ), + $el( + "p", + { style: { fontSize: "10px", color: "#fff", marginLeft: "20px" } }, + [ + "Explicit content, including sexual content, strong violence, or intense themes. ", + ] + ), + $el( + "label", + { style: { display: "flex", alignItems: "center", cursor: "pointer" } }, + [ + this.ratingRadioButtonsCheck_1, + $el("img", { + style: { + width: "12px", + height: "12px", + marginLeft: "5px", + }, + src: "https://static.copus.io/images/client/202507/test/5c802fdcaaea4e7bbed37393eec0d5ba.png", + }), + $el("span", { style: { marginLeft: "5px", color: "#fff" } }, [ + "Not Rated", + ]), + ] + ), + $el( + "p", + { style: { fontSize: "10px", color: "#fff", marginLeft: "20px" } }, + ["No age rating provided."] + ), + ]); // Message Section this.message = $el( @@ -526,6 +689,7 @@ export class CopusShareDialog extends ComfyDialog { DescriptionSection, // contestSection, blockChainSection_lock, + contentRatingSection, blockChainSection, this.message, buttonsSection, @@ -534,7 +698,7 @@ export class CopusShareDialog extends ComfyDialog { return layout; } /** - * api + * api * @param {url} path * @param {params} options * @param {statusText} statusText @@ -587,7 +751,9 @@ export class CopusShareDialog extends ComfyDialog { url: data, }); } else { - throw new Error("make sure your API key is correct and try again later"); + throw new Error( + "make sure your API key is correct and try again later" + ); } } catch (e) { if (e?.response?.status === 413) { @@ -628,8 +794,15 @@ export class CopusShareDialog extends ComfyDialog { subTitle: this.SubTitleInput.value, content: this.descriptionInput.value, storeOnChain: this.radioButtonsCheck.checked ? true : false, - lockState:this.radioButtonsCheck_lock.checked ? 2 : 0, - unlockPrice:this.LockInput.value, + lockState: this.radioButtonsCheck_lock.checked ? 2 : 0, + unlockPrice: this.LockInput.value, + rating: this.ratingRadioButtonsCheck0.checked + ? 0 + : this.ratingRadioButtonsCheck1.checked + ? 1 + : this.ratingRadioButtonsCheck2.checked + ? 2 + : -1, }; if (!this.keyInput.value) { @@ -644,8 +817,8 @@ export class CopusShareDialog extends ComfyDialog { throw new Error("Title is required"); } - if(this.radioButtonsCheck_lock.checked){ - if (!this.LockInput.value){ + if (this.radioButtonsCheck_lock.checked) { + if (!this.LockInput.value) { throw new Error("Price is required"); } } @@ -695,23 +868,23 @@ export class CopusShareDialog extends ComfyDialog { "Uploading workflow..." ); - if (res.status && res.data.status && res.data) { - localStorage.setItem("copus_token",this.keyInput.value); - const { data } = res.data; - if (data) { - const url = `${DEFAULT_HOMEPAGE_URL}/work/${data}`; - this.message.innerHTML = `Workflow has been shared successfully. Click here to view it.`; - this.previewImage.src = ""; - this.previewImage.style.display = "none"; - this.uploadedImages = []; - this.allFilesImages = []; - this.allFiles = []; - this.TitleInput.value = ""; - this.SubTitleInput.value = ""; - this.descriptionInput.value = ""; - this.selectedFile = null; - } - } + if (res.status && res.data.status && res.data) { + localStorage.setItem("copus_token", this.keyInput.value); + const { data } = res.data; + if (data) { + const url = `${DEFAULT_HOMEPAGE_URL}/work/${data}`; + this.message.innerHTML = `Workflow has been shared successfully. Click here to view it.`; + this.previewImage.src = ""; + this.previewImage.style.display = "none"; + this.uploadedImages = []; + this.allFilesImages = []; + this.allFiles = []; + this.TitleInput.value = ""; + this.SubTitleInput.value = ""; + this.descriptionInput.value = ""; + this.selectedFile = null; + } + } } catch (e) { throw new Error("Error sharing workflow: " + e.message); } @@ -757,7 +930,7 @@ export class CopusShareDialog extends ComfyDialog { this.element.style.display = "block"; this.previewImage.src = ""; this.previewImage.style.display = "none"; - this.keyInput.value = apiToken!=null?apiToken:""; + this.keyInput.value = apiToken != null ? apiToken : ""; this.uploadedImages = []; this.allFilesImages = []; this.allFiles = [];