OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library script_inset_element; | 5 library script_inset_element; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:html'; | 8 import 'dart:html'; |
9 import 'observatory_element.dart'; | 9 import 'observatory_element.dart'; |
10 import 'service_ref.dart'; | 10 import 'service_ref.dart'; |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 class ScriptInsetElement extends ObservatoryElement { | 211 class ScriptInsetElement extends ObservatoryElement { |
212 @published Script script; | 212 @published Script script; |
213 | 213 |
214 /// Set the height to make the script inset scroll. Otherwise it | 214 /// Set the height to make the script inset scroll. Otherwise it |
215 /// will show from startPos to endPos. | 215 /// will show from startPos to endPos. |
216 @published String height = null; | 216 @published String height = null; |
217 | 217 |
218 @published int currentPos; | 218 @published int currentPos; |
219 @published int startPos; | 219 @published int startPos; |
220 @published int endPos; | 220 @published int endPos; |
| 221 @published bool inDebuggerContext = false; |
221 | 222 |
222 @observable int currentLine; | 223 int _currentLine; |
223 @observable int currentCol; | 224 int _currentCol; |
224 @observable int startLine; | 225 int _startLine; |
225 @observable int endLine; | 226 int _endLine; |
226 | 227 |
227 var annotations = []; | 228 var annotations = []; |
228 var annotationsCursor; | 229 var annotationsCursor; |
229 | 230 |
230 StreamSubscription scriptChangeSubscription; | 231 StreamSubscription scriptChangeSubscription; |
231 | 232 |
232 String makeLineId(int line) { | 233 String makeLineId(int line) { |
233 return 'line-$line'; | 234 return 'line-$line'; |
234 } | 235 } |
235 | 236 |
236 void _scrollToCurrentPos() { | 237 void _scrollToCurrentPos() { |
237 var line = querySelector('#${makeLineId(currentLine)}'); | 238 var line = querySelector('#${makeLineId(_currentLine)}'); |
238 if (line != null) { | 239 if (line != null) { |
239 line.scrollIntoView(); | 240 line.scrollIntoView(); |
240 } | 241 } |
241 } | 242 } |
242 | 243 |
243 void detached() { | 244 void detached() { |
244 if (scriptChangeSubscription != null) { | 245 if (scriptChangeSubscription != null) { |
245 // Don't leak. If only Dart and Javascript exposed weak references... | 246 // Don't leak. If only Dart and Javascript exposed weak references... |
246 scriptChangeSubscription.cancel(); | 247 scriptChangeSubscription.cancel(); |
247 scriptChangeSubscription = null; | 248 scriptChangeSubscription = null; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 cls.load().then((cls) { | 326 cls.load().then((cls) { |
326 for (var func in cls.functions) { | 327 for (var func in cls.functions) { |
327 func.load(); | 328 func.load(); |
328 } | 329 } |
329 }); | 330 }); |
330 } | 331 } |
331 }); | 332 }); |
332 } | 333 } |
333 | 334 |
334 void computeAnnotations() { | 335 void computeAnnotations() { |
335 startLine = (startPos != null | 336 _startLine = (startPos != null |
336 ? script.tokenToLine(startPos) | 337 ? script.tokenToLine(startPos) |
337 : 1); | 338 : 1); |
338 currentLine = (currentPos != null | 339 _currentLine = (currentPos != null |
339 ? script.tokenToLine(currentPos) | 340 ? script.tokenToLine(currentPos) |
| 341 : null); |
| 342 _currentCol = (currentPos != null |
| 343 ? (script.tokenToCol(currentPos) - 1) // make this 0-based. |
340 : null); | 344 : null); |
341 currentCol = (currentPos != null | 345 _endLine = (endPos != null |
342 ? (script.tokenToCol(currentPos) - 1) // make this 0-based. | 346 ? script.tokenToLine(endPos) |
343 : null); | 347 : script.lines.length); |
344 endLine = (endPos != null | |
345 ? script.tokenToLine(endPos) | |
346 : script.lines.length); | |
347 | 348 |
348 annotations.clear(); | 349 annotations.clear(); |
349 if (currentLine != null) { | 350 if (_currentLine != null) { |
350 var a = new CurrentExecutionAnnotation(); | 351 var a = new CurrentExecutionAnnotation(); |
351 a.line = currentLine; | 352 a.line = _currentLine; |
352 a.columnStart = currentCol; | 353 a.columnStart = _currentCol; |
353 a.columnStop = currentCol + 1; | 354 a.columnStop = _currentCol + 1; |
354 annotations.add(a); | 355 annotations.add(a); |
355 } | 356 } |
356 | 357 |
357 loadFunctionsOf(script.library); | 358 if (!inDebuggerContext) { |
| 359 loadFunctionsOf(script.library); |
358 | 360 |
359 for (var func in script.library.functions) { | 361 for (var func in script.library.functions) { |
360 if (func.script == script) { | |
361 annotations.add(new FunctionDeclarationAnnotation(func)); | |
362 } | |
363 } | |
364 for (var cls in script.library.classes) { | |
365 for (var func in cls.functions) { | |
366 if (func.script == script) { | 362 if (func.script == script) { |
367 annotations.add(new FunctionDeclarationAnnotation(func)); | 363 annotations.add(new FunctionDeclarationAnnotation(func)); |
368 } | 364 } |
369 } | 365 } |
370 } | 366 for (var cls in script.library.classes) { |
| 367 for (var func in cls.functions) { |
| 368 if (func.script == script) { |
| 369 annotations.add(new FunctionDeclarationAnnotation(func)); |
| 370 } |
| 371 } |
| 372 } |
371 | 373 |
372 for (var callSite in script.callSites) { | 374 for (var callSite in script.callSites) { |
373 annotations.add(new CallSiteAnnotation(callSite)); | 375 annotations.add(new CallSiteAnnotation(callSite)); |
| 376 } |
374 } | 377 } |
375 | 378 |
376 annotations.sort(); | 379 annotations.sort(); |
377 } | 380 } |
378 | 381 |
379 Element linesTable() { | 382 Element linesTable() { |
380 var table = new DivElement(); | 383 var table = new DivElement(); |
381 table.classes.add("sourceTable"); | 384 table.classes.add("sourceTable"); |
382 | 385 |
383 annotationsCursor = 0; | 386 annotationsCursor = 0; |
384 | 387 |
385 int blankLineCount = 0; | 388 int blankLineCount = 0; |
386 for (int i = (startLine - 1); i <= (endLine - 1); i++) { | 389 for (int i = (_startLine - 1); i <= (_endLine - 1); i++) { |
387 if (script.lines[i].isBlank) { | 390 if (script.lines[i].isBlank) { |
388 // Try to introduce elipses if there are 4 or more contiguous | 391 // Try to introduce elipses if there are 4 or more contiguous |
389 // blank lines. | 392 // blank lines. |
390 blankLineCount++; | 393 blankLineCount++; |
391 } else { | 394 } else { |
392 if (blankLineCount > 0) { | 395 if (blankLineCount > 0) { |
393 int firstBlank = i - blankLineCount; | 396 int firstBlank = i - blankLineCount; |
394 int lastBlank = i - 1; | 397 int lastBlank = i - 1; |
395 if (blankLineCount < 4) { | 398 if (blankLineCount < 4) { |
396 // Too few blank lines for an elipsis. | 399 // Too few blank lines for an elipsis. |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 } | 513 } |
511 | 514 |
512 return e; | 515 return e; |
513 } | 516 } |
514 | 517 |
515 Element lineSourceElement(ScriptLine line) { | 518 Element lineSourceElement(ScriptLine line) { |
516 var e = new DivElement(); | 519 var e = new DivElement(); |
517 e.classes.add("sourceItem"); | 520 e.classes.add("sourceItem"); |
518 | 521 |
519 if (line != null) { | 522 if (line != null) { |
520 if (line.line == currentLine) { | 523 if (line.line == _currentLine) { |
521 e.classes.add("currentLine"); | 524 e.classes.add("currentLine"); |
522 } | 525 } |
523 | 526 |
524 e.id = makeLineId(line.line); | 527 e.id = makeLineId(line.line); |
525 | 528 |
526 var position = 0; | 529 var position = 0; |
527 consumeUntil(var stop) { | 530 consumeUntil(var stop) { |
528 if (stop <= position) { | 531 if (stop <= position) { |
529 return null; // Empty gap between annotations/boundries. | 532 return null; // Empty gap between annotations/boundries. |
530 } | 533 } |
(...skipping 16 matching lines...) Expand all Loading... |
547 annotation.applyStyleTo(consumeUntil(annotation.columnStop)); | 550 annotation.applyStyleTo(consumeUntil(annotation.columnStop)); |
548 } | 551 } |
549 consumeUntil(line.text.length); | 552 consumeUntil(line.text.length); |
550 } | 553 } |
551 | 554 |
552 return e; | 555 return e; |
553 } | 556 } |
554 | 557 |
555 ScriptInsetElement.created() : super.created(); | 558 ScriptInsetElement.created() : super.created(); |
556 } | 559 } |
OLD | NEW |