refreshable_documentation.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from nicegui import ui
  2. from ..documentation_tools import text_demo
  3. def main_demo() -> None:
  4. import random
  5. numbers = []
  6. @ui.refreshable
  7. def number_ui() -> None:
  8. ui.label(', '.join(str(n) for n in sorted(numbers)))
  9. def add_number() -> None:
  10. numbers.append(random.randint(0, 100))
  11. number_ui.refresh()
  12. number_ui()
  13. ui.button('Add random number', on_click=add_number)
  14. def more() -> None:
  15. @text_demo('Refreshable UI for input validation', '''
  16. Here is a demo of how to use the refreshable decorator to give feedback about the validity of user input.
  17. ''')
  18. def input_validation():
  19. import re
  20. pwd = ui.input('Password', password=True, on_change=lambda: show_info.refresh())
  21. rules = {
  22. 'Lowercase letter': lambda s: re.search(r'[a-z]', s),
  23. 'Uppercase letter': lambda s: re.search(r'[A-Z]', s),
  24. 'Digit': lambda s: re.search(r'\d', s),
  25. 'Special character': lambda s: re.search(r"[!@#$%^&*(),.?':{}|<>]", s),
  26. 'min. 8 characters': lambda s: len(s) >= 8,
  27. }
  28. @ui.refreshable
  29. def show_info():
  30. for rule, check in rules.items():
  31. with ui.row().classes('items-center gap-2'):
  32. if check(pwd.value or ''):
  33. ui.icon('done', color='green')
  34. ui.label(rule).classes('text-xs text-green strike-through')
  35. else:
  36. ui.icon('radio_button_unchecked', color='red')
  37. ui.label(rule).classes('text-xs text-red')
  38. show_info()