blob: b5583c63428366595140c591f6f81cda22961bda [file] [log] [blame]
Blink Reformat4c46d092018-04-07 15:32:371// Copyright 2017 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Tim van der Lippe9b2f8712020-02-12 17:46:225import * as Common from '../common/common.js';
Tim van der Lippe93b57c32020-02-20 17:38:446import * as Platform from '../platform/platform.js';
Tim van der Lippe9b2f8712020-02-12 17:46:227import * as SDK from '../sdk/sdk.js';
8import * as TextUtils from '../text_utils/text_utils.js'; // eslint-disable-line no-unused-vars
9import * as UI from '../ui/ui.js';
10
Tim van der Lippeeaacb722020-01-10 12:16:0011import {ConsoleFilter, FilterType} from './ConsoleFilter.js';
12import {ConsoleViewMessage} from './ConsoleViewMessage.js'; // eslint-disable-line no-unused-vars
13
Tim van der Lippe9b2f8712020-02-12 17:46:2214export class ConsoleSidebar extends UI.Widget.VBox {
Tim van der Lippeb45d9a02019-11-05 17:24:4115 constructor() {
Blink Reformat4c46d092018-04-07 15:32:3716 super(true);
17 this.setMinimumSize(125, 0);
18
Tim van der Lippe9b2f8712020-02-12 17:46:2219 this._tree = new UI.TreeOutline.TreeOutlineInShadow();
Blink Reformat4c46d092018-04-07 15:32:3720 this._tree.registerRequiredCSS('console/consoleSidebar.css');
21 this._tree.addEventListener(UI.TreeOutline.Events.ElementSelected, this._selectionChanged.bind(this));
22 this.contentElement.appendChild(this._tree.element);
Tim van der Lippe9b2f8712020-02-12 17:46:2223 /** @type {?UI.TreeOutline.TreeElement} */
Blink Reformat4c46d092018-04-07 15:32:3724 this._selectedTreeElement = null;
Tim van der Lippeeaacb722020-01-10 12:16:0025 /** @type {!Array<!FilterTreeElement>} */
Blink Reformat4c46d092018-04-07 15:32:3726 this._treeElements = [];
Paul Lewis2d7d65c2020-03-16 17:26:3027 const selectedFilterSetting =
28 Common.Settings.Settings.instance().createSetting('console.sidebarSelectedFilter', null);
Blink Reformat4c46d092018-04-07 15:32:3729
Tim van der Lippe9b2f8712020-02-12 17:46:2230 const Levels = SDK.ConsoleModel.MessageLevel;
Tim van der Lippeeaacb722020-01-10 12:16:0031 const consoleAPIParsedFilters =
Tim van der Lippe9b2f8712020-02-12 17:46:2232 [{key: FilterType.Source, text: SDK.ConsoleModel.MessageSource.ConsoleAPI, negative: false}];
Blink Reformat4c46d092018-04-07 15:32:3733 this._appendGroup(
Tim van der Lippe9b2f8712020-02-12 17:46:2234 _groupName.All, [], ConsoleFilter.allLevelsFilterValue(), UI.Icon.Icon.create('mediumicon-list'),
Blink Reformat4c46d092018-04-07 15:32:3735 selectedFilterSetting);
36 this._appendGroup(
Tim van der Lippeeaacb722020-01-10 12:16:0037 _groupName.ConsoleAPI, consoleAPIParsedFilters, ConsoleFilter.allLevelsFilterValue(),
Tim van der Lippe9b2f8712020-02-12 17:46:2238 UI.Icon.Icon.create('mediumicon-account-circle'), selectedFilterSetting);
Paul Lewisbf7aa3c2019-11-20 17:03:3839 this._appendGroup(
Tim van der Lippe9b2f8712020-02-12 17:46:2240 _groupName.Error, [], ConsoleFilter.singleLevelMask(Levels.Error),
41 UI.Icon.Icon.create('mediumicon-error-circle'), selectedFilterSetting);
Blink Reformat4c46d092018-04-07 15:32:3742 this._appendGroup(
Tim van der Lippeeaacb722020-01-10 12:16:0043 _groupName.Warning, [], ConsoleFilter.singleLevelMask(Levels.Warning),
Tim van der Lippe9b2f8712020-02-12 17:46:2244 UI.Icon.Icon.create('mediumicon-warning-triangle'), selectedFilterSetting);
Blink Reformat4c46d092018-04-07 15:32:3745 this._appendGroup(
Tim van der Lippe9b2f8712020-02-12 17:46:2246 _groupName.Info, [], ConsoleFilter.singleLevelMask(Levels.Info), UI.Icon.Icon.create('mediumicon-info-circle'),
Tim van der Lippeeaacb722020-01-10 12:16:0047 selectedFilterSetting);
Blink Reformat4c46d092018-04-07 15:32:3748 this._appendGroup(
Tim van der Lippe9b2f8712020-02-12 17:46:2249 _groupName.Verbose, [], ConsoleFilter.singleLevelMask(Levels.Verbose), UI.Icon.Icon.create('mediumicon-bug'),
Paul Lewisbf7aa3c2019-11-20 17:03:3850 selectedFilterSetting);
Blink Reformat4c46d092018-04-07 15:32:3751 const selectedTreeElementName = selectedFilterSetting.get();
52 const defaultTreeElement =
53 this._treeElements.find(x => x.name() === selectedTreeElementName) || this._treeElements[0];
54 defaultTreeElement.select();
55 }
56
57 /**
58 * @param {string} name
Tim van der Lippe9b2f8712020-02-12 17:46:2259 * @param {!Array<!TextUtils.TextUtils.ParsedFilter>} parsedFilters
Blink Reformat4c46d092018-04-07 15:32:3760 * @param {!Object<string, boolean>} levelsMask
61 * @param {!Element} icon
Tim van der Lippe9b2f8712020-02-12 17:46:2262 * @param {!Common.Settings.Setting} selectedFilterSetting
Blink Reformat4c46d092018-04-07 15:32:3763 */
Tim van der Lippeb45d9a02019-11-05 17:24:4164 _appendGroup(name, parsedFilters, levelsMask, icon, selectedFilterSetting) {
Tim van der Lippeeaacb722020-01-10 12:16:0065 const filter = new ConsoleFilter(name, parsedFilters, null, levelsMask);
Paul Lewisbf7aa3c2019-11-20 17:03:3866 const treeElement = new FilterTreeElement(filter, icon, selectedFilterSetting);
Blink Reformat4c46d092018-04-07 15:32:3767 this._tree.appendChild(treeElement);
68 this._treeElements.push(treeElement);
69 }
70
71 clear() {
Tim van der Lippe1d6e57a2019-09-30 11:55:3472 for (const treeElement of this._treeElements) {
Blink Reformat4c46d092018-04-07 15:32:3773 treeElement.clear();
Tim van der Lippe1d6e57a2019-09-30 11:55:3474 }
Blink Reformat4c46d092018-04-07 15:32:3775 }
76
77 /**
Tim van der Lippeeaacb722020-01-10 12:16:0078 * @param {!ConsoleViewMessage} viewMessage
Blink Reformat4c46d092018-04-07 15:32:3779 */
80 onMessageAdded(viewMessage) {
Tim van der Lippe1d6e57a2019-09-30 11:55:3481 for (const treeElement of this._treeElements) {
Blink Reformat4c46d092018-04-07 15:32:3782 treeElement.onMessageAdded(viewMessage);
Tim van der Lippe1d6e57a2019-09-30 11:55:3483 }
Blink Reformat4c46d092018-04-07 15:32:3784 }
85
86 /**
Tim van der Lippeeaacb722020-01-10 12:16:0087 * @param {!ConsoleViewMessage} viewMessage
Blink Reformat4c46d092018-04-07 15:32:3788 * @return {boolean}
89 */
90 shouldBeVisible(viewMessage) {
Tim van der Lippe1d6e57a2019-09-30 11:55:3491 if (!this._selectedTreeElement) {
Blink Reformat4c46d092018-04-07 15:32:3792 return true;
Tim van der Lippe1d6e57a2019-09-30 11:55:3493 }
Blink Reformat4c46d092018-04-07 15:32:3794 return this._selectedTreeElement._filter.shouldBeVisible(viewMessage);
95 }
96
97 /**
Tim van der Lippec02a97c2020-02-14 14:39:2798 * @param {!Common.EventTarget.EventTargetEvent} event
Blink Reformat4c46d092018-04-07 15:32:3799 */
100 _selectionChanged(event) {
Tim van der Lippe9b2f8712020-02-12 17:46:22101 this._selectedTreeElement = /** @type {!UI.TreeOutline.TreeElement} */ (event.data);
Paul Lewisbf7aa3c2019-11-20 17:03:38102 this.dispatchEventToListeners(Events.FilterSelected);
Blink Reformat4c46d092018-04-07 15:32:37103 }
Paul Lewisbf7aa3c2019-11-20 17:03:38104}
Blink Reformat4c46d092018-04-07 15:32:37105
106/** @enum {symbol} */
Paul Lewisbf7aa3c2019-11-20 17:03:38107export const Events = {
Blink Reformat4c46d092018-04-07 15:32:37108 FilterSelected: Symbol('FilterSelected')
109};
110
Tim van der Lippe9b2f8712020-02-12 17:46:22111export class URLGroupTreeElement extends UI.TreeOutline.TreeElement {
Blink Reformat4c46d092018-04-07 15:32:37112 /**
Tim van der Lippeeaacb722020-01-10 12:16:00113 * @param {!ConsoleFilter} filter
Blink Reformat4c46d092018-04-07 15:32:37114 */
Tim van der Lippeb45d9a02019-11-05 17:24:41115 constructor(filter) {
Blink Reformat4c46d092018-04-07 15:32:37116 super(filter.name);
117 this._filter = filter;
118 this._countElement = this.listItemElement.createChild('span', 'count');
Tim van der Lippe9b2f8712020-02-12 17:46:22119 const leadingIcons = [UI.Icon.Icon.create('largeicon-navigator-file')];
Blink Reformat4c46d092018-04-07 15:32:37120 this.setLeadingIcons(leadingIcons);
121 this._messageCount = 0;
122 }
123
124 incrementAndUpdateCounter() {
125 this._messageCount++;
126 this._countElement.textContent = this._messageCount;
127 }
Paul Lewisbf7aa3c2019-11-20 17:03:38128}
Blink Reformat4c46d092018-04-07 15:32:37129
Tim van der Lippe9b2f8712020-02-12 17:46:22130export class FilterTreeElement extends UI.TreeOutline.TreeElement {
Blink Reformat4c46d092018-04-07 15:32:37131 /**
Tim van der Lippeeaacb722020-01-10 12:16:00132 * @param {!ConsoleFilter} filter
Blink Reformat4c46d092018-04-07 15:32:37133 * @param {!Element} icon
Tim van der Lippe9b2f8712020-02-12 17:46:22134 * @param {!Common.Settings.Setting} selectedFilterSetting
Blink Reformat4c46d092018-04-07 15:32:37135 */
Tim van der Lippeb45d9a02019-11-05 17:24:41136 constructor(filter, icon, selectedFilterSetting) {
Blink Reformat4c46d092018-04-07 15:32:37137 super(filter.name);
138 this._filter = filter;
Blink Reformat4c46d092018-04-07 15:32:37139 this._selectedFilterSetting = selectedFilterSetting;
Tim van der Lippeeaacb722020-01-10 12:16:00140 /** @type {!Map<?string, !URLGroupTreeElement>} */
Blink Reformat4c46d092018-04-07 15:32:37141 this._urlTreeElements = new Map();
142 this.setLeadingIcons([icon]);
143 this._messageCount = 0;
144 this._updateCounter();
145 }
146
147 clear() {
148 this._urlTreeElements.clear();
149 this.removeChildren();
150 this._messageCount = 0;
151 this._updateCounter();
152 }
153
154 /**
155 * @return {string}
156 */
157 name() {
158 return this._filter.name;
159 }
160
161 /**
162 * @param {boolean=} selectedByUser
163 * @return {boolean}
164 * @override
165 */
166 onselect(selectedByUser) {
167 this._selectedFilterSetting.set(this._filter.name);
168 return super.onselect(selectedByUser);
169 }
170
171 _updateCounter() {
Christy Chenc891ec62019-10-09 00:31:07172 if (!this._messageCount) {
Paul Lewisbf7aa3c2019-11-20 17:03:38173 this.title = _groupNoMessageTitleMap.get(this._filter.name);
Christy Chenc891ec62019-10-09 00:31:07174 } else if (this._messageCount === 1) {
Paul Lewisbf7aa3c2019-11-20 17:03:38175 this.title = _groupSingularTitleMap.get(this._filter.name);
Christy Chenc891ec62019-10-09 00:31:07176 } else {
Tim van der Lippe93b57c32020-02-20 17:38:44177 this.title = Platform.StringUtilities.sprintf(_groupPluralTitleMap.get(this._filter.name), this._messageCount);
Christy Chenc891ec62019-10-09 00:31:07178 }
179
Blink Reformat4c46d092018-04-07 15:32:37180 this.setExpandable(!!this.childCount());
181 }
182
183 /**
Tim van der Lippeeaacb722020-01-10 12:16:00184 * @param {!ConsoleViewMessage} viewMessage
Blink Reformat4c46d092018-04-07 15:32:37185 */
186 onMessageAdded(viewMessage) {
187 const message = viewMessage.consoleMessage();
Tim van der Lippe9b2f8712020-02-12 17:46:22188 const shouldIncrementCounter = message.type !== SDK.ConsoleModel.MessageType.Command &&
189 message.type !== SDK.ConsoleModel.MessageType.Result && !message.isGroupMessage();
Tim van der Lippe1d6e57a2019-09-30 11:55:34190 if (!this._filter.shouldBeVisible(viewMessage) || !shouldIncrementCounter) {
Blink Reformat4c46d092018-04-07 15:32:37191 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34192 }
Blink Reformat4c46d092018-04-07 15:32:37193 const child = this._childElement(message.url);
194 child.incrementAndUpdateCounter();
195 this._messageCount++;
196 this._updateCounter();
197 }
198
199 /**
200 * @param {string=} url
Tim van der Lippeeaacb722020-01-10 12:16:00201 * @return {!URLGroupTreeElement}
Blink Reformat4c46d092018-04-07 15:32:37202 */
203 _childElement(url) {
204 const urlValue = url || null;
205 let child = this._urlTreeElements.get(urlValue);
Tim van der Lippe1d6e57a2019-09-30 11:55:34206 if (child) {
Blink Reformat4c46d092018-04-07 15:32:37207 return child;
Tim van der Lippe1d6e57a2019-09-30 11:55:34208 }
Blink Reformat4c46d092018-04-07 15:32:37209
210 const filter = this._filter.clone();
Tim van der Lippe9b2f8712020-02-12 17:46:22211 const parsedURL = urlValue ? Common.ParsedURL.ParsedURL.fromString(urlValue) : null;
Tim van der Lippe1d6e57a2019-09-30 11:55:34212 if (urlValue) {
Blink Reformat4c46d092018-04-07 15:32:37213 filter.name = parsedURL ? parsedURL.displayName : urlValue;
Tim van der Lippe1d6e57a2019-09-30 11:55:34214 } else {
Tim van der Lippe9b2f8712020-02-12 17:46:22215 filter.name = Common.UIString.UIString('<other>');
Tim van der Lippe1d6e57a2019-09-30 11:55:34216 }
Tim van der Lippeeaacb722020-01-10 12:16:00217 filter.parsedFilters.push({key: FilterType.Url, text: urlValue, negative: false});
Paul Lewisbf7aa3c2019-11-20 17:03:38218 child = new URLGroupTreeElement(filter);
Tim van der Lippe1d6e57a2019-09-30 11:55:34219 if (urlValue) {
Blink Reformat4c46d092018-04-07 15:32:37220 child.tooltip = urlValue;
Tim van der Lippe1d6e57a2019-09-30 11:55:34221 }
Blink Reformat4c46d092018-04-07 15:32:37222 this._urlTreeElements.set(urlValue, child);
223 this.appendChild(child);
224 return child;
225 }
Paul Lewisbf7aa3c2019-11-20 17:03:38226}
Blink Reformat4c46d092018-04-07 15:32:37227
228/** @enum {string} */
Tim van der Lippec96ccd92019-11-29 16:23:54229const _groupName = {
Christy Chenc891ec62019-10-09 00:31:07230 ConsoleAPI: 'user message',
231 All: 'message',
232 Error: 'error',
233 Warning: 'warning',
234 Info: 'info',
235 Verbose: 'verbose'
Blink Reformat4c46d092018-04-07 15:32:37236};
237
238/** @const {!Map<string, string>} */
Tim van der Lippec96ccd92019-11-29 16:23:54239const _groupSingularTitleMap = new Map([
Paul Lewisbf7aa3c2019-11-20 17:03:38240 [_groupName.ConsoleAPI, ls`1 user message`], [_groupName.All, ls`1 message`], [_groupName.Error, ls`1 error`],
241 [_groupName.Warning, ls`1 warning`], [_groupName.Info, ls`1 info`], [_groupName.Verbose, ls`1 verbose`]
Christy Chenc891ec62019-10-09 00:31:07242]);
243
244/** @const {!Map<string, string>} */
Tim van der Lippec96ccd92019-11-29 16:23:54245const _groupPluralTitleMap = new Map([
Paul Lewisbf7aa3c2019-11-20 17:03:38246 [_groupName.ConsoleAPI, ls`%d user messages`], [_groupName.All, ls`%d messages`], [_groupName.Error, ls`%d errors`],
247 [_groupName.Warning, ls`%d warnings`], [_groupName.Info, ls`%d info`], [_groupName.Verbose, ls`%d verbose`]
Christy Chenc891ec62019-10-09 00:31:07248]);
249
250/** @const {!Map<string, string>} */
Tim van der Lippec96ccd92019-11-29 16:23:54251const _groupNoMessageTitleMap = new Map([
Paul Lewisbf7aa3c2019-11-20 17:03:38252 [_groupName.ConsoleAPI, ls`No user messages`], [_groupName.All, ls`No messages`], [_groupName.Error, ls`No errors`],
253 [_groupName.Warning, ls`No warnings`], [_groupName.Info, ls`No info`], [_groupName.Verbose, ls`No verbose`]
Blink Reformat4c46d092018-04-07 15:32:37254]);