39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import gradio as gr
|
|
from typing import List
|
|
|
|
|
|
class ModalInterface(gr.Interface):
|
|
modal_id_counter = 0
|
|
|
|
def __init__(
|
|
self,
|
|
html_content: str,
|
|
open_button_text: str,
|
|
open_button_classes: List[str] = [],
|
|
open_button_extra_attrs: str = ''
|
|
):
|
|
self.html_content = html_content
|
|
self.open_button_text = open_button_text
|
|
self.open_button_classes = open_button_classes
|
|
self.open_button_extra_attrs = open_button_extra_attrs
|
|
self.modal_id = ModalInterface.modal_id_counter
|
|
ModalInterface.modal_id_counter += 1
|
|
|
|
def __call__(self):
|
|
return self.create_modal()
|
|
|
|
def create_modal(self, visible=True):
|
|
html_code = f"""
|
|
<div id="cnet-modal-{self.modal_id}" class="cnet-modal">
|
|
<span class="cnet-modal-close">×</span>
|
|
<div class="cnet-modal-content">
|
|
{self.html_content}
|
|
</div>
|
|
</div>
|
|
<button id="cnet-modal-open-{self.modal_id}"
|
|
class="cnet-modal-open {' '.join(self.open_button_classes)}"
|
|
{self.open_button_extra_attrs}
|
|
>{self.open_button_text}</button>
|
|
"""
|
|
return gr.HTML(value=html_code, visible=visible)
|