| // Copyright 2022 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| import { css, html } from 'lit'; |
| import { customElement, property } from 'lit/decorators.js'; |
| import { BaseElement } from './base_element'; |
| |
| export const DONT_WRAP_LOGS: string = 'Don\'t wrap logs'; |
| export const WRAP_LOGS: string = 'Wrap logs'; |
| |
| const ACTION_ICON_CLASSES: string = 'codicon icons action-icon'; |
| |
| /** |
| * Class to create action buttons that control the log list webview. |
| */ |
| @customElement('log-view-actions') |
| export class LogViewActions extends BaseElement { |
| static styles = [ |
| BaseElement.styles, |
| css` |
| .action-icon { |
| background: none; |
| border: none; |
| color: var(--vscode-icon-foreground); |
| height: var(--log-action-height); |
| padding: var(--input-padding-vertical) var(--input-padding-horizontal); |
| text-align: center; |
| } |
| |
| .action-icon:hover { |
| background: var(--vscode-toolbar-hoverBackground); |
| border-radius: 5px; |
| cursor: pointer; |
| } |
| |
| #wrap-logs { |
| color: var(--vscode-disabledForeground); |
| } |
| |
| :host([wrappingLogs]) #wrap-logs { |
| color: var(--vscode-icon-foreground); |
| } |
| ` |
| ]; |
| |
| @property({ attribute: true, reflect: true, type: Boolean }) |
| public wrappingLogs: boolean = false; |
| |
| public static readonly wrapLogsChangeEvent: string = 'wrap-logs-change'; |
| public static readonly clearRequestedEvent: string = 'clear-requested'; |
| |
| constructor(wrappingLogs: boolean) { |
| super(); |
| this.wrappingLogs = wrappingLogs; |
| } |
| |
| render() { |
| const wrapLogsTitle = this.wrappingLogs ? DONT_WRAP_LOGS : WRAP_LOGS; |
| |
| return html` |
| <div |
| id="clear" |
| title="Clear Logs" |
| class="${ACTION_ICON_CLASSES} codicon-clear-all" |
| @click="${this.onClearButtonClick}" |
| ></div> |
| |
| <div |
| id="wrap-logs" |
| title="Wrap Logs" |
| class="${ACTION_ICON_CLASSES} codicon-word-wrap" |
| @click="${this.onWrapLogsButtonClick}" |
| title = "${wrapLogsTitle}" |
| ></div> |
| `; |
| } |
| |
| private onClearButtonClick() { |
| this.dispatchEvent(new CustomEvent(LogViewActions.clearRequestedEvent, { |
| detail: {}, |
| })); |
| } |
| |
| private onWrapLogsButtonClick() { |
| this.wrappingLogs = !this.wrappingLogs; |
| this.dispatchEvent(new CustomEvent(LogViewActions.wrapLogsChangeEvent, { |
| detail: { |
| wrapLogs: this.wrappingLogs, |
| } |
| })); |
| } |
| } |