You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.4 KiB
JavaScript
85 lines
2.4 KiB
JavaScript
// https://dom.spec.whatwg.org/#interface-characterdata
|
|
|
|
import {NEXT, PREV, VALUE} from '../shared/symbols.js';
|
|
import {String} from '../shared/utils.js';
|
|
import {isConnected, parentElement, previousSibling, nextSibling} from '../shared/node.js';
|
|
import {characterDataAsJSON} from '../shared/jsdon.js';
|
|
|
|
import {previousElementSibling, nextElementSibling} from '../mixin/non-document-type-child-node.js';
|
|
import {before, after, replaceWith, remove} from '../mixin/child-node.js';
|
|
|
|
import {Node} from './node.js';
|
|
import {moCallback} from './mutation-observer.js';
|
|
|
|
/**
|
|
* @implements globalThis.CharacterData
|
|
*/
|
|
export class CharacterData extends Node {
|
|
|
|
constructor(ownerDocument, localName, nodeType, data) {
|
|
super(ownerDocument, localName, nodeType);
|
|
this[VALUE] = String(data);
|
|
}
|
|
|
|
// <Mixins>
|
|
get isConnected() { return isConnected(this); }
|
|
get parentElement() { return parentElement(this); }
|
|
get previousSibling() { return previousSibling(this); }
|
|
get nextSibling() { return nextSibling(this); }
|
|
|
|
get previousElementSibling() { return previousElementSibling(this); }
|
|
get nextElementSibling() { return nextElementSibling(this); }
|
|
|
|
before(...nodes) { before(this, nodes); }
|
|
after(...nodes) { after(this, nodes); }
|
|
replaceWith(...nodes) { replaceWith(this, nodes); }
|
|
remove() { remove(this[PREV], this, this[NEXT]); }
|
|
// </Mixins>
|
|
|
|
// CharacterData only
|
|
/* c8 ignore start */
|
|
get data() { return this[VALUE]; }
|
|
set data(value) {
|
|
this[VALUE] = String(value);
|
|
moCallback(this, this.parentNode);
|
|
}
|
|
|
|
get nodeValue() { return this.data; }
|
|
set nodeValue(value) { this.data = value; }
|
|
|
|
get textContent() { return this.data; }
|
|
set textContent(value) { this.data = value; }
|
|
|
|
get length() { return this.data.length; }
|
|
|
|
substringData(offset, count) {
|
|
return this.data.substr(offset, count);
|
|
}
|
|
|
|
appendData(data) {
|
|
this.data += data;
|
|
}
|
|
|
|
insertData(offset, data) {
|
|
const {data: t} = this;
|
|
this.data = t.slice(0, offset) + data + t.slice(offset);
|
|
}
|
|
|
|
deleteData(offset, count) {
|
|
const {data: t} = this;
|
|
this.data = t.slice(0, offset) + t.slice(offset + count);
|
|
}
|
|
|
|
replaceData(offset, count, data) {
|
|
const {data: t} = this;
|
|
this.data = t.slice(0, offset) + data + t.slice(offset + count);
|
|
}
|
|
/* c8 ignore stop */
|
|
|
|
toJSON() {
|
|
const json = [];
|
|
characterDataAsJSON(this, json);
|
|
return json;
|
|
}
|
|
}
|