mirror of
https://github.com/pyecharts/pyecharts.git
synced 2025-12-08 20:59:23 +00:00
optimize embedded javascript rendering.
This commit is contained in:
parent
0078c6ec3b
commit
9c79761091
@ -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)):
|
||||
|
||||
@ -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,
|
||||
}
|
||||
|
||||
@ -80,18 +80,19 @@
|
||||
</script>
|
||||
{%- 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 %}
|
||||
<script type="text/javascript">
|
||||
{{ js.javascript_contents[dep] }}
|
||||
{{ _javascript.javascript_contents[dep] }}
|
||||
</script>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{%- else -%}
|
||||
{% for dep in c.dependencies %}
|
||||
<script type="text/javascript" src="{{ dep }}"></script>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{%- endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro render_chart_css(c) -%}
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{ chart.page_title }}</title>
|
||||
{{ macro.render_chart_dependencies(chart, _inner, _javascript) }}
|
||||
{{ macro.render_chart_dependencies(chart) }}
|
||||
</head>
|
||||
<body {% if chart.fill_bg %}style="background-color: {{ chart.bg_color }}"{% endif %}>
|
||||
{{ macro.render_chart_content(chart) }}
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{ chart.page_title }}</title>
|
||||
{{ macro.render_chart_dependencies(chart, _inner, _javascript) }}
|
||||
{{ macro.render_chart_dependencies(chart) }}
|
||||
</head>
|
||||
<body>
|
||||
<div id="{{ chart.chart_id }}" style="width:{{ chart.width }}; height:{{ chart.height }};"></div>
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{ chart.page_title }}</title>
|
||||
{{ macro.render_chart_dependencies(chart, _inner, _javascript) }}
|
||||
{{ macro.render_chart_dependencies(chart) }}
|
||||
{{ macro.render_chart_css(chart) }}
|
||||
</head>
|
||||
<body {% if chart.page_border_color != '' %}style="background-color: {{ chart.page_border_color }}"{% endif %}>
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{ chart.page_title }}</title>
|
||||
{{ macro.render_chart_dependencies(chart, _inner, _javascript) }}
|
||||
{{ macro.render_chart_dependencies(chart) }}
|
||||
{{ macro.render_chart_css(chart) }}
|
||||
</head>
|
||||
<body {% if chart.bg_color != '' %}style="background-color: {{ chart.bg_color }}"{% endif %}>
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user