No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

BlockTree.js 2.2 KiB

hace 3 años
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. *
  7. * @format
  8. *
  9. * @emails oncall+draft_js
  10. */
  11. 'use strict';
  12. var findRangesImmutable = require("./findRangesImmutable");
  13. var Immutable = require("immutable");
  14. var List = Immutable.List,
  15. Repeat = Immutable.Repeat,
  16. Record = Immutable.Record;
  17. var returnTrue = function returnTrue() {
  18. return true;
  19. };
  20. var defaultLeafRange = {
  21. start: null,
  22. end: null
  23. };
  24. var LeafRange = Record(defaultLeafRange);
  25. var defaultDecoratorRange = {
  26. start: null,
  27. end: null,
  28. decoratorKey: null,
  29. leaves: null
  30. };
  31. var DecoratorRange = Record(defaultDecoratorRange);
  32. var BlockTree = {
  33. /**
  34. * Generate a block tree for a given ContentBlock/decorator pair.
  35. */
  36. generate: function generate(contentState, block, decorator) {
  37. var textLength = block.getLength();
  38. if (!textLength) {
  39. return List.of(new DecoratorRange({
  40. start: 0,
  41. end: 0,
  42. decoratorKey: null,
  43. leaves: List.of(new LeafRange({
  44. start: 0,
  45. end: 0
  46. }))
  47. }));
  48. }
  49. var leafSets = [];
  50. var decorations = decorator ? decorator.getDecorations(block, contentState) : List(Repeat(null, textLength));
  51. var chars = block.getCharacterList();
  52. findRangesImmutable(decorations, areEqual, returnTrue, function (start, end) {
  53. leafSets.push(new DecoratorRange({
  54. start: start,
  55. end: end,
  56. decoratorKey: decorations.get(start),
  57. leaves: generateLeaves(chars.slice(start, end).toList(), start)
  58. }));
  59. });
  60. return List(leafSets);
  61. }
  62. };
  63. /**
  64. * Generate LeafRange records for a given character list.
  65. */
  66. function generateLeaves(characters, offset) {
  67. var leaves = [];
  68. var inlineStyles = characters.map(function (c) {
  69. return c.getStyle();
  70. }).toList();
  71. findRangesImmutable(inlineStyles, areEqual, returnTrue, function (start, end) {
  72. leaves.push(new LeafRange({
  73. start: start + offset,
  74. end: end + offset
  75. }));
  76. });
  77. return List(leaves);
  78. }
  79. function areEqual(a, b) {
  80. return a === b;
  81. }
  82. module.exports = BlockTree;