文件
mynode/packages/editor/CodeMirror/extensions/rendering/addFormattingClasses.ts
chen 301194963b
一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

49 行
1.5 KiB
TypeScript

import { Decoration, EditorView } from '@codemirror/view';
import makeInlineReplaceExtension from './utils/makeInlineReplaceExtension';
const linkClassName = 'cm-ext-unfocused-link';
const urlMarkDecoration = Decoration.mark({ class: linkClassName });
const strikethroughClassName = 'cm-ext-strikethrough';
const strikethroughMarkDecoration = Decoration.mark({ class: strikethroughClassName });
const insertClassName = 'cm-ext-insert';
const insertMarkDecoration = Decoration.mark({ class: insertClassName });
const addFormattingClasses = [
EditorView.theme({
[`& .${linkClassName}, & .${linkClassName} span`]: {
textDecoration: 'underline',
},
[`& .${strikethroughClassName}, & .${strikethroughClassName} span`]: {
textDecoration: 'line-through',
},
[`& .${insertClassName}, & .${insertClassName} span`]: {
textDecoration: 'underline',
},
}),
makeInlineReplaceExtension({
getRevealStrategy: (node) => {
// Links: use 'select' because the Link's parent is Paragraph,
// which spans the whole line - 'active' would hide all link decorations on the line
if (node.name === 'URL' || node.name === 'Link') {
return 'select';
}
return 'active';
},
createDecoration: (node) => {
if (node.name === 'URL' || node.name === 'Link') {
return urlMarkDecoration;
}
if (node.name === 'Strikethrough') {
return strikethroughMarkDecoration;
}
if (node.name === 'Insert') {
return insertMarkDecoration;
}
return null;
},
mergeNeighbors: true,
}),
];
export default addFormattingClasses;