1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
"""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')
|