UNPKG

monaco-editor

Version:
170 lines (169 loc) 7.96 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); } return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); 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 { Color } from '../../../base/common/color.js'; import { Emitter } from '../../../base/common/event.js'; import * as objects from '../../../base/common/objects.js'; import * as strings from '../../../base/common/strings.js'; import './media/peekViewWidget.css'; 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 { RawContextKey } from '../../../platform/contextkey/common/contextkey.js'; export var PeekContext; (function (PeekContext) { PeekContext.inPeekEditor = new RawContextKey('inReferenceSearchEditor', true); PeekContext.notInPeekEditor = PeekContext.inPeekEditor.toNegated(); })(PeekContext || (PeekContext = {})); export function getOuterEditor(accessor) { var editor = accessor.get(ICodeEditorService).getFocusedCodeEditor(); if (editor instanceof EmbeddedCodeEditorWidget) { return editor.getParentEditor(); } return editor; } var defaultOptions = { headerBackgroundColor: Color.white, primaryHeadingColor: Color.fromHex('#333333'), secondaryHeadingColor: Color.fromHex('#6c6c6cb3') }; var PeekViewWidget = /** @class */ (function (_super) { __extends(PeekViewWidget, _super); function PeekViewWidget(editor, options) { if (options === void 0) { options = {}; } var _this = _super.call(this, editor, options) || this; _this._onDidClose = new Emitter(); objects.mixin(_this.options, defaultOptions, false); return _this; } PeekViewWidget.prototype.dispose = function () { _super.prototype.dispose.call(this); this._onDidClose.fire(this); }; Object.defineProperty(PeekViewWidget.prototype, "onDidClose", { get: function () { return this._onDidClose.event; }, enumerable: true, configurable: true }); PeekViewWidget.prototype.style = function (styles) { var 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.prototype.style.call(this, styles); }; PeekViewWidget.prototype._applyStyles = function () { _super.prototype._applyStyles.call(this); var options = this.options; if (this._headElement) { this._headElement.style.backgroundColor = options.headerBackgroundColor.toString(); } if (this._primaryHeading) { this._primaryHeading.style.color = options.primaryHeadingColor.toString(); } if (this._secondaryHeading) { this._secondaryHeading.style.color = options.secondaryHeadingColor.toString(); } if (this._bodyElement) { this._bodyElement.style.borderColor = options.frameColor.toString(); } }; PeekViewWidget.prototype._fillContainer = function (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); }; PeekViewWidget.prototype._fillHead = function (container) { var _this = this; var titleElement = dom.$('.peekview-title'); dom.append(this._headElement, titleElement); dom.addStandardDisposableListener(titleElement, 'click', function (event) { return _this._onTitleClick(event); }); this._primaryHeading = dom.$('span.filename'); this._secondaryHeading = dom.$('span.dirname'); this._metaHeading = dom.$('span.meta'); dom.append(titleElement, this._primaryHeading, this._secondaryHeading, this._metaHeading); var actionsContainer = dom.$('.peekview-actions'); dom.append(this._headElement, actionsContainer); var actionBarOptions = this._getActionBarOptions(); this._actionbarWidget = new ActionBar(actionsContainer, actionBarOptions); this._disposables.push(this._actionbarWidget); this._actionbarWidget.push(new Action('peekview.close', nls.localize('label.close', "Close"), 'close-peekview-action', true, function () { _this.dispose(); return null; }), { label: false, icon: true }); }; PeekViewWidget.prototype._getActionBarOptions = function () { return {}; }; PeekViewWidget.prototype._onTitleClick = function (event) { // implement me }; PeekViewWidget.prototype.setTitle = function (primaryHeading, secondaryHeading) { this._primaryHeading.innerHTML = strings.escape(primaryHeading); this._primaryHeading.setAttribute('aria-label', primaryHeading); if (secondaryHeading) { this._secondaryHeading.innerHTML = strings.escape(secondaryHeading); } else { dom.clearNode(this._secondaryHeading); } }; PeekViewWidget.prototype.setMetaTitle = function (value) { if (value) { this._metaHeading.innerHTML = strings.escape(value); } else { dom.clearNode(this._metaHeading); } }; PeekViewWidget.prototype._doLayout = function (heightInPixel, widthInPixel) { if (!this._isShowing && heightInPixel < 0) { // Looks like the view zone got folded away! this.dispose(); return; } var headHeight = Math.ceil(this.editor.getConfiguration().lineHeight * 1.2); var bodyHeight = heightInPixel - (headHeight + 2 /* the border-top/bottom width*/); this._doLayoutHead(headHeight, widthInPixel); this._doLayoutBody(bodyHeight, widthInPixel); }; PeekViewWidget.prototype._doLayoutHead = function (heightInPixel, widthInPixel) { this._headElement.style.height = strings.format('{0}px', heightInPixel); this._headElement.style.lineHeight = this._headElement.style.height; }; PeekViewWidget.prototype._doLayoutBody = function (heightInPixel, widthInPixel) { this._bodyElement.style.height = strings.format('{0}px', heightInPixel); }; return PeekViewWidget; }(ZoneWidget)); export { PeekViewWidget };