client/src/HtmlSerializer.js
author salimr <riwad.salim@yahoo.fr>
Tue, 25 Sep 2018 02:02:13 +0200
changeset 157 5c3af4f10e92
parent 25 e04714a1d4eb
child 159 a4705c2b4544
permissions -rw-r--r--
Update slate editor
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
import React from 'react'
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
     2
import Html from 'slate-html-serializer'
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
const BLOCK_TAGS = {
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
  p: 'paragraph',
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
     6
  ul: 'bulleted-list',
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
     7
  ol: 'numbered-list',
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
     8
  li: 'list-item',
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
}
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
// Add a dictionary of mark tags.
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
const MARK_TAGS = {
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
  em: 'italic',
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
  strong: 'bold',
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    15
  u: 'underlined',
25
e04714a1d4eb Improve categories tooltip.
Alexandre Segura <mex.zktk@gmail.com>
parents: 21
diff changeset
    16
  category: 'span'
19
f1b125b95fe9 Introduce "annotation" plugin.
Alexandre Segura <mex.zktk@gmail.com>
parents: 17
diff changeset
    17
}
f1b125b95fe9 Introduce "annotation" plugin.
Alexandre Segura <mex.zktk@gmail.com>
parents: 17
diff changeset
    18
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
const rules = [
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    20
  // Block rules
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    21
  {
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    22
    deserialize(el, next) {
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    23
      const type = BLOCK_TAGS[el.tagName]
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    24
      if (!type) return
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    25
      return {
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    26
        object: 'block',
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    27
        type: type,
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    28
        nodes: next(el.childNodes)
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    29
      }
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    30
    },
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    31
    serialize(obj, children) {
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    32
      if (obj.object !== 'block') return
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    33
      switch (obj.type) {
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    34
        case 'numbered-list':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    35
          return <ol>{children}</ol>;
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    36
        case 'bulleted-list':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    37
          return <ul>{children}</ul>;
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    38
         case 'list-item':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    39
          return <li>{children}</li>;
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    40
        case 'paragraph':
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    41
        case 'line':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    42
          return <p>{children}</p>
19
f1b125b95fe9 Introduce "annotation" plugin.
Alexandre Segura <mex.zktk@gmail.com>
parents: 17
diff changeset
    43
        default: return;
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    44
      }
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    45
    }
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    46
  },
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    47
  // Mark rules
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    48
  {
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    49
    deserialize(el, next) {
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    50
      const type = MARK_TAGS[el.tagName]
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    51
      if (!type) return
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    52
      return {
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    53
        object: 'mark',
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    54
        type: type,
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    55
        nodes: next(el.childNodes)
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    56
      }
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    57
    },
157
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    58
    serialize(obj, children) {
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    59
      if (obj.object !== 'mark') return
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    60
      switch (obj.type) {
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    61
        case 'bold':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    62
          return <strong>{children}</strong>
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    63
        case 'italic':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    64
          return <em>{children}</em>
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    65
        case 'underlined':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    66
          return <ins>{children}</ins>
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    67
        case 'category':
5c3af4f10e92 Update slate editor
salimr <riwad.salim@yahoo.fr>
parents: 25
diff changeset
    68
          return <span style={{ backgroundColor: obj.data.get('color') }}>{children}</span>
19
f1b125b95fe9 Introduce "annotation" plugin.
Alexandre Segura <mex.zktk@gmail.com>
parents: 17
diff changeset
    69
        default: return;
17
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    70
      }
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    71
    }
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    72
  }
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    73
]
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    74
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    75
const serializer = new Html({ rules })
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    76
877d8796b86d Store serialized HTML in note.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    77
export default serializer