File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11from collections import OrderedDict
22import datetime
33
4+ import cssutils
45import dateutil .tz
56import jinja2
67
@@ -71,7 +72,28 @@ def latex(self):
7172
7273 @reify
7374 def css (self ):
74- return self .info .get ('css' )
75+ """ Returns lesson-specific extra CSS.
76+
77+ If the lesson defines extra css, the scope of the styles is limited to ``.lesson-content``,
78+ a div which contains the actual lesson content.
79+
80+ This doesn't protect against malicious input.
81+ """
82+ css = self .info .get ("css" )
83+
84+ if css is None :
85+ return None
86+
87+ parser = cssutils .CSSParser (raiseExceptions = True )
88+ parsed = parser .parseString (css )
89+
90+ for rule in parsed .cssRules :
91+ for selector in rule .selectorList :
92+ # the space is important - there's a difference between for example
93+ # ``.lesson-content:hover`` and ``.lesson-content :hover``
94+ selector .selectorText = ".lesson-content " + selector .selectorText
95+
96+ return parsed .cssText .decode ("utf-8" )
7597
7698 @reify
7799 def edit_path (self ):
Original file line number Diff line number Diff line change @@ -91,6 +91,11 @@ a:hover {
9191 text-decoration : none;
9292}
9393
94+ .lesson-content {
95+ /* So elements inside with `position: absolute` are positioned absolutely just inside this div. */
96+ position : relative;
97+ }
98+
9499
95100.lesson-header {
96101 line-height : 1.5rem ;
Original file line number Diff line number Diff line change 2929 </ header >
3030 {% endif %}
3131
32- {% block lesson_content %}
33- {{ content }}
34- {% endblock %}
32+ < div class ="lesson-content ">
33+ {% block lesson_content %}
34+ {{ content }}
35+ {% endblock %}
36+ </ div >
3537
3638 {% if (prv is defined and prv != None) or (nxt is defined and nxt != None) %}
3739 < hr class ="lesson-end ">
Original file line number Diff line number Diff line change @@ -13,3 +13,4 @@ pygments
1313python-dateutil
1414traitlets
1515werkzeug
16+ cssutils
You can’t perform that action at this time.
0 commit comments