diff --git a/src/vs/base/browser/ui/inputbox/inputBox.css b/src/vs/base/browser/ui/inputbox/inputBox.css index a15a51214e83d81adfb09ace1b7d0cb775518a1c..4edda336bb28ae121bdf0235767d7e5a2df1ee35 100644 --- a/src/vs/base/browser/ui/inputbox/inputBox.css +++ b/src/vs/base/browser/ui/inputbox/inputBox.css @@ -35,17 +35,6 @@ position: relative; width: 100%; height: 100%; - display: flex; - justify-content: flex-start; -} - -.vs-dark .monaco-inputbox > .wrapper { - background-color: var(--input-bgcolor); -} - -.monaco-inputbox > .wrapper .icon { - width: 16px; - height: 22px; } .monaco-inputbox > .wrapper > .input { diff --git a/src/vs/base/browser/ui/inputbox/inputBox.ts b/src/vs/base/browser/ui/inputbox/inputBox.ts index e06e86def7e315593c3da0708d69f61b3f84b17c..5013288e7da5a2b9e82f00b632b08bd95ab95eef 100644 --- a/src/vs/base/browser/ui/inputbox/inputBox.ts +++ b/src/vs/base/browser/ui/inputbox/inputBox.ts @@ -27,7 +27,6 @@ export interface IInputOptions { validationOptions?: IInputValidationOptions; flexibleHeight?: boolean; actions?: IAction[]; - iconClass?: string; } export interface IInputValidator { @@ -97,9 +96,6 @@ export class InputBox extends Widget { let tagName = this.options.flexibleHeight ? 'textarea' : 'input'; let wrapper = dom.append(this.element, $('.wrapper')); - if (this.options.iconClass) { - dom.append(wrapper, $('span.icon.' + this.options.iconClass)); - } this.input = dom.append(wrapper, $(tagName + '.input')); this.input.setAttribute('autocorrect', 'off'); this.input.setAttribute('autocapitalize', 'off'); diff --git a/src/vs/workbench/parts/markers/browser/markersPanelActions.ts b/src/vs/workbench/parts/markers/browser/markersPanelActions.ts index 33a5c368f9f01379914d277f6af976a275efdfa0..0653fda65ceaaf5243a0c15808c74c3bf004aeb9 100644 --- a/src/vs/workbench/parts/markers/browser/markersPanelActions.ts +++ b/src/vs/workbench/parts/markers/browser/markersPanelActions.ts @@ -37,8 +37,7 @@ export class FilterInputBoxActionItem extends BaseActionItem { DOM.addClass(container, 'markers-panel-action-filter'); var filterInputBox = new InputBox(container, this.contextViewService, { placeholder: Messages.MARKERS_PANEL_FILTER_PLACEHOLDER, - ariaLabel: Messages.MARKERS_PANEL_FILTER_PLACEHOLDER, - iconClass: 'filterIcon' + ariaLabel: Messages.MARKERS_PANEL_FILTER_PLACEHOLDER }); filterInputBox.value= this.markersPanel.markersModel.filterOptions.completeFilter; this.toDispose.push(filterInputBox.onDidChange((filter: string) => { diff --git a/src/vs/workbench/parts/markers/browser/markersTreeViewer.ts b/src/vs/workbench/parts/markers/browser/markersTreeViewer.ts index b88faa41af3da2332382b91a56df0ea3a1b756bb..e0d1cb7fdf97ee5eb0d7687a924e843645c46d6d 100644 --- a/src/vs/workbench/parts/markers/browser/markersTreeViewer.ts +++ b/src/vs/workbench/parts/markers/browser/markersTreeViewer.ts @@ -27,8 +27,9 @@ interface IResourceTemplateData { interface IMarkerTemplateData { icon: HTMLElement; - line: HTMLElement; description: HighlightedLabel; + lnCol: HTMLElement; + source: HighlightedLabel; } export class DataSource implements IDataSource { @@ -115,8 +116,9 @@ export class Renderer implements IRenderer { private renderMarkerTemplate(container: HTMLElement): IMarkerTemplateData { var data: IMarkerTemplateData = Object.create(null); data.icon = dom.append(container, dom.emmet('.marker-icon')); - data.line = dom.append(container, dom.emmet('span.marker-line')); data.description = new HighlightedLabel(dom.append(container, dom.emmet('.marker-description'))); + data.lnCol = dom.append(container, dom.emmet('span.marker-line')); + data.source = new HighlightedLabel(dom.append(container, dom.emmet('.marker-source'))); return data; } @@ -138,8 +140,19 @@ export class Renderer implements IRenderer { private renderMarkerElement(tree: ITree, element: Marker, templateData: IMarkerTemplateData) { let marker= element.marker; templateData.icon.className = 'icon ' + Renderer.iconClassNameFor(marker); - templateData.line.textContent= Messages.MARKERS_PANEL_AT_LINE_NUMBER(marker.startLineNumber); templateData.description.set(marker.message, element.labelMatches); + + templateData.lnCol.textContent= Messages.MARKERS_PANEL_AT_LINE_COL_NUMBER(marker.startLineNumber, marker.startColumn); + let title= Messages.MARKERS_PANEL_TITLE_AT_LINE_COL_NUMBER(marker.startLineNumber, marker.startColumn); + templateData.lnCol.title= title; + templateData.lnCol.setAttribute('aria-label', title); + + if (marker.source) { + templateData.source.set(marker.source, element.sourceMatches); + let title= Messages.MARKERS_PANEL_TITLE_SOURCE(marker.source); + templateData.source.element.title= title; + templateData.source.element.setAttribute('aria-label', title); + } } private static iconClassNameFor(element: IMarker): string { diff --git a/src/vs/workbench/parts/markers/browser/media/filter.svg b/src/vs/workbench/parts/markers/browser/media/filter.svg deleted file mode 100644 index c033c51966c243253d3da431c19c6d36c7b41261..0000000000000000000000000000000000000000 --- a/src/vs/workbench/parts/markers/browser/media/filter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/vs/workbench/parts/markers/browser/media/markers.css b/src/vs/workbench/parts/markers/browser/media/markers.css index d1a7fac722a795ab27b1ee643aae7e29ddc09f1f..5a974003c0fd88faea07f06762ca145fb32ff965 100644 --- a/src/vs/workbench/parts/markers/browser/media/markers.css +++ b/src/vs/workbench/parts/markers/browser/media/markers.css @@ -40,6 +40,7 @@ } .markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry { + display: flex; line-height: 22px; } @@ -57,16 +58,24 @@ } .markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .marker-description { - margin-left: 3px; + width: 90%; } -.markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .resource-label-container .highlight, -.markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .marker-description .highlight { +.markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .marker-line, +.markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .marker-source { + opacity: 0.6; + font-size: 85%; + margin-right: 5px; + width: 10em; + overflow: hidden; + text-overflow: ellipsis +} + +.markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .highlight { background-color: rgba(234, 92, 0, 0.3); } -.hc-black .markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .resource-label-container .highlight, -.hc-black .markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .marker-description .highlight { +.hc-black .markers-panel .markers-panel-container .tree-container .markers-panel-tree-entry .highlight { background: none !important; border: 1px dotted #f38518; } @@ -84,8 +93,6 @@ background: url('status-warning.svg') center center no-repeat; } -.markers-panel-action-toggle-errors-on, -.markers-panel-action-toggle-errors-off, .markers-panel .icon.error { background: url('status-error.svg') center center no-repeat; } @@ -98,8 +105,6 @@ background: url('status-warning-inverse.svg') center center no-repeat; } -.vs-dark .markers-panel-action-toggle-errors-on, -.vs-dark .markers-panel-action-toggle-errors-off, .vs-dark .markers-panel .icon.error { background: url('status-error-inverse.svg') center center no-repeat; } diff --git a/src/vs/workbench/parts/markers/common/markersModel.ts b/src/vs/workbench/parts/markers/common/markersModel.ts index b06010ea93c2f99aa6608efc36054b7848a2e763..12cb70af6b08546719fa4b00af3d4b94107a0f4b 100644 --- a/src/vs/workbench/parts/markers/common/markersModel.ts +++ b/src/vs/workbench/parts/markers/common/markersModel.ts @@ -12,7 +12,7 @@ import Severity from 'vs/base/common/severity'; import URI from 'vs/base/common/uri'; import { Range } from 'vs/editor/common/core/range'; import { IMarker, MarkerStatistics } from 'vs/platform/markers/common/markers'; -import {IFilter, IMatch, or, matchesContiguousSubString, matchesPrefix} from 'vs/base/common/filters'; +import {IFilter, IMatch, or, matchesContiguousSubString, matchesPrefix, matchesFuzzy} from 'vs/base/common/filters'; import Messages from 'vs/workbench/parts/markers/common/messages'; export class Resource { @@ -27,12 +27,15 @@ export class Resource { } export class Marker { - constructor(public id:string, public marker: IMarker, public labelMatches: IMatch[] = []){} + constructor(public id:string, public marker: IMarker, + public labelMatches: IMatch[] = [], + public sourceMatches: IMatch[] = []){} } export class FilterOptions { static _filter: IFilter = or(matchesPrefix, matchesContiguousSubString); + static _fuzzyFilter: IFilter = or(matchesPrefix, matchesContiguousSubString, matchesFuzzy); private _filterErrors: boolean= false; private _filterWarnings: boolean= false; @@ -191,8 +194,9 @@ export class MarkersModel { } private toMarker(marker: IMarker, index: number):Marker { - const labelMatches = FilterOptions._filter(this._filterOptions.filter, marker.message); - return new Marker(marker.resource.toString() + index, marker, labelMatches || []); + const labelMatches = FilterOptions._fuzzyFilter(this._filterOptions.filter, marker.message); + const sourceMatches = !!marker.source ? FilterOptions._filter(this._filterOptions.filter, marker.source) : []; + return new Marker(marker.resource.toString() + index, marker, labelMatches || [], sourceMatches || []); } private filterMarker(marker: IMarker):boolean { @@ -206,12 +210,15 @@ export class MarkersModel { if (this._filterOptions.filterInfos && Severity.Info === marker.severity) { return true; } - if (!!FilterOptions._filter(this._filterOptions.filter, marker.message)) { + if (!!FilterOptions._fuzzyFilter(this._filterOptions.filter, marker.message)) { return true; } if (!!FilterOptions._filter(this._filterOptions.filter, paths.basename(marker.resource.fsPath))) { return true; } + if (!!marker.source && !!FilterOptions._filter(this._filterOptions.filter, marker.source)) { + return true; + } return false; } return true; diff --git a/src/vs/workbench/parts/markers/common/messages.ts b/src/vs/workbench/parts/markers/common/messages.ts index 9971d5ed32e5a9e0eec105df4df219466764276b..e6c3e2d7889614513d673d2c7c64ddcdb1a320dc 100644 --- a/src/vs/workbench/parts/markers/common/messages.ts +++ b/src/vs/workbench/parts/markers/common/messages.ts @@ -31,5 +31,7 @@ export default class Messages { public static MARKERS_PANEL_SINGLE_UNKNOWN_LABEL:string= nls.localize('markers.panel.single.unknown.label', "1 Unknown"); public static MARKERS_PANEL_MULTIPLE_UNKNOWNS_LABEL=(noOfUnknowns: number):string=>{return nls.localize('markers.panel.multiple.unknowns.label', "{0} Unknowns", ''+noOfUnknowns);}; - public static MARKERS_PANEL_AT_LINE_NUMBER= (lineNumber: number):string=>{return nls.localize('markers.panel.at.line.number', "Line {0}:", '' + lineNumber);} + public static MARKERS_PANEL_AT_LINE_COL_NUMBER= (ln: number, col: number):string=>{return nls.localize('markers.panel.at.ln.col.number', "Ln {0}, Col {1}", '' + ln, '' + col);} + public static MARKERS_PANEL_TITLE_AT_LINE_COL_NUMBER= (ln: number, col: number):string=>{return nls.localize('markers.panel.title.at.ln.col.number', "At line {0}, column {1}", '' + ln, '' + col);} + public static MARKERS_PANEL_TITLE_SOURCE= (source: string):string=>{return nls.localize('markers.panel.title.source', "Built by {0}", source);} } \ No newline at end of file