73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
* @flow strict-local
|
|
*/
|
|
|
|
// flowlint unsafe-getters-setters:off
|
|
|
|
import type ReadOnlyElement from './ReadOnlyElement';
|
|
|
|
import {getFabricUIManager} from '../../ReactNative/FabricUIManager';
|
|
import ReadOnlyNode, {getShadowNode} from './ReadOnlyNode';
|
|
import {getElementSibling} from './Utilities/Traversal';
|
|
import nullthrows from 'nullthrows';
|
|
|
|
export default class ReadOnlyCharacterData extends ReadOnlyNode {
|
|
get nextElementSibling(): ReadOnlyElement | null {
|
|
return getElementSibling(this, 'next');
|
|
}
|
|
|
|
get previousElementSibling(): ReadOnlyElement | null {
|
|
return getElementSibling(this, 'previous');
|
|
}
|
|
|
|
get data(): string {
|
|
const shadowNode = getShadowNode(this);
|
|
|
|
if (shadowNode != null) {
|
|
return nullthrows(getFabricUIManager()).getTextContent(shadowNode);
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
get length(): number {
|
|
return this.data.length;
|
|
}
|
|
|
|
/**
|
|
* @override
|
|
*/
|
|
get textContent(): string | null {
|
|
return this.data;
|
|
}
|
|
|
|
/**
|
|
* @override
|
|
*/
|
|
get nodeValue(): string {
|
|
return this.data;
|
|
}
|
|
|
|
substringData(offset: number, count: number): string {
|
|
const data = this.data;
|
|
if (offset < 0) {
|
|
throw new TypeError(
|
|
`Failed to execute 'substringData' on 'CharacterData': The offset ${offset} is negative.`,
|
|
);
|
|
}
|
|
if (offset > data.length) {
|
|
throw new TypeError(
|
|
`Failed to execute 'substringData' on 'CharacterData': The offset ${offset} is greater than the node's length (${data.length}).`,
|
|
);
|
|
}
|
|
let adjustedCount = count < 0 || count > data.length ? data.length : count;
|
|
return data.slice(offset, offset + adjustedCount);
|
|
}
|
|
}
|