@@ -45,18 +45,22 @@ export const Cell: React.FC<CellProps> = ({ cell, seq }) => {
4545 background : "transparent" ,
4646 } ;
4747 }
48+ if ( ! cell . outputs ?. length ) {
49+ return null ;
50+ }
51+
4852 return (
4953 < div className = "cell border-box-sizing code_cell rendered" >
5054 < div className = "input" >
5155 < div className = "prompt input_prompt" >
5256 { cell . cell_type === "code" ? (
53- < >
57+ < span >
5458 In [
5559 { seqAsExecutionCount
5660 ? seq
5761 : cell . execution_count || cell . prompt_number || " " }
5862 ]:
59- </ >
63+ </ span >
6064 ) : null }
6165 </ div >
6266 < div className = "inner_cell" >
@@ -78,7 +82,16 @@ export const Cell: React.FC<CellProps> = ({ cell, seq }) => {
7882 if ( cell . cell_type === "code" ) {
7983 return (
8084 < div className = "input_area" >
81- < div className = "highlight hl-ipython3" >
85+ < div
86+ className = "highlight hl-ipython3"
87+ onDoubleClick = { ( e ) => {
88+ const selection = window . getSelection ( ) ;
89+ const range = document . createRange ( ) ;
90+ range . selectNodeContents ( e . currentTarget ) ;
91+ selection ?. removeAllRanges ( ) ;
92+ selection ?. addRange ( range ) ;
93+ } }
94+ >
8295 { source && (
8396 < Prism
8497 language = { language }
@@ -100,147 +113,146 @@ export const Cell: React.FC<CellProps> = ({ cell, seq }) => {
100113 } ) ( ) }
101114 </ div >
102115 </ div >
103- { ! cell . outputs ?. length ? null : (
104- < div className = "output_wrapper" >
105- < div className = "output" >
106- { ( cell . outputs || [ ] ) . map ( ( output , j ) => (
107- < div className = "output_area" key = { j } >
108- < div className = "prompt output_prompt" >
109- { output . execution_count && (
110- < > Out [{ output . execution_count } ]:</ >
111- ) }
112- </ div >
113- { ( ( ) => {
114- if ( output . data == null ) {
115- if ( output . png ) {
116- return (
117- < div className = "output_png output_subarea" >
118- < img
119- src = { `data:image/png;base64,${ output . png } ` }
120- alt = "output png"
121- />
122- </ div >
123- ) ;
124- }
125- if ( output . jpeg ) {
126- return (
127- < div className = "output_jpeg output_subarea" >
128- < img
129- src = { `data:image/jpeg;base64,${ output . jpeg } ` }
130- alt = "output jpeg"
131- />
132- </ div >
133- ) ;
134- }
135- if ( output . gif ) {
136- return (
137- < div className = "output_gif output_subarea" >
138- < img
139- src = { `data:image/gif;base64,${ output . gif } ` }
140- alt = "output gif"
141- />
142- </ div >
143- ) ;
144- }
145- if ( output . svg ) {
146- return (
147- < div
148- className = "output_svg output_subarea"
149- dangerouslySetInnerHTML = { {
150- __html : htmlFilter ( output . svg ) ,
151- } }
152- > </ div >
153- ) ;
154- }
155- if ( output . text ) {
156- return (
157- < div
158- className = { `output_subarea output_text output_${ output . output_type } output_${ output . name } output-${ output . name } ` }
159- >
160- < pre > { stringify ( output . text ) } </ pre >
161- </ div >
162- ) ;
163- }
164- if ( output . traceback ) {
165- return < div className = "output_subarea output_error" >
166- < Ansi > { stringify ( output . traceback ) } </ Ansi >
167- </ div >
168116
169- }
170- return null ;
171- }
172- if ( output . data [ "text/latex" ] ) {
173- return (
174- < Markdown
175- className = "output_latex output_subarea output_execute_result"
176- text = { stringify ( output . data [ "text/latex" ] ) }
177- />
178- ) ;
179- }
180- if ( output . data [ "text/html" ] ) {
181- const html = stringify ( output . data [ "text/html" ] ) ;
182- return (
183- < div
184- className = "output_html rendered_html output_subarea"
185- dangerouslySetInnerHTML = { {
186- __html : htmlFilter ( html ) ,
187- } }
188- > </ div >
189- ) ;
190- }
191- if ( output . data [ "image/png" ] ) {
117+ < div className = "output_wrapper" >
118+ < div className = "output" >
119+ { ( cell . outputs || [ ] ) . map ( ( output , j ) => (
120+ < div className = "output_area" key = { j } >
121+ < div className = "prompt output_prompt" >
122+ { output . execution_count && (
123+ < > Out [{ output . execution_count } ]:</ >
124+ ) }
125+ </ div >
126+ { ( ( ) => {
127+ if ( output . data == null ) {
128+ if ( output . png ) {
192129 return (
193130 < div className = "output_png output_subarea" >
194131 < img
195- src = { `data:image/png;base64,${ output . data [ "image/ png" ] } ` }
132+ src = { `data:image/png;base64,${ output . png } ` }
196133 alt = "output png"
197134 />
198135 </ div >
199136 ) ;
200137 }
201- if ( output . data [ "image/ jpeg" ] ) {
138+ if ( output . jpeg ) {
202139 return (
203140 < div className = "output_jpeg output_subarea" >
204141 < img
205- src = { `data:image/jpeg;base64,${ output . data [ "image/ jpeg" ] } ` }
142+ src = { `data:image/jpeg;base64,${ output . jpeg } ` }
206143 alt = "output jpeg"
207144 />
208145 </ div >
209146 ) ;
210147 }
211- if ( output . data [ "image/ gif" ] ) {
148+ if ( output . gif ) {
212149 return (
213150 < div className = "output_gif output_subarea" >
214151 < img
215- src = { `data:image/gif;base64,${ output . data [ "image/ gif" ] } ` }
152+ src = { `data:image/gif;base64,${ output . gif } ` }
216153 alt = "output gif"
217154 />
218155 </ div >
219156 ) ;
220157 }
221- if ( output . data [ "image/ svg+xml" ] ) {
158+ if ( output . svg ) {
222159 return (
223160 < div
224161 className = "output_svg output_subarea"
225162 dangerouslySetInnerHTML = { {
226- __html : htmlFilter ( output . data [ "image/ svg+xml" ] ) ,
163+ __html : htmlFilter ( output . svg ) ,
227164 } }
228165 > </ div >
229166 ) ;
230167 }
231- if ( output . data [ " text/plain" ] ) {
168+ if ( output . text ) {
232169 return (
233- < div className = "output_text output_subarea output_execute_result" >
234- < pre className = { `` } > { output . data [ "text/plain" ] } </ pre >
170+ < div
171+ className = { `output_subarea output_text output_${ output . output_type } output_${ output . name } output-${ output . name } ` }
172+ >
173+ < pre > { stringify ( output . text ) } </ pre >
235174 </ div >
236175 ) ;
237176 }
238- } ) ( ) }
239- </ div >
240- ) ) }
241- </ div >
177+ if ( output . traceback ) {
178+ return < div className = "output_subarea output_error" >
179+ < Ansi > { stringify ( output . traceback ) } </ Ansi >
180+ </ div >
181+
182+ }
183+ return null ;
184+ }
185+ if ( output . data [ "text/latex" ] ) {
186+ return (
187+ < Markdown
188+ className = "output_latex output_subarea output_execute_result"
189+ text = { stringify ( output . data [ "text/latex" ] ) }
190+ />
191+ ) ;
192+ }
193+ if ( output . data [ "text/html" ] ) {
194+ const html = stringify ( output . data [ "text/html" ] ) ;
195+ return (
196+ < div
197+ className = "output_html rendered_html output_subarea"
198+ dangerouslySetInnerHTML = { {
199+ __html : htmlFilter ( html ) ,
200+ } }
201+ > </ div >
202+ ) ;
203+ }
204+ if ( output . data [ "image/png" ] ) {
205+ return (
206+ < div className = "output_png output_subarea" >
207+ < img
208+ src = { `data:image/png;base64,${ output . data [ "image/png" ] } ` }
209+ alt = "output png"
210+ />
211+ </ div >
212+ ) ;
213+ }
214+ if ( output . data [ "image/jpeg" ] ) {
215+ return (
216+ < div className = "output_jpeg output_subarea" >
217+ < img
218+ src = { `data:image/jpeg;base64,${ output . data [ "image/jpeg" ] } ` }
219+ alt = "output jpeg"
220+ />
221+ </ div >
222+ ) ;
223+ }
224+ if ( output . data [ "image/gif" ] ) {
225+ return (
226+ < div className = "output_gif output_subarea" >
227+ < img
228+ src = { `data:image/gif;base64,${ output . data [ "image/gif" ] } ` }
229+ alt = "output gif"
230+ />
231+ </ div >
232+ ) ;
233+ }
234+ if ( output . data [ "image/svg+xml" ] ) {
235+ return (
236+ < div
237+ className = "output_svg output_subarea"
238+ dangerouslySetInnerHTML = { {
239+ __html : htmlFilter ( output . data [ "image/svg+xml" ] ) ,
240+ } }
241+ > </ div >
242+ ) ;
243+ }
244+ if ( output . data [ "text/plain" ] ) {
245+ return (
246+ < div className = "output_text output_subarea output_execute_result" >
247+ < pre className = { `` } > { output . data [ "text/plain" ] } </ pre >
248+ </ div >
249+ ) ;
250+ }
251+ } ) ( ) }
252+ </ div >
253+ ) ) }
242254 </ div >
243- ) }
255+ </ div >
244256 </ div >
245257 ) ;
246258} ;
0 commit comments