UNPKG

sussudio

Version:

An unofficial VS Code Internal API

82 lines (81 loc) 3.66 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as dom from "../../dom.mjs"; import { StandardKeyboardEvent } from "../../keyboardEvent.mjs"; import { DomScrollableElement } from "../scrollbar/scrollableElement.mjs"; import { Disposable } from "../../../common/lifecycle.mjs"; import "../../../../css!./hover.mjs"; const $ = dom.$; export var HoverPosition; (function (HoverPosition) { HoverPosition[HoverPosition["LEFT"] = 0] = "LEFT"; HoverPosition[HoverPosition["RIGHT"] = 1] = "RIGHT"; HoverPosition[HoverPosition["BELOW"] = 2] = "BELOW"; HoverPosition[HoverPosition["ABOVE"] = 3] = "ABOVE"; })(HoverPosition || (HoverPosition = {})); export class HoverWidget extends Disposable { containerDomNode; contentsDomNode; scrollbar; constructor() { super(); this.containerDomNode = document.createElement('div'); this.containerDomNode.className = 'monaco-hover'; this.containerDomNode.tabIndex = 0; this.containerDomNode.setAttribute('role', 'tooltip'); this.contentsDomNode = document.createElement('div'); this.contentsDomNode.className = 'monaco-hover-content'; this.scrollbar = this._register(new DomScrollableElement(this.contentsDomNode, { consumeMouseWheelIfScrollbarIsNeeded: true })); this.containerDomNode.appendChild(this.scrollbar.getDomNode()); } onContentsChanged() { this.scrollbar.scanDomNode(); } } export class HoverAction extends Disposable { static render(parent, actionOptions, keybindingLabel) { return new HoverAction(parent, actionOptions, keybindingLabel); } actionContainer; action; constructor(parent, actionOptions, keybindingLabel) { super(); this.actionContainer = dom.append(parent, $('div.action-container')); this.actionContainer.setAttribute('tabindex', '0'); this.action = dom.append(this.actionContainer, $('a.action')); this.action.setAttribute('role', 'button'); if (actionOptions.iconClass) { dom.append(this.action, $(`span.icon.${actionOptions.iconClass}`)); } const label = dom.append(this.action, $('span')); label.textContent = keybindingLabel ? `${actionOptions.label} (${keybindingLabel})` : actionOptions.label; this._register(dom.addDisposableListener(this.actionContainer, dom.EventType.CLICK, e => { e.stopPropagation(); e.preventDefault(); actionOptions.run(this.actionContainer); })); this._register(dom.addDisposableListener(this.actionContainer, dom.EventType.KEY_DOWN, e => { const event = new StandardKeyboardEvent(e); if (event.equals(3 /* KeyCode.Enter */) || event.equals(10 /* KeyCode.Space */)) { e.stopPropagation(); e.preventDefault(); actionOptions.run(this.actionContainer); } })); this.setEnabled(true); } setEnabled(enabled) { if (enabled) { this.actionContainer.classList.remove('disabled'); this.actionContainer.removeAttribute('aria-disabled'); } else { this.actionContainer.classList.add('disabled'); this.actionContainer.setAttribute('aria-disabled', 'true'); } } }