Browse Source

Rework css / js uri mechanism

pull/242/head
Florian Mounier 10 years ago
parent
commit
ce4b1cfe60
  1. 11
      docs/documentation/configuration/rendering.rst
  2. 8
      pygal/config.py
  3. 77
      pygal/svg.py

11
docs/documentation/configuration/rendering.rst

@ -122,7 +122,14 @@ Default:
.. code-block:: python
css = ['style.css', 'graph.css']
css = ['file://style.css', 'file://graph.css']
Css can also specified inline by prepending `inline:` to the css:
.. code-block:: python
css = ['inline:.rect { fill: blue; }']
js
--
@ -130,7 +137,7 @@ js
.. code-block:: python
js = [
'http://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js'
'//kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js'
]
See `pygal.js <https://github.com/Kozea/pygal.js/>`_

8
pygal/config.py

@ -226,9 +226,9 @@ class Config(CommonConfig):
DefaultStyle, Style, "Style", "Style holding values injected in css")
css = Key(
('style.css', 'graph.css'), list, "Style",
('file://style.css', 'file://graph.css'), list, "Style",
"List of css file",
"It can be an absolute file path or an external link",
"It can be any uri from file:///tmp/style.css to //domain/style.css",
str)
# Look #
@ -475,9 +475,9 @@ class Config(CommonConfig):
# Misc #
js = Key(
('http://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js',),
('//kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js',),
list, "Misc", "List of js file",
"It can be a filepath or an external link",
"It can be any uri from file:///tmp/ext.js to //domain/ext.js",
str)
disable_xml_declaration = Key(

77
pygal/svg.py

@ -85,42 +85,44 @@ class Svg(object):
colors = self.graph.style.get_colors(self.id, self.graph._order)
strokes = self.get_strokes()
all_css = []
for css in ['base.css'] + list(self.graph.css):
if '://' in css:
self.processing_instructions.append(
etree.PI(
u('xml-stylesheet'), u('href="%s"' % css)))
else:
if css.startswith('inline:'):
css_text = css[len('inline:'):]
else:
if not os.path.exists(css):
css = os.path.join(
os.path.dirname(__file__), 'css', css)
class FontSizes(object):
"""Container for font sizes"""
fs = FontSizes()
for name in dir(self.graph.state):
if name.endswith('_font_size'):
setattr(
fs,
name.replace('_font_size', ''),
('%dpx' % getattr(self.graph, name)))
with io.open(css, encoding='utf-8') as f:
css_text = template(
f.read(),
style=self.graph.style,
colors=colors,
strokes=strokes,
font_sizes=fs,
id=self.id)
for css in ['file://base.css'] + list(self.graph.css):
css_text = None
if css.startswith('inline:'):
css_text = css[len('inline:'):]
elif css.startswith('file://'):
if not os.path.exists(css):
css = os.path.join(
os.path.dirname(__file__), 'css', css[len('file://'):])
class FontSizes(object):
"""Container for font sizes"""
fs = FontSizes()
for name in dir(self.graph.state):
if name.endswith('_font_size'):
setattr(
fs,
name.replace('_font_size', ''),
('%dpx' % getattr(self.graph, name)))
with io.open(css, encoding='utf-8') as f:
css_text = template(
f.read(),
style=self.graph.style,
colors=colors,
strokes=strokes,
font_sizes=fs,
id=self.id)
if css_text is not None:
if not self.graph.pretty_print:
css_text = minify_css(css_text)
all_css.append(css_text)
else:
self.processing_instructions.append(
etree.PI(
u('xml-stylesheet'), u('href="%s"' % css)))
self.node(
self.defs, 'style', type='text/css').text = '\n'.join(all_css)
@ -147,13 +149,12 @@ class Svg(object):
get_js_dict(), default=json_default)))
for js in self.graph.js:
if '://' in js:
self.node(
self.defs, 'script', type='text/javascript', href=js)
else:
if js.startswith('file://'):
script = self.node(self.defs, 'script', type='text/javascript')
with io.open(js, encoding='utf-8') as f:
with io.open(js[len('file://'):], encoding='utf-8') as f:
script.text = f.read()
else:
self.node(self.defs, 'script', type='text/javascript', href=js)
def node(self, parent=None, tag='g', attrib=None, **extras):
"""Make a new svg node"""

Loading…
Cancel
Save