File tree Expand file tree Collapse file tree 4 files changed +34
-4
lines changed Expand file tree Collapse file tree 4 files changed +34
-4
lines changed 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