2929def setup (app ):
3030 app .add_directive ("clickablearea" , ClickableArea )
3131
32- app .add_node (ClickableAreaNode , html = (visit_ca_node , depart_ca_node ))
32+ app .add_node (ClickableAreaNode , html = (visit_ca_html , depart_ca_html ))
3333
3434 app .add_config_value ("clickable_div_class" , "runestone alert alert-warning" , "html" )
3535
@@ -46,60 +46,53 @@ def setup(app):
4646
4747
4848class ClickableAreaNode (nodes .General , nodes .Element , RunestoneIdNode ):
49- def __init__ (self , content , ** kwargs ):
50- """
51- Arguments:
52- - `self`:
53- - `content`:
54- """
55- super (ClickableAreaNode , self ).__init__ (** kwargs )
56- self .runestone_options = content
49+ pass
5750
5851
5952# self for these functions is an instance of the writer class. For example
6053# in html, self is sphinx.writers.html.SmartyPantsHTMLTranslator
6154# The node that is passed as a parameter is an instance of our node class.
62- def visit_ca_node (self , node ):
55+ def visit_ca_html (self , node ):
6356 res = TEMPLATE
6457
65- node . delimiter = "_start__{}_" .format (node . runestone_options ["divid" ])
66- self .body .append (node . delimiter )
58+ node [ " delimiter" ] = "_start__{}_" .format (node [ " runestone_options" ] ["divid" ])
59+ self .body .append (node [ " delimiter" ] )
6760
68- if "feedback" in node . runestone_options :
69- node . runestone_options ["feedback" ] = (
70- "<span data-feedback>" + node . runestone_options ["feedback" ] + "</span>"
61+ if "feedback" in node [ " runestone_options" ] :
62+ node [ " runestone_options" ] ["feedback" ] = (
63+ "<span data-feedback>" + node [ " runestone_options" ] ["feedback" ] + "</span>"
7164 )
7265 else :
73- node . runestone_options ["feedback" ] = ""
66+ node [ " runestone_options" ] ["feedback" ] = ""
7467
75- if "iscode" not in node . runestone_options :
76- node . runestone_options ["correct" ] = (
77- "data-cc=" + '"' + node . runestone_options ["correct" ] + '"'
68+ if "iscode" not in node [ " runestone_options" ] :
69+ node [ " runestone_options" ] ["correct" ] = (
70+ "data-cc=" + '"' + node [ " runestone_options" ] ["correct" ] + '"'
7871 )
79- node . runestone_options ["incorrect" ] = (
80- "data-ci=" + '"' + node . runestone_options ["incorrect" ] + '"'
72+ node [ " runestone_options" ] ["incorrect" ] = (
73+ "data-ci=" + '"' + node [ " runestone_options" ] ["incorrect" ] + '"'
8174 )
8275 else :
83- node . runestone_options ["correct" ] = ""
84- node . runestone_options ["incorrect" ] = ""
76+ node [ " runestone_options" ] ["correct" ] = ""
77+ node [ " runestone_options" ] ["incorrect" ] = ""
8578
86- res = res % node . runestone_options
79+ res = res % node [ " runestone_options" ]
8780
8881 self .body .append (res )
8982
9083
91- def depart_ca_node (self , node ):
84+ def depart_ca_html (self , node ):
9285 res = ""
93- res = TEMPLATE_END % node . runestone_options
86+ res = TEMPLATE_END % node [ " runestone_options" ]
9487 self .body .append (res )
9588
9689 addHTMLToDB (
97- node . runestone_options ["divid" ],
98- node . runestone_options ["basecourse" ],
99- "" .join (self .body [self .body .index (node . delimiter ) + 1 :]),
90+ node [ " runestone_options" ] ["divid" ],
91+ node [ " runestone_options" ] ["basecourse" ],
92+ "" .join (self .body [self .body .index (node [ " delimiter" ] ) + 1 :]),
10093 )
10194
102- self .body .remove (node . delimiter )
95+ self .body .remove (node [ " delimiter" ] )
10396
10497
10598class ClickableArea (RunestoneIdDirective ):
@@ -166,11 +159,12 @@ def run(self):
166159 self .options ["clickcode" ] = source
167160 else :
168161 self .options ["clickcode" ] = ""
169- clickNode = ClickableAreaNode (self .options , rawsource = self .block_text )
170- clickNode .source , clickNode .line = self .state_machine .get_source_and_line (
162+ clickNode = ClickableAreaNode ()
163+ clickNode ["runestone_options" ] = self .options
164+ clickNode ["source" ], clickNode ["line" ] = self .state_machine .get_source_and_line (
171165 self .lineno
172166 )
173- clickNode . template_start = TEMPLATE
167+ clickNode [ " template_start" ] = TEMPLATE
174168
175169 if "table" in self .options :
176170 self .options ["table" ] = "data-table"
0 commit comments