diff --git a/pyecharts/charts/base.py b/pyecharts/charts/base.py index a84fd415..2a96c065 100644 --- a/pyecharts/charts/base.py +++ b/pyecharts/charts/base.py @@ -63,6 +63,7 @@ class Base(ChartMixin): self._geo_json_name: Optional[str] = None self._geo_json: Optional[dict] = None + self.render_options.update(embed_js=bool(_render_opts.get("embed_js"))) self._render_cache: dict = dict() def get_chart_id(self) -> str: @@ -86,24 +87,18 @@ class Base(ChartMixin): path: str = "render.html", template_name: str = "simple_chart.html", env: Optional[Environment] = None, - inner: bool = False, **kwargs, ) -> str: self._prepare_render() - if inner: - kwargs = {'_inner': inner, '_javascript': self.load_javascript().load_javascript_contents(), **kwargs} return engine.render(self, path, template_name, env, **kwargs) def render_embed( self, template_name: str = "simple_chart.html", env: Optional[Environment] = None, - inner: bool = False, **kwargs, ) -> str: self._prepare_render() - if inner: - kwargs = {'_inner': inner, '_javascript': self.load_javascript().load_javascript_contents(), **kwargs} return engine.render_embed(self, template_name, env, **kwargs) def render_notebook(self): @@ -121,6 +116,12 @@ class Base(ChartMixin): self.json_contents = self.dump_options() self._use_theme() + self._render_cache.clear() + if self.render_options.get('embed_js'): + self._render_cache['javascript'] = ( + self.load_javascript().load_javascript_contents() + ) + def default(o): if isinstance(o, (datetime.date, datetime.datetime)): diff --git a/pyecharts/options/global_options.py b/pyecharts/options/global_options.py index e7f19f83..9a165325 100644 --- a/pyecharts/options/global_options.py +++ b/pyecharts/options/global_options.py @@ -182,7 +182,7 @@ class InitOpts(BasicOpts): class RenderOpts(BasicOpts): - def __init__(self, embed_js: bool = True): + def __init__(self, embed_js: bool = False): self.opts: dict = { "embed_js": embed_js, } diff --git a/pyecharts/render/templates/macro b/pyecharts/render/templates/macro index e66685c1..e2ae45c8 100644 --- a/pyecharts/render/templates/macro +++ b/pyecharts/render/templates/macro @@ -80,18 +80,19 @@ {%- endmacro %} -{%- macro render_chart_dependencies(c, i, js) -%} - {% if i %} +{%- macro render_chart_dependencies(c) -%} + {% if 'embed_js' in c.render_options and 'javascript' in c._render_cache and c.render_options.embed_js -%} + {% set _javascript = c._render_cache.javascript %} {% for dep in c.dependencies %} {% endfor %} - {% else %} + {%- else -%} {% for dep in c.dependencies %} {% endfor %} - {% endif %} + {%- endif %} {%- endmacro %} {%- macro render_chart_css(c) -%} diff --git a/pyecharts/render/templates/simple_chart.html b/pyecharts/render/templates/simple_chart.html index a84a2f5f..75585090 100644 --- a/pyecharts/render/templates/simple_chart.html +++ b/pyecharts/render/templates/simple_chart.html @@ -4,7 +4,7 @@ {{ chart.page_title }} - {{ macro.render_chart_dependencies(chart, _inner, _javascript) }} + {{ macro.render_chart_dependencies(chart) }} {{ macro.render_chart_content(chart) }} diff --git a/pyecharts/render/templates/simple_globe.html b/pyecharts/render/templates/simple_globe.html index 0920aa8b..ad37793b 100644 --- a/pyecharts/render/templates/simple_globe.html +++ b/pyecharts/render/templates/simple_globe.html @@ -4,7 +4,7 @@ {{ chart.page_title }} - {{ macro.render_chart_dependencies(chart, _inner, _javascript) }} + {{ macro.render_chart_dependencies(chart) }}
diff --git a/pyecharts/render/templates/simple_page.html b/pyecharts/render/templates/simple_page.html index 0f48f30a..84a3e03b 100644 --- a/pyecharts/render/templates/simple_page.html +++ b/pyecharts/render/templates/simple_page.html @@ -4,7 +4,7 @@ {{ chart.page_title }} - {{ macro.render_chart_dependencies(chart, _inner, _javascript) }} + {{ macro.render_chart_dependencies(chart) }} {{ macro.render_chart_css(chart) }} diff --git a/pyecharts/render/templates/simple_tab.html b/pyecharts/render/templates/simple_tab.html index f5808a7e..2eb69112 100644 --- a/pyecharts/render/templates/simple_tab.html +++ b/pyecharts/render/templates/simple_tab.html @@ -4,7 +4,7 @@ {{ chart.page_title }} - {{ macro.render_chart_dependencies(chart, _inner, _javascript) }} + {{ macro.render_chart_dependencies(chart) }} {{ macro.render_chart_css(chart) }} diff --git a/test/test_base.py b/test/test_base.py index 654a4411..73e5822c 100644 --- a/test/test_base.py +++ b/test/test_base.py @@ -1,7 +1,7 @@ from datetime import datetime from unittest.mock import patch -from nose.tools import assert_equal, assert_not_in +from nose.tools import assert_equal, assert_in, assert_not_in from pyecharts.charts import Bar from pyecharts.commons import utils @@ -50,6 +50,18 @@ def test_render_js_host_none(fake_writer): assert_equal(bar.js_host, CurrentConfig.ONLINE_HOST) +@patch("pyecharts.render.engine.write_utf8_html_file") +def test_render_embed_js(_): + c = Base(render_opts=RenderOpts(embed_js=True)) + # Embedded JavaScript + content = c.render_embed() + assert_not_in(CurrentConfig.ONLINE_HOST, content, 'Embedding JavaScript fails') + # No embedded JavaScript + c.render_options.update(embed_js=False) + content = c.render_embed() + assert_in(CurrentConfig.ONLINE_HOST, content, 'Embedded JavaScript cannot be closed') + + def test_base_render_options(): c0 = Base(render_opts=RenderOpts(embed_js=True)) assert_equal(c0.render_options.get('embed_js'), True)