You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
# Copyright (c) Jupyter Development Team.
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
"""Contains the DOMWidget class"""
|
|
|
|
from traitlets import Bool, Unicode
|
|
from .widget import Widget, widget_serialization
|
|
from .trait_types import InstanceDict, TypedTuple
|
|
from .widget_layout import Layout
|
|
from .widget_style import Style
|
|
|
|
|
|
class DOMWidget(Widget):
|
|
"""Widget that can be inserted into the DOM
|
|
|
|
Parameters
|
|
----------
|
|
tooltip: str
|
|
tooltip caption
|
|
layout: InstanceDict(Layout)
|
|
widget layout
|
|
"""
|
|
|
|
_model_name = Unicode('DOMWidgetModel').tag(sync=True)
|
|
_dom_classes = TypedTuple(trait=Unicode(), help="CSS classes applied to widget DOM element").tag(sync=True)
|
|
tabbable = Bool(help="Is widget tabbable?", allow_none=True, default_value=None).tag(sync=True)
|
|
tooltip = Unicode(None, allow_none=True, help="A tooltip caption.").tag(sync=True)
|
|
layout = InstanceDict(Layout).tag(sync=True, **widget_serialization)
|
|
|
|
def add_class(self, className):
|
|
"""
|
|
Adds a class to the top level element of the widget.
|
|
|
|
Doesn't add the class if it already exists.
|
|
"""
|
|
if className not in self._dom_classes:
|
|
self._dom_classes = list(self._dom_classes) + [className]
|
|
return self
|
|
|
|
def remove_class(self, className):
|
|
"""
|
|
Removes a class from the top level element of the widget.
|
|
|
|
Doesn't remove the class if it doesn't exist.
|
|
"""
|
|
if className in self._dom_classes:
|
|
self._dom_classes = [c for c in self._dom_classes if c != className]
|
|
return self
|
|
|
|
def focus(self):
|
|
"""
|
|
Focus on the widget.
|
|
"""
|
|
self.send({'do':'focus'})
|
|
|
|
def blur(self):
|
|
"""
|
|
Blur the widget.
|
|
"""
|
|
self.send({'do':'blur'})
|
|
|
|
def _repr_keys(self):
|
|
for key in super()._repr_keys():
|
|
# Exclude layout if it had the default value
|
|
if key == 'layout':
|
|
value = getattr(self, key)
|
|
if repr(value) == '%s()' % value.__class__.__name__:
|
|
continue
|
|
yield key
|
|
# We also need to include _dom_classes in repr for reproducibility
|
|
if self._dom_classes:
|
|
yield '_dom_classes'
|