react-native-get-pixel_edit/node_modules/react-native/Libraries/DOM/Nodes/ReadOnlyCharacterData.js
2025-07-09 11:41:52 +09:00

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);
}
}