diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin-theorem.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin-theorem.ts index 7fd3efa80d..7c010644f1 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin-theorem.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin-theorem.ts @@ -33,6 +33,10 @@ export class BeginTheoremWidget extends BeginWidget { ) } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + buildName(nameElement: HTMLSpanElement, view: EditorView) { nameElement.textContent = this.name if (this.argumentNode) { diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin.ts index 9059940277..70e508d93e 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/begin.ts @@ -41,6 +41,10 @@ export class BeginWidget extends WidgetType { return event.type !== 'mouseup' } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + buildName(name: HTMLSpanElement, view: EditorView) { name.textContent = this.environment } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts index c5d288017f..12949f5ac9 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts @@ -21,4 +21,8 @@ export class BraceWidget extends WidgetType { eq(widget: BraceWidget) { return widget.content === this.content } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/character.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/character.ts index 2ab20a19a1..96f3783c18 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/character.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/character.ts @@ -24,6 +24,10 @@ export class CharacterWidget extends WidgetType { ignoreEvent(event: Event) { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } export const COMMAND_SUBSTITUTIONS = new Map([ diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/description-item.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/description-item.ts index aec814e14e..2fe95955c2 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/description-item.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/description-item.ts @@ -25,6 +25,10 @@ export class DescriptionItemWidget extends WidgetType { return event.type !== 'mousedown' && event.type !== 'mouseup' } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + setProperties(element: HTMLElement) { element.style.setProperty('--list-depth', String(this.listDepth)) } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/divider.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/divider.ts index fe22963a50..f202e13936 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/divider.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/divider.ts @@ -14,4 +14,8 @@ export class DividerWidget extends WidgetType { updateDOM(): boolean { return true } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-graphics.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-graphics.ts index a4ef1dd6c0..abdc9ba484 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-graphics.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-graphics.ts @@ -41,6 +41,10 @@ export class EditableGraphicsWidget extends GraphicsWidget { return true } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + createEditButton(view: EditorView) { const button = document.createElement('button') button.setAttribute('aria-label', view.state.phrase('edit_figure')) diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-inline-graphics.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-inline-graphics.ts index bc65781a5e..cf2717bb16 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-inline-graphics.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/editable-inline-graphics.ts @@ -40,6 +40,10 @@ export class EditableInlineGraphicsWidget extends EditableGraphicsWidget { return event.type !== 'mousedown' && event.type !== 'mouseup' } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + // We set the actual figure width on the span rather than the img element getFigureWidth(): string { return '100%' diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end-document.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end-document.ts index 0bca4f387e..72b1269b3a 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end-document.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end-document.ts @@ -21,6 +21,10 @@ export class EndDocumentWidget extends WidgetType { return true } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + get estimatedHeight() { return 30 } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end.ts index f3c50ef4ec..232399de3b 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/end.ts @@ -10,4 +10,8 @@ export class EndWidget extends WidgetType { eq(widget: EndWidget) { return true } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/environment-line.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/environment-line.ts index 47d30812e9..d6ab42503e 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/environment-line.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/environment-line.ts @@ -39,4 +39,8 @@ export class EnvironmentLineWidget extends WidgetType { ignoreEvent(event: Event): boolean { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/footnote.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/footnote.ts index 2c8622dc78..0530a5ffed 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/footnote.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/footnote.ts @@ -32,4 +32,8 @@ export class FootnoteWidget extends WidgetType { ignoreEvent(event: Event) { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/frame.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/frame.ts index 8ee2331011..e38c1c7931 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/frame.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/frame.ts @@ -74,4 +74,8 @@ export class FrameWidget extends WidgetType { ignoreEvent(event: Event) { return event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/graphics.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/graphics.ts index f6c744aaec..a4f2588516 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/graphics.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/graphics.ts @@ -74,6 +74,10 @@ export class GraphicsWidget extends WidgetType { this.destroyed = true } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + get estimatedHeight(): number { return this.height } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts index 54d8112dfc..55d4338e96 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts @@ -27,4 +27,8 @@ export class IconBraceWidget extends WidgetType { element.textContent = this.content ?? '' return true } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/indicator.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/indicator.ts index 88eea0e6af..cfa72366e3 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/indicator.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/indicator.ts @@ -24,4 +24,8 @@ export class IndicatorWidget extends WidgetType { ignoreEvent(event: Event) { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/inline-graphics.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/inline-graphics.ts index 543f39d5a0..5ac11c6bae 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/inline-graphics.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/inline-graphics.ts @@ -16,4 +16,8 @@ export class InlineGraphicsWidget extends GraphicsWidget { ignoreEvent(event: Event) { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/item.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/item.ts index 36ed7aac64..9b48035961 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/item.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/item.ts @@ -51,6 +51,10 @@ export class ItemWidget extends WidgetType { return event.type !== 'mousedown' && event.type !== 'mouseup' } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + setProperties(element: HTMLElement) { element.style.setProperty('--list-depth', String(this.listDepth)) element.style.setProperty('--list-ordinal', String(this.ordinal)) diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/latex.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/latex.ts index 93854fab90..8878df9d68 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/latex.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/latex.ts @@ -15,4 +15,8 @@ export class LaTeXWidget extends WidgetType { ignoreEvent(event: Event) { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/maketitle.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/maketitle.ts index 4d6c480ac6..7d659531e4 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/maketitle.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/maketitle.ts @@ -51,6 +51,10 @@ export class MakeTitleWidget extends WidgetType { this.destroyed = true } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + buildContent(view: EditorView, element: HTMLElement) { if (this.preamble.title) { const titleElement = buildTitleElement( diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/math.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/math.ts index 4c889f0ba3..b82f966a3f 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/math.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/math.ts @@ -65,6 +65,10 @@ export class MathWidget extends WidgetType { this.destroyed = true } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + async renderMath(element: HTMLElement) { const MathJax = await loadMathJax() diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/preamble.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/preamble.ts index 10215eecc9..5f37469ab1 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/preamble.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/preamble.ts @@ -84,6 +84,10 @@ export class PreambleWidget extends WidgetType { return this.expanded === other.expanded } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + get estimatedHeight() { return this.expanded ? -1 : 54 } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/space.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/space.ts index 1379243b88..90950322b8 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/space.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/space.ts @@ -24,6 +24,10 @@ export class SpaceWidget extends WidgetType { ignoreEvent(event: Event) { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } // https://tex.stackexchange.com/a/74354 diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/table-rendering-error.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/table-rendering-error.ts index 4cbb5b6bd3..b5bffce6d4 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/table-rendering-error.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/table-rendering-error.ts @@ -40,4 +40,8 @@ export class TableRenderingErrorWidget extends WidgetType { } return element } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tabular.tsx b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tabular.tsx index 7976c1b900..70fd240922 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tabular.tsx +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tabular.tsx @@ -59,6 +59,10 @@ export class TabularWidget extends WidgetType { return true } + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } + get estimatedHeight() { return this.parsedTableData.table.rows.length * 50 } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tex.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tex.ts index 5b8393a466..93469f472e 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tex.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tex.ts @@ -15,4 +15,8 @@ export class TeXWidget extends WidgetType { ignoreEvent(event: Event) { return event.type !== 'mousedown' && event.type !== 'mouseup' } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tilde.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tilde.ts index a7a07c5f5e..2c74b07e76 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tilde.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/tilde.ts @@ -10,4 +10,8 @@ export class TildeWidget extends WidgetType { eq() { return true } + + coordsAt(element: HTMLElement) { + return element.getBoundingClientRect() + } }