Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 /// This library provides a single function called injectLogs which when called | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
+ copyright notice above this
jakemac
2014/08/04 19:49:59
Done.
| |
| 2 /// will request a logs json file and build a small widget out of them which | |
| 3 /// groups the logs by level. | |
| 4 library polymer.build.log_injector; | |
| 5 | |
| 6 import 'dart:convert'; | |
| 7 import 'dart:html'; | |
| 8 | |
| 9 import 'package:path/path.dart' as path; | |
| 10 | |
| 11 injectLogs() { | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
Consider adding a note in a comment here to indica
jakemac
2014/08/04 19:49:59
Done.
| |
| 12 var buildLogsUrl = '${window.location.href}._buildLogs'; | |
| 13 var r = HttpRequest.getString(buildLogsUrl).then((data) { | |
| 14 // Group all logs by level. | |
| 15 var logsByLevel = {}; | |
| 16 JSON.decode(data).forEach((log) { | |
| 17 logsByLevel.putIfAbsent(log['level'], () => []); | |
| 18 logsByLevel[log['level']].add(log); | |
| 19 }); | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
maybe return here if there are no messages?
jakemac
2014/08/04 19:49:59
Done.
| |
| 20 | |
| 21 // Build the wrapper, menu, and content divs. | |
| 22 var wrapperDiv = new DivElement()..classes.add('build-logs'); | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
or wrapperDiv = new Element.html('<div class="buil
jakemac
2014/08/04 19:49:58
But mine is shorter! (and a little faster?)
Siggi Cherem (dart-lang)
2014/08/04 20:38:37
:-) let's keep it as you have it.
As of speed go
| |
| 23 var menuWrapper = new DivElement()..classes.add('menu'); | |
| 24 var contentWrapper = new DivElement()..classes.add('content'); | |
| 25 wrapperDiv..append(menuWrapper)..append(contentWrapper); | |
| 26 | |
| 27 // For each log level, add a menu item, content section, and all the logs. | |
| 28 logsByLevel.forEach((level, logs) { | |
| 29 var levelClassName = level.toLowerCase(); | |
| 30 | |
| 31 // Add the menu item and content item. | |
| 32 var menuItem = new DivElement() | |
| 33 ..classes.add(levelClassName) | |
| 34 ..appendHtml('$level <span class="num">(${logs.length})</span>'); | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
how about:
menuItem = new Element.html(
'<div
jakemac
2014/08/04 19:49:59
Done.
| |
| 35 menuWrapper.append(menuItem); | |
| 36 var contentItem = new DivElement()..classes.add(levelClassName); | |
| 37 contentWrapper.append(contentItem); | |
| 38 | |
| 39 // Set up the click handlers. | |
| 40 menuItem.onClick.listen((event) { | |
| 41 // Clear active class from everything, then add it to ourselves. | |
| 42 wrapperDiv.querySelectorAll('.menu > div, .content > div') | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
alternatively:
- save a list of items/contents? s
jakemac
2014/08/04 19:49:58
Done, keeping track of the currently selected item
| |
| 43 .where((e) => !identical(e, menuItem) && !identical(e, contentItem)) | |
| 44 .forEach((e) { e.classes.remove('active'); }); | |
| 45 | |
| 46 menuItem.classes.toggle('active'); | |
| 47 contentItem.classes.toggle('active'); | |
| 48 }); | |
| 49 | |
| 50 // Add the logs to the content item. | |
| 51 logs.forEach((log) { | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
for long blocks, we tend to use a normal loop inst
jakemac
2014/08/04 19:49:58
Done.
| |
| 52 var logHtml = new StringBuffer(); | |
| 53 logHtml.write( | |
| 54 '<div class="message $levelClassName">${log['message']}</div>'); | |
| 55 var assetId = log['assetId']; | |
| 56 if (assetId != null) { | |
| 57 logHtml.write( | |
| 58 '<div class="asset">' | |
| 59 ' <span class="package">${assetId['package']}</span>:' | |
| 60 ' <span class="path">${assetId['path']}</span>' | |
| 61 '</div>'); | |
| 62 } | |
| 63 var span = log['span']; | |
| 64 if (span != null) { | |
| 65 logHtml.write( | |
| 66 '<div class="span">' | |
| 67 ' <div class="location">${span['location']}</div>' | |
| 68 ' <code class="text">${span['text']}</code>' | |
| 69 '</div>'); | |
| 70 } | |
| 71 | |
| 72 var logElement = new DivElement() | |
|
Siggi Cherem (dart-lang)
2014/08/01 21:31:52
How about at the beginning do:
logHtml.write('<div
jakemac
2014/08/04 19:49:59
Done.
| |
| 73 ..classes.add('log') | |
| 74 ..appendHtml(logHtml.toString()); | |
| 75 | |
| 76 contentItem.append(logElement); | |
| 77 }); | |
| 78 }); | |
| 79 | |
| 80 document.body.append(wrapperDiv); | |
| 81 }); | |
| 82 } | |
| OLD | NEW |