Source code for attitude.display.nbextension
from os import path
from uuid import uuid4
from json import dumps
from collections import Sequence
from IPython import display
__here__ = path.dirname(__file__)
lib = path.join(__here__,'../../js-frontend/lib')
[docs]def get_library(fn):
dn = path.join(lib,fn)
with open(dn) as f:
return f.read()
[docs]def init_notebook_mode():
"""
Initialize attitude.js in the browser.
Based heavily on the `plotly` offline setup function
(https://github.com/plotly/plotly.py/blob/master/plotly/offline/offline.py)
Also see
https://github.com/paulgb/nbgraph/blob/master/nbgraph/client/prepare_notebook.html
"""
global __ATTITUDE_INITIALIZED
with open(path.join(__here__,'assets','nbextension-inject.html')) as f:
script = f.read()
script = script.replace("<<<attitudeUI>>>",
get_library("attitude-ui.js"))
display_bundle = {
'text/html': script
}
display.display(display_bundle, raw=True)
__ATTITUDE_INITIALIZED = True
[docs]def plot_interactive(attitudes):
with open(path.join(__here__,'assets', 'nbextension-view.html')) as f:
script = f.read()
if not isinstance(attitudes, Sequence):
attitudes = [attitudes]
attitudes = [a.to_mapping()
if hasattr(a,'to_mapping') else a
for a in attitudes]
data = dumps(attitudes)
script = script.replace("<<<data>>>",data)
classname = "A"+str(uuid4())
script = script.replace("<<<hash>>>",classname)
display_bundle = {
'text/html': script
}
#with open(path.join(__here__,'view-filled.html'), 'w') as f:
# print(script,file=f)
display.display(display_bundle, raw=True)