727d29d6b6
- IDs are strings which can be concatenated together like paths. - Isolate ID is now "/isolates/XXX" - Function, field, class, library, and script IDs are now stable. - Introduce <type-ref> tags. R=turnidge@google.com Review URL: https://codereview.chromium.org//98253009 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31358 260f80e4-7a28-3924-810f-c04153c831b5
621 lines
22 KiB
HTML
621 lines
22 KiB
HTML
<!DOCTYPE html><html><head><script src="packages/shadow_dom/shadow_dom.debug.js"></script>
|
|
<script src="packages/custom_element/custom-elements.debug.js"></script>
|
|
<script src="packages/browser/interop.js"></script>
|
|
|
|
<title>Dart VM Observatory</title>
|
|
<meta charset="utf-8">
|
|
<link type="text/css" rel="stylesheet" href="bootstrap_css/css/bootstrap.min.css">
|
|
|
|
<script src="index.html_bootstrap.dart.js"></script>
|
|
|
|
</head>
|
|
<body><polymer-element name="observatory-element">
|
|
|
|
</polymer-element><polymer-element name="breakpoint-list" extends="observatory-element">
|
|
<template>
|
|
<template if="{{ msg['breakpoints'].isEmpty }}">
|
|
<div class="panel panel-warning">
|
|
<div class="panel-body">No breakpoints</div>
|
|
</div>
|
|
</template>
|
|
<template if="{{ msg['breakpoints'].isNotEmpty }}">
|
|
<ul class="list-group">
|
|
<template repeat="{{ bpt in msg['breakpoints'] }}">
|
|
<li class="list-group-item">
|
|
{{ bpt }}
|
|
</li>
|
|
</template>
|
|
</ul>
|
|
</template>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="service-ref" extends="observatory-element">
|
|
|
|
</polymer-element><polymer-element name="class-ref" extends="service-ref">
|
|
<template>
|
|
<a href="{{ url }}">{{ name }}</a>
|
|
</template>
|
|
|
|
</polymer-element>
|
|
<polymer-element name="error-view" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<div class="panel panel-danger">
|
|
<div class="panel-heading">Error</div>
|
|
<div class="panel-body">
|
|
<template if="{{ (error_obj == null) || (error_obj['type'] != 'LanguageError') }}">
|
|
<p>{{ error }}</p>
|
|
</template>
|
|
<template if="{{ (error_obj != null) && (error_obj['type'] == 'LanguageError') }}">
|
|
<pre>{{ error_obj['error_msg'] }}</pre>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="field-ref" extends="service-ref">
|
|
<template>
|
|
<div>
|
|
<template if="{{ ref['final'] }}"> final </template>
|
|
<template if="{{ ref['const'] }}"> const </template>
|
|
<template if="{{ (ref['declared_type']['name'] == 'dynamic' && !ref['final'] && !ref['const']) }}">
|
|
var
|
|
</template>
|
|
<template if="{{ (ref['declared_type']['name'] != 'dynamic') }}">
|
|
<class-ref app="{{ app }}" ref="{{ ref['declared_type'] }}"></class-ref>
|
|
</template>
|
|
<a href="{{ url }}">{{ name }}</a>
|
|
</div>
|
|
</template> </polymer-element><polymer-element name="function-ref" extends="service-ref">
|
|
<template>
|
|
<a href="{{ url }}">{{ name }}</a>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="instance-ref" extends="service-ref">
|
|
<template>
|
|
<div>
|
|
<template if="{{ (ref['type'] == 'null') }}">
|
|
{{ "null" }}
|
|
</template>
|
|
<template if="{{ (ref['type'] != 'null') }}">
|
|
<a href="{{ url }}">{{ name }} </a>
|
|
</template>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="library-ref" extends="service-ref">
|
|
<template>
|
|
<a href="{{ url }}">{{ name }}</a>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="class-view" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<div class="panel panel-warning">
|
|
<div class="panel-heading">
|
|
class <strong>{{ cls['user_name'] }}</strong>
|
|
<template if="{{ cls['super']['type'] != 'Null' }}">
|
|
extends
|
|
<class-ref app="{{ app }}" ref="{{ cls['super'] }}"></class-ref>
|
|
</template>
|
|
<library-ref app="{{ app }}" ref="{{ cls['library'] }}"></library-ref>
|
|
</div>
|
|
<div class="panel-body">
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr>
|
|
<td>Abstract</td><td>{{ cls['abstract'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Const</td><td>{{ cls['const'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Finalized</td><td>{{ cls['const'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Implemented</td><td>{{ cls['implemented'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Patch</td><td>{{ cls['patch'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>VM Name</td><td>{{ cls['name'] }}</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<template if="{{ cls['error'] == null }}">
|
|
<blockquote><strong>Fields</strong></blockquote>
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr template="" repeat="{{ field in cls['fields'] }}">
|
|
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
|
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<blockquote><strong>Functions</strong></blockquote>
|
|
<table class="table table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>User Name</th>
|
|
<th>VM Name</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr template="" repeat="{{ function in cls['functions'] }}">
|
|
<td><function-ref app="{{ app }}" ref="{{ function }}"></function-ref></td>
|
|
<td><function-ref app="{{ app }}" ref="{{ function }}" internal=""></function-ref></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</template>
|
|
<template if="{{ cls['error'] != null }}">
|
|
<error-view error_obj="{{ cls['error'] }}"></error-view>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element>
|
|
<polymer-element name="code-ref" extends="service-ref">
|
|
<template>
|
|
<a href="{{ url }}">{{ name }}</a>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="disassembly-entry" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<template if="{{ instruction['type'] == 'DisassembledInstructionComment' }}">
|
|
<div class="col-md-2"></div>
|
|
<div class="col-md-2"></div>
|
|
<div class="col-md-4"><code>{{ instruction['comment'] }}</code></div>
|
|
</template>
|
|
<template if="{{ instruction['type'] == 'DisassembledInstruction' }}">
|
|
<div class="col-md-2"></div>
|
|
<div class="col-md-2">{{ instruction['pc'] }}</div>
|
|
<div class="col-md-4">
|
|
<code>{{ instruction['hex'] }} {{ instruction['human'] }}</code>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="code-view" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<div class="{{ cssPanelClass }}">
|
|
<div class="panel-heading">
|
|
<function-ref app="{{ app }}" ref="{{ code['function'] }}"></function-ref>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div class="row">
|
|
<div class="col-md-2"><strong>Samples</strong></div>
|
|
<div class="col-md-2"><strong>Address</strong></div>
|
|
<div><strong>Instruction</strong></div>
|
|
</div>
|
|
<template repeat="{{ instruction in code['disassembly'] }}">
|
|
<disassembly-entry instruction="{{ instruction }}">
|
|
</disassembly-entry>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="collapsible-content" extends="observatory-element">
|
|
<template>
|
|
<div class="well row">
|
|
<a on-click="toggleDisplay" class="btn muted unselectable">
|
|
Raw message... <i class="{{ iconClass }}"></i>
|
|
</a>
|
|
<div style="display: {{ displayValue }}" class="well">
|
|
<content></content>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="field-view" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<div class="panel panel-warning">
|
|
<div class="panel-heading">
|
|
<template if="{{ field['static'] }}">static</template>
|
|
<template if="{{ field['final'] }}">final</template>
|
|
<template if="{{ field['const'] }}">const</template>
|
|
{{ field['user_name'] }} ({{ field['name'] }})
|
|
<class-ref app="{{ app }}" ref="{{ field['class'] }}"></class-ref>
|
|
</div>
|
|
<div class="panel-body">
|
|
<template if="{{ field['guard_class'] == 'dynamic'}}">
|
|
<div class="alert alert-danger">
|
|
Field has been assigned multiple types. If a field is only ever
|
|
assigned a single type, performance may improve.
|
|
</div>
|
|
</template>
|
|
<template if="{{ (field['guard_class'] != 'dynamic') && (field['guard_class'] != 'unknown') }}">
|
|
<div class="alert alert-success">Field has monomorphic type</div>
|
|
<template if="{{ (field['guard_class'] != 'dynamic') &&
|
|
field['guard_nullable'] }}">
|
|
<div class="alert alert-info">
|
|
Field has been assigned null. If a field is never assigned null,
|
|
performance may improve.
|
|
</div>
|
|
</template>
|
|
<blockquote>
|
|
<class-ref app="{{ app }}" ref="{{ field['guard_class'] }}"></class-ref>
|
|
</blockquote>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="function-view" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<div class="panel panel-warning">
|
|
<div class="panel-heading">
|
|
{{ function['user_name'] }} ({{ function['name'] }})
|
|
<class-ref app="{{ app }}" ref="{{ function['class'] }}"></class-ref>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div>
|
|
<code-ref app="{{ app }}" ref="{{ function['code'] }}"></code-ref>
|
|
<code-ref app="{{ app }}" ref="{{ function['unoptimized_code'] }}"></code-ref>
|
|
</div>
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr>
|
|
<td>static</td><td>{{ function['is_static'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Const</td><td>{{ function['is_const'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Optimizable</td><td>{{ function['is_optimizable'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Inlinable</td><td>{{ function['is_inlinable'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Kind</td><td>{{ function['kind'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Usage Count</td><td>{{ function['usage_counter'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Optimized Call Site Count</td><td>{{ function['optimized_call_site_count'] }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Deoptimizations</td><td>{{ function['deoptimizations'] }}</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="isolate-summary" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-1">
|
|
<img src="packages/observatory/src/observatory_elements/img/isolate_icon.png" class="img-polaroid">
|
|
</div>
|
|
<div class="col-md-1">{{ isolate }}</div>
|
|
<div class="col-md-10">{{ name }}</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-2"></div>
|
|
<div class="col-md-1">
|
|
<a href="{{ app.locationManager.relativeLink(isolate, 'stacktrace') }}">Stacktrace</a>
|
|
</div>
|
|
<div class="col-md-1">
|
|
<a href="{{ app.locationManager.relativeLink(isolate, 'library') }}">Library</a>
|
|
</div>
|
|
<div class="col-md-1">
|
|
<a href="{{ app.locationManager.relativeLink(isolate, 'debug/breakpoints') }}">Breakpoints</a>
|
|
</div>
|
|
<div class="col-md-8"></div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="isolate-list" extends="observatory-element">
|
|
<template>
|
|
<ul class="list-group">
|
|
<template repeat="{{ isolate in app.isolateManager.isolates.values }}">
|
|
<li class="list-group-item">
|
|
<isolate-summary app="{{ app }}" isolate="{{ isolate.id }}" name="{{ isolate.name }}"></isolate-summary>
|
|
</li>
|
|
</template>
|
|
</ul>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="instance-view" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<div class="panel panel-warning">
|
|
<div class="panel-heading">
|
|
Instance of
|
|
<class-ref app="{{ app }}" ref="{{ instance['class'] }}"></class-ref>
|
|
</div>
|
|
<div class="panel-body">
|
|
<template if="{{ instance['error'] == null }}">
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr>
|
|
<td>Preview</td><td>{{ instance['preview'] }}</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<blockquote><strong>Fields</strong></blockquote>
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr template="" repeat="{{ field in instance['fields'] }}">
|
|
<td><field-ref app="{{ app }}" ref="{{ field }}"></field-ref></td>
|
|
<td><instance-ref app="{{ app }}" ref="{{ field['value'] }}"></instance-ref></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</template>
|
|
<template if="{{ instance['error'] != null }}">
|
|
<error-view error_obj="{{ instance['error'] }}"></error-view>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element>
|
|
<polymer-element name="json-view" extends="observatory-element">
|
|
<template>
|
|
<template bind="" if="{{ valueType == 'Primitive' }}">
|
|
<span>{{primitiveString}}</span>
|
|
</template>
|
|
<template bind="" if="{{ valueType == 'List' }}">
|
|
<table class="table table-condensed table-bordered">
|
|
<caption class="text-left">List, {{list.length}}</caption>
|
|
<tbody>
|
|
<tr template="" repeat="{{item in list)}}">
|
|
<th>{{counter}}</th>
|
|
<td><json-view json="{{item}}"></json-view></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</template>
|
|
<template if="{{ valueType == 'Map' }}">
|
|
<table class="table table-condensed table-bordered">
|
|
<caption class="text-left">Map, {{keys.length}}</caption>
|
|
<tbody>
|
|
<tr template="" repeat="{{key in keys}}">
|
|
<th>{{key}}</th>
|
|
<td><json-view json="{{value(key)}}"></json-view></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</template>
|
|
</template>
|
|
|
|
</polymer-element>
|
|
<polymer-element name="script-ref" extends="service-ref">
|
|
<template>
|
|
<a href="{{ url }}">{{ name }}</a>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="library-view" extends="observatory-element">
|
|
<template>
|
|
<div class="alert alert-success">Library {{ library['name'] }}</div>
|
|
<div class="alert alert-info">Scripts</div>
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr template="" repeat="{{ script in library['scripts']}}">
|
|
<td>
|
|
{{ script['kind'] }}
|
|
</td>
|
|
<td>
|
|
<script-ref app="{{ app }}" ref="{{ script }}"></script-ref>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="alert alert-info">Imported Libraries</div>
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr template="" repeat="{{ lib in library['libraries'] }}">
|
|
<td>
|
|
<library-ref app="{{ app }}" ref="{{ lib }}"></library-ref>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="alert alert-info">Variables</div>
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr template="" repeat="{{ variable in library['variables'] }}">
|
|
<td><field-ref app="{{ app }}" ref="{{ variable }}"></field-ref></td>
|
|
<td><instance-ref app="{{ app }}" ref="{{ variable['value'] }}"></instance-ref></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="alert alert-info">Functions</div>
|
|
<table class="table table-hover">
|
|
<tbody>
|
|
<tr template="" repeat="{{ func in library['functions'] }}">
|
|
<td>
|
|
<function-ref app="{{ app }}" ref="{{ func }}"></function-ref>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="alert alert-info">Classes</div>
|
|
<table class="table table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Internal Name</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr template="" repeat="{{ cls in library['classes'] }}">
|
|
<td>
|
|
<class-ref app="{{ app }}" ref="{{ cls }}"></class-ref>
|
|
</td>
|
|
<td>
|
|
<class-ref app="{{ app }}" ref="{{ cls }}" internal=""></class-ref>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="source-view" extends="observatory-element">
|
|
<template>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<div class="panel-heading">{{ source.url }}</div>
|
|
<div class="panel-body">
|
|
<div class="row">
|
|
<div><strong>Source</strong></div>
|
|
</div>
|
|
<pre> <template repeat="{{ line in source.lines }}">{{line.paddedLine}} {{line.src}}
|
|
</template>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="script-view" extends="observatory-element">
|
|
<template>
|
|
<source-view app="{{ app }}" source="{{ script['source'] }}"></source-view>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="stack-trace" extends="observatory-element">
|
|
<template>
|
|
<div class="alert alert-info">Stack Trace</div>
|
|
<table class="table table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Depth</th>
|
|
<th>Function</th>
|
|
<th>Script</th>
|
|
<th>Line</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr template="" repeat="{{ frame in trace['members'] }}">
|
|
<td>{{$index}}</td>
|
|
<td><function-ref app="{{ app }}" ref="{{ frame['function'] }}"></function-ref></td>
|
|
<td><script-ref app="{{ app }}" ref="{{ frame['script'] }}"></script-ref></td>
|
|
<td>{{ frame['line'] }}</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="message-viewer" extends="observatory-element">
|
|
<!--
|
|
This is a big switch statement which instantiates the custom element
|
|
designated to display the message type.
|
|
-->
|
|
<template>
|
|
<!-- If the message type is an IsolateList -->
|
|
<template if="{{ messageType == 'IsolateList' }}">
|
|
<isolate-list app="{{ app }}"></isolate-list>
|
|
</template>
|
|
<!-- If the message type is a StackTrace -->
|
|
<template if="{{ messageType == 'StackTrace' }}">
|
|
<stack-trace app="{{ app }}" trace="{{ message }}"></stack-trace>
|
|
</template>
|
|
<template if="{{ messageType == 'BreakpointList' }}">
|
|
<breakpoint-list app="{{ app }}" msg="{{ message }}"></breakpoint-list>
|
|
</template>
|
|
<!-- If the message type is a RequestError -->
|
|
<template if="{{ messageType == 'RequestError' }}">
|
|
<error-view app="{{ app }}" error="{{ message['error'] }}"></error-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Library' }}">
|
|
<library-view app="{{ app }}" library="{{ message }}"></library-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Class' }}">
|
|
<class-view app="{{ app }}" cls="{{ message }}"></class-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Field' }}">
|
|
<field-view app="{{ app }}" field="{{ message }}"></field-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Instance' }}">
|
|
<instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Array' }}">
|
|
<instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
|
|
</template>
|
|
<template if="{{ messageType == 'GrowableObjectArray' }}">
|
|
<instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
|
|
</template>
|
|
<template if="{{ messageType == 'String' }}">
|
|
<instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Bool' }}">
|
|
<instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Smi' }}">
|
|
<instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Function' }}">
|
|
<function-view app="{{ app }}" function="{{ message }}"></function-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Code' }}">
|
|
<code-view app="{{ app }}" code="{{ message }}"></code-view>
|
|
</template>
|
|
<template if="{{ messageType == 'Script' }}">
|
|
<script-view app="{{ app }}" script="{{ message }}"></script-view>
|
|
</template>
|
|
<!-- Add new views and message types in the future here. -->
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="navigation-bar" extends="observatory-element">
|
|
<template>
|
|
<nav class="navbar navbar-default" role="navigation">
|
|
<div class="navbar-header">
|
|
<a class="navbar-brand" href="">Observatory</a>
|
|
</div>
|
|
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
|
</div>
|
|
</nav>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="response-viewer" extends="observatory-element">
|
|
<template>
|
|
<template repeat="{{ message in app.requestManager.responses }}">
|
|
<message-viewer app="{{ app }}" message="{{ message }}"></message-viewer>
|
|
<collapsible-content>
|
|
<!-- <json-view json="{{ message }}"></json-view> -->
|
|
</collapsible-content>
|
|
</template>
|
|
</template>
|
|
|
|
</polymer-element><polymer-element name="observatory-application" extends="observatory-element">
|
|
<template>
|
|
<navigation-bar app="{{ app }}"></navigation-bar>
|
|
<response-viewer app="{{ app }}"></response-viewer>
|
|
</template>
|
|
|
|
</polymer-element>
|
|
<observatory-application></observatory-application>
|
|
|
|
</body></html> |