Explorar el Código

Only decorate itemize end line when no other text on line (#27601)

GitOrigin-RevId: 6c6b3cfe99cfec4b09476e15adc2f0758b033865
Alf Eaton hace 1 año
padre
commit
9dd5eda171

+ 16 - 12
services/web/frontend/js/features/source-editor/extensions/visual/atomic-decorations.ts

@@ -86,6 +86,7 @@ import {
   mathAncestorNode,
   parseMathContainer,
 } from '../../utils/tree-operations/math'
+import { lineContainsOnlyNode } from './utils/line'
 
 type Options = {
   previewByPath: (path: string) => PreviewPath | null
@@ -325,14 +326,20 @@ export const atomicDecorations = (options: Options) => {
                 !selectionIntersects(state.selection, end) &&
                 getListItems(nodeRef.node).length > 0 // not empty
               ) {
-                decorations.push(
-                  Decoration.replace({
-                    block: true,
-                  }).range(begin.from, begin.to),
-                  Decoration.replace({
-                    block: true,
-                  }).range(end.from, end.to)
-                )
+                if (lineContainsOnlyNode(beginLine, beginNode)) {
+                  decorations.push(
+                    Decoration.replace({
+                      block: true,
+                    }).range(begin.from, begin.to)
+                  )
+                }
+                if (lineContainsOnlyNode(endLine, endNode)) {
+                  decorations.push(
+                    Decoration.replace({
+                      block: true,
+                    }).range(end.from, end.to)
+                  )
+                }
               }
             }
           } else if (nodeRef.type.is('TabularEnvironment')) {
@@ -904,10 +911,7 @@ export const atomicDecorations = (options: Options) => {
 
                 const line = state.doc.lineAt(nodeRef.from)
 
-                const lineContainsOnlyNode =
-                  line.text.trim().length === nodeRef.to - nodeRef.from
-
-                if (lineContainsOnlyNode) {
+                if (lineContainsOnlyNode(line, nodeRef)) {
                   const Widget = state.readOnly
                     ? GraphicsWidget
                     : EditableGraphicsWidget

+ 5 - 0
services/web/frontend/js/features/source-editor/extensions/visual/utils/line.ts

@@ -0,0 +1,5 @@
+import { Line } from '@codemirror/state'
+import { SyntaxNodeRef } from '@lezer/common'
+
+export const lineContainsOnlyNode = (line: Line, nodeRef: SyntaxNodeRef) =>
+  line.text.trim().length === nodeRef.to - nodeRef.from