1
0

rendering.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from nicegui import ui
  2. from ..header import add_head_html, add_header
  3. from ..style import section_heading, subheading
  4. from .content import DocumentationPage
  5. from .demo import demo
  6. from .reference import generate_class_doc
  7. def render_page(documentation: DocumentationPage, *, with_menu: bool = True) -> None:
  8. """Render the documentation."""
  9. # menu
  10. if with_menu:
  11. with ui.left_drawer() \
  12. .classes('column no-wrap gap-1 bg-[#eee] dark:bg-[#1b1b1b] mt-[-20px] px-8 py-20') \
  13. .style('height: calc(100% + 20px) !important') as menu:
  14. if documentation.back_link:
  15. ui.markdown(f'[← back]({documentation.back_link or "."})').classes('bold-links')
  16. else:
  17. ui.markdown('[← Overview](/documentation)').classes('bold-links')
  18. ui.markdown(f'**{documentation.heading.replace("*", "")}**').classes('mt-4')
  19. else:
  20. menu = None
  21. # header
  22. add_head_html()
  23. add_header(menu)
  24. ui.add_css('html {scroll-behavior: auto}')
  25. title = (documentation.title or '').replace('*', '')
  26. ui.page_title('NiceGUI' if not title else title if title.split()[0] == 'NiceGUI' else f'{title} | NiceGUI')
  27. # content
  28. def render_content():
  29. section_heading(documentation.subtitle or '', documentation.heading)
  30. for part in documentation.parts:
  31. if part.title:
  32. if part.link_target:
  33. ui.link_target(part.link_target)
  34. subheading(part.title, link=part.link, major=part.reference is not None)
  35. if part.description:
  36. if part.description_format == 'rst':
  37. element = ui.restructured_text(part.description.replace(':param ', ':'))
  38. else:
  39. element = ui.markdown(part.description)
  40. element.classes('bold-links arrow-links')
  41. if ':param' in part.description:
  42. element.classes('rst-param-tables')
  43. if part.ui:
  44. part.ui()
  45. if part.demo:
  46. demo(part.demo.function, lazy=part.demo.lazy, tab=part.demo.tab)
  47. if part.reference:
  48. generate_class_doc(part.reference, part.title)
  49. if part.link:
  50. ui.markdown(f'See [more...]({part.link})').classes('bold-links arrow-links')
  51. with ui.column().classes('w-full p-8 lg:p-16 max-w-[1250px] mx-auto'):
  52. if documentation.extra_column:
  53. with ui.grid().classes('grid-cols-[2fr_1fr] max-[600px]:grid-cols-[1fr] gap-x-8 gap-y-16'):
  54. with ui.column().classes('w-full'):
  55. render_content()
  56. with ui.column():
  57. documentation.extra_column()
  58. else:
  59. render_content()