diff --git a/html/extra-networks-card.html b/html/extra-networks-card.html index 258bdf0a1..cb4720f14 100644 --- a/html/extra-networks-card.html +++ b/html/extra-networks-card.html @@ -4,7 +4,9 @@
diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js index 2f0a7de9d..fc8319e91 100644 --- a/javascript/extraNetworks.js +++ b/javascript/extraNetworks.js @@ -5,11 +5,14 @@ function setupExtraNetworksForTab(tabname){ var tabs = gradioApp().querySelector('#'+tabname+'_extra_tabs > div') var search = gradioApp().querySelector('#'+tabname+'_extra_search textarea') var refresh = gradioApp().getElementById(tabname+'_extra_refresh') + var descriptInput = gradioApp().getElementById(tabname+ '_description_input') var close = gradioApp().getElementById(tabname+'_extra_close') search.classList.add('search') tabs.appendChild(search) tabs.appendChild(refresh) + tabs.appendChild(descriptInput) + tabs.appendChild(close) search.addEventListener("input", function(evt){ @@ -97,6 +100,37 @@ function saveCardPreview(event, tabname, filename){ event.preventDefault() } +function saveCardDescription(event, tabname, filename, descript){ + var textarea = gradioApp().querySelector("#" + tabname + '_description_filename > label > textarea') + var button = gradioApp().getElementById(tabname + '_save_description') + var description = gradioApp().getElementById(tabname+ '_description_input') + + textarea.value = filename + description.value=descript + updateInput(textarea) + + button.click() + + event.stopPropagation() + event.preventDefault() +} + +function readCardDescription(event, tabname, filename, descript){ + var textarea = gradioApp().querySelector("#" + tabname + '_description_filename > label > textarea') + var description_textarea = gradioApp().querySelector("#" + tabname+ '_description_input > label > textarea') + var button = gradioApp().getElementById(tabname + '_read_description') + + textarea.value = filename + description_textarea.value = descript + + updateInput(textarea) + updateInput(description_textarea) + button.click() + + event.stopPropagation() + event.preventDefault() +} + function extraNetworksSearchButton(tabs_id, event){ searchTextarea = gradioApp().querySelector("#" + tabs_id + ' > div > textarea') button = event.target diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index d5c5bb34f..a719bde33 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -167,7 +167,9 @@ class ExtraNetworksPage: "name": item["name"], "description": (item.get("description") or ""), "card_clicked": onclick, + "save_card_description": '"' + html.escape(f"""return saveCardDescription(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])})""") + '"', "save_card_preview": '"' + html.escape(f"""return saveCardPreview(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])})""") + '"', + "read_card_description": '"' + html.escape(f"""return readCardDescription(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])}, {json.dumps(item["description"])})""") + '"', "search_term": item.get("search_term", ""), "metadata_button": metadata_button, } @@ -216,6 +218,11 @@ class ExtraNetworksUi: self.button_save_preview = None self.preview_target_filename = None + self.button_save_description = None + self.button_read_description = None + self.description_target_filename = None + self.description_input = None + self.tabname = None @@ -249,12 +256,19 @@ def create_ui(container, button, tabname): ui.pages.append(page_elem) filter = gr.Textbox('', show_label=False, elem_id=tabname+"_extra_search", placeholder="Search...", visible=False) + + ui.description_input = gr.TextArea('', show_label=False, elem_id=tabname+"_description_input", placeholder="Save/Replace Extra Network Description...", lines=2) button_refresh = ToolButton(refresh_symbol, elem_id=tabname+"_extra_refresh") button_close = ToolButton(close_symbol, elem_id=tabname+"_extra_close") ui.button_save_preview = gr.Button('Save preview', elem_id=tabname+"_save_preview", visible=False) ui.preview_target_filename = gr.Textbox('Preview save filename', elem_id=tabname+"_preview_filename", visible=False) + ui.button_save_description = gr.Button('Save description', elem_id=tabname+"_save_description", visible=False) + ui.button_read_description = gr.Button('Read description', elem_id=tabname+"_read_description", visible=False) + ui.description_target_filename = gr.Textbox('Description save filename', elem_id=tabname+"_description_filename", visible=False) + + def toggle_visibility(is_visible): is_visible = not is_visible return is_visible, gr.update(visible=is_visible), gr.update(variant=("secondary-down" if is_visible else "secondary")) @@ -321,3 +335,27 @@ def setup_ui(ui, gallery): inputs=[ui.preview_target_filename, gallery, ui.preview_target_filename], outputs=[*ui.pages] ) + + # write description to a file + def save_description(filename,descrip): + lastDotIndex = filename.rindex('.') + filename = filename[0:lastDotIndex]+".description.txt" + if descrip != "": + try: + f = open(filename,'w') + except OSError: + print ("Could not open file to write: " + filename) + with f: + f.write(descrip) + f.close() + return [page.create_html(ui.tabname) for page in ui.stored_extra_pages] + + ui.button_save_description.click( + fn=save_description, + _js="function(x,y){return [x,y]}", + inputs=[ui.description_target_filename, ui.description_input], + outputs=[*ui.pages] + ) + + +