LibWeb: Move innerText from DOM::Element to HTML::HTMLElement

This commit is contained in:
Luke 2020-11-11 09:46:53 +00:00 committed by Andreas Kling
parent bb22b04d44
commit 397049aae8
Notes: sideshowbarker 2024-07-19 01:27:16 +09:00
6 changed files with 40 additions and 38 deletions

View File

@ -41,7 +41,6 @@
#include <LibWeb/Layout/LayoutTableCell.h>
#include <LibWeb/Layout/LayoutTableRow.h>
#include <LibWeb/Layout/LayoutTableRowGroup.h>
#include <LibWeb/Layout/LayoutText.h>
#include <LibWeb/Layout/LayoutTreeBuilder.h>
namespace Web::DOM {
@ -296,39 +295,6 @@ String Element::inner_html() const
return builder.to_string();
}
void Element::set_inner_text(StringView text)
{
remove_all_children();
append_child(document().create_text_node(text));
set_needs_style_update(true);
document().schedule_style_update();
document().invalidate_layout();
}
String Element::inner_text()
{
StringBuilder builder;
// innerText for element being rendered takes visibility into account, so force a layout and then walk the layout tree.
document().layout();
if (!layout_node())
return text_content();
Function<void(const LayoutNode&)> recurse = [&](auto& node) {
for (auto* child = node.first_child(); child; child = child->next_sibling()) {
if (child->is_text())
builder.append(downcast<LayoutText>(*child).text_for_rendering());
if (child->is_break())
builder.append('\n');
recurse(*child);
}
};
recurse(*layout_node());
return builder.to_string();
}
bool Element::is_focused() const
{
return document().focused_element() == this;

View File

@ -93,9 +93,6 @@ public:
String inner_html() const;
void set_inner_html(StringView);
String inner_text();
void set_inner_text(StringView);
bool is_focused() const;
virtual bool is_focusable() const { return false; }

View File

@ -9,7 +9,6 @@ interface Element : Node {
ArrayFromVector querySelectorAll(DOMString selectors);
attribute DOMString innerHTML;
attribute DOMString innerText;
[Reflect] attribute DOMString id;
[Reflect=class] attribute DOMString className;

View File

@ -24,7 +24,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <AK/StringBuilder.h>
#include <LibWeb/DOM/Document.h>
#include <LibWeb/HTML/HTMLElement.h>
#include <LibWeb/Layout/LayoutText.h>
namespace Web::HTML {
@ -95,4 +98,37 @@ void HTMLElement::set_content_editable(const String& content_editable)
// FIXME: otherwise the attribute setter must throw a "SyntaxError" DOMException.
}
void HTMLElement::set_inner_text(StringView text)
{
remove_all_children();
append_child(document().create_text_node(text));
set_needs_style_update(true);
document().schedule_style_update();
document().invalidate_layout();
}
String HTMLElement::inner_text()
{
StringBuilder builder;
// innerText for element being rendered takes visibility into account, so force a layout and then walk the layout tree.
document().layout();
if (!layout_node())
return text_content();
Function<void(const LayoutNode&)> recurse = [&](auto& node) {
for (auto* child = node.first_child(); child; child = child->next_sibling()) {
if (child->is_text())
builder.append(downcast<LayoutText>(*child).text_for_rendering());
if (child->is_break())
builder.append('\n');
recurse(*child);
}
};
recurse(*layout_node());
return builder.to_string();
}
}

View File

@ -43,6 +43,9 @@ public:
String content_editable() const;
void set_content_editable(const String&);
String inner_text();
void set_inner_text(StringView);
private:
virtual bool is_html_element() const final { return true; }

View File

@ -7,4 +7,5 @@ interface HTMLElement : Element {
attribute DOMString contentEditable;
[LegacyNullToEmptyString] attribute DOMString innerText;
}