UNPKG

@dcloudio/uni-debugger

Version:

uni-app debugger

98 lines (87 loc) 3.22 kB
// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * @implements {UI.ToolbarItem.Provider} * @unrestricted */ ConsoleCounters.WarningErrorCounter = class { constructor() { ConsoleCounters.WarningErrorCounter._instanceForTest = this; this._counter = createElement('div'); this._counter.addEventListener('click', Common.console.show.bind(Common.console), false); this._toolbarItem = new UI.ToolbarItem(this._counter); const shadowRoot = UI.createShadowRootWithCoreStyles(this._counter, 'console_counters/errorWarningCounter.css'); this._errors = this._createItem(shadowRoot, 'smallicon-error'); this._warnings = this._createItem(shadowRoot, 'smallicon-warning'); this._titles = []; this._errorCount = -1; this._warningCount = -1; this._throttler = new Common.Throttler(100); SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._update, this); SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, this._update, this); SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, this._update, this); this._update(); } _updatedForTest() { // Sniffed in tests. } /** * @param {!Node} shadowRoot * @param {string} iconType * @return {!{item: !Element, text: !Element}} */ _createItem(shadowRoot, iconType) { const item = createElementWithClass('span', 'counter-item'); const icon = item.createChild('label', '', 'dt-icon-label'); icon.type = iconType; const text = icon.createChild('span'); shadowRoot.appendChild(item); return {item: item, text: text}; } /** * @param {!{item: !Element, text: !Element}} item * @param {number} count * @param {boolean} first * @param {string} title */ _updateItem(item, count, first, title) { item.item.classList.toggle('hidden', !count); item.item.classList.toggle('counter-item-first', first); item.text.textContent = count; if (count) this._titles.push(title); } _update() { this._updatingForTest = true; this._throttler.schedule(this._updateThrottled.bind(this)); } /** * @return {!Promise} */ _updateThrottled() { const errors = SDK.consoleModel.errors(); const warnings = SDK.consoleModel.warnings(); if (errors === this._errorCount && warnings === this._warningCount) return Promise.resolve(); this._errorCount = errors; this._warningCount = warnings; this._titles = []; this._toolbarItem.setVisible(!!(errors || warnings)); this._updateItem(this._errors, errors, false, Common.UIString(errors === 1 ? '%d error' : '%d errors', errors)); this._updateItem( this._warnings, warnings, !errors, Common.UIString(warnings === 1 ? '%d warning' : '%d warnings', warnings)); this._counter.title = this._titles.join(', '); UI.inspectorView.toolbarItemResized(); this._updatingForTest = false; this._updatedForTest(); return Promise.resolve(); } /** * @override * @return {?UI.ToolbarItem} */ item() { return this._toolbarItem; } };