// 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.

library isolate_list_element;

import 'dart:html';
import 'package:polymer/polymer.dart';
import 'observatory_element.dart';

/// Displays an IsolateList response.
@CustomTag('isolate-list')
class IsolateListElement extends ObservatoryElement {
  IsolateListElement.created() : super.created();
  
  void refresh(Event e, var detail, Node target) {
    app.isolateManager.isolates.forEach((id, isolate) {
      isolate.refresh();
    });
  }
}