1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 13:28:11 +00:00

LibWeb: Implement CSS.supports(string) function :^)

Websites being able to query whether we support a given CSS feature
should prevent them from loading unnecessary polyfills for things we
already support! Or at least, that's the nice theory. :^)
This commit is contained in:
Sam Atkins 2021-10-08 16:00:05 +01:00 committed by Andreas Kling
parent b1f8a73a05
commit bc0ef5f69d

View file

@ -79,12 +79,19 @@ JS_DEFINE_NATIVE_FUNCTION(CSSNamespace::supports)
return JS::Value(false);
} else {
// When the supports(conditionText) method is invoked with a single conditionText argument:
//
// If conditionText, parsed and evaluated as a <supports-condition>, would return true, return true.
//
// Otherwise, If conditionText, wrapped in parentheses and then parsed and evaluated as a <supports-condition>, would return true, return true.
//
// Otherwise, return false.
String supports_text = vm.argument(0).to_string(global_object);
if (vm.exception())
return {};
// If conditionText, parsed and evaluated as a <supports-condition>, would return true, return true.
if (auto supports = parse_css_supports({}, supports_text); supports && supports->matches())
return JS::Value(true);
// Otherwise, If conditionText, wrapped in parentheses and then parsed and evaluated as a <supports-condition>, would return true, return true.
if (auto supports = parse_css_supports({}, String::formatted("({})", supports_text)); supports && supports->matches())
return JS::Value(true);
// Otherwise, return false.
return JS::Value(false);
}
}