VersionPresenter.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from bs4 import BeautifulSoup
  2. from homepagebuilder.interfaces import page_class_handles, require
  3. from homepagebuilder.core.page import CodeBasedPage
  4. from homepagebuilder.core.types import Context
  5. from homepagebuilder.interfaces import require, script
  6. # region presenter
  7. presenter_module = require('markdown_presenter')
  8. parsers_module = require('markdown_parsers')
  9. create_node = parsers_module.create_node
  10. MarkdownPresenter = presenter_module.MarkdownPresenter
  11. class VersionPresenter(MarkdownPresenter):
  12. def html2xaml(self, html, context:Context):
  13. soup = BeautifulSoup(html,'html.parser')
  14. card_list = []
  15. buffer = ''
  16. current_heading = ''
  17. for tag in soup.find_all(recursive=False):
  18. if tag.name == 'h2':
  19. if len(buffer) > 0:
  20. card_list.append((current_heading, buffer))
  21. current_heading = tag.contents[0]
  22. buffer = ''
  23. else:
  24. buffer += create_node(tag,context,[]).convert()
  25. if len(buffer) > 0:
  26. card_list.append((current_heading, buffer))
  27. xaml = ''
  28. for cardname, cardcontent in card_list:
  29. xaml += f'''
  30. <local:MyCard Title="{cardname}" Style="{{StaticResource Card}}" CanSwap="True" IsSwaped="false">
  31. <StackPanel Margin="20,28,20,10">
  32. <FlowDocumentScrollViewer >
  33. <FlowDocument>
  34. {cardcontent}
  35. </FlowDocument>
  36. </FlowDocumentScrollViewer >
  37. </StackPanel>
  38. </local:MyCard>
  39. '''
  40. context.used_resources.add('Card')
  41. context.used_resources.add('ContentStack')
  42. return xaml
  43. presenter = VersionPresenter()
  44. @script('VersionPresenter')
  45. def version_presenter(card,context,**_):
  46. md = card['markdown']
  47. return presenter.convert(md,context)