mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:48:10 +00:00
LibWeb: Use HTML::AttributeNames::foo instead of FlyString("foo")
To avoid the costly instantiation of FlyStrings whenever we're looking up attributes, use the premade HTML::AttributeNames globals. :^)
This commit is contained in:
parent
ff55d00261
commit
2149820260
16 changed files with 71 additions and 43 deletions
|
@ -30,22 +30,30 @@ namespace Web {
|
|||
namespace HTML {
|
||||
namespace AttributeNames {
|
||||
|
||||
FlyString id;
|
||||
FlyString class_;
|
||||
FlyString type;
|
||||
FlyString href;
|
||||
FlyString style;
|
||||
#define __ENUMERATE_HTML_ATTRIBUTE(name) FlyString name;
|
||||
ENUMERATE_HTML_ATTRIBUTES
|
||||
#undef __ENUMERATE_HTML_ATTRIBUTE
|
||||
|
||||
void initialize()
|
||||
{
|
||||
static bool s_initialized = false;
|
||||
if (s_initialized)
|
||||
return;
|
||||
|
||||
#define __ENUMERATE_HTML_ATTRIBUTE(name) \
|
||||
name = #name; \
|
||||
if (name.ends_with("_")) \
|
||||
name = name.view().substring_view(0, name.length() - 1);
|
||||
ENUMERATE_HTML_ATTRIBUTES
|
||||
#undef __ENUMERATE_HTML_ATTRIBUTE
|
||||
|
||||
id = "id";
|
||||
class_ = "class";
|
||||
type = "type";
|
||||
href = "href";
|
||||
style = "style";
|
||||
name = "name";
|
||||
|
||||
s_initialized = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,11 +34,30 @@ namespace AttributeNames {
|
|||
|
||||
void initialize();
|
||||
|
||||
extern FlyString id;
|
||||
extern FlyString class_;
|
||||
extern FlyString type;
|
||||
extern FlyString href;
|
||||
extern FlyString style;
|
||||
#define ENUMERATE_HTML_ATTRIBUTES \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(id) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(class_) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(type) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(href) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(style) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(name) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(target) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(width) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(height) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(title) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(action) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(method) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(alt) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(src) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(value) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(rel) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(async) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(defer) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(size)
|
||||
|
||||
#define __ENUMERATE_HTML_ATTRIBUTE(name) extern FlyString name;
|
||||
ENUMERATE_HTML_ATTRIBUTES
|
||||
#undef __ENUMERATE_HTML_ATTRIBUTE
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -316,7 +316,7 @@ Vector<const Element*> Document::get_elements_by_name(const String& name) const
|
|||
{
|
||||
Vector<const Element*> elements;
|
||||
for_each_in_subtree_of_type<Element>([&](auto& element) {
|
||||
if (element.attribute("name") == name)
|
||||
if (element.attribute(HTML::AttributeNames::name) == name)
|
||||
elements.append(&element);
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <AK/FlyString.h>
|
||||
#include <AK/String.h>
|
||||
#include <LibWeb/DOM/Attribute.h>
|
||||
#include <LibWeb/DOM/AttributeNames.h>
|
||||
#include <LibWeb/DOM/ParentNode.h>
|
||||
#include <LibWeb/Layout/LayoutNode.h>
|
||||
|
||||
|
@ -68,7 +69,7 @@ public:
|
|||
LayoutNodeWithStyle* layout_node() { return static_cast<LayoutNodeWithStyle*>(Node::layout_node()); }
|
||||
const LayoutNodeWithStyle* layout_node() const { return static_cast<const LayoutNodeWithStyle*>(Node::layout_node()); }
|
||||
|
||||
String name() const { return attribute("name"); }
|
||||
String name() const { return attribute(HTML::AttributeNames::name); }
|
||||
|
||||
const StyleProperties* resolved_style() const { return m_resolved_style.ptr(); }
|
||||
NonnullRefPtr<StyleProperties> computed_style();
|
||||
|
|
|
@ -35,8 +35,8 @@ public:
|
|||
HTMLAnchorElement(Document&, const FlyString& tag_name);
|
||||
virtual ~HTMLAnchorElement() override;
|
||||
|
||||
String href() const { return attribute("href"); }
|
||||
String target() const { return attribute("target"); }
|
||||
String href() const { return attribute(HTML::AttributeNames::href); }
|
||||
String target() const { return attribute(HTML::AttributeNames::target); }
|
||||
};
|
||||
|
||||
template<>
|
||||
|
|
|
@ -48,7 +48,7 @@ HTMLCanvasElement::~HTMLCanvasElement()
|
|||
int HTMLCanvasElement::requested_width() const
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned width = attribute("width").to_int(ok);
|
||||
unsigned width = attribute(HTML::AttributeNames::width).to_int(ok);
|
||||
if (ok)
|
||||
return width;
|
||||
|
||||
|
@ -58,7 +58,7 @@ int HTMLCanvasElement::requested_width() const
|
|||
int HTMLCanvasElement::requested_height() const
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned height = attribute("height").to_int(ok);
|
||||
unsigned height = attribute(HTML::AttributeNames::height).to_int(ok);
|
||||
if (ok)
|
||||
return height;
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ public:
|
|||
HTMLElement(Document&, const FlyString& tag_name);
|
||||
virtual ~HTMLElement() override;
|
||||
|
||||
String title() const { return attribute("title"); }
|
||||
String title() const { return attribute(HTML::AttributeNames::title); }
|
||||
|
||||
private:
|
||||
virtual bool is_html_element() const final { return true; }
|
||||
|
|
|
@ -36,8 +36,8 @@ public:
|
|||
HTMLFormElement(Document&, const FlyString& tag_name);
|
||||
virtual ~HTMLFormElement() override;
|
||||
|
||||
String action() const { return attribute("action"); }
|
||||
String method() const { return attribute("method"); }
|
||||
String action() const { return attribute(HTML::AttributeNames::action); }
|
||||
String method() const { return attribute(HTML::AttributeNames::method); }
|
||||
|
||||
void submit(RefPtr<HTMLInputElement> submitter);
|
||||
};
|
||||
|
|
|
@ -122,7 +122,7 @@ void HTMLImageElement::animate()
|
|||
int HTMLImageElement::preferred_width() const
|
||||
{
|
||||
bool ok = false;
|
||||
int width = attribute("width").to_int(ok);
|
||||
int width = attribute(HTML::AttributeNames::width).to_int(ok);
|
||||
if (ok)
|
||||
return width;
|
||||
|
||||
|
@ -135,7 +135,7 @@ int HTMLImageElement::preferred_width() const
|
|||
int HTMLImageElement::preferred_height() const
|
||||
{
|
||||
bool ok = false;
|
||||
int height = attribute("height").to_int(ok);
|
||||
int height = attribute(HTML::AttributeNames::height).to_int(ok);
|
||||
if (ok)
|
||||
return height;
|
||||
|
||||
|
|
|
@ -47,8 +47,8 @@ public:
|
|||
|
||||
virtual void parse_attribute(const FlyString& name, const String& value) override;
|
||||
|
||||
String alt() const { return attribute("alt"); }
|
||||
String src() const { return attribute("src"); }
|
||||
String alt() const { return attribute(HTML::AttributeNames::alt); }
|
||||
String src() const { return attribute(HTML::AttributeNames::src); }
|
||||
int preferred_width() const;
|
||||
int preferred_height() const;
|
||||
|
||||
|
|
|
@ -81,10 +81,10 @@ RefPtr<LayoutNode> HTMLInputElement::create_layout_node(const StyleProperties*)
|
|||
text_box.set_text(value());
|
||||
text_box.on_change = [this] {
|
||||
auto& widget = to<LayoutWidget>(layout_node())->widget();
|
||||
const_cast<HTMLInputElement*>(this)->set_attribute("value", static_cast<const GUI::TextBox&>(widget).text());
|
||||
const_cast<HTMLInputElement*>(this)->set_attribute(HTML::AttributeNames::value, static_cast<const GUI::TextBox&>(widget).text());
|
||||
};
|
||||
int text_width = Gfx::Font::default_font().width(value());
|
||||
auto size_value = attribute("size");
|
||||
auto size_value = attribute(HTML::AttributeNames::size);
|
||||
if (!size_value.is_null()) {
|
||||
bool ok;
|
||||
auto size = size_value.to_int(ok);
|
||||
|
|
|
@ -37,9 +37,9 @@ public:
|
|||
|
||||
virtual RefPtr<LayoutNode> create_layout_node(const StyleProperties* parent_style) const override;
|
||||
|
||||
String type() const { return attribute("type"); }
|
||||
String value() const { return attribute("value"); }
|
||||
String name() const { return attribute("name"); }
|
||||
String type() const { return attribute(HTML::AttributeNames::type); }
|
||||
String value() const { return attribute(HTML::AttributeNames::value); }
|
||||
String name() const { return attribute(HTML::AttributeNames::name); }
|
||||
};
|
||||
|
||||
template<>
|
||||
|
|
|
@ -40,9 +40,9 @@ public:
|
|||
|
||||
virtual void inserted_into(Node&) override;
|
||||
|
||||
String rel() const { return attribute("rel"); }
|
||||
String type() const { return attribute("type"); }
|
||||
String href() const { return attribute("href"); }
|
||||
String rel() const { return attribute(HTML::AttributeNames::rel); }
|
||||
String type() const { return attribute(HTML::AttributeNames::type); }
|
||||
String href() const { return attribute(HTML::AttributeNames::href); }
|
||||
|
||||
private:
|
||||
// ^ResourceClient
|
||||
|
|
|
@ -57,7 +57,7 @@ void HTMLScriptElement::children_changed()
|
|||
{
|
||||
HTMLElement::children_changed();
|
||||
|
||||
if (has_attribute("src"))
|
||||
if (has_attribute(HTML::AttributeNames::src))
|
||||
return;
|
||||
|
||||
StringBuilder builder;
|
||||
|
@ -82,7 +82,7 @@ void HTMLScriptElement::inserted_into(Node& new_parent)
|
|||
{
|
||||
HTMLElement::inserted_into(new_parent);
|
||||
|
||||
auto src = attribute("src");
|
||||
auto src = attribute(HTML::AttributeNames::src);
|
||||
if (src.is_null())
|
||||
return;
|
||||
|
||||
|
@ -133,12 +133,12 @@ void HTMLScriptElement::prepare_script(Badge<HTMLDocumentParser>)
|
|||
RefPtr<Document> parser_document = m_parser_document.ptr();
|
||||
m_parser_document = nullptr;
|
||||
|
||||
if (parser_document && !has_attribute("async")) {
|
||||
if (parser_document && !has_attribute(HTML::AttributeNames::async)) {
|
||||
m_non_blocking = true;
|
||||
}
|
||||
|
||||
auto source_text = child_text_content();
|
||||
if (!has_attribute("src") && source_text.is_empty())
|
||||
if (!has_attribute(HTML::AttributeNames::src) && source_text.is_empty())
|
||||
return;
|
||||
|
||||
if (!is_connected())
|
||||
|
@ -173,8 +173,8 @@ void HTMLScriptElement::prepare_script(Badge<HTMLDocumentParser>)
|
|||
|
||||
// FIXME: Check fetch options
|
||||
|
||||
if (has_attribute("src")) {
|
||||
auto src = attribute("src");
|
||||
if (has_attribute(HTML::AttributeNames::src)) {
|
||||
auto src = attribute(HTML::AttributeNames::src);
|
||||
if (src.is_empty()) {
|
||||
// FIXME: Fire an "error" event at the element and return
|
||||
ASSERT_NOT_REACHED();
|
||||
|
@ -205,11 +205,11 @@ void HTMLScriptElement::prepare_script(Badge<HTMLDocumentParser>)
|
|||
}
|
||||
|
||||
// FIXME: Check classic vs. module
|
||||
if (has_attribute("src") && has_attribute("defer") && m_parser_inserted && !has_attribute("async")) {
|
||||
if (has_attribute(HTML::AttributeNames::src) && has_attribute(HTML::AttributeNames::defer) && m_parser_inserted && !has_attribute(HTML::AttributeNames::async)) {
|
||||
document().add_script_to_execute_when_parsing_has_finished({}, *this);
|
||||
}
|
||||
|
||||
else if (has_attribute("src") && m_parser_inserted && !has_attribute("async")) {
|
||||
else if (has_attribute(HTML::AttributeNames::src) && m_parser_inserted && !has_attribute(HTML::AttributeNames::async)) {
|
||||
|
||||
document().set_pending_parsing_blocking_script({}, this);
|
||||
when_the_script_is_ready([this] {
|
||||
|
@ -217,11 +217,11 @@ void HTMLScriptElement::prepare_script(Badge<HTMLDocumentParser>)
|
|||
});
|
||||
}
|
||||
|
||||
else if (has_attribute("src") && !has_attribute("async") && !m_non_blocking) {
|
||||
else if (has_attribute(HTML::AttributeNames::src) && !has_attribute(HTML::AttributeNames::async) && !m_non_blocking) {
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
else if (has_attribute("src")) {
|
||||
else if (has_attribute(HTML::AttributeNames::src)) {
|
||||
m_preparation_time_document->add_script_to_execute_as_soon_as_possible({}, *this);
|
||||
}
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ void dump_tree(const LayoutNode& layout_node)
|
|||
|
||||
String identifier = "";
|
||||
if (layout_node.node() && is<Element>(*layout_node.node())) {
|
||||
auto id = to<Element>(*layout_node.node()).attribute("id");
|
||||
auto id = to<Element>(*layout_node.node()).attribute(HTML::AttributeNames::id);
|
||||
if (!id.is_empty()) {
|
||||
StringBuilder builder;
|
||||
builder.append('#');
|
||||
|
|
|
@ -388,7 +388,7 @@ static RefPtr<Document> create_image_document(const ByteBuffer& data, const URL&
|
|||
html_element->append_child(body_element);
|
||||
|
||||
auto image_element = create_element(document, "img");
|
||||
image_element->set_attribute("src", url.to_string());
|
||||
image_element->set_attribute(HTML::AttributeNames::src, url.to_string());
|
||||
body_element->append_child(image_element);
|
||||
|
||||
return document;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue