|
|
- from traitlets import (Unicode, Instance, Union, List, Any, Dict)
- from ipywidgets import DOMWidget
- from ipywidgets.widgets.widget import (widget_serialization, CallbackDispatcher)
- from ._version import semver
- from .ForceLoad import force_load_instance
-
-
- class Events(object):
- def __init__(self, **kwargs):
- self._event_handlers_map = {}
- self.on_msg(self._handle_event)
-
- def on_event(self, event_and_modifiers, callback, remove=False):
- new_event = event_and_modifiers.split('.')[0]
- for existing_event in [event for event in self._event_handlers_map.keys()
- if event == new_event or event.startswith(new_event + '.')]:
- del self._event_handlers_map[existing_event]
-
- self._event_handlers_map[event_and_modifiers] = CallbackDispatcher()
-
- self._event_handlers_map[event_and_modifiers].register_callback(callback, remove=remove)
-
- if remove and not self._event_handlers_map[event_and_modifiers].callbacks:
- del self._event_handlers_map[event_and_modifiers]
-
- difference = set(self._event_handlers_map.keys()) ^ set(self._events)
- if len(difference) != 0:
- self._events = list(self._event_handlers_map.keys())
-
- def fire_event(self, event, data):
- self._event_handlers_map[event](self, event, data)
-
- def _handle_event(self, _, content, buffers):
- event = content.get("event", "")
- data = content.get("data", {})
- self.fire_event(event, data)
-
-
- class VueWidget(DOMWidget, Events):
-
- # Force the loading of jupyter-vue before dependent extensions when in a static context (embed,
- # voila)
- _jupyter_vue = Any(force_load_instance, read_only=True).tag(sync=True, **widget_serialization)
-
- _model_name = Unicode('VueModel').tag(sync=True)
-
- _view_name = Unicode('VueView').tag(sync=True)
-
- _view_module = Unicode('jupyter-vue').tag(sync=True)
-
- _model_module = Unicode('jupyter-vue').tag(sync=True)
-
- _view_module_version = Unicode(semver).tag(sync=True)
-
- _model_module_version = Unicode(semver).tag(sync=True)
-
- children = List(Union([
- Instance(DOMWidget),
- Unicode()
- ], default_value=None)).tag(sync=True, **widget_serialization)
-
- slot = Unicode(None, allow_none=True).tag(sync=True)
-
- _events = List(Unicode(), default_value=None, allow_none=True).tag(sync=True)
-
- v_model = Any('!!disabled!!', allow_none=True).tag(sync=True)
-
- style_ = Unicode(None, allow_none=True).tag(sync=True)
-
- class_ = Unicode(None, allow_none=True).tag(sync=True)
-
- attributes = Dict(None, allow_none=True).tag(sync=True)
-
- v_slots = List(Dict()).tag(sync=True, **widget_serialization)
-
- v_on = Unicode(None, allow_none=True).tag(sync=True)
-
-
- __all__ = ['VueWidget']
|