|
|
"""Python support code for JavaScript based widgets.
|
|
|
|
|
|
Authors:
|
|
|
|
|
|
* Brian Granger
|
|
|
"""
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Copyright (C) 2008-2012 The IPython Development Team
|
|
|
#
|
|
|
# Distributed under the terms of the BSD License. The full license is in
|
|
|
# the file COPYING, distributed as part of this software.
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Imports
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
import os
|
|
|
import uuid
|
|
|
|
|
|
from IPython.core.display import display, Javascript
|
|
|
|
|
|
from zmq.utils import jsonapi
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Code
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
class JavascriptWidget(object):
|
|
|
|
|
|
jslibs = []
|
|
|
|
|
|
def __init__(self):
|
|
|
self.widget_id = unicode(uuid.uuid4()).replace('-','')
|
|
|
self.widget_var = '__widget_%s' % self.widget_id
|
|
|
ns = get_ipython().user_ns
|
|
|
ns[self.widget_var] = self
|
|
|
|
|
|
def encode_json(self, o):
|
|
|
return jsonapi.dumps(o)
|
|
|
|
|
|
def decode_json(self, s):
|
|
|
return jsonapi.loads(s)
|
|
|
|
|
|
def interact(self):
|
|
|
"""This should call display(Javascript(jscode))."""
|
|
|
jscode = self.render()
|
|
|
display(Javascript(data=jscode,lib=self.jslibs))
|
|
|
|
|
|
def render(self):
|
|
|
"""Return the final JavaScript code that will be eval'd in the client."""
|
|
|
raise NotImplementedError('render is not implemented in this base class')
|
|
|
|
|
|
|
|
|
|
|
|
|