| Index: polymer/lib/src/build/log_injector.dart
|
| diff --git a/polymer/lib/src/build/log_injector.dart b/polymer/lib/src/build/log_injector.dart
|
| deleted file mode 100644
|
| index 81af91420f5c3671489ee212205e9915b641418a..0000000000000000000000000000000000000000
|
| --- a/polymer/lib/src/build/log_injector.dart
|
| +++ /dev/null
|
| @@ -1,128 +0,0 @@
|
| -// Copyright (c) 2013, 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 provides a single function called injectLogs which when called
|
| -/// will request a logs json file and build a small widget out of them which
|
| -/// groups the logs by level.
|
| -library polymer.build.log_injector;
|
| -
|
| -import 'dart:async';
|
| -import 'dart:convert';
|
| -import 'dart:html';
|
| -
|
| -import 'package:path/path.dart' as path;
|
| -import 'package:source_span/source_span.dart';
|
| -import 'package:code_transformers/messages/messages.dart';
|
| -
|
| -class LogInjector {
|
| - Element selectedMenu;
|
| - Element selectedContent;
|
| -
|
| - // Gets the logs from a url and inject them into the dom.
|
| - Future injectLogsFromUrl(String url) =>
|
| - HttpRequest.getString(url).then((data) => injectLogs(data));
|
| -
|
| - // Builds the html for the logs element given some logs, and injects that
|
| - // into the dom. Currently, we do not use Polymer just to ensure that the
|
| - // page works regardless of the state of the app. Ideally, we could have
|
| - // multiple scripts running independently so we could ensure that this would
|
| - // always be running.
|
| - injectLogs(String data) {
|
| - var logs = new LogEntryTable.fromJson(JSON.decode(data));
|
| - if (logs.entries.isEmpty) return;
|
| -
|
| - // Group all logs by level.
|
| - var logsByLevel = {};
|
| - logs.entries.values.forEach((list) => list.forEach((log) {
|
| - logsByLevel.putIfAbsent(log.level, () => []);
|
| - logsByLevel[log.level].add(log);
|
| - }));
|
| - if (logsByLevel.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('build-logs')
|
| - ..append(menuWrapper)
|
| - ..append(contentWrapper);
|
| -
|
| - // For each log level, add a menu item, content section, and all the logs.
|
| - logsByLevel.forEach((level, logs) {
|
| - var levelClassName = level.toLowerCase();
|
| -
|
| - // Add the menu item and content item.
|
| - var menuItem = new Element.html('<div class="$levelClassName">'
|
| - '$level <span class="num">(${logs.length})</span>'
|
| - '</div>');
|
| - menuWrapper.append(menuItem);
|
| - var contentItem = new DivElement()..classes.add(levelClassName);
|
| - contentWrapper.append(contentItem);
|
| -
|
| - // Set up the click handlers.
|
| - menuItem.onClick.listen((_) {
|
| - if (selectedMenu == menuItem) {
|
| - selectedMenu = null;
|
| - selectedContent = null;
|
| - } else {
|
| - if (selectedMenu != null) {
|
| - selectedMenu.classes.remove('active');
|
| - selectedContent.classes.remove('active');
|
| - }
|
| -
|
| - selectedMenu = menuItem;
|
| - selectedContent = contentItem;
|
| - }
|
| -
|
| - menuItem.classes.toggle('active');
|
| - contentItem.classes.toggle('active');
|
| - });
|
| -
|
| - // Add the logs to the content item.
|
| - for (var log in logs) {
|
| - var logHtml = new StringBuffer();
|
| - logHtml.write('<div class="log">');
|
| -
|
| - var id = log.message.id;
|
| - var hashTag = '${id.package}_${id.id}';
|
| - var message = new HtmlEscape().convert(log.message.snippet);
|
| - message.replaceAllMapped(_urlRegex,
|
| - (m) => '<a href="${m.group(0)}" target="blank">${m.group(0)}</a>');
|
| - logHtml.write('<div class="message $levelClassName">$message '
|
| - '<a target="blank" href='
|
| - '"/packages/polymer/src/build/generated/messages.html#$hashTag">'
|
| - '(more details)</a></div>');
|
| - var span = log.span;
|
| - if (span != null) {
|
| - logHtml.write('<div class="location">');
|
| - var text = new HtmlEscape().convert(span.text);
|
| - logHtml.write(
|
| - ' <span class="location">${span.start.toolString}</span></div>'
|
| - ' <span class="text">$text</span>' '</div>');
|
| - logHtml.write('</div>');
|
| - }
|
| - logHtml.write('</div>');
|
| -
|
| - var logElement = new Element.html(logHtml.toString(),
|
| - validator: new NodeValidatorBuilder.common()
|
| - ..allowNavigation(new _OpenUriPolicy()));
|
| - contentItem.append(logElement);
|
| - var messageElement = logElement.querySelector('.message');
|
| - messageElement.onClick.listen((e) {
|
| - if (e.target == messageElement) {
|
| - messageElement.classes.toggle('expanded');
|
| - }
|
| - });
|
| - }
|
| - });
|
| -
|
| - document.body.append(wrapperDiv);
|
| - }
|
| -}
|
| -
|
| -final _urlRegex = new RegExp('http://[^ ]*');
|
| -class _OpenUriPolicy implements UriPolicy {
|
| - bool allowsUri(String uri) => true;
|
| -}
|
|
|