123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*
- * Copyright (c) 2020, Andreas Kling <andreas@ladybird.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #include <LibWeb/HTML/AttributeNames.h>
- namespace Web::HTML {
- namespace AttributeNames {
- #define __ENUMERATE_HTML_ATTRIBUTE(name) FlyString name;
- ENUMERATE_HTML_ATTRIBUTES
- #undef __ENUMERATE_HTML_ATTRIBUTE
- void initialize_strings()
- {
- static bool s_initialized = false;
- VERIFY(!s_initialized);
- #define __ENUMERATE_HTML_ATTRIBUTE(name) \
- name = #name##_fly_string;
- ENUMERATE_HTML_ATTRIBUTES
- #undef __ENUMERATE_HTML_ATTRIBUTE
- // NOTE: Special cases for C++ keywords.
- class_ = "class"_fly_string;
- for_ = "for"_fly_string;
- default_ = "default"_fly_string;
- char_ = "char"_fly_string;
- switch_ = "switch"_fly_string;
- // NOTE: Special cases for attributes with dashes in them.
- accept_charset = "accept-charset"_fly_string;
- http_equiv = "http-equiv"_fly_string;
- s_initialized = true;
- }
- }
- // https://html.spec.whatwg.org/#boolean-attribute
- bool is_boolean_attribute(FlyString const& attribute)
- {
- // NOTE: For web compatibility, this matches the list of attributes which Chromium considers to be booleans,
- // excluding attributes that are only used by Chromium itself:
- // https://source.chromium.org/chromium/chromium/src/+/460b7c003cf89fc9493e721701906f19e5f6a387:chrome/test/chromedriver/element_commands.cc;l=48-94
- return attribute.equals_ignoring_ascii_case(AttributeNames::allowfullscreen)
- || attribute.equals_ignoring_ascii_case(AttributeNames::async)
- || attribute.equals_ignoring_ascii_case(AttributeNames::autofocus)
- || attribute.equals_ignoring_ascii_case(AttributeNames::autoplay)
- || attribute.equals_ignoring_ascii_case(AttributeNames::checked)
- || attribute.equals_ignoring_ascii_case(AttributeNames::compact)
- || attribute.equals_ignoring_ascii_case(AttributeNames::controls)
- || attribute.equals_ignoring_ascii_case(AttributeNames::declare)
- || attribute.equals_ignoring_ascii_case(AttributeNames::default_)
- || attribute.equals_ignoring_ascii_case(AttributeNames::defaultchecked)
- || attribute.equals_ignoring_ascii_case(AttributeNames::defaultselected)
- || attribute.equals_ignoring_ascii_case(AttributeNames::defer)
- || attribute.equals_ignoring_ascii_case(AttributeNames::disabled)
- || attribute.equals_ignoring_ascii_case(AttributeNames::ended)
- || attribute.equals_ignoring_ascii_case(AttributeNames::formnovalidate)
- || attribute.equals_ignoring_ascii_case(AttributeNames::hidden)
- || attribute.equals_ignoring_ascii_case(AttributeNames::indeterminate)
- || attribute.equals_ignoring_ascii_case(AttributeNames::iscontenteditable)
- || attribute.equals_ignoring_ascii_case(AttributeNames::ismap)
- || attribute.equals_ignoring_ascii_case(AttributeNames::itemscope)
- || attribute.equals_ignoring_ascii_case(AttributeNames::loop)
- || attribute.equals_ignoring_ascii_case(AttributeNames::multiple)
- || attribute.equals_ignoring_ascii_case(AttributeNames::muted)
- || attribute.equals_ignoring_ascii_case(AttributeNames::nohref)
- || attribute.equals_ignoring_ascii_case(AttributeNames::nomodule)
- || attribute.equals_ignoring_ascii_case(AttributeNames::noresize)
- || attribute.equals_ignoring_ascii_case(AttributeNames::noshade)
- || attribute.equals_ignoring_ascii_case(AttributeNames::novalidate)
- || attribute.equals_ignoring_ascii_case(AttributeNames::nowrap)
- || attribute.equals_ignoring_ascii_case(AttributeNames::open)
- || attribute.equals_ignoring_ascii_case(AttributeNames::paused)
- || attribute.equals_ignoring_ascii_case(AttributeNames::playsinline)
- || attribute.equals_ignoring_ascii_case(AttributeNames::readonly)
- || attribute.equals_ignoring_ascii_case(AttributeNames::required)
- || attribute.equals_ignoring_ascii_case(AttributeNames::reversed)
- || attribute.equals_ignoring_ascii_case(AttributeNames::seeking)
- || attribute.equals_ignoring_ascii_case(AttributeNames::selected)
- || attribute.equals_ignoring_ascii_case(AttributeNames::switch_)
- || attribute.equals_ignoring_ascii_case(AttributeNames::truespeed)
- || attribute.equals_ignoring_ascii_case(AttributeNames::willvalidate);
- }
- }
|