python-package/lets_plot/frontend_context/_static_html_page_ctx.py (42 lines of code) (raw):
#
# Copyright (c) 2019. JetBrains s.r.o.
# Use of this source code is governed by the MIT license that can be found in the LICENSE file.
#
from typing import Dict
from ._frontend_ctx import FrontendContext
from .. import _kbridge as kbr
# noinspection PyPackageRequirements
class StaticHtmlPageContext(FrontendContext):
def __init__(self, offline: bool, *,
width_mode: str = 'min',
height_mode: str = 'scaled',
width: float = None,
height: float = None,
responsive: bool = False,
force_immediate_render: bool = False,
height100pct: bool = False,
) -> None:
super().__init__()
self.connected = not offline
self.width_mode = width_mode
self.height_mode = height_mode
self.width = width
self.height = height
self.responsive = responsive
self.force_immediate_render = force_immediate_render
self.height100pct = height100pct
def configure(self, verbose: bool):
# Nothing here because the complete HTML page is created per each cell output.
if not self.connected:
print("WARN: Embedding Lets-Plot JS library for offline usage is not supported.")
def as_str(self, plot_spec: Dict) -> str:
# Old implementation (uses static HTML page generator):
# return kbr._generate_static_html_page(plot_spec, iframe=False)
# Build sizing_options
# Default to notebookCell sizing (MIN width, SCALED height) if not specified
# if self.width_mode is not None and self.height_mode is not None:
# # Use dev options
# sizing_options = {
# 'width_mode': self.width_mode,
# 'height_mode': self.height_mode
# }
# else:
# # Default to notebookCell sizing
# sizing_options = {
# 'width_mode': 'min',
# 'height_mode': 'scaled'
# }
sizing_options = {
'width_mode': self.width_mode,
'height_mode': self.height_mode
}
# Add width and height if specified
if self.width is not None:
sizing_options['width'] = self.width
if self.height is not None:
sizing_options['height'] = self.height
return kbr._generate_static_html_page_for_raw_spec(
plot_spec,
sizing_options,
dynamic_script_loading=False, # False for static HTML pages
force_immediate_render=self.force_immediate_render,
responsive=self.responsive,
height100pct=self.height100pct
)