sd-model-organizer/scripts/mo/ui_details.py

67 lines
2.8 KiB
Python

import gradio as gr
import scripts.mo.ui_styled_html as styled
from scripts.mo.environment import env
def on_id_changed(record_id):
if record_id is not None and record_id:
record = env.storage.get_record_by_id(record_id)
if record is None:
return [
gr.HTML.update(value=f'Record with id {record_id} was not found.'),
gr.HTML.update(visible=False),
gr.Textbox.update(value=''),
gr.Button.update(visible=False),
gr.Button.update(visible=False)
]
else:
return [
gr.HTML.update(value=styled.record_details(record)),
gr.HTML.update(visible=bool(record.description)),
gr.Textbox.update(value=record.description),
gr.Button.update(visible=True),
gr.Button.update(visible=record.is_download_possible())
]
return [
gr.HTML.update(value=f'No record id passed.'),
gr.HTML.update(visible=False),
gr.Textbox.update(value=''),
gr.Button.update(visible=False),
gr.Button.update(visible=False)
]
def details_ui_block():
with gr.Blocks():
details_id_box = gr.Textbox(label='details_id_box', elem_classes='mo-alert-warning', visible=False)
with gr.Row():
back_button = gr.Button("Back")
remove_button = gr.Button("Remove")
edit_button = gr.Button('Edit')
download_button = gr.Button("Download")
content_widget = gr.HTML()
description_html = '<div><p style="margin-left: 0.2rem;">Description:</p>' \
'<textarea id="mo-description-preview"></textarea></div>'
description_html_widget = gr.HTML(label='Description:', value=description_html)
description_input_widget = gr.Textbox(label='description_input_widget',
elem_classes='mo-alert-warning',
interactive=False,
visible=False)
details_id_box.change(on_id_changed, inputs=details_id_box,
outputs=[content_widget, description_html_widget, description_input_widget, edit_button,
download_button])
description_input_widget.change(fn=None, inputs=description_input_widget,
_js='handleDescriptionPreviewContentChange')
back_button.click(fn=None, _js='navigateBack')
download_button.click(fn=None, inputs=details_id_box, _js='navigateDownloadRecord')
remove_button.click(fn=None, inputs=details_id_box, _js='navigateRemove')
edit_button.click(fn=None, inputs=details_id_box, _js='navigateEdit')
return details_id_box