modal.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import gradio as gr
  2. from typing import List
  3. class ModalInterface(gr.Interface):
  4. modal_id_counter = 0
  5. def __init__(
  6. self,
  7. html_content: str,
  8. open_button_text: str,
  9. open_button_classes: List[str] = [],
  10. open_button_extra_attrs: str = ''
  11. ):
  12. self.html_content = html_content
  13. self.open_button_text = open_button_text
  14. self.open_button_classes = open_button_classes
  15. self.open_button_extra_attrs = open_button_extra_attrs
  16. self.modal_id = ModalInterface.modal_id_counter
  17. ModalInterface.modal_id_counter += 1
  18. def __call__(self):
  19. return self.create_modal()
  20. def create_modal(self, visible=True):
  21. html_code = f"""
  22. <div id="cnet-modal-{self.modal_id}" class="cnet-modal">
  23. <span class="cnet-modal-close">&times;</span>
  24. <div class="cnet-modal-content">
  25. {self.html_content}
  26. </div>
  27. </div>
  28. <button id="cnet-modal-open-{self.modal_id}"
  29. class="cnet-modal-open {' '.join(self.open_button_classes)}"
  30. {self.open_button_extra_attrs}
  31. >{self.open_button_text}</button>
  32. """
  33. return gr.HTML(value=html_code, visible=visible)