Skip to content

Commit

Permalink
Merge pull request #17 from Kitware/low-level-iframe-builders
Browse files Browse the repository at this point in the history
fix(jupyter): Iframe builders return a dict instead of a str
  • Loading branch information
alesgenova authored Nov 27, 2023
2 parents 3406942 + 083b046 commit cebaecd
Showing 1 changed file with 35 additions and 5 deletions.
40 changes: 35 additions & 5 deletions trame_client/ui/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,13 @@ def iframe_url_builder_default(layout):
template_name = layout._template_name
src = f"{base_url}:{server.port}/index.html?ui={template_name[16:]}&reconnect=auto"
elem_id = f"{server.name}_{template_name}"
return f'<iframe id="{elem_id}" src="{src}" style="{layout.iframe_style}"></iframe>'

return {
"id": elem_id,
"src": src,
"style": layout.iframe_style,
**layout.iframe_attrs,
}


def iframe_url_builder_serverproxy(layout):
Expand All @@ -33,7 +39,13 @@ def iframe_url_builder_serverproxy(layout):
template_name = layout._template_name
src = f"{base_url}/{server.port}/index.html?ui={template_name[16:]}&reconnect=auto"
elem_id = f"{server.name}_{template_name}"
return f'<iframe id="{elem_id}" src="{src}" style="{layout.iframe_style}"></iframe>'

return {
"id": elem_id,
"src": src,
"style": layout.iframe_style,
**layout.iframe_attrs,
}


def iframe_url_builder_jupyter_extension(layout):
Expand All @@ -57,15 +69,27 @@ def iframe_url_builder_jupyter_extension(layout):
dst_dir = server_www / sub_path
shutil.copytree(src_dir, dst_dir, dirs_exist_ok=True)

return f'<iframe id="{elem_id}" src="{src}" data-kernel-id="{get_kernel_id()}" style="{layout.iframe_style}"></iframe>'
return {
"id": elem_id,
"src": src,
"style": layout.iframe_style,
"data-kernel-id": get_kernel_id(),
**layout.iframe_attrs,
}


def iframe_url_builder_jupyter_hub(layout):
server = layout.server
template_name = layout._template_name
src = f"{os.environ['JUPYTERHUB_SERVICE_PREFIX']}/proxy/{server.port}/index.html?ui={template_name[16:]}&reconnect=auto"
elem_id = f"{server.name}_{template_name}"
return f'<iframe id="{elem_id}" src="{src}" style="{layout.iframe_style}"></iframe>'

return {
"id": elem_id,
"src": src,
"style": layout.iframe_style,
**layout.iframe_attrs,
}


def get_iframe_builder(name="default"):
Expand Down Expand Up @@ -115,6 +139,7 @@ def __init__(
self._template_name = f"trame__template_{template_name}"
self._server.state[self._template_name] = ""
self.iframe_style = f"border: none; width: {width}{css_unit(width)}; height: {height}{css_unit(height)};"
self.iframe_attrs = {}
self.iframe_base_url = base_url
self._iframe_builder = get_iframe_builder(iframe_builder)

Expand Down Expand Up @@ -213,7 +238,12 @@ def _jupyter_content(self):
<pre style="padding: 5px; border: solid 1px rgb(224,224,224); background: rgb(245,245,245);">await layout.ready</pre>
</div>"""

return self.iframe_builder(self)
attributes = self.iframe_builder(self)
attributes_str = " ".join(
f'{key}="{str(value)}"' for key, value in attributes.items()
)

return f"<iframe {attributes_str}></iframe>"

@property
def ipywidget(self):
Expand Down

0 comments on commit cebaecd

Please sign in to comment.