<style include="cr-icons cr-shared-style shared-style">
:host {
display: block;
height: 100%;
}
cr-icon {
--iron-icon-fill-color: var(--google-grey-700);
flex-shrink: 0;
height: var(--cr-icon-size);
width: var(--cr-icon-size);
}
cr-icon[icon='cr:warning'] {
/* TODO(dbeam): find dark mode equivalent for this orange. */
--iron-icon-fill-color: #ff9800; /* --paper-orange-500 */
}
cr-icon[icon='cr:error'] {
--iron-icon-fill-color: var(--error-color);
}
.section {
padding: 0 var(--cr-section-padding);
}
#heading {
align-items: center;
display: flex;
height: 40px;
margin-bottom: 30px;
padding: 8px 12px 0;
}
#heading span {
flex: 1;
margin: 0 10px;
}
#dev-reload-button {
margin-inline-end: 12px;
}
#errorsList {
min-height: 100px;
}
.error-item {
padding-inline-start: 0;
}
.error-item cr-icon-button {
margin: 0;
}
.error-item.selected {
background-color: rgba(0, 0, 0, 0.08);
}
.error-item .start {
align-items: center;
align-self: stretch; /* Makes the tappable area fill its parent. */
display: flex;
flex: 1;
padding: 0 var(--cr-section-padding);
}
.error-message {
flex-grow: 1;
margin-inline-start: 10px;
word-break: break-word;
}
.devtools-controls {
padding: 0 var(--cr-section-padding);
}
.details-heading {
align-items: center;
display: flex;
height: var(--cr-section-min-height);
}
.stack-trace-container {
list-style: none;
margin-top: 0;
padding: 0;
}
.stack-trace-container li {
cursor: pointer;
font-family: monospace;
padding: 4px;
}
.stack-trace-container li.selected,
.stack-trace-container li:hover {
background: var(--google-blue-100);
color: var(--google-grey-900); /* Same in light & dark modes. */
}
extensions-code-section {
height: 200px;
margin-bottom: 20px;
}
:host-context(.focus-outline-visible) .start:focus {
outline: -webkit-focus-ring-color auto 5px;
}
.start:focus {
outline: none;
}
.context-url {
word-wrap: break-word;
}
</style>
<div class="page-container" id="container">
<div class="page-content">
<div id="heading" class="cr-title-text">
<cr-icon-button class="icon-arrow-back no-overlap" id="closeButton"
aria-label="$i18n{back}" on-click="onCloseButtonClick_">
</cr-icon-button>
<span role="heading" aria-level="2">$i18n{errorsPageHeading}</span>
<template is="dom-if" if="[[showReloadButton_(data.*)]]">
<cr-icon-button id="dev-reload-button" class="icon-refresh no-overlap"
title="$i18n{itemReload}" aria-label="$i18n{itemReload}"
aria-describedby="a11yAssociation" on-click="onReloadClick_">
</cr-icon-button>
</template>
<cr-button on-click="onClearAllClick_" hidden="[[!entries_.length]]">
$i18n{clearAll}
</cr-button>
</div>
<div class="section">
<div id="errorsList">
<template is="dom-repeat" items="[[entries_]]">
<div class="item-container">
<div class$="cr-row error-item
[[computeErrorClass_(item, selectedEntry_)]]">
<div actionable class="start" on-click="onErrorItemAction_"
on-keydown="onErrorItemAction_" tabindex="0"
role="button" aria-expanded$="[[isAriaExpanded_(
index, selectedEntry_)]]">
<cr-icon icon$="cr:[[computeErrorIcon_(item)]]"
title$="[[computeErrorTypeLabel_(item)]]">
</cr-icon>
<div id$="[[item.id]]" class="error-message">
[[item.message]]
</div>
<div class$="cr-icon [[iconName_(index, selectedEntry_)]]">
</div>
</div>
<div class="separator"></div>
<cr-icon-button class="icon-delete-gray"
on-click="onDeleteErrorAction_"
aria-describedby$="[[item.id]]"
aria-label="$i18n{clearEntry}"></cr-icon-button>
</div>
<cr-collapse opened="[[isOpened_(index, selectedEntry_)]]">
<div class="devtools-controls">
<template is="dom-if"
if="[[computeIsRuntimeError_(item)]]">
<div class="details-heading cr-title-text" role="heading"
aria-level="3">
$i18n{errorContext}
</div>
<span class="context-url">
[[getContextUrl_(
item, '$i18nPolymer{errorContextUnknown}')]]
</span>
<div class="details-heading cr-title-text" role="heading"
aria-level="3">
$i18n{stackTrace}
</div>
<ul class="stack-trace-container"
on-keydown="onStackKeydown_">
<template is="dom-repeat" items="[[item.stackTrace]]">
<li on-click="onStackFrameClick_"
tabindex$="[[getStackFrameTabIndex_(item,
selectedStackFrame_)]]"
hidden="[[!shouldDisplayFrame_(item.url)]]"
class$="[[getStackFrameClass_(item,
selectedStackFrame_)]]">
[[getStackTraceLabel_(item)]]
</li>
</template>
</ul>
</template>
<extensions-code-section code="[[code_]]"
is-active="[[isOpened_(index, selectedEntry_)]]"
could-not-display-code="$i18n{noErrorsToShow}">
</extensions-code-section>
</div>
</cr-collapse>
</div>
</template>
</div>
</div>
</div>
</div>