reference_tools.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import re
  2. from typing import Callable
  3. from nicegui import globals, ui
  4. from .example import example
  5. SPECIAL_CHARACTERS = re.compile('[^(a-z)(A-Z)(0-9)-]')
  6. def get_menu() -> ui.left_drawer:
  7. return [element for element in globals.get_client().elements.values() if isinstance(element, ui.left_drawer)][0]
  8. def heading(text: str, *, make_menu_entry: bool = True) -> None:
  9. ui.html(f'<em>{text}</em>').classes('mt-8 text-3xl font-weight-500')
  10. if make_menu_entry:
  11. with get_menu():
  12. ui.label(text).classes('font-bold mt-4')
  13. def subheading(text: str, *, make_menu_entry: bool = True) -> None:
  14. name = SPECIAL_CHARACTERS.sub('_', text).lower()
  15. target = ui.link_target(name).style('position: relative; top: -90px')
  16. with ui.row().classes('gap-2 items-center'):
  17. ui.label(text).classes('text-2xl')
  18. with ui.link(target=f'#{target.id}'):
  19. ui.icon('link', size='sm').classes('text-gray-400 hover:text-gray-800')
  20. if make_menu_entry:
  21. with get_menu():
  22. ui.link(text, target=f'#{target.id}').classes('block py-1 px-2 hover:bg-gray-100')
  23. class intro_example:
  24. def __init__(self, title: str, explanation: str) -> None:
  25. self.title = title
  26. self.explanation = explanation
  27. def __call__(self, f: Callable) -> Callable:
  28. subheading(self.title, make_menu_entry=False)
  29. ui.label(self.explanation)
  30. return example(None, None)(f)