diff --git a/packages/theme/styles/prose.scss b/packages/theme/styles/prose.scss index cc905be1b4..2955a62328 100644 --- a/packages/theme/styles/prose.scss +++ b/packages/theme/styles/prose.scss @@ -368,6 +368,18 @@ pre.proseCodeBlock { word-break: normal; } +pre.proseCodeBlock { + button:not(.hovered) { + opacity: 0; + } + + &:hover { + button { + opacity: 1; + } + } +} + // Fixes for MessageViewer pre.proseCodeBlock > pre.proseCode { padding: 0; diff --git a/plugins/text-editor-resources/src/components/extension/codeblock.ts b/plugins/text-editor-resources/src/components/extension/codeblock.ts index e7fb284c08..e9153f7a1b 100644 --- a/plugins/text-editor-resources/src/components/extension/codeblock.ts +++ b/plugins/text-editor-resources/src/components/extension/codeblock.ts @@ -141,7 +141,7 @@ function createDecorations (doc: ProseMirrorNode, options: CodeBlockLowlightOpti button.addEventListener('click', (e) => { e.preventDefault() e.stopPropagation() - handleLangButtonClick(e, node, pos, view, options) + handleLangButtonClick(e, node, pos, view, button, options) }) } else { button.disabled = true @@ -181,6 +181,7 @@ function handleLangButtonClick ( node: ProseMirrorNode, pos: number, view: EditorView, + button: HTMLButtonElement, options: CodeBlockLowlightOptions ): void { const language = node.attrs.language @@ -191,6 +192,8 @@ function handleLangButtonClick ( label: language })) + button.classList.add('hovered') + showPopup( DropdownLabelsPopup, { @@ -199,6 +202,7 @@ function handleLangButtonClick ( }, getEventPositionElement(evt), (result) => { + button.classList.remove('hovered') if (result != null) { const tr = view.state.tr.setNodeAttribute(pos, 'language', result) view.dispatch(tr)