| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /*---------------------------------------------------------------------------------------------
- * 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.js';
- import { StandardKeyboardEvent } from '../../keyboardEvent.js';
- import { DomScrollableElement } from '../scrollbar/scrollableElement.js';
- import { Disposable } from '../../../common/lifecycle.js';
- import './hover.css';
- const $ = dom.$;
- export class HoverWidget extends Disposable {
- 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 {
- 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_UP, e => {
- const event = new StandardKeyboardEvent(e);
- if (event.equals(3 /* KeyCode.Enter */)) {
- e.stopPropagation();
- e.preventDefault();
- actionOptions.run(this.actionContainer);
- }
- }));
- this.setEnabled(true);
- }
- static render(parent, actionOptions, keybindingLabel) {
- return new HoverAction(parent, actionOptions, keybindingLabel);
- }
- 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');
- }
- }
- }
|