26
26
<div class="pyodide-editor-bar">
27
27
<span class="pyodide-bar-item">Editor (session: %(session)s)</span><span id="%(id_prefix)srun" title="Run: press Ctrl-Enter" class="pyodide-bar-item pyodide-clickable"><span class="twemoji">%(play_emoji)s</span> Run</span>
28
28
</div>
29
- <div><pre id="%(id_prefix)seditor" class="pyodide-editor">%(initial_code)s</pre></div>
29
+ <div><pre id="%(id_prefix)seditor" class="pyodide-editor" %(lines_attr)s style="%(lines_style)s" >%(initial_code)s</pre></div>
30
30
<div class="pyodide-editor-bar">
31
31
<span class="pyodide-bar-item">Output</span><span id="%(id_prefix)sclear" class="pyodide-bar-item pyodide-clickable"><span class="twemoji">%(clear_emoji)s</span> Clear</span>
32
32
</div>
@@ -54,6 +54,18 @@ def _format_pyodide(code: str, md: Markdown, session: str, extra: dict, **option
54
54
if "," not in theme :
55
55
theme = f"{ theme } ,{ theme } "
56
56
theme_light , theme_dark = theme .split ("," )
57
+
58
+ # Handle lines option
59
+ lines = extra .pop ("lines" , "" )
60
+ lines_attr = ""
61
+ lines_style = ""
62
+ if lines and lines .isdigit ():
63
+ line_count = int (lines )
64
+ # Calculate approximate height based on line count (assuming ~20px per line)
65
+ height = max (line_count * 20 , 200 ) # Minimum 200px as in CSS
66
+ lines_attr = f'data-lines="{ line_count } "'
67
+ lines_style = f'--pyodide-editor-height: { height } px;'
68
+
57
69
data = {
58
70
"id_prefix" : f"exec-{ _counter } --" ,
59
71
"initial_code" : code ,
@@ -63,6 +75,8 @@ def _format_pyodide(code: str, md: Markdown, session: str, extra: dict, **option
63
75
"session" : session or "default" ,
64
76
"play_emoji" : play_emoji ,
65
77
"clear_emoji" : clear_emoji ,
78
+ "lines_attr" : lines_attr ,
79
+ "lines_style" : lines_style ,
66
80
}
67
81
rendered = template % data
68
82
if exclude_assets :
0 commit comments