rendering.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import docutils.core
  2. from nicegui import ui
  3. from nicegui.elements.markdown import apply_tailwind
  4. from ..header import add_head_html, add_header
  5. from ..style import section_heading, subheading
  6. from .content import DocumentationPage
  7. from .demo import demo
  8. from .reference import generate_class_doc
  9. def render_page(documentation: DocumentationPage, *, is_main: bool = False) -> None:
  10. """Render the documentation."""
  11. # header
  12. add_head_html()
  13. add_header()
  14. ui.add_head_html('<style>html {scroll-behavior: auto;}</style>')
  15. # menu
  16. if not is_main:
  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'):
  20. if documentation.back_link:
  21. ui.markdown(f'[← back]({documentation.back_link or "."})').classes('bold-links')
  22. else:
  23. ui.markdown('[← Overview](/documentation)').classes('bold-links')
  24. ui.markdown(f'**{documentation.heading.replace("*", "")}**').classes('mt-4')
  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 or '', documentation.heading)
  29. # parts
  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)
  35. if part.description:
  36. if part.description_format == 'rst':
  37. description = part.description.replace('param ', '')
  38. html = docutils.core.publish_parts(description, writer_name='html5_polyglot')['html_body']
  39. html = apply_tailwind(html)
  40. ui.html(html)
  41. else:
  42. ui.markdown(part.description)
  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)