Source code for flask_uio.modal

from .element import Element, CoreElement
from .mixin import ReqInjectScriptMixin
from .prop import ValidProp, ValidSequenceProp
from .icon import Icon
from .button import Button
from .form import Form

[docs]class MessageModal(Element, ReqInjectScriptMixin): """Message modal widget Args: title (string): modal's title content_elements (list[Element], optional): modal's content. Defaults to None. action_elements (list[Element], optional): modal's action button. Defaults to None. icon (Icon, optional): modal's icon. Defaults to None. scroll_content (bool, optional): enable scroll content. Defaults to False. calling_id (string, optional): id of element that is clicked to open the modal. Defaults to None. More Info: - See https://fomantic-ui.com/modules/modal.html """ title = ValidProp(str) content_elements = ValidSequenceProp(CoreElement) action_elements = ValidSequenceProp(CoreElement) scroll_content = ValidProp(bool) icon = ValidProp(Icon) calling_id = ValidProp(str) def __init__(self, title, content_elements=None, action_elements=None, icon=None, scroll_content=False, calling_id=None, **attrs): super().__init__('div', **attrs) self.css_class = self.attrs.get('_class') or 'ui top aligned small modal' self.hide_id = False self.title = title.title() self.content_elements = content_elements self.action_elements = action_elements self.scroll_content = scroll_content self.icon = icon self.calling_id = calling_id header = Element('div', _class='header', inner_text=f'{self.title}') if self.icon: header.append(self.icon) self.append(header) if self.content_elements: css_class = 'scrolling content' if self.scroll_content else 'content' content = Element('div', _class=css_class) content.append(*tuple(self.content_elements)) self.append(content) if self.action_elements: actions = Element('div', _class='actions') actions.append(*tuple(self.action_elements)) self.append(actions) self.inject_script = f'load_modal("{self.calling_id}", "{self.id}");'
[docs]class ConfirmModal(MessageModal): """Confirmation modal widget Args: title (string): modal's title message (string): modal's message more_message (string, optional): modal's more description. Defaults to None. submit_url (string, optional): form's action url. Defaults to None. yes (str, optional): customize yes text. Defaults to 'yes'. yes_color (str, optional): customzie yes button's color. Defaults to 'red'. no (str, optional): customize no text. Defaults to 'no'. no_color (str, optional): customzie no button's color. Defaults to 'cancel'. icon (Icon, optional): modal's icon. Defaults to None. calling_id (string, optional): element's id that is clicked to open the modal. Defaults to None. form_id (string, optional): form's id where yes's button submitted to. Defaults to None. """ def __init__(self, title, message, more_message=None, submit_url=None, yes='yes', yes_color='red', no='no', no_color='cancel', icon=None, calling_id=None, form_id=None, **attrs): self.message = message self.more_message = more_message self.submit_url = submit_url self.yes_color = yes_color self.no_color = no_color self.form_id = form_id content = Element('p', inner_text=message) more_content = Element('', inner_text=more_message) yes = Button(yes, _type='submit', _class=f'ui {self.yes_color} button', form_id=self.form_id) no = Button(no, _type='button', _class=f'ui {self.no_color} button') form = [] if self.submit_url: form.append(Form(action=submit_url).append(yes, no)) else: form.append(Element('div', _class='ui form').append(yes, no)) super().__init__(title, content_elements=[content, more_content], action_elements=form, icon=icon, calling_id=calling_id, **attrs)