Hide keyboard shortcuts

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 

8 

9 

10def install_extension(ext, overwrite=False): 

11 """ 

12 Installs an extension. 

13 

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 

26 

27 

28def load_extension(ext, kind='html', overwrite=False): 

29 """ 

30 Loads an extension. 

31 

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