2020-07-31 23:04:26 -03:00
/*
2021-04-28 17:46:44 -03:00
* Copyright ( c ) 2020 , the SerenityOS developers .
2020-07-31 23:04:26 -03:00
*
2021-04-22 05:24:48 -03:00
* SPDX - License - Identifier : BSD - 2 - Clause
2020-07-31 23:04:26 -03:00
*/
# include <LibWeb/HTML/HTMLFieldSetElement.h>
2022-09-30 12:21:34 -03:00
# include <LibWeb/HTML/HTMLLegendElement.h>
2022-08-28 08:42:07 -03:00
# include <LibWeb/HTML/Window.h>
2020-07-31 23:04:26 -03:00
namespace Web : : HTML {
2022-02-18 17:00:52 -03:00
HTMLFieldSetElement : : HTMLFieldSetElement ( DOM : : Document & document , DOM : : QualifiedName qualified_name )
2022-03-23 19:55:54 -03:00
: HTMLElement ( document , move ( qualified_name ) )
2020-07-31 23:04:26 -03:00
{
2022-09-03 13:43:24 -03:00
set_prototype ( & window ( ) . cached_web_prototype ( " HTMLFieldSetElement " ) ) ;
2020-07-31 23:04:26 -03:00
}
2022-03-14 16:21:51 -03:00
HTMLFieldSetElement : : ~ HTMLFieldSetElement ( ) = default ;
2022-09-30 12:21:34 -03:00
// https://html.spec.whatwg.org/multipage/form-elements.html#concept-fieldset-disabled
bool HTMLFieldSetElement : : is_disabled ( ) const
{
// A fieldset element is a disabled fieldset if it matches any of the following conditions:
// - Its disabled attribute is specified
if ( has_attribute ( AttributeNames : : disabled ) )
return true ;
// - It is a descendant of another fieldset element whose disabled attribute is specified, and is not a descendant of that fieldset element's first legend element child, if any.
for ( auto * fieldset_ancestor = first_ancestor_of_type < HTMLFieldSetElement > ( ) ; fieldset_ancestor ; fieldset_ancestor = fieldset_ancestor - > first_ancestor_of_type < HTMLFieldSetElement > ( ) ) {
if ( fieldset_ancestor - > has_attribute ( HTML : : AttributeNames : : disabled ) ) {
auto * first_legend_element_child = fieldset_ancestor - > first_child_of_type < HTMLLegendElement > ( ) ;
if ( ! first_legend_element_child | | ! is_descendant_of ( * first_legend_element_child ) )
return true ;
}
}
return false ;
}
2020-07-31 23:04:26 -03:00
}