Merge pull request #36494 from overleaf/em-remove-visual-options

Remove the Options object from the visual editor extensions

GitOrigin-RevId: f06e60b88ef77d3a670d7d956d1a86c116d71873
This commit is contained in:
Eric Mc Sween
2026-09-17 11:55:18 +00:00
committed by Copybot
parent 33e2a1e282
commit 2d3474fbdb
9 changed files with 1114 additions and 1109 deletions
File diff suppressed because it is too large Load Diff
@@ -3,8 +3,8 @@ import { placeSelectionInsideBlock } from '../selection'
import { isEqual } from 'lodash'
import { FigureData } from '../../figure-modal'
import { debugConsole } from '@/utils/debugging'
import { PreviewPath } from '../../../../../../../types/preview-path'
import type { PDFDocumentProxy } from 'pdfjs-dist/types/src/display/api'
import { previewByPathFacet } from '../../file-preview'
import { PdfDestroyLock } from '../utils/pdf-destroy-lock'
// Module level to synchronize across all GraphicsWidgets
@@ -25,7 +25,6 @@ export class GraphicsWidget extends WidgetType {
constructor(
public filePath: string,
public previewByPath: (path: string) => PreviewPath | null,
public centered: boolean,
public figureData: FigureData | null
) {
@@ -107,7 +106,7 @@ export class GraphicsWidget extends WidgetType {
renderGraphic(element: HTMLElement, view: EditorView) {
element.textContent = '' // ensure the element is empty
const preview = this.previewByPath(this.filePath)
const preview = view.state.facet(previewByPathFacet)(this.filePath)
element.dataset.filepath = this.filePath
element.dataset.width = this.figureData?.width?.toString()
@@ -21,14 +21,8 @@ import { pasteHtml } from './paste-html'
import { commandTooltip } from '../command-tooltip'
import { tableGeneratorTheme } from './table-generator'
import { debugConsole } from '@/utils/debugging'
import { PreviewPath } from '../../../../../../types/preview-path'
import { getFileExtension } from '../../utils/file'
type Options = {
visual: boolean
previewByPath: (path: string) => PreviewPath | null
}
// Module-provided visual editors registered via the
// `sourceEditorVisualExtensions` hook. Module exposes `getExtensions(ext)`,
// returning the visual-mode extensions for that file extension. A module match takes precedence
@@ -55,17 +49,16 @@ const visualState = StateField.define<boolean>({
},
})
const configureVisualExtensions = (options: Options) =>
options.visual ? sharedVisualExtensions() : []
const configureVisualExtensions = (showVisual: boolean) =>
showVisual ? sharedVisualExtensions() : []
export const visual = (docName: string, options: Options): Extension => {
const extensions =
visualModuleExtensions(docName) ?? latexVisualExtensions(options)
export const visual = (docName: string, showVisual: boolean): Extension => {
const extensions = visualModuleExtensions(docName) ?? latexVisualExtensions()
return [
visualState.init(() => options.visual),
visualConf.of(configureVisualExtensions(options)),
visualOnly(options.visual, extensions),
visualState.init(() => showVisual),
visualConf.of(configureVisualExtensions(showVisual)),
visualOnly(showVisual, extensions),
]
}
@@ -73,11 +66,11 @@ export const isVisual = (view: EditorView) => {
return view.state.field(visualState, false) || false
}
export const setVisual = (options: Options): TransactionSpec => {
export const setVisual = (showVisual: boolean): TransactionSpec => {
return {
effects: [
toggleVisualEffect.of(options.visual),
visualConf.reconfigure(configureVisualExtensions(options)),
toggleVisualEffect.of(showVisual),
visualConf.reconfigure(configureVisualExtensions(showVisual)),
],
}
}
@@ -202,9 +195,9 @@ const sharedVisualExtensions = () => [
EditorView.contentAttributes.of({ 'aria-label': 'Visual Editor editing' }),
]
const latexVisualExtensions = (options: Options): Extension => [
const latexVisualExtensions = (): Extension => [
listItemMarker,
atomicDecorations(options),
atomicDecorations,
markDecorations, // NOTE: must be after atomicDecorations, so that mark decorations wrap inline widgets
visualKeymap,
commandTooltip,