You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2026-04-24 19:55:13 +02:00
74 lines
1.7 KiB
TypeScript
74 lines
1.7 KiB
TypeScript
import { Decoration, EditorView, WidgetType } from '@codemirror/view';
|
|
import makeInlineReplaceExtension from './utils/makeInlineReplaceExtension';
|
|
|
|
const dividerClassName = 'cm-md-divider';
|
|
const dividerLineClassName = 'cm-md-divider-line';
|
|
|
|
class DividerWidget extends WidgetType {
|
|
public constructor() {
|
|
super();
|
|
}
|
|
|
|
public eq(_other: DividerWidget) {
|
|
return true;
|
|
}
|
|
|
|
public toDOM() {
|
|
const container = document.createElement('hr');
|
|
container.classList.add(dividerClassName);
|
|
return container;
|
|
}
|
|
|
|
public ignoreEvent() {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
const dividerLineMark = Decoration.line({ class: dividerLineClassName });
|
|
|
|
// Node names that should be rendered as dividers
|
|
const dividerNodeNames = ['HorizontalRule', 'FrontMatterMarker'];
|
|
|
|
const replaceDividers = [
|
|
EditorView.theme({
|
|
[`& .cm-line.${dividerLineClassName}`]: {
|
|
// Use flex layout to allow the divider to fill the remainder of the line.
|
|
// This applies, for example, to the case where the divider is in a blockquote or
|
|
// a sub list item.
|
|
display: 'flex',
|
|
flexWrap: 'wrap',
|
|
},
|
|
[`& .${dividerClassName}`]: {
|
|
// Fill remaining width
|
|
flexGrow: 1,
|
|
flexShrink: 1,
|
|
|
|
border: 'none',
|
|
borderBottom: '2px solid var(--joplin-divider-color)',
|
|
position: 'relative',
|
|
},
|
|
}),
|
|
makeInlineReplaceExtension({
|
|
createDecoration: (node) => {
|
|
if (dividerNodeNames.includes(node.name)) {
|
|
return new DividerWidget();
|
|
}
|
|
return null;
|
|
},
|
|
}),
|
|
makeInlineReplaceExtension({
|
|
createDecoration: (node) => {
|
|
if (dividerNodeNames.includes(node.name)) {
|
|
return dividerLineMark;
|
|
}
|
|
return null;
|
|
},
|
|
getDecorationRange: (node, state) => {
|
|
const line = state.doc.lineAt(node.from);
|
|
return [line.from];
|
|
},
|
|
}),
|
|
];
|
|
|
|
export default replaceDividers;
|