|
1 | 1 | /** If true, the workflow iframe is present. If false, the tab has never been opened, or loading failed. */ |
2 | 2 | let hasComfyLoaded = false; |
3 | 3 |
|
| 4 | +/** Helper class for managing the Comfy workflow tab. */ |
| 5 | +class ComfyWorkflowHelpers { |
| 6 | + |
| 7 | + constructor() { |
| 8 | + this.imageBlockElem = getRequiredElementById('comfy_save_image_block'); |
| 9 | + let imageHtml = makeImageInput(null, 'comfy_save_image', null, 'Image', 'Image', true, false); |
| 10 | + this.imageBlockElem.innerHTML = imageHtml; |
| 11 | + this.imageElem = getRequiredElementById('comfy_save_image'); |
| 12 | + this.enableImageElem = getRequiredElementById('comfy_save_image_toggle'); |
| 13 | + } |
| 14 | +} |
| 15 | + |
| 16 | +/** Helper instance for comfy workflow save modal, just an instance of {@link ComfyWorkflowHelpers}. */ |
| 17 | +let comfyWorkflowHelpers = new ComfyWorkflowHelpers(); |
| 18 | + |
4 | 19 | let comfyButtonsArea = getRequiredElementById('comfy_workflow_buttons'); |
5 | 20 |
|
6 | 21 | let comfyObjectData = {}; |
@@ -1090,25 +1105,21 @@ function comfyNoticeMessage(message) { |
1090 | 1105 | function comfySaveWorkflowNow() { |
1091 | 1106 | comfyReconfigureQuickload(); |
1092 | 1107 | getRequiredElementById('comfy_save_modal_replace').value = ''; |
1093 | | - let curImg = document.getElementById('current_image_img'); |
1094 | | - let enableImage = getRequiredElementById('comfy_save_use_image'); |
1095 | | - let saveImageSection = getRequiredElementById('comfy_save_image'); |
1096 | | - saveImageSection.innerHTML = ''; |
1097 | | - if (curImg) { |
1098 | | - let newImg = curImg.cloneNode(true); |
1099 | | - newImg.id = 'comfy_save_image_img'; |
1100 | | - newImg.style.maxWidth = '100%'; |
1101 | | - newImg.removeAttribute('width'); |
1102 | | - newImg.removeAttribute('height'); |
1103 | | - saveImageSection.appendChild(newImg); |
1104 | | - enableImage.checked = true; |
1105 | | - enableImage.disabled = false; |
| 1108 | + let curImg = currentImageHelper.getCurrentImage(); |
| 1109 | + comfyWorkflowHelpers.enableImageElem.checked = false; |
| 1110 | + let run = () => { |
| 1111 | + triggerChangeFor(comfyWorkflowHelpers.enableImageElem); |
| 1112 | + $('#comfy_workflow_save_modal').modal('show'); |
| 1113 | + }; |
| 1114 | + if (curImg && curImg.tagName == 'IMG') { |
| 1115 | + setMediaFileDirect(comfyWorkflowHelpers.imageElem, curImg.src, 'image', 'cur', 'cur', () => { |
| 1116 | + comfyWorkflowHelpers.enableImageElem.checked = false; |
| 1117 | + run(); |
| 1118 | + }); |
1106 | 1119 | } |
1107 | 1120 | else { |
1108 | | - enableImage.checked = false; |
1109 | | - enableImage.disabled = true; |
| 1121 | + run(); |
1110 | 1122 | } |
1111 | | - $('#comfy_workflow_save_modal').modal('show'); |
1112 | 1123 | } |
1113 | 1124 |
|
1114 | 1125 | function comfyLoadByName(name) { |
@@ -1161,45 +1172,56 @@ function comfySaveModalSaveNow() { |
1161 | 1172 | } |
1162 | 1173 | saveName = match.value; |
1163 | 1174 | } |
1164 | | - let image = null; |
1165 | | - if (getRequiredElementById('comfy_save_use_image').checked) { |
1166 | | - image = imageToSmallPreviewData(getRequiredElementById('comfy_save_image').getElementsByTagName('img')[0]); |
1167 | | - } |
1168 | | - $('#comfy_workflow_save_modal').modal('hide'); |
1169 | | - comfyNoticeMessage("Saving..."); |
1170 | | - comfyBuildParams(false, (params, prompt_text, retained, paramVal, workflow) => { |
1171 | | - params = JSON.parse(JSON.stringify(params)); |
1172 | | - delete params.comfyworkflowparammetadata; |
1173 | | - delete params.comfyworkflowraw; |
1174 | | - let description = getRequiredElementById('comfy_save_description').value; |
1175 | | - let simpleTab = getRequiredElementById('comfy_save_enable_simple').checked; |
1176 | | - for (let node of workflow.nodes) { |
1177 | | - if (node.type == 'SwarmWorkflowDescription') { |
1178 | | - console.log(node); |
1179 | | - description = node.widgets_values[0]; |
1180 | | - simpleTab = node.widgets_values[1]; |
1181 | | - break; |
1182 | | - } |
1183 | | - } |
1184 | | - let inputs = { |
1185 | | - 'name': saveName, |
1186 | | - 'description': description, |
1187 | | - 'enable_in_simple': simpleTab, |
1188 | | - 'workflow': JSON.stringify(workflow), |
1189 | | - 'prompt': prompt_text, |
1190 | | - 'custom_params': params, |
1191 | | - 'param_values': paramVal, |
1192 | | - 'image': image, |
1193 | | - 'replace': getRequiredElementById('comfy_save_modal_replace').value |
1194 | | - }; |
1195 | | - genericRequest('ComfySaveWorkflow', inputs, (data) => { |
1196 | | - comfyNoticeMessage("Saved!"); |
1197 | | - comfyReconfigureQuickload(); |
1198 | | - if (comfyWorkflowBrowser.everLoaded) { |
1199 | | - comfyWorkflowBrowser.refresh(); |
| 1175 | + let doSave = (image) => { |
| 1176 | + $('#comfy_workflow_save_modal').modal('hide'); |
| 1177 | + comfyNoticeMessage("Saving..."); |
| 1178 | + comfyBuildParams(false, (params, prompt_text, retained, paramVal, workflow) => { |
| 1179 | + params = JSON.parse(JSON.stringify(params)); |
| 1180 | + delete params.comfyworkflowparammetadata; |
| 1181 | + delete params.comfyworkflowraw; |
| 1182 | + let description = getRequiredElementById('comfy_save_description').value; |
| 1183 | + let simpleTab = getRequiredElementById('comfy_save_enable_simple').checked; |
| 1184 | + for (let node of workflow.nodes) { |
| 1185 | + if (node.type == 'SwarmWorkflowDescription') { |
| 1186 | + description = node.widgets_values[0]; |
| 1187 | + simpleTab = node.widgets_values[1]; |
| 1188 | + break; |
| 1189 | + } |
1200 | 1190 | } |
| 1191 | + let inputs = { |
| 1192 | + 'name': saveName, |
| 1193 | + 'description': description, |
| 1194 | + 'enable_in_simple': simpleTab, |
| 1195 | + 'workflow': JSON.stringify(workflow), |
| 1196 | + 'prompt': prompt_text, |
| 1197 | + 'custom_params': params, |
| 1198 | + 'param_values': paramVal, |
| 1199 | + 'image': image, |
| 1200 | + 'replace': getRequiredElementById('comfy_save_modal_replace').value |
| 1201 | + }; |
| 1202 | + genericRequest('ComfySaveWorkflow', inputs, (data) => { |
| 1203 | + comfyNoticeMessage("Saved!"); |
| 1204 | + comfyReconfigureQuickload(); |
| 1205 | + if (comfyWorkflowBrowser.everLoaded) { |
| 1206 | + comfyWorkflowBrowser.refresh(); |
| 1207 | + } |
| 1208 | + }); |
1201 | 1209 | }); |
1202 | | - }); |
| 1210 | + }; |
| 1211 | + if (comfyWorkflowHelpers.enableImageElem.checked) { |
| 1212 | + let imageVal = getInputVal(comfyWorkflowHelpers.imageElem); |
| 1213 | + if (imageVal) { |
| 1214 | + imageToData(imageVal, (dataURL) => { |
| 1215 | + doSave(dataURL); |
| 1216 | + }, true); |
| 1217 | + return; |
| 1218 | + } |
| 1219 | + else { |
| 1220 | + doSave('clear'); |
| 1221 | + return; |
| 1222 | + } |
| 1223 | + } |
| 1224 | + doSave(null); |
1203 | 1225 | } |
1204 | 1226 |
|
1205 | 1227 | /** Cancel button in the Save modal. */ |
|
0 commit comments