import inspect
import json
import os
import string
import numpy as np
import pandas as pd
from IPython.core.display import Javascript, clear_output, display
from IPython.core.magic import register_cell_magic, register_line_magic
def init():
with open(os.path.join(os.path.dirname(__file__), "setup.js"), "r") as fp:
execute_js(fp.read())
class CustomJSONEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, np.ndarray):
return o.tolist()
if isinstance(o, pd.DataFrame):
return o.to_json(orient="records")
return json.JSONEncoder.default(self, o)
def execute_js(code):
"""Execute JavaScript code in a Notebook environment"""
display(Javascript(code))
def calling_scope_variable(name):
frame = inspect.stack()[1][0]
while name not in frame.f_locals:
frame = frame.f_back
if frame is None:
return None
return frame.f_locals[name]
@register_cell_magic
def jsx(line, cell):
code_template = """
if (!window.REACT_JUPYTER_SETUP_LOADED) {
element[0].innerHTML = "Make sure to run <code>react_jupyter.init()</code> before this cell.";
} else {
Promise.all(["babel-standalone@6", "react", "react-dom"].map(x => d3require(x))).then(([Babel, React, ReactDOM]) => {
const cell = new Cell(element[0]);
const render = cell.render.bind(cell);
const cleanupManager = cell.cleanupManager.childScope();
const onCleanup = cleanupManager.register.bind(cleanupManager);
const require = d3require;
const dependHandle = registry.listen($dependency_list, ({ $dependency_dict }) => {
cleanupManager.cleanup(); // Clean up from the previous iteration
try {
const babelOutput = Babel.transform($quoted_script, {presets: ['es2017', 'react', 'stage-0', 'stage-1', 'stage-2']})
eval(babelOutput.code);
} catch (e) {
cell.renderError(e.message);
}
});
cell.cleanupManager.register(dependHandle);
})
}
"""
dependency_list = []
for dep in line.split(" "):
if len(dep) > 0:
dependency_list.append(dep)
execute_js(
string.Template(code_template).substitute(
quoted_script=json.dumps("(async () => {\n" + cell + "})()\n"),
dependency_list=json.dumps(dependency_list),
dependency_dict=", ".join(dependency_list),
)
)
@register_line_magic
def publish(line):
variables = line.split(" ")
pairs = [[v, calling_scope_variable(v)] for v in variables]
execute_js("registry.publishMany(" + json.dumps(pairs, cls=CustomJSONEncoder) + ");")
PyPI 官网下载 | react-in-jupyter-0.4.tar.gz
版权申诉
114 浏览量
2022-01-15
19:05:09
上传
评论
收藏 4KB GZ 举报
挣扎的蓝藻
- 粉丝: 13w+
- 资源: 15万+
最新资源
- Libraries-Comm-Controller
- 豆瓣电影爬虫 爬取top电影的评论 + 每个用户的看过的电影的评论 用于推荐系统的 协同过滤+源代码+文档说明
- 交互设计课程竞品分析内容案例设计
- c07c4b30caf2ab290c3f2eea8339b34b.mp4
- emqx服务器搭建文件
- Libraries-Comm-Controller-DOC-V2-0-1-en.pdf
- update9-20240601.5.205.slice.img.7z.003
- 9f9ae03ea06c5c991afa26c5813d8831.amr
- 计算机等级考试Python二级真题.zip
- 爱普生L301清零程序
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈