prosemirror-link-plugin: Create automatic links in ProseMirror
ProseMirrorLink PluginText DecorationAutomatic LinkingPlugin Development
By ViktorSunday, May 30, 2021
What's this about?
A ProseMirror link plugin which finds occurrences of strings in your document, and does it by only looking at the changed sections, thus saving a lot of time by not re-processing the whole document all the time.
How to use?
- Install the plugin: npm i -S prosemirror-link-plugin
- Add the plugin to the editor
In codespeak:
1import { schema } from "prosemirror-schema-basic"; 2import { exampleSetup } from "prosemirror-example-setup"; 3import { Decoration } from "prosemirror-view"; 4import { EditorState } from "prosemirror-state"; 5import { EditorView } from "prosemirror-view"; 6import { 7 autoLinkingPlugin, 8 LinksKeyState, 9} from "prosemirror-link-plugin"; 10 11export interface LinkSpec { 12 id: number; 13 alias: string; 14} 15 16export const aliasDecoration = ( 17 start: number, 18 end: number, 19 alias: string, 20 matchPos: number, 21 pluginState: LinksKeyState<LinkSpec>, 22) => { 23 const spec = pluginState.aliasToSpec[alias]; 24 return Decoration.inline( 25 start, 26 end, 27 28 { 29 class: "autoLink", 30 onclick: `alert('You clicked on "${alias}"')`, 31 }, 32 { id: spec?.id, alias }, 33 ); 34}; 35 36let aliases = { alias: "typing", id: 1 }; 37 38const initialDoc = { 39 content: [ 40 { 41 content: [ 42 { 43 text: "Start typing!", 44 type: "text", 45 }, 46 ], 47 type: "paragraph", 48 }, 49 ], 50 type: "doc", 51}; 52 53const state = EditorState.create<typeof schema>({ 54 doc: schema.nodeFromJSON(initialDoc), 55 plugins: [ 56 ...exampleSetup({ 57 schema, 58 }), 59 autoLinkingPlugin( 60 aliases, 61 aliasDecoration, 62 ), 63 ], 64}); 65 66const view: EditorView = new EditorView(document.getElementById("editor"), { 67 state, 68});
Add some CSS around your decoration, you can do it by targeting its class ( autoLink in the example above ).
You can check out the docs at https://gitlab.com/emergence-engineering/prosemirror-link-plugin
Let’s talk
Building something hard?
If your product lives or dies on the editor, the collaboration, or getting something impossible to run in the browser, that’s exactly the conversation we like.
No sales pitch. Just an honest read on whether we’re the right team for your problem.