Skip to content

Commit

Permalink
skipMarkPlugin
Browse files Browse the repository at this point in the history
  • Loading branch information
felixfeng33 committed Feb 9, 2025
1 parent d9f52d2 commit c313d2d
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import { linkPlugin } from './link-plugin';
import { mediaPlugins } from './media-plugins';
import { mentionPlugin } from './mention-plugin';
import { resetBlockTypePlugin } from './reset-block-type-plugin';
import { skipMarkPlugin } from './skip-mark-plugin';
import { softBreakPlugin } from './soft-break-plugin';
import { suggestionPlugin } from './suggestion-plugin';
import { tablePlugin } from './table-plugin';
Expand All @@ -65,6 +66,7 @@ export const viewPlugins = [
FontSizePlugin,
HighlightPlugin,
KbdPlugin,
skipMarkPlugin,

// Block Style
alignPlugin,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { CodePlugin ,
SkipMarkPlugin,
} from "@udecode/plate-basic-marks/react";
import { CommentsPlugin } from "@udecode/plate-comments/react";
import { SuggestionPlugin } from "@udecode/plate-suggestion/react";


export const skipMarkPlugin = SkipMarkPlugin.configure({
options: {
query: {
allow: [SuggestionPlugin.key, CodePlugin.key, CommentsPlugin.key],
},
},
});
52 changes: 52 additions & 0 deletions packages/basic-marks/src/lib/BaseSkipMarkPlugin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { type PluginConfig, type QueryNodeOptions, type Text, createTSlatePlugin, queryNode, RangeApi } from '@udecode/plate';

export type SkipMarkConfig = PluginConfig<
'skip-mark',
{
query?: QueryNodeOptions;
}
>;


export const BaseSkipMarkPlugin = createTSlatePlugin<SkipMarkConfig>({
key: 'skip-mark',
options:{}
}).overrideEditor(({editor,getOption, tf: { insertText } }) => ({
transforms: {
insertText(text, options) {
if (RangeApi.isExpanded(editor.selection))
return insertText(text, options);

const textNode = editor.api.node<Text>({
mode:"lowest",
});

const query = getOption("query");

if (
textNode &&
!queryNode(textNode, query) &&
editor.api.isEnd(editor.selection?.focus, textNode[1])
) {
editor.tf.insertNode({ text });
const _nextPoint = editor.api.start(textNode[1], { next: true });

if (!_nextPoint) return;

const nextPoint = {
offset: _nextPoint.offset + 1,
path: _nextPoint.path,
};

editor.tf.setSelection({
anchor: nextPoint,
focus: nextPoint,
});

return;
}

return insertText(text, options);
},
},
}));
1 change: 1 addition & 0 deletions packages/basic-marks/src/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export * from './BaseBasicMarksPlugin';
export * from './BaseBoldPlugin';
export * from './BaseCodePlugin';
export * from './BaseItalicPlugin';
export * from './BaseSkipMarkPlugin';
export * from './BaseStrikethroughPlugin';
export * from './BaseSubscriptPlugin';
export * from './BaseSuperscriptPlugin';
Expand Down
5 changes: 5 additions & 0 deletions packages/basic-marks/src/react/SkipMarkPlugin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { toPlatePlugin } from "@udecode/plate/react";

import { BaseSkipMarkPlugin } from "../lib/BaseSkipMarkPlugin";

export const SkipMarkPlugin = toPlatePlugin(BaseSkipMarkPlugin);
1 change: 1 addition & 0 deletions packages/basic-marks/src/react/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export * from './BasicMarksPlugin';
export * from './BoldPlugin';
export * from './CodePlugin';
export * from './ItalicPlugin';
export * from './SkipMarkPlugin';
export * from './StrikethroughPlugin';
export * from './SubscriptPlugin';
export * from './SuperscriptPlugin';
Expand Down

0 comments on commit c313d2d

Please sign in to comment.