|
|
|
|
|
|
|
|
class CSSHtmlHeaderTransformer(ActivatableTransformer):
|
|
|
|
|
|
def __call__(self, nb, resources):
|
|
|
"""Fetch and add css to the resource dict
|
|
|
|
|
|
Fetch css from IPython adn Pygment to add at the beginning
|
|
|
of the html files.
|
|
|
|
|
|
Add this css in resources in the "inlining.css" key
|
|
|
"""
|
|
|
resources['inlining'] = {}
|
|
|
resources['inlining']['css'] = self.header
|
|
|
return nb, resources
|
|
|
|
|
|
header = []
|
|
|
|
|
|
def __init__(self, config=None, **kw):
|
|
|
super(CSSHtmlHeaderTransformer, self).__init__(config=config, **kw)
|
|
|
if self.enabled :
|
|
|
self.regen_header()
|
|
|
|
|
|
def regen_header(self):
|
|
|
## lazy load asa this might not be use in many transformers
|
|
|
import os
|
|
|
from IPython.utils import path
|
|
|
import io
|
|
|
from pygments.formatters import HtmlFormatter
|
|
|
header = []
|
|
|
static = os.path.join(path.get_ipython_package_dir(),
|
|
|
'frontend', 'html', 'notebook', 'static',
|
|
|
)
|
|
|
here = os.path.split(os.path.realpath(__file__))[0]
|
|
|
css = os.path.join(static, 'css')
|
|
|
for sheet in [
|
|
|
# do we need jquery and prettify?
|
|
|
# os.path.join(static, 'jquery', 'css', 'themes', 'base',
|
|
|
# 'jquery-ui.min.css'),
|
|
|
# os.path.join(static, 'prettify', 'prettify.css'),
|
|
|
os.path.join(css, 'boilerplate.css'),
|
|
|
os.path.join(css, 'fbm.css'),
|
|
|
os.path.join(css, 'notebook.css'),
|
|
|
os.path.join(css, 'renderedhtml.css'),
|
|
|
os.path.join(css, 'style.min.css'),
|
|
|
]:
|
|
|
try:
|
|
|
with io.open(sheet, encoding='utf-8') as f:
|
|
|
s = f.read()
|
|
|
header.append(s)
|
|
|
except IOError:
|
|
|
# new version of ipython with style.min.css, pass
|
|
|
pass
|
|
|
|
|
|
pygments_css = HtmlFormatter().get_style_defs('.highlight')
|
|
|
header.append(pygments_css)
|
|
|
self.header = header
|
|
|
|
|
|
|