From fd476901c46d40f6e216ac5f12c459373f5c70a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Mon, 30 Mar 2020 12:40:25 +0200 Subject: [PATCH] add mark --- packages/core/index.ts | 3 ++- packages/core/src/Editor.ts | 1 + packages/core/src/ExtensionManager.ts | 4 +++- packages/core/src/Mark.ts | 19 +++++++++++++++ packages/core/src/Node.ts | 4 ++++ packages/extension-bold/index.ts | 34 +++++++++++++++++++++++++++ packages/extension-bold/package.json | 17 ++++++++++++++ packages/extension-history/index.ts | 14 +++++++---- src/demos/HandleExtensions/index.vue | 2 ++ 9 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 packages/core/src/Mark.ts create mode 100644 packages/extension-bold/index.ts create mode 100644 packages/extension-bold/package.json diff --git a/packages/core/index.ts b/packages/core/index.ts index e5f9d3b3..dc714f7a 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -3,4 +3,5 @@ import { Editor } from './src/Editor' export default Editor export { Editor } export { default as Extension } from './src/Extension' -export { default as Node } from './src/Node' \ No newline at end of file +export { default as Node } from './src/Node' +export { default as Mark } from './src/Mark' \ No newline at end of file diff --git a/packages/core/src/Editor.ts b/packages/core/src/Editor.ts index 0f83292b..17066e20 100644 --- a/packages/core/src/Editor.ts +++ b/packages/core/src/Editor.ts @@ -106,6 +106,7 @@ export class Editor extends EventEmitter { nodes: this.extensionManager.nodes, marks: this.extensionManager.marks, }) + this.emit('schemaCreated') } private get plugins() { diff --git a/packages/core/src/ExtensionManager.ts b/packages/core/src/ExtensionManager.ts index 427b2ce8..b31e472f 100644 --- a/packages/core/src/ExtensionManager.ts +++ b/packages/core/src/ExtensionManager.ts @@ -12,7 +12,9 @@ export default class ExtensionManager { this.extensions = extensions this.extensions.forEach(extension => { extension.bindEditor(editor) - extension.created() + editor.on('schemaCreated', () => { + extension.created() + }) }) } diff --git a/packages/core/src/Mark.ts b/packages/core/src/Mark.ts new file mode 100644 index 00000000..99f47e79 --- /dev/null +++ b/packages/core/src/Mark.ts @@ -0,0 +1,19 @@ +import Extension from './Extension' + +export default abstract class Mark extends Extension { + + constructor(options = {}) { + super(options) + } + + public type = 'mark' + + schema(): any { + return null + } + + get schemaType() { + return this.editor.schema.marks[this.name] + } + +} diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index 5743819e..99159dce 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -14,4 +14,8 @@ export default abstract class Node extends Extension { return null } + get schemaType() { + return this.editor.schema.nodes[this.name] + } + } diff --git a/packages/extension-bold/index.ts b/packages/extension-bold/index.ts new file mode 100644 index 00000000..02899618 --- /dev/null +++ b/packages/extension-bold/index.ts @@ -0,0 +1,34 @@ +import { Mark } from '@tiptap/core' +import { toggleMark } from 'prosemirror-commands' + +export default class Bold extends Mark { + + name = 'bold' + + created() { + this.editor.registerCommand('bold', next => { + toggleMark(this.schemaType) + next() + }) + } + + schema() { + return { + parseDOM: [ + { + tag: 'strong', + }, + { + tag: 'b', + getAttrs: (node: HTMLElement) => node.style.fontWeight !== 'normal' && null, + }, + // { + // style: 'font-weight', + // getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null, + // }, + ], + toDOM: () => ['strong', 0], + } + } + +} \ No newline at end of file diff --git a/packages/extension-bold/package.json b/packages/extension-bold/package.json new file mode 100644 index 00000000..ff60a309 --- /dev/null +++ b/packages/extension-bold/package.json @@ -0,0 +1,17 @@ +{ + "name": "@tiptap/extension-text", + "version": "1.0.0", + "source": "index.ts", + "main": "dist/tiptap-extension-text.js", + "umd:main": "dist/tiptap-extension-text.umd.js", + "module": "dist/tiptap-extension-text.mjs", + "unpkg": "dist/tiptap-extension-text.js", + "jsdelivr": "dist/tiptap-extension-text.js", + "files": [ + "src", + "dist" + ], + "peerDependencies": { + "@tiptap/core": "2.x" + } +} diff --git a/packages/extension-history/index.ts b/packages/extension-history/index.ts index 2c9ebac9..df55bcca 100644 --- a/packages/extension-history/index.ts +++ b/packages/extension-history/index.ts @@ -38,10 +38,16 @@ export default class History extends Extension { // commands() { // return { - // undo: () => undo, - // redo: () => redo, - // undoDepth: () => undoDepth, - // redoDepth: () => redoDepth, + // undo: (next, { view }) => { + // undo(view.state, view.dispatch) + // next() + // }, + // redo: (next, { view }) => { + // redo(view.state, view.dispatch) + // next() + // }, + // // undoDepth: () => undoDepth, + // // redoDepth: () => redoDepth, // } // } diff --git a/src/demos/HandleExtensions/index.vue b/src/demos/HandleExtensions/index.vue index b93ca4e3..43287893 100644 --- a/src/demos/HandleExtensions/index.vue +++ b/src/demos/HandleExtensions/index.vue @@ -19,6 +19,7 @@ import Document from '@tiptap/extension-document' import Paragraph from '@tiptap/extension-paragraph' import Text from '@tiptap/extension-text' import History from '@tiptap/extension-history' +import Bold from '@tiptap/extension-bold' export default { components: { @@ -39,6 +40,7 @@ export default { new Paragraph(), new Text(), new History(), + new Bold(), ], }) },