From 924f517217399fb13aab0cf77c11071ae8f1c30e Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 22 May 2023 14:05:07 +0100 Subject: [PATCH] Updated code view block line highlighting to only show on focus The default 1st line highlighting confused users when existing on read-only blocks as it was not clear this represented the active line. This changes the highlight to only show when the block is focused upon. --- resources/js/code/setups.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/resources/js/code/setups.js b/resources/js/code/setups.js index 52b9cc199..270d58274 100644 --- a/resources/js/code/setups.js +++ b/resources/js/code/setups.js @@ -6,7 +6,7 @@ import {bracketMatching} from '@codemirror/language'; import { defaultKeymap, history, historyKeymap, indentWithTab, } from '@codemirror/commands'; -import {EditorState} from '@codemirror/state'; +import {Compartment, EditorState} from '@codemirror/state'; import {getTheme} from './themes'; /** @@ -17,12 +17,37 @@ function common(parentEl) { return [ getTheme(parentEl), lineNumbers(), - highlightActiveLineGutter(), drawSelection(), dropCursor(), bracketMatching(), rectangularSelection(), - highlightActiveLine(), + ]; +} + +/** + * @returns {({extension: Extension}|readonly Extension[])[]} + */ +function getDynamicActiveLineHighlighter() { + const highlightingCompartment = new Compartment(); + const domEvents = { + focus(event, view) { + view.dispatch({ + effects: highlightingCompartment.reconfigure([ + highlightActiveLineGutter(), + highlightActiveLine(), + ]), + }); + }, + blur(event, view) { + view.dispatch({ + effects: highlightingCompartment.reconfigure([]), + }); + }, + }; + + return [ + highlightingCompartment.of([]), + EditorView.domEventHandlers(domEvents), ]; } @@ -33,6 +58,7 @@ function common(parentEl) { export function viewerExtensions(parentEl) { return [ ...common(parentEl), + getDynamicActiveLineHighlighter(), keymap.of([ ...defaultKeymap, ]), @@ -47,6 +73,8 @@ export function viewerExtensions(parentEl) { export function editorExtensions(parentEl) { return [ ...common(parentEl), + highlightActiveLineGutter(), + highlightActiveLine(), history(), keymap.of([ ...defaultKeymap,