client/src/components/SlateEditor/HtmlSerializer.js
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 173 0e6703cd0968
permissions -rw-r--r--
Change the settings to avoid using Session authentication for rest framework as it raise exceptions in case client and backend are on the same domain On the filter, adapt to take into account new version of django_filters
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>;
159
a4705c2b4544 Add send note options to the editor
salimr <riwad.salim@yahoo.fr>
parents: 157
diff changeset
    38
        case 'list-item':
157
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':
173
0e6703cd0968 Correct the Note editor.
ymh <ymh.work@gmail.com>
parents: 168
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