Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2@file
3@brief Installs and loads an extension.
4"""
5import os
6from notebook.nbextensions import install_nbextension
7from IPython.display import HTML
10def install_extension(ext, overwrite=False):
11 """
12 Installs an extension.
14 @param ext extension name
15 @param overwrite overwrite
16 @return installation path
17 """
18 this = os.path.dirname(__file__)
19 path = os.path.join(this, ext)
20 if not os.path.exists(path):
21 raise FileNotFoundError(
22 "Unable to find extension '{0}' in '{1}'".format(ext, this))
23 dest = install_nbextension(
24 path, user=True, destination=ext, overwrite=overwrite)
25 return dest
28def load_extension(ext, kind='html', overwrite=False):
29 """
30 Loads an extension.
32 @param ext extension name
33 @param overwrite overwrite
34 @param kind ``'html'`` or ``'str'``
35 @return HTML object
36 """
37 dest = install_extension(ext, overwrite=overwrite)
38 files = os.listdir(dest)
39 css = [_ for _ in files if _.endswith('.css')]
40 js = [_ for _ in files if _.endswith('.js')]
41 code = """<script>
42 var load_jyq_css___EXT__ = function(cssfile) {
43 var link = document.createElement("link");
44 link.type = "text/css";
45 link.rel = "stylesheet";
46 link.href = require.toUrl(cssfile);
47 document.getElementsByTagName("head")[0].appendChild(link);
48 };
49 __CSS__
50 require([__REQ__]);\n
51 </script>
52 <p>Loads extension '__EXT__'.</p>""".replace(" ", "")
53 code = code.replace('__EXT__', ext)
54 code = code.replace('__REQ__', ',\n'.join(
55 "'{0}/{1}'".format(ext, _) for _ in js))
56 code = code.replace('__CSS__', ';\n'.join(
57 "load_jyq_css_{0}('{0}/{1}')".format(ext, _) for _ in css) + ';')
58 if kind == "html":
59 return HTML(code)
60 else:
61 return code