/** * 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 * * This file is a fork of ContentBlock adding support for nesting references by * providing links to children, parent, prevSibling, and nextSibling. * * This is unstable and not part of the public API and should not be used by * production systems. This file may be update/removed without notice. */ 'use strict'; function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var CharacterMetadata = require("./CharacterMetadata"); var findRangesImmutable = require("./findRangesImmutable"); var Immutable = require("immutable"); var List = Immutable.List, Map = Immutable.Map, OrderedSet = Immutable.OrderedSet, Record = Immutable.Record, Repeat = Immutable.Repeat; var EMPTY_SET = OrderedSet(); var defaultRecord = { parent: null, characterList: List(), data: Map(), depth: 0, key: '', text: '', type: 'unstyled', children: List(), prevSibling: null, nextSibling: null }; var haveEqualStyle = function haveEqualStyle(charA, charB) { return charA.getStyle() === charB.getStyle(); }; var haveEqualEntity = function haveEqualEntity(charA, charB) { return charA.getEntity() === charB.getEntity(); }; var decorateCharacterList = function decorateCharacterList(config) { if (!config) { return config; } var characterList = config.characterList, text = config.text; if (text && !characterList) { config.characterList = List(Repeat(CharacterMetadata.EMPTY, text.length)); } return config; }; var ContentBlockNode = /*#__PURE__*/function (_ref) { _inheritsLoose(ContentBlockNode, _ref); function ContentBlockNode() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultRecord; /* eslint-disable-next-line constructor-super */ return _ref.call(this, decorateCharacterList(props)) || this; } var _proto = ContentBlockNode.prototype; _proto.getKey = function getKey() { return this.get('key'); }; _proto.getType = function getType() { return this.get('type'); }; _proto.getText = function getText() { return this.get('text'); }; _proto.getCharacterList = function getCharacterList() { return this.get('characterList'); }; _proto.getLength = function getLength() { return this.getText().length; }; _proto.getDepth = function getDepth() { return this.get('depth'); }; _proto.getData = function getData() { return this.get('data'); }; _proto.getInlineStyleAt = function getInlineStyleAt(offset) { var character = this.getCharacterList().get(offset); return character ? character.getStyle() : EMPTY_SET; }; _proto.getEntityAt = function getEntityAt(offset) { var character = this.getCharacterList().get(offset); return character ? character.getEntity() : null; }; _proto.getChildKeys = function getChildKeys() { return this.get('children'); }; _proto.getParentKey = function getParentKey() { return this.get('parent'); }; _proto.getPrevSiblingKey = function getPrevSiblingKey() { return this.get('prevSibling'); }; _proto.getNextSiblingKey = function getNextSiblingKey() { return this.get('nextSibling'); }; _proto.findStyleRanges = function findStyleRanges(filterFn, callback) { findRangesImmutable(this.getCharacterList(), haveEqualStyle, filterFn, callback); }; _proto.findEntityRanges = function findEntityRanges(filterFn, callback) { findRangesImmutable(this.getCharacterList(), haveEqualEntity, filterFn, callback); }; return ContentBlockNode; }(Record(defaultRecord)); module.exports = ContentBlockNode;