client/src/components/SlateEditor/HtmlSerializer.js
changeset 168 ea92f4fe783d
parent 159 a4705c2b4544
child 173 0e6703cd0968
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/components/SlateEditor/HtmlSerializer.js	Mon Oct 08 18:35:47 2018 +0200
@@ -0,0 +1,77 @@
+import React from 'react'
+import Html from 'slate-html-serializer'
+
+const BLOCK_TAGS = {
+  p: 'paragraph',
+  ul: 'bulleted-list',
+  ol: 'numbered-list',
+  li: 'list-item',
+}
+
+// Add a dictionary of mark tags.
+const MARK_TAGS = {
+  em: 'italic',
+  strong: 'bold',
+  u: 'underlined',
+  category: 'span'
+}
+
+const rules = [
+  // Block rules
+  {
+    deserialize(el, next) {
+      const type = BLOCK_TAGS[el.tagName]
+      if (!type) return
+      return {
+        object: 'block',
+        type: type,
+        nodes: next(el.childNodes)
+      }
+    },
+    serialize(obj, children) {
+      if (obj.object !== 'block') return
+      switch (obj.type) {
+        case 'numbered-list':
+          return <ol>{children}</ol>;
+        case 'bulleted-list':
+          return <ul>{children}</ul>;
+        case 'list-item':
+          return <li>{children}</li>;
+        case 'paragraph':
+        case 'line':
+          return <p>{children}</p>
+        default: return;
+      }
+    }
+  },
+  // Mark rules
+  {
+    deserialize(el, next) {
+      const type = MARK_TAGS[el.tagName]
+      if (!type) return
+      return {
+        object: 'mark',
+        type: type,
+        nodes: next(el.childNodes)
+      }
+    },
+    serialize(obj, children) {
+      if (obj.object !== 'mark') return
+      switch (obj.type) {
+        case 'bold':
+          return <strong>{children}</strong>
+        case 'italic':
+          return <em>{children}</em>
+        case 'underlined':
+          return <ins>{children}</ins>
+        case 'category':
+          return <span style={{ backgroundColor: obj.color }}>{children}</span>
+        default: return;
+      }
+    }
+  }
+]
+
+const serializer = new Html({ rules })
+
+export default serializer