WeChatMsg/resource/render/display.py
2023-05-22 11:32:12 +08:00

63 lines
1.4 KiB
Python

from ..types import Optional, Sequence, Union
class HTML:
def __init__(self, data: Optional[str] = None):
self.data = data
def _repr_html_(self):
return self.data
def __html__(self):
return self._repr_html_()
_lib_t1 = """new Promise(function(resolve, reject) {
var script = document.createElement("script");
script.onload = resolve;
script.onerror = reject;
script.src = "%s";
document.head.appendChild(script);
}).then(() => {
"""
_lib_t2 = """
});"""
_css_t = """var link = document.createElement("link");
link.ref = "stylesheet";
link.type = "text/css";
link.href = "%s";
document.head.appendChild(link);
"""
class Javascript:
def __init__(
self,
data: Optional[str] = None,
lib: Optional[Union[str, Sequence]] = None,
css: Optional[Union[str, Sequence]] = None,
):
if isinstance(lib, str):
lib = [lib]
elif lib is None:
lib = []
if isinstance(css, str):
css = [css]
elif css is None:
css = []
self.lib = lib
self.css = css
self.data = data or ""
def _repr_javascript_(self):
r = ""
for c in self.css:
r += _css_t % c
for d in self.lib:
r += _lib_t1 % d
r += self.data
r += _lib_t2 * len(self.lib)
return r