mirror of
https://github.com/Microsoft/vscode
synced 2024-10-05 19:02:54 +00:00
Merge pull request #214470 from microsoft/tyriar/204965_240606
Rename updatable hover to managed hover, tweak arg names and docs
This commit is contained in:
commit
a38eb611fa
|
@ -19,7 +19,7 @@ import * as platform from 'vs/base/common/platform';
|
|||
import * as types from 'vs/base/common/types';
|
||||
import 'vs/css!./actionbar';
|
||||
import * as nls from 'vs/nls';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
|
||||
export interface IBaseActionViewItemOptions {
|
||||
|
@ -36,7 +36,7 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem {
|
|||
_context: unknown;
|
||||
readonly _action: IAction;
|
||||
|
||||
private customHover?: IUpdatableHover;
|
||||
private customHover?: IManagedHover;
|
||||
|
||||
get action() {
|
||||
return this._action;
|
||||
|
@ -233,7 +233,7 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem {
|
|||
} else {
|
||||
if (!this.customHover && title !== '') {
|
||||
const hoverDelegate = this.options.hoverDelegate ?? getDefaultHoverDelegate('element');
|
||||
this.customHover = this._store.add(getBaseLayerHoverDelegate().setupUpdatableHover(hoverDelegate, this.element, title));
|
||||
this.customHover = this._store.add(getBaseLayerHoverDelegate().setupManagedHover(hoverDelegate, this.element, title));
|
||||
} else if (this.customHover) {
|
||||
this.customHover.update(title);
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecyc
|
|||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
import 'vs/css!./button';
|
||||
import { localize } from 'vs/nls';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { IActionProvider } from 'vs/base/browser/ui/dropdown/dropdown';
|
||||
|
||||
|
@ -80,7 +80,7 @@ export class Button extends Disposable implements IButton {
|
|||
protected _label: string | IMarkdownString = '';
|
||||
protected _labelElement: HTMLElement | undefined;
|
||||
protected _labelShortElement: HTMLElement | undefined;
|
||||
private _hover: IUpdatableHover | undefined;
|
||||
private _hover: IManagedHover | undefined;
|
||||
|
||||
private _onDidClick = this._register(new Emitter<Event>());
|
||||
get onDidClick(): BaseEvent<Event> { return this._onDidClick.event; }
|
||||
|
@ -306,7 +306,7 @@ export class Button extends Disposable implements IButton {
|
|||
|
||||
setTitle(title: string) {
|
||||
if (!this._hover && title !== '') {
|
||||
this._hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this._element, title));
|
||||
this._hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this._element, title));
|
||||
} else if (this._hover) {
|
||||
this._hover.update(title);
|
||||
}
|
||||
|
@ -370,7 +370,7 @@ export class ButtonWithDropdown extends Disposable implements IButton {
|
|||
this.separator.style.backgroundColor = options.buttonSeparator ?? '';
|
||||
|
||||
this.dropdownButton = this._register(new Button(this.element, { ...options, title: false, supportIcons: true }));
|
||||
this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.dropdownButton.element, localize("button dropdown more actions", 'More Actions...')));
|
||||
this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.dropdownButton.element, localize("button dropdown more actions", 'More Actions...')));
|
||||
this.dropdownButton.element.setAttribute('aria-haspopup', 'true');
|
||||
this.dropdownButton.element.setAttribute('aria-expanded', 'false');
|
||||
this.dropdownButton.element.classList.add('monaco-dropdown-button');
|
||||
|
|
|
@ -8,7 +8,7 @@ import { $, addDisposableListener, append, EventHelper, EventType, isMouseEvent
|
|||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { EventType as GestureEventType, Gesture } from 'vs/base/browser/touch';
|
||||
import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { IMenuOptions } from 'vs/base/browser/ui/menu/menu';
|
||||
|
@ -37,7 +37,7 @@ class BaseDropdown extends ActionRunner {
|
|||
private _onDidChangeVisibility = this._register(new Emitter<boolean>());
|
||||
readonly onDidChangeVisibility = this._onDidChangeVisibility.event;
|
||||
|
||||
private hover: IUpdatableHover | undefined;
|
||||
private hover: IManagedHover | undefined;
|
||||
|
||||
constructor(container: HTMLElement, options: IBaseDropdownOptions) {
|
||||
super();
|
||||
|
@ -107,7 +107,7 @@ class BaseDropdown extends ActionRunner {
|
|||
set tooltip(tooltip: string) {
|
||||
if (this._label) {
|
||||
if (!this.hover && tooltip !== '') {
|
||||
this.hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this._label, tooltip));
|
||||
this.hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this._label, tooltip));
|
||||
} else if (this.hover) {
|
||||
this.hover.update(tooltip);
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem {
|
|||
this.element.setAttribute('aria-haspopup', 'true');
|
||||
this.element.setAttribute('aria-expanded', 'false');
|
||||
if (this._action.label) {
|
||||
this._register(getBaseLayerHoverDelegate().setupUpdatableHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this.element, this._action.label));
|
||||
this._register(getBaseLayerHoverDelegate().setupManagedHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this.element, this._action.label));
|
||||
}
|
||||
this.element.ariaLabel = this._action.label || '';
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
|
@ -43,7 +43,7 @@ export class HighlightedLabel extends Disposable {
|
|||
private highlights: readonly IHighlight[] = [];
|
||||
private supportIcons: boolean;
|
||||
private didEverRender: boolean = false;
|
||||
private customHover: IUpdatableHover | undefined;
|
||||
private customHover: IManagedHover | undefined;
|
||||
|
||||
/**
|
||||
* Create a new {@link HighlightedLabel}.
|
||||
|
@ -141,7 +141,7 @@ export class HighlightedLabel extends Disposable {
|
|||
} else {
|
||||
if (!this.customHover && this.title !== '') {
|
||||
const hoverDelegate = this.options?.hoverDelegate ?? getDefaultHoverDelegate('mouse');
|
||||
this.customHover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(hoverDelegate, this.domNode, this.title));
|
||||
this.customHover = this._register(getBaseLayerHoverDelegate().setupManagedHover(hoverDelegate, this.domNode, this.title));
|
||||
} else if (this.customHover) {
|
||||
this.customHover.update(this.title);
|
||||
}
|
||||
|
|
|
@ -14,11 +14,12 @@ import type { IDisposable } from 'vs/base/common/lifecycle';
|
|||
*/
|
||||
export interface IHoverDelegate2 {
|
||||
/**
|
||||
* Shows a hover, provided a hover with the same options object is not already visible.
|
||||
* Shows a hover, provided a hover with the same {@link options} object is not already visible.
|
||||
*
|
||||
* @param options A set of options defining the characteristics of the hover.
|
||||
* @param focus Whether to focus the hover (useful for keyboard accessibility).
|
||||
*
|
||||
* **Example:** A simple usage with a single element target.
|
||||
* @example A simple usage with a single element target.
|
||||
*
|
||||
* ```typescript
|
||||
* showHover({
|
||||
|
@ -27,7 +28,10 @@ export interface IHoverDelegate2 {
|
|||
* });
|
||||
* ```
|
||||
*/
|
||||
showHover(options: IHoverOptions, focus?: boolean): IHoverWidget | undefined;
|
||||
showHover(
|
||||
options: IHoverOptions,
|
||||
focus?: boolean
|
||||
): IHoverWidget | undefined;
|
||||
|
||||
/**
|
||||
* Hides the hover if it was visible. This call will be ignored if the the hover is currently
|
||||
|
@ -41,16 +45,37 @@ export interface IHoverDelegate2 {
|
|||
*/
|
||||
showAndFocusLastHover(): void;
|
||||
|
||||
// TODO: Change hoverDelegate arg to exclude the actual delegate and instead use the new options
|
||||
setupUpdatableHover(hoverDelegate: IHoverDelegate, htmlElement: HTMLElement, content: IUpdatableHoverContentOrFactory, options?: IUpdatableHoverOptions): IUpdatableHover;
|
||||
/**
|
||||
* Sets up a managed hover for the given element. A managed hover will set up listeners for
|
||||
* mouse events, show the hover after a delay and provide hooks to easily update the content.
|
||||
*
|
||||
* This should be used over {@link showHover} when fine-grained control is not needed. The
|
||||
* managed hover also does not scale well, consider using {@link showHover} when showing hovers
|
||||
* for many elements.
|
||||
*
|
||||
* @param hoverDelegate The hover delegate containing hooks and configuration for the hover.
|
||||
* @param targetElement The target element to show the hover for.
|
||||
* @param content The content of the hover or a factory that creates it at the time it's shown.
|
||||
* @param options Additional options for the managed hover.
|
||||
*/
|
||||
// TODO: The hoverDelegate parameter should be removed in favor of just a set of options. This
|
||||
// will avoid confusion around IHoverDelegate/IHoverDelegate2 as well as align more with
|
||||
// the design of the hover service.
|
||||
// TODO: Align prototype closer to showHover, deriving options from IHoverOptions if possible.
|
||||
setupManagedHover(hoverDelegate: IHoverDelegate, targetElement: HTMLElement, content: IManagedHoverContentOrFactory, options?: IManagedHoverOptions): IManagedHover;
|
||||
|
||||
/**
|
||||
* Shows the hover for the given element if one has been setup.
|
||||
*
|
||||
* @param targetElement The target element of the hover, as set up in {@link setupManagedHover}.
|
||||
*/
|
||||
triggerUpdatableHover(htmlElement: HTMLElement): void;
|
||||
showManagedHover(targetElement: HTMLElement): void;
|
||||
}
|
||||
|
||||
export interface IHoverWidget extends IDisposable {
|
||||
/**
|
||||
* Whether the hover widget has been disposed.
|
||||
*/
|
||||
readonly isDisposed: boolean;
|
||||
}
|
||||
|
||||
|
@ -229,33 +254,29 @@ export interface IHoverTarget extends IDisposable {
|
|||
* An optional absolute x coordinate to position the hover with, for example to position the
|
||||
* hover using `MouseEvent.pageX`.
|
||||
*/
|
||||
x?: number;
|
||||
readonly x?: number;
|
||||
|
||||
/**
|
||||
* An optional absolute y coordinate to position the hover with, for example to position the
|
||||
* hover using `MouseEvent.pageY`.
|
||||
*/
|
||||
y?: number;
|
||||
readonly y?: number;
|
||||
}
|
||||
|
||||
// #region Updatable hover
|
||||
// #region Managed hover
|
||||
|
||||
export interface IUpdatableHoverTooltipMarkdownString {
|
||||
export interface IManagedHoverTooltipMarkdownString {
|
||||
markdown: IMarkdownString | string | undefined | ((token: CancellationToken) => Promise<IMarkdownString | string | undefined>);
|
||||
markdownNotSupportedFallback: string | undefined;
|
||||
}
|
||||
|
||||
export type IUpdatableHoverContent = string | IUpdatableHoverTooltipMarkdownString | HTMLElement | undefined;
|
||||
export type IUpdatableHoverContentOrFactory = IUpdatableHoverContent | (() => IUpdatableHoverContent);
|
||||
export type IManagedHoverContent = string | IManagedHoverTooltipMarkdownString | HTMLElement | undefined;
|
||||
export type IManagedHoverContentOrFactory = IManagedHoverContent | (() => IManagedHoverContent);
|
||||
|
||||
export interface IUpdatableHoverOptions {
|
||||
actions?: IHoverAction[];
|
||||
linkHandler?(url: string): void;
|
||||
trapFocus?: boolean;
|
||||
export interface IManagedHoverOptions extends Pick<IHoverOptions, 'actions' | 'linkHandler' | 'trapFocus'> {
|
||||
}
|
||||
|
||||
export interface IUpdatableHover extends IDisposable {
|
||||
|
||||
export interface IManagedHover extends IDisposable {
|
||||
/**
|
||||
* Allows to programmatically open the hover.
|
||||
*/
|
||||
|
@ -269,7 +290,7 @@ export interface IUpdatableHover extends IDisposable {
|
|||
/**
|
||||
* Updates the contents of the hover.
|
||||
*/
|
||||
update(tooltip: IUpdatableHoverContent, options?: IUpdatableHoverOptions): void;
|
||||
update(tooltip: IManagedHoverContent, options?: IManagedHoverOptions): void;
|
||||
}
|
||||
|
||||
// #endregion Updatable hover
|
||||
// #endregion Managed hover
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type { IHoverWidget, IUpdatableHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IHoverWidget, IManagedHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget';
|
||||
import { IMarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
|
@ -13,7 +13,7 @@ export interface IHoverDelegateTarget extends IDisposable {
|
|||
x?: number;
|
||||
}
|
||||
|
||||
export interface IHoverDelegateOptions extends IUpdatableHoverOptions {
|
||||
export interface IHoverDelegateOptions extends IManagedHoverOptions {
|
||||
/**
|
||||
* The content to display in the primary section of the hover. The type of text determines the
|
||||
* default `hideOnHover` behavior.
|
||||
|
|
|
@ -9,8 +9,8 @@ let baseHoverDelegate: IHoverDelegate2 = {
|
|||
showHover: () => undefined,
|
||||
hideHover: () => undefined,
|
||||
showAndFocusLastHover: () => undefined,
|
||||
setupUpdatableHover: () => null!,
|
||||
triggerUpdatableHover: () => undefined
|
||||
setupManagedHover: () => null!,
|
||||
showManagedHover: () => undefined
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -12,7 +12,7 @@ import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
|||
import { equals } from 'vs/base/common/objects';
|
||||
import { Range } from 'vs/base/common/range';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import type { IUpdatableHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { isString } from 'vs/base/common/types';
|
||||
import { stripIcons } from 'vs/base/common/iconLabels';
|
||||
|
@ -26,8 +26,8 @@ export interface IIconLabelCreationOptions {
|
|||
}
|
||||
|
||||
export interface IIconLabelValueOptions {
|
||||
title?: string | IUpdatableHoverTooltipMarkdownString;
|
||||
descriptionTitle?: string | IUpdatableHoverTooltipMarkdownString;
|
||||
title?: string | IManagedHoverTooltipMarkdownString;
|
||||
descriptionTitle?: string | IManagedHoverTooltipMarkdownString;
|
||||
suffix?: string;
|
||||
hideIcon?: boolean;
|
||||
extraClasses?: readonly string[];
|
||||
|
@ -194,7 +194,7 @@ export class IconLabel extends Disposable {
|
|||
}
|
||||
}
|
||||
|
||||
private setupHover(htmlElement: HTMLElement, tooltip: string | IUpdatableHoverTooltipMarkdownString | undefined): void {
|
||||
private setupHover(htmlElement: HTMLElement, tooltip: string | IManagedHoverTooltipMarkdownString | undefined): void {
|
||||
const previousCustomHover = this.customHovers.get(htmlElement);
|
||||
if (previousCustomHover) {
|
||||
previousCustomHover.dispose();
|
||||
|
@ -207,7 +207,7 @@ export class IconLabel extends Disposable {
|
|||
}
|
||||
|
||||
if (this.hoverDelegate.showNativeHover) {
|
||||
function setupNativeHover(htmlElement: HTMLElement, tooltip: string | IUpdatableHoverTooltipMarkdownString | undefined): void {
|
||||
function setupNativeHover(htmlElement: HTMLElement, tooltip: string | IManagedHoverTooltipMarkdownString | undefined): void {
|
||||
if (isString(tooltip)) {
|
||||
// Icons don't render in the native hover so we strip them out
|
||||
htmlElement.title = stripIcons(tooltip);
|
||||
|
@ -219,7 +219,7 @@ export class IconLabel extends Disposable {
|
|||
}
|
||||
setupNativeHover(htmlElement, tooltip);
|
||||
} else {
|
||||
const hoverDisposable = getBaseLayerHoverDelegate().setupUpdatableHover(this.hoverDelegate, htmlElement, tooltip);
|
||||
const hoverDisposable = getBaseLayerHoverDelegate().setupManagedHover(this.hoverDelegate, htmlElement, tooltip);
|
||||
if (hoverDisposable) {
|
||||
this.customHovers.set(htmlElement, hoverDisposable);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { reset } from 'vs/base/browser/dom';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels';
|
||||
|
@ -12,7 +12,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
|
|||
|
||||
export class SimpleIconLabel implements IDisposable {
|
||||
|
||||
private hover?: IUpdatableHover;
|
||||
private hover?: IManagedHover;
|
||||
|
||||
constructor(
|
||||
private readonly _container: HTMLElement
|
||||
|
@ -24,7 +24,7 @@ export class SimpleIconLabel implements IDisposable {
|
|||
|
||||
set title(title: string) {
|
||||
if (!this.hover && title) {
|
||||
this.hover = getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this._container, title);
|
||||
this.hover = getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this._container, title);
|
||||
} else if (this.hover) {
|
||||
this.hover.update(title);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import { MarkdownRenderOptions } from 'vs/base/browser/markdownRenderer';
|
|||
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||
import * as aria from 'vs/base/browser/ui/aria/aria';
|
||||
import { AnchorAlignment, IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
|
||||
|
@ -114,7 +114,7 @@ export class InputBox extends Widget {
|
|||
private cachedContentHeight: number | undefined;
|
||||
private maxHeight: number = Number.POSITIVE_INFINITY;
|
||||
private scrollableElement: ScrollableElement | undefined;
|
||||
private hover: IUpdatableHover | undefined;
|
||||
private hover: IManagedHover | undefined;
|
||||
|
||||
private _onDidChange = this._register(new Emitter<string>());
|
||||
public readonly onDidChange: Event<string> = this._onDidChange.event;
|
||||
|
@ -235,7 +235,7 @@ export class InputBox extends Widget {
|
|||
public setTooltip(tooltip: string): void {
|
||||
this.tooltip = tooltip;
|
||||
if (!this.hover) {
|
||||
this.hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.input, tooltip));
|
||||
this.hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.input, tooltip));
|
||||
} else {
|
||||
this.hover.update(tooltip);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { UILabelProvider } from 'vs/base/common/keybindingLabels';
|
||||
|
@ -61,7 +61,7 @@ export class KeybindingLabel extends Disposable {
|
|||
|
||||
private readonly keyElements = new Set<HTMLSpanElement>();
|
||||
|
||||
private hover: IUpdatableHover;
|
||||
private hover: IManagedHover;
|
||||
private keybinding: ResolvedKeybinding | undefined;
|
||||
private matches: Matches | undefined;
|
||||
private didEverRender: boolean;
|
||||
|
@ -78,7 +78,7 @@ export class KeybindingLabel extends Disposable {
|
|||
this.domNode.style.color = labelForeground;
|
||||
}
|
||||
|
||||
this.hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.domNode, ''));
|
||||
this.hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.domNode, ''));
|
||||
|
||||
this.didEverRender = false;
|
||||
container.appendChild(this.domNode);
|
||||
|
|
|
@ -9,7 +9,7 @@ import { IContentActionHandler } from 'vs/base/browser/formattedTextRenderer';
|
|||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { renderMarkdown } from 'vs/base/browser/markdownRenderer';
|
||||
import { AnchorPosition, IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { IListEvent, IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
||||
|
@ -104,7 +104,7 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi
|
|||
private selectionDetailsPane!: HTMLElement;
|
||||
private _skipLayout: boolean = false;
|
||||
private _cachedMaxDetailsHeight?: number;
|
||||
private _hover?: IUpdatableHover;
|
||||
private _hover?: IManagedHover;
|
||||
|
||||
private _sticky: boolean = false; // for dev purposes only
|
||||
|
||||
|
@ -153,7 +153,7 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi
|
|||
|
||||
private setTitle(title: string): void {
|
||||
if (!this._hover && title) {
|
||||
this._hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.selectElement, title));
|
||||
this._hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.selectElement, title));
|
||||
} else if (this._hover) {
|
||||
this._hover.update(title);
|
||||
}
|
||||
|
|
|
@ -134,7 +134,7 @@ class ColumnHeader<TRow, TCell> extends Disposable implements IView {
|
|||
this.element = $('.monaco-table-th', { 'data-col-index': index }, column.label);
|
||||
|
||||
if (column.tooltip) {
|
||||
this._register(getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.element, column.tooltip));
|
||||
this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, column.tooltip));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ import 'vs/css!./toggle';
|
|||
import { isActiveElement, $, addDisposableListener, EventType } from 'vs/base/browser/dom';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
|
||||
export interface IToggleOpts extends IToggleStyles {
|
||||
|
@ -113,7 +113,7 @@ export class Toggle extends Widget {
|
|||
readonly domNode: HTMLElement;
|
||||
|
||||
private _checked: boolean;
|
||||
private _hover: IUpdatableHover;
|
||||
private _hover: IManagedHover;
|
||||
|
||||
constructor(opts: IToggleOpts) {
|
||||
super();
|
||||
|
@ -134,7 +134,7 @@ export class Toggle extends Widget {
|
|||
}
|
||||
|
||||
this.domNode = document.createElement('div');
|
||||
this._hover = this._register(getBaseLayerHoverDelegate().setupUpdatableHover(opts.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this.domNode, this._opts.title));
|
||||
this._hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(opts.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this.domNode, this._opts.title));
|
||||
this.domNode.classList.add(...classes);
|
||||
if (!this._opts.notFocusable) {
|
||||
this.domNode.tabIndex = 0;
|
||||
|
|
|
@ -20,9 +20,9 @@ import { IAccessibilityService } from 'vs/platform/accessibility/common/accessib
|
|||
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
|
||||
import { mainWindow } from 'vs/base/browser/window';
|
||||
import { ContextViewHandler } from 'vs/platform/contextview/browser/contextViewService';
|
||||
import type { IHoverOptions, IHoverWidget, IUpdatableHover, IUpdatableHoverContentOrFactory, IUpdatableHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IHoverOptions, IHoverWidget, IManagedHover, IManagedHoverContentOrFactory, IManagedHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IHoverDelegate, IHoverDelegateTarget } from 'vs/base/browser/ui/hover/hoverDelegate';
|
||||
import { UpdatableHoverWidget } from 'vs/editor/browser/services/hoverService/updatableHoverWidget';
|
||||
import { ManagedHoverWidget } from 'vs/editor/browser/services/hoverService/updatableHoverWidget';
|
||||
import { TimeoutTimer } from 'vs/base/common/async';
|
||||
|
||||
export class HoverService extends Disposable implements IHoverService {
|
||||
|
@ -189,22 +189,22 @@ export class HoverService extends Disposable implements IHoverService {
|
|||
}
|
||||
}
|
||||
|
||||
private readonly _existingHovers = new Map<HTMLElement, IUpdatableHover>();
|
||||
private readonly _managedHovers = new Map<HTMLElement, IManagedHover>();
|
||||
|
||||
// TODO: Investigate performance of this function. There seems to be a lot of content created
|
||||
// and thrown away on start up
|
||||
setupUpdatableHover(hoverDelegate: IHoverDelegate, htmlElement: HTMLElement, content: IUpdatableHoverContentOrFactory, options?: IUpdatableHoverOptions | undefined): IUpdatableHover {
|
||||
setupManagedHover(hoverDelegate: IHoverDelegate, targetElement: HTMLElement, content: IManagedHoverContentOrFactory, options?: IManagedHoverOptions | undefined): IManagedHover {
|
||||
|
||||
htmlElement.setAttribute('custom-hover', 'true');
|
||||
targetElement.setAttribute('custom-hover', 'true');
|
||||
|
||||
if (htmlElement.title !== '') {
|
||||
if (targetElement.title !== '') {
|
||||
console.warn('HTML element already has a title attribute, which will conflict with the custom hover. Please remove the title attribute.');
|
||||
console.trace('Stack trace:', htmlElement.title);
|
||||
htmlElement.title = '';
|
||||
console.trace('Stack trace:', targetElement.title);
|
||||
targetElement.title = '';
|
||||
}
|
||||
|
||||
let hoverPreparation: IDisposable | undefined;
|
||||
let hoverWidget: UpdatableHoverWidget | undefined;
|
||||
let hoverWidget: ManagedHoverWidget | undefined;
|
||||
|
||||
const hideHover = (disposeWidget: boolean, disposePreparation: boolean) => {
|
||||
const hadHover = hoverWidget !== undefined;
|
||||
|
@ -225,23 +225,23 @@ export class HoverService extends Disposable implements IHoverService {
|
|||
const triggerShowHover = (delay: number, focus?: boolean, target?: IHoverDelegateTarget, trapFocus?: boolean) => {
|
||||
return new TimeoutTimer(async () => {
|
||||
if (!hoverWidget || hoverWidget.isDisposed) {
|
||||
hoverWidget = new UpdatableHoverWidget(hoverDelegate, target || htmlElement, delay > 0);
|
||||
hoverWidget = new ManagedHoverWidget(hoverDelegate, target || targetElement, delay > 0);
|
||||
await hoverWidget.update(typeof content === 'function' ? content() : content, focus, { ...options, trapFocus });
|
||||
}
|
||||
}, delay);
|
||||
};
|
||||
|
||||
let isMouseDown = false;
|
||||
const mouseDownEmitter = addDisposableListener(htmlElement, EventType.MOUSE_DOWN, () => {
|
||||
const mouseDownEmitter = addDisposableListener(targetElement, EventType.MOUSE_DOWN, () => {
|
||||
isMouseDown = true;
|
||||
hideHover(true, true);
|
||||
}, true);
|
||||
const mouseUpEmitter = addDisposableListener(htmlElement, EventType.MOUSE_UP, () => {
|
||||
const mouseUpEmitter = addDisposableListener(targetElement, EventType.MOUSE_UP, () => {
|
||||
isMouseDown = false;
|
||||
}, true);
|
||||
const mouseLeaveEmitter = addDisposableListener(htmlElement, EventType.MOUSE_LEAVE, (e: MouseEvent) => {
|
||||
const mouseLeaveEmitter = addDisposableListener(targetElement, EventType.MOUSE_LEAVE, (e: MouseEvent) => {
|
||||
isMouseDown = false;
|
||||
hideHover(false, (<any>e).fromElement === htmlElement);
|
||||
hideHover(false, (<any>e).fromElement === targetElement);
|
||||
}, true);
|
||||
|
||||
const onMouseOver = (e: MouseEvent) => {
|
||||
|
@ -252,53 +252,53 @@ export class HoverService extends Disposable implements IHoverService {
|
|||
const toDispose: DisposableStore = new DisposableStore();
|
||||
|
||||
const target: IHoverDelegateTarget = {
|
||||
targetElements: [htmlElement],
|
||||
targetElements: [targetElement],
|
||||
dispose: () => { }
|
||||
};
|
||||
if (hoverDelegate.placement === undefined || hoverDelegate.placement === 'mouse') {
|
||||
// track the mouse position
|
||||
const onMouseMove = (e: MouseEvent) => {
|
||||
target.x = e.x + 10;
|
||||
if ((isHTMLElement(e.target)) && getHoverTargetElement(e.target, htmlElement) !== htmlElement) {
|
||||
if ((isHTMLElement(e.target)) && getHoverTargetElement(e.target, targetElement) !== targetElement) {
|
||||
hideHover(true, true);
|
||||
}
|
||||
};
|
||||
toDispose.add(addDisposableListener(htmlElement, EventType.MOUSE_MOVE, onMouseMove, true));
|
||||
toDispose.add(addDisposableListener(targetElement, EventType.MOUSE_MOVE, onMouseMove, true));
|
||||
}
|
||||
|
||||
hoverPreparation = toDispose;
|
||||
|
||||
if ((isHTMLElement(e.target)) && getHoverTargetElement(e.target as HTMLElement, htmlElement) !== htmlElement) {
|
||||
if ((isHTMLElement(e.target)) && getHoverTargetElement(e.target as HTMLElement, targetElement) !== targetElement) {
|
||||
return; // Do not show hover when the mouse is over another hover target
|
||||
}
|
||||
|
||||
toDispose.add(triggerShowHover(hoverDelegate.delay, false, target));
|
||||
};
|
||||
const mouseOverDomEmitter = addDisposableListener(htmlElement, EventType.MOUSE_OVER, onMouseOver, true);
|
||||
const mouseOverDomEmitter = addDisposableListener(targetElement, EventType.MOUSE_OVER, onMouseOver, true);
|
||||
|
||||
const onFocus = () => {
|
||||
if (isMouseDown || hoverPreparation) {
|
||||
return;
|
||||
}
|
||||
const target: IHoverDelegateTarget = {
|
||||
targetElements: [htmlElement],
|
||||
targetElements: [targetElement],
|
||||
dispose: () => { }
|
||||
};
|
||||
const toDispose: DisposableStore = new DisposableStore();
|
||||
const onBlur = () => hideHover(true, true);
|
||||
toDispose.add(addDisposableListener(htmlElement, EventType.BLUR, onBlur, true));
|
||||
toDispose.add(addDisposableListener(targetElement, EventType.BLUR, onBlur, true));
|
||||
toDispose.add(triggerShowHover(hoverDelegate.delay, false, target));
|
||||
hoverPreparation = toDispose;
|
||||
};
|
||||
|
||||
// Do not show hover when focusing an input or textarea
|
||||
let focusDomEmitter: undefined | IDisposable;
|
||||
const tagName = htmlElement.tagName.toLowerCase();
|
||||
const tagName = targetElement.tagName.toLowerCase();
|
||||
if (tagName !== 'input' && tagName !== 'textarea') {
|
||||
focusDomEmitter = addDisposableListener(htmlElement, EventType.FOCUS, onFocus, true);
|
||||
focusDomEmitter = addDisposableListener(targetElement, EventType.FOCUS, onFocus, true);
|
||||
}
|
||||
|
||||
const hover: IUpdatableHover = {
|
||||
const hover: IManagedHover = {
|
||||
show: focus => {
|
||||
hideHover(false, true); // terminate a ongoing mouse over preparation
|
||||
triggerShowHover(0, focus, undefined, focus); // show hover immediately
|
||||
|
@ -311,7 +311,7 @@ export class HoverService extends Disposable implements IHoverService {
|
|||
await hoverWidget?.update(content, undefined, hoverOptions);
|
||||
},
|
||||
dispose: () => {
|
||||
this._existingHovers.delete(htmlElement);
|
||||
this._managedHovers.delete(targetElement);
|
||||
mouseOverDomEmitter.dispose();
|
||||
mouseLeaveEmitter.dispose();
|
||||
mouseDownEmitter.dispose();
|
||||
|
@ -320,19 +320,19 @@ export class HoverService extends Disposable implements IHoverService {
|
|||
hideHover(true, true);
|
||||
}
|
||||
};
|
||||
this._existingHovers.set(htmlElement, hover);
|
||||
this._managedHovers.set(targetElement, hover);
|
||||
return hover;
|
||||
}
|
||||
|
||||
triggerUpdatableHover(target: HTMLElement): void {
|
||||
const hover = this._existingHovers.get(target);
|
||||
showManagedHover(target: HTMLElement): void {
|
||||
const hover = this._managedHovers.get(target);
|
||||
if (hover) {
|
||||
hover.show(true);
|
||||
}
|
||||
}
|
||||
|
||||
public override dispose(): void {
|
||||
this._existingHovers.forEach(hover => hover.dispose());
|
||||
this._managedHovers.forEach(hover => hover.dispose());
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { isHTMLElement } from 'vs/base/browser/dom';
|
||||
import type { IHoverWidget, IUpdatableHoverContent, IUpdatableHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IHoverWidget, IManagedHoverContent, IManagedHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IHoverDelegate, IHoverDelegateOptions, IHoverDelegateTarget } from 'vs/base/browser/ui/hover/hoverDelegate';
|
||||
import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget';
|
||||
import { CancellationTokenSource } from 'vs/base/common/cancellation';
|
||||
|
@ -13,9 +13,9 @@ import { IDisposable } from 'vs/base/common/lifecycle';
|
|||
import { isFunction, isString } from 'vs/base/common/types';
|
||||
import { localize } from 'vs/nls';
|
||||
|
||||
type IUpdatableHoverResolvedContent = IMarkdownString | string | HTMLElement | undefined;
|
||||
type IManagedHoverResolvedContent = IMarkdownString | string | HTMLElement | undefined;
|
||||
|
||||
export class UpdatableHoverWidget implements IDisposable {
|
||||
export class ManagedHoverWidget implements IDisposable {
|
||||
|
||||
private _hoverWidget: IHoverWidget | undefined;
|
||||
private _cancellationTokenSource: CancellationTokenSource | undefined;
|
||||
|
@ -23,7 +23,7 @@ export class UpdatableHoverWidget implements IDisposable {
|
|||
constructor(private hoverDelegate: IHoverDelegate, private target: IHoverDelegateTarget | HTMLElement, private fadeInAnimation: boolean) {
|
||||
}
|
||||
|
||||
async update(content: IUpdatableHoverContent, focus?: boolean, options?: IUpdatableHoverOptions): Promise<void> {
|
||||
async update(content: IManagedHoverContent, focus?: boolean, options?: IManagedHoverOptions): Promise<void> {
|
||||
if (this._cancellationTokenSource) {
|
||||
// there's an computation ongoing, cancel it
|
||||
this._cancellationTokenSource.dispose(true);
|
||||
|
@ -64,7 +64,7 @@ export class UpdatableHoverWidget implements IDisposable {
|
|||
this.show(resolvedContent, focus, options);
|
||||
}
|
||||
|
||||
private show(content: IUpdatableHoverResolvedContent, focus?: boolean, options?: IUpdatableHoverOptions): void {
|
||||
private show(content: IManagedHoverResolvedContent, focus?: boolean, options?: IManagedHoverOptions): void {
|
||||
const oldHoverWidget = this._hoverWidget;
|
||||
|
||||
if (this.hasContent(content)) {
|
||||
|
@ -86,7 +86,7 @@ export class UpdatableHoverWidget implements IDisposable {
|
|||
oldHoverWidget?.dispose();
|
||||
}
|
||||
|
||||
private hasContent(content: IUpdatableHoverResolvedContent): content is NonNullable<IUpdatableHoverResolvedContent> {
|
||||
private hasContent(content: IManagedHoverResolvedContent): content is NonNullable<IManagedHoverResolvedContent> {
|
||||
if (!content) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1343,7 +1343,7 @@ export class SimpleButton extends Widget {
|
|||
this._domNode.className = className;
|
||||
this._domNode.setAttribute('role', 'button');
|
||||
this._domNode.setAttribute('aria-label', this._opts.label);
|
||||
this._register(hoverService.setupUpdatableHover(opts.hoverDelegate ?? getDefaultHoverDelegate('element'), this._domNode, this._opts.label));
|
||||
this._register(hoverService.setupManagedHover(opts.hoverDelegate ?? getDefaultHoverDelegate('element'), this._domNode, this._opts.label));
|
||||
|
||||
this.onclick(this._domNode, (e) => {
|
||||
this._opts.onTrigger();
|
||||
|
|
|
@ -324,7 +324,7 @@ class MarkdownRenderedHoverParts extends Disposable {
|
|||
const actionElement = dom.append(container, $(ThemeIcon.asCSSSelector(isActionIncrease ? increaseHoverVerbosityIcon : decreaseHoverVerbosityIcon)));
|
||||
actionElement.tabIndex = 0;
|
||||
const hoverDelegate = new WorkbenchHoverDelegate('mouse', false, { target: container, position: { hoverPosition: HoverPosition.LEFT } }, this._configurationService, this._hoverService);
|
||||
store.add(this._hoverService.setupUpdatableHover(hoverDelegate, actionElement, labelForHoverVerbosityAction(this._keybindingService, action)));
|
||||
store.add(this._hoverService.setupManagedHover(hoverDelegate, actionElement, labelForHoverVerbosityAction(this._keybindingService, action)));
|
||||
if (!actionEnabled) {
|
||||
actionElement.classList.add('disabled');
|
||||
return store;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
import * as dom from 'vs/base/browser/dom';
|
||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import * as aria from 'vs/base/browser/ui/aria/aria';
|
||||
import { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getBaseLayerHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate2';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { renderIcon } from 'vs/base/browser/ui/iconLabel/iconLabels';
|
||||
|
@ -900,7 +900,7 @@ class InputWithButton implements IDisposable {
|
|||
private _domNode: HTMLDivElement | undefined;
|
||||
private _inputNode: HTMLInputElement | undefined;
|
||||
private _buttonNode: HTMLElement | undefined;
|
||||
private _buttonHover: IUpdatableHover | undefined;
|
||||
private _buttonHover: IManagedHover | undefined;
|
||||
private _buttonGenHoverText: string | undefined;
|
||||
private _buttonCancelHoverText: string | undefined;
|
||||
private _sparkleIcon: HTMLElement | undefined;
|
||||
|
@ -934,7 +934,7 @@ class InputWithButton implements IDisposable {
|
|||
|
||||
this._buttonGenHoverText = nls.localize('generateRenameSuggestionsButton', "Generate new name suggestions");
|
||||
this._buttonCancelHoverText = nls.localize('cancelRenameSuggestionsButton', "Cancel");
|
||||
this._buttonHover = getBaseLayerHoverDelegate().setupUpdatableHover(getDefaultHoverDelegate('element'), this._buttonNode, this._buttonGenHoverText);
|
||||
this._buttonHover = getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('element'), this._buttonNode, this._buttonGenHoverText);
|
||||
this._disposables.add(this._buttonHover);
|
||||
|
||||
this._domNode.appendChild(this._buttonNode);
|
||||
|
|
|
@ -122,7 +122,7 @@ export class WorkbenchButtonBar extends ButtonBar {
|
|||
} else {
|
||||
tooltip = action.label;
|
||||
}
|
||||
this._updateStore.add(this._hoverService.setupUpdatableHover(hoverDelegate, btn.element, tooltip));
|
||||
this._updateStore.add(this._hoverService.setupManagedHover(hoverDelegate, btn.element, tooltip));
|
||||
this._updateStore.add(btn.onDidClick(async () => {
|
||||
this._actionRunner.run(action);
|
||||
}));
|
||||
|
|
|
@ -10,7 +10,7 @@ export const NullHoverService: IHoverService = {
|
|||
_serviceBrand: undefined,
|
||||
hideHover: () => undefined,
|
||||
showHover: () => undefined,
|
||||
setupUpdatableHover: () => Disposable.None as any,
|
||||
setupManagedHover: () => Disposable.None as any,
|
||||
showAndFocusLastHover: () => undefined,
|
||||
triggerUpdatableHover: () => undefined
|
||||
showManagedHover: () => undefined
|
||||
};
|
||||
|
|
|
@ -14,7 +14,7 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
|
|||
import 'vs/css!./link';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
export interface ILinkDescriptor {
|
||||
|
@ -33,7 +33,7 @@ export interface ILinkOptions {
|
|||
export class Link extends Disposable {
|
||||
|
||||
private el: HTMLAnchorElement;
|
||||
private hover?: IUpdatableHover;
|
||||
private hover?: IManagedHover;
|
||||
private hoverDelegate: IHoverDelegate;
|
||||
|
||||
private _enabled: boolean = true;
|
||||
|
@ -131,7 +131,7 @@ export class Link extends Disposable {
|
|||
if (this.hoverDelegate.showNativeHover) {
|
||||
this.el.title = title ?? '';
|
||||
} else if (!this.hover && title) {
|
||||
this.hover = this._register(this._hoverService.setupUpdatableHover(this.hoverDelegate, this.el, title));
|
||||
this.hover = this._register(this._hoverService.setupManagedHover(this.hoverDelegate, this.el, title));
|
||||
} else if (this.hover) {
|
||||
this.hover.update(title);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ import { ltrim } from 'vs/base/common/strings';
|
|||
import { RenderIndentGuides } from 'vs/base/browser/ui/tree/abstractTree';
|
||||
import { ThrottledDelayer } from 'vs/base/common/async';
|
||||
import { isCancellationError } from 'vs/base/common/errors';
|
||||
import type { IHoverWidget, IUpdatableHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IHoverWidget, IManagedHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import { QuickPickFocus } from '../common/quickInput';
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
|
||||
|
@ -434,7 +434,7 @@ class QuickPickItemElementRenderer extends BaseQuickInputListRenderer<QuickPickI
|
|||
}
|
||||
|
||||
// Label
|
||||
let descriptionTitle: IUpdatableHoverTooltipMarkdownString | undefined;
|
||||
let descriptionTitle: IManagedHoverTooltipMarkdownString | undefined;
|
||||
// if we have a tooltip, that will be the hover,
|
||||
// with the saneDescription as fallback if it
|
||||
// is defined
|
||||
|
@ -465,7 +465,7 @@ class QuickPickItemElementRenderer extends BaseQuickInputListRenderer<QuickPickI
|
|||
|
||||
// Detail
|
||||
if (element.saneDetail) {
|
||||
let title: IUpdatableHoverTooltipMarkdownString | undefined;
|
||||
let title: IManagedHoverTooltipMarkdownString | undefined;
|
||||
// If we have a tooltip, we want that to be shown and not any other hover
|
||||
if (!element.saneTooltip) {
|
||||
title = {
|
||||
|
@ -566,7 +566,7 @@ class QuickPickSeparatorElementRenderer extends BaseQuickInputListRenderer<Quick
|
|||
data.icon.className = '';
|
||||
|
||||
// Label
|
||||
let descriptionTitle: IUpdatableHoverTooltipMarkdownString | undefined;
|
||||
let descriptionTitle: IManagedHoverTooltipMarkdownString | undefined;
|
||||
// if we have a tooltip, that will be the hover,
|
||||
// with the saneDescription as fallback if it
|
||||
// is defined
|
||||
|
@ -591,7 +591,7 @@ class QuickPickSeparatorElementRenderer extends BaseQuickInputListRenderer<Quick
|
|||
|
||||
// Detail
|
||||
if (element.saneDetail) {
|
||||
let title: IUpdatableHoverTooltipMarkdownString | undefined;
|
||||
let title: IManagedHoverTooltipMarkdownString | undefined;
|
||||
// If we have a tooltip, we want that to be shown and not any other hover
|
||||
if (!element.saneTooltip) {
|
||||
title = {
|
||||
|
|
|
@ -725,7 +725,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
|
|||
|
||||
const elementWithHover = getCustomHoverForElement(focusedElement as HTMLElement);
|
||||
if (elementWithHover) {
|
||||
accessor.get(IHoverService).triggerUpdatableHover(elementWithHover as HTMLElement);
|
||||
accessor.get(IHoverService).showManagedHover(elementWithHover as HTMLElement);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -422,7 +422,7 @@ export abstract class CompositePart<T extends Composite> extends Part {
|
|||
const titleContainer = append(parent, $('.title-label'));
|
||||
const titleLabel = append(titleContainer, $('h2'));
|
||||
this.titleLabelElement = titleLabel;
|
||||
const hover = this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), titleLabel, ''));
|
||||
const hover = this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), titleLabel, ''));
|
||||
|
||||
const $this = this;
|
||||
return {
|
||||
|
|
|
@ -30,7 +30,7 @@ import { defaultButtonStyles, defaultProgressBarStyles } from 'vs/platform/theme
|
|||
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
export class NotificationsListDelegate implements IListVirtualDelegate<INotificationViewItem> {
|
||||
|
@ -379,14 +379,14 @@ export class NotificationTemplateRenderer extends Disposable {
|
|||
this.renderSeverity(notification);
|
||||
|
||||
// Message
|
||||
const messageCustomHover = this.inputDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.template.message, ''));
|
||||
const messageCustomHover = this.inputDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.template.message, ''));
|
||||
const messageOverflows = this.renderMessage(notification, messageCustomHover);
|
||||
|
||||
// Secondary Actions
|
||||
this.renderSecondaryActions(notification, messageOverflows);
|
||||
|
||||
// Source
|
||||
const sourceCustomHover = this.inputDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.template.source, ''));
|
||||
const sourceCustomHover = this.inputDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.template.source, ''));
|
||||
this.renderSource(notification, sourceCustomHover);
|
||||
|
||||
// Buttons
|
||||
|
@ -424,7 +424,7 @@ export class NotificationTemplateRenderer extends Disposable {
|
|||
this.template.icon.classList.add(...ThemeIcon.asClassNameArray(this.toSeverityIcon(notification.severity)));
|
||||
}
|
||||
|
||||
private renderMessage(notification: INotificationViewItem, customHover: IUpdatableHover): boolean {
|
||||
private renderMessage(notification: INotificationViewItem, customHover: IManagedHover): boolean {
|
||||
clearNode(this.template.message);
|
||||
this.template.message.appendChild(NotificationMessageRenderer.render(notification.message, {
|
||||
callback: link => this.openerService.open(URI.parse(link), { allowCommands: true }),
|
||||
|
@ -474,7 +474,7 @@ export class NotificationTemplateRenderer extends Disposable {
|
|||
actions.forEach(action => this.template.toolbar.push(action, { icon: true, label: false, keybinding: this.getKeybindingLabel(action) }));
|
||||
}
|
||||
|
||||
private renderSource(notification: INotificationViewItem, sourceCustomHover: IUpdatableHover): void {
|
||||
private renderSource(notification: INotificationViewItem, sourceCustomHover: IManagedHover): void {
|
||||
if (notification.expanded && notification.source) {
|
||||
this.template.source.textContent = localize('notificationSource', "Source: {0}", notification.source);
|
||||
sourceCustomHover.update(notification.source);
|
||||
|
|
|
@ -24,7 +24,7 @@ import { spinningLoading, syncing } from 'vs/platform/theme/common/iconRegistry'
|
|||
import { isMarkdownString, markdownStringEqual } from 'vs/base/common/htmlContent';
|
||||
import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate';
|
||||
import { Gesture, EventType as TouchEventType } from 'vs/base/browser/touch';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
export class StatusbarEntryItem extends Disposable {
|
||||
|
@ -42,7 +42,7 @@ export class StatusbarEntryItem extends Disposable {
|
|||
private readonly focusListener = this._register(new MutableDisposable());
|
||||
private readonly focusOutListener = this._register(new MutableDisposable());
|
||||
|
||||
private hover: IUpdatableHover | undefined = undefined;
|
||||
private hover: IManagedHover | undefined = undefined;
|
||||
|
||||
readonly labelContainer: HTMLElement;
|
||||
readonly beakContainer: HTMLElement;
|
||||
|
@ -122,7 +122,7 @@ export class StatusbarEntryItem extends Disposable {
|
|||
if (this.hover) {
|
||||
this.hover.update(hoverContents);
|
||||
} else {
|
||||
this.hover = this._register(this.hoverService.setupUpdatableHover(this.hoverDelegate, this.container, hoverContents));
|
||||
this.hover = this._register(this.hoverService.setupManagedHover(this.hoverDelegate, this.container, hoverContents));
|
||||
}
|
||||
if (entry.command !== ShowTooltipCommand /* prevents flicker on click */) {
|
||||
this.focusListener.value = addDisposableListener(this.labelContainer, EventType.FOCUS, e => {
|
||||
|
|
|
@ -96,7 +96,7 @@ class CommandCenterCenterViewItem extends BaseActionViewItem {
|
|||
container.classList.add('command-center-center');
|
||||
container.classList.toggle('multiple', (this._submenu.actions.length > 1));
|
||||
|
||||
const hover = this._store.add(this._hoverService.setupUpdatableHover(this._hoverDelegate, container, this.getTooltip()));
|
||||
const hover = this._store.add(this._hoverService.setupManagedHover(this._hoverDelegate, container, this.getTooltip()));
|
||||
|
||||
// update label & tooltip when window title changes
|
||||
this._store.add(this._windowTitle.onDidChange(() => {
|
||||
|
@ -157,7 +157,7 @@ class CommandCenterCenterViewItem extends BaseActionViewItem {
|
|||
labelElement.innerText = label;
|
||||
reset(container, searchIcon, labelElement);
|
||||
|
||||
const hover = this._store.add(that._hoverService.setupUpdatableHover(that._hoverDelegate, container, this.getTooltip()));
|
||||
const hover = this._store.add(that._hoverService.setupManagedHover(that._hoverDelegate, container, this.getTooltip()));
|
||||
|
||||
// update label & tooltip when window title changes
|
||||
this._store.add(that._windowTitle.onDidChange(() => {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate';
|
||||
import { Toggle } from 'vs/base/browser/ui/toggle/toggle';
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
|
@ -28,7 +28,7 @@ export class TreeItemCheckbox extends Disposable {
|
|||
public toggle: Toggle | undefined;
|
||||
private checkboxContainer: HTMLDivElement;
|
||||
public isDisposed = false;
|
||||
private hover: IUpdatableHover | undefined;
|
||||
private hover: IManagedHover | undefined;
|
||||
|
||||
public static readonly checkboxClass = 'custom-view-tree-node-item-checkbox';
|
||||
|
||||
|
@ -87,7 +87,7 @@ export class TreeItemCheckbox extends Disposable {
|
|||
private setHover(checkbox: ITreeItemCheckboxState) {
|
||||
if (this.toggle) {
|
||||
if (!this.hover) {
|
||||
this.hover = this._register(this.hoverService.setupUpdatableHover(this.hoverDelegate, this.toggle.domNode, this.checkboxHoverContent(checkbox)));
|
||||
this.hover = this._register(this.hoverService.setupManagedHover(this.hoverDelegate, this.toggle.domNode, this.checkboxHoverContent(checkbox)));
|
||||
} else {
|
||||
this.hover.update(checkbox.tooltip);
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ import { TelemetryTrustedValue } from 'vs/platform/telemetry/common/telemetryUti
|
|||
import { ITreeViewsDnDService } from 'vs/editor/common/services/treeViewsDndService';
|
||||
import { DraggedTreeItemsIdentifier } from 'vs/editor/common/services/treeViewsDnd';
|
||||
import { IMarkdownRenderResult, MarkdownRenderer } from 'vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer';
|
||||
import type { IUpdatableHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import { parseLinkedText } from 'vs/base/common/linkedText';
|
||||
import { Button } from 'vs/base/browser/ui/button/button';
|
||||
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
|
@ -1202,7 +1202,7 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
|
|||
return { resourceLabel, icon, checkboxContainer, actionBar, container, elementDisposable: new DisposableStore() };
|
||||
}
|
||||
|
||||
private getHover(label: string | undefined, resource: URI | null, node: ITreeItem): string | IUpdatableHoverTooltipMarkdownString | undefined {
|
||||
private getHover(label: string | undefined, resource: URI | null, node: ITreeItem): string | IManagedHoverTooltipMarkdownString | undefined {
|
||||
if (!(node instanceof ResolvableTreeItem) || !node.hasResolve) {
|
||||
if (resource && !node.tooltip) {
|
||||
return undefined;
|
||||
|
|
|
@ -48,7 +48,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle
|
|||
import { defaultButtonStyles, defaultProgressBarStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
import { IListStyles } from 'vs/base/browser/ui/list/listWidget';
|
||||
import { PANEL_BACKGROUND, PANEL_STICKY_SCROLL_BACKGROUND, PANEL_STICKY_SCROLL_BORDER, PANEL_STICKY_SCROLL_SHADOW, SIDE_BAR_BACKGROUND, SIDE_BAR_STICKY_SCROLL_BACKGROUND, SIDE_BAR_STICKY_SCROLL_BORDER, SIDE_BAR_STICKY_SCROLL_SHADOW } from 'vs/workbench/common/theme';
|
||||
|
@ -354,11 +354,11 @@ export abstract class ViewPane extends Pane implements IView {
|
|||
private readonly showActions: ViewPaneShowActions;
|
||||
private headerContainer?: HTMLElement;
|
||||
private titleContainer?: HTMLElement;
|
||||
private titleContainerHover?: IUpdatableHover;
|
||||
private titleContainerHover?: IManagedHover;
|
||||
private titleDescriptionContainer?: HTMLElement;
|
||||
private titleDescriptionContainerHover?: IUpdatableHover;
|
||||
private titleDescriptionContainerHover?: IManagedHover;
|
||||
private iconContainer?: HTMLElement;
|
||||
private iconContainerHover?: IUpdatableHover;
|
||||
private iconContainerHover?: IManagedHover;
|
||||
protected twistiesContainer?: HTMLElement;
|
||||
private viewWelcomeController!: ViewWelcomeController;
|
||||
|
||||
|
@ -540,13 +540,13 @@ export abstract class ViewPane extends Pane implements IView {
|
|||
|
||||
const calculatedTitle = this.calculateTitle(title);
|
||||
this.titleContainer = append(container, $('h3.title', {}, calculatedTitle));
|
||||
this.titleContainerHover = this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.titleContainer, calculatedTitle));
|
||||
this.titleContainerHover = this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.titleContainer, calculatedTitle));
|
||||
|
||||
if (this._titleDescription) {
|
||||
this.setTitleDescription(this._titleDescription);
|
||||
}
|
||||
|
||||
this.iconContainerHover = this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.iconContainer, calculatedTitle));
|
||||
this.iconContainerHover = this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.iconContainer, calculatedTitle));
|
||||
this.iconContainer.setAttribute('aria-label', this._getAriaLabel(calculatedTitle));
|
||||
}
|
||||
|
||||
|
@ -583,7 +583,7 @@ export abstract class ViewPane extends Pane implements IView {
|
|||
}
|
||||
else if (description && this.titleContainer) {
|
||||
this.titleDescriptionContainer = after(this.titleContainer, $('span.description', {}, description));
|
||||
this.titleDescriptionContainerHover = this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.titleDescriptionContainer, description));
|
||||
this.titleDescriptionContainerHover = this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.titleDescriptionContainer, description));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { h } from 'vs/base/browser/dom';
|
||||
import { IUpdatableHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IManagedHoverOptions } from 'vs/base/browser/ui/hover/hover';
|
||||
import { renderIcon } from 'vs/base/browser/ui/iconLabel/iconLabels';
|
||||
import { CancellationTokenSource } from 'vs/base/common/cancellation';
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
|
@ -121,7 +121,7 @@ export class ChatAgentHover extends Disposable {
|
|||
}
|
||||
}
|
||||
|
||||
export function getChatAgentHoverOptions(getAgent: () => IChatAgentData | undefined, commandService: ICommandService): IUpdatableHoverOptions {
|
||||
export function getChatAgentHoverOptions(getAgent: () => IChatAgentData | undefined, commandService: ICommandService): IManagedHoverOptions {
|
||||
return {
|
||||
actions: [
|
||||
{
|
||||
|
|
|
@ -316,7 +316,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
|
|||
return undefined;
|
||||
};
|
||||
const hoverOptions = getChatAgentHoverOptions(() => isResponseVM(template.currentElement) ? template.currentElement.agent : undefined, this.commandService);
|
||||
templateDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), user, hoverContent, hoverOptions));
|
||||
templateDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('element'), user, hoverContent, hoverOptions));
|
||||
templateDisposables.add(dom.addDisposableListener(user, dom.EventType.KEY_DOWN, e => {
|
||||
const ev = new StandardKeyboardEvent(e);
|
||||
if (ev.equals(KeyCode.Space) || ev.equals(KeyCode.Enter)) {
|
||||
|
|
|
@ -177,7 +177,7 @@ export class ChatMarkdownDecorationsRenderer {
|
|||
|
||||
const agent = this.chatAgentService.getAgent(args.agentId);
|
||||
const hover: Lazy<ChatAgentHover> = new Lazy(() => store.add(this.instantiationService.createInstance(ChatAgentHover)));
|
||||
store.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), container, () => {
|
||||
store.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('element'), container, () => {
|
||||
hover.value.setAgent(args.agentId);
|
||||
return hover.value.domNode;
|
||||
}, agent && getChatAgentHoverOptions(() => agent, this.commandService)));
|
||||
|
|
|
@ -370,7 +370,7 @@ class EmptyTextEditorHintContentWidget implements IContentWidget {
|
|||
anchor.style.cursor = 'pointer';
|
||||
const id = keybindingsLookup.shift();
|
||||
const title = id && this.keybindingService.lookupKeybinding(id)?.getLabel();
|
||||
hintHandler.disposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), anchor, title ?? ''));
|
||||
hintHandler.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), anchor, title ?? ''));
|
||||
}
|
||||
|
||||
return { hintElement, ariaLabel };
|
||||
|
|
|
@ -368,7 +368,7 @@ export class CommentReply<T extends IRange | ICellRange> extends Disposable {
|
|||
|
||||
private createReplyButton(commentEditor: ICodeEditor, commentForm: HTMLElement) {
|
||||
this._reviewThreadReplyButton = <HTMLButtonElement>dom.append(commentForm, dom.$(`button.review-thread-reply-button.${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this._reviewThreadReplyButton, this._commentOptions?.prompt || nls.localize('reply', "Reply...")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this._reviewThreadReplyButton, this._commentOptions?.prompt || nls.localize('reply', "Reply...")));
|
||||
|
||||
this._reviewThreadReplyButton.textContent = this._commentOptions?.prompt || nls.localize('reply', "Reply...");
|
||||
// bind click/escape actions for reviewThreadReplyButton and textArea
|
||||
|
|
|
@ -303,7 +303,7 @@ export class CommentNodeRenderer implements IListRenderer<ITreeNode<CommentNode>
|
|||
const renderedComment = this.getRenderedComment(originalComment.comment.body, disposables);
|
||||
templateData.disposables.push(renderedComment);
|
||||
templateData.threadMetadata.commentPreview.appendChild(renderedComment.element.firstElementChild ?? renderedComment.element);
|
||||
templateData.disposables.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), templateData.threadMetadata.commentPreview, renderedComment.element.textContent ?? ''));
|
||||
templateData.disposables.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), templateData.threadMetadata.commentPreview, renderedComment.element.textContent ?? ''));
|
||||
}
|
||||
|
||||
if (node.element.range) {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { fromNow } from 'vs/base/common/date';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
|
@ -18,7 +18,7 @@ export class TimestampWidget extends Disposable {
|
|||
private _timestamp: Date | undefined;
|
||||
private _useRelativeTime: boolean;
|
||||
|
||||
private hover: IUpdatableHover;
|
||||
private hover: IManagedHover;
|
||||
|
||||
constructor(
|
||||
private configurationService: IConfigurationService,
|
||||
|
@ -30,7 +30,7 @@ export class TimestampWidget extends Disposable {
|
|||
this._date = dom.append(container, dom.$('span.timestamp'));
|
||||
this._date.style.display = 'none';
|
||||
this._useRelativeTime = this.useRelativeTimeSetting;
|
||||
this.hover = this._register(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this._date, ''));
|
||||
this.hover = this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this._date, ''));
|
||||
this.setTimestamp(timeStamp);
|
||||
}
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ export function renderExpressionValue(expressionOrValue: IExpressionValue | stri
|
|||
|
||||
if (options.hover) {
|
||||
const { store, commands, commandService } = options.hover instanceof DisposableStore ? { store: options.hover, commands: [], commandService: undefined } : options.hover;
|
||||
store.add(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), container, () => {
|
||||
store.add(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), container, () => {
|
||||
const container = dom.$('div');
|
||||
const markdownHoverElement = dom.$('div.hover-row');
|
||||
const hoverContentsElement = dom.append(markdownHoverElement, dom.$('div.hover-contents'));
|
||||
|
@ -228,7 +228,7 @@ export abstract class AbstractExpressionsRenderer<T = IExpression> implements IT
|
|||
const name = dom.append(expression, $('span.name'));
|
||||
const lazyButton = dom.append(expression, $('span.lazy-button'));
|
||||
lazyButton.classList.add(...ThemeIcon.asClassNameArray(Codicon.eye));
|
||||
templateDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), lazyButton, localize('debug.lazyButton.tooltip', "Click to expand")));
|
||||
templateDisposable.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), lazyButton, localize('debug.lazyButton.tooltip', "Click to expand")));
|
||||
const value = dom.append(expression, $('span.value'));
|
||||
|
||||
const label = templateDisposable.add(new HighlightedLabel(name));
|
||||
|
|
|
@ -553,7 +553,7 @@ class BreakpointsRenderer implements IListRenderer<IBreakpoint, IBreakpointTempl
|
|||
|
||||
const { message, icon } = getBreakpointMessageAndIcon(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), breakpoint, this.labelService, this.debugService.getModel());
|
||||
data.icon.className = ThemeIcon.asClassName(icon);
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.breakpoint, breakpoint.message || message || ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.breakpoint, breakpoint.message || message || ''));
|
||||
|
||||
const debugActive = this.debugService.state === State.Running || this.debugService.state === State.Stopped;
|
||||
if (debugActive && !breakpoint.verified) {
|
||||
|
@ -623,11 +623,11 @@ class ExceptionBreakpointsRenderer implements IListRenderer<IExceptionBreakpoint
|
|||
data.context = exceptionBreakpoint;
|
||||
data.name.textContent = exceptionBreakpoint.label || `${exceptionBreakpoint.filter} exceptions`;
|
||||
const exceptionBreakpointtitle = exceptionBreakpoint.verified ? (exceptionBreakpoint.description || data.name.textContent) : exceptionBreakpoint.message || localize('unverifiedExceptionBreakpoint', "Unverified Exception Breakpoint");
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.breakpoint, exceptionBreakpointtitle));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.breakpoint, exceptionBreakpointtitle));
|
||||
data.breakpoint.classList.toggle('disabled', !exceptionBreakpoint.verified);
|
||||
data.checkbox.checked = exceptionBreakpoint.enabled;
|
||||
data.condition.textContent = exceptionBreakpoint.condition || '';
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.condition, localize('expressionCondition', "Expression condition: {0}", exceptionBreakpoint.condition)));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.condition, localize('expressionCondition', "Expression condition: {0}", exceptionBreakpoint.condition)));
|
||||
|
||||
if (exceptionBreakpoint.modeLabel) {
|
||||
data.badge.textContent = exceptionBreakpoint.modeLabel;
|
||||
|
@ -700,9 +700,9 @@ class FunctionBreakpointsRenderer implements IListRenderer<FunctionBreakpoint, I
|
|||
data.name.textContent = functionBreakpoint.name;
|
||||
const { icon, message } = getBreakpointMessageAndIcon(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), functionBreakpoint, this.labelService, this.debugService.getModel());
|
||||
data.icon.className = ThemeIcon.asClassName(icon);
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.icon, message ? message : ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.icon, message ? message : ''));
|
||||
data.checkbox.checked = functionBreakpoint.enabled;
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.breakpoint, message ? message : ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.breakpoint, message ? message : ''));
|
||||
if (functionBreakpoint.condition && functionBreakpoint.hitCondition) {
|
||||
data.condition.textContent = localize('expressionAndHitCount', "Condition: {0} | Hit Count: {1}", functionBreakpoint.condition, functionBreakpoint.hitCondition);
|
||||
} else {
|
||||
|
@ -720,7 +720,7 @@ class FunctionBreakpointsRenderer implements IListRenderer<FunctionBreakpoint, I
|
|||
const session = this.debugService.getViewModel().focusedSession;
|
||||
data.breakpoint.classList.toggle('disabled', (session && !session.capabilities.supportsFunctionBreakpoints) || !this.debugService.getModel().areBreakpointsActivated());
|
||||
if (session && !session.capabilities.supportsFunctionBreakpoints) {
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.breakpoint, localize('functionBreakpointsNotSupported', "Function breakpoints are not supported by this debug type")));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.breakpoint, localize('functionBreakpointsNotSupported', "Function breakpoints are not supported by this debug type")));
|
||||
}
|
||||
|
||||
const primary: IAction[] = [];
|
||||
|
@ -789,9 +789,9 @@ class DataBreakpointsRenderer implements IListRenderer<DataBreakpoint, IDataBrea
|
|||
data.name.textContent = dataBreakpoint.description;
|
||||
const { icon, message } = getBreakpointMessageAndIcon(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), dataBreakpoint, this.labelService, this.debugService.getModel());
|
||||
data.icon.className = ThemeIcon.asClassName(icon);
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.icon, message ? message : ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.icon, message ? message : ''));
|
||||
data.checkbox.checked = dataBreakpoint.enabled;
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.breakpoint, message ? message : ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.breakpoint, message ? message : ''));
|
||||
|
||||
if (dataBreakpoint.modeLabel) {
|
||||
data.badge.textContent = dataBreakpoint.modeLabel;
|
||||
|
@ -804,7 +804,7 @@ class DataBreakpointsRenderer implements IListRenderer<DataBreakpoint, IDataBrea
|
|||
const session = this.debugService.getViewModel().focusedSession;
|
||||
data.breakpoint.classList.toggle('disabled', (session && !session.capabilities.supportsDataBreakpoints) || !this.debugService.getModel().areBreakpointsActivated());
|
||||
if (session && !session.capabilities.supportsDataBreakpoints) {
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.breakpoint, localize('dataBreakpointsNotSupported', "Data breakpoints are not supported by this debug type")));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.breakpoint, localize('dataBreakpointsNotSupported', "Data breakpoints are not supported by this debug type")));
|
||||
}
|
||||
if (dataBreakpoint.accessType) {
|
||||
const accessType = dataBreakpoint.accessType === 'read' ? localize('read', "Read") : dataBreakpoint.accessType === 'write' ? localize('write', "Write") : localize('access', "Access");
|
||||
|
@ -881,12 +881,12 @@ class InstructionBreakpointsRenderer implements IListRenderer<IInstructionBreakp
|
|||
data.breakpoint.classList.toggle('disabled', !this.debugService.getModel().areBreakpointsActivated());
|
||||
|
||||
data.name.textContent = '0x' + breakpoint.address.toString(16);
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.name, `Decimal address: breakpoint.address.toString()`));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.name, `Decimal address: breakpoint.address.toString()`));
|
||||
data.checkbox.checked = breakpoint.enabled;
|
||||
|
||||
const { message, icon } = getBreakpointMessageAndIcon(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), breakpoint, this.labelService, this.debugService.getModel());
|
||||
data.icon.className = ThemeIcon.asClassName(icon);
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.breakpoint, breakpoint.message || message || ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.breakpoint, breakpoint.message || message || ''));
|
||||
|
||||
const debugActive = this.debugService.state === State.Running || this.debugService.state === State.Stopped;
|
||||
if (debugActive && !breakpoint.verified) {
|
||||
|
@ -992,7 +992,7 @@ class FunctionBreakpointInputRenderer implements IListRenderer<IFunctionBreakpoi
|
|||
const { icon, message } = getBreakpointMessageAndIcon(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), functionBreakpoint, this.labelService, this.debugService.getModel());
|
||||
|
||||
data.icon.className = ThemeIcon.asClassName(icon);
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.icon, message ? message : ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.icon, message ? message : ''));
|
||||
data.checkbox.checked = functionBreakpoint.enabled;
|
||||
data.checkbox.disabled = true;
|
||||
data.inputBox.value = functionBreakpoint.name || '';
|
||||
|
@ -1101,7 +1101,7 @@ class DataBreakpointInputRenderer implements IListRenderer<IDataBreakpoint, IDat
|
|||
const { icon, message } = getBreakpointMessageAndIcon(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), dataBreakpoint, this.labelService, this.debugService.getModel());
|
||||
|
||||
data.icon.className = ThemeIcon.asClassName(icon);
|
||||
data.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.icon, message ?? ''));
|
||||
data.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.icon, message ?? ''));
|
||||
data.checkbox.checked = dataBreakpoint.enabled;
|
||||
data.checkbox.disabled = true;
|
||||
data.inputBox.value = '';
|
||||
|
|
|
@ -49,7 +49,7 @@ import { CALLSTACK_VIEW_ID, CONTEXT_CALLSTACK_ITEM_STOPPED, CONTEXT_CALLSTACK_IT
|
|||
import { StackFrame, Thread, ThreadAndSessionIds } from 'vs/workbench/contrib/debug/common/debugModel';
|
||||
import { isSessionAttach } from 'vs/workbench/contrib/debug/common/debugUtils';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
const $ = dom.$;
|
||||
|
@ -136,7 +136,7 @@ async function expandTo(session: IDebugSession, tree: WorkbenchCompressibleAsync
|
|||
export class CallStackView extends ViewPane {
|
||||
private stateMessage!: HTMLSpanElement;
|
||||
private stateMessageLabel!: HTMLSpanElement;
|
||||
private stateMessageLabelHover!: IUpdatableHover;
|
||||
private stateMessageLabelHover!: IManagedHover;
|
||||
private onCallStackChangeScheduler: RunOnceScheduler;
|
||||
private needsRefresh = false;
|
||||
private ignoreSelectionChangedEvent = false;
|
||||
|
@ -221,7 +221,7 @@ export class CallStackView extends ViewPane {
|
|||
this.stateMessage = dom.append(container, $('span.call-stack-state-message'));
|
||||
this.stateMessage.hidden = true;
|
||||
this.stateMessageLabel = dom.append(this.stateMessage, $('span.label'));
|
||||
this.stateMessageLabelHover = this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.stateMessage, ''));
|
||||
this.stateMessageLabelHover = this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.stateMessage, ''));
|
||||
}
|
||||
|
||||
protected override renderBody(container: HTMLElement): void {
|
||||
|
@ -582,7 +582,7 @@ class SessionsRenderer implements ICompressibleTreeRenderer<IDebugSession, Fuzzy
|
|||
}
|
||||
|
||||
private doRenderElement(session: IDebugSession, matches: IMatch[], data: ISessionTemplateData): void {
|
||||
const sessionHover = data.elementDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.session, localize({ key: 'session', comment: ['Session is a noun'] }, "Session")));
|
||||
const sessionHover = data.elementDisposable.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.session, localize({ key: 'session', comment: ['Session is a noun'] }, "Session")));
|
||||
data.label.set(session.getLabel(), matches);
|
||||
const stoppedDetails = session.getStoppedDetails();
|
||||
const thread = session.getAllThreads().find(t => t.stopped);
|
||||
|
@ -671,7 +671,7 @@ class ThreadsRenderer implements ICompressibleTreeRenderer<IThread, FuzzyScore,
|
|||
|
||||
renderElement(element: ITreeNode<IThread, FuzzyScore>, _index: number, data: IThreadTemplateData): void {
|
||||
const thread = element.element;
|
||||
data.elementDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.thread, thread.name));
|
||||
data.elementDisposable.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.thread, thread.name));
|
||||
data.label.set(thread.name, createMatches(element.filterData));
|
||||
data.stateLabel.textContent = thread.stateLabel;
|
||||
data.stateLabel.classList.toggle('exception', thread.stoppedDetails?.reason === 'exception');
|
||||
|
@ -756,7 +756,7 @@ class StackFramesRenderer implements ICompressibleTreeRenderer<IStackFrame, Fuzz
|
|||
if (stackFrame.source.raw.origin) {
|
||||
title += `\n${stackFrame.source.raw.origin}`;
|
||||
}
|
||||
data.templateDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.file, title));
|
||||
data.templateDisposable.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.file, title));
|
||||
|
||||
data.label.set(stackFrame.name, createMatches(element.filterData), stackFrame.name);
|
||||
data.fileName.textContent = getSpecificSourceName(stackFrame);
|
||||
|
@ -813,7 +813,7 @@ class ErrorsRenderer implements ICompressibleTreeRenderer<string, FuzzyScore, IE
|
|||
renderElement(element: ITreeNode<string, FuzzyScore>, index: number, data: IErrorTemplateData): void {
|
||||
const error = element.element;
|
||||
data.label.textContent = error;
|
||||
data.templateDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.label, error));
|
||||
data.templateDisposable.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.label, error));
|
||||
}
|
||||
|
||||
renderCompressedElements(node: ITreeNode<ICompressedTreeNode<string>, FuzzyScore>, index: number, templateData: IErrorTemplateData, height: number | undefined): void {
|
||||
|
|
|
@ -78,7 +78,7 @@ export class StartDebugActionViewItem extends BaseActionViewItem {
|
|||
const keybinding = this.keybindingService.lookupKeybinding(this.action.id)?.getLabel();
|
||||
const keybindingLabel = keybinding ? ` (${keybinding})` : '';
|
||||
const title = this.action.label + keybindingLabel;
|
||||
this.toDispose.push(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.start, title));
|
||||
this.toDispose.push(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.start, title));
|
||||
this.start.setAttribute('role', 'button');
|
||||
this.start.ariaLabel = title;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
import * as dom from 'vs/base/browser/dom';
|
||||
import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge';
|
||||
import { HighlightedLabel, IHighlight } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';
|
||||
import { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { CachedListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
||||
import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget';
|
||||
|
@ -425,7 +425,7 @@ export class ReplAccessibilityProvider implements IListAccessibilityProvider<IRe
|
|||
class SourceWidget extends Disposable {
|
||||
private readonly el: HTMLElement;
|
||||
private source?: IReplElementSource;
|
||||
private hover?: IUpdatableHover;
|
||||
private hover?: IManagedHover;
|
||||
|
||||
constructor(container: HTMLElement,
|
||||
@IEditorService editorService: IEditorService,
|
||||
|
@ -453,7 +453,7 @@ class SourceWidget extends Disposable {
|
|||
this.source = source;
|
||||
this.el.textContent = source ? `${basename(source.source.name)}:${source.lineNumber}` : '';
|
||||
|
||||
this.hover ??= this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.el, ''));
|
||||
this.hover ??= this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.el, ''));
|
||||
this.hover.update(source ? `${this.labelService.getUriLabel(source.source.uri)}:${source.lineNumber}` : '');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -369,14 +369,14 @@ export abstract class AbstractRuntimeExtensionsEditor extends EditorPane {
|
|||
} else {
|
||||
title = nls.localize('extensionActivating', "Extension is activating...");
|
||||
}
|
||||
data.elementDisposables.push(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.activationTime, title));
|
||||
data.elementDisposables.push(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.activationTime, title));
|
||||
|
||||
clearNode(data.msgContainer);
|
||||
|
||||
if (this._getUnresponsiveProfile(element.description.identifier)) {
|
||||
const el = $('span', undefined, ...renderLabelWithIcons(` $(alert) Unresponsive`));
|
||||
const extensionHostFreezTitle = nls.localize('unresponsive.title', "Extension has caused the extension host to freeze.");
|
||||
data.elementDisposables.push(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), el, extensionHostFreezTitle));
|
||||
data.elementDisposables.push(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), el, extensionHostFreezTitle));
|
||||
|
||||
data.msgContainer.appendChild(el);
|
||||
}
|
||||
|
@ -425,7 +425,7 @@ export abstract class AbstractRuntimeExtensionsEditor extends EditorPane {
|
|||
const element = $('span', undefined, `${nls.localize('requests count', "{0} Requests: {1} (Overall)", feature.label, accessData.totalCount)}${accessData.current ? nls.localize('session requests count', ", {0} (Session)", accessData.current.count) : ''}`);
|
||||
if (accessData.current) {
|
||||
const title = nls.localize('requests count title', "Last request was {0}.", fromNow(accessData.current.lastAccessed, true, true));
|
||||
data.elementDisposables.push(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), element, title));
|
||||
data.elementDisposables.push(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), element, title));
|
||||
}
|
||||
|
||||
data.msgContainer.appendChild(element);
|
||||
|
|
|
@ -200,7 +200,7 @@ class VersionWidget extends ExtensionWithDifferentGalleryVersionWidget {
|
|||
) {
|
||||
super();
|
||||
this.element = append(container, $('code.version'));
|
||||
this._register(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.element, localize('extension version', "Extension Version")));
|
||||
this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, localize('extension version', "Extension Version")));
|
||||
this.render();
|
||||
}
|
||||
render(): void {
|
||||
|
@ -287,11 +287,11 @@ export class ExtensionEditor extends EditorPane {
|
|||
const details = append(header, $('.details'));
|
||||
const title = append(details, $('.title'));
|
||||
const name = append(title, $('span.name.clickable', { role: 'heading', tabIndex: 0 }));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), name, localize('name', "Extension name")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), name, localize('name', "Extension name")));
|
||||
const versionWidget = new VersionWidget(title, this.hoverService);
|
||||
|
||||
const preview = append(title, $('span.preview'));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), preview, localize('preview', "Preview")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), preview, localize('preview', "Preview")));
|
||||
preview.textContent = localize('preview', "Preview");
|
||||
|
||||
const builtin = append(title, $('span.builtin'));
|
||||
|
@ -299,7 +299,7 @@ export class ExtensionEditor extends EditorPane {
|
|||
|
||||
const subtitle = append(details, $('.subtitle'));
|
||||
const publisher = append(append(subtitle, $('.subtitle-entry')), $('.publisher.clickable', { tabIndex: 0 }));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), publisher, localize('publisher', "Publisher")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), publisher, localize('publisher', "Publisher")));
|
||||
publisher.setAttribute('role', 'button');
|
||||
const publisherDisplayName = append(publisher, $('.publisher-name'));
|
||||
const verifiedPublisherWidget = this.instantiationService.createInstance(VerifiedPublisherWidget, append(publisher, $('.verified-publisher')), false);
|
||||
|
@ -308,11 +308,11 @@ export class ExtensionEditor extends EditorPane {
|
|||
resource.setAttribute('role', 'button');
|
||||
|
||||
const installCount = append(append(subtitle, $('.subtitle-entry')), $('span.install', { tabIndex: 0 }));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), installCount, localize('install count', "Install count")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), installCount, localize('install count', "Install count")));
|
||||
const installCountWidget = this.instantiationService.createInstance(InstallCountWidget, installCount, false);
|
||||
|
||||
const rating = append(append(subtitle, $('.subtitle-entry')), $('span.rating.clickable', { tabIndex: 0 }));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), rating, localize('rating', "Rating")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), rating, localize('rating', "Rating")));
|
||||
rating.setAttribute('role', 'link'); // #132645
|
||||
const ratingsWidget = this.instantiationService.createInstance(RatingsWidget, rating, false);
|
||||
|
||||
|
@ -552,14 +552,14 @@ export class ExtensionEditor extends EditorPane {
|
|||
const workspaceFolder = this.contextService.getWorkspaceFolder(location);
|
||||
if (workspaceFolder && extension.isWorkspaceScoped) {
|
||||
template.resource.parentElement?.classList.add('clickable');
|
||||
this.transientDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), template.resource, this.uriIdentityService.extUri.relativePath(workspaceFolder.uri, location)));
|
||||
this.transientDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), template.resource, this.uriIdentityService.extUri.relativePath(workspaceFolder.uri, location)));
|
||||
template.resource.textContent = localize('workspace extension', "Workspace Extension");
|
||||
this.transientDisposables.add(onClick(template.resource, () => {
|
||||
this.viewsService.openView(EXPLORER_VIEW_ID, true).then(() => this.explorerService.select(location, true));
|
||||
}));
|
||||
} else {
|
||||
template.resource.parentElement?.classList.remove('clickable');
|
||||
this.transientDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), template.resource, location.path));
|
||||
this.transientDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), template.resource, location.path));
|
||||
template.resource.textContent = localize('local extension', "Local Extension");
|
||||
}
|
||||
}
|
||||
|
@ -968,7 +968,7 @@ export class ExtensionEditor extends EditorPane {
|
|||
for (const [label, uri] of resources) {
|
||||
const resource = append(resourcesElement, $('a.resource', { tabindex: '0' }, label));
|
||||
this.transientDisposables.add(onClick(resource, () => this.openerService.open(uri)));
|
||||
this.transientDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), resource, uri.toString()));
|
||||
this.transientDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), resource, uri.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
|||
import { defaultCountBadgeStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
|
||||
export abstract class ExtensionWidget extends Disposable implements IExtensionContainer {
|
||||
private _extension: IExtension | null = null;
|
||||
|
@ -126,7 +126,7 @@ export class InstallCountWidget extends ExtensionWidget {
|
|||
|
||||
export class RatingsWidget extends ExtensionWidget {
|
||||
|
||||
private readonly containerHover: IUpdatableHover;
|
||||
private readonly containerHover: IManagedHover;
|
||||
|
||||
constructor(
|
||||
private container: HTMLElement,
|
||||
|
@ -140,7 +140,7 @@ export class RatingsWidget extends ExtensionWidget {
|
|||
container.classList.add('small');
|
||||
}
|
||||
|
||||
this.containerHover = this._register(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), container, ''));
|
||||
this.containerHover = this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), container, ''));
|
||||
|
||||
this.render();
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ export class RatingsWidget extends ExtensionWidget {
|
|||
export class VerifiedPublisherWidget extends ExtensionWidget {
|
||||
|
||||
private readonly disposables = this._register(new DisposableStore());
|
||||
private readonly containerHover: IUpdatableHover;
|
||||
private readonly containerHover: IManagedHover;
|
||||
|
||||
constructor(
|
||||
private container: HTMLElement,
|
||||
|
@ -201,7 +201,7 @@ export class VerifiedPublisherWidget extends ExtensionWidget {
|
|||
@IOpenerService private readonly openerService: IOpenerService,
|
||||
) {
|
||||
super();
|
||||
this.containerHover = this._register(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), container, ''));
|
||||
this.containerHover = this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), container, ''));
|
||||
this.render();
|
||||
}
|
||||
|
||||
|
@ -258,7 +258,7 @@ export class SponsorWidget extends ExtensionWidget {
|
|||
}
|
||||
|
||||
const sponsor = append(this.container, $('span.sponsor.clickable', { tabIndex: 0 }));
|
||||
this.disposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), sponsor, this.extension?.publisherSponsorLink.toString() ?? ''));
|
||||
this.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), sponsor, this.extension?.publisherSponsorLink.toString() ?? ''));
|
||||
sponsor.setAttribute('role', 'link'); // #132645
|
||||
const sponsorIconElement = renderIcon(sponsorIcon);
|
||||
const label = $('span', undefined, localize('sponsor', "Sponsor"));
|
||||
|
@ -380,7 +380,7 @@ export class RemoteBadgeWidget extends ExtensionWidget {
|
|||
class RemoteBadge extends Disposable {
|
||||
|
||||
readonly element: HTMLElement;
|
||||
readonly elementHover: IUpdatableHover;
|
||||
readonly elementHover: IManagedHover;
|
||||
|
||||
constructor(
|
||||
private readonly tooltip: boolean,
|
||||
|
@ -391,7 +391,7 @@ class RemoteBadge extends Disposable {
|
|||
) {
|
||||
super();
|
||||
this.element = $('div.extension-badge.extension-remote-badge');
|
||||
this.elementHover = this._register(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.element, ''));
|
||||
this.elementHover = this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, ''));
|
||||
this.render();
|
||||
}
|
||||
|
||||
|
@ -472,7 +472,7 @@ export class SyncIgnoredWidget extends ExtensionWidget {
|
|||
|
||||
if (this.extension && this.extension.state === ExtensionState.Installed && this.userDataSyncEnablementService.isEnabled() && this.extensionsWorkbenchService.isExtensionIgnoredToSync(this.extension)) {
|
||||
const element = append(this.container, $('span.extension-sync-ignored' + ThemeIcon.asCSSSelector(syncIgnoredIcon)));
|
||||
this.disposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), element, localize('syncingore.label', "This extension is ignored during sync.")));
|
||||
this.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), element, localize('syncingore.label', "This extension is ignored during sync.")));
|
||||
element.classList.add(...ThemeIcon.asClassNameArray(syncIgnoredIcon));
|
||||
}
|
||||
}
|
||||
|
@ -545,7 +545,7 @@ export class ExtensionHoverWidget extends ExtensionWidget {
|
|||
render(): void {
|
||||
this.hover.value = undefined;
|
||||
if (this.extension) {
|
||||
this.hover.value = this.hoverService.setupUpdatableHover({
|
||||
this.hover.value = this.hoverService.setupManagedHover({
|
||||
delay: this.configurationService.getValue<number>('workbench.hover.delay'),
|
||||
showHover: (options, focus) => {
|
||||
return this.hoverService.showHover({
|
||||
|
|
|
@ -285,7 +285,7 @@ export class InlineChatWidget {
|
|||
this._updateAriaLabel();
|
||||
|
||||
// this._elements.status
|
||||
this._store.add(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), this._elements.statusLabel, () => {
|
||||
this._store.add(this._hoverService.setupManagedHover(getDefaultHoverDelegate('element'), this._elements.statusLabel, () => {
|
||||
return this._elements.statusLabel.dataset['title'];
|
||||
}));
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ import { unsupportedSchemas } from 'vs/platform/markers/common/markerService';
|
|||
import { defaultCountBadgeStyles } from 'vs/platform/theme/browser/defaultStyles';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
interface IResourceMarkersTemplateData {
|
||||
|
@ -281,7 +281,7 @@ class MarkerWidget extends Disposable {
|
|||
private readonly icon: HTMLElement;
|
||||
private readonly iconContainer: HTMLElement;
|
||||
private readonly messageAndDetailsContainer: HTMLElement;
|
||||
private readonly messageAndDetailsContainerHover: IUpdatableHover;
|
||||
private readonly messageAndDetailsContainerHover: IManagedHover;
|
||||
private readonly disposables = this._register(new DisposableStore());
|
||||
|
||||
constructor(
|
||||
|
@ -302,7 +302,7 @@ class MarkerWidget extends Disposable {
|
|||
this.iconContainer = dom.append(parent, dom.$(''));
|
||||
this.icon = dom.append(this.iconContainer, dom.$(''));
|
||||
this.messageAndDetailsContainer = dom.append(parent, dom.$('.marker-message-details-container'));
|
||||
this.messageAndDetailsContainerHover = this._register(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.messageAndDetailsContainer, ''));
|
||||
this.messageAndDetailsContainerHover = this._register(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.messageAndDetailsContainer, ''));
|
||||
}
|
||||
|
||||
render(element: Marker, filterData: MarkerFilterData | undefined): void {
|
||||
|
|
|
@ -17,7 +17,7 @@ import { MenuItemAction, SubmenuItemAction } from 'vs/platform/actions/common/ac
|
|||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
export class CodiconActionViewItem extends MenuEntryActionViewItem {
|
||||
|
@ -49,7 +49,7 @@ export class ActionViewWithLabel extends MenuEntryActionViewItem {
|
|||
}
|
||||
export class UnifiedSubmenuActionView extends SubmenuEntryActionViewItem {
|
||||
private _actionLabel?: HTMLAnchorElement;
|
||||
private _hover?: IUpdatableHover;
|
||||
private _hover?: IManagedHover;
|
||||
private _primaryAction: IAction | undefined;
|
||||
|
||||
constructor(
|
||||
|
@ -73,7 +73,7 @@ export class UnifiedSubmenuActionView extends SubmenuEntryActionViewItem {
|
|||
this._actionLabel = document.createElement('a');
|
||||
container.appendChild(this._actionLabel);
|
||||
|
||||
this._hover = this._register(this._hoverService.setupUpdatableHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('element'), this._actionLabel, ''));
|
||||
this._hover = this._register(this._hoverService.setupManagedHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('element'), this._actionLabel, ''));
|
||||
|
||||
this.updateLabel();
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ import { IHoverDelegate, IHoverDelegateOptions } from 'vs/base/browser/ui/hover/
|
|||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget';
|
||||
import type { IUpdatableHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
|
||||
const $ = DOM.$;
|
||||
|
||||
|
@ -330,8 +330,8 @@ class CellStatusBarItem extends Disposable {
|
|||
this.container.setAttribute('role', role || '');
|
||||
|
||||
if (item.tooltip) {
|
||||
const hoverContent = typeof item.tooltip === 'string' ? item.tooltip : { markdown: item.tooltip, markdownNotSupportedFallback: undefined } satisfies IUpdatableHoverTooltipMarkdownString;
|
||||
this._itemDisposables.add(this._hoverService.setupUpdatableHover(this._hoverDelegate, this.container, hoverContent));
|
||||
const hoverContent = typeof item.tooltip === 'string' ? item.tooltip : { markdown: item.tooltip, markdownNotSupportedFallback: undefined } satisfies IManagedHoverTooltipMarkdownString;
|
||||
this._itemDisposables.add(this._hoverService.setupManagedHover(this._hoverDelegate, this.container, hoverContent));
|
||||
}
|
||||
|
||||
this.container.classList.toggle('cell-status-item-has-command', !!item.command);
|
||||
|
|
|
@ -60,7 +60,7 @@ import { registerNavigableContainer } from 'vs/workbench/browser/actions/widgetN
|
|||
import { IActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
const $ = DOM.$;
|
||||
|
@ -903,7 +903,7 @@ class ActionsColumnRenderer implements ITableRenderer<IKeybindingItemEntry, IAct
|
|||
|
||||
interface ICommandColumnTemplateData {
|
||||
commandColumn: HTMLElement;
|
||||
commandColumnHover: IUpdatableHover;
|
||||
commandColumnHover: IManagedHover;
|
||||
commandLabelContainer: HTMLElement;
|
||||
commandLabel: HighlightedLabel;
|
||||
commandDefaultLabelContainer: HTMLElement;
|
||||
|
@ -925,7 +925,7 @@ class CommandColumnRenderer implements ITableRenderer<IKeybindingItemEntry, ICom
|
|||
|
||||
renderTemplate(container: HTMLElement): ICommandColumnTemplateData {
|
||||
const commandColumn = DOM.append(container, $('.command'));
|
||||
const commandColumnHover = this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), commandColumn, '');
|
||||
const commandColumnHover = this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), commandColumn, '');
|
||||
const commandLabelContainer = DOM.append(commandColumn, $('.command-label'));
|
||||
const commandLabel = new HighlightedLabel(commandLabelContainer);
|
||||
const commandDefaultLabelContainer = DOM.append(commandColumn, $('.command-default-label'));
|
||||
|
@ -1011,7 +1011,7 @@ class KeybindingColumnRenderer implements ITableRenderer<IKeybindingItemEntry, I
|
|||
|
||||
interface ISourceColumnTemplateData {
|
||||
sourceColumn: HTMLElement;
|
||||
sourceColumnHover: IUpdatableHover;
|
||||
sourceColumnHover: IManagedHover;
|
||||
sourceLabel: HighlightedLabel;
|
||||
extensionContainer: HTMLElement;
|
||||
extensionLabel: HTMLAnchorElement;
|
||||
|
@ -1046,7 +1046,7 @@ class SourceColumnRenderer implements ITableRenderer<IKeybindingItemEntry, ISour
|
|||
|
||||
renderTemplate(container: HTMLElement): ISourceColumnTemplateData {
|
||||
const sourceColumn = DOM.append(container, $('.source'));
|
||||
const sourceColumnHover = this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), sourceColumn, '');
|
||||
const sourceColumnHover = this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), sourceColumn, '');
|
||||
const sourceLabel = new HighlightedLabel(DOM.append(sourceColumn, $('.source-label')));
|
||||
const extensionContainer = DOM.append(sourceColumn, $('.extension-container'));
|
||||
const extensionLabel = DOM.append<HTMLAnchorElement>(extensionContainer, $('a.extension-label', { tabindex: 0 }));
|
||||
|
@ -1213,7 +1213,7 @@ class WhenColumnRenderer implements ITableRenderer<IKeybindingItemEntry, IWhenCo
|
|||
|
||||
if (keybindingItemEntry.keybindingItem.when) {
|
||||
templateData.whenLabel.set(keybindingItemEntry.keybindingItem.when, keybindingItemEntry.whenMatches, keybindingItemEntry.keybindingItem.when);
|
||||
templateData.disposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), templateData.element, keybindingItemEntry.keybindingItem.when));
|
||||
templateData.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), templateData.element, keybindingItemEntry.keybindingItem.when));
|
||||
} else {
|
||||
templateData.whenLabel.set('-');
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ import { settingsEditIcon, settingsScopeDropDownIcon } from 'vs/workbench/contri
|
|||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { ILanguageService } from 'vs/editor/common/languages/language';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
|
||||
export class FolderSettingsActionViewItem extends BaseActionViewItem {
|
||||
|
@ -45,7 +45,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem {
|
|||
|
||||
private container!: HTMLElement;
|
||||
private anchorElement!: HTMLElement;
|
||||
private anchorElementHover!: IUpdatableHover;
|
||||
private anchorElementHover!: IManagedHover;
|
||||
private labelElement!: HTMLElement;
|
||||
private detailsElement!: HTMLElement;
|
||||
private dropDownElement!: HTMLElement;
|
||||
|
@ -93,7 +93,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem {
|
|||
'aria-haspopup': 'true',
|
||||
'tabindex': '0'
|
||||
}, this.labelElement, this.detailsElement, this.dropDownElement);
|
||||
this.anchorElementHover = this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.anchorElement, ''));
|
||||
this.anchorElementHover = this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.anchorElement, ''));
|
||||
this._register(DOM.addDisposableListener(this.anchorElement, DOM.EventType.MOUSE_DOWN, e => DOM.EventHelper.stop(e)));
|
||||
this._register(DOM.addDisposableListener(this.anchorElement, DOM.EventType.CLICK, e => this.onClick(e)));
|
||||
this._register(DOM.addDisposableListener(this.container, DOM.EventType.KEY_UP, e => this.onKeyUp(e)));
|
||||
|
|
|
@ -805,7 +805,7 @@ export abstract class AbstractSettingRenderer extends Disposable implements ITre
|
|||
|
||||
const descriptionElement = DOM.append(container, $('.setting-item-description'));
|
||||
const modifiedIndicatorElement = DOM.append(container, $('.setting-item-modified-indicator'));
|
||||
toDispose.add(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), modifiedIndicatorElement, () => localize('modified', "The setting has been configured in the current scope.")));
|
||||
toDispose.add(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), modifiedIndicatorElement, () => localize('modified', "The setting has been configured in the current scope.")));
|
||||
|
||||
const valueElement = DOM.append(container, $('.setting-item-value'));
|
||||
const controlElement = DOM.append(valueElement, $('div.setting-item-control'));
|
||||
|
@ -892,7 +892,7 @@ export abstract class AbstractSettingRenderer extends Disposable implements ITre
|
|||
|
||||
const titleTooltip = setting.key + (element.isConfigured ? ' - Modified' : '');
|
||||
template.categoryElement.textContent = element.displayCategory ? (element.displayCategory + ': ') : '';
|
||||
template.elementDisposables.add(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), template.categoryElement, titleTooltip));
|
||||
template.elementDisposables.add(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), template.categoryElement, titleTooltip));
|
||||
|
||||
template.labelElement.text = element.displayLabel;
|
||||
template.labelElement.title = titleTooltip;
|
||||
|
@ -1835,7 +1835,7 @@ export class SettingBoolRenderer extends AbstractSettingRenderer implements ITre
|
|||
const controlElement = DOM.append(descriptionAndValueElement, $('.setting-item-bool-control'));
|
||||
const descriptionElement = DOM.append(descriptionAndValueElement, $('.setting-item-description'));
|
||||
const modifiedIndicatorElement = DOM.append(container, $('.setting-item-modified-indicator'));
|
||||
toDispose.add(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), modifiedIndicatorElement, localize('modified', "The setting has been configured in the current scope.")));
|
||||
toDispose.add(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), modifiedIndicatorElement, localize('modified', "The setting has been configured in the current scope.")));
|
||||
|
||||
const deprecationWarningElement = DOM.append(container, $('.setting-item-deprecation-message'));
|
||||
|
||||
|
|
|
@ -684,7 +684,7 @@ export class ListSettingWidget extends AbstractListSettingWidget<IListDataItem>
|
|||
: localize('listSiblingHintLabel', "List item `{0}` with sibling `${1}`", value.data, sibling);
|
||||
|
||||
const { rowElement } = rowElementGroup;
|
||||
this.listDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), rowElement, title));
|
||||
this.listDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), rowElement, title));
|
||||
rowElement.setAttribute('aria-label', title);
|
||||
}
|
||||
|
||||
|
@ -744,7 +744,7 @@ export class ExcludeSettingWidget extends ListSettingWidget {
|
|||
: localize('excludeSiblingHintLabel', "Exclude files matching `{0}`, only when a file matching `{1}` is present", value.data, sibling);
|
||||
|
||||
const { rowElement } = rowElementGroup;
|
||||
this.listDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), rowElement, title));
|
||||
this.listDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), rowElement, title));
|
||||
rowElement.setAttribute('aria-label', title);
|
||||
}
|
||||
|
||||
|
@ -774,7 +774,7 @@ export class IncludeSettingWidget extends ListSettingWidget {
|
|||
: localize('includeSiblingHintLabel', "Include files matching `{0}`, only when a file matching `{1}` is present", value.data, sibling);
|
||||
|
||||
const { rowElement } = rowElementGroup;
|
||||
this.listDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), rowElement, title));
|
||||
this.listDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), rowElement, title));
|
||||
rowElement.setAttribute('aria-label', title);
|
||||
}
|
||||
|
||||
|
@ -1184,10 +1184,10 @@ export class ObjectSettingDropdownWidget extends AbstractListSettingWidget<IObje
|
|||
const accessibleDescription = localize('objectPairHintLabel', "The property `{0}` is set to `{1}`.", item.key.data, item.value.data);
|
||||
|
||||
const keyDescription = this.getEnumDescription(item.key) ?? item.keyDescription ?? accessibleDescription;
|
||||
this.listDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), keyElement, keyDescription));
|
||||
this.listDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), keyElement, keyDescription));
|
||||
|
||||
const valueDescription = this.getEnumDescription(item.value) ?? accessibleDescription;
|
||||
this.listDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), valueElement!, valueDescription));
|
||||
this.listDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), valueElement!, valueDescription));
|
||||
|
||||
rowElement.setAttribute('aria-label', accessibleDescription);
|
||||
}
|
||||
|
@ -1347,7 +1347,7 @@ export class ObjectSettingCheckboxWidget extends AbstractListSettingWidget<IObje
|
|||
const title = item.keyDescription ?? accessibleDescription;
|
||||
const { rowElement, keyElement, valueElement } = rowElementGroup;
|
||||
|
||||
this.listDisposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), keyElement, title));
|
||||
this.listDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), keyElement, title));
|
||||
valueElement!.setAttribute('aria-label', accessibleDescription);
|
||||
rowElement.setAttribute('aria-label', accessibleDescription);
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ export class TOCRenderer implements ITreeRenderer<SettingsTreeGroupElement, neve
|
|||
const label = element.label;
|
||||
|
||||
template.labelElement.textContent = label;
|
||||
template.elementDisposables.add(this._hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), template.labelElement, label));
|
||||
template.elementDisposables.add(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), template.labelElement, label));
|
||||
|
||||
if (count) {
|
||||
template.countElement.textContent = ` (${count})`;
|
||||
|
|
|
@ -104,7 +104,7 @@ import { clamp, rot } from 'vs/base/common/numbers';
|
|||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { MarkdownString } from 'vs/base/common/htmlContent';
|
||||
import type { IUpdatableHover, IUpdatableHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover, IManagedHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import { IHoverService } from 'vs/platform/hover/browser/hover';
|
||||
import { OpenScmGroupAction } from 'vs/workbench/contrib/multiDiffEditor/browser/scmMultiDiffSourceResolver';
|
||||
import { HoverController } from 'vs/editor/contrib/hover/browser/hoverController';
|
||||
|
@ -862,7 +862,7 @@ interface HistoryItemTemplate {
|
|||
readonly iconContainer: HTMLElement;
|
||||
readonly label: IconLabel;
|
||||
readonly statsContainer: HTMLElement;
|
||||
readonly statsCustomHover: IUpdatableHover;
|
||||
readonly statsCustomHover: IManagedHover;
|
||||
readonly filesLabel: HTMLElement;
|
||||
readonly insertionsLabel: HTMLElement;
|
||||
readonly deletionsLabel: HTMLElement;
|
||||
|
@ -902,7 +902,7 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
|
|||
const insertionsLabel = append(statsContainer, $('.insertions-label'));
|
||||
const deletionsLabel = append(statsContainer, $('.deletions-label'));
|
||||
|
||||
const statsCustomHover = this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), statsContainer, '');
|
||||
const statsCustomHover = this.hoverService.setupManagedHover(getDefaultHoverDelegate('element'), statsContainer, '');
|
||||
disposables.add(statsCustomHover);
|
||||
|
||||
return { iconContainer, label: iconLabel, actionBar, statsContainer, statsCustomHover, filesLabel, insertionsLabel, deletionsLabel, elementDisposables: new DisposableStore(), disposables };
|
||||
|
@ -936,7 +936,7 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
|
|||
throw new Error('Should never happen since node is incompressible');
|
||||
}
|
||||
|
||||
private getTooltip(historyItem: SCMHistoryItemTreeElement): IUpdatableHoverTooltipMarkdownString {
|
||||
private getTooltip(historyItem: SCMHistoryItemTreeElement): IManagedHoverTooltipMarkdownString {
|
||||
const markdown = new MarkdownString('', { isTrusted: true, supportThemeIcons: true });
|
||||
|
||||
if (historyItem.author) {
|
||||
|
|
|
@ -365,7 +365,7 @@ export class MatchRenderer extends Disposable implements ICompressibleTreeRender
|
|||
templateData.after.textContent = preview.after;
|
||||
|
||||
const title = (preview.fullBefore + (replace ? match.replaceString : preview.inside) + preview.after).trim().substr(0, 999);
|
||||
templateData.disposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), templateData.parent, title));
|
||||
templateData.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), templateData.parent, title));
|
||||
|
||||
SearchContext.IsEditableItemKey.bindTo(templateData.contextKeyService).set(!(match instanceof MatchInNotebook && match.isReadonly()));
|
||||
|
||||
|
@ -377,7 +377,7 @@ export class MatchRenderer extends Disposable implements ICompressibleTreeRender
|
|||
templateData.lineNumber.classList.toggle('show', (numLines > 0) || showLineNumbers);
|
||||
|
||||
templateData.lineNumber.textContent = lineNumberStr + extraLinesStr;
|
||||
templateData.disposables.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), templateData.lineNumber, this.getMatchTitle(match, showLineNumbers)));
|
||||
templateData.disposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), templateData.lineNumber, this.getMatchTitle(match, showLineNumbers)));
|
||||
|
||||
templateData.actions.context = { viewer: this.searchView.getControl(), element: match } satisfies ISearchActionContext;
|
||||
|
||||
|
|
|
@ -455,7 +455,7 @@ export class SearchView extends ViewPane {
|
|||
// Toggle query details button
|
||||
this.toggleQueryDetailsButton = dom.append(this.queryDetails,
|
||||
$('.more' + ThemeIcon.asCSSSelector(searchDetailsIcon), { tabindex: 0, role: 'button' }));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), this.toggleQueryDetailsButton, nls.localize('moreSearch', "Toggle Search Details")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('element'), this.toggleQueryDetailsButton, nls.localize('moreSearch', "Toggle Search Details")));
|
||||
|
||||
this._register(dom.addDisposableListener(this.toggleQueryDetailsButton, dom.EventType.CLICK, e => {
|
||||
dom.EventHelper.stop(e);
|
||||
|
@ -2222,7 +2222,7 @@ class SearchLinkButton extends Disposable {
|
|||
constructor(label: string, handler: (e: dom.EventLike) => unknown, hoverService: IHoverService, tooltip?: string) {
|
||||
super();
|
||||
this.element = $('a.pointer', { tabindex: 0 }, label);
|
||||
this._register(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.element, tooltip));
|
||||
this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, tooltip));
|
||||
this.addEventHandlers(handler);
|
||||
}
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ export class SearchEditor extends AbstractTextCodeEditor<SearchEditorViewState>
|
|||
|
||||
// Toggle query details button
|
||||
this.toggleQueryDetailsButton = DOM.append(this.includesExcludesContainer, DOM.$('.expand' + ThemeIcon.asCSSSelector(searchDetailsIcon), { tabindex: 0, role: 'button' }));
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), this.toggleQueryDetailsButton, localize('moreSearch', "Toggle Search Details")));
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('element'), this.toggleQueryDetailsButton, localize('moreSearch', "Toggle Search Details")));
|
||||
this._register(DOM.addDisposableListener(this.toggleQueryDetailsButton, DOM.EventType.CLICK, e => {
|
||||
DOM.EventHelper.stop(e);
|
||||
this.toggleIncludesExcludes();
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { h } from 'vs/base/browser/dom';
|
||||
import type { IUpdatableHover, IUpdatableHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover, IManagedHoverTooltipMarkdownString } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { MarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { Lazy } from 'vs/base/common/lazy';
|
||||
|
@ -67,7 +67,7 @@ export class ManagedTestCoverageBars extends Disposable {
|
|||
});
|
||||
|
||||
private readonly visibleStore = this._register(new DisposableStore());
|
||||
private readonly customHovers: IUpdatableHover[] = [];
|
||||
private readonly customHovers: IManagedHover[] = [];
|
||||
|
||||
/** Gets whether coverage is currently visible for the resource. */
|
||||
public get visible() {
|
||||
|
@ -82,8 +82,8 @@ export class ManagedTestCoverageBars extends Disposable {
|
|||
super();
|
||||
}
|
||||
|
||||
private attachHover(target: HTMLElement, factory: (coverage: CoverageBarSource) => string | IUpdatableHoverTooltipMarkdownString | undefined) {
|
||||
this._register(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('element'), target, () => this._coverage && factory(this._coverage)));
|
||||
private attachHover(target: HTMLElement, factory: (coverage: CoverageBarSource) => string | IManagedHoverTooltipMarkdownString | undefined) {
|
||||
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('element'), target, () => this._coverage && factory(this._coverage)));
|
||||
}
|
||||
|
||||
public setCoverageInfo(coverage: CoverageBarSource | undefined) {
|
||||
|
@ -165,7 +165,7 @@ const stmtCoverageText = (coverage: CoverageBarSource) => localize('statementCov
|
|||
const fnCoverageText = (coverage: CoverageBarSource) => coverage.declaration && localize('functionCoverage', '{0}/{1} functions covered ({2})', nf.format(coverage.declaration.covered), nf.format(coverage.declaration.total), coverUtils.displayPercent(coverUtils.percent(coverage.declaration)));
|
||||
const branchCoverageText = (coverage: CoverageBarSource) => coverage.branch && localize('branchCoverage', '{0}/{1} branches covered ({2})', nf.format(coverage.branch.covered), nf.format(coverage.branch.total), coverUtils.displayPercent(coverUtils.percent(coverage.branch)));
|
||||
|
||||
const getOverallHoverText = (coverage: CoverageBarSource): IUpdatableHoverTooltipMarkdownString => {
|
||||
const getOverallHoverText = (coverage: CoverageBarSource): IManagedHoverTooltipMarkdownString => {
|
||||
const str = [
|
||||
stmtCoverageText(coverage),
|
||||
fnCoverageText(coverage),
|
||||
|
|
|
@ -8,7 +8,7 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
|||
import { IActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems';
|
||||
import { ActionBar, IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||
import { Button } from 'vs/base/browser/ui/button/button';
|
||||
import type { IUpdatableHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import type { IManagedHover } from 'vs/base/browser/ui/hover/hover';
|
||||
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegateFactory';
|
||||
import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels';
|
||||
import { IIdentityProvider, IKeyboardNavigationLabelProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
||||
|
@ -448,7 +448,7 @@ class ResultSummaryView extends Disposable {
|
|||
private elementsWereAttached = false;
|
||||
private badgeType: TestingCountBadge;
|
||||
private lastBadge?: NumberBadge | IconBadge;
|
||||
private countHover: IUpdatableHover;
|
||||
private countHover: IManagedHover;
|
||||
private readonly badgeDisposable = this._register(new MutableDisposable());
|
||||
private readonly renderLoop = this._register(new RunOnceScheduler(() => this.render(), SUMMARY_RENDER_INTERVAL));
|
||||
private readonly elements = dom.h('div.result-summary', [
|
||||
|
@ -480,7 +480,7 @@ class ResultSummaryView extends Disposable {
|
|||
}
|
||||
}));
|
||||
|
||||
this.countHover = this._register(hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), this.elements.count, ''));
|
||||
this.countHover = this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.elements.count, ''));
|
||||
|
||||
const ab = this._register(new ActionBar(this.elements.rerun, {
|
||||
actionViewItemProvider: (action, options) => createActionViewItem(instantiationService, action, options),
|
||||
|
@ -1344,7 +1344,7 @@ class ErrorRenderer implements ITreeRenderer<TestTreeErrorMessage, FuzzyScore, I
|
|||
const result = this.renderer.render(element.message, { inline: true });
|
||||
data.label.appendChild(result.element);
|
||||
}
|
||||
data.disposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.label, element.description));
|
||||
data.disposable.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.label, element.description));
|
||||
}
|
||||
|
||||
disposeTemplate(data: IErrorTemplateData): void {
|
||||
|
@ -1465,7 +1465,7 @@ class TestItemRenderer extends Disposable
|
|||
data.icon.className += ' retired';
|
||||
}
|
||||
|
||||
data.elementDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), data.label, getLabelForTestTreeElement(node.element)));
|
||||
data.elementDisposable.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.label, getLabelForTestTreeElement(node.element)));
|
||||
if (node.element.test.item.label.trim()) {
|
||||
dom.reset(data.label, ...renderLabelWithIcons(node.element.test.item.label));
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue