Index: lib/runtime/messages_widget.dart |
diff --git a/lib/runtime/messages_widget.dart b/lib/runtime/messages_widget.dart |
deleted file mode 100644 |
index 9db0438e7ab6f2a68a79316d0eb7ae780567ee8d..0000000000000000000000000000000000000000 |
--- a/lib/runtime/messages_widget.dart |
+++ /dev/null |
@@ -1,129 +0,0 @@ |
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-/// This library displays [MessageSummary]s from the Dart Dev Compiler. |
- |
-import 'dart:convert'; |
-import 'dart:html'; |
- |
-import 'package:dev_compiler/src/summary.dart'; |
-import 'package:source_span/source_span.dart'; |
- |
-main() async { |
- await window.animationFrame; |
- displayMessages(await HttpRequest.getString('messages.json')); |
-} |
- |
-void displayMessages(String data) { |
- var summary = GlobalSummary.parse(JSON.decode(data)); |
- var messagesByLevel = _getMessagesByLevel(summary); |
- if (messagesByLevel.isEmpty) return; |
- |
- // Build the wrapper, menu, and content divs. |
- var menuWrapper = new DivElement()..classes.add('menu'); |
- var contentWrapper = new DivElement()..classes.add('content'); |
- var wrapperDiv = new DivElement() |
- ..classes.add('dev-compiler-messages') |
- ..append(menuWrapper) |
- ..append(contentWrapper); |
- |
- var selectedMenu = new _Selection(); |
- var selectedContent = new _Selection(); |
- |
- // Add a menu item, content section, and messages for each log level. |
- messagesByLevel.forEach((level, messages) { |
- var contentItem = new DivElement()..classes.add(level); |
- var menuItem = new Element.html('<div class="$level">' |
- '$level <span class="num">(${messages.length})</span>' |
- '</div>'); |
- menuWrapper.append(menuItem); |
- contentWrapper.append(contentItem); |
- menuItem.onClick.listen((_) { |
- selectedMenu.select(menuItem); |
- selectedContent.select(contentItem); |
- }); |
- |
- // TODO(sigmund): add permanent links to error messages like in polymer. |
- for (var m in messages) { |
- var message = _hyperlinkUrls(_escape(m.message)); |
- var span = m.span; |
- var sb = new StringBuffer(); |
- sb.write('<div class="message"><div class="text $level">$message</div>'); |
- if (span != null) { |
- sb.write('<div class="location">' |
- ' <span class="location">${span.start.toolString}</span></div>' |
- ' <span class="text">'); |
- if (span is SourceSpanWithContext) { |
- sb.write(_escape(span.context.substring(0, span.start.column))); |
- sb.write('<span class="$level">'); |
- sb.write(_escape(span.text)); |
- sb.write('</span>'); |
- var end = span.start.column + span.text.length; |
- sb.write(_escape(span.context.substring(end))); |
- } else { |
- sb.write(_escape(span.text)); |
- } |
- sb.write('</span></div></div>'); |
- } |
- sb.write('</div>'); |
- |
- var logElement = new Element.html('$sb', |
- validator: new NodeValidatorBuilder.common() |
- ..allowNavigation(new _OpenUriPolicy())); |
- contentItem.append(logElement); |
- var messageElement = logElement.querySelector('div.text'); |
- messageElement.onClick.listen((e) { |
- if (e.target == messageElement) { |
- messageElement.classes.toggle('expanded'); |
- } |
- }); |
- } |
- }); |
- |
- document.body.append(wrapperDiv); |
-} |
- |
-/// Toggles classes to match which item of a list of items is selected. |
-class _Selection { |
- Element _selected; |
- |
- select(Element newItem) { |
- if (_selected == newItem) { |
- _selected = null; |
- } else { |
- if (_selected != null) { |
- _selected.classes.remove('active'); |
- } |
- _selected = newItem; |
- } |
- newItem.classes.toggle('active'); |
- } |
-} |
- |
-final _urlRegex = new RegExp('http://[^ ]*'); |
-final _escaper = new HtmlEscape(); |
-String _hyperlinkUrls(String text) => text.replaceAllMapped(_urlRegex, |
- (m) => '<a href="${m.group(0)}" target="blank">${m.group(0)}</a>'); |
-String _escape(String text) => _escaper.convert(text); |
- |
-class _OpenUriPolicy implements UriPolicy { |
- bool allowsUri(String uri) => true; |
-} |
- |
-Map<String, List<MessageSummary>> _getMessagesByLevel(GlobalSummary messages) { |
- var visitor = new _Visitor(); |
- messages.accept(visitor); |
- return visitor.messagesByLevel; |
-} |
- |
-class _Visitor extends RecursiveSummaryVisitor { |
- final Map<String, List<MessageSummary>> messagesByLevel = {}; |
- |
- @override |
- void visitMessage(MessageSummary message) { |
- var level = message.level.toLowerCase(); |
- messagesByLevel.putIfAbsent(level, () => []); |
- messagesByLevel[level].add(message); |
- } |
-} |