123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
- };
- var __param = (this && this.__param) || function (paramIndex, decorator) {
- return function (target, key) { decorator(target, key, paramIndex); }
- };
- import * as dom from '../../../base/browser/dom.js';
- import { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';
- import { Action } from '../../../base/common/actions.js';
- import { Codicon } from '../../../base/common/codicons.js';
- import { Color } from '../../../base/common/color.js';
- import { Emitter } from '../../../base/common/event.js';
- import * as objects from '../../../base/common/objects.js';
- import './media/peekViewWidget.css';
- import { registerEditorContribution } from '../../browser/editorExtensions.js';
- import { ICodeEditorService } from '../../browser/services/codeEditorService.js';
- import { EmbeddedCodeEditorWidget } from '../../browser/widget/embeddedCodeEditorWidget.js';
- import { ZoneWidget } from '../zoneWidget/zoneWidget.js';
- import * as nls from '../../../nls.js';
- import { createActionViewItem } from '../../../platform/actions/browser/menuEntryActionViewItem.js';
- import { IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';
- import { registerSingleton } from '../../../platform/instantiation/common/extensions.js';
- import { createDecorator, IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';
- import { activeContrastBorder, contrastBorder, editorInfoForeground, registerColor, transparent } from '../../../platform/theme/common/colorRegistry.js';
- export const IPeekViewService = createDecorator('IPeekViewService');
- registerSingleton(IPeekViewService, class {
- constructor() {
- this._widgets = new Map();
- }
- addExclusiveWidget(editor, widget) {
- const existing = this._widgets.get(editor);
- if (existing) {
- existing.listener.dispose();
- existing.widget.dispose();
- }
- const remove = () => {
- const data = this._widgets.get(editor);
- if (data && data.widget === widget) {
- data.listener.dispose();
- this._widgets.delete(editor);
- }
- };
- this._widgets.set(editor, { widget, listener: widget.onDidClose(remove) });
- }
- });
- export var PeekContext;
- (function (PeekContext) {
- PeekContext.inPeekEditor = new RawContextKey('inReferenceSearchEditor', true, nls.localize('inReferenceSearchEditor', "Whether the current code editor is embedded inside peek"));
- PeekContext.notInPeekEditor = PeekContext.inPeekEditor.toNegated();
- })(PeekContext || (PeekContext = {}));
- let PeekContextController = class PeekContextController {
- constructor(editor, contextKeyService) {
- if (editor instanceof EmbeddedCodeEditorWidget) {
- PeekContext.inPeekEditor.bindTo(contextKeyService);
- }
- }
- dispose() { }
- };
- PeekContextController.ID = 'editor.contrib.referenceController';
- PeekContextController = __decorate([
- __param(1, IContextKeyService)
- ], PeekContextController);
- registerEditorContribution(PeekContextController.ID, PeekContextController);
- export function getOuterEditor(accessor) {
- let editor = accessor.get(ICodeEditorService).getFocusedCodeEditor();
- if (editor instanceof EmbeddedCodeEditorWidget) {
- return editor.getParentEditor();
- }
- return editor;
- }
- const defaultOptions = {
- headerBackgroundColor: Color.white,
- primaryHeadingColor: Color.fromHex('#333333'),
- secondaryHeadingColor: Color.fromHex('#6c6c6cb3')
- };
- let PeekViewWidget = class PeekViewWidget extends ZoneWidget {
- constructor(editor, options, instantiationService) {
- super(editor, options);
- this.instantiationService = instantiationService;
- this._onDidClose = new Emitter();
- this.onDidClose = this._onDidClose.event;
- objects.mixin(this.options, defaultOptions, false);
- }
- dispose() {
- if (!this.disposed) {
- this.disposed = true; // prevent consumers who dispose on onDidClose from looping
- super.dispose();
- this._onDidClose.fire(this);
- }
- }
- style(styles) {
- let options = this.options;
- if (styles.headerBackgroundColor) {
- options.headerBackgroundColor = styles.headerBackgroundColor;
- }
- if (styles.primaryHeadingColor) {
- options.primaryHeadingColor = styles.primaryHeadingColor;
- }
- if (styles.secondaryHeadingColor) {
- options.secondaryHeadingColor = styles.secondaryHeadingColor;
- }
- super.style(styles);
- }
- _applyStyles() {
- super._applyStyles();
- let options = this.options;
- if (this._headElement && options.headerBackgroundColor) {
- this._headElement.style.backgroundColor = options.headerBackgroundColor.toString();
- }
- if (this._primaryHeading && options.primaryHeadingColor) {
- this._primaryHeading.style.color = options.primaryHeadingColor.toString();
- }
- if (this._secondaryHeading && options.secondaryHeadingColor) {
- this._secondaryHeading.style.color = options.secondaryHeadingColor.toString();
- }
- if (this._bodyElement && options.frameColor) {
- this._bodyElement.style.borderColor = options.frameColor.toString();
- }
- }
- _fillContainer(container) {
- this.setCssClass('peekview-widget');
- this._headElement = dom.$('.head');
- this._bodyElement = dom.$('.body');
- this._fillHead(this._headElement);
- this._fillBody(this._bodyElement);
- container.appendChild(this._headElement);
- container.appendChild(this._bodyElement);
- }
- _fillHead(container, noCloseAction) {
- const titleElement = dom.$('.peekview-title');
- if (this.options.supportOnTitleClick) {
- titleElement.classList.add('clickable');
- dom.addStandardDisposableListener(titleElement, 'click', event => this._onTitleClick(event));
- }
- dom.append(this._headElement, titleElement);
- this._fillTitleIcon(titleElement);
- this._primaryHeading = dom.$('span.filename');
- this._secondaryHeading = dom.$('span.dirname');
- this._metaHeading = dom.$('span.meta');
- dom.append(titleElement, this._primaryHeading, this._secondaryHeading, this._metaHeading);
- const actionsContainer = dom.$('.peekview-actions');
- dom.append(this._headElement, actionsContainer);
- const actionBarOptions = this._getActionBarOptions();
- this._actionbarWidget = new ActionBar(actionsContainer, actionBarOptions);
- this._disposables.add(this._actionbarWidget);
- if (!noCloseAction) {
- this._actionbarWidget.push(new Action('peekview.close', nls.localize('label.close', "Close"), Codicon.close.classNames, true, () => {
- this.dispose();
- return Promise.resolve();
- }), { label: false, icon: true });
- }
- }
- _fillTitleIcon(container) {
- }
- _getActionBarOptions() {
- return {
- actionViewItemProvider: createActionViewItem.bind(undefined, this.instantiationService),
- orientation: 0 /* HORIZONTAL */
- };
- }
- _onTitleClick(event) {
- // implement me if supportOnTitleClick option is set
- }
- setTitle(primaryHeading, secondaryHeading) {
- if (this._primaryHeading && this._secondaryHeading) {
- this._primaryHeading.innerText = primaryHeading;
- this._primaryHeading.setAttribute('title', primaryHeading);
- if (secondaryHeading) {
- this._secondaryHeading.innerText = secondaryHeading;
- }
- else {
- dom.clearNode(this._secondaryHeading);
- }
- }
- }
- setMetaTitle(value) {
- if (this._metaHeading) {
- if (value) {
- this._metaHeading.innerText = value;
- dom.show(this._metaHeading);
- }
- else {
- dom.hide(this._metaHeading);
- }
- }
- }
- _doLayout(heightInPixel, widthInPixel) {
- if (!this._isShowing && heightInPixel < 0) {
- // Looks like the view zone got folded away!
- this.dispose();
- return;
- }
- const headHeight = Math.ceil(this.editor.getOption(58 /* lineHeight */) * 1.2);
- const bodyHeight = Math.round(heightInPixel - (headHeight + 2 /* the border-top/bottom width*/));
- this._doLayoutHead(headHeight, widthInPixel);
- this._doLayoutBody(bodyHeight, widthInPixel);
- }
- _doLayoutHead(heightInPixel, widthInPixel) {
- if (this._headElement) {
- this._headElement.style.height = `${heightInPixel}px`;
- this._headElement.style.lineHeight = this._headElement.style.height;
- }
- }
- _doLayoutBody(heightInPixel, widthInPixel) {
- if (this._bodyElement) {
- this._bodyElement.style.height = `${heightInPixel}px`;
- }
- }
- };
- PeekViewWidget = __decorate([
- __param(2, IInstantiationService)
- ], PeekViewWidget);
- export { PeekViewWidget };
- export const peekViewTitleBackground = registerColor('peekViewTitle.background', { dark: transparent(editorInfoForeground, .1), light: transparent(editorInfoForeground, .1), hc: null }, nls.localize('peekViewTitleBackground', 'Background color of the peek view title area.'));
- export const peekViewTitleForeground = registerColor('peekViewTitleLabel.foreground', { dark: Color.white, light: Color.black, hc: Color.white }, nls.localize('peekViewTitleForeground', 'Color of the peek view title.'));
- export const peekViewTitleInfoForeground = registerColor('peekViewTitleDescription.foreground', { dark: '#ccccccb3', light: '#616161', hc: '#FFFFFF99' }, nls.localize('peekViewTitleInfoForeground', 'Color of the peek view title info.'));
- export const peekViewBorder = registerColor('peekView.border', { dark: editorInfoForeground, light: editorInfoForeground, hc: contrastBorder }, nls.localize('peekViewBorder', 'Color of the peek view borders and arrow.'));
- export const peekViewResultsBackground = registerColor('peekViewResult.background', { dark: '#252526', light: '#F3F3F3', hc: Color.black }, nls.localize('peekViewResultsBackground', 'Background color of the peek view result list.'));
- export const peekViewResultsMatchForeground = registerColor('peekViewResult.lineForeground', { dark: '#bbbbbb', light: '#646465', hc: Color.white }, nls.localize('peekViewResultsMatchForeground', 'Foreground color for line nodes in the peek view result list.'));
- export const peekViewResultsFileForeground = registerColor('peekViewResult.fileForeground', { dark: Color.white, light: '#1E1E1E', hc: Color.white }, nls.localize('peekViewResultsFileForeground', 'Foreground color for file nodes in the peek view result list.'));
- export const peekViewResultsSelectionBackground = registerColor('peekViewResult.selectionBackground', { dark: '#3399ff33', light: '#3399ff33', hc: null }, nls.localize('peekViewResultsSelectionBackground', 'Background color of the selected entry in the peek view result list.'));
- export const peekViewResultsSelectionForeground = registerColor('peekViewResult.selectionForeground', { dark: Color.white, light: '#6C6C6C', hc: Color.white }, nls.localize('peekViewResultsSelectionForeground', 'Foreground color of the selected entry in the peek view result list.'));
- export const peekViewEditorBackground = registerColor('peekViewEditor.background', { dark: '#001F33', light: '#F2F8FC', hc: Color.black }, nls.localize('peekViewEditorBackground', 'Background color of the peek view editor.'));
- export const peekViewEditorGutterBackground = registerColor('peekViewEditorGutter.background', { dark: peekViewEditorBackground, light: peekViewEditorBackground, hc: peekViewEditorBackground }, nls.localize('peekViewEditorGutterBackground', 'Background color of the gutter in the peek view editor.'));
- export const peekViewResultsMatchHighlight = registerColor('peekViewResult.matchHighlightBackground', { dark: '#ea5c004d', light: '#ea5c004d', hc: null }, nls.localize('peekViewResultsMatchHighlight', 'Match highlight color in the peek view result list.'));
- export const peekViewEditorMatchHighlight = registerColor('peekViewEditor.matchHighlightBackground', { dark: '#ff8f0099', light: '#f5d802de', hc: null }, nls.localize('peekViewEditorMatchHighlight', 'Match highlight color in the peek view editor.'));
- export const peekViewEditorMatchHighlightBorder = registerColor('peekViewEditor.matchHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('peekViewEditorMatchHighlightBorder', 'Match highlight border in the peek view editor.'));
|