Skip to content

Commit

Permalink
Move unsafe code out of <LayoutDom<HTMLTextAreaElement>>::value_for_l…
Browse files Browse the repository at this point in the history
…ayout
  • Loading branch information
nox committed Apr 1, 2020
1 parent f8af817 commit 4636507
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions components/script/dom/htmltextareaelement.rs
Expand Up @@ -59,32 +59,41 @@ pub trait LayoutHTMLTextAreaElementHelpers {
fn value_for_layout(self) -> String;
#[allow(unsafe_code)]
unsafe fn selection_for_layout(self) -> Option<Range<usize>>;
#[allow(unsafe_code)]
fn get_cols(self) -> u32;
#[allow(unsafe_code)]
fn get_rows(self) -> u32;
}

impl LayoutHTMLTextAreaElementHelpers for LayoutDom<'_, HTMLTextAreaElement> {
#[allow(unsafe_code)]
fn value_for_layout(self) -> String {
let text = unsafe {
#[allow(unsafe_code)]
impl<'dom> LayoutDom<'dom, HTMLTextAreaElement> {
fn textinput_content(self) -> DOMString {
unsafe {
self.unsafe_get()
.textinput
.borrow_for_layout()
.get_content()
};
}
}

fn placeholder(self) -> &'dom str {
unsafe { self.unsafe_get().placeholder.borrow_for_layout() }
}
}

impl LayoutHTMLTextAreaElementHelpers for LayoutDom<'_, HTMLTextAreaElement> {
fn value_for_layout(self) -> String {
let text = self.textinput_content();
if text.is_empty() {
let placeholder = unsafe { self.unsafe_get().placeholder.borrow_for_layout() };
// FIXME(nox): Would be cool to not allocate a new string if the
// placeholder is single line, but that's an unimportant detail.
placeholder.replace("\r\n", "\n").replace("\r", "\n").into()
self.placeholder()
.replace("\r\n", "\n")
.replace("\r", "\n")
.into()
} else {
text.into()
}
}

#[allow(unrooted_must_root)]
#[allow(unsafe_code)]
unsafe fn selection_for_layout(self) -> Option<Range<usize>> {
if !(*self.unsafe_get()).upcast::<Element>().focus_state() {
Expand Down

0 comments on commit 4636507

Please sign in to comment.