|
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- *
- * @emails oncall+draft_js
- */
- 'use strict';
-
- var UnicodeUtils = require("fbjs/lib/UnicodeUtils");
-
- var findRangesImmutable = require("./findRangesImmutable");
-
- var areEqual = function areEqual(a, b) {
- return a === b;
- };
-
- var isTruthy = function isTruthy(a) {
- return !!a;
- };
-
- var EMPTY_ARRAY = [];
- /**
- * Helper function for getting encoded styles for each inline style. Convert
- * to UTF-8 character counts for storage.
- */
-
- function getEncodedInlinesForType(block, styleList, styleToEncode) {
- var ranges = []; // Obtain an array with ranges for only the specified style.
-
- var filteredInlines = styleList.map(function (style) {
- return style.has(styleToEncode);
- }).toList();
- findRangesImmutable(filteredInlines, areEqual, // We only want to keep ranges with nonzero style values.
- isTruthy, function (start, end) {
- var text = block.getText();
- ranges.push({
- offset: UnicodeUtils.strlen(text.slice(0, start)),
- length: UnicodeUtils.strlen(text.slice(start, end)),
- style: styleToEncode
- });
- });
- return ranges;
- }
- /*
- * Retrieve the encoded arrays of inline styles, with each individual style
- * treated separately.
- */
-
-
- function encodeInlineStyleRanges(block) {
- var styleList = block.getCharacterList().map(function (c) {
- return c.getStyle();
- }).toList();
- var ranges = styleList.flatten().toSet().map(function (style) {
- return getEncodedInlinesForType(block, styleList, style);
- });
- return Array.prototype.concat.apply(EMPTY_ARRAY, ranges.toJS());
- }
-
- module.exports = encodeInlineStyleRanges;
|