rendering.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from nicegui import ui
  2. from ..header import add_head_html, add_header
  3. from ..style import section_heading
  4. from .demo import demo
  5. from .model import Documentation, UiElementDocumentation
  6. from .tools import generate_class_doc
  7. def render_page(documentation: Documentation, *, is_main: bool = False) -> None:
  8. """Render the documentation."""
  9. # header
  10. add_head_html()
  11. add_header()
  12. ui.add_head_html('<style>html {scroll-behavior: auto;}</style>')
  13. # menu
  14. if is_main:
  15. menu = None
  16. else:
  17. with ui.left_drawer() \
  18. .classes('column no-wrap gap-1 bg-[#eee] dark:bg-[#1b1b1b] mt-[-20px] px-8 py-20') \
  19. .style('height: calc(100% + 20px) !important') as menu:
  20. ui.markdown(f'[← back]({documentation.back_link})').classes('bold-links')
  21. ui.markdown(f'**{documentation.title.replace("*", "")}**').classes('mt-4')
  22. for part in documentation:
  23. if part.title and part.link_target:
  24. ui.link(part.title, f'#{part.link_target}')
  25. # content
  26. with ui.column().classes('w-full p-8 lg:p-16 max-w-[1250px] mx-auto'):
  27. # heading
  28. section_heading(documentation.subtitle, documentation.title)
  29. # parts
  30. for part in documentation:
  31. if part.title:
  32. if part.link_target:
  33. ui.link_target(part.link_target)
  34. if part.link and part.link != documentation.route:
  35. with ui.link(target=part.link):
  36. ui.markdown(f'### {part.title}')
  37. else:
  38. ui.markdown(f'### {part.title}')
  39. if part.description:
  40. ui.markdown(part.description)
  41. if part.ui:
  42. part.ui()
  43. if part.demo:
  44. demo(part.demo)
  45. # reference
  46. if isinstance(documentation, UiElementDocumentation) and isinstance(documentation.element, type) and menu:
  47. with menu:
  48. ui.markdown('**Reference**').classes('mt-4')
  49. ui.markdown('## Reference').classes('mt-16')
  50. generate_class_doc(documentation.element)