notebook/IPython/html/widgets/widget_link.py

62 lines
1.9 KiB
Python
Raw Normal View History

2014-08-22 05:44:27 +08:00
"""Link and DirectionalLink classes.
Propagate changes between widgets on the javascript side
2014-08-22 05:44:27 +08:00
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2014, the IPython Development Team.
2014-08-22 05:44:27 +08:00
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from .widget import Widget
2014-09-09 23:25:24 +08:00
from IPython.utils.traitlets import Unicode, Tuple, Any
2014-08-22 05:44:27 +08:00
#-----------------------------------------------------------------------------
# Classes
#-----------------------------------------------------------------------------
class Link(Widget):
"""Link Widget"""
_model_name = Unicode('LinkModel', sync=True)
widgets = Tuple(sync=True, allow_none=False)
def __init__(self, widgets=(), **kwargs):
kwargs['widgets'] = widgets
super(Link, self).__init__(**kwargs)
# for compatibility with traitlet links
def unlink(self):
self.close()
2014-09-09 23:25:24 +08:00
2014-08-22 05:44:27 +08:00
def link(*args):
return Link(widgets=args)
2014-09-09 23:25:24 +08:00
class DirectionalLink(Widget):
"""Directional Link Widget"""
_model_name = Unicode('DirectionalLinkModel', sync=True)
targets = Any(sync=True)
source = Tuple(sync=True)
# Does not quite behave like other widgets but reproduces
# the behavior of IPython.utils.traitlets.directional_link
def __init__(self, source, targets=(), **kwargs):
kwargs['source'] = source
kwargs['targets'] = targets
super(DirectionalLink, self).__init__(**kwargs)
# for compatibility with traitlet links
def unlink(self):
self.close()
2014-09-09 23:25:24 +08:00
def dlink(source, *targets):
return DirectionalLink(source, targets)