From bc310ddd1e3134c76db3a24fb3129b0edbb3323b Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Wed, 20 Nov 2024 16:38:48 +0000 Subject: [PATCH] Revert "Allow position of review tooltip to be calculated automatically (#21803)" (#22022) This reverts commit 7d285a9c76032a3238422e15a73ae4b819612b31. GitOrigin-RevId: 792391619bd6f2a9483428088c31ece09a441b33 --- package-lock.json | 17 +++++---- .../source-editor/extensions/index.ts | 10 ------ .../extensions/review-tooltip.ts | 36 +++++++++---------- services/web/package.json | 2 +- 4 files changed, 25 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index ad647918aa..153c33e3c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3432,11 +3432,10 @@ "dev": true }, "node_modules/@codemirror/view": { - "version": "6.34.3", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.3.tgz", - "integrity": "sha512-Ph5d+u8DxIeSgssXEakaakImkzBV4+slwIbcxl9oc9evexJhImeu/G8TK7+zp+IFK9KuJ0BdSn6kTBJeH2CHvA==", + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.0.tgz", + "integrity": "sha512-2vKJ79tOcVfgPYVJM2XjcL1BH5Bsl7/tgn9ilBj3XWeCS5kTRy/NE4FHEj4aMylOl/D3IPNsmZH0WPlB+DyIdA==", "dev": true, - "license": "MIT", "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -41497,7 +41496,7 @@ "@codemirror/lint": "^6.8.2", "@codemirror/search": "github:overleaf/codemirror-search#94f33f7fa6db95dadd3d7aed05c30cdde550835a", "@codemirror/state": "^6.4.1", - "@codemirror/view": "^6.34.3", + "@codemirror/view": "^6.34.0", "@juggle/resize-observer": "^3.3.1", "@lezer/common": "^1.2.3", "@lezer/generator": "^1.7.1", @@ -46531,9 +46530,9 @@ "dev": true }, "@codemirror/view": { - "version": "6.34.3", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.3.tgz", - "integrity": "sha512-Ph5d+u8DxIeSgssXEakaakImkzBV4+slwIbcxl9oc9evexJhImeu/G8TK7+zp+IFK9KuJ0BdSn6kTBJeH2CHvA==", + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.0.tgz", + "integrity": "sha512-2vKJ79tOcVfgPYVJM2XjcL1BH5Bsl7/tgn9ilBj3XWeCS5kTRy/NE4FHEj4aMylOl/D3IPNsmZH0WPlB+DyIdA==", "dev": true, "requires": { "@codemirror/state": "^6.4.0", @@ -51007,7 +51006,7 @@ "@codemirror/lint": "^6.8.2", "@codemirror/search": "github:overleaf/codemirror-search#94f33f7fa6db95dadd3d7aed05c30cdde550835a", "@codemirror/state": "^6.4.1", - "@codemirror/view": "^6.34.3", + "@codemirror/view": "^6.34.0", "@contentful/rich-text-html-renderer": "^16.0.2", "@contentful/rich-text-types": "^16.0.2", "@google-cloud/bigquery": "^6.0.1", diff --git a/services/web/frontend/js/features/source-editor/extensions/index.ts b/services/web/frontend/js/features/source-editor/extensions/index.ts index 63d8db3f74..96179a7b6e 100644 --- a/services/web/frontend/js/features/source-editor/extensions/index.ts +++ b/services/web/frontend/js/features/source-editor/extensions/index.ts @@ -95,16 +95,6 @@ export const createExtensions = (options: Record): Extension[] => [ // to avoid cutting off tooltips which overflow the editor. tooltips({ parent: document.body, - tooltipSpace(view) { - const { top, bottom } = view.scrollDOM.getBoundingClientRect() - - return { - top, - left: 0, - bottom, - right: window.innerWidth, - } - }, }), keymaps, goToLinePanel(), diff --git a/services/web/frontend/js/features/source-editor/extensions/review-tooltip.ts b/services/web/frontend/js/features/source-editor/extensions/review-tooltip.ts index 61d1681ae8..ea268a7703 100644 --- a/services/web/frontend/js/features/source-editor/extensions/review-tooltip.ts +++ b/services/web/frontend/js/features/source-editor/extensions/review-tooltip.ts @@ -4,7 +4,6 @@ import { EditorView, showTooltip, Tooltip, - TooltipView, } from '@codemirror/view' import { Extension, @@ -12,16 +11,16 @@ import { StateEffect, Range, SelectionRange, - EditorState, } from '@codemirror/state' import { isSplitTestEnabled } from '@/utils/splitTestUtils' import { v4 as uuid } from 'uuid' +import { isCursorNearViewportTop } from '../utils/is-cursor-near-edge' export const addNewCommentRangeEffect = StateEffect.define>() export const removeNewCommentRangeEffect = StateEffect.define() -export const textSelectedEffect = StateEffect.define() +export const textSelectedEffect = StateEffect.define() export const removeReviewPanelTooltipEffect = StateEffect.define() @@ -47,7 +46,7 @@ export const reviewTooltip = (): Extension => { EditorView.updateListener.of(update => { if (update.selectionSet && !update.state.selection.main.empty) { update.view.dispatch({ - effects: textSelectedEffect.of(null), + effects: textSelectedEffect.of(update.view), }) } else if ( !update.startState.selection.main.empty && @@ -104,7 +103,7 @@ export const reviewTooltipStateField = StateField.define<{ } if (effect.is(textSelectedEffect)) { - tooltip = buildTooltip(tr.state) + tooltip = buildTooltip(effect.value) } if (tooltip && tr.state.selection.main.empty) { @@ -121,25 +120,22 @@ export const reviewTooltipStateField = StateField.define<{ ], }) -function buildTooltip(state: EditorState): Tooltip | null { - if (state.selection.main.empty) { +function buildTooltip(view: EditorView): Tooltip | null { + if (view.state.selection.main.empty) { return null } + const pos = view.state.selection.main.head return { - pos: state.selection.main.head, - above: true, - create: createReviewTooltipView, - } -} - -const createReviewTooltipView = (): TooltipView => { - const dom = document.createElement('div') - dom.className = 'review-tooltip-menu-container' - return { - dom, - overlap: true, - offset: { x: 0, y: 8 }, + pos, + above: !isCursorNearViewportTop(view, pos, 50), + strictSide: true, + arrow: false, + create() { + const dom = document.createElement('div') + dom.className = 'review-tooltip-menu-container' + return { dom, overlap: true, offset: { x: 0, y: 8 } } + }, } } diff --git a/services/web/package.json b/services/web/package.json index 4db823c994..e780495779 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -185,7 +185,7 @@ "@codemirror/lint": "^6.8.2", "@codemirror/search": "github:overleaf/codemirror-search#94f33f7fa6db95dadd3d7aed05c30cdde550835a", "@codemirror/state": "^6.4.1", - "@codemirror/view": "^6.34.3", + "@codemirror/view": "^6.34.0", "@juggle/resize-observer": "^3.3.1", "@lezer/common": "^1.2.3", "@lezer/generator": "^1.7.1",