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