Skip to content

Commit

Permalink
Expose glyphMarginHoverMessage (Fixes microsoft/monaco-editor#292)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexdima committed Jan 14, 2017
1 parent c34bd4a commit 3145a81
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 22 deletions.
3 changes: 1 addition & 2 deletions src/vs/editor/common/editorCommon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1129,9 +1129,8 @@ export interface IModelDecorationOptions {
className?: string;
/**
* Message to be rendered when hovering over the glyph margin decoration.
* @internal
*/
glyphMarginHoverMessage?: string;
glyphMarginHoverMessage?: MarkedString | MarkedString[];
/**
* Array of MarkedString to render as the decoration message.
*/
Expand Down
6 changes: 3 additions & 3 deletions src/vs/editor/common/model/textModelWithDecorations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -834,8 +834,8 @@ export class ModelDecorationOptions implements editorCommon.IModelDecorationOpti

stickiness: editorCommon.TrackedRangeStickiness;
className: string;
glyphMarginHoverMessage: string;
hoverMessage: MarkedString | MarkedString[];
glyphMarginHoverMessage: MarkedString | MarkedString[];
isWholeLine: boolean;
showInOverviewRuler: string;
overviewRuler: editorCommon.IModelDecorationOverviewRulerOptions;
Expand All @@ -849,8 +849,8 @@ export class ModelDecorationOptions implements editorCommon.IModelDecorationOpti
constructor(options: editorCommon.IModelDecorationOptions) {
this.stickiness = options.stickiness || editorCommon.TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges;
this.className = options.className ? cleanClassName(options.className) : strings.empty;
this.glyphMarginHoverMessage = options.glyphMarginHoverMessage || strings.empty;
this.hoverMessage = options.hoverMessage || [];
this.glyphMarginHoverMessage = options.glyphMarginHoverMessage || strings.empty;
this.isWholeLine = options.isWholeLine || false;
this.overviewRuler = _normalizeOverviewRulerOptions(options.overviewRuler, options.showInOverviewRuler);
this.glyphMarginClassName = options.glyphMarginClassName ? cleanClassName(options.glyphMarginClassName) : strings.empty;
Expand All @@ -873,7 +873,6 @@ export class ModelDecorationOptions implements editorCommon.IModelDecorationOpti
return (
this.stickiness === other.stickiness
&& this.className === other.className
&& this.glyphMarginHoverMessage === other.glyphMarginHoverMessage
&& this.isWholeLine === other.isWholeLine
&& this.showInOverviewRuler === other.showInOverviewRuler
&& this.glyphMarginClassName === other.glyphMarginClassName
Expand All @@ -883,6 +882,7 @@ export class ModelDecorationOptions implements editorCommon.IModelDecorationOpti
&& this.beforeContentClassName === other.beforeContentClassName
&& this.afterContentClassName === other.afterContentClassName
&& markedStringsEquals(this.hoverMessage, other.hoverMessage)
&& markedStringsEquals(this.glyphMarginHoverMessage, other.glyphMarginHoverMessage)
&& ModelDecorationOptions._overviewRulerEquals(this.overviewRuler, other.overviewRuler)
);
}
Expand Down
48 changes: 31 additions & 17 deletions src/vs/editor/contrib/hover/browser/modesGlyphHover.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
'use strict';

import { IModelDecoration, IRange } from 'vs/editor/common/editorCommon';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { HoverOperation, IHoverComputer } from './hoverOperation';
import { GlyphHoverWidget } from './hoverWidgets';
Expand All @@ -16,11 +15,10 @@ import { onUnexpectedError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
import { IModeService } from 'vs/editor/common/services/modeService';
import { tokenizeToString } from 'vs/editor/common/modes/textToHtmlTokenizer';
import { MarkedString } from 'vs/base/common/htmlContent';

export interface IHoverMessage {
value?: string;
range?: IRange;
className?: string;
value: MarkedString;
}

class MarginComputer implements IHoverComputer<IHoverMessage[]> {
Expand All @@ -44,19 +42,35 @@ class MarginComputer implements IHoverComputer<IHoverMessage[]> {
}

public computeSync(): IHoverMessage[] {
var result: IHoverMessage[] = [],
lineDecorations = this._editor.getLineDecorations(this._lineNumber),
i: number,
len: number,
d: IModelDecoration;

for (i = 0, len = lineDecorations.length; i < len; i++) {
d = lineDecorations[i];

if (d.options.glyphMarginClassName && d.options.glyphMarginHoverMessage) {
result.push({
value: d.options.glyphMarginHoverMessage
});
const hasHoverContent = (contents: MarkedString | MarkedString[]) => {
return contents && (!Array.isArray(contents) || (<MarkedString[]>contents).length > 0);
};
const toHoverMessage = (contents: MarkedString): IHoverMessage => {
return {
value: contents
};
};

let lineDecorations = this._editor.getLineDecorations(this._lineNumber);

let result: IHoverMessage[] = [];
for (let i = 0, len = lineDecorations.length; i < len; i++) {
let d = lineDecorations[i];

if (!d.options.glyphMarginClassName) {
continue;
}

let hoverMessage = d.options.glyphMarginHoverMessage;

if (!hasHoverContent(hoverMessage)) {
continue;
}

if (Array.isArray(hoverMessage)) {
result = result.concat(hoverMessage.map(toHoverMessage));
} else {
result.push(toHoverMessage(hoverMessage));
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/vs/monaco.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,10 @@ declare module monaco.editor {
* CSS class name describing the decoration.
*/
className?: string;
/**
* Message to be rendered when hovering over the glyph margin decoration.
*/
glyphMarginHoverMessage?: MarkedString | MarkedString[];
/**
* Array of MarkedString to render as the decoration message.
*/
Expand Down

0 comments on commit 3145a81

Please sign in to comment.