custom.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import justpy as jp
  2. import os.path
  3. from .element import Element
  4. class CustomView(jp.JustpyBaseComponent):
  5. vue_type = 'custom'
  6. def __init__(self, on_change):
  7. self.pages = {}
  8. self.classes = ''
  9. self.options = jp.Dict(value=0)
  10. self.on_change = on_change
  11. super().__init__()
  12. self.allowed_events = ['onAdd']
  13. self.initialize(temp=False, onAdd=self.onAdd)
  14. def add_page(self, wp: jp.WebPage):
  15. jp.component_file_list += ['file?path=' + os.path.realpath(__file__).replace('.py', '.js')]
  16. super().add_page(wp)
  17. def react(self, _):
  18. pass
  19. def convert_object_to_dict(self):
  20. return {
  21. 'vue_type': self.vue_type,
  22. 'id': self.id,
  23. 'show': True,
  24. 'options': self.options,
  25. }
  26. def onAdd(self, msg):
  27. self.options.value += msg.number
  28. self.on_change(self.options.value)
  29. class Custom(Element):
  30. def __init__(self, *, on_change):
  31. super().__init__(CustomView(on_change))
  32. def add(self, number: str):
  33. self.view.options.value += number
  34. self.view.on_change(self.view.options.value)