From 2ba933fa36e17d3ca2233f8fdc26f42a9f13d0b9 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Wed, 4 Jul 2018 18:00:26 +0300 Subject: [PATCH] feat: ordered lists in progress --- packages/components/xpub-edit/package.json | 1 + .../xpub-edit/src/components/Editor.js | 4 --- .../components/configurable/EditorOptions.js | 1 + .../components/configurable/config/index.js | 15 +++++--- .../components/configurable/config/keys.js | 34 ++++++++++++++++--- .../components/configurable/config/menu.js | 7 ++++ .../src/components/Manuscript.js | 2 +- 7 files changed, 49 insertions(+), 15 deletions(-) diff --git a/packages/components/xpub-edit/package.json b/packages/components/xpub-edit/package.json index ebe079e43..d39d8f4ee 100644 --- a/packages/components/xpub-edit/package.json +++ b/packages/components/xpub-edit/package.json @@ -13,6 +13,7 @@ "prosemirror-dropcursor": "^1.0.0", "prosemirror-schema-list": "^1.0.0", "prosemirror-schema-basic": "^1.0.0", + "prosemirror-example-setup": "^1.0.0", "prosemirror-gapcursor": "^1.0.0", "prosemirror-history": "^1.0.0", "prosemirror-inputrules": "^1.0.0", diff --git a/packages/components/xpub-edit/src/components/Editor.js b/packages/components/xpub-edit/src/components/Editor.js index 040364d31..d65826a67 100644 --- a/packages/components/xpub-edit/src/components/Editor.js +++ b/packages/components/xpub-edit/src/components/Editor.js @@ -2,10 +2,6 @@ import React from 'react' import classnames from 'classnames' import { EditorState } from 'prosemirror-state' import { EditorView } from 'prosemirror-view' -// import { Schema, DOMParser } from 'prosemirror-model' -// import { schema } from 'prosemirror-schema-basic' - -// import { addListNodes } from 'prosemirror-schema-list' import baseClasses from 'prosemirror-view/style/prosemirror.css' import MenuBar from './MenuBar' diff --git a/packages/components/xpub-edit/src/components/configurable/EditorOptions.js b/packages/components/xpub-edit/src/components/configurable/EditorOptions.js index 96f92143d..bf6d84fab 100644 --- a/packages/components/xpub-edit/src/components/configurable/EditorOptions.js +++ b/packages/components/xpub-edit/src/components/configurable/EditorOptions.js @@ -13,6 +13,7 @@ const FEATURES_WHITELIST = [ 'heading', 'undo', 'redo', + 'orderedlist', ] class ConfigurableEditor extends React.Component { diff --git a/packages/components/xpub-edit/src/components/configurable/config/index.js b/packages/components/xpub-edit/src/components/configurable/config/index.js index 2ae361ef7..f2eb3141b 100644 --- a/packages/components/xpub-edit/src/components/configurable/config/index.js +++ b/packages/components/xpub-edit/src/components/configurable/config/index.js @@ -1,20 +1,25 @@ import { Schema } from 'prosemirror-model' +import { addListNodes } from 'prosemirror-schema-list' +import { schema as defaultSchema } from 'prosemirror-schema-basic' + import pick from 'lodash/pick' import map from 'lodash/map' import makePlugins from './plugins' import menuItems from './menu' -import nodes from './nodes' +// import nodes from './nodes' import marks from './marks' export default features => { const featureNames = Object.keys(features).filter(key => features[key]) + const schema = new Schema({ + nodes: addListNodes(defaultSchema.spec.nodes, 'paragraph block*', 'block'), marks: pick(marks, featureNames), - nodes: { - ...pick(nodes, ['doc', 'paragraph', 'text']), - ...pick(nodes, featureNames), - }, + // nodes: { + // ...pick(nodes, ['doc', 'paragraph', 'text']), + // ...pick(nodes, featureNames), + // }, }) const enabledMenuItems = pick(menuItems, featureNames) diff --git a/packages/components/xpub-edit/src/components/configurable/config/keys.js b/packages/components/xpub-edit/src/components/configurable/config/keys.js index b00ac82a3..57705b565 100644 --- a/packages/components/xpub-edit/src/components/configurable/config/keys.js +++ b/packages/components/xpub-edit/src/components/configurable/config/keys.js @@ -9,8 +9,23 @@ import { exitCode, selectParentNode, } from 'prosemirror-commands' +import { + wrapInList, + splitListItem, + liftListItem, + sinkListItem, +} from 'prosemirror-schema-list' const makeKeymap = (schema, features) => { + const bind = (key, cmd) => { + if (features) { + const mapped = features[key] + if (mapped === false) return + if (mapped) key = mapped + } + keys[key] = cmd + } + const keys = { Backspace: undoInputRule, 'Ctrl-Enter': exitCode, @@ -21,6 +36,15 @@ const makeKeymap = (schema, features) => { 'Mod-y': redo, 'Shift-Mod-z': redo, 'Shift-Ctrl-0': setBlockType(schema.nodes.paragraph), + 'Shift-Ctrl-9': wrapInList(schema.nodes.ordered_list), + } + + const type = schema.nodes.list_item + + if (type) { + bind('Enter', splitListItem(type)) + bind('Mod-[', liftListItem(type)) + bind('Mod-]', sinkListItem(type)) } if (features.includes('bold')) { @@ -34,11 +58,11 @@ const makeKeymap = (schema, features) => { } Object.keys(baseKeymap).forEach(key => { - if (keys[key]) { - keys[key] = chainCommands(keys[key], baseKeymap[key]) - } else { - keys[key] = baseKeymap[key] - } + // if (keys[key]) { + keys[key] = chainCommands(keys[key], baseKeymap[key]) + // } else { + // keys[key] = baseKeymap[key] + // } }) return keymap(keys) diff --git a/packages/components/xpub-edit/src/components/configurable/config/menu.js b/packages/components/xpub-edit/src/components/configurable/config/menu.js index 6235793a7..7217d8385 100644 --- a/packages/components/xpub-edit/src/components/configurable/config/menu.js +++ b/packages/components/xpub-edit/src/components/configurable/config/menu.js @@ -1,5 +1,6 @@ import { setBlockType, toggleMark } from 'prosemirror-commands' import { redo, undo } from 'prosemirror-history' +import { wrapInList } from 'prosemirror-schema-list' import icons from './icons' @@ -32,6 +33,12 @@ const promptForURL = () => { } export default { + orderedlist: schema => ({ + // active: markActive(schema.marks.bold), + content: 'ordered list', + run: wrapInList(schema.nodes.ordered_list, { order: { default: 1 } }), + title: 'Toggle List', + }), bold: schema => ({ active: markActive(schema.marks.bold), content: icons.bold, diff --git a/packages/components/xpub-manuscript/src/components/Manuscript.js b/packages/components/xpub-manuscript/src/components/Manuscript.js index 9e6651a5c..6c7ccd657 100644 --- a/packages/components/xpub-manuscript/src/components/Manuscript.js +++ b/packages/components/xpub-manuscript/src/components/Manuscript.js @@ -12,7 +12,7 @@ const Manuscript = ({ updateManuscript, version, }) => ( - <NoteEditor value={content} /> + <NoteEditor orderedlist redo undo value={content} /> // <SimpleEditor // content={content} -- GitLab