diff --git a/packages/components/xpub-edit/package.json b/packages/components/xpub-edit/package.json index ebe079e4336c95fb6b1604d490e2d5c99e33ffba..d39d8f4ee45d45cca1ad70eac8dde33f76dde1f1 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 040364d3159edb8dea69db9caf0b8a3198effd11..d65826a67aaedc23ccb3ef84ddaf6c93fb52a6d4 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 96f92143d894665cce533e4dbda9bb4396d77fa2..bf6d84fab568e20977e0d956d767f72382311203 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 2ae361ef738cc51bca07ebbfa3188ed8ba82e02b..f2eb3141bfba187906cbba22714d6304c6344d78 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 b00ac82a3ad4530686e3a751036430a6d076e7ea..57705b5650c62a9e0272c18f28bec52c3322daab 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 6235793a740eaddf24e3fa97ccb961fe14177bfe..7217d83852aed3f10f8bd3e930e33bec578fbe92 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 9e6651a5cf4f6325c19a8d69381ac1fc3f1b48b7..6c7ccd657fd9328d7a9d8efe93c6270a3dbf2f49 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}