From 4ce14c1f230263f8529d741536306e5084bd72ef Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 12 Aug 2024 09:51:19 +0200 Subject: [PATCH] Export a gutterWidgetClass facet FEATURE: The new `gutterWidgetClass` facet makes it possible to add a class to gutter elements next to widgets. --- src/README.md | 2 ++ src/gutter.ts | 13 +++++++++++-- src/index.ts | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/README.md b/src/README.md index b8f2ceb..d629ca6 100644 --- a/src/README.md +++ b/src/README.md @@ -95,6 +95,8 @@ example](../../examples/gutter/). @gutterLineClass +@gutterWidgetClass + @lineNumberMarkers @lineNumberWidgetMarker diff --git a/src/gutter.ts b/src/gutter.ts index 58bdb1b..6d625f6 100644 --- a/src/gutter.ts +++ b/src/gutter.ts @@ -43,6 +43,11 @@ GutterMarker.prototype.point = true /// in all gutters for the line). export const gutterLineClass = Facet.define>() +/// Facet used to add a class to all gutter elements next to a widget. +/// Should not provide widgets with a `toDOM` method. +export const gutterWidgetClass = + Facet.define<(view: EditorView, widget: WidgetType, block: BlockInfo) => GutterMarker | null>() + type Handlers = {[event: string]: (view: EditorView, line: BlockInfo, event: Event) => boolean} interface GutterConfig { @@ -272,8 +277,12 @@ class UpdateContext { } widget(view: EditorView, block: BlockInfo) { - let marker = this.gutter.config.widgetMarker(view, block.widget!, block) - if (marker) this.addElement(view, block, [marker]) + let marker = this.gutter.config.widgetMarker(view, block.widget!, block), markers = marker ? [marker] : null + for (let cls of view.state.facet(gutterWidgetClass)) { + let marker = cls(view, block.widget!, block) + if (marker) (markers || (markers = [])).push(marker) + } + if (markers) this.addElement(view, block, markers) } finish() { diff --git a/src/index.ts b/src/index.ts index 053e6a8..b3dd35f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,7 @@ export {showTooltip, Tooltip, TooltipView, tooltips, getTooltip, hoverTooltip, H closeHoverTooltips, repositionTooltips} from "./tooltip" export {showPanel, PanelConstructor, Panel, getPanel, panels} from "./panel" export {lineNumbers, highlightActiveLineGutter, gutter, gutters, GutterMarker, - gutterLineClass, lineNumberMarkers, lineNumberWidgetMarker} from "./gutter" + gutterLineClass, gutterWidgetClass, lineNumberMarkers, lineNumberWidgetMarker} from "./gutter" export {highlightWhitespace, highlightTrailingWhitespace} from "./highlight-space" import {HeightMap, HeightOracle, MeasuredHeights, QueryType, clearHeightChangeFlag, heightChangeFlag} from "./heightmap"