|
import os |
|
from traitlets import ( |
|
HasTraits, Dict, Unicode, List, Bool, |
|
observe, default |
|
) |
|
from jupyter_core.paths import jupyter_path |
|
from jupyter_server.transutils import _i18n |
|
from jupyter_server.utils import url_path_join |
|
|
|
|
|
class NotebookAppTraits(HasTraits): |
|
|
|
ignore_minified_js = Bool(False, |
|
config=True, |
|
help=_i18n( |
|
'Deprecated: Use minified JS file or not, mainly use during dev to avoid JS recompilation'), |
|
) |
|
|
|
jinja_environment_options = Dict(config=True, |
|
help=_i18n("Supply extra arguments that will be passed to Jinja environment.")) |
|
|
|
jinja_template_vars = Dict( |
|
config=True, |
|
help=_i18n( |
|
"Extra variables to supply to jinja templates when rendering."), |
|
) |
|
|
|
enable_mathjax = Bool(True, config=True, |
|
help="""Whether to enable MathJax for typesetting math/TeX |
|
|
|
MathJax is the javascript library Jupyter uses to render math/LaTeX. It is |
|
very large, so you may want to disable it if you have a slow internet |
|
connection, or for offline use of the notebook. |
|
|
|
When disabled, equations etc. will appear as their untransformed TeX source. |
|
""" |
|
) |
|
|
|
@observe('enable_mathjax') |
|
def _update_enable_mathjax(self, change): |
|
"""set mathjax url to empty if mathjax is disabled""" |
|
if not change['new']: |
|
self.mathjax_url = u'' |
|
|
|
extra_static_paths = List(Unicode(), config=True, |
|
help="""Extra paths to search for serving static files. |
|
|
|
This allows adding javascript/css to be available from the notebook server machine, |
|
or overriding individual files in the IPython""" |
|
) |
|
|
|
@property |
|
def static_file_path(self): |
|
"""return extra paths + the default location""" |
|
return self.extra_static_paths |
|
|
|
static_custom_path = List(Unicode(), |
|
help=_i18n( |
|
"""Path to search for custom.js, css""") |
|
) |
|
|
|
@default('static_custom_path') |
|
def _default_static_custom_path(self): |
|
return [ |
|
os.path.join(self.config_dir, 'custom') |
|
] |
|
|
|
extra_template_paths = List(Unicode(), config=True, |
|
help=_i18n("""Extra paths to search for serving jinja templates. |
|
|
|
Can be used to override templates from notebook.templates.""") |
|
) |
|
|
|
@property |
|
def template_file_path(self): |
|
"""return extra paths + the default locations""" |
|
return self.extra_template_paths |
|
|
|
extra_nbextensions_path = List(Unicode(), config=True, |
|
help=_i18n( |
|
"""extra paths to look for Javascript notebook extensions""") |
|
) |
|
|
|
@property |
|
def nbextensions_path(self): |
|
"""The path to look for Javascript notebook extensions""" |
|
path = self.extra_nbextensions_path + jupyter_path('nbextensions') |
|
|
|
try: |
|
from IPython.paths import get_ipython_dir |
|
except ImportError: |
|
pass |
|
else: |
|
path.append(os.path.join(get_ipython_dir(), 'nbextensions')) |
|
return path |
|
|
|
mathjax_url = Unicode("", config=True, |
|
help="""A custom url for MathJax.js. |
|
Should be in the form of a case-sensitive url to MathJax, |
|
for example: /static/components/MathJax/MathJax.js |
|
""" |
|
) |
|
|
|
@property |
|
def static_url_prefix(self): |
|
"""Get the static url prefix for serving static files.""" |
|
return super(NotebookAppTraits, self).static_url_prefix |
|
|
|
@default('mathjax_url') |
|
def _default_mathjax_url(self): |
|
if not self.enable_mathjax: |
|
return u'' |
|
static_url_prefix = self.static_url_prefix |
|
return url_path_join(static_url_prefix, 'components', 'MathJax', 'MathJax.js') |
|
|
|
@observe('mathjax_url') |
|
def _update_mathjax_url(self, change): |
|
new = change['new'] |
|
if new and not self.enable_mathjax: |
|
|
|
self.mathjax_url = u'' |
|
else: |
|
self.log.info(_i18n("Using MathJax: %s"), new) |
|
|
|
mathjax_config = Unicode("TeX-AMS-MML_HTMLorMML-full,Safe", config=True, |
|
help=_i18n( |
|
"""The MathJax.js configuration file that is to be used.""") |
|
) |
|
|
|
@observe('mathjax_config') |
|
def _update_mathjax_config(self, change): |
|
self.log.info( |
|
_i18n("Using MathJax configuration file: %s"), change['new']) |
|
|
|
quit_button = Bool(True, config=True, |
|
help="""If True, display a button in the dashboard to quit |
|
(shutdown the notebook server).""" |
|
) |
|
|
|
nbserver_extensions = Dict({}, config=True, |
|
help=(_i18n("Dict of Python modules to load as notebook server extensions." |
|
"Entry values can be used to enable and disable the loading of" |
|
"the extensions. The extensions will be loaded in alphabetical " |
|
"order.")) |
|
) |
|
|