client/src/api/WebAnnotationSerializer.js
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 168 ea92f4fe783d
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:
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
     1
import * as R from 'ramda';
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
     2
98
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
class WebAnnotationSerializer {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
  static serialize = (note) => {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
     7
    const categories = R.prop('categories', note);
98
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
    const baseAnnotation = {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
      '@context': "http://www.w3.org/ns/anno.jsonld",
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
      "type":     "Annotation",
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
    }
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
168
ea92f4fe783d - move SlateEditor and dependencies to its own folder
ymh <ymh.work@gmail.com>
parents: 129
diff changeset
    14
    const source = "/session/" + R.prop('session', note) + "/notes/" + R.prop('_id', note);
98
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    15
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    16
    return categories.map((category, index) => {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    17
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
      let annotation = Object.assign({}, baseAnnotation, {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
        id: index
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    20
      });
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    21
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    22
      if (category.hasOwnProperty('hasComment') && category.hasComment) {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    23
        const body = {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    24
          "type": "TextualBody",
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    25
          "value": category.comment,
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    26
          "format": "text/plain"
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    27
        };
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    28
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    29
        annotation = Object.assign({}, annotation, { body })
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    30
      }
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    31
102
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    32
      const selectors = [
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    33
        {
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    34
          "type": "TextQuoteSelector",
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    35
          "exact": category.text,
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    36
        }, {
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    37
          "type": "TextPositionSelector",
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    38
          "start": category.selection.start,
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    39
          "end": category.selection.end,
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    40
        }
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    41
      ]
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    42
98
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    43
      return Object.assign({}, annotation, {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    44
        "target": {
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    45
          "source": source,
102
b0e36664f1f2 Add TextPositionSelector.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    46
          "selector": selectors
98
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    47
        }
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    48
      })
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    49
    });
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    50
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    51
  }
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    52
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    53
}
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    54
2e939d9cf193 Introduce WebAnnotationSerializer.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    55
export default WebAnnotationSerializer