@@ -111,6 +111,8 @@ mathWorker.onmessage = function (oEvent) {
111
111
case "math" :
112
112
out . text . forEach ( e => {
113
113
const pre = document . createElement ( "pre" ) ;
114
+ pre . setAttribute ( 'data-from-line' , e . from ) ;
115
+ pre . setAttribute ( 'data-to-line' , e . to ) ;
114
116
if ( e . visible ) {
115
117
const type = e . type ;
116
118
const value = e . result ;
@@ -119,29 +121,21 @@ mathWorker.onmessage = function (oEvent) {
119
121
case "string" :
120
122
div = document . createElement ( "code" ) ;
121
123
div . innerHTML = value ;
122
- div . setAttribute ( 'data-from-line' , e . from )
123
- div . setAttribute ( 'data-to-line' , e . to )
124
124
pre . appendChild ( div ) ;
125
125
break ;
126
126
case "any" :
127
127
div = document . createElement ( "div" ) ;
128
128
div . textContent = value ;
129
- div . setAttribute ( 'data-from-line' , e . from )
130
- div . setAttribute ( 'data-to-line' , e . to )
131
129
pre . appendChild ( div ) ;
132
130
break ;
133
131
case "error" :
134
132
div = document . createElement ( "div" ) ;
135
133
div . style . color = "red" ;
136
134
div . innerHTML = value ;
137
- div . setAttribute ( 'data-from-line' , e . from )
138
- div . setAttribute ( 'data-to-line' , e . to )
139
135
pre . appendChild ( div ) ;
140
136
break ;
141
137
case "plot" :
142
138
div = document . createElement ( "div" ) ;
143
- div . setAttribute ( 'data-from-line' , e . from )
144
- div . setAttribute ( 'data-to-line' , e . to )
145
139
try {
146
140
Plotly . newPlot ( div , e . result . data , e . result . layout , e . result . config )
147
141
} catch ( error ) {
@@ -150,8 +144,10 @@ mathWorker.onmessage = function (oEvent) {
150
144
pre . appendChild ( div ) ;
151
145
break ;
152
146
}
153
- outputs . appendChild ( pre ) ;
147
+ } else {
148
+ pre . style . display = 'none'
154
149
}
150
+ outputs . appendChild ( pre ) ;
155
151
} ) ;
156
152
break ;
157
153
case "markdown" :
@@ -163,6 +159,7 @@ mathWorker.onmessage = function (oEvent) {
163
159
break ;
164
160
}
165
161
} ) ;
162
+ updateSelection ( )
166
163
clearTimeout ( timerSave ) ;
167
164
sessions [ lastTab ] = editor . state
168
165
timerSave = setTimeout ( saveSession , waitToSave , tabToSave )
@@ -187,12 +184,42 @@ function createState(ID) {
187
184
const text = update . state . doc . toString ( )
188
185
clearTimeout ( timer ) ;
189
186
timer = setTimeout ( sendWorkToMathWorker , wait , text ) ;
187
+ } else if ( update . selectionSet ) {
188
+ updateSelection ( )
190
189
}
191
190
} )
192
191
]
193
192
} )
194
193
}
195
194
195
+ function updateSelection ( ) {
196
+ const selectedFrom = editor . state . doc . lineAt (
197
+ editor . state . selection . ranges [ editor . state . selection . mainIndex ] . from
198
+ ) . number - 1 ;
199
+
200
+ const selectedTo = editor . state . doc . lineAt (
201
+ editor . state . selection . ranges [ editor . state . selection . mainIndex ] . to
202
+ ) . number - 1 ;
203
+
204
+ const outputs = document . querySelector ( '#OUTPUT' ) . childNodes ;
205
+
206
+ outputs . forEach ( code => {
207
+ const thisNode = code ;
208
+ const fromLine = parseInt ( thisNode . getAttribute ( 'data-from-line' ) , 10 ) ;
209
+ const toLine = parseInt ( thisNode . getAttribute ( 'data-to-line' ) , 10 ) ;
210
+ if (
211
+ ( fromLine >= selectedFrom ) && ( fromLine <= selectedTo )
212
+ ||
213
+ ( toLine >= selectedFrom ) && ( toLine <= selectedTo )
214
+ ) {
215
+ code . classList . add ( 'highlight' ) ;
216
+ code . scrollIntoView ( { block : 'nearest' , inline : 'start' } ) ;
217
+ } else {
218
+ code . classList . remove ( 'highlight' ) ;
219
+ }
220
+ } ) ;
221
+ }
222
+
196
223
function getSessionName ( ID ) {
197
224
return 'localSession' + ID
198
225
}
@@ -233,7 +260,7 @@ function sendWorkToMathWorker(mathExpressoins) {
233
260
if ( mathExpressoins != "" ) {
234
261
const expressions = mathExpressoins
235
262
. replace ( / \r ? \n / g, '\n' )
236
- . trim ( )
263
+ // .trim()
237
264
const request = { expr : expressions }
238
265
mathWorker . postMessage ( JSON . stringify ( request ) )
239
266
}
0 commit comments