add class selectors

This commit is contained in:
Face
2025-07-30 19:34:10 +03:00
parent 49802fdcf6
commit af8afd6e5b
4 changed files with 68 additions and 11 deletions

View File

@@ -132,8 +132,8 @@ func get_element_styles_with_inheritance(element: HTMLElement, event: String = "
var styles = {}
styles.merge(parse_result.css_parser.stylesheet.get_styles_for_element(element.tag_name, event))
var class_names = extract_class_names_from_style(element)
styles.merge(parse_result.css_parser.stylesheet.get_styles_for_element(element.tag_name, event, class_names))
# Apply inline styles (higher priority) - force override CSS rules
var inline_style = element.get_attribute("style")
if inline_style.length() > 0:
@@ -159,7 +159,8 @@ func get_element_styles_internal(element: HTMLElement, event: String = "") -> Di
# Apply CSS rules
if parse_result.css_parser:
styles.merge(parse_result.css_parser.stylesheet.get_styles_for_element(element.tag_name, event))
var class_names = extract_class_names_from_style(element)
styles.merge(parse_result.css_parser.stylesheet.get_styles_for_element(element.tag_name, event, class_names))
# Apply inline styles (higher priority) - force override CSS rules
var inline_style = element.get_attribute("style")
@@ -198,6 +199,17 @@ func parse_inline_style_with_event(style_string: String, event: String = "") ->
return properties
func extract_class_names_from_style(element: HTMLElement) -> Array[String]:
var class_names: Array[String] = []
var style_attr = element.get_attribute("style")
if style_attr.length() > 0:
var style_tokens = style_attr.split(" ")
for token in style_tokens:
token = token.strip_edges()
if token.length() > 0 and not CSSParser.is_utility_class(token):
class_names.append(token)
return class_names
# Creates element from CURRENT xml parser node
func create_element() -> HTMLElement:
var element = HTMLElement.new(xml_parser.get_node_name())
@@ -230,7 +242,7 @@ func find_all_by_class(tag: String, the_class_name: String) -> Array[HTMLElement
var results: Array[HTMLElement] = []
for element in parse_result.all_elements:
if element.tag_name == tag and element.get_class() == the_class_name:
if element.tag_name == tag and element.get_class_name() == the_class_name:
results.append(element)
return results