1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | 'use strict';
|
12 |
|
13 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
|
14 |
|
15 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
16 |
|
17 | function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
18 |
|
19 | var findRangesImmutable = require("./findRangesImmutable");
|
20 |
|
21 | var getOwnObjectValues = require("./getOwnObjectValues");
|
22 |
|
23 | var Immutable = require("immutable");
|
24 |
|
25 | var List = Immutable.List,
|
26 | Repeat = Immutable.Repeat,
|
27 | Record = Immutable.Record;
|
28 |
|
29 | var returnTrue = function returnTrue() {
|
30 | return true;
|
31 | };
|
32 |
|
33 | var defaultLeafRange = {
|
34 | start: null,
|
35 | end: null
|
36 | };
|
37 | var LeafRange = Record(defaultLeafRange);
|
38 | var defaultDecoratorRange = {
|
39 | start: null,
|
40 | end: null,
|
41 | decoratorKey: null,
|
42 | leaves: null
|
43 | };
|
44 | var DecoratorRange = Record(defaultDecoratorRange);
|
45 | var BlockTree = {
|
46 | |
47 |
|
48 |
|
49 | generate: function generate(contentState, block, decorator) {
|
50 | var textLength = block.getLength();
|
51 |
|
52 | if (!textLength) {
|
53 | return List.of(new DecoratorRange({
|
54 | start: 0,
|
55 | end: 0,
|
56 | decoratorKey: null,
|
57 | leaves: List.of(new LeafRange({
|
58 | start: 0,
|
59 | end: 0
|
60 | }))
|
61 | }));
|
62 | }
|
63 |
|
64 | var leafSets = [];
|
65 | var decorations = decorator ? decorator.getDecorations(block, contentState) : List(Repeat(null, textLength));
|
66 | var chars = block.getCharacterList();
|
67 | findRangesImmutable(decorations, areEqual, returnTrue, function (start, end) {
|
68 | leafSets.push(new DecoratorRange({
|
69 | start: start,
|
70 | end: end,
|
71 | decoratorKey: decorations.get(start),
|
72 | leaves: generateLeaves(chars.slice(start, end).toList(), start)
|
73 | }));
|
74 | });
|
75 | return List(leafSets);
|
76 | },
|
77 | fromJS: function fromJS(_ref) {
|
78 | var leaves = _ref.leaves,
|
79 | other = _objectWithoutPropertiesLoose(_ref, ["leaves"]);
|
80 |
|
81 | return new DecoratorRange(_objectSpread({}, other, {
|
82 | leaves: leaves != null ? List(Array.isArray(leaves) ? leaves : getOwnObjectValues(leaves)).map(function (leaf) {
|
83 | return LeafRange(leaf);
|
84 | }) : null
|
85 | }));
|
86 | }
|
87 | };
|
88 |
|
89 |
|
90 |
|
91 |
|
92 | function generateLeaves(characters, offset) {
|
93 | var leaves = [];
|
94 | var inlineStyles = characters.map(function (c) {
|
95 | return c.getStyle();
|
96 | }).toList();
|
97 | findRangesImmutable(inlineStyles, areEqual, returnTrue, function (start, end) {
|
98 | leaves.push(new LeafRange({
|
99 | start: start + offset,
|
100 | end: end + offset
|
101 | }));
|
102 | });
|
103 | return List(leaves);
|
104 | }
|
105 |
|
106 | function areEqual(a, b) {
|
107 | return a === b;
|
108 | }
|
109 |
|
110 | module.exports = BlockTree; |
\ | No newline at end of file |