mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Implement CharacterData.{deleteData, insertData, replaceData}
This commit is contained in:
parent
bb8a037cb2
commit
fd9541357f
3 changed files with 34 additions and 1 deletions
|
@ -9,6 +9,7 @@ use js::glue::{ReportError};
|
||||||
|
|
||||||
#[deriving(Show)]
|
#[deriving(Show)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
|
IndexSize,
|
||||||
FailureUnknown,
|
FailureUnknown,
|
||||||
NotFound,
|
NotFound,
|
||||||
HierarchyRequest,
|
HierarchyRequest,
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
use dom::bindings::codegen::InheritTypes::CharacterDataDerived;
|
use dom::bindings::codegen::InheritTypes::CharacterDataDerived;
|
||||||
use dom::bindings::js::JS;
|
use dom::bindings::js::JS;
|
||||||
use dom::bindings::error::{Fallible, ErrorResult};
|
use dom::bindings::error::{Fallible, ErrorResult, IndexSize};
|
||||||
use dom::bindings::utils::{Reflectable, Reflector};
|
use dom::bindings::utils::{Reflectable, Reflector};
|
||||||
use dom::document::Document;
|
use dom::document::Document;
|
||||||
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
|
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
|
||||||
|
@ -59,6 +59,32 @@ impl CharacterData {
|
||||||
self.data.push_str(arg);
|
self.data.push_str(arg);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn InsertData(&mut self, offset: u32, arg: DOMString) -> ErrorResult {
|
||||||
|
self.ReplaceData(offset, 0, arg)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn DeleteData(&mut self, offset: u32, count: u32) -> ErrorResult {
|
||||||
|
self.ReplaceData(offset, count, ~"")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn ReplaceData(&mut self, offset: u32, count: u32, arg: DOMString) -> ErrorResult {
|
||||||
|
let length = self.data.len() as u32;
|
||||||
|
if offset > length {
|
||||||
|
return Err(IndexSize);
|
||||||
|
}
|
||||||
|
let count = if offset + count > length {
|
||||||
|
length - offset
|
||||||
|
} else {
|
||||||
|
count
|
||||||
|
};
|
||||||
|
let mut data = self.data.slice(0, offset as uint).to_owned();
|
||||||
|
data.push_str(arg);
|
||||||
|
data.push_str(self.data.slice((offset + count) as uint, length as uint));
|
||||||
|
self.data = data;
|
||||||
|
// FIXME: Once we have `Range`, we should implement step7 to step11
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Reflectable for CharacterData {
|
impl Reflectable for CharacterData {
|
||||||
|
|
|
@ -17,6 +17,12 @@ interface CharacterData : Node {
|
||||||
DOMString substringData(unsigned long offset, unsigned long count);
|
DOMString substringData(unsigned long offset, unsigned long count);
|
||||||
[Throws]
|
[Throws]
|
||||||
void appendData(DOMString data);
|
void appendData(DOMString data);
|
||||||
|
[Throws]
|
||||||
|
void insertData(unsigned long offset, DOMString data);
|
||||||
|
[Throws]
|
||||||
|
void deleteData(unsigned long offset, unsigned long count);
|
||||||
|
[Throws]
|
||||||
|
void replaceData(unsigned long offset, unsigned long count, DOMString data);
|
||||||
};
|
};
|
||||||
|
|
||||||
//CharacterData implements ChildNode;
|
//CharacterData implements ChildNode;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue