Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

3 лет назад
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 CharacterMetadata = require("./CharacterMetadata");
  13. var _require = require("immutable"),
  14. Map = _require.Map;
  15. var ContentStateInlineStyle = {
  16. add: function add(contentState, selectionState, inlineStyle) {
  17. return modifyInlineStyle(contentState, selectionState, inlineStyle, true);
  18. },
  19. remove: function remove(contentState, selectionState, inlineStyle) {
  20. return modifyInlineStyle(contentState, selectionState, inlineStyle, false);
  21. }
  22. };
  23. function modifyInlineStyle(contentState, selectionState, inlineStyle, addOrRemove) {
  24. var blockMap = contentState.getBlockMap();
  25. var startKey = selectionState.getStartKey();
  26. var startOffset = selectionState.getStartOffset();
  27. var endKey = selectionState.getEndKey();
  28. var endOffset = selectionState.getEndOffset();
  29. var newBlocks = blockMap.skipUntil(function (_, k) {
  30. return k === startKey;
  31. }).takeUntil(function (_, k) {
  32. return k === endKey;
  33. }).concat(Map([[endKey, blockMap.get(endKey)]])).map(function (block, blockKey) {
  34. var sliceStart;
  35. var sliceEnd;
  36. if (startKey === endKey) {
  37. sliceStart = startOffset;
  38. sliceEnd = endOffset;
  39. } else {
  40. sliceStart = blockKey === startKey ? startOffset : 0;
  41. sliceEnd = blockKey === endKey ? endOffset : block.getLength();
  42. }
  43. var chars = block.getCharacterList();
  44. var current;
  45. while (sliceStart < sliceEnd) {
  46. current = chars.get(sliceStart);
  47. chars = chars.set(sliceStart, addOrRemove ? CharacterMetadata.applyStyle(current, inlineStyle) : CharacterMetadata.removeStyle(current, inlineStyle));
  48. sliceStart++;
  49. }
  50. return block.set('characterList', chars);
  51. });
  52. return contentState.merge({
  53. blockMap: blockMap.merge(newBlocks),
  54. selectionBefore: selectionState,
  55. selectionAfter: selectionState
  56. });
  57. }
  58. module.exports = ContentStateInlineStyle;